From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 4F94E2117CE8C for ; Mon, 22 Oct 2018 00:34:14 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Oct 2018 00:34:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,411,1534834800"; d="scan'208";a="99545686" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga004.fm.intel.com with ESMTP; 22 Oct 2018 00:34:13 -0700 Received: from fmsmsx124.amr.corp.intel.com (10.18.125.39) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 22 Oct 2018 00:34:13 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx124.amr.corp.intel.com (10.18.125.39) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 22 Oct 2018 00:34:12 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.224]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.46]) with mapi id 14.03.0319.002; Mon, 22 Oct 2018 15:34:10 +0800 From: "Wang, Jian J" To: Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Zeng, Star" , "Kinney, Michael D" , "Yao, Jiewen" , "Ni, Ruiyu" Thread-Topic: [PATCH 3/3] MdeModulePkg/Core: add use-after-free memory detection Thread-Index: AQHUZ6QINZw22FP2YUaug5+1nRvDTaUq4Rew Date: Mon, 22 Oct 2018 07:34:09 +0000 Message-ID: References: <20181019015013.7488-1-jian.j.wang@intel.com> <20181019015013.7488-4-jian.j.wang@intel.com> <76de0333-60d0-e474-7db3-1a4ff49de0d0@redhat.com> In-Reply-To: <76de0333-60d0-e474-7db3-1a4ff49de0d0@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNjQyYzM3MzgtY2EyOC00MmIyLWE3MDQtMTMxYjBiYWNhYWRjIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiV29hOFNZQUpONjBVRUhhckF3dzdKdmJiWkVwRUNjZlNiSkJCMDdkV0pkb3ZCeEZQcXY5VDFFeEhoSlhcL1RcL2NMIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 3/3] MdeModulePkg/Core: add use-after-free memory detection X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Oct 2018 07:34:14 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQpSZWdhcmRzLA0KSmlhbg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVyc2VrQHJlZGhhdC5jb21dDQo+ IFNlbnQ6IEZyaWRheSwgT2N0b2JlciAxOSwgMjAxOCA4OjA1IFBNDQo+IFRvOiBXYW5nLCBKaWFu IEogPGppYW4uai53YW5nQGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+IENj OiBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQNCj4g PG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50 ZWwuY29tPjsgTmksIFJ1aXl1DQo+IDxydWl5dS5uaUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJl OiBbUEFUQ0ggMy8zXSBNZGVNb2R1bGVQa2cvQ29yZTogYWRkIHVzZS1hZnRlci1mcmVlIG1lbW9y eQ0KPiBkZXRlY3Rpb24NCj4gDQo+IE9uIDEwLzE5LzE4IDAzOjUwLCBKaWFuIEogV2FuZyB3cm90 ZToNCj4gPiBVQUYgKFVzZS1BZnRlci1GcmVlKSBtZW1vcnkgZGV0ZWN0aW9uIGlzIG5ldyBmZWF0 dXJlIGludHJvZHVjZWQgdG8NCj4gPiBkZXRlY3QgaWxsZWdhbCBhY2Nlc3MgdG8gbWVtb3J5IHdo aWNoIGhhcyBiZWVuIGZyZWVkLiBUaGUgcHJpbmNpcGxlDQo+ID4gYmVoaW5kIGlzIHNpbWlsYXIg dG8gaGVhcCBndWFyZCBmZWF0dXJlLCB0aGF0IGlzIHRoZSBjb3JlIHR1cm4gYWxsIHBvb2wNCj4g PiBtZW1vcnkgYWxsb2NhdGlvbiB0byBwYWdlIGFsbG9jYXRpb24gYW5kIG1hcmsgdGhlbSB0byBi ZSBub3QtcHJlc2VudA0KPiA+IG9uY2UgdGhleSBhcmUgZnJlZWQuDQo+ID4NCj4gPiBUaGlzIGFs c28gaW1wbGllcyB0aGF0LCBvbmNlIGEgcGFnZSBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBpdCBj YW5ub3QNCj4gPiBiZSByZS1hbGxvY2F0ZWQuIFRoaXMgd2lsbCBicmluZyBhbm90aGVyIGlzc3Vl LCB3aGljaCBpcyB0aGF0IHRoZXJlJ3MNCj4gPiByaXNrIHRoYXQgbWVtb3J5IHNwYWNlIHdpbGwg YmUgdXNlZCBvdXQuIFRvIGFkZHJlc3MgaXQsIHRoZSBtZW1vcnkNCj4gPiBzZXJ2aWNlIGFkZCBs b2dpYyB0byBwdXQgcGFydCAoYXQgbW9zdCA2NCBwYWdlcyBhIHRpbWUpIG9mIGZyZWVkIHBhZ2Vz DQo+ID4gYmFjayBpbnRvIHBhZ2UgcG9vbCwgc28gdGhhdCB0aGUgbWVtb3J5IHNlcnZpY2UgY2Fu IHN0aWxsIGhhdmUgbWVtb3J5DQo+ID4gdG8gYWxsb2NhdGUsIHdoZW4gYWxsIG1lbW9yeSBzcGFj ZSBoYXZlIGJlZW4gYWxsb2NhdGVkIG9uY2UuIFRoaXMgaXMNCj4gPiBjYWxsZWQgbWVtb3J5IHBy b21vdGlvbi4gVGhlIHByb21vdGVkIHBhZ2VzIGFyZSBhbHdheXMgZnJvbSB0aGUgZWxkZXN0DQo+ ID4gcGFnZXMgd2hpY2ggaGF2ZW4gYmVlbiBmcmVlZC4NCj4gPg0KPiA+IFRvIHVzZSB0aGlzIGZl YXR1cmUsIG9uZSBjYW4gc2ltcGx5IHNldCBmb2xsb3dpbmcgUENEIHRvIDENCj4gPiAgIGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2VBZnRlckZyZWVEZXRlY3Rpb25Qcm9wZXJ0 eU1hc2sNCj4gPg0KPiA+IFBsZWFzZSBub3RlIHRoaXMgZmVhdHVyZSBjYW5ub3QgYmUgdXNlZCB3 aXRoIGhlYXAgZ3VhcmQgZmVhdHVyZSBjb250cm9sbGVkDQo+ID4gYnkgUENEIGdFZmlNZGVNb2R1 bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RIZWFwR3VhcmRQcm9wZXJ0eU1hc2suDQo+ID4NCj4gPiBD YzogU3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiA+IENjOiBNaWNoYWVsIEQgS2lu bmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiBDYzogSmlld2VuIFlhbyA8amll d2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IFJ1aXl1IE5pIDxydWl5dS5uaUBpbnRlbC5jb20+ DQo+ID4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ID4gQ29udHJpYnV0 ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+IFNpZ25l ZC1vZmYtYnk6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+ID4gLS0tDQo+ ID4gIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWluLmggICAgICAgICAgICAgIHwgICAxICsN Cj4gPiAgTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaW5mICAgICAgICAgICAgfCAgIDEg Kw0KPiA+ICBNZGVNb2R1bGVQa2cvQ29yZS9EeGUvR2NkL0djZC5jICAgICAgICAgICAgICB8ICAg OCArDQo+ID4gIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmMgICAgICAgIHwg MzkzDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICBNZGVNb2R1bGVQa2cvQ29y ZS9EeGUvTWVtL0hlYXBHdWFyZC5oICAgICAgICB8ICA2NiArKysrKw0KPiA+ICBNZGVNb2R1bGVQ a2cvQ29yZS9EeGUvTWVtL1BhZ2UuYyAgICAgICAgICAgICB8ICAzOSArKy0NCj4gPiAgTWRlTW9k dWxlUGtnL0NvcmUvRHhlL01lbS9Qb29sLmMgICAgICAgICAgICAgfCAgMjEgKy0NCj4gPiAgTWRl TW9kdWxlUGtnL0NvcmUvRHhlL01pc2MvUHJvcGVydGllc1RhYmxlLmMgfCAgMTYgKy0NCj4gPiAg OCBmaWxlcyBjaGFuZ2VkLCA1MTkgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pDQo+IA0K PiBJIGRvbid0IHRoaW5rIEkgY2FuIHJldmlldyB0aGlzIHBhdGNoIHdlbGwgKEknbSBub3QgYW4g TWRlTW9kdWxlUGtnDQo+IHJldmlld2VyKS4gSG93ZXZlciBJIGRvIHRoaW5rIHRoaXMgcGF0Y2gg aXMgd2F5IHRvbyBsYXJnZS4gSSBzdWdnZXN0DQo+IHNwbGl0dGluZyBvdXQgZXZlcnl0aGluZyB0 aGF0IGNvdW50cyBhcyAicHJlcGFyYXRpb24iIHRvIHNlcGFyYXRlIHBhdGNoZXMuDQo+IA0KPiBG b3IgZXhhbXBsZToNCg0KQW55IGNvbW1lbnRzIGFyZSB3ZWxjb21lLg0KDQo+IA0KPiA+IGRpZmYg LS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvRHhlTWFpbi5oDQo+IGIvTWRlTW9kdWxlUGtn L0NvcmUvRHhlL0R4ZU1haW4uaA0KPiA+IGluZGV4IDJkZWM5ZGE1ZTMuLmFlNzVjYzViMjUgMTAw NjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaA0KPiA+ICsrKyBi L01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWluLmgNCj4gPiBAQCAtOTIsNiArOTIsNyBAQCBX SVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWQ0KPiBLSU5ELCBFSVRI RVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ICAjaW5jbHVkZSA8TGlicmFyeS9EeGVTZXJ2aWNl c0xpYi5oPg0KPiA+ICAjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0FnZW50TGliLmg+DQo+ID4gICNp bmNsdWRlIDxMaWJyYXJ5L0NwdUV4Y2VwdGlvbkhhbmRsZXJMaWIuaD4NCj4gPiArI2luY2x1ZGUg PExpYnJhcnkvRGVidWdQcmludEVycm9yTGV2ZWxMaWIuaD4NCj4gPg0KPiA+DQo+ID4gIC8vDQo+ ID4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWluLmluZg0KPiBiL01k ZU1vZHVsZVBrZy9Db3JlL0R4ZS9EeGVNYWluLmluZg0KPiA+IGluZGV4IDEwMzc1NDQzYzAuLmQ5 MTI1OGMwODcgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4u aW5mDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0R4ZU1haW4uaW5mDQo+ID4gQEAg LTE5OCw2ICsxOTgsNyBAQA0KPiA+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5Q Y2RIZWFwR3VhcmRQb29sVHlwZSAgICAgICAgICAgICAgICAgICAgICAgIyMNCj4gQ09OU1VNRVMN Cj4gPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkSGVhcEd1YXJkUHJvcGVy dHlNYXNrDQo+ICMjIENPTlNVTUVTDQo+ID4gICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VH dWlkLlBjZENwdVN0YWNrR3VhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAjIw0KPiBDT05T VU1FUw0KPiA+ICsNCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVzZUFmdGVy RnJlZURldGVjdGlvblByb3BlcnR5TWFzaw0KPiAjIyBDT05TVU1FUw0KPiA+DQo+ID4gICMgW0hv Yl0NCj4gPiAgIyBSRVNPVVJDRV9ERVNDUklQVE9SICAgIyMgQ09OU1VNRVMNCj4gPiBkaWZmIC0t Z2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL0djZC9HY2QuYw0KPiBiL01kZU1vZHVsZVBrZy9D b3JlL0R4ZS9HY2QvR2NkLmMNCj4gPiBpbmRleCBkOWM2NWE4MDQ1Li5lNDNlYzc0MDEwIDEwMDY0 NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9HY2QvR2NkLmMNCj4gPiArKysgYi9N ZGVNb2R1bGVQa2cvQ29yZS9EeGUvR2NkL0djZC5jDQo+ID4gQEAgLTE2MCw2ICsxNjAsMTAgQEAg Q29yZUR1bXBHY2RNZW1vcnlTcGFjZU1hcCAoDQo+ID4gICAgICBFRklfR0NEX01FTU9SWV9TUEFD RV9ERVNDUklQVE9SICAqTWVtb3J5U3BhY2VNYXA7DQo+ID4gICAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPg0KPiA+ICsgICAgaWYgKChHZXREZWJ1Z1ByaW50 RXJyb3JMZXZlbCAoKSAmIERFQlVHX0dDRCkgPT0gMCkgew0KPiA+ICsgICAgICByZXR1cm47DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICAgICAgU3RhdHVzID0gQ29yZUdldE1lbW9yeVNwYWNlTWFw ICgmTnVtYmVyT2ZEZXNjcmlwdG9ycywNCj4gJk1lbW9yeVNwYWNlTWFwKTsNCj4gPiAgICAgIEFT U0VSVCAoU3RhdHVzID09IEVGSV9TVUNDRVNTICYmIE1lbW9yeVNwYWNlTWFwICE9IE5VTEwpOw0K PiA+DQo+IA0KPiB0aGlzIGNoYW5nZSBkb2Vzbid0IGJlbG9uZyB0byB0aGUgVUFGIGZlYXR1cmUg aW50cm9kdWN0aW9uLiBUaGlzIGNoYW5nZQ0KPiBzdHJlYW1saW5lcyBzb21lIGRlYnVnIGNvZGUs IHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHVzZWZ1bCwgYnV0IGVpdGhlcg0KPiB3YXksIGl0IHNo b3VsZCBiZSBwcmVzZW50ZWQgc2VwYXJhdGVseSwgYW5kIGRpc2N1c3NlZCBzZXBhcmF0ZWx5Lg0K PiANCg0KVGhlcmUncyBpc3N1ZSBoZXJlIGNhdXNlZCBieSBpbnRyb2R1Y3Rpb24gb2YgVUFGIChs b2NrIHJlZW50cmFuY2UsIHNlZSBiZWxvdykuDQpCdXQgeW91J3JlIHJpZ2h0IEkgc2hvdWxkIHB1 dCB0aGVtIGluIHNlcGFyYXRlIHBhdGNoLg0KDQogICBDb3JlRHVtcEdjZE1lbW9yeVNwYWNlTWFw KCkNCj0+IENvcmVHZXRNZW1vcnlTcGFjZU1hcCgpDQo9PiBDb3JlQWNxdWlyZUdjZE1lbW9yeUxv Y2sgKCkgKg0KICAgQWxsb2NhdGVQb29sKCkNCj0+IEludGVybmFsQWxsb2NhdGVQb29sKCkNCj0+ IENvcmVBbGxvY2F0ZVBvb2woKQ0KPT4gQ29yZUFsbG9jYXRlUG9vbEkoKQ0KPT4gQ29yZUFsbG9j YXRlUG9vbFBhZ2VzSSgpDQo9PiBDb3JlQWxsb2NhdGVQb29sUGFnZXMoKQ0KPT4gRmluZEZyZWVQ YWdlcygpDQo9PiBQcm9tb3RlTWVtb3J5UmVzb3VyY2UoKQ0KPT4gQ29yZUFjcXVpcmVHY2RNZW1v cnlMb2NrKCkgKioNCg0KPiA+IEBAIC0yMDIsNiArMjA2LDEwIEBAIENvcmVEdW1wR2NkSW9TcGFj ZU1hcCAoDQo+ID4gICAgICBFRklfR0NEX0lPX1NQQUNFX0RFU0NSSVBUT1IgICpJb1NwYWNlTWFw Ow0KPiA+ICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPg0KPiA+ ICsgICAgaWYgKChHZXREZWJ1Z1ByaW50RXJyb3JMZXZlbCAoKSAmIERFQlVHX0dDRCkgPT0gMCkg ew0KPiA+ICsgICAgICByZXR1cm47DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICAgICAgU3RhdHVz ID0gQ29yZUdldElvU3BhY2VNYXAgKCZOdW1iZXJPZkRlc2NyaXB0b3JzLCAmSW9TcGFjZU1hcCk7 DQo+ID4gICAgICBBU1NFUlQgKFN0YXR1cyA9PSBFRklfU1VDQ0VTUyAmJiBJb1NwYWNlTWFwICE9 IE5VTEwpOw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0v SGVhcEd1YXJkLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jDQo+ ID4gaW5kZXggNjYzZjk2OWMwZC4uYjEyMGMwNGY4ZiAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1 bGVQa2cvQ29yZS9EeGUvTWVtL0hlYXBHdWFyZC5jDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0Nv cmUvRHhlL01lbS9IZWFwR3VhcmQuYw0KPiA+IEBAIC00NCw2ICs0NCwxMSBAQCBHTE9CQUxfUkVN T1ZFX0lGX1VOUkVGRVJFTkNFRCBVSU5UTg0KPiBtTGV2ZWxTaGlmdFtHVUFSREVEX0hFQVBfTUFQ X1RBQkxFX0RFUFRIXQ0KPiA+ICBHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBVSU5UTg0K PiBtTGV2ZWxNYXNrW0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdDQo+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBU SF9NQVNLUzsNCj4gPg0KPiA+ICsvLw0KPiA+ICsvLyBVc2VkIGZvciBVc2UtQWZ0ZXItRnJlZSBt ZW1vcnkgZGV0ZWN0aW9uIHRvIHByb21vdGUgZnJlZWQgYnV0IG5vdCB1c2VkDQo+IHBhZ2VzLg0K PiA+ICsvLw0KPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfUEhZU0lDQUxf QUREUkVTUw0KPiBtTGFzdFByb21vdGVkUGFnZSA9IEJBU0VfNEdCOw0KPiA+ICsNCj4gPiAgLyoq DQo+ID4gICAgU2V0IGNvcnJlc3BvbmRpbmcgYml0cyBpbiBiaXRtYXAgdGFibGUgdG8gMSBhY2Nv cmRpbmcgdG8gdGhlIGFkZHJlc3MuDQo+ID4NCj4gPiBAQCAtMzc5LDcgKzM4NCw3IEBAIENsZWFy R3VhcmRlZE1lbW9yeUJpdHMgKA0KPiA+DQo+ID4gICAgQHJldHVybiBBbiBpbnRlZ2VyIGNvbnRh aW5pbmcgdGhlIGd1YXJkZWQgbWVtb3J5IGJpdG1hcC4NCj4gPiAgKiovDQo+ID4gLVVJTlRODQo+ ID4gK1VJTlQ2NA0KPiA+ICBHZXRHdWFyZGVkTWVtb3J5Qml0cyAoDQo+ID4gICAgSU4gRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgQWRkcmVzcywNCj4gPiAgICBJTiBVSU5UTiAgICAgICAgICAgICAg ICAgICBOdW1iZXJPZlBhZ2VzDQo+ID4gQEAgLTM4Nyw3ICszOTIsNyBAQCBHZXRHdWFyZGVkTWVt b3J5Qml0cyAoDQo+ID4gIHsNCj4gPiAgICBVSU5UNjQgICAgICAgICAgICAqQml0TWFwOw0KPiA+ ICAgIFVJTlROICAgICAgICAgICAgIEJpdHM7DQo+ID4gLSAgVUlOVE4gICAgICAgICAgICAgUmVz dWx0Ow0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgIFJlc3VsdDsNCj4gPiAgICBVSU5UTiAgICAg ICAgICAgICBTaGlmdDsNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICBCaXRzVG9Vbml0RW5kOw0K PiA+DQo+ID4gQEAgLTEyMDMsNiArMTIwOCwzNzMgQEAgU2V0QWxsR3VhcmRQYWdlcyAoDQo+ID4g ICAgfQ0KPiA+ICB9DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBV c2UtQWZ0ZXItRnJlZSAoVUFGKSBmZWF0dXJlIGlzIGVuYWJsZWQgb3Igbm90Lg0KPiA+ICsNCj4g PiArICBAcmV0dXJuIFRSVUUvRkFMU0UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0lz VWFmRW5hYmxlZCAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VS VCAoIUlzSGVhcEd1YXJkRW5hYmxlZCgpKTsNCj4gDQo+IFRoaXMgc2VlbXMgc3RyYW5nZS4gRG8g eW91IHJlYWxseSBtZWFuIHRvIGFzc2VydCB0aGF0IHRoZSBoZWFwIGd1YXJkIGlzDQo+IGRpc2Fi bGVkICpiZWZvcmUqIHlvdSBjaGVjayB0aGUgVUFGIFBDRCBzZXR0aW5nPw0KPiANCj4gLi4uIElu ZGVlZCwgSSBzZWUgc29tZSBjb25mdXNpbmcgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoaXMsIGJl bG93Og0KPiANCg0KSSBhbHNvIGZvdW5kIHRoZSBsb2dpYyBoZXJlIGlzIG5vdCByaWdodCBhZnRl ciBzZW5kaW5nIG91dCB0aGUgcGF0Y2guIEknbGwgZml4IGl0Lg0KDQo+ID4gKyAgcmV0dXJuICgo UGNkR2V0OCAoUGNkVXNlQWZ0ZXJGcmVlRGV0ZWN0aW9uUHJvcGVydHlNYXNrKSAmIEJJVDApICE9 IDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBGaW5kIHRoZSBhZGRyZXNzIG9m IHRvcC1tb3N0IGd1YXJkZWQgZnJlZSBwYWdlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1bb3V0XSAg QWRkcmVzcyAgICBTdGFydCBhZGRyZXNzIG9mIHRvcC1tb3N0IGd1YXJkZWQgZnJlZSBwYWdlLg0K PiA+ICsNCj4gPiArICBAcmV0dXJuIFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0dl dExhc3RHdWFyZGVkRnJlZVBhZ2VBZGRyZXNzICgNCj4gPiArICBPVVQgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICAqQWRkcmVzcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgIEFkZHJlc3NHcmFudWxhcml0eTsNCj4gPiArICBFRklfUEhZU0lDQUxfQURE UkVTUyAgICBCYXNlQWRkcmVzczsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBMZXZl bDsNCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICBNYXA7DQo+ID4gKyAgSU5UTiAgICAg ICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAobU1hcExldmVsID49 IDEpOw0KPiA+ICsNCj4gPiArICBCYXNlQWRkcmVzcyA9IDA7DQo+ID4gKyAgTWFwID0gbUd1YXJk ZWRNZW1vcnlNYXA7DQo+ID4gKyAgZm9yIChMZXZlbCA9IEdVQVJERURfSEVBUF9NQVBfVEFCTEVf REVQVEggLSBtTWFwTGV2ZWw7DQo+ID4gKyAgICAgICBMZXZlbCA8IEdVQVJERURfSEVBUF9NQVBf VEFCTEVfREVQVEg7DQo+ID4gKyAgICAgICArK0xldmVsKSB7DQo+ID4gKyAgICBBZGRyZXNzR3Jh bnVsYXJpdHkgPSBMU2hpZnRVNjQgKDEsIG1MZXZlbFNoaWZ0W0xldmVsXSk7DQo+ID4gKw0KPiA+ ICsgICAgLy8NCj4gPiArICAgIC8vIEZpbmQgdGhlIG5vbi1OVUxMIGVudHJ5IGF0IGxhcmdlc3Qg aW5kZXguDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgZm9yIChJbmRleCA9IChJTlROKW1MZXZlbE1h c2tbTGV2ZWxdOyBJbmRleCA+PSAwIDsgLS1JbmRleCkgew0KPiA+ICsgICAgICBpZiAoKChVSU5U NjQgKikoVUlOVE4pTWFwKVtJbmRleF0gIT0gMCkgew0KPiA+ICsgICAgICAgIEJhc2VBZGRyZXNz ICs9IE11bHRVNjR4MzIgKEFkZHJlc3NHcmFudWxhcml0eSwgKFVJTlQzMilJbmRleCk7DQo+ID4g KyAgICAgICAgTWFwID0gKChVSU5UNjQgKikoVUlOVE4pTWFwKVtJbmRleF07DQo+ID4gKyAgICAg ICAgYnJlYWs7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gRmluZCB0aGUgbm9uLXplcm8gTVNCIHRoZW4gZ2V0IHRoZSBwYWdl IGFkZHJlc3MuDQo+ID4gKyAgLy8NCj4gPiArICB3aGlsZSAoTWFwICE9IDApIHsNCj4gPiArICAg IE1hcCA9IFJTaGlmdFU2NCAoTWFwLCAxKTsNCj4gPiArICAgIEJhc2VBZGRyZXNzICs9IEVGSV9Q QUdFU19UT19TSVpFICgxKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpBZGRyZXNzID0gQmFz ZUFkZHJlc3M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlY29yZCBmcmVlZCBw YWdlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQmFzZUFkZHJlc3MgICBCYXNlIGFkZHJl c3Mgb2YganVzdCBmcmVlZCBwYWdlcy4NCj4gPiArICBAcGFyYW1baW5dICBQYWdlcyAgICAgICAg IE51bWJlciBvZiBmcmVlZCBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lELg0KPiA+ ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtNYXJrRnJlZWRQYWdlcyAoDQo+ID4gKyAgSU4gRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgIEJhc2VBZGRyZXNzLA0KPiA+ICsgIElOIFVJTlROICAgICAgICAg ICAgICAgICAgICBQYWdlcw0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFNldEd1YXJkZWRNZW1v cnlCaXRzIChCYXNlQWRkcmVzcywgUGFnZXMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBSZWNvcmQgZnJlZWQgcGFnZXMgYXMgd2VsbCBhcyBtYXJrIHRoZW0gYXMgbm90LXByZXNl bnQsIGlmIHBvc3NpYmxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBCYXNlQWRkcmVzcyAg IEJhc2UgYWRkcmVzcyBvZiBqdXN0IGZyZWVkIHBhZ2VzLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBh Z2VzICAgICAgICAgTnVtYmVyIG9mIGZyZWVkIHBhZ2VzLg0KPiA+ICsNCj4gPiArICBAcmV0dXJu IFZPSUQuDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ICtHdWFyZEZyZWVk UGFnZXMgKA0KPiA+ICsgIElOICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBCYXNlQWRkcmVzcywN Cj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgUGFnZXMNCj4gPiArICApDQo+ID4g K3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ ICsgIC8vIERvIG5vdGhpbmcgaWYNCj4gPiArICAvLyAtIFVzZS1BZnRlci1GcmVlIGRldGVjdGlv biBpcyBub3QgZW5hYmxlZA0KPiA+ICsgIC8vIC0gRnJlZWQgbWVtb3J5IGlzIGxlZ2FjeSBtZW1v cnkgbG93ZXIgdGhhbiAxTUINCj4gPiArICAvLw0KPiA+ICsgIGlmICghSXNVYWZFbmFibGVkICgp IHx8IEJhc2VBZGRyZXNzIDwgQkFTRV8xTUIpIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9 DQo+IA0KPiBPSywgc28gcmVtZW1iZXIgdGhpczogR3VhcmRGcmVlZFBhZ2VzKCkgY2FsbHMgSXNV YWZFbmFibGVkKCkuDQo+IA0KPiA+ICsNCj4gPiArICBNYXJrRnJlZWRQYWdlcyAoQmFzZUFkZHJl c3MsIFBhZ2VzKTsNCj4gPiArICBpZiAoZ0NwdSAhPSBOVUxMKSB7DQo+ID4gKyAgICAvLw0KPiA+ ICsgICAgLy8gU2V0IGZsYWcgdG8gbWFrZSBzdXJlIGFsbG9jYXRpbmcgbWVtb3J5IHdpdGhvdXQg R1VBUkQgZm9yIHBhZ2UgdGFibGUNCj4gPiArICAgIC8vIG9wZXJhdGlvbjsgb3RoZXJ3aXNlIGlu ZmluaXRlIGxvb3BzIGNvdWxkIGJlIGNhdXNlZC4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBtT25H dWFyZGluZyA9IFRSVUU7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTm90ZTogVGhpcyBtaWdo dCBvdmVyd3JpdGUgb3RoZXIgYXR0cmlidXRlcyBuZWVkZWQgYnkgb3RoZXIgZmVhdHVyZXMsDQo+ ID4gKyAgICAvLyBzdWNoIGFzIE5YIG1lbW9yeSBwcm90ZWN0aW9uLg0KPiA+ICsgICAgLy8NCj4g PiArICAgIFN0YXR1cyA9IGdDcHUtPlNldE1lbW9yeUF0dHJpYnV0ZXMgKA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBnQ3B1LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBCYXNlQWRkcmVz cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgRUZJX1BBR0VTX1RPX1NJWkUoUGFnZXMpLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBFRklfTUVNT1JZX1JQDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICk7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTm9ybWFsbHkgd2Ugc2hvdWxk IGNoZWNrIHRoZSByZXR1cm5lZCBTdGF0dXMuIEJ1dCB0aGVyZSBtaWdodCBiZQ0KPiBtZW1vcnkN Cj4gPiArICAgIC8vIGFsbG9jL2ZyZWUgaW52b2x2ZWQgaW4gU2V0TWVtb3J5QXR0cmlidXRlcygp LCB3aGljaCB3b3VsZCBmYWlsIHRoaXMNCj4gPiArICAgIC8vIGNhbGxpbmcuIEl0J3MgcmFyZSBj YXNlIHNvIGl0J3MgT0sgdG8gbGV0IGEgZmV3IHRpbnkgaG9sZXMgYmUgbm90LWd1YXJkZWQuDQo+ ID4gKyAgICAvLw0KPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAg ICBERUJVRyAoKERFQlVHX1dBUk4sICJGYWlsZWQgdG8gZ3VhcmQgZnJlZWQgcGFnZXM6ICVwICgl ZClcbiIsDQo+IEJhc2VBZGRyZXNzLCBQYWdlcykpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgbU9u R3VhcmRpbmcgPSBGQUxTRTsNCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIE1hcmsgYWxsIHBhZ2VzIGZyZWVkIGJlZm9yZSBDUFUgQXJjaCBQcm90b2NvbCBhcyBub3Qt cHJlc2VudC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0d1YXJkQWxsRnJlZWRQ YWdlcyAoDQo+ID4gKyAgVk9JRA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlROICAgICBF bnRyaWVzW0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+ICsgIFVJTlROICAgICBT aGlmdHNbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF07DQo+ID4gKyAgVUlOVE4gICAgIElu ZGljZXNbR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSF07DQo+ID4gKyAgVUlOVDY0ICAgIFRh Ymxlc1tHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIXTsNCj4gPiArICBVSU5UNjQgICAgQWRk cmVzc2VzW0dVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEhdOw0KPiA+ICsgIFVJTlQ2NCAgICBU YWJsZUVudHJ5Ow0KPiA+ICsgIFVJTlQ2NCAgICBBZGRyZXNzOw0KPiA+ICsgIFVJTlQ2NCAgICBH dWFyZFBhZ2U7DQo+ID4gKyAgSU5UTiAgICAgIExldmVsOw0KPiA+ICsgIFVJTlROICAgICBCaXRJ bmRleDsNCj4gPiArICBVSU5UTiAgICAgR3VhcmRQYWdlTnVtYmVyOw0KPiA+ICsNCj4gPiArICBp ZiAobUd1YXJkZWRNZW1vcnlNYXAgPT0gMCB8fA0KPiA+ICsgICAgICBtTWFwTGV2ZWwgPT0gMCB8 fA0KPiA+ICsgICAgICBtTWFwTGV2ZWwgPiBHVUFSREVEX0hFQVBfTUFQX1RBQkxFX0RFUFRIKSB7 DQo+ID4gKyAgICByZXR1cm47DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBDb3B5TWVtIChFbnRy aWVzLCBtTGV2ZWxNYXNrLCBzaXplb2YgKEVudHJpZXMpKTsNCj4gPiArICBDb3B5TWVtIChTaGlm dHMsIG1MZXZlbFNoaWZ0LCBzaXplb2YgKFNoaWZ0cykpOw0KPiA+ICsNCj4gPiArICBTZXRNZW0g KFRhYmxlcywgc2l6ZW9mKFRhYmxlcyksIDApOw0KPiA+ICsgIFNldE1lbSAoQWRkcmVzc2VzLCBz aXplb2YoQWRkcmVzc2VzKSwgMCk7DQo+ID4gKyAgU2V0TWVtIChJbmRpY2VzLCBzaXplb2YoSW5k aWNlcyksIDApOw0KPiA+ICsNCj4gPiArICBMZXZlbCAgICAgICAgICAgPSBHVUFSREVEX0hFQVBf TUFQX1RBQkxFX0RFUFRIIC0gbU1hcExldmVsOw0KPiA+ICsgIFRhYmxlc1tMZXZlbF0gICA9IG1H dWFyZGVkTWVtb3J5TWFwOw0KPiA+ICsgIEFkZHJlc3MgICAgICAgICA9IDA7DQo+ID4gKyAgR3Vh cmRQYWdlICAgICAgID0gKFVJTlQ2NCktMTsNCj4gPiArICBHdWFyZFBhZ2VOdW1iZXIgPSAwOw0K PiA+ICsNCj4gPiArICB3aGlsZSAoVFJVRSkgew0KPiA+ICsgICAgaWYgKEluZGljZXNbTGV2ZWxd ID4gRW50cmllc1tMZXZlbF0pIHsNCj4gPiArICAgICAgVGFibGVzW0xldmVsXSA9IDA7DQo+ID4g KyAgICAgIExldmVsICAgICAgICAtPSAxOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAg VGFibGVFbnRyeSAgPSAoKFVJTlQ2NCAqKShVSU5UTikoVGFibGVzW0xldmVsXSkpW0luZGljZXNb TGV2ZWxdXTsNCj4gPiArICAgICAgQWRkcmVzcyAgICAgPSBBZGRyZXNzZXNbTGV2ZWxdOw0KPiA+ ICsNCj4gPiArICAgICAgaWYgKExldmVsIDwgR1VBUkRFRF9IRUFQX01BUF9UQUJMRV9ERVBUSCAt IDEpIHsNCj4gPiArICAgICAgICBMZXZlbCAgICAgICAgICAgICs9IDE7DQo+ID4gKyAgICAgICAg VGFibGVzW0xldmVsXSAgICAgPSBUYWJsZUVudHJ5Ow0KPiA+ICsgICAgICAgIEFkZHJlc3Nlc1tM ZXZlbF0gID0gQWRkcmVzczsNCj4gPiArICAgICAgICBJbmRpY2VzW0xldmVsXSAgICA9IDA7DQo+ ID4gKw0KPiA+ICsgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICAgIEJpdEluZGV4ID0gMTsNCj4gPiArICAgICAgICB3aGlsZSAoQml0SW5kZXggIT0gMCkg ew0KPiA+ICsgICAgICAgICAgaWYgKChUYWJsZUVudHJ5ICYgQml0SW5kZXgpICE9IDApIHsNCj4g PiArICAgICAgICAgICAgaWYgKEd1YXJkUGFnZSA9PSAoVUlOVDY0KS0xKSB7DQo+ID4gKyAgICAg ICAgICAgICAgR3VhcmRQYWdlID0gQWRkcmVzczsNCj4gPiArICAgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgICAgICArK0d1YXJkUGFnZU51bWJlcjsNCj4gPiArICAgICAgICAgIH0gZWxzZSBpZiAo R3VhcmRQYWdlTnVtYmVyID4gMCkgew0KPiA+ICsgICAgICAgICAgICBHdWFyZEZyZWVkUGFnZXMg KEd1YXJkUGFnZSwgR3VhcmRQYWdlTnVtYmVyKTsNCj4gDQo+IFRoZW4gR3VhcmRBbGxGcmVlZFBh Z2VzKCkgY2FsbHMgR3VhcmRGcmVlZFBhZ2VzKCkuDQo+IA0KPiA+ICsgICAgICAgICAgICBHdWFy ZFBhZ2VOdW1iZXIgPSAwOw0KPiA+ICsgICAgICAgICAgICBHdWFyZFBhZ2UgICAgICAgPSAoVUlO VDY0KS0xOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgIGlmIChUYWJs ZUVudHJ5ID09IDApIHsNCj4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgQWRkcmVzcyArPSBFRklfUEFHRVNfVE9fU0laRSAoMSk7 DQo+ID4gKyAgICAgICAgICBCaXRJbmRleCA9IExTaGlmdFU2NChCaXRJbmRleCwgMSk7DQo+ID4g KyAgICAgICAgfQ0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYg KExldmVsIDwgKEdVQVJERURfSEVBUF9NQVBfVEFCTEVfREVQVEggLSAoSU5UTiltTWFwTGV2ZWwp KSB7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIEluZGlj ZXNbTGV2ZWxdICs9IDE7DQo+ID4gKyAgICBBZGRyZXNzID0gKExldmVsID09IDApID8gMCA6IEFk ZHJlc3Nlc1tMZXZlbCAtIDFdOw0KPiA+ICsgICAgQWRkcmVzc2VzW0xldmVsXSA9IEFkZHJlc3Mg fCBMU2hpZnRVNjQoSW5kaWNlc1tMZXZlbF0sIFNoaWZ0c1tMZXZlbF0pOw0KPiA+ICsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gVXBkYXRlIHRoZSBtYXhpbXVtIGFkZHJl c3Mgb2YgZnJlZWQgcGFnZSB3aGljaCBjYW4gYmUgdXNlZCBmb3INCj4gbWVtb3J5DQo+ID4gKyAg Ly8gcHJvbW90aW9uIHVwb24gb3V0LW9mLW1lbW9yeS1zcGFjZS4NCj4gPiArICAvLw0KPiA+ICsg IEdldExhc3RHdWFyZGVkRnJlZVBhZ2VBZGRyZXNzICgmQWRkcmVzcyk7DQo+ID4gKyAgaWYgKEFk ZHJlc3MgIT0gMCkgew0KPiA+ICsgICAgbUxhc3RQcm9tb3RlZFBhZ2UgPSBBZGRyZXNzOw0KPiA+ ICsgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBjaGVj a3MgdG8gc2VlIGlmIHRoZSBnaXZlbiBtZW1vcnkgbWFwIGRlc2NyaXB0b3IgaW4gYSBtZW1vcnkN Cj4gbWFwDQo+ID4gKyAgY2FuIGJlIG1lcmdlZCB3aXRoIGFueSBndWFyZGVkIGZyZWUgcGFnZXMu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgTWVtb3J5TWFwRW50cnkgICAgQSBwb2ludGVyIHRvIGEg ZGVzY3JpcHRvciBpbiBNZW1vcnlNYXAuDQo+ID4gKyAgQHBhcmFtICBNYXhBZGRyZXNzICAgICAg ICBNYXhpbXVtIGFkZHJlc3MgdG8gc3RvcCB0aGUgbWVyZ2UuDQo+ID4gKw0KPiA+ICsgIEByZXR1 cm4gVk9JRA0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArTWVyZ2VHdWFyZFBhZ2Vz ICgNCj4gPiArICBJTiBFRklfTUVNT1JZX0RFU0NSSVBUT1IgICAgICAqTWVtb3J5TWFwRW50cnks DQo+ID4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgTWF4QWRkcmVzcw0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBFbmRBZGRyZXNz Ow0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBCaXRtYXA7DQo+ID4gKyAgSU5U TiAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VzOw0KPiA+ICsNCj4gPiArICBpZiAoIUlzVWFm RW5hYmxlZCAoKSB8fA0KPiA+ICsgICAgICBNZW1vcnlNYXBFbnRyeS0+VHlwZSA+PSBFZmlNZW1v cnlNYXBwZWRJTykgew0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg Qml0bWFwID0gMDsNCj4gPiArICBQYWdlcyAgPSBFRklfU0laRV9UT19QQUdFUyAoTWF4QWRkcmVz cyAtIE1lbW9yeU1hcEVudHJ5LQ0KPiA+UGh5c2ljYWxTdGFydCk7DQo+ID4gKyAgUGFnZXMgLT0g TWVtb3J5TWFwRW50cnktPk51bWJlck9mUGFnZXM7DQo+ID4gKyAgd2hpbGUgKFBhZ2VzID4gMCkg ew0KPiA+ICsgICAgaWYgKEJpdG1hcCA9PSAwKSB7DQo+ID4gKyAgICAgIEVuZEFkZHJlc3MgPSBN ZW1vcnlNYXBFbnRyeS0+UGh5c2ljYWxTdGFydCArDQo+ID4gKyAgICAgICAgICAgICAgICAgICBF RklfUEFHRVNfVE9fU0laRSAoTWVtb3J5TWFwRW50cnktPk51bWJlck9mUGFnZXMpOw0KPiA+ICsg ICAgICBCaXRtYXAgPSBHZXRHdWFyZGVkTWVtb3J5Qml0cyhFbmRBZGRyZXNzLA0KPiBHVUFSREVE X0hFQVBfTUFQX0VOVFJZX0JJVFMpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIGlmICgo Qml0bWFwICYgMSkgPT0gMCkgew0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiAr DQo+ID4gKyAgICBQYWdlcy0tOw0KPiA+ICsgICAgTWVtb3J5TWFwRW50cnktPk51bWJlck9mUGFn ZXMrKzsNCj4gPiArICAgIEJpdG1hcCA9IFJTaGlmdFU2NCAoQml0bWFwLCAxKTsNCj4gPiArICB9 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFB1dCBwYXJ0IChhdCBtb3N0IDY0IHBh Z2VzIGEgdGltZSkgZ3VhcmRlZCBmcmVlIHBhZ2VzIGJhY2sgdG8gZnJlZSBwYWdlDQo+IHBvb2wu DQo+ID4gKw0KPiA+ICsgIFVzZS1BZnRlci1GcmVlIGRldGVjdGlvbiBtYWtlcyB1c2Ugb2YgJ1Vz ZWQgdGhlbiB0aHJvdyBhd2F5JyB3YXkgdG8NCj4gZGV0ZWN0DQo+ID4gKyAgYW55IGlsbGVnYWwg YWNjZXNzIHRvIGZyZWVkIG1lbW9yeS4gVGhlIHRocm93bi1hd2F5IG1lbW9yeSB3aWxsIGJlDQo+ IG1hcmtlZCBhcw0KPiA+ICsgIG5vdC1wcmVzZW50IHNvIHRoYXQgYW55IGFjY2VzcyB0byB0aG9z ZSBtZW1vcnkgKGFmdGVyIGZyZWUpIHdpbGwgdHJpZ2dlcg0KPiA+ICsgIHBhZ2UtZmF1bHQuDQo+ ID4gKw0KPiA+ICsgIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyB3aWxsIGNvbnN1bWUgbG90cyBv ZiBtZW1vcnkgc3BhY2UuIE9uY2Ugbm8NCj4gbWVtb3J5DQo+ID4gKyAgbGVmdCBpbiBwb29sIHRv IGFsbG9jYXRlLCB3ZSBoYXZlIHRvIHJlc3RvcmUgcGFydCBvZiB0aGUgZnJlZWQgcGFnZXMgdG8g dGhlaXINCj4gPiArICBub3JtYWwgZnVuY3Rpb24uIE90aGVyd2lzZSB0aGUgd2hvbGUgc3lzdGVt IHdpbGwgc3RvcCBmdW5jdGlvbmluZy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBTdGFydEFkZHJl c3MgICAgU3RhcnQgYWRkcmVzcyBvZiBwcm9tb3RlZCBtZW1vcnkuDQo+ID4gKyAgQHBhcmFtICBF bmRBZGRyZXNzICAgICAgRW5kIGFkZHJlc3Mgb2YgcHJvbW90ZWQgbWVtb3J5Lg0KPiA+ICsNCj4g PiArICBAcmV0dXJuIFRSVUUgICAgU3VjY2VlZGVkIHRvIHByb21vdGUgbWVtb3J5Lg0KPiA+ICsg IEByZXR1cm4gRkFMU0UgICBObyBmcmVlIG1lbW9yeSBmb3VuZC4NCj4gPiArDQo+ID4gKyoqLw0K PiA+ICtCT09MRUFODQo+ID4gK1Byb21vdGVHdWFyZGVkRnJlZVBhZ2VzICgNCj4gPiArICBPVVQg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAqU3RhcnRBZGRyZXNzLA0KPiA+ICsgIE9VVCBFRklf UEhZU0lDQUxfQUREUkVTUyAgICAgICpFbmRBZGRyZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgIEF2YWlsYWJsZVBhZ2VzOw0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAg IEJpdG1hcDsNCj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBTdGFydDsNCj4gPiArDQo+ ID4gKyAgaWYgKCFJc1VhZkVuYWJsZWQgKCkpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gU2ltaWxhciB0byBtZW1vcnkgYWxs b2NhdGlvbiBzZXJ2aWNlLCBhbHdheXMgc2VhcmNoIHRoZSBmcmVlZCBwYWdlcyBpbg0KPiA+ICsg IC8vIGRlc2NlbmRpbmcgZGlyZWN0aW9uLg0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhcnQgICAgICAg ICAgID0gbUxhc3RQcm9tb3RlZFBhZ2U7DQo+ID4gKyAgQXZhaWxhYmxlUGFnZXMgID0gMDsNCj4g PiArICB3aGlsZSAoQXZhaWxhYmxlUGFnZXMgPT0gMCkgew0KPiA+ICsgICAgU3RhcnQgLT0gRUZJ X1BBR0VTX1RPX1NJWkUoR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRTKTsNCj4gPiArICAgIC8v DQo+ID4gKyAgICAvLyBJZiB0aGUgYWRkcmVzcyB3cmFwcyBhcm91bmQsIHRyeSB0aGUgcmVhbGx5 IGZyZWVkIHBhZ2VzIGF0IHRvcC4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBpZiAoU3RhcnQgPiBt TGFzdFByb21vdGVkUGFnZSkgew0KPiA+ICsgICAgICBHZXRMYXN0R3VhcmRlZEZyZWVQYWdlQWRk cmVzcyAoJlN0YXJ0KTsNCj4gPiArICAgICAgQVNTRVJUIChTdGFydCAhPSAwKTsNCj4gPiArICAg ICAgU3RhcnQgLT0gRUZJX1BBR0VTX1RPX1NJWkUoR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRT KTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBCaXRtYXAgPSBHZXRHdWFyZGVkTWVtb3J5 Qml0cyhTdGFydCwNCj4gR1VBUkRFRF9IRUFQX01BUF9FTlRSWV9CSVRTKTsNCj4gPiArICAgIHdo aWxlIChCaXRtYXAgPiAwKSB7DQo+ID4gKyAgICAgIGlmICgoQml0bWFwICYgMSkgIT0gMCkgew0K PiA+ICsgICAgICAgICsrQXZhaWxhYmxlUGFnZXM7DQo+ID4gKyAgICAgIH0gZWxzZSBpZiAoQXZh aWxhYmxlUGFnZXMgPT0gMCkgew0KPiA+ICsgICAgICAgIFN0YXJ0ICs9IEVGSV9QQUdFU19UT19T SVpFICgxKTsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICBicmVhazsNCj4gPiAr ICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgQml0bWFwID0gUlNoaWZ0VTY0KEJpdG1hcCwgMSk7 DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoQXZhaWxhYmxlUGFnZXMp IHsNCj4gPiArICAgIERFQlVHKChERUJVR19JTkZPLCAiUHJvbW90ZWQgcGFnZXM6ICVsWCAoJVgp XHJcbiIsIFN0YXJ0LA0KPiBBdmFpbGFibGVQYWdlcykpOw0KPiA+ICsgICAgaWYgKGdDcHUgIT0g TlVMTCkgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBTZXQgZmxhZyB0byBtYWtlIHN1 cmUgYWxsb2NhdGluZyBtZW1vcnkgd2l0aG91dCBHVUFSRCBmb3IgcGFnZSB0YWJsZQ0KPiA+ICsg ICAgICAvLyBvcGVyYXRpb247IG90aGVyd2lzZSBpbmZpbml0ZSBsb29wcyBjb3VsZCBiZSBjYXVz ZWQuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIG1Pbkd1YXJkaW5nID0gVFJVRTsNCj4gPiAr ICAgICAgU3RhdHVzID0gZ0NwdS0+U2V0TWVtb3J5QXR0cmlidXRlcyAoZ0NwdSwgU3RhcnQsDQo+ IEVGSV9QQUdFU19UT19TSVpFKEF2YWlsYWJsZVBhZ2VzKSwgMCk7DQo+ID4gKyAgICAgIEFTU0VS VF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gKyAgICAgIG1Pbkd1YXJkaW5nID0gRkFMU0U7DQo+ ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgbUxhc3RQcm9tb3RlZFBhZ2UgPSBTdGFydDsNCj4g PiArICAgICpTdGFydEFkZHJlc3MgICAgID0gU3RhcnQ7DQo+ID4gKyAgICAqRW5kQWRkcmVzcyAg ICAgICA9IFN0YXJ0ICsgRUZJX1BBR0VTX1RPX1NJWkUgKEF2YWlsYWJsZVBhZ2VzKSAtIDE7DQo+ ID4gKyAgICByZXR1cm4gVFJVRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBGQUxT RTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgLyoqDQo+ID4gICAgTm90aWZ5IGZ1bmN0aW9uIHVzZWQg dG8gc2V0IGFsbCBHdWFyZCBwYWdlcyBiZWZvcmUgQ1BVIEFyY2ggUHJvdG9jb2wNCj4gaW5zdGFs bGVkLg0KPiA+ICAqKi8NCj4gPiBAQCAtMTIxMiw3ICsxNTg0LDE0IEBAIEhlYXBHdWFyZENwdUFy Y2hQcm90b2NvbE5vdGlmeSAoDQo+ID4gICAgKQ0KPiA+ICB7DQo+ID4gICAgQVNTRVJUIChnQ3B1 ICE9IE5VTEwpOw0KPiA+IC0gIFNldEFsbEd1YXJkUGFnZXMgKCk7DQo+ID4gKw0KPiA+ICsgIGlm ICgoUGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAmIDB4MEYpICE9IDApIHsNCj4g PiArICAgIFNldEFsbEd1YXJkUGFnZXMgKCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAo SXNVYWZFbmFibGVkICgpKSB7DQo+ID4gKyAgICBHdWFyZEFsbEZyZWVkUGFnZXMgKCk7DQo+IA0K PiBCdXQgR3VhcmRBbGxGcmVlZFBhZ2VzKCkgaXMgb25seSBjYWxsZWQgZGVwZW5kZW50IG9uIElz VWFmRW5hYmxlZCgpLg0KPiANCj4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbnRlcm5hbCBJc1VhZkVu YWJsZWQoKSBjYWxsLCBpbiBHdWFyZEZyZWVkUGFnZXMoKSwNCj4gaXMgc3VwZXJmbHVvdXMgLS0g YXQgbGVhc3Qgd2hlbiBHdWFyZEZyZWVkUGFnZXMoKSBpcyBjYWxsZWQgZnJvbQ0KPiBHdWFyZEFs bEZyZWVkUGFnZXMoKS4NCj4gDQo+IFRoZXJlIGFyZSBvdGhlciBwbGFjZXMgdGhhdCBjYWxsIEd1 YXJkRnJlZWRQYWdlcygpIHRvbywgYW5kIGZyb20gdGhvc2UNCj4gY2FsbCBzaXRlcywgdGhlIGlu dGVybmFsIElzVWFmRW5hYmxlZCgpIGRvZXMgc2VlbSBuZWNlc3NhcnkuDQo+IA0KPiBUaGlzIGlz IHZlcnkgY29uZnVzaW5nIHdoZW4gc29tZW9uZSB3b3VsZCBsaWtlIHRvIGNvbmZpcm0gdGhhdCB0 aGlzDQo+IHBhdGNoICJkb2VzIG5vdGhpbmciIHdoZW4gdGhlIFBDRCBpcyBjbGVhci4NCj4gDQo+ IEkgc3VnZ2VzdCB0aGUgZm9sbG93aW5nIGltcHJvdmVtZW50Og0KPiANCj4gLSBNYWtlIElzVWFm RW5hYmxlZCgpIGEgcm9idXN0IGNoZWNrZXIgZnVuY3Rpb24uIEl0IHNob3VsZCBiZSBwb3NzaWJs ZQ0KPiB0byBjYWxsIGZyb20gYW55IGNvbnRleHQsIGFuZCBpdCBzaG91bGQgb25seSB0cmlwIGFu IGFzc2VydCAocmVnYXJkaW5nDQo+IHRoZSBoZWFwIGd1YXJkKSB3aGVuIHRoZSBVQUYgZGV0ZWN0 aW9uIGlzIGluIGZhY3QgZW5hYmxlZC4NCj4gDQo+IC0gSW50cm9kdWNlIHR3byB2YXJpYW50cyBv ZiBHdWFyZEZyZWVkUGFnZXMoKS4gVGhlIGZpcnN0IHZhcmlhbnQgc2hvdWxkDQo+ICphc3N1bWUq IHRoYXQgVUFGIGRldGVjdGlvbiBpcyBlbmFibGVkLiBHdWFyZEFsbEZyZWVkUGFnZXMoKSBzaG91 bGQgY2FsbA0KPiB0aGlzIDFzdCB2YXJpYW50LiBUaGUgMm5kIHZhcmlhbnQgc2hvdWxkIGNoZWNr IFVBRiBleHBsaWNpdGx5LCBhbmQgdGhlbg0KPiBjYWxsIHRoZSAxc3QgdmFyaWFudC4NCj4gDQo+ IEJhc2ljYWxseSwgd2hlbiBJIHJlYWQgdGhyb3VnaCB0aGlzIHBhdGNoLCBJIHNob3VsZCBiZSBh YmxlIHRvIG1lbnRhbGx5DQo+IHJlcGxhY2Ugc29tZSBmdW5jdGlvbiBjYWxscyB3aXRoIGNvbnN0 YW50IEZBTFNFLg0KPiANCj4gVGhhbmtzDQo+IExhc3psbw0KPiANCj4gDQoNClRoYW5rcyBmb3Ig dGhlIHRob3JvdWdoIHJldmlldy4gWW91IGdpdmUgbWUgc29tZSBnb29kIHN1Z2dlc3Rpb25zLiBJ J2xsDQp1cGRhdGUgdGhlIGNvZGUgdG8gbWFrZSBpdCBtb3JlIGNsZWFuLg0KDQo+IA0KPiA+ICsg IH0NCj4gPiAgfQ0KPiA+DQo+ID4gIC8qKg0KPiA+IEBAIC0xMjY0LDYgKzE2NDMsMTQgQEAgRHVt cEd1YXJkZWRNZW1vcnlCaXRtYXAgKA0KPiA+ICAgIENIQVI4ICAgICAqUnVsZXIxOw0KPiA+ICAg IENIQVI4ICAgICAqUnVsZXIyOw0KPiA+DQo+ID4gKyAgaWYgKCFJc0hlYXBHdWFyZEVuYWJsZWQg KCkgJiYgIUlzVWFmRW5hYmxlZCAoKSkgew0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgaWYgKChHZXREZWJ1Z1ByaW50RXJyb3JMZXZlbCAoKSAmIEhFQVBfR1VBUkRf REVCVUdfTEVWRUwpID09IDApIHsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICAgIGlmIChtR3VhcmRlZE1lbW9yeU1hcCA9PSAwIHx8DQo+ID4gICAgICAgIG1NYXBMZXZl bCA9PSAwIHx8DQo+ID4gICAgICAgIG1NYXBMZXZlbCA+IEdVQVJERURfSEVBUF9NQVBfVEFCTEVf REVQVEgpIHsNCj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9IZWFw R3VhcmQuaA0KPiBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmgNCj4gPiBp bmRleCA4YzM0NjkyNDM5Li4zZjJhNTI4M2MyIDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBr Zy9Db3JlL0R4ZS9NZW0vSGVhcEd1YXJkLmgNCj4gPiArKysgYi9NZGVNb2R1bGVQa2cvQ29yZS9E eGUvTWVtL0hlYXBHdWFyZC5oDQo+ID4gQEAgLTQwNyw2ICs0MDcsNzIgQEAgSGVhcEd1YXJkQ3B1 QXJjaFByb3RvY29sTm90aWZ5ICgNCj4gPiAgICBWT0lEDQo+ID4gICAgKTsNCj4gPg0KPiA+ICsv KioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIG1lbW9y eSBtYXAgZGVzY3JpcHRvciBpbiBhIG1lbW9yeQ0KPiBtYXANCj4gPiArICBjYW4gYmUgbWVyZ2Vk IHdpdGggYW55IGd1YXJkZWQgZnJlZSBwYWdlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBNZW1v cnlNYXBFbnRyeSAgICBBIHBvaW50ZXIgdG8gYSBkZXNjcmlwdG9yIGluIE1lbW9yeU1hcC4NCj4g PiArICBAcGFyYW0gIE1heEFkZHJlc3MgICAgICAgIE1heGltdW0gYWRkcmVzcyB0byBzdG9wIHRo ZSBtZXJnZS4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWT0lEDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArVk9JRA0KPiA+ICtNZXJnZUd1YXJkUGFnZXMgKA0KPiA+ICsgIElOIEVGSV9NRU1PUllfREVT Q1JJUFRPUiAgICAgICpNZW1vcnlNYXBFbnRyeSwNCj4gPiArICBJTiBFRklfUEhZU0lDQUxfQURE UkVTUyAgICAgICBNYXhBZGRyZXNzDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFJlY29yZCBmcmVlZCBwYWdlcyBhcyB3ZWxsIGFzIG1hcmsgdGhlbSBhcyBub3QtcHJlc2VudCwg aWYgcG9zc2libGUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEJhc2VBZGRyZXNzICAgQmFz ZSBhZGRyZXNzIG9mIGp1c3QgZnJlZWQgcGFnZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAgUGFnZXMg ICAgICAgICBOdW1iZXIgb2YgZnJlZWQgcGFnZXMuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVk9J RC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0d1YXJkRnJlZWRQYWdl cyAoDQo+ID4gKyAgSU4gIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEJhc2VBZGRyZXNzLA0KPiA+ ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICBQYWdlcw0KPiA+ICsgICk7DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBDaGVjayB0byBzZWUgaWYgdGhlIHVzZS1hZnRlci1mcmVlIChVQUYp IGZlYXR1cmUgaXMgZW5hYmxlZCBvciBub3QuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVFJVRS9G QUxTRS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArSXNVYWZFbmFibGVkICgNCj4gPiAr ICBWT0lEDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFB1dCBwYXJ0IChhdCBt b3N0IDY0IHBhZ2VzIGEgdGltZSkgZ3VhcmRlZCBmcmVlIHBhZ2VzIGJhY2sgdG8gZnJlZSBwYWdl DQo+IHBvb2wuDQo+ID4gKw0KPiA+ICsgIFVzZS1BZnRlci1GcmVlIGRldGVjdGlvbiBtYWtlcyB1 c2Ugb2YgJ1VzZWQgdGhlbiB0aHJvdyBhd2F5JyB3YXkgdG8NCj4gZGV0ZWN0DQo+ID4gKyAgYW55 IGlsbGVnYWwgYWNjZXNzIHRvIGZyZWVkIG1lbW9yeS4gVGhlIHRocm93bi1hd2F5IG1lbW9yeSB3 aWxsIGJlDQo+IG1hcmtlZCBhcw0KPiA+ICsgIG5vdC1wcmVzZW50IHNvIHRoYXQgYW55IGFjY2Vz cyB0byB0aG9zZSBtZW1vcnkgKGFmdGVyIGZyZWUpIHdpbGwgdHJpZ2dlcg0KPiA+ICsgIHBhZ2Ut ZmF1bHQuDQo+ID4gKw0KPiA+ICsgIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyB3aWxsIGNvbnN1 bWUgbG90cyBvZiBtZW1vcnkgc3BhY2UuIE9uY2Ugbm8NCj4gbWVtb3J5DQo+ID4gKyAgbGVmdCBp biBwb29sIHRvIGFsbG9jYXRlLCB3ZSBoYXZlIHRvIHJlc3RvcmUgcGFydCBvZiB0aGUgZnJlZWQg cGFnZXMgdG8gdGhlaXINCj4gPiArICBub3JtYWwgZnVuY3Rpb24uIE90aGVyd2lzZSB0aGUgd2hv bGUgc3lzdGVtIHdpbGwgc3RvcCBmdW5jdGlvbmluZy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBT dGFydEFkZHJlc3MgICAgU3RhcnQgYWRkcmVzcyBvZiBwcm9tb3RlZCBtZW1vcnkuDQo+ID4gKyAg QHBhcmFtICBFbmRBZGRyZXNzICAgICAgRW5kIGFkZHJlc3Mgb2YgcHJvbW90ZWQgbWVtb3J5Lg0K PiA+ICsNCj4gPiArICBAcmV0dXJuIFRSVUUgICAgU3VjY2VlZGVkIHRvIHByb21vdGUgbWVtb3J5 Lg0KPiA+ICsgIEByZXR1cm4gRkFMU0UgICBObyBmcmVlIG1lbW9yeSBmb3VuZC4NCj4gPiArDQo+ ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK1Byb21vdGVHdWFyZGVkRnJlZVBhZ2VzICgNCj4g PiArICBPVVQgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAqU3RhcnRBZGRyZXNzLA0KPiA+ICsg IE9VVCBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICpFbmRBZGRyZXNzDQo+ID4gKyAgKTsNCj4g PiArDQo+ID4gIGV4dGVybiBCT09MRUFOIG1Pbkd1YXJkaW5nOw0KPiA+DQo+ID4gICNlbmRpZg0K PiA+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1BhZ2UuYw0KPiBiL01k ZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5jDQo+ID4gaW5kZXggM2I0Y2MwOGU3Yy4uOWY0 NDE5ZmE1YiAxMDA2NDQNCj4gPiAtLS0gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWVtL1BhZ2Uu Yw0KPiA+ICsrKyBiL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUGFnZS5jDQo+ID4gQEAgLTQw MSw5ICs0MDEsMTEgQEAgUHJvbW90ZU1lbW9yeVJlc291cmNlICgNCj4gPiAgICBWT0lEDQo+ID4g ICAgKQ0KPiA+ICB7DQo+ID4gLSAgTElTVF9FTlRSWSAgICAgICAgICpMaW5rOw0KPiA+IC0gIEVG SV9HQ0RfTUFQX0VOVFJZICAqRW50cnk7DQo+ID4gLSAgQk9PTEVBTiAgICAgICAgICAgIFByb21v dGVkOw0KPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAqTGluazsNCj4gPiArICBFRklfR0NE X01BUF9FTlRSWSAgICAgKkVudHJ5Ow0KPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICBQcm9t b3RlZDsNCj4gPiArICBFRklfUEhZU0lDQUxfQUREUkVTUyAgU3RhcnRBZGRyZXNzOw0KPiA+ICsg IEVGSV9QSFlTSUNBTF9BRERSRVNTICBFbmRBZGRyZXNzOw0KPiA+DQo+ID4gICAgREVCVUcgKChE RUJVR19QQUdFLCAiUHJvbW90ZSB0aGUgbWVtb3J5IHJlc291cmNlXG4iKSk7DQo+ID4NCj4gPiBA QCAtNDUxLDYgKzQ1MywyNCBAQCBQcm9tb3RlTWVtb3J5UmVzb3VyY2UgKA0KPiA+DQo+ID4gICAg Q29yZVJlbGVhc2VHY2RNZW1vcnlMb2NrICgpOw0KPiA+DQo+ID4gKyAgaWYgKCFQcm9tb3RlZCkg ew0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIElmIFVzZS1BZnRlci1GcmVlIGRldGVjdGlvbiBp cyBlbmFibGVkLCB3ZSBtaWdodCBwcm9tb3RlIHBhZ2VzIGZyb20NCj4gPiArICAgIC8vIGd1YXJk ZWQgZnJlZSBwYWdlcy4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBQcm9tb3RlZCA9IFByb21vdGVH dWFyZGVkRnJlZVBhZ2VzICgmU3RhcnRBZGRyZXNzLCAmRW5kQWRkcmVzcyk7DQo+ID4gKyAgICBp ZiAoUHJvbW90ZWQpIHsNCj4gPiArICAgICAgQ29yZUFjcXVpcmVHY2RNZW1vcnlMb2NrICgpOw0K PiA+ICsgICAgICBDb3JlQWRkUmFuZ2UgKA0KPiA+ICsgICAgICAgIEVmaUNvbnZlbnRpb25hbE1l bW9yeSwNCj4gPiArICAgICAgICBTdGFydEFkZHJlc3MsDQo+ID4gKyAgICAgICAgRW5kQWRkcmVz cywNCj4gPiArICAgICAgICBFRklfTUVNT1JZX1VDIHwgRUZJX01FTU9SWV9XQyB8IEVGSV9NRU1P UllfV1QgfA0KPiBFRklfTUVNT1JZX1dCDQo+ID4gKyAgICAgICAgKTsNCj4gPiArICAgICAgQ29y ZVJlbGVhc2VHY2RNZW1vcnlMb2NrICgpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gICAgcmV0dXJuIFByb21vdGVkOw0KPiA+ICB9DQo+ID4gIC8qKg0KPiA+IEBAIC04OTYsOSAr OTE2LDEzIEBAIENvcmVDb252ZXJ0UGFnZXNFeCAoDQo+ID4gICAgICB9DQo+ID4NCj4gPiAgICAg IC8vDQo+ID4gLSAgICAvLyBBZGQgb3VyIG5ldyByYW5nZSBpbg0KPiA+ICsgICAgLy8gQWRkIG91 ciBuZXcgcmFuZ2UgaW4uIERvbid0IGRvIHRoaXMgZm9yIGZyZWVkIHBhZ2VzIGlmIFVzZS1BZnRl ci1GcmVlDQo+ID4gKyAgICAvLyBkZXRlY3Rpb24gaXMgZW5hYmxlZC4NCj4gPiAgICAgIC8vDQo+ ID4gLSAgICBDb3JlQWRkUmFuZ2UgKE1lbVR5cGUsIFN0YXJ0LCBSYW5nZUVuZCwgQXR0cmlidXRl KTsNCj4gPiArICAgIGlmICghSXNVYWZFbmFibGVkICgpIHx8ICFDaGFuZ2luZ1R5cGUgfHwgTWVt VHlwZSAhPQ0KPiBFZmlDb252ZW50aW9uYWxNZW1vcnkpIHsNCj4gPiArICAgICAgQ29yZUFkZFJh bmdlIChNZW1UeXBlLCBTdGFydCwgUmFuZ2VFbmQsIEF0dHJpYnV0ZSk7DQo+ID4gKyAgICB9DQo+ ID4gKw0KPiA+ICAgICAgaWYgKENoYW5naW5nVHlwZSAmJiAoTWVtVHlwZSA9PSBFZmlDb252ZW50 aW9uYWxNZW1vcnkpKSB7DQo+ID4gICAgICAgIC8vDQo+ID4gICAgICAgIC8vIEF2b2lkIGNhbGxp bmcgREVCVUdfQ0xFQVJfTUVNT1JZKCkgZm9yIGFuIGFkZHJlc3Mgb2YgMCBiZWNhdXNlIHRoaXMN Cj4gPiBAQCAtMTUxNCw2ICsxNTM4LDcgQEAgQ29yZUZyZWVQYWdlcyAoDQo+ID4NCj4gPiAgICBT dGF0dXMgPSBDb3JlSW50ZXJuYWxGcmVlUGFnZXMgKE1lbW9yeSwgTnVtYmVyT2ZQYWdlcywgJk1l bW9yeVR5cGUpOw0KPiA+ICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBH dWFyZEZyZWVkUGFnZXMgKE1lbW9yeSwgTnVtYmVyT2ZQYWdlcyk7DQo+ID4gICAgICBDb3JlVXBk YXRlUHJvZmlsZSAoDQo+ID4gICAgICAgIChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBS RVRVUk5fQUREUkVTUyAoMCksDQo+ID4gICAgICAgIE1lbW9yeVByb2ZpbGVBY3Rpb25GcmVlUGFn ZXMsDQo+ID4gQEAgLTE5MDgsOSArMTkzMyw3IEBAIERvbmU6DQo+ID4gICAgKk1lbW9yeU1hcFNp emUgPSBCdWZmZXJTaXplOw0KPiA+DQo+ID4gICAgREVCVUdfQ09ERSAoDQo+ID4gLSAgICBpZiAo UGNkR2V0OCAoUGNkSGVhcEd1YXJkUHJvcGVydHlNYXNrKSAmIChCSVQxfEJJVDApKSB7DQo+ID4g LSAgICAgIER1bXBHdWFyZGVkTWVtb3J5Qml0bWFwICgpOw0KPiA+IC0gICAgfQ0KPiA+ICsgICAg RHVtcEd1YXJkZWRNZW1vcnlCaXRtYXAgKCk7DQo+ID4gICAgKTsNCj4gPg0KPiA+ICAgIHJldHVy biBTdGF0dXM7DQo+ID4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZS9NZW0vUG9v bC5jDQo+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9Qb29sLmMNCj4gPiBpbmRleCAxZmYy MDYxZjdmLi4wY2Q3NDI2N2IzIDEwMDY0NA0KPiA+IC0tLSBhL01kZU1vZHVsZVBrZy9Db3JlL0R4 ZS9NZW0vUG9vbC5jDQo+ID4gKysrIGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01lbS9Qb29sLmMN Cj4gPiBAQCAtMjYsNyArMjYsOCBAQCB0eXBlZGVmIHN0cnVjdCB7DQo+ID4gIH0gUE9PTF9GUkVF Ow0KPiA+DQo+ID4NCj4gPiAtI2RlZmluZSBQT09MX0hFQURfU0lHTkFUVVJFICAgU0lHTkFUVVJF XzMyKCdwJywnaCcsJ2QnLCcwJykNCj4gPiArI2RlZmluZSBQT09MX0hFQURfU0lHTkFUVVJFICAg ICAgIFNJR05BVFVSRV8zMigncCcsJ2gnLCdkJywnMCcpDQo+ID4gKyNkZWZpbmUgUE9PTFBBR0Vf SEVBRF9TSUdOQVRVUkUgICBTSUdOQVRVUkVfMzIoJ3AnLCdoJywnZCcsJzEnKQ0KPiA+ICB0eXBl ZGVmIHN0cnVjdCB7DQo+ID4gICAgVUlOVDMyICAgICAgICAgIFNpZ25hdHVyZTsNCj4gPiAgICBV SU5UMzIgICAgICAgICAgUmVzZXJ2ZWQ7DQo+ID4gQEAgLTM2Nyw2ICszNjgsNyBAQCBDb3JlQWxs b2NhdGVQb29sSSAoDQo+ID4gICAgVUlOVE4gICAgICAgTm9QYWdlczsNCj4gPiAgICBVSU5UTiAg ICAgICBHcmFudWxhcml0eTsNCj4gPiAgICBCT09MRUFOICAgICBIYXNQb29sVGFpbDsNCj4gPiAr ICBCT09MRUFOICAgICBQYWdlQXNQb29sOw0KPiA+DQo+ID4gICAgQVNTRVJUX0xPQ0tFRCAoJm1Q b29sTWVtb3J5TG9jayk7DQo+ID4NCj4gPiBAQCAtMzg2LDYgKzM4OCw3IEBAIENvcmVBbGxvY2F0 ZVBvb2xJICgNCj4gPg0KPiA+ICAgIEhhc1Bvb2xUYWlsICA9ICEoTmVlZEd1YXJkICYmDQo+ID4g ICAgICAgICAgICAgICAgICAgICAoKFBjZEdldDggKFBjZEhlYXBHdWFyZFByb3BlcnR5TWFzaykg JiBCSVQ3KSA9PSAwKSk7DQo+ID4gKyAgUGFnZUFzUG9vbCA9IChJc1VhZkVuYWJsZWQgKCkgJiYg IW1Pbkd1YXJkaW5nKTsNCj4gPg0KPiA+ICAgIC8vDQo+ID4gICAgLy8gQWRqdXN0aW5nIHRoZSBT aXplIHRvIGJlIG9mIHByb3BlciBhbGlnbm1lbnQgc28gdGhhdA0KPiA+IEBAIC00MDYsNyArNDA5 LDcgQEAgQ29yZUFsbG9jYXRlUG9vbEkgKA0KPiA+ICAgIC8vIElmIGFsbG9jYXRpb24gaXMgb3Zl ciBtYXggc2l6ZSwganVzdCBhbGxvY2F0ZSBwYWdlcyBmb3IgdGhlIHJlcXVlc3QNCj4gPiAgICAv LyAoc2xvdykNCj4gPiAgICAvLw0KPiA+IC0gIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdy YW51bGFyaXR5KSB8fCBOZWVkR3VhcmQpIHsNCj4gPiArICBpZiAoSW5kZXggPj0gU0laRV9UT19M SVNUIChHcmFudWxhcml0eSkgfHwgTmVlZEd1YXJkIHx8IFBhZ2VBc1Bvb2wpIHsNCj4gPiAgICAg IGlmICghSGFzUG9vbFRhaWwpIHsNCj4gPiAgICAgICAgU2l6ZSAtPSBzaXplb2YgKFBPT0xfVEFJ TCk7DQo+ID4gICAgICB9DQo+ID4gQEAgLTQ5OCw3ICs1MDEsNyBAQCBEb25lOg0KPiA+ICAgICAg Ly8NCj4gPiAgICAgIC8vIElmIHdlIGhhdmUgYSBwb29sIGJ1ZmZlciwgZmlsbCBpbiB0aGUgaGVh ZGVyICYgdGFpbCBpbmZvDQo+ID4gICAgICAvLw0KPiA+IC0gICAgSGVhZC0+U2lnbmF0dXJlID0g UE9PTF9IRUFEX1NJR05BVFVSRTsNCj4gPiArICAgIEhlYWQtPlNpZ25hdHVyZSA9IChQYWdlQXNQ b29sKSA/IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFIDoNCj4gUE9PTF9IRUFEX1NJR05BVFVSRTsN Cj4gPiAgICAgIEhlYWQtPlNpemUgICAgICA9IFNpemU7DQo+ID4gICAgICBIZWFkLT5UeXBlICAg ICAgPSAoRUZJX01FTU9SWV9UWVBFKSBQb29sVHlwZTsNCj4gPiAgICAgIEJ1ZmZlciAgICAgICAg ICA9IEhlYWQtPkRhdGE7DQo+ID4gQEAgLTYxNSw2ICs2MTgsNyBAQCBDb3JlRnJlZVBvb2xQYWdl c0kgKA0KPiA+ICAgIENvcmVGcmVlUG9vbFBhZ2VzIChNZW1vcnksIE5vUGFnZXMpOw0KPiA+ICAg IENvcmVSZWxlYXNlTWVtb3J5TG9jayAoKTsNCj4gPg0KPiA+ICsgIEd1YXJkRnJlZWRQYWdlcyAo TWVtb3J5LCBOb1BhZ2VzKTsNCj4gPiAgICBBcHBseU1lbW9yeVByb3RlY3Rpb25Qb2xpY3kgKFBv b2xUeXBlLCBFZmlDb252ZW50aW9uYWxNZW1vcnksDQo+ID4gICAgICAoRUZJX1BIWVNJQ0FMX0FE RFJFU1MpKFVJTlROKU1lbW9yeSwgRUZJX1BBR0VTX1RPX1NJWkUgKE5vUGFnZXMpKTsNCj4gPiAg fQ0KPiA+IEBAIC02ODUsMTUgKzY4OSwxOSBAQCBDb3JlRnJlZVBvb2xJICgNCj4gPiAgICBVSU5U TiAgICAgICBHcmFudWxhcml0eTsNCj4gPiAgICBCT09MRUFOICAgICBJc0d1YXJkZWQ7DQo+ID4g ICAgQk9PTEVBTiAgICAgSGFzUG9vbFRhaWw7DQo+ID4gKyAgQk9PTEVBTiAgICAgUGFnZUFzUG9v bDsNCj4gPg0KPiA+ICAgIEFTU0VSVChCdWZmZXIgIT0gTlVMTCk7DQo+ID4gICAgLy8NCj4gPiAg ICAvLyBHZXQgdGhlIGhlYWQgJiB0YWlsIG9mIHRoZSBwb29sIGVudHJ5DQo+ID4gICAgLy8NCj4g PiAtICBIZWFkID0gQ1IgKEJ1ZmZlciwgUE9PTF9IRUFELCBEYXRhLCBQT09MX0hFQURfU0lHTkFU VVJFKTsNCj4gPiArICBIZWFkID0gQkFTRV9DUiAoQnVmZmVyLCBQT09MX0hFQUQsIERhdGEpOw0K PiA+ICAgIEFTU0VSVChIZWFkICE9IE5VTEwpOw0KPiA+DQo+ID4gLSAgaWYgKEhlYWQtPlNpZ25h dHVyZSAhPSBQT09MX0hFQURfU0lHTkFUVVJFKSB7DQo+ID4gKyAgaWYgKEhlYWQtPlNpZ25hdHVy ZSAhPSBQT09MX0hFQURfU0lHTkFUVVJFICYmDQo+ID4gKyAgICAgIEhlYWQtPlNpZ25hdHVyZSAh PSBQT09MUEFHRV9IRUFEX1NJR05BVFVSRSkgew0KPiA+ICsgICAgQVNTRVJUIChIZWFkLT5TaWdu YXR1cmUgPT0gUE9PTF9IRUFEX1NJR05BVFVSRSB8fA0KPiA+ICsgICAgICAgICAgICBIZWFkLT5T aWduYXR1cmUgPT0gUE9PTFBBR0VfSEVBRF9TSUdOQVRVUkUpOw0KPiA+ICAgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAgICB9DQo+ID4NCj4gPiBAQCAtNzAxLDYgKzcwOSw3 IEBAIENvcmVGcmVlUG9vbEkgKA0KPiA+ICAgICAgICAgICAgICAgICAgSXNNZW1vcnlHdWFyZGVk ICgoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKUhlYWQpOw0KPiA+ICAgIEhhc1Bvb2xUYWls ID0gIShJc0d1YXJkZWQgJiYNCj4gPiAgICAgICAgICAgICAgICAgICAgKChQY2RHZXQ4IChQY2RI ZWFwR3VhcmRQcm9wZXJ0eU1hc2spICYgQklUNykgPT0gMCkpOw0KPiA+ICsgIFBhZ2VBc1Bvb2wg PSAoSGVhZC0+U2lnbmF0dXJlID09IFBPT0xQQUdFX0hFQURfU0lHTkFUVVJFKTsNCj4gPg0KPiA+ ICAgIGlmIChIYXNQb29sVGFpbCkgew0KPiA+ICAgICAgVGFpbCA9IEhFQURfVE9fVEFJTCAoSGVh ZCk7DQo+ID4gQEAgLTc1Nyw3ICs3NjYsNyBAQCBDb3JlRnJlZVBvb2xJICgNCj4gPiAgICAvLw0K PiA+ICAgIC8vIElmIGl0J3Mgbm90IG9uIHRoZSBsaXN0LCBpdCBtdXN0IGJlIHBvb2wgcGFnZXMN Cj4gPiAgICAvLw0KPiA+IC0gIGlmIChJbmRleCA+PSBTSVpFX1RPX0xJU1QgKEdyYW51bGFyaXR5 KSB8fCBJc0d1YXJkZWQpIHsNCj4gPiArICBpZiAoSW5kZXggPj0gU0laRV9UT19MSVNUIChHcmFu dWxhcml0eSkgfHwgSXNHdWFyZGVkIHx8IFBhZ2VBc1Bvb2wpIHsNCj4gPg0KPiA+ICAgICAgLy8N Cj4gPiAgICAgIC8vIFJldHVybiB0aGUgbWVtb3J5IHBhZ2VzIGJhY2sgdG8gZnJlZSBtZW1vcnkN Cj4gPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0NvcmUvRHhlL01pc2MvUHJvcGVydGllc1Rh YmxlLmMNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGUvTWlzYy9Qcm9wZXJ0aWVzVGFibGUuYw0K PiA+IGluZGV4IDA1ZWI0ZjQyMmIuLmY2NTk1YzkwZWQgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlTW9k dWxlUGtnL0NvcmUvRHhlL01pc2MvUHJvcGVydGllc1RhYmxlLmMNCj4gPiArKysgYi9NZGVNb2R1 bGVQa2cvQ29yZS9EeGUvTWlzYy9Qcm9wZXJ0aWVzVGFibGUuYw0KPiA+IEBAIC0zMiw2ICszMiw3 IEBAIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZDQo+IEtJTkQs IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ID4gICNpbmNsdWRlIDxHdWlkL1Byb3BlcnRp ZXNUYWJsZS5oPg0KPiA+DQo+ID4gICNpbmNsdWRlICJEeGVNYWluLmgiDQo+ID4gKyNpbmNsdWRl ICJIZWFwR3VhcmQuaCINCj4gPg0KPiA+ICAjZGVmaW5lIFBSRVZJT1VTX01FTU9SWV9ERVNDUklQ VE9SKE1lbW9yeURlc2NyaXB0b3IsIFNpemUpIFwNCj4gPiAgICAoKEVGSV9NRU1PUllfREVTQ1JJ UFRPUiAqKSgoVUlOVDggKikoTWVtb3J5RGVzY3JpcHRvcikgLSAoU2l6ZSkpKQ0KPiA+IEBAIC0y MDUsMTYgKzIwNiwxMyBAQCBNZXJnZU1lbW9yeU1hcCAoDQo+ID4gICAgICBOZXh0TWVtb3J5TWFw RW50cnkgPSBORVhUX01FTU9SWV9ERVNDUklQVE9SIChNZW1vcnlNYXBFbnRyeSwNCj4gRGVzY3Jp cHRvclNpemUpOw0KPiA+DQo+ID4gICAgICBkbyB7DQo+ID4gLSAgICAgIE1lbW9yeUJsb2NrTGVu Z3RoID0gKFVJTlQ2NCkgKEVmaVBhZ2VzVG9TaXplIChNZW1vcnlNYXBFbnRyeS0NCj4gPk51bWJl ck9mUGFnZXMpKTsNCj4gPiArICAgICAgTWVyZ2VHdWFyZFBhZ2VzIChOZXdNZW1vcnlNYXBFbnRy eSwgTmV4dE1lbW9yeU1hcEVudHJ5LQ0KPiA+UGh5c2ljYWxTdGFydCk7DQo+ID4gKyAgICAgIE1l bW9yeUJsb2NrTGVuZ3RoID0gKFVJTlQ2NCkgKEVmaVBhZ2VzVG9TaXplIChOZXdNZW1vcnlNYXBF bnRyeS0NCj4gPk51bWJlck9mUGFnZXMpKTsNCj4gPiAgICAgICAgaWYgKCgoVUlOVE4pTmV4dE1l bW9yeU1hcEVudHJ5IDwgKFVJTlROKU1lbW9yeU1hcEVuZCkgJiYNCj4gPiAtICAgICAgICAgIChN ZW1vcnlNYXBFbnRyeS0+VHlwZSA9PSBOZXh0TWVtb3J5TWFwRW50cnktPlR5cGUpICYmDQo+ID4g LSAgICAgICAgICAoTWVtb3J5TWFwRW50cnktPkF0dHJpYnV0ZSA9PSBOZXh0TWVtb3J5TWFwRW50 cnktPkF0dHJpYnV0ZSkgJiYNCj4gPiAtICAgICAgICAgICgoTWVtb3J5TWFwRW50cnktPlBoeXNp Y2FsU3RhcnQgKyBNZW1vcnlCbG9ja0xlbmd0aCkgPT0NCj4gTmV4dE1lbW9yeU1hcEVudHJ5LT5Q aHlzaWNhbFN0YXJ0KSkgew0KPiA+IC0gICAgICAgIE1lbW9yeU1hcEVudHJ5LT5OdW1iZXJPZlBh Z2VzICs9IE5leHRNZW1vcnlNYXBFbnRyeS0NCj4gPk51bWJlck9mUGFnZXM7DQo+ID4gLSAgICAg ICAgaWYgKE5ld01lbW9yeU1hcEVudHJ5ICE9IE1lbW9yeU1hcEVudHJ5KSB7DQo+ID4gLSAgICAg ICAgICBOZXdNZW1vcnlNYXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyArPSBOZXh0TWVtb3J5TWFwRW50 cnktDQo+ID5OdW1iZXJPZlBhZ2VzOw0KPiA+IC0gICAgICAgIH0NCj4gPiAtDQo+ID4gKyAgICAg ICAgICAoTmV3TWVtb3J5TWFwRW50cnktPlR5cGUgPT0gTmV4dE1lbW9yeU1hcEVudHJ5LT5UeXBl KSAmJg0KPiA+ICsgICAgICAgICAgKE5ld01lbW9yeU1hcEVudHJ5LT5BdHRyaWJ1dGUgPT0gTmV4 dE1lbW9yeU1hcEVudHJ5LT5BdHRyaWJ1dGUpDQo+ICYmDQo+ID4gKyAgICAgICAgICAoKE5ld01l bW9yeU1hcEVudHJ5LT5QaHlzaWNhbFN0YXJ0ICsgTWVtb3J5QmxvY2tMZW5ndGgpID09DQo+IE5l eHRNZW1vcnlNYXBFbnRyeS0+UGh5c2ljYWxTdGFydCkpIHsNCj4gPiArICAgICAgICBOZXdNZW1v cnlNYXBFbnRyeS0+TnVtYmVyT2ZQYWdlcyArPSBOZXh0TWVtb3J5TWFwRW50cnktDQo+ID5OdW1i ZXJPZlBhZ2VzOw0KPiA+ICAgICAgICAgIE5leHRNZW1vcnlNYXBFbnRyeSA9IE5FWFRfTUVNT1JZ X0RFU0NSSVBUT1INCj4gKE5leHRNZW1vcnlNYXBFbnRyeSwgRGVzY3JpcHRvclNpemUpOw0KPiA+ ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICAgICAgICB9IGVsc2Ugew0KPiA+DQoNCg==