From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web09.540.1662744106546702460 for ; Fri, 09 Sep 2022 10:21:46 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=VxrS8byP; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: michael.d.kinney@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662744106; x=1694280106; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=AaV9WVBBOQI9gyTUuvMAaTMxKKcJB6VnNWEoU61Lf1g=; b=VxrS8byPtA2YiUfkiQ91gteBawC3ZtGWNqCZQLXSPBbZG+JPgwE0/Ulj rR5LhDA4taSIKFpN/wDKEozCPJ3FaDMXrNNeqOY2Mm5GgzNvNXuiwLHek pTJX1FyQ+fkPO4fhReq0ADuK8kaCBnpS8rHqlX/LT3yoJsJ6bOTLoJLT5 y1IFAQO0uqFdE14q+tiiXMxEIXQhdDzTFDDLiRHYYSi6XONdo8u1fe/wj hkdUT6WnyWPpRCYbwlcZXK7BCsOynlbKLdqfxnc6Md6xNm23Rx+Hnmtoo x/5cHrOCFHf63pMrvvxvXi/fxfQKYr45oVmsOTFMmxVZguu9G/sCXuFva Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10465"; a="359253341" X-IronPort-AV: E=Sophos;i="5.93,303,1654585200"; d="scan'208";a="359253341" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2022 10:21:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,303,1654585200"; d="scan'208";a="566439289" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga003.jf.intel.com with ESMTP; 09 Sep 2022 10:21:46 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Sep 2022 10:21:45 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 9 Sep 2022 10:21:45 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Fri, 9 Sep 2022 10:21:45 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.169) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Fri, 9 Sep 2022 10:21:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IlBMQEl4R0afdqXglD9Ko8DaIWXcIkt81VhZ6sjQeE5ijgOz7kHXfYCqJIYIVSU6xoeDtqpXIG2+3OSBVkTf7aGAC3hCCC+WsD80iMMCaBBxUCQzK/rBrBtrJQ8pm4KUrEplzgvg/xHVZk/Wwz+v532szBUMraHq0qiPkLqMZqjldtYbrpuEUDngTgsaROAdzvY+4FsD5Ns6JUtEOhHuT2ALoFsg4bBGWDOJL2xn54JrYRCTsWP7J0vZUq3/+UIlC2QoUaSWEadu76+JtsIhVnsdH4SYIYmlQGpXrswhUv6ENLY8OsxHcBmJUJtTQcoE+0J/bYqMQw/MuZMuylwLfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AaV9WVBBOQI9gyTUuvMAaTMxKKcJB6VnNWEoU61Lf1g=; b=gXFrABY+ZB1DNaUpSzfyS8HtfzYfhCe7z0pF43YaOWm3/176YTONRlmOr6loZdmCMcP0aB9ZIjAyAr/xnoBYdING9GDvKVCGx6xy6g1JRD/WedVIDHf6LpbecyCmhCLqpKpObgbXYhYPgs2MF3nUTFpAxYzGON2t9RTvTu5DTUwiVw9Wj3nZUJw7+kaTPsbYpwRG+I2KPQfMqMvaGBdz97weFOmIV+I4zUP9Ih5ZStBNljhEy79m6itly817AzfrSSgoCAb9L9piER2oThycHHgPRsOvKU+gAgiSP4l8ZORKg9iJBjUISZr7rMSU+kL/e7w1ZmaeBahAw9KE62fBwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by SA0PR11MB4589.namprd11.prod.outlook.com (2603:10b6:806:9a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5612.14; Fri, 9 Sep 2022 17:21:28 +0000 Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::7890:343e:99cb:21c8]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::7890:343e:99cb:21c8%7]) with mapi id 15.20.5612.020; Fri, 9 Sep 2022 17:21:28 +0000 From: "Michael D Kinney" To: Chao Li , "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Gao, Liming" , "Liu, Zhiguang" Subject: Re: [PATCH v1 24/34] MdePkg/BaseCacheMaintenanceLib: LoongArch cache maintenance implementation. Thread-Topic: [PATCH v1 24/34] MdePkg/BaseCacheMaintenanceLib: LoongArch cache maintenance implementation. Thread-Index: AQHYwz6++ibcZMDgs02Pgb97lcuHzq3XWofw Date: Fri, 9 Sep 2022 17:21:28 +0000 Message-ID: References: <20220908045147.1191782-1-lichao@loongson.cn> In-Reply-To: <20220908045147.1191782-1-lichao@loongson.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB4929:EE_|SA0PR11MB4589:EE_ x-ms-office365-filtering-correlation-id: 4415e64d-dc0e-4e38-4ead-08da9287baf3 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: EuRiJKURfjRrRdVc+rZnXhE5pZdqIMZOXEJfo/8tXGDQq/X4cZxbLu7O7OZfxpPVEOXP70CF8dXszvL/oNWl19f83xOHeADop74/IJK60l2duXj1gZIxzVmad60Ov7H31l5uwh8kKZj5zzDW1rpHe6JZcJ/6t764MZSv9YqlXdCmn5bW4bsWCropwOGuDw7X6tytSqR9WMN7UvLSdvIsvwRkTDfjCphIy2+sDPMzEp4fx1HO2qSxxfHkMrs2WVv4K9aOat7azTNG+7R0WYPKCecboUWRw7tv93bNv6i4WjgDhYiXCA839MoSPtpldVLECtXz1O3TcxIZTrCPq9wcZj9xo51GZ1ackzizgFyF+ztRr44Kuymyd4SLaPfGK0DFqv0esNpARbc1VuX9j0Rwy/Ym0dL+3q8Nbki7JIIDP+sd9yEke0Mfvbw+ooj0xoI4sFkxopCrv+8B1AAHYvERjjBgscVbkek6mRG66XCwKJQEmQI2n0ZM4481F+w+XS74G/j/dNemJ8n0lht9BS8SlIdByDH7bAug6xjqIdQ2iqLsa+5HGI8JSUIrwQu4Ei9kIHjA420S8erXz19+BLis6DwiCFCsOBPQ04vZwI+IBlppL41IaQkawFzZHUgftJeq3Qqn0VIVYr5XSu7+NZA6/2M1f8kr5Kg5d+Se/+kxSRR3jk6WOYqFCg8GOErtyr+lU0WoiwjgapOTGdOFjZ3FVnnsV0j0o9ZC1KnCPOV8rhHVXgV68N65OAoIUhO02AUmpzrXg0+0sM7IuL9W06bgOQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4929.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(376002)(39860400002)(366004)(346002)(396003)(86362001)(38100700002)(8676002)(66476007)(66946007)(66556008)(64756008)(33656002)(122000001)(4326008)(76116006)(66446008)(38070700005)(82960400001)(83380400001)(7696005)(53546011)(9686003)(71200400001)(26005)(478600001)(6506007)(186003)(41300700001)(107886003)(55016003)(316002)(54906003)(110136005)(30864003)(2906002)(52536014)(5660300002)(8936002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bWoxc3NjNkhwR3ZaL2VaOElJVlpDSHdpNlNwN3ZISXpMbVJacnROUit3Y2I5?= =?utf-8?B?T1JFSkd5N2U1ZTdIWDZZWUF2Y09YKzNMTk9NS0hZcDJLUmxmMWtzeUFFRlJu?= =?utf-8?B?cWMzUzJCVDN1S2pPUWFMV0pGWXk3NnlHRDJ5dWJDYWdGM1hVR2VCQ3Ixa3F2?= =?utf-8?B?aDBDRjY4VksydUgycFhXSVVxUzkweEw2R3FsSzRyU0Z6TGxoeXRHRDJFTVhq?= =?utf-8?B?SE5FTmtZdGtzV2N5WnAxT2tOUVZudUpWaFBOQVJZK1dPbkRPaDNFZVF6ZkJj?= =?utf-8?B?ZDJiY3FUTGNxVy8zRmNhbHZKdGVIdUJHcHhaVjRUUHN5M01xVU9JQ3gyRjFW?= =?utf-8?B?bHVVWm9HUXJTelZ3Qzc5dlZSOHRUaEtvK1dmV1ZNNXQ1dGY2aitpQmRCZ3Rk?= =?utf-8?B?MlVuQjJ0Wm1yZ1ZuSW1KNkt2THhhZnQ5L2NILzh1K0dpNEFWZWhHU3JXd01n?= =?utf-8?B?RkxhNnlXcFhDSUVldHBWVGQzNVJMb2l5ZEh1NzdjaXF2V05VcWYwUGM5ZU9v?= =?utf-8?B?MHduYkcvNDRvL2dVd3JNY1NQVm5qcnUvSURHYitER2JQclVUeEtQWnNuL1k0?= =?utf-8?B?dmVCamFZamsvc0VMd0M3QU1Lc3JVUkl2WFFPR0NhWGNiYStybHZ6UGFPT0pD?= =?utf-8?B?Zk1rSHdvU3NDenRuTGRsQ21TSktOYmJTSlVmSmh3OE4wSkpyRkhBemVFT0o2?= =?utf-8?B?T0phZllyMkhZRXpBYTBEcXBaNDFmK0NEQ1I2OEUrbUt6aDBnWGRVREkrWlNM?= =?utf-8?B?YzhTbXZ3cHRWS2UxdVlhUzBkczMrc1BoaXdFbzdHWjJwaU9wSFFiSXNndkE2?= =?utf-8?B?cklveGxibTZjMVNBNVJjdUlSQy9ycnZLSDZuRmpFZ256dSs0NDZKU29OY1d1?= =?utf-8?B?b3JFTTBkTUJZVW5SYTcyZ21kd0FzWGg5UHB3dkJzVGxqaDg0d08rZ0tZS04r?= =?utf-8?B?MHp3Zk4rZjJuYXBDVldJUnRiMTZiVEdDTFRicTQ5UnpqN3pNa2dRZ29FY3pP?= =?utf-8?B?a2l6NFJScHBBNlNVQ1ZXWS9kbi92YlZIRUNjWXVHU2FKcmNxUjB4MVZUbjhR?= =?utf-8?B?Q0JLSTI4VEdNS1RkSitWWTJMOTFPSzZjU24vQ3JZaUlucG9YZWR5MklKNEpw?= =?utf-8?B?SDhxYjdOcXF1Y2YxZjZnWk90b1pEVys1NkJGcUQwZlVsRzVkbHVVNEFmbHIv?= =?utf-8?B?QzRTU2crcnYydlhITUU1aU8rU1VjM1YxRXNka2RJbDNJTm5Wcm1zVW95aTlh?= =?utf-8?B?bVNLcnhHSThadlE1SXFBdHlYOGI5aHQramlDMFBSSjJRSWFjS1RoMmN2OERt?= =?utf-8?B?Z3lPcjZkLzR0N3E0aGpUdGJuZ2w2a1piUmF1REVaS0gwQWtMeitKL1oxYVRa?= =?utf-8?B?Ujliam9meVRvaVFucFNlZGdOVE9Mczg0MnFzTldUcC8xRHBuRmM4ZnRpUzc2?= =?utf-8?B?NURTVzRGak1pc1IyaVh3Q2dncUtRNmxBaHBQMWUvQlRsU01rc2U0akErM0lM?= =?utf-8?B?WWovU2R4QjlGakkyS0JwclpKL2h3SVY1ZzFJcEY3RERVVjhwclBLNDVtRG9N?= =?utf-8?B?ajBmMmR1d1VYWXJmbTIzaUFzVk8xNWFzRzhpUGZ3b2plTUlkMTdWU0JweTd2?= =?utf-8?B?bWxmNHl5WFQyRE9JQkgwakV0T1BHRHBUamJhcDBJbTdHbFpHYTlPY3kzSDBH?= =?utf-8?B?YVNON0Z3bTYxY1dEOERiSDcyMkJGSEE5eGRLa0FkVUwzSldtVWY3K1BOeDFs?= =?utf-8?B?dGk2NzAvblN5UUxyNjNGdWVabzdKNEdMQ3dEcjdUREM4UU1pcWdvQThiNVhG?= =?utf-8?B?WCtYR09EZGVNWjljYmRDR2Z3UXhmazFEQ1JrQmIxdUt4bXpBRGlFL0RrSTZV?= =?utf-8?B?akh4TnBuVmUzSmx1UWM0K2RDNUNZcTRya1F1ZEZvc2p3ZXJNOXJSK2NDK2Vm?= =?utf-8?B?dWJvcXlRRysxbEV2S0tHVEp6eVh0VWJmamVQaGhLc012eERDV2Y0RUFLa2Jt?= =?utf-8?B?UnNRVjBOUTRMQjZPRUJaZVBmaDk5alZCbTNaTnJRcW84SUNvWWRGbGVFTUNa?= =?utf-8?B?WjV2M29vWk5MRFZ4UVkwWnVWZmZHVWlIblVMM1BPNmFMNXFyL1JFeVBFc2xv?= =?utf-8?B?MXhicGwrQW1rSDk0YkNmNHF0K3RlaVByclBVNVZaYTMzR043S3IwVWkrb1Zq?= =?utf-8?B?VkE9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4415e64d-dc0e-4e38-4ead-08da9287baf3 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2022 17:21:28.0468 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 0LWCMomQCT2gRrH6FbdYze9gMu5wMtW3WrQ2pXJQH96RQ64rBq7brTcF+REX4+J0ab8sI/DBDQrGXn+jCnETdBK/H6IonnbxlUcU/gzKXIE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4589 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmVjb21tZW5kIGF2b2lkaW5nIHVzZSBvZiBpbmxpbmUgYXNzZW1ibHkuICBDYW4geW91IGNvbnZl cnQgdG8gLlM/DQoNCk1pa2UNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t OiBDaGFvIExpIDxsaWNoYW9AbG9vbmdzb24uY24+DQo+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVt YmVyIDcsIDIwMjIgOTo1MiBQTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEtp bm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IEdhbywgTGltaW5n IDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBMaXUsIFpoaWd1YW5nDQo+IDx6aGlndWFuZy5s aXVAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjEgMjQvMzRdIE1kZVBrZy9CYXNlQ2Fj aGVNYWludGVuYW5jZUxpYjogTG9vbmdBcmNoIGNhY2hlIG1haW50ZW5hbmNlIGltcGxlbWVudGF0 aW9uLg0KPiANCj4gSW1wbGVtZW50IExvb25nQXJjaCBjYWNoZSBtYWludGVuYW5jZSBmdW5jdGlv bnMgaW4NCj4gQmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIuDQo+IA0KPiBDYzogTWljaGFlbCBEIEtp bm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IENjOiBMaW1pbmcgR2FvIDxnYW9s aW1pbmdAYnlvc29mdC5jb20uY24+DQo+IENjOiBaaGlndWFuZyBMaXUgPHpoaWd1YW5nLmxpdUBp bnRlbC5jb20+DQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBDaGFvIExpIDxsaWNoYW9AbG9vbmdzb24u Y24+DQo+IC0tLQ0KPiAgLi4uL0Jhc2VDYWNoZU1haW50ZW5hbmNlTGliLmluZiAgICAgICAgICAg ICAgIHwgICA0ICsNCj4gIC4uLi9CYXNlQ2FjaGVNYWludGVuYW5jZUxpYi9Mb29uZ0FyY2hDYWNo ZS5jICB8IDI1MiArKysrKysrKysrKysrKysrKysNCj4gIDIgZmlsZXMgY2hhbmdlZCwgMjU2IGlu c2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNZGVQa2cvTGlicmFyeS9CYXNlQ2Fj aGVNYWludGVuYW5jZUxpYi9Mb29uZ0FyY2hDYWNoZS5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRl UGtnL0xpYnJhcnkvQmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIvQmFzZUNhY2hlTWFpbnRlbmFuY2VM aWIuaW5mDQo+IGIvTWRlUGtnL0xpYnJhcnkvQmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIvQmFzZUNh Y2hlTWFpbnRlbmFuY2VMaWIuaW5mDQo+IGluZGV4IDMzMTE0MjQzZDUuLmUxMDM3MDViMmMgMTAw NjQ0DQo+IC0tLSBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VDYWNoZU1haW50ZW5hbmNlTGliL0Jhc2VD YWNoZU1haW50ZW5hbmNlTGliLmluZg0KPiArKysgYi9NZGVQa2cvTGlicmFyeS9CYXNlQ2FjaGVN YWludGVuYW5jZUxpYi9CYXNlQ2FjaGVNYWludGVuYW5jZUxpYi5pbmYNCj4gQEAgLTcsNiArNyw3 IEBADQo+ICAjICBDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiAgIyAgUG9ydGlvbnMgY29weXJpZ2h0IChj KSAyMDA4IC0gMjAwOSwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gDQo+ ICAjICBDb3B5cmlnaHQgKGMpIDIwMjAsIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVs b3BtZW50IExQLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gDQo+ICsjICBDb3B5cmlnaHQg KGMpIDIwMjIsIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZC4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiAgIw0KPiANCj4gICMgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0KPiAgIw0KPiANCj4gQEAgLTQ1LDYgKzQ2 LDkgQEANCj4gIFtTb3VyY2VzLlJJU0NWNjRdDQo+IA0KPiAgICBSaXNjVkNhY2hlLmMNCj4gDQo+ IA0KPiANCj4gK1tTb3VyY2VzLkxPT05HQVJDSDY0XQ0KPiANCj4gKyAgTG9vbmdBcmNoQ2FjaGUu Yw0KPiANCj4gKw0KPiANCj4gIFtQYWNrYWdlc10NCj4gDQo+ICAgIE1kZVBrZy9NZGVQa2cuZGVj DQo+IA0KPiANCj4gDQo+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9CYXNlQ2FjaGVNYWlu dGVuYW5jZUxpYi9Mb29uZ0FyY2hDYWNoZS5jIGIvTWRlUGtnL0xpYnJhcnkvQmFzZUNhY2hlTWFp bnRlbmFuY2VMaWIvTG9vbmdBcmNoQ2FjaGUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwMDAwLi4wNjdiNWRlZjU1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRl UGtnL0xpYnJhcnkvQmFzZUNhY2hlTWFpbnRlbmFuY2VMaWIvTG9vbmdBcmNoQ2FjaGUuYw0KPiBA QCAtMCwwICsxLDI1MiBAQA0KPiArLyoqIEBmaWxlDQo+IA0KPiArICBDYWNoZSBNYWludGVuYW5j ZSBGdW5jdGlvbnMgZm9yIExvb25nQXJjaC4NCj4gDQo+ICsgIExvb25nQXJjaCBjYWNoZSBtYWlu dGVuYW5jZSBmdW5jdGlvbnMgaGFzIG5vdCB5ZXQgYmVlbiBjb21wbGV0ZWQsIGFuZCB3aWxsIGFk ZGVkIGluIGxhdGVyLg0KPiANCj4gKyAgRnVuY3Rpb25zIGFyZSBudWxsIGZ1bmN0aW9ucyBub3cu DQo+IA0KPiArDQo+IA0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjIsIExvb25nc29uIFRlY2hub2xv Z3kgQ29ycG9yYXRpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiAr DQo+IA0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gKw0KPiANCj4gKy8vDQo+IA0KPiArLy8gSW5jbHVk ZSBjb21tb24gaGVhZGVyIGZpbGUgZm9yIHRoaXMgbW9kdWxlLg0KPiANCj4gKy8vDQo+IA0KPiAr I2luY2x1ZGUgPEJhc2UuaD4NCj4gDQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ IA0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gDQo+ICsNCj4gDQo+ICsvKioN Cj4gDQo+ICsgIEludmFsaWRhdGVzIHRoZSBlbnRpcmUgaW5zdHJ1Y3Rpb24gY2FjaGUgaW4gY2Fj aGUgY29oZXJlbmN5IGRvbWFpbiBvZiB0aGUNCj4gDQo+ICsgIGNhbGxpbmcgQ1BVLg0KPiANCj4g Kw0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtJbnZhbGlk YXRlSW5zdHJ1Y3Rpb25DYWNoZSAoDQo+IA0KPiArICBWT0lEDQo+IA0KPiArICApDQo+IA0KPiAr ew0KPiANCj4gKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKA0KPiANCj4gKyAgICAgImliYXIgMFxu Ig0KPiANCj4gKyAgICAgOg0KPiANCj4gKyAgICAgOg0KPiANCj4gKyAgKTsNCj4gDQo+ICt9DQo+ IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBJbnZhbGlkYXRlcyBhIHJhbmdlIG9mIGluc3Ry dWN0aW9uIGNhY2hlIGxpbmVzIGluIHRoZSBjYWNoZSBjb2hlcmVuY3kgZG9tYWluDQo+IA0KPiAr ICBvZiB0aGUgY2FsbGluZyBDUFUuDQo+IA0KPiArDQo+IA0KPiArICBJbnZhbGlkYXRlcyB0aGUg aW5zdHJ1Y3Rpb24gY2FjaGUgbGluZXMgc3BlY2lmaWVkIGJ5IEFkZHJlc3MgYW5kIExlbmd0aC4g SWYNCj4gDQo+ICsgIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSBjYWNoZSBsaW5lIGJvdW5k YXJ5LCB0aGVuIGVudGlyZSBpbnN0cnVjdGlvbg0KPiANCj4gKyAgY2FjaGUgbGluZSBjb250YWlu aW5nIEFkZHJlc3MgaXMgaW52YWxpZGF0ZWQuIElmIEFkZHJlc3MgKyBMZW5ndGggaXMgbm90DQo+ IA0KPiArICBhbGlnbmVkIG9uIGEgY2FjaGUgbGluZSBib3VuZGFyeSwgdGhlbiB0aGUgZW50aXJl IGluc3RydWN0aW9uIGNhY2hlIGxpbmUNCj4gDQo+ICsgIGNvbnRhaW5pbmcgQWRkcmVzcyArIExl bmd0aCAtMSBpcyBpbnZhbGlkYXRlZC4gVGhpcyBmdW5jdGlvbiBtYXkgY2hvb3NlIHRvDQo+IA0K PiArICBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgaW5zdHJ1Y3Rpb24gY2FjaGUgaWYgdGhhdCBpcyBt b3JlIGVmZmljaWVudCB0aGFuDQo+IA0KPiArICBpbnZhbGlkYXRpbmcgdGhlIHNwZWNpZmllZCBy YW5nZS4gSWYgTGVuZ3RoIGlzIDAsIHRoZSBubyBpbnN0cnVjdGlvbiBjYWNoZQ0KPiANCj4gKyAg bGluZXMgYXJlIGludmFsaWRhdGVkLiBBZGRyZXNzIGlzIHJldHVybmVkLg0KPiANCj4gKw0KPiAN Cj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBBZGRyZXNzICsg MSksIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW1baW5dICBBZGRyZXNz IFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIGNhY2hlIGxpbmVzIHRvDQo+IA0K PiArICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZS4gSWYgdGhlIENQVSBpcyBpbiBhIHBoeXNp Y2FsIGFkZHJlc3NpbmcgbW9kZSwgdGhlbg0KPiANCj4gKyAgICAgICAgICAgICAgICAgIEFkZHJl c3MgaXMgYSBwaHlzaWNhbCBhZGRyZXNzLiBJZiB0aGUgQ1BVIGlzIGluIGEgdmlydHVhbA0KPiAN Cj4gKyAgICAgICAgICAgICAgICAgIGFkZHJlc3NpbmcgbW9kZSwgdGhlbiBBZGRyZXNzIGlzIGEg dmlydHVhbCBhZGRyZXNzLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtW2luXSAgTGVuZ3RoICBU aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGludmFsaWRhdGUgZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gY2Fj aGUuDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dXJuIEFkZHJlc3MuDQo+IA0KPiArDQo+IA0KPiAr KiovDQo+IA0KPiArVk9JRCAqDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArSW52YWxpZGF0ZUluc3Ry dWN0aW9uQ2FjaGVSYW5nZSAoDQo+IA0KPiArICBJTiAgICAgICBWT0lEICAgKkFkZHJlc3MsDQo+ IA0KPiArICBJTiAgICAgICBVSU5UTiAgTGVuZ3RoDQo+IA0KPiArICApDQo+IA0KPiArew0KPiAN Cj4gKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKA0KPiANCj4gKyAgICAgImliYXIgMFxuIg0KPiAN Cj4gKyAgICAgOg0KPiANCj4gKyAgICAgOg0KPiANCj4gKyAgKTsNCj4gDQo+ICsgIHJldHVybiBB ZGRyZXNzOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFdyaXRlcyBC YWNrIGFuZCBJbnZhbGlkYXRlcyB0aGUgZW50aXJlIGRhdGEgY2FjaGUgaW4gY2FjaGUgY29oZXJl bmN5IGRvbWFpbg0KPiANCj4gKyAgb2YgdGhlIGNhbGxpbmcgQ1BVLg0KPiANCj4gKw0KPiANCj4g KyAgV3JpdGVzIEJhY2sgYW5kIEludmFsaWRhdGVzIHRoZSBlbnRpcmUgZGF0YSBjYWNoZSBpbiBj YWNoZSBjb2hlcmVuY3kgZG9tYWluDQo+IA0KPiArICBvZiB0aGUgY2FsbGluZyBDUFUuIFRoaXMg ZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IGFsbCBkaXJ0eSBjYWNoZSBsaW5lcyBhcmUNCj4gDQo+ ICsgIHdyaXR0ZW4gYmFjayB0byBzeXN0ZW0gbWVtb3J5LCBhbmQgYWxzbyBpbnZhbGlkYXRlcyBh bGwgdGhlIGRhdGEgY2FjaGUgbGluZXMNCj4gDQo+ICsgIGluIHRoZSBjYWNoZSBjb2hlcmVuY3kg ZG9tYWluIG9mIHRoZSBjYWxsaW5nIENQVS4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtW T0lEDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArV3JpdGVCYWNrSW52YWxpZGF0ZURhdGFDYWNoZSAo DQo+IA0KPiArICBWT0lEDQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgREVCVUcgKChE RUJVR19FUlJPUiwgIiVhOiBOb3QgY3VycmVudGx5IGltcGxlbWVudGVkIG9uIExvb25nQXJjaC5c biIsIF9fRlVOQ1RJT05fXykpOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ ICsgIFdyaXRlcyBCYWNrIGFuZCBJbnZhbGlkYXRlcyBhIHJhbmdlIG9mIGRhdGEgY2FjaGUgbGlu ZXMgaW4gdGhlIGNhY2hlDQo+IA0KPiArICBjb2hlcmVuY3kgZG9tYWluIG9mIHRoZSBjYWxsaW5n IENQVS4NCj4gDQo+ICsNCj4gDQo+ICsgIFdyaXRlcyBCYWNrIGFuZCBJbnZhbGlkYXRlIHRoZSBk YXRhIGNhY2hlIGxpbmVzIHNwZWNpZmllZCBieSBBZGRyZXNzIGFuZA0KPiANCj4gKyAgTGVuZ3Ro LiBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgY2FjaGUgbGluZSBib3VuZGFyeSwgdGhl biBlbnRpcmUgZGF0YQ0KPiANCj4gKyAgY2FjaGUgbGluZSBjb250YWluaW5nIEFkZHJlc3MgaXMg d3JpdHRlbiBiYWNrIGFuZCBpbnZhbGlkYXRlZC4gSWYgQWRkcmVzcyArDQo+IA0KPiArICBMZW5n dGggaXMgbm90IGFsaWduZWQgb24gYSBjYWNoZSBsaW5lIGJvdW5kYXJ5LCB0aGVuIHRoZSBlbnRp cmUgZGF0YSBjYWNoZQ0KPiANCj4gKyAgbGluZSBjb250YWluaW5nIEFkZHJlc3MgKyBMZW5ndGgg LTEgaXMgd3JpdHRlbiBiYWNrIGFuZCBpbnZhbGlkYXRlZC4gVGhpcw0KPiANCj4gKyAgZnVuY3Rp b24gbWF5IGNob29zZSB0byB3cml0ZSBiYWNrIGFuZCBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgZGF0 YSBjYWNoZSBpZg0KPiANCj4gKyAgdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHdyaXRpbmcg YmFjayBhbmQgaW52YWxpZGF0aW5nIHRoZSBzcGVjaWZpZWQNCj4gDQo+ICsgIHJhbmdlLiBJZiBM ZW5ndGggaXMgMCwgdGhlIG5vIGRhdGEgY2FjaGUgbGluZXMgYXJlIHdyaXR0ZW4gYmFjayBhbmQN Cj4gDQo+ICsgIGludmFsaWRhdGVkLiBBZGRyZXNzIGlzIHJldHVybmVkLg0KPiANCj4gKw0KPiAN Cj4gKyAgSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiAoTUFYX0FERFJFU1MgLSBBZGRyZXNzICsg MSksIHRoZW4gQVNTRVJUKCkuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW1baW5dICBBZGRyZXNz IFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgY2FjaGUgbGluZXMgdG8gd3JpdGUgYmFjayBh bmQNCj4gDQo+ICsgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlLiBJZiB0aGUgQ1BVIGlzIGlu IGEgcGh5c2ljYWwgYWRkcmVzc2luZyBtb2RlLCB0aGVuDQo+IA0KPiArICAgICAgICAgICAgICAg ICAgQWRkcmVzcyBpcyBhIHBoeXNpY2FsIGFkZHJlc3MuIElmIHRoZSBDUFUgaXMgaW4gYSB2aXJ0 dWFsDQo+IA0KPiArICAgICAgICAgICAgICAgICAgYWRkcmVzc2luZyBtb2RlLCB0aGVuIEFkZHJl c3MgaXMgYSB2aXJ0dWFsIGFkZHJlc3MuDQo+IA0KPiArICBAcGFyYW1baW5dICBMZW5ndGggIFRo ZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgYmFjayBhbmQgaW52YWxpZGF0ZSBmcm9tIHRoZQ0K PiANCj4gKyAgICAgICAgICAgICAgICAgIGRhdGEgY2FjaGUuDQo+IA0KPiArDQo+IA0KPiArICBA cmV0dXJuIEFkZHJlc3Mgb2YgY2FjaGUgaW52YWxpZGF0aW9uLg0KPiANCj4gKw0KPiANCj4gKyoq Lw0KPiANCj4gK1ZPSUQgKg0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1dyaXRlQmFja0ludmFsaWRh dGVEYXRhQ2FjaGVSYW5nZSAoDQo+IA0KPiArICBJTiAgICAgIFZPSUQgICAqQWRkcmVzcywNCj4g DQo+ICsgIElOICAgICAgVUlOVE4gIExlbmd0aA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ ICsgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCBv biBMb29uZ0FyY2guXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gDQo+ICsgIHJldHVybiBBZGRyZXNz Ow0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFdyaXRlcyBCYWNrIHRo ZSBlbnRpcmUgZGF0YSBjYWNoZSBpbiBjYWNoZSBjb2hlcmVuY3kgZG9tYWluIG9mIHRoZSBjYWxs aW5nDQo+IA0KPiArICBDUFUuDQo+IA0KPiArDQo+IA0KPiArICBXcml0ZXMgQmFjayB0aGUgZW50 aXJlIGRhdGEgY2FjaGUgaW4gY2FjaGUgY29oZXJlbmN5IGRvbWFpbiBvZiB0aGUgY2FsbGluZw0K PiANCj4gKyAgQ1BVLiBUaGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBhbGwgZGlydHkgY2Fj aGUgbGluZXMgYXJlIHdyaXR0ZW4gYmFjayB0bw0KPiANCj4gKyAgc3lzdGVtIG1lbW9yeS4gVGhp cyBmdW5jdGlvbiBtYXkgYWxzbyBpbnZhbGlkYXRlIGFsbCB0aGUgZGF0YSBjYWNoZSBsaW5lcyBp bg0KPiANCj4gKyAgdGhlIGNhY2hlIGNvaGVyZW5jeSBkb21haW4gb2YgdGhlIGNhbGxpbmcgQ1BV Lg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtFRklBUEkNCj4gDQo+ ICtXcml0ZUJhY2tEYXRhQ2FjaGUgKA0KPiANCj4gKyAgVk9JRA0KPiANCj4gKyAgKQ0KPiANCj4g K3sNCj4gDQo+ICsgIFdyaXRlQmFja0ludmFsaWRhdGVEYXRhQ2FjaGUgKCk7DQo+IA0KPiArfQ0K PiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgV3JpdGVzIEJhY2sgYSByYW5nZSBvZiBkYXRh IGNhY2hlIGxpbmVzIGluIHRoZSBjYWNoZSBjb2hlcmVuY3kgZG9tYWluIG9mIHRoZQ0KPiANCj4g KyAgY2FsbGluZyBDUFUuDQo+IA0KPiArDQo+IA0KPiArICBXcml0ZXMgQmFjayB0aGUgZGF0YSBj YWNoZSBsaW5lcyBzcGVjaWZpZWQgYnkgQWRkcmVzcyBhbmQgTGVuZ3RoLiBJZiBBZGRyZXNzDQo+ IA0KPiArICBpcyBub3QgYWxpZ25lZCBvbiBhIGNhY2hlIGxpbmUgYm91bmRhcnksIHRoZW4gZW50 aXJlIGRhdGEgY2FjaGUgbGluZQ0KPiANCj4gKyAgY29udGFpbmluZyBBZGRyZXNzIGlzIHdyaXR0 ZW4gYmFjay4gSWYgQWRkcmVzcyArIExlbmd0aCBpcyBub3QgYWxpZ25lZCBvbiBhDQo+IA0KPiAr ICBjYWNoZSBsaW5lIGJvdW5kYXJ5LCB0aGVuIHRoZSBlbnRpcmUgZGF0YSBjYWNoZSBsaW5lIGNv bnRhaW5pbmcgQWRkcmVzcyArDQo+IA0KPiArICBMZW5ndGggLTEgaXMgd3JpdHRlbiBiYWNrLiBU aGlzIGZ1bmN0aW9uIG1heSBjaG9vc2UgdG8gd3JpdGUgYmFjayB0aGUgZW50aXJlDQo+IA0KPiAr ICBkYXRhIGNhY2hlIGlmIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB3cml0aW5nIGJhY2sg dGhlIHNwZWNpZmllZCByYW5nZS4NCj4gDQo+ICsgIElmIExlbmd0aCBpcyAwLCB0aGUgbm8gZGF0 YSBjYWNoZSBsaW5lcyBhcmUgd3JpdHRlbiBiYWNrLiBUaGlzIGZ1bmN0aW9uIG1heQ0KPiANCj4g KyAgYWxzbyBpbnZhbGlkYXRlIGFsbCB0aGUgZGF0YSBjYWNoZSBsaW5lcyBpbiB0aGUgc3BlY2lm aWVkIHJhbmdlIG9mIHRoZSBjYWNoZQ0KPiANCj4gKyAgY29oZXJlbmN5IGRvbWFpbiBvZiB0aGUg Y2FsbGluZyBDUFUuIEFkZHJlc3MgaXMgcmV0dXJuZWQuDQo+IA0KPiArDQo+IA0KPiArICBJZiBM ZW5ndGggaXMgZ3JlYXRlciB0aGFuIChNQVhfQUREUkVTUyAtIEFkZHJlc3MgKyAxKSwgdGhlbiBB U1NFUlQoKS4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgVGhlIGJhc2Ug YWRkcmVzcyBvZiB0aGUgZGF0YSBjYWNoZSBsaW5lcyB0byB3cml0ZSBiYWNrLiBJZg0KPiANCj4g KyAgICAgICAgICAgICAgICAgIHRoZSBDUFUgaXMgaW4gYSBwaHlzaWNhbCBhZGRyZXNzaW5nIG1v ZGUsIHRoZW4gQWRkcmVzcyBpcyBhDQo+IA0KPiArICAgICAgICAgICAgICAgICAgcGh5c2ljYWwg YWRkcmVzcy4gSWYgdGhlIENQVSBpcyBpbiBhIHZpcnR1YWwgYWRkcmVzc2luZw0KPiANCj4gKyAg ICAgICAgICAgICAgICAgIG1vZGUsIHRoZW4gQWRkcmVzcyBpcyBhIHZpcnR1YWwgYWRkcmVzcy4N Cj4gDQo+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgVGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0 ZSBiYWNrIGZyb20gdGhlIGRhdGEgY2FjaGUuDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dXJuIEFk ZHJlc3Mgb2YgY2FjaGUgd3JpdHRlbiBpbiBtYWluIG1lbW9yeS4NCj4gDQo+ICsNCj4gDQo+ICsq Ki8NCj4gDQo+ICtWT0lEICoNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtXcml0ZUJhY2tEYXRhQ2Fj aGVSYW5nZSAoDQo+IA0KPiArICBJTiAgICAgIFZPSUQgICAqQWRkcmVzcywNCj4gDQo+ICsgIElO ICAgICAgVUlOVE4gIExlbmd0aA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIERFQlVH ICgoREVCVUdfRVJST1IsICIlYTogTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCBvbiBMb29uZ0Fy Y2guXG4iLCBfX0ZVTkNUSU9OX18pKTsNCj4gDQo+ICsgIHJldHVybiBBZGRyZXNzOw0KPiANCj4g K30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIEludmFsaWRhdGVzIHRoZSBlbnRpcmUg ZGF0YSBjYWNoZSBpbiBjYWNoZSBjb2hlcmVuY3kgZG9tYWluIG9mIHRoZSBjYWxsaW5nDQo+IA0K PiArICBDUFUuDQo+IA0KPiArDQo+IA0KPiArICBJbnZhbGlkYXRlcyB0aGUgZW50aXJlIGRhdGEg Y2FjaGUgaW4gY2FjaGUgY29oZXJlbmN5IGRvbWFpbiBvZiB0aGUgY2FsbGluZw0KPiANCj4gKyAg Q1BVLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB3aXRoIGNhcmUgYmVjYXVzZSBkaXJ0eSBj YWNoZSBsaW5lcyBhcmUgbm90DQo+IA0KPiArICB3cml0dGVuIGJhY2sgdG8gc3lzdGVtIG1lbW9y eS4gSXQgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGNhY2hlIGRpYWdub3N0aWNzLiBJZg0KPiANCj4g KyAgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IGludmFsaWRhdGlvbiBvZiB0aGUgZW50aXJlIGRh dGEgY2FjaGUsIHRoZW4gYSB3cml0ZQ0KPiANCj4gKyAgYmFjayBhbmQgaW52YWxpZGF0ZSBvcGVy YXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiB0aGUgZW50aXJlIGRhdGEgY2FjaGUuDQo+IA0K PiArDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK0ludmFs aWRhdGVEYXRhQ2FjaGUgKA0KPiANCj4gKyAgVk9JRA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4g DQo+ICsgIF9fYXNtX18gX192b2xhdGlsZV9fICgNCj4gDQo+ICsgICAgICJkYmFyIDBcbiINCj4g DQo+ICsgICAgIDoNCj4gDQo+ICsgICAgIDoNCj4gDQo+ICsgICk7DQo+IA0KPiArfQ0KPiANCj4g Kw0KPiANCj4gKy8qKg0KPiANCj4gKyAgSW52YWxpZGF0ZXMgYSByYW5nZSBvZiBkYXRhIGNhY2hl IGxpbmVzIGluIHRoZSBjYWNoZSBjb2hlcmVuY3kgZG9tYWluIG9mIHRoZQ0KPiANCj4gKyAgY2Fs bGluZyBDUFUuDQo+IA0KPiArDQo+IA0KPiArICBJbnZhbGlkYXRlcyB0aGUgZGF0YSBjYWNoZSBs aW5lcyBzcGVjaWZpZWQgYnkgQWRkcmVzcyBhbmQgTGVuZ3RoLiBJZiBBZGRyZXNzDQo+IA0KPiAr ICBpcyBub3QgYWxpZ25lZCBvbiBhIGNhY2hlIGxpbmUgYm91bmRhcnksIHRoZW4gZW50aXJlIGRh dGEgY2FjaGUgbGluZQ0KPiANCj4gKyAgY29udGFpbmluZyBBZGRyZXNzIGlzIGludmFsaWRhdGVk LiBJZiBBZGRyZXNzICsgTGVuZ3RoIGlzIG5vdCBhbGlnbmVkIG9uIGENCj4gDQo+ICsgIGNhY2hl IGxpbmUgYm91bmRhcnksIHRoZW4gdGhlIGVudGlyZSBkYXRhIGNhY2hlIGxpbmUgY29udGFpbmlu ZyBBZGRyZXNzICsNCj4gDQo+ICsgIExlbmd0aCAtMSBpcyBpbnZhbGlkYXRlZC4gVGhpcyBmdW5j dGlvbiBtdXN0IG5ldmVyIGludmFsaWRhdGUgYW55IGNhY2hlIGxpbmVzDQo+IA0KPiArICBvdXRz aWRlIHRoZSBzcGVjaWZpZWQgcmFuZ2UuIElmIExlbmd0aCBpcyAwLCB0aGUgbm8gZGF0YSBjYWNo ZSBsaW5lcyBhcmUNCj4gDQo+ICsgIGludmFsaWRhdGVkLiBBZGRyZXNzIGlzIHJldHVybmVkLiBU aGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB3aXRoIGNhcmUNCj4gDQo+ICsgIGJlY2F1c2UgZGly dHkgY2FjaGUgbGluZXMgYXJlIG5vdCB3cml0dGVuIGJhY2sgdG8gc3lzdGVtIG1lbW9yeS4gSXQg aXMNCj4gDQo+ICsgIHR5cGljYWxseSB1c2VkIGZvciBjYWNoZSBkaWFnbm9zdGljcy4gSWYgdGhl IENQVSBkb2VzIG5vdCBzdXBwb3J0DQo+IA0KPiArICBpbnZhbGlkYXRpb24gb2YgYSBkYXRhIGNh Y2hlIHJhbmdlLCB0aGVuIGEgd3JpdGUgYmFjayBhbmQgaW52YWxpZGF0ZQ0KPiANCj4gKyAgb3Bl cmF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gdGhlIGRhdGEgY2FjaGUgcmFuZ2UuDQo+IA0K PiArDQo+IA0KPiArICBJZiBMZW5ndGggaXMgZ3JlYXRlciB0aGFuIChNQVhfQUREUkVTUyAtIEFk ZHJlc3MgKyAxKSwgdGhlbiBBU1NFUlQoKS4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtpbl0g IEFkZHJlc3MgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZGF0YSBjYWNoZSBsaW5lcyB0byBpbnZh bGlkYXRlLiBJZg0KPiANCj4gKyAgICAgICAgICAgICAgICAgIHRoZSBDUFUgaXMgaW4gYSBwaHlz aWNhbCBhZGRyZXNzaW5nIG1vZGUsIHRoZW4gQWRkcmVzcyBpcyBhDQo+IA0KPiArICAgICAgICAg ICAgICAgICAgcGh5c2ljYWwgYWRkcmVzcy4gSWYgdGhlIENQVSBpcyBpbiBhIHZpcnR1YWwgYWRk cmVzc2luZyBtb2RlLA0KPiANCj4gKyAgICAgICAgICAgICAgICAgIHRoZW4gQWRkcmVzcyBpcyBh IHZpcnR1YWwgYWRkcmVzcy4NCj4gDQo+ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgVGhlIG51bWJl ciBvZiBieXRlcyB0byBpbnZhbGlkYXRlIGZyb20gdGhlIGRhdGEgY2FjaGUuDQo+IA0KPiArDQo+ IA0KPiArICBAcmV0dXJuIEFkZHJlc3MuDQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVk9J RCAqDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArSW52YWxpZGF0ZURhdGFDYWNoZVJhbmdlICgNCj4g DQo+ICsgIElOICAgICAgVk9JRCAgICpBZGRyZXNzLA0KPiANCj4gKyAgSU4gICAgICBVSU5UTiAg TGVuZ3RoDQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgX19hc21fXyBfX3ZvbGF0aWxl X18gKA0KPiANCj4gKyAgICAgImRiYXIgMFxuIg0KPiANCj4gKyAgICAgOg0KPiANCj4gKyAgICAg Og0KPiANCj4gKyAgKTsNCj4gDQo+ICsgIHJldHVybiBBZGRyZXNzOw0KPiANCj4gK30NCj4gDQo+ IC0tDQo+IDIuMjcuMA0KDQo=