From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: hao.a.wu@intel.com) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by groups.io with SMTP; Thu, 20 Jun 2019 19:07:42 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Jun 2019 19:07:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,398,1557212400"; d="scan'208";a="151119530" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga007.jf.intel.com with ESMTP; 20 Jun 2019 19:07:40 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 20 Jun 2019 19:07:40 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 20 Jun 2019 19:07:39 -0700 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 20 Jun 2019 19:07:39 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.185]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.76]) with mapi id 14.03.0439.000; Fri, 21 Jun 2019 10:07:36 +0800 From: "Wu, Hao A" To: "devel@edk2.groups.io" , "Zhang, Chao B" CC: "Xu, Wei6" Subject: Re: [edk2-devel] [Patch] Revert "Capsule on Disk entire patch." Thread-Topic: [edk2-devel] [Patch] Revert "Capsule on Disk entire patch." Thread-Index: AQHVJ9VuUnY4Kthg40GLFMG2FxZUlqalXC7A Date: Fri, 21 Jun 2019 02:07:36 +0000 Message-ID: References: <20190621020227.13104-1-chao.b.zhang@intel.com> In-Reply-To: <20190621020227.13104-1-chao.b.zhang@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: hao.a.wu@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5p byBbbWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvXSBPbiBCZWhhbGYgT2YNCj4gWmhhbmcsIENo YW8gQg0KPiBTZW50OiBGcmlkYXksIEp1bmUgMjEsIDIwMTkgMTA6MDIgQU0NCj4gVG86IGRldmVs QGVkazIuZ3JvdXBzLmlvDQo+IENjOiBYdSwgV2VpNjsgV3UsIEhhbyBBOyBaaGFuZywgQ2hhbyBC DQo+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUGF0Y2hdIFJldmVydCAiQ2Fwc3VsZSBvbiBEaXNr IGVudGlyZSBwYXRjaC4iDQo+IA0KPiBUaGlzIHJldmVydHMgY29tbWl0IDBkNGFhMjc2ZDFmNmUw Y2I5ZDcxYTdmYjg4YjMwYzQxNmJhNmQ1YTMsDQo+ICAgICAgICAgICAgICAgICAgICAgNjQ3MGE0 MzE2MDE4M2NkNDhjYWQ4OTAxYzkxMmE0ODgxMWYxOGIxMywNCj4gICAgICAgICAgICAgICAgICAg ICBmZDcyODYwODk1NDJlZTdhOThjZmVhMDBiZTQ1Y2ViMzU2MWUwYjIwLA0KPiAgICAgICAgICAg ICAgICAgICAgIDc4MzdkMTI0OTgwN2I0MjQ4MDc5Njk5MDk3YmM5OTMyNTQyMzVkN2EsDQo+ICAg ICAgICAgICAgICAgICAgICAgNmIzMmFmMmUxMDVmOWI1NDU0YTU1YjU4MWYyZGMzNjVjNWViNjM5 N++8jA0KPiAgICAgICAgICAgICAgICAgICAgIDg2MzZmNzBiNWE3NjNlZDFjMDNiMjkyNzA4Zjlj NTU0M2U1MzFlYTnvvIwNCj4gICAgICAgICAgICAgICAgICAgICBmMTc5MzUzMjFhNWI4MThhNjZl OTk5NjMyZWYzNzFiMzc0Yjk4ZjBjDQo+IGR1ZSB0byBpbmNvcnJlY3QgcmV2aWV3IHByb2Nlc3Mu DQo+IA0KPiBDYzogV2VpNiBYdSA8d2VpNi54dUBpbnRlbC5jb20+DQo+IENjOiBIYW8gQSBXdSA8 aGFvLmEud3VAaW50ZWwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBDaGFvIEIgWmhhbmcgPGNoYW8u Yi56aGFuZ0BpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IFpoYW5nLCBDaGFvIEIgPGNoYW8u Yi56aGFuZ0BpbnRlbC5jb20+DQoNClRoYW5rcyBDaGFvLA0KDQpQbGVhc2UgcmVtb3ZlIHRoZSBl eHRyYSAnU2lnbmVkLW9mZicgdGFnIGFib3ZlLg0KV2l0aCB0aGlzIGhhbmRsZWQsDQpSZXZpZXdl ZC1ieTogSGFvIEEgV3UgPGhhby5hLnd1QGludGVsLmNvbT4NCg0KQmVzdCBSZWdhcmRzLA0KSGFv IFd1DQoNCg0KPiAtLS0NCj4gIE1kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0Nh cHN1bGVBcHAuYyAgIHwgICA0MSArLQ0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1 bGVBcHAvQ2Fwc3VsZUR1bXAuYyAgfCAgICA0ICstDQo+ICAuLi4vQXBwbGljYXRpb24vQ2Fwc3Vs ZUFwcC9DYXBzdWxlT25EaXNrLmMgICAgICAgICB8ICAgNTYgKy0NCj4gIE1kZU1vZHVsZVBrZy9D b3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmggICAgICAgICAgICAgIHwgICAgMyArLQ0KPiAgTWRlTW9k dWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaW5mICAgICAgICAgICAgfCAgIDIwICstDQo+ ICBNZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUxvYWQuYyAgICAgICAgICAgICB8ICAg MzAgKy0NCj4gIE1kZU1vZHVsZVBrZy9JbmNsdWRlL0xpYnJhcnkvQ2Fwc3VsZUxpYi5oICAgICAg ICAgIHwgICA3OCArLQ0KPiAgTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHBpL0NhcHN1bGVPbkRpc2su aCAgICAgICAgICAgfCAgIDU1IC0NCj4gIC4uLi9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvQ2Fw c3VsZU9uRGlzay5jICAgICAgIHwgMTk2NiAtLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAgLi4uL0xp YnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9DYXBzdWxlT25EaXNrLmggICAgICAgfCAgIDc1IC0NCj4g IC4uLi9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhlQ2Fwc3VsZUxpYi5jICAgICAgIHwgICA1 NyArLQ0KPiAgLi4uL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9EeGVDYXBzdWxlTGliLmluZiAg ICAgfCAgIDIxICstDQo+ICAuLi4vRHhlQ2Fwc3VsZUxpYkZtcC9EeGVDYXBzdWxlUHJvY2Vzc0xp Yi5jICAgICAgICB8ICAxMjQgKy0NCj4gIC4uLi9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhl Q2Fwc3VsZVJlcG9ydExpYi5jIHwgICA2NyArLQ0KPiAgLi4uL0R4ZUNhcHN1bGVMaWJGbXAvRHhl Q2Fwc3VsZVJlcG9ydExpYk51bGwuYyAgICAgfCAgICA2ICstDQo+ICAuLi4vRHhlQ2Fwc3VsZUxp YkZtcC9EeGVSdW50aW1lQ2Fwc3VsZUxpYi5pbmYgICAgICB8ICAgIDMgKy0NCj4gIC4uLi9MaWJy YXJ5L0R4ZUNhcHN1bGVMaWJOdWxsL0R4ZUNhcHN1bGVMaWJOdWxsLmMgIHwgICA4NSArLQ0KPiAg TWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ4 IC0NCj4gIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNjICAgICAgICAgICAgICAgICAgICAg IHwgICAgNCAtDQo+ICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLnVuaSAgICAgICAgICAgICAg ICAgICAgICB8ICAgMzQgLQ0KPiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9CZHNEeGUvQmRzRHhl LmluZiAgICAgICAgICAgfCAgICAzICstDQo+ICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Jkc0R4 ZS9CZHNFbnRyeS5jICAgICAgICAgICB8ICAgIDYgKy0NCj4gIC4uLi9DYXBzdWxlT25EaXNrTG9h ZFBlaS9DYXBzdWxlT25EaXNrTG9hZFBlaS5jICAgIHwgIDQ0MiAtLS0tLQ0KPiAgLi4uL0NhcHN1 bGVPbkRpc2tMb2FkUGVpL0NhcHN1bGVPbkRpc2tMb2FkUGVpLmluZiAgfCAgIDY0IC0NCj4gIC4u Li9DYXBzdWxlT25EaXNrTG9hZFBlaS9DYXBzdWxlT25EaXNrTG9hZFBlaS51bmkgIHwgICAxNSAt DQo+ICAuLi4vQ2Fwc3VsZU9uRGlza0xvYWRQZWlFeHRyYS51bmkgICAgICAgICAgICAgICAgICB8 ICAgMTQgLQ0KPiAgLi4uL0NhcHN1bGVSdW50aW1lRHhlL0NhcHN1bGVSdW50aW1lRHhlLmluZiAg ICAgICAgfCAgICAxIC0NCj4gIC4uLi9Vbml2ZXJzYWwvQ2Fwc3VsZVJ1bnRpbWVEeGUvQ2Fwc3Vs ZVNlcnZpY2UuYyAgIHwgICAxMiArLQ0KPiAgMjggZmlsZXMgY2hhbmdlZCwgNjggaW5zZXJ0aW9u cygrKSwgMzI2NiBkZWxldGlvbnMoLSkNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBNZGVNb2R1bGVQ a2cvSW5jbHVkZS9QcGkvQ2Fwc3VsZU9uRGlzay5oDQo+ICBkZWxldGUgbW9kZSAxMDA2NDQNCj4g TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9DYXBzdWxlT25EaXNrLmMNCj4g IGRlbGV0ZSBtb2RlIDEwMDY0NA0KPiBNZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxlTGli Rm1wL0NhcHN1bGVPbkRpc2suaA0KPiAgZGVsZXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBr Zy9Vbml2ZXJzYWwvQ2Fwc3VsZU9uRGlza0xvYWRQZWkvQ2Fwc3VsZU9uRGlza0xvYWRQZWkuYw0K PiAgZGVsZXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZU9u RGlza0xvYWRQZWkvQ2Fwc3VsZU9uRGlza0xvYWRQZWkuaW4NCj4gZg0KPiAgZGVsZXRlIG1vZGUg MTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZU9uRGlza0xvYWRQZWkvQ2Fw c3VsZU9uRGlza0xvYWRQZWkudQ0KPiBuaQ0KPiAgZGVsZXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZU9uRGlza0xvYWRQZWkvQ2Fwc3VsZU9uRGlza0xvYWRQ ZWlFeA0KPiB0cmEudW5pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0 aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5jDQo+IGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9u L0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5jDQo+IGluZGV4IDBiNWY3Yzg2ODQuLmUzYzU5MWRiZjMg MTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1 bGVBcHAuYw0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBz dWxlQXBwLmMNCj4gQEAgLTg0NywxMSArODQ3LDExIEBAIFByaW50VXNhZ2UgKA0KPiAgICBQcmlu dChMIiAgQ2Fwc3VsZUFwcCAtRCA8Q2Fwc3VsZT5cbiIpOw0KPiAgICBQcmludChMIiAgQ2Fwc3Vs ZUFwcCAtUCBHRVQgPEltYWdlVHlwZUlkPiA8SW5kZXg+IC1PIDxGaWxlTmFtZT5cbiIpOw0KPiAg ICBQcmludChMIlBhcmFtZXRlcjpcbiIpOw0KPiAgICBQcmludChMIiAgLU5SOiBObyByZXNldCB3 aWxsIGJlIHRyaWdnZXJlZCBmb3IgdGhlIGNhcHN1bGVcbiIpOw0KPiAgICBQcmludChMIiAgICAg ICB3aXRoIENBUFNVTEVfRkxBR1NfUEVSU0lTVF9BQ1JPU1NfUkVTRVQgYW5kIHdpdGhvdXQNCj4g Q0FQU1VMRV9GTEFHU19JTklUSUFURV9SRVNFVC5cbiIpOw0KPiAtICBQcmludChMIiAgLU9EOiBE ZWxpdmVyeSBvZiBDYXBzdWxlcyB2aWEgZmlsZSBvbiBNYXNzIFN0b3JhZ2UgZGV2aWNlLlxuIik7 DQo+ICsgIFByaW50KEwiICAtT0Q6IERlbGl2ZXJ5IG9mIENhcHN1bGVzIHZpYSBmaWxlIG9uIE1h c3MgU3RvcmFnZSBkZXZpY2UuIik7DQo+ICAgIFByaW50KEwiICAtUzogIER1bXAgY2Fwc3VsZSBy ZXBvcnQgdmFyaWFibGUNCj4gKEVGSV9DQVBTVUxFX1JFUE9SVF9HVUlEKSxcbiIpOw0KPiAgICBQ cmludChMIiAgICAgICB3aGljaCBpcyBkZWZpbmVkIGluIFVFRkkgc3BlY2lmaWNhdGlvbi5cbiIp Ow0KPiAgICBQcmludChMIiAgLUM6ICBDbGVhciBjYXBzdWxlIHJlcG9ydCB2YXJpYWJsZQ0KPiAo RUZJX0NBUFNVTEVfUkVQT1JUX0dVSUQpLFxuIik7DQo+ICAgIFByaW50KEwiICAgICAgIHdoaWNo IGlzIGRlZmluZWQgaW4gVUVGSSBzcGVjaWZpY2F0aW9uLlxuIik7DQo+ICAgIFByaW50KEwiICAt UDogIER1bXAgVUVGSSBGTVAgcHJvdG9jb2wgaW5mbywgb3IgZ2V0IGltYWdlIHdpdGggc3BlY2lm aWVkXG4iKTsNCj4gQEAgLTEwMTgsNDMgKzEwMTgsNDQgQEAgVWVmaU1haW4gKA0KPiAgICAgICAg UGFyYU5ySW5kZXggPSBJbmRleDsNCj4gICAgICAgIE5vUmVzZXQgPSBUUlVFOw0KPiAgICAgIH0N Cj4gICAgfQ0KPiANCj4gLSAgaWYgKFBhcmFPZEluZGV4ID4gUGFyYU5ySW5kZXgpIHsNCj4gLSAg ICBpZiAoUGFyYU5ySW5kZXggIT0gMCkgew0KPiAtICAgICAgQ2Fwc3VsZUxhc3RJbmRleCA9IFBh cmFOckluZGV4IC0gMTsNCj4gLSAgICB9IGVsc2Ugew0KPiAtICAgICAgQ2Fwc3VsZUxhc3RJbmRl eCA9IFBhcmFPZEluZGV4IC0gMTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBpZiAoUGFyYU9kSW5k ZXggPT0gQXJnYyAtMSkgew0KPiArICBpZiAoUGFyYU9kSW5kZXggIT0gMCkgew0KPiArICAgIGlm IChQYXJhT2RJbmRleCA9PSBBcmdjIC0gMSkgew0KPiAgICAgICAgTWFwRnNTdHIgPSBOVUxMOw0K PiAgICAgIH0gZWxzZSBpZiAoUGFyYU9kSW5kZXggPT0gQXJnYyAtIDIpIHsNCj4gICAgICAgIE1h cEZzU3RyID0gQXJndltBcmdjLTFdOw0KPiAgICAgIH0gZWxzZSB7DQo+IC0gICAgICBQcmludCAo TCJDYXBzdWxlQXBwOiBDYW5ub3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIEZTIG1hcHBpbmchXG4i KTsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IEludmFsaWQgUG9zaXRpb24gZm9yIC1P RCBPcHRpb25zXG4iKTsNCj4gICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gICAgICAgIGdvdG8gRG9uZTsNCj4gICAgICB9DQo+IC0gIH0gZWxzZSBpZiAoUGFyYU9kSW5k ZXggPCBQYXJhTnJJbmRleCkgew0KPiAtICAgIGlmIChQYXJhT2RJbmRleCAhPSAwKSB7DQo+IC0g ICAgICBDYXBzdWxlTGFzdEluZGV4ID0gUGFyYU9kSW5kZXggLSAxOw0KPiAtICAgICAgaWYgKFBh cmFPZEluZGV4ID09IFBhcmFOckluZGV4IC0gMSkgew0KPiAtICAgICAgICBNYXBGc1N0ciA9IE5V TEw7DQo+IC0gICAgICB9IGVsc2UgaWYgKFBhcmFPZEluZGV4ID09IFBhcmFOckluZGV4IC0gMikg ew0KPiAtICAgICAgICBNYXBGc1N0ciA9IEFyZ3ZbUGFyYU9kSW5kZXggKyAxXTsNCj4gKw0KPiAr ICAgIGlmIChQYXJhTnJJbmRleCAhPSAwKSB7DQo+ICsgICAgICBpZiAoUGFyYU5ySW5kZXggKyAx ID09IFBhcmFPZEluZGV4KSB7DQo+ICsgICAgICAgIENhcHN1bGVMYXN0SW5kZXggPSBQYXJhTnJJ bmRleCAtIDE7DQo+ICAgICAgICB9IGVsc2Ugew0KPiAtICAgICAgICBQcmludCAoTCJDYXBzdWxl QXBwOiBDYW5ub3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIEZTIG1hcHBpbmchXG4iKTsNCj4gKyAg ICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogSW52YWxpZCBQb3NpdGlvbiBmb3IgLU5SIE9wdGlv bnNcbiIpOw0KPiAgICAgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICAg ICAgICAgIGdvdG8gRG9uZTsNCj4gICAgICAgIH0NCj4gICAgICB9IGVsc2Ugew0KPiAtICAgICAg Q2Fwc3VsZUxhc3RJbmRleCA9IFBhcmFOckluZGV4IC0gMTsNCj4gKyAgICAgIENhcHN1bGVMYXN0 SW5kZXggPSBQYXJhT2RJbmRleCAtIDE7DQo+ICAgICAgfQ0KPiAgICB9IGVsc2Ugew0KPiAtICAg IENhcHN1bGVMYXN0SW5kZXggPSBBcmdjIC0gMTsNCj4gKyAgICBpZiAoUGFyYU5ySW5kZXggIT0g MCkgew0KPiArICAgICAgaWYgKFBhcmFOckluZGV4ID09IEFyZ2MgLTEpIHsNCj4gKyAgICAgICAg Q2Fwc3VsZUxhc3RJbmRleCA9IFBhcmFOckluZGV4IC0gMTsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ ICsgICAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IEludmFsaWQgUG9zaXRpb24gZm9yIC1OUiBP cHRpb25zXG4iKTsNCj4gKyAgICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K PiArICAgICAgICBnb3RvIERvbmU7DQo+ICsgICAgICB9DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAg ICAgIENhcHN1bGVMYXN0SW5kZXggPSBBcmdjIC0gMTsNCj4gKyAgICB9DQo+ICAgIH0NCj4gDQo+ ICAgIENhcHN1bGVOdW0gPSBDYXBzdWxlTGFzdEluZGV4IC0gQ2Fwc3VsZUZpcnN0SW5kZXggKyAx Ow0KPiANCj4gICAgaWYgKENhcHN1bGVGaXJzdEluZGV4ID4gQ2Fwc3VsZUxhc3RJbmRleCkgew0K PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3Vs ZUR1bXAuYw0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVE dW1wLmMNCj4gaW5kZXggMGUwYzU2NjcwMi4uYjgxYzViN2IzYSAxMDA2NDQNCj4gLS0tIGEvTWRl TW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUR1bXAuYw0KPiArKysgYi9N ZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlRHVtcC5jDQo+IEBAIC04 MTAsMTIgKzgxMCwxMiBAQCBEdW1wQ2Fwc3VsZUZyb21EaXNrICgNCj4gICAgfQ0KPiANCj4gICAg Ly8NCj4gICAgLy8gR2V0IGZpbGUgY291bnQgZmlyc3QNCj4gICAgLy8NCj4gLSAgU3RhdHVzID0g RmlsZUhhbmRsZUZpbmRGaXJzdEZpbGUgKERpckhhbmRsZSwgJkZpbGVJbmZvKTsNCj4gICAgZG8g ew0KPiArICAgIFN0YXR1cyA9IEZpbGVIYW5kbGVGaW5kRmlyc3RGaWxlIChEaXJIYW5kbGUsICZG aWxlSW5mbyk7DQo+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCBGaWxlSW5mbyA9PSBO VUxMKSB7DQo+ICAgICAgICBQcmludCAoTCJHZXQgRmlsZSBJbmZvIEZhaWwuIFN0YXR1cyA9ICVy XG4iLCBTdGF0dXMpOw0KPiAgICAgICAgZ290byBEb25lOw0KPiAgICAgIH0NCj4gDQo+IEBAIC04 NDQsMTIgKzg0NCwxMiBAQCBEdW1wQ2Fwc3VsZUZyb21EaXNrICgNCj4gICAgTm9GaWxlID0gRkFM U0U7DQo+IA0KPiAgICAvLw0KPiAgICAvLyBHZXQgYWxsIGZpbGUgaW5mbw0KPiAgICAvLw0KPiAt ICBTdGF0dXMgPSBGaWxlSGFuZGxlRmluZEZpcnN0RmlsZSAoRGlySGFuZGxlLCAmRmlsZUluZm8p Ow0KPiAgICBkbyB7DQo+ICsgICAgU3RhdHVzID0gRmlsZUhhbmRsZUZpbmRGaXJzdEZpbGUgKERp ckhhbmRsZSwgJkZpbGVJbmZvKTsNCj4gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IEZp bGVJbmZvID09IE5VTEwpIHsNCj4gICAgICAgIFByaW50IChMIkdldCBGaWxlIEluZm8gRmFpbC4g U3RhdHVzID0gJXJcbiIsIFN0YXR1cyk7DQo+ICAgICAgICBnb3RvIERvbmU7DQo+ICAgICAgfQ0K PiANCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0Nh cHN1bGVPbkRpc2suYw0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0Nh cHN1bGVPbkRpc2suYw0KPiBpbmRleCBkZjQzYTQzNmYyLi5hMTE2ODNkNjZjIDEwMDY0NA0KPiAt LS0gYS9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlT25EaXNrLmMN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZU9uRGlz ay5jDQo+IEBAIC0yMSwxMiArMjEsMTAgQEANCj4gICNpbmNsdWRlIDxQcm90b2NvbC9TaGVsbC5o Pg0KPiAgI2luY2x1ZGUgPEd1aWQvRmlsZUluZm8uaD4NCj4gICNpbmNsdWRlIDxHdWlkL0dsb2Jh bFZhcmlhYmxlLmg+DQo+ICAjaW5jbHVkZSA8R3VpZC9HcHQuaD4NCj4gDQo+IC0jZGVmaW5lIE1B WF9DQVBTVUxFX05VTSAxMA0KPiAtDQo+ICBFRklfR1VJRCBtQ2Fwc3VsZU9uRGlza0Jvb3RPcHRp b25HdWlkID0geyAweDRDQzI5QkI3LCAweDI0MTMsIDB4NDBBMiwNCj4geyAweEIwLCAweDZELCAw eDI1LCAweDNFLCAweDM3LCAweDEwLCAweEY1LCAweDMyIH0gfTsNCj4gDQo+ICAvKioNCj4gICAg R2V0IHNoZWxsIHByb3RvY29sLg0KPiANCj4gQEAgLTc0NCw0NSArNzQyLDEwIEBAIFNldENhcHN1 bGVTdGF0dXNWYXJpYWJsZSAoDQo+ICAgICAgICAgICAgICAgICAgICApOw0KPiANCj4gICAgcmV0 dXJuIFN0YXR1czsNCj4gIH0NCj4gDQo+IC0vKioNCj4gLSAgQ2hlY2sgaWYgQ2Fwc3VsZSBPbiBE aXNrIGlzIHN1cHBvcnRlZC4NCj4gLQ0KPiAtICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIENh cHN1bGUgT24gRGlzayBpcyBzdXBwb3J0ZWQuDQo+IC0gIEByZXR2YWwgRkFMU0UgICAgICAgICAg ICAgQ2Fwc3VsZSBPbiBEaXNrIGlzIG5vdCBzdXBwb3J0ZWQuDQo+IC0NCj4gLSoqLw0KPiAtQk9P TEVBTg0KPiAtSXNDYXBzdWxlT25EaXNrU3VwcG9ydGVkICgNCj4gLSAgVk9JRA0KPiAtICApDQo+ IC17DQo+IC0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgVUlO VDY0ICAgICAgICAgICAgICAgICAgICAgICAgT3NJbmRpY2F0aW9uc1N1cHBvcnRlZDsNCj4gLSAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQo+IC0NCj4gLSAgRGF0YVNp emUgPSBzaXplb2YoVUlOVDY0KTsNCj4gLSAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+ IC0gICAgICAgICAgICAgICAgICBMIk9zSW5kaWNhdGlvbnNTdXBwb3J0ZWQiLA0KPiAtICAgICAg ICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQo+IC0gICAgICAgICAgICAgICAg ICBOVUxMLA0KPiAtICAgICAgICAgICAgICAgICAgJkRhdGFTaXplLA0KPiAtICAgICAgICAgICAg ICAgICAgJk9zSW5kaWNhdGlvbnNTdXBwb3J0ZWQNCj4gLSAgICAgICAgICAgICAgICAgICk7DQo+ IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gLSAgICByZXR1cm4gRkFMU0U7DQo+IC0g IH0NCj4gLQ0KPiAtICBpZiAoT3NJbmRpY2F0aW9uc1N1cHBvcnRlZCAmDQo+IEVGSV9PU19JTkRJ Q0FUSU9OU19GSUxFX0NBUFNVTEVfREVMSVZFUllfU1VQUE9SVEVEKSB7DQo+IC0gICAgcmV0dXJu IFRSVUU7DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gRkFMU0U7DQo+IC19DQo+IC0NCj4gIC8q Kg0KPiAgICBQcm9jZXNzIENhcHN1bGUgT24gRGlzay4NCj4gDQo+ICAgIEBwYXJhbVtpbl0gIENh cHN1bGVCdWZmZXIgICAgICAgQW4gYXJyYXkgb2YgcG9pbnRlciB0byBjYXBzdWxlIGltYWdlcw0K PiAgICBAcGFyYW1baW5dICBDYXBzdWxlQnVmZmVyU2l6ZSAgIEFuIGFycmF5IG9mIFVJTlROIHRv IGNhcHN1bGUgaW1hZ2VzIHNpemUNCj4gQEAgLTgwNSwyMCArNzY4LDEwIEBAIFByb2Nlc3NDYXBz dWxlT25EaXNrICgNCj4gIHsNCj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vdE5leHQ7DQo+ ICAgIEVGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgKkZzOw0KPiAgICBCT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZUJvb3ROZXh0Ow0KPiAtICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICpGaWxlTmFtZVtNQVhfQ0FQU1VMRV9OVU1dOw0KPiAtICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAtDQo+IC0gIC8vDQo+IC0gIC8v IENoZWNrIGlmIENhcHN1bGUgT24gRGlzayBpcyBzdXBwb3J0ZWQNCj4gLSAgLy8NCj4gLSAgaWYg KCFJc0NhcHN1bGVPbkRpc2tTdXBwb3J0ZWQgKCkpIHsNCj4gLSAgICBQcmludCAoTCJDYXBzdWxl QXBwOiBDYXBzdWxlIE9uIERpc2sgaXMgbm90IHN1cHBvcnRlZC5cbiIpOw0KPiAtICAgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+IC0gIH0NCj4gDQo+ICAgIC8vDQo+ICAgIC8vIEdldCBhIHZh bGlkIGZpbGUgc3lzdGVtIGZyb20gYm9vdCBwYXRoDQo+ICAgIC8vDQo+ICAgIEZzID0gTlVMTDsN Cj4gQEAgLTgyNywyMSArNzgwLDE0IEBAIFByb2Nlc3NDYXBzdWxlT25EaXNrICgNCj4gICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNhbm5v dCBmaW5kIGEgdmFsaWQgZmlsZSBzeXN0ZW0gb24gYm9vdCBkZXZpZXMuIFN0YXR1cw0KPiA9ICVy XG4iLCBTdGF0dXMpOw0KPiAgICAgIHJldHVybiBTdGF0dXM7DQo+ICAgIH0NCj4gDQo+IC0gIC8v DQo+IC0gIC8vIEdldCBmaWxlIG5hbWUgZnJvbSBmaWxlIHBhdGgNCj4gLSAgLy8NCj4gLSAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5kZXggKyspIHsNCj4gLSAgICBGaWxl TmFtZVtJbmRleF0gPSBHZXRGaWxlTmFtZUZyb21QYXRoIChGaWxlUGF0aFtJbmRleF0pOw0KPiAt ICB9DQo+IC0NCj4gICAgLy8NCj4gICAgLy8gQ29weSBjYXBzdWxlIGltYWdlIHRvICdcZWZpXFVw ZGF0ZUNhcHN1bGVcJw0KPiAgICAvLw0KPiAtICBTdGF0dXMgPSBXcml0ZVVwZGF0ZUZpbGUgKENh cHN1bGVCdWZmZXIsIENhcHN1bGVCdWZmZXJTaXplLCBGaWxlTmFtZSwNCj4gQ2Fwc3VsZU51bSwg RnMpOw0KPiArICBTdGF0dXMgPSBXcml0ZVVwZGF0ZUZpbGUgKENhcHN1bGVCdWZmZXIsIENhcHN1 bGVCdWZmZXJTaXplLCBGaWxlUGF0aCwNCj4gQ2Fwc3VsZU51bSwgRnMpOw0KPiAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogY2Fwc3VsZSBp bWFnZSBjb3VsZCBub3QgYmUgY29waWVkIGZvciB1cGRhdGUuXG4iKTsNCj4gICAgICByZXR1cm4g U3RhdHVzOw0KPiAgICB9DQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhl SXBsUGVpbS9EeGVJcGwuaA0KPiBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBs LmgNCj4gaW5kZXggOTBiNWI1YjIxMS4uMDYzZmVmYjQxNCAxMDA2NDQNCj4gLS0tIGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQ29y ZS9EeGVJcGxQZWltL0R4ZUlwbC5oDQo+IEBAIC0xLDEwICsxLDEwIEBADQo+ICAvKiogQGZpbGUN Cj4gICAgTWFzdGVyIGhlYWRlciBmaWxlIGZvciBEeGVJcGwgUEVJTS4gQWxsIHNvdXJjZSBmaWxl cyBpbiB0aGlzIG1vZHVsZSBzaG91bGQNCj4gICAgaW5jbHVkZSB0aGlzIGZpbGUgZm9yIGNvbW1v biBkZWZpbml0aW9ucy4NCj4gDQo+IC1Db3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICtDb3B5cmlnaHQgKGMpIDIw MDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gICoq Lw0KPiANCj4gICNpZm5kZWYgX19QRUlfRFhFSVBMX0hfXw0KPiBAQCAtMTksMTEgKzE5LDEwIEBA IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICAjaW5jbHVk ZSA8UHBpL0Zpcm13YXJlVm9sdW1lSW5mby5oPg0KPiAgI2luY2x1ZGUgPFBwaS9HdWlkZWRTZWN0 aW9uRXh0cmFjdGlvbi5oPg0KPiAgI2luY2x1ZGUgPFBwaS9Mb2FkRmlsZS5oPg0KPiAgI2luY2x1 ZGUgPFBwaS9TM1Jlc3VtZTIuaD4NCj4gICNpbmNsdWRlIDxQcGkvUmVjb3ZlcnlNb2R1bGUuaD4N Cj4gLSNpbmNsdWRlIDxQcGkvQ2Fwc3VsZU9uRGlzay5oPg0KPiAgI2luY2x1ZGUgPFBwaS9WZWN0 b3JIYW5kb2ZmSW5mby5oPg0KPiANCj4gICNpbmNsdWRlIDxHdWlkL01lbW9yeVR5cGVJbmZvcm1h dGlvbi5oPg0KPiAgI2luY2x1ZGUgPEd1aWQvTWVtb3J5QWxsb2NhdGlvbkhvYi5oPg0KPiAgI2lu Y2x1ZGUgPEd1aWQvRmlybXdhcmVGaWxlU3lzdGVtMi5oPg0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVJcGwuaW5mDQo+IGIvTWRlTW9kdWxlUGtnL0NvcmUv RHhlSXBsUGVpbS9EeGVJcGwuaW5mDQo+IGluZGV4IGFiYzMyMTdiMDEuLjYyYmIzZjMwNzcgMTAw NjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmluZg0KPiAr KysgYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYNCj4gQEAgLTMsMTEg KzMsMTEgQEANCj4gICMNCj4gICMgIFRoaXMgbW9kdWxlIHByb2R1Y2VzIGEgc3BlY2lhbCBQUEkg bmFtZWQgdGhlIERYRSBJbml0aWFsIFByb2dyYW0gTG9hZA0KPiAoSVBMKQ0KPiAgIyAgUFBJIHRv IGRpc2NvdmVyIGFuZCBkaXNwYXRjaCB0aGUgRFhFIEZvdW5kYXRpb24gYW5kIGNvbXBvbmVudHMg dGhhdCBhcmUNCj4gICMgIG5lZWRlZCB0byBydW4gdGhlIERYRSBGb3VuZGF0aW9uLg0KPiAgIw0K PiAtIyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAgIyAgQ29weXJpZ2h0 IChjKSAyMDE3LCBBTUQgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g ICMNCj4gICMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ICAjDQo+ICAjIw0KPiBAQCAtNzQsMjMgKzc0LDIxIEBADQo+IA0KPiAgW0xpYnJhcnlDbGFzc2Vz LkFSTSwgTGlicmFyeUNsYXNzZXMuQUFSQ0g2NF0NCj4gICAgQXJtTW11TGliDQo+IA0KPiAgW1Bw aXNdDQo+IC0gIGdFZmlEeGVJcGxQcGlHdWlkICAgICAgICAgICAgICAgICAgICAgICMjIFBST0RV Q0VTDQo+IC0gIGdFZmlQZWlEZWNvbXByZXNzUHBpR3VpZCAgICAgICAgICAgICAgICMjIFBST0RV Q0VTDQo+IC0gIGdFZmlFbmRPZlBlaVNpZ25hbFBwaUd1aWQgICAgICAgICAgICAgICMjIFNPTUVU SU1FU19QUk9EVUNFUyAjIE5vdA0KPiBwcm9kdWNlZCBvbiBTMyBib290IHBhdGgNCj4gLSAgZ0Vm aVBlaVJlYWRPbmx5VmFyaWFibGUyUHBpR3VpZCAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVT DQo+IC0gIGdFZmlQZWlMb2FkRmlsZVBwaUd1aWQgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1F U19DT05TVU1FUw0KPiAtICBnRWZpUGVpUzNSZXN1bWUyUHBpR3VpZCAgICAgICAgICAgICAgICAj IyBTT01FVElNRVNfQ09OU1VNRVMgIw0KPiBDb25zdW1lZCBvbiBTMyBib290IHBhdGgNCj4gLSAg Z0VmaVBlaVJlY292ZXJ5TW9kdWxlUHBpR3VpZCAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNV TUVTICMNCj4gQ29uc3VtZWQgb24gcmVjb3ZlcnkgYm9vdCBwYXRoDQo+ICsgIGdFZmlEeGVJcGxQ cGlHdWlkICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPiArICBnRWZpUGVpRGVjb21wcmVz c1BwaUd1aWQgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gKyAgZ0VmaUVuZE9mUGVpU2lnbmFsUHBp R3VpZCAgICAgICAgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAjIE5vdA0KPiBwcm9kdWNlZCBvbiBT MyBib290IHBhdGgNCj4gKyAgZ0VmaVBlaVJlYWRPbmx5VmFyaWFibGUyUHBpR3VpZCAgICMjIFNP TUVUSU1FU19DT05TVU1FUw0KPiArICBnRWZpUGVpTG9hZEZpbGVQcGlHdWlkICAgICAgICAgICAg IyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+ICsgIGdFZmlQZWlTM1Jlc3VtZTJQcGlHdWlkICAgICAg ICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgIyBDb25zdW1lZA0KPiBvbiBTMyBib290IHBhdGgN Cj4gKyAgZ0VmaVBlaVJlY292ZXJ5TW9kdWxlUHBpR3VpZCAgICAgICMjIFNPTUVUSU1FU19DT05T VU1FUyAjDQo+IENvbnN1bWVkIG9uIHJlY292ZXJ5IGJvb3QgcGF0aA0KPiAgICAjIyBTT01FVElN RVNfQ09OU1VNRVMNCj4gICAgIyMgVU5ERUZJTkVEICMgSE9CDQo+ICAgIGdFZmlWZWN0b3JIYW5k b2ZmSW5mb1BwaUd1aWQNCj4gLSAgZ0VmaVBlaU1lbW9yeURpc2NvdmVyZWRQcGlHdWlkICAgICAg ICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+IC0gIGdFZGtpaVBlaUJvb3RJbkNhcHN1bGVPbkRp c2tNb2RlUHBpR3VpZCAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+IC0gIGdFZGtpaVBlaUNhcHN1 bGVPbkRpc2tQcGlHdWlkICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMNCj4gQ29u c3VtZWQgb24gZmlybXdhcmUgdXBkYXRlIGJvb3QgcGF0aA0KPiArICBnRWZpUGVpTWVtb3J5RGlz Y292ZXJlZFBwaUd1aWQgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTDQo+IA0KPiAgW0d1aWRzXQ0K PiAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgIyMgVmFyaWFibGU6TCJNZW1vcnlUeXBlSW5mb3Jt YXRpb24iDQo+ICAgICMjIFNPTUVUSU1FU19QUk9EVUNFUyAjIyBIT0INCj4gICAgZ0VmaU1lbW9y eVR5cGVJbmZvcm1hdGlvbkd1aWQNCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4 ZUlwbFBlaW0vRHhlTG9hZC5jDQo+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVM b2FkLmMNCj4gaW5kZXggODU5MTg0ZTBkMS4uYzZlNWI4MzMwOSAxMDA2NDQNCj4gLS0tIGEvTWRl TW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9EeGVMb2FkLmMNCj4gKysrIGIvTWRlTW9kdWxlUGtn L0NvcmUvRHhlSXBsUGVpbS9EeGVMb2FkLmMNCj4gQEAgLTEsMTEgKzEsMTEgQEANCj4gIC8qKiBA ZmlsZQ0KPiAgICBMYXN0IFBFSU0uDQo+ICAgIFJlc3BvbnNpYmlsaXR5IG9mIHRoaXMgbW9kdWxl IGlzIHRvIGxvYWQgdGhlIERYRSBDb3JlIGZyb20gYSBGaXJtd2FyZQ0KPiBWb2x1bWUuDQo+IA0K PiAgQ29weXJpZ2h0IChjKSAyMDE2IEhQIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4NCj4gLUNv cHlyaWdodCAoYykgMjAwNiAtIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gK0NvcHlyaWdodCAoYykgMjAwNiAtIDIwMTgsIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0KPiAgKiovDQo+IA0KPiAgI2luY2x1ZGUgIkR4ZUlw bC5oIg0KPiBAQCAtMjYzLDEzICsyNjMsMTEgQEAgRHhlTG9hZENvcmUgKA0KPiAgICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YW5jZTsNCj4gICAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25TdGF0ZTsN Cj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7 DQo+ICAgIEVGSV9QRUlfUzNfUkVTVU1FMl9QUEkgICAgICAgICAgICAgICAgICAgICpTM1Jlc3Vt ZTsNCj4gICAgRUZJX1BFSV9SRUNPVkVSWV9NT0RVTEVfUFBJICAgICAgICAgICAgICAgKlBlaVJl Y292ZXJ5Ow0KPiAtICBFRklfUEVJX0NBUFNVTEVfT05fRElTS19QUEkgICAgICAgICAgICAgICAq UGVpQ2Fwc3VsZU9uRGlzazsNCj4gICAgRUZJX01FTU9SWV9UWVBFX0lORk9STUFUSU9ODQo+IE1l bW9yeURhdGFbRWZpTWF4TWVtb3J5VHlwZSArIDFdOw0KPiAtICBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZU9uRGlza01vZGVQcGk7DQo+IA0KPiAgICAv Lw0KPiAgICAvLyBpZiBpbiBTMyBSZXN1bWUsIHJlc3RvcmUgY29uZmlndXJlDQo+ICAgIC8vDQo+ ICAgIEJvb3RNb2RlID0gR2V0Qm9vdE1vZGVIb2IgKCk7DQo+IEBAIC0zMzAsMzYgKzMyOCwxMCBA QCBEeGVMb2FkQ29yZSAoDQo+ICAgICAgfQ0KPiAgICAgIFJFUE9SVF9TVEFUVVNfQ09ERSAoRUZJ X1BST0dSRVNTX0NPREUsDQo+IChFRklfU09GVFdBUkVfUEVJX01PRFVMRSB8IEVGSV9TV19QRUlf UENfQ0FQU1VMRV9TVEFSVCkpOw0KPiAgICAgIC8vDQo+ICAgICAgLy8gTm93IHNob3VsZCBoYXZl IGEgSE9CIHdpdGggdGhlIERYRSBjb3JlDQo+ICAgICAgLy8NCj4gLSAgfSBlbHNlIGlmIChCb290 TW9kZSA9PSBCT09UX09OX0ZMQVNIX1VQREFURSkgew0KPiAtICAgIC8vDQo+IC0gICAgLy8gSWYg Q2Fwc3VsZSBPbiBEaXNrIG1vZGUsIGNhbGwgc3RvcmFnZSBzdGFjayB0byByZWFkIENhcHN1bGUg UmVsb2NhdGlvbg0KPiBmaWxlDQo+IC0gICAgLy8gSW9NbW11IGlzIGhpZ2hseSByZWNvbW1tZW5k ZWQgdG8gZW5hYmxlIGJlZm9yZSByZWFkaW5nDQo+IC0gICAgLy8NCj4gLSAgICBTdGF0dXMgPSBQ ZWlTZXJ2aWNlc0xvY2F0ZVBwaSAoDQo+IC0gICAgICAgICAgICAgICAmZ0Vka2lpUGVpQm9vdElu Q2Fwc3VsZU9uRGlza01vZGVQcGlHdWlkLA0KPiAtICAgICAgICAgICAgICAgMCwNCj4gLSAgICAg ICAgICAgICAgIE5VTEwsDQo+IC0gICAgICAgICAgICAgICAmQ2Fwc3VsZU9uRGlza01vZGVQcGkN Cj4gLSAgICAgICAgICAgICAgICk7DQo+IC0gICAgaWYgKCFFRklfRVJST1IoU3RhdHVzKSkgew0K PiAtICAgICAgU3RhdHVzID0gUGVpU2VydmljZXNMb2NhdGVQcGkgKA0KPiAtICAgICAgICAgICAg ICAgICAmZ0Vka2lpUGVpQ2Fwc3VsZU9uRGlza1BwaUd1aWQsDQo+IC0gICAgICAgICAgICAgICAg IDAsDQo+IC0gICAgICAgICAgICAgICAgIE5VTEwsDQo+IC0gICAgICAgICAgICAgICAgIChWT0lE ICoqKSAmUGVpQ2Fwc3VsZU9uRGlzaw0KPiAtICAgICAgICAgICAgICAgICApOw0KPiAtDQo+IC0g ICAgICAvLw0KPiAtICAgICAgLy8gV2hldGhlciBmYWlsZWQsIHN0aWxsIGdvZXMgdG8gRmlybXdh cmUgVXBkYXRlIGJvb3QgcGF0aC4gQkRTIHdpbGwgY2xlYXINCj4gY29ycmVzcG9uZGluZyBpbmRp Y2F0b3IgYW5kIHJlYm9vdCBsYXRlciBvbg0KPiAtICAgICAgLy8NCj4gLSAgICAgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAgICAgIFN0YXR1cyA9IFBlaUNhcHN1bGVPbkRpc2st PkxvYWRDYXBzdWxlT25EaXNrIChQZWlTZXJ2aWNlcywNCj4gUGVpQ2Fwc3VsZU9uRGlzayk7DQo+ IC0gICAgICB9DQo+IC0gICAgfQ0KPiAgICB9DQo+IA0KPiAgICBpZiAoR2V0Rmlyc3RHdWlkSG9i ICgoQ09OU1QgRUZJX0dVSUQNCj4gKikmZ0VmaU1lbW9yeVR5cGVJbmZvcm1hdGlvbkd1aWQpID09 IE5VTEwpIHsNCj4gICAgICAvLw0KPiAgICAgIC8vIERvbid0IGJ1aWxkIEd1aWRIb2IgaWYgR3Vp ZEhvYiBoYXMgYmVlbiBpbnN0YWxsZWQuDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvSW5j bHVkZS9MaWJyYXJ5L0NhcHN1bGVMaWIuaA0KPiBiL01kZU1vZHVsZVBrZy9JbmNsdWRlL0xpYnJh cnkvQ2Fwc3VsZUxpYi5oDQo+IGluZGV4IDdhNTQxNGM4MGYuLjFmYzJmYmEzYTIgMTAwNjQ0DQo+ IC0tLSBhL01kZU1vZHVsZVBrZy9JbmNsdWRlL0xpYnJhcnkvQ2Fwc3VsZUxpYi5oDQo+ICsrKyBi L01kZU1vZHVsZVBrZy9JbmNsdWRlL0xpYnJhcnkvQ2Fwc3VsZUxpYi5oDQo+IEBAIC0xLDIyICsx LDE3IEBADQo+ICAvKiogQGZpbGUNCj4gDQo+ICAgIFRoaXMgbGlicmFyeSBjbGFzcyBkZWZpbmVz IGEgc2V0IG9mIGludGVyZmFjZXMgZm9yIGhvdyB0byBwcm9jZXNzIGNhcHN1bGUNCj4gaW1hZ2Ug dXBkYXRlcy4NCj4gDQo+IC1Db3B5cmlnaHQgKGMpIDIwMDcgLSAyMDE5LCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICtDb3B5cmlnaHQgKGMpIDIwMDcgLSAy MDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gICoqLw0KPiAN Cj4gICNpZm5kZWYgX19DQVBTVUxFX0xJQl9IX18NCj4gICNkZWZpbmUgX19DQVBTVUxFX0xJQl9I X18NCj4gDQo+IC0vLw0KPiAtLy8gQk9PTEVBTiBWYXJpYWJsZSB0byBpbmRpY2F0ZSB3aGV0aGVy IHN5c3RlbSBpcyBpbiB0aGUgY2Fwc3VsZSBvbiBkaXNrDQo+IHN0YXRlLg0KPiAtLy8NCj4gLSNk ZWZpbmUgQ09EX1JFTE9DQVRJT05fSU5GT19WQVJfTkFNRSAgIEwiQ29kUmVsb2NhdGlvbkluZm8i DQo+IC0NCj4gIC8qKg0KPiAgICBUaGUgZmlybXdhcmUgY2hlY2tzIHdoZXRoZXIgdGhlIGNhcHN1 bGUgaW1hZ2UgaXMgc3VwcG9ydGVkDQo+ICAgIGJ5IHRoZSBDYXBzdWxlR3VpZCBpbiBDYXBzdWxl SGVhZGVyIG9yIGlmIHRoZXJlIGlzIG90aGVyIHNwZWNpZmljDQo+IGluZm9ybWF0aW9uIGluDQo+ ICAgIHRoZSBjYXBzdWxlIGltYWdlLg0KPiANCj4gQEAgLTg0LDc3ICs3OSw2IEBAIEVGSV9TVEFU VVMNCj4gIEVGSUFQSQ0KPiAgUHJvY2Vzc0NhcHN1bGVzICgNCj4gICAgVk9JRA0KPiAgICApOw0K PiANCj4gLS8qKg0KPiAtICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGNoZWNrIGlmIENhcHN1 bGVPbkRpc2sgZmxhZyBpbiBPc0luZGljYXRpb25zIFZhcmlhYmxlDQo+IC0gIGlzIGVuYWJsZWQu DQo+IC0NCj4gLSAgQHJldHZhbCBUUlVFICAgICBGbGFnIGlzIGVuYWJsZWQNCj4gLSAgQHJldHZh bCBGQUxTRSAgICBGbGFnIGlzIG5vdCBlbmFibGVkDQo+IC0NCj4gLSoqLw0KPiAtQk9PTEVBTg0K PiAtRUZJQVBJDQo+IC1Db0RDaGVja0NhcHN1bGVPbkRpc2tGbGFnKA0KPiAtICBWT0lEDQo+IC0g ICk7DQo+IC0NCj4gLS8qKg0KPiAtICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGNsZWFyIENh cHN1bGVPbkRpc2sgZmxhZ3MgaW5jbHVkaW5nIE9zSW5kaWNhdGlvbnMNCj4gYW5kIEJvb3ROZXh0 IHZhcmlhYmxlDQo+IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIEFsbCBDYXBzdWxlIE9u IERpc2sgZmxhZ3MgYXJlIGNsZWFyZWQNCj4gLQ0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+IC1F RklBUEkNCj4gLUNvRENsZWFyQ2Fwc3VsZU9uRGlza0ZsYWcoDQo+IC0gIFZPSUQNCj4gLSAgKTsN Cj4gLQ0KPiAtLyoqDQo+IC0gIFJlbG9jYXRlIENhcHN1bGUgb24gRGlzayBmcm9tIEVGSSBzeXN0 ZW0gcGFydGl0aW9uLg0KPiAtDQo+IC0gIFR3byBzb2x1dGlvbiB0byBkZWxpdmVyIENhcHN1bGUg T24gRGlzazoNCj4gLSAgU29sdXRpb24gQTogSWYgUGNkQ2Fwc3VsZUluUmFtU3VwcG9ydCBpcyBl bmFibGVkLCByZWxvY2F0ZSBDYXBzdWxlIE9uDQo+IERpc2sgdG8gbWVtb3J5IGFuZCBjYWxsIFVw ZGF0ZUNhcHN1bGUoKS4NCj4gLSAgU29sdXRpb24gQjogSWYgUGNkQ2Fwc3VsZUluUmFtU3VwcG9y dCBpcyBkaXNhYmxlZCwgcmVsb2NhdGUgQ2Fwc3VsZSBPbg0KPiBEaXNrIHRvIGEgcGxhdGZvcm0t c3BlY2lmaWMgTlYgc3RvcmFnZQ0KPiAtICBkZXZpY2Ugd2l0aCBCbG9ja0lvIHByb3RvY29sLg0K PiAtDQo+IC0gIERldmljZSBlbnVtZXJhdGlvbiBsaWtlIFVTQiBjb3N0cyB0aW1lLCB1c2VyIGNh biBpbnB1dCBNYXhSZXRyeSB0byB0ZWxsDQo+IGZ1bmN0aW9uIHRvIHJldHJ5Lg0KPiAtICBGdW5j dGlvbiB3aWxsIHN0YWxsIDEwMG1zIGJldHdlZW4gZWFjaCByZXRyeS4NCj4gLQ0KPiAtICBTaWRl IEVmZmVjdHM6DQo+IC0gICAgQ2Fwc3VsZSBEZWxpdmVyeSBTdXBwb3J0ZWQgRmxhZyBpbiBPc0lu ZGljYXRpb24gdmFyaWFibGUgYW5kIEJvb3ROZXh0DQo+IHZhcmlhYmxlIHdpbGwgYmUgY2xlYXJl ZC4NCj4gLSAgICBTb2x1dGlvbiBCOiBDb250ZW50IGNvcnJ1cHRpb24uIEJsb2NrIElPIHdyaXRl IGRpcmVjdGx5IHRvdWNoZXMgbG93IGxldmVsDQo+IHdyaXRlLiBPcmlnbmFsIHBhcnRpdGlvbnMs IGZpbGUNCj4gLSAgc3lzdGVtcyBvZiB0aGUgcmVsb2NhdGlvbiBkZXZpY2Ugd2lsbCBiZSBjb3Jy dXB0ZWQuDQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgICBNYXhSZXRyeSAgICAgICAgICAgICBNYXgg Q29ubmVjdGlvbiBSZXRyeS4gU3RhbGwgMTAwbXMgYmV0d2Vlbg0KPiBlYWNoIGNvbm5lY3Rpb24g dHJ5IHRvIGVuc3VyZQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl dmljZXMgbGlrZSBVU0IgY2FuIGdldCBlbnVtZXJhdGVkLiBJbnB1dCAwIG1lYW5zIG5vDQo+IHJl dHJ5Lg0KPiAtDQo+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICBDYXBzdWxlIG9uIERpc2sgaW1h Z2VzIGFyZSBzdWNjZXNzZnVsbHkgcmVsb2NhdGVkLg0KPiAtDQo+IC0qKi8NCj4gLUVGSV9TVEFU VVMNCj4gLUVGSUFQSQ0KPiAtQ29EUmVsb2NhdGVDYXBzdWxlKA0KPiAtICBVSU5UTiAgICAgTWF4 UmV0cnkNCj4gLSAgKTsNCj4gLQ0KPiAtLyoqDQo+IC0gIFJlbW92ZSB0aGUgdGVtcCBmaWxlIGZy b20gdGhlIHJvb3Qgb2YgRUZJIFN5c3RlbSBQYXJ0aXRpb24uDQo+IC0gIERldmljZSBlbnVtZXJh dGlvbiBsaWtlIFVTQiBjb3N0cyB0aW1lLCB1c2VyIGNhbiBpbnB1dCBNYXhSZXRyeSB0byB0ZWxs DQo+IGZ1bmN0aW9uIHRvIHJldHJ5Lg0KPiAtICBGdW5jdGlvbiB3aWxsIHN0YWxsIDEwMG1zIGJl dHdlZW4gZWFjaCByZXRyeS4NCj4gLQ0KPiAtICBAcGFyYW1baW5dICAgIE1heFJldHJ5ICAgICAg ICAgICAgIE1heCBDb25uZWN0aW9uIFJldHJ5LiBTdGFsbCAxMDBtcyBiZXR3ZWVuDQo+IGVhY2gg Y29ubmVjdGlvbiB0cnkgdG8gZW5zdXJlDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2aWNlcyBsaWtlIFVTQiBjYW4gZ2V0IGVudW1lcmF0ZWQuIElucHV0IDAgbWVh bnMgbm8NCj4gcmV0cnkuDQo+IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIFJlbW92ZSB0 aGUgdGVtcCBmaWxlIHN1Y2Nlc3NmdWxseS4NCj4gLQ0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+ IC1FRklBUEkNCj4gLUNvRFJlbW92ZVRlbXBGaWxlICgNCj4gLSAgVUlOVE4gICAgTWF4UmV0cnkN Cj4gLSAgKTsNCj4gLQ0KPiAgI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvSW5j bHVkZS9QcGkvQ2Fwc3VsZU9uRGlzay5oDQo+IGIvTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHBpL0Nh cHN1bGVPbkRpc2suaA0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggYzgzZTY4 ZmNkMC4uMDAwMDAwMDAwMA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvSW5jbHVkZS9QcGkvQ2Fwc3Vs ZU9uRGlzay5oDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsNTUgKzAsMCBAQA0KPiAtLyoqIEBm aWxlDQo+IC0gIFRoaXMgZmlsZSBkZWNsYXJlcyBDYXBzdWxlIE9uIERpc2sgUFBJLiAgVGhpcyBQ UEkgaXMgdXNlZCB0byBmaW5kIGFuZCBsb2FkIHRoZQ0KPiAtICBjYXBzdWxlIG9uIGZpbGVzIHRo YXQgYXJlIHJlbG9jYXRlZCBpbnRvIGEgdGVtcCBmaWxlIHVuZGVyIHJvb3RkaXIuDQo+IC0NCj4g LSAgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQo+IC0gIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+IC0NCj4gLSoqLw0KPiAtDQo+IC0jaWZuZGVmIF9fUEVJX0NBUFNVTEVfT05fRElTS19Q UElfSF9fDQo+IC0jZGVmaW5lIF9fUEVJX0NBUFNVTEVfT05fRElTS19QUElfSF9fDQo+IC0NCj4g LSNkZWZpbmUgRUZJX1BFSV9DQVBTVUxFX09OX0RJU0tfUFBJX0dVSUQgXA0KPiAtICB7IFwNCj4g LSAgICAweDcxYTllYTYxLCAweDVhMzUsIDB4NGE1ZCwgezB4YWMsIDB4ZWYsIDB4OWMsIDB4Zjgs IDB4NmQsIDB4NmQsIDB4NjcsDQo+IDB4ZTAgfSBcDQo+IC0gIH0NCj4gLQ0KPiAtdHlwZWRlZiBz dHJ1Y3QgX0VGSV9QRUlfQ0FQU1VMRV9PTl9ESVNLX1BQSQ0KPiBFRklfUEVJX0NBUFNVTEVfT05f RElTS19QUEk7DQo+IC0NCj4gLS8qKg0KPiAtICBMb2FkcyBhIERYRSBjYXBzdWxlIGZyb20gc29t ZSBtZWRpYSBpbnRvIG1lbW9yeSBhbmQgdXBkYXRlcyB0aGUgSE9CDQo+IHRhYmxlDQo+IC0gIHdp dGggdGhlIERYRSBmaXJtd2FyZSB2b2x1bWUgaW5mb3JtYXRpb24uDQo+IC0NCj4gLSAgQHBhcmFt ICBQZWlTZXJ2aWNlcyAgIEdlbmVyYWwtcHVycG9zZSBzZXJ2aWNlcyB0aGF0IGFyZSBhdmFpbGFi bGUgdG8gZXZlcnkNCj4gUEVJTS4NCj4gLSAgQHBhcmFtICBUaGlzICAgICAgICAgIEluZGljYXRl cyB0aGUgRUZJX1BFSV9SRUNPVkVSWV9NT0RVTEVfUFBJIGluc3RhbmNlLg0KPiAtDQo+IC0gIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFRoZSBjYXBzdWxlIHdhcyBsb2FkZWQgY29ycmVjdGx5 Lg0KPiAtICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICBBIGRldmljZSBlcnJvciBvY2N1cnJl ZC4NCj4gLSAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgQSByZWNvdmVyeSBEWEUgY2Fwc3Vs ZSBjYW5ub3QgYmUgZm91bmQuDQo+IC0NCj4gLSoqLw0KPiAtdHlwZWRlZg0KPiAtRUZJX1NUQVRV Uw0KPiAtKEVGSUFQSSAqRUZJX1BFSV9MT0FEX0NBUFNVTEVfT05fRElTSykoDQo+IC0gIElOIEVG SV9QRUlfU0VSVklDRVMgICAgICAgICAgICAgKipQZWlTZXJ2aWNlcywNCj4gLSAgSU4gRUZJX1BF SV9DQVBTVUxFX09OX0RJU0tfUFBJICAqVGhpcw0KPiAtICApOw0KPiAtDQo+IC0vLy8NCj4gLS8v LyAgRmluZHMgYW5kIGxvYWRzIHRoZSByZWNvdmVyeSBmaWxlcy4NCj4gLS8vLw0KPiAtc3RydWN0 IF9FRklfUEVJX0NBUFNVTEVfT05fRElTS19QUEkgew0KPiAtICBFRklfUEVJX0xPQURfQ0FQU1VM RV9PTl9ESVNLIExvYWRDYXBzdWxlT25EaXNrOyAgLy8vPCBMb2FkcyBhIERYRQ0KPiBiaW5hcnkg Y2Fwc3VsZSBpbnRvIG1lbW9yeS4NCj4gLX07DQo+IC0NCj4gLWV4dGVybiBFRklfR1VJRCBnRWRr aWlQZWlDYXBzdWxlT25EaXNrUHBpR3VpZDsNCj4gLQ0KPiAtI2RlZmluZSBFRklfUEVJX0JPT1Rf SU5fQ0FQU1VMRV9PTl9ESVNLX01PREVfUFBJIFwNCj4gLSAgeyBcDQo+IC0gICAgMHhiMDhhMTFl NCwgMHhlMmI3LCAweDRiNzUsIHsgMHhiNSwgMHgxNSwgMHhhZiwgMHg2MSwgMHg2LCAweDY4LCAw eGJmLA0KPiAweGQxIH0gXA0KPiAtICB9DQo+IC0NCj4gLWV4dGVybiBFRklfR1VJRCBnRWZpUGVp Qm9vdEluQ2Fwc3VsZU9uRGlza01vZGVQcGlHdWlkOw0KPiAtDQo+IC0jZW5kaWYNCj4gZGlmZiAt LWdpdCBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvQ2Fwc3VsZU9uRGlz ay5jDQo+IGIvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9DYXBzdWxlT25E aXNrLmMNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IGJiMzRlNmQzN2EuLjAw MDAwMDAwMDANCj4gLS0tIGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9D YXBzdWxlT25EaXNrLmMNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSwxOTY2ICswLDAgQEANCj4g LS8qKiBAZmlsZQ0KPiAtICBUaGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgQ2FwdXNsZSBvbiBE aXNrLg0KPiAtDQo+IC0gIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAtICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiAtDQo+IC0qKi8NCj4gLQ0KPiAtI2luY2x1ZGUgIkNhcHN1bGVP bkRpc2suaCINCj4gLQ0KPiAtLyoqDQo+IC0gIFJldHVybiBpZiB0aGlzIGNhcHN1bGUgaXMgYSBj YXBzdWxlIG5hbWUgY2Fwc3VsZSwgYmFzZWQgdXBvbg0KPiBDYXBzdWxlSGVhZGVyLg0KPiAtDQo+ IC0gIEBwYXJhbVtpbl0gQ2Fwc3VsZUhlYWRlciBBIHBvaW50ZXIgdG8gRUZJX0NBUFNVTEVfSEVB REVSDQo+IC0NCj4gLSAgQHJldHZhbCBUUlVFICBJdCBpcyBhIGNhcHN1bGUgbmFtZSBjYXBzdWxl Lg0KPiAtICBAcmV0dmFsIEZBTFNFIEl0IGlzIG5vdCBhIGNhcHN1bGUgbmFtZSBjYXBzdWxlLg0K PiAtKiovDQo+IC1CT09MRUFODQo+IC1Jc0NhcHN1bGVOYW1lQ2Fwc3VsZSAoDQo+IC0gIElOIEVG SV9DQVBTVUxFX0hFQURFUiAgICAgICAgICpDYXBzdWxlSGVhZGVyDQo+IC0gICk7DQo+IC0NCj4g LS8qKg0KPiAtICBDaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjYXBzdWxlIG5hbWUgY2Fwc3Vs ZS4NCj4gLSAgSWYgdGhlIGNhcHN1bGUgaXMgdmFpbGQsIHJldHVybiB0aGUgcGh5c2ljYWwgYWRk cmVzcyBvZiBlYWNoIGNhcHN1bGUgbmFtZQ0KPiBzdHJpbmcuDQo+IC0NCj4gLSAgQHBhcmFtW2lu XSAgQ2Fwc3VsZUhlYWRlciAgIFBvaW50ZXIgdG8gdGhlIGNhcHN1bGUgaGVhZGVyIG9mIGEgY2Fw c3VsZQ0KPiBuYW1lIGNhcHN1bGUuDQo+IC0gIEBwYXJhbVtvdXRdIENhcHN1bGVOYW1lTnVtICBO dW1iZXIgb2YgY2Fwc3VsZSBuYW1lLg0KPiAtDQo+IC0gIEByZXR2YWwgTlVMTCAgICAgICAgICAg ICAgICBDYXBzdWxlIG5hbWUgY2Fwc3VsZSBpcyBub3QgdmFsaWQuDQo+IC0gIEByZXR2YWwgQ2Fw c3VsZU5hbWVCdWYgICAgICBBcnJheSBvZiBjYXBzdWxlIG5hbWUgcGh5c2ljYWwgYWRkcmVzcy4N Cj4gLQ0KPiAtKiovDQo+IC1FRklfUEhZU0lDQUxfQUREUkVTUyAqDQo+IC1WYWxpZGF0ZUNhcHN1 bGVOYW1lQ2Fwc3VsZUludGVncml0eSAoDQo+IC0gIElOICBFRklfQ0FQU1VMRV9IRUFERVIgICAg ICAgICAgICAqQ2Fwc3VsZUhlYWRlciwNCj4gLSAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICpDYXBzdWxlTmFtZU51bQ0KPiAtICApDQo+IC17DQo+IC0gIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAqQ2Fwc3VsZU5hbWVQdHI7DQo+IC0gIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAqQ2Fwc3VsZU5hbWVCdWZTdGFydDsNCj4gLSAgVUlOVDggICAgICAgICAgICAgICAgICAgICpD YXBzdWxlTmFtZUJ1ZkVuZDsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K PiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgU3RyaW5nU2l6ZTsNCj4gLSAgRUZJX1BIWVNJ Q0FMX0FERFJFU1MgICAgICpDYXBzdWxlTmFtZUJ1ZjsNCj4gLQ0KPiAtICBpZiAoIUlzQ2Fwc3Vs ZU5hbWVDYXBzdWxlIChDYXBzdWxlSGVhZGVyKSkgew0KPiAtICAgIHJldHVybiBOVUxMOw0KPiAt ICB9DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gVG90YWwgc3RyaW5nIHNpemUgbXVzdCBiZSBldmVu Lg0KPiAtICAvLw0KPiAtICBpZiAoKChDYXBzdWxlSGVhZGVyLT5DYXBzdWxlSW1hZ2VTaXplIC0g Q2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSkgJg0KPiBCSVQwKSAhPSAwKSB7DQo+IC0gICAgcmV0 dXJuIE5VTEw7DQo+IC0gIH0NCj4gLQ0KPiAtICAqQ2Fwc3VsZU5hbWVOdW0gPSAwOw0KPiAtICBJ bmRleCA9IDA7DQo+IC0gIENhcHN1bGVOYW1lQnVmU3RhcnQgPSAoVUlOVDggKikgQ2Fwc3VsZUhl YWRlciArIENhcHN1bGVIZWFkZXItDQo+ID5IZWFkZXJTaXplOw0KPiAtDQo+IC0gIC8vDQo+IC0g IC8vIElmIHN0cmluZ3MgYXJlIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCByZWFs bG9jYXRlIG1lbW9yeSBmb3IgaXQuDQo+IC0gIC8vDQo+IC0gIGlmICgoKFVJTlROKSBDYXBzdWxl TmFtZUJ1ZlN0YXJ0ICYgQklUMCkgIT0gMCkgew0KPiAtICAgIENhcHN1bGVOYW1lQnVmU3RhcnQg PSBBbGxvY2F0ZUNvcHlQb29sIChDYXBzdWxlSGVhZGVyLQ0KPiA+Q2Fwc3VsZUltYWdlU2l6ZSAt IENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUsIENhcHN1bGVOYW1lQnVmU3RhcnQpOw0KPiAtICB9 DQo+IC0NCj4gLSAgQ2Fwc3VsZU5hbWVCdWZFbmQgPSBDYXBzdWxlTmFtZUJ1ZlN0YXJ0ICsgQ2Fw c3VsZUhlYWRlci0NCj4gPkNhcHN1bGVJbWFnZVNpemUgLSBDYXBzdWxlSGVhZGVyLT5IZWFkZXJT aXplOw0KPiAtDQo+IC0gIENhcHN1bGVOYW1lUHRyID0gQ2Fwc3VsZU5hbWVCdWZTdGFydDsNCj4g LSAgd2hpbGUgKENhcHN1bGVOYW1lUHRyIDwgQ2Fwc3VsZU5hbWVCdWZFbmQpIHsNCj4gLSAgICBT dHJpbmdTaXplPSBTdHJuU2l6ZVMgKChDSEFSMTYgKikgQ2Fwc3VsZU5hbWVQdHIsIChDYXBzdWxl TmFtZUJ1ZkVuZA0KPiAtIENhcHN1bGVOYW1lUHRyKS9zaXplb2YoQ0hBUjE2KSk7DQo+IC0gICAg Q2Fwc3VsZU5hbWVQdHIgKz0gU3RyaW5nU2l6ZTsNCj4gLSAgICAoKkNhcHN1bGVOYW1lTnVtKSAr KzsNCj4gLSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIEludGVncml0eSBjaGVjay4NCj4gLSAg Ly8NCj4gLSAgaWYgKENhcHN1bGVOYW1lUHRyICE9IENhcHN1bGVOYW1lQnVmRW5kKSB7DQo+IC0g ICAgaWYgKENhcHN1bGVOYW1lQnVmU3RhcnQgIT0gKFVJTlQ4ICopQ2Fwc3VsZUhlYWRlciArIENh cHN1bGVIZWFkZXItDQo+ID5IZWFkZXJTaXplKSB7DQo+IC0gICAgICBGcmVlUG9vbCAoQ2Fwc3Vs ZU5hbWVCdWZTdGFydCk7DQo+IC0gICAgfQ0KPiAtICAgIHJldHVybiBOVUxMOw0KPiAtICB9DQo+ IC0NCj4gLSAgQ2Fwc3VsZU5hbWVCdWYgPSBBbGxvY2F0ZVBvb2wgKCpDYXBzdWxlTmFtZU51bSAq IHNpemVvZg0KPiAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKTsNCj4gLSAgaWYgKENhcHN1bGVOYW1l QnVmID09IE5VTEwpIHsNCj4gLSAgICBpZiAoQ2Fwc3VsZU5hbWVCdWZTdGFydCAhPSAoVUlOVDgg KilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0NCj4gPkhlYWRlclNpemUpIHsNCj4gLSAg ICAgIEZyZWVQb29sIChDYXBzdWxlTmFtZUJ1ZlN0YXJ0KTsNCj4gLSAgICB9DQo+IC0gICAgcmV0 dXJuIE5VTEw7DQo+IC0gIH0NCj4gLQ0KPiAtICBDYXBzdWxlTmFtZVB0ciA9IENhcHN1bGVOYW1l QnVmU3RhcnQ7DQo+IC0gIHdoaWxlIChDYXBzdWxlTmFtZVB0ciA8IENhcHN1bGVOYW1lQnVmRW5k KSB7DQo+IC0gICAgU3RyaW5nU2l6ZT0gU3RyblNpemVTICgoQ0hBUjE2ICopIENhcHN1bGVOYW1l UHRyLCAoQ2Fwc3VsZU5hbWVCdWZFbmQNCj4gLSBDYXBzdWxlTmFtZVB0cikvc2l6ZW9mKENIQVIx NikpOw0KPiAtICAgIENhcHN1bGVOYW1lQnVmW0luZGV4XSA9IChFRklfUEhZU0lDQUxfQUREUkVT UykoVUlOVE4pDQo+IENhcHN1bGVOYW1lUHRyOw0KPiAtICAgIENhcHN1bGVOYW1lUHRyICs9IFN0 cmluZ1NpemU7DQo+IC0gICAgSW5kZXggKys7DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gQ2Fw c3VsZU5hbWVCdWY7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBUaGlzIHJvdXRpbmUgaXMgY2Fs bGVkIHRvIHVwcGVyIGNhc2UgZ2l2ZW4gdW5pY29kZSBzdHJpbmcuDQo+IC0NCj4gLSAgQHBhcmFt W2luXSAgIFN0ciAgICAgICAgICAgICAgU3RyaW5nIHRvIHVwcGVyIGNhc2UNCj4gLQ0KPiAtICBA cmV0dmFsIHVwcGVyIGNhc2VkIHN0cmluZyBhZnRlciBwcm9jZXNzDQo+IC0NCj4gLSoqLw0KPiAt c3RhdGljDQo+IC1DSEFSMTYgKg0KPiAtVXBwZXJDYXNlU3RyaW5nICgNCj4gLSAgSU4gQ0hBUjE2 ICpTdHINCj4gLSAgKQ0KPiAtew0KPiAtICBDSEFSMTYgICpDcHRyOw0KPiAtDQo+IC0gIGZvciAo Q3B0ciA9IFN0cjsgKkNwdHI7IENwdHIrKykgew0KPiAtICAgIGlmIChMJ2EnIDw9ICpDcHRyICYm ICpDcHRyIDw9IEwneicpIHsNCj4gLSAgICAgICpDcHRyID0gKkNwdHIgLSBMJ2EnICsgTCdBJzsN Cj4gLSAgICB9DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gU3RyOw0KPiAtfQ0KPiAtDQo+IC0v KioNCj4gLSAgVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcmV0dXJuIHN1YnN0cmluZyBiZWZvcmUg cGVyaW9kICcuJyBvciAnXDAnDQo+IC0gIENhbGxlciBzaG91bGQgcmVzcHNvbnNpYmxlIG9mIHN1 YnN0ciBzcGFjZSBhbGxvY2F0aW9uICYgZnJlZQ0KPiAtDQo+IC0gIEBwYXJhbVtpbl0gICBTdHIg ICAgICAgICAgICAgIFN0cmluZyB0byBjaGVjaw0KPiAtICBAcGFyYW1bb3V0XSAgU3ViU3RyICAg ICAgICAgICBGaXJzdCBwYXJ0IG9mIHN0cmluZyBiZWZvcmUgcGVyaW9kIG9yICdcMCcNCj4gLSAg QHBhcmFtW291dF0gIFN1YlN0ckxlbiAgICAgICAgTGVuZ3RoIG9mIGZpcnN0IHBhcnQgb2Ygc3Ry aW5nDQo+IC0NCj4gLSoqLw0KPiAtc3RhdGljDQo+IC1WT0lEDQo+IC1HZXRTdWJTdHJpbmdCZWZv cmVQZXJpb2QgKA0KPiAtICBJTiAgQ0hBUjE2ICpTdHIsDQo+IC0gIE9VVCBDSEFSMTYgKlN1YlN0 ciwNCj4gLSAgT1VUIFVJTlROICAqU3ViU3RyTGVuDQo+IC0gICkNCj4gLXsNCj4gLSAgVUlOVE4g SW5kZXg7DQo+IC0gIGZvciAoSW5kZXggPSAwOyBTdHJbSW5kZXhdICE9IEwnLicgJiYgU3RyW0lu ZGV4XSAhPSBMJ1wwJzsgSW5kZXgrKykgew0KPiAtICAgIFN1YlN0cltJbmRleF0gPSBTdHJbSW5k ZXhdOw0KPiAtICB9DQo+IC0NCj4gLSAgU3ViU3RyW0luZGV4XSA9IEwnXDAnOw0KPiAtICAqU3Vi U3RyTGVuID0gSW5kZXg7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBUaGlzIHJvdXRpbmUgcGFk IHRoZSBzdHJpbmcgaW4gdGFpbCB3aXRoIGlucHV0IGNoYXJhY3Rlci4NCj4gLQ0KPiAtICBAcGFy YW1baW5dICAgU3RyQnVmICAgICAgICAgICAgU3RyIGJ1ZmZlciB0byBiZSBwYWRkZWQsIHNob3Vs ZCBiZSBlbm91Z2ggcm9vbQ0KPiBmb3INCj4gLSAgQHBhcmFtW2luXSAgIFBhZExlbiAgICAgICAg ICAgIEV4cGVjdGVkIHBhZGRpbmcgbGVuZ3RoDQo+IC0gIEBwYXJhbVtpbl0gICBDaGFyYWN0ZXIg ICAgICAgICBDaGFyYWN0ZXIgdXNlZCB0byBwYWQNCj4gLQ0KPiAtKiovDQo+IC1zdGF0aWMNCj4g LVZPSUQNCj4gLVBhZFN0ckluVGFpbCAoDQo+IC0gIElOIENIQVIxNiAgICpTdHJCdWYsDQo+IC0g IElOIFVJTlROICAgIFBhZExlbiwNCj4gLSAgSU4gQ0hBUjE2ICAgQ2hhcmFjdGVyDQo+IC0gICkN Cj4gLXsNCj4gLSAgVUlOVE4gSW5kZXg7DQo+IC0NCj4gLSAgZm9yIChJbmRleCA9IDA7IFN0ckJ1 ZltJbmRleF0gIT0gTCdcMCc7IEluZGV4KyspOw0KPiAtDQo+IC0gIHdoaWxlKFBhZExlbiAhPSAw KSB7DQo+IC0gICAgU3RyQnVmW0luZGV4XSA9IENoYXJhY3RlcjsNCj4gLSAgICBJbmRleCsrOw0K PiAtICAgIFBhZExlbi0tOw0KPiAtICB9DQo+IC0NCj4gLSAgU3RyQnVmW0luZGV4XSA9IEwnXDAn Ow0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAgVGhpcyByb3V0aW5lIGZpbmQgdGhlIG9mZnNldCBv ZiB0aGUgbGFzdCBwZXJpb2QgJy4nIG9mIHN0cmluZy4gSWYgTm8gcGVyaW9kIGV4aXN0cw0KPiAt ICBmdW5jdGlvbiBGaWxlTmFtZUV4dGVuc2lvbiBpcyBzZXQgdG8gTCdcMCcNCj4gLQ0KPiAtICBA cGFyYW1baW5dICBGaWxlTmFtZSAgICAgICAgICAgRmlsZSBuYW1lIHRvIHNwbGl0IGJldHdlZW4g bGFzdCBwZXJpb2QNCj4gLSAgQHBhcmFtW291dF0gRmlsZU5hbWVGaXJzdCAgICAgIEZpcnN0IEZp bGVOYW1lIGJlZm9yZSBsYXN0IHBlcmlvZA0KPiAtICBAcGFyYW1bb3V0XSBGaWxlTmFtZUV4dGVu c2lvbiAgRmlsZU5hbWUgYWZ0ZXIgbGFzdCBwZXJpb2QNCj4gLQ0KPiAtKiovDQo+IC1zdGF0aWMN Cj4gLVZPSUQNCj4gLVNwbGl0RmlsZU5hbWVFeHRlbnNpb24gKA0KPiAtICBJTiBDSEFSMTYgICAq RmlsZU5hbWUsDQo+IC0gIE9VVCBDSEFSMTYgICpGaWxlTmFtZUZpcnN0LA0KPiAtICBPVVQgQ0hB UjE2ICAqRmlsZU5hbWVFeHRlbnNpb24NCj4gLSAgKQ0KPiAtew0KPiAtICBVSU5UTiBJbmRleDsN Cj4gLSAgVUlOVE4gU3RyaW5nTGVuOw0KPiAtDQo+IC0gIFN0cmluZ0xlbiA9IFN0cm5MZW5TKEZp bGVOYW1lLCBNQVhfRklMRV9OQU1FX1NJWkUpOw0KPiAtICBmb3IgKEluZGV4ID0gU3RyaW5nTGVu OyBJbmRleCA+IDAgJiYgRmlsZU5hbWVbSW5kZXhdICE9IEwnLic7IEluZGV4LS0pOw0KPiAtDQo+ IC0gIC8vDQo+IC0gIC8vIE5vIHBlcmlvZCBleGlzdHMuIE5vIEZpbGVOYW1lIEV4dGVuc2lvbg0K PiAtICAvLw0KPiAtICBpZiAoSW5kZXggPT0gMCAmJiBGaWxlTmFtZVtJbmRleF0gIT0gTCcuJykg ew0KPiAtICAgIEZpbGVOYW1lRXh0ZW5zaW9uWzBdID0gTCdcMCc7DQo+IC0gICAgSW5kZXggPSBT dHJpbmdMZW47DQo+IC0gIH0gZWxzZSB7DQo+IC0gICAgU3RyQ3B5UyhGaWxlTmFtZUV4dGVuc2lv biwgTUFYX0ZJTEVfTkFNRV9TSVpFLA0KPiAmRmlsZU5hbWVbSW5kZXgrMV0pOw0KPiAtICB9DQo+ IC0NCj4gLSAgLy8NCj4gLSAgLy8gQ29weSBGaXJzdCBmaWxlIG5hbWUNCj4gLSAgLy8NCj4gLSAg U3RybkNweVMoRmlsZU5hbWVGaXJzdCwgTUFYX0ZJTEVfTkFNRV9TSVpFLCBGaWxlTmFtZSwgSW5k ZXgpOw0KPiAtICBGaWxlTmFtZUZpcnN0W0luZGV4XSA9IEwnXDAnOw0KPiAtfQ0KPiAtDQo+IC0v KioNCj4gLSAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBnZXQgYWxsIGJvb3Qgb3B0aW9ucyBp biB0aGUgb3JkZXIgZGV0ZXJtbmluZWQgYnk6DQo+IC0gICAgMS4gIk9wdGlvbkJ1ZiINCj4gLSAg ICAyLiAiQm9vdE9yZGVyIg0KPiAtDQo+IC0gIEBwYXJhbVtvdXRdIE9wdGlvbkJ1ZiAgICAgICAg ICAgQm9vdExpc3QgYnVmZmVyIHRvIGFsbCBib290IG9wdGlvbnMgcmV0dXJuZWQNCj4gLSAgQHBh cmFtW291dF0gT3B0aW9uQ291bnQgICAgICAgICBCb290TGlzdCBjb3VudCBvZiBhbGwgYm9vdCBv cHRpb25zIHJldHVybmVkDQo+IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg ICBUaGVyZSBpcyBubyBlcnJvciB3aGVuIHByb2Nlc3NpbmcgY2Fwc3VsZQ0KPiAtDQo+IC0qKi8N Cj4gLUVGSV9TVEFUVVMNCj4gLUdldEJvb3RPcHRpb25Jbk9yZGVyKA0KPiAtICBPVVQgRUZJX0JP T1RfTUFOQUdFUl9MT0FEX09QVElPTiAqKk9wdGlvbkJ1ZiwNCj4gLSAgT1VUIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgKk9wdGlvbkNvdW50DQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+IC0gIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgRGF0YVNpemU7DQo+IC0gIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgQm9v dE5leHQ7DQo+IC0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgQm9vdE9wdGlvbk5hbWVb MjBdOw0KPiAtICBFRklfQk9PVF9NQU5BR0VSX0xPQURfT1BUSU9OICpCb290T3JkZXJPcHRpb25C dWY7DQo+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgQm9vdE9yZGVyQ291bnQ7DQo+ IC0gIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gQm9vdE5leHRPcHRpb25FbnRyeTsNCj4g LSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBCb290TmV4dENvdW50Ow0KPiAtICBFRklf Qk9PVF9NQU5BR0VSX0xPQURfT1BUSU9OICpUZW1wQnVmOw0KPiAtDQo+IC0gIEJvb3RPcmRlck9w dGlvbkJ1ZiAgPSBOVUxMOw0KPiAtICBUZW1wQnVmICAgICAgICAgICAgID0gTlVMTDsNCj4gLSAg Qm9vdE5leHRDb3VudCAgICAgICA9IDA7DQo+IC0gIEJvb3RPcmRlckNvdW50ICAgICAgPSAwOw0K PiAtICAqT3B0aW9uQnVmICAgICAgICAgID0gTlVMTDsNCj4gLSAgKk9wdGlvbkNvdW50ICAgICAg ICA9IDA7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gRmlyc3QgR2V0IEJvb3RPcHRpb24gZnJvbSAi Qm9vdE5leHQiDQo+IC0gIC8vDQo+IC0gIERhdGFTaXplID0gc2l6ZW9mKEJvb3ROZXh0KTsNCj4g LSAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+IC0gICAgICAgICAgICAgICAgICBFRklf Qk9PVF9ORVhUX1ZBUklBQkxFX05BTUUsDQo+IC0gICAgICAgICAgICAgICAgICAmZ0VmaUdsb2Jh bFZhcmlhYmxlR3VpZCwNCj4gLSAgICAgICAgICAgICAgICAgIE5VTEwsDQo+IC0gICAgICAgICAg ICAgICAgICAmRGF0YVNpemUsDQo+IC0gICAgICAgICAgICAgICAgICAoVk9JRCAqKSZCb290TmV4 dA0KPiAtICAgICAgICAgICAgICAgICAgKTsNCj4gLSAgLy8NCj4gLSAgLy8gQm9vdE5leHQgdmFy aWFibGUgaXMgYSBzaW5nbGUgVUlOVDE2DQo+IC0gIC8vDQo+IC0gIGlmICghRUZJX0VSUk9SKFN0 YXR1cykgJiYgRGF0YVNpemUgPT0gc2l6ZW9mKFVJTlQxNikpIHsNCj4gLSAgICAvLw0KPiAtICAg IC8vIEFkZCB0aGUgYm9vdCBuZXh0IGJvb3Qgb3B0aW9uDQo+IC0gICAgLy8NCj4gLSAgICBVbmlj b2RlU1ByaW50IChCb290T3B0aW9uTmFtZSwgc2l6ZW9mIChCb290T3B0aW9uTmFtZSksIEwiQm9v dCUwNHgiLA0KPiBCb290TmV4dCk7DQo+IC0gICAgWmVyb01lbSgmQm9vdE5leHRPcHRpb25FbnRy eSwNCj4gc2l6ZW9mKEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04pKTsNCj4gLSAgICBTdGF0 dXMgPSBFZmlCb290TWFuYWdlclZhcmlhYmxlVG9Mb2FkT3B0aW9uIChCb290T3B0aW9uTmFtZSwN Cj4gJkJvb3ROZXh0T3B0aW9uRW50cnkpOw0KPiAtDQo+IC0gICAgaWYgKCFFRklfRVJST1IoU3Rh dHVzKSkgew0KPiAtICAgICAgQm9vdE5leHRDb3VudCA9IDE7DQo+IC0gICAgfQ0KPiAtICB9DQo+ IC0NCj4gLSAgLy8NCj4gLSAgLy8gU2Vjb25kIGdldCBCb290T3B0aW9uIGZyb20gIkJvb3RPcmRl ciINCj4gLSAgLy8NCj4gLSAgQm9vdE9yZGVyT3B0aW9uQnVmID0gRWZpQm9vdE1hbmFnZXJHZXRM b2FkT3B0aW9ucw0KPiAoJkJvb3RPcmRlckNvdW50LCBMb2FkT3B0aW9uVHlwZUJvb3QpOw0KPiAt ICBpZiAoQm9vdE5leHRDb3VudCA9PSAwICYmIEJvb3RPcmRlckNvdW50ID09IDApIHsNCj4gLSAg ICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gLSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIEF0 IGxlYXN0IG9uZSBCb290T3B0aW9uIGlzIGZvdW5kDQo+IC0gIC8vDQo+IC0gIFRlbXBCdWYgPSBB bGxvY2F0ZVBvb2woc2l6ZW9mKEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04pICoNCj4gKEJv b3ROZXh0Q291bnQgKyBCb290T3JkZXJDb3VudCkpOw0KPiAtICBpZiAoVGVtcEJ1ZiAhPSBOVUxM KSB7DQo+IC0gICAgaWYgKEJvb3ROZXh0Q291bnQgPT0gMSkgew0KPiAtICAgICAgQ29weU1lbShU ZW1wQnVmLCAmQm9vdE5leHRPcHRpb25FbnRyeSwNCj4gc2l6ZW9mKEVGSV9CT09UX01BTkFHRVJf TE9BRF9PUFRJT04pKTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBpZiAoQm9vdE9yZGVyQ291bnQg PiAwKSB7DQo+IC0gICAgICBDb3B5TWVtKFRlbXBCdWYgKyBCb290TmV4dENvdW50LCBCb290T3Jk ZXJPcHRpb25CdWYsDQo+IHNpemVvZihFRklfQk9PVF9NQU5BR0VSX0xPQURfT1BUSU9OKSAqIEJv b3RPcmRlckNvdW50KTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICAqT3B0aW9uQnVmICAgPSBUZW1w QnVmOw0KPiAtICAgICpPcHRpb25Db3VudCA9IEJvb3ROZXh0Q291bnQgKyBCb290T3JkZXJDb3Vu dDsNCj4gLSAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gLSAgfSBlbHNlIHsNCj4gLSAgICBT dGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gLSAgfQ0KPiAtDQo+IC0gIEZyZWVQb29s KEJvb3RPcmRlck9wdGlvbkJ1Zik7DQo+IC0NCj4gLSAgcmV0dXJuIFN0YXR1czsNCj4gLX0NCj4g LQ0KPiAtLyoqDQo+IC0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZ2V0IGJvb3Qgb3B0aW9u IGJ5IE9wdGlvbk51bWJlci4NCj4gLQ0KPiAtICBAcGFyYW1baW5dIE51bWJlciAgICAgICAgICAg ICAgIFRoZSBPcHRpb25OdW1iZXIgb2YgYm9vdCBvcHRpb24NCj4gLSAgQHBhcmFtW291dF0gT3B0 aW9uQnVmICAgICAgICAgICBCb290TGlzdCBidWZmZXIgdG8gYWxsIGJvb3Qgb3B0aW9ucyByZXR1 cm5lZA0KPiAtDQo+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlcmUgaXMg bm8gZXJyb3Igd2hlbiBnZXR0aW5nIGJvb3Qgb3B0aW9uDQo+IC0NCj4gLSoqLw0KPiAtRUZJX1NU QVRVUw0KPiAtR2V0Qm9vdE9wdGlvbkJ5TnVtYmVyKA0KPiAtICBJTiAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICBOdW1iZXIsDQo+IC0gIE9VVCBFRklfQk9PVF9NQU5BR0VSX0xPQURfT1BU SU9OICoqT3B0aW9uQnVmDQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiAtICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICBCb290 T3B0aW9uTmFtZVsyMF07DQo+IC0gIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gIEJvb3RP cHRpb247DQo+IC0NCj4gLSAgVW5pY29kZVNQcmludCAoQm9vdE9wdGlvbk5hbWUsIHNpemVvZiAo Qm9vdE9wdGlvbk5hbWUpLCBMIkJvb3QlMDR4IiwNCj4gTnVtYmVyKTsNCj4gLSAgWmVyb01lbSAo JkJvb3RPcHRpb24sIHNpemVvZiAoRUZJX0JPT1RfTUFOQUdFUl9MT0FEX09QVElPTikpOw0KPiAt ICBTdGF0dXMgPSBFZmlCb290TWFuYWdlclZhcmlhYmxlVG9Mb2FkT3B0aW9uIChCb290T3B0aW9u TmFtZSwNCj4gJkJvb3RPcHRpb24pOw0KPiAtDQo+IC0gIGlmICghRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+IC0gICAgKk9wdGlvbkJ1ZiA9IEFsbG9jYXRlUG9vbCAoc2l6ZW9mDQo+IChFRklfQk9P VF9NQU5BR0VSX0xPQURfT1BUSU9OKSk7DQo+IC0gICAgQ29weU1lbSAoKk9wdGlvbkJ1ZiwgJkJv b3RPcHRpb24sIHNpemVvZg0KPiAoRUZJX0JPT1RfTUFOQUdFUl9MT0FEX09QVElPTikpOw0KPiAt ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gLSAgfQ0KPiAtDQo+IC0gIHJldHVybiBTdGF0dXM7 DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBHZXQgQWN0aXZlIEVGSSBTeXN0ZW0gUGFydGl0aW9u IHdpdGhpbiBHUFQgYmFzZWQgb24gZGV2aWNlIHBhdGguDQo+IC0NCj4gLSAgQHBhcmFtW2luXSBE ZXZpY2VQYXRoICAgIERldmljZSBwYXRoIHRvIGZpbmQgYSBhY3RpdmUgRUZJIFN5c3RlbSBQYXJ0 aXRpb24NCj4gLSAgQHBhcmFtW291dF0gRnNIYW5kbGUgICAgIEJvb3RMaXN0IHBvaW50cyB0byBh bGwgYm9vdCBvcHRpb25zIHJldHVybmVkDQo+IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgIEFjdGl2ZSBFRkkgU3lzdGVtIFBhcnRpdGlvbiBpcyBzdWNjZXNmdWxseSBmb3VuZA0KPiAt ICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgTm8gQWN0aXZlIEVGSSBTeXN0ZW0gUGFydGl0aW9u IGlzIGZvdW5kDQo+IC0NCj4gLSoqLw0KPiAtRUZJX1NUQVRVUw0KPiAtR2V0RWZpU3lzUGFydGl0 aW9uRnJvbURldlBhdGgoDQo+IC0gIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAg ICpEZXZpY2VQYXRoLA0KPiAtICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAq RnNIYW5kbGUNCj4gLSAgKQ0KPiAtew0KPiAtICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gLSAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAqVGVtcERl dmljZVBhdGg7DQo+IC0gIEhBUkREUklWRV9ERVZJQ0VfUEFUSCAgICAgICAgICAgKkhkOw0KPiAt ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4gLSAgRUZJX1NJTVBM RV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAqRnM7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gQ2hlY2sg aWYgdGhlIGRldmljZSBwYXRoIGNvbnRhaW5zIEdQVCBub2RlDQo+IC0gIC8vDQo+IC0gIFRlbXBE ZXZpY2VQYXRoID0gRGV2aWNlUGF0aDsNCj4gLSAgd2hpbGUgKCFJc0RldmljZVBhdGhFbmQgKFRl bXBEZXZpY2VQYXRoKSkgew0KPiAtICAgIGlmICgoRGV2aWNlUGF0aFR5cGUgKFRlbXBEZXZpY2VQ YXRoKSA9PSBNRURJQV9ERVZJQ0VfUEFUSCkgJiYNCj4gLSAgICAgICAoRGV2aWNlUGF0aFN1YlR5 cGUgKFRlbXBEZXZpY2VQYXRoKSA9PSBNRURJQV9IQVJERFJJVkVfRFApKSB7DQo+IC0gICAgICBI ZCA9IChIQVJERFJJVkVfREVWSUNFX1BBVEggKilUZW1wRGV2aWNlUGF0aDsNCj4gLSAgICAgIGlm IChIZC0+TUJSVHlwZSA9PSBNQlJfVFlQRV9FRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUikgew0K PiAtICAgICAgICBicmVhazsNCj4gLSAgICAgIH0NCj4gLSAgICB9DQo+IC0gICAgVGVtcERldmlj ZVBhdGggPSBOZXh0RGV2aWNlUGF0aE5vZGUgKFRlbXBEZXZpY2VQYXRoKTsNCj4gLSAgfQ0KPiAt DQo+IC0gIGlmICghSXNEZXZpY2VQYXRoRW5kIChUZW1wRGV2aWNlUGF0aCkpIHsNCj4gLSAgICAv Lw0KPiAtICAgIC8vIFNlYXJjaCBmb3IgRUZJIHN5c3RlbSBwYXJ0aXRpb24gcHJvdG9jb2wgb24g ZnVsbCBkZXZpY2UgcGF0aCBpbiBCb290DQo+IE9wdGlvbg0KPiAtICAgIC8vDQo+IC0gICAgU3Rh dHVzID0gZ0JTLT5Mb2NhdGVEZXZpY2VQYXRoICgmZ0VmaVBhcnRUeXBlU3lzdGVtUGFydEd1aWQs DQo+ICZEZXZpY2VQYXRoLCAmSGFuZGxlKTsNCj4gLQ0KPiAtICAgIC8vDQo+IC0gICAgLy8gU2Vh cmNoIGZvciBzaW1wbGUgZmlsZSBzeXN0ZW0gb24gdGhpcyBoYW5kbGVyDQo+IC0gICAgLy8NCj4g LSAgICBpZiAoIUVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAgICBTdGF0dXMgPSBnQlMtPkhh bmRsZVByb3RvY29sKEhhbmRsZSwNCj4gJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlk LCAoVk9JRCAqKikmRnMpOw0KPiAtICAgICAgaWYgKCFFRklfRVJST1IoU3RhdHVzKSkgew0KPiAt ICAgICAgICAqRnNIYW5kbGUgPSBIYW5kbGU7DQo+IC0gICAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gLSAgICAgIH0NCj4gLSAgICB9DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gRUZJX05P VF9GT1VORDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQg dG8gZ2V0IFNpbXBsZSBGaWxlIFN5c3RlbSBwcm90b2NvbCBvbiB0aGUgZmlyc3QgRUZJDQo+IHN5 c3RlbSBwYXJ0aXRpb24gZm91bmQgaW4NCj4gLSAgYWN0aXZlIGJvb3Qgb3B0aW9uLiBUaGUgYm9v dCBvcHRpb24gbGlzdCBpcyBkZXRlbWluZWQgaW4gb3JkZXIgYnkNCj4gLSAgICAxLiAiQm9vdE5l eHQiDQo+IC0gICAgMi4gIkJvb3RPcmRlciINCj4gLQ0KPiAtICBAcGFyYW1baW5dICAgICAgIE1h eFJldHJ5ICAgICAgICAgICBNYXggQ29ubmVjdGlvbiBSZXRyeS4gU3RhbGwgMTAwbXMgYmV0d2Vl bg0KPiBlYWNoIGNvbm5lY3Rpb24gdHJ5IHRvIGVuc3VyZQ0KPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgbGlrZSBVU0IgY2FuIGdldCBlbnVtZXJhdGVkLg0K PiAtICBAcGFyYW1baW4sIG91dF0gIExvYWRPcHRpb25OdW1iZXIgICBPbiBpbnB1dCwgc3BlY2lm eSB0aGUgYm9vdCBvcHRpb24gdG8NCj4gZ2V0IEVGSSBzeXN0ZW0gcGFydGl0aW9uLg0KPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHJldHVybiB0aGUg T3B0aW9uTnVtYmVyIG9mIHRoZSBib290IG9wdGlvbg0KPiB3aGVyZSBFRkkNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHBhcnRpdGlvbiBpcyBnb3QgZnJv bS4NCj4gLSAgQHBhcmFtW291dF0gICAgICBGc0ZzSGFuZGxlICAgICAgICAgU2ltcGxlIEZpbGUg U3lzdGVtIFByb3RvY29sIGZvdW5kIG9uIGZpcnN0DQo+IGFjdGl2ZSBFRkkgc3lzdGVtIHBhcnRp dGlvbg0KPiAtDQo+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFNpbXBsZSBGaWxlIFN5c3Rl bSBwcm90b2NvbCBmb3VuZCBmb3IgRUZJIHN5c3RlbQ0KPiBwYXJ0aXRpb24NCj4gLSAgQHJldHZh bCBFRklfTk9UX0ZPVU5EICAgTm8gU2ltcGxlIEZpbGUgU3lzdGVtIHByb3RvY29sIGZvdW5kIGZv ciBFRkkNCj4gc3lzdGVtIHBhcnRpdGlvbg0KPiAtDQo+IC0qKi8NCj4gLUVGSV9TVEFUVVMNCj4g LUdldEVmaVN5c1BhcnRpdGlvbkZyb21BY3RpdmVCb290T3B0aW9uKA0KPiAtICBJTiBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UmV0cnksDQo+IC0gIElOIE9VVCBVSU5UMTYg ICAgICAgICAgICAgICAgICAgICAgICAqKkxvYWRPcHRpb25OdW1iZXIsDQo+IC0gIE9VVCBFRklf SEFORExFICAgICAgICAgICAgICAgICAgICAgICAqRnNIYW5kbGUNCj4gLSAgKQ0KPiAtew0KPiAt ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgRUZJX0JPT1RfTUFO QUdFUl9MT0FEX09QVElPTiAqQm9vdE9wdGlvbkJ1ZjsNCj4gLSAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICBCb290T3B0aW9uTnVtOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPiAtICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpEZXZpY2VQYXRo Ow0KPiAtICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpDdXJGdWxsUGF0aDsNCj4gLSAg RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUHJlRnVsbFBhdGg7DQo+IC0NCj4gLSAgKkZz SGFuZGxlID0gTlVMTDsNCj4gLQ0KPiAtICBpZiAoKkxvYWRPcHRpb25OdW1iZXIgIT0gTlVMTCkg ew0KPiAtICAgIEJvb3RPcHRpb25OdW0gPSAxOw0KPiAtICAgIFN0YXR1cyA9IEdldEJvb3RPcHRp b25CeU51bWJlcigqKkxvYWRPcHRpb25OdW1iZXIsDQo+ICZCb290T3B0aW9uQnVmKTsNCj4gLSAg ICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gLSAgICAgIERFQlVHICgoREVCVUdfRVJST1Is ICJHZXRCb290T3B0aW9uQnlJbmRleCBGYWlsZWQgJXghIE5vDQo+IEJvb3RPcHRpb24gYXZhaWxh YmxlIGZvciBjb25uZWN0aW9uXG4iLCBTdGF0dXMpKTsNCj4gLSAgICAgIHJldHVybiBTdGF0dXM7 DQo+IC0gICAgfQ0KPiAtICB9IGVsc2Ugew0KPiAtICAgIFN0YXR1cyA9IEdldEJvb3RPcHRpb25J bk9yZGVyKCZCb290T3B0aW9uQnVmLCAmQm9vdE9wdGlvbk51bSk7DQo+IC0gICAgaWYgKEVGSV9F UlJPUihTdGF0dXMpKSB7DQo+IC0gICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiR2V0Qm9vdE9w dGlvbkluT3JkZXIgRmFpbGVkICV4ISBObw0KPiBCb290T3B0aW9uIGF2YWlsYWJsZSBmb3IgY29u bmVjdGlvblxuIiwgU3RhdHVzKSk7DQo+IC0gICAgICByZXR1cm4gU3RhdHVzOw0KPiAtICAgIH0N Cj4gLSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIFNlYXJjaCBCb290T3B0aW9uTGlzdCB0byBj aGVjayBpZiBpdCBpcyBhbiBhY3RpdmUgYm9vdCBvcHRpb24gd2l0aCBFRkkNCj4gc3lzdGVtIHBh cnRpdGlvbg0KPiAtICAvLyAgMS4gQ29ubmVjdCBkZXZpY2UgcGF0aA0KPiAtICAvLyAgMi4gZXhw ZW5kIHNob3J0L3BsdWcgaW4gZGV2aWNlcGF0aA0KPiAtICAvLyAgMy4gTG9hZEltYWdlDQo+IC0g IC8vDQo+IC0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEJvb3RPcHRpb25OdW07IEluZGV4Kysp IHsNCj4gLSAgICAvLw0KPiAtICAgIC8vIEdldCB0aGUgYm9vdCBvcHRpb24gZnJvbSB0aGUgbGlu ayBsaXN0DQo+IC0gICAgLy8NCj4gLSAgICBEZXZpY2VQYXRoICA9IEJvb3RPcHRpb25CdWZbSW5k ZXhdLkZpbGVQYXRoOw0KPiAtDQo+IC0gICAgLy8NCj4gLSAgICAvLyBTa2lwIGluYWN0aXZlIG9y IGxlZ2FjeSBib290IG9wdGlvbnMNCj4gLSAgICAvLw0KPiAtICAgIGlmICgoQm9vdE9wdGlvbkJ1 ZltJbmRleF0uQXR0cmlidXRlcyAmIExPQURfT1BUSU9OX0FDVElWRSkgPT0gMCB8fA0KPiAtICAg ICAgICBEZXZpY2VQYXRoVHlwZSAoRGV2aWNlUGF0aCkgPT0gQkJTX0RFVklDRV9QQVRIKSB7DQo+ IC0gICAgICBjb250aW51ZTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBERUJVR19DT0RFICgNCj4g LSAgICAgIENIQVIxNiAqRGV2aWNlUGF0aFN0cjsNCj4gLQ0KPiAtICAgICAgRGV2aWNlUGF0aFN0 ciA9IENvbnZlcnREZXZpY2VQYXRoVG9UZXh0KERldmljZVBhdGgsIFRSVUUsIFRSVUUpOw0KPiAt ICAgICAgaWYgKERldmljZVBhdGhTdHIgIT0gTlVMTCl7DQo+IC0gICAgICAgIERFQlVHKChERUJV R19JTkZPLCAiVHJ5IEJvb3RPcHRpb24gJXNcbiIsIERldmljZVBhdGhTdHIpKTsNCj4gLSAgICAg ICAgRnJlZVBvb2woRGV2aWNlUGF0aFN0cik7DQo+IC0gICAgICB9IGVsc2Ugew0KPiAtICAgICAg ICBERUJVRygoREVCVUdfSU5GTywgIkRldmljZVBhdGhUb1N0ciBmYWlsZWRcbiIpKTsNCj4gLSAg ICAgIH0NCj4gLSAgICApOw0KPiAtDQo+IC0gICAgQ3VyRnVsbFBhdGggPSBOVUxMOw0KPiAtICAg IC8vDQo+IC0gICAgLy8gVHJ5IGV2ZXJ5IGZ1bGwgZGV2aWNlIFBhdGggZ2VuZXJhdGVkIGZyb20g Ym9vdG9wdGlvbg0KPiAtICAgIC8vDQo+IC0gICAgZG8gew0KPiAtICAgICAgUHJlRnVsbFBhdGgg PSBDdXJGdWxsUGF0aDsNCj4gLSAgICAgIEN1ckZ1bGxQYXRoID0NCj4gRWZpQm9vdE1hbmFnZXJH ZXROZXh0TG9hZE9wdGlvbkRldmljZVBhdGgoRGV2aWNlUGF0aCwgQ3VyRnVsbFBhdGgpOw0KPiAt DQo+IC0gICAgICBpZiAoUHJlRnVsbFBhdGggIT0gTlVMTCkgew0KPiAtICAgICAgICBGcmVlUG9v bCAoUHJlRnVsbFBhdGgpOw0KPiAtICAgICAgfQ0KPiAtDQo+IC0gICAgICBpZiAoQ3VyRnVsbFBh dGggPT0gTlVMTCkgew0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICAvLyBObyBBY3RpdmUgRUZJ IHN5c3RlbSBwYXJ0aXRpb24gaXMgZm91bmQgaW4gQm9vdE9wdGlvbiBkZXZpY2UgcGF0aA0KPiAt ICAgICAgICAvLw0KPiAtICAgICAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiAtICAgICAg ICBicmVhazsNCj4gLSAgICAgIH0NCj4gLQ0KPiAtICAgICAgREVCVUdfQ09ERSAoDQo+IC0gICAg ICAgIENIQVIxNiAqRGV2aWNlUGF0aFN0cjE7DQo+IC0NCj4gLSAgICAgICAgRGV2aWNlUGF0aFN0 cjEgPSBDb252ZXJ0RGV2aWNlUGF0aFRvVGV4dChDdXJGdWxsUGF0aCwgVFJVRSwgVFJVRSk7DQo+ IC0gICAgICAgIGlmIChEZXZpY2VQYXRoU3RyMSAhPSBOVUxMKXsNCj4gLSAgICAgICAgICBERUJV RygoREVCVUdfSU5GTywgIkZ1bGwgZGV2aWNlIHBhdGggJXNcbiIsIERldmljZVBhdGhTdHIxKSk7 DQo+IC0gICAgICAgICAgRnJlZVBvb2woRGV2aWNlUGF0aFN0cjEpOw0KPiAtICAgICAgICB9DQo+ IC0gICAgICApOw0KPiAtDQo+IC0gICAgICAvLw0KPiAtICAgICAgLy8gTWFrZSBzdXJlIHRoZSBi b290IG9wdGlvbiBkZXZpY2UgcGF0aCBjb25uZWN0ZWQuDQo+IC0gICAgICAvLyBPbmx5IGhhbmRs ZSBmaXJzdCBkZXZpY2UgaW4gYm9vdCBvcHRpb24uIE90aGVyIG9wdGlvbmFsIGRldmljZSBwYXRo cyBhcmUNCj4gZGVzY3JpYmVkIGFzIE9TViBzcGVjaWZpYw0KPiAtICAgICAgLy8gRnVsbERldmlj ZSBjb3VsZCBjb250YWluIGV4dHJhIGRpcmVjdG9yeSAmIGZpbGUgaW5mby4gU28gZG9uJ3QgY2hl Y2sNCj4gY29ubmVjdGlvbiBzdGF0dXMgaGVyZS4NCj4gLSAgICAgIC8vDQo+IC0gICAgICBFZmlC b290TWFuYWdlckNvbm5lY3REZXZpY2VQYXRoIChDdXJGdWxsUGF0aCwgTlVMTCk7DQo+IC0gICAg ICBTdGF0dXMgPSBHZXRFZmlTeXNQYXJ0aXRpb25Gcm9tRGV2UGF0aChDdXJGdWxsUGF0aCwgRnNI YW5kbGUpOw0KPiAtDQo+IC0gICAgICAvLw0KPiAtICAgICAgLy8gU29tZSByZWxvY2F0aW9uIGRl dmljZSBsaWtlIFVTQiBuZWVkIG1vcmUgdGltZSB0byBnZXQgZW51bWVyYXRlZA0KPiAtICAgICAg Ly8NCj4gLSAgICAgIHdoaWxlIChFRklfRVJST1IoU3RhdHVzKSAmJiBNYXhSZXRyeSA+IDApIHsN Cj4gLSAgICAgICAgRWZpQm9vdE1hbmFnZXJDb25uZWN0RGV2aWNlUGF0aChDdXJGdWxsUGF0aCwg TlVMTCk7DQo+IC0NCj4gLSAgICAgICAgLy8NCj4gLSAgICAgICAgLy8gU2VhcmNoIGZvciBFRkkg c3lzdGVtIHBhcnRpdGlvbiBwcm90b2NvbCBvbiBmdWxsIGRldmljZSBwYXRoIGluIEJvb3QNCj4g T3B0aW9uDQo+IC0gICAgICAgIC8vDQo+IC0gICAgICAgIFN0YXR1cyA9IEdldEVmaVN5c1BhcnRp dGlvbkZyb21EZXZQYXRoKEN1ckZ1bGxQYXRoLCBGc0hhbmRsZSk7DQo+IC0gICAgICAgIGlmICgh RUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gLSAgICAgICAgICBicmVhazsNCj4gLSAgICAgICAgfQ0K PiAtICAgICAgICBERUJVRygoREVCVUdfRVJST1IsICJHZXRFZmlTeXNQYXJ0aXRpb25Gcm9tRGV2 UGF0aCBMb29wICV4XG4iLA0KPiBTdGF0dXMpKTsNCj4gLSAgICAgICAgLy8NCj4gLSAgICAgICAg Ly8gU3RhbGwgMTAwbXMgaWYgY29ubmVjdGlvbiBmYWlsZWQgdG8gZW5zdXJlIFVTQiBzdGFjayBp cyByZWFkeQ0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICBnQlMtPlN0YWxsKDEwMDAwMCk7DQo+ IC0gICAgICAgIE1heFJldHJ5IC0tOw0KPiAtICAgICAgfQ0KPiAtICAgIH0gd2hpbGUoRUZJX0VS Uk9SKFN0YXR1cykpOw0KPiAtDQo+IC0gICAgLy8NCj4gLSAgICAvLyBGaW5kIGEgcXVhbGlmaWVk IFNpbXBsZSBGaWxlIFN5c3RlbQ0KPiAtICAgIC8vDQo+IC0gICAgaWYgKCFFRklfRVJST1IoU3Rh dHVzKSkgew0KPiAtICAgICAgYnJlYWs7DQo+IC0gICAgfQ0KPiAtDQo+IC0gIH0NCj4gLQ0KPiAt ICAvLw0KPiAtICAvLyBSZXR1cm4gdGhlIE9wdGlvbk51bWJlciBvZiB0aGUgYm9vdCBvcHRpb24g d2hlcmUgRUZJIHN5c3RlbSBwYXJ0aXRpb24NCj4gaXMgZ290IGZyb20NCj4gLSAgLy8NCj4gLSAg aWYgKCpMb2FkT3B0aW9uTnVtYmVyID09IE5VTEwpIHsNCj4gLSAgICAqTG9hZE9wdGlvbk51bWJl ciA9IEFsbG9jYXRlQ29weVBvb2wgKHNpemVvZihVSU5UMTYpLCAoVUlOVDE2ICopDQo+ICZCb290 T3B0aW9uQnVmW0luZGV4XS5PcHRpb25OdW1iZXIpOw0KPiAtICB9DQo+IC0NCj4gLSAgLy8NCj4g LSAgLy8gTm8gcXVhbGlmaWVkIEVGSSBzeXN0ZW0gcGFydGl0aW9uIGZvdW5kDQo+IC0gIC8vDQo+ IC0gIGlmICgqRnNIYW5kbGUgPT0gTlVMTCkgew0KPiAtICAgIFN0YXR1cyA9IEVGSV9OT1RfRk9V TkQ7DQo+IC0gIH0NCj4gLQ0KPiAtICBERUJVR19DT0RFICgNCj4gLSAgICBDSEFSMTYgKkRldmlj ZVBhdGhTdHIyOw0KPiAtICAgIGlmICgqRnNIYW5kbGUgIT0gTlVMTCkgew0KPiAtICAgICAgRGV2 aWNlUGF0aFN0cjIgPSBDb252ZXJ0RGV2aWNlUGF0aFRvVGV4dChDdXJGdWxsUGF0aCwgVFJVRSwg VFJVRSk7DQo+IC0gICAgICBpZiAoRGV2aWNlUGF0aFN0cjIgIT0gTlVMTCl7DQo+IC0gICAgICAg IERFQlVHKChERUJVR19JTkZPLCAiRm91bmQgQWN0aXZlIEVGSSBTeXN0ZW0gUGFydGlvbiBvbiAl c1xuIiwNCj4gRGV2aWNlUGF0aFN0cjIpKTsNCj4gLSAgICAgICAgRnJlZVBvb2woRGV2aWNlUGF0 aFN0cjIpOw0KPiAtICAgICAgfQ0KPiAtICAgIH0gZWxzZSB7DQo+IC0gICAgICBERUJVRygoREVC VUdfSU5GTywgIkZhaWxlZCB0byBmb3VuZCBBY3RpdmUgRUZJIFN5c3RlbSBQYXJ0aW9uXG4iKSk7 DQo+IC0gICAgfQ0KPiAtICApOw0KPiAtDQo+IC0gIGlmIChDdXJGdWxsUGF0aCAhPSBOVUxMKSB7 DQo+IC0gICAgRnJlZVBvb2woQ3VyRnVsbFBhdGgpOw0KPiAtICB9DQo+IC0NCj4gLSAgLy8NCj4g LSAgLy8gRnJlZSBCb290T3B0aW9uIEJ1ZmZlcg0KPiAtICAvLw0KPiAtICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBCb290T3B0aW9uTnVtOyBJbmRleCsrKSB7DQo+IC0gICAgaWYgKEJvb3RPcHRp b25CdWZbSW5kZXhdLkRlc2NyaXB0aW9uICE9IE5VTEwpIHsNCj4gLSAgICAgIEZyZWVQb29sKEJv b3RPcHRpb25CdWZbSW5kZXhdLkRlc2NyaXB0aW9uKTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBp ZiAoQm9vdE9wdGlvbkJ1ZltJbmRleF0uRmlsZVBhdGggIT0gTlVMTCkgew0KPiAtICAgICAgRnJl ZVBvb2woQm9vdE9wdGlvbkJ1ZltJbmRleF0uRmlsZVBhdGgpOw0KPiAtICAgIH0NCj4gLQ0KPiAt ICAgIGlmIChCb290T3B0aW9uQnVmW0luZGV4XS5PcHRpb25hbERhdGEgIT0gTlVMTCkgew0KPiAt ICAgICAgRnJlZVBvb2woQm9vdE9wdGlvbkJ1ZltJbmRleF0uT3B0aW9uYWxEYXRhKTsNCj4gLSAg ICB9DQo+IC0gIH0NCj4gLQ0KPiAtICBGcmVlUG9vbChCb290T3B0aW9uQnVmKTsNCj4gLQ0KPiAt ICByZXR1cm4gU3RhdHVzOw0KPiAtfQ0KPiAtDQo+IC0NCj4gLS8qKg0KPiAtICBUaGlzIHJvdXRp bmUgaXMgY2FsbGVkIHRvIGdldCBhbGwgZmlsZSBpbmZvcyB3aXRoIGluIGEgZ2l2ZW4gZGlyICYg d2l0aCBnaXZlbiBmaWxlDQo+IGF0dHJpYnV0ZSwgdGhlIGZpbGUgaW5mbyBpcyBsaXN0ZWQgaW4N Cj4gLSAgYWxwaGFiZXRpY2FsIG9yZGVyIGRlc2NyaWJlZCBpbiBVRUZJIHNwZWMuDQo+IC0NCj4g LSAgQHBhcmFtW2luXSAgRGlyICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgZmlsZSBoYW5kbGVy DQo+IC0gIEBwYXJhbVtpbl0gIEZpbGVBdHRyICAgICAgICAgICAgQXR0cmlidXRlIG9mIGZpbGUg dG8gYmUgcmVkIGZyb20gZGlyZWN0b3J5DQo+IC0gIEBwYXJhbVtvdXRdIEZpbGVJbmZvTGlzdCAg ICAgICAgRmlsZSBpbWFnZXMgaW5mbyBsaXN0IHJlZCBmcm9tIGRpcmVjdG9yeQ0KPiAtICBAcGFy YW1bb3V0XSBGaWxlTnVtICAgICAgICAgICAgIEZpbGUgaW1hZ2VzIG51bWJlciByZWQgZnJvbSBk aXJlY3RvcnkNCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIEZpbGUg RmlsZUluZm8gbGlzdCBpbiB0aGUgZ2l2ZW4NCj4gLQ0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+ IC1HZXRGaWxlSW5mb0xpc3RJbkFscGhhYmV0RnJvbURpcigNCj4gLSAgSU4gRUZJX0ZJTEVfSEFO RExFICBEaXIsDQo+IC0gIElOIFVJTlQ2NCAgICAgICAgICAgRmlsZUF0dHIsDQo+IC0gIE9VVCBM SVNUX0VOVFJZICAgICAgKkZpbGVJbmZvTGlzdCwNCj4gLSAgT1VUIFVJTlROICAgICAgICAgICAq RmlsZU51bQ0KPiAtICApDQo+IC17DQo+IC0gIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4g LSAgRklMRV9JTkZPX0VOVFJZICAgKk5ld0ZpbGVJbmZvRW50cnk7DQo+IC0gIEZJTEVfSU5GT19F TlRSWSAgICpUZW1wRmlsZUluZm9FbnRyeTsNCj4gLSAgRUZJX0ZJTEVfSU5GTyAgICAgKkZpbGVJ bmZvOw0KPiAtICBDSEFSMTYgICAgICAgICAgICAqTmV3RmlsZU5hbWU7DQo+IC0gIENIQVIxNiAg ICAgICAgICAgICpMaXN0ZWRGaWxlTmFtZTsNCj4gLSAgQ0hBUjE2ICAgICAgICAgICAgKk5ld0Zp bGVOYW1lRXh0ZW5zaW9uOw0KPiAtICBDSEFSMTYgICAgICAgICAgICAqTGlzdGVkRmlsZU5hbWVF eHRlbnNpb247DQo+IC0gIENIQVIxNiAgICAgICAgICAgICpUZW1wTmV3U3ViU3RyOw0KPiAtICBD SEFSMTYgICAgICAgICAgICAqVGVtcExpc3RlZFN1YlN0cjsNCj4gLSAgTElTVF9FTlRSWSAgICAg ICAgKkxpbms7DQo+IC0gIEJPT0xFQU4gICAgICAgICAgIE5vRmlsZTsNCj4gLSAgVUlOVE4gICAg ICAgICAgICAgRmlsZUNvdW50Ow0KPiAtICBVSU5UTiAgICAgICAgICAgICBJbmRleE5ldzsNCj4g LSAgVUlOVE4gICAgICAgICAgICAgSW5kZXhMaXN0ZWQ7DQo+IC0gIFVJTlROICAgICAgICAgICAg IE5ld1N1YlN0ckxlbjsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgTGlzdGVkU3ViU3RyTGVuOw0K PiAtICBJTlROICAgICAgICAgICAgICBTdWJTdHJDbXBSZXN1bHQ7DQo+IC0NCj4gLSAgU3RhdHVz ICAgICAgICAgICAgICAgICAgPSBFRklfU1VDQ0VTUzsNCj4gLSAgTmV3RmlsZU5hbWUgICAgICAg ICAgICAgPSBOVUxMOw0KPiAtICBMaXN0ZWRGaWxlTmFtZSAgICAgICAgICA9IE5VTEw7DQo+IC0g IE5ld0ZpbGVOYW1lRXh0ZW5zaW9uICAgID0gTlVMTDsNCj4gLSAgTGlzdGVkRmlsZU5hbWVFeHRl bnNpb24gPSBOVUxMOw0KPiAtICBUZW1wTmV3U3ViU3RyICAgICAgICAgICA9IE5VTEw7DQo+IC0g IFRlbXBMaXN0ZWRTdWJTdHIgICAgICAgID0gTlVMTDsNCj4gLSAgTm9GaWxlICAgICAgICAgICAg ICAgICAgPSBGQUxTRTsNCj4gLSAgRmlsZUNvdW50ICAgICAgICAgICAgICAgPSAwOw0KPiAtDQo+ IC0gIEluaXRpYWxpemVMaXN0SGVhZChGaWxlSW5mb0xpc3QpOw0KPiAtDQo+IC0gIFRlbXBOZXdT dWJTdHIgICAgICAgICAgID0gKENIQVIxNiAqKQ0KPiBBbGxvY2F0ZVplcm9Qb29sKE1BWF9GSUxF X05BTUVfU0laRSk7DQo+IC0gIFRlbXBMaXN0ZWRTdWJTdHIgICAgICAgID0gKENIQVIxNiAqKQ0K PiBBbGxvY2F0ZVplcm9Qb29sKE1BWF9GSUxFX05BTUVfU0laRSk7DQo+IC0NCj4gLSAgaWYgKFRl bXBOZXdTdWJTdHIgPT0gTlVMTCB8fCBUZW1wTGlzdGVkU3ViU3RyID09IE5VTEwgKSB7DQo+IC0g ICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IC0gICAgZ290byBFWElUOw0KPiAt ICB9DQo+IC0NCj4gLSAgZm9yICggU3RhdHVzID0gRmlsZUhhbmRsZUZpbmRGaXJzdEZpbGUoRGly LCAmRmlsZUluZm8pDQo+IC0gICAgICA7ICFFRklfRVJST1IoU3RhdHVzKSAmJiAhTm9GaWxlDQo+ IC0gICAgICA7IFN0YXR1cyA9IEZpbGVIYW5kbGVGaW5kTmV4dEZpbGUoRGlyLCBGaWxlSW5mbywg Jk5vRmlsZSkNCj4gLSAgICAgKXsNCj4gLQ0KPiAtICAgIC8vDQo+IC0gICAgLy8gU2tpcCBmaWxl IHdpdGggbWlzbWF0Y2hpbmcgRmlsZSBhdHRyaWJ1dGUNCj4gLSAgICAvLw0KPiAtICAgIGlmICgo RmlsZUluZm8tPkF0dHJpYnV0ZSAmIChGaWxlQXR0cikpID09IDApIHsNCj4gLSAgICAgIGNvbnRp bnVlOw0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIE5ld0ZpbGVJbmZvRW50cnkgPSBOVUxMOw0KPiAt ICAgIE5ld0ZpbGVJbmZvRW50cnkgPQ0KPiAoRklMRV9JTkZPX0VOVFJZKilBbGxvY2F0ZVplcm9Q b29sKHNpemVvZihGSUxFX0lORk9fRU5UUlkpKTsNCj4gLSAgICBpZiAoTmV3RmlsZUluZm9FbnRy eSA9PSBOVUxMKSB7DQo+IC0gICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g LSAgICAgIGdvdG8gRVhJVDsNCj4gLSAgICB9DQo+IC0gICAgTmV3RmlsZUluZm9FbnRyeS0+U2ln bmF0dXJlID0gRklMRV9JTkZPX1NJR05BVFVSRTsNCj4gLSAgICBOZXdGaWxlSW5mb0VudHJ5LT5G aWxlSW5mbyAgPSBBbGxvY2F0ZUNvcHlQb29sKChVSU5UTikgRmlsZUluZm8tPlNpemUsDQo+IEZp bGVJbmZvKTsNCj4gLSAgICBpZiAoTmV3RmlsZUluZm9FbnRyeS0+RmlsZUluZm8gPT0gTlVMTCkg ew0KPiAtICAgICAgRnJlZVBvb2woTmV3RmlsZUluZm9FbnRyeSk7DQo+IC0gICAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gLSAgICAgIGdvdG8gRVhJVDsNCj4gLSAgICB9DQo+ IC0NCj4gLSAgICBOZXdGaWxlSW5mb0VudHJ5LT5GaWxlTmFtZUZpcnN0UGFydCAgPSAoQ0hBUjE2 ICopDQo+IEFsbG9jYXRlWmVyb1Bvb2woTUFYX0ZJTEVfTkFNRV9TSVpFKTsNCj4gLSAgICBpZiAo TmV3RmlsZUluZm9FbnRyeS0+RmlsZU5hbWVGaXJzdFBhcnQgPT0gTlVMTCkgew0KPiAtICAgICAg RnJlZVBvb2woTmV3RmlsZUluZm9FbnRyeS0+RmlsZUluZm8pOw0KPiAtICAgICAgRnJlZVBvb2wo TmV3RmlsZUluZm9FbnRyeSk7DQo+IC0gICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4gLSAgICAgIGdvdG8gRVhJVDsNCj4gLSAgICB9DQo+IC0gICAgTmV3RmlsZUluZm9FbnRy eS0+RmlsZU5hbWVTZWNvbmRQYXJ0ID0gKENIQVIxNiAqKQ0KPiBBbGxvY2F0ZVplcm9Qb29sKE1B WF9GSUxFX05BTUVfU0laRSk7DQo+IC0gICAgaWYgKE5ld0ZpbGVJbmZvRW50cnktPkZpbGVOYW1l U2Vjb25kUGFydCA9PSBOVUxMKSB7DQo+IC0gICAgICBGcmVlUG9vbChOZXdGaWxlSW5mb0VudHJ5 LT5GaWxlSW5mbyk7DQo+IC0gICAgICBGcmVlUG9vbChOZXdGaWxlSW5mb0VudHJ5LT5GaWxlTmFt ZUZpcnN0UGFydCk7DQo+IC0gICAgICBGcmVlUG9vbChOZXdGaWxlSW5mb0VudHJ5KTsNCj4gLSAg ICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiAtICAgICAgZ290byBFWElUOw0K PiAtICAgIH0NCj4gLQ0KPiAtICAgIC8vDQo+IC0gICAgLy8gU3BsaXR0ZXIgdGhlIHdob2xlIE5l dyBmaWxlIG5hbWUgaW50byAyIHBhcnRzIGJldHdlZW4gdGhlIGxhc3QgcGVyaW9kDQo+IEwnLicg aW50byBOZXdGaWxlTmFtZSBOZXdGaWxlRXh0ZW5zaW9uDQo+IC0gICAgLy8gSWYgbm8gcGVyaW9k IGluIHRoZSB3aG9sZSBmaWxlIG5hbWUuIE5ld0ZpbGVFeHRlbnNpb24gaXMgc2V0IHRvIEwnXDAn DQo+IC0gICAgLy8NCj4gLSAgICBOZXdGaWxlTmFtZSAgICAgICAgICA9IE5ld0ZpbGVJbmZvRW50 cnktPkZpbGVOYW1lRmlyc3RQYXJ0Ow0KPiAtICAgIE5ld0ZpbGVOYW1lRXh0ZW5zaW9uID0gTmV3 RmlsZUluZm9FbnRyeS0+RmlsZU5hbWVTZWNvbmRQYXJ0Ow0KPiAtICAgIFNwbGl0RmlsZU5hbWVF eHRlbnNpb24oRmlsZUluZm8tPkZpbGVOYW1lLCBOZXdGaWxlTmFtZSwNCj4gTmV3RmlsZU5hbWVF eHRlbnNpb24pOw0KPiAtICAgIFVwcGVyQ2FzZVN0cmluZyhOZXdGaWxlTmFtZSk7DQo+IC0gICAg VXBwZXJDYXNlU3RyaW5nKE5ld0ZpbGVOYW1lRXh0ZW5zaW9uKTsNCj4gLQ0KPiAtICAgIC8vDQo+ IC0gICAgLy8gSW5zZXJ0IGNhcHN1bGUgZmlsZSBpbiBhbHBoYWJldGljYWwgb3JkZXJlZCBsaXN0 DQo+IC0gICAgLy8NCj4gLSAgICBmb3IgKExpbmsgPSBGaWxlSW5mb0xpc3QtPkZvcndhcmRMaW5r OyBMaW5rICE9IEZpbGVJbmZvTGlzdDsgTGluayA9IExpbmstDQo+ID5Gb3J3YXJkTGluaykgew0K PiAtICAgICAgLy8NCj4gLSAgICAgIC8vIEdldCB0aGUgRmlsZUluZm8gZnJvbSB0aGUgbGluayBs aXN0DQo+IC0gICAgICAvLw0KPiAtICAgICAgVGVtcEZpbGVJbmZvRW50cnkgPSBDUiAoTGluaywg RklMRV9JTkZPX0VOVFJZLCBMaW5rLA0KPiBGSUxFX0lORk9fU0lHTkFUVVJFKTsNCj4gLSAgICAg IExpc3RlZEZpbGVOYW1lICAgICAgICAgID0gVGVtcEZpbGVJbmZvRW50cnktPkZpbGVOYW1lRmly c3RQYXJ0Ow0KPiAtICAgICAgTGlzdGVkRmlsZU5hbWVFeHRlbnNpb24gPSBUZW1wRmlsZUluZm9F bnRyeS0+RmlsZU5hbWVTZWNvbmRQYXJ0Ow0KPiAtDQo+IC0gICAgICAvLw0KPiAtICAgICAgLy8g Rm9sbG93IHJ1bGUgaW4gVUVGSSBzcGVjIDguNS41IHRvIGNvbXBhcmUgZmlsZSBuYW1lDQo+IC0g ICAgICAvLw0KPiAtICAgICAgSW5kZXhMaXN0ZWQgPSAwOw0KPiAtICAgICAgSW5kZXhOZXcgICAg PSAwOw0KPiAtICAgICAgd2hpbGUgKFRSVUUpew0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICAv LyBGaXJzdCBjb21wYXJlIGVhY2ggc3Vic3RyaW5ncyBpbiBOZXdGaWxlTmFtZSAmIExpc3RlZEZp bGVOYW1lDQo+IGJldHdlZW4gcGVyaW9kcw0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICBHZXRT dWJTdHJpbmdCZWZvcmVQZXJpb2QoJk5ld0ZpbGVOYW1lW0luZGV4TmV3XSwNCj4gVGVtcE5ld1N1 YlN0ciwgJk5ld1N1YlN0ckxlbik7DQo+IC0gICAgICAgIEdldFN1YlN0cmluZ0JlZm9yZVBlcmlv ZCgmTGlzdGVkRmlsZU5hbWVbSW5kZXhMaXN0ZWRdLA0KPiBUZW1wTGlzdGVkU3ViU3RyLCAmTGlz dGVkU3ViU3RyTGVuKTsNCj4gLSAgICAgICAgaWYgKE5ld1N1YlN0ckxlbiA+IExpc3RlZFN1YlN0 ckxlbikgew0KPiAtICAgICAgICAgIC8vDQo+IC0gICAgICAgICAgLy8gU3Vic3RyIGluIE5ld0Zp bGVOYW1lIGlzIGxvbmdlci4gUGFkIHRhaWwgd2l0aCBTUEFDRQ0KPiAtICAgICAgICAgIC8vDQo+ IC0gICAgICAgICAgUGFkU3RySW5UYWlsKFRlbXBMaXN0ZWRTdWJTdHIsIE5ld1N1YlN0ckxlbiAt IExpc3RlZFN1YlN0ckxlbiwgTCcgJyk7DQo+IC0gICAgICAgIH0gZWxzZSBpZiAoTmV3U3ViU3Ry TGVuIDwgTGlzdGVkU3ViU3RyTGVuKXsNCj4gLSAgICAgICAgICAvLw0KPiAtICAgICAgICAgIC8v IFN1YnN0ciBpbiBMaXN0ZWRGaWxlTmFtZSBpcyBsb25nZXIuIFBhZCB0YWlsIHdpdGggU1BBQ0UN Cj4gLSAgICAgICAgICAvLw0KPiAtICAgICAgICAgIFBhZFN0ckluVGFpbChUZW1wTmV3U3ViU3Ry LCBMaXN0ZWRTdWJTdHJMZW4gLSBOZXdTdWJTdHJMZW4sIEwnICcpOw0KPiAtICAgICAgICB9DQo+ IC0NCj4gLSAgICAgICAgU3ViU3RyQ21wUmVzdWx0ID0gU3RybkNtcChUZW1wTmV3U3ViU3RyLCBU ZW1wTGlzdGVkU3ViU3RyLA0KPiBNQVhfRklMRV9OQU1FX0xFTik7DQo+IC0gICAgICAgIGlmIChT dWJTdHJDbXBSZXN1bHQgIT0gMCkgew0KPiAtICAgICAgICAgIGJyZWFrOw0KPiAtICAgICAgICB9 DQo+IC0NCj4gLSAgICAgICAgLy8NCj4gLSAgICAgICAgLy8gTW92ZSB0byBza2lwIHRoaXMgc3Vi c3RyaW5nDQo+IC0gICAgICAgIC8vDQo+IC0gICAgICAgIEluZGV4TmV3ICAgICs9IE5ld1N1YlN0 ckxlbjsNCj4gLSAgICAgICAgSW5kZXhMaXN0ZWQgKz0gTGlzdGVkU3ViU3RyTGVuOw0KPiAtICAg ICAgICAvLw0KPiAtICAgICAgICAvLyBSZWFjaCBGaWxlIEZpcnN0IE5hbWUgZW5kDQo+IC0gICAg ICAgIC8vDQo+IC0gICAgICAgIGlmIChOZXdGaWxlTmFtZVtJbmRleE5ld10gPT0gTCdcMCcgfHwg TGlzdGVkRmlsZU5hbWVbSW5kZXhMaXN0ZWRdID09DQo+IEwnXDAnKSB7DQo+IC0gICAgICAgICAg YnJlYWs7DQo+IC0gICAgICAgIH0NCj4gLQ0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICAvLyBT a2lwIHRoZSBwZXJpb2QgTCcuJw0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICBJbmRleE5ldysr Ow0KPiAtICAgICAgICBJbmRleExpc3RlZCsrOw0KPiAtICAgICAgfQ0KPiAtDQo+IC0gICAgICBp ZiAoU3ViU3RyQ21wUmVzdWx0IDwgMCkgew0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICAvLyBO ZXdGaWxlTmFtZSBpcyBzbWFsbGVyLiBGaW5kIHRoZSByaWdodCBwbGFjZSB0byBpbnNlcnQgTmV3 IGZpbGUNCj4gLSAgICAgICAgLy8NCj4gLSAgICAgICAgYnJlYWs7DQo+IC0gICAgICB9IGVsc2Ug aWYgKFN1YlN0ckNtcFJlc3VsdCA9PSAwKSB7DQo+IC0gICAgICAgIC8vDQo+IC0gICAgICAgIC8v IDIgY2FzZXMgd2hvbGUgTmV3RmlsZU5hbWUgaXMgc21hbGxlciB0aGFuIExpc3RlZEZpbGVOYW1l DQo+IC0gICAgICAgIC8vICAgMS4gaWYgTmV3RmlsZU5hbWUgPT0gTGlzdGVkRmlsZU5hbWUuIENv bnRpbnVlIHRvIGNvbXBhcmUNCj4gRmlsZU5hbWVFeHRlbnNpb24NCj4gLSAgICAgICAgLy8gICAy LiBpZiBOZXdGaWxlTmFtZSBpcyBzaG9ydGVyIHRoYW4gTGlzdGVkRmlsZU5hbWUNCj4gLSAgICAg ICAgLy8NCj4gLSAgICAgICAgaWYgKE5ld0ZpbGVOYW1lW0luZGV4TmV3XSA9PSBMJ1wwJykgew0K PiAtICAgICAgICAgIGlmIChMaXN0ZWRGaWxlTmFtZVtJbmRleExpc3RlZF0gIT0gTCdcMCcgfHwN Cj4gKFN0cm5DbXAoTmV3RmlsZU5hbWVFeHRlbnNpb24sIExpc3RlZEZpbGVOYW1lRXh0ZW5zaW9u LA0KPiBNQVhfRklMRV9OQU1FX0xFTikgPCAwKSkgew0KPiAtICAgICAgICAgICAgYnJlYWs7DQo+ IC0gICAgICAgICAgfQ0KPiAtICAgICAgICB9DQo+IC0gICAgICB9DQo+IC0NCj4gLSAgICAgIC8v DQo+IC0gICAgICAvLyBPdGhlciBjYXNlLCBMaXN0ZWRGaWxlTmFtZSBpcyBzbWFsbGVyLiBDb250 aW51ZSB0byBjb21wYXJlIHRoZSBuZXh0DQo+IGZpbGUgaW4gdGhlIGxpc3QNCj4gLSAgICAgIC8v DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgLy8NCj4gLSAgICAvLyBJZiBGaW5kIGFuIGVudHJ5IGlu IHRoZSBsaXN0IHdob3NlIG5hbWUgaXMgYmlnZ2VyIHRoYW4gbmV3IEZpbGVJbmZvIGluDQo+IGFs cGhhYmV0IG9yZGVyDQo+IC0gICAgLy8gICAgSW5zZXJ0IGl0IGJlZm9yZSB0aGlzIGVudHJ5DQo+ IC0gICAgLy8gZWxzZQ0KPiAtICAgIC8vICAgIEluc2VydCBhdCB0aGUgdGFpbCBvZiB0aGlzIGxp c3QgKExpbmsgPSBGaWxlSW5mb0xpc3QpDQo+IC0gICAgLy8NCj4gLSAgICBJbnNlcnRUYWlsTGlz dChMaW5rLCAmTmV3RmlsZUluZm9FbnRyeS0+TGluayk7DQo+IC0NCj4gLSAgICBGaWxlQ291bnQr KzsNCj4gLSAgfQ0KPiAtDQo+IC0gICpGaWxlTnVtID0gRmlsZUNvdW50Ow0KPiAtDQo+IC1FWElU Og0KPiAtDQo+IC0gIGlmIChUZW1wTmV3U3ViU3RyICE9IE5VTEwpIHsNCj4gLSAgICBGcmVlUG9v bChUZW1wTmV3U3ViU3RyKTsNCj4gLSAgfQ0KPiAtDQo+IC0gIGlmIChUZW1wTGlzdGVkU3ViU3Ry ICE9IE5VTEwpIHsNCj4gLSAgICBGcmVlUG9vbChUZW1wTGlzdGVkU3ViU3RyKTsNCj4gLSAgfQ0K PiAtDQo+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiAtICAgIHdoaWxlKCFJc0xpc3RF bXB0eShGaWxlSW5mb0xpc3QpKSB7DQo+IC0gICAgICBMaW5rID0gRmlsZUluZm9MaXN0LT5Gb3J3 YXJkTGluazsNCj4gLSAgICAgIFJlbW92ZUVudHJ5TGlzdChMaW5rKTsNCj4gLQ0KPiAtICAgICAg VGVtcEZpbGVJbmZvRW50cnkgPSBDUiAoTGluaywgRklMRV9JTkZPX0VOVFJZLCBMaW5rLA0KPiBG SUxFX0lORk9fU0lHTkFUVVJFKTsNCj4gLQ0KPiAtICAgICAgRnJlZVBvb2woVGVtcEZpbGVJbmZv RW50cnktPkZpbGVJbmZvKTsNCj4gLSAgICAgIEZyZWVQb29sKFRlbXBGaWxlSW5mb0VudHJ5LT5G aWxlTmFtZUZpcnN0UGFydCk7DQo+IC0gICAgICBGcmVlUG9vbChUZW1wRmlsZUluZm9FbnRyeS0+ RmlsZU5hbWVTZWNvbmRQYXJ0KTsNCj4gLSAgICAgIEZyZWVQb29sKFRlbXBGaWxlSW5mb0VudHJ5 KTsNCj4gLSAgICB9DQo+IC0gICAgKkZpbGVOdW0gPSAwOw0KPiAtICB9DQo+IC0NCj4gLSAgcmV0 dXJuIFN0YXR1czsNCj4gLX0NCj4gLQ0KPiAtDQo+IC0vKioNCj4gLSAgVGhpcyByb3V0aW5lIGlz IGNhbGxlZCB0byBnZXQgYWxsIHF1YWxpZmllZCBpbWFnZSBmcm9tIGZpbGUgZnJvbSBhbiBnaXZl bg0KPiBkaXJlY3RvcnkNCj4gLSAgaW4gYWxwaGFiZXRpYyBvcmRlci4gQWxsIHRoZSBmaWxlIGlt YWdlIGlzIGNvcGllZCB0byBhbGxvY2F0ZWQgYm9vdHRpbWUNCj4gbWVtb3J5Lg0KPiAtICBDYWxs ZXIgc2hvdWxkIGZyZWUgdGhlc2UgbWVtb3J5DQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgRGlyICAg ICAgICAgICAgRGlyZWN0b3J5IGZpbGUgaGFuZGxlcg0KPiAtICBAcGFyYW1baW5dICBGaWxlQXR0 ciAgICAgICBBdHRyaWJ1dGUgb2YgZmlsZSB0byBiZSByZWQgZnJvbSBkaXJlY3RvcnkNCj4gLSAg QHBhcmFtW291dF0gRmlsZVB0ciAgICAgICAgRmlsZSBpbWFnZXMgSW5mbyBidWZmZXIgcmVkIGZy b20gZGlyZWN0b3J5DQo+IC0gIEBwYXJhbVtvdXRdIEZpbGVOdW0gICAgICAgIEZpbGUgaW1hZ2Vz IG51bWJlciByZWQgZnJvbSBkaXJlY3RvcnkNCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNT ICBTdWNjZWVkIHRvIGdldCBhbGwgY2Fwc3VsZXMgaW4gYWxwaGFiZXRpYyBvcmRlci4NCj4gLQ0K PiAtKiovDQo+IC1FRklfU1RBVFVTDQo+IC1HZXRGaWxlSW1hZ2VJbkFscGhhYmV0RnJvbURpcigN Cj4gLSAgSU4gRUZJX0ZJTEVfSEFORExFICAgRGlyLA0KPiAtICBJTiBVSU5UNjQgICAgICAgICAg ICBGaWxlQXR0ciwNCj4gLSAgT1VUIElNQUdFX0lORk8gICAgICAgKipGaWxlUHRyLA0KPiAtICBP VVQgVUlOVE4gICAgICAgICAgICAqRmlsZU51bQ0KPiAtICApDQo+IC17DQo+IC0gIEVGSV9TVEFU VVMgICAgICAgICAgICBTdGF0dXM7DQo+IC0gIExJU1RfRU5UUlkgICAgICAgICAgICAqTGluazsN Cj4gLSAgRUZJX0ZJTEVfSEFORExFICAgICAgIEZpbGVIYW5kbGU7DQo+IC0gIEZJTEVfSU5GT19F TlRSWSAgICAgICAqRmlsZUluZm9FbnRyeTsNCj4gLSAgRUZJX0ZJTEVfSU5GTyAgICAgICAgICpG aWxlSW5mbzsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgIEZpbGVDb3VudDsNCj4gLSAgSU1B R0VfSU5GTyAgICAgICAgICAgICpUZW1wRmlsZVB0ckJ1ZjsNCj4gLSAgVUlOVE4gICAgICAgICAg ICAgICAgIFNpemU7DQo+IC0gIExJU1RfRU5UUlkgICAgICAgICAgICBGaWxlSW5mb0xpc3Q7DQo+ IC0NCj4gLSAgRmlsZUhhbmRsZSAgICAgICA9IE5VTEw7DQo+IC0gIEZpbGVDb3VudCAgICAgICAg PSAwOw0KPiAtICBUZW1wRmlsZVB0ckJ1ZiAgID0gTlVMTDsNCj4gLSAgKkZpbGVQdHIgICAgICAg ICA9IE5VTEw7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gR2V0IGZpbGUgbGlzdCBpbiBEaXIgaW4g YWxwaGFiZXRpY2FsIG9yZGVyDQo+IC0gIC8vDQo+IC0gIFN0YXR1cyA9IEdldEZpbGVJbmZvTGlz dEluQWxwaGFiZXRGcm9tRGlyKA0KPiAtICAgICAgICAgICAgIERpciwNCj4gLSAgICAgICAgICAg ICBGaWxlQXR0ciwNCj4gLSAgICAgICAgICAgICAmRmlsZUluZm9MaXN0LA0KPiAtICAgICAgICAg ICAgICZGaWxlQ291bnQNCj4gLSAgICAgICAgICAgICApOw0KPiAtICBpZiAoRUZJX0VSUk9SKFN0 YXR1cykpIHsNCj4gLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiR2V0RmlsZUluZm9MaXN0SW5B bHBoYWJldEZyb21EaXIgRmFpbGVkIVxuIikpOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0K PiAtDQo+IC0gIGlmIChGaWxlQ291bnQgPT0gMCkgew0KPiAtICAgIERFQlVHICgoREVCVUdfRVJS T1IsICJObyBmaWxlIGZvdW5kIGluIERpciFcbiIpKTsNCj4gLSAgICBTdGF0dXMgPSBFRklfTk9U X0ZPVU5EOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0KPiAtDQo+IC0gIFRlbXBGaWxlUHRy QnVmID0gKElNQUdFX0lORk8gKilBbGxvY2F0ZVplcm9Qb29sKHNpemVvZihJTUFHRV9JTkZPKQ0K PiAqIEZpbGVDb3VudCk7DQo+IC0gIGlmIChUZW1wRmlsZVB0ckJ1ZiA9PSBOVUxMKSB7DQo+IC0g ICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IC0gICAgZ290byBFWElUOw0KPiAt ICB9DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gUmVhZCBhbGwgZmlsZXMgZnJvbSBGaWxlSW5mb0xp c3QgdG8gQlMgbWVtb3J5DQo+IC0gIC8vDQo+IC0gIEZpbGVDb3VudCA9IDA7DQo+IC0gIGZvciAo TGluayA9IEZpbGVJbmZvTGlzdC5Gb3J3YXJkTGluazsgTGluayAhPSAmRmlsZUluZm9MaXN0OyBM aW5rID0gTGluay0NCj4gPkZvcndhcmRMaW5rKSB7DQo+IC0gICAgLy8NCj4gLSAgICAvLyBHZXQg RmlsZUluZm8gZnJvbSB0aGUgbGluayBsaXN0DQo+IC0gICAgLy8NCj4gLSAgICBGaWxlSW5mb0Vu dHJ5ID0gQ1IgKExpbmssIEZJTEVfSU5GT19FTlRSWSwgTGluaywgRklMRV9JTkZPX1NJR05BVFVS RSk7DQo+IC0gICAgRmlsZUluZm8gICAgICA9IEZpbGVJbmZvRW50cnktPkZpbGVJbmZvOw0KPiAt DQo+IC0gICAgU3RhdHVzID0gRGlyLT5PcGVuKA0KPiAtICAgICAgICAgICAgICAgICAgICBEaXIs DQo+IC0gICAgICAgICAgICAgICAgICAgICZGaWxlSGFuZGxlLA0KPiAtICAgICAgICAgICAgICAg ICAgICBGaWxlSW5mby0+RmlsZU5hbWUsDQo+IC0gICAgICAgICAgICAgICAgICAgIEVGSV9GSUxF X01PREVfUkVBRCwNCj4gLSAgICAgICAgICAgICAgICAgICAgMA0KPiAtICAgICAgICAgICAgICAg ICAgICApOw0KPiAtICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSl7DQo+IC0gICAgICBjb250aW51 ZTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBTaXplID0gKFVJTlROKUZpbGVJbmZvLT5GaWxlU2l6 ZTsNCj4gLSAgICBUZW1wRmlsZVB0ckJ1ZltGaWxlQ291bnRdLkltYWdlQWRkcmVzcyA9IEFsbG9j YXRlWmVyb1Bvb2woU2l6ZSk7DQo+IC0gICAgaWYgKFRlbXBGaWxlUHRyQnVmW0ZpbGVDb3VudF0u SW1hZ2VBZGRyZXNzID09IE5VTEwpIHsNCj4gLSAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIkZh aWwgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjYXBzdWxlLiBTdG9wDQo+IHByb2Nlc3NpbmcgdGhl IHJlc3QuXG4iKSk7DQo+IC0gICAgICBicmVhazsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBTdGF0 dXMgPSBGaWxlSGFuZGxlLT5SZWFkKA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls ZUhhbmRsZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZTaXplLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgVGVtcEZpbGVQdHJCdWZbRmlsZUNvdW50XS5JbWFnZUFkZHJl c3MNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+IC0NCj4gLSAgICBGaWxlSGFu ZGxlLT5DbG9zZShGaWxlSGFuZGxlKTsNCj4gLQ0KPiAtICAgIC8vDQo+IC0gICAgLy8gU2tpcCBy ZWFkIGVycm9yIGZpbGUNCj4gLSAgICAvLw0KPiAtICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSB8 fCBTaXplICE9IChVSU5UTilGaWxlSW5mby0+RmlsZVNpemUpIHsNCj4gLSAgICAgIC8vDQo+IC0g ICAgICAvLyBSZW1vdmUgdGhpcyBlcnJvciBmaWxlIGluZm8gYWNjb3JkaW5nbHkNCj4gLSAgICAg IC8vICYgbW92ZSBMaW5rIHRvIEJhY2tMaW5rDQo+IC0gICAgICAvLw0KPiAtICAgICAgTGluayA9 IFJlbW92ZUVudHJ5TGlzdChMaW5rKTsNCj4gLSAgICAgIExpbmsgPSBMaW5rLT5CYWNrTGluazsN Cj4gLQ0KPiAtICAgICAgRnJlZVBvb2woRmlsZUluZm9FbnRyeS0+RmlsZUluZm8pOw0KPiAtICAg ICAgRnJlZVBvb2woRmlsZUluZm9FbnRyeS0+RmlsZU5hbWVGaXJzdFBhcnQpOw0KPiAtICAgICAg RnJlZVBvb2woRmlsZUluZm9FbnRyeS0+RmlsZU5hbWVTZWNvbmRQYXJ0KTsNCj4gLSAgICAgIEZy ZWVQb29sKEZpbGVJbmZvRW50cnkpOw0KPiAtDQo+IC0gICAgICBGcmVlUG9vbChUZW1wRmlsZVB0 ckJ1ZltGaWxlQ291bnRdLkltYWdlQWRkcmVzcyk7DQo+IC0gICAgICBUZW1wRmlsZVB0ckJ1ZltG aWxlQ291bnRdLkltYWdlQWRkcmVzcyA9IE5VTEw7DQo+IC0gICAgICBUZW1wRmlsZVB0ckJ1ZltG aWxlQ291bnRdLkZpbGVJbmZvICAgICA9IE5VTEw7DQo+IC0NCj4gLSAgICAgIGNvbnRpbnVlOw0K PiAtICAgIH0NCj4gLSAgICBUZW1wRmlsZVB0ckJ1ZltGaWxlQ291bnRdLkZpbGVJbmZvID0gRmls ZUluZm87DQo+IC0gICAgRmlsZUNvdW50Kys7DQo+IC0gIH0NCj4gLQ0KPiAtICBERUJVR19DT0RF ICgNCj4gLSAgICBmb3IgKExpbmsgPSBGaWxlSW5mb0xpc3QuRm9yd2FyZExpbms7IExpbmsgIT0g JkZpbGVJbmZvTGlzdDsgTGluayA9IExpbmstDQo+ID5Gb3J3YXJkTGluaykgew0KPiAtICAgICAg RmlsZUluZm9FbnRyeSA9IENSIChMaW5rLCBGSUxFX0lORk9fRU5UUlksIExpbmssIEZJTEVfSU5G T19TSUdOQVRVUkUpOw0KPiAtICAgICAgRmlsZUluZm8gICAgICA9IEZpbGVJbmZvRW50cnktPkZp bGVJbmZvOw0KPiAtICAgICAgREVCVUcoKERFQlVHX0lORk8sICJTdWNjZXNzZnVsbHkgcmVhZCBj YXBzdWxlIGZpbGUgJXMgZnJvbSBkaXNrLlxuIiwNCj4gRmlsZUluZm8tPkZpbGVOYW1lKSk7DQo+ IC0gICAgfQ0KPiAtICApOw0KPiAtDQo+IC1FWElUOg0KPiAtDQo+IC0gICpGaWxlUHRyID0gVGVt cEZpbGVQdHJCdWY7DQo+IC0gICpGaWxlTnVtID0gRmlsZUNvdW50Ow0KPiAtDQo+IC0gIC8vDQo+ IC0gIC8vIEZpbGVJbmZvIHdpbGwgYmUgZnJlZWQgYnkgQ2FsbGxlcg0KPiAtICAvLw0KPiAtICB3 aGlsZSghSXNMaXN0RW1wdHkoJkZpbGVJbmZvTGlzdCkpIHsNCj4gLSAgICBMaW5rID0gRmlsZUlu Zm9MaXN0LkZvcndhcmRMaW5rOw0KPiAtICAgIFJlbW92ZUVudHJ5TGlzdChMaW5rKTsNCj4gLQ0K PiAtICAgIEZpbGVJbmZvRW50cnkgPSBDUiAoTGluaywgRklMRV9JTkZPX0VOVFJZLCBMaW5rLCBG SUxFX0lORk9fU0lHTkFUVVJFKTsNCj4gLQ0KPiAtICAgIEZyZWVQb29sKEZpbGVJbmZvRW50cnkt PkZpbGVOYW1lRmlyc3RQYXJ0KTsNCj4gLSAgICBGcmVlUG9vbChGaWxlSW5mb0VudHJ5LT5GaWxl TmFtZVNlY29uZFBhcnQpOw0KPiAtICAgIEZyZWVQb29sKEZpbGVJbmZvRW50cnkpOw0KPiAtICB9 DQo+IC0NCj4gLSAgcmV0dXJuIFN0YXR1czsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gIFRoaXMg cm91dGluZSBpcyBjYWxsZWQgdG8gcmVtb3ZlIGFsbCBxdWFsaWZpZWQgaW1hZ2UgZnJvbSBmaWxl IGZyb20gYW4gZ2l2ZW4NCj4gZGlyZWN0b3J5Lg0KPiAtDQo+IC0gIEBwYXJhbVtpbl0gRGlyICAg ICAgICAgICAgICAgICAgRGlyZWN0b3J5IGZpbGUgaGFuZGxlcg0KPiAtICBAcGFyYW1baW5dIEZp bGVBdHRyICAgICAgICAgICAgIEF0dHJpYnV0ZSBvZiBmaWxlcyB0byBiZSBkZWxldGVkDQo+IC0N Cj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgU3VjY2VlZCB0byByZW1vdmUgYWxsIGZpbGVzIGZy b20gYW4gZ2l2ZW4gZGlyZWN0b3J5Lg0KPiAtDQo+IC0qKi8NCj4gLUVGSV9TVEFUVVMNCj4gLVJl bW92ZUZpbGVGcm9tRGlyKA0KPiAtICBJTiBFRklfRklMRV9IQU5ETEUgICBEaXIsDQo+IC0gIElO IFVJTlQ2NCAgICAgICAgICAgIEZpbGVBdHRyDQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX1NUQVRV UyAgICAgICAgU3RhdHVzOw0KPiAtICBMSVNUX0VOVFJZICAgICAgICAqTGluazsNCj4gLSAgTElT VF9FTlRSWSAgICAgICAgRmlsZUluZm9MaXN0Ow0KPiAtICBFRklfRklMRV9IQU5ETEUgICBGaWxl SGFuZGxlOw0KPiAtICBGSUxFX0lORk9fRU5UUlkgICAqRmlsZUluZm9FbnRyeTsNCj4gLSAgRUZJ X0ZJTEVfSU5GTyAgICAgKkZpbGVJbmZvOw0KPiAtICBVSU5UTiAgICAgICAgICAgICBGaWxlQ291 bnQ7DQo+IC0NCj4gLSAgRmlsZUhhbmRsZSA9IE5VTEw7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8g R2V0IGZpbGUgbGlzdCBpbiBEaXIgaW4gYWxwaGFiZXRpY2FsIG9yZGVyDQo+IC0gIC8vDQo+IC0g IFN0YXR1cyA9IEdldEZpbGVJbmZvTGlzdEluQWxwaGFiZXRGcm9tRGlyKA0KPiAtICAgICAgICAg ICAgIERpciwNCj4gLSAgICAgICAgICAgICBGaWxlQXR0ciwNCj4gLSAgICAgICAgICAgICAmRmls ZUluZm9MaXN0LA0KPiAtICAgICAgICAgICAgICZGaWxlQ291bnQNCj4gLSAgICAgICAgICAgICAp Ow0KPiAtICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gLSAgICBERUJVRyAoKERFQlVHX0VS Uk9SLCAiR2V0RmlsZUluZm9MaXN0SW5BbHBoYWJldEZyb21EaXIgRmFpbGVkIVxuIikpOw0KPiAt ICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0KPiAtDQo+IC0gIGlmIChGaWxlQ291bnQgPT0gMCkgew0K PiAtICAgIERFQlVHICgoREVCVUdfRVJST1IsICJObyBmaWxlIGZvdW5kIGluIERpciFcbiIpKTsN Cj4gLSAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4gLSAg fQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIERlbGV0ZSBhbGwgZmlsZXMgd2l0aCBnaXZlbiBhdHRy aWJ1dGUgaW4gRGlyDQo+IC0gIC8vDQo+IC0gIGZvciAoTGluayA9IEZpbGVJbmZvTGlzdC5Gb3J3 YXJkTGluazsgTGluayAhPSAmKEZpbGVJbmZvTGlzdCk7IExpbmsgPSBMaW5rLQ0KPiA+Rm9yd2Fy ZExpbmspIHsNCj4gLSAgICAvLw0KPiAtICAgIC8vIEdldCBGaWxlSW5mbyBmcm9tIHRoZSBsaW5r IGxpc3QNCj4gLSAgICAvLw0KPiAtICAgIEZpbGVJbmZvRW50cnkgPSBDUiAoTGluaywgRklMRV9J TkZPX0VOVFJZLCBMaW5rLCBGSUxFX0lORk9fU0lHTkFUVVJFKTsNCj4gLSAgICBGaWxlSW5mbyAg ICAgID0gRmlsZUluZm9FbnRyeS0+RmlsZUluZm87DQo+IC0NCj4gLSAgICBTdGF0dXMgPSBEaXIt Pk9wZW4oDQo+IC0gICAgICAgICAgICAgICAgICAgIERpciwNCj4gLSAgICAgICAgICAgICAgICAg ICAgJkZpbGVIYW5kbGUsDQo+IC0gICAgICAgICAgICAgICAgICAgIEZpbGVJbmZvLT5GaWxlTmFt ZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJTEVf TU9ERV9XUklURSwNCj4gLSAgICAgICAgICAgICAgICAgICAgMA0KPiAtICAgICAgICAgICAgICAg ICAgICApOw0KPiAtICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSl7DQo+IC0gICAgICBjb250aW51 ZTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBTdGF0dXMgPSBGaWxlSGFuZGxlLT5EZWxldGUoRmls ZUhhbmRsZSk7DQo+IC0gIH0NCj4gLQ0KPiAtRVhJVDoNCj4gLQ0KPiAtICB3aGlsZSghSXNMaXN0 RW1wdHkoJkZpbGVJbmZvTGlzdCkpIHsNCj4gLSAgICBMaW5rID0gRmlsZUluZm9MaXN0LkZvcndh cmRMaW5rOw0KPiAtICAgIFJlbW92ZUVudHJ5TGlzdChMaW5rKTsNCj4gLQ0KPiAtICAgIEZpbGVJ bmZvRW50cnkgPSBDUiAoTGluaywgRklMRV9JTkZPX0VOVFJZLCBMaW5rLCBGSUxFX0lORk9fU0lH TkFUVVJFKTsNCj4gLQ0KPiAtICAgIEZyZWVQb29sKEZpbGVJbmZvRW50cnktPkZpbGVJbmZvKTsN Cj4gLSAgICBGcmVlUG9vbChGaWxlSW5mb0VudHJ5KTsNCj4gLSAgfQ0KPiAtDQo+IC0gIHJldHVy biBTdGF0dXM7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVk IHRvIGdldCBhbGwgY2FzcHVsZXMgZnJvbSBmaWxlLiBUaGUgY2Fwc3VsZSBmaWxlIGltYWdlIGlz DQo+IC0gIGNvcGllZCB0byBCUyBtZW1vcnkuIENhbGxlciBpcyByZXNwb25zaWJsZSB0byBmcmVl IHRoZW0uDQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgICBNYXhSZXRyeSAgICAgICAgICAgICBNYXgg Q29ubmVjdGlvbiBSZXRyeS4gU3RhbGwgMTAwbXMgYmV0d2Vlbg0KPiBlYWNoIGNvbm5lY3Rpb24g dHJ5IHRvIGVuc3VyZQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl dmljZXMgbGlrZSBVU0IgY2FuIGdldCBlbnVtZXJhdGVkLg0KPiAtICBAcGFyYW1bb3V0XSAgIENh cHN1bGVQdHIgICAgICAgICAgIENvcGllZCBDYXBzdWxlIGZpbGUgSW1hZ2UgSW5mbyBidWZmZXIN Cj4gLSAgQHBhcmFtW291dF0gICBDYXBzdWxlTnVtICAgICAgICAgICBDYXBzdWxlTnVtYmVyDQo+ IC0gIEBwYXJhbVtvdXRdICAgRnNIYW5kbGUgICAgICAgICAgICAgRmlsZSBzeXN0ZW0gaGFuZGxl DQo+IC0gIEBwYXJhbVtvdXRdICAgTG9hZE9wdGlvbk51bWJlciAgICAgT3B0aW9uTnVtYmVyIG9m IGJvb3Qgb3B0aW9uDQo+IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgU3VjY2VlZCB0byBn ZXQgYWxsIGNhcHN1bGVzLg0KPiAtDQo+IC0qKi8NCj4gLUVGSV9TVEFUVVMNCj4gLUdldEFsbENh cHN1bGVPbkRpc2soDQo+IC0gIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBN YXhSZXRyeSwNCj4gLSAgT1VUIElNQUdFX0lORk8gICAgICAgICAgICAgICAgICAgICAgICoqQ2Fw c3VsZVB0ciwNCj4gLSAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBz dWxlTnVtLA0KPiAtICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgKkZzSGFu ZGxlLA0KPiAtICBPVVQgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpMb2FkT3B0 aW9uTnVtYmVyDQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiAtICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAqRnM7 DQo+IC0gIEVGSV9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgIFJvb3REaXI7DQo+IC0gIEVG SV9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgIEZpbGVEaXI7DQo+IC0gIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgICAgICAgICpUZW1wT3B0aW9uTnVtYmVyOw0KPiAtDQo+IC0gIEZzICAg ICAgICAgICAgICAgPSBOVUxMOw0KPiAtICBSb290RGlyICAgICAgICAgID0gTlVMTDsNCj4gLSAg RmlsZURpciAgICAgICAgICA9IE5VTEw7DQo+IC0gIFRlbXBPcHRpb25OdW1iZXIgPSBOVUxMOw0K PiAtICAqQ2Fwc3VsZU51bSAgICAgID0gMDsNCj4gLQ0KPiAtICBTdGF0dXMgPSBHZXRFZmlTeXNQ YXJ0aXRpb25Gcm9tQWN0aXZlQm9vdE9wdGlvbihNYXhSZXRyeSwNCj4gJlRlbXBPcHRpb25OdW1i ZXIsIEZzSGFuZGxlKTsNCj4gLSAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAgcmV0 dXJuIFN0YXR1czsNCj4gLSAgfQ0KPiAtDQo+IC0gIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9j b2woKkZzSGFuZGxlLA0KPiAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsIChWT0lE ICoqKSZGcyk7DQo+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiAtICAgIHJldHVybiBT dGF0dXM7DQo+IC0gIH0NCj4gLQ0KPiAtICBTdGF0dXMgPSBGcy0+T3BlblZvbHVtZShGcywgJlJv b3REaXIpOw0KPiAtICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gLSAgICByZXR1cm4gU3Rh dHVzOw0KPiAtICB9DQo+IC0NCj4gLSAgU3RhdHVzID0gUm9vdERpci0+T3BlbigNCj4gLSAgICAg ICAgICAgICAgICAgICAgICBSb290RGlyLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICZGaWxl RGlyLA0KPiAtICAgICAgICAgICAgICAgICAgICAgIEVGSV9DQVBTVUxFX0ZJTEVfRElSRUNUT1JZ LA0KPiAtICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAwDQo+IC0gICAgICAgICAgICAgICAgICAgICAgKTsNCj4gLSAgaWYg KEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAgREVCVUcoKERFQlVHX0VSUk9SLCAiQ29kTGli R2V0QWxsQ2Fwc3VsZU9uRGlzayBmYWlsIHRvIG9wZW4NCj4gUm9vdERpciFcbiIpKTsNCj4gLSAg ICBnb3RvIEVYSVQ7DQo+IC0gIH0NCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBPbmx5IExvYWQgZmls ZXMgd2l0aCBFRklfRklMRV9TWVNURU0gb3IgRUZJX0ZJTEVfQVJDSElWRSBhdHRyaWJ1dGUNCj4g LSAgLy8gaWdub3JlIEVGSV9GSUxFX1JFQURfT05MWSwgRUZJX0ZJTEVfSElEREVOLCBFRklfRklM RV9SRVNFUlZFRCwNCj4gRUZJX0ZJTEVfRElSRUNUT1JZDQo+IC0gIC8vDQo+IC0gIFN0YXR1cyA9 IEdldEZpbGVJbWFnZUluQWxwaGFiZXRGcm9tRGlyKA0KPiAtICAgICAgICAgICAgIEZpbGVEaXIs DQo+IC0gICAgICAgICAgICAgRUZJX0ZJTEVfU1lTVEVNIHwgRUZJX0ZJTEVfQVJDSElWRSwNCj4g LSAgICAgICAgICAgICBDYXBzdWxlUHRyLA0KPiAtICAgICAgICAgICAgIENhcHN1bGVOdW0NCj4g LSAgICAgICAgICAgICApOw0KPiAtICBERUJVRygoREVCVUdfSU5GTywgIkdldEZpbGVJbWFnZUlu QWxwaGFiZXRGcm9tRGlyIHN0YXR1cyAleFxuIiwNCj4gU3RhdHVzKSk7DQo+IC0NCj4gLSAgLy8N Cj4gLSAgLy8gQWx3YXlzIHJlbW92ZSBmaWxlIHRvIGF2b2lkIGRlYWRsb29wIGluIGNhcHN1bGUg cHJvY2Vzcw0KPiAtICAvLw0KPiAtICBTdGF0dXMgPSBSZW1vdmVGaWxlRnJvbURpcihGaWxlRGly LCBFRklfRklMRV9TWVNURU0gfCBFRklfRklMRV9BUkNISVZFKTsNCj4gLSAgREVCVUcoKERFQlVH X0lORk8sICJSZW1vdmVGaWxlRnJvbURpciBzdGF0dXMgJXhcbiIsIFN0YXR1cykpOw0KPiAtDQo+ IC0gIGlmIChMb2FkT3B0aW9uTnVtYmVyICE9IE5VTEwpIHsNCj4gLSAgICAqTG9hZE9wdGlvbk51 bWJlciA9ICpUZW1wT3B0aW9uTnVtYmVyOw0KPiAtICB9DQo+IC0NCj4gLUVYSVQ6DQo+IC0NCj4g LSAgaWYgKEZpbGVEaXIgIT0gTlVMTCkgew0KPiAtICAgIEZpbGVEaXItPkNsb3NlIChGaWxlRGly KTsNCj4gLSAgfQ0KPiAtDQo+IC0gIGlmIChSb290RGlyICE9IE5VTEwpIHsNCj4gLSAgICBSb290 RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gU3RhdHVzOw0K PiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAgQnVpbGQgR2F0aGVyIGxpc3QgZm9yIGEgbGlzdCBvZiBj YXBzdWxlIGltYWdlcy4NCj4gLQ0KPiAtICBAcGFyYW1baW5dICBDYXBzdWxlQnVmZmVyICAgIEFu IGFycmF5IG9mIHBvaW50ZXIgdG8gY2Fwc3VsZSBpbWFnZXMNCj4gLSAgQHBhcmFtW2luXSAgQ2Fw c3VsZVNpemUgICAgICBBbiBhcnJheSBvZiBVSU5UTiB0byBjYXBzdWxlIGltYWdlcyBzaXplDQo+ IC0gIEBwYXJhbVtpbl0gIENhcHN1bGVOdW0gICAgICAgVGhlIGNvdW50IG9mIGNhcHN1bGUgaW1h Z2VzDQo+IC0gIEBwYXJhbVtvdXRdIEJsb2NrRGVzY3JpcHRvcnMgVGhlIGJsb2NrIGRlc2NyaXB0 b3JzIGZvciB0aGUgY2Fwc3VsZSBpbWFnZXMNCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNT IFRoZSBibG9jayBkZXNjcmlwdG9ycyBmb3IgdGhlIGNhcHN1bGUgaW1hZ2VzIGFyZQ0KPiBjb25z dHJ1Y3RlZC4NCj4gLQ0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+IC1CdWlsZEdhdGhlckxpc3Qg KA0KPiAtICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqKkNhcHN1bGVCdWZmZXIs DQo+IC0gIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlU2l6ZSwNCj4g LSAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZU51bSwNCj4gLSAgT1VU IEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgKipCbG9ja0Rlc2NyaXB0b3JzDQo+IC0gICkN Cj4gLXsNCj4gLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAtICBF RklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAqQmxvY2tEZXNjcmlwdG9yczE7DQo+IC0gIEVG SV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICpCbG9ja0Rlc2NyaXB0b3JQcmU7DQo+IC0gIEVG SV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICpCbG9ja0Rlc2NyaXB0b3JzSGVhZGVyOw0KPiAt ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gLQ0KPiAtICBCbG9ja0Rl c2NyaXB0b3JzMSAgICAgID0gTlVMTDsNCj4gLSAgQmxvY2tEZXNjcmlwdG9yUHJlICAgICA9IE5V TEw7DQo+IC0gIEJsb2NrRGVzY3JpcHRvcnNIZWFkZXIgPSBOVUxMOw0KPiAtDQo+IC0gIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07IEluZGV4KyspIHsNCj4gLSAgICAvLw0KPiAt ICAgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGRlc2NyaXB0b3JzLg0KPiAtICAgIC8vDQo+ IC0gICAgQmxvY2tEZXNjcmlwdG9yczEgID0gQWxsb2NhdGVaZXJvUG9vbCAoMiAqIHNpemVvZg0K PiAoRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUikpOw0KPiAtICAgIGlmIChCbG9ja0Rlc2Ny aXB0b3JzMSA9PSBOVUxMKSB7DQo+IC0gICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQnVpbGRH YXRoZXJMaXN0OiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvcg0KPiBkZXNjcmlwdG9yc1xu IikpOw0KPiAtICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IC0gICAgICBn b3RvIEVSUkVYSVQ7DQo+IC0gICAgfSBlbHNlIHsNCj4gLSAgICAgIERFQlVHICgoREVCVUdfSU5G TywgIkJ1aWxkR2F0aGVyTGlzdDogY3JlYXRpbmcgY2Fwc3VsZSBkZXNjcmlwdG9ycyBhdA0KPiAw eCVYXG4iLCAoVUlOVE4pIEJsb2NrRGVzY3JpcHRvcnMxKSk7DQo+IC0gICAgfQ0KPiAtDQo+IC0g ICAgLy8NCj4gLSAgICAvLyBSZWNvcmQgZGVzY2lycHRvciBoZWFkZXINCj4gLSAgICAvLw0KPiAt ICAgIGlmIChJbmRleCA9PSAwKSB7DQo+IC0gICAgICBCbG9ja0Rlc2NyaXB0b3JzSGVhZGVyID0g QmxvY2tEZXNjcmlwdG9yczE7DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgaWYgKEJsb2NrRGVzY3Jp cHRvclByZSAhPSBOVUxMKSB7DQo+IC0gICAgICBCbG9ja0Rlc2NyaXB0b3JQcmUtPlVuaW9uLkNv bnRpbnVhdGlvblBvaW50ZXIgPSAoVUlOVE4pDQo+IEJsb2NrRGVzY3JpcHRvcnMxOw0KPiAtICAg ICAgQmxvY2tEZXNjcmlwdG9yUHJlLT5MZW5ndGggPSAwOw0KPiAtICAgIH0NCj4gLQ0KPiAtICAg IEJsb2NrRGVzY3JpcHRvcnMxLT5Vbmlvbi5EYXRhQmxvY2sgPSAoVUlOVE4pIENhcHN1bGVCdWZm ZXJbSW5kZXhdOw0KPiAtICAgIEJsb2NrRGVzY3JpcHRvcnMxLT5MZW5ndGggPSBDYXBzdWxlU2l6 ZVtJbmRleF07DQo+IC0NCj4gLSAgICBCbG9ja0Rlc2NyaXB0b3JQcmUgPSBCbG9ja0Rlc2NyaXB0 b3JzMSArIDE7DQo+IC0gICAgQmxvY2tEZXNjcmlwdG9yczEgPSBOVUxMOw0KPiAtICB9DQo+IC0N Cj4gLSAgLy8NCj4gLSAgLy8gTnVsbC10ZXJtaW5hdGUuDQo+IC0gIC8vDQo+IC0gIGlmIChCbG9j a0Rlc2NyaXB0b3JQcmUgIT0gTlVMTCkgew0KPiAtICAgIEJsb2NrRGVzY3JpcHRvclByZS0+VW5p b24uQ29udGludWF0aW9uUG9pbnRlciA9IChVSU5UTilOVUxMOw0KPiAtICAgIEJsb2NrRGVzY3Jp cHRvclByZS0+TGVuZ3RoID0gMDsNCj4gLSAgICAqQmxvY2tEZXNjcmlwdG9ycyA9IEJsb2NrRGVz Y3JpcHRvcnNIZWFkZXI7DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ IC0NCj4gLUVSUkVYSVQ6DQo+IC0gIGlmIChCbG9ja0Rlc2NyaXB0b3JzMSAhPSBOVUxMKSB7DQo+ IC0gICAgRnJlZVBvb2wgKEJsb2NrRGVzY3JpcHRvcnMxKTsNCj4gLSAgfQ0KPiAtDQo+IC0gIHJl dHVybiBTdGF0dXM7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBUaGlzIHJvdXRpbmUgaXMgY2Fs bGVkIHRvIGNoZWNrIGlmIENhcHN1bGVPbkRpc2sgZmxhZyBpbiBPc0luZGljYXRpb25zIFZhcmlh YmxlDQo+IC0gIGlzIGVuYWJsZWQuDQo+IC0NCj4gLSAgQHJldHZhbCBUUlVFICAgICBGbGFnIGlz IGVuYWJsZWQNCj4gLSAgQHJldHZhbCBGQUxTRSAgICBGbGFnIGlzIG5vdCBlbmFibGVkDQo+IC0N Cj4gLSoqLw0KPiAtQk9PTEVBTg0KPiAtRUZJQVBJDQo+IC1Db0RDaGVja0NhcHN1bGVPbkRpc2tG bGFnKA0KPiAtICBWT0lEDQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX1NUQVRVUyAgICAgICAgICAg IFN0YXR1czsNCj4gLSAgVUlOVDY0ICAgICAgICAgICAgICAgIE9zSW5kaWNhdGlvbjsNCj4gLSAg VUlOVE4gICAgICAgICAgICAgICAgIERhdGFTaXplOw0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIENo ZWNrIEZpbGUgQ2Fwc3VsZSBEZWxpdmVyeSBTdXBwb3J0ZWQgRmxhZyBpbiBPc0luZGljYXRpb24g dmFyaWFibGUNCj4gLSAgLy8NCj4gLSAgT3NJbmRpY2F0aW9uID0gMDsNCj4gLSAgRGF0YVNpemUg ICAgID0gc2l6ZW9mKFVJTlQ2NCk7DQo+IC0gIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKA0K PiAtICAgICAgICAgICAgICAgICAgRUZJX09TX0lORElDQVRJT05TX1ZBUklBQkxFX05BTUUsDQo+ IC0gICAgICAgICAgICAgICAgICAmZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4gLSAgICAgICAg ICAgICAgICAgIE5VTEwsDQo+IC0gICAgICAgICAgICAgICAgICAmRGF0YVNpemUsDQo+IC0gICAg ICAgICAgICAgICAgICAmT3NJbmRpY2F0aW9uDQo+IC0gICAgICAgICAgICAgICAgICApOw0KPiAt ICBpZiAoIUVGSV9FUlJPUihTdGF0dXMpICYmDQo+IC0gICAgICAoT3NJbmRpY2F0aW9uICYNCj4g RUZJX09TX0lORElDQVRJT05TX0ZJTEVfQ0FQU1VMRV9ERUxJVkVSWV9TVVBQT1JURUQpICE9IDAp IHsNCj4gLSAgICByZXR1cm4gVFJVRTsNCj4gLSAgfQ0KPiAtDQo+IC0gIHJldHVybiBGQUxTRTsN Cj4gLX0NCj4gLQ0KPiAtDQo+IC0vKioNCj4gLSAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBj bGVhciBDYXBzdWxlT25EaXNrIGZsYWdzIGluY2x1ZGluZyBPc0luZGljYXRpb25zDQo+IGFuZCBC b290TmV4dCB2YXJpYWJsZS4NCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgQWxsIENh cHN1bGUgT24gRGlzayBmbGFncyBhcmUgY2xlYXJlZA0KPiAtDQo+IC0qKi8NCj4gLUVGSV9TVEFU VVMNCj4gLUVGSUFQSQ0KPiAtQ29EQ2xlYXJDYXBzdWxlT25EaXNrRmxhZygNCj4gLSAgVk9JRA0K PiAtICApDQo+IC17DQo+IC0gIEVGSV9TVEFUVVMgICAgICAgICAgICBTdGF0dXM7DQo+IC0gIFVJ TlQ2NCAgICAgICAgICAgICAgICBPc0luZGljYXRpb247DQo+IC0gIFVJTlROICAgICAgICAgICAg ICAgICBEYXRhU2l6ZTsNCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBSZXNldCBGaWxlIENhcHN1bGUg RGVsaXZlcnkgU3VwcG9ydGVkIEZsYWcgaW4gT3NJbmRpY2F0aW9uIHZhcmlhYmxlDQo+IC0gIC8v DQo+IC0gIE9zSW5kaWNhdGlvbiA9IDA7DQo+IC0gIERhdGFTaXplID0gc2l6ZW9mKFVJTlQ2NCk7 DQo+IC0gIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPiAtICAgICAgICAgICAgICAgICAg RUZJX09TX0lORElDQVRJT05TX1ZBUklBQkxFX05BTUUsDQo+IC0gICAgICAgICAgICAgICAgICAm Z0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4gLSAgICAgICAgICAgICAgICAgIE5VTEwsDQo+IC0g ICAgICAgICAgICAgICAgICAmRGF0YVNpemUsDQo+IC0gICAgICAgICAgICAgICAgICAmT3NJbmRp Y2F0aW9uDQo+IC0gICAgICAgICAgICAgICAgICApOw0KPiAtICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykgfHwNCj4gLSAgICAgIChPc0luZGljYXRpb24gJg0KPiBFRklfT1NfSU5ESUNBVElPTlNfRklM RV9DQVBTVUxFX0RFTElWRVJZX1NVUFBPUlRFRCkgPT0gMCkgew0KPiAtICAgIHJldHVybiBTdGF0 dXM7DQo+IC0gIH0NCj4gLQ0KPiAtICBPc0luZGljYXRpb24gJj0NCj4gfigoVUlOVDY0KUVGSV9P U19JTkRJQ0FUSU9OU19GSUxFX0NBUFNVTEVfREVMSVZFUllfU1VQUE9SVEVEKTsNCj4gLSAgU3Rh dHVzID0gZ1JULT5TZXRWYXJpYWJsZSAoDQo+IC0gICAgICAgICAgICAgICAgICBFRklfT1NfSU5E SUNBVElPTlNfVkFSSUFCTEVfTkFNRSwNCj4gLSAgICAgICAgICAgICAgICAgICZnRWZpR2xvYmFs VmFyaWFibGVHdWlkLA0KPiAtICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX0JPT1RTRVJW SUNFX0FDQ0VTUyB8DQo+IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUyB8IEVGSV9WQVJJQUJM RV9OT05fVk9MQVRJTEUsDQo+IC0gICAgICAgICAgICAgICAgICBzaXplb2YoVUlOVDY0KSwNCj4g LSAgICAgICAgICAgICAgICAgICZPc0luZGljYXRpb24NCj4gLSAgICAgICAgICAgICAgICAgICk7 DQo+IC0gIEFTU0VSVCghRUZJX0VSUk9SKFN0YXR1cykpOw0KPiAtDQo+IC0gIC8vDQo+IC0gIC8v IERlbGV0ZSBCb290TmV4dCB2YXJpYWJsZS4gQ2Fwc3VsZSBQcm9jZXNzIG1heSByZXNldCBzeXN0 ZW0sIHNvIGNhbid0DQo+IHJlbHkgb24gQmRzIHRvIGNsZWFyIHRoaXMgdmFyaWFibGUNCj4gLSAg Ly8NCj4gLSAgU3RhdHVzID0gZ1JULT5TZXRWYXJpYWJsZSAoDQo+IC0gICAgICAgICAgICAgICAg ICBFRklfQk9PVF9ORVhUX1ZBUklBQkxFX05BTUUsDQo+IC0gICAgICAgICAgICAgICAgICAmZ0Vm aUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4gLSAgICAgICAgICAgICAgICAgIDAsDQo+IC0gICAgICAg ICAgICAgICAgICAwLA0KPiAtICAgICAgICAgICAgICAgICAgTlVMTA0KPiAtICAgICAgICAgICAg ICAgICAgKTsNCj4gLSAgQVNTRVJUIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MgfHwgU3RhdHVzID09 IEVGSV9OT1RfRk9VTkQpOw0KPiAtDQo+IC0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gLX0NCj4g LQ0KPiAtLyoqDQo+IC0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gY2xlYXIgQ2Fwc3VsZU9u RGlzayBSZWxvY2F0aW9uIEluZm8gdmFyaWFibGUuDQo+IC0gIFRvdGFsIENhcHN1bGUgT24gRGlz ayBsZW5ndGggaXMgcmVjb3JkZWQgaW4gdGhpcyB2YXJpYWJsZQ0KPiAtDQo+IC0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICBDYXBzdWxlIE9uIERpc2sgZmxhZ3MgYXJlIGNsZWFyZWQNCj4gLQ0KPiAt KiovDQo+IC1FRklfU1RBVFVTDQo+IC1Db0RDbGVhckNhcHN1bGVSZWxvY2F0aW9uSW5mbygNCj4g LSAgVk9JRA0KPiAtICApDQo+IC17DQo+IC0gIHJldHVybiBnUlQtPlNldFZhcmlhYmxlICgNCj4g LSAgICAgICAgICAgICAgICBDT0RfUkVMT0NBVElPTl9JTkZPX1ZBUl9OQU1FLA0KPiAtICAgICAg ICAgICAgICAgICZnRWZpQ2Fwc3VsZVZlbmRvckd1aWQsDQo+IC0gICAgICAgICAgICAgICAgMCwN Cj4gLSAgICAgICAgICAgICAgICAwLA0KPiAtICAgICAgICAgICAgICAgIE5VTEwNCj4gLSAgICAg ICAgICAgICAgICApOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAgUmVsb2NhdGUgQ2Fwc3VsZSBv biBEaXNrIGZyb20gRUZJIHN5c3RlbSBwYXJ0aXRpb24gdG8gYSBwbGF0Zm9ybS1zcGVjaWZpYw0K PiBOViBzdG9yYWdlIGRldmljZQ0KPiAtICB3aXRoIEJsb2NrSW8gcHJvdG9jb2wuIFJlbG9jYXRp b24gZGV2aWNlIHBhdGgsIGlkZW50aWZpZWQgYnkNCj4gUGNkQ29kUmVsb2NhdGlvbkRldlBhdGgs IG11c3QNCj4gLSAgYmUgYSBmdWxsIGRldmljZSBwYXRoLg0KPiAtICBEZXZpY2UgZW51bWVyYXRp b24gbGlrZSBVU0IgY29zdHMgdGltZSwgdXNlciBjYW4gaW5wdXQgTWF4UmV0cnkgdG8gdGVsbA0K PiBmdW5jdGlvbiB0byByZXRyeS4NCj4gLSAgRnVuY3Rpb24gd2lsbCBzdGFsbCAxMDBtcyBiZXR3 ZWVuIGVhY2ggcmV0cnkuDQo+IC0NCj4gLSAgU2lkZSBFZmZlY3RzOg0KPiAtICAgIENvbnRlbnQg Y29ycnVwdGlvbi4gQmxvY2sgSU8gd3JpdGUgZGlyZWN0bHkgdG91Y2hlcyBsb3cgbGV2ZWwgd3Jp dGUuIE9yaWduYWwNCj4gcGFydGl0aW9ucywgZmlsZSBzeXN0ZW1zDQo+IC0gICAgb2YgdGhlIHJl bG9jYXRpb24gZGV2aWNlIHdpbGwgYmUgY29ycnVwdGVkLg0KPiAtDQo+IC0gIEBwYXJhbVtpbl0g ICAgTWF4UmV0cnkgICAgICAgICAgICAgTWF4IENvbm5lY3Rpb24gUmV0cnkuIFN0YWxsIDEwMG1z IGJldHdlZW4NCj4gZWFjaCBjb25uZWN0aW9uIHRyeSB0byBlbnN1cmUNCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzIGxpa2UgVVNCIGNhbiBnZXQgZW51bWVy YXRlZC4NCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgQ2Fwc3VsZSBvbiBEaXNrIGlt YWdlcyBhcmUgc3VjZXNzZnVsbHkgcmVsb2NhdGVkIHRvDQo+IHRoZSBwbGF0Zm9ybS1zcGVjaWZp YyBkZXZpY2UuDQo+IC0NCj4gLSoqLw0KPiAtRUZJX1NUQVRVUw0KPiAtUmVsb2NhdGVDYXBzdWxl VG9EaXNrKA0KPiAtICBVSU5UTiAgICAgTWF4UmV0cnkNCj4gLSAgKQ0KPiAtew0KPiAtICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICBDYXBzdWxlT25EaXNrTnVtOw0KPiAtICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgIERhdGFTaXplOw0KPiAtICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFs SW1hZ2VTaXplOw0KPiAtICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsSW1h Z2VOYW1lU2l6ZTsNCj4gLSAgSU1BR0VfSU5GTyAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3Vs ZU9uRGlza0J1ZjsNCj4gLSAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICBIYW5kbGU7 DQo+IC0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgVGVtcEhhbmRsZTsNCj4gLSAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiAtICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mSGFuZGxlczsNCj4gLSAgRUZJX0JM T0NLX0lPX1BST1RPQ09MICAgICAgICAgICAqQmxvY2tJbzsNCj4gLSAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAqQ2Fwc3VsZURhdGFCdWY7DQo+IC0gIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgICAgKkNhcHN1bGVQdHI7DQo+IC0gIEVGSV9TSU1QTEVfRklMRV9TWVNURU1f UFJPVE9DT0wgKkZzOw0KPiAtICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgIFJvb3RE aXI7DQo+IC0gIEVGSV9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgVGVtcENvZEZpbGU7DQo+ IC0gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcENvZEZpbGVTaXplOw0KPiAt ICBFRklfREVWSUNFX1BBVEggICAgICAgICAgICAgICAgICpUZW1wRGV2aWNlUGF0aDsNCj4gLSAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBSZWxvY2F0aW9uSW5mbzsNCj4gLSAgVUlO VDE2ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkT3B0aW9uTnVtYmVyOw0KPiAtICBFRklf Q0FQU1VMRV9IRUFERVIgICAgICAgICAgICAgIEZpbGVOYW1lQ2Fwc3VsZUhlYWRlcjsNCj4gLQ0K PiAtICBSb290RGlyICAgICAgICAgID0gTlVMTDsNCj4gLSAgVGVtcENvZEZpbGUgICAgICA9IE5V TEw7DQo+IC0gIEhhbmRsZUJ1ZmZlciAgICAgPSBOVUxMOw0KPiAtICBDYXBzdWxlRGF0YUJ1ZiAg ID0gTlVMTDsNCj4gLSAgQ2Fwc3VsZU9uRGlza0J1ZiA9IE5VTEw7DQo+IC0gIE51bWJlck9mSGFu ZGxlcyAgPSAwOw0KPiAtDQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywgIkNhcHN1bGVPbkRpc2sg UmVsb2NhdGVDYXBzdWxlIEVudGVyXG4iKSk7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gMS4gTG9h ZCBhbGwgQ2Fwc3VsZSBPbiBEaXNrcyBpbiB0byBtZW1vcnkNCj4gLSAgLy8NCj4gLSAgU3RhdHVz ID0gR2V0QWxsQ2Fwc3VsZU9uRGlzayhNYXhSZXRyeSwgJkNhcHN1bGVPbkRpc2tCdWYsDQo+ICZD YXBzdWxlT25EaXNrTnVtLCAmSGFuZGxlLCAmTG9hZE9wdGlvbk51bWJlcik7DQo+IC0gIGlmIChF RklfRVJST1IoU3RhdHVzKSB8fCBDYXBzdWxlT25EaXNrTnVtID09IDApIHsNCj4gLSAgICBERUJV RyAoKERFQlVHX0lORk8sICJSZWxvY2F0ZUNhcHN1bGU6IEdldEFsbENhcHN1bGVPbkRpc2sgU3Rh dHVzIC0NCj4gMHgleFxuIiwgU3RhdHVzKSk7DQo+IC0gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+IC0gIH0NCj4gLQ0KPiAtICAvLw0KPiAtICAvLyAyLiBDb25uZWN0IHBsYXRmb3JtIHNwZWNp YWwgZGV2aWNlIHBhdGggYXMgcmVsb2NhdGlvbiBkZXZpY2UuDQo+IC0gIC8vIElmIG5vIHBsYXRm b3JtIHNwZWNpYWwgZGV2aWNlIHBhdGggc3BlY2lmaWVkIG9yIHRoZSBkZXZpY2UgcGF0aCBpcyBp bnZhbGlkLA0KPiB1c2UgdGhlIEVGSSBzeXN0ZW0gcGFydGl0aW9uIHdoZXJlDQo+IC0gIC8vIHN0 b3JlcyB0aGUgY2Fwc3VsZXMgYXMgcmVsb2NhdGlvbiBkZXZpY2UuDQo+IC0gIC8vDQo+IC0gIGlm IChJc0RldmljZVBhdGhWYWxpZCAoKEVGSV9ERVZJQ0VfUEFUSA0KPiAqKVBjZEdldFB0cihQY2RD b2RSZWxvY2F0aW9uRGV2UGF0aCksDQo+IFBjZEdldFNpemUoUGNkQ29kUmVsb2NhdGlvbkRldlBh dGgpKSkgew0KPiAtICAgIFN0YXR1cyA9IEVmaUJvb3RNYW5hZ2VyQ29ubmVjdERldmljZVBhdGgg KChFRklfREVWSUNFX1BBVEgNCj4gKilQY2RHZXRQdHIoUGNkQ29kUmVsb2NhdGlvbkRldlBhdGgp LCAmVGVtcEhhbmRsZSk7DQo+IC0gICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUmVsb2NhdGVDYXBzdWxlOg0KPiBFZmlCb290TWFuYWdl ckNvbm5lY3REZXZpY2VQYXRoIFN0YXR1cyAtIDB4JXhcbiIsIFN0YXR1cykpOw0KPiAtICAgICAg Z290byBFWElUOw0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIC8vDQo+IC0gICAgLy8gQ29ubmVjdCBh bGwgdGhlIGNoaWxkIGhhbmRsZS4gUGFydGl0aW9uICYgRkFUIGRyaXZlcnMgYXJlIGFsbG93ZWQg aW4gdGhpcw0KPiBjYXNlDQo+IC0gICAgLy8NCj4gLSAgICBnQlMtPkNvbm5lY3RDb250cm9sbGVy IChUZW1wSGFuZGxlLCBOVUxMLCBOVUxMLCBUUlVFKTsNCj4gLSAgICBTdGF0dXMgPSBnQlMtPkxv Y2F0ZUhhbmRsZUJ1ZmZlcigNCj4gLSAgICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4g LSAgICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0K PiAtICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiAtICAgICAgICAgICAgICAgICAgICAmTnVt YmVyT2ZIYW5kbGVzLA0KPiAtICAgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+IC0g ICAgICAgICAgICAgICAgICAgICk7DQo+IC0gICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ IC0gICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUmVsb2NhdGVDYXBzdWxlOiBMb2NhdGVIYW5k bGVCdWZmZXIgU3RhdHVzIC0NCj4gMHgleFxuIiwgU3RhdHVzKSk7DQo+IC0gICAgICBnb3RvIEVY SVQ7DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgLy8NCj4gLSAgICAvLyBGaW5kIGZpcnN0IFNpbXBs ZSBGaWxlIFN5c3RlbSBIYW5kbGUgd2hpY2ggY2FuIG1hdGNoDQo+IFBjZENvZFJlbG9jYXRpb25E ZXZQYXRoDQo+IC0gICAgLy8NCj4gLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJP ZkhhbmRsZXM7IEluZGV4KyspIHsNCj4gLSAgICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9j b2woSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLCAo Vk9JRCAqKikmVGVtcERldmljZVBhdGgpOw0KPiAtICAgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMp KSB7DQo+IC0gICAgICAgIGNvbnRpbnVlOw0KPiAtICAgICAgfQ0KPiAtDQo+IC0gICAgICBEYXRh U2l6ZSA9IEdldERldmljZVBhdGhTaXplKChFRklfREVWSUNFX1BBVEgNCj4gKilQY2RHZXRQdHIo UGNkQ29kUmVsb2NhdGlvbkRldlBhdGgpKSAtIHNpemVvZihFRklfREVWSUNFX1BBVEgpOw0KPiAt ICAgICAgaWYgKDAgPT0gQ29tcGFyZU1lbSgoRUZJX0RFVklDRV9QQVRIDQo+ICopUGNkR2V0UHRy KFBjZENvZFJlbG9jYXRpb25EZXZQYXRoKSwgVGVtcERldmljZVBhdGgsIERhdGFTaXplKSkgew0K PiAtICAgICAgICBIYW5kbGUgPSBIYW5kbGVCdWZmZXJbSW5kZXhdOw0KPiAtICAgICAgICBicmVh azsNCj4gLSAgICAgIH0NCj4gLSAgICB9DQo+IC0NCj4gLSAgICBGcmVlUG9vbChIYW5kbGVCdWZm ZXIpOw0KPiAtDQo+IC0gICAgaWYgKEluZGV4ID09IE51bWJlck9mSGFuZGxlcykgew0KPiAtICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIlJlbG9jYXRlQ2Fwc3VsZTogTm8gc2ltcGxlIGZpbGUg c3lzdGVtDQo+IHByb3RvY29sIGZvdW5kLlxuIikpOw0KPiAtICAgICAgU3RhdHVzID0gRUZJX05P VF9GT1VORDsNCj4gLSAgICB9DQo+IC0gIH0NCj4gLQ0KPiAtICBTdGF0dXMgPSBnQlMtPkhhbmRs ZVByb3RvY29sKEhhbmRsZSwgJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLCAoVk9JRA0KPiAqKikm QmxvY2tJbyk7DQo+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSB8fCBCbG9ja0lvLT5NZWRpYS0+ UmVhZE9ubHkpIHsNCj4gLSAgICBERUJVRygoREVCVUdfRVJST1IsICJGYWlsIHRvIGZpbmQgQ2Fw c3VsZSBvbiBEaXNrIHJlbG9jYXRpb24gQmxvY2tJbw0KPiBkZXZpY2Ugb3IgZGV2aWNlIGlzIFJl YWRPbmx5IVxuIikpOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0KPiAtDQo+IC0gIFN0YXR1 cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2woSGFuZGxlLCAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90 b2NvbEd1aWQsDQo+IChWT0lEICoqKSZGcyk7DQo+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkg ew0KPiAtICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIENoZWNr IGlmIGRldmljZSB1c2VkIHRvIHJlbG9jYXRlIENhcHN1bGUgT24gRGlzayBpcyBiaWcgZW5vdWdo DQo+IC0gIC8vDQo+IC0gIFRvdGFsSW1hZ2VTaXplICAgICA9IDA7DQo+IC0gIFRvdGFsSW1hZ2VO YW1lU2l6ZSA9IDA7DQo+IC0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVPbkRpc2tO dW07IEluZGV4KyspIHsNCj4gLSAgICAvLw0KPiAtICAgIC8vIE92ZXJmbG93IGNoZWNrDQo+IC0g ICAgLy8NCj4gLSAgICBpZiAoTUFYX0FERFJFU1MgLSAoVUlOVE4pVG90YWxJbWFnZVNpemUgPD0N Cj4gQ2Fwc3VsZU9uRGlza0J1ZltJbmRleF0uRmlsZUluZm8tPkZpbGVTaXplKSB7DQo+IC0gICAg ICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+IC0gICAgICBnb3RvIEVYSVQ7DQo+ IC0gICAgfQ0KPiAtDQo+IC0gICAgaWYgKE1BWF9BRERSRVNTIC0gKFVJTlROKVRvdGFsSW1hZ2VO YW1lU2l6ZSA8PQ0KPiBTdHJTaXplKENhcHN1bGVPbkRpc2tCdWZbSW5kZXhdLkZpbGVJbmZvLT5G aWxlTmFtZSkpIHsNCj4gLSAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g LSAgICAgIGdvdG8gRVhJVDsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBUb3RhbEltYWdlU2l6ZSAg ICAgKz0gQ2Fwc3VsZU9uRGlza0J1ZltJbmRleF0uRmlsZUluZm8tPkZpbGVTaXplOw0KPiAtICAg IFRvdGFsSW1hZ2VOYW1lU2l6ZSArPSBTdHJTaXplKENhcHN1bGVPbkRpc2tCdWZbSW5kZXhdLkZp bGVJbmZvLQ0KPiA+RmlsZU5hbWUpOw0KPiAtICAgIERFQlVHKChERUJVR19JTkZPLCAiUmVsb2Nh dGVDYXBzdWxlOiAleA0KPiBTaXplICV4XG4iLENhcHN1bGVPbkRpc2tCdWZbSW5kZXhdLkZpbGVJ bmZvLT5GaWxlTmFtZSwNCj4gQ2Fwc3VsZU9uRGlza0J1ZltJbmRleF0uRmlsZUluZm8tPkZpbGVT aXplKSk7DQo+IC0gIH0NCj4gLQ0KPiAtICBERUJVRygoREVCVUdfSU5GTywgIlJlbG9jYXRlQ2Fw c3VsZTogVG90YWxJbWFnZVNpemUgJXhcbiIsDQo+IFRvdGFsSW1hZ2VTaXplKSk7DQo+IC0gIERF QlVHKChERUJVR19JTkZPLCAiUmVsb2NhdGVDYXBzdWxlOiBUb3RhbEltYWdlTmFtZVNpemUgJXhc biIsDQo+IFRvdGFsSW1hZ2VOYW1lU2l6ZSkpOw0KPiAtDQo+IC0gIGlmIChNQVhfQUREUkVTUyAt IChVSU5UTilUb3RhbEltYWdlTmFtZVNpemUgPD0gc2l6ZW9mKFVJTlQ2NCkgKiAyIHx8DQo+IC0g ICAgICBNQVhfQUREUkVTUyAtIChVSU5UTilUb3RhbEltYWdlU2l6ZSA8PQ0KPiAoVUlOVE4pVG90 YWxJbWFnZU5hbWVTaXplICsgc2l6ZW9mKFVJTlQ2NCkgKiAyKSB7DQo+IC0gICAgU3RhdHVzID0g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0KPiAtDQo+ IC0gIFRlbXBDb2RGaWxlU2l6ZSA9IHNpemVvZihVSU5UNjQpICsgVG90YWxJbWFnZVNpemUgKw0K PiBzaXplb2YoRUZJX0NBUFNVTEVfSEVBREVSKSArIFRvdGFsSW1hZ2VOYW1lU2l6ZTsNCj4gLQ0K PiAtICAvLw0KPiAtICAvLyBDaGVjayBpZiBDYXBzdWxlVG90YWxTaXplLiBUaGVyZSBjb3VsZCBi ZSByZW1pbmRlciwgc28gdXNlIExhc3RCbG9jaw0KPiBudW1iZXIgZGlyZWN0bHkNCj4gLSAgLy8N Cj4gLSAgaWYgKERpdlU2NHgzMihUZW1wQ29kRmlsZVNpemUsIEJsb2NrSW8tPk1lZGlhLT5CbG9j a1NpemUpID4gQmxvY2tJby0NCj4gPk1lZGlhLT5MYXN0QmxvY2spIHsNCj4gLSAgICBERUJVRygo REVCVUdfRVJST1IsICJSZWxvY2F0ZUNhcHN1bGU6IFJlbG9jYXRpb24gZGV2aWNlIGlzbid0IGJp Zw0KPiBlbm91Z2ggdG8gaG9sZCBhbGwgQ2Fwc3VsZSBvbiBEaXNrIVxuIikpOw0KPiAtICAgIERF QlVHKChERUJVR19FUlJPUiwgIlRvdGFsSW1hZ2VTaXplID0gJXhcbiIsIFRvdGFsSW1hZ2VTaXpl KSk7DQo+IC0gICAgREVCVUcoKERFQlVHX0VSUk9SLCAiVG90YWxJbWFnZU5hbWVTaXplID0gJXhc biIsDQo+IFRvdGFsSW1hZ2VOYW1lU2l6ZSkpOw0KPiAtICAgIERFQlVHKChERUJVR19FUlJPUiwg IlJlbG9jYXRpb25EZXYgQmxvY2tTaXplID0gJXggTGFzdEJsb2NrID0gJXhcbiIsDQo+IEJsb2Nr SW8tPk1lZGlhLT5CbG9ja1NpemUsIEJsb2NrSW8tPk1lZGlhLT5MYXN0QmxvY2spKTsNCj4gLSAg ICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gLSAgICBnb3RvIEVYSVQ7DQo+IC0g IH0NCj4gLQ0KPiAtICBDYXBzdWxlRGF0YUJ1ZiA9IEFsbG9jYXRlUG9vbCgoVUlOVE4pIFRlbXBD b2RGaWxlU2l6ZSk7DQo+IC0gIGlmIChDYXBzdWxlRGF0YUJ1ZiA9PSBOVUxMKSB7DQo+IC0gICAg U3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IC0gICAgZ290byBFWElUOw0KPiAtICB9 DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gRmlyc3QgVUlOVDY0IHJlc2VydmVkIGZvciB0b3RhbCBp bWFnZSBzaXplLCBpbmNsdWRpbmcgY2Fwc3VsZSBuYW1lDQo+IGNhcHN1bGUuDQo+IC0gIC8vDQo+ IC0gICooVUlOVDY0ICopIENhcHN1bGVEYXRhQnVmID0gVG90YWxJbWFnZVNpemUgKw0KPiBzaXpl b2YoRUZJX0NBUFNVTEVfSEVBREVSKSArIFRvdGFsSW1hZ2VOYW1lU2l6ZTsNCj4gLQ0KPiAtICAv Lw0KPiAtICAvLyBMaW5lIHVwIGFsbCB0aGUgQ2Fwc3VsZSBvbiBEaXNrIGFuZCB3cml0ZSB0byBy ZWxvY2F0aW9uIGRpc2sgYXQgb25lIHRpbWUuIEl0DQo+IGNvdWxkIHNhdmUgc29tZSB0aW1lIGlu IGRpc2sgd3JpdGUNCj4gLSAgLy8NCj4gLSAgZm9yIChJbmRleCA9IDAsIENhcHN1bGVQdHIgPSBD YXBzdWxlRGF0YUJ1ZiArIHNpemVvZihVSU5UNjQpOyBJbmRleCA8DQo+IENhcHN1bGVPbkRpc2tO dW07IEluZGV4KyspIHsNCj4gLSAgICBDb3B5TWVtKENhcHN1bGVQdHIsIENhcHN1bGVPbkRpc2tC dWZbSW5kZXhdLkltYWdlQWRkcmVzcywgKFVJTlROKQ0KPiBDYXBzdWxlT25EaXNrQnVmW0luZGV4 XS5GaWxlSW5mby0+RmlsZVNpemUpOw0KPiAtICAgIENhcHN1bGVQdHIgKz0gQ2Fwc3VsZU9uRGlz a0J1ZltJbmRleF0uRmlsZUluZm8tPkZpbGVTaXplOw0KPiAtICB9DQo+IC0NCj4gLSAgLy8NCj4g LSAgLy8gTGluZSB0aGUgY2Fwc3VsZSBoZWFkZXIgZm9yIGNhcHN1bGUgbmFtZSBjYXBzdWxlLg0K PiAtICAvLw0KPiAtICBDb3B5R3VpZCgmRmlsZU5hbWVDYXBzdWxlSGVhZGVyLkNhcHN1bGVHdWlk LA0KPiAmZ0Vka2lpQ2Fwc3VsZU9uRGlza05hbWVHdWlkKTsNCj4gLSAgRmlsZU5hbWVDYXBzdWxl SGVhZGVyLkNhcHN1bGVJbWFnZVNpemUgPSAoVUlOVDMyKQ0KPiBUb3RhbEltYWdlTmFtZVNpemUg KyBzaXplb2YoRUZJX0NBUFNVTEVfSEVBREVSKTsNCj4gLSAgRmlsZU5hbWVDYXBzdWxlSGVhZGVy LkZsYWdzICAgICAgICAgICAgPQ0KPiBDQVBTVUxFX0ZMQUdTX1BFUlNJU1RfQUNST1NTX1JFU0VU Ow0KPiAtICBGaWxlTmFtZUNhcHN1bGVIZWFkZXIuSGVhZGVyU2l6ZSAgICAgICA9IHNpemVvZihF RklfQ0FQU1VMRV9IRUFERVIpOw0KPiAtICBDb3B5TWVtKENhcHN1bGVQdHIsICZGaWxlTmFtZUNh cHN1bGVIZWFkZXIsDQo+IEZpbGVOYW1lQ2Fwc3VsZUhlYWRlci5IZWFkZXJTaXplKTsNCj4gLSAg Q2Fwc3VsZVB0ciArPSBGaWxlTmFtZUNhcHN1bGVIZWFkZXIuSGVhZGVyU2l6ZTsNCj4gLQ0KPiAt ICAvLw0KPiAtICAvLyBMaW5lIHVwIGFsbCB0aGUgQ2Fwc3VsZSBmaWxlIG5hbWVzLg0KPiAtICAv Lw0KPiAtICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlT25EaXNrTnVtOyBJbmRleCsr KSB7DQo+IC0gICAgQ29weU1lbShDYXBzdWxlUHRyLCBDYXBzdWxlT25EaXNrQnVmW0luZGV4XS5G aWxlSW5mby0+RmlsZU5hbWUsDQo+IFN0clNpemUoQ2Fwc3VsZU9uRGlza0J1ZltJbmRleF0uRmls ZUluZm8tPkZpbGVOYW1lKSk7DQo+IC0gICAgQ2Fwc3VsZVB0ciArPSBTdHJTaXplKENhcHN1bGVP bkRpc2tCdWZbSW5kZXhdLkZpbGVJbmZvLT5GaWxlTmFtZSk7DQo+IC0gIH0NCj4gLQ0KPiAtICAv Lw0KPiAtICAvLyA1LiBGbGFzaCBhbGwgQ2Fwc3VsZXMgb24gRGlzayB0byBUZW1wQ29ELnRtcCB1 bmRlciBSb290RGlyDQo+IC0gIC8vDQo+IC0gIFN0YXR1cyA9IEZzLT5PcGVuVm9sdW1lKEZzLCAm Um9vdERpcik7DQo+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiAtICAgIERFQlVHKChE RUJVR19FUlJPUiwgIlJlbG9jYXRlQ2Fwc3VsZTogT3BlblZvbHVtZSBlcnJvci4gJXhcbiIsDQo+ IFN0YXR1cykpOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0KPiAtDQo+IC0gIFN0YXR1cyA9 IFJvb3REaXItPk9wZW4oDQo+IC0gICAgICAgICAgICAgICAgICAgICAgUm9vdERpciwNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAmVGVtcENvZEZpbGUsDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgKENIQVIxNiAqKVBjZEdldFB0cihQY2RDb0RSZWxvY2F0aW9uRmlsZU5hbWUpLA0KPiAtICAg ICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8IEVGSV9GSUxFX01PREVfV1JJ VEUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgMA0KPiAtICAgICAgICAgICAgICAgICAgICAg ICk7DQo+IC0gIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gLSAgICAvLw0KPiAtICAgIC8v IEVycm9yIGhhbmRsaW5nIGNvZGUgdG8gcHJldmVudCBtYWxpY2lvdXMgY29kZSB0byBob2xkIHRo aXMgZmlsZSB0byBibG9jaw0KPiBjYXBzdWxlIG9uIGRpc2sNCj4gLSAgICAvLw0KPiAtICAgIFRl bXBDb2RGaWxlLT5EZWxldGUoVGVtcENvZEZpbGUpOw0KPiAtICB9DQo+IC0gIFN0YXR1cyA9IFJv b3REaXItPk9wZW4oDQo+IC0gICAgICAgICAgICAgICAgICAgICAgUm9vdERpciwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICAmVGVtcENvZEZpbGUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAg KENIQVIxNiAqKVBjZEdldFB0cihQY2RDb0RSZWxvY2F0aW9uRmlsZU5hbWUpLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8IEVGSV9GSUxFX01PREVfV1JJVEUg fA0KPiBFRklfRklMRV9NT0RFX0NSRUFURSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAwDQo+ IC0gICAgICAgICAgICAgICAgICAgICAgKTsNCj4gLSAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7 DQo+IC0gICAgREVCVUcoKERFQlVHX0VSUk9SLCAiUmVsb2NhdGVDYXBzdWxlOiBPcGVuIFRlbUNv RC50bXANCj4gZXJyb3IuICV4XG4iLCBTdGF0dXMpKTsNCj4gLSAgICBnb3RvIEVYSVQ7DQo+IC0g IH0NCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBBbHdheXMgd3JpdGUgYXQgdGhlIGJlZ2luaW5nIG9m IFRlbXBDYXAgZmlsZQ0KPiAtICAvLw0KPiAtICBEYXRhU2l6ZSA9IChVSU5UTikgVGVtcENvZEZp bGVTaXplOw0KPiAtICBTdGF0dXMgPSBUZW1wQ29kRmlsZS0+V3JpdGUoDQo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgIFRlbXBDb2RGaWxlLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAmRGF0YVNpemUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVEYXRhQnVm DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+IC0gIGlmIChFRklfRVJST1IoU3Rh dHVzKSkgew0KPiAtICAgIERFQlVHKChERUJVR19FUlJPUiwgIlJlbG9jYXRlQ2Fwc3VsZTogV3Jp dGUgVGVtQ29ELnRtcA0KPiBlcnJvci4gJXhcbiIsIFN0YXR1cykpOw0KPiAtICAgIGdvdG8gRVhJ VDsNCj4gLSAgfQ0KPiAtDQo+IC0gIGlmIChEYXRhU2l6ZSAhPSBUZW1wQ29kRmlsZVNpemUpIHsN Cj4gLSAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4g LSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIFNhdmUgQ2Fwc3VsZSBPbiBEaXNrIHJlbG9jYXRp b24gaW5mbyB0byAiQ29kUmVsb2NhdGlvbkluZm8iIFZhcg0KPiAtICAvLyBJdCBpcyB1c2VkIGlu IG5leHQgcmVib290IGJ5IFRDQg0KPiAtICAvLw0KPiAtICBSZWxvY2F0aW9uSW5mbyA9IFRSVUU7 DQo+IC0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUoDQo+IC0gICAgICAgICAgICAgICAgICAg Q09EX1JFTE9DQVRJT05fSU5GT19WQVJfTkFNRSwNCj4gLSAgICAgICAgICAgICAgICAgICAmZ0Vm aUNhcHN1bGVWZW5kb3JHdWlkLA0KPiAtICAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9O T05fVk9MQVRJTEUgfA0KPiBFRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNTLA0KPiAtICAg ICAgICAgICAgICAgICAgIHNpemVvZiAoQk9PTEVBTiksDQo+IC0gICAgICAgICAgICAgICAgICAg JlJlbG9jYXRpb25JbmZvDQo+IC0gICAgICAgICAgICAgICAgICAgKTsNCj4gLSAgLy8NCj4gLSAg Ly8gU2F2ZSB0aGUgTG9hZE9wdGlvbk51bWJlciBvZiB0aGUgYm9vdCBvcHRpb24sIHdoZXJlIHRo ZSBjYXBzdWxlIGlzDQo+IHJlbG9jYXRlZCwNCj4gLSAgLy8gaW50byAiQ29kUmVsb2NhdGlvbkxv YWRPcHRpb24iIHZhci4gSXQgaXMgdXNlZCBpbiBuZXh0IHJlYm9vdCBhZnRlcg0KPiBjYXBzdWxl IGlzDQo+IC0gIC8vIHVwZGF0ZWQgb3V0IG9mIFRDQiB0byByZW1vdmUgdGhlIFRlbXBDb0RGaWxl Lg0KPiAtICAvLw0KPiAtICBTdGF0dXMgPSBnUlQtPlNldFZhcmlhYmxlKA0KPiAtICAgICAgICAg ICAgICAgICAgIENPRF9SRUxPQ0FUSU9OX0xPQURfT1BUSU9OX1ZBUl9OQU1FLA0KPiAtICAgICAg ICAgICAgICAgICAgICZnRWZpQ2Fwc3VsZVZlbmRvckd1aWQsDQo+IC0gICAgICAgICAgICAgICAg ICAgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8DQo+IEVGSV9WQVJJQUJMRV9CT09UU0VSVklD RV9BQ0NFU1MsDQo+IC0gICAgICAgICAgICAgICAgICAgc2l6ZW9mIChVSU5UMTYpLA0KPiAtICAg ICAgICAgICAgICAgICAgICZMb2FkT3B0aW9uTnVtYmVyDQo+IC0gICAgICAgICAgICAgICAgICAg KTsNCj4gLQ0KPiAtRVhJVDoNCj4gLQ0KPiAtICBpZiAoQ2Fwc3VsZURhdGFCdWYgIT0gTlVMTCkg ew0KPiAtICAgIEZyZWVQb29sKENhcHN1bGVEYXRhQnVmKTsNCj4gLSAgfQ0KPiAtDQo+IC0gIGlm IChDYXBzdWxlT25EaXNrQnVmICE9IE5VTEwpIHsNCj4gLSAgICAvLw0KPiAtICAgIC8vIEZyZWUg cmVzb3VyY2VzIGFsbG9jYXRlZCBieSBDb2RMaWJHZXRBbGxDYXBzdWxlT25EaXNrDQo+IC0gICAg Ly8NCj4gLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlT25EaXNrTnVtOyBJbmRl eCsrICkgew0KPiAtICAgICAgRnJlZVBvb2woQ2Fwc3VsZU9uRGlza0J1ZltJbmRleF0uSW1hZ2VB ZGRyZXNzKTsNCj4gLSAgICAgIEZyZWVQb29sKENhcHN1bGVPbkRpc2tCdWZbSW5kZXhdLkZpbGVJ bmZvKTsNCj4gLSAgICB9DQo+IC0gICAgRnJlZVBvb2woQ2Fwc3VsZU9uRGlza0J1Zik7DQo+IC0g IH0NCj4gLQ0KPiAtICBpZiAoVGVtcENvZEZpbGUgIT0gTlVMTCkgew0KPiAtICAgIGlmIChFRklf RVJST1IoU3RhdHVzKSkgew0KPiAtICAgICAgVGVtcENvZEZpbGUtPkRlbGV0ZSAoVGVtcENvZEZp bGUpOw0KPiAtICAgIH0gZWxzZSB7DQo+IC0gICAgICBUZW1wQ29kRmlsZS0+Q2xvc2UgKFRlbXBD b2RGaWxlKTsNCj4gLSAgICB9DQo+IC0gIH0NCj4gLQ0KPiAtICBpZiAoUm9vdERpciAhPSBOVUxM KSB7DQo+IC0gICAgUm9vdERpci0+Q2xvc2UgKFJvb3REaXIpOw0KPiAtICB9DQo+IC0NCj4gLSAg cmV0dXJuIFN0YXR1czsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gIEZvciB0aGUgcGxhdGZvcm1z IHRoYXQgc3VwcG9ydCBDYXBzdWxlIEluIFJhbSwgcmV1c2UgdGhlIENhcHN1bGUgSW4gUmFtIHRv DQo+IGRlbGl2ZXIgY2Fwc3VsZS4NCj4gLSAgUmVsb2NhdGUgQ2Fwc3VsZSBPbiBEaXNrIHRvIG1l bW9yeSBhbmQgY2FsbCBVcGRhdGVDYXBzdWxlKCkuDQo+IC0gIERldmljZSBlbnVtZXJhdGlvbiBs aWtlIFVTQiBjb3N0cyB0aW1lLCB1c2VyIGNhbiBpbnB1dCBNYXhSZXRyeSB0byB0ZWxsDQo+IGZ1 bmN0aW9uIHRvIHJldHJ5Lg0KPiAtICBGdW5jdGlvbiB3aWxsIHN0YWxsIDEwMG1zIGJldHdlZW4g ZWFjaCByZXRyeS4NCj4gLQ0KPiAtICBAcGFyYW1baW5dICAgIE1heFJldHJ5ICAgICAgICAgICAg IE1heCBDb25uZWN0aW9uIFJldHJ5LiBTdGFsbCAxMDBtcyBiZXR3ZWVuDQo+IGVhY2ggY29ubmVj dGlvbiB0cnkgdG8gZW5zdXJlDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGV2aWNlcyBsaWtlIFVTQiBjYW4gZ2V0IGVudW1lcmF0ZWQuDQo+IC0NCj4gLSAgQHJldHZh bCBFRklfU1VDQ0VTUyAgIERlbGl2ZXIgY2Fwc3VsZSB0aHJvdWdoIENhcHN1bGUgSW4gUmFtIHN1 Y2Nlc3NmdWxseS4NCj4gLQ0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+IC1SZWxvY2F0ZUNhcHN1 bGVUb1JhbSAoDQo+IC0gIFVJTlROICAgIE1heFJldHJ5DQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAtICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICBDYXBzdWxlT25EaXNrTnVtOw0KPiAtICBJTUFHRV9JTkZPICAgICAgICAg ICAgICAgICAgICAqQ2Fwc3VsZU9uRGlza0J1ZjsNCj4gLSAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgSGFuZGxlOw0KPiAtICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAqQmxv Y2tEZXNjcmlwdG9yczsNCj4gLSAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKipDYXBz dWxlQnVmZmVyOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZVNp emU7DQo+IC0gIEVGSV9DQVBTVUxFX0hFQURFUiAgICAgICAgICAgICpGaWxlTmFtZUNhcHN1bGU7 DQo+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiAtICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgICAqU3RyaW5nQnVmOw0KPiAtICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICBTdHJpbmdTaXplOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICBUb3RhbFN0cmluZ1NpemU7DQo+IC0NCj4gLSAgQ2Fwc3VsZU9uRGlza0J1ZiA9IE5VTEw7 DQo+IC0gIEJsb2NrRGVzY3JpcHRvcnMgPSBOVUxMOw0KPiAtICBDYXBzdWxlQnVmZmVyICAgID0g TlVMTDsNCj4gLSAgQ2Fwc3VsZVNpemUgICAgICA9IE5VTEw7DQo+IC0gIEZpbGVOYW1lQ2Fwc3Vs ZSAgPSBOVUxMOw0KPiAtICBUb3RhbFN0cmluZ1NpemUgID0gMDsNCj4gLQ0KPiAtICAvLw0KPiAt ICAvLyAxLiBMb2FkIGFsbCBDYXBzdWxlIE9uIERpc2tzIGludG8gbWVtb3J5DQo+IC0gIC8vDQo+ IC0gIFN0YXR1cyA9IEdldEFsbENhcHN1bGVPbkRpc2sgKE1heFJldHJ5LCAmQ2Fwc3VsZU9uRGlz a0J1ZiwNCj4gJkNhcHN1bGVPbkRpc2tOdW0sICZIYW5kbGUsIE5VTEwpOw0KPiAtICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpIHx8IENhcHN1bGVPbkRpc2tOdW0gPT0gMCkgew0KPiAtICAgIERFQlVH ICgoREVCVUdfRVJST1IsICJHZXRBbGxDYXBzdWxlT25EaXNrIFN0YXR1cyAtIDB4JXhcbiIsIFN0 YXR1cykpOw0KPiAtICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiAtICB9DQo+IC0NCj4gLSAg Ly8NCj4gLSAgLy8gMi4gQWRkIGEgY2Fwc3VsZSBmb3IgQ2Fwc3VsZSBmaWxlIG5hbWUgc3RyaW5n cw0KPiAtICAvLw0KPiAtICBDYXBzdWxlQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoKENhcHN1 bGVPbkRpc2tOdW0gKyAxKSAqIHNpemVvZiAoVk9JRA0KPiAqKSk7DQo+IC0gIGlmIChDYXBzdWxl QnVmZmVyID09IE5VTEwpIHsNCj4gLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbCB0byBh bGxvY2F0ZSBtZW1vcnkgZm9yIGNhcHN1bGVzLlxuIikpOw0KPiAtICAgIHJldHVybiBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gLSAgfQ0KPiAtDQo+IC0gIENhcHN1bGVTaXplID0gQWxsb2NhdGVa ZXJvUG9vbCAoKENhcHN1bGVPbkRpc2tOdW0gKyAxKSAqIHNpemVvZiAoVUlOVE4pKTsNCj4gLSAg aWYgKENhcHN1bGVTaXplID09IE5VTEwpIHsNCj4gLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi RmFpbCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNhcHN1bGVzLlxuIikpOw0KPiAtICAgIEZyZWVQ b29sIChDYXBzdWxlQnVmZmVyKTsNCj4gLSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQo+IC0gIH0NCj4gLQ0KPiAtICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlT25EaXNr TnVtOyBJbmRleCsrKSB7DQo+IC0gICAgQ2Fwc3VsZUJ1ZmZlcltJbmRleF0gPSAoVk9JRCAqKShV SU5UTikNCj4gQ2Fwc3VsZU9uRGlza0J1ZltJbmRleF0uSW1hZ2VBZGRyZXNzOw0KPiAtICAgIENh cHN1bGVTaXplW0luZGV4XSA9IChVSU5UTikgQ2Fwc3VsZU9uRGlza0J1ZltJbmRleF0uRmlsZUlu Zm8tPkZpbGVTaXplOw0KPiAtICAgIFRvdGFsU3RyaW5nU2l6ZSArPSBTdHJTaXplIChDYXBzdWxl T25EaXNrQnVmW0luZGV4XS5GaWxlSW5mby0+RmlsZU5hbWUpOw0KPiAtICB9DQo+IC0NCj4gLSAg RmlsZU5hbWVDYXBzdWxlID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChFRklfQ0FQU1VMRV9I RUFERVIpICsNCj4gVG90YWxTdHJpbmdTaXplKTsNCj4gLSAgaWYgKEZpbGVOYW1lQ2Fwc3VsZSA9 PSBOVUxMKSB7DQo+IC0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZhaWwgdG8gYWxsb2NhdGUg bWVtb3J5IGZvciBuYW1lIGNhcHN1bGUuXG4iKSk7DQo+IC0gICAgRnJlZVBvb2wgKENhcHN1bGVC dWZmZXIpOw0KPiAtICAgIEZyZWVQb29sIChDYXBzdWxlU2l6ZSk7DQo+IC0gICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiAtICB9DQo+IC0NCj4gLSAgRmlsZU5hbWVDYXBzdWxlLT5D YXBzdWxlSW1hZ2VTaXplID0gKFVJTlQzMikgKHNpemVvZg0KPiAoRUZJX0NBUFNVTEVfSEVBREVS KSArIFRvdGFsU3RyaW5nU2l6ZSk7DQo+IC0gIEZpbGVOYW1lQ2Fwc3VsZS0+RmxhZ3MgPSBDQVBT VUxFX0ZMQUdTX1BFUlNJU1RfQUNST1NTX1JFU0VUOw0KPiAtICBGaWxlTmFtZUNhcHN1bGUtPkhl YWRlclNpemUgPSBzaXplb2YgKEVGSV9DQVBTVUxFX0hFQURFUik7DQo+IC0gIENvcHlHdWlkICgm KEZpbGVOYW1lQ2Fwc3VsZS0+Q2Fwc3VsZUd1aWQpLA0KPiAmZ0Vka2lpQ2Fwc3VsZU9uRGlza05h bWVHdWlkKTsNCj4gLQ0KPiAtICBTdHJpbmdCdWYgPSAoVUlOVDggKilGaWxlTmFtZUNhcHN1bGUg KyBGaWxlTmFtZUNhcHN1bGUtPkhlYWRlclNpemU7DQo+IC0gIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IENhcHN1bGVPbkRpc2tOdW07IEluZGV4ICsrKSB7DQo+IC0gICAgU3RyaW5nU2l6ZSA9IFN0 clNpemUgKENhcHN1bGVPbkRpc2tCdWZbSW5kZXhdLkZpbGVJbmZvLT5GaWxlTmFtZSk7DQo+IC0g ICAgQ29weU1lbSAoU3RyaW5nQnVmLCBDYXBzdWxlT25EaXNrQnVmW0luZGV4XS5GaWxlSW5mby0+ RmlsZU5hbWUsDQo+IFN0cmluZ1NpemUpOw0KPiAtICAgIFN0cmluZ0J1ZiArPSBTdHJpbmdTaXpl Ow0KPiAtICB9DQo+IC0NCj4gLSAgQ2Fwc3VsZUJ1ZmZlcltDYXBzdWxlT25EaXNrTnVtXSA9IEZp bGVOYW1lQ2Fwc3VsZTsNCj4gLSAgQ2Fwc3VsZVNpemVbQ2Fwc3VsZU9uRGlza051bV0gPSBUb3Rh bFN0cmluZ1NpemUgKyBzaXplb2YNCj4gKEVGSV9DQVBTVUxFX0hFQURFUik7DQo+IC0NCj4gLSAg Ly8NCj4gLSAgLy8gMy4gQnVpbGQgR2F0aGVyIGxpc3QgZm9yIHRoZSBjYXBzdWxlcw0KPiAtICAv Lw0KPiAtICBTdGF0dXMgPSBCdWlsZEdhdGhlckxpc3QgKENhcHN1bGVCdWZmZXIsIENhcHN1bGVT aXplLCBDYXBzdWxlT25EaXNrTnVtICsNCj4gMSwgJkJsb2NrRGVzY3JpcHRvcnMpOw0KPiAtICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IEJsb2NrRGVzY3JpcHRvcnMgPT0gTlVMTCkgew0KPiAt ICAgIEZyZWVQb29sIChDYXBzdWxlQnVmZmVyKTsNCj4gLSAgICBGcmVlUG9vbCAoQ2Fwc3VsZVNp emUpOw0KPiAtICAgIEZyZWVQb29sIChGaWxlTmFtZUNhcHN1bGUpOw0KPiAtICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gLSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIDQuIENh bGwgVXBkYXRlQ2Fwc3VsZSgpIHNlcnZpY2UNCj4gLSAgLy8NCj4gLSAgU3RhdHVzID0gZ1JULT5V cGRhdGVDYXBzdWxlKChFRklfQ0FQU1VMRV9IRUFERVIgKiopIENhcHN1bGVCdWZmZXIsDQo+IENh cHN1bGVPbkRpc2tOdW0gKyAxLCAoVUlOVE4pIEJsb2NrRGVzY3JpcHRvcnMpOw0KPiAtDQo+IC0g IHJldHVybiBTdGF0dXM7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBSZWxvY2F0ZSBDYXBzdWxl IG9uIERpc2sgZnJvbSBFRkkgc3lzdGVtIHBhcnRpdGlvbi4NCj4gLQ0KPiAtICBUd28gc29sdXRp b24gdG8gZGVsaXZlciBDYXBzdWxlIE9uIERpc2s6DQo+IC0gIFNvbHV0aW9uIEE6IElmIFBjZENh cHN1bGVJblJhbVN1cHBvcnQgaXMgZW5hYmxlZCwgcmVsb2NhdGUgQ2Fwc3VsZSBPbg0KPiBEaXNr IHRvIG1lbW9yeSBhbmQgY2FsbCBVcGRhdGVDYXBzdWxlKCkuDQo+IC0gIFNvbHV0aW9uIEI6IElm IFBjZENhcHN1bGVJblJhbVN1cHBvcnQgaXMgZGlzYWJsZWQsIHJlbG9jYXRlIENhcHN1bGUgT24N Cj4gRGlzayB0byBhIHBsYXRmb3JtLXNwZWNpZmljIE5WIHN0b3JhZ2UNCj4gLSAgZGV2aWNlIHdp dGggQmxvY2tJbyBwcm90b2NvbC4NCj4gLQ0KPiAtICBEZXZpY2UgZW51bWVyYXRpb24gbGlrZSBV U0IgY29zdHMgdGltZSwgdXNlciBjYW4gaW5wdXQgTWF4UmV0cnkgdG8gdGVsbA0KPiBmdW5jdGlv biB0byByZXRyeS4NCj4gLSAgRnVuY3Rpb24gd2lsbCBzdGFsbCAxMDBtcyBiZXR3ZWVuIGVhY2gg cmV0cnkuDQo+IC0NCj4gLSAgU2lkZSBFZmZlY3RzOg0KPiAtICAgIENhcHN1bGUgRGVsaXZlcnkg U3VwcG9ydGVkIEZsYWcgaW4gT3NJbmRpY2F0aW9uIHZhcmlhYmxlIGFuZCBCb290TmV4dA0KPiB2 YXJpYWJsZSB3aWxsIGJlIGNsZWFyZWQuDQo+IC0gICAgU29sdXRpb24gQjogQ29udGVudCBjb3Jy dXB0aW9uLiBCbG9jayBJTyB3cml0ZSBkaXJlY3RseSB0b3VjaGVzIGxvdyBsZXZlbA0KPiB3cml0 ZS4gT3JpZ25hbCBwYXJ0aXRpb25zLCBmaWxlDQo+IC0gIHN5c3RlbXMgb2YgdGhlIHJlbG9jYXRp b24gZGV2aWNlIHdpbGwgYmUgY29ycnVwdGVkLg0KPiAtDQo+IC0gIEBwYXJhbVtpbl0gICAgTWF4 UmV0cnkgICAgICAgICAgICAgTWF4IENvbm5lY3Rpb24gUmV0cnkuIFN0YWxsIDEwMG1zIGJldHdl ZW4NCj4gZWFjaCBjb25uZWN0aW9uIHRyeSB0byBlbnN1cmUNCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXZpY2VzIGxpa2UgVVNCIGNhbiBnZXQgZW51bWVyYXRlZC4g SW5wdXQgMCBtZWFucyBubw0KPiByZXRyeS4NCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgQ2Fwc3VsZSBvbiBEaXNrIGltYWdlcyBhcmUgc3VjY2Vzc2Z1bGx5IHJlbG9jYXRlZC4NCj4g LQ0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+IC1FRklBUEkNCj4gLUNvRFJlbG9jYXRlQ2Fwc3Vs ZSgNCj4gLSAgVUlOVE4gICAgIE1heFJldHJ5DQo+IC0gICkNCj4gLXsNCj4gLSAgaWYgKCFQY2RH ZXRCb29sIChQY2RDYXBzdWxlT25EaXNrU3VwcG9ydCkpIHsNCj4gLSAgICByZXR1cm4gRUZJX1VO U1VQUE9SVEVEOw0KPiAtICB9DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gQ2xlYXIgQ2Fwc3VsZU9u RGlzayBGbGFnIGZpcnN0bHkuDQo+IC0gIC8vDQo+IC0gIENvRENsZWFyQ2Fwc3VsZU9uRGlza0Zs YWcgKCk7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gSWYgQ2Fwc3VsZSBJbiBSYW0gaXMgc3VwcG9y dGVkLCBkZWxpdmVyeSBjYXBzdWxlcyB0aHJvdWdoIG1lbW9yeQ0KPiAtICAvLw0KPiAtICBpZiAo UGNkR2V0Qm9vbCAoUGNkQ2Fwc3VsZUluUmFtU3VwcG9ydCkpIHsNCj4gLSAgICBERUJVRyAoKERF QlVHX0lORk8sICJDYXBzdWxlIEluIFJhbSBpcyBzdXBwb3J0ZWQsIGNhbGwgZ1JULQ0KPiA+VXBk YXRlQ2Fwc3VsZSgpLlxuIikpOw0KPiAtICAgIHJldHVybiBSZWxvY2F0ZUNhcHN1bGVUb1JhbSAo TWF4UmV0cnkpOw0KPiAtICB9IGVsc2Ugew0KPiAtICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJl YWxsY29hdGUgYWxsIENhcHN1bGUgb24gRGlza3MgdG8gJXMgaW4NCj4gUm9vdERpci5cbiIsIChD SEFSMTYgKilQY2RHZXRQdHIoUGNkQ29EUmVsb2NhdGlvbkZpbGVOYW1lKSkpOw0KPiAtICAgIHJl dHVybiBSZWxvY2F0ZUNhcHN1bGVUb0Rpc2sgKE1heFJldHJ5KTsNCj4gLSAgfQ0KPiAtfQ0KPiAt DQo+IC0vKioNCj4gLSAgUmVtb3ZlIHRoZSB0ZW1wIGZpbGUgZnJvbSB0aGUgcm9vdCBvZiBFRkkg U3lzdGVtIFBhcnRpdGlvbi4NCj4gLSAgRGV2aWNlIGVudW1lcmF0aW9uIGxpa2UgVVNCIGNvc3Rz IHRpbWUsIHVzZXIgY2FuIGlucHV0IE1heFJldHJ5IHRvIHRlbGwNCj4gZnVuY3Rpb24gdG8gcmV0 cnkuDQo+IC0gIEZ1bmN0aW9uIHdpbGwgc3RhbGwgMTAwbXMgYmV0d2VlbiBlYWNoIHJldHJ5Lg0K PiAtDQo+IC0gIEBwYXJhbVtpbl0gICAgTWF4UmV0cnkgICAgICAgICAgICAgTWF4IENvbm5lY3Rp b24gUmV0cnkuIFN0YWxsIDEwMG1zIGJldHdlZW4NCj4gZWFjaCBjb25uZWN0aW9uIHRyeSB0byBl bnN1cmUNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzIGxp a2UgVVNCIGNhbiBnZXQgZW51bWVyYXRlZC4gSW5wdXQgMCBtZWFucyBubw0KPiByZXRyeS4NCj4g LQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgUmVtb3ZlIHRoZSB0ZW1wIGZpbGUgc3VjY2Vz c2Z1bGx5Lg0KPiAtDQo+IC0qKi8NCj4gLUVGSV9TVEFUVVMNCj4gLUVGSUFQSQ0KPiAtQ29EUmVt b3ZlVGVtcEZpbGUgKA0KPiAtICBVSU5UTiAgICBNYXhSZXRyeQ0KPiAtICApDQo+IC17DQo+IC0g IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQo+IC0gIFVJTlQxNiAgICAgICAgICAg ICAgICAgICAgICAgICAgICpMb2FkT3B0aW9uTnVtYmVyOw0KPiAtICBFRklfU0lNUExFX0ZJTEVf U1lTVEVNX1BST1RPQ09MICAqRnM7DQo+IC0gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgIEZzSGFuZGxlOw0KPiAtICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICBSb290 RGlyOw0KPiAtICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICBUZW1wQ29kRmlsZTsN Cj4gLQ0KPiAtICBSb290RGlyICAgICA9IE5VTEw7DQo+IC0gIFRlbXBDb2RGaWxlID0gTlVMTDsN Cj4gLSAgRGF0YVNpemUgICAgPSBzaXplb2YoVUlOVDE2KTsNCj4gLQ0KPiAtICBMb2FkT3B0aW9u TnVtYmVyID0gQWxsb2NhdGVQb29sIChzaXplb2YoVUlOVDE2KSk7DQo+IC0gIGlmIChMb2FkT3B0 aW9uTnVtYmVyID09IE5VTEwpIHsNCj4gLSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQo+IC0gIH0NCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBDaGVjayBpZiBjYXBzdWxlIGZpbGVzIGFy ZSByZWxvY2F0ZWQNCj4gLSAgLy8NCj4gLSAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+ IC0gICAgICAgICAgICAgICAgICBDT0RfUkVMT0NBVElPTl9MT0FEX09QVElPTl9WQVJfTkFNRSwN Cj4gLSAgICAgICAgICAgICAgICAgICZnRWZpQ2Fwc3VsZVZlbmRvckd1aWQsDQo+IC0gICAgICAg ICAgICAgICAgICBOVUxMLA0KPiAtICAgICAgICAgICAgICAgICAgJkRhdGFTaXplLA0KPiAtICAg ICAgICAgICAgICAgICAgKFZPSUQgKilMb2FkT3B0aW9uTnVtYmVyDQo+IC0gICAgICAgICAgICAg ICAgICApOw0KPiAtICBpZiAoRUZJX0VSUk9SKFN0YXR1cykgfHwgRGF0YVNpemUgIT0gc2l6ZW9m KFVJTlQxNikpIHsNCj4gLSAgICBnb3RvIEVYSVQ7DQo+IC0gIH0NCj4gLQ0KPiAtICAvLw0KPiAt ICAvLyBHZXQgdGhlIEVGSSBmaWxlIHN5c3RlbSBmcm9tIHRoZSBib290IG9wdGlvbiB3aGVyZSB0 aGUgY2Fwc3VsZXMgYXJlDQo+IHJlbG9jYXRlZA0KPiAtICAvLw0KPiAtICBTdGF0dXMgPSBHZXRF ZmlTeXNQYXJ0aXRpb25Gcm9tQWN0aXZlQm9vdE9wdGlvbihNYXhSZXRyeSwNCj4gJkxvYWRPcHRp b25OdW1iZXIsICZGc0hhbmRsZSk7DQo+IC0gIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiAt ICAgIGdvdG8gRVhJVDsNCj4gLSAgfQ0KPiAtDQo+IC0gIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJv dG9jb2woRnNIYW5kbGUsDQo+ICZnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwgKFZP SUQgKiopJkZzKTsNCj4gLSAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAgZ290byBF WElUOw0KPiAtICB9DQo+IC0NCj4gLSAgU3RhdHVzID0gRnMtPk9wZW5Wb2x1bWUoRnMsICZSb290 RGlyKTsNCj4gLSAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAgZ290byBFWElUOw0K PiAtICB9DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gRGVsZXRlIHRoZSBUZW1wQ29ERmlsZQ0KPiAt ICAvLw0KPiAtICBTdGF0dXMgPSBSb290RGlyLT5PcGVuKA0KPiAtICAgICAgICAgICAgICAgICAg ICAgIFJvb3REaXIsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgJlRlbXBDb2RGaWxlLA0KPiAt ICAgICAgICAgICAgICAgICAgICAgIChDSEFSMTYgKilQY2RHZXRQdHIoUGNkQ29EUmVsb2NhdGlv bkZpbGVOYW1lKSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQg fCBFRklfRklMRV9NT0RFX1dSSVRFLA0KPiAtICAgICAgICAgICAgICAgICAgICAgIDANCj4gLSAg ICAgICAgICAgICAgICAgICAgICApOw0KPiAtICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4g LSAgICBnb3RvIEVYSVQ7DQo+IC0gIH0NCj4gLQ0KPiAtICBUZW1wQ29kRmlsZS0+RGVsZXRlKFRl bXBDb2RGaWxlKTsNCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBDbGVhciAiQ29EUmVsb2NhdGlvbkxv YWRPcHRpb24iIHZhcmlhYmxlDQo+IC0gIC8vDQo+IC0gIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFi bGUgKA0KPiAtICAgICAgICAgICAgIENPRF9SRUxPQ0FUSU9OX0xPQURfT1BUSU9OX1ZBUl9OQU1F LA0KPiAtICAgICAgICAgICAgICZnRWZpQ2Fwc3VsZVZlbmRvckd1aWQsDQo+IC0gICAgICAgICAg ICAgMCwNCj4gLSAgICAgICAgICAgICAwLA0KPiAtICAgICAgICAgICAgIE5VTEwNCj4gLSAgICAg ICAgICAgICApOw0KPiAtDQo+IC1FWElUOg0KPiAtICBpZiAoTG9hZE9wdGlvbk51bWJlciAhPSBO VUxMKSB7DQo+IC0gICAgRnJlZVBvb2wgKExvYWRPcHRpb25OdW1iZXIpOw0KPiAtICB9DQo+IC0N Cj4gLSAgaWYgKFJvb3REaXIgIT0gTlVMTCkgew0KPiAtICAgIFJvb3REaXItPkNsb3NlKFJvb3RE aXIpOw0KPiAtICB9DQo+IC0NCj4gLSAgcmV0dXJuIFN0YXR1czsNCj4gLX0NCj4gZGlmZiAtLWdp dCBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvQ2Fwc3VsZU9uRGlzay5o DQo+IGIvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9DYXBzdWxlT25EaXNr LmgNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDQzMDBlMzI3NzAuLjAwMDAw MDAwMDANCj4gLS0tIGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9DYXBz dWxlT25EaXNrLmgNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSw3NSArMCwwIEBADQo+IC0vKiog QGZpbGUNCj4gLSAgRGVmaW5lcyBzZXZlcmFsIGRhdGFzdHJ1Y3R1cmVzIHVzZWQgYnkgQ2Fwc3Vs ZSBPbiBEaXNrIGZlYXR1cmUuDQo+IC0gIFRoZXkgYXJlIG1haW5seSB1c2VkIGZvciBGQVQgZmls ZXMuDQo+IC0NCj4gLSAgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IC0gIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQo+IC0NCj4gLSoqLw0KPiAtDQo+IC0jaWZuZGVmIF9DQVBTVUxFU19P Tl9ESVNLX0hfDQo+IC0jZGVmaW5lIF9DQVBTVUxFU19PTl9ESVNLX0hfDQo+IC0NCj4gLSNpbmNs dWRlIDxVZWZpLmg+DQo+IC0jaW5jbHVkZSA8UGkvUGlNdWx0aVBoYXNlLmg+DQo+IC0NCj4gLSNp bmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gLSNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQo+IC0jaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+IC0jaW5jbHVkZSA8TGlicmFy eS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gLSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlS dW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPiAtI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRp bWVMaWIuaD4NCj4gLSNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gLSNpbmNs dWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gLSNpbmNsdWRlIDxMaWJyYXJ5 L0ZpbGVIYW5kbGVMaWIuaD4NCj4gLSNpbmNsdWRlIDxMaWJyYXJ5L0NhcHN1bGVMaWIuaD4NCj4g LSNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4NCj4gLSNpbmNsdWRlIDxMaWJyYXJ5 L1ByaW50TGliLmg+DQo+IC0jaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdE1hbmFnZXJMaWIuaD4N Cj4gLQ0KPiAtI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4gLSNpbmNs dWRlIDxQcm90b2NvbC9EaXNrSW8uaD4NCj4gLSNpbmNsdWRlIDxQcm90b2NvbC9CbG9ja0lvLmg+ DQo+IC0NCj4gLSNpbmNsdWRlIDxHdWlkL0NhcHN1bGVWZW5kb3IuaD4NCj4gLSNpbmNsdWRlIDxH dWlkL0ZpbGVJbmZvLmg+DQo+IC0jaW5jbHVkZSA8R3VpZC9HbG9iYWxWYXJpYWJsZS5oPg0KPiAt DQo+IC0vLw0KPiAtLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyB0aGUgcGFydCBvZiBGSUxFX0lO Rk9fRU5UUlkNCj4gLS8vDQo+IC0jZGVmaW5lIEZJTEVfSU5GT19TSUdOQVRVUkUgU0lHTkFUVVJF XzMyICgnRicsICdMJywgJ0knLCAnRicpDQo+IC0NCj4gLS8vDQo+IC0vLyBMb2FkT3B0aW9uTnVt YmVyIG9mIHRoZSBib290IG9wdGlvbiB3aGVyZSB0aGUgY2Fwc3VsZXMgaXMgcmVsb2NhdGVkLg0K PiAtLy8NCj4gLSNkZWZpbmUgQ09EX1JFTE9DQVRJT05fTE9BRF9PUFRJT05fVkFSX05BTUUNCj4g TCJDb2RSZWxvY2F0aW9uTG9hZE9wdGlvbiINCj4gLQ0KPiAtLy8NCj4gLS8vICgyMCAqICg2KzUr MikpKzEpIHVuaWNvZGUgY2hhcmFjdGVycyBmcm9tIEVGSSBGQVQgc3BlYyAoZG91YmxlZCBmb3IN Cj4gYnl0ZXMpDQo+IC0vLw0KPiAtI2RlZmluZSBNQVhfRklMRV9OQU1FX1NJWkUgICA1MjINCj4g LSNkZWZpbmUgTUFYX0ZJTEVfTkFNRV9MRU4gICAgKE1BWF9GSUxFX05BTUVfU0laRSAvIHNpemVv ZihDSEFSMTYpKQ0KPiAtI2RlZmluZSBNQVhfRklMRV9JTkZPX0xFTiAgICAoT0ZGU0VUX09GKEVG SV9GSUxFX0lORk8sIEZpbGVOYW1lKSArDQo+IE1BWF9GSUxFX05BTUVfTEVOKQ0KPiAtDQo+IC10 eXBlZGVmIHN0cnVjdCB7DQo+IC0gIFVJTlROICAgICAgICAgICBTaWduYXR1cmU7DQo+IC0gIExJ U1RfRU5UUlkgICAgICBMaW5rOyAgICAgICAgICAgICAgICAgIC8vLyAgTGlua2VkIGxpc3QgbWVt YmVycy4NCj4gLSAgRUZJX0ZJTEVfSU5GTyAgICpGaWxlSW5mbzsgICAgICAgICAgICAgLy8vICBQ b2ludGVyIHRvIHRoZSBGaWxlSW5mbyBzdHJ1Y3QgZm9yIHRoaXMgZmlsZQ0KPiBvciBOVUxMLg0K PiAtICBDSEFSMTYgICAgICAgICAgKkZpbGVOYW1lRmlyc3RQYXJ0OyAgICAvLy8gIFRleHQgdG8g dGhlIGxlZnQgb2YgcmlnaHQtbW9zdCBwZXJpb2QNCj4gaW4gdGhlIGZpbGUgbmFtZS4gU3RyaW5n IGlzIGNhcGl0aWFsaXplZA0KPiAtICBDSEFSMTYgICAgICAgICAgKkZpbGVOYW1lU2Vjb25kUGFy dDsgICAvLy8gIFRleHQgdG8gdGhlIHJpZ2h0IG9mIHJpZ2h0LW1vc3QNCj4gcGVyaW9kIGluIHRo ZSBmaWxlIG5hbWUuU3RyaW5nIGlzIGNhcGl0aWFsaXplZC4gTWF5YmUgTlVMTA0KPiAtfSBGSUxF X0lORk9fRU5UUlk7DQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0IHsNCj4gLSAgLy8NCj4gLSAgLy8g aW1hZ2UgYWRkcmVzcy4NCj4gLSAgLy8NCj4gLSAgVk9JRCAgICAgICAgICAgICAqSW1hZ2VBZGRy ZXNzOw0KPiAtICAvLw0KPiAtICAvLyBUaGUgZmlsZSBpbmZvIG9mIHRoZSBpbWFnZSBjb21lcyBm cm9tLg0KPiAtICAvLyAgaWYgRmlsZUluZm8gPT0gTlVMTC4gbWVhbnMgaW1hZ2UgZG9lcyBub3Qg Y29tZSBmcm9tIGZpbGUNCj4gLSAgLy8NCj4gLSAgRUZJX0ZJTEVfSU5GTyAgICAqRmlsZUluZm87 DQo+IC19IElNQUdFX0lORk87DQo+IC0NCj4gLSNlbmRpZiAvLyBfQ0FQU1VMRVNfT05fRElTS19I Xw0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9E eGVDYXBzdWxlTGliLmMNCj4gYi9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxlTGliRm1w L0R4ZUNhcHN1bGVMaWIuYw0KPiBpbmRleCA5NWFhOWRlMDg3Li5mMzhhYjY5ZTM4IDEwMDY0NA0K PiAtLS0gYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxlTGliRm1wL0R4ZUNhcHN1bGVM aWIuYw0KPiArKysgYi9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxlTGliRm1wL0R4ZUNh cHN1bGVMaWIuYw0KPiBAQCAtOCwxMSArOCwxMSBAQA0KPiANCj4gICAgU3VwcG9ydENhcHN1bGVJ bWFnZSgpLCBQcm9jZXNzQ2Fwc3VsZUltYWdlKCksIElzVmFsaWRDYXBzdWxlSGVhZGVyKCksDQo+ ICAgIFZhbGlkYXRlRm1wQ2Fwc3VsZSgpLCBhbmQgRGlzcGxheUNhcHN1bGVJbWFnZSgpIHJlY2Vp dmVzIHVudHJ1c3RlZCBpbnB1dA0KPiBhbmQNCj4gICAgcGVyZm9ybXMgYmFzaWMgdmFsaWRhdGlv bi4NCj4gDQo+IC0gIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTksIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2IC0gMjAx OCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAgICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gICoqLw0KPiAN Cj4gICNpbmNsdWRlIDxQaUR4ZS5oPg0KPiBAQCAtNzgsMjMgKzc4LDIxIEBAIFJlY29yZENhcHN1 bGVTdGF0dXNWYXJpYWJsZSAoDQo+ICAgIEBwYXJhbVtpbl0gQ2Fwc3VsZUhlYWRlciAgVGhlIGNh cHN1bGUgaW1hZ2UgaGVhZGVyDQo+ICAgIEBwYXJhbVtpbl0gQ2Fwc3VsZVN0YXR1cyAgVGhlIGNh cHN1bGUgcHJvY2VzcyBzdGF1dHMNCj4gICAgQHBhcmFtW2luXSBQYXlsb2FkSW5kZXggICBGTVAg cGF5bG9hZCBpbmRleA0KPiAgICBAcGFyYW1baW5dIEltYWdlSGVhZGVyICAgIEZNUCBpbWFnZSBo ZWFkZXINCj4gICAgQHBhcmFtW2luXSBGbXBEZXZpY2VQYXRoICBEZXZpY2VQYXRoIGFzc29jaWF0 ZWQgd2l0aCB0aGUgRk1QIHByb2R1Y2VyDQo+IC0gIEBwYXJhbVtpbl0gQ2FwRmlsZU5hbWUgICAg Q2Fwc3VsZSBmaWxlIG5hbWUNCj4gDQo+ICAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg VGhlIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlIGlzIHJlY29yZGVkLg0KPiAgICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTIE5vIHJlc291cmNlIHRvIHJlY29yZCB0aGUgY2Fwc3VsZSBzdGF0 dXMNCj4gdmFyaWFibGUuDQo+ICAqKi8NCj4gIEVGSV9TVEFUVVMNCj4gIFJlY29yZEZtcENhcHN1 bGVTdGF0dXNWYXJpYWJsZSAoDQo+ICAgIElOIEVGSV9DQVBTVUxFX0hFQURFUiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqQ2Fwc3VsZUhlYWRlciwNCj4gICAgSU4gRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVTdGF0dXMsDQo+ICAgIElOIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXlsb2FkSW5kZXgs DQo+ICAgIElOIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSU1BR0VfSEVBREVSDQo+ ICpJbWFnZUhlYWRlciwNCj4gLSAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAg ICAgICAgICAgICAgICpGbXBEZXZpY2VQYXRoLCBPUFRJT05BTA0KPiAtICBJTiBDSEFSMTYgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNhcEZpbGVOYW1lICAgIE9QVElP TkFMDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAg ICAqRm1wRGV2aWNlUGF0aCBPUFRJT05BTA0KPiAgICApOw0KPiANCj4gIC8qKg0KPiAgICBGdW5j dGlvbiBpbmRpY2F0ZSB0aGUgY3VycmVudCBjb21wbGV0aW9uIHByb2dyZXNzIG9mIHRoZSBmaXJt d2FyZQ0KPiAgICB1cGRhdGUuIFBsYXRmb3JtIG1heSBvdmVycmlkZSB3aXRoIG93biBzcGVjaWZp YyBwcm9ncmVzcyBmdW5jdGlvbi4NCj4gQEAgLTEwOSwyNiArMTA3LDEwIEBAIEVGSV9TVEFUVVMN Cj4gIEVGSUFQSQ0KPiAgVXBkYXRlSW1hZ2VQcm9ncmVzcyAoDQo+ICAgIElOIFVJTlROICBDb21w bGV0aW9uDQo+ICAgICk7DQo+IA0KPiAtLyoqDQo+IC0gIFJldHVybiBpZiB0aGlzIGNhcHN1bGUg aXMgYSBjYXBzdWxlIG5hbWUgY2Fwc3VsZSwgYmFzZWQgdXBvbg0KPiBDYXBzdWxlSGVhZGVyLg0K PiAtDQo+IC0gIEBwYXJhbVtpbl0gQ2Fwc3VsZUhlYWRlciBBIHBvaW50ZXIgdG8gRUZJX0NBUFNV TEVfSEVBREVSDQo+IC0NCj4gLSAgQHJldHZhbCBUUlVFICBJdCBpcyBhIGNhcHN1bGUgbmFtZSBj YXBzdWxlLg0KPiAtICBAcmV0dmFsIEZBTFNFIEl0IGlzIG5vdCBhIGNhcHN1bGUgbmFtZSBjYXBz dWxlLg0KPiAtKiovDQo+IC1CT09MRUFODQo+IC1Jc0NhcHN1bGVOYW1lQ2Fwc3VsZSAoDQo+IC0g IElOIEVGSV9DQVBTVUxFX0hFQURFUiAgICAgICAgICpDYXBzdWxlSGVhZGVyDQo+IC0gICkNCj4g LXsNCj4gLSAgcmV0dXJuIENvbXBhcmVHdWlkICgmQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUd1aWQs DQo+ICZnRWRraWlDYXBzdWxlT25EaXNrTmFtZUd1aWQpOw0KPiAtfQ0KPiAtDQo+ICAvKioNCj4g ICAgUmV0dXJuIGlmIHRoaXMgQ2Fwc3VsZUd1aWQgaXMgYSBGTVAgY2Fwc3VsZSBHVUlEIG9yIG5v dC4NCj4gDQo+ICAgIEBwYXJhbVtpbl0gQ2Fwc3VsZUd1aWQgQSBwb2ludGVyIHRvIEVGSV9HVUlE DQo+IA0KPiBAQCAtMTA1MCwyNSArMTAzMiwyMyBAQCBTdGFydEZtcEltYWdlICgNCj4gIH0NCj4g DQo+ICAvKioNCj4gICAgUmVjb3JkIEZNUCBjYXBzdWxlIHN0YXR1cy4NCj4gDQo+IC0gIEBwYXJh bVtpbl0gSGFuZGxlICAgICAgICAgQSBGTVAgaGFuZGxlLg0KPiArICBAcGFyYW1baW5dICBIYW5k bGUgICAgICAgIEEgRk1QIGhhbmRsZS4NCj4gICAgQHBhcmFtW2luXSBDYXBzdWxlSGVhZGVyICBU aGUgY2Fwc3VsZSBpbWFnZSBoZWFkZXINCj4gICAgQHBhcmFtW2luXSBDYXBzdWxlU3RhdHVzICBU aGUgY2Fwc3VsZSBwcm9jZXNzIHN0YXV0cw0KPiAgICBAcGFyYW1baW5dIFBheWxvYWRJbmRleCAg IEZNUCBwYXlsb2FkIGluZGV4DQo+ICAgIEBwYXJhbVtpbl0gSW1hZ2VIZWFkZXIgICAgRk1QIGlt YWdlIGhlYWRlcg0KPiAtICBAcGFyYW1baW5dIENhcEZpbGVOYW1lICAgIENhcHN1bGUgZmlsZSBu YW1lDQo+ICAqKi8NCj4gIFZPSUQNCj4gIFJlY29yZEZtcENhcHN1bGVTdGF0dXMgKA0KPiAgICBJ TiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlLCAg T1BUSU9OQUwNCj4gICAgSU4gRUZJX0NBUFNVTEVfSEVBREVSICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpDYXBzdWxlSGVhZGVyLA0KPiAgICBJTiBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZVN0YXR1cywNCj4gICAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBheWxvYWRJbmRleCwNCj4gLSAgSU4g RUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVINCj4gKkltYWdlSGVh ZGVyLA0KPiAtICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKkNhcEZpbGVOYW1lICAgT1BUSU9OQUwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfQ0FQU1VMRV9JTUFHRV9IRUFERVINCj4gKkltYWdlSGVhZGVyDQo+ICAgICkNCj4gIHsNCj4g ICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gICAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAgICAgICAgICAgICAgICpGbXBE ZXZpY2VQYXRoOw0KPiAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRm1wSW1hZ2VJbmZvRGVzY3JpcHRvclZlcjsNCj4gQEAgLTEwODgsMTIgKzEwNjgsMTEg QEAgUmVjb3JkRm1wQ2Fwc3VsZVN0YXR1cyAoDQo+ICAgIFJlY29yZEZtcENhcHN1bGVTdGF0dXNW YXJpYWJsZSAoDQo+ICAgICAgQ2Fwc3VsZUhlYWRlciwNCj4gICAgICBDYXBzdWxlU3RhdHVzLA0K PiAgICAgIFBheWxvYWRJbmRleCwNCj4gICAgICBJbWFnZUhlYWRlciwNCj4gLSAgICBGbXBEZXZp Y2VQYXRoLA0KPiAtICAgIENhcEZpbGVOYW1lDQo+ICsgICAgRm1wRGV2aWNlUGF0aA0KPiAgICAg ICk7DQo+IA0KPiAgICAvLw0KPiAgICAvLyBVcGRhdGUgY29ycmVzcG9uZGluZyBFU1JUIGVudHJ5 IExhc3RBdHRlbXAgU3RhdHVzDQo+ICAgIC8vDQo+IEBAIC0xMTM0LDExICsxMTEzLDEwIEBAIFJl Y29yZEZtcENhcHN1bGVTdGF0dXMgKA0KPiAgICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBT VUxFX0lNQUdFX0hFQURFUiBhcmUgY29ycmVjdC4NCj4gDQo+ICAgIFRoaXMgZnVuY3Rpb24gbmVl ZCBzdXBwb3J0IG5lc3RlZCBGTVAgY2Fwc3VsZS4NCj4gDQo+ICAgIEBwYXJhbVtpbl0gIENhcHN1 bGVIZWFkZXIgICAgICAgICBQb2ludHMgdG8gYSBjYXBzdWxlIGhlYWRlci4NCj4gLSAgQHBhcmFt W2luXSAgQ2FwRmlsZU5hbWUgICAgICAgICAgIENhcHN1bGUgZmlsZSBuYW1lLg0KPiAgICBAcGFy YW1bb3V0XSBSZXNldFJlcXVpcmVkICAgICAgICAgSW5kaWNhdGVzIHdoZXRoZXIgcmVzZXQgaXMg cmVxdWlyZWQgb3Igbm90Lg0KPiANCj4gICAgQHJldHZhbCBFRklfU1VDRVNTICAgICAgICAgICAg UHJvY2VzcyBDYXBzdWxlIEltYWdlIHN1Y2Nlc3NmdWxseS4NCj4gICAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgQ2Fwc3VsZSBpbWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQ0KPiBm aXJtd2FyZS4NCj4gICAgQHJldHZhbCBFRklfVk9MVU1FX0NPUlJVUFRFRCAgRlYgdm9sdW1lIGlu IHRoZSBjYXBzdWxlIGlzIGNvcnJ1cHRlZC4NCj4gQEAgLTExNDYsMTEgKzExMjQsMTAgQEAgUmVj b3JkRm1wQ2Fwc3VsZVN0YXR1cyAoDQo+ICAgIEByZXR2YWwgRUZJX05PVF9SRUFEWSAgICAgICAg IE5vIEZNUCBwcm90b2NvbCB0byBoYW5kbGUgdGhpcyBGTVAgY2Fwc3VsZS4NCj4gICoqLw0KPiAg RUZJX1NUQVRVUw0KPiAgUHJvY2Vzc0ZtcENhcHN1bGVJbWFnZSAoDQo+ICAgIElOIEVGSV9DQVBT VUxFX0hFQURFUiAgKkNhcHN1bGVIZWFkZXIsDQo+IC0gIElOIENIQVIxNiAgICAgICAgICAgICAg KkNhcEZpbGVOYW1lLCAgT1BUSU9OQUwNCj4gICAgT1VUIEJPT0xFQU4gICAgICAgICAgICAqUmVz ZXRSZXF1aXJlZCBPUFRJT05BTA0KPiAgICApDQo+ICB7DQo+ICAgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICAgIEVGSV9GSVJNV0FSRV9N QU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSDQo+ICpGbXBDYXBzdWxlSGVhZGVyOw0KPiBAQCAtMTE2 NiwxMSArMTE0MywxMSBAQCBQcm9jZXNzRm1wQ2Fwc3VsZUltYWdlICgNCj4gICAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MjsNCj4gICAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdFJlYWR5Ow0KPiAgICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJvcnQ7DQo+IA0K PiAgICBpZiAoIUlzRm1wQ2Fwc3VsZUd1aWQoJkNhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkKSkg ew0KPiAtICAgIHJldHVybiBQcm9jZXNzRm1wQ2Fwc3VsZUltYWdlICgoRUZJX0NBUFNVTEVfSEVB REVSDQo+ICopKChVSU5UTilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6 ZSksIENhcEZpbGVOYW1lLA0KPiBSZXNldFJlcXVpcmVkKTsNCj4gKyAgICByZXR1cm4gUHJvY2Vz c0ZtcENhcHN1bGVJbWFnZSAoKEVGSV9DQVBTVUxFX0hFQURFUg0KPiAqKSgoVUlOVE4pQ2Fwc3Vs ZUhlYWRlciArIENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUpLCBSZXNldFJlcXVpcmVkKTsNCj4g ICAgfQ0KPiANCj4gICAgTm90UmVhZHkgPSBGQUxTRTsNCj4gICAgQWJvcnQgPSBGQUxTRTsNCj4g DQo+IEBAIC0xMjQ4LDEyICsxMjI1LDExIEBAIFByb2Nlc3NGbXBDYXBzdWxlSW1hZ2UgKA0KPiAg ICAgICAgUmVjb3JkRm1wQ2Fwc3VsZVN0YXR1cyAoDQo+ICAgICAgICAgIE5VTEwsDQo+ICAgICAg ICAgIENhcHN1bGVIZWFkZXIsDQo+ICAgICAgICAgIEVGSV9OT1RfUkVBRFksDQo+ICAgICAgICAg IEluZGV4IC0gRm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3VudCwNCj4gLSAgICAg ICAgSW1hZ2VIZWFkZXIsDQo+IC0gICAgICAgIENhcEZpbGVOYW1lDQo+ICsgICAgICAgIEltYWdl SGVhZGVyDQo+ICAgICAgICAgICk7DQo+ICAgICAgICBjb250aW51ZTsNCj4gICAgICB9DQo+IA0K PiAgICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgyIDwgTnVtYmVyT2ZIYW5kbGVzOyBJbmRleDIr Kykgew0KPiBAQCAtMTI2MSwxMiArMTIzNywxMSBAQCBQcm9jZXNzRm1wQ2Fwc3VsZUltYWdlICgN Cj4gICAgICAgICAgUmVjb3JkRm1wQ2Fwc3VsZVN0YXR1cyAoDQo+ICAgICAgICAgICAgSGFuZGxl QnVmZmVyW0luZGV4Ml0sDQo+ICAgICAgICAgICAgQ2Fwc3VsZUhlYWRlciwNCj4gICAgICAgICAg ICBFRklfQUJPUlRFRCwNCj4gICAgICAgICAgICBJbmRleCAtIEZtcENhcHN1bGVIZWFkZXItPkVt YmVkZGVkRHJpdmVyQ291bnQsDQo+IC0gICAgICAgICAgSW1hZ2VIZWFkZXIsDQo+IC0gICAgICAg ICAgQ2FwRmlsZU5hbWUNCj4gKyAgICAgICAgICBJbWFnZUhlYWRlcg0KPiAgICAgICAgICAgICk7 DQo+ICAgICAgICAgIGNvbnRpbnVlOw0KPiAgICAgICAgfQ0KPiANCj4gICAgICAgIFN0YXR1cyA9 IFNldEZtcEltYWdlRGF0YSAoDQo+IEBAIC0xMjg1LDEyICsxMjYwLDExIEBAIFByb2Nlc3NGbXBD YXBzdWxlSW1hZ2UgKA0KPiAgICAgICAgUmVjb3JkRm1wQ2Fwc3VsZVN0YXR1cyAoDQo+ICAgICAg ICAgIEhhbmRsZUJ1ZmZlcltJbmRleDJdLA0KPiAgICAgICAgICBDYXBzdWxlSGVhZGVyLA0KPiAg ICAgICAgICBTdGF0dXMsDQo+ICAgICAgICAgIEluZGV4IC0gRm1wQ2Fwc3VsZUhlYWRlci0+RW1i ZWRkZWREcml2ZXJDb3VudCwNCj4gLSAgICAgICAgSW1hZ2VIZWFkZXIsDQo+IC0gICAgICAgIENh cEZpbGVOYW1lDQo+ICsgICAgICAgIEltYWdlSGVhZGVyDQo+ICAgICAgICAgICk7DQo+ICAgICAg fQ0KPiAgICAgIGlmIChIYW5kbGVCdWZmZXIgIT0gTlVMTCkgew0KPiAgICAgICAgRnJlZVBvb2wo SGFuZGxlQnVmZmVyKTsNCj4gICAgICB9DQo+IEBAIC0xNDM4LDE3ICsxNDEyLDEwIEBAIFN1cHBv cnRDYXBzdWxlSW1hZ2UgKA0KPiAgICAvLw0KPiAgICBpZiAoQ29tcGFyZUd1aWQgKCZnV2luZG93 c1V4Q2Fwc3VsZUd1aWQsICZDYXBzdWxlSGVhZGVyLQ0KPiA+Q2Fwc3VsZUd1aWQpKSB7DQo+ICAg ICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiAgICB9DQo+IA0KPiAtICAvLw0KPiAtICAvLyBDaGVj ayBjYXBzdWxlIGZpbGUgbmFtZSBjYXBzdWxlDQo+IC0gIC8vDQo+IC0gIGlmIChJc0NhcHN1bGVO YW1lQ2Fwc3VsZShDYXBzdWxlSGVhZGVyKSkgew0KPiAtICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gLSAgfQ0KPiAtDQo+ICAgIGlmIChJc0ZtcENhcHN1bGUoQ2Fwc3VsZUhlYWRlcikpIHsNCj4g ICAgICAvLw0KPiAgICAgIC8vIEZha2UgY2Fwc3VsZSBoZWFkZXIgaXMgdmFsaWQgY2FzZSBpbiBR dWVyeUNhcHN1bGVDcGFwYmlsaXRpZXMoKS4NCj4gICAgICAvLw0KPiAgICAgIGlmIChDYXBzdWxl SGVhZGVyLT5IZWFkZXJTaXplID09IENhcHN1bGVIZWFkZXItPkNhcHN1bGVJbWFnZVNpemUpIHsN Cj4gQEAgLTE0NjcsMTEgKzE0MzQsMTAgQEAgU3VwcG9ydENhcHN1bGVJbWFnZSAoDQo+ICAgIFRo ZSBmaXJtd2FyZSBpbXBsZW1lbnRzIHRvIHByb2Nlc3MgdGhlIGNhcHN1bGUgaW1hZ2UuDQo+IA0K PiAgICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4N Cj4gDQo+ICAgIEBwYXJhbVtpbl0gIENhcHN1bGVIZWFkZXIgICAgICAgICBQb2ludHMgdG8gYSBj YXBzdWxlIGhlYWRlci4NCj4gLSAgQHBhcmFtW2luXSAgQ2FwRmlsZU5hbWUgICAgICAgICAgIENh cHN1bGUgZmlsZSBuYW1lLg0KPiAgICBAcGFyYW1bb3V0XSBSZXNldFJlcXVpcmVkICAgICAgICAg SW5kaWNhdGVzIHdoZXRoZXIgcmVzZXQgaXMgcmVxdWlyZWQgb3Igbm90Lg0KPiANCj4gICAgQHJl dHZhbCBFRklfU1VDRVNTICAgICAgICAgICAgUHJvY2VzcyBDYXBzdWxlIEltYWdlIHN1Y2Nlc3Nm dWxseS4NCj4gICAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgQ2Fwc3VsZSBpbWFnZSBp cyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQ0KPiBmaXJtd2FyZS4NCj4gICAgQHJldHZhbCBFRklfVk9M VU1FX0NPUlJVUFRFRCAgRlYgdm9sdW1lIGluIHRoZSBjYXBzdWxlIGlzIGNvcnJ1cHRlZC4NCj4g QEAgLTE0NzksMTEgKzE0NDUsMTAgQEAgU3VwcG9ydENhcHN1bGVJbWFnZSAoDQo+ICAqKi8NCj4g IEVGSV9TVEFUVVMNCj4gIEVGSUFQSQ0KPiAgUHJvY2Vzc1RoaXNDYXBzdWxlSW1hZ2UgKA0KPiAg ICBJTiBFRklfQ0FQU1VMRV9IRUFERVIgICpDYXBzdWxlSGVhZGVyLA0KPiAtICBJTiBDSEFSMTYg ICAgICAgICAgICAgICpDYXBGaWxlTmFtZSwgIE9QVElPTkFMDQo+ICAgIE9VVCBCT09MRUFOICAg ICAgICAgICAgKlJlc2V0UmVxdWlyZWQgT1BUSU9OQUwNCj4gICAgKQ0KPiAgew0KPiAgICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gDQo+IEBAIC0xNTE3LDExICsxNDgy LDExIEBAIFByb2Nlc3NUaGlzQ2Fwc3VsZUltYWdlICgNCj4gDQo+ICAgICAgLy8NCj4gICAgICAv LyBQcm9jZXNzIEVGSSBGTVAgQ2Fwc3VsZQ0KPiAgICAgIC8vDQo+ICAgICAgREVCVUcoKERFQlVH X0lORk8sICJQcm9jZXNzRm1wQ2Fwc3VsZUltYWdlIC4uLlxuIikpOw0KPiAtICAgIFN0YXR1cyA9 IFByb2Nlc3NGbXBDYXBzdWxlSW1hZ2UoQ2Fwc3VsZUhlYWRlciwgQ2FwRmlsZU5hbWUsDQo+IFJl c2V0UmVxdWlyZWQpOw0KPiArICAgIFN0YXR1cyA9IFByb2Nlc3NGbXBDYXBzdWxlSW1hZ2UoQ2Fw c3VsZUhlYWRlciwgUmVzZXRSZXF1aXJlZCk7DQo+ICAgICAgREVCVUcoKERFQlVHX0lORk8sICJQ cm9jZXNzRm1wQ2Fwc3VsZUltYWdlIC0gJXJcbiIsIFN0YXR1cykpOw0KPiANCj4gICAgICByZXR1 cm4gU3RhdHVzOw0KPiAgICB9DQo+IA0KPiBAQCAtMTU0NCwxMSArMTUwOSwxMSBAQCBFRklfU1RB VFVTDQo+ICBFRklBUEkNCj4gIFByb2Nlc3NDYXBzdWxlSW1hZ2UgKA0KPiAgICBJTiBFRklfQ0FQ U1VMRV9IRUFERVIgICpDYXBzdWxlSGVhZGVyDQo+ICAgICkNCj4gIHsNCj4gLSAgcmV0dXJuIFBy b2Nlc3NUaGlzQ2Fwc3VsZUltYWdlIChDYXBzdWxlSGVhZGVyLCBOVUxMLCBOVUxMKTsNCj4gKyAg cmV0dXJuIFByb2Nlc3NUaGlzQ2Fwc3VsZUltYWdlIChDYXBzdWxlSGVhZGVyLCBOVUxMKTsNCj4g IH0NCj4gDQo+ICAvKioNCj4gICAgQ2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgd2hlbiB0aGUg RW5kT2ZEeGUgZXZlbnQgZ3JvdXAgaXMgc2lnbmFsZWQuDQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRl TW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9EeGVDYXBzdWxlTGliLmluZg0KPiBi L01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhlQ2Fwc3VsZUxpYi5pbmYN Cj4gaW5kZXggMDVkZTQyOTlmYi4uMTRjM2QxOWJjMyAxMDA2NDQNCj4gLS0tIGEvTWRlTW9kdWxl UGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9EeGVDYXBzdWxlTGliLmluZg0KPiArKysgYi9N ZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxlTGliRm1wL0R4ZUNhcHN1bGVMaWIuaW5mDQo+ IEBAIC0xLDExICsxLDExIEBADQo+ICAjIyBAZmlsZQ0KPiAgIyAgQ2Fwc3VsZSBsaWJyYXJ5IGlu c3RhbmNlIGZvciBEWEVfRFJJVkVSLg0KPiAgIw0KPiAgIyAgQ2Fwc3VsZSBsaWJyYXJ5IGluc3Rh bmNlIGZvciBEWEVfRFJJVkVSIG1vZHVsZSB0eXBlcy4NCj4gICMNCj4gLSMgIENvcHlyaWdodCAo YykgMjAxNiAtIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gKyMgIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gICMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ICAjDQo+ICAjIw0KPiANCj4gIFtEZWZpbmVzXQ0KPiBAQCAt MjcsMTIgKzI3LDEwIEBADQo+IA0KPiAgW1NvdXJjZXNdDQo+ICAgIER4ZUNhcHN1bGVMaWIuYw0K PiAgICBEeGVDYXBzdWxlUHJvY2Vzc0xpYi5jDQo+ICAgIER4ZUNhcHN1bGVSZXBvcnRMaWIuYw0K PiAtICBDYXBzdWxlT25EaXNrLmMNCj4gLSAgQ2Fwc3VsZU9uRGlzay5oDQo+IA0KPiAgW1BhY2th Z2VzXQ0KPiAgICBNZGVQa2cvTWRlUGtnLmRlYw0KPiAgICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxl UGtnLmRlYw0KPiANCj4gQEAgLTQ3LDEyICs0NSwxMCBAQA0KPiAgICBSZXBvcnRTdGF0dXNDb2Rl TGliDQo+ICAgIFByaW50TGliDQo+ICAgIEhvYkxpYg0KPiAgICBCbXBTdXBwb3J0TGliDQo+ICAg IERpc3BsYXlVcGRhdGVQcm9ncmVzc0xpYg0KPiAtICBGaWxlSGFuZGxlTGliDQo+IC0gIFVlZmlC b290TWFuYWdlckxpYg0KPiANCj4gIFtQY2RdDQo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RDYXBzdWxlTWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjDQo+ IENPTlNVTUVTDQo+IA0KPiBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkU3lzdGVt UmVib290QWZ0ZXJDYXBzdWxlUHJvY2Vzcw0KPiBGbGFnICAgICAgIyMgQ09OU1VNRVMNCj4gDQo+ IEBAIC02MSwzOCArNTcsMjMgQEANCj4gDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RDYXBzdWxlU3RhdHVzQ29kZVByb2Nlc3NDYXBzdWxlcw0KPiBFbmQgICAgICAjIyBDT05T VU1FUw0KPiANCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENhcHN1bGVTdGF0 dXNDb2RlVXBkYXRpbmdGaXJtd2ENCj4gcmUgICAgICAgICMjIENPTlNVTUVTDQo+IA0KPiBnRWZp TWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQ2Fwc3VsZVN0YXR1c0NvZGVVcGRhdGVGaXJt d2FyDQo+IGVTdWNjZXNzICAgIyMgQ09OU1VNRVMNCj4gDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RDYXBzdWxlU3RhdHVzQ29kZVVwZGF0ZUZpcm13YXINCj4gZUZhaWxlZCAg ICAjIyBDT05TVU1FUw0KPiANCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENh cHN1bGVTdGF0dXNDb2RlUmVzZXR0aW5nU3lzdGUNCj4gbSAgICAgICAgICMjIENPTlNVTUVTDQo+ IC0gIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDYXBzdWxlSW5SYW1TdXBwb3J0 DQo+ICMjIENPTlNVTUVTDQo+IC0gIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RD YXBzdWxlT25EaXNrU3VwcG9ydA0KPiAjIyBDT05TVU1FUw0KPiAtICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkQ29kUmVsb2NhdGlvbkRldlBhdGgNCj4gIyMgU09NRVRJTUVTX0NP TlNVTUVTDQo+IC0gIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDb0RSZWxvY2F0 aW9uRmlsZU5hbWUNCj4gIyMgQ09OU1VNRVMNCj4gDQo+ICBbUHJvdG9jb2xzXQ0KPiAgICBnRXNy dE1hbmFnZW1lbnRQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4g ICAgZ0VmaUZpcm13YXJlTWFuYWdlbWVudFByb3RvY29sR3VpZCAgICAgICAgICAgICMjIENPTlNV TUVTDQo+ICAgIGdFZGtpaVZhcmlhYmxlTG9ja1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAj IyBTT01FVElNRVNfQ09OU1VNRVMNCj4gICAgZ0Vka2lpRmlybXdhcmVNYW5hZ2VtZW50UHJvZ3Jl c3NQcm90b2NvbEd1aWQgICMjDQo+IFNPTUVUSU1FU19DT05TVU1FUw0KPiAtICBnRWZpU2ltcGxl RmlsZVN5c3RlbVByb3RvY29sR3VpZCAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVT DQo+IC0gIGdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAjIyBD T05TVU1FUw0KPiAtICBnRWZpRGlza0lvUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAg ICAgIyMgQ09OU1VNRVMNCj4gDQo+ICBbR3VpZHNdDQo+ICAgIGdFZmlGbXBDYXBzdWxlR3VpZCAg ICAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgIyMgR1VJRA0KPiAgICBn V2luZG93c1V4Q2Fwc3VsZUd1aWQgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNV TUVTICMjIEdVSUQNCj4gICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMjIFZhcmlhYmxlOkwiQ2Fw c3VsZU1heCINCj4gICAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICMjIFZhcmlhYmxlOkwiQ2Fwc3Vs ZU1heCINCj4gICAgZ0VmaUNhcHN1bGVSZXBvcnRHdWlkDQo+ICAgIGdFZmlDYXBzdWxlVmVuZG9y R3VpZCAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgIyMNCj4gVmFyaWFi bGU6TCJDYXBzdWxlVXBkYXRlRGF0YSINCj4gICAgZ0VmaUVuZE9mRHhlRXZlbnRHcm91cEd1aWQg ICAgICAgICAgICAgICMjIENPTlNVTUVTICMjIEV2ZW50DQo+IC0gIGdFZmlQYXJ0VHlwZVN5c3Rl bVBhcnRHdWlkICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gLSAgZ0VmaUNh cHN1bGVWZW5kb3JHdWlkICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUyAj Iw0KPiBWYXJpYWJsZTpMIkNvZFJlbG9jYXRpb25JbmZvIg0KPiAtICAjIyBTT01FVElNRVNfQ09O U1VNRVMgIyMgVmFyaWFibGU6TCJPc0luZGljYXRpb25zIg0KPiAtICAjIyBTT01FVElNRVNfUFJP RFVDRVMgIyMgVmFyaWFibGU6TCJPc0luZGljYXRpb25zIg0KPiAtICAjIyBTT01FVElNRVNfQ09O U1VNRVMgIyMgVmFyaWFibGU6TCJCb290TmV4dCINCj4gLSAgIyMgU09NRVRJTUVTX1BST0RVQ0VT ICMjIFZhcmlhYmxlOkwiQm9vdE5leHQiDQo+IC0gIGdFZmlHbG9iYWxWYXJpYWJsZUd1aWQNCj4g LSAgZ0Vka2lpQ2Fwc3VsZU9uRGlza05hbWVHdWlkICAgICAgICAgICAgICMjIFNPTUVUSU1FU19D T05TVU1FUyAjIw0KPiBHVUlEDQo+IA0KPiAgW0RlcGV4XQ0KPiAgICBnRWZpVmFyaWFibGVXcml0 ZUFyY2hQcm90b2NvbEd1aWQNCj4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5 L0R4ZUNhcHN1bGVMaWJGbXAvRHhlQ2Fwc3VsZVByb2Nlc3NMaWIuYw0KPiBiL01kZU1vZHVsZVBr Zy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhlQ2Fwc3VsZVByb2Nlc3NMaWIuYw0KPiBpbmRl eCA5YzljZDllMzczLi41ZTJkMmI4N2E4IDEwMDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvTGli cmFyeS9EeGVDYXBzdWxlTGliRm1wL0R4ZUNhcHN1bGVQcm9jZXNzTGliLmMNCj4gKysrIGIvTWRl TW9kdWxlUGtnL0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9EeGVDYXBzdWxlUHJvY2Vzc0xpYi5j DQo+IEBAIC03LDExICs3LDExIEBADQo+ICAgIGJ1ZmZlciBvdmVyZmxvdywgaW50ZWdlciBvdmVy Zmxvdy4NCj4gDQo+ICAgIFByb2Nlc3NDYXBzdWxlcygpLCBQcm9jZXNzVGhlc2VDYXBzdWxlcygp IHdpbGwgcmVjZWl2ZSB1bnRydXN0ZWQNCj4gICAgaW5wdXQgYW5kIGRvIGJhc2ljIHZhbGlkYXRp b24uDQo+IA0KPiAtICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAxNiAtIDIw MTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gICAgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gDQo+ICAqKi8NCj4g DQo+ICAjaW5jbHVkZSA8UGlEeGUuaD4NCj4gQEAgLTkwLDQ1ICs5MCwxNCBAQCBCT09MRUFODQo+ ICBJc1ZhbGlkQ2Fwc3VsZUhlYWRlciAoDQo+ICAgIElOIEVGSV9DQVBTVUxFX0hFQURFUiAgKkNh cHN1bGVIZWFkZXIsDQo+ICAgIElOIFVJTlQ2NCAgICAgICAgICAgICAgQ2Fwc3VsZVNpemUNCj4g ICAgKTsNCj4gDQo+IC0vKioNCj4gLSAgUmV0dXJuIGlmIHRoaXMgY2Fwc3VsZSBpcyBhIGNhcHN1 bGUgbmFtZSBjYXBzdWxlLCBiYXNlZCB1cG9uDQo+IENhcHN1bGVIZWFkZXIuDQo+IC0NCj4gLSAg QHBhcmFtW2luXSBDYXBzdWxlSGVhZGVyIEEgcG9pbnRlciB0byBFRklfQ0FQU1VMRV9IRUFERVIN Cj4gLQ0KPiAtICBAcmV0dmFsIFRSVUUgIEl0IGlzIGEgY2Fwc3VsZSBuYW1lIGNhcHN1bGUuDQo+ IC0gIEByZXR2YWwgRkFMU0UgSXQgaXMgbm90IGEgY2Fwc3VsZSBuYW1lIGNhcHN1bGUuDQo+IC0q Ki8NCj4gLUJPT0xFQU4NCj4gLUlzQ2Fwc3VsZU5hbWVDYXBzdWxlICgNCj4gLSAgSU4gRUZJX0NB UFNVTEVfSEVBREVSICAgICAgICAgKkNhcHN1bGVIZWFkZXINCj4gLSAgKTsNCj4gLQ0KPiAtLyoq DQo+IC0gIENoZWNrIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGNhcHN1bGUgbmFtZSBjYXBzdWxlLg0K PiAtICBJZiB0aGUgY2Fwc3VsZSBpcyB2YWlsZCwgcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNz IG9mIGVhY2ggY2Fwc3VsZSBuYW1lDQo+IHN0cmluZy4NCj4gLQ0KPiAtICBAcGFyYW1baW5dICBD YXBzdWxlSGVhZGVyICAgUG9pbnRlciB0byB0aGUgY2Fwc3VsZSBoZWFkZXIgb2YgYSBjYXBzdWxl DQo+IG5hbWUgY2Fwc3VsZS4NCj4gLSAgQHBhcmFtW291dF0gQ2Fwc3VsZU5hbWVOdW0gIE51bWJl ciBvZiBjYXBzdWxlIG5hbWUuDQo+IC0NCj4gLSAgQHJldHZhbCBOVUxMICAgICAgICAgICAgICAg IENhcHN1bGUgbmFtZSBjYXBzdWxlIGlzIG5vdCB2YWxpZC4NCj4gLSAgQHJldHZhbCBDYXBzdWxl TmFtZUJ1ZiAgICAgIEFycmF5IG9mIGNhcHN1bGUgbmFtZSBwaHlzaWNhbCBhZGRyZXNzLg0KPiAt DQo+IC0qKi8NCj4gLUVGSV9QSFlTSUNBTF9BRERSRVNTICoNCj4gLVZhbGlkYXRlQ2Fwc3VsZU5h bWVDYXBzdWxlSW50ZWdyaXR5ICgNCj4gLSAgSU4gIEVGSV9DQVBTVUxFX0hFQURFUiAgICAgICAg ICAgICpDYXBzdWxlSGVhZGVyLA0KPiAtICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgKkNhcHN1bGVOYW1lTnVtDQo+IC0gICk7DQo+IC0NCj4gIGV4dGVybiBCT09MRUFOICAgICAg ICAgICAgICAgICAgIG1EeGVDYXBzdWxlTGliRW5kT2ZEeGU7DQo+ICBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgICBtTmVlZFJlc2V0ID0gRkFMU0U7DQo+IA0KPiAgVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICoqbUNhcHN1bGVQdHI7DQo+IC1DSEFSMTYgICAgICAgICAgICAgICAg ICAgICAgKiptQ2Fwc3VsZU5hbWVQdHI7DQo+ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg Km1DYXBzdWxlU3RhdHVzQXJyYXk7DQo+ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgbUNh cHN1bGVUb3RhbE51bWJlcjsNCj4gDQo+ICAvKioNCj4gICAgVGhlIGZpcm13YXJlIGltcGxlbWVu dHMgdG8gcHJvY2VzcyB0aGUgY2Fwc3VsZSBpbWFnZS4NCj4gQEAgLTE0NSwxMSArMTE0LDEwIEBA IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBtQ2Fwc3VsZVRvdGFsTnVtYmVyOw0KPiAgKiov DQo+ICBFRklfU1RBVFVTDQo+ICBFRklBUEkNCj4gIFByb2Nlc3NUaGlzQ2Fwc3VsZUltYWdlICgN Cj4gICAgSU4gRUZJX0NBUFNVTEVfSEVBREVSICAqQ2Fwc3VsZUhlYWRlciwNCj4gLSAgSU4gQ0hB UjE2ICAgICAgICAgICAgICAqQ2FwRmlsZU5hbWUsICBPUFRJT05BTA0KPiAgICBPVVQgQk9PTEVB TiAgICAgICAgICAgICpSZXNldFJlcXVpcmVkIE9QVElPTkFMDQo+ICAgICk7DQo+IA0KPiAgLyoq DQo+ICAgIEZ1bmN0aW9uIGluZGljYXRlIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gcHJvZ3Jlc3Mg b2YgdGhlIGZpcm13YXJlDQo+IEBAIC0yMTUsMzYgKzE4MywyMCBAQCBJbml0Q2Fwc3VsZVB0ciAo DQo+ICAgIFZPSUQNCj4gICAgKQ0KPiAgew0KPiAgICBFRklfUEVJX0hPQl9QT0lOVEVSUyAgICAg ICAgSG9iUG9pbnRlcjsNCj4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K PiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgyOw0KPiAtICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXgzOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgQ2Fwc3VsZU5hbWVOdW1iZXI7DQo+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBD YXBzdWxlTmFtZVRvdGFsTnVtYmVyOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg Q2Fwc3VsZU5hbWVDYXBzdWxlVG90YWxOdW1iZXI7DQo+IC0gIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAqKkNhcHN1bGVOYW1lQ2Fwc3VsZVB0cjsNCj4gLSAgRUZJX1BIWVNJQ0FMX0FERFJF U1MgICAgICAgICpDYXBzdWxlTmFtZUFkZHJlc3M7DQo+IC0NCj4gLSAgQ2Fwc3VsZU5hbWVOdW1i ZXIgICAgICAgICAgICAgPSAwOw0KPiAtICBDYXBzdWxlTmFtZVRvdGFsTnVtYmVyICAgICAgICA9 IDA7DQo+IC0gIENhcHN1bGVOYW1lQ2Fwc3VsZVRvdGFsTnVtYmVyID0gMDsNCj4gLSAgQ2Fwc3Vs ZU5hbWVDYXBzdWxlUHRyICAgICAgICAgPSBOVUxMOw0KPiANCj4gICAgLy8NCj4gICAgLy8gRmlu ZCBhbGwgY2Fwc3VsZSBpbWFnZXMgZnJvbSBob2INCj4gICAgLy8NCj4gICAgSG9iUG9pbnRlci5S YXcgPSBHZXRIb2JMaXN0ICgpOw0KPiAgICB3aGlsZSAoKEhvYlBvaW50ZXIuUmF3ID0gR2V0TmV4 dEhvYiAoRUZJX0hPQl9UWVBFX1VFRklfQ0FQU1VMRSwNCj4gSG9iUG9pbnRlci5SYXcpKSAhPSBO VUxMKSB7DQo+ICAgICAgaWYgKCFJc1ZhbGlkQ2Fwc3VsZUhlYWRlcigoVk9JRCAqKShVSU5UTilI b2JQb2ludGVyLkNhcHN1bGUtDQo+ID5CYXNlQWRkcmVzcywgSG9iUG9pbnRlci5DYXBzdWxlLT5M ZW5ndGgpKSB7DQo+ICAgICAgICBIb2JQb2ludGVyLkhlYWRlci0+SG9iVHlwZSA9IEVGSV9IT0Jf VFlQRV9VTlVTRUQ7IC8vIE1hcmsgdGhpcw0KPiBob2IgYXMgaW52YWxpZA0KPiAgICAgIH0gZWxz ZSB7DQo+IC0gICAgICBpZiAoSXNDYXBzdWxlTmFtZUNhcHN1bGUoKFZPSUQgKikoVUlOVE4pSG9i UG9pbnRlci5DYXBzdWxlLQ0KPiA+QmFzZUFkZHJlc3MpKSB7DQo+IC0gICAgICAgIENhcHN1bGVO YW1lQ2Fwc3VsZVRvdGFsTnVtYmVyKys7DQo+IC0gICAgICB9IGVsc2Ugew0KPiAtICAgICAgICBt Q2Fwc3VsZVRvdGFsTnVtYmVyKys7DQo+IC0gICAgICB9DQo+ICsgICAgICBtQ2Fwc3VsZVRvdGFs TnVtYmVyKys7DQo+ICAgICAgfQ0KPiAgICAgIEhvYlBvaW50ZXIuUmF3ID0gR0VUX05FWFRfSE9C IChIb2JQb2ludGVyKTsNCj4gICAgfQ0KPiANCj4gICAgREVCVUcgKChERUJVR19JTkZPLCAibUNh cHN1bGVUb3RhbE51bWJlciAtIDB4JXhcbiIsDQo+IG1DYXBzdWxlVG90YWxOdW1iZXIpKTsNCj4g QEAgLTI3MCw3NiArMjIyLDE5IEBAIEluaXRDYXBzdWxlUHRyICgNCj4gICAgICBtQ2Fwc3VsZVRv dGFsTnVtYmVyID0gMDsNCj4gICAgICByZXR1cm4gOw0KPiAgICB9DQo+ICAgIFNldE1lbU4gKG1D YXBzdWxlU3RhdHVzQXJyYXksIHNpemVvZiAoRUZJX1NUQVRVUykgKg0KPiBtQ2Fwc3VsZVRvdGFs TnVtYmVyLCBFRklfTk9UX1JFQURZKTsNCj4gDQo+IC0gIGlmIChDYXBzdWxlTmFtZUNhcHN1bGVU b3RhbE51bWJlciAhPSAwKSB7DQo+IC0gICAgQ2Fwc3VsZU5hbWVDYXBzdWxlUHRyID0gIChWT0lE ICoqKSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFZPSUQgKikgKg0KPiBDYXBzdWxlTmFtZUNh cHN1bGVUb3RhbE51bWJlcik7DQo+IC0gICAgaWYgKENhcHN1bGVOYW1lQ2Fwc3VsZVB0ciA9PSBO VUxMKSB7DQo+IC0gICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWxsb2NhdGUgQ2Fwc3VsZU5h bWVDYXBzdWxlUHRyIGZhaWwhXG4iKSk7DQo+IC0gICAgICBGcmVlUG9vbCAobUNhcHN1bGVQdHIp Ow0KPiAtICAgICAgRnJlZVBvb2wgKG1DYXBzdWxlU3RhdHVzQXJyYXkpOw0KPiAtICAgICAgbUNh cHN1bGVQdHIgICAgICAgICA9IE5VTEw7DQo+IC0gICAgICBtQ2Fwc3VsZVN0YXR1c0FycmF5ID0g TlVMTDsNCj4gLSAgICAgIG1DYXBzdWxlVG90YWxOdW1iZXIgPSAwOw0KPiAtICAgICAgcmV0dXJu IDsNCj4gLSAgICB9DQo+IC0gIH0NCj4gLQ0KPiAgICAvLw0KPiAgICAvLyBGaW5kIGFsbCBjYXBz dWxlIGltYWdlcyBmcm9tIGhvYg0KPiAgICAvLw0KPiAgICBIb2JQb2ludGVyLlJhdyA9IEdldEhv Ykxpc3QgKCk7DQo+IC0gIEluZGV4ICA9IDA7DQo+IC0gIEluZGV4MiA9IDA7DQo+ICsgIEluZGV4 ID0gMDsNCj4gICAgd2hpbGUgKChIb2JQb2ludGVyLlJhdyA9IEdldE5leHRIb2IgKEVGSV9IT0Jf VFlQRV9VRUZJX0NBUFNVTEUsDQo+IEhvYlBvaW50ZXIuUmF3KSkgIT0gTlVMTCkgew0KPiAtICAg IGlmICghSXNDYXBzdWxlTmFtZUNhcHN1bGUgKChWT0lEICopIChVSU5UTikgSG9iUG9pbnRlci5D YXBzdWxlLQ0KPiA+QmFzZUFkZHJlc3MpKSB7DQo+IC0gICAgICBtQ2Fwc3VsZVB0ciBbSW5kZXgr K10gPSAoVk9JRCAqKSAoVUlOVE4pIEhvYlBvaW50ZXIuQ2Fwc3VsZS0NCj4gPkJhc2VBZGRyZXNz Ow0KPiAtICAgIH0gZWxzZSB7DQo+IC0gICAgICBDYXBzdWxlTmFtZUNhcHN1bGVQdHIgW0luZGV4 MisrXSA9IChWT0lEICopIChVSU5UTikNCj4gSG9iUG9pbnRlci5DYXBzdWxlLT5CYXNlQWRkcmVz czsNCj4gLSAgICB9DQo+ICsgICAgbUNhcHN1bGVQdHIgW0luZGV4KytdID0gKFZPSUQgKikgKFVJ TlROKSBIb2JQb2ludGVyLkNhcHN1bGUtDQo+ID5CYXNlQWRkcmVzczsNCj4gICAgICBIb2JQb2lu dGVyLlJhdyA9IEdFVF9ORVhUX0hPQiAoSG9iUG9pbnRlcik7DQo+ICAgIH0NCj4gLQ0KPiAtICAv Lw0KPiAtICAvLyBGaW5kIENhcHN1bGUgT24gRGlzayBOYW1lcw0KPiAtICAvLw0KPiAtICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlTmFtZUNhcHN1bGVUb3RhbE51bWJlcjsgSW5kZXgg KyspIHsNCj4gLSAgICBDYXBzdWxlTmFtZUFkZHJlc3MgPSBWYWxpZGF0ZUNhcHN1bGVOYW1lQ2Fw c3VsZUludGVncml0eQ0KPiAoQ2Fwc3VsZU5hbWVDYXBzdWxlUHRyW0luZGV4XSwgJkNhcHN1bGVO YW1lTnVtYmVyKTsNCj4gLSAgICBpZiAoQ2Fwc3VsZU5hbWVBZGRyZXNzICE9IE5VTEwgKSB7DQo+ IC0gICAgICBDYXBzdWxlTmFtZVRvdGFsTnVtYmVyICs9IENhcHN1bGVOYW1lTnVtYmVyOw0KPiAt ICAgIH0NCj4gLSAgfQ0KPiAtDQo+IC0gIGlmIChDYXBzdWxlTmFtZVRvdGFsTnVtYmVyID09IG1D YXBzdWxlVG90YWxOdW1iZXIpIHsNCj4gLSAgICBtQ2Fwc3VsZU5hbWVQdHIgPSAoQ0hBUjE2ICoq KSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKENIQVIxNiAqKSAqDQo+IG1DYXBzdWxlVG90YWxO dW1iZXIpOw0KPiAtICAgIGlmIChtQ2Fwc3VsZU5hbWVQdHIgPT0gTlVMTCkgew0KPiAtICAgICAg REVCVUcgKChERUJVR19FUlJPUiwgIkFsbG9jYXRlIG1DYXBzdWxlTmFtZVB0ciBmYWlsIVxuIikp Ow0KPiAtICAgICAgRnJlZVBvb2wgKG1DYXBzdWxlUHRyKTsNCj4gLSAgICAgIEZyZWVQb29sICht Q2Fwc3VsZVN0YXR1c0FycmF5KTsNCj4gLSAgICAgIEZyZWVQb29sIChDYXBzdWxlTmFtZUNhcHN1 bGVQdHIpOw0KPiAtICAgICAgbUNhcHN1bGVQdHIgICAgICAgICA9IE5VTEw7DQo+IC0gICAgICBt Q2Fwc3VsZVN0YXR1c0FycmF5ID0gTlVMTDsNCj4gLSAgICAgIG1DYXBzdWxlVG90YWxOdW1iZXIg PSAwOw0KPiAtICAgICAgcmV0dXJuIDsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICBmb3IgKEluZGV4 ID0gMCwgSW5kZXgzID0gMDsgSW5kZXggPCBDYXBzdWxlTmFtZUNhcHN1bGVUb3RhbE51bWJlcjsN Cj4gSW5kZXggKyspIHsNCj4gLSAgICAgIENhcHN1bGVOYW1lQWRkcmVzcyA9IFZhbGlkYXRlQ2Fw c3VsZU5hbWVDYXBzdWxlSW50ZWdyaXR5DQo+IChDYXBzdWxlTmFtZUNhcHN1bGVQdHJbSW5kZXhd LCAmQ2Fwc3VsZU5hbWVOdW1iZXIpOw0KPiAtICAgICAgaWYgKENhcHN1bGVOYW1lQWRkcmVzcyAh PSBOVUxMICkgew0KPiAtICAgICAgICBmb3IgKEluZGV4MiA9IDA7IEluZGV4MiA8IENhcHN1bGVO YW1lTnVtYmVyOyBJbmRleDIgKyspIHsNCj4gLSAgICAgICAgICBtQ2Fwc3VsZU5hbWVQdHJbSW5k ZXgzICsrXSA9IChDSEFSMTYgKikoVUlOVE4pDQo+IENhcHN1bGVOYW1lQWRkcmVzc1tJbmRleDJd Ow0KPiAtICAgICAgICB9DQo+IC0gICAgICB9DQo+IC0gICAgfQ0KPiAtICB9IGVsc2Ugew0KPiAt ICAgIG1DYXBzdWxlTmFtZVB0ciA9IE5VTEw7DQo+IC0gIH0NCj4gLQ0KPiAtICBpZiAoQ2Fwc3Vs ZU5hbWVDYXBzdWxlUHRyICE9IE5VTEwpIHsNCj4gLSAgICBGcmVlUG9vbCAoQ2Fwc3VsZU5hbWVD YXBzdWxlUHRyKTsNCj4gLSAgfQ0KPiAgfQ0KPiANCj4gIC8qKg0KPiAgICBUaGlzIGZ1bmN0aW9u IHJldHVybnMgaWYgYWxsIGNhcHN1bGUgaW1hZ2VzIGFyZSBwcm9jZXNzZWQuDQo+IA0KPiBAQCAt NDk5LDExICszOTQsMTAgQEAgUHJvY2Vzc1RoZXNlQ2Fwc3VsZXMgKA0KPiAgICBFRklfQ0FQU1VM RV9IRUFERVIgICAgICAgICAgKkNhcHN1bGVIZWFkZXI7DQo+ICAgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICBJbmRleDsNCj4gICAgRVNSVF9NQU5BR0VNRU5UX1BST1RPQ09MICAgICpFc3J0 TWFuYWdlbWVudDsNCj4gICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgIEVtYmVkZGVkRHJp dmVyQ291bnQ7DQo+ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICBSZXNldFJlcXVpcmVk Ow0KPiAtICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVOYW1lOw0KPiANCj4g ICAgUkVQT1JUX1NUQVRVU19DT0RFKEVGSV9QUk9HUkVTU19DT0RFLCAoRUZJX1NPRlRXQVJFIHwN Cj4gUGNkR2V0MzIoUGNkU3RhdHVzQ29kZVN1YkNsYXNzQ2Fwc3VsZSkgfA0KPiBQY2RHZXQzMihQ Y2RDYXBzdWxlU3RhdHVzQ29kZVByb2Nlc3NDYXBzdWxlc0JlZ2luKSkpOw0KPiANCj4gICAgaWYg KEZpcnN0Um91bmQpIHsNCj4gICAgICBJbml0Q2Fwc3VsZVB0ciAoKTsNCj4gQEAgLTUxMiwxMSAr NDA2LDEwIEBAIFByb2Nlc3NUaGVzZUNhcHN1bGVzICgNCj4gICAgaWYgKG1DYXBzdWxlVG90YWxO dW1iZXIgPT0gMCkgew0KPiAgICAgIC8vDQo+ICAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBob2Is IHNvIGhhZCBubyBlcnJvcnMuDQo+ICAgICAgLy8NCj4gICAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiV2UgY2FuIG5vdCBmaW5kIGNhcHN1bGUgZGF0YSBpbiBjYXBzdWxlIHVwZGF0ZQ0KPiBib290 IG1vZGUuXG4iKSk7DQo+IC0gICAgbU5lZWRSZXNldCA9IFRSVUU7DQo+ICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiAgICB9DQo+IA0KPiAgICBpZiAoQXJlQWxsSW1hZ2VzUHJvY2Vzc2VkICgp KSB7DQo+ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiBAQCAtNTM1LDE1ICs0MjgsMTQgQEAg UHJvY2Vzc1RoZXNlQ2Fwc3VsZXMgKA0KPiAgICAvLw0KPiAgICAvLyBJZiBXaW5kb3dzIFVYIGNh cHN1bGUgZXhpc3QsIHByb2Nlc3MgaXQgZmlyc3QNCj4gICAgLy8NCj4gICAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgbUNhcHN1bGVUb3RhbE51bWJlcjsgSW5kZXgrKykgew0KPiAgICAgIENhcHN1 bGVIZWFkZXIgPSAoRUZJX0NBUFNVTEVfSEVBREVSKikgbUNhcHN1bGVQdHIgW0luZGV4XTsNCj4g LSAgICBDYXBzdWxlTmFtZSA9IChtQ2Fwc3VsZU5hbWVQdHIgPT0gTlVMTCkgPyBOVUxMIDoNCj4g bUNhcHN1bGVOYW1lUHRyW0luZGV4XTsNCj4gICAgICBpZiAoQ29tcGFyZUd1aWQgKCZDYXBzdWxl SGVhZGVyLT5DYXBzdWxlR3VpZCwNCj4gJmdXaW5kb3dzVXhDYXBzdWxlR3VpZCkpIHsNCj4gICAg ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlByb2Nlc3NUaGlzQ2Fwc3VsZUltYWdlIChVeCkgLSAw eCV4XG4iLA0KPiBDYXBzdWxlSGVhZGVyKSk7DQo+ICAgICAgICBERUJVRyAoKERFQlVHX0lORk8s ICJEaXNwbGF5IGxvZ28gY2Fwc3VsZSBpcyBmb3VuZC5cbiIpKTsNCj4gLSAgICAgIFN0YXR1cyA9 IFByb2Nlc3NUaGlzQ2Fwc3VsZUltYWdlIChDYXBzdWxlSGVhZGVyLCBDYXBzdWxlTmFtZSwgTlVM TCk7DQo+ICsgICAgICBTdGF0dXMgPSBQcm9jZXNzVGhpc0NhcHN1bGVJbWFnZSAoQ2Fwc3VsZUhl YWRlciwgTlVMTCk7DQo+ICAgICAgICBtQ2Fwc3VsZVN0YXR1c0FycmF5IFtJbmRleF0gPSBFRklf U1VDQ0VTUzsNCj4gICAgICAgIERFQlVHKChERUJVR19JTkZPLCAiUHJvY2Vzc1RoaXNDYXBzdWxl SW1hZ2UgKFV4KSAtICVyXG4iLCBTdGF0dXMpKTsNCj4gICAgICAgIGJyZWFrOw0KPiAgICAgIH0N Cj4gICAgfQ0KPiBAQCAtNTU3LDExICs0NDksMTAgQEAgUHJvY2Vzc1RoZXNlQ2Fwc3VsZXMgKA0K PiAgICAgIGlmIChtQ2Fwc3VsZVN0YXR1c0FycmF5IFtJbmRleF0gIT0gRUZJX05PVF9SRUFEWSkg ew0KPiAgICAgICAgLy8gYWxyZWFkeSBwcm9jZXNzZWQNCj4gICAgICAgIGNvbnRpbnVlOw0KPiAg ICAgIH0NCj4gICAgICBDYXBzdWxlSGVhZGVyID0gKEVGSV9DQVBTVUxFX0hFQURFUiopIG1DYXBz dWxlUHRyIFtJbmRleF07DQo+IC0gICAgQ2Fwc3VsZU5hbWUgPSAobUNhcHN1bGVOYW1lUHRyID09 IE5VTEwpID8gTlVMTCA6DQo+IG1DYXBzdWxlTmFtZVB0cltJbmRleF07DQo+ICAgICAgaWYgKCFD b21wYXJlR3VpZCAoJkNhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLA0KPiAmZ1dpbmRvd3NVeENh cHN1bGVHdWlkKSkgew0KPiAgICAgICAgLy8NCj4gICAgICAgIC8vIENhbGwgY2Fwc3VsZSBsaWJy YXJ5IHRvIHByb2Nlc3MgY2Fwc3VsZSBpbWFnZS4NCj4gICAgICAgIC8vDQo+ICAgICAgICBFbWJl ZGRlZERyaXZlckNvdW50ID0gMDsNCj4gQEAgLTU3OCwxMSArNDY5LDExIEBAIFByb2Nlc3NUaGVz ZUNhcHN1bGVzICgNCj4gICAgICAgIH0NCj4gDQo+ICAgICAgICBpZiAoKCFGaXJzdFJvdW5kKSB8 fCAoRW1iZWRkZWREcml2ZXJDb3VudCA9PSAwKSkgew0KPiAgICAgICAgICBERUJVRygoREVCVUdf SU5GTywgIlByb2Nlc3NUaGlzQ2Fwc3VsZUltYWdlIC0gMHgleFxuIiwNCj4gQ2Fwc3VsZUhlYWRl cikpOw0KPiAgICAgICAgICBSZXNldFJlcXVpcmVkID0gRkFMU0U7DQo+IC0gICAgICAgIFN0YXR1 cyA9IFByb2Nlc3NUaGlzQ2Fwc3VsZUltYWdlIChDYXBzdWxlSGVhZGVyLCBDYXBzdWxlTmFtZSwN Cj4gJlJlc2V0UmVxdWlyZWQpOw0KPiArICAgICAgICBTdGF0dXMgPSBQcm9jZXNzVGhpc0NhcHN1 bGVJbWFnZSAoQ2Fwc3VsZUhlYWRlciwgJlJlc2V0UmVxdWlyZWQpOw0KPiAgICAgICAgICBtQ2Fw c3VsZVN0YXR1c0FycmF5IFtJbmRleF0gPSBTdGF0dXM7DQo+ICAgICAgICAgIERFQlVHKChERUJV R19JTkZPLCAiUHJvY2Vzc1RoaXNDYXBzdWxlSW1hZ2UgLSAlclxuIiwgU3RhdHVzKSk7DQo+IA0K PiAgICAgICAgICBpZiAoU3RhdHVzICE9IEVGSV9OT1RfUkVBRFkpIHsNCj4gICAgICAgICAgICBp ZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gQEAgLTYzNywxMiArNTI4LDExIEBAIERvUmVzZXRT eXN0ZW0gKA0KPiAgICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHByb2Nlc3MgY2Fwc3VsZXMu DQo+IA0KPiAgICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBp bnB1dC4NCj4gDQo+ICAgIFRoZSBjYXBzdWxlcyByZXBvcnRlZCBpbiBFRklfSE9CX1VFRklfQ0FQ U1VMRSBhcmUgcHJvY2Vzc2VkLg0KPiAtICBJZiB0aGVyZSBpcyBubyBFRklfSE9CX1VFRklfQ0FQ U1VMRSwgaXQgbWVhbnMgZXJyb3Igb2NjdXJzLCBmb3JjZSByZXNldCB0bw0KPiAtICBub3JtYWwg Ym9vdCBwYXRoLg0KPiArICBJZiB0aGVyZSBpcyBubyBFRklfSE9CX1VFRklfQ0FQU1VMRSwgdGhp cyByb3V0aW5lIGRvZXMgbm90aGluZy4NCj4gDQo+ICAgIFRoaXMgcm91dGluZSBzaG91bGQgYmUg Y2FsbGVkIHR3aWNlIGluIEJEUy4NCj4gICAgMSkgVGhlIGZpcnN0IGNhbGwgbXVzdCBiZSBiZWZv cmUgRW5kT2ZEeGUuIFRoZSBzeXN0ZW0gY2Fwc3VsZXMgaXMgcHJvY2Vzc2VkLg0KPiAgICAgICBJ ZiBkZXZpY2UgY2Fwc3VsZSBGTVAgcHJvdG9jb2xzIGFyZSBleHBvc3RlZCBhdCB0aGlzIHRpbWUg YW5kIGRldmljZSBGTVANCj4gICAgICAgY2Fwc3VsZSBoYXMgemVybyBFbWJlZGRlZERyaXZlckNv dW50LCB0aGUgZGV2aWNlIGNhcHN1bGVzIGFyZQ0KPiBwcm9jZXNzZWQuDQo+IGRpZmYgLS1naXQN Cj4gYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxlTGliRm1wL0R4ZUNhcHN1bGVSZXBv cnRMaWIuYw0KPiBiL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhlQ2Fw c3VsZVJlcG9ydExpYi5jDQo+IGluZGV4IDBlYzVmMjA2NzYuLjZhZDc2NmQ2NWEgMTAwNjQ0DQo+ IC0tLSBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhlQ2Fwc3VsZVJl cG9ydExpYi5jDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAv RHhlQ2Fwc3VsZVJlcG9ydExpYi5jDQo+IEBAIC0xLDkgKzEsOSBAQA0KPiAgLyoqIEBmaWxlDQo+ ICAgIERYRSBjYXBzdWxlIHJlcG9ydCByZWxhdGVkIGZ1bmN0aW9uLg0KPiANCj4gLSAgQ29weXJp Z2h0IChjKSAyMDE2IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0KPiAgKiovDQo+IA0KPiAgI2luY2x1ZGUgPFBpRHhl Lmg+DQo+IEBAIC0yNywyMiArMjcsMTAgQEANCj4gICNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBh dGhMaWIuaD4NCj4gICNpbmNsdWRlIDxMaWJyYXJ5L0NhcHN1bGVMaWIuaD4NCj4gDQo+ICAjaW5j bHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9XaW5kb3dzVXhDYXBzdWxlLmg+DQo+IA0KPiAtLyoqDQo+ IC0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gY2xlYXIgQ2Fwc3VsZU9uRGlzayBSZWxvY2F0 aW9uIEluZm8gdmFyaWFibGUuDQo+IC0gIFRvdGFsIENhcHN1bGUgT24gRGlzayBsZW5ndGggaXMg cmVjb3JkZWQgaW4gdGhpcyB2YXJpYWJsZQ0KPiAtDQo+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICBDYXBzdWxlIE9uIERpc2sgZmxhZ3MgYXJlIGNsZWFyZWQNCj4gLQ0KPiAtKiovDQo+IC1FRklf U1RBVFVTDQo+IC1Db0RDbGVhckNhcHN1bGVSZWxvY2F0aW9uSW5mbygNCj4gLSAgVk9JRA0KPiAt ICApOw0KPiAtDQo+ICAvKioNCj4gICAgR2V0IGN1cnJlbnQgY2Fwc3VsZSBsYXN0IHZhcmlhYmxl IGluZGV4Lg0KPiANCj4gICAgQHJldHVybiBDdXJyZW50IGNhcHN1bGUgbGFzdCB2YXJpYWJsZSBp bmRleC4NCj4gICAgQHJldHZhbCAtMSAgTm8gY3VycmVudCBjYXBzdWxlIGxhc3QgdmFyaWFibGUu DQo+IEBAIC0xODQsNTUgKzE3Miw0NCBAQCBSZWNvcmRDYXBzdWxlU3RhdHVzVmFyaWFibGUgKA0K PiAgICBAcGFyYW1baW5dIENhcHN1bGVIZWFkZXIgIFRoZSBjYXBzdWxlIGltYWdlIGhlYWRlcg0K PiAgICBAcGFyYW1baW5dIENhcHN1bGVTdGF0dXMgIFRoZSBjYXBzdWxlIHByb2Nlc3Mgc3RhdXRz DQo+ICAgIEBwYXJhbVtpbl0gUGF5bG9hZEluZGV4ICAgRk1QIHBheWxvYWQgaW5kZXgNCj4gICAg QHBhcmFtW2luXSBJbWFnZUhlYWRlciAgICBGTVAgaW1hZ2UgaGVhZGVyDQo+ICAgIEBwYXJhbVtp bl0gRm1wRGV2aWNlUGF0aCAgRGV2aWNlUGF0aCBhc3NvY2lhdGVkIHdpdGggdGhlIEZNUCBwcm9k dWNlcg0KPiAtICBAcGFyYW1baW5dIENhcEZpbGVOYW1lICAgIENhcHN1bGUgZmlsZSBuYW1lDQo+ IA0KPiAgICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFRoZSBjYXBzdWxlIHN0YXR1cyB2 YXJpYWJsZSBpcyByZWNvcmRlZC4NCj4gICAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBO byByZXNvdXJjZSB0byByZWNvcmQgdGhlIGNhcHN1bGUgc3RhdHVzDQo+IHZhcmlhYmxlLg0KPiAg KiovDQo+ICBFRklfU1RBVFVTDQo+ICBSZWNvcmRGbXBDYXBzdWxlU3RhdHVzVmFyaWFibGUgKA0K PiAgICBJTiBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNh cHN1bGVIZWFkZXIsDQo+ICAgIElOIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDYXBzdWxlU3RhdHVzLA0KPiAgICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUGF5bG9hZEluZGV4LA0KPiAgICBJTiBFRklfRklSTVdB UkVfTUFOQUdFTUVOVF9DQVBTVUxFX0lNQUdFX0hFQURFUg0KPiAqSW1hZ2VIZWFkZXIsDQo+IC0g IElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAgICAqRm1wRGV2 aWNlUGF0aCwgT1BUSU9OQUwNCj4gLSAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpDYXBGaWxlTmFtZSAgICBPUFRJT05BTA0KPiArICBJTiBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgICAgKkZtcERldmljZVBhdGggT1BU SU9OQUwNCj4gICAgKQ0KPiAgew0KPiAgICBFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVB REVSICAqQ2Fwc3VsZVJlc3VsdFZhcmlhYmxlSGVhZGVyOw0KPiAgICBFRklfQ0FQU1VMRV9SRVNV TFRfVkFSSUFCTEVfRk1QICAgICAqQ2Fwc3VsZVJlc3VsdFZhcmlhYmxlRm1wOw0KPiAgICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICAgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlUmVzdWx0VmFyaWFibGU7DQo+ICAgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVSZXN1bHRWYXJpYWJsZVNp emU7DQo+ICAgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpEZXZpY2VQYXRo U3RyOw0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VQYXRo U3RyU2l6ZTsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwRmls ZU5hbWVTaXplOw0KPiAtDQo+IC0gIERldmljZVBhdGhTdHIgICA9IE5VTEw7DQo+IC0gIENhcEZp bGVOYW1lU2l6ZSA9IHNpemVvZihDSEFSMTYpOw0KPiANCj4gKyAgRGV2aWNlUGF0aFN0ciA9IE5V TEw7DQo+ICAgIGlmIChGbXBEZXZpY2VQYXRoICE9IE5VTEwpIHsNCj4gICAgICBEZXZpY2VQYXRo U3RyID0gQ29udmVydERldmljZVBhdGhUb1RleHQgKEZtcERldmljZVBhdGgsIEZBTFNFLCBGQUxT RSk7DQo+ICAgIH0NCj4gICAgaWYgKERldmljZVBhdGhTdHIgIT0gTlVMTCkgew0KPiAgICAgIERl dmljZVBhdGhTdHJTaXplID0gU3RyU2l6ZShEZXZpY2VQYXRoU3RyKTsNCj4gICAgfSBlbHNlIHsN Cj4gICAgICBEZXZpY2VQYXRoU3RyU2l6ZSA9IHNpemVvZihDSEFSMTYpOw0KPiAgICB9DQo+IC0N Cj4gLSAgaWYgKENhcEZpbGVOYW1lICE9IE5VTEwpIHsNCj4gLSAgICBDYXBGaWxlTmFtZVNpemUg PSBTdHJTaXplKENhcEZpbGVOYW1lKTsNCj4gLSAgfQ0KPiAtDQo+ICAgIC8vDQo+IC0gIC8vIEFs bG9jYXRlIHJvb20gZm9yIENhcHN1bGVGaWxlTmFtZS4NCj4gKyAgLy8gQWxsb2NhdGUgemVybyBD SEFSMTYgZm9yIENhcHN1bGVGaWxlTmFtZS4NCj4gICAgLy8NCj4gLSAgQ2Fwc3VsZVJlc3VsdFZh cmlhYmxlU2l6ZSA9DQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVS KSArDQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfRk1QKSArIENhcEZpbGVO YW1lU2l6ZSArDQo+IERldmljZVBhdGhTdHJTaXplOw0KPiAtDQo+ICsgIENhcHN1bGVSZXN1bHRW YXJpYWJsZVNpemUgPQ0KPiBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0hFQURF UikgKw0KPiBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0ZNUCkgKyBzaXplb2Yo Q0hBUjE2KSArDQo+IERldmljZVBhdGhTdHJTaXplOw0KPiAgICBDYXBzdWxlUmVzdWx0VmFyaWFi bGUgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoQ2Fwc3VsZVJlc3VsdFZhcmlhYmxlU2l6ZSk7DQo+ ICAgIGlmIChDYXBzdWxlUmVzdWx0VmFyaWFibGUgPT0gTlVMTCkgew0KPiAgICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gICAgfQ0KPiAgICBDYXBzdWxlUmVzdWx0VmFyaWFibGVI ZWFkZXIgPSAoVk9JRCAqKUNhcHN1bGVSZXN1bHRWYXJpYWJsZTsNCj4gQEAgLTI0NiwxNyArMjIz LDEyIEBAIFJlY29yZEZtcENhcHN1bGVTdGF0dXNWYXJpYWJsZSAoDQo+ICAgIENhcHN1bGVSZXN1 bHRWYXJpYWJsZUZtcCA9IChWT0lEICopKENhcHN1bGVSZXN1bHRWYXJpYWJsZSArDQo+IHNpemVv ZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSKSk7DQo+ICAgIENhcHN1bGVSZXN1 bHRWYXJpYWJsZUZtcC0+VmVyc2lvbiA9IDB4MTsNCj4gICAgQ2Fwc3VsZVJlc3VsdFZhcmlhYmxl Rm1wLT5QYXlsb2FkSW5kZXggPSAoVUlOVDgpUGF5bG9hZEluZGV4Ow0KPiAgICBDYXBzdWxlUmVz dWx0VmFyaWFibGVGbXAtPlVwZGF0ZUltYWdlSW5kZXggPSBJbWFnZUhlYWRlci0NCj4gPlVwZGF0 ZUltYWdlSW5kZXg7DQo+ICAgIENvcHlHdWlkICgmQ2Fwc3VsZVJlc3VsdFZhcmlhYmxlRm1wLT5V cGRhdGVJbWFnZVR5cGVJZCwNCj4gJkltYWdlSGVhZGVyLT5VcGRhdGVJbWFnZVR5cGVJZCk7DQo+ IC0NCj4gLSAgaWYgKENhcEZpbGVOYW1lICE9IE5VTEwpIHsNCj4gLSAgICBDb3B5TWVtKChVSU5U OCAqKUNhcHN1bGVSZXN1bHRWYXJpYWJsZUZtcCArDQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNV TFRfVkFSSUFCTEVfRk1QKSwgQ2FwRmlsZU5hbWUsDQo+IENhcEZpbGVOYW1lU2l6ZSk7DQo+IC0g IH0NCj4gLQ0KPiAgICBpZiAoRGV2aWNlUGF0aFN0ciAhPSBOVUxMKSB7DQo+IC0gICAgQ29weU1l bSAoKFVJTlQ4ICopQ2Fwc3VsZVJlc3VsdFZhcmlhYmxlRm1wICsNCj4gc2l6ZW9mKEVGSV9DQVBT VUxFX1JFU1VMVF9WQVJJQUJMRV9GTVApICsgQ2FwRmlsZU5hbWVTaXplLA0KPiBEZXZpY2VQYXRo U3RyLCBEZXZpY2VQYXRoU3RyU2l6ZSk7DQo+ICsgICAgQ29weU1lbSAoKFVJTlQ4ICopQ2Fwc3Vs ZVJlc3VsdFZhcmlhYmxlRm1wICsNCj4gc2l6ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJM RV9GTVApICsgc2l6ZW9mKENIQVIxNiksDQo+IERldmljZVBhdGhTdHIsIERldmljZVBhdGhTdHJT aXplKTsNCj4gICAgICBGcmVlUG9vbCAoRGV2aWNlUGF0aFN0cik7DQo+ICAgICAgRGV2aWNlUGF0 aFN0ciA9IE5VTEw7DQo+ICAgIH0NCj4gDQo+ICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiBA QCAtNDI2LDM1ICszOTgsMTAgQEAgSW5pdENhcHN1bGVVcGRhdGVWYXJpYWJsZSAoDQo+ICAgICAg fQ0KPiAgICAgIEluZGV4Kys7DQo+ICAgIH0NCj4gIH0NCj4gDQo+IC0vKioNCj4gLSAgSW5pdGlh bGl6ZSBjYXBzdWxlIHJlbG9jYXRpb24gaW5mbyB2YXJpYWJsZS4NCj4gLSoqLw0KPiAtVk9JRA0K PiAtSW5pdENhcHN1bGVSZWxvY2F0aW9uSW5mbyAoDQo+IC0gIFZPSUQNCj4gLSAgKQ0KPiAtew0K PiAtICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgRURLSUlfVkFS SUFCTEVfTE9DS19QUk9UT0NPTCAqVmFyaWFibGVMb2NrOw0KPiAtDQo+IC0gIENvRENsZWFyQ2Fw c3VsZVJlbG9jYXRpb25JbmZvKCk7DQo+IC0NCj4gLSAgLy8NCj4gLSAgLy8gVW5sb2NrIENhcHN1 bGUgT24gRGlzayByZWxvY2F0aW9uIEluZm8gdmFyaWFibGUgb25seSB3aGVuIENhcHN1bGUgT24N Cj4gRGlzayBmbGFnIGlzIGVuYWJsZWQNCj4gLSAgLy8NCj4gLSAgaWYgKCFDb0RDaGVja0NhcHN1 bGVPbkRpc2tGbGFnKCkpIHsNCj4gLSAgICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgm Z0Vka2lpVmFyaWFibGVMb2NrUHJvdG9jb2xHdWlkLCBOVUxMLA0KPiAoVk9JRCAqKikgJlZhcmlh YmxlTG9jayk7DQo+IC0gICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gLSAgICAgIFN0 YXR1cyA9IFZhcmlhYmxlTG9jay0+UmVxdWVzdFRvTG9jayAoVmFyaWFibGVMb2NrLA0KPiBDT0Rf UkVMT0NBVElPTl9JTkZPX1ZBUl9OQU1FLCAmZ0VmaUNhcHN1bGVWZW5kb3JHdWlkKTsNCj4gLSAg ICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+IC0gICAgfQ0KPiAtICB9DQo+IC19DQo+ IC0NCj4gIC8qKg0KPiAgICBJbml0aWFsaXplIGNhcHN1bGUgcmVsYXRlZCB2YXJpYWJsZXMuDQo+ ICAqKi8NCj4gIFZPSUQNCj4gIEluaXRDYXBzdWxlVmFyaWFibGUgKA0KPiBAQCAtNDYyLDEyICs0 MDksMTAgQEAgSW5pdENhcHN1bGVWYXJpYWJsZSAoDQo+ICAgICkNCj4gIHsNCj4gICAgSW5pdENh cHN1bGVVcGRhdGVWYXJpYWJsZSgpOw0KPiAgICBJbml0Q2Fwc3VsZU1heFZhcmlhYmxlKCk7DQo+ ICAgIEluaXRDYXBzdWxlTGFzdFZhcmlhYmxlKCk7DQo+IC0gIEluaXRDYXBzdWxlUmVsb2NhdGlv bkluZm8oKTsNCj4gLQ0KPiAgICAvLw0KPiAgICAvLyBObyBuZWVkIHRvIGNsZWFyIEwiQ2Fwc3Vs ZSMjIyMiLCBiZWNhdXNlIE9TL0FQUCBzaG91bGQgcmVmZXINCj4gTCJDYXBzdWxlTGFzdCINCj4g ICAgLy8gdG8gY2hlY2sgc3RhdHVzIGFuZCBkZWxldGUgdGhlbS4NCj4gICAgLy8NCj4gIH0NCj4g ZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhl Q2Fwc3VsZVJlcG9ydExpYk51bGwuYw0KPiBiL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1 bGVMaWJGbXAvRHhlQ2Fwc3VsZVJlcG9ydExpYk51bGwuYw0KPiBpbmRleCBiMDk2MzE4MzBmLi5k YzY3ZmNiZTIwIDEwMDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxl TGliRm1wL0R4ZUNhcHN1bGVSZXBvcnRMaWJOdWxsLmMNCj4gKysrDQo+IGIvTWRlTW9kdWxlUGtn L0xpYnJhcnkvRHhlQ2Fwc3VsZUxpYkZtcC9EeGVDYXBzdWxlUmVwb3J0TGliTnVsbC5jDQo+IEBA IC0xLDExICsxLDExIEBADQo+ICAvKiogQGZpbGUNCj4gICAgRFhFIGNhcHN1bGUgcmVwb3J0IHJl bGF0ZWQgZnVuY3Rpb24uDQo+ICAgIER1bW15IGZ1bmN0aW9uIGZvciBydW50aW1lIG1vZHVsZSwg YmVjYXVzZSBDYXBzdWxlRHhlUnVudGltZQ0KPiAgICBkb2VzIG5vdCBuZWVkIHJlY29yZCBjYXBz dWxlIHN0YXR1cyB2YXJpYWJsZS4NCj4gDQo+IC0gIENvcHlyaWdodCAoYykgMjAxNiAtIDIwMTks IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgQ29weXJp Z2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0K PiAgKiovDQo+IA0KPiAgI2luY2x1ZGUgPFBpRHhlLmg+DQo+IEBAIC0zNywyMyArMzcsMjEgQEAg UmVjb3JkQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxlICgNCj4gICAgQHBhcmFtW2luXSBDYXBzdWxlSGVh ZGVyICBUaGUgY2Fwc3VsZSBpbWFnZSBoZWFkZXINCj4gICAgQHBhcmFtW2luXSBDYXBzdWxlU3Rh dHVzICBUaGUgY2Fwc3VsZSBwcm9jZXNzIHN0YXV0cw0KPiAgICBAcGFyYW1baW5dIFBheWxvYWRJ bmRleCAgIEZNUCBwYXlsb2FkIGluZGV4DQo+ICAgIEBwYXJhbVtpbl0gSW1hZ2VIZWFkZXIgICAg Rk1QIGltYWdlIGhlYWRlcg0KPiAgICBAcGFyYW1baW5dIEZtcERldmljZVBhdGggIERldmljZVBh dGggYXNzb2NpYXRlZCB3aXRoIHRoZSBGTVAgcHJvZHVjZXINCj4gLSAgQHBhcmFtW2luXSBDYXBG aWxlTmFtZSAgICBDYXBzdWxlIGZpbGUgbmFtZQ0KPiANCj4gICAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICBUaGUgY2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUgaXMgcmVjb3JkZWQuDQo+ICAg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgTm8gcmVzb3VyY2UgdG8gcmVjb3JkIHRoZSBj YXBzdWxlIHN0YXR1cw0KPiB2YXJpYWJsZS4NCj4gICoqLw0KPiAgRUZJX1NUQVRVUw0KPiAgUmVj b3JkRm1wQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxlICgNCj4gICAgSU4gRUZJX0NBUFNVTEVfSEVBREVS ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlSGVhZGVyLA0KPiAgICBJTiBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZVN0YXR1cywN Cj4gICAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh eWxvYWRJbmRleCwNCj4gICAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFH RV9IRUFERVINCj4gKkltYWdlSGVhZGVyLA0KPiAtICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICAgICAgICAgICAgICAgICAgICAgKkZtcERldmljZVBhdGgsIE9QVElPTkFMDQo+IC0gIElO IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2FwRmlsZU5h bWUgICAgT1BUSU9OQUwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAg ICAgICAgICAgICAgICpGbXBEZXZpY2VQYXRoIE9QVElPTkFMDQo+ICAgICkNCj4gIHsNCj4gICAg cmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gIH0NCj4gDQo+IGRpZmYgLS1naXQNCj4gYS9NZGVN b2R1bGVQa2cvTGlicmFyeS9EeGVDYXBzdWxlTGliRm1wL0R4ZVJ1bnRpbWVDYXBzdWxlTGliLmlu Zg0KPiBiL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhlUnVudGltZUNh cHN1bGVMaWIuaW5mDQo+IGluZGV4IGJmNTZmNDYyM2YuLjJjOTNlNjg3MDAgMTAwNjQ0DQo+IC0t LSBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJGbXAvRHhlUnVudGltZUNhcHN1 bGVMaWIuaW5mDQo+ICsrKw0KPiBiL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNhcHN1bGVMaWJG bXAvRHhlUnVudGltZUNhcHN1bGVMaWIuaW5mDQo+IEBAIC0xLDExICsxLDExIEBADQo+ICAjIyBA ZmlsZQ0KPiAgIyAgQ2Fwc3VsZSBsaWJyYXJ5IGluc3RhbmNlIGZvciBEWEVfUlVOVElNRV9EUklW RVIuDQo+ICAjDQo+ICAjICBDYXBzdWxlIGxpYnJhcnkgaW5zdGFuY2UgZm9yIERYRV9SVU5USU1F X0RSSVZFUiBtb2R1bGUgdHlwZXMuDQo+ICAjDQo+IC0jICBDb3B5cmlnaHQgKGMpIDIwMTYgLSAy MDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjICBD b3B5cmlnaHQgKGMpIDIwMTYgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+ICAjICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiAgIw0KPiAgIyMNCj4gDQo+ICBbRGVmaW5lc10NCj4gQEAgLTY2LDkgKzY2LDgg QEANCj4gICAgZ0VmaUNhcHN1bGVSZXBvcnRHdWlkDQo+ICAgIGdFZmlDYXBzdWxlVmVuZG9yR3Vp ZCAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgIyMNCj4gVmFyaWFibGU6 TCJDYXBzdWxlVXBkYXRlRGF0YSINCj4gICAgZ0VmaUVuZE9mRHhlRXZlbnRHcm91cEd1aWQgICAg ICAgICAgICAgICMjIENPTlNVTUVTICMjIEV2ZW50DQo+ICAgIGdFZmlFdmVudFJlYWR5VG9Cb290 R3VpZCAgICAgICAgICAgICAgICAjIyBDT05TVU1FUyAjIyBFdmVudA0KPiAgICBnRWZpRXZlbnRW aXJ0dWFsQWRkcmVzc0NoYW5nZUd1aWQgICAgICAgIyMgQ09OU1VNRVMgIyMgRXZlbnQNCj4gLSAg Z0Vka2lpQ2Fwc3VsZU9uRGlza05hbWVHdWlkICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05T VU1FUyAjIw0KPiBHVUlEDQo+IA0KPiAgW0RlcGV4XQ0KPiAgICBnRWZpVmFyaWFibGVXcml0ZUFy Y2hQcm90b2NvbEd1aWQNCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNh cHN1bGVMaWJOdWxsL0R4ZUNhcHN1bGVMaWJOdWxsLmMNCj4gYi9NZGVNb2R1bGVQa2cvTGlicmFy eS9EeGVDYXBzdWxlTGliTnVsbC9EeGVDYXBzdWxlTGliTnVsbC5jDQo+IGluZGV4IDU1OTg1YWJk NzguLjA2YTFhYmUxNmIgMTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNh cHN1bGVMaWJOdWxsL0R4ZUNhcHN1bGVMaWJOdWxsLmMNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0xp YnJhcnkvRHhlQ2Fwc3VsZUxpYk51bGwvRHhlQ2Fwc3VsZUxpYk51bGwuYw0KPiBAQCAtMSw5ICsx LDkgQEANCj4gIC8qKiBAZmlsZQ0KPiAgICBOdWxsIER4ZSBDYXBzdWxlIExpYnJhcnkgaW5zdGFu Y2UgZG9lcyBub3RoaW5nIGFuZCByZXR1cm5zIHVuc3VwcG9ydA0KPiBzdGF0dXMuDQo+IA0KPiAt Q29weXJpZ2h0IChjKSAyMDA3IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiArQ29weXJpZ2h0IChjKSAyMDA3IC0gMjAxOCwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gDQo+ICAqKi8NCj4gICNpbmNsdWRlIDxVZWZpLmg+ DQo+ICAjaW5jbHVkZSA8TGlicmFyeS9DYXBzdWxlTGliLmg+DQo+IEBAIC04Myw4OCArODMsNSBA QCBQcm9jZXNzQ2Fwc3VsZXMgKA0KPiAgICApDQo+ICB7DQo+ICAgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+ICB9DQo+IA0KPiAtDQo+IC0vKioNCj4gLSAgVGhpcyByb3V0aW5lIGlzIGNhbGxl ZCB0byBjaGVjayBpZiBDYXBzdWxlT25EaXNrIGZsYWcgaW4gT3NJbmRpY2F0aW9ucyBWYXJpYWJs ZQ0KPiAtICBpcyBlbmFibGVkLg0KPiAtDQo+IC0gIEByZXR2YWwgVFJVRSAgICAgRmxhZyBpcyBl bmFibGVkDQo+IC0gIEByZXR2YWwgRkFMU0UgICAgRmxhZyBpcyBub3QgZW5hYmxlZA0KPiAtDQo+ IC0qKi8NCj4gLUJPT0xFQU4NCj4gLUVGSUFQSQ0KPiAtQ29EQ2hlY2tDYXBzdWxlT25EaXNrRmxh ZygNCj4gLSAgVk9JRA0KPiAtICApDQo+IC17DQo+IC0gIHJldHVybiBGQUxTRTsNCj4gLX0NCj4g LQ0KPiAtLyoqDQo+IC0gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gY2xlYXIgQ2Fwc3VsZU9u RGlzayBmbGFncyBpbmNsdWRpbmcgT3NJbmRpY2F0aW9ucw0KPiBhbmQgQm9vdE5leHQgdmFyaWFi bGUuDQo+IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIEFsbCBDYXBzdWxlIE9uIERpc2sg ZmxhZ3MgYXJlIGNsZWFyZWQNCj4gLQ0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+IC1FRklBUEkN Cj4gLUNvRENsZWFyQ2Fwc3VsZU9uRGlza0ZsYWcoDQo+IC0gIFZPSUQNCj4gLSAgKQ0KPiAtew0K PiAtICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAgUmVs b2NhdGUgQ2Fwc3VsZSBvbiBEaXNrIGZyb20gRUZJIHN5c3RlbSBwYXJ0aXRpb24uDQo+IC0NCj4g LSAgVHdvIHNvbHV0aW9uIHRvIGRlbGl2ZXIgQ2Fwc3VsZSBPbiBEaXNrOg0KPiAtICBTb2x1dGlv biBBOiBJZiBQY2RDYXBzdWxlSW5SYW1TdXBwb3J0IGlzIGVuYWJsZWQsIHJlbG9jYXRlIENhcHN1 bGUgT24NCj4gRGlzayB0byBtZW1vcnkgYW5kIGNhbGwgVXBkYXRlQ2Fwc3VsZSgpLg0KPiAtICBT b2x1dGlvbiBCOiBJZiBQY2RDYXBzdWxlSW5SYW1TdXBwb3J0IGlzIGRpc2FibGVkLCByZWxvY2F0 ZSBDYXBzdWxlIE9uDQo+IERpc2sgdG8gYSBwbGF0Zm9ybS1zcGVjaWZpYyBOViBzdG9yYWdlDQo+ IC0gIGRldmljZSB3aXRoIEJsb2NrSW8gcHJvdG9jb2wuDQo+IC0NCj4gLSAgRGV2aWNlIGVudW1l cmF0aW9uIGxpa2UgVVNCIGNvc3RzIHRpbWUsIHVzZXIgY2FuIGlucHV0IE1heFJldHJ5IHRvIHRl bGwNCj4gZnVuY3Rpb24gdG8gcmV0cnkuDQo+IC0gIEZ1bmN0aW9uIHdpbGwgc3RhbGwgMTAwbXMg YmV0d2VlbiBlYWNoIHJldHJ5Lg0KPiAtDQo+IC0gIFNpZGUgRWZmZWN0czoNCj4gLSAgICBDYXBz dWxlIERlbGl2ZXJ5IFN1cHBvcnRlZCBGbGFnIGluIE9zSW5kaWNhdGlvbiB2YXJpYWJsZSBhbmQg Qm9vdE5leHQNCj4gdmFyaWFibGUgd2lsbCBiZSBjbGVhcmVkLg0KPiAtICAgIFNvbHV0aW9uIEI6 IENvbnRlbnQgY29ycnVwdGlvbi4gQmxvY2sgSU8gd3JpdGUgZGlyZWN0bHkgdG91Y2hlcyBsb3cg bGV2ZWwNCj4gd3JpdGUuIE9yaWduYWwgcGFydGl0aW9ucywgZmlsZQ0KPiAtICBzeXN0ZW1zIG9m IHRoZSByZWxvY2F0aW9uIGRldmljZSB3aWxsIGJlIGNvcnJ1cHRlZC4NCj4gLQ0KPiAtICBAcGFy YW1baW5dICAgIE1heFJldHJ5ICAgICAgICAgICAgIE1heCBDb25uZWN0aW9uIFJldHJ5LiBTdGFs bCAxMDBtcyBiZXR3ZWVuDQo+IGVhY2ggY29ubmVjdGlvbiB0cnkgdG8gZW5zdXJlDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcyBsaWtlIFVTQiBjYW4gZ2V0 IGVudW1lcmF0ZWQuIElucHV0IDAgbWVhbnMgbm8NCj4gcmV0cnkuDQo+IC0NCj4gLSAgQHJldHZh bCBFRklfU1VDQ0VTUyAgIENhcHN1bGUgb24gRGlzayBpbWFnZXMgYXJlIHN1Y2Nlc3NmdWxseSBy ZWxvY2F0ZWQuDQo+IC0NCj4gLSoqLw0KPiAtRUZJX1NUQVRVUw0KPiAtRUZJQVBJDQo+IC1Db0RS ZWxvY2F0ZUNhcHN1bGUoDQo+IC0gIFVJTlROICAgICBNYXhSZXRyeQ0KPiAtICApDQo+IC17DQo+ IC0gIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBSZW1v dmUgdGhlIHRlbXAgZmlsZSBmcm9tIHRoZSByb290IG9mIEVGSSBTeXN0ZW0gUGFydGl0aW9uLg0K PiAtICBEZXZpY2UgZW51bWVyYXRpb24gbGlrZSBVU0IgY29zdHMgdGltZSwgdXNlciBjYW4gaW5w dXQgTWF4UmV0cnkgdG8gdGVsbA0KPiBmdW5jdGlvbiB0byByZXRyeS4NCj4gLSAgRnVuY3Rpb24g d2lsbCBzdGFsbCAxMDBtcyBiZXR3ZWVuIGVhY2ggcmV0cnkuDQo+IC0NCj4gLSAgQHBhcmFtW2lu XSAgICBNYXhSZXRyeSAgICAgICAgICAgICBNYXggQ29ubmVjdGlvbiBSZXRyeS4gU3RhbGwgMTAw bXMgYmV0d2Vlbg0KPiBlYWNoIGNvbm5lY3Rpb24gdHJ5IHRvIGVuc3VyZQ0KPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgbGlrZSBVU0IgY2FuIGdldCBlbnVt ZXJhdGVkLiBJbnB1dCAwIG1lYW5zIG5vDQo+IHJldHJ5Lg0KPiAtDQo+IC0gIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICBSZW1vdmUgdGhlIHRlbXAgZmlsZSBzdWNjZXNzZnVsbHkuDQo+IC0NCj4gLSoq Lw0KPiAtRUZJX1NUQVRVUw0KPiAtRUZJQVBJDQo+IC1Db0RSZW1vdmVUZW1wRmlsZSAoDQo+IC0g IFVJTlROICAgIE1heFJldHJ5DQo+IC0gICkNCj4gLXsNCj4gLSAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4gLX0NCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVj DQo+IGIvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gaW5kZXggMDhiM2NiZDdmMi4u MmRlZTEzOWJhMyAxMDA2NDQNCj4gLS0tIGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gQEAgLTM5NywxMyArMzk3 LDEwIEBADQo+ICAgIGdTM1N0b3JhZ2VEZXZpY2VJbml0TGlzdEd1aWQgPSB7IDB4MzEwZTliOGMs IDB4Y2Y5MCwgMHg0MjFlLCB7IDB4OGUsIDB4OWIsDQo+IDB4OWUsIDB4ZWYsIDB4YjYsIDB4MTcs IDB4YzgsIDB4ZWYgfSB9DQo+IA0KPiAgICAjIyBJbmNsdWRlL0d1aWQvU2VyaWFsUG9ydExpYlZl bmRvci5oDQo+ICAgIGdFZGtpaVNlcmlhbFBvcnRMaWJWZW5kb3JHdWlkID0geyAweEQzOTg3RDRC LCAweDk3MUEsIDB4NDM1RiwgeyAweDhDLA0KPiAweEFGLCAweDQ5LCAweDY3LCAweEVCLCAweDYy LCAweDcyLCAweDQxIH0gfQ0KPiANCj4gLSAgIyMgR1VJRCBpbmRpY2F0ZXMgdGhlIGNhcHN1bGUg aXMgdG8gc3RvcmUgQ2Fwc3VsZSBPbiBEaXNrIGZpbGUgbmFtZXMuDQo+IC0gIGdFZGtpaUNhcHN1 bGVPbkRpc2tOYW1lR3VpZCA9IHsgMHg5OGM4MGE0ZiwgMHhlMTZiLCAweDRkMTEsIHsgMHg5MywN Cj4gMHg5YSwgMHhhYiwgMHhlNSwgMHg2MSwgMHgyNiwgMHgzLCAweDMwIH0gfQ0KPiAtDQo+ICBb UHBpc10NCj4gICAgIyMgSW5jbHVkZS9QcGkvQXRhQ29udHJvbGxlci5oDQo+ICAgIGdQZWlBdGFD b250cm9sbGVyUHBpR3VpZCAgICAgICA9IHsgMHhhNDVlNjBkMSwgMHhjNzE5LCAweDQ0YWEsIHsg MHhiMCwgMHg3YSwNCj4gMHhhYSwgMHg3NywgMHg3ZiwgMHg4NSwgMHg5MCwgMHg2ZCB9fQ0KPiAN Cj4gICAgIyMgSW5jbHVkZS9QcGkvVXNiSG9zdENvbnRyb2xsZXIuaA0KPiBAQCAtNDcwLDE0ICs0 NjcsMTAgQEANCj4gICAgZ0Vka2lpUGVpQXRhUGFzc1RocnVQcGlHdWlkICAgICAgICAgICAgICAg PSB7IDB4YTE2NDczZmQsIDB4ZDQ3NCwgMHg0Yzg5LCB7IDB4YWUsDQo+IDB4YzcsIDB4OTAsIDB4 YjgsIDB4M2MsIDB4NzMsIDB4ODYsIDB4OSAgfSB9DQo+IA0KPiAgICAjIyBJbmNsdWRlL1BwaS9E ZWJ1Zy5oDQo+ICAgIGdFZGtpaURlYnVnUHBpR3VpZCAgICAgICAgICAgICAgICAgICAgICAgID0g eyAweDk5OWU2OTljLCAweGIwMTMsIDB4NDc1ZSwgeyAweGIxLA0KPiAweDdiLCAweGYzLCAweGE4 LCAweGFlLCAweDVjLCAweDQ4LCAweDc1IH0gfQ0KPiANCj4gLSAgIyMgSW5jbHVkZS9QcGkvQ2Fw c3VsZU9uRGlzay5oDQo+IC0gIGdFZGtpaVBlaUNhcHN1bGVPbkRpc2tQcGlHdWlkICAgICAgICAg ICAgID0geyAweDcxYTllYTYxLCAweDVhMzUsIDB4NGE1ZCwNCj4geyAweGFjLCAweGVmLCAweDlj LCAweGY4LCAweDZkLCAweDZkLCAweDY3LCAweGUwIH0gfQ0KPiAtICBnRWRraWlQZWlCb290SW5D YXBzdWxlT25EaXNrTW9kZVBwaUd1aWQgICA9IHsgMHhiMDhhMTFlNCwgMHhlMmI3LA0KPiAweDRi NzUsIHsgMHhiNSwgMHgxNSwgMHhhZiwgMHg2MSwgMHg2LCAweDY4LCAweGJmLCAweGQxICB9IH0N Cj4gLQ0KPiAgW1Byb3RvY29sc10NCj4gICAgIyMgTG9hZCBGaWxlIHByb3RvY29sIHByb3ZpZGVz IGNhcGFiaWxpdHkgdG8gbG9hZCBhbmQgdW5sb2FkIEVGSSBpbWFnZSBpbnRvDQo+IG1lbW9yeSBh bmQgZXhlY3V0ZSBpdC4NCj4gICAgIyAgSW5jbHVkZS9Qcm90b2NvbC9Mb2FkUGUzMkltYWdlLmgN Cj4gICAgIyAgVGhpcyBwcm90b2NvbCBpcyBkZXByZWNhdGVkLiBOYXRpdmUgRURLSUkgbW9kdWxl IHNob3VsZCBOT1QgdXNlIHRoaXMNCj4gcHJvdG9jb2wgdG8gbG9hZC91bmxvYWQgaW1hZ2UuDQo+ ICAgICMgIElmIGRldmVsb3BlciBuZWVkIGltcGxlbWVudCBzdWNoIGZ1bmN0aW9uYWxpdHksIHRo ZXkgc2hvdWxkIHVzZQ0KPiBCYXNlUGVDb2ZmTGliLg0KPiBAQCAtMTQ4MywyNiArMTQ3NiwxMCBA QA0KPiANCj4gICAgIyMgSW5kaWNhdGVzIHRoZSBhbGxvd2FibGUgbWF4aW11bSBudW1iZXIgb2Yg UmVzZXQgRmlsdGVycywgUmVzZXQNCj4gTm90aWZpY2F0aW9ucyBvciBSZXNldCBIYW5kbGVycyBp biBQRUkgcGhhc2UuDQo+ICAgICMgQFByb21wdCBNYXhpbXVtIE51bWJlciBvZiBQRUkgUmVzZXQg RmlsdGVycywgUmVzZXQgTm90aWZpY2F0aW9ucyBvcg0KPiBSZXNldCBIYW5kbGVycy4NCj4gDQo+ IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhpbXVtUGVpUmVzZXROb3RpZmll c3wweDEwfFVJDQo+IE5UMzJ8MHgwMDAwMDEwQQ0KPiANCj4gLSAgIyMgQ2Fwc3VsZSBPbiBEaXNr IGlzIHRvIGRlbGl2ZXIgY2Fwc3VsZXMgdmlhIGZpbGVzIG9uIE1hc3MgU3RvcmFnZQ0KPiBkZXZp Y2UuPEJSPjxCUj4NCj4gLSAgIyAgVGhpcyBQQ0QgaW5kaWNhdGVzIGlmIHRoZSBDYXBzdWxlIE9u IERpc2sgaXMgc3VwcG9ydGVkLjxCUj4NCj4gLSAgIyAgIFRSVUUgIC0gQ2Fwc3VsZSBPbiBEaXNr IGlzIHN1cHBvcnRlZC48QlI+DQo+IC0gICMgICBGQUxTRSAtIENhcHN1bGUgT24gRGlzayBpcyBu b3Qgc3VwcG9ydGVkLjxCUj4NCj4gLSAgIyAgSWYgcGxhdGZvcm0gZG9lcyBub3QgdXNlIHRoaXMg ZmVhdHVyZSwgdGhpcyBQQ0Qgc2hvdWxkIGJlIHNldCB0bw0KPiBGQUxTRS48QlI+PEJSPg0KPiAt ICAjICBUd28gc3Vsb3Rpb25zIHRvIGRlbGl2ZXIgQ2Fwc3VsZSBPbiBEaXNrOjxCUj4NCj4gLSAg IyAgICBhKSBJZiBQY2RDYXBzdWxlSW5SYW1TdXBwb3J0ID0gVFJVRSwgTG9hZCBDYXBzdWxlIE9u IERpc2sgaW1hZ2Ugb3V0DQo+IG9mIFRDQiwgYW5kIHJldXNlDQo+IC0gICMgICAgICAgQ2Fwc3Vs ZSBJbiBSYW0gdG8gZGVsaXZlciBjYXBzdWxlLjxCUj4NCj4gLSAgIyAgICBiKSBJZiBQY2RDYXBz dWxlSW5SYW1TdXBwb3J0ID0gRkFMU0UsIFJlbG9jYXRlIENhcHN1bGUgT24gRGlzayBpbWFnZQ0K PiB0byBSb290RGlyIG91dA0KPiAtICAjICAgICAgIG9mIFRDQiwgYW5kIHJldXNlIEZhdFBlaSB0 byBsb2FkIGNhcHN1bGVzIGZyb20gZXh0ZXJuYWwgc3RvcmFnZS48QlI+DQo+IC0gICMgIE5vdGU6 PEJSPg0KPiAtICAjICAgIElmIEJvdGggQ2Fwc3VsZSBJbiBSYW0gYW5kIENhcHN1bGUgT24gRGlz ayBhcmUgcHJvdmlzaW9uZWQgYXQgdGhlIHNhbWUNCj4gdGltZSwgdGhlIENhcHN1bGUNCj4gLSAg IyAgT24gRGlzayB3aWxsIGJlIGJ5cGFzc2VkLg0KPiAtICAjIEBQcm9tcHQgRW5hYmxlIENhcHN1 bGUgT24gRGlzayBzdXBwb3J0Lg0KPiAtDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RDYXBzdWxlT25EaXNrU3VwcG9ydHxGQUxTRXxCT08NCj4gTEVBTnwweDAwMDAwMDJkDQo+ IC0NCj4gIFtQY2RzUGF0Y2hhYmxlSW5Nb2R1bGUsIFBjZHNEeW5hbWljLCBQY2RzRHluYW1pY0V4 XQ0KPiAgICAjIyBUaGlzIFBDRCBkZWZpbmVzIHRoZSBDb25zb2xlIG91dHB1dCByb3cuIFRoZSBk ZWZhdWx0IHZhbHVlIGlzIDI1DQo+IGFjY29yZGluZyB0byBVRUZJIHNwZWMuDQo+ICAgICMgIFRo aXMgUENEIGNvdWxkIGJlIHNldCB0byAwIHRoZW4gY29uc29sZSBvdXRwdXQgd291bGQgYmUgYXQg bWF4IGNvbHVtbg0KPiBhbmQgbWF4IHJvdy4NCj4gICAgIyBAUHJvbXB0IENvbnNvbGUgb3V0cHV0 IHJvdy4NCj4gDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDb25PdXRSb3d8 MjV8VUlOVDMyfDB4NDAwMDAwMA0KPiA2DQo+IEBAIC0xOTU4LDIxICsxOTM1LDEwIEBADQo+ICAg ICMgIFRoZSBmaWxlIG5hbWUgbXVzdCBiZSB0aGUgOC4zIGZvcm1hdC4NCj4gICAgIyAgVGhlIFBD RCBkYXRhIG11c3QgYmUgaW4gVU5JQ09ERSBmb3JtYXQuDQo+ICAgICMgQFByb21wdCBSZWNvdmVy IGZpbGUgbmFtZSBpbiBQRUkgcGhhc2UNCj4gDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNl R3VpZC5QY2RSZWNvdmVyeUZpbGVOYW1lfEwiRlZNQUlOLkZWInwNCj4gVk9JRCp8MHgzMDAwMTA0 NQ0KPiANCj4gLSAgIyMgVGhpcyBpcyBDYXBzdWxlIFRlbXAgUmVsb2NhdGlvbiBmaWxlIG5hbWUg aW4gUEVJIHBoYXNlLg0KPiAtICAjICBUaGUgZmlsZSBtdXN0IGJlIGluIHRoZSByb290IGRpcmVj dG9yeS4NCj4gLSAgIyAgVGhlIGZpbGUgbmFtZSBtdXN0IGJlIHRoZSA4LjMgZm9ybWF0Lg0KPiAt ICAjICBUaGUgUENEIGRhdGEgbXVzdCBiZSBpbiBVTklDT0RFIGZvcm1hdC4NCj4gLSAgIyAgQ2Fw c3VsZU9uRGlza0xvYWRQZWkgUEVJIG1vZHVsZSB3aWxsIHNldCB2YWx1ZSBvZiB0aGlzIFBDRCB0 bw0KPiBQY2RSZWNvdmVyeUZpbGVOYW1lLCB0aGVuDQo+IC0gICMgIGxldmVyYWdlIHJlY292ZXJ5 IHRvIGdldCBDYXBzdWxlIE9uIERpc2sgVGVtcCBSZWxvY2F0aW9uIGZpbGUuDQo+IC0gICMgIE5v dGU6IFRoZSBmaWxlIG5hbWUgbXVzdCBiZSBzaG9ydGVyIHRoYW4gUGNkUmVjb3ZlcnlGaWxlTmFt ZSwNCj4gb3RoZXJ3aXNlIENhcHN1bGVPbkRpc2tMb2FkUGVpDQo+IC0gICMgIFBFSSBtb2R1bGUg d2lsbCBmYWlsIHRvIGdldCBDYXBzdWxlIE9uIERpc2sgVGVtcCBSZWxvY2F0aW9uIGZpbGUuDQo+ IC0gICMgQFByb21wdCBDYXBzdWxlIE9uIERpc2sgVGVtcCBSZWxvY2F0aW9uIGZpbGUgbmFtZSBp biBQRUkgcGhhc2UNCj4gLQ0KPiBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQ29E UmVsb2NhdGlvbkZpbGVOYW1lfEwiVGVtcENvDQo+IGQudG1wInxWT0lEKnwweDMwMDAxMDQ4DQo+ IC0NCj4gICAgIyMgVGhpcyBQQ0QgaG9sZCBhIGxpc3QgR1VJRHMgZm9yIHRoZSBJbWFnZVR5cGVJ ZCB0byBpbmRpY2F0ZSB0aGUNCj4gICAgIyAgRk1QIGNhcHN1bGUgaXMgYSBzeXN0ZW0gRk1QLg0K PiAgICAjIEBQcm9tcHQgQSBsaXN0IG9mIHN5c3RlbSBGTVAgSW1hZ2VUeXBlSWQgR1VJRHMNCj4g DQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RTeXN0ZW1GbXBDYXBzdWxlSW1h Z2VUeXBlSWRHdQ0KPiBpZHx7MHgwfXxWT0lEKnwweDMwMDAxMDQ2DQo+IA0KPiBAQCAtMTk4MCwy NCArMTk0NiwxMCBAQA0KPiAgICAjICBlbmFibGVkIG9uIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRp bmcgdGhlIFNlY3VyZSBFbmNyeXB0ZWQNCj4gVmlydHVhbGl6YXRpb24gKFNFVikgZmVhdHVyZS4N Cj4gICAgIyAgVGhpcyBtYXNrIHNob3VsZCBiZSBhcHBsaWVkIHdoZW4gY3JlYXRpbmcgMToxIHZp cnR1YWwgdG8gcGh5c2ljYWwgbWFwcGluZw0KPiB0YWJsZXMuDQo+ICAgICMgQFByb21wdCBUaGUg YWRkcmVzcyBtYXNrIHdoZW4gbWVtb3J5IGVuY3J5cHRpb24gaXMgZW5hYmxlZC4NCj4gDQo+IGdF ZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RQdGVNZW1vcnlFbmNyeXB0aW9uQWRkcmVz c09yTQ0KPiBhc2t8MHgwfFVJTlQ2NHwweDMwMDAxMDQ3DQo+IA0KPiAtICAjIyBDYXBzdWxlIElu IFJhbSBpcyB0byB1c2UgbWVtb3J5IHRvIGRlbGl2ZXIgdGhlIGNhcHN1bGVzIHRoYXQgd2lsbCBi ZQ0KPiBwcm9jZXNzZWQgYWZ0ZXIgc3lzdGVtDQo+IC0gICMgIHJlc2V0LjxCUj48QlI+DQo+IC0g ICMgIFRoaXMgUENEIGluZGljYXRlcyBpZiB0aGUgQ2Fwc3VsZSBJbiBSYW0gaXMgc3VwcG9ydGVk LjxCUj4NCj4gLSAgIyAgIFRSVUUgIC0gQ2Fwc3VsZSBJbiBSYW0gaXMgc3VwcG9ydGVkLjxCUj4N Cj4gLSAgIyAgIEZBTFNFIC0gQ2Fwc3VsZSBJbiBSYW0gaXMgbm90IHN1cHBvcnRlZC4NCj4gLSAg IyBAUHJvbXB0IEVuYWJsZSBDYXBzdWxlIEluIFJhbSBzdXBwb3J0Lg0KPiAtDQo+IGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDYXBzdWxlSW5SYW1TdXBwb3J0fFRSVUV8Qk9PTA0K PiBFQU58MHgwMDAwMDAyZQ0KPiAtDQo+IC0gICMjIEZ1bGwgZGV2aWNlIHBhdGggb2YgcGxhZm9y bSBzcGVjaWZpYyBkZXZpY2UgdG8gc3RvcmUgQ2Fwc3VsZSBPbiBEaXNrIHRlbXANCj4gcmVsb2Nh dGlvbiBmaWxlLjxCUj4NCj4gLSAgIyAgSWYgdGhpcyBQQ0QgaXMgc2V0LCBDYXBzdWxlIE9uIERp c2sgdGVtcCByZWxvY2F0aW9uIGZpbGUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlDQo+IGRldmljZSBz cGVjaWZpZWQNCj4gLSAgIyAgYnkgdGhpcyBQQ0QsIGluc3RlYWQgb2YgdGhlIEVGSSBTeXN0ZW0g UGFydGl0aW9uIHRoYXQgc3RvcmVzIGNhcHN1bGUgaW1hZ2UNCj4gZmlsZS4NCj4gLSAgIyBAUHJv bXB0IENhcHN1bGUgT24gRGlzayByZWxvY2F0aW9uIGRldmljZSBwYXRoLg0KPiAtDQo+IGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDb2RSZWxvY2F0aW9uRGV2UGF0aHx7MHhGRn18 Vk9JDQo+IEQqfDB4MDAwMDAwMmYNCj4gLQ0KPiAgW1BjZHNQYXRjaGFibGVJbk1vZHVsZV0NCj4g ICAgIyMgU3BlY2lmeSBtZW1vcnkgc2l6ZSB3aXRoIHBhZ2UgbnVtYmVyIGZvciBQRUkgY29kZSB3 aGVuDQo+ICAgICMgIExvYWRpbmcgTW9kdWxlIGF0IEZpeGVkIEFkZHJlc3MgZmVhdHVyZSBpcyBl bmFibGVkLg0KPiAgICAjICBUaGUgdmFsdWUgd2lsbCBiZSBzZXQgYnkgdGhlIGJ1aWxkIHRvb2wu DQo+ICAgICMgQFByb21wdCBMTUZBIFBFSSBjb2RlIHBhZ2UgbnVtYmVyLg0KPiBkaWZmIC0tZ2l0 IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kc2MNCj4gYi9NZGVNb2R1bGVQa2cvTWRlTW9k dWxlUGtnLmRzYw0KPiBpbmRleCA2Y2E3ZDlhZGU0Li5mMzJhZGMzODM5IDEwMDY0NA0KPiAtLS0g YS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRzYw0KPiArKysgYi9NZGVNb2R1bGVQa2cvTWRl TW9kdWxlUGtnLmRzYw0KPiBAQCAtMTk3LDEzICsxOTcsMTAgQEANCj4gICAgZ0VmaU1kZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZFJlcG9ydFN0YXR1c0NvZGVQcm9wZXJ0eU1hc2t8MHgwNg0KPiAgICBn RWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkTWF4U2l6ZU5vblBvcHVsYXRlQ2Fwc3Vs ZXwweDANCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heFNpemVQb3B1 bGF0ZUNhcHN1bGV8MHgwDQo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RN YXhQZWlQZXJmb3JtYW5jZUxvZ0VudHJpZXN8MjgNCj4gDQo+IC1bUGNkc0R5bmFtaWNFeERlZmF1 bHRdDQo+IC0NCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFJlY292ZXJ5Rmls ZU5hbWV8TCJGVk1BSU4uRlYiDQo+IC0NCj4gIFtDb21wb25lbnRzXQ0KPiAgICBNZGVNb2R1bGVQ a2cvQXBwbGljYXRpb24vSGVsbG9Xb3JsZC9IZWxsb1dvcmxkLmluZg0KPiAgICBNZGVNb2R1bGVQ a2cvQXBwbGljYXRpb24vRHVtcER5blBjZC9EdW1wRHluUGNkLmluZg0KPiAgICBNZGVNb2R1bGVQ a2cvQXBwbGljYXRpb24vTWVtb3J5UHJvZmlsZUluZm8vTWVtb3J5UHJvZmlsZUluZm8uaW5mDQo+ IA0KPiBAQCAtMzM0LDExICszMzEsMTAgQEANCj4gDQo+IE5VTEx8TWRlTW9kdWxlUGtnL0xpYnJh cnkvQm9vdE1haW50ZW5hbmNlTWFuYWdlclVpTGliL0Jvb3RNYWludGUNCj4gbmFuY2VNYW5hZ2Vy VWlMaWIuaW5mDQo+ICAgIH0NCj4gDQo+IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvRHJpdmVySGVh bHRoTWFuYWdlckR4ZS9Ecml2ZXJIZWFsdGhNYW5hZ2VyDQo+IER4ZS5pbmYNCj4gDQo+IE1kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvQm9vdE1hbmFnZXJQb2xpY3lEeGUvQm9vdE1hbmFnZXJQb2xpY3lE eGUuaQ0KPiBuZg0KPiAgICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVQZWkvQ2Fwc3Vs ZVBlaS5pbmYNCj4gLQ0KPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVPbkRpc2tMb2Fk UGVpL0NhcHN1bGVPbkRpc2tMb2FkUGVpLmluDQo+IGYNCj4gICAgTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9DYXBzdWxlUnVudGltZUR4ZS9DYXBzdWxlUnVudGltZUR4ZS5pbmYNCj4gICAgTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9Db25zb2xlL0NvblBsYXRmb3JtRHhlL0NvblBsYXRmb3JtRHhlLmlu Zg0KPiAgICBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NvbnNvbGUvQ29uU3BsaXR0ZXJEeGUvQ29u U3BsaXR0ZXJEeGUuaW5mDQo+IA0KPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NvbnNvbGUvR3Jh cGhpY3NDb25zb2xlRHhlL0dyYXBoaWNzQ29uc29sZUQNCj4geGUuaW5mDQo+IA0KPiBNZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL0NvbnNvbGUvR3JhcGhpY3NPdXRwdXREeGUvR3JhcGhpY3NPdXRwdXRE eA0KPiBlLmluZg0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy51bmkN Cj4gYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLnVuaQ0KPiBpbmRleCAwNjM1NjQwN2ZiLi5l ZDhhYzllYWRjIDEwMDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLnVuaQ0K PiArKysgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLnVuaQ0KPiBAQCAtMTA2NCwxOSArMTA2 NCwxMCBAQA0KPiAgI3N0cmluZw0KPiBTVFJfZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlk X1BjZFJlY292ZXJ5RmlsZU5hbWVfSEVMUA0KPiAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMgaXMgcmVj b3ZlciBmaWxlIG5hbWUgaW4gUEVJIHBoYXNlLlxuIg0KPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJUaGUgZmlsZSBtdXN0IGJlIGluIHRoZSByb290DQo+IGRpcmVjdG9yeS5cbiINCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZpbGUgbmFtZSBtdXN0IGJlIHRoZSA4 LjMNCj4gZm9ybWF0LlxuIg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgUENE IGRhdGEgbXVzdCBiZSBpbg0KPiBVTklDT0RFIGZvcm1hdC4iDQo+IA0KPiAtI3N0cmluZw0KPiBT VFJfZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkX1BjZENvRFJlbG9jYXRpb25GaWxlTmFt ZV9QUk8NCj4gTVBUICAjbGFuZ3VhZ2UgZW4tVVMgIkNhcHN1bGUgT24gRGlzayBUZW1wIFJlbG9j YXRpb24gZmlsZSBuYW1lIGluIFBFSQ0KPiBwaGFzZSINCj4gLQ0KPiAtI3N0cmluZw0KPiBTVFJf Z0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkX1BjZENvRFJlbG9jYXRpb25GaWxlTmFtZV9I RUxQDQo+ICNsYW5ndWFnZSBlbi1VUyAiVGhpcyBpcyBDYXBzdWxlIFRlbXAgUmVsb2NhdGlvbiBm aWxlIG5hbWUgaW4gUEVJDQo+IHBoYXNlLjxCUj4iDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVGhlIGZpbGUgbXVzdCBiZSBpbiB0aGUgcm9vdA0KPiBkaXJlY3RvcnkuPEJS PiINCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgZmlsZSBuYW1lIG11 c3QgYmUgdGhlIDguMw0KPiBmb3JtYXQuPEJSPiINCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJUaGUgUENEIGRhdGEgbXVzdCBiZSBpbg0KPiBVTklDT0RFIGZvcm1hdC48QlI+ Ig0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhcHN1bGVPbkRpc2tMb2Fk UGVpIFBFSQ0KPiBtb2R1bGUgd2lsbCBzZXQgdmFsdWUgb2YgdGhpcyBQQ0QgdG8gUGNkUmVjb3Zl cnlGaWxlTmFtZSwgdGhlbiBsZXZlcmFnZQ0KPiByZWNvdmVyeSB0byBnZXQgQ2Fwc3VsZSBPbiBE aXNrIFRlbXAgUmVsb2NhdGlvbiBmaWxlLjxCUj4iDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiTm90ZTogVGhlIGZpbGUgbmFtZSBtdXN0IGJlDQo+IHNob3J0ZXIgdGhhbiBQ Y2RSZWNvdmVyeUZpbGVOYW1lLCBvdGhlcndpc2UgQ2Fwc3VsZU9uRGlza0xvYWRQZWkgUEVJDQo+ IG1vZHVsZSB3aWxsIGZhaWwgdG8gZ2V0IENhcHN1bGUgT24gRGlzayBUZW1wIFJlbG9jYXRpb24g ZmlsZS48QlI+Ig0KPiAtDQo+ICAjc3RyaW5nDQo+IFNUUl9nRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWRfUGNkU3lzdGVtRm1wQ2Fwc3VsZUltYWdlVHlwDQo+IGVJZEd1aWRfUFJPTVBUICAj bGFuZ3VhZ2UgZW4tVVMgIkEgbGlzdCBvZiBzeXN0ZW0gRk1QIEltYWdlVHlwZUlkDQo+IEdVSURz Ig0KPiANCj4gICNzdHJpbmcNCj4gU1RSX2dFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZF9Q Y2RTeXN0ZW1GbXBDYXBzdWxlSW1hZ2VUeXANCj4gZUlkR3VpZF9IRUxQICAjbGFuZ3VhZ2UgZW4t VVMgIlRoaXMgUENEIGhvbGQgYSBsaXN0IEdVSURzIGZvciB0aGUNCj4gSW1hZ2VUeXBlSWQgdG8g aW5kaWNhdGUgdGhlXG4iDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkZNUCBjYXBzdWxlIGlzIGEgc3lzdGVtDQo+IEZNUC4iDQo+IA0KPiBAQCAtMTEzOCwz NSArMTEyOSwxMCBAQA0KPiANCj4gICNzdHJpbmcNCj4gU1RSX2dFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZF9QY2RQdGVNZW1vcnlFbmNyeXB0aW9uQWRkcmVzDQo+IHNPck1hc2tfSEVMUCAg I2xhbmd1YWdlIGVuLVVTICJUaGlzIFBDRCBob2xkcyB0aGUgYWRkcmVzcyBtYXNrIGZvciBwYWdl DQo+IHRhYmxlIGVudHJpZXMgd2hlbiBtZW1vcnkgZW5jcnlwdGlvbiBpc1xuIg0KPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZCBvbiBBTUQNCj4g cHJvY2Vzc29ycyBzdXBwb3J0aW5nIHRoZSBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9u IChTRVYpIGZlYXR1cmUuXG4iDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJUaGlzIG1hc2sgc2hvdWxkIGJlDQo+IGFwcGxpZWQgd2hlbiBjcmVhdGluZyAx OjEgdmlydHVhbCB0byBwaHlzaWNhbCBtYXBwaW5nIHRhYmxlcy4iDQo+IA0KPiAtI3N0cmluZw0K PiBTVFJfZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkX1BjZENhcHN1bGVPbkRpc2tTdXBw b3J0X1BSTw0KPiBNUFQgICNsYW5ndWFnZSBlbi1VUyAiRW5hYmxlIENhcHN1bGUgT24gRGlzayBz dXBwb3J0Ig0KPiAtDQo+IC0jc3RyaW5nDQo+IFNUUl9nRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWRfUGNkQ2Fwc3VsZU9uRGlza1N1cHBvcnRfSEVMUA0KPiAjbGFuZ3VhZ2UgZW4tVVMgICAi Q2Fwc3VsZSBPbiBEaXNrIGlzIHRvIGRlbGl2ZXIgY2Fwc3VsZXMgdmlhIGZpbGVzIG9uIE1hc3MN Cj4gU3RvcmFnZSBkZXZpY2UuPEJSPjxCUj4iDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlRoaXMgUENEIGluZGljYXRlcyBpZiB0aGUNCj4gQ2Fwc3VsZSBPbiBEaXNrIGlz IHN1cHBvcnRlZC48QlI+Ig0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg VFJVRSAgLSBDYXBzdWxlIE9uIERpc2sgaXMNCj4gc3VwcG9ydGVkLjxCUj4iDQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBGQUxTRSAtIENhcHN1bGUgT24gRGlzayBpcyBu b3QNCj4gc3VwcG9ydGVkLjxCUj4iDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIklmIHBsYXRmb3JtIGRvZXMgbm90IHVzZSB0aGlzDQo+IGZlYXR1cmUsIHRoaXMgUENEIHNo b3VsZCBiZSBzZXQgdG8gRkFMU0UuPEJSPjxCUj4iDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlR3byBzdWxvdGlvbnMgdG8gZGVsaXZlcg0KPiBDYXBzdWxlIE9uIERpc2s6 PEJSPiINCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGEpIElmDQo+IFBj ZENhcHN1bGVJblJhbVN1cHBvcnQgPSBUUlVFLCBMb2FkIENhcHN1bGUgT24gRGlzayBpbWFnZSBv dXQgb2YgVENCLA0KPiBhbmQgcmV1c2UgQ2Fwc3VsZSBJbiBSYW0gdG8gZGVsaXZlciBjYXBzdWxl LjxCUj4iDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBiKSBJZg0KPiBQ Y2RDYXBzdWxlSW5SYW1TdXBwb3J0ID0gRkFMU0UsIFJlbG9jYXRlIENhcHN1bGUgT24gRGlzayBp bWFnZSB0bw0KPiBSb290RGlyIG91dCBvZiBUQ0IsIGFuZCByZXVzZSBGYXRQZWkgdG8gbG9hZCBj YXBzdWxlcyBmcm9tIGV4dGVybmFsDQo+IHN0b3JhZ2UuPEJSPiINCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiTm90ZTo8QlI+Ig0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJJZiBCb3RoIENhcHN1bGUgSW4gUmFtIGFuZA0KPiBDYXBzdWxlIE9uIERp c2sgYXJlIHByb3Zpc2lvbmVkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBDYXBzdWxlIE9uIERpc2sg d2lsbA0KPiBiZSBieXBhc3NlZC4iDQo+IC0NCj4gLSNzdHJpbmcNCj4gU1RSX2dFZmlNZGVNb2R1 bGVQa2dUb2tlblNwYWNlR3VpZF9QY2RDYXBzdWxlSW5SYW1TdXBwb3J0X1BST00NCj4gUFQgICNs YW5ndWFnZSBlbi1VUyAiRW5hYmxlIENhcHN1bGUgSW4gUmFtIHN1cHBvcnQiDQo+IC0NCj4gLSNz dHJpbmcNCj4gU1RSX2dFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZF9QY2RDYXBzdWxlSW5S YW1TdXBwb3J0X0hFTFANCj4gI2xhbmd1YWdlIGVuLVVTICAgIkNhcHN1bGUgSW4gUmFtIGlzIHRv IHVzZSBtZW1vcnkgdG8gZGVsaXZlciB0aGUgY2Fwc3VsZXMNCj4gdGhhdCB3aWxsIGJlIHByb2Nl c3NlZCBhZnRlciBzeXN0ZW0gcmVzZXQuPEJSPjxCUj4iDQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVGhpcyBQQ0QgaW5kaWNhdGVzIGlmIHRoZQ0KPiBDYXBzdWxlIEluIFJh bSBpcyBzdXBwb3J0ZWQuPEJSPiINCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIgVFJVRSAgLSBDYXBzdWxlIEluIFJhbSBpcw0KPiBzdXBwb3J0ZWQuPEJSPiINCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgRkFMU0UgLSBDYXBzdWxlIEluIFJhbSBpcyBu b3QNCj4gc3VwcG9ydGVkLiINCj4gLQ0KPiAtI3N0cmluZw0KPiBTVFJfZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkX1BjZENvZFJlbG9jYXRpb25EZXZQYXRoX1BSTw0KPiBNUFQgICNsYW5n dWFnZSBlbi1VUyAiQ2Fwc3VsZSBPbiBEaXNrIHJlbGFjYXRpb24gZGV2aWNlIHBhdGguIg0KPiAt DQo+IC0jc3RyaW5nDQo+IFNUUl9nRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWRfUGNkQ29k UmVsb2NhdGlvbkRldlBhdGhfSEVMUA0KPiAjbGFuZ3VhZ2UgZW4tVVMgICAiRnVsbCBkZXZpY2Ug cGF0aCBvZiBwbGFmb3JtIHNwZWNpZmljIGRldmljZSB0byBzdG9yZQ0KPiBDYXBzdWxlIE9uIERp c2sgdGVtcCByZWxvY2F0aW9uIGZpbGUuPEJSPiINCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiSWYgdGhpcyBQQ0QgaXMgc2V0LCBDYXBzdWxlIE9uDQo+IERpc2sgdGVtcCBy ZWxvY2F0aW9uIGZpbGUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGRldmljZSBzcGVjaWZpZWQgYnkg dGhpcyBQQ0QsDQo+IGluc3RlYWQgb2YgdGhlIEVGSSBTeXN0ZW0gUGFydGl0aW9uIHRoYXQgc3Rv cmVzIGNhcHN1bGUgaW1hZ2UgZmlsZS4iDQo+IC0NCj4gICNzdHJpbmcNCj4gU1RSX2dFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZF9QY2ROdWxsUG9pbnRlckRldGVjdGlvblByb3BlcnR5DQo+ IE1hc2tfUFJPTVBUICAjbGFuZ3VhZ2UgZW4tVVMgIkVuYWJsZSBOVUxMIHBvaW50ZXIgZGV0ZWN0 aW9uIg0KPiANCj4gICNzdHJpbmcNCj4gU1RSX2dFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZF9QY2ROdWxsUG9pbnRlckRldGVjdGlvblByb3BlcnR5DQo+IE1hc2tfSEVMUCAgICAjbGFuZ3Vh Z2UgZW4tVVMgIk1hc2sgdG8gY29udHJvbCB0aGUgTlVMTCBhZGRyZXNzIGRldGVjdGlvbg0KPiBp biBjb2RlIGZvciBkaWZmZXJlbnQgcGhhc2VzLlxuIg0KPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIgSWYgZW5hYmxlZCwgYWNjZXNzaW5nDQo+IE5VTEwg YWRkcmVzcyBpbiBVRUZJIG9yIFNNTSBjb2RlIGNhbiBiZSBjYXVnaHQuXG5cbiINCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgQklUMCAgICAtIEVu YWJsZSBOVUxMDQo+IHBvaW50ZXIgZGV0ZWN0aW9uIGZvciBVRUZJLlxuIg0KPiBkaWZmIC0tZ2l0 IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9CZHNEeGUvQmRzRHhlLmluZg0KPiBiL01kZU1vZHVs ZVBrZy9Vbml2ZXJzYWwvQmRzRHhlL0Jkc0R4ZS5pbmYNCj4gaW5kZXggM2QxM2M3MjVjZS4uNjkx MzM4OWQzNCAxMDA2NDQNCj4gLS0tIGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9CZHNEeGUvQmRz RHhlLmluZg0KPiArKysgYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0Jkc0R4ZS9CZHNEeGUuaW5m DQo+IEBAIC0zLDExICszLDExIEBADQo+ICAjDQo+ICAjICBXaGVuIER4ZUNvcmUgZGlzcGF0Y2hp bmcgYWxsIERYRSBkcml2ZXIsIHRoaXMgbW9kdWxlIHdpbGwgcHJvZHVjZQ0KPiBhcmNoaXRlY3R1 cmUgcHJvdG9jb2wNCj4gICMgIGdFZmlCZHNBcmNoUHJvdG9jb2xHdWlkLiBBZnRlciBEeGVDb3Jl IGZpbmlzaCBkaXNwYXRjaGluZywgRHhlQ29yZSB3aWxsDQo+IGludm9rZSBFbnRyeQ0KPiAgIyAg aW50ZXJmYWNlIG9mIHByb3RvY29sIGdFZmlCZHNBcmNoUHJvdG9jb2xHdWlkLCB0aGVuIEJEUyBw aGFzZSBpcyBlbnRlcmVkLg0KPiAgIw0KPiAtIyAgQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxOSwg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyAgQ29weXJp Z2h0IChjKSAyMDA4IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPiAgIyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gICMNCj4gICMjDQo+IA0KPiAgW0RlZmluZXNdDQo+IEBAIC05MywxMSArOTMsMTAgQEAN Cj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZpcm13YXJlVmVuZG9yICAg ICAgICAgICAgICAgICAgICAjIw0KPiBDT05TVU1FUw0KPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9r ZW5TcGFjZUd1aWQuUGNkRmlybXdhcmVSZXZpc2lvbiAgICAgICAgICAgICAgICAgICMjDQo+IENP TlNVTUVTDQo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDb25JbkNvbm5l Y3RPbkRlbWFuZA0KPiAjIyBDT05TVU1FUw0KPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkRXJyb3JDb2RlU2V0VmFyaWFibGUgICAgICAgICAgICAgICMjDQo+IFNPTUVUSU1F U19DT05TVU1FUw0KPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVGVzdEtl eVVzZWQgICAgICAgICAgICAgICAgICAgICAgICMjDQo+IENPTlNVTUVTDQo+IC0gIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDYXBzdWxlT25EaXNrU3VwcG9ydCAgICAgICAgICAg ICAgIyMNCj4gQ09OU1VNRVMNCj4gDQo+ICBbRGVwZXhdDQo+ICAgIFRSVUUNCj4gDQo+ICBbVXNl ckV4dGVuc2lvbnMuVGlhbm9Db3JlLiJFeHRyYUZpbGVzIl0NCj4gZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9Vbml2ZXJzYWwvQmRzRHhlL0Jkc0VudHJ5LmMNCj4gYi9NZGVNb2R1bGVQa2cvVW5p dmVyc2FsL0Jkc0R4ZS9CZHNFbnRyeS5jDQo+IGluZGV4IDJhNGFlOWY0ODguLjlkMzEyYmQ5ODIg MTAwNjQ0DQo+IC0tLSBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQmRzRHhlL0Jkc0VudHJ5LmMN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9CZHNEeGUvQmRzRW50cnkuYw0KPiBAQCAt MywxMSArMywxMSBAQA0KPiAgICBXaGVuIHRoaXMgbW9kdWxlIHdhcyBkaXNwYXRjaGVkIGJ5IER4 ZUNvcmUsIGdFZmlCZHNBcmNoUHJvdG9jb2xHdWlkDQo+IHdpbGwgYmUgaW5zdGFsbGVkDQo+ICAg IHdoaWNoIGNvbnRhaW5zIGludGVyZmFjZSBvZiBCZHNFbnRyeS4NCj4gICAgQWZ0ZXIgRHhlQ29y ZSBmaW5pc2ggRFhFIHBoYXNlLCBnRWZpQmRzQXJjaFByb3RvY29sR3VpZC0+QmRzRW50cnkgd2ls bCBiZQ0KPiBpbnZva2VkDQo+ICAgIHRvIGVudGVyIEJEUyBwaGFzZS4NCj4gDQo+IC1Db3B5cmln aHQgKGMpIDIwMDQgLSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+ICtDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDE4LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICAoQykgQ29weXJpZ2h0IDIwMTYgSGV3bGV0dCBQ YWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ICAoQykgQ29weXJpZ2h0IDIw MTUgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC48QlI+DQo+ICBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gICoqLw0KPiBA QCAtNTUwLDE0ICs1NTAsMTAgQEAgQmRzRm9ybWFsaXplT1NJbmRpY2F0aW9uVmFyaWFibGUgKA0K PiAgICAgIEVmaUJvb3RNYW5hZ2VyRnJlZUxvYWRPcHRpb24gKCZCb290TWFuYWdlck1lbnUpOw0K PiAgICB9IGVsc2Ugew0KPiAgICAgIE9zSW5kaWNhdGlvblN1cHBvcnQgPQ0KPiBFRklfT1NfSU5E SUNBVElPTlNfU1RBUlRfUExBVEZPUk1fUkVDT1ZFUlk7DQo+ICAgIH0NCj4gDQo+IC0gIGlmIChQ Y2RHZXRCb29sKFBjZENhcHN1bGVPbkRpc2tTdXBwb3J0KSkgew0KPiAtICAgIE9zSW5kaWNhdGlv blN1cHBvcnQgfD0NCj4gRUZJX09TX0lORElDQVRJT05TX0ZJTEVfQ0FQU1VMRV9ERUxJVkVSWV9T VVBQT1JURUQ7DQo+IC0gIH0NCj4gLQ0KPiAgICBTdGF0dXMgPSBnUlQtPlNldFZhcmlhYmxlICgN Cj4gICAgICAgICAgICAgICAgICAgIEVGSV9PU19JTkRJQ0FUSU9OU19TVVBQT1JUX1ZBUklBQkxF X05BTUUsDQo+ICAgICAgICAgICAgICAgICAgICAmZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4g ICAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MgfA0KPiBF RklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MsDQo+ICAgICAgICAgICAgICAgICAgICBzaXplb2Yo VUlOVDY0KSwNCj4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3Vs ZU9uRGlza0xvYWRQZWkvQ2Fwc3VsZU9uRGlza0xvYWRQZWkuDQo+IGMNCj4gYi9NZGVNb2R1bGVQ a2cvVW5pdmVyc2FsL0NhcHN1bGVPbkRpc2tMb2FkUGVpL0NhcHN1bGVPbkRpc2tMb2FkUGVpLg0K PiBjDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCBhYzk2NTI2YmMyLi4wMDAw MDAwMDAwDQo+IC0tLQ0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZU9uRGlza0xv YWRQZWkvQ2Fwc3VsZU9uRGlza0xvYWRQZWkuDQo+IGMNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAt MSw0NDIgKzAsMCBAQA0KPiAtLyoqIEBmaWxlDQo+IC0gIFJlY292ZXJ5IG1vZHVsZS4NCj4gLQ0K PiAtICBDYXV0aW9uOiBUaGlzIG1vZHVsZSByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldyB3aGVu IG1vZGlmaWVkLg0KPiAtICBUaGlzIG1vZHVsZSB3aWxsIGhhdmUgZXh0ZXJuYWwgaW5wdXQgLSBD YXBzdWxlLW9uLURpc2sgVGVtcCBSZWxvY2F0aW9uDQo+IGltYWdlLg0KPiAtICBUaGlzIGV4dGVy bmFsIGlucHV0IG11c3QgYmUgdmFsaWRhdGVkIGNhcmVmdWxseSB0byBhdm9pZCBzZWN1cml0eSBp c3N1ZSBsaWtlDQo+IC0gIGJ1ZmZlciBvdmVyZmxvdywgaW50ZWdlciBvdmVyZmxvdy4NCj4gLQ0K PiAtICBSZXRyaWV2ZVJlbG9jYXRlZENhcHN1bGUoKSB3aWxsIHJlY2VpdmUgdW50cnVzdGVkIGlu cHV0IGFuZCBkbyBiYXNpYw0KPiB2YWxpZGF0aW9uLg0KPiAtDQo+IC0gIENvcHlyaWdodCAoYykg MjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAtICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiAtDQo+IC0qKi8N Cj4gLQ0KPiAtLy8NCj4gLS8vIFRoZSBwYWNrYWdlIGxldmVsIGhlYWRlciBmaWxlcyB0aGlzIG1v ZHVsZSB1c2VzDQo+IC0vLw0KPiAtI2luY2x1ZGUgPFVlZmkuaD4NCj4gLSNpbmNsdWRlIDxQaVBl aS5oPg0KPiAtDQo+IC0vLw0KPiAtLy8gVGhlIHByb3RvY29scywgUFBJIGFuZCBHVUlEIGRlZmlu dGlvbnMgZm9yIHRoaXMgbW9kdWxlDQo+IC0vLw0KPiAtI2luY2x1ZGUgPFBwaS9NYXN0ZXJCb290 TW9kZS5oPg0KPiAtI2luY2x1ZGUgPFBwaS9GaXJtd2FyZVZvbHVtZUluZm8uaD4NCj4gLSNpbmNs dWRlIDxQcGkvUmVhZE9ubHlWYXJpYWJsZTIuaD4NCj4gLSNpbmNsdWRlIDxQcGkvQ2Fwc3VsZS5o Pg0KPiAtI2luY2x1ZGUgPFBwaS9DYXBzdWxlT25EaXNrLmg+DQo+IC0jaW5jbHVkZSA8UHBpL0Rl dmljZVJlY292ZXJ5TW9kdWxlLmg+DQo+IC0NCj4gLSNpbmNsdWRlIDxHdWlkL0Zpcm13YXJlRmls ZVN5c3RlbTIuaD4NCj4gLS8vDQo+IC0vLyBUaGUgTGlicmFyeSBjbGFzc2VzIHRoaXMgbW9kdWxl IGNvbnN1bWVzDQo+IC0vLw0KPiAtI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gLSNp bmNsdWRlIDxMaWJyYXJ5L1BlaW1FbnRyeVBvaW50Lmg+DQo+IC0jaW5jbHVkZSA8TGlicmFyeS9Q ZWlTZXJ2aWNlc0xpYi5oPg0KPiAtI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQo+IC0jaW5j bHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+IC0jaW5jbHVkZSA8TGlicmFyeS9NZW1v cnlBbGxvY2F0aW9uTGliLmg+DQo+IC0jaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4gLSNp bmNsdWRlIDxMaWJyYXJ5L0NhcHN1bGVMaWIuaD4NCj4gLSNpbmNsdWRlIDxMaWJyYXJ5L1JlcG9y dFN0YXR1c0NvZGVMaWIuaD4NCj4gLQ0KPiAtLyoqDQo+IC0gIExvYWRzIGEgRFhFIGNhcHN1bGUg ZnJvbSBzb21lIG1lZGlhIGludG8gbWVtb3J5IGFuZCB1cGRhdGVzIHRoZSBIT0INCj4gdGFibGUN Cj4gLSAgd2l0aCB0aGUgRFhFIGZpcm13YXJlIHZvbHVtZSBpbmZvcm1hdGlvbi4NCj4gLQ0KPiAt ICBAcGFyYW1baW5dICBQZWlTZXJ2aWNlcyAgIEdlbmVyYWwtcHVycG9zZSBzZXJ2aWNlcyB0aGF0 IGFyZSBhdmFpbGFibGUgdG8NCj4gZXZlcnkgUEVJTS4NCj4gLSAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICBJbmRpY2F0ZXMgdGhlIEVGSV9QRUlfUkVDT1ZFUllfTU9EVUxFX1BQSQ0KPiBpbnN0 YW5jZS4NCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICBUaGUgY2Fwc3VsZSB3 YXMgbG9hZGVkIGNvcnJlY3RseS4NCj4gLSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgQSBk ZXZpY2UgZXJyb3Igb2NjdXJyZWQuDQo+IC0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgIEEg cmVjb3ZlcnkgRFhFIGNhcHN1bGUgY2Fubm90IGJlIGZvdW5kLg0KPiAtDQo+IC0qKi8NCj4gLUVG SV9TVEFUVVMNCj4gLUVGSUFQSQ0KPiAtTG9hZENhcHN1bGVPbkRpc2sgKA0KPiAtICBJTiBFRklf UEVJX1NFUlZJQ0VTICAgICAgICAgICAgICAqKlBlaVNlcnZpY2VzLA0KPiAtICBJTiBFRklfUEVJ X0NBUFNVTEVfT05fRElTS19QUEkgICAqVGhpcw0KPiAtICApOw0KPiAtDQo+IC1FRklfUEVJX0NB UFNVTEVfT05fRElTS19QUEkgbUNhcHN1bGVPbkRpc2tQcGkgPSB7DQo+IC0gIExvYWRDYXBzdWxl T25EaXNrDQo+IC19Ow0KPiAtDQo+IC1FRklfUEVJX1BQSV9ERVNDUklQVE9SIG1DYXBzdWxlT25E aXNrUHBpTGlzdCA9IHsNCj4gLSAgKEVGSV9QRUlfUFBJX0RFU0NSSVBUT1JfUFBJIHwNCj4gRUZJ X1BFSV9QUElfREVTQ1JJUFRPUl9URVJNSU5BVEVfTElTVCksDQo+IC0gICZnRWRraWlQZWlDYXBz dWxlT25EaXNrUHBpR3VpZCwNCj4gLSAgJm1DYXBzdWxlT25EaXNrUHBpDQo+IC19Ow0KPiAtDQo+ IC0vKioNCj4gLSAgRGV0ZXJtaW5lIGlmIGNhcHN1bGUgY29tZXMgZnJvbSBtZW1vcnkgYnkgY2hl Y2tpbmcgQ2Fwc3VsZSBQUEkuDQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgUGVpU2VydmljZXMgR2Vu ZXJhbCBwdXJwb3NlIHNlcnZpY2VzIGF2YWlsYWJsZSB0byBldmVyeSBQRUlNLg0KPiAtDQo+IC0g IEByZXR2YWwgVFJVRSAgIENhcHN1bGUgY29tZXMgZnJvbSBtZW1vcnkuDQo+IC0gIEByZXR2YWwg RkFMU0UgIE5vIGNhcHN1bGUgY29tZXMgZnJvbSBtZW1vcnkuDQo+IC0NCj4gLSoqLw0KPiAtc3Rh dGljDQo+IC1CT09MRUFODQo+IC1DaGVja0NhcHN1bGVGcm9tUmFtICgNCj4gLSAgSU4gQ09OU1Qg RUZJX1BFSV9TRVJWSUNFUyAgICAgICAgICAqKlBlaVNlcnZpY2VzDQo+IC0gICkNCj4gLXsNCj4g LSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiAtICBQRUlfQ0FQU1VMRV9QUEkg ICAgICAgICAqQ2Fwc3VsZTsNCj4gLQ0KPiAtICBTdGF0dXMgPSBQZWlTZXJ2aWNlc0xvY2F0ZVBw aSAoDQo+IC0gICAgICAgICAgICAgJmdFZmlQZWlDYXBzdWxlUHBpR3VpZCwNCj4gLSAgICAgICAg ICAgICAwLA0KPiAtICAgICAgICAgICAgIE5VTEwsDQo+IC0gICAgICAgICAgICAgKFZPSUQgKiop ICZDYXBzdWxlDQo+IC0gICAgICAgICAgICAgKTsNCj4gLSAgaWYgKCFFRklfRVJST1IoU3RhdHVz KSkgew0KPiAtICAgIFN0YXR1cyA9IENhcHN1bGUtPkNoZWNrQ2Fwc3VsZVVwZGF0ZSAoKEVGSV9Q RUlfU0VSVklDRVMNCj4gKiopUGVpU2VydmljZXMpOw0KPiAtICAgIGlmICghRUZJX0VSUk9SKFN0 YXR1cykpIHsNCj4gLSAgICAgIHJldHVybiBUUlVFOw0KPiAtICAgIH0NCj4gLSAgfQ0KPiAtDQo+ IC0gIHJldHVybiBGQUxTRTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gIERldGVybWluZSBpZiBp dCBpcyBhIENhcHN1bGUgT24gRGlzayBtb2RlLg0KPiAtDQo+IC0gIEByZXR2YWwgVFJVRSAgICAg ICAgIENhcHN1bGUgT24gRGlzayBtb2RlLg0KPiAtICBAcmV0dmFsIEZBTFNFICAgICAgICBOb3Qg Y2Fwc3VsZSBPbiBEaXNrIG1vZGUuDQo+IC0NCj4gLSoqLw0KPiAtQk9PTEVBTg0KPiAtSXNDYXBz dWxlT25EaXNrTW9kZSAoDQo+IC0gIFZPSUQNCj4gLSAgKQ0KPiAtew0KPiAtICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICBTaXplOw0KPiAtICBFRklfUEVJX1JFQURfT05MWV9WQVJJQUJMRTJfUFBJICpQ UElWYXJpYWJsZVNlcnZpY2VzOw0KPiAtICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg IENvZFJlbG9jSW5mbzsNCj4gLQ0KPiAtICBTdGF0dXMgPSBQZWlTZXJ2aWNlc0xvY2F0ZVBwaSAo DQo+IC0gICAgICAgICAgICAgJmdFZmlQZWlSZWFkT25seVZhcmlhYmxlMlBwaUd1aWQsDQo+IC0g ICAgICAgICAgICAgMCwNCj4gLSAgICAgICAgICAgICBOVUxMLA0KPiAtICAgICAgICAgICAgIChW T0lEICoqKSAmUFBJVmFyaWFibGVTZXJ2aWNlcw0KPiAtICAgICAgICAgICAgICk7DQo+IC0gIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+IC0NCj4gLSAgU2l6ZSA9IHNpemVvZiAoQk9PTEVB Tik7DQo+IC0gIFN0YXR1cyA9IFBQSVZhcmlhYmxlU2VydmljZXMtPkdldFZhcmlhYmxlICgNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUElWYXJpYWJsZVNlcnZpY2VzLA0K PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPRF9SRUxPQ0FUSU9OX0lORk9f VkFSX05BTUUsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlDYXBz dWxlVmVuZG9yR3VpZCwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTaXplLA0KPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb2RSZWxvY0luZm8NCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPiAtDQo+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1 cykgfHwgU2l6ZSAhPSBzaXplb2YoQk9PTEVBTikgfHwgIUNvZFJlbG9jSW5mbykgew0KPiAtICAg IERFQlVHICgoIERFQlVHX0VSUk9SLCAiRXJyb3IgR2V0IENvZFJlbG9jYXRpb25JbmZvIHZhcmlh YmxlICVyIVxuIiwNCj4gU3RhdHVzKSk7DQo+IC0gICAgcmV0dXJuIEZBTFNFOw0KPiAtICB9DQo+ IC0NCj4gLSAgcmV0dXJuIFRSVUU7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBHZXRzIGNhcHN1 bGUgaW1hZ2VzIGZyb20gcmVsb2NhdGVkIGNhcHN1bGUgYnVmZmVyLg0KPiAtICBDcmVhdGUgQ2Fw c3VsZSBob2IgZm9yIGVhY2ggQ2Fwc3VsZS4NCj4gLQ0KPiAtICBDYXV0aW9uOiBUaGlzIGZ1bmN0 aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCj4gLSAgQ2Fwc3VsZS1vbi1EaXNrIFRl bXAgUmVsb2NhdGlvbiBpbWFnZSBpcyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyBmdW5jdGlvbg0K PiAtICB3aWxsIHZhbGlkYXRlIENhcHN1bGUtb24tRGlzayBUZW1wIFJlbG9jYXRpb24gaW1hZ2Ug dG8gbWFrZSBzdXJlIHRoZQ0KPiBjb250ZW50DQo+IC0gIGlzIHJlYWQgd2l0aGluIHRoZSBidWZm ZXIuDQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgUmVsb2NDYXBzdWxlQnVmICAgICAgICBCdWZmZXIg cG9pbnRlciB0byB0aGUgcmVsb2NhdGVkIGNhcHN1bGUuDQo+IC0gIEBwYXJhbVtpbl0gIFJlbG9j Q2Fwc3VsZVRvdGFsU2l6ZSAgVG90YWwgc2l6ZSBvZiB0aGUgcmVsb2NhdGVkIGNhcHN1bGUuDQo+ IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgU3VjY2VlZCB0byBnZXQgY2Fwc3VsZXMg YW5kIGNyZWF0ZSBob2IuDQo+IC0gIEByZXR2YWwgT3RoZXJzICAgICAgICAgIEZhaWwgdG8gZ2V0 IGNhcHN1bGVzIGFuZCBjcmVhdGUgaG9iLg0KPiAtDQo+IC0qKi8NCj4gLUVGSV9TVEFUVVMNCj4g LUVGSUFQSQ0KPiAtUmV0cmlldmVSZWxvY2F0ZWRDYXBzdWxlICgNCj4gLSAgSU4gVUlOVDggICAg ICAgICAgICAgICAgKlJlbG9jQ2Fwc3VsZUJ1ZiwNCj4gLSAgSU4gVUlOVE4gICAgICAgICAgICAg ICAgUmVsb2NDYXBzdWxlVG90YWxTaXplDQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPiAtICBVSU5UOCAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVEYXRhQnVmRW5kOw0KPiAt ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVQdHI7DQo+IC0gIFVJTlQzMiAgICAg ICAgICAgICAgICAgICBDYXBzdWxlU2l6ZTsNCj4gLSAgVUlOVDY0ICAgICAgICAgICAgICAgICAg IFRvdGFsSW1hZ2VTaXplOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZU51 bTsNCj4gLQ0KPiAtICBDYXBzdWxlTnVtID0gMDsNCj4gLQ0KPiAtICAvLw0KPiAtICAvLyBUZW1w IGZpbGUgY29udGFpbnMgYXQgbGVhc3QgMiBjYXBzdWxlIChpbmNsdWRpbmcgMSBjYXBzdWxlIG5h bWUgY2Fwc3VsZSkgJg0KPiAxIFVJTlQ2NA0KPiAtICAvLw0KPiAtICBpZiAoUmVsb2NDYXBzdWxl VG90YWxTaXplIDwgc2l6ZW9mKFVJTlQ2NCkgKyBzaXplb2YoRUZJX0NBUFNVTEVfSEVBREVSKQ0K PiAqIDIpIHsNCj4gLSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAtICB9DQo+ IC0NCj4gLSAgQ29weU1lbSgmVG90YWxJbWFnZVNpemUsIFJlbG9jQ2Fwc3VsZUJ1Ziwgc2l6ZW9m KFVJTlQ2NCkpOw0KPiAtDQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywgIlByb2Nlc3NSZWxvY2F0 ZWRDYXBzdWxlIENhcHN1bGVCdWYgJXgNCj4gVG90YWxDYXBTaXplICVseFxuIiwNCj4gLSAgICAg ICAgICAgICAgICAgICAgICBSZWxvY0NhcHN1bGVCdWYsIFRvdGFsSW1hZ2VTaXplKSk7DQo+IC0N Cj4gLSAgUmVsb2NDYXBzdWxlQnVmICs9IHNpemVvZihVSU5UNjQpOw0KPiAtDQo+IC0gIC8vDQo+ IC0gIC8vIFRlbXBDYXNwdWxlIGZpbGUgbGVuZ3RoIGNoZWNrDQo+IC0gIC8vDQo+IC0gIGlmIChN QVhfQUREUkVTUyAtIFRvdGFsSW1hZ2VTaXplIDw9IHNpemVvZihVSU5UNjQpIHx8DQo+IC0gICAg ICAoVUlOVDY0KVJlbG9jQ2Fwc3VsZVRvdGFsU2l6ZSAhPSBUb3RhbEltYWdlU2l6ZSArIHNpemVv ZihVSU5UNjQpIHx8DQo+IC0gICAgICAoVUlOVE4pKE1BWF9BRERSRVNTIC0gKFBIWVNJQ0FMX0FE RFJFU1MpKFVJTlROKVJlbG9jQ2Fwc3VsZUJ1ZikNCj4gPD0gVG90YWxJbWFnZVNpemUpIHsNCj4g LSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAtICB9DQo+IC0NCj4gLSAgQ2Fw c3VsZURhdGFCdWZFbmQgPSBSZWxvY0NhcHN1bGVCdWYgKyBUb3RhbEltYWdlU2l6ZTsNCj4gLQ0K PiAtICAvLw0KPiAtICAvLyBUZW1wQ2Fwc3VsZSBmaWxlIGludGVncml0eSBjaGVjayBvdmVyIENh cHN1bGUgSGVhZGVyIHRvIGVuc3VyZSBubyBkYXRhDQo+IGNvcnJ1cHRpb24gaW4gTlYgVmFyICYg UmVsb2NhdGlvbiBzdG9yYWdlDQo+IC0gIC8vDQo+IC0gIENhcHN1bGVQdHIgPSBSZWxvY0NhcHN1 bGVCdWY7DQo+IC0NCj4gLSAgd2hpbGUgKENhcHN1bGVQdHIgPCBDYXBzdWxlRGF0YUJ1ZkVuZCkg ew0KPiAtICAgIGlmICgoQ2Fwc3VsZURhdGFCdWZFbmQgLSBDYXBzdWxlUHRyKSA8IHNpemVvZihF RklfQ0FQU1VMRV9IRUFERVIpIHx8DQo+IC0gICAgICAgICgoRUZJX0NBUFNVTEVfSEVBREVSICop Q2Fwc3VsZVB0ciktPkNhcHN1bGVJbWFnZVNpemUgPA0KPiBzaXplb2YoRUZJX0NBUFNVTEVfSEVB REVSKSB8fA0KPiAtICAgICAgICAoVUlOVE4pKE1BWF9BRERSRVNTIC0gKFBIWVNJQ0FMX0FERFJF U1MpKFVJTlROKUNhcHN1bGVQdHIpIDwNCj4gKChFRklfQ0FQU1VMRV9IRUFERVIgKilDYXBzdWxl UHRyKS0+Q2Fwc3VsZUltYWdlU2l6ZQ0KPiAtICAgICAgICApIHsNCj4gLSAgICAgIGJyZWFrOw0K PiAtICAgIH0NCj4gLSAgICBDYXBzdWxlUHRyICs9ICgoRUZJX0NBUFNVTEVfSEVBREVSICopQ2Fw c3VsZVB0ciktPkNhcHN1bGVJbWFnZVNpemU7DQo+IC0gICAgQ2Fwc3VsZU51bSArKzsNCj4gLSAg fQ0KPiAtDQo+IC0gIGlmIChDYXBzdWxlUHRyICE9IENhcHN1bGVEYXRhQnVmRW5kKSB7DQo+IC0g ICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAtICAgIGdvdG8gRVhJVDsNCj4g LSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIENhcHN1bGUgY291bnQgbXVzdCBiZSBsZXNzIHRo YW4gUGNkQ2Fwc3VsZU1heCwgYXZvaWQgYnVpbGRpbmcgdG9vDQo+IG1hbnkgQ3ZIb2JzIHRvIG9j Y3VweSBhbGwgdGhlIGZyZWUgc3BhY2UgaW4gSG9iTGlzdC4NCj4gLSAgLy8NCj4gLSAgaWYgKENh cHN1bGVOdW0gPiBQY2RHZXQxNiAoUGNkQ2Fwc3VsZU1heCkpIHsNCj4gLSAgICBTdGF0dXMgPSBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+IC0gICAgZ290byBFWElUOw0KPiAtICB9DQo+IC0NCj4g LSAgLy8NCj4gLSAgLy8gUmUtaXRlcmF0ZSB0aGUgY2Fwc3VsZSBidWZmZXIgdG8gY3JlYXRlIENh cHN1bGUgaG9iICYgQ2Fwc3VsZSBOYW1lIFN0cg0KPiBIb2IgZm9yIGVhY2ggQ2Fwc3VsZSBzYXZl ZCBpbiByZWxvY2F0ZWQgY2Fwc3VsZSBmaWxlDQo+IC0gIC8vDQo+IC0gIENhcHN1bGVQdHIgPSBS ZWxvY0NhcHN1bGVCdWY7DQo+IC0gIEluZGV4ICAgICAgPSAwOw0KPiAtICB3aGlsZSAoQ2Fwc3Vs ZVB0ciA8IENhcHN1bGVEYXRhQnVmRW5kKSB7DQo+IC0gICAgQ2Fwc3VsZVNpemUgPSAoKEVGSV9D QVBTVUxFX0hFQURFUiAqKUNhcHN1bGVQdHIpLT5DYXBzdWxlSW1hZ2VTaXplOw0KPiAtICAgIEJ1 aWxkQ3ZIb2IgKChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pQ2Fwc3VsZVB0ciwgQ2Fwc3Vs ZVNpemUpOw0KPiAtDQo+IC0gICAgREVCVUcoKERFQlVHX0lORk8sICJDYXBzdWxlIHNhdmVkIGlu IGFkZHJlc3MgJXggc2l6ZSAleFxuIiwNCj4gQ2Fwc3VsZVB0ciwgQ2Fwc3VsZVNpemUpKTsNCj4g LQ0KPiAtICAgIENhcHN1bGVQdHIgKz0gQ2Fwc3VsZVNpemU7DQo+IC0gICAgSW5kZXgrKzsNCj4g LSAgfQ0KPiAtDQo+IC1FWElUOg0KPiAtDQo+IC0gIHJldHVybiBTdGF0dXM7DQo+IC19DQo+IC0N Cj4gLS8qKg0KPiAtICBSZWNvdmVyeSBtb2R1bGUgZW50cnlwb2ludA0KPiAtDQo+IC0gIEBwYXJh bVtpbl0gRmlsZUhhbmRsZSAgIEhhbmRsZSBvZiB0aGUgZmlsZSBiZWluZyBpbnZva2VkLg0KPiAt ICBAcGFyYW1baW5dIFBlaVNlcnZpY2VzICBEZXNjcmliZXMgdGhlIGxpc3Qgb2YgcG9zc2libGUg UEVJIFNlcnZpY2VzLg0KPiAtDQo+IC0gIEByZXR1cm4gRUZJX1NVQ0NFU1MgUmVjb3ZlcnkgbW9k dWxlIGlzIGluaXRpYWxpemVkLg0KPiAtKiovDQo+IC1FRklfU1RBVFVTDQo+IC1FRklBUEkNCj4g LUluaXRpYWxpemVDYXBzdWxlT25EaXNrTG9hZCAoDQo+IC0gIElOICAgICAgIEVGSV9QRUlfRklM RV9IQU5ETEUgIEZpbGVIYW5kbGUsDQo+IC0gIElOIENPTlNUIEVGSV9QRUlfU0VSVklDRVMgICAg ICoqUGVpU2VydmljZXMNCj4gLSAgKQ0KPiAtew0KPiAtICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ IC0gIFVJTlROICAgICAgIEJvb3RNb2RlOw0KPiAtICBVSU5UTiAgICAgICBGaWxlTmFtZVNpemU7 DQo+IC0NCj4gLSAgQm9vdE1vZGUgPSBHZXRCb290TW9kZUhvYigpOw0KPiAtICBBU1NFUlQoQm9v dE1vZGUgPT0gQk9PVF9PTl9GTEFTSF9VUERBVEUpOw0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIElm IHRoZXJlIGFyZSBjYXBzdWxlcyBwcm92aXNpb25lZCBpbiBtZW1vcnksIHF1aXQuDQo+IC0gIC8v IE9ubHkgb25lIGNhcHN1bGUgcmVzb3VyY2UgaXMgYWNjZXB0LCBDYXBzdWxlT25SYW0ncyBwcmlv cml0eSBpcyBoaWdoZXINCj4gdGhhbiBDYXBzdWxlT25EaXNrLg0KPiAtICAvLw0KPiAtICBpZiAo Q2hlY2tDYXBzdWxlRnJvbVJhbShQZWlTZXJ2aWNlcykpIHsNCj4gLSAgICBERUJVRygoREVCVUdf RVJST1IsICJDYXBzdWxlIE9uIE1lbW9yeSBEZXRlY3RlZCEgUXVpdC5cbiIpKTsNCj4gLSAgICBy ZXR1cm4gRUZJX0FCT1JURUQ7DQo+IC0gIH0NCj4gLQ0KPiAtICBERUJVR19DT0RFICgNCj4gLSAg IFZPSUQgKkNhcHN1bGVPbkRpc2tNb2RlUHBpOw0KPiAtDQo+IC0gIGlmICghSXNDYXBzdWxlT25E aXNrTW9kZSgpKXsNCj4gLSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gLSAgfQ0KPiAtDQo+ IC0gIC8vDQo+IC0gIC8vIENoZWNrIENhcHN1bGUgT24gRGlzayBSZWxvY2F0aW9uIGZsYWcuIElm IGV4aXN0cywgbG9hZCBjYXBzdWxlICYgY3JlYXRlDQo+IENhcHN1bGUgSG9iDQo+IC0gIC8vDQo+ IC0gIFN0YXR1cyA9IFBlaVNlcnZpY2VzTG9jYXRlUHBpICgNCj4gLSAgICAgICAgICAgICAmZ0Vk a2lpUGVpQm9vdEluQ2Fwc3VsZU9uRGlza01vZGVQcGlHdWlkLA0KPiAtICAgICAgICAgICAgIDAs DQo+IC0gICAgICAgICAgICAgTlVMTCwNCj4gLSAgICAgICAgICAgICAoVk9JRCAqKikmQ2Fwc3Vs ZU9uRGlza01vZGVQcGkNCj4gLSAgICAgICAgICAgICApOw0KPiAtICAgIGlmIChFRklfRVJST1Io U3RhdHVzKSkgew0KPiAtICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiTG9jYXRlIENhcHN1bGVP bkRpc2tNb2RlUHBpIGVycm9yICV4XG4iLA0KPiBTdGF0dXMpKTsNCj4gLSAgICAgIHJldHVybiBT dGF0dXM7DQo+IC0gICAgfQ0KPiAtICApOw0KPiAtDQo+IC0gIFN0YXR1cyA9IFBlaVNlcnZpY2Vz SW5zdGFsbFBwaSAoJm1DYXBzdWxlT25EaXNrUHBpTGlzdCk7DQo+IC0gIEFTU0VSVF9FRklfRVJS T1IgKFN0YXR1cyk7DQo+IC0NCj4gLSAgRmlsZU5hbWVTaXplID0gUGNkR2V0U2l6ZSAoUGNkQ29E UmVsb2NhdGlvbkZpbGVOYW1lKTsNCj4gLSAgU3RhdHVzID0gUGNkU2V0UHRyUyAoUGNkUmVjb3Zl cnlGaWxlTmFtZSwgJkZpbGVOYW1lU2l6ZSwgKFZPSUQgKikNCj4gUGNkR2V0UHRyKFBjZENvRFJl bG9jYXRpb25GaWxlTmFtZSkpOw0KPiAtICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiAt DQo+IC0gIHJldHVybiBTdGF0dXM7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICBMb2FkcyBhIERY RSBjYXBzdWxlIGZyb20gc29tZSBtZWRpYSBpbnRvIG1lbW9yeSBhbmQgdXBkYXRlcyB0aGUgSE9C DQo+IHRhYmxlDQo+IC0gIHdpdGggdGhlIERYRSBmaXJtd2FyZSB2b2x1bWUgaW5mb3JtYXRpb24u DQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgUGVpU2VydmljZXMgICBHZW5lcmFsLXB1cnBvc2Ugc2Vy dmljZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvDQo+IGV2ZXJ5IFBFSU0uDQo+IC0gIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgSW5kaWNhdGVzIHRoZSBFRklfUEVJX1JFQ09WRVJZX01PRFVMRV9Q UEkNCj4gaW5zdGFuY2UuDQo+IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgVGhl IGNhcHN1bGUgd2FzIGxvYWRlZCBjb3JyZWN0bHkuDQo+IC0gIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgIEEgZGV2aWNlIGVycm9yIG9jY3VycmVkLg0KPiAtICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICBBIHJlY292ZXJ5IERYRSBjYXBzdWxlIGNhbm5vdCBiZSBmb3VuZC4NCj4gLQ0KPiAt KiovDQo+IC1FRklfU1RBVFVTDQo+IC1FRklBUEkNCj4gLUxvYWRDYXBzdWxlT25EaXNrICgNCj4g LSAgSU4gRUZJX1BFSV9TRVJWSUNFUyAgICAgICAgICAgICAgICAgICAgICoqUGVpU2VydmljZXMs DQo+IC0gIElOIEVGSV9QRUlfQ0FQU1VMRV9PTl9ESVNLX1BQSSAgICAgICAgICAqVGhpcw0KPiAt ICApDQo+IC17DQo+IC0gIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gLSAgRUZJX1BFSV9ERVZJQ0VfUkVDT1ZFUllfTU9EVUxFX1BQSSAgKkRldmljZVJlY292 ZXJ5UHBpOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJS ZWNvdmVyeUNhcHN1bGVzOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbnN0YW5jZTsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fw c3VsZUluc3RhbmNlOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD YXBzdWxlU2l6ZTsNCj4gLSAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fw c3VsZVR5cGU7DQo+IC0gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBz dWxlQnVmZmVyOw0KPiAtDQo+IC0gIERFQlVHICgoREVCVUdfSU5GTyB8IERFQlVHX0xPQUQsICJM b2FkIENhcHN1bGUgT24gRGlzayBFbnRyeVxuIikpOw0KPiAtDQo+IC0gIGZvciAoSW5zdGFuY2Ug PSAwOyA7IEluc3RhbmNlKyspIHsNCj4gLSAgICBTdGF0dXMgPSBQZWlTZXJ2aWNlc0xvY2F0ZVBw aSAoDQo+IC0gICAgICAgICAgICAgICAmZ0VmaVBlaURldmljZVJlY292ZXJ5TW9kdWxlUHBpR3Vp ZCwNCj4gLSAgICAgICAgICAgICAgIEluc3RhbmNlLA0KPiAtICAgICAgICAgICAgICAgTlVMTCwN Cj4gLSAgICAgICAgICAgICAgIChWT0lEICoqKSZEZXZpY2VSZWNvdmVyeVBwaQ0KPiAtICAgICAg ICAgICAgICAgKTsNCj4gLSAgICBERUJVRyAoKERFQlVHX0lORk8sICJMb2FkQ2Fwc3VsZU9uRGlz ayAtIExvY2F0ZVJlY292ZXJ5UHBpICglZCkgLQ0KPiAgJXJcbiIsIEluc3RhbmNlLCBTdGF0dXMp KTsNCj4gLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAgICBpZiAoSW5zdGFu Y2UgPT0gMCkgew0KPiAtICAgICAgICBSRVBPUlRfU1RBVFVTX0NPREUgKA0KPiAtICAgICAgICAg IEVGSV9FUlJPUl9DT0RFIHwgRUZJX0VSUk9SX01BSk9SLA0KPiAtICAgICAgICAgIChFRklfU09G VFdBUkVfUEVJX01PRFVMRSB8DQo+IEVGSV9TV19QRUlfRUNfUkVDT1ZFUllfUFBJX05PVF9GT1VO RCkNCj4gLSAgICAgICAgICApOw0KPiAtICAgICAgfQ0KPiAtICAgICAgYnJlYWs7DQo+IC0gICAg fQ0KPiAtICAgIE51bWJlclJlY292ZXJ5Q2Fwc3VsZXMgPSAwOw0KPiAtICAgIFN0YXR1cyA9IERl dmljZVJlY292ZXJ5UHBpLT5HZXROdW1iZXJSZWNvdmVyeUNhcHN1bGVzICgNCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoRUZJX1BFSV9TRVJWSUNFUyAqKilQZWlTZXJ2aWNl cywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VSZWNvdmVyeVBw aSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTnVtYmVyUmVjb3ZlcnlD YXBzdWxlcw0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+IC0gICAg REVCVUcgKChERUJVR19JTkZPLCAiTG9hZENhcHN1bGVPbkRpc2sgLQ0KPiBHZXROdW1iZXJSZWNv dmVyeUNhcHN1bGVzICglZCkgLSAlclxuIiwgTnVtYmVyUmVjb3ZlcnlDYXBzdWxlcywNCj4gU3Rh dHVzKSk7DQo+IC0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgY29udGlu dWU7DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgZm9yIChDYXBzdWxlSW5zdGFuY2UgPSAxOyBDYXBz dWxlSW5zdGFuY2UgPD0gTnVtYmVyUmVjb3ZlcnlDYXBzdWxlczsNCj4gQ2Fwc3VsZUluc3RhbmNl KyspIHsNCj4gLSAgICAgIENhcHN1bGVTaXplID0gMDsNCj4gLSAgICAgIFN0YXR1cyA9IERldmlj ZVJlY292ZXJ5UHBpLT5HZXRSZWNvdmVyeUNhcHN1bGVJbmZvICgNCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChFRklfUEVJX1NFUlZJQ0VTICoqKVBlaVNlcnZpY2VzLA0K PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlUmVjb3ZlcnlQcGks DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlSW5zdGFuY2Us DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2Fwc3VsZVNpemUsDQo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2Fwc3VsZVR5cGUNCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+IC0gICAgICBERUJVRyAoKERF QlVHX0lORk8sICJMb2FkQ2Fwc3VsZU9uRGlzayAtIEdldFJlY292ZXJ5Q2Fwc3VsZUluZm8NCj4g KCVkIC0gJXgpIC0gJXJcbiIsIENhcHN1bGVJbnN0YW5jZSwgQ2Fwc3VsZVNpemUsIFN0YXR1cykp Ow0KPiAtICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgICBicmVhazsN Cj4gLSAgICAgIH0NCj4gLQ0KPiAtICAgICAgLy8NCj4gLSAgICAgIC8vIEFsbG9jYXRlIHRoZSBt ZW1vcnkgc28gdGhhdCBpdCBnZXRzIHByZXNlcnZlZCBpbnRvIERYRS4NCj4gLSAgICAgIC8vIENh cHN1bGUgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IG1heSBuZWVkIHRvIHBvcHVsYXRlIHRvIHN5c3Rl bSB0YWJsZQ0KPiAtICAgICAgLy8NCj4gLSAgICAgIENhcHN1bGVCdWZmZXIgPSBBbGxvY2F0ZVJ1 bnRpbWVQYWdlcyAoRUZJX1NJWkVfVE9fUEFHRVMNCj4gKENhcHN1bGVTaXplKSk7DQo+IC0NCj4g LSAgICAgIGlmIChDYXBzdWxlQnVmZmVyID09IE5VTEwpIHsNCj4gLSAgICAgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIkxvYWRDYXBzdWxlT25EaXNrIC0gQWxsb2NhdGVSdW50aW1lUGFnZXMNCj4g ZmFpbFxuIikpOw0KPiAtICAgICAgICBjb250aW51ZTsNCj4gLSAgICAgIH0NCj4gLQ0KPiAtICAg ICAgU3RhdHVzID0gRGV2aWNlUmVjb3ZlcnlQcGktPkxvYWRSZWNvdmVyeUNhcHN1bGUgKA0KPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVGSV9QRUlfU0VSVklDRVMgKiop UGVpU2VydmljZXMsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZp Y2VSZWNvdmVyeVBwaSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh cHN1bGVJbnN0YW5jZSwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh cHN1bGVCdWZmZXINCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ IC0gICAgICBERUJVRyAoKERFQlVHX0lORk8sICJMb2FkQ2Fwc3VsZU9uRGlzayAtIExvYWRSZWNv dmVyeUNhcHN1bGUgKCVkKQ0KPiAtICVyXG4iLCBDYXBzdWxlSW5zdGFuY2UsIFN0YXR1cykpOw0K PiAtICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgICBGcmVlUGFnZXMg KENhcHN1bGVCdWZmZXIsIEVGSV9TSVpFX1RPX1BBR0VTKENhcHN1bGVTaXplKSk7DQo+IC0gICAg ICAgIGJyZWFrOw0KPiAtICAgICAgfQ0KPiAtDQo+IC0gICAgICAvLw0KPiAtICAgICAgLy8gQ2Fw c3VsZSBVcGRhdGUgTW9kZSwgU3BsaXQgcmVsb2NhdGVkIENhcHN1bGUgYnVmZmVyIGludG8gZGlm ZmVyZW50DQo+IGNhcHN1bGUgdmVoaWNhbCBob2JzLg0KPiAtICAgICAgLy8NCj4gLSAgICAgIFN0 YXR1cyA9IFJldHJpZXZlUmVsb2NhdGVkQ2Fwc3VsZShDYXBzdWxlQnVmZmVyLCBDYXBzdWxlU2l6 ZSk7DQo+IC0NCj4gLSAgICAgIGJyZWFrOw0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gLSAgICAgIFJFUE9SVF9TVEFUVVNfQ09ERSAoDQo+IC0gICAg ICAgIEVGSV9FUlJPUl9DT0RFIHwgRUZJX0VSUk9SX01BSk9SLA0KPiAtICAgICAgICAoRUZJX1NP RlRXQVJFX1BFSV9NT0RVTEUgfA0KPiBFRklfU1dfUEVJX0VDX05PX1JFQ09WRVJZX0NBUFNVTEUp DQo+IC0gICAgICAgICk7DQo+IC0gICAgfQ0KPiAtDQo+IC0gICAgcmV0dXJuIFN0YXR1czsNCj4g LSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIEFueSBhdHRhY2sgYWdhaW5zdCBHUFQsIFJlbG9j YXRpb24gSW5mbyBWYXJpYWJsZSBvciB0ZW1wIHJlbG9jYXRpb24gZmlsZQ0KPiB3aWxsIHJlc3Vs dCBpbiBubyBDYXBzdWxlIEhPQiBhbmQgcmV0dXJuIEVGSV9OT1RfRk9VTkQuDQo+IC0gIC8vIEFm dGVyIGZsb3cgdG8gRFhFIHBoYXNlLiBzaW5jZSBubyBjYXBzdWxlIGhvYiBpcyBkZXRlY3RlZC4g UGxhdGZvcm0gd2lsbA0KPiBjbGVhciBJbmZvIGZsYWcgYW5kIGZvcmNlIHJlc3RhcnQuDQo+IC0g IC8vIE5vIHZvbHVuZXJhYmlsaXR5IHdpbGwgYmUgZXhwb3NlZA0KPiAtICAvLw0KPiAtDQo+IC0g IHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiAtfQ0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9DYXBzdWxlT25EaXNrTG9hZFBlaS9DYXBzdWxlT25EaXNrTG9hZFBlaS4N Cj4gaW5mDQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9DYXBzdWxlT25EaXNrTG9hZFBlaS9D YXBzdWxlT25EaXNrTG9hZFBlaS4NCj4gaW5mDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCBiMWY1NjIwNTg1Li4wMDAwMDAwMDAwDQo+IC0tLQ0KPiBhL01kZU1vZHVsZVBrZy9V bml2ZXJzYWwvQ2Fwc3VsZU9uRGlza0xvYWRQZWkvQ2Fwc3VsZU9uRGlza0xvYWRQZWkuDQo+IGlu Zg0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDY0ICswLDAgQEANCj4gLSMjIEBmaWxlDQo+IC0j IExvYWQgQ2Fwc3VsZSBvbiBEaXNrIG1vZHVsZS4NCj4gLSMNCj4gLSMgTG9hZCBDYXBzdWxlIE9u IERpc2sgZnJvbSBSb290IERpcmVjdG9yeSBmaWxlIHN5c3RlbS4gQ3JlYXRlIENWIGhvYg0KPiAt IyBiYXNlZCBvbiB0ZW1wb3JhcnkgQ2Fwc3VsZSBPbiBEaXNrIGZpbGUuDQo+IC0jDQo+IC0jIENv cHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KPiAtIw0KPiAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBh dGVudA0KPiAtIw0KPiAtIyMNCj4gLQ0KPiAtW0RlZmluZXNdDQo+IC0gIElORl9WRVJTSU9OICAg ICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gLSAgQkFTRV9OQU1FICAgICAgICAgICAg ICAgICAgICAgID0gQ2Fwc3VsZU9uRGlza0xvYWRQZWkNCj4gLSAgTU9EVUxFX1VOSV9GSUxFICAg ICAgICAgICAgICAgID0gQ2Fwc3VsZU9uRGlza0xvYWRQZWkudW5pDQo+IC0gIEZJTEVfR1VJRCAg ICAgICAgICAgICAgICAgICAgICA9IDhBREVERjlFLTJFQzgtNDBmYi1BRTU2LUI3NkQ5MDIyNUQy RA0KPiAtICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBQRUlNDQo+IC0gIFZFUlNJ T05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KPiAtICBFTlRSWV9QT0lOVCAgICAgICAg ICAgICAgICAgICAgPSBJbml0aWFsaXplQ2Fwc3VsZU9uRGlza0xvYWQNCj4gLQ0KPiAtIw0KPiAt IyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90 IHJlcXVpcmVkIGJ5IHRoZQ0KPiBidWlsZCB0b29scy4NCj4gLSMNCj4gLSMgIFZBTElEX0FSQ0hJ VEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDDQo+IC0jDQo+IC0NCj4gLVtTb3VyY2Vz XQ0KPiAtICBDYXBzdWxlT25EaXNrTG9hZFBlaS5jDQo+IC0NCj4gLVtQYWNrYWdlc10NCj4gLSAg TWRlUGtnL01kZVBrZy5kZWMNCj4gLSAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4g LQ0KPiAtW0xpYnJhcnlDbGFzc2VzXQ0KPiAtICBQZWltRW50cnlQb2ludA0KPiAtICBEZWJ1Z0xp Yg0KPiAtICBIb2JMaWINCj4gLSAgQmFzZU1lbW9yeUxpYg0KPiAtICBNZW1vcnlBbGxvY2F0aW9u TGliDQo+IC0gIFJlcG9ydFN0YXR1c0NvZGVMaWINCj4gLQ0KPiAtW1BwaXNdDQo+IC0gIGdFZGtp aVBlaUNhcHN1bGVPbkRpc2tQcGlHdWlkICAgICAgICAgICAjIyBQUk9EVUNFUw0KPiAtICBnRWZp UGVpUmVhZE9ubHlWYXJpYWJsZTJQcGlHdWlkICAgICAgICAgIyMgQ09OU1VNRVMNCj4gLSAgZ0Vk a2lpUGVpQm9vdEluQ2Fwc3VsZU9uRGlza01vZGVQcGlHdWlkICMjIFNPTUVUSU1FU19DT05TVU1F Uw0KPiAtICBnRWZpUGVpRGV2aWNlUmVjb3ZlcnlNb2R1bGVQcGlHdWlkICAgICAgIyMgQ09OU1VN RVMNCj4gLSAgZ0VmaVBlaUNhcHN1bGVQcGlHdWlkICAgICAgICAgICAgICAgICAgICMjIENPTlNV TUVTDQo+IC0NCj4gLVtHdWlkc10NCj4gLSAgZ0VmaUNhcHN1bGVWZW5kb3JHdWlkICAgICAgICAg ICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUyAjIyBWYXJpYWJsZQ0KPiBMIkNvZFJlbG9j YXRpb25JbmZvIg0KPiAtDQo+IC1bUGNkXQ0KPiAtICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkQ29EUmVsb2NhdGlvbkZpbGVOYW1lDQo+ICMjIENPTlNVTUVTDQo+IC0gIGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RDYXBzdWxlTWF4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMjDQo+IENPTlNVTUVTDQo+IC0NCj4gLVtQY2RFeF0NCj4gLSAgZ0VmaU1kZU1v ZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFJlY292ZXJ5RmlsZU5hbWUgICAgICAgICAgICAgICAg ICAgICAgIyMNCj4gUFJPRFVDRVMNCj4gLQ0KPiAtW0RlcGV4XQ0KPiAtICBnRWRraWlQZWlCb290 SW5DYXBzdWxlT25EaXNrTW9kZVBwaUd1aWQNCj4gLQ0KPiAtW1VzZXJFeHRlbnNpb25zLlRpYW5v Q29yZS4iRXh0cmFGaWxlcyJdDQo+IC0gIENhcHN1bGVPbkRpc2tMb2FkUGVpRXh0cmEudW5pDQo+ IGRpZmYgLS1naXQNCj4gYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVPbkRpc2tMb2Fk UGVpL0NhcHN1bGVPbkRpc2tMb2FkUGVpLg0KPiB1bmkNCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVy c2FsL0NhcHN1bGVPbkRpc2tMb2FkUGVpL0NhcHN1bGVPbkRpc2tMb2FkUGVpLg0KPiB1bmkNCj4g ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IGMzZWFlNmE1YzIuLjAwMDAwMDAwMDAN Cj4gLS0tDQo+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9DYXBzdWxlT25EaXNrTG9hZFBlaS9D YXBzdWxlT25EaXNrTG9hZFBlaS4NCj4gdW5pDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMTUg KzAsMCBAQA0KPiAtLy8gLyoqIEBmaWxlDQo+IC0vLyBDYXNwdWxlIE9uIERpc2sgTG9hZCBtb2R1 bGUuDQo+IC0vLw0KPiAtLy8gTG9hZCBDYXBzdWxlIE9uIERpc2sgYW5kIGJ1aWxkIENWIGhvYi4N Cj4gLS8vDQo+IC0vLyBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gLS8vDQo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiAtLy8NCj4gLS8vICoqLw0KPiAtDQo+IC0NCj4gLSNz dHJpbmcgU1RSX01PRFVMRV9BQlNUUkFDVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkNh c3B1bGUgT24gRGlzaw0KPiBMb2FkIG1vZHVsZS4iDQo+IC0NCj4gLSNzdHJpbmcgU1RSX01PRFVM RV9ERVNDUklQVElPTiAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkxvYWQgQ2Fwc3VsZSBPbg0K PiBEaXNrIGFuZCBidWlsZCBDViBob2IuIg0KPiBkaWZmIC0tZ2l0DQo+IGEvTWRlTW9kdWxlUGtn L1VuaXZlcnNhbC9DYXBzdWxlT25EaXNrTG9hZFBlaS9DYXBzdWxlT25EaXNrTG9hZFBlaQ0KPiBF eHRyYS51bmkNCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVPbkRpc2tMb2FkUGVp L0NhcHN1bGVPbkRpc2tMb2FkUGVpDQo+IEV4dHJhLnVuaQ0KPiBkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggODEwMzRmNjI5NC4uMDAwMDAwMDAwMA0KPiAtLS0NCj4gYS9NZGVNb2R1 bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVPbkRpc2tMb2FkUGVpL0NhcHN1bGVPbkRpc2tMb2FkUGVp DQo+IEV4dHJhLnVuaQ0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDE0ICswLDAgQEANCj4gLS8v IC8qKiBAZmlsZQ0KPiAtLy8gQ2Fwc3VsZU9uRGlza0xvYWRQZWkgTG9jYWxpemVkIFN0cmluZ3Mg YW5kIENvbnRlbnQNCj4gLS8vDQo+IC0vLyBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gLS8vDQo+IC0vLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiAtLy8NCj4gLS8vICoqLw0KPiAt DQo+IC0jc3RyaW5nIFNUUl9QUk9QRVJUSUVTX01PRFVMRV9OQU1FDQo+IC0jbGFuZ3VhZ2UgZW4t VVMNCj4gLSJDYXBzdWxlT25EaXNrTG9hZCBQRUkgRHJpdmVyIg0KPiAtDQo+IC0NCj4gZGlmZiAt LWdpdA0KPiBhL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZVJ1bnRpbWVEeGUvQ2Fwc3Vs ZVJ1bnRpbWVEeGUuaW5mDQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9DYXBzdWxlUnVudGlt ZUR4ZS9DYXBzdWxlUnVudGltZUR4ZS5pbmYNCj4gaW5kZXggOWRhNDUwNzIyYi4uMzM4NTc3ZTI5 MyAxMDA2NDQNCj4gLS0tDQo+IGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9DYXBzdWxlUnVudGlt ZUR4ZS9DYXBzdWxlUnVudGltZUR4ZS5pbmYNCj4gKysrDQo+IGIvTWRlTW9kdWxlUGtnL1VuaXZl cnNhbC9DYXBzdWxlUnVudGltZUR4ZS9DYXBzdWxlUnVudGltZUR4ZS5pbmYNCj4gQEAgLTg4LDEx ICs4OCwxMCBAQA0KPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRHhlSXBs U3dpdGNoVG9Mb25nTW9kZSAgICAgICMjDQo+IENPTlNVTUVTDQo+IA0KPiAgW1BjZF0NCj4gICAg Z0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZE1heFNpemVOb25Qb3B1bGF0ZUNhcHN1 bGUgICAjIw0KPiBTT01FVElNRVNfQ09OU1VNRVMNCj4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZE1heFNpemVQb3B1bGF0ZUNhcHN1bGUgICAgICAjIw0KPiBTT01FVElNRVNf Q09OU1VNRVMgIyBQb3B1bGF0ZSBJbWFnZSByZXF1aXJlcyByZXNldCBzdXBwb3J0Lg0KPiAtICBn RWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQ2Fwc3VsZUluUmFtU3VwcG9ydCAgICAg ICAgICMjDQo+IENPTlNVTUVTDQo+IA0KPiAgW1BjZC5YNjRdDQo+ICAgIGdFZmlNZGVNb2R1bGVQ a2dUb2tlblNwYWNlR3VpZC5QY2RDYXBzdWxlUGVpTG9uZ01vZGVTdGFja1NpemUNCj4gIyMgU09N RVRJTUVTX0NPTlNVTUVTDQo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RV c2UxR1BhZ2VUYWJsZSAgICAgICAgICAgICAgICAjIw0KPiBTT01FVElNRVNfQ09OU1VNRVMNCj4g DQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVSdW50aW1lRHhl L0NhcHN1bGVTZXJ2aWNlLmMNCj4gYi9NZGVNb2R1bGVQa2cvVW5pdmVyc2FsL0NhcHN1bGVSdW50 aW1lRHhlL0NhcHN1bGVTZXJ2aWNlLmMNCj4gaW5kZXggNzdiOGYwMDA2Mi4uYWFmODE5YzRjNiAx MDA2NDQNCj4gLS0tIGEvTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9DYXBzdWxlUnVudGltZUR4ZS9D YXBzdWxlU2VydmljZS5jDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQ2Fwc3VsZVJ1 bnRpbWVEeGUvQ2Fwc3VsZVNlcnZpY2UuYw0KPiBAQCAtMiwxMSArMiwxMSBAQA0KPiAgICBDYXBz dWxlIFJ1bnRpbWUgRHJpdmVyIHByb2R1Y2VzIHR3byBVRUZJIGNhcHN1bGUgcnVudGltZSBzZXJ2 aWNlcy4NCj4gICAgKFVwZGF0ZUNhcHN1bGUsIFF1ZXJ5Q2Fwc3VsZUNhcGFiaWxpdGllcykNCj4g ICAgSXQgaW5zdGFsbHMgdGhlIENhcHN1bGUgQXJjaGl0ZWN0dXJhbCBQcm90b2NvbCBkZWZpbmVk IGluIFBJMS4wYSB0byBzaWduaWZ5DQo+ICAgIHRoZSBjYXBzdWxlIHJ1bnRpbWUgc2VydmljZXMg YXJlIHJlYWR5Lg0KPiANCj4gLUNvcHlyaWdodCAoYykgMjAwNiAtIDIwMTksIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gK0NvcHlyaWdodCAoYykgMjAwNiAt IDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0KPiAgKiovDQo+ IA0KPiAgI2luY2x1ZGUgIkNhcHN1bGVTZXJ2aWNlLmgiDQo+IEBAIC02OSwxOCArNjksMTAgQEAg VXBkYXRlQ2Fwc3VsZSAoDQo+ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgTmVlZFJlc2V0 Ow0KPiAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgIEluaXRpYXRlUmVzZXQ7DQo+ICAgIENI QVIxNiAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZVZhck5hbWVbMzBdOw0KPiAgICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICpUZW1wVmFyTmFtZTsNCj4gDQo+IC0gIC8vDQo+IC0gIC8vIENo ZWNrIGlmIHBsYXRmb3JtIHN1cHBvcnQgQ2Fwc3VsZSBJbiBSQU0gb3Igbm90Lg0KPiAtICAvLyBQ bGF0Zm9ybSBjb3VsZCBjaG9vc2UgdG8gZHJvcCBDYXBzdWxlUGVpL0NhcHN1bGVYNjQgYW5kIGRv IG5vdA0KPiBzdXBwb3J0IENhcHN1bGUgSW4gUkFNLg0KPiAtICAvLw0KPiAtICBpZiAoIVBjZEdl dEJvb2woUGNkQ2Fwc3VsZUluUmFtU3VwcG9ydCkpIHsNCj4gLSAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiAtICB9DQo+IC0NCj4gICAgLy8NCj4gICAgLy8gQ2Fwc3VsZSBDb3VudCBjYW4n dCBiZSBsZXNzIHRoYW4gb25lLg0KPiAgICAvLw0KPiAgICBpZiAoQ2Fwc3VsZUNvdW50IDwgMSkg ew0KPiAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+IEBAIC0yMjQsMTIgKzIx NiwxMCBAQCBVcGRhdGVDYXBzdWxlICgNCj4gICAgcmV0dXJuIFN0YXR1czsNCj4gIH0NCj4gDQo+ ICAvKioNCj4gICAgUmV0dXJucyBpZiB0aGUgY2Fwc3VsZSBjYW4gYmUgc3VwcG9ydGVkIHZpYSBV cGRhdGVDYXBzdWxlKCkuDQo+IC0gIE5vdGljZTogV2hlbiBQY2RDYXBzdWxlSW5SYW1TdXBwb3J0 IGlzIHVuc3VwcG9ydGVkLCBldmVuIHRoaXMgcm91dGluZQ0KPiByZXR1cm5zIGEgdmFsaWQgYW5z d2VyLA0KPiAtICB0aGUgY2Fwc3VsZSBzdGlsbCBpcyB1bnN1cHBvcnRlZCB2aWEgVXBkYXRlQ2Fw c3VsZSgpLg0KPiANCj4gICAgQHBhcmFtICBDYXBzdWxlSGVhZGVyQXJyYXkgICAgVmlydHVhbCBw b2ludGVyIHRvIGFuIGFycmF5IG9mIHZpcnR1YWwNCj4gcG9pbnRlcnMgdG8gdGhlIGNhcHN1bGVz DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHBhc3NlZCBpbnRvIHVw ZGF0ZSBjYXBzdWxlLg0KPiAgICBAcGFyYW0gIENhcHN1bGVDb3VudCAgICAgICAgICBOdW1iZXIg b2YgcG9pbnRlcnMgdG8gRUZJX0NBUFNVTEVfSEVBREVSDQo+IGluDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENhc3B1bGVIZWFkZXJBcnJheS4NCj4gLS0NCj4gMi4xNi4yLndp bmRvd3MuMQ0KPiANCj4gDQo+IA0KDQo=