From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.1.77; helo=eur01-ve1-obe.outbound.protection.outlook.com; envelope-from=supreeth.venkatesh@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0077.outbound.protection.outlook.com [104.47.1.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id AFF692063E304 for ; Fri, 4 May 2018 16:25:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Fu8JzOkL09WMQOi7eXWpJJBDR4pP0170QgA5C+DzPq0=; b=efKdnbnQnLyetSPfw/RBKVRiGW+WAwgy5bZCbf0mrB16Ks1LGgHE7oY2QrpT3CpF42Uf5p/nFrWff5/wKlPSOH3BC4zQ1MRsfzuIqV+19wZh8eORKR0x6Ix+sDimAy2cc4tn0l6s8Dy9RItFm2/dtFik8pl7s5bwcvav5BBiAV8= Received: from AM4PR0802MB2306.eurprd08.prod.outlook.com (10.172.218.15) by AM4PR0802MB2276.eurprd08.prod.outlook.com (10.172.218.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.735.16; Fri, 4 May 2018 23:25:34 +0000 Received: from AM4PR0802MB2306.eurprd08.prod.outlook.com ([fe80::e117:6f62:6a9b:6be4]) by AM4PR0802MB2306.eurprd08.prod.outlook.com ([fe80::e117:6f62:6a9b:6be4%8]) with mapi id 15.20.0735.016; Fri, 4 May 2018 23:25:33 +0000 From: Supreeth Venkatesh To: Daniil Egranov , "edk2-devel@lists.01.org" Thread-Topic: [edk2] [PATCH v1 12/18] StandaloneMmPkg/CpuMm: Add CPU driver suitable for ARM Platforms. Thread-Index: AQHTzbWmjo3Vy97uiUeyVhqMKMgNjqQHKE4AgBeoONA= Date: Fri, 4 May 2018 23:25:33 +0000 Message-ID: References: <20180406144223.10931-1-supreeth.venkatesh@arm.com> <20180406144223.10931-13-supreeth.venkatesh@arm.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=Supreeth.Venkatesh@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM4PR0802MB2276; 7:1FGuM1u9zzkcnzOzMoW9SMbNcoHMvHt1c5kNRw8AxIUHwvc+8LdY8Wukx2qP0g13VTnQCSzUdXbUC/m1tUrEllj8VwB3Ad4RGIbyURJq8Cls2iiMi3RUO9j618grpnVDLElK6Bj4/g4xhc5m+rpNgorPMPjj+LqHTRX4EGpvgJGd8Raqq/UN+L+/aMLHl+5XR2dGCSovhm8AuDRKj94F9kbunZdeiwihG6aKyxRjGcJV1jMUmsnPc06FCtuzlQKN x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(2017052603328)(7153060)(7193020); SRVR:AM4PR0802MB2276; x-ms-traffictypediagnostic: AM4PR0802MB2276: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(35073007944872)(162533806227266)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3231254)(944501410)(52105095)(3002001)(6055026)(6041310)(20161123564045)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(6072148)(201708071742011); SRVR:AM4PR0802MB2276; BCL:0; PCL:0; RULEID:; SRVR:AM4PR0802MB2276; x-forefront-prvs: 06628F7CA4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6029001)(39860400002)(396003)(366004)(346002)(376002)(39380400002)(199004)(189003)(13464003)(40434004)(53936002)(81166006)(53376002)(7736002)(55016002)(6306002)(9686003)(8936002)(6116002)(2900100001)(3846002)(5250100002)(97736004)(6246003)(68736007)(2501003)(5890100001)(8676002)(25786009)(229853002)(72206003)(86362001)(966005)(3660700001)(478600001)(59450400001)(7696005)(6436002)(3280700002)(106356001)(15188155005)(102836004)(26005)(105586002)(11346002)(6506007)(305945005)(33656002)(76176011)(66066001)(110136005)(5660300001)(14454004)(81156014)(316002)(99286004)(74316002)(53546011)(16200700003)(476003)(16799955002)(446003)(2906002)(486006)(53946003)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0802MB2276; H:AM4PR0802MB2306.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: rGIA1j0yLmWzqhggMBnT2bNWMAMMoU3FcnflObpBkgzaTRCWow9Y+nqInUhqpmJ+4tfTdX/rYe4ZbY4FjpqTEGHC76X19f3bLryxrgyrwjCiQuYyAMXhLQmHPhzyyqRNXwYGf6+HRtDeYhs3ZUgWLKKoX7O1Riqwj9AjdAXNyASbLa7IZpv8rb59E4dEWGuo spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 5b0dfc02-58df-411d-c7cc-08d5b21655b2 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b0dfc02-58df-411d-c7cc-08d5b21655b2 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 May 2018 23:25:33.8660 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0802MB2276 Subject: Re: [PATCH v1 12/18] StandaloneMmPkg/CpuMm: Add CPU driver suitable for ARM Platforms. 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: Fri, 04 May 2018 23:25:38 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TXkgcmVzcG9uc2UgaW5saW5lLg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTog RGFuaWlsIEVncmFub3YgPGRhbmlpbC5lZ3Jhbm92QGFybS5jb20+DQpTZW50OiBXZWRuZXNkYXks IEFwcmlsIDE4LCAyMDE4IDU6MDkgUE0NClRvOiBTdXByZWV0aCBWZW5rYXRlc2ggPFN1cHJlZXRo LlZlbmthdGVzaEBhcm0uY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCkNjOiBhcmQuYmll c2hldXZlbEBsaW5hcm8ub3JnOyBsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc7IGppZXdlbi55YW9A aW50ZWwuY29tOyBsaW1pbmcuZ2FvQGludGVsLmNvbTsgbWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20NClN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIHYxIDEyLzE4XSBTdGFuZGFsb25lTW1Qa2cv Q3B1TW06IEFkZCBDUFUgZHJpdmVyIHN1aXRhYmxlIGZvciBBUk0gUGxhdGZvcm1zLg0KDQpIaSBT dXByZWV0aCwNCg0KSSBhbSBub3Qgc3VyZSBob3cgbXVjaCBpdCBlbmZvcmNlZCBpbiBlZGsyIGJ1 dCBpbiBtb3N0IG9mIHRoZSBjYXNlcywgdGhlIGRyaXZlcidzIG5hbWUgbWF0Y2hlcyBpdHMgZGly ZWN0b3J5IG5hbWUuDQoNCltTdXByZWV0aF0gVGhhbmtzLiBSZW5hbWVkIGl0LiBQbGVhc2UgY2hl Y2sgdmVyc2lvbiAyLg0KDQpUaGFua3MsDQpEYW5paWwNCg0KT24gMDQvMDYvMjAxOCAwOTo0MiBB TSwgU3VwcmVldGggVmVua2F0ZXNoIHdyb3RlOg0KPiBUaGlzIHBhdGNoIGFkZHMgYSBzaW1wbGUg Q1BVIGRyaXZlciB0aGF0IGV4cG9ydHMgdGhlDQo+IEVGSV9NTV9DT05GSUdVUkFUSU9OX1BST1RP Q09MIHRvIGFsbG93IHJlZ2lzdHJhdGlvbiBvZiB0aGUgU3RhbmRhbG9uZQ0KPiBNTSBGb3VuZGF0 aW9uIGVudHJ5IHBvaW50LiBJdCBwcmVzZXJ2ZXMgdGhlIGV4aXN0aW5nIG5vdGlmaWNhdGlvbg0K PiBtZWNoYW5pc20gZm9yIHRoZSBjb25maWd1cmF0aW9uIHByb3RvY29sLg0KPg0KPiBDb250cmli dXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+IFNpZ25l ZC1vZmYtYnk6IEFjaGluIEd1cHRhIDxhY2hpbi5ndXB0YUBhcm0uY29tPg0KPiBTaWduZWQtb2Zm LWJ5OiBTdXByZWV0aCBWZW5rYXRlc2ggPHN1cHJlZXRoLnZlbmthdGVzaEBhcm0uY29tPg0KPiAt LS0NCj4gICBTdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVNbS9Bcm0vRW50cnkuUyAgICAgICAg ICB8ICAzMyArKysNCj4gICBTdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVNbS9Bcm0vRXZlbnRI YW5kbGUuYyAgICB8IDIzMSArKysrKysrKysrKysrKysrKysrKysNCj4gICBTdGFuZGFsb25lTW1Q a2cvRHJpdmVycy9DcHVNbS9Bcm0vSW5pdC5jICAgICAgICAgICB8IDIyOSArKysrKysrKysrKysr KysrKysrKw0KPiAgIC4uLi9DcHVNbS9Bcm0vUGlNbVN0YW5kbG9uZUFybVRmQ3B1RHJpdmVyLmgg ICAgICAgIHwgIDg5ICsrKysrKysrDQo+ICAgLi4uL0NwdU1tL0FybS9QaU1tU3RhbmRsb25lQXJt VGZDcHVEcml2ZXIuaW5mICAgICAgfCAgNjAgKysrKysrDQo+ICAgU3RhbmRhbG9uZU1tUGtnL0Ry aXZlcnMvQ3B1TW0vQXJtL1N0YXRlU2F2ZS5jICAgICAgfCAgNTEgKysrKysNCj4gICBTdGFuZGFs b25lTW1Qa2cvSW5jbHVkZS9HdWlkL01wSW5mb3JtYXRpb24uaCAgICAgICB8ICA0MSArKysrDQo+ ICAgNyBmaWxlcyBjaGFuZ2VkLCA3MzQgaW5zZXJ0aW9ucygrKQ0KPiAgIGNyZWF0ZSBtb2RlIDEw MDY0NCBTdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVNbS9Bcm0vRW50cnkuUw0KPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBTdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVNbS9Bcm0vRXZlbnRIYW5k bGUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBTdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVN bS9Bcm0vSW5pdC5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFN0YW5kYWxvbmVNbVBrZy9Ecml2 ZXJzL0NwdU1tL0FybS9QaU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXIuaA0KPiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCBTdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVNbS9Bcm0vUGlNbVN0YW5kbG9u ZUFybVRmQ3B1RHJpdmVyLmluZg0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBTdGFuZGFsb25lTW1Q a2cvRHJpdmVycy9DcHVNbS9Bcm0vU3RhdGVTYXZlLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg U3RhbmRhbG9uZU1tUGtnL0luY2x1ZGUvR3VpZC9NcEluZm9ybWF0aW9uLmgNCj4NCj4gZGlmZiAt LWdpdCBhL1N0YW5kYWxvbmVNbVBrZy9Ecml2ZXJzL0NwdU1tL0FybS9FbnRyeS5TDQo+IGIvU3Rh bmRhbG9uZU1tUGtnL0RyaXZlcnMvQ3B1TW0vQXJtL0VudHJ5LlMNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uMGI2ZTFjMzMwZA0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL1N0YW5kYWxvbmVNbVBrZy9Ecml2ZXJzL0NwdU1tL0FybS9FbnRyeS5TDQo+IEBAIC0w LDAgKzEsMzMgQEANCj4gKy8vDQo+ICsvLyAgQ29weXJpZ2h0IChjKSAyMDE3LCBBUk0gTGltaXRl ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKy8vDQo+ICsvLyAgVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAvLyAgYXJlIGxpY2Vuc2VkIGFuZA0KPiArbWFkZSBh dmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5z ZSAvLw0KPiArd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0 ZXh0IG9mIHRoZSBsaWNlbnNlDQo+ICttYXkgYmUgZm91bmQgYXQgLy8gIGh0dHA6Ly9vcGVuc291 cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKy8vDQo+ICsvLyAgVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4g K0JBU0lTLCAvLyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkg S0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKy8vDQo+ICsvLw0KPiArDQo+ICsj aW5jbHVkZSA8QmFzZS5oPg0KPiArI2luY2x1ZGUgPEF1dG9HZW4uaD4NCj4gKyNpbmNsdWRlIDxJ bmR1c3RyeVN0YW5kYXJkL0FybVN0ZFNtYy5oPg0KPiArDQo+ICsudGV4dA0KPiArLmFsaWduIDMN Cj4gKw0KPiArR0NDX0FTTV9JTVBPUlQoUGlNbVN0YW5kbG9uZUFybVRmQ3B1RHJpdmVyRW50cnkp DQo+ICtHQ0NfQVNNX0VYUE9SVChfUGlNbVN0YW5kbG9uZUFybVRmQ3B1RHJpdmVyRW50cnkpDQo+ ICsNCj4gKy8vIFN0dWIgZW50cnkgcG9pbnQgdG8gZW5zdXJlIHRoYXQgdGhlIHN0YWNrcyBhcmUg Y29tcGxldGVseSB1bndvdW5kDQo+ICtiZWZvcmUgLy8gc2lnbmFsbGluZyBjb21wbGV0aW9uIG9m IGV2ZW50IGhhbmRsaW5nDQo+ICtBU01fUEZYKF9QaU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXJF bnRyeSk6DQo+ICsgIGJsICAgIFBpTW1TdGFuZGxvbmVBcm1UZkNwdURyaXZlckVudHJ5DQo+ICsg IG1vdiAgIHgxLCB4MA0KPiArICBtb3YgICB4MCwgIyhBUk1fU01DX0lEX01NX0VWRU5UX0NPTVBM RVRFX0FBUkNINjQgJiAweGZmZmYpDQo+ICsgIG1vdmsgIHgwLCAjKChBUk1fU01DX0lEX01NX0VW RU5UX0NPTVBMRVRFX0FBUkNINjQgPj4gMTYpICYgMHhmZmZmKSwgbHNsICMxNg0KPiArICBzdmMg ICAjMA0KPiArTG9vcEZvcmV2ZXI6DQo+ICsgIGIgICAgIExvb3BGb3JldmVyDQo+IGRpZmYgLS1n aXQgYS9TdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVNbS9Bcm0vRXZlbnRIYW5kbGUuYw0KPiBi L1N0YW5kYWxvbmVNbVBrZy9Ecml2ZXJzL0NwdU1tL0FybS9FdmVudEhhbmRsZS5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjdiMTlmNTNlY2INCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9TdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVNbS9Bcm0vRXZlbnRI YW5kbGUuYw0KPiBAQCAtMCwwICsxLDIzMSBAQA0KPiArLyoqIEBmaWxlDQo+ICsNCj4gKyAgQ29w eXJpZ2h0IChjKSAyMDE2IEhQIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4NCj4gKyAgQ29weXJp Z2h0IChjKSAyMDE2IC0gMjAxNywgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAgYXJl IGxpY2Vuc2VkIGFuZCBtYWRlDQo+ICsgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29u ZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgIHdoaWNoDQo+ICsgYWNjb21wYW5pZXMgdGhpcyBk aXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiArIGZv dW5kIGF0ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNF IE9OIEFOICJBUyBJUyINCj4gKyBCQVNJUywgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNF TlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4g KyoqLw0KPiArDQo+ICsjaW5jbHVkZSA8QmFzZS5oPg0KPiArI2luY2x1ZGUgPFBpL1BpTW1DaXMu aD4NCj4gKw0KPiArDQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Bcm1TdmNMaWIuaD4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L0FybUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxp Yi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L0hvYkxpYi5oPg0KPiArDQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRGVidWdTdXBwb3J0Lmg+ IC8vIGZvciBFRklfU1lTVEVNX0NPTlRFWFQNCj4gKw0KPiArI2luY2x1ZGUgPEd1aWQvWmVyb0d1 aWQuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL01tcmFtTWVtb3J5UmVzZXJ2ZS5oPg0KPiArDQo+ICsj aW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9Bcm1TdGRTbWMuaD4NCj4gKw0KPiArI2luY2x1ZGUg IlBpTW1TdGFuZGxvbmVBcm1UZkNwdURyaXZlci5oIg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK01tRm91bmRhdGlvbkVudHJ5UmVnaXN0ZXIoDQo+ICsgIElOIENPTlNUIEVGSV9N TV9DT05GSUdVUkFUSU9OX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX01NX0VOVFJZX1BP SU5UICAgICAgICAgICAgICAgICAgICBNbUVudHJ5UG9pbnQNCj4gKyAgKTsNCj4gKw0KPiArLy8N Cj4gKy8vIE9uIEFSTSBwbGF0Zm9ybXMgZXZlcnkgZXZlbnQgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBh IEdVSUQgYXNzb2NpYXRlZA0KPiArd2l0aCAvLyBpdC4gSXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBN TSBFbnRyeSBwb2ludCB0byBmaW5kIHRoZSBoYW5kbGVyDQo+ICtmb3IgdGhlIC8vIGV2ZW50LiBJ dCB3aWxsIGVpdGhlciBiZSBwb3B1bGF0ZWQgaW4gYQ0KPiArRUZJX01NX0NPTU1VTklDQVRFX0hF QURFUiBieSB0aGUgLy8gY2FsbGVyIG9mIHRoZSBldmVudCAoZS5nLg0KPiArTU1fQ09NTVVOSUNB VEUgU01DKSBvciBieSB0aGUgQ1BVIGRyaXZlciAvLyAoZS5nLiBkdXJpbmcgYW4NCj4gK2FzeW5j aHJvbm91cyBldmVudCkuIEluIGVpdGhlciBjYXNlLCB0aGlzIGNvbnRleHQgaXMgLy8gbWFpbnRh aW5lZCBpbg0KPiArYW4gYXJyYXkgd2hpY2ggaGFzIGFuIGVudHJ5IGZvciBlYWNoIENQVS4gVGhl IHBvaW50ZXIgdG8gdGhpcyAvLw0KPiArYXJyYXkgaXMgaGVsZCBpbiBQZXJDcHVHdWlkZWRFdmVu dENvbnRleHQuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgb25jZQ0KPiArdGhlIC8vIG51bWJlciBvZiBD UFVzIGluIHRoZSBzeXN0ZW0gYXJlIG1hZGUga25vd24gdGhyb3VnaCB0aGUgLy8gTVBfSU5GT1JN QVRJT05fSE9CX0RBVEEuDQo+ICsvLw0KPiArRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiAqKlBl ckNwdUd1aWRlZEV2ZW50Q29udGV4dCA9IE5VTEw7DQo+ICsNCj4gKy8vDQo+ICsvLyBXaGVuIGFu IGV2ZW50IGlzIHJlY2VpdmVkIGJ5IHRoZSBDUFUgZHJpdmVyLCBpdCBjb3VsZCBjb3JyZXNwb25k DQo+ICt0byBhIHVuaXF1ZSAvLyBHVUlEIChlLmcuIGludGVycnVwdCBldmVudHMpIG9yIHRvIG11 bHRpcGxlIEdVSURzDQo+ICsoZS5nLiBNTV9DT01NVU5JQ0FURSAvLyBTTUMpLiBBIHRhYmxlIGlz IHVzZWQgYnkgdGhlIENQVSBkcml2ZXIgdG8NCj4gK2ZpbmQgdGhlIEdVSUQgY29ycmVzcG9uZGlu ZyB0byB0aGUgLy8gZXZlbnQgaWQgaW4gY2FzZSB0aGVyZSBpcyBhIDE6MQ0KPiArbWFwcGluZyBi ZXR3ZWVuIHRoZSB0d28uIElmIGFuIGV2ZW50IGlkIGhhcyAvLyBtdWx0aXBsZSBHVUlEcw0KPiAr YXNzb2NpYXRlZCB3aXRoIGl0IHRoZW4gc3VjaCBhbiBlbnRyeSB3aWxsIG5vdCBiZSBmb3VuZCBp biAvLyB0aGlzIHRhYmxlLg0KPiArLy8NCj4gKy8vIFRPRE86IEN1cnJlbnRseSBOVUxMIHNpbmNl IHRoZXJlIGFyZSBubyBhc3luY2hyb25vdXMgZXZlbnRzIHN0YXRpYw0KPiArRUZJX0dVSUQgKkV2 ZW50SWRUb0d1aWRMb29rdXBUYWJsZSA9IE5VTEw7DQo+ICsNCj4gKy8vIERlc2NyaXB0b3Igd2l0 aCB3aGVyZWFib3V0cyBvZiBtZW1vcnkgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoDQo+ICt0 aGUgbm9ybWFsIHdvcmxkIEVGSV9NTVJBTV9ERVNDUklQVE9SICBtTnNDb21tQnVmZmVyOw0KPiAr DQo+ICtNUF9JTkZPUk1BVElPTl9IT0JfREFUQSAqbU1wSW5mb3JtYXRpb25Ib2JEYXRhOw0KPiAr DQo+ICtFRklfTU1fQ09ORklHVVJBVElPTl9QUk9UT0NPTCBtTW1Db25maWcgPSB7DQo+ICsgIDAs DQo+ICsgIE1tRm91bmRhdGlvbkVudHJ5UmVnaXN0ZXINCj4gK307DQo+ICsNCj4gK3N0YXRpYyBF RklfTU1fRU5UUllfUE9JTlQgICAgIG1NbUVudHJ5UG9pbnQgPSBOVUxMOw0KPiArDQo+ICtFRklf U1RBVFVTDQo+ICtQaU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXJFbnRyeSAoDQo+ICsgIElOIFVJ TlROIEV2ZW50SWQsDQo+ICsgIElOIFVJTlROIENwdU51bWJlciwNCj4gKyAgSU4gVUlOVE4gTnND b21tQnVmZmVyQWRkcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9NTV9DT01NVU5JQ0FURV9IRUFE RVIgKkd1aWRlZEV2ZW50Q29udGV4dCA9IE5VTEw7DQo+ICsgIEVGSV9NTV9FTlRSWV9DT05URVhU ICAgICAgICBNbUVudHJ5UG9pbnRDb250ZXh0ID0gezB9Ow0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgTnND b21tQnVmZmVyU2l6ZTsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSZWNlaXZlZCBl dmVudCAtIDB4JXggb24gY3B1ICVkXG4iLCBFdmVudElkLA0KPiArIENwdU51bWJlcikpOw0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIEFSTSBURiBwYXNzZXMgU01DIEZJRCBvZiB0aGUgTU1fQ09NTVVO SUNBVEUgaW50ZXJmYWNlIGFzIHRoZQ0KPiArIEV2ZW50IElEIHVwb24gIC8vIHJlY2VpcHQgb2Yg YSBzeW5jaHJvbm91cyBNTSByZXF1ZXN0LiBVc2UgdGhlIEV2ZW50DQo+ICsgSUQgdG8gZGlzdGlu Z3Vpc2ggIC8vIGJldHdlZW4gc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBldmVudHMuDQo+ ICsgIC8vDQo+ICsgIGlmIChBUk1fU01DX0lEX01NX0NPTU1VTklDQVRFX0FBUkNINjQgIT0gRXZl bnRJZCkgew0KPiArICAgIC8vIEZvdW5kIGEgR1VJRCwgYWxsb2NhdGUgbWVtb3J5IHRvIHBvcHVs YXRlIGEgY29tbXVuaWNhdGlvbiBidWZmZXINCj4gKyAgICAvLyB3aXRoIHRoZSBHVUlEIGluIGl0 DQo+ICsgICAgU3RhdHVzID0gbU1tc3QtPk1tQWxsb2NhdGVQb29sKEVmaVJ1bnRpbWVTZXJ2aWNl c0RhdGEsIHNpemVvZihFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVSKSwgKFZPSUQgKiopICZHdWlk ZWRFdmVudENvbnRleHQpOw0KPiArICAgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4g KyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIk1lbSBhbGxvYyBmYWlsZWQgLSAweCV4XG4iLCBF dmVudElkKSk7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAg IC8vIENvcHkgdGhlIEdVSUQNCj4gKyAgICBDb3B5R3VpZCgmR3VpZGVkRXZlbnRDb250ZXh0LT5I ZWFkZXJHdWlkLA0KPiArICZFdmVudElkVG9HdWlkTG9va3VwVGFibGVbRXZlbnRJZF0pOw0KPiAr DQo+ICsgICAgLy8gTWVzc2FnZSBMZW5ndGggaXMgMCAnY2F1c2Ugb2YgdGhlIGFzc3VtcHRpb24g bWVudGlvbmVkIGFib3ZlDQo+ICsgICAgR3VpZGVkRXZlbnRDb250ZXh0LT5NZXNzYWdlTGVuZ3Ro ID0gMDsgIH0gZWxzZSB7DQo+ICsgICAgLy8gVE9ETzogUGVyZm9ybSBwYXJhbWV0ZXIgdmFsaWRh dGlvbiBvZiBOc0NvbW1CdWZmZXJBZGRyDQo+ICsNCj4gKyAgICAvLyBUaGlzIGV2ZW50IGlkIGlz IHRoZSBwYXJlbnQgb2YgbXVsdGlwbGUgR1VJRGVkIGhhbmRsZXJzLiBSZXRyaWV2ZQ0KPiArICAg IC8vIHRoZSBzcGVjaWZpYyBHVUlEIGZyb20gdGhlIGNvbW11bmljYXRpb24gYnVmZmVyIHBhc3Nl ZCBieSB0aGUNCj4gKyAgICAvLyBjYWxsZXIuDQo+ICsNCj4gKyAgICBpZiAoTnNDb21tQnVmZmVy QWRkciAmJiAoTnNDb21tQnVmZmVyQWRkciA8IG1Oc0NvbW1CdWZmZXIuUGh5c2ljYWxTdGFydCkp DQo+ICsgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArDQo+ICsgICAgLy8g RmluZCBvdXQgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBwYXNzZWQNCj4gKyAgICBOc0NvbW1CdWZm ZXJTaXplID0gKChFRklfTU1fQ09NTVVOSUNBVEVfSEVBREVSICopIE5zQ29tbUJ1ZmZlckFkZHIp LT5NZXNzYWdlTGVuZ3RoICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigoKEVG SV9NTV9DT01NVU5JQ0FURV9IRUFERVIgKilOc0NvbW1CdWZmZXJBZGRyKS0+TWVzc2FnZUxlbmd0 aCkgKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCgoRUZJX01NX0NPTU1VTklD QVRFX0hFQURFUg0KPiArICopTnNDb21tQnVmZmVyQWRkciktPkhlYWRlckd1aWQpOw0KPiArDQo+ ICsgICAgLy8gQWx0ZXJuYXRpdmUgYXBwcm9hY2ggaW4gY2FzZSBFTDMgaGFzIHByZWFsbG9jYXRl ZCB0aGUgbm9uLXNlY3VyZQ0KPiArICAgIC8vIGJ1ZmZlci4gTU0gRm91bmRhdGlvbiBpcyB0b2xk IGFib3V0IHRoZSBidWZmZXIgdGhyb3VnaCB0aGUgSG9ibGlzdA0KPiArICAgIC8vIGFuZCBpcyBy ZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZyB0aGUgYm91bmRzIGNoZWNrLg0KPiArICAgIGlmIChO c0NvbW1CdWZmZXJBZGRyICsgTnNDb21tQnVmZmVyU2l6ZSA+PQ0KPiArICAgICAgbU5zQ29tbUJ1 ZmZlci5QaHlzaWNhbFN0YXJ0ICsgbU5zQ29tbUJ1ZmZlci5QaHlzaWNhbFNpemUpDQo+ICsgICAg ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsNCj4gKw0KPiArICAgIC8vIE5v dyB0aGF0IHRoZSBzZWN1cmUgd29ybGQgY2FuIHNlZSB0aGUgbm9ybWFsIHdvcmxkIGJ1ZmZlciwg YWxsb2NhdGUNCj4gKyAgICAvLyBtZW1vcnkgdG8gY29weSB0aGUgY29tbXVuaWNhdGlvbiBidWZm ZXIgdG8gdGhlIHNlY3VyZSB3b3JsZC4NCj4gKyAgICBTdGF0dXMgPSBtTW1zdC0+TW1BbGxvY2F0 ZVBvb2woRWZpUnVudGltZVNlcnZpY2VzRGF0YSwgTnNDb21tQnVmZmVyU2l6ZSwgKFZPSUQgKiop ICZHdWlkZWRFdmVudENvbnRleHQpOw0KPiArICAgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1Mp IHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIk1lbSBhbGxvYyBmYWlsZWQgLSAweCV4 XG4iLCBFdmVudElkKSk7DQo+ICsgICAgICAvLyBUT0RPOiBVbm1hcCBzZWN1cmUgbWVtb3J5IGJl Zm9yZSBleGl0aW5nIHRvIHRoZSBub3JtYWwgd29ybGQNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8gWDEgY29udGFpbnMgdGhlIFZBIG9mIHRoZSBub3Jt YWwgd29ybGQgbWVtb3J5IGFjY2Vzc2libGUgZnJvbQ0KPiArICAgIC8vIFMtRUwwDQo+ICsgICAg Q29weU1lbShHdWlkZWRFdmVudENvbnRleHQsIChDT05TVCBWT0lEICopIE5zQ29tbUJ1ZmZlckFk ZHIsDQo+ICsgTnNDb21tQnVmZmVyU2l6ZSk7ICB9DQo+ICsNCj4gKyAgLy8gU3Rhc2ggdGhlIHBv aW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBFdmVudCBDb250ZXh0IGZvciB0aGlzIENQVQ0KPiArIFBl ckNwdUd1aWRlZEV2ZW50Q29udGV4dFtDcHVOdW1iZXJdID0gR3VpZGVkRXZlbnRDb250ZXh0Ow0K PiArDQo+ICsgIC8vIFRPRE86IFBvcHVsYXRlIGVudGlyZSBlbnRyeSBwb2ludCBjb250ZXh0IHdp dGggdmFsaWQgaW5mb3JtYXRpb24NCj4gKyBNbUVudHJ5UG9pbnRDb250ZXh0LkN1cnJlbnRseUV4 ZWN1dGluZ0NwdSA9IENwdU51bWJlcjsNCj4gKyBNbUVudHJ5UG9pbnRDb250ZXh0Lk51bWJlck9m Q3B1cyA9DQo+ICsgbU1wSW5mb3JtYXRpb25Ib2JEYXRhLT5OdW1iZXJPZlByb2Nlc3NvcnM7DQo+ ICsNCj4gKyAgLy8gUG9wdWxhdGUgdGhlIE1NIHN5c3RlbSB0YWJsZSB3aXRoIE1QIGFuZCBzdGF0 ZSBpbmZvcm1hdGlvbg0KPiArIG1NbXN0LT5DdXJyZW50bHlFeGVjdXRpbmdDcHUgPSBDcHVOdW1i ZXI7ICBtTW1zdC0+TnVtYmVyT2ZDcHVzID0NCj4gKyBtTXBJbmZvcm1hdGlvbkhvYkRhdGEtPk51 bWJlck9mUHJvY2Vzc29yczsNCj4gKyAgbU1tc3QtPkNwdVNhdmVTdGF0ZVNpemUgPSAwOw0KPiAr ICBtTW1zdC0+Q3B1U2F2ZVN0YXRlID0gTlVMTDsNCj4gKw0KPiArICBtTW1FbnRyeVBvaW50KCZN bUVudHJ5UG9pbnRDb250ZXh0KTsNCj4gKw0KPiArICAvLyBGcmVlIHRoZSBtZW1vcnkgYWxsb2Nh dGlvbiBkb25lIGVhcmxpZXIgYW5kIHJlc2V0IHRoZSBwZXItY3B1DQo+ICsgY29udGV4dCAgLy8g VE9ETzogQ2hlY2sgZm9yIHRoZSByZXR1cm4gc3RhdHVzIG9mIHRoZSBGcmVlUG9vbCBBUEkNCj4g KyBBU1NFUlQgKEd1aWRlZEV2ZW50Q29udGV4dCk7ICBDb3B5TWVtICgoVk9JRCAqKU5zQ29tbUJ1 ZmZlckFkZHIsDQo+ICsgKENPTlNUIFZPSUQgKikgR3VpZGVkRXZlbnRDb250ZXh0LCBOc0NvbW1C dWZmZXJTaXplKTsNCj4gKyBtTW1zdC0+TW1GcmVlUG9vbCgoVk9JRCAqKSBHdWlkZWRFdmVudENv bnRleHQpOw0KPiArIFBlckNwdUd1aWRlZEV2ZW50Q29udGV4dFtDcHVOdW1iZXJdID0gTlVMTDsN Cj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK01tRm91bmRhdGlvbkVudHJ5UmVnaXN0ZXIoDQo+ICsgIElOIENPTlNUIEVGSV9N TV9DT05GSUdVUkFUSU9OX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX01NX0VOVFJZX1BP SU5UICAgICAgICAgICAgICAgICAgICBNbUVudHJ5UG9pbnQNCj4gKyAgKSB7DQo+ICsgIC8vIHN0 b3JlIHRoZSBlbnRyeSBwb2ludCBpbiBhIGdsb2JhbA0KPiArICBtTW1FbnRyeVBvaW50ID0gTW1F bnRyeVBvaW50Ow0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBhbiBNTSBoYW5k bGVyIGRpc3BhdGNoDQo+ICsgIG9yIGNvbW11bmljYXRlLWJhc2VkIGNhbGxiYWNrLg0KPiArDQo+ ICsgIEBwYXJhbSAgRGlzcGF0Y2hIYW5kbGUgIFRoZSB1bmlxdWUgaGFuZGxlIGFzc2lnbmVkIHRv IHRoaXMgaGFuZGxlciBieSBNbWlIYW5kbGVyUmVnaXN0ZXIoKS4NCj4gKyAgQHBhcmFtICBDb250 ZXh0ICAgICAgICAgUG9pbnRzIHRvIGFuIG9wdGlvbmFsIGhhbmRsZXIgY29udGV4dCB3aGljaCB3 YXMgc3BlY2lmaWVkIHdoZW4gdGhlIGhhbmRsZXIgd2FzIHJlZ2lzdGVyZWQuDQo+ICsgIEBwYXJh bSAgQ29tbUJ1ZmZlciAgICAgIEEgcG9pbnRlciB0byBhIGNvbGxlY3Rpb24gb2YgZGF0YSBpbiBt ZW1vcnkgdGhhdCB3aWxsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGNvbnZleWVk IGZyb20gYSBub24tTU0gZW52aXJvbm1lbnQgaW50byBhbiBNTSBlbnZpcm9ubWVudC4NCj4gKyAg QHBhcmFtICBDb21tQnVmZmVyU2l6ZSAgVGhlIHNpemUgb2YgdGhlIENvbW1CdWZmZXIuDQo+ICsN Cj4gKyAgQHJldHVybiBTdGF0dXMgQ29kZQ0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArUGlNbUNwdVRwRndSb290TW1pSGFuZGxlciAoDQo+ICsgIElOICAgICBFRklf SEFORExFICAgICAgICAgICAgICAgRGlzcGF0Y2hIYW5kbGUsDQo+ICsgIElOICAgICBDT05TVCBW T0lEICAgICAgICAgICAgICAgKkNvbnRleHQsICAgICAgICBPUFRJT05BTA0KPiArICBJTiBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICAgICpDb21tQnVmZmVyLCAgICAgT1BUSU9OQUwNCj4gKyAg SU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAqQ29tbUJ1ZmZlclNpemUgIE9QVElPTkFM DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAg Q3B1TnVtYmVyOw0KPiArDQo+ICsgIEFTU0VSVCAoQ29udGV4dCA9PSBOVUxMKTsNCj4gKyAgQVNT RVJUIChDb21tQnVmZmVyID09IE5VTEwpOw0KPiArICBBU1NFUlQgKENvbW1CdWZmZXJTaXplID09 IE5VTEwpOw0KPiArDQo+ICsgIENwdU51bWJlciA9IG1NbXN0LT5DdXJyZW50bHlFeGVjdXRpbmdD cHU7ICBpZg0KPiArICghUGVyQ3B1R3VpZGVkRXZlbnRDb250ZXh0W0NwdU51bWJlcl0pDQo+ICsg ICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAi Q29tbUJ1ZmZlciAtIDB4JXgsIENvbW1CdWZmZXJTaXplIC0gMHgleFxuIiwNCj4gKyAgICAgICAg ICBQZXJDcHVHdWlkZWRFdmVudENvbnRleHRbQ3B1TnVtYmVyXSwNCj4gKyAgICAgICAgICBQZXJD cHVHdWlkZWRFdmVudENvbnRleHRbQ3B1TnVtYmVyXS0+TWVzc2FnZUxlbmd0aCkpOw0KPiArDQo+ ICsgIFN0YXR1cyA9IG1NbXN0LT5NbWlNYW5hZ2UoJlBlckNwdUd1aWRlZEV2ZW50Q29udGV4dFtD cHVOdW1iZXJdLT5IZWFkZXJHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4g KyAgICAgICAgICAgICAgICAgICAgIFBlckNwdUd1aWRlZEV2ZW50Q29udGV4dFtDcHVOdW1iZXJd LT5EYXRhLA0KPiArDQo+ICsgJlBlckNwdUd1aWRlZEV2ZW50Q29udGV4dFtDcHVOdW1iZXJdLT5N ZXNzYWdlTGVuZ3RoKTsNCj4gKw0KPiArICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ ICsgICAgREVCVUcgKChERUJVR19XQVJOLCAiVW5hYmxlIHRvIG1hbmFnZSBHdWlkZWQgRXZlbnQg LSAlZFxuIiwNCj4gKyBTdGF0dXMpKTsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiBkaWZmIC0tZ2l0IGEvU3RhbmRhbG9uZU1tUGtnL0RyaXZlcnMvQ3B1TW0vQXJtL0luaXQu Yw0KPiBiL1N0YW5kYWxvbmVNbVBrZy9Ecml2ZXJzL0NwdU1tL0FybS9Jbml0LmMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uOWI0OGVhMTVjMQ0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL1N0YW5kYWxvbmVNbVBrZy9Ecml2ZXJzL0NwdU1tL0FybS9Jbml0LmMN Cj4gQEAgLTAsMCArMSwyMjkgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIENvcHlyaWdodCAo YykgMjAwOCAtIDIwMDksIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsg Q29weXJpZ2h0IChjKSAyMDExLCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4g KyAgQ29weXJpZ2h0IChjKSAyMDE2IEhQIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4NCj4gKyAg Q29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk Lg0KPiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMg IGFyZSBsaWNlbnNlZCBhbmQgbWFkZQ0KPiArIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlICB3aGljaA0KPiArIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4g KyBmb3VuZCBhdCAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBo cA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElD RU5TRSBPTiBBTiAiQVMgSVMiDQo+ICsgQkFTSVMsICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQ UkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiAr DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPEJhc2UuaD4NCj4gKyNpbmNsdWRlIDxQaS9QaU1t Q2lzLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9Bcm0vU3RhbmRhbG9uZU1tQ29yZUVudHJ5UG9p bnQuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9Bcm1TdmNMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0FybUxpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvSG9i TGliLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9EZWJ1Z1N1cHBvcnQuaD4gLy8gZm9y IEVGSV9TWVNURU1fQ09OVEVYVA0KPiArDQo+ICsjaW5jbHVkZSA8R3VpZC9aZXJvR3VpZC5oPg0K PiArI2luY2x1ZGUgPEd1aWQvTW1yYW1NZW1vcnlSZXNlcnZlLmg+DQo+ICsNCj4gKw0KPiArI2lu Y2x1ZGUgIlBpTW1TdGFuZGxvbmVBcm1UZkNwdURyaXZlci5oIg0KPiArDQo+ICsvLyBHVUlEIHRv IGlkZW50aWZ5IEhPQiB3aXRoIHdoZXJlYWJvdXRzIG9mIGNvbW11bmljYXRpb24gYnVmZmVyIHdp dGgNCj4gK05vcm1hbCAvLyBXb3JsZCBleHRlcm4gRUZJX0dVSUQgZ0VmaVN0YW5kYWxvbmVNbU5v blNlY3VyZUJ1ZmZlckd1aWQ7DQo+ICsNCj4gKy8vIEdVSUQgdG8gaWRlbnRpZnkgSE9CIHdoZXJl IHRoZSBlbnRyeSBwb2ludCBvZiB0aGlzIENQVSBkcml2ZXIgd2lsbA0KPiArYmUgLy8gcG9wdWxh dGVkIHRvIGFsbG93IHRoZSBlbnRyeSBwb2ludCBkcml2ZXIgdG8gaW52b2tlIGl0IHVwb24NCj4g K3JlY2VpcHQgb2YgYW4gLy8gZXZlbnQgZXh0ZXJuIEVGSV9HVUlEDQo+ICtnRWZpQXJtVGZDcHVE cml2ZXJFcERlc2NyaXB0b3JHdWlkOw0KPiArDQo+ICsvLw0KPiArLy8gUHJpdmF0ZSBjb3B5IG9m IHRoZSBNTSBzeXN0ZW0gdGFibGUgZm9yIGZ1dHVyZSB1c2UgLy8NCj4gK0VGSV9NTV9TWVNURU1f VEFCTEUgKm1NbXN0ID0gTlVMTDsNCj4gKw0KPiArLy8NCj4gKy8vIEdsb2JhbHMgdXNlZCB0byBp bml0aWFsaXplIHRoZSBwcm90b2NvbCAvLw0KPiArc3RhdGljIEVGSV9IQU5ETEUgICAgICAgICAg ICBtTW1DcHVIYW5kbGUgPSBOVUxMOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtHZXRHdWlkZWRI b2JEYXRhICgNCj4gKyAgSU4gIFZPSUQgKkhvYkxpc3QsDQo+ICsgIElOICBDT05TVCBFRklfR1VJ RCAqSG9iR3VpZCwNCj4gKyAgT1VUIFZPSUQgKipIb2JEYXRhKQ0KPiArew0KPiArICBFRklfSE9C X0dVSURfVFlQRSAqSG9iOw0KPiArDQo+ICsgIGlmICghSG9iTGlzdCB8fCAhSG9iR3VpZCB8fCAh SG9iRGF0YSkNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArDQo+ICsg IEhvYiA9IEdldE5leHRHdWlkSG9iIChIb2JHdWlkLCBIb2JMaXN0KTsgIGlmICghSG9iKQ0KPiAr ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArDQo+ICsgICpIb2JEYXRhID0gR0VUX0dVSURf SE9CX0RBVEEgKEhvYik7ICBpZiAoIUhvYkRhdGEpDQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtQaU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXJJbml0aWFsaXplICgNCj4gKyAgSU4g RUZJX0hBTkRMRSAgICAgICAgIEltYWdlSGFuZGxlLCAgLy8gbm90IGFjdHVhbCBpbWFnZWhhbmRs ZQ0KPiArICBJTiBFRklfTU1fU1lTVEVNX1RBQkxFICAgKlN5c3RlbVRhYmxlICAvLyBub3QgYWN0 dWFsIHN5c3RlbXRhYmxlDQo+ICsgICkNCj4gK3sNCj4gKyAgQVJNX1RGX0NQVV9EUklWRVJfRVBf REVTQ1JJUFRPUiAqQ3B1RHJpdmVyRW50cnlQb2ludERlc2M7DQo+ICsgIEVGSV9DT05GSUdVUkFU SU9OX1RBQkxFICAgICAgICAgKkNvbmZpZ3VyYXRpb25UYWJsZTsNCj4gKyAgTVBfSU5GT1JNQVRJ T05fSE9CX0RBVEEgICAgICAgICAqTXBJbmZvcm1hdGlvbkhvYkRhdGE7DQo+ICsgIEVGSV9NTVJB TV9ERVNDUklQVE9SICAgICAgICAgICAgKk5zQ29tbUJ1Zk1tcmFtUmFuZ2U7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICAgICAgRGlzcGF0Y2hIYW5kbGU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1wSW5mb1NpemU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBB cnJheVNpemU7DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkhvYlN0YXJ0 Ow0KPiArDQo+ICsgIEFTU0VSVCAoU3lzdGVtVGFibGUgIT0gTlVMTCk7DQo+ICsgIG1NbXN0ID0g U3lzdGVtVGFibGU7DQo+ICsNCj4gKyAgLy8gcHVibGlzaCB0aGUgTU0gY29uZmlnIHByb3RvY29s IHNvIHRoZSBNTSBjb3JlIGNhbiByZWdpc3RlciBpdHMNCj4gKyBlbnRyeSBwb2ludCAgU3RhdHVz ID0gbU1tc3QtPk1tSW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgmbU1tQ3B1SGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnRWZpTW1Db25m aWd1cmF0aW9uUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVGSV9OQVRJVkVfSU5URVJGQUNFLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtTW1Db25maWcpOyAgaWYNCj4gKyAoRUZJ X0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgLy8gcHVibGlzaCB0aGUgTU0gQ1BVIHNhdmUgc3RhdGUgcHJvdG9jb2wgIFN0YXR1cyA9DQo+ ICsgbU1tc3QtPk1tSW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgmbU1tQ3B1SGFuZGxlLA0KPiAr ICAgICZnRWZpTW1DcHVQcm90b2NvbEd1aWQsIEVGSV9OQVRJVkVfSU5URVJGQUNFLCAmbU1tQ3B1 U3RhdGUpOyAgaWYNCj4gKyAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gcmVnaXN0ZXIgdGhlIHJvb3QgTU1JIGhhbmRsZXIN Cj4gKyAgU3RhdHVzID0gbU1tc3QtPk1taUhhbmRsZXJSZWdpc3RlciAoUGlNbUNwdVRwRndSb290 TW1pSGFuZGxlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRpc3BhdGNoSGFu ZGxlKTsgIGlmDQo+ICsgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIFJldHJpZXZlIHRoZSBIb2JsaXN0IGZyb20gdGhlIE1N U1QgdG8gZXh0cmFjdCB0aGUgZGV0YWlscyBvZiB0aGUNCj4gKyBOUyAgLy8gY29tbXVuaWNhdGlv biBidWZmZXIgdGhhdCBoYXMgYmVlbiByZXNlcnZlZCBieSBTLUVMMS9FTDMNCj4gKyBDb25maWd1 cmF0aW9uVGFibGUgPSBtTW1zdC0+TW1Db25maWd1cmF0aW9uVGFibGU7ICBmb3IgKEluZGV4ID0g MDsNCj4gKyBJbmRleCA8IG1NbXN0LT5OdW1iZXJPZlRhYmxlRW50cmllczsgSW5kZXgrKykgew0K PiArICAgIGlmIChDb21wYXJlR3VpZCAoJmdFZmlIb2JMaXN0R3VpZCwgJihDb25maWd1cmF0aW9u VGFibGVbSW5kZXhdLlZlbmRvckd1aWQpKSkgew0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0K PiArICB9DQo+ICsNCj4gKyAgLy8gQmFpbCBvdXQgaWYgdGhlIEhvYmxpc3QgY291bGQgbm90IGJl IGZvdW5kICAvLyBUT0RPOiBUaGlzIGNvdWxkDQo+ICsgYWxzbyBtZWFuIHRoYXQgIC8vIHRoZSBu b3JtYWwgd29ybGQgd2lsbCBuZXZlciBpbnRlcmFjdA0KPiArIHN5bmNocm9ub3VzbHkgd2l0aCB0 aGUgTU0gZW52aXJvbm1lbnQgIGlmIChJbmRleCA+PQ0KPiArIG1NbXN0LT5OdW1iZXJPZlRhYmxl RW50cmllcykgew0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIkhvYmxpc3Qgbm90IGZvdW5k IC0gMHgleFxuIiwgSW5kZXgpKTsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQo+ICsgIH0NCj4gKw0KPiArICBIb2JTdGFydCA9IENvbmZpZ3VyYXRpb25UYWJsZVtJbmRleF0u VmVuZG9yVGFibGU7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gTG9jYXRlIHRoZSBIT0Igd2l0aCB0 aGUgYnVmZmVyIHRvIHBvcHVsYXRlIHRoZSBlbnRyeSBwb2ludCBvZg0KPiArIHRoaXMgZHJpdmVy ICAvLyAgU3RhdHVzID0gR2V0R3VpZGVkSG9iRGF0YSAoDQo+ICsgICAgICAgICAgICBIb2JTdGFy dCwNCj4gKyAgICAgICAgICAgICZnRWZpQXJtVGZDcHVEcml2ZXJFcERlc2NyaXB0b3JHdWlkLA0K PiArICAgICAgICAgICAgKFZPSUQgKiopICZDcHVEcml2ZXJFbnRyeVBvaW50RGVzYyk7ICBpZiAo RUZJX0VSUk9SDQo+ICsgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJB cm1UZkNwdURyaXZlckVwRGVzYyBIT0IgZGF0YSBleHRyYWN0aW9uIGZhaWxlZCAtIDB4JXhcbiIs IFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBT aGFyZSB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIENQVSBkcml2ZXIgIERFQlVHICgoREVCVUdfSU5G TywNCj4gKyAiU2hhcmluZyBDcHUgRHJpdmVyIEVQICoweCVseCA9IDB4JWx4XG4iLA0KPiArICAg IChVSU5UNjQpIENwdURyaXZlckVudHJ5UG9pbnREZXNjLT5Bcm1UZkNwdURyaXZlckVwUHRyLA0K PiArICAgIChVSU5UNjQpIFBpTW1TdGFuZGxvbmVBcm1UZkNwdURyaXZlckVudHJ5KSk7DQo+ICsg ICooQ3B1RHJpdmVyRW50cnlQb2ludERlc2MtPkFybVRmQ3B1RHJpdmVyRXBQdHIpID0NCj4gKyBQ aU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXJFbnRyeTsNCj4gKw0KPiArICAvLyBGaW5kIHRoZSBk ZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgdGhlIHdoZXJlYWJvdXRzIG9mIHRoZSBidWZmZXINCj4g KyBmb3IgIC8vIGNvbW11bmljYXRpb24gd2l0aCB0aGUgTm9ybWFsIHdvcmxkLg0KPiArICBTdGF0 dXMgPSBHZXRHdWlkZWRIb2JEYXRhICgNCj4gKyAgICAgICAgICAgIEhvYlN0YXJ0LA0KPiArICAg ICAgICAgICAgJmdFZmlTdGFuZGFsb25lTW1Ob25TZWN1cmVCdWZmZXJHdWlkLA0KPiArICAgICAg ICAgICAgKFZPSUQgKiopICZOc0NvbW1CdWZNbXJhbVJhbmdlKTsgIGlmIChFRklfRVJST1IoU3Rh dHVzKSkNCj4gKyB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiTnNDb21tQnVmTW1yYW1S YW5nZSBIT0IgZGF0YSBleHRyYWN0aW9uIGZhaWxlZCAtIDB4JXhcbiIsIFN0YXR1cykpOw0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8s ICJtTnNDb21tQnVmZmVyLlBoeXNpY2FsU3RhcnQgLSAweCVseFxuIiwNCj4gKyAoVUlOVDY0KSBO c0NvbW1CdWZNbXJhbVJhbmdlLT5QaHlzaWNhbFN0YXJ0KSk7DQo+ICsgIERFQlVHICgoREVCVUdf SU5GTywgIm1Oc0NvbW1CdWZmZXIuUGh5c2ljYWxTaXplIC0gMHglbHhcbiIsDQo+ICsgKFVJTlQ2 NCkgTnNDb21tQnVmTW1yYW1SYW5nZS0+UGh5c2ljYWxTaXplKSk7DQo+ICsNCj4gKyAgQ29weU1l bSAoJm1Oc0NvbW1CdWZmZXIsIE5zQ29tbUJ1Zk1tcmFtUmFuZ2UsDQo+ICsgc2l6ZW9mKEVGSV9N TVJBTV9ERVNDUklQVE9SKSk7ICBERUJVRyAoKERFQlVHX0lORk8sICJtTnNDb21tQnVmZmVyOg0K PiArIDB4JTAxNmx4IC0gMHglbHhcbiIsIG1Oc0NvbW1CdWZmZXIuQ3B1U3RhcnQsDQo+ICsgbU5z Q29tbUJ1ZmZlci5QaHlzaWNhbFNpemUpKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBFeHRyYWN0 IHRoZSBNUCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBIb2JsaXN0ICAvLyAgU3RhdHVzID0NCj4gKyBH ZXRHdWlkZWRIb2JEYXRhIChIb2JTdGFydCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmdNcEluZm9ybWF0aW9uSG9iR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopICZNcEluZm9ybWF0aW9uSG9iRGF0YSk7ICBpZg0KPiArIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJNcEluZm9ybWF0aW9uSG9i IGV4dHJhY3Rpb24gZmFpbGVkIC0gMHgleFxuIiwgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3Ig dGhlIE1QIGluZm9ybWF0aW9uIGFuZCBjb3B5IG92ZXIgdGhlIE1QDQo+ICsgaW5mb3JtYXRpb24g IC8vIHBhc3NlZCBieSBUcnVzdGVkIEZpcm13YXJlLiBVc2UgdGhlIG51bWJlciBvZg0KPiArIHBy b2Nlc3NvcnMgcGFzc2VkIGluIHRoZSBIT0IgIC8vIHRvIGNvcHkgdGhlIHByb2Nlc3NvciBpbmZv cm1hdGlvbg0KPiArIC8vICBNcEluZm9TaXplID0gc2l6ZW9mIChNUF9JTkZPUk1BVElPTl9IT0Jf REFUQSkgKw0KPiArICAgICAgICAgICAgICAgKHNpemVvZiAoRUZJX1BST0NFU1NPUl9JTkZPUk1B VElPTikgKg0KPiArICAgICAgICAgICAgICAgTXBJbmZvcm1hdGlvbkhvYkRhdGEtPk51bWJlck9m UHJvY2Vzc29ycyk7DQo+ICsgIFN0YXR1cyA9IG1NbXN0LT5NbUFsbG9jYXRlUG9vbCAoRWZpUnVu dGltZVNlcnZpY2VzRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN cEluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoq KSAmbU1wSW5mb3JtYXRpb25Ib2JEYXRhKTsNCj4gKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAibU1wSW5mb3JtYXRpb25Ib2JEYXRhIG1lbSBh bGxvYyBmYWlsZWQgLSAweCV4XG4iLCBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgQ29weU1lbSAobU1wSW5mb3JtYXRpb25Ib2JEYXRhLCBNcEluZm9y bWF0aW9uSG9iRGF0YSwgTXBJbmZvU2l6ZSk7DQo+ICsNCj4gKyAgLy8gUHJpbnQgTVAgaW5mb3Jt YXRpb24NCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAibU1wSW5mb3JtYXRpb25Ib2JEYXRhOiAw eCUwMTZseCAtIDB4JWx4XG4iLA0KPiArICAgICAgICAgIG1NcEluZm9ybWF0aW9uSG9iRGF0YS0+ TnVtYmVyT2ZQcm9jZXNzb3JzLA0KPiArICAgICAgICAgIG1NcEluZm9ybWF0aW9uSG9iRGF0YS0+ TnVtYmVyT2ZFbmFibGVkUHJvY2Vzc29ycykpOw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBtTXBJbmZvcm1hdGlvbkhvYkRhdGEtPk51bWJlck9mUHJvY2Vzc29yczsgSW5kZXgrKykgew0K PiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIm1NcEluZm9ybWF0aW9uSG9iRGF0YVsweCVseF06 ICVkLCAlZCwgJWRcbiIsDQo+ICsgICAgICAgICAgICBtTXBJbmZvcm1hdGlvbkhvYkRhdGEtPlBy b2Nlc3NvckluZm9CdWZmZXJbSW5kZXhdLlByb2Nlc3NvcklkLA0KPiArICAgICAgICAgICAgbU1w SW5mb3JtYXRpb25Ib2JEYXRhLT5Qcm9jZXNzb3JJbmZvQnVmZmVyW0luZGV4XS5Mb2NhdGlvbi5Q YWNrYWdlLA0KPiArICAgICAgICAgICAgbU1wSW5mb3JtYXRpb25Ib2JEYXRhLT5Qcm9jZXNzb3JJ bmZvQnVmZmVyW0luZGV4XS5Mb2NhdGlvbi5Db3JlLA0KPiArDQo+ICsgbU1wSW5mb3JtYXRpb25I b2JEYXRhLT5Qcm9jZXNzb3JJbmZvQnVmZmVyW0luZGV4XS5Mb2NhdGlvbi5UaHJlYWQpKTsNCj4g KyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYSB0YWJsZSB0 byBob2xkIHBvaW50ZXJzIHRvIGENCj4gKyAgLy8gRUZJX01NX0NPTU1VTklDQVRFX0hFQURFUiBm b3IgZWFjaCBDUFUNCj4gKyAgLy8NCj4gKyAgQXJyYXlTaXplID0gc2l6ZW9mIChFRklfTU1fQ09N TVVOSUNBVEVfSEVBREVSICopICoNCj4gKyAgICAgICAgICAgICAgbU1wSW5mb3JtYXRpb25Ib2JE YXRhLT5OdW1iZXJPZkVuYWJsZWRQcm9jZXNzb3JzOw0KPiArICBTdGF0dXMgPSBtTW1zdC0+TW1B bGxvY2F0ZVBvb2wgKEVmaVJ1bnRpbWVTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJyYXlTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChWT0lEICoqKQ0KPiArJlBlckNwdUd1aWRlZEV2ZW50Q29udGV4dCk7DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJQ ZXJDcHVHdWlkZWRFdmVudENvbnRleHQgbWVtIGFsbG9jIGZhaWxlZCAtIDB4JXhcbiIsIFN0YXR1 cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gZGlmZiAtLWdpdA0KPiBhL1N0YW5kYWxvbmVNbVBrZy9Ecml2ZXJzL0NwdU1tL0Fy bS9QaU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXIuaA0KPiBiL1N0YW5kYWxvbmVNbVBrZy9Ecml2 ZXJzL0NwdU1tL0FybS9QaU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXIuaA0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4xN2NlZmQxNzFjDQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvU3RhbmRhbG9uZU1tUGtnL0RyaXZlcnMvQ3B1TW0vQXJtL1BpTW1TdGFuZGxv bmVBcm1UZkNwdURyaXZlci5oDQo+IEBAIC0wLDAgKzEsODkgQEANCj4gKy8qKiBAZmlsZQ0KPiAr ICBQcml2YXRlIGhlYWRlciB3aXRoIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgc3BlY2lm aWMgdG8gdGhlIE1NDQo+ICtTdGFuZGFsb25lDQo+ICsgIENQVSBkcml2ZXINCj4gKw0KPiArICBD b3B5cmlnaHQgKGMpIDIwMTcsIEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiAr ICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzICBhcmUgbGljZW5z ZWQgYW5kIG1hZGUNCj4gKyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBCU0QgTGljZW5zZSAgd2hpY2gNCj4gKyBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+ICsgZm91bmQgYXQg IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiAr ICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIg0KPiArIEJBU0lTLCAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ ICsNCj4gKyNpZm5kZWYgX0FSTV9URl9DUFVfRFJJVkVSX0hfDQo+ICsjZGVmaW5lIF9BUk1fVEZf Q1BVX0RSSVZFUl9IXw0KPiArDQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTW1Db21tdW5pY2F0aW9u Lmg+ICNpbmNsdWRlDQo+ICs8UHJvdG9jb2wvTW1Db25maWd1cmF0aW9uLmg+ICNpbmNsdWRlIDxQ cm90b2NvbC9NbUNwdS5oPiAjaW5jbHVkZQ0KPiArPEd1aWQvTXBJbmZvcm1hdGlvbi5oPg0KPiAr DQo+ICsvLw0KPiArLy8gQ29tbW9uIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMgLy8NCj4g KyNkZWZpbmUgRVZFTlRfSURfTU1fQ09NTVVOSUNBVEVfU01DICAgICAweDEwDQo+ICsNCj4gKy8v DQo+ICsvLyBDUFUgZHJpdmVyIGluaXRpYWxpemF0aW9uIHNwZWNpZmljIGRlY2xhcmF0aW9ucyAv LyBleHRlcm4NCj4gK0VGSV9NTV9TWVNURU1fVEFCTEUgKm1NbXN0Ow0KPiArDQo+ICsvLw0KPiAr Ly8gQ1BVIFN0YXRlIFNhdmUgcHJvdG9jb2wgc3BlY2lmaWMgZGVjbGFyYXRpb25zIC8vIGV4dGVy bg0KPiArRUZJX01NX0NQVV9QUk9UT0NPTCBtTW1DcHVTdGF0ZTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtNbVJlYWRTYXZlU3RhdGUgKA0KPiArICBJTiBDT05TVCBFRklfTU1f Q1BVX1BST1RPQ09MICAgKlRoaXMsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgV2lkdGgsDQo+ICsgIElOIEVGSV9NTV9TQVZFX1NUQVRFX1JFR0lTVEVSICBSZWdpc3RlciwN Cj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBDcHVJbmRleCwNCj4gKyAgT1VU IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTW1Xcml0ZVNhdmVTdGF0ZSAoDQo+ICsgIElOIENPTlNU IEVGSV9NTV9DUFVfUFJPVE9DT0wgICAqVGhpcywNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICBXaWR0aCwNCj4gKyAgSU4gRUZJX01NX1NBVkVfU1RBVEVfUkVHSVNURVIgIFJl Z2lzdGVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIENwdUluZGV4LA0K PiArICBJTiBDT05TVCBWT0lEICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKTsNCj4g Kw0KPiArLy8NCj4gKy8vIE1NIGV2ZW50IGhhbmRsaW5nIHNwZWNpZmljIGRlY2xhcmF0aW9ucyAv Lw0KPiArZXh0ZXJuIEVGSV9NTV9DT01NVU5JQ0FURV9IRUFERVIgICAgKipQZXJDcHVHdWlkZWRF dmVudENvbnRleHQ7DQo+ICtleHRlcm4gRUZJX01NUkFNX0RFU0NSSVBUT1IgICAgICAgICAgbU5z Q29tbUJ1ZmZlcjsNCj4gK2V4dGVybiBNUF9JTkZPUk1BVElPTl9IT0JfREFUQSAgICAgICAqbU1w SW5mb3JtYXRpb25Ib2JEYXRhOw0KPiArZXh0ZXJuIEVGSV9NTV9DT05GSUdVUkFUSU9OX1BST1RP Q09MIG1NbUNvbmZpZzsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArUGlNbVN0YW5kbG9uZUFybVRm Q3B1RHJpdmVyRW50cnkgKA0KPiArICBJTiBVSU5UTiBFdmVudElkLA0KPiArICBJTiBVSU5UTiBD cHVOdW1iZXIsDQo+ICsgIElOIFVJTlROIE5zQ29tbUJ1ZmZlckFkZHINCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtQaU1tQ3B1VHBGd1Jvb3RNbWlIYW5kbGVyICgN Cj4gKyAgSU4gICAgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICBEaXNwYXRjaEhhbmRsZSwNCj4g KyAgSU4gICAgIENPTlNUIFZPSUQgICAgICAgICAgICAgICAqQ29udGV4dCwgICAgICAgIE9QVElP TkFMDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgKkNvbW1CdWZmZXIsICAg ICBPUFRJT05BTA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICpDb21tQnVm ZmVyU2l6ZSAgT1BUSU9OQUwNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUyBfUGlNbVN0YW5k bG9uZUFybVRmQ3B1RHJpdmVyRW50cnkgKA0KPiArICBJTiBVSU5UTiBFdmVudElkLA0KPiArICBJ TiBVSU5UTiBDcHVOdW1iZXIsDQo+ICsgIElOIFVJTlROIE5zQ29tbUJ1ZmZlckFkZHINCj4gKyAg KTsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQNCj4gYS9TdGFuZGFsb25lTW1Qa2cvRHJp dmVycy9DcHVNbS9Bcm0vUGlNbVN0YW5kbG9uZUFybVRmQ3B1RHJpdmVyLmluZg0KPiBiL1N0YW5k YWxvbmVNbVBrZy9Ecml2ZXJzL0NwdU1tL0FybS9QaU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXIu aW5mDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmJhZjZkOTU3 YmINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9TdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9DcHVN bS9Bcm0vUGlNbVN0YW5kbG9uZUFybVRmQ3B1RHJpdmVyLmluDQo+ICsrKyBmDQo+IEBAIC0wLDAg KzEsNjAgQEANCj4gKyMvKiogQGZpbGUNCj4gKyMNCj4gKyMgIFN0YW5kYWxvbmUgTU0gQ1BVIGRy aXZlciBmb3IgQVJNIFN0YW5kYXJkIFBsYXRmb3JtcyAjICMgIENvcHlyaWdodA0KPiArKGMpIDIw MDksIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ICMgIENvcHlyaWdodCAoYykg MjAxNg0KPiArSFAgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLg0KPiArIyAgQ29weXJpZ2h0IChj KSAyMDE3LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyMNCj4gKyMgIFRo aXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgIyAgYXJlIGxpY2Vuc2Vk IGFuZA0KPiArbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBCU0QgTGljZW5zZSAjDQo+ICt3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlv bi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UNCj4gK21heSBiZSBmb3VuZCBhdCAjICBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsjDQo+ICsj ICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIg0KPiArQkFTSVMsICMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElP TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsjDQo+ICsjKiov DQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAg PSAweDAwMDEwMDFBDQo+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFBpTW1T dGFuZGxvbmVBcm1UZkNwdURyaXZlcg0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAg ICAgPSA1OEY3QTYyQi02MjgwLTQyQTctQkMzOC0xMDUzNUE2NEE5MkMNCj4gKyAgTU9EVUxFX1RZ UEUgICAgICAgICAgICAgICAgICAgID0gTU1fU1RBTkRBTE9ORQ0KPiArICBWRVJTSU9OX1NUUklO RyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgUElfU1BFQ0lGSUNBVElPTl9WRVJTSU9OICAg ICAgID0gMHgwMDAxMDAzMg0KPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBQ aU1tU3RhbmRsb25lQXJtVGZDcHVEcml2ZXJJbml0aWFsaXplDQo+ICsNCj4gK1tTb3VyY2VzXQ0K PiArICBJbml0LmMNCj4gKyAgRXZlbnRIYW5kbGUuYw0KPiArICBTdGF0ZVNhdmUuYw0KPiArDQo+ ICtbUGFja2FnZXNdDQo+ICsgIEFybVBrZy9Bcm1Qa2cuZGVjDQo+ICsgIE1kZVBrZy9NZGVQa2cu ZGVjDQo+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ICsgIFN0YW5kYWxvbmVN bVBrZy9TdGFuZGFsb25lTW1Qa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gKyAg QXJtTGliDQo+ICsgIEFybVN2Y0xpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsgIERlYnVnTGli DQo+ICsgIEhvYkxpYg0KPiArICBTdGFuZGFsb25lTW1Ecml2ZXJFbnRyeVBvaW50DQo+ICsNCj4g K1tQcm90b2NvbHNdDQo+ICsgIGdFZmlNbUNvbmZpZ3VyYXRpb25Qcm90b2NvbEd1aWQgICAgICAg ICAgICAgICAgICAgICAgICAjIFBST1RPQ09MIEFMV0FZU19QUk9EVUNFRA0KPiArICBnRWZpTW1D cHVQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQUk9UT0NP TCBBTFdBWVNfUFJPRFVDRUQNCj4gKw0KPiArW0d1aWRzXQ0KPiArICBnRWZpSG9iTGlzdEd1aWQN Cj4gKyAgZ0VmaU1tUGVpTW1yYW1NZW1vcnlSZXNlcnZlR3VpZA0KPiArICBnWmVyb0d1aWQNCj4g KyAgZ01wSW5mb3JtYXRpb25Ib2JHdWlkDQo+ICsgIGdFZmlTdGFuZGFsb25lTW1Ob25TZWN1cmVC dWZmZXJHdWlkDQo+ICsgIGdFZmlBcm1UZkNwdURyaXZlckVwRGVzY3JpcHRvckd1aWQNCj4gKw0K PiArW0RlcGV4XQ0KPiArICBUUlVFDQo+IGRpZmYgLS1naXQgYS9TdGFuZGFsb25lTW1Qa2cvRHJp dmVycy9DcHVNbS9Bcm0vU3RhdGVTYXZlLmMNCj4gYi9TdGFuZGFsb25lTW1Qa2cvRHJpdmVycy9D cHVNbS9Bcm0vU3RhdGVTYXZlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMC4uYzUxNTVlMWIzMQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1N0YW5kYWxvbmVN bVBrZy9Ecml2ZXJzL0NwdU1tL0FybS9TdGF0ZVNhdmUuYw0KPiBAQCAtMCwwICsxLDUxIEBADQo+ ICsvKiogQGZpbGUNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTYgSFAgRGV2ZWxvcG1lbnQg Q29tcGFueSwgTC5QLg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgQVJNIExpbWl0ZWQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNj b21wYW55aW5nIG1hdGVyaWFscyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlDQo+ICsgYXZhaWxhYmxl IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgIHdoaWNo DQo+ICsgYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZQ0KPiArIGZvdW5kIGF0ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVU RUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gKyBCQVNJUywgIFdJVEhP VVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBS RVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSA8QmFzZS5oPg0K PiArI2luY2x1ZGUgPFBpL1BpU21tQ2lzLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xp Yi5oPg0KPiArDQo+ICsjaW5jbHVkZSAiUGlNbVN0YW5kbG9uZUFybVRmQ3B1RHJpdmVyLmgiDQo+ ICsNCj4gK0VGSV9NTV9DUFVfUFJPVE9DT0wgbU1tQ3B1U3RhdGUgPSB7DQo+ICsgIE1tUmVhZFNh dmVTdGF0ZSwNCj4gKyAgTW1Xcml0ZVNhdmVTdGF0ZQ0KPiArfTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtNbVJlYWRTYXZlU3RhdGUoDQo+ICsgIElOIENPTlNUIEVGSV9NTV9D UFVfUFJPVE9DT0wgICAqVGhpcywNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICBXaWR0aCwNCj4gKyAgSU4gRUZJX01NX1NBVkVfU1RBVEVfUkVHSVNURVIgIFJlZ2lzdGVyLA0K PiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIENwdUluZGV4LA0KPiArICBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKSB7DQo+ICsgIC8vIHRv ZG86IGltcGxlbWVudA0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK01tV3JpdGVTYXZlU3RhdGUoDQo+ICsgIElOIENP TlNUIEVGSV9NTV9DUFVfUFJPVE9DT0wgICAqVGhpcywNCj4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICBXaWR0aCwNCj4gKyAgSU4gRUZJX01NX1NBVkVfU1RBVEVfUkVHSVNURVIg IFJlZ2lzdGVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIENwdUluZGV4 LA0KPiArICBJTiBDT05TVCBWT0lEICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKSB7 DQo+ICsgIC8vIHRvZG86IGltcGxlbWVudA0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0K PiArfQ0KPiBkaWZmIC0tZ2l0IGEvU3RhbmRhbG9uZU1tUGtnL0luY2x1ZGUvR3VpZC9NcEluZm9y bWF0aW9uLmgNCj4gYi9TdGFuZGFsb25lTW1Qa2cvSW5jbHVkZS9HdWlkL01wSW5mb3JtYXRpb24u aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi40ZTlhM2MwNGVj DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU3RhbmRhbG9uZU1tUGtnL0luY2x1ZGUvR3VpZC9N cEluZm9ybWF0aW9uLmgNCj4gQEAgLTAsMCArMSw0MSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEVG SSBNUCBpbmZvcm1hdGlvbiBwcm90b2NvbCBwcm92aWRlcyBhIGxpZ2h0d2VpZ2h0IE1QX1NFUlZJ Q0VTX1BST1RPQ09MLg0KPiArDQo+ICsgIE1QIGluZm9ybWF0aW9uIHByb3RvY29sIG9ubHkgcHJv dmlkZXMgc3RhdGljIGluZm9ybWF0aW9uIG9mIE1QIHByb2Nlc3Nvci4NCj4gKw0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKyBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE3LCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55 aW5nIG1hdGVyaWFscyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlDQo+ICsgYXZhaWxhYmxlIHVuZGVy IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UgIHdoaWNoDQo+ICsg YWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNl bnNlIG1heSBiZQ0KPiArIGZvdW5kIGF0ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv YnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gKyBCQVNJUywgIFdJVEhPVVQgV0FS UkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9S IElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9NUF9JTkZPUk1BVElPTl9I Xw0KPiArI2RlZmluZSBfTVBfSU5GT1JNQVRJT05fSF8NCj4gKw0KPiArI2luY2x1ZGUgPFByb3Rv Y29sL01wU2VydmljZS5oPg0KPiArI2luY2x1ZGUgPFBpUGVpLmg+DQo+ICsjaW5jbHVkZSA8UHBp L1NlY1BsYXRmb3JtSW5mb3JtYXRpb24uaD4NCj4gKw0KPiArI2RlZmluZSBNUF9JTkZPUk1BVElP Tl9HVUlEIFwNCj4gKyAgeyBcDQo+ICsgICAgMHhiYTMzZjE1ZCwgMHg0MDAwLCAweDQ1YzEsIHsw eDhlLCAweDg4LCAweGY5LCAweDE2LCAweDkyLCAweGQ0LA0KPiArMHg1NywgMHhlM30gIFwNCj4g KyAgfQ0KPiArDQo+ICsjcHJhZ21hIHBhY2soMSkNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZQcm9jZXNzb3JzOw0KPiArICBVSU5U NjQgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkVuYWJsZWRQcm9jZXNzb3JzOw0KPiArICBF RklfUFJPQ0VTU09SX0lORk9STUFUSU9OICBQcm9jZXNzb3JJbmZvQnVmZmVyW107IH0NCj4gK01Q X0lORk9STUFUSU9OX0hPQl9EQVRBOyAjcHJhZ21hIHBhY2soKQ0KPiArDQo+ICtleHRlcm4gRUZJ X0dVSUQgZ01wSW5mb3JtYXRpb25Ib2JHdWlkOw0KPiArDQo+ICsjZW5kaWYNCj4NCklNUE9SVEFO VCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMg YXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBu b3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVk aWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJz b24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0 aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCg==