From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.0.56; helo=eur01-he1-obe.outbound.protection.outlook.com; envelope-from=vabhav.sharma@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0056.outbound.protection.outlook.com [104.47.0.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 3CDB32041B27D for ; Tue, 24 Apr 2018 05:26:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=tz0UUd4uTUXdoUbORYXnwaMOHEK8VNNTIdmchrm7JLA=; b=rrg79xaCT5JBUxZ9NmG4R+un1DhdGp/CL5kf58AqVge/rXR0dBXu11DeB4azVgyDE07N7m1ic3cemLdf2pKaF9LO3ivytveZpCUYsu6WVbk02/+3l0DYF9SJJdyQUzvqBxvdwKgSo95dZ3qTz4c4Bdz24elfqcm9t+xWXy4qny8= Received: from DB4PR04MB299.eurprd04.prod.outlook.com (10.141.239.21) by DB4PR04MB0592.eurprd04.prod.outlook.com (10.242.195.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.17; Tue, 24 Apr 2018 12:26:43 +0000 Received: from DB4PR04MB299.eurprd04.prod.outlook.com ([fe80::2dcd:1bc7:8d4e:5dc2]) by DB4PR04MB299.eurprd04.prod.outlook.com ([fe80::2dcd:1bc7:8d4e:5dc2%15]) with mapi id 15.20.0696.017; Tue, 24 Apr 2018 12:26:43 +0000 From: Vabhav Sharma To: Ard Biesheuvel , Meenakshi Aggarwal CC: Leif Lindholm , "Kinney, Michael D" , "edk2-devel@lists.01.org" , Udit Kumar , Varun Sethi Thread-Topic: [PATCH edk2-platforms 34/39] Silicon/NXP: Implement EFI_CPU_IO2_PROTOCOL Thread-Index: AQHTpwPYw6QaPQSm1Ea9jfLwpmKD0qQJuHkAgAaF8tA= Date: Tue, 24 Apr 2018 12:26:43 +0000 Message-ID: References: <1518771035-6733-1-git-send-email-meenakshi.aggarwal@nxp.com> <1518771035-6733-35-git-send-email-meenakshi.aggarwal@nxp.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=vabhav.sharma@nxp.com; x-originating-ip: [14.142.187.166] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB4PR04MB0592; 7:7wx6poz2UpQJOCP/yApaIUiP4PUObUB6XrWPSt/au2UFw9oKFfP2HtqcYHLxzTKUIQHQHufTXobfSECEvRkyeefjFipKh4KzfgJrDCqtssiS2uFOnTbNFFZ3SnYw5SO+A2GDz1/nkgxWiZMOw7ctTmRh2LyiFUuUpT1bgfuoAhbjjpVz+9tHHanvxALz0UxdRAUsT/bVuNvQ0iM6Pqb23vJUZkFR5sW8NkK7q0Wa1YjTrXox30y3Z+Ym4LK7aSSX x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB4PR04MB0592; x-ms-traffictypediagnostic: DB4PR04MB0592: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(185117386973197)(162533806227266)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(3231232)(944501410)(52105095)(6055026)(6041310)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(6072148)(201708071742011); SRVR:DB4PR04MB0592; BCL:0; PCL:0; RULEID:; SRVR:DB4PR04MB0592; x-forefront-prvs: 0652EA5565 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(346002)(39860400002)(376002)(39380400002)(396003)(13464003)(189003)(199004)(2906002)(6246003)(54906003)(53946003)(3280700002)(55236004)(9686003)(66066001)(44832011)(110136005)(478600001)(6306002)(14454004)(74316002)(6506007)(99286004)(3846002)(55016002)(316002)(45080400002)(81166006)(8676002)(575784001)(81156014)(8936002)(4326008)(33656002)(305945005)(86362001)(53936002)(6636002)(5250100002)(7736002)(68736007)(229853002)(97736004)(186003)(446003)(11346002)(26005)(476003)(2900100001)(3660700001)(5660300001)(6436002)(486006)(76176011)(16799955002)(15760500003)(106356001)(102836004)(7696005)(6116002)(966005)(25786009)(105586002)(59450400001)(559001)(579004)(44824005)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB4PR04MB0592; H:DB4PR04MB299.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 6ElzkHA9mfcXiNDRUkV/kuRDGV22tuzQmfsTHhCBjC9qmOCPDXDw5mFUyjkMJpk/NGziui8KXKUpHysw2FPomeCrXjehBXeawRzxqQPhFGhkVUkO75T3vIN8MUzZgDypeRj7SlfdEk+AeWhQDRmmpE90tx38W6dvA+8nxFRl7RNRpIdK8sg13KEFB8TXNGE1 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: bb749599-1eb7-4580-2659-08d5a9dea399 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bb749599-1eb7-4580-2659-08d5a9dea399 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Apr 2018 12:26:43.4100 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR04MB0592 Subject: Re: [PATCH edk2-platforms 34/39] Silicon/NXP: Implement EFI_CPU_IO2_PROTOCOL X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Apr 2018 12:26:49 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEFyZCBCaWVzaGV1dmVsIFtt YWlsdG86YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZ10NCj5TZW50OiBGcmlkYXksIEFwcmlsIDIw LCAyMDE4IDI6MTEgUE0NCj5UbzogTWVlbmFrc2hpIEFnZ2Fyd2FsIDxtZWVuYWtzaGkuYWdnYXJ3 YWxAbnhwLmNvbT4NCj5DYzogTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3Jn PjsgS2lubmV5LCBNaWNoYWVsIEQNCj48bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBlZGsy LWRldmVsQGxpc3RzLjAxLm9yZzsgVWRpdCBLdW1hcg0KPjx1ZGl0Lmt1bWFyQG54cC5jb20+OyBW YXJ1biBTZXRoaSA8Vi5TZXRoaUBueHAuY29tPjsgVmFiaGF2IFNoYXJtYQ0KPjx2YWJoYXYuc2hh cm1hQG54cC5jb20+DQo+U3ViamVjdDogUmU6IFtQQVRDSCBlZGsyLXBsYXRmb3JtcyAzNC8zOV0g U2lsaWNvbi9OWFA6IEltcGxlbWVudA0KPkVGSV9DUFVfSU8yX1BST1RPQ09MDQo+DQo+T24gMTYg RmVicnVhcnkgMjAxOCBhdCAwOTo1MCwgTWVlbmFrc2hpIDxtZWVuYWtzaGkuYWdnYXJ3YWxAbnhw LmNvbT4NCj53cm90ZToNCj4+IEZyb206IFZhYmhhdiA8dmFiaGF2LnNoYXJtYUBueHAuY29tPg0K Pj4NCj4+IE5YUCBTT0MgaGFzIG11dGlwbGUgUENJZSBSQ3MsQWRkaW5nIHJlc3BlY3RpdmUgaW1w bGVtZW50YXRpb24gb2YNCj4+IEVGSV9DUFVfSU8yX1BST1RPQ09MIHRvIHByb3ZpZGUgTWVtb3J5 IFNwYWNlIFJlYWQvV3JpdGUgZnVuY3Rpb25zIHVzZWQNCj4+IGJ5IGdlbmVyaWMgSG9zdCBCcmlk Z2UgRHJpdmVyIGluY2x1ZGluZyBjb3JyZWN0IHZhbHVlIGZvciB0aGUNCj4+IHRyYW5zbGF0aW9u IG9mZnNldCBkdXJpbmcgTU1JTyBhY2Nlc3Nlcw0KPj4NCj4+IENvbnRyaWJ1dGVkLXVuZGVyOiBU aWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4+IFNpZ25lZC1vZmYtYnk6IFZh YmhhdiA8dmFiaGF2LnNoYXJtYUBueHAuY29tPg0KPj4gU2lnbmVkLW9mZi1ieTogTWVlbmFrc2hp IEFnZ2Fyd2FsIDxtZWVuYWtzaGkuYWdnYXJ3YWxAbnhwLmNvbT4NCj4NCj5UaGlzIGRyaXZlciBs b29rcyBjb21wbGV0ZWx5IHdyb25nIHRvIG1lOiBNTUlPIGFjY2VzcyBpcyBtZW1vcnkgbWFwcGVk LCBhbmQNCj5naXZlbiB0aGF0IHlvdSBkb24ndCBpbXBsZW1lbnQgUENJIHRvIENQVSB0cmFuc2xh dGlvbiBvZiBNTUlPIGFjY2Vzc2VzLCB0aGUNCj5tZW1vcnkgcmVhZCBhbmQgd3JpdGUgZnVuY3Rp b25zIHNob3VsZCBub3QgcGVyZm9ybSBhbnkgdHJhbnNsYXRpb24gYXQgYWxsLCBhbmQNCj5qdXN0 IHJlbGF5IHRoZSBhY2Nlc3Nlcy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBJL08gYWNjZXNzb3Jz IGFyZSBub3QNCj5pbXBsZW1lbnRlZCBhdCBhbGwsIGFuZCB0aGVzZSBhcmUgdGhlIG9uZXMgdGhh dCByZXF1aXJlIHRyYW5zbGF0aW9uLCBnaXZlbiB0aGF0IHRoZQ0KPkkvTyBwb3J0IGFkZHJlc3Nl cyBpbiB0aGUgQ1BVIHNwYWNlIG5lZWQgdHJhbnNsYXRpb24gdG8gTU1JTyBhZGRyZXNzZXNzLg0K DQpPbiBOWFAgU29DLCBNYXBwaW5nIGJldHdlZW4gQ1BVIHZpZXcgYW5kIFBDSWUgdmlldyBpcyBu b3QgMToxIGFuZCByZXF1aXJlIENQVSB2aWV3IHRyYW5zbGF0aW9uIGZvciBNTUlPIHJlZ2lvbnMg YWNjZXNzLCBBY2NvcmRpbmdseSB0cmFuc2xhdGlvbiBpcyBhZGRlZCBkdXJpbmcgbWVtb3J5IHJl YWQvd3JpdGUgc2VydmljZXMuDQpCdXMgZHJpdmVyIHJlbGF5cyB0aGUgYWRkcmVzcyByYW5nZSB3 aGVyZSBQQ0llIGRldmljZSBCYXIgcmVnaW9uIGlzIHNwbGl0IGZyb20sIFRyYW5zbGF0aW9uIGlz IHJlcXVpcmVkIGZvciByZWxheWluZyBpdCB0byBjb3JyZWN0IFBDSWUgY29udHJvbGxlciBjcHUg dmlldyBhZGRyZXNzLg0KDQo+DQo+QWxzbywgeW91IGRvbid0IHNlZW0gdG8gYmUgdXNpbmcgdGhl IFBjZFBjaUV4cD9CYXNlQWRkciBQQ0RzIGFueXdoZXJlLCBzbyB5b3UNCj5jYW4gZHJvcCB0aGVt IGZyb20gdGhlIC5kc2MNCk5vLCBJdCdzIHVzZWQgZm9yIGNoZWNraW5nIHRoZSBhY2Nlc3MgdG8g TU1JTzMyIHJlZ2lvbiBhbmQgQ1BVIHZpZXcgYmFzZSBhZGRyZXNzIHZhcmllcyBiZXR3ZWVuIGRp ZmZlcmVudCBOWFAgU29Dcw0KPg0KPj4gLS0tDQo+PiAgU2lsaWNvbi9OWFAvRHJpdmVycy9QY2lD cHVJbzJEeGUvUGNpQ3B1SW8yRHhlLmMgICB8IDUyOQ0KPisrKysrKysrKysrKysrKysrKysrKysN Cj4+ICBTaWxpY29uL05YUC9Ecml2ZXJzL1BjaUNwdUlvMkR4ZS9QY2lDcHVJbzJEeGUuaW5mIHwg IDQ4ICsrDQo+PiAgMiBmaWxlcyBjaGFuZ2VkLCA1NzcgaW5zZXJ0aW9ucygrKQ0KPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBTaWxpY29uL05YUC9Ecml2ZXJzL1BjaUNwdUlvMkR4ZS9QY2lDcHVJbzJE eGUuYw0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBTaWxpY29uL05YUC9Ecml2ZXJzL1BjaUNwdUlv MkR4ZS9QY2lDcHVJbzJEeGUuaW5mDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL1NpbGljb24vTlhQL0Ry aXZlcnMvUGNpQ3B1SW8yRHhlL1BjaUNwdUlvMkR4ZS5jDQo+PiBiL1NpbGljb24vTlhQL0RyaXZl cnMvUGNpQ3B1SW8yRHhlL1BjaUNwdUlvMkR4ZS5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K Pj4gaW5kZXggMDAwMDAwMC4uYjVmYjcyYw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvU2ls aWNvbi9OWFAvRHJpdmVycy9QY2lDcHVJbzJEeGUvUGNpQ3B1SW8yRHhlLmMNCj4+IEBAIC0wLDAg KzEsNTI5IEBADQo+PiArLyoqIEBmaWxlDQo+PiArICBQcm9kdWNlcyB0aGUgQ1BVIEkvTyAyIFBy b3RvY29sLg0KPj4gKw0KPj4gKyAgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxMiwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMNCj4+ICsgcmVzZXJ2ZWQuPEJSPiAgQ29weXJpZ2h0IChjKSAy MDE2LCBMaW5hcm8gTHRkLiBBbGwgcmlnaHRzDQo+PiArIHJlc2VydmVkLjxCUj4gIENvcHlyaWdo dCAyMDE4IE5YUA0KPj4gKw0KPj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5n IG1hdGVyaWFscyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlDQo+PiArIGF2YWlsYWJsZSB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlICB3aGljaA0KPj4gKyBh Y2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vu c2UgbWF5IGJlDQo+PiArIGZvdW5kIGF0DQo+PiArDQo+PiArIGh0dHBzOi8vZW1lYTAxLnNhZmVs aW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRm9wDQo+PiArIGVu c291cmNlLm9yZyUyRmxpY2Vuc2VzJTJGYnNkLWxpY2Vuc2UucGhwJmRhdGE9MDIlN0MwMSU3Q3Zh Ymhhdi5zaGFyDQo+PiArDQo+bWElNDBueHAuY29tJTdDNDUwN2MwNzI2YjI0NGFkNjQ3NmQwOGQ1 YTY5YTY0ZWUlN0M2ODZlYTFkM2JjMmI0Yw0KPjZmYTkNCj4+ICsNCj4yY2Q5OWM1YzMwMTYzNSU3 QzAlN0MwJTdDNjM2NTk4MTA0NDE0MDQ2NDQwJnNkYXRhPUlGU1UwJTJGZVRkV3J3DQo+Z2cwZg0K Pj4gKyAwTHEycVNWR2dvZ0c2OHRZWmV2clJtQyUyQmtWOCUzRCZyZXNlcnZlZD0wDQo+PiArDQo+ PiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPj4gKyBCQVNJUywgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRB VElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+ICsNCj4+ ICsqKi8NCj4+ICsNCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+PiArI2luY2x1 ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0K Pj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPj4gKyNpbmNsdWRlIDxQY2llLmg+DQo+PiArI2lu Y2x1ZGUgPFByb3RvY29sL0NwdUlvMi5oPg0KPj4gKw0KPj4gKyNkZWZpbmUgTUFYX0lPX1BPUlRf QUREUkVTUyBQQ0lfU0VHMl9QT1JUSU9fTUFYDQo+PiArDQo+PiArLy8NCj4+ICsvLyBIYW5kbGUg Zm9yIHRoZSBDUFUgSS9PIDIgUHJvdG9jb2wNCj4+ICsvLw0KPj4gK1NUQVRJQyBFRklfSEFORExF ICBtSGFuZGxlOw0KPj4gKw0KPj4gKy8vDQo+PiArLy8gTG9va3VwIHRhYmxlIGZvciBpbmNyZW1l bnQgdmFsdWVzIGJhc2VkIG9uIHRyYW5zZmVyIHdpZHRocyAvLw0KPj4gK1NUQVRJQyBDT05TVCBV SU5UOCBtSW5TdHJpZGVbXSA9IHsNCj4+ICsgIDEsIC8vIEVmaUNwdUlvV2lkdGhVaW50OA0KPj4g KyAgMiwgLy8gRWZpQ3B1SW9XaWR0aFVpbnQxNg0KPj4gKyAgNCwgLy8gRWZpQ3B1SW9XaWR0aFVp bnQzMg0KPj4gKyAgOCwgLy8gRWZpQ3B1SW9XaWR0aFVpbnQ2NA0KPj4gKyAgMCwgLy8gRWZpQ3B1 SW9XaWR0aEZpZm9VaW50OA0KPj4gKyAgMCwgLy8gRWZpQ3B1SW9XaWR0aEZpZm9VaW50MTYNCj4+ ICsgIDAsIC8vIEVmaUNwdUlvV2lkdGhGaWZvVWludDMyDQo+PiArICAwLCAvLyBFZmlDcHVJb1dp ZHRoRmlmb1VpbnQ2NA0KPj4gKyAgMSwgLy8gRWZpQ3B1SW9XaWR0aEZpbGxVaW50OA0KPj4gKyAg MiwgLy8gRWZpQ3B1SW9XaWR0aEZpbGxVaW50MTYNCj4+ICsgIDQsIC8vIEVmaUNwdUlvV2lkdGhG aWxsVWludDMyDQo+PiArICA4ICAvLyBFZmlDcHVJb1dpZHRoRmlsbFVpbnQ2NA0KPj4gK307DQo+ PiArDQo+PiArLy8NCj4+ICsvLyBMb29rdXAgdGFibGUgZm9yIGluY3JlbWVudCB2YWx1ZXMgYmFz ZWQgb24gdHJhbnNmZXIgd2lkdGhzIC8vDQo+PiArU1RBVElDIENPTlNUIFVJTlQ4IG1PdXRTdHJp ZGVbXSA9IHsNCj4+ICsgIDEsIC8vIEVmaUNwdUlvV2lkdGhVaW50OA0KPj4gKyAgMiwgLy8gRWZp Q3B1SW9XaWR0aFVpbnQxNg0KPj4gKyAgNCwgLy8gRWZpQ3B1SW9XaWR0aFVpbnQzMg0KPj4gKyAg OCwgLy8gRWZpQ3B1SW9XaWR0aFVpbnQ2NA0KPj4gKyAgMSwgLy8gRWZpQ3B1SW9XaWR0aEZpZm9V aW50OA0KPj4gKyAgMiwgLy8gRWZpQ3B1SW9XaWR0aEZpZm9VaW50MTYNCj4+ICsgIDQsIC8vIEVm aUNwdUlvV2lkdGhGaWZvVWludDMyDQo+PiArICA4LCAvLyBFZmlDcHVJb1dpZHRoRmlmb1VpbnQ2 NA0KPj4gKyAgMCwgLy8gRWZpQ3B1SW9XaWR0aEZpbGxVaW50OA0KPj4gKyAgMCwgLy8gRWZpQ3B1 SW9XaWR0aEZpbGxVaW50MTYNCj4+ICsgIDAsIC8vIEVmaUNwdUlvV2lkdGhGaWxsVWludDMyDQo+ PiArICAwICAvLyBFZmlDcHVJb1dpZHRoRmlsbFVpbnQ2NA0KPj4gK307DQo+PiArDQo+PiArLyoq DQo+PiArICBDaGVjayBwYXJhbWV0ZXJzIHRvIGEgQ1BVIEkvTyAyIFByb3RvY29sIHNlcnZpY2Ug cmVxdWVzdC4NCj4+ICsNCj4+ICsgIFRoZSBJL08gb3BlcmF0aW9ucyBhcmUgY2FycmllZCBvdXQg ZXhhY3RseSBhcyByZXF1ZXN0ZWQuIFRoZSBjYWxsZXINCj4+ICsgaXMgcmVzcG9uc2libGUgIGZv ciBzYXRpc2Z5aW5nIGFueSBhbGlnbm1lbnQgYW5kIEkvTyB3aWR0aA0KPj4gKyByZXN0cmljdGlv bnMgdGhhdCBhIFBJIFN5c3RlbSBvbiBhICBwbGF0Zm9ybSBtaWdodCByZXF1aXJlLiBGb3INCj4+ ICsgZXhhbXBsZSBvbiBzb21lIHBsYXRmb3Jtcywgd2lkdGggcmVxdWVzdHMgb2YNCj4+ICsgIEVm aUNwdUlvV2lkdGhVaW50NjQgZG8gbm90IHdvcmsuDQo+PiArDQo+PiArICBAcGFyYW1baW5dIE1t aW9PcGVyYXRpb24gIFRSVUUgZm9yIGFuIE1NSU8gb3BlcmF0aW9uLCBGQUxTRSBmb3IgSS9PDQo+ UG9ydCBvcGVyYXRpb24uDQo+PiArICBAcGFyYW1baW5dIFdpZHRoICAgICAgICAgIFNpZ25pZmll cyB0aGUgd2lkdGggb2YgdGhlIEkvTyBvciBNZW1vcnkgb3BlcmF0aW9uLg0KPj4gKyAgQHBhcmFt W2luXSBBZGRyZXNzICAgICAgICBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJL08gb3BlcmF0aW9u Lg0KPj4gKyAgQHBhcmFtW2luXSBDb3VudCAgICAgICAgICBUaGUgbnVtYmVyIG9mIEkvTyBvcGVy YXRpb25zIHRvIHBlcmZvcm0uIFRoZQ0KPm51bWJlciBvZg0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBieXRlcyBtb3ZlZCBpcyBXaWR0aCBzaXplICogQ291bnQsIHN0YXJ0aW5nIGF0 IEFkZHJlc3MuDQo+PiArICBAcGFyYW1baW5dIEJ1ZmZlciAgICAgICAgIEZvciByZWFkIG9wZXJh dGlvbnMsIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgdG8gc3RvcmUNCj50aGUgcmVzdWx0cy4NCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHdyaXRlIG9wZXJhdGlvbnMsIHRoZSBz b3VyY2UgYnVmZmVyIGZyb20gd2hpY2ggdG8gd3JpdGUNCj5kYXRhLg0KPj4gKw0KPj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIHJlcXVl c3QgcGFzcyB0aGUgY2hlY2tzLg0KPj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg IFdpZHRoIGlzIGludmFsaWQgZm9yIHRoaXMgUEkgc3lzdGVtLg0KPj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgIEJ1ZmZlciBpcyBOVUxMLg0KPj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgIFRoZSBCdWZmZXIgaXMgbm90IGFsaWduZWQgZm9yIHRoZSBnaXZlbiBX aWR0aC4NCj4+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGUgYWRkcmVzcyBy YW5nZSBzcGVjaWZpZWQgYnkgQWRkcmVzcywNCj5XaWR0aCwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbmQgQ291bnQgaXMgbm90IHZhbGlkIGZvciB0aGlzIFBJIHN5c3Rl bS4NCj4+ICsNCj4+ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtFRklfU1RBVFVTDQo+PiArQ3B1SW9D aGVja1BhcmFtZXRlciAoDQo+PiArICBJTiBCT09MRUFOICAgICAgICAgICAgICAgICAgICBNbWlv T3BlcmF0aW9uLA0KPj4gKyAgSU4gRUZJX0NQVV9JT19QUk9UT0NPTF9XSURUSCAgV2lkdGgsDQo+ PiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPj4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgICAgICAgQ291bnQsDQo+PiArICBJTiBWT0lEICAgICAgICAgICAg ICAgICAgICAgICAqQnVmZmVyDQo+PiArICApDQo+PiArew0KPj4gKyAgVUlOVDY0ICBNYXhDb3Vu dDsNCj4+ICsgIFVJTlQ2NCAgTGltaXQ7DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gQ2hlY2sg dG8gc2VlIGlmIEJ1ZmZlciBpcyBOVUxMDQo+PiArICAvLw0KPj4gKyAgaWYgKEJ1ZmZlciA9PSBO VUxMKSB7DQo+PiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIENoZWNrIHRv IHNlZSBpZiBXaWR0aCBpcyBpbiB0aGUgdmFsaWQgcmFuZ2UgIC8vICBpZg0KPj4gKyAoKFVJTlQz MilXaWR0aCA+PSBFZmlDcHVJb1dpZHRoTWF4aW11bSkgew0KPj4gKyAgICBBU1NFUlQgKEZBTFNF KTsNCj4+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4+ICsgIH0NCj4+ICsN Cj4+ICsgIC8vDQo+PiArICAvLyBGb3IgRklGTyB0eXBlLCB0aGUgdGFyZ2V0IGFkZHJlc3Mgd29u J3QgaW5jcmVhc2UgZHVyaW5nIHRoZQ0KPj4gKyBhY2Nlc3MsICAvLyBzbyB0cmVhdCBDb3VudCBh cyAxICAvLyAgaWYgKFdpZHRoID49DQo+PiArIEVmaUNwdUlvV2lkdGhGaWZvVWludDggJiYgV2lk dGggPD0gRWZpQ3B1SW9XaWR0aEZpZm9VaW50NjQpIHsNCj4+ICsgICAgQ291bnQgPSAxOw0KPj4g KyAgfQ0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIENoZWNrIHRvIHNlZSBpZiBXaWR0aCBpcyBp biB0aGUgdmFsaWQgcmFuZ2UgZm9yIEkvTyBQb3J0DQo+PiArIG9wZXJhdGlvbnMgIC8vICBXaWR0 aCA9IChFRklfQ1BVX0lPX1BST1RPQ09MX1dJRFRIKShXaWR0aCAmIDB4MDMpOw0KPj4gKyBpZiAo IU1taW9PcGVyYXRpb24gJiYgKFdpZHRoID09IEVmaUNwdUlvV2lkdGhVaW50NjQpKSB7DQo+PiAr ICAgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIENoZWNrIHRvIHNlZSBpZiBBZGRy ZXNzIGlzIGFsaWduZWQgIC8vICBpZiAoKEFkZHJlc3MgJg0KPj4gKyAoVUlOVDY0KShtSW5TdHJp ZGVbV2lkdGhdIC0gMSkpICE9IDApIHsNCj4+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+PiArICAg IHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0KPj4gKyAg Ly8gQ2hlY2sgdG8gc2VlIGlmIGFueSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyYW5z ZmVyDQo+PiArIGV4Y2VlZHMgdGhlIG1heGltdW0gIC8vIGFsbG93ZWQgYWRkcmVzcy4gIFRoZSBt YXhpbXVtIGFkZHJlc3MNCj4+ICsgaW1wbGllZCBieSB0aGUgcGFyYW1ldGVycyBwYXNzZWQgaW4g aXMgIC8vIEFkZHJlc3MgKyBTaXplICogQ291bnQuDQo+PiArIElmIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uIGlzIG1ldCwgdGhlbiB0aGUgdHJhbnNmZXIgIC8vIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ PiArICAvLw0KPj4gKyAgLy8gICAgQWRkcmVzcyArIFNpemUgKiBDb3VudCA+IChNbWlvT3BlcmF0 aW9uID8gTUFYX0FERFJFU1MgOg0KPk1BWF9JT19QT1JUX0FERFJFU1MpICsgMQ0KPj4gKyAgLy8N Cj4+ICsgIC8vIFNpbmNlIE1BWF9BRERSRVNTIGNhbiBiZSB0aGUgbWF4aW11bSBpbnRlZ2VyIHZh bHVlIHN1cHBvcnRlZCBieQ0KPj4gKyB0aGUgQ1BVIGFuZCBDb3VudCAgLy8gY2FuIGFsc28gYmUg dGhlIG1heGltdW0gaW50ZWdlciB2YWx1ZQ0KPj4gKyBzdXBwb3J0ZWQgYnkgdGhlIENQVSwgdGhp cyByYW5nZSAgLy8gY2hlY2sgbXVzdCBiZSBhZGp1c3RlZCB0byBhdm9pZCBhbGwNCj5vdmVmbG93 IGNvbmRpdGlvbnMuDQo+PiArICAvLw0KPj4gKyAgTGltaXQgPSAoTW1pb09wZXJhdGlvbiA/IE1B WF9BRERSRVNTIDogTUFYX0lPX1BPUlRfQUREUkVTUyk7ICBpZg0KPj4gKyAoQ291bnQgPT0gMCkg ew0KPj4gKyAgICBpZiAoQWRkcmVzcyA+IExpbWl0KSB7DQo+PiArICAgICAgQVNTRVJUIChGQUxT RSk7DQo+PiArICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICsgICAgfQ0KPj4gKyAg fSBlbHNlIHsNCj4+ICsgICAgTWF4Q291bnQgPSBSU2hpZnRVNjQgKExpbWl0LCBXaWR0aCk7DQo+ PiArICAgIGlmIChNYXhDb3VudCA8IChDb3VudCAtIDEpKSB7DQo+PiArICAgICAgQVNTRVJUIChG QUxTRSk7DQo+PiArICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICsgICAgfQ0KPj4g KyAgICBpZiAoQWRkcmVzcyA+IExTaGlmdFU2NCAoTWF4Q291bnQgLSBDb3VudCArIDEsIFdpZHRo KSkgew0KPj4gKyAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPj4gKyAgICAgIHJldHVybiBFRklfVU5T VVBQT1JURUQ7DQo+PiArICAgIH0NCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBD aGVjayB0byBzZWUgaWYgQnVmZmVyIGlzIGFsaWduZWQgIC8vICBpZiAoKChVSU5UTilCdWZmZXIg Jg0KPj4gKyAoKE1JTiAoc2l6ZW9mIChVSU5UTiksIG1JblN0cmlkZVtXaWR0aF0pICAtIDEpKSkg IT0gMCkgew0KPj4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgICAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+ICt9 DQo+PiArDQo+PiArLyoqDQo+PiArICBSZWFkcyBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycy4NCj4+ ICsNCj4+ICsgIFRoZSBJL08gb3BlcmF0aW9ucyBhcmUgY2FycmllZCBvdXQgZXhhY3RseSBhcyBy ZXF1ZXN0ZWQuIFRoZSBjYWxsZXINCj4+ICsgaXMgcmVzcG9uc2libGUgIGZvciBzYXRpc2Z5aW5n IGFueSBhbGlnbm1lbnQgYW5kIEkvTyB3aWR0aA0KPj4gKyByZXN0cmljdGlvbnMgdGhhdCBhIFBJ IFN5c3RlbSBvbiBhICBwbGF0Zm9ybSBtaWdodCByZXF1aXJlLiBGb3INCj4+ICsgZXhhbXBsZSBv biBzb21lIHBsYXRmb3Jtcywgd2lkdGggcmVxdWVzdHMgb2YNCj4+ICsgIEVmaUNwdUlvV2lkdGhV aW50NjQgZG8gbm90IHdvcmsuDQo+PiArDQo+PiArICBJZiBXaWR0aCBpcyBFZmlDcHVJb1dpZHRo VWludDgsIEVmaUNwdUlvV2lkdGhVaW50MTYsDQo+PiArIEVmaUNwdUlvV2lkdGhVaW50MzIsICBv ciBFZmlDcHVJb1dpZHRoVWludDY0LCB0aGVuIGJvdGggQWRkcmVzcyBhbmQNCj4+ICsgQnVmZmVy IGFyZSBpbmNyZW1lbnRlZCBmb3IgIGVhY2ggb2YgdGhlIENvdW50IG9wZXJhdGlvbnMgdGhhdCBp cyBwZXJmb3JtZWQuDQo+PiArDQo+PiArICBJZiBXaWR0aCBpcyBFZmlDcHVJb1dpZHRoRmlmb1Vp bnQ4LCBFZmlDcHVJb1dpZHRoRmlmb1VpbnQxNiwNCj4+ICsgRWZpQ3B1SW9XaWR0aEZpZm9VaW50 MzIsIG9yIEVmaUNwdUlvV2lkdGhGaWZvVWludDY0LCB0aGVuIG9ubHkNCj4+ICsgQnVmZmVyIGlz ICBpbmNyZW1lbnRlZCBmb3IgZWFjaCBvZiB0aGUgQ291bnQgb3BlcmF0aW9ucyB0aGF0IGlzDQo+ PiArIHBlcmZvcm1lZC4gVGhlIHJlYWQgb3IgIHdyaXRlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQg Q291bnQgdGltZXMgb24gdGhlDQo+c2FtZSBBZGRyZXNzLg0KPj4gKw0KPj4gKyAgSWYgV2lkdGgg aXMgRWZpQ3B1SW9XaWR0aEZpbGxVaW50OCwgRWZpQ3B1SW9XaWR0aEZpbGxVaW50MTYsDQo+PiAr IEVmaUNwdUlvV2lkdGhGaWxsVWludDMyLCBvciBFZmlDcHVJb1dpZHRoRmlsbFVpbnQ2NCwgdGhl biBvbmx5DQo+PiArIEFkZHJlc3MgaXMgIGluY3JlbWVudGVkIGZvciBlYWNoIG9mIHRoZSBDb3Vu dCBvcGVyYXRpb25zIHRoYXQgaXMNCj4+ICsgcGVyZm9ybWVkLiBUaGUgcmVhZCBvciAgd3JpdGUg b3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBDb3VudCB0aW1lcyBmcm9tIHRoZQ0KPmZpcnN0IGVsZW1l bnQgb2YgQnVmZmVyLg0KPj4gKw0KPj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgQSBwb2ludGVy IHRvIHRoZSBFRklfQ1BVX0lPMl9QUk9UT0NPTCBpbnN0YW5jZS4NCj4+ICsgIEBwYXJhbVtpbl0g IFdpZHRoICAgIFNpZ25pZmllcyB0aGUgd2lkdGggb2YgdGhlIEkvTyBvciBNZW1vcnkgb3BlcmF0 aW9uLg0KPj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUg SS9PIG9wZXJhdGlvbi4NCj4+ICsgIEBwYXJhbVtpbl0gIENvdW50ICAgIFRoZSBudW1iZXIgb2Yg SS9PIG9wZXJhdGlvbnMgdG8gcGVyZm9ybS4gVGhlIG51bWJlcg0KPm9mDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICBieXRlcyBtb3ZlZCBpcyBXaWR0aCBzaXplICogQ291bnQsIHN0YXJ0aW5n IGF0IEFkZHJlc3MuDQo+PiArICBAcGFyYW1bb3V0XSBCdWZmZXIgICBGb3IgcmVhZCBvcGVyYXRp b25zLCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvIHN0b3JlIHRoZQ0KPnJlc3VsdHMuDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICBGb3Igd3JpdGUgb3BlcmF0aW9ucywgdGhlIHNvdXJjZSBi dWZmZXIgZnJvbSB3aGljaCB0byB3cml0ZSBkYXRhLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgIFRoZSBkYXRhIHdhcyByZWFkIGZyb20gb3Igd3JpdHRlbiB0byB0 aGUgUEkNCj5zeXN0ZW0uDQo+PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgV2lk dGggaXMgaW52YWxpZCBmb3IgdGhpcyBQSSBzeXN0ZW0uDQo+PiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiAgQnVmZmVyIGlzIE5VTEwuDQo+PiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICAgICAgVGhlIEJ1ZmZlciBpcyBub3QgYWxpZ25lZCBmb3IgdGhlIGdpdmVuIFdpZHRo Lg0KPj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIFRoZSBhZGRyZXNzIHJhbmdl IHNwZWNpZmllZCBieSBBZGRyZXNzLA0KPldpZHRoLA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFuZCBDb3VudCBpcyBub3QgdmFsaWQgZm9yIHRoaXMgUEkgc3lzdGVtLg0K Pj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtFRklBUEkNCj4+ ICtDcHVNZW1vcnlTZXJ2aWNlUmVhZCAoDQo+PiArICBJTiAgRUZJX0NQVV9JTzJfUFJPVE9DT0wg ICAgICAgKlRoaXMsDQo+PiArICBJTiAgRUZJX0NQVV9JT19QUk9UT0NPTF9XSURUSCAgV2lkdGgs DQo+PiArICBJTiAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4+ICsgIElO ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBDb3VudCwNCj4+ICsgIE9VVCBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAqQnVmZmVyDQo+PiArICApDQo+PiArew0KPj4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAg ICAgSW5TdHJpZGU7DQo+PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBPdXRTdHJpZGU7 DQo+PiArICBFRklfQ1BVX0lPX1BST1RPQ09MX1dJRFRIICBPcGVyYXRpb25XaWR0aDsNCj4+ICsg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICpVaW50OEJ1ZmZlcjsNCj4+ICsNCj4+ICsgIFN0 YXR1cyA9IENwdUlvQ2hlY2tQYXJhbWV0ZXIgKFRSVUUsIFdpZHRoLCBBZGRyZXNzLCBDb3VudCwg QnVmZmVyKTsNCj4+ICsgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgaWYgKChBZGRyZXNzID49IFBDSV9TRUcwX01N SU8zMl9NSU4pICYmDQo+PiArICAgICAgKEFkZHJlc3MgPD0gUENJX1NFRzBfTU1JTzMyX01BWCkp IHsNCj4+ICsgICAgQWRkcmVzcyArPSBQQ0lfU0VHMF9NTUlPX01FTUJBU0U7ICB9IGVsc2UgaWYg KChBZGRyZXNzID49DQo+PiArIFBDSV9TRUcxX01NSU8zMl9NSU4pICYmDQo+PiArICAgICAgICAg ICAgIChBZGRyZXNzIDw9IFBDSV9TRUcxX01NSU8zMl9NQVgpKSB7DQo+PiArICAgIEFkZHJlc3Mg Kz0gUENJX1NFRzFfTU1JT19NRU1CQVNFOyAgfSBlbHNlIGlmICgoQWRkcmVzcyA+PQ0KPj4gKyBQ Q0lfU0VHMl9NTUlPMzJfTUlOKSAmJg0KPj4gKyAgICAgICAgICAgICAoQWRkcmVzcyA8PSBQQ0lf U0VHMl9NTUlPMzJfTUFYKSkgew0KPj4gKyAgICBBZGRyZXNzICs9IFBDSV9TRUcyX01NSU9fTUVN QkFTRTsgIH0gZWxzZSBpZiAoKEFkZHJlc3MgPj0NCj4+ICsgUENJX1NFRzNfTU1JTzMyX01JTikg JiYNCj4+ICsgICAgICAgICAgICAgKEFkZHJlc3MgPD0gUENJX1NFRzNfTU1JTzMyX01BWCkpIHsN Cj4+ICsgICAgQWRkcmVzcyArPSBQQ0lfU0VHM19NTUlPX01FTUJBU0U7ICB9IGVsc2Ugew0KPj4g KyAgICBBU1NFUlQgKEZBTFNFKTsNCj4+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBTZWxlY3QgbG9vcCBiYXNlZCBv biB0aGUgd2lkdGggb2YgdGhlIHRyYW5zZmVyDQo+PiArICAvLw0KPj4gKyAgSW5TdHJpZGUgPSBt SW5TdHJpZGVbV2lkdGhdOw0KPj4gKyAgT3V0U3RyaWRlID0gbU91dFN0cmlkZVtXaWR0aF07DQo+ PiArICBPcGVyYXRpb25XaWR0aCA9IChFRklfQ1BVX0lPX1BST1RPQ09MX1dJRFRIKSAoV2lkdGgg JiAweDAzKTsNCj4+ICsgIGZvciAoVWludDhCdWZmZXIgPSBCdWZmZXI7IENvdW50ID4gMDsgQWRk cmVzcyArPSBJblN0cmlkZSwgVWludDhCdWZmZXIgKz0NCj5PdXRTdHJpZGUsIENvdW50LS0pIHsN Cj4+ICsgICAgaWYgKE9wZXJhdGlvbldpZHRoID09IEVmaUNwdUlvV2lkdGhVaW50OCkgew0KPj4g KyAgICAgICpVaW50OEJ1ZmZlciA9IE1taW9SZWFkOCAoKFVJTlROKUFkZHJlc3MpOw0KPj4gKyAg ICB9IGVsc2UgaWYgKE9wZXJhdGlvbldpZHRoID09IEVmaUNwdUlvV2lkdGhVaW50MTYpIHsNCj4+ ICsgICAgICAqKChVSU5UMTYgKilVaW50OEJ1ZmZlcikgPSBNbWlvUmVhZDE2ICgoVUlOVE4pQWRk cmVzcyk7DQo+PiArICAgIH0gZWxzZSBpZiAoT3BlcmF0aW9uV2lkdGggPT0gRWZpQ3B1SW9XaWR0 aFVpbnQzMikgew0KPj4gKyAgICAgICooKFVJTlQzMiAqKVVpbnQ4QnVmZmVyKSA9IE1taW9SZWFk MzIgKChVSU5UTilBZGRyZXNzKTsNCj4+ICsgICAgfSBlbHNlIGlmIChPcGVyYXRpb25XaWR0aCA9 PSBFZmlDcHVJb1dpZHRoVWludDY0KSB7DQo+PiArICAgICAgKigoVUlOVDY0ICopVWludDhCdWZm ZXIpID0gTW1pb1JlYWQ2NCAoKFVJTlROKUFkZHJlc3MpOw0KPj4gKyAgICB9DQo+PiArICB9DQo+ PiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAgV3Jp dGVzIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzLg0KPj4gKw0KPj4gKyAgVGhlIEkvTyBvcGVyYXRp b25zIGFyZSBjYXJyaWVkIG91dCBleGFjdGx5IGFzIHJlcXVlc3RlZC4gVGhlIGNhbGxlcg0KPj4g KyBpcyByZXNwb25zaWJsZSAgZm9yIHNhdGlzZnlpbmcgYW55IGFsaWdubWVudCBhbmQgSS9PIHdp ZHRoDQo+PiArIHJlc3RyaWN0aW9ucyB0aGF0IGEgUEkgU3lzdGVtIG9uIGEgIHBsYXRmb3JtIG1p Z2h0IHJlcXVpcmUuIEZvcg0KPj4gKyBleGFtcGxlIG9uIHNvbWUgcGxhdGZvcm1zLCB3aWR0aCBy ZXF1ZXN0cyBvZg0KPj4gKyAgRWZpQ3B1SW9XaWR0aFVpbnQ2NCBkbyBub3Qgd29yay4NCj4+ICsN Cj4+ICsgIElmIFdpZHRoIGlzIEVmaUNwdUlvV2lkdGhVaW50OCwgRWZpQ3B1SW9XaWR0aFVpbnQx NiwNCj4+ICsgRWZpQ3B1SW9XaWR0aFVpbnQzMiwgIG9yIEVmaUNwdUlvV2lkdGhVaW50NjQsIHRo ZW4gYm90aCBBZGRyZXNzIGFuZA0KPj4gKyBCdWZmZXIgYXJlIGluY3JlbWVudGVkIGZvciAgZWFj aCBvZiB0aGUgQ291bnQgb3BlcmF0aW9ucyB0aGF0IGlzIHBlcmZvcm1lZC4NCj4+ICsNCj4+ICsg IElmIFdpZHRoIGlzIEVmaUNwdUlvV2lkdGhGaWZvVWludDgsIEVmaUNwdUlvV2lkdGhGaWZvVWlu dDE2LA0KPj4gKyBFZmlDcHVJb1dpZHRoRmlmb1VpbnQzMiwgb3IgRWZpQ3B1SW9XaWR0aEZpZm9V aW50NjQsIHRoZW4gb25seQ0KPj4gKyBCdWZmZXIgaXMgIGluY3JlbWVudGVkIGZvciBlYWNoIG9m IHRoZSBDb3VudCBvcGVyYXRpb25zIHRoYXQgaXMNCj4+ICsgcGVyZm9ybWVkLiBUaGUgcmVhZCBv ciAgd3JpdGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBDb3VudCB0aW1lcyBvbiB0aGUNCj5zYW1l IEFkZHJlc3MuDQo+PiArDQo+PiArICBJZiBXaWR0aCBpcyBFZmlDcHVJb1dpZHRoRmlsbFVpbnQ4 LCBFZmlDcHVJb1dpZHRoRmlsbFVpbnQxNiwNCj4+ICsgRWZpQ3B1SW9XaWR0aEZpbGxVaW50MzIs IG9yIEVmaUNwdUlvV2lkdGhGaWxsVWludDY0LCB0aGVuIG9ubHkNCj4+ICsgQWRkcmVzcyBpcyAg aW5jcmVtZW50ZWQgZm9yIGVhY2ggb2YgdGhlIENvdW50IG9wZXJhdGlvbnMgdGhhdCBpcw0KPj4g KyBwZXJmb3JtZWQuIFRoZSByZWFkIG9yICB3cml0ZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIENv dW50IHRpbWVzIGZyb20gdGhlDQo+Zmlyc3QgZWxlbWVudCBvZiBCdWZmZXIuDQo+PiArDQo+PiAr ICBAcGFyYW1baW5dICBUaGlzICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9DUFVfSU8yX1BST1RP Q09MIGluc3RhbmNlLg0KPj4gKyAgQHBhcmFtW2luXSAgV2lkdGggICAgU2lnbmlmaWVzIHRoZSB3 aWR0aCBvZiB0aGUgSS9PIG9yIE1lbW9yeSBvcGVyYXRpb24uDQo+PiArICBAcGFyYW1baW5dICBB ZGRyZXNzICBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBJL08gb3BlcmF0aW9uLg0KPj4gKyAgQHBh cmFtW2luXSAgQ291bnQgICAgVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyB0byBwZXJmb3Jt LiBUaGUgbnVtYmVyDQo+b2YNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIG1vdmVk IGlzIFdpZHRoIHNpemUgKiBDb3VudCwgc3RhcnRpbmcgYXQgQWRkcmVzcy4NCj4+ICsgIEBwYXJh bVtpbl0gIEJ1ZmZlciAgIEZvciByZWFkIG9wZXJhdGlvbnMsIHRoZSBkZXN0aW5hdGlvbiBidWZm ZXIgdG8gc3RvcmUgdGhlDQo+cmVzdWx0cy4NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIEZv ciB3cml0ZSBvcGVyYXRpb25zLCB0aGUgc291cmNlIGJ1ZmZlciBmcm9tIHdoaWNoIHRvIHdyaXRl IGRhdGEuDQo+PiArDQo+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIGRh dGEgd2FzIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIHRoZSBQSQ0KPnN5c3RlbS4NCj4+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBXaWR0aCBpcyBpbnZhbGlkIGZvciB0aGlzIFBJ IHN5c3RlbS4NCj4+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBCdWZmZXIgaXMg TlVMTC4NCj4+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGUgQnVmZmVyIGlz IG5vdCBhbGlnbmVkIGZvciB0aGUgZ2l2ZW4gV2lkdGguDQo+PiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICAgVGhlIGFkZHJlc3MgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEFkZHJlc3MsDQo+ V2lkdGgsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENvdW50IGlz IG5vdCB2YWxpZCBmb3IgdGhpcyBQSSBzeXN0ZW0uDQo+PiArDQo+PiArKiovDQo+PiArU1RBVElD DQo+PiArRUZJX1NUQVRVUw0KPj4gK0VGSUFQSQ0KPj4gK0NwdU1lbW9yeVNlcnZpY2VXcml0ZSAo DQo+PiArICBJTiBFRklfQ1BVX0lPMl9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4+ICsgIElOIEVG SV9DUFVfSU9fUFJPVE9DT0xfV0lEVEggIFdpZHRoLA0KPj4gKyAgSU4gVUlOVDY0ICAgICAgICAg ICAgICAgICAgICAgQWRkcmVzcywNCj4+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAg IENvdW50LA0KPj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0KPj4g KyAgKQ0KPj4gK3sNCj4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIEluU3RyaWRlOw0KPj4gKyAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgT3V0U3RyaWRlOw0KPj4gKyAgRUZJX0NQVV9JT19QUk9UT0NPTF9X SURUSCAgT3BlcmF0aW9uV2lkdGg7DQo+PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAq VWludDhCdWZmZXI7DQo+PiArDQo+PiArICBTdGF0dXMgPSBDcHVJb0NoZWNrUGFyYW1ldGVyIChU UlVFLCBXaWR0aCwgQWRkcmVzcywgQ291bnQsIEJ1ZmZlcik7DQo+PiArIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4+ICsgIH0NCj4+ICsNCj4+ICsg IGlmICgoQWRkcmVzcyA+PSBQQ0lfU0VHMF9NTUlPMzJfTUlOKSAmJg0KPj4gKyAgICAgIChBZGRy ZXNzIDw9IFBDSV9TRUcwX01NSU8zMl9NQVgpKSB7DQo+PiArICAgIEFkZHJlc3MgKz0gUENJX1NF RzBfTU1JT19NRU1CQVNFOyAgfSBlbHNlIGlmICgoQWRkcmVzcyA+PQ0KPj4gKyBQQ0lfU0VHMV9N TUlPMzJfTUlOKSAmJg0KPj4gKyAgICAgICAgICAgICAoQWRkcmVzcyA8PSBQQ0lfU0VHMV9NTUlP MzJfTUFYKSkgew0KPj4gKyAgICBBZGRyZXNzICs9IFBDSV9TRUcxX01NSU9fTUVNQkFTRTsgIH0g ZWxzZSBpZiAoKEFkZHJlc3MgPj0NCj4+ICsgUENJX1NFRzJfTU1JTzMyX01JTikgJiYNCj4+ICsg ICAgICAgICAgICAgKEFkZHJlc3MgPD0gUENJX1NFRzJfTU1JTzMyX01BWCkpIHsNCj4+ICsgICAg QWRkcmVzcyArPSBQQ0lfU0VHMl9NTUlPX01FTUJBU0U7ICB9IGVsc2UgaWYgKChBZGRyZXNzID49 DQo+PiArIFBDSV9TRUczX01NSU8zMl9NSU4pICYmDQo+PiArICAgICAgICAgICAgIChBZGRyZXNz IDw9IFBDSV9TRUczX01NSU8zMl9NQVgpKSB7DQo+PiArICAgIEFkZHJlc3MgKz0gUENJX1NFRzNf TU1JT19NRU1CQVNFOyAgfSBlbHNlIHsNCj4+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+PiArICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0K Pj4gKyAgLy8gU2VsZWN0IGxvb3AgYmFzZWQgb24gdGhlIHdpZHRoIG9mIHRoZSB0cmFuc2Zlcg0K Pj4gKyAgLy8NCj4+ICsgIEluU3RyaWRlID0gbUluU3RyaWRlW1dpZHRoXTsNCj4+ICsgIE91dFN0 cmlkZSA9IG1PdXRTdHJpZGVbV2lkdGhdOw0KPj4gKyAgT3BlcmF0aW9uV2lkdGggPSAoRUZJX0NQ VV9JT19QUk9UT0NPTF9XSURUSCkgKFdpZHRoICYgMHgwMyk7DQo+PiArICBmb3IgKFVpbnQ4QnVm ZmVyID0gQnVmZmVyOyBDb3VudCA+IDA7IEFkZHJlc3MgKz0gSW5TdHJpZGUsIFVpbnQ4QnVmZmVy ICs9DQo+T3V0U3RyaWRlLCBDb3VudC0tKSB7DQo+PiArICAgIGlmIChPcGVyYXRpb25XaWR0aCA9 PSBFZmlDcHVJb1dpZHRoVWludDgpIHsNCj4+ICsgICAgICBNbWlvV3JpdGU4ICgoVUlOVE4pQWRk cmVzcywgKlVpbnQ4QnVmZmVyKTsNCj4+ICsgICAgfSBlbHNlIGlmIChPcGVyYXRpb25XaWR0aCA9 PSBFZmlDcHVJb1dpZHRoVWludDE2KSB7DQo+PiArICAgICAgTW1pb1dyaXRlMTYgKChVSU5UTilB ZGRyZXNzLCAqKChVSU5UMTYgKilVaW50OEJ1ZmZlcikpOw0KPj4gKyAgICB9IGVsc2UgaWYgKE9w ZXJhdGlvbldpZHRoID09IEVmaUNwdUlvV2lkdGhVaW50MzIpIHsNCj4+ICsgICAgICBNbWlvV3Jp dGUzMiAoKFVJTlROKUFkZHJlc3MsICooKFVJTlQzMiAqKVVpbnQ4QnVmZmVyKSk7DQo+PiArICAg IH0gZWxzZSBpZiAoT3BlcmF0aW9uV2lkdGggPT0gRWZpQ3B1SW9XaWR0aFVpbnQ2NCkgew0KPj4g KyAgICAgIE1taW9Xcml0ZTY0ICgoVUlOVE4pQWRkcmVzcywgKigoVUlOVDY0ICopVWludDhCdWZm ZXIpKTsNCj4+ICsgICAgfQ0KPj4gKyAgfQ0KPj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4g K30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIFJlYWRzIEkvTyByZWdpc3RlcnMuDQo+PiArDQo+PiAr ICBUaGUgSS9PIG9wZXJhdGlvbnMgYXJlIGNhcnJpZWQgb3V0IGV4YWN0bHkgYXMgcmVxdWVzdGVk LiBUaGUgY2FsbGVyDQo+PiArIGlzIHJlc3BvbnNpYmxlICBmb3Igc2F0aXNmeWluZyBhbnkgYWxp Z25tZW50IGFuZCBJL08gd2lkdGgNCj4+ICsgcmVzdHJpY3Rpb25zIHRoYXQgYSBQSSBTeXN0ZW0g b24gYSAgcGxhdGZvcm0gbWlnaHQgcmVxdWlyZS4gRm9yDQo+PiArIGV4YW1wbGUgb24gc29tZSBw bGF0Zm9ybXMsIHdpZHRoIHJlcXVlc3RzIG9mDQo+PiArICBFZmlDcHVJb1dpZHRoVWludDY0IGRv IG5vdCB3b3JrLg0KPj4gKw0KPj4gKyAgSWYgV2lkdGggaXMgRWZpQ3B1SW9XaWR0aFVpbnQ4LCBF ZmlDcHVJb1dpZHRoVWludDE2LA0KPj4gKyBFZmlDcHVJb1dpZHRoVWludDMyLCAgb3IgRWZpQ3B1 SW9XaWR0aFVpbnQ2NCwgdGhlbiBib3RoIEFkZHJlc3MgYW5kDQo+PiArIEJ1ZmZlciBhcmUgaW5j cmVtZW50ZWQgZm9yICBlYWNoIG9mIHRoZSBDb3VudCBvcGVyYXRpb25zIHRoYXQgaXMgcGVyZm9y bWVkLg0KPj4gKw0KPj4gKyAgSWYgV2lkdGggaXMgRWZpQ3B1SW9XaWR0aEZpZm9VaW50OCwgRWZp Q3B1SW9XaWR0aEZpZm9VaW50MTYsDQo+PiArIEVmaUNwdUlvV2lkdGhGaWZvVWludDMyLCBvciBF ZmlDcHVJb1dpZHRoRmlmb1VpbnQ2NCwgdGhlbiBvbmx5DQo+PiArIEJ1ZmZlciBpcyAgaW5jcmVt ZW50ZWQgZm9yIGVhY2ggb2YgdGhlIENvdW50IG9wZXJhdGlvbnMgdGhhdCBpcw0KPj4gKyBwZXJm b3JtZWQuIFRoZSByZWFkIG9yICB3cml0ZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIENvdW50IHRp bWVzIG9uIHRoZQ0KPnNhbWUgQWRkcmVzcy4NCj4+ICsNCj4+ICsgIElmIFdpZHRoIGlzIEVmaUNw dUlvV2lkdGhGaWxsVWludDgsIEVmaUNwdUlvV2lkdGhGaWxsVWludDE2LA0KPj4gKyBFZmlDcHVJ b1dpZHRoRmlsbFVpbnQzMiwgb3IgRWZpQ3B1SW9XaWR0aEZpbGxVaW50NjQsIHRoZW4gb25seQ0K Pj4gKyBBZGRyZXNzIGlzICBpbmNyZW1lbnRlZCBmb3IgZWFjaCBvZiB0aGUgQ291bnQgb3BlcmF0 aW9ucyB0aGF0IGlzDQo+PiArIHBlcmZvcm1lZC4gVGhlIHJlYWQgb3IgIHdyaXRlIG9wZXJhdGlv biBpcyBwZXJmb3JtZWQgQ291bnQgdGltZXMgZnJvbSB0aGUNCj5maXJzdCBlbGVtZW50IG9mIEJ1 ZmZlci4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgIEEgcG9pbnRlciB0byB0aGUg RUZJX0NQVV9JTzJfUFJPVE9DT0wgaW5zdGFuY2UuDQo+PiArICBAcGFyYW1baW5dICBXaWR0aCAg ICBTaWduaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBJL08gb3IgTWVtb3J5IG9wZXJhdGlvbi4NCj4+ ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkvTyBvcGVy YXRpb24uDQo+PiArICBAcGFyYW1baW5dICBDb3VudCAgICBUaGUgbnVtYmVyIG9mIEkvTyBvcGVy YXRpb25zIHRvIHBlcmZvcm0uIFRoZSBudW1iZXINCj5vZg0KPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgYnl0ZXMgbW92ZWQgaXMgV2lkdGggc2l6ZSAqIENvdW50LCBzdGFydGluZyBhdCBBZGRy ZXNzLg0KPj4gKyAgQHBhcmFtW291dF0gQnVmZmVyICAgRm9yIHJlYWQgb3BlcmF0aW9ucywgdGhl IGRlc3RpbmF0aW9uIGJ1ZmZlciB0byBzdG9yZSB0aGUNCj5yZXN1bHRzLg0KPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgRm9yIHdyaXRlIG9wZXJhdGlvbnMsIHRoZSBzb3VyY2UgYnVmZmVyIGZy b20gd2hpY2ggdG8gd3JpdGUgZGF0YS4NCj4+ICsNCj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBUaGUgZGF0YSB3YXMgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIFBJDQo+ c3lzdGVtLg0KPj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFdpZHRoIGlzIGlu dmFsaWQgZm9yIHRoaXMgUEkgc3lzdGVtLg0KPj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgIEJ1ZmZlciBpcyBOVUxMLg0KPj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgIFRoZSBCdWZmZXIgaXMgbm90IGFsaWduZWQgZm9yIHRoZSBnaXZlbiBXaWR0aC4NCj4+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGUgYWRkcmVzcyByYW5nZSBzcGVjaWZp ZWQgYnkgQWRkcmVzcywNCj5XaWR0aCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhbmQgQ291bnQgaXMgbm90IHZhbGlkIGZvciB0aGlzIFBJIHN5c3RlbS4NCj4+ICsNCj4+ ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQ3B1SW9T ZXJ2aWNlUmVhZCAoDQo+PiArICBJTiAgRUZJX0NQVV9JTzJfUFJPVE9DT0wgICAgICAgKlRoaXMs DQo+PiArICBJTiAgRUZJX0NQVV9JT19QUk9UT0NPTF9XSURUSCAgV2lkdGgsDQo+PiArICBJTiAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4+ICsgIElOICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICBDb3VudCwNCj4+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAqQnVmZmVyDQo+PiArICApDQo+PiArew0KPj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K Pj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIFdyaXRlIEkvTyByZWdpc3RlcnMuDQo+PiArDQo+ PiArICBUaGUgSS9PIG9wZXJhdGlvbnMgYXJlIGNhcnJpZWQgb3V0IGV4YWN0bHkgYXMgcmVxdWVz dGVkLiBUaGUgY2FsbGVyDQo+PiArIGlzIHJlc3BvbnNpYmxlICBmb3Igc2F0aXNmeWluZyBhbnkg YWxpZ25tZW50IGFuZCBJL08gd2lkdGgNCj4+ICsgcmVzdHJpY3Rpb25zIHRoYXQgYSBQSSBTeXN0 ZW0gb24gYSAgcGxhdGZvcm0gbWlnaHQgcmVxdWlyZS4gRm9yDQo+PiArIGV4YW1wbGUgb24gc29t ZSBwbGF0Zm9ybXMsIHdpZHRoIHJlcXVlc3RzIG9mDQo+PiArICBFZmlDcHVJb1dpZHRoVWludDY0 IGRvIG5vdCB3b3JrLg0KPj4gKw0KPj4gKyAgSWYgV2lkdGggaXMgRWZpQ3B1SW9XaWR0aFVpbnQ4 LCBFZmlDcHVJb1dpZHRoVWludDE2LA0KPj4gKyBFZmlDcHVJb1dpZHRoVWludDMyLCAgb3IgRWZp Q3B1SW9XaWR0aFVpbnQ2NCwgdGhlbiBib3RoIEFkZHJlc3MgYW5kDQo+PiArIEJ1ZmZlciBhcmUg aW5jcmVtZW50ZWQgZm9yICBlYWNoIG9mIHRoZSBDb3VudCBvcGVyYXRpb25zIHRoYXQgaXMgcGVy Zm9ybWVkLg0KPj4gKw0KPj4gKyAgSWYgV2lkdGggaXMgRWZpQ3B1SW9XaWR0aEZpZm9VaW50OCwg RWZpQ3B1SW9XaWR0aEZpZm9VaW50MTYsDQo+PiArIEVmaUNwdUlvV2lkdGhGaWZvVWludDMyLCBv ciBFZmlDcHVJb1dpZHRoRmlmb1VpbnQ2NCwgdGhlbiBvbmx5DQo+PiArIEJ1ZmZlciBpcyAgaW5j cmVtZW50ZWQgZm9yIGVhY2ggb2YgdGhlIENvdW50IG9wZXJhdGlvbnMgdGhhdCBpcw0KPj4gKyBw ZXJmb3JtZWQuIFRoZSByZWFkIG9yICB3cml0ZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIENvdW50 IHRpbWVzIG9uIHRoZQ0KPnNhbWUgQWRkcmVzcy4NCj4+ICsNCj4+ICsgIElmIFdpZHRoIGlzIEVm aUNwdUlvV2lkdGhGaWxsVWludDgsIEVmaUNwdUlvV2lkdGhGaWxsVWludDE2LA0KPj4gKyBFZmlD cHVJb1dpZHRoRmlsbFVpbnQzMiwgb3IgRWZpQ3B1SW9XaWR0aEZpbGxVaW50NjQsIHRoZW4gb25s eQ0KPj4gKyBBZGRyZXNzIGlzICBpbmNyZW1lbnRlZCBmb3IgZWFjaCBvZiB0aGUgQ291bnQgb3Bl cmF0aW9ucyB0aGF0IGlzDQo+PiArIHBlcmZvcm1lZC4gVGhlIHJlYWQgb3IgIHdyaXRlIG9wZXJh dGlvbiBpcyBwZXJmb3JtZWQgQ291bnQgdGltZXMgZnJvbSB0aGUNCj5maXJzdCBlbGVtZW50IG9m IEJ1ZmZlci4NCj4+ICsNCj4+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgIEEgcG9pbnRlciB0byB0 aGUgRUZJX0NQVV9JTzJfUFJPVE9DT0wgaW5zdGFuY2UuDQo+PiArICBAcGFyYW1baW5dICBXaWR0 aCAgICBTaWduaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBJL08gb3IgTWVtb3J5IG9wZXJhdGlvbi4N Cj4+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEkvTyBv cGVyYXRpb24uDQo+PiArICBAcGFyYW1baW5dICBDb3VudCAgICBUaGUgbnVtYmVyIG9mIEkvTyBv cGVyYXRpb25zIHRvIHBlcmZvcm0uIFRoZSBudW1iZXINCj5vZg0KPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgYnl0ZXMgbW92ZWQgaXMgV2lkdGggc2l6ZSAqIENvdW50LCBzdGFydGluZyBhdCBB ZGRyZXNzLg0KPj4gKyAgQHBhcmFtW2luXSAgQnVmZmVyICAgRm9yIHJlYWQgb3BlcmF0aW9ucywg dGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciB0byBzdG9yZSB0aGUNCj5yZXN1bHRzLg0KPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgRm9yIHdyaXRlIG9wZXJhdGlvbnMsIHRoZSBzb3VyY2UgYnVmZmVy IGZyb20gd2hpY2ggdG8gd3JpdGUgZGF0YS4NCj4+ICsNCj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICBUaGUgZGF0YSB3YXMgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIFBJ DQo+c3lzdGVtLg0KPj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFdpZHRoIGlz IGludmFsaWQgZm9yIHRoaXMgUEkgc3lzdGVtLg0KPj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgIEJ1ZmZlciBpcyBOVUxMLg0KPj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgIFRoZSBCdWZmZXIgaXMgbm90IGFsaWduZWQgZm9yIHRoZSBnaXZlbiBXaWR0aC4NCj4+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBUaGUgYWRkcmVzcyByYW5nZSBzcGVj aWZpZWQgYnkgQWRkcmVzcywNCj5XaWR0aCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhbmQgQ291bnQgaXMgbm90IHZhbGlkIGZvciB0aGlzIFBJIHN5c3RlbS4NCj4+ICsN Cj4+ICsqKi8NCj4+ICtTVEFUSUMNCj4+ICtFRklfU1RBVFVTDQo+PiArRUZJQVBJDQo+PiArQ3B1 SW9TZXJ2aWNlV3JpdGUgKA0KPj4gKyAgSU4gRUZJX0NQVV9JTzJfUFJPVE9DT0wgICAgICAgKlRo aXMsDQo+PiArICBJTiBFRklfQ1BVX0lPX1BST1RPQ09MX1dJRFRIICBXaWR0aCwNCj4+ICsgIElO IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+PiArICBJTiBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICBDb3VudCwNCj4+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICpCdWZmZXINCj4+ICsgICkNCj4+ICt7DQo+PiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ PiArfQ0KPj4gKw0KPj4gKy8vDQo+PiArLy8gQ1BVIEkvTyAyIFByb3RvY29sIGluc3RhbmNlDQo+ PiArLy8NCj4+ICtTVEFUSUMgRUZJX0NQVV9JTzJfUFJPVE9DT0wgbUNwdUlvMiA9IHsNCj4+ICsg IHsNCj4+ICsgICAgQ3B1TWVtb3J5U2VydmljZVJlYWQsDQo+PiArICAgIENwdU1lbW9yeVNlcnZp Y2VXcml0ZQ0KPj4gKyAgfSwNCj4+ICsgIHsNCj4+ICsgICAgQ3B1SW9TZXJ2aWNlUmVhZCwNCj4+ ICsgICAgQ3B1SW9TZXJ2aWNlV3JpdGUNCj4+ICsgIH0NCj4+ICt9Ow0KPj4gKw0KPj4gKw0KPj4g Ky8qKg0KPj4gKyAgVGhlIHVzZXIgRW50cnkgUG9pbnQgZm9yIG1vZHVsZSBDcHVJbzJEeGUuIFRo ZSB1c2VyIGNvZGUgc3RhcnRzIHdpdGggdGhpcw0KPmZ1bmN0aW9uLg0KPj4gKw0KPj4gKyAgQHBh cmFtW2luXSBJbWFnZUhhbmRsZSAgICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBmb3Ig dGhlIEVGSSBpbWFnZS4NCj4+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgICAgQSBwb2ludGVy IHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPj4gKw0KPj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICBUaGUgZW50cnkgcG9pbnQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPj4gKyAg QHJldHZhbCBvdGhlciAgICAgICAgICAgICBTb21lIGVycm9yIG9jY3VycyB3aGVuIGV4ZWN1dGlu ZyB0aGlzIGVudHJ5IHBvaW50Lg0KPj4gKw0KPj4gKyoqLw0KPj4gK0VGSV9TVEFUVVMNCj4+ICtF RklBUEkNCj4+ICtQY2lDcHVJbzJJbml0aWFsaXplICgNCj4+ICsgIElOIEVGSV9IQU5ETEUgICAg ICAgIEltYWdlSGFuZGxlLA0KPj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxl DQo+PiArICApDQo+PiArew0KPj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+PiArDQo+PiArICBB U1NFUlRfUFJPVE9DT0xfQUxSRUFEWV9JTlNUQUxMRUQgKE5VTEwsICZnRWZpQ3B1SW8yUHJvdG9j b2xHdWlkKTsNCj4+ICsgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVy ZmFjZXMgKA0KPj4gKyAgICAgICAgICAgICAgICAgICZtSGFuZGxlLA0KPj4gKyAgICAgICAgICAg ICAgICAgICZnRWZpQ3B1SW8yUHJvdG9jb2xHdWlkLCAmbUNwdUlvMiwNCj4+ICsgICAgICAgICAg ICAgICAgICBOVUxMDQo+PiArICAgICAgICAgICAgICAgICAgKTsNCj4+ICsgIEFTU0VSVF9FRklf RVJST1IgKFN0YXR1cyk7DQo+PiArDQo+PiArICByZXR1cm4gU3RhdHVzOw0KPj4gK30NCj4+IGRp ZmYgLS1naXQgYS9TaWxpY29uL05YUC9Ecml2ZXJzL1BjaUNwdUlvMkR4ZS9QY2lDcHVJbzJEeGUu aW5mDQo+PiBiL1NpbGljb24vTlhQL0RyaXZlcnMvUGNpQ3B1SW8yRHhlL1BjaUNwdUlvMkR4ZS5p bmYNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwLi4yNWExZGIxDQo+ PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9TaWxpY29uL05YUC9Ecml2ZXJzL1BjaUNwdUlvMkR4 ZS9QY2lDcHVJbzJEeGUuaW5mDQo+PiBAQCAtMCwwICsxLDQ4IEBADQo+PiArIyMgQGZpbGUNCj4+ ICsjICBQcm9kdWNlcyB0aGUgQ1BVIEkvTyAyIFByb3RvY29sIGJ5IHVzaW5nIHRoZSBzZXJ2aWNl cyBvZiB0aGUgSS9PIExpYnJhcnkuDQo+PiArIw0KPj4gKyMgQ29weXJpZ2h0IDIwMTggTlhQDQo+ PiArIw0KPj4gKyMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAj IGFyZSBsaWNlbnNlZCBhbmQgbWFkZQ0KPj4gK2F2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlICMgd2hpY2gNCj4+ICthY2NvbXBhbmllcyB0 aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+ PiArZm91bmQgYXQgIw0KPj4gK2h0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91 dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRm9wZQ0KPj4gK25zb3VyY2Uub3JnJTJGbGljZW5z ZXMlMkZic2QtDQo+bGljZW5zZS5waHAmZGF0YT0wMiU3QzAxJTdDdmFiaGF2LnNoYXJtYQ0KPj4N Cj4rJTQwbnhwLmNvbSU3QzQ1MDdjMDcyNmIyNDRhZDY0NzZkMDhkNWE2OWE2NGVlJTdDNjg2ZWEx ZDNiYzJiNGM2Zg0KPmE5MmNkDQo+Pg0KPis5OWM1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NTk4MTA0 NDE0MDQ2NDQwJnNkYXRhPUlGU1UwJTJGZVRkV3J3Z2cNCj4wZjBMcTINCj4+ICtxU1ZHZ29nRzY4 dFlaZXZyUm1DJTJCa1Y4JTNEJnJlc2VydmVkPTANCj4+ICsjDQo+PiArIyBUSEUgUFJPR1JBTSBJ UyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPj4gK0JB U0lTLCAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQs IEVJVEhFUg0KPkVYUFJFU1MgT1IgSU1QTElFRC4NCj4+ICsjDQo+PiArIyMNCj4+ICsNCj4+ICtb RGVmaW5lc10NCj4+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAw MUENCj4+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFBjaUNwdUlvMkR4ZQ0K Pj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gN2JmZjE4ZDctOWFhZS00MzRi LTljMDYtZjEwYTdlMTU3ZWFjDQo+PiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAg PSBEWEVfRFJJVkVSDQo+PiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjAN Cj4+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFBjaUNwdUlvMkluaXRpYWxp emUNCj4+ICsNCj4+ICtbU291cmNlc10NCj4+ICsgIFBjaUNwdUlvMkR4ZS5jDQo+PiArDQo+PiAr W1BhY2thZ2VzXQ0KPj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4+ICsgIFNpbGljb24vTlhQL054 cFFvcmlxTHMuZGVjDQo+PiArDQo+PiArW0xpYnJhcnlDbGFzc2VzXQ0KPj4gKyAgQmFzZUxpYg0K Pj4gKyAgRGVidWdMaWINCj4+ICsgIElvTGliDQo+PiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVM aWINCj4+ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+PiArDQo+PiArW1BjZF0NCj4+ICsgIGdO eHBRb3JpcUxzVG9rZW5TcGFjZUd1aWQuUGNkUGNpRXhwMUJhc2VBZGRyDQo+PiArICBnTnhwUW9y aXFMc1Rva2VuU3BhY2VHdWlkLlBjZFBjaUV4cDJCYXNlQWRkcg0KPj4gKyAgZ054cFFvcmlxTHNU b2tlblNwYWNlR3VpZC5QY2RQY2lFeHAzQmFzZUFkZHINCj4+ICsgIGdOeHBRb3JpcUxzVG9rZW5T cGFjZUd1aWQuUGNkUGNpRXhwNEJhc2VBZGRyDQo+PiArDQo+PiArW1Byb3RvY29sc10NCj4+ICsg IGdFZmlDcHVJbzJQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgIyMgUFJPRFVD RVMNCj4+ICsNCj4+ICtbRGVwZXhdDQo+PiArICBUUlVFDQo+PiAtLQ0KPj4gMS45LjENCj4+DQo=