From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from msmail.insydesw.com.tw (ms.insydesw.com [211.75.113.220]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A5E651A1E20 for ; Mon, 17 Oct 2016 18:48:17 -0700 (PDT) Received: from msmail.insydesw.com.tw ([fe80::74f7:f173:f4aa:9a05]) by msmail.insydesw.com.tw ([fe80::74f7:f173:f4aa:9a05%11]) with mapi id 14.01.0438.000; Tue, 18 Oct 2016 09:48:14 +0800 From: Tim Lewis To: "Ni, Ruiyu" , Vladimir Olovyannikov , "Carsey, Jaben" , "edk2-devel@lists.01.org" Thread-Topic: [PATCH] GPT Shell Application/Library Thread-Index: AQHSKOFqd/MItdLtikumGvdut267kqCtcXwA Date: Tue, 18 Oct 2016 01:48:14 +0000 Message-ID: <7236196A5DF6C040855A6D96F556A53F3F80DD@msmail.insydesw.com.tw> References: <1476595420-12566-1-git-send-email-vladimir.olovyannikov@broadcom.com> <734D49CCEBEEF84792F5B80ED585239D58E36F4F@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D58E36F4F@SHSMSX104.ccr.corp.intel.com> Accept-Language: en-US, zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [1.165.0.65] MIME-Version: 1.0 Subject: Re: [PATCH] GPT Shell Application/Library X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Oct 2016 01:48:19 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 V2Ugd291bGQgcHJlZmVyIHRoYXQgdGhpcyB0b29sIGJlIGV4dGVybmFsLiAgVGltDQoNCi0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBlZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZl bC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmIE9mIE5pLCBSdWl5dQ0KU2VudDogTW9u ZGF5LCBPY3RvYmVyIDE3LCAyMDE2IDY6NDYgUE0NClRvOiBWbGFkaW1pciBPbG92eWFubmlrb3Yg PHZsYWRpbWlyLm9sb3Z5YW5uaWtvdkBicm9hZGNvbS5jb20+OyBDYXJzZXksIEphYmVuIDxqYWJl bi5jYXJzZXlAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNClN1YmplY3Q6IFJl OiBbZWRrMl0gW1BBVENIXSBHUFQgU2hlbGwgQXBwbGljYXRpb24vTGlicmFyeQ0KDQpKYWJlbiwN CkRvIHlvdSB0aGluayB0aGF0IHByb3ZpZGluZyBhIHN0YW5kYWxvbmUgZ3B0LmVmaSBpcyBiZXR0 ZXI/IFNvIHRoYXQgU2hlbGwuZWZpIG9ubHkgcHJvdmlkZXMgdGhlIGludGVybmFsIGNvbW1hbmRz IGxpc3RlZCBpbiBTaGVsbCBzcGVjLg0KDQpUaGFua3MvUmF5DQoNCj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gRnJvbTogVmxhZGltaXIgT2xvdnlhbm5pa292IFttYWlsdG86dmxhZGlt aXIub2xvdnlhbm5pa292QGJyb2FkY29tLmNvbV0NCj4gU2VudDogU3VuZGF5LCBPY3RvYmVyIDE2 LCAyMDE2IDE6MjQgUE0NCj4gVG86IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5j b20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgTmksDQo+IFJ1aXl1IDxydWl5dS5uaUBpbnRl bC5jb20+DQo+IENjOiBWbGFkaW1pciBPbG92eWFubmlrb3YgPHZsYWRpbWlyLm9sb3Z5YW5uaWtv dkBicm9hZGNvbS5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSF0gR1BUIFNoZWxsIEFwcGxpY2F0aW9u L0xpYnJhcnkNCj4gDQo+IFRoaXMgYWxsb3dzIG1hbmFnaW5nIChjcmVhdGUsIGRlbGV0ZSwgbW9k aWZ5LCBmYXQgZm9ybWF0KSBvZiBHUFQNCj4gcGFydGl0aW9ucyBmcm9tIHdpdGhpbiBVRUZJIFNo ZWxsLg0KPiBTeW50YXg6DQo+IGdwdCA8Y29tbWFuZD4gW2RldmljZV9tYXBwZWRfbmFtZV0gW3Bh cmFtZXRlcnMuLi5dDQo+IFNlZSB1c2FnZSBleGFtcGxlcyBpbiB0aGUgLnVuaSBmaWxlDQo+IC0t LQ0KPiAgLi4uL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9GYXRGb3JtYXQuYyAgICAg fCAgNjExICsrKysrKysNCj4gIC4uLi9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvRmF0 Rm9ybWF0LmggICAgIHwgIDExMSArKw0KPiAgLi4uL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFu ZExpYi9HcHRXb3JrZXIuYyAgICAgfCAxOTAyDQo+ICsrKysrKysrKysrKysrKysrKysrDQo+ICAu Li4vTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0dwdFdvcmtlci5oICAgICB8ICAxODYg KysNCj4gIC4uLi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmMgICAgICAgICAgICAgICAgICAgICAg IHwgMTEzNSArKysrKysrKysrKysNCj4gIC4uLi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmluZiAg ICAgICAgICAgICAgICAgICAgIHwgICA3OSArDQo+ICAuLi4vVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi51bmkgICAgICAgICAgICAgICAgICAgICB8ICAxMTcgKysNCj4gIFNoZWxsUGtnL1NoZWxsUGtn LmRlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArDQo+ICBTaGVsbFBrZy9T aGVsbFBrZy5kc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKw0KPiAgOSBm aWxlcyBjaGFuZ2VkLCA0MTQ2IGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBT aGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvRmF0Rm9ybWF0LmMNCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRM aWIvRmF0Rm9ybWF0LmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBTaGVsbFBrZy9MaWJyYXJ5 L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NA0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmgN Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENv bW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQN Cj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENv bW1hbmRMaWIuaW5mDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gU2hlbGxQa2cvTGlicmFyeS9V ZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIudW5pDQo+IA0KPiBk aWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0ZhdEZv cm1hdC5jDQo+IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0ZhdEZv cm1hdC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmE3 OTA0ZTZiZTI4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZp U2hlbGxHcHRDb21tYW5kTGliL0ZhdEZvcm1hdC5jDQo+IEBAIC0wLDAgKzEsNjExIEBADQo+ICsv KiogQGZpbGUNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDEyLCBSb2IgUmlnbGFy LCBVbHRyYS1FbWJlZGRlZC5jb20uIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQ8QlI+DQo+ICsNCj4g KyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUg bGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgQlNEDQo+IExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBh dA0KPiArICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNF IE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBS RVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ ICsNCj4gKyoqLw0KPiArDQo+ICsvKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTYsIEJyb2Fk Y29tLiBBbGwgcmlnaHRzIHJlc2VydmVkICovDQo+ICsNCj4gKyNpbmNsdWRlICJGYXRGb3JtYXQu aCINCj4gKw0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArLy8gVGFibGVzDQo+ICsvLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+ICt0eXBlZGVmIHN0cnVjdA0KPiArew0KPiArICBVSU5UNjQg IFNlY3RvcnM7DQo+ICsgIFVJTlQ4ICAgU2VjdG9yc1BlckNsdXN0ZXI7DQo+ICt9IFNlY3RvcnNQ ZXJDbHVzdGVyVGFibGU7DQo+ICsNCj4gK1NUQVRJQyBTZWN0b3JzUGVyQ2x1c3RlclRhYmxlIENs dXN0ZXJTaXplVGFibGUxNltdID0NCj4gK3sNCj4gKyAgeyAzMjY4MCwgMiB9LCAgICAgLy8gMTZN QiAtIDFLDQo+ICsgIHsgMjYyMTQ0LCA0IH0sICAgIC8vIDEyOE1CIC0gMksNCj4gKyAgeyA1MjQy ODgsIDggfSwgICAgLy8gMjU2TUIgLSA0Sw0KPiArICB7IDEwNDg1NzYsIDE2IH0sICAvLyA1MTJN QiAtIDhLDQo+ICsgIHsgMjA5NzE1MiwgMzIgfSwgIC8vIDFHQiAtIDE2Sw0KPiArICB7IDQxOTQz MDQsIDY0IH0sICAvLyAyR0IgLSAzMksNCj4gKyAgeyA4Mzg4NjA4LCAxMjggfSwgLy8gMkdCIC0g NjRLIFtXYXJuaW5nIG9ubHkgc3VwcG9ydGVkIGJ5IFdpbmRvd3MgWFANCj4gb253YXJkc10NCj4g KyAgeyAwLCAwIH0gICAgICAgICAgLy8gSW52YWxpZA0KPiArfTsNCj4gKw0KPiArU1RBVElDIFNl Y3RvcnNQZXJDbHVzdGVyVGFibGUgQ2x1c3RlclNpemVUYWJsZTMyW10gPQ0KPiArew0KPiArICB7 IDUzMjQ4MCwgMSB9LCAgICAgIC8vIDI2ME1CIC0gNTEyYg0KPiArICB7IDE2Nzc3MjE2LCA4IH0s ICAgIC8vIDhHQiAtIDRLDQo+ICsgIHsgMzM1NTQ0MzIsIDE2IH0sICAgLy8gMTZHQiAtIDhLDQo+ ICsgIHsgNjcxMDg4NjQsIDMyIH0sICAgLy8gMzJHQiAtIDE2Sw0KPiArICB7IDB4RkZGRkZGRkYs IDY0IH0sIC8vID4zMkdCIC0gMzJLDQo+ICsgIHsgMCwgMCB9ICAgICAgICAgICAgLy8gSW52YWxp ZA0KPiArfTsNCj4gKw0KPiArU1RBVElDDQo+ICtFRklfTEJBIExiYU9mQ2x1c3RlciAoDQo+ICsg IElOIEZBVEZTICpGcywNCj4gKyAgSU4gVUlOVDY0IENsdXN0ZXJOdW1iZXINCj4gKyAgKQ0KPiAr ew0KPiArICBpZiAoRnMtPkZhdFR5cGUgPT0gRkFUX1RZUEVfMTYpDQo+ICsgICAgcmV0dXJuIChG cy0+Q2x1c3RlckJlZ2luTGJhICsNCj4gKyAgICAgIChGcy0+Um9vdEVudHJ5Q291bnQgKiAzMiAv IEZBVF9TRUNUT1JfU0laRSkgKw0KPiArICAgICAgKChDbHVzdGVyTnVtYmVyIC0gMikgKiBGcy0+ U2VjdG9yc1BlckNsdXN0ZXIpKTsNCj4gKyAgZWxzZQ0KPiArICAgIHJldHVybiAoKEZzLT5DbHVz dGVyQmVnaW5MYmEgKw0KPiArICAgICAgKChDbHVzdGVyTnVtYmVyIC0gMikgKiBGcy0+U2VjdG9y c1BlckNsdXN0ZXIpKSk7DQo+ICt9DQo+ICsNCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4g Ky8vIGZhdGZzX2NhbGNfY2x1c3Rlcl9zaXplOiBDYWxjdWxhdGUgd2hhdCBjbHVzdGVyIHNpemUg c2hvdWxkIGJlIHVzZWQNCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gK1NUQVRJQw0KPiAr VUlOVDggQ2FsY0NsdXN0ZXJTaXplICgNCj4gKyAgSU4gVUlOVE4gU2VjdG9ycywNCj4gKyAgSU4g Qk9PTEVBTiBJc0ZhdDMyKQ0KPiArew0KPiArICBVSU5UTiBJbmRleDsNCj4gKw0KPiArICBpZiAo IUlzRmF0MzIpIHsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgQ2x1c3RlclNpemVUYWJsZTE2W0lu ZGV4XS5TZWN0b3JzUGVyQ2x1c3RlciAhPSAwOyBJbmRleCsrKQ0KPiArICAgICAgaWYgKFNlY3Rv cnMgPD0gQ2x1c3RlclNpemVUYWJsZTE2W0luZGV4XS5TZWN0b3JzKQ0KPiArICAgICAgICByZXR1 cm4gQ2x1c3RlclNpemVUYWJsZTE2W0luZGV4XS5TZWN0b3JzUGVyQ2x1c3RlcjsNCj4gKyAgfSBl bHNlIHsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgQ2x1c3RlclNpemVUYWJsZTMyW0luZGV4XS5T ZWN0b3JzUGVyQ2x1c3RlciAhPSAwOyBJbmRleCsrKQ0KPiArICAgICAgaWYgKFNlY3RvcnMgPD0g Q2x1c3RlclNpemVUYWJsZTMyW0luZGV4XS5TZWN0b3JzKQ0KPiArICAgICAgICByZXR1cm4gQ2x1 c3RlclNpemVUYWJsZTMyW0luZGV4XS5TZWN0b3JzUGVyQ2x1c3RlcjsNCj4gKyAgfQ0KPiArDQo+ ICsgIHJldHVybiAwOw0KPiArfQ0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArLy8gZmF0 ZnNfZXJhc2Vfc2VjdG9yczogRXJhc2UgYSBudW1iZXIgb2Ygc2VjdG9ycw0KPiArLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KPiArU1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtFcmFzZVNlY3RvcnMg KA0KPiArICBJTiBGQVRGUyAqRnMsDQo+ICsgIElOIEVGSV9MQkEgTGJhLA0KPiArICBJTiBVSU5U TiBDb3VudA0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROIEluZGV4Ow0KPiArICBFRklfU1RBVFVT IFN0YXR1czsNCj4gKw0KPiArICAvLyBaZXJvIFNlY3RvciBmaXJzdA0KPiArICBaZXJvTWVtIChG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIEZBVF9TRUNUT1JfU0laRSk7DQo+ICsNCj4gKyAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgQ291bnQ7IEluZGV4KyspDQo+ICsgICAgU3RhdHVzID0gRnMt PkRpc2tJby0+V3JpdGVEaXNrICgNCj4gKyAgICAgIEZzLT5EaXNrSW8sIEZzLT5CbG9ja0lvLT5N ZWRpYS0+TWVkaWFJZCwNCj4gKyAgICAgIE11bHRVNjR4MzIgKEZzLT5TdGFydGluZ0xCQSwgRnMt PkJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpICsNCj4gKyAgICAgIE11bHRVNjR4MzIgKChMYmEg KyBJbmRleCksIEZBVF9TRUNUT1JfU0laRSksDQo+ICsgICAgICBGQVRfU0VDVE9SX1NJWkUsIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcik7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30N Cj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gKy8vIGZhdGZzX2NyZWF0ZV9ib290X3NlY3Rv cjogQ3JlYXRlIHRoZSBib290IFNlY3Rvcg0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAr U1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtDcmVhdGVCb290U2VjdG9yICgNCj4gKyAgSU4gRkFU RlMgKkZzLA0KPiArICBJTiBFRklfTEJBIEJvb3RTZWN0b3JMYmEsDQo+ICsgIElOIFVJTlQ2NCBW b2xTZWN0b3JzLA0KPiArICBJTiBDT05TVCBDSEFSOCAqTmFtZSwNCj4gKyAgSU4gQk9PTEVBTiBJ c0ZhdDMyDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gVG90YWxDbHVzdGVyczsNCj4gKyAgVUlO VE4gSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiArDQo+ICsgIC8vIFplcm8gU2Vj dG9yIGluaXRpYWxseQ0KPiArICBaZXJvTWVtIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIEZB VF9TRUNUT1JfU0laRSk7DQo+ICsNCj4gKyAgLy8gT0VNIE5hbWUgJiBKdW1wIENvZGUNCj4gKyAg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzBdID0gMHhFQjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzFdID0gMHgzQzsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzJdID0g MHg5MDsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzNdID0gMHg0RDsNCj4gKyAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzRdID0gMHg1MzsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzVdID0gMHg0NDsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzZdID0gMHg0 RjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzddID0gMHg1MzsNCj4gKyAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzhdID0gMHgzNTsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzldID0gMHgyRTsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzEwXSA9IDB4MzA7 DQo+ICsNCj4gKyAgLy8gQnl0ZXMgcGVyIFNlY3Rvcg0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbMTFdID0gKEZBVF9TRUNUT1JfU0laRSA+PiAwKSAmIDB4RkY7DQo+ICsgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclsxMl0gPSAoRkFUX1NFQ1RPUl9TSVpFID4+IDgpICYgMHhGRjsNCj4g Kw0KPiArICAvLyBHZXQgc2VjdG9ycyBwZXIgY2x1c3RlciBzaXplIGZvciB0aGUgZGlzaw0KPiAr ICBGcy0+U2VjdG9yc1BlckNsdXN0ZXIgPSBDYWxjQ2x1c3RlclNpemUgKFZvbFNlY3RvcnMsIElz RmF0MzIpOw0KPiArICBpZiAoIUZzLT5TZWN0b3JzUGVyQ2x1c3RlcikNCj4gKyAgICByZXR1cm4g MDsgLy8gSW52YWxpZCBkaXNrIHNpemUNCj4gKw0KPiArICAvLyBTZWN0b3JzIHBlciBjbHVzdGVy DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxM10gPSBGcy0+U2VjdG9yc1BlckNsdXN0 ZXI7DQo+ICsNCj4gKyAgLy8gUmVzZXJ2ZWQgU2VjdG9ycw0KPiArICBpZiAoIUlzRmF0MzIpDQo+ ICsgICAgRnMtPlJlc2VydmVkU2VjdG9ycyA9IDg7DQo+ICsgIGVsc2UNCj4gKyAgICBGcy0+UmVz ZXJ2ZWRTZWN0b3JzID0gMzI7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxNF0gPSAo RnMtPlJlc2VydmVkU2VjdG9ycyA+PiAwKSAmIDB4RkY7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9y LlNlY3RvclsxNV0gPSAoRnMtPlJlc2VydmVkU2VjdG9ycyA+PiA4KSAmIDB4RkY7DQo+ICsNCj4g KyAgLy8gTnVtYmVyIG9mIEZBVFMNCj4gKyAgRnMtPk51bU9mRmF0cyA9IDI7DQo+ICsgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3RvclsxNl0gPSBGcy0+TnVtT2ZGYXRzOw0KPiArDQo+ICsgIC8vIE1h eCBlbnRyaWVzIGluIHJvb3QgZGlyIChGQVQxNiBvbmx5KQ0KPiArICBpZiAoIUlzRmF0MzIpIHsN Cj4gKyAgICBGcy0+Um9vdEVudHJ5Q291bnQgPSA1MTI7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzE3XSA9IChGcy0+Um9vdEVudHJ5Q291bnQgPj4gMCkgJiAweEZGOw0KPiArICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxOF0gPSAoRnMtPlJvb3RFbnRyeUNvdW50ID4+IDgp ICYgMHhGRjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBGcy0+Um9vdEVudHJ5Q291bnQgPSAwOw0K PiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxN10gPSAwOw0KPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclsxOF0gPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gW0ZBVDE2XSBU b3RhbCBzZWN0b3JzICh1c2UgRkFUMzIgY291bnQgaW5zdGVhZCkNCj4gKyAgRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yWzE5XSA9IDB4MDA7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvclsy MF0gPSAweDAwOw0KPiArDQo+ICsgIC8vIE1lZGlhIHR5cGUNCj4gKyAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzIxXSA9IDB4Rjg7DQo+ICsNCj4gKw0KPiArICAvLyBGQVQxNiBCUyBEZXRhaWxz DQo+ICsgIGlmICghSXNGYXQzMikgew0KPiArICAgIC8vIENvdW50IG9mIHNlY3RvcnMgdXNlZCBi eSB0aGUgRkFUIHRhYmxlIChGQVQxNiBvbmx5KQ0KPiArICAgIFRvdGFsQ2x1c3RlcnMgPSAoVm9s U2VjdG9ycyAvIEZzLT5TZWN0b3JzUGVyQ2x1c3RlcikgKyAxOw0KPiArICAgIEZzLT5GYXRTZWN0 b3JzID0gKFRvdGFsQ2x1c3RlcnMgLyAoRkFUX1NFQ1RPUl9TSVpFIC8gMikpICsgMTsNCj4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjJdID0gKFVJTlQ4KSgoRnMtPkZhdFNlY3RvcnMg Pj4gMCkgJiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjNdID0gKFVJ TlQ4KSgoRnMtPkZhdFNlY3RvcnMgPj4gOCkgJiAweEZGKTsNCj4gKw0KPiArICAgIC8vIFNlY3Rv cnMgcGVyIHRyYWNrDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI0XSA9IDB4MDA7 DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI1XSA9IDB4MDA7DQo+ICsNCj4gKyAg ICAvLyBIZWFkcw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyNl0gPSAweDAwOw0K PiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyN10gPSAweDAwOw0KPiArDQo+ICsgICAg Ly8gSGlkZGVuIHNlY3RvcnMNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjhdID0g MHgyMDsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjldID0gMHgwMDsNCj4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzBdID0gMHgwMDsNCj4gKyAgICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbMzFdID0gMHgwMDsNCj4gKw0KPiArICAgIC8vIFRvdGFsIHNlY3RvcnMg Zm9yIHRoaXMgdm9sdW1lDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMyXSA9IChV SU5UOCkoKFZvbFNlY3RvcnMgPj4gMCkgJiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbMzNdID0gKFVJTlQ4KSgoVm9sU2VjdG9ycyA+PiA4KSAmIDB4RkYpOw0KPiArICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszNF0gPSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDE2 KSAmIDB4RkYpOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszNV0gPSAoVUlOVDgp KChWb2xTZWN0b3JzID4+IDI0KSAmIDB4RkYpOw0KPiArDQo+ICsgICAgLy8gRHJpdmUgbnVtYmVy DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM2XSA9IDB4MDA7DQo+ICsNCj4gKyAg ICAvLyBSZXNlcnZlZA0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszN10gPSAweDAw Ow0KPiArDQo+ICsgICAgLy8gQm9vdCBzaWduYXR1cmUNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbMzhdID0gMHgyOTsNCj4gKw0KPiArICAgIC8vIFZvbHVtZSBJRA0KPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3RvclszOV0gPSAweDEyOw0KPiArICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcls0MF0gPSAweDM0Ow0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0 MV0gPSAweDU2Ow0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0Ml0gPSAweDc4Ow0K PiArDQo+ICsgICAgLy8gVm9sdW1lIG5hbWUNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCAxMTsgSW5kZXgrKykgew0KPiArICAgICAgaWYgKEluZGV4IDwgQXNjaWlTdHJMZW4gKE5hbWUp KQ0KPiArICAgICAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbSW5kZXggKyA0M10gPSBOYW1l W0luZGV4XTsNCj4gKyAgICAgIGVsc2UNCj4gKyAgICAgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yW0luZGV4ICsgNDNdID0gJyAnOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIEZpbGUgc3lz IHR5cGUNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNTRdID0gJ0YnOw0KPiArICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1NV0gPSAnQSc7DQo+ICsgICAgRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yWzU2XSA9ICdUJzsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3Jb NTddID0gJzEnOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1OF0gPSAnNic7DQo+ ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzU5XSA9ICcgJzsNCj4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbNjBdID0gJyAnOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3Rvcls2MV0gPSAnICc7DQo+ICsNCj4gKyAgICAvLyBTaWduYXR1cmUNCj4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbNTEwXSA9IDB4NTU7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzUxMV0gPSAweEFBOw0KPiArICB9DQo+ICsgIC8vIEZBVDMyIEJTIERldGFpbHMNCj4g KyAgZWxzZSB7DQo+ICsgICAgLy8gQ291bnQgb2Ygc2VjdG9ycyB1c2VkIGJ5IHRoZSBGQVQgdGFi bGUgKEZBVDE2IG9ubHkpDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzIyXSA9IDA7 DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzIzXSA9IDA7DQo+ICsNCj4gKyAgICAv LyBTZWN0b3JzIHBlciB0cmFjayAoZGVmYXVsdCkNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbMjRdID0gMHgzRjsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjVdID0g MHgwMDsNCj4gKw0KPiArICAgIC8vIEhlYWRzIChkZWZhdWx0KQ0KPiArICAgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3RvclsyNl0gPSAweEZGOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv clsyN10gPSAweDAwOw0KPiArDQo+ICsgICAgLy8gSGlkZGVuIHNlY3RvcnMNCj4gKyAgICBGcy0+ Q3VycmVudFNlY3Rvci5TZWN0b3JbMjhdID0gMHgwMDsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbMjldID0gMHgwMDsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzBd ID0gMHgwMDsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzFdID0gMHgwMDsNCj4g Kw0KPiArICAgIC8vIFRvdGFsIHNlY3RvcnMgZm9yIHRoaXMgdm9sdW1lDQo+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzMyXSA9IChVSU5UOCkoKFZvbFNlY3RvcnMgPj4gMCkgJiAweEZG KTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzNdID0gKFVJTlQ4KSgoVm9sU2Vj dG9ycyA+PiA4KSAmIDB4RkYpOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszNF0g PSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDE2KSAmIDB4RkYpOw0KPiArICAgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3RvclszNV0gPSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDI0KSAmIDB4RkYpOw0K PiArDQo+ICsgICAgVG90YWxDbHVzdGVycyA9IChWb2xTZWN0b3JzIC8gRnMtPlNlY3RvcnNQZXJD bHVzdGVyKSArIDE7DQo+ICsgICAgRnMtPkZhdFNlY3RvcnMgPSAoVG90YWxDbHVzdGVycyAvIChG QVRfU0VDVE9SX1NJWkUgLyA0KSkgKyAxOw0KPiArDQo+ICsgICAgLy8gQlBCX0ZBVFN6MzINCj4g KyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzZdID0gKFVJTlQ4KSgoRnMtPkZhdFNlY3Rv cnMgPj4gMCkgJiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzddID0g KFVJTlQ4KSgoRnMtPkZhdFNlY3RvcnMgPj4gOCkgJiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbMzhdID0gKFVJTlQ4KSgoRnMtPkZhdFNlY3RvcnMgPj4gMTYpICYgMHhG Rik7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM5XSA9IChVSU5UOCkoKEZzLT5G YXRTZWN0b3JzID4+IDI0KSAmIDB4RkYpOw0KPiArDQo+ICsgICAgLy8gQlBCX0V4dEZsYWdzDQo+ ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQwXSA9IDA7DQo+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzQxXSA9IDA7DQo+ICsNCj4gKyAgICAvLyBCUEJfRlNWZXINCj4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDJdID0gMDsNCj4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbNDNdID0gMDsNCj4gKw0KPiArICAgIC8vIEJQQl9Sb290Q2x1cw0KPiArICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0NF0gPSAoVUlOVDgpKChGcy0+Um9vdGRpckZpcnN0 Q2x1c3RlciA+PiAwKSAmDQo+IDB4RkYpOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv cls0NV0gPSAoVUlOVDgpKChGcy0+Um9vdGRpckZpcnN0Q2x1c3RlciA+PiA4KSAmDQo+IDB4RkYp Ow0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0Nl0gPSAoVUlOVDgpKChGcy0+Um9v dGRpckZpcnN0Q2x1c3RlciA+PiAxNikgJg0KPiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbNDddID0gKFVJTlQ4KSgoRnMtPlJvb3RkaXJGaXJzdENsdXN0ZXIgPj4gMjQp ICYNCj4gMHhGRik7DQo+ICsNCj4gKyAgICAvLyBCUEJfRlNJbmZvDQo+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzQ4XSA9IChVSU5UOCkoKEZzLT5Gc0luZm9TZWN0b3IgPj4gMCkgJiAw eEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDldID0gKFVJTlQ4KSgoRnMt PkZzSW5mb1NlY3RvciA+PiA4KSAmIDB4RkYpOw0KPiArDQo+ICsgICAgLy8gQlBCX0JrQm9vdFNl Yw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1MF0gPSA2Ow0KPiArICAgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3Rvcls1MV0gPSAwOw0KPiArDQo+ICsgICAgLy8gRHJpdmUgbnVtYmVy DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzY0XSA9IDB4MDA7DQo+ICsNCj4gKyAg ICAvLyBCb290IHNpZ25hdHVyZQ0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2Nl0g PSAweDI5Ow0KPiArDQo+ICsgICAgLy8gVm9sdW1lIElEDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzY3XSA9IDB4MTI7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzY4 XSA9IDB4MzQ7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzY5XSA9IDB4NTY7DQo+ ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzcwXSA9IDB4Nzg7DQo+ICsNCj4gKyAgICAv LyBWb2x1bWUgbmFtZQ0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IDExOyBJbmRleCsr KSB7DQo+ICsgICAgICBpZiAoSW5kZXggPCAoaW50KUFzY2lpU3RyTGVuIChOYW1lKSkNCj4gKyAg ICAgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yW0luZGV4ICsgNzFdID0gTmFtZVtJbmRleF07 DQo+ICsgICAgICBlbHNlDQo+ICsgICAgICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvcltJbmRl eCArIDcxXSA9ICcgJzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLyBGaWxlIHN5cyB0eXBlDQo+ ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzgyXSA9ICdGJzsNCj4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbODNdID0gJ0EnOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3Rvcls4NF0gPSAnVCc7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzg1XSA9ICcz JzsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODZdID0gJzInOw0KPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls4N10gPSAnICc7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzg4XSA9ICcgJzsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODld ID0gJyAnOw0KPiArDQo+ICsgICAgLy8gU2lnbmF0dXJlDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yWzUxMF0gPSAweDU1Ow0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1 MTFdID0gMHhBQTsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEZzLT5EaXNrSW8tPldyaXRl RGlzayAoDQo+ICsgICAgRnMtPkRpc2tJbywgRnMtPkJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0K PiArICAgIE11bHRVNjR4MzIgKEZzLT5TdGFydGluZ0xCQSwgRnMtPkJsb2NrSW8tPk1lZGlhLT5C bG9ja1NpemUpICsNCj4gKyAgICBNdWx0VTY0eDMyIChGcy0+RmF0QmVnaW5MYmEsIEZBVF9TRUNU T1JfU0laRSksDQo+ICsgICAgRkFUX1NFQ1RPUl9TSVpFLA0KPiArICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcik7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKy8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCj4gKy8vIGZhdGZzX2NyZWF0ZV9mc2luZm9fc2VjdG9yOiBDcmVhdGUg dGhlIEZTSW5mbyBTZWN0b3IgKEZBVDMyKQ0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAr U1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtDcmVhdGVGc2luZm9TZWN0b3IgKA0KPiArICBJTiBG QVRGUyAqRnMsDQo+ICsgIElOIEVGSV9MQkEgU2VjdG9yTGJhDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyBTdGF0dXM7DQo+ICsNCj4gKyAgLy8gWmVybyBTZWN0b3IgaW5pdGlhbGx5DQo+ ICsgIFplcm9NZW0gKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgRkFUX1NFQ1RPUl9TSVpFKTsN Cj4gKw0KPiArICAvLyBGU0lfTGVhZFNpZw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3Jb MF0gPSAweDUyOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMV0gPSAweDUyOw0KPiAr ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMl0gPSAweDYxOw0KPiArICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbM10gPSAweDQxOw0KPiArDQo+ICsgIC8vIEZTSV9TdHJ1Y1NpZw0KPiArICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDg0XSA9IDB4NzI7DQo+ICsgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcls0ODVdID0gMHg3MjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ4 Nl0gPSAweDQxOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDg3XSA9IDB4NjE7DQo+ ICsNCj4gKyAgLy8gRlNJX0ZyZWVfQ291bnQNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzQ4OF0gPSAweEZGOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDg5XSA9IDB4RkY7 DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OTBdID0gMHhGRjsNCj4gKyAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzQ5MV0gPSAweEZGOw0KPiArDQo+ICsgIC8vIEZTSV9OeHRfRnJl ZQ0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDkyXSA9IDB4RkY7DQo+ICsgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3Rvcls0OTNdID0gMHhGRjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzQ5NF0gPSAweEZGOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDk1XSA9 IDB4RkY7DQo+ICsNCj4gKyAgLy8gU2lnbmF0dXJlDQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3Rvcls1MTBdID0gMHg1NTsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzUxMV0gPSAw eEFBOw0KPiArDQo+ICsgIFN0YXR1cyA9IEZzLT5EaXNrSW8tPldyaXRlRGlzayAoDQo+ICsgICAg RnMtPkRpc2tJbywgRnMtPkJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiArICAgIE11bHRVNjR4 MzIgKEZzLT5TdGFydGluZ0xCQSwgRnMtPkJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpICsNCj4g KyAgICBNdWx0VTY0eDMyIChTZWN0b3JMYmEsICBGQVRfU0VDVE9SX1NJWkUpLA0KPiArICAgIEZB VF9TRUNUT1JfU0laRSwNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IpOw0KPiArDQo+ ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICsv LyBmYXRmc19lcmFzZV9mYXQ6IEVyYXNlIEZBVCB0YWJsZSB1c2luZyBmcyBkZXRhaWxzIGluIGZz IHN0cnVjdA0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArU1RBVElDDQo+ICtFRklfU1RB VFVTDQo+ICtFcmFzZUZhdCAoDQo+ICsgIElOIEZBVEZTICpGcywNCj4gKyAgSU4gQk9PTEVBTiBJ c0ZhdDMyKQ0KPiArew0KPiArICBVSU5UTiBJbmRleDsNCj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7 DQo+ICsNCj4gKyAgLy8gWmVybyBTZWN0b3IgaW5pdGlhbGx5DQo+ICsgIFplcm9NZW0gKEZzLT5D dXJyZW50U2VjdG9yLlNlY3RvciwgRkFUX1NFQ1RPUl9TSVpFKTsNCj4gKw0KPiArICAvLyBJbml0 aWFsaXNlIGRlZmF1bHQgYWxsb2NhdGUgLyByZXNlcnZlZCBjbHVzdGVycw0KPiArICBpZiAoIUlz RmF0MzIpIHsNCj4gKyAgICBTRVRfMTZCSVRfV09SRCAoRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y LCAwLCAweEZGRjgpOw0KPiArICAgIFNFVF8xNkJJVF9XT1JEIChGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3IsIDIsIDB4RkZGRik7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgU0VUXzMyQklUX1dPUkQg KEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgMCwgMHgwRkZGRkZGOCk7DQo+ICsgICAgU0VUXzMy QklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgNCwgMHhGRkZGRkZGRik7DQo+ICsg ICAgU0VUXzMyQklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgOCwgMHgwRkZGRkZG Rik7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGcy0+RGlza0lvLT5Xcml0ZURpc2sgKA0K PiArICAgIEZzLT5EaXNrSW8sIEZzLT5CbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gKyAgICBN dWx0VTY0eDMyIChGcy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXpl KSArDQo+ICsgICAgTXVsdFU2NHgzMiAoRnMtPkZhdEJlZ2luTGJhLCBGQVRfU0VDVE9SX1NJWkUp LA0KPiArICAgIEZBVF9TRUNUT1JfU0laRSwNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIFplcm8gcmVtYWluaW5nIEZBVCBzZWN0b3JzDQo+ICsg IFplcm9NZW0gKEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvciwgRkFUX1NFQ1RPUl9TSVpFKTsNCj4g KyAgZm9yIChJbmRleCA9IDE7IEluZGV4IDwgRnMtPkZhdFNlY3RvcnMgKiBGcy0+TnVtT2ZGYXRz OyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gRnMtPkRpc2tJby0+V3JpdGVEaXNrICgNCj4g KyAgICAgIEZzLT5EaXNrSW8sDQo+ICsgICAgICBGcy0+QmxvY2tJby0+TWVkaWEtPk1lZGlhSWQs DQo+ICsgICAgICBNdWx0VTY0eDMyIChGcy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lvLT5NZWRp YS0+QmxvY2tTaXplKSArDQo+ICsgICAgICBNdWx0VTY0eDMyICgoRnMtPkZhdEJlZ2luTGJhICsg SW5kZXgpLCBGQVRfU0VDVE9SX1NJWkUpLA0KPiArICAgICAgRkFUX1NFQ1RPUl9TSVpFLA0KPiAr ICAgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKyAgfQ0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArLy8g ZmF0ZnNfZm9ybWF0X2ZhdDE2OiBGb3JtYXQgYSBGQVQxNiBwYXJ0aXRpb24NCj4gKy8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArRm9ybWF0RmF0MTYg KA0KPiArICBJTiBGQVRGUyAqRnMsDQo+ICsgIElOIFVJTlQ2NCBWb2x1bWVTZWN0b3JzLA0KPiAr ICBJTiBDT05TVCBDSEFSOCAqTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgU3Rh dHVzOw0KPiArDQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLkFkZHJlc3MgPSBGQVQzMl9JTlZBTElE X0NMVVNURVI7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLkRpcnR5ID0gMDsNCj4gKw0KPiArICBG cy0+TmV4dEZyZWVDbHVzdGVyID0gMDsgLy8gSW52YWxpZA0KPiArDQo+ICsgIC8vIFZvbHVtZSBp cyBGQVQxNg0KPiArICBGcy0+RmF0VHlwZSA9IEZBVF9UWVBFXzE2Ow0KPiArDQo+ICsgIC8vIE5v dCB2YWxpZCBmb3IgRkFUMTYNCj4gKyAgRnMtPkZzSW5mb1NlY3RvciA9IDA7DQo+ICsgIEZzLT5S b290ZGlyRmlyc3RDbHVzdGVyID0gMDsNCj4gKw0KPiArICBGcy0+TGJhQmVnaW4gPSAwOw0KPiAr ICBTdGF0dXMgPSBDcmVhdGVCb290U2VjdG9yIChGcywgRnMtPkxiYUJlZ2luLCBWb2x1bWVTZWN0 b3JzLCBOYW1lLCAwKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBGb3IgRkFUMTYgKHdoaWNoIHRoaXMg bWF5IGJlKSwgUm9vdGRpckZpcnN0Q2x1c3RlciBpcyBhY3R1YWxsDQo+IFJvb3RkaXJGaXJzdFNl Y3Rvcg0KPiArICBGcy0+Um9vdGRpckZpcnN0U2VjdG9yID0gRnMtPlJlc2VydmVkU2VjdG9ycyAr IChGcy0+TnVtT2ZGYXRzICogRnMtDQo+ID5GYXRTZWN0b3JzKTsNCj4gKyAgRnMtPlJvb3RkaXJT ZWN0b3JzID0gKChGcy0+Um9vdEVudHJ5Q291bnQgKiAzMikgKw0KPiArICAgIChGQVRfU0VDVE9S X1NJWkUgLSAxKSkgLyBGQVRfU0VDVE9SX1NJWkU7DQo+ICsNCj4gKyAgLy8gRmlyc3QgRkFUIExC QSBBZGRyZXNzDQo+ICsgIEZzLT5GYXRCZWdpbkxiYSA9IEZzLT5MYmFCZWdpbiArIEZzLT5SZXNl cnZlZFNlY3RvcnM7DQo+ICsNCj4gKyAgLy8gVGhlIEFkZHJlc3Mgb2YgdGhlIGZpcnN0IGRhdGEg Y2x1c3RlciBvbiB0aGlzIHZvbHVtZQ0KPiArICBGcy0+Q2x1c3RlckJlZ2luTGJhID0gRnMtPkZh dEJlZ2luTGJhICsNCj4gKyAgICAoRnMtPk51bU9mRmF0cyAqIEZzLT5GYXRTZWN0b3JzKTsNCj4g Kw0KPiArICAvLyBJbml0aWFsaXNlIEZBVCBzZWN0b3JzDQo+ICsgIFN0YXR1cyA9IEVyYXNlRmF0 IChGcywgMCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gRXJhc2UgUm9vdCBkaXJlY3RvcnkNCj4gKyAg U3RhdHVzID0gRXJhc2VTZWN0b3JzICgNCj4gKyAgICAgIEZzLA0KPiArICAgICAgRnMtPkxiYUJl Z2luICsgRnMtPlJvb3RkaXJGaXJzdFNlY3RvciwNCj4gKyAgICAgIEZzLT5Sb290ZGlyU2VjdG9y cyk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKy8vLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gKy8vIGZhdGZzX2Zvcm1hdF9mYXQzMjogRm9ybWF0IGEgRkFUMzIgcGFydGl0aW9u DQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4g K0Zvcm1hdEZhdDMyICgNCj4gKyAgSU4gRkFURlMgKkZzLA0KPiArICBJTiBVSU5UTiBWb2x1bWVT ZWN0b3JzLA0KPiArICBJTiBDT05TVCBDSEFSOCAqTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgU3RhdHVzOw0KPiArDQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLkFkZHJlc3MgPSBG QVQzMl9JTlZBTElEX0NMVVNURVI7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLkRpcnR5ID0gMDsN Cj4gKw0KPiArICBGcy0+TmV4dEZyZWVDbHVzdGVyID0gMDsgLy8gSW52YWxpZA0KPiArDQo+ICsg IC8vIFZvbHVtZSBpcyBGQVQzMg0KPiArICBGcy0+RmF0VHlwZSA9IEZBVF9UWVBFXzMyOw0KPiAr DQo+ICsgIC8vIEJhc2ljIGRlZmF1bHRzIGZvciBub3JtYWwgRkFUMzIgcGFydGl0aW9ucw0KPiAr ICBGcy0+RnNJbmZvU2VjdG9yID0gMTsNCj4gKyAgRnMtPlJvb3RkaXJGaXJzdENsdXN0ZXIgPSAy Ow0KPiArDQo+ICsgIC8vIFNlY3RvciAwOiBCb290IFNlY3Rvcg0KPiArICAvLyBOT1RFOiBXZSBk b24ndCBuZWVkIGFuIE1CUiwgaXQgaXMgYSB3YXN0ZSBvZiBhIGdvb2QgU2VjdG9yIQ0KPiArICBG cy0+TGJhQmVnaW4gPSAwOw0KPiArICBTdGF0dXMgPSBDcmVhdGVCb290U2VjdG9yIChGcywgRnMt PkxiYUJlZ2luLCBWb2x1bWVTZWN0b3JzLCBOYW1lLCAxKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBG aXJzdCBGQVQgTEJBIGFkZHJlc3MNCj4gKyAgRnMtPkZhdEJlZ2luTGJhID0gRnMtPkxiYUJlZ2lu ICsgRnMtPlJlc2VydmVkU2VjdG9yczsNCj4gKw0KPiArICAvLyBUaGUgYWRkcmVzcyBvZiB0aGUg Zmlyc3QgZGF0YSBjbHVzdGVyIG9uIHRoaXMgdm9sdW1lDQo+ICsgIEZzLT5DbHVzdGVyQmVnaW5M YmEgPSBGcy0+RmF0QmVnaW5MYmEgKyAoRnMtPk51bU9mRmF0cyAqIEZzLQ0KPiA+RmF0U2VjdG9y cyk7DQo+ICsNCj4gKyAgLy8gSW5pdGlhbGlzZSBGU0luZm8gc2VjdG9yDQo+ICsgIFN0YXR1cyA9 IENyZWF0ZUZzaW5mb1NlY3RvciAoRnMsIEZzLT5Gc0luZm9TZWN0b3IpOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ ICsgIC8vIEluaXRpYWxpc2UgRkFUIHNlY3RvcnMNCj4gKyAgU3RhdHVzID0gRXJhc2VGYXQgKEZz LCAxKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBFcmFzZSBSb290IGRpcmVjdG9yeQ0KPiArICBTdGF0 dXMgPSBFcmFzZVNlY3RvcnMgKA0KPiArICAgIEZzLA0KPiArICAgIExiYU9mQ2x1c3RlciAoRnMs IEZzLT5Sb290ZGlyRmlyc3RDbHVzdGVyKSwNCj4gKyAgICBGcy0+U2VjdG9yc1BlckNsdXN0ZXIp Ow0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQo+ICsvLyBmYXRmc19mb3JtYXQ6IEZvcm1hdCBhIHBhcnRpdGlvbiB3aXRoIGVpdGhlciBG QVQxNiBvciBGQVQzMiBiYXNlZCBvbiBzaXplDQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ ICtFRklfU1RBVFVTDQo+ICtGYXRGb3JtYXQgKA0KPiArICBJTiBFRklfTEJBICAgICAgICAgICAg ICAgICBTdGFydGluZ0xCQSwNCj4gKyAgSU4gRUZJX0xCQSAgICAgICAgICAgICAgICAgRW5kaW5n TEJBLA0KPiArICBJTiBFRklfQkxPQ0tfSU9fUFJPVE9DT0wgICAqQmxvY2tJbywNCj4gKyAgSU4g RUZJX0RJU0tfSU9fUFJPVE9DT0wgICAgKkRpc2tJbywNCj4gKyAgSU4gQ0hBUjggICAgICAgICAg ICAgICAgICAgKlZvbHVtZU5hbWUsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgIEZv cmNlRmF0MzINCj4gKyAgKQ0KPiArew0KPiArICBGQVRGUyBGczsNCj4gKyAgVUlOVDY0IFZvbHVt ZVNlY3RvcnM7DQo+ICsNCj4gKyAgVm9sdW1lU2VjdG9ycyA9IERpdlU2NHgzMiAoDQo+ICsgICAg TXVsdFU2NHgzMiAoDQo+ICsgICAgICBFbmRpbmdMQkEgLSBTdGFydGluZ0xCQSArIDEsIEJsb2Nr SW8tPk1lZGlhLT5CbG9ja1NpemUpLA0KPiArICAgIEZBVF9TRUNUT1JfU0laRSk7DQo+ICsNCj4g KyAgaWYgKFZvbHVtZU5hbWUgPT0gTlVMTCkgew0KPiArICAgIFZvbHVtZU5hbWUgPSBERUZBVUxU X0ZBVF9MQUJFTF9OQU1FOw0KPiArICB9DQo+ICsNCj4gKyAgWmVyb01lbSAoJkZzLCBzaXplb2Yo RnMpKTsNCj4gKw0KPiArICBGcy5TdGFydGluZ0xCQSA9IFN0YXJ0aW5nTEJBOw0KPiArICBGcy5F bmRpbmdMQkEgPSBFbmRpbmdMQkE7DQo+ICsgIEZzLkJsb2NrSW8gPSBCbG9ja0lvOw0KPiArICBG cy5EaXNrSW8gPSBEaXNrSW87DQo+ICsgIC8vIDJHQiAtIDMySyBsaW1pdCBmb3Igc2FmZSBiZWhh dmlvdXIgZm9yIEZBVDE2DQo+ICsgIGlmICgoVm9sdW1lU2VjdG9ycyA8PSA0MTk0MzA0KSAmJiAo IUZvcmNlRmF0MzIpKSB7DQo+ICsgICAgcmV0dXJuIEZvcm1hdEZhdDE2ICgmRnMsIFZvbHVtZVNl Y3RvcnMsIFZvbHVtZU5hbWUpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiBGb3JtYXRG YXQzMiAoJkZzLCBWb2x1bWVTZWN0b3JzLCBWb2x1bWVOYW1lKTsNCj4gKyAgfQ0KPiArfQ0KPiBk aWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0ZhdEZv cm1hdC5oDQo+IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0ZhdEZv cm1hdC5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDFh MzI1YTU3YWJlDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZp U2hlbGxHcHRDb21tYW5kTGliL0ZhdEZvcm1hdC5oDQo+IEBAIC0wLDAgKzEsMTExIEBADQo+ICsv KiogQGZpbGUNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDEyLCBVbHRyYS1FbWJl ZGRlZC5jb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQ8QlI+DQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5zZWQgYW5kIG1h ZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+ IExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiArICBodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBS T0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIN Cj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0Yg QU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiAr DQo+ICsvKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTYsIEJyb2FkY29tLiBBbGwgcmlnaHRz IHJlc2VydmVkICovDQo+ICsNCj4gKyNpZm5kZWYgX19GQVRfRk9STUFUX0hfXw0KPiArI2RlZmlu ZSBfX0ZBVF9GT1JNQVRfSF9fDQo+ICsNCj4gKyNpbmNsdWRlICJHcHRXb3JrZXIuaCINCj4gKw0K PiArI2RlZmluZSBGQVRfU0VDVE9SX1NJWkUgICAgICAgICAgICAgICAgICAgICA1MTINCj4gKyNk ZWZpbmUgRkFUX0JVRkZFUl9TRUNUT1JTICAgICAgICAgICAgICAgICAgICAxDQo+ICsjZGVmaW5l IEZBVDMyX0xBU1RfQ0xVU1RFUiAgICAgICAgICAgICAgMHhGRkZGRkZGRg0KPiArI2RlZmluZSBG QVQzMl9JTlZBTElEX0NMVVNURVIgICAgICAgICAgIDB4RkZGRkZGRkYNCj4gKyNkZWZpbmUgRkFU X0RJUl9FTlRSWV9TSVpFICAgICAgICAgICAgICAzMg0KPiArI2RlZmluZSBGQVRfQlVGRkVSUyAg ICAgICAgICAgICAgICAgICAgIDENCj4gKyNkZWZpbmUgREVGQVVMVF9GQVRfTEFCRUxfTkFNRSAg ICAgICAgICAiRUZJVk9MIg0KPiArDQo+ICsjZGVmaW5lIEdFVF8zMkJJVF9XT1JEKEJ1ZmZlciwg TG9jYXRpb24pDQo+ICggKChVSU5UMzIpQnVmZmVyW0xvY2F0aW9uICsgM10gPDwgMjQpICsgXA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJ TlQzMilCdWZmZXJbTG9jYXRpb24gKyAyXSA8PDE2ICkgKyBcDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVDMyKUJ1ZmZlcltMb2NhdGlv biArIDFdIDw8IDgpICsgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoVUlOVDMyKUJ1ZmZlcltMb2NhdGlvbiswXSApDQo+ICsNCj4gKyNkZWZp bmUgR0VUXzE2QklUX1dPUkQoQnVmZmVyLCBMb2NhdGlvbikNCj4gKCAoKFVJTlQxNilCdWZmZXJb TG9jYXRpb24gKyAxXSA8PCA4KSArIFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKFVJTlQxNilCdWZmZXJbTG9jYXRpb24rMF0pDQo+ICsNCj4g KyNkZWZpbmUgU0VUXzMyQklUX1dPUkQoQnVmZmVyLCBMb2NhdGlvbiwgVmFsdWUpICAgeyBCdWZm ZXJbTG9jYXRpb24gKyAwXSA9DQo+IChVSU5UOCkoKFZhbHVlKSAmIDB4RkYpOyBcDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcltMb2Nh dGlvbiArIDFdID0gKFVJTlQ4KSgoVmFsdWUgPj4gOCkgJiAweEZGKTsNCj4gXA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJbTG9jYXRp b24gKyAyXSA9IChVSU5UOCkoKFZhbHVlID4+IDE2KSAmDQo+IDB4RkYpOyBcDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcltMb2NhdGlv biArIDNdID0gKFVJTlQ4KSgoVmFsdWUgPj4gMjQpICYNCj4gMHhGRik7IH0NCj4gKw0KPiArI2Rl ZmluZSBTRVRfMTZCSVRfV09SRChCdWZmZXIsIExvY2F0aW9uLCBWYWx1ZSkgICB7IEJ1ZmZlcltM b2NhdGlvbiArIDBdID0NCj4gKFVJTlQ4KSgoVmFsdWUpICYgMHhGRik7IFwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyW0xvY2F0aW9u ICsgMV0gPSAoVUlOVDgpKChWYWx1ZSA+PiA4KSAmDQo+IDB4RkYpOyB9DQo+ICsNCj4gK3R5cGVk ZWYgZW51bSBlRmF0VHlwZQ0KPiArew0KPiArICBGQVRfVFlQRV8xNiwNCj4gKyAgRkFUX1RZUEVf MzINCj4gK30gRkFUX0ZTX1RZUEU7DQo+ICsNCj4gKw0KPiArLy8gRm9yd2FyZCBkZWNsYXJhdGlv bg0KPiArdHlwZWRlZiBzdHJ1Y3QgX0ZBVF9CVUZGRVIgRkFUX0JVRkZFUjsNCj4gKw0KPiArc3Ry dWN0IF9GQVRfQlVGRkVSIHsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgU2VjdG9yW0ZB VF9TRUNUT1JfU0laRSAqIEZBVF9CVUZGRVJfU0VDVE9SU107DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgIEFkZHJlc3M7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgIERpcnR5Ow0K PiArICBVSU5UOCAqUHRyOw0KPiArDQo+ICsgIC8vIE5leHQgaW4gY2hhaW4gb2Ygc2VjdG9yIGJ1 ZmZlcnMNCj4gKyAgc3RydWN0IEZBVF9CVUZGRVIgICAgICAgKk5leHRCdWY7DQo+ICt9Ow0KPiAr DQo+ICt0eXBlZGVmIHN0cnVjdA0KPiArew0KPiArICAvLyBGaWxlc3lzdGVtIGdsb2JhbHMNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgU2VjdG9yc1BlckNsdXN0ZXI7DQo+ICsgIEVGSV9M QkEgICAgICAgICAgICAgICAgIENsdXN0ZXJCZWdpbkxiYTsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgUm9vdGRpckZpcnN0Q2x1c3RlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgUm9vdGRpckZpcnN0U2VjdG9yOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBSb290 ZGlyU2VjdG9yczsNCj4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgICAgRmF0QmVnaW5MYmE7DQo+ ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgIEZzSW5mb1NlY3RvcjsNCj4gKyAgRUZJX0xCQSAg ICAgICAgICAgICAgICAgTGJhQmVnaW47DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIEZh dFNlY3RvcnM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIE5leHRGcmVlQ2x1c3RlcjsN Cj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgUm9vdEVudHJ5Q291bnQ7DQo+ICsgIFVJTlQx NiAgICAgICAgICAgICAgICAgIFJlc2VydmVkU2VjdG9yczsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgTnVtT2ZGYXRzOw0KPiArICBGQVRfRlNfVFlQRSAgICAgICAgICAgICBGYXRUeXBl Ow0KPiArDQo+ICsgIC8vIFdvcmtpbmcgYnVmZmVyDQo+ICsgIEZBVF9CVUZGRVIgICAgICAgICAg ICAgIEN1cnJlbnRTZWN0b3I7DQo+ICsgIC8vIEZBVCBCdWZmZXINCj4gKyAgRkFUX0JVRkZFUiAg ICAgICAgICAgICAgKkZhdEJ1ZmZlckhlYWQ7DQo+ICsgIEZBVF9CVUZGRVIgICAgICAgICAgICAg IEZhdEJ1ZmZlcnNbRkFUX0JVRkZFUlNdOw0KPiArICBFRklfTEJBICAgICAgICAgICAgICAgICBT dGFydGluZ0xCQTsNCj4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgICAgRW5kaW5nTEJBOw0KPiAr ICBFRklfQkxPQ0tfSU9fUFJPVE9DT0wgICAqQmxvY2tJbzsNCj4gKyAgRUZJX0RJU0tfSU9fUFJP VE9DT0wgICAgKkRpc2tJbzsNCj4gKw0KPiArfSBGQVRGUzsNCj4gKw0KPiArDQo+ICsNCj4gKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gKy8vIFByb3RvdHlwZXMNCj4gKy8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCj4gK0VGSV9TVEFUVVMNCj4gK0ZhdEZvcm1hdCAoDQo+ICsgIElOIEVGSV9MQkEg ICAgICAgICAgICAgICAgICAgU3RhcnRpbmdMQkEsDQo+ICsgIElOIEVGSV9MQkEgICAgICAgICAg ICAgICAgICAgRW5kaW5nTEJBLA0KPiArICBJTiBFRklfQkxPQ0tfSU9fUFJPVE9DT0wgICAgICpC bG9ja0lvLA0KPiArICBJTiBFRklfRElTS19JT19QUk9UT0NPTCAgICAgICpEaXNrSW8sDQo+ICsg IElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgKlZvbHVtZU5hbWUsDQo+ICsgIElOIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgRm9yY2VGYXQzMg0KPiArICApOw0KPiArDQo+ICsjZW5kaWYN Cj4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9H cHRXb3JrZXIuYw0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9H cHRXb3JrZXIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAu LjA1NDZjOTQ0ODhiMA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1NoZWxsUGtnL0xpYnJhcnkv VWVmaVNoZWxsR3B0Q29tbWFuZExpYi9HcHRXb3JrZXIuYw0KPiBAQCAtMCwwICsxLDE5MDIgQEAN Cj4gKy8qKiBAZmlsZQ0KPiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxMywgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArQ29weXJpZ2h0IChjKSAyMDE2LCBC cm9hZGNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICtUaGlzIHByb2dyYW0gYW5kIHRo ZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICthcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxh YmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEDQo+IExpY2Vuc2UN Cj4gK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBv ZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gK2h0dHA6Ly9vcGVuc291cmNlLm9y Zy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArVEhFIFBST0dSQU0gSVMgRElTVFJJ QlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ICtX SVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIN Cj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIkdw dFdvcmtlci5oIg0KPiArDQo+ICsjZGVmaW5lIEdQVF9ERUJVR19MRVZFTCAwDQo+ICsNCj4gK1NU QVRJQyBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUiAgICpQcmltYXJ5SGVhZGVyICAgID0gTlVM TDsNCj4gK1NUQVRJQyBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUiAgICpCYWNrdXBIZWFkZXIg ICAgID0gTlVMTDsNCj4gK1NUQVRJQyBFRklfUEFSVElUSU9OX0VOVFJZICAgICAgICAgICpQYXJ0 RW50cnkgICAgICAgID0gTlVMTDsNCj4gK1NUQVRJQyBFRklfUEFSVElUSU9OX0VOVFJZX1NUQVRV UyAgICpQRW50cnlTdGF0dXMgICAgID0gTlVMTDsNCj4gKw0KPiArU1RBVElDIEVGSV9CTE9DS19J T19QUk9UT0NPTCAgICAgICAgKkJsb2NrSW87DQo+ICtTVEFUSUMgRUZJX0RJU0tfSU9fUFJPVE9D T0wgICAgICAgICAqRGlza0lvOw0KPiArDQo+ICtTVEFUSUMgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICBNYnJWYWxpZDsNCj4gK1NUQVRJQyBCT09MRUFOICAgICAgICAgICAgICAgICAgICAg IEdwdFZhbGlkOw0KPiArDQo+ICtTVEFUSUMgRUZJX0tOT1dOX1BBUlRJVElPTl9UWVBFIFBhcnRp dGlvblR5cGVzW10gPQ0KPiArew0KPiArICAvLyBLbm93biBQYXJ0aXRpb24gdHlwZSBHVUlEcw0K PiArICAvLyBFeHBhbmQgdGhpcyB0YWJsZSBhcyBuZWVkZWQuDQo+ICsgIC8vIFN0YXJ0aW5nIHdp dGggRUZJIFN5c3RlbSBwYXJ0aXRpb24NCj4gKyAgeyB7IDB4QzEyQTczMjhMLCAweEY4MUYsIDB4 MTFEMiwgeyAweEJBLCAweDRCLCAweDAwLCAweEEwLCAweEM5LCAweDNFLCAweEM5LA0KPiAweDNC IH0gfSwgTCJFRkkgU3lzdGVtIiB9LA0KPiArICAvLyBLbm93biBXaW5kb3dzIHBhcnRpdGlvbiB0 eXBlcw0KPiArICB7IHsgMHhFM0M5RTMxNkwsIDB4MEI1QywgMHg0REI4LCB7IDB4ODEsIDB4N0Qs IDB4RjksIDB4MkQsIDB4RjAsIDB4MDIsIDB4MTUsDQo+IDB4QUUgfSB9LCBMIk1TIFdpbmRvd3Mg UmVzZXJ2ZWQgKE1TUikiIH0sDQo+ICsgIHsgeyAweEVCRDBBMEEyTCwgMHhCOUU1LCAweDQ0MzMs IHsgMHg4NywgMHhDMCwgMHg2OCwgMHhCNiwgMHhCNywgMHgyNiwgMHg5OSwNCj4gMHhDNyB9IH0s IEwiTVMgV2luZG93cyBCYXNpYyBEYXRhIiB9LA0KPiArICB7IHsgMHg1ODA4QzhBQUwsIDB4N0U4 RiwgMHg0MkUwLCB7IDB4ODUsIDB4RDIsIDB4RTEsIDB4RTksIDB4MDQsIDB4MzQsIDB4Q0YsDQo+ IDB4QjMgfSB9LCBMIk1TIFdpbmRvd3MgTERNIE1ldGFkYXRhIiB9LA0KPiArICB7IHsgMHhBRjlC NjBBMEwsIDB4MTQzMSwgMHg0RjYyLCB7IDB4QkMsIDB4NjgsIDB4MzMsIDB4MTEsIDB4NzEsIDB4 NEEsIDB4NjksDQo+IDB4QUQgfSB9LCBMIk1TIFdpbmRvd3MgTERNIERhdGEiIH0sDQo+ICsgIHsg eyAweERFOTRCQkE0TCwgMHgwNkQxLCAweDRENDAsIHsgMHhBMSwgMHg2QSwgMHhCRiwgMHhENSwg MHgwMSwgMHg3OSwNCj4gMHhENiwgMHhBQyB9IH0sIEwiTVMgV2luZG93cyBSZWNvdmVyeSBFbnZp cm9ubWVudCIgfSwNCj4gKyAgeyB7IDB4RTc1Q0FGOEZMLCAweEY2ODAsIDB4NENFRSwgeyAweEFG LCAweEEzLCAweEIwLCAweDAxLCAweEU1LCAweDZFLCAweEZDLA0KPiAweDJEIH0gfSwgTCJNUyBX aW5kb3dzIFN0b3JhZ2UgU3BhY2VzIiB9LA0KPiArICAvLyBLbm93biBMaW51eCBwYXJ0aXRpb24g dHlwZXMNCj4gKyAgeyB7IDB4MEZDNjNEQUZMLCAweDg0ODMsIDB4NDc3MiwgeyAweDhFLCAweDc5 LCAweDNELCAweDY5LCAweEQ4LCAweDQ3LCAweDdELA0KPiAweEU0IH0gfSwgTCJMaW51eCBGaWxl c3lzdGVtIERhdGEiIH0sDQo+ICsgIHsgeyAweEExOUQ4ODBGTCwgMHgwNUZDLCAweDREM0IsIHsg MHhBMCwgMHgwNiwgMHg3NCwgMHgzRiwgMHgwRiwgMHg4NCwgMHg5MSwNCj4gMHgxRSB9IH0sIEwi TGludXggUkFJRCIgfSwNCj4gKyAgeyB7IDB4NDQ0Nzk1NDBMLCAweEYyOTcsIDB4NDFCMiwgeyAw eDlBLCAweEY3LCAweEQxLCAweDMxLCAweEQ1LCAweEYwLCAweDQ1LA0KPiAweDhBIH0gfSwgTCJM aW51eCBSb290ICh4ODYpIiB9LA0KPiArICB7IHsgMHg0RjY4QkNFM0wsIDB4RThDRCwgMHg0REIx LCB7IDB4OTYsIDB4RTcsIDB4RkIsIDB4Q0EsIDB4RjksIDB4ODQsIDB4QjcsDQo+IDB4MDkgfSB9 LCBMIkxpbnV4IFJvb3QgKHg4Ni02NCkiIH0sDQo+ICsgIHsgeyAweDY5REFENzEwTCwgMHgyQ0U0 LCAweDRFM0MsIHsgMHhCMSwgMHg2QywgMHgyMSwgMHhBMSwgMHhENCwgMHg5QSwNCj4gMHhCZSwg MHhEMyB9IH0sIEwiTGludXggUm9vdCAoQVJNIDMyLWJpdCkiIH0sDQo+ICsgIHsgeyAweEI5MjFC MDQ1TCwgMHgxREYwLCAweDQxQzMsIHsgMHhBRiwgMHg0NCwgMHg0QywgMHg2RiwgMHgyOCwgMHgw RCwgMHgzRiwNCj4gMHhBRSB9IH0sIEwiTGludXggUm9vdCAoQVJNIDY0LWJpdC9BQVJDSDY0KSIg fSwNCj4gKyAgeyB7IDB4MDY1N0ZENkRMLCAweEE0QUIsIDB4NDNDNCwgeyAweDg0LCAweEU1LCAw eDA5LCAweDMzLCAweEM4LCAweDRCLCAweDRGLA0KPiAweDRGIH0gfSwgTCJMaW51eCBTd2FwIiB9 LA0KPiArICB7IHsgMHhFNkQ2RDM3OUwsIDB4RjUwNywgMHg0NEMyLCB7IDB4QTIsIDB4M0MsIDB4 MjMsIDB4OEYsIDB4MkEsIDB4M0QsIDB4RjksDQo+IDB4MjggfSB9LCBMIkxpbnV4IExvZ2ljYWwg Vm9sdW1lIE1hbmFnZXIgKExWTSkiIH0sDQo+ICsgIHsgeyAweDkzM0FDN0UxTCwgMHgyRUI0LCAw eDRGMTMsIHsgMHhCOCwgMHg0NCwgMHgwRSwgMHgxNCwgMHhFMiwgMHhBRSwgMHhGOSwNCj4gMHgx NSB9IH0sIEwiTGludXggL2hvbWUiIH0sDQo+ICsgIHsgeyAweDNCOEY4NDI1TCwgMHgyMEUwLCAw eDRGM0IsIHsgMHg5MCwgMHg3RiwgMHgxQSwgMHgyNSwgMHhBNywgMHg2RiwgMHg5OCwNCj4gMHhF OCB9IH0sIEwiTGludXggL3NydiAoc2VydmVyIGRhdGEpIiB9LA0KPiArICB7IHsgMHg3RkZFQzVD OUwsIDB4MkQwMCwgMHg0OUI3LCB7IDB4ODksIDB4NDEsIDB4M0UsIDB4QTEsIDB4MEEsIDB4NTUs IDB4ODYsDQo+IDB4QjcgfSB9LCBMIkxpbnV4IFBsYWluIGRtLWNyeXB0IiB9LA0KPiArICB7IHsg MHhDQTdEN0NDQkwsIDB4NjNFRCwgMHg0QzUzLCB7IDB4ODYsIDB4MUMsIDB4MTcsIDB4NDIsIDB4 NTMsIDB4NjAsIDB4NTksDQo+IDB4Q0MgfSB9LCBMIkxpbnV4IExVS1MiIH0sDQo+ICsgIHsgeyAw eDhEQTYzMzM5TCwgMHgwMDA3LCAweDYwQzAsIHsgMHhDNCwgMHgzNiwgMHgwOCwgMHgzQSwgMHhD OCwgMHgyMywgMHgwOSwNCj4gMHgwOCB9IH0sIEwiTGludXggUmVzZXJ2ZWQiIH0sDQo+ICt9Ow0K PiArDQo+ICtNQVNURVJfQk9PVF9SRUNPUkQgUHJvdGVjdGl2ZU1iclRlbXBsYXRlID0gew0KPiAr ICB7IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIEJvb3N0U3RyYXBDb2RlIFs0NDBdDQo+ICsgIHsgMCB9LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pcXVlTWJyU2lnbmF0dXJlWzRdICh1 bnVzZWQpDQo+ICsgIHsgMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gVW5rbm93blsyXQ0KPiArDQo+ICsgIC8vIFBBUlRJVElPTlMNCj4gKyAg ew0KPiArICAgIC8vIE1CUl9QQVJUSVRJT05fUkVDT1JEDQo+ICsgICAgew0KPiArICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCb290SW5k aWNhdG9yDQo+ICsgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIFN0YXJ0SGVhZA0KPiArICAgICAgMHgxLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydFNlY3Rvcg0KPiArICAgICAgMHgxLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydFRyYWNr DQo+ICsgICAgICBQTUJSX0dQVF9QQVJUSVRJT04sICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIE9TSW5kaWNhdG9yDQo+ICsgICAgICAweGZmLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZEhlYWQNCj4gKyAgICAgIDB4ZmYsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kU2VjdG9yDQo+ICsgICAg ICAweGZmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVu ZFRyYWNrDQo+ICsgICAgICB7IDB4MSwgMHgwLCAweDAsIDB4MCB9LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIFN0YXJ0aW5nTGJhWzRdDQo+ICsgICAgICB7IDB4ZmYsIDB4ZmYsIDB4ZmYs IDB4ZmYgfSwgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpemVJbkxiYVs0XQ0KPiArICAgIH0s DQo+ICsgICAgeyAwIH0sIHsgMCB9LCB7IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIFVudXNlZCBwYXJ0aXRpb25zDQo+ICsgIH0sDQo+ICsNCj4gKyAgTUJSX1NJR05BVFVS RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2lnbmF0dXJlDQo+ ICt9Ow0KPiArDQo+ICtTVEFUSUMgVUlOVDMyIEN1clJhbmQgPSAxOw0KPiArDQo+ICsvKioNCj4g KyAgR2V0IHJhbmRvbSBzZWVkIGJhc2VkIG9uIHRoZSBSVEMNCj4gKw0KPiArKiovDQo+ICsNCj4g K1NUQVRJQw0KPiArVk9JRA0KPiArU3JhbmQgKFZPSUQpDQo+ICt7DQo+ICsgIEVGSV9USU1FICAg ICAgICAgICAgICAgICAgVGltZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBTZWVk Ow0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIE1vbm90b25pY0NvdW50Ow0KPiArDQo+ ICsgIGdSVC0+R2V0VGltZSAoJlRpbWUsIE5VTEwpOw0KPiArICBTZWVkID0gKH5UaW1lLkhvdXIg PDwgMjQgfCBUaW1lLkRheSA8PCAxNiB8IFRpbWUuTWludXRlIDw8IDggfA0KPiBUaW1lLlNlY29u ZCk7DQo+ICsgIFNlZWQgXj0gVGltZS5OYW5vc2Vjb25kOw0KPiArICBTZWVkIF49IFRpbWUuWWVh ciA8PCA3Ow0KPiArDQo+ICsgIGdCUy0+R2V0TmV4dE1vbm90b25pY0NvdW50ICgmTW9ub3Rvbmlj Q291bnQpOw0KPiArICBTZWVkICs9IChVSU5UMzIpTW9ub3RvbmljQ291bnQ7DQo+ICsNCj4gKyAg LyogU3RvcmUgdGhpcyBzZWVkICovDQo+ICsgIEN1clJhbmQgPSAoVUlOVDMyKVNlZWQ7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgYSBwc2V1ZG8tcmFuZG9tIG51bWJlcg0KPiArDQo+ICsg IEByZXR2YWwgQSBwc2V1ZG8tcmFuZG9tIG51bWJlciBpbiB0aGUgcmFuZ2UgMCAtIDB4N2ZmZg0K PiArKiovDQo+ICsNCj4gK1NUQVRJQyBVSU5UTiBSYW5kIChWT0lEKQ0KPiArew0KPiArICAvKiBy ZXR1cm4gYSBwc2V1ZG8tcmFuZG9tIGluIHJhbmdlIDAgLSAweDdmZmYgKi8NCj4gKyAgcmV0dXJu ICgoQ3VyUmFuZCA9IEN1clJhbmQgKiAyMTQwMTNMICsgMjUzMTAxMUwpID4+IDE2KSAmIDB4N2Zm ZjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdlbmVyYXRlIGEgR1VJRA0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIEd1aWQgIEEgcG9pbnRlciB0byBhIEdVSUQgcmVjZWl2aW5nIGEgZ2VuZXJhdGVk IHZhbHVlDQo+ICsqKi8NCj4gKw0KPiArU1RBVElDIFZPSUQNCj4gK0dlbmVyYXRlR3VpZCAoT1VU IEdVSUQgKkd1aWQpDQo+ICt7DQo+ICsgIFVJTlROIEluZGV4Ow0KPiArICBVSU5UMTYgQnVmZmVy W3NpemVvZihHVUlEKV07DQo+ICsNCj4gKyAgLyogR2VuZXJhdGVzIDEyOCByYW5kb20gYml0cyBm b3IgbmV3IFVVSUQgKi8NCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgc2l6ZW9mKEdVSUQp OyBJbmRleCsrKSB7DQo+ICsgICAgVUlOVE4gVjsNCj4gKw0KPiArICAgIFYgPSBSYW5kICgpID4+ IDc7DQo+ICsgICAgQnVmZmVyW0luZGV4XSA9IChVSU5UMTYpVjsNCj4gKyAgfQ0KPiArICAvKiBz ZXQgdmFyaWFudCAxMHggYW5kIHZlcnNpb24gNCBhcyByZXF1aXJlZCBieSBSRkMgNDEyMiAqLw0K PiArICBCdWZmZXJbOF0gPSAweDgwIHwgKEJ1ZmZlcls4XSAmIDB4M2YpOw0KPiArICBCdWZmZXJb Nl0gPSAweDQwIHwgKEJ1ZmZlcls2XSAmIDB4Zik7DQo+ICsgIENvcHlHdWlkIChHdWlkLCAoQ09O U1QgR1VJRCAqKUJ1ZmZlcik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDbGVhbiB1cCBnbG9i YWxzDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0dwdENsZWFudXBHbG9iYWxzIChWT0lEKQ0KPiArew0K PiArICBTSEVMTF9GUkVFX05PTl9OVUxMIChQcmltYXJ5SGVhZGVyKTsNCj4gKyAgU0hFTExfRlJF RV9OT05fTlVMTCAoQmFja3VwSGVhZGVyKTsNCj4gKyAgU0hFTExfRlJFRV9OT05fTlVMTCAoUGFy dEVudHJ5KTsNCj4gKyAgU0hFTExfRlJFRV9OT05fTlVMTCAoUEVudHJ5U3RhdHVzKTsNCj4gKyAg R3B0VmFsaWQgPSBGQUxTRTsNCj4gKyAgTWJyVmFsaWQgPSBGQUxTRTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlu cHV0Lg0KPiArICBUaGUgR1BUIHBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgaXMgZXh0ZXJuYWwgaW5w dXQsIHNvIHRoaXMgcm91dGluZQ0KPiArICB3aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24gZm9yIEdQ VCBwYXJ0aXRpb24gdGFibGUgaGVhZGVyIGJlZm9yZSByZXR1cm4uDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgTGJhICAgICAgICAgVGhlIHN0YXJ0aW5nIExiYSBvZiB0aGUgUGFydGl0aW9uIFRhYmxl DQo+ICsgIEBwYXJhbVtvdXRdIFBhcnRIZWFkZXIgIFN0b3JlcyB0aGUgcGFydGl0aW9uIHRhYmxl IHRoYXQgaXMgcmVhZA0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSBwYXJ0 aXRpb24gdGFibGUgaXMgdmFsaWQNCj4gKyAgQHJldHZhbCBFUlJPUiAgICAgICAgICAgVGhlIHBh cnRpdGlvbiB0YWJsZSBpcyBub3QgdmFsaWQNCj4gKw0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0VG SV9TVEFUVVMNCj4gK1BhcnRpdGlvblZhbGlkR3B0VGFibGUgKA0KPiArICBJTiAgRUZJX0xCQSAg ICAgICAgICAgICAgICAgICAgIExiYSwNCj4gKyAgT1VUIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVB REVSICAqUGFydEhlYWRlcg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhl IENSQyBmaWVsZCBpbiB0aGUgUGFydGl0aW9uIHRhYmxlIGhlYWRlciBpcyB2YWxpZA0KPiArICBm b3IgUGFydGl0aW9uIGVudHJ5IGFycmF5Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFBhcnRIZWFk ZXIgIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgc3RydWN0dXJlDQo+ICsNCj4gKyAgQHJldHZhbCBU UlVFICAgICAgdGhlIENSQyBpcyB2YWxpZA0KPiArICBAcmV0dmFsIEZBTFNFICAgICB0aGUgQ1JD IGlzIGludmFsaWQNCj4gKw0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0JPT0xFQU4NCj4gK1BhcnRp dGlvbkNoZWNrR3B0RW50cnlBcnJheUNSQyAoDQo+ICsgIElOICBFRklfUEFSVElUSU9OX1RBQkxF X0hFQURFUiAgKlBhcnRIZWFkZXINCj4gKyAgKTsNCj4gKw0KPiArDQo+ICsvKioNCj4gKyAgUmVz dG9yZSBQYXJ0aXRpb24gVGFibGUgdG8gaXRzIGFsdGVybmF0ZSBwbGFjZQ0KPiArICAoUHJpbWFy eSAtPiBCYWNrdXAgb3IgQmFja3VwIC0+IFByaW1hcnkpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFBhcnRIZWFkZXIgIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgc3RydWN0dXJlLg0KPiArDQo+ICsg IEByZXR2YWwgVFJVRSAgICAgIFJlc3RvcmluZyBzdWNjZWVkcw0KPiArICBAcmV0dmFsIEZBTFNF ICAgICBSZXN0b3JpbmcgZmFpbGVkDQo+ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ICtCT09MRUFO DQo+ICtQYXJ0aXRpb25SZXN0b3JlR3B0VGFibGUgKA0KPiArICBJTiAgRUZJX1BBUlRJVElPTl9U QUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ICsgICk7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgcm91dGluZSB3aWxsIGNoZWNrIEdQVCBwYXJ0aXRpb24gZW50cnkgYW5kIHJldHVybiBl bnRyeSBzdGF0dXMuDQo+ICsNCj4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgcmVjZWl2 ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ICsgIFRoZSBHUFQgcGFydGl0aW9uIGVudHJ5IGlzIGV4dGVy bmFsIGlucHV0LCBzbyB0aGlzIHJvdXRpbmUNCj4gKyAgd2lsbCBkbyBiYXNpYyB2YWxpZGF0aW9u IGZvciBHUFQgcGFydGl0aW9uIGVudHJ5IGFuZCByZXBvcnQgc3RhdHVzLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gICAgUGFydEhlYWRlciAgICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0cnVjdHVy ZQ0KPiArICBAcGFyYW1baW5dICAgIFBhcnRFbnRyeSAgICAgVGhlIHBhcnRpdGlvbiBlbnRyeSBh cnJheQ0KPiArICBAcGFyYW1bb3V0XSAgIFBFbnRyeVN0YXR1cyAgdGhlIHBhcnRpdGlvbiBlbnRy eSBzdGF0dXMgYXJyYXkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGlu ZyB0aGUgc3RhdHVzIG9mIGVhY2ggcGFydGl0aW9uDQo+ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ ICtWT0lEDQo+ICtQYXJ0aXRpb25DaGVja0dwdEVudHJ5ICgNCj4gKyAgSU4gIEVGSV9QQVJUSVRJ T05fVEFCTEVfSEVBREVSICAqUGFydEhlYWRlciwNCj4gKyAgSU4gIEVGSV9QQVJUSVRJT05fRU5U UlkgICAgICAgICAqUGFydEVudHJ5LA0KPiArICBPVVQgRUZJX1BBUlRJVElPTl9FTlRSWV9TVEFU VVMgICpQRW50cnlTdGF0dXMNCj4gKyAgKTsNCj4gKw0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2tz IHRoZSBDUkMzMiB2YWx1ZSBpbiB0aGUgdGFibGUgaGVhZGVyLg0KPiArDQo+ICsgIEBwYXJhbSAg TWF4U2l6ZSAgIE1heCBTaXplIGxpbWl0DQo+ICsgIEBwYXJhbSAgU2l6ZSAgICAgIFRoZSBzaXpl IG9mIHRoZSB0YWJsZQ0KPiArICBAcGFyYW0gIEhkciAgICAgICBUYWJsZSB0byBjaGVjaw0KPiAr DQo+ICsgIEByZXR1cm4gVFJVRSAgICBDUkMgVmFsaWQNCj4gKyAgQHJldHVybiBGQUxTRSAgIENS QyBJbnZhbGlkDQo+ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ICtCT09MRUFODQo+ICtQYXJ0aXRp b25DaGVja0NyY0FsdFNpemUgKA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgTWF4U2l6 ZSwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgIFNpemUsDQo+ICsgIElOIE9VVCBFRklf VEFCTEVfSEVBREVSICAqSGRyDQo+ICsgICk7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNr cyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW0g IE1heFNpemUgICBNYXggU2l6ZSBsaW1pdA0KPiArICBAcGFyYW0gIEhkciAgICAgICBUYWJsZSB0 byBjaGVjaw0KPiArDQo+ICsgIEByZXR1cm4gVFJVRSAgICAgIENSQyBWYWxpZA0KPiArICBAcmV0 dXJuIEZBTFNFICAgICBDUkMgSW52YWxpZA0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArQk9P TEVBTg0KPiArUGFydGl0aW9uQ2hlY2tDcmMgKA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAg ICAgTWF4U2l6ZSwNCj4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgICpIZHINCj4gKyAgKTsN Cj4gKw0KPiArDQo+ICsvKioNCj4gKyAgVXBkYXRlcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRh YmxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW0gIFNpemUgICBUaGUgc2l6ZSBvZiB0aGUgdGFi bGUNCj4gKyAgQHBhcmFtICBIZHIgICAgVGFibGUgdG8gdXBkYXRlDQo+ICsNCj4gKyoqLw0KPiAr U1RBVElDDQo+ICtWT0lEDQo+ICtQYXJ0aXRpb25TZXRDcmNBbHRTaXplICgNCj4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgIFNpemUsDQo+ICsgIElOIE9VVCBFRklfVEFCTEVfSEVBREVSICAq SGRyDQo+ICsgICk7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0ZXMgdGhlIENSQzMyIHZh bHVlIGluIHRoZSB0YWJsZSBoZWFkZXIuDQo+ICsNCj4gKyAgQHBhcmFtICBIZHIgICAgVGFibGUg dG8gdXBkYXRlDQo+ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ICtWT0lEDQo+ICtQYXJ0aXRpb25T ZXRDcmMgKA0KPiArICBJTiBPVVQgRUZJX1RBQkxFX0hFQURFUiAqSGRyDQo+ICsgICk7DQo+ICsN Cj4gKw0KPiArLyoqDQo+ICsgIEdldCBHUFQgdGFibGVzLg0KPiArDQo+ICsgIENhdXRpb246IFRo aXMgZnVuY3Rpb24gbWF5IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiArICBUaGUgR1BUIHBh cnRpdGlvbiB0YWJsZSBpcyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyByb3V0aW5lDQo+ICsgIHdp bGwgZG8gYmFzaWMgdmFsaWRhdGlvbiBmb3IgR1BUIHBhcnRpdGlvbiB0YWJsZSBiZWZvcmUgaW5z dGFsbA0KPiArICBjaGlsZCBoYW5kbGUgZm9yIGVhY2ggR1BUIHBhcnRpdGlvbi4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBEaXNrSW9Qcm90ICAgICBEaXNrSW8gaW50ZXJmYWNlLg0KPiArICBAcGFy YW1baW5dICBCbG9ja0lvUHJvdCAgICBCbG9ja0lvIGludGVyZmFjZS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBWYWxpZCBHUFQgZGlzay4NCj4gKyAgQHJldHZhbCBF RklfTUVESUFfQ0hBTkdFRCAgICAgTWVkaWEgY2hhbmdlZCBEZXRlY3RlZC4NCj4gKyAgQHJldHZh bCBvdGhlciAgICAgICAgICAgICAgICAgTm90IGEgdmFsaWQgR1BUIGRpc2suDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArUGFydGl0aW9uR2V0R3B0VGFibGVzICgNCj4gKyAgSU4gIEVG SV9ESVNLX0lPX1BST1RPQ09MICAgICAgICAgKkRpc2tJb1Byb3QsDQo+ICsgIElOICBFRklfQkxP Q0tfSU9fUFJPVE9DT0wgICAgICAgICpCbG9ja0lvUHJvdA0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICBCbG9ja1NpemU7DQo+ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAgICAgICBM YXN0QmxvY2s7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIEdwdFZhbGlkU3RhdHVzOw0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgTWVkaWFJZDsNCj4gKyAgTUFTVEVSX0JPT1RfUkVDT1JEICAg ICAgICAgICpQcm90ZWN0aXZlTWJyOw0KPiArDQo+ICsgIC8vIENsZWFyIGxlZnRvdmVycw0KPiAr ICBHcHRDbGVhbnVwR2xvYmFscyAoKTsNCj4gKw0KPiArICBNYnJWYWxpZCA9IEZBTFNFOw0KPiAr ICBHcHRWYWxpZCA9IEZBTFNFOw0KPiArDQo+ICsgIFByb3RlY3RpdmVNYnIgPSBOVUxMOw0KPiAr DQo+ICsgIEJsb2NrSW8gICAgICAgPSBCbG9ja0lvUHJvdDsNCj4gKyAgRGlza0lvICAgICAgICA9 IERpc2tJb1Byb3Q7DQo+ICsNCj4gKyAgaWYgKEN1clJhbmQgPT0gMSkgew0KPiArICAgIFNyYW5k ICgpOw0KPiArICB9DQo+ICsNCj4gKyAgQmxvY2tTaXplICAgICA9IEJsb2NrSW8tPk1lZGlhLT5C bG9ja1NpemU7DQo+ICsgIExhc3RCbG9jayAgICAgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2Nr Ow0KPiArICBNZWRpYUlkICAgICAgID0gQmxvY2tJby0+TWVkaWEtPk1lZGlhSWQ7DQo+ICsNCj4g KyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIEJsb2NrU2l6ZSA6ICVkIFxuIiwgQmxvY2tTaXpl KSk7DQo+ICsgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBMYXN0QmxvY2sgOiAlbHggXG4iLCBM YXN0QmxvY2spKTsNCj4gKw0KPiArICBHcHRWYWxpZFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7DQo+ ICsgIEdwdFZhbGlkICAgICAgID0gRkFMU0U7DQo+ICsgIE1iclZhbGlkICAgICAgID0gRkFMU0U7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWxsb2NhdGUgYSBidWZmZXIgZm9yIHRoZSBQcm90ZWN0 aXZlIE1CUg0KPiArICAvLw0KPiArICBQcm90ZWN0aXZlTWJyID0gQWxsb2NhdGVQb29sIChCbG9j a1NpemUpOw0KPiArICBpZiAoUHJvdGVjdGl2ZU1iciA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJu IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVh ZCB0aGUgUHJvdGVjdGl2ZSBNQlIgZnJvbSBMQkEgIzANCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0g RGlza0lvLT5SZWFkRGlzayAoDQo+ICsgICAgRGlza0lvLA0KPiArICAgIE1lZGlhSWQsDQo+ICsg ICAgMCwNCj4gKyAgICBCbG9ja1NpemUsDQo+ICsgICAgUHJvdGVjdGl2ZU1icg0KPiArICAgICk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBHcHRWYWxpZFN0YXR1cyA9 IFN0YXR1czsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAv LyBWZXJpZnkgdGhhdCB0aGUgUHJvdGVjdGl2ZSBNQlIgaXMgdmFsaWQNCj4gKyAgLy8NCj4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgTUFYX01CUl9QQVJUSVRJT05TOyBJbmRleCsrKSB7DQo+ ICsgICAgaWYgKFByb3RlY3RpdmVNYnItPlBhcnRpdGlvbltJbmRleF0uQm9vdEluZGljYXRvciA9 PSAweDAwICYmDQo+ICsgICAgICAgIFByb3RlY3RpdmVNYnItPlBhcnRpdGlvbltJbmRleF0uT1NJ bmRpY2F0b3IgPT0NCj4gUE1CUl9HUFRfUEFSVElUSU9OICYmDQo+ICsgICAgICAgIFVOUEFDS19V SU5UMzIgKFByb3RlY3RpdmVNYnItPlBhcnRpdGlvbltJbmRleF0uU3RhcnRpbmdMQkEpID09IDEN Cj4gKyAgICAgICApIHsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBp ZiAoSW5kZXggPT0gTUFYX01CUl9QQVJUSVRJT05TKSB7DQo+ICsgICAgZ290byBEb25lOw0KPiAr ICB9DQo+ICsNCj4gKyAgTWJyVmFsaWQgPSBUUlVFOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFs bG9jYXRlIHRoZSBHUFQgc3RydWN0dXJlcw0KPiArICAvLw0KPiArICBQcmltYXJ5SGVhZGVyID0g QWxsb2NhdGVaZXJvUG9vbA0KPiAoc2l6ZW9mKEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKSk7 DQo+ICsgIGlmIChQcmltYXJ5SGVhZGVyID09IE5VTEwpIHsNCj4gKyAgICBnb3RvIERvbmU7DQo+ ICsgIH0NCj4gKw0KPiArICBCYWNrdXBIZWFkZXIgPSBBbGxvY2F0ZVplcm9Qb29sDQo+IChzaXpl b2YoRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIpKTsNCj4gKyAgaWYgKEJhY2t1cEhlYWRlciA9 PSBOVUxMKSB7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gQ2hlY2sgcHJpbWFyeSBhbmQgYmFja3VwIHBhcnRpdGlvbiB0YWJsZXMNCj4gKyAgLy8NCj4g KyAgU3RhdHVzID0gUGFydGl0aW9uVmFsaWRHcHRUYWJsZSAoUFJJTUFSWV9QQVJUX0hFQURFUl9M QkEsDQo+IFByaW1hcnlIZWFkZXIpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIE5vdCBWYWxpZCBwcmltYXJ5IHBhcnRpdGlvbiB0 YWJsZVxuIikpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gUGFydGl0aW9uVmFsaWRHcHRUYWJsZSAo TGFzdEJsb2NrLCBCYWNrdXBIZWFkZXIpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIERFQlVHICgoRUZJX0RfSU5GTywgIiBOb3QgVmFsaWQgYmFja3VwIHBhcnRp dGlvbiB0YWJsZVxuIikpOw0KPiArICAgICAgZ290byBEb25lOw0KPiArICAgIH0gZWxzZSB7DQo+ ICsgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgVmFsaWQgYmFja3VwIHBhcnRpdGlvbiB0YWJs ZVxuIikpOw0KPiArICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIFJlc3RvcmUgcHJpbWFyeSBw YXJ0aXRpb24gdGFibGUgYnkgdGhlDQo+IGJhY2t1cFxuIikpOw0KPiArICAgICAgaWYgKCFQYXJ0 aXRpb25SZXN0b3JlR3B0VGFibGUgKEJhY2t1cEhlYWRlcikpIHsNCj4gKyAgICAgICAgREVCVUcg KChFRklfRF9JTkZPLCAiIFJlc3RvcmUgcHJpbWFyeSBwYXJ0aXRpb24gdGFibGUgZXJyb3JcbiIp KTsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgU3RhdHVzID0gUGFydGl0aW9uVmFsaWRHcHRU YWJsZSAoQmFja3VwSGVhZGVyLT5BbHRlcm5hdGVMQkEsDQo+IFByaW1hcnlIZWFkZXIpOw0KPiAr ICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgREVCVUcgKChFRklf RF9JTkZPLCAiIFJlc3RvcmUgYmFja3VwIHBhcnRpdGlvbiB0YWJsZSBzdWNjZXNzXG4iKSk7DQo+ ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9IGVsc2UgaWYgKEVGSV9FUlJPUiAoUGFydGl0aW9u VmFsaWRHcHRUYWJsZSAoUHJpbWFyeUhlYWRlci0NCj4gPkFsdGVybmF0ZUxCQSwgQmFja3VwSGVh ZGVyKSkpIHsNCj4gKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgVmFsaWQgcHJpbWFyeSBhbmQg IVZhbGlkIGJhY2t1cCBwYXJ0aXRpb24NCj4gdGFibGVcbiIpKTsNCj4gKyAgICBERUJVRyAoKEVG SV9EX0lORk8sICIgUmVzdG9yZSBiYWNrdXAgcGFydGl0aW9uIHRhYmxlIGJ5IHRoZQ0KPiBwcmlt YXJ5XG4iKSk7DQo+ICsgICAgaWYgKCFQYXJ0aXRpb25SZXN0b3JlR3B0VGFibGUgKFByaW1hcnlI ZWFkZXIpKSB7DQo+ICsgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgUmVzdG9yZSBiYWNrdXAg cGFydGl0aW9uIHRhYmxlIGVycm9yXG4iKSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVz ID0gUGFydGl0aW9uVmFsaWRHcHRUYWJsZSAoUHJpbWFyeUhlYWRlci0+QWx0ZXJuYXRlTEJBLA0K PiBCYWNrdXBIZWFkZXIpOw0KPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgUmVzdG9yZSBiYWNrdXAgcGFydGl0aW9uIHRhYmxl IHN1Y2Nlc3NcbiIpKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAoKEVGSV9E X1ZFUkJPU0UsICIgVmFsaWQgcHJpbWFyeSBhbmQgVmFsaWQgYmFja3VwIHBhcnRpdGlvbg0KPiB0 YWJsZVxuIikpOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFJlYWQgdGhlIEVGSSBQYXJ0aXRpb24g RW50cmllcw0KPiArICAvLw0KPiArICBQYXJ0RW50cnkgPSBBbGxvY2F0ZVBvb2wgKFByaW1hcnlI ZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllcyAqDQo+IFByaW1hcnlIZWFkZXItPlNpemVP ZlBhcnRpdGlvbkVudHJ5KTsNCj4gKyAgaWYgKFBhcnRFbnRyeSA9PSBOVUxMKSB7DQo+ICsgICAg REVCVUcgKChFRklfRF9FUlJPUiwgIkFsbG9jYXRlIHBvb2wgZXJyb3JcbiIpKTsNCj4gKyAgICBn b3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBEaXNrSW8tPlJlYWREaXNrICgN Cj4gKyAgICBEaXNrSW8sDQo+ICsgICAgTWVkaWFJZCwNCj4gKyAgICBNdWx0VTY0eDMyIChQcmlt YXJ5SGVhZGVyLT5QYXJ0aXRpb25FbnRyeUxCQSwgQmxvY2tTaXplKSwNCj4gKyAgICBQcmltYXJ5 SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKiAoUHJpbWFyeUhlYWRlci0NCj4gPlNp emVPZlBhcnRpdGlvbkVudHJ5KSwNCj4gKyAgICBQYXJ0RW50cnkNCj4gKyAgICApOw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgR3B0VmFsaWRTdGF0dXMgPSBTdGF0dXM7 DQo+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiBQYXJ0aXRpb24gRW50cnkgUmVhZERpc2sg ZXJyb3JcbiIpKTsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAo KEVGSV9EX1ZFUkJPU0UsICIgUGFydGl0aW9uIGVudHJpZXMgcmVhZCBibG9jayBzdWNjZXNzXG4i KSk7DQo+ICsNCj4gKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiIE51bWJlciBvZiBwYXJ0aXRp b24gZW50cmllczogJWRcbiIsDQo+IFByaW1hcnlIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50 cmllcykpOw0KPiArDQo+ICsgIFBFbnRyeVN0YXR1cyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFByaW1h cnlIZWFkZXItDQo+ID5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKiBzaXplb2YoRUZJX1BBUlRJ VElPTl9FTlRSWV9TVEFUVVMpKTsNCj4gKyAgaWYgKFBFbnRyeVN0YXR1cyA9PSBOVUxMKSB7DQo+ ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkFsbG9jYXRlIHBvb2wgZXJyb3JcbiIpKTsNCj4g KyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayB0aGUg aW50ZWdyaXR5IG9mIHBhcnRpdGlvbiBlbnRyaWVzDQo+ICsgIC8vDQo+ICsgIFBhcnRpdGlvbkNo ZWNrR3B0RW50cnkgKFByaW1hcnlIZWFkZXIsIFBhcnRFbnRyeSwgUEVudHJ5U3RhdHVzKTsNCj4g Kw0KPiArICAvLw0KPiArICAvLyBJZiB3ZSBnb3QgdGhpcyBmYXIgdGhlIEdQVCBsYXlvdXQgb2Yg dGhlIGRpc2sgaXMgdmFsaWQgYW5kIHdlIHNob3VsZCByZXR1cm4NCj4gdHJ1ZQ0KPiArICAvLw0K PiArICBHcHRWYWxpZFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArDQo+ICsgRG9uZToNCj4gKyAg U0hFTExfRlJFRV9OT05fTlVMTCAoUHJvdGVjdGl2ZU1icik7DQo+ICsgIGlmIChFRklfRVJST1Ig KEdwdFZhbGlkU3RhdHVzKSkgew0KPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFByaW1hcnlI ZWFkZXIpOw0KPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKEJhY2t1cEhlYWRlcik7DQo+ICsg ICAgU0hFTExfRlJFRV9OT05fTlVMTCAoUGFydEVudHJ5KTsNCj4gKyAgICBTSEVMTF9GUkVFX05P Tl9OVUxMIChQRW50cnlTdGF0dXMpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIEdwdFZhbGlkID0g VFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBHcHRWYWxpZFN0YXR1czsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIFRoaXMgcm91dGluZSB3aWxsIHJlYWQgR1BUIHBhcnRpdGlvbiB0YWJs ZSBoZWFkZXIgYW5kIHJldHVybiBpdC4NCj4gKw0KPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9u IG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCj4gKyAgVGhlIEdQVCBwYXJ0aXRpb24gdGFi bGUgaGVhZGVyIGlzIGV4dGVybmFsIGlucHV0LCBzbyB0aGlzIHJvdXRpbmUNCj4gKyAgd2lsbCBk byBiYXNpYyB2YWxpZGF0aW9uIGZvciBHUFQgcGFydGl0aW9uIHRhYmxlIGhlYWRlciBiZWZvcmUg cmV0dXJuLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIExiYSAgICAgICAgIFRoZSBzdGFydGluZyBM YmEgb2YgdGhlIFBhcnRpdGlvbiBUYWJsZQ0KPiArICBAcGFyYW1bb3V0XSBQYXJ0SGVhZGVyICBT dG9yZXMgdGhlIHBhcnRpdGlvbiB0YWJsZSB0aGF0IGlzIHJlYWQNCj4gKw0KPiArICBAcmV0dmFs IFRSVUUgICAgICBUaGUgcGFydGl0aW9uIHRhYmxlIGlzIHZhbGlkDQo+ICsgIEByZXR2YWwgRkFM U0UgICAgIFRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbm90IHZhbGlkDQo+ICsNCj4gKyoqLw0KPiAr U1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtQYXJ0aXRpb25WYWxpZEdwdFRhYmxlICgNCj4gKyAg SU4gIEVGSV9MQkEgICAgICAgICAgICAgICAgICAgICBMYmEsDQo+ICsgIE9VVCBFRklfUEFSVElU SU9OX1RBQkxFX0hFQURFUiAgKlBhcnRIZWFkZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgQmxvY2tTaXplOw0KPiArICBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUiAgKlBhcnRI ZHI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBNZWRpYUlkOw0KPiArDQo+ICsg IEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ICsgIE1lZGlhSWQgICA9 IEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkOw0KPiArICBQYXJ0SGRyICAgPSBBbGxvY2F0ZVplcm9Q b29sIChCbG9ja1NpemUpOw0KPiArDQo+ICsgIGlmIChQYXJ0SGRyID09IE5VTEwpIHsNCj4gKyAg ICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiQWxsb2NhdGUgcG9vbCBlcnJvclxuIikpOw0KPiArICAg IHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArICAvLw0KPiArICAvLyBS ZWFkIHRoZSBFRkkgUGFydGl0aW9uIFRhYmxlIEhlYWRlcg0KPiArICAvLw0KPiArICBTdGF0dXMg PSBEaXNrSW8tPlJlYWREaXNrICgNCj4gKyAgICBEaXNrSW8sDQo+ICsgICAgTWVkaWFJZCwNCj4g KyAgICBNdWx0VTY0eDMyIChMYmEsIEJsb2NrU2l6ZSksDQo+ICsgICAgQmxvY2tTaXplLA0KPiAr ICAgIFBhcnRIZHINCj4gKyAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgRnJlZVBvb2wgKFBhcnRIZHIpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoKFBhcnRIZHItPkhlYWRlci5TaWduYXR1cmUgIT0gRUZJX1BUQUJfSEVB REVSX0lEKSB8fA0KPiArICAgICAgIVBhcnRpdGlvbkNoZWNrQ3JjIChCbG9ja1NpemUsICZQYXJ0 SGRyLT5IZWFkZXIpIHx8DQo+ICsgICAgICBQYXJ0SGRyLT5NeUxCQSAhPSBMYmEgfHwNCj4gKyAg ICAgIChQYXJ0SGRyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSA8IHNpemVvZihFRklfUEFSVElUSU9O X0VOVFJZKSkNCj4gKyAgICAgKSB7DQo+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkludmFs aWQgZWZpIHBhcnRpdGlvbiB0YWJsZSBoZWFkZXJcbiIpKTsNCj4gKyAgICBGcmVlUG9vbCAoUGFy dEhkcik7DQo+ICsgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KPiArICB9DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gRW5zdXJlIHRoZSBOdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKiBT aXplT2ZQYXJ0aXRpb25FbnRyeSBkb2Vzbid0DQo+IG92ZXJmbG93Lg0KPiArICAvLw0KPiArICBp ZiAoUGFydEhkci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzID4gRGl2VTY0eDMyIChNQVhfVUlO VE4sDQo+IFBhcnRIZHItPlNpemVPZlBhcnRpdGlvbkVudHJ5KSkgew0KPiArICAgIEZyZWVQb29s IChQYXJ0SGRyKTsNCj4gKyAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7DQo+ICsgIH0N Cj4gKw0KPiArICBDb3B5TWVtIChQYXJ0SGVhZGVyLCBQYXJ0SGRyLCBzaXplb2YoRUZJX1BBUlRJ VElPTl9UQUJMRV9IRUFERVIpKTsNCj4gKyAgaWYgKCFQYXJ0aXRpb25DaGVja0dwdEVudHJ5QXJy YXlDUkMgKFBhcnRIZWFkZXIpKSB7DQo+ICsgICAgRnJlZVBvb2wgKFBhcnRIZHIpOw0KPiArICAg IHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIERFQlVHICgo RUZJX0RfVkVSQk9TRSwgIiBWYWxpZCBlZmkgcGFydGl0aW9uIHRhYmxlIGhlYWRlclxuIikpOw0K PiArICBGcmVlUG9vbCAoUGFydEhkcik7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhlIENSQyBmaWVsZCBpbiB0aGUgUGFy dGl0aW9uIHRhYmxlIGhlYWRlciBpcyB2YWxpZA0KPiArICBmb3IgUGFydGl0aW9uIGVudHJ5IGFy cmF5Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFBhcnRIZWFkZXIgIFBhcnRpdGlvbiB0YWJsZSBo ZWFkZXIgc3RydWN0dXJlDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgICAgdGhlIENSQyBpcyB2 YWxpZA0KPiArICBAcmV0dmFsIEZBTFNFICAgICB0aGUgQ1JDIGlzIGludmFsaWQNCj4gKw0KPiAr KiovDQo+ICtTVEFUSUMNCj4gK0JPT0xFQU4NCj4gK1BhcnRpdGlvbkNoZWNrR3B0RW50cnlBcnJh eUNSQyAoDQo+ICsgIElOICBFRklfUEFSVElUSU9OX1RBQkxFX0hFQURFUiAgKlBhcnRIZWFkZXIN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAg ICpQdHI7DQo+ICsgIFVJTlQzMiAgICAgIENyYzsNCj4gKyAgVUlOVE4gICAgICAgU2l6ZTsNCj4g Kw0KPiArICAvLw0KPiArICAvLyBSZWFkIHRoZSBFRkkgUGFydGl0aW9uIEVudHJpZXMNCj4gKyAg Ly8NCj4gKyAgUHRyID0gQWxsb2NhdGVQb29sIChQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlv bkVudHJpZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiArICBp ZiAoUHRyID09IE5VTEwpIHsNCj4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiIEFsbG9jYXRl IHBvb2wgZXJyb3JcbiIpKTsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiAr ICBTdGF0dXMgPSBEaXNrSW8tPlJlYWREaXNrICgNCj4gKyAgICBEaXNrSW8sDQo+ICsgICAgQmxv Y2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ICsgICAgTXVsdFU2NHgzMiAoUGFydEhlYWRlci0+UGFy dGl0aW9uRW50cnlMQkEsIEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpLA0KPiArICAgIFBhcnRI ZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllcyAqIFBhcnRIZWFkZXItDQo+ID5TaXplT2ZQ YXJ0aXRpb25FbnRyeSwNCj4gKyAgICBQdHINCj4gKyAgICApOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgRnJlZVBvb2wgKFB0cik7DQo+ICsgICAgcmV0dXJuIEZBTFNF Ow0KPiArICB9DQo+ICsNCj4gKyAgU2l6ZSAgICA9IFBhcnRIZWFkZXItPk51bWJlck9mUGFydGl0 aW9uRW50cmllcyAqIFBhcnRIZWFkZXItDQo+ID5TaXplT2ZQYXJ0aXRpb25FbnRyeTsNCj4gKw0K PiArICBTdGF0dXMgID0gZ0JTLT5DYWxjdWxhdGVDcmMzMiAoUHRyLCBTaXplLCAmQ3JjKTsNCj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoRUZJX0RfRVJST1Is ICJDaGVja1BFbnRyeUFycmF5Q1JDOiBDcmMgY2FsY3VsYXRpb24gZmFpbGVkXG4iKSk7DQo+ICsg ICAgRnJlZVBvb2wgKFB0cik7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4g KyAgRnJlZVBvb2wgKFB0cik7DQo+ICsNCj4gKyAgcmV0dXJuIChCT09MRUFOKShQYXJ0SGVhZGVy LT5QYXJ0aXRpb25FbnRyeUFycmF5Q1JDMzIgPT0gQ3JjKTsNCj4gK30NCj4gKw0KPiArDQo+ICsv KioNCj4gKyAgUmVzdG9yZSBQYXJ0aXRpb24gVGFibGUgdG8gaXRzIGFsdGVybmF0ZSBwbGFjZQ0K PiArICAoUHJpbWFyeSAtPiBCYWNrdXAgb3IgQmFja3VwIC0+IFByaW1hcnkpLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFBhcnRIZWFkZXIgIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgc3RydWN0dXJl Lg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgIFJlc3RvcmluZyBzdWNjZWVkcw0KPiArICBA cmV0dmFsIEZBTFNFICAgICBSZXN0b3JpbmcgZmFpbGVkDQo+ICsNCj4gKyoqLw0KPiArU1RBVElD DQo+ICtCT09MRUFODQo+ICtQYXJ0aXRpb25SZXN0b3JlR3B0VGFibGUgKA0KPiArICBJTiAgRUZJ X1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgIEJsb2NrU2l6ZTsNCj4gKyAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIg ICpQYXJ0SGRyOw0KPiArICBFRklfTEJBICAgICAgICAgICAgICAgICAgICAgUEVudHJ5TEJBOw0K PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgKlB0cjsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgIE1lZGlhSWQ7DQo+ICsNCj4gKyAgUGFydEhkciAgID0gTlVMTDsNCj4g KyAgUHRyICAgICAgID0gTlVMTDsNCj4gKw0KPiArICBCbG9ja1NpemUgPSBCbG9ja0lvLT5NZWRp YS0+QmxvY2tTaXplOw0KPiArICBNZWRpYUlkICAgPSBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZDsN Cj4gKw0KPiArICBQYXJ0SGRyICAgPSBBbGxvY2F0ZVplcm9Qb29sIChCbG9ja1NpemUpOw0KPiAr DQo+ICsgIGlmIChQYXJ0SGRyID09IE5VTEwpIHsNCj4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9S LCAiQWxsb2NhdGUgcG9vbCBlcnJvclxuIikpOw0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAg fQ0KPiArDQo+ICsgIFBFbnRyeUxCQSA9IChQYXJ0SGVhZGVyLT5NeUxCQSA9PSBQUklNQVJZX1BB UlRfSEVBREVSX0xCQSkgP1wNCj4gKyAgICAoUGFydEhlYWRlci0+TGFzdFVzYWJsZUxCQSArIDEp IDpcDQo+ICsgICAgKFBSSU1BUllfUEFSVF9IRUFERVJfTEJBICsgMSk7DQo+ICsNCj4gKyAgQ29w eU1lbSAoUGFydEhkciwgUGFydEhlYWRlciwgc2l6ZW9mKEVGSV9QQVJUSVRJT05fVEFCTEVfSEVB REVSKSk7DQo+ICsNCj4gKyAgUGFydEhkci0+TXlMQkEgICAgICAgICAgICAgID0gUGFydEhlYWRl ci0+QWx0ZXJuYXRlTEJBOw0KPiArICBQYXJ0SGRyLT5BbHRlcm5hdGVMQkEgICAgICAgPSBQYXJ0 SGVhZGVyLT5NeUxCQTsNCj4gKyAgUGFydEhkci0+UGFydGl0aW9uRW50cnlMQkEgID0gUEVudHJ5 TEJBOw0KPiArICBQYXJ0aXRpb25TZXRDcmMgKChFRklfVEFCTEVfSEVBREVSICopUGFydEhkcik7 DQo+ICsNCj4gKyAgU3RhdHVzID0gRGlza0lvLT5Xcml0ZURpc2sgKA0KPiArICAgIERpc2tJbywN Cj4gKyAgICBNZWRpYUlkLA0KPiArICAgIE11bHRVNjR4MzIgKFBhcnRIZHItPk15TEJBLCAoVUlO VDMyKUJsb2NrU2l6ZSksDQo+ICsgICAgQmxvY2tTaXplLA0KPiArICAgIFBhcnRIZHINCj4gKyAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBEb25lOw0K PiArICB9DQo+ICsNCj4gKyAgUHRyID0gQWxsb2NhdGVQb29sIChQYXJ0SGVhZGVyLT5OdW1iZXJP ZlBhcnRpdGlvbkVudHJpZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+U2l6ZU9mUGFydGl0aW9uRW50cnkp Ow0KPiArICBpZiAoUHRyID09IE5VTEwpIHsNCj4gKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAi IEFsbG9jYXRlIHBvb2wgZXJyb3JcbiIpKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBE aXNrSW8tPlJlYWREaXNrICgNCj4gKyAgICBEaXNrSW8sDQo+ICsgICAgTWVkaWFJZCwNCj4gKyAg ICBNdWx0VTY0eDMyIChQYXJ0SGVhZGVyLT5QYXJ0aXRpb25FbnRyeUxCQSwgKFVJTlQzMilCbG9j a1NpemUpLA0KPiArICAgIFBhcnRIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllcyAqIFBh cnRIZWFkZXItDQo+ID5TaXplT2ZQYXJ0aXRpb25FbnRyeSwNCj4gKyAgICBQdHINCj4gKyAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBEb25lOw0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRGlza0lvLT5Xcml0ZURpc2sgKA0KPiArICAgIERpc2tJ bywNCj4gKyAgICBNZWRpYUlkLA0KPiArICAgIE11bHRVNjR4MzIgKFBFbnRyeUxCQSwgKFVJTlQz MilCbG9ja1NpemUpLA0KPiArICAgIFBhcnRIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmll cyAqIFBhcnRIZWFkZXItDQo+ID5TaXplT2ZQYXJ0aXRpb25FbnRyeSwNCj4gKyAgICBQdHINCj4g KyAgICApOw0KPiArDQo+ICsgRG9uZToNCj4gKyAgRnJlZVBvb2wgKFBhcnRIZHIpOw0KPiArDQo+ ICsgIGlmIChQdHIgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sIChQdHIpOw0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBUUlVFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg VGhpcyByb3V0aW5lIHdpbGwgY2hlY2sgR1BUIHBhcnRpdGlvbiBlbnRyeSBhbmQgcmV0dXJuIGVu dHJ5IHN0YXR1cy4NCj4gKw0KPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZl IHVudHJ1c3RlZCBpbnB1dC4NCj4gKyAgVGhlIEdQVCBwYXJ0aXRpb24gZW50cnkgaXMgZXh0ZXJu YWwgaW5wdXQsIHNvIHRoaXMgcm91dGluZQ0KPiArICB3aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24g Zm9yIEdQVCBwYXJ0aXRpb24gZW50cnkgYW5kIHJlcG9ydCBzdGF0dXMuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgICBQYXJ0SGVhZGVyICAgIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgc3RydWN0dXJl DQo+ICsgIEBwYXJhbVtpbl0gICAgUGFydEVudHJ5ICAgICBUaGUgcGFydGl0aW9uIGVudHJ5IGFy cmF5DQo+ICsgIEBwYXJhbVtvdXRdICAgUEVudHJ5U3RhdHVzICB0aGUgcGFydGl0aW9uIGVudHJ5 IHN0YXR1cyBhcnJheQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkaW5n IHRoZSBzdGF0dXMgb2YgZWFjaCBwYXJ0aXRpb24NCj4gKw0KPiArKiovDQo+ICtTVEFUSUMNCj4g K1ZPSUQNCj4gK1BhcnRpdGlvbkNoZWNrR3B0RW50cnkgKA0KPiArICBJTiAgRUZJX1BBUlRJVElP Tl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyLA0KPiArICBJTiAgRUZJX1BBUlRJVElPTl9FTlRS WSAgICAgICAgICpQYXJ0RW50cnksDQo+ICsgIE9VVCBFRklfUEFSVElUSU9OX0VOVFJZX1NUQVRV UyAgKlBFbnRyeVN0YXR1cw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9MQkEgICAgICAgICAgICAg IFN0YXJ0aW5nTEJBOw0KPiArICBFRklfTEJBICAgICAgICAgICAgICBFbmRpbmdMQkE7DQo+ICsg IEVGSV9QQVJUSVRJT05fRU5UUlkgICpFbnRyeTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg SW5kZXgxOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICBJbmRleDI7DQo+ICsNCj4gKyAgREVC VUcgKChFRklfRF9WRVJCT1NFLCAiIHN0YXJ0IGNoZWNrIHBhcnRpdGlvbiBlbnRyaWVzXG4iKSk7 DQo+ICsgIGZvciAoSW5kZXgxID0gMDsgSW5kZXgxIDwgUGFydEhlYWRlci0+TnVtYmVyT2ZQYXJ0 aXRpb25FbnRyaWVzOw0KPiBJbmRleDErKykgew0KPiArICAgIEVudHJ5ID0gKEVGSV9QQVJUSVRJ T05fRU5UUlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgSW5kZXgxICoNCj4gUGFydEhlYWRlci0+ U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkVudHJ5LT5Q YXJ0aXRpb25UeXBlR1VJRCwNCj4gJmdFZmlQYXJ0VHlwZVVudXNlZEd1aWQpKSB7DQo+ICsgICAg ICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGFydGluZ0xCQSA9IEVudHJ5LT5T dGFydGluZ0xCQTsNCj4gKyAgICBFbmRpbmdMQkEgICA9IEVudHJ5LT5FbmRpbmdMQkE7DQo+ICsg ICAgaWYgKFN0YXJ0aW5nTEJBID4gRW5kaW5nTEJBIHx8DQo+ICsgICAgICAgIFN0YXJ0aW5nTEJB IDwgUGFydEhlYWRlci0+Rmlyc3RVc2FibGVMQkEgfHwNCj4gKyAgICAgICAgU3RhcnRpbmdMQkEg PiBQYXJ0SGVhZGVyLT5MYXN0VXNhYmxlTEJBIHx8DQo+ICsgICAgICAgIEVuZGluZ0xCQSA8IFBh cnRIZWFkZXItPkZpcnN0VXNhYmxlTEJBIHx8DQo+ICsgICAgICAgIEVuZGluZ0xCQSA+IFBhcnRI ZWFkZXItPkxhc3RVc2FibGVMQkENCj4gKyAgICAgICApIHsNCj4gKyAgICAgIFBFbnRyeVN0YXR1 c1tJbmRleDFdLk91dE9mUmFuZ2UgPSBUUlVFOw0KPiArICAgICAgY29udGludWU7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgaWYgKChFbnRyeS0+QXR0cmlidXRlcyAmIEJJVDEpICE9IDApIHsNCj4g KyAgICAgIC8vDQo+ICsgICAgICAvLyBJZiBCaXQgMSBpcyBzZXQsIHRoaXMgaW5kaWNhdGUgdGhh dCB0aGlzIGlzIGFuIE9TIHNwZWNpZmljIEdVSUQgcGFydGl0aW9uLg0KPiArICAgICAgLy8NCj4g KyAgICAgIFBFbnRyeVN0YXR1c1tJbmRleDFdLk9zU3BlY2lmaWMgPSBUUlVFOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIGZvciAoSW5kZXgyID0gSW5kZXgxICsgMTsgSW5kZXgyIDwgUGFydEhlYWRl ci0NCj4gPk51bWJlck9mUGFydGl0aW9uRW50cmllczsgSW5kZXgyKyspIHsNCj4gKyAgICAgIEVu dHJ5ID0gKEVGSV9QQVJUSVRJT05fRU5UUlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgSW5kZXgy ICoNCj4gUGFydEhlYWRlci0+U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiArICAgICAgaWYgKENv bXBhcmVHdWlkICgmRW50cnktPlBhcnRpdGlvblR5cGVHVUlELA0KPiAmZ0VmaVBhcnRUeXBlVW51 c2VkR3VpZCkpIHsNCj4gKyAgICAgICAgY29udGludWU7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAg ICAgIGlmIChFbnRyeS0+RW5kaW5nTEJBID49IFN0YXJ0aW5nTEJBICYmIEVudHJ5LT5TdGFydGlu Z0xCQSA8PSBFbmRpbmdMQkEpDQo+IHsNCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgLy8gVGhp cyByZWdpb24gb3ZlcmxhcHMgd2l0aCB0aGUgSW5kZXgxJ3RoIHJlZ2lvbg0KPiArICAgICAgICAv Lw0KPiArICAgICAgICBQRW50cnlTdGF0dXNbSW5kZXgxXS5PdmVybGFwICA9IFRSVUU7DQo+ICsg ICAgICAgIFBFbnRyeVN0YXR1c1tJbmRleDJdLk92ZXJsYXAgID0gVFJVRTsNCj4gKyAgICAgICAg Y29udGludWU7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcg KChFRklfRF9WRVJCT1NFLCAiIEVuZCBjaGVjayBwYXJ0aXRpb24gZW50cmllc1xuIikpOw0KPiAr fQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArICBVcGRhdGVzIHRoZSBDUkMzMiB2YWx1ZSBpbiB0aGUg dGFibGUgaGVhZGVyLg0KPiArDQo+ICsgIEBwYXJhbSAgSGRyICAgIFRhYmxlIHRvIHVwZGF0ZQ0K PiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArVk9JRA0KPiArUGFydGl0aW9uU2V0Q3JjICgNCj4g KyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgKkhkcg0KPiArICApDQo+ICt7DQo+ICsgIFBhcnRp dGlvblNldENyY0FsdFNpemUgKEhkci0+SGVhZGVyU2l6ZSwgSGRyKTsNCj4gK30NCj4gKw0KPiAr DQo+ICsvKioNCj4gKyAgVXBkYXRlcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRl ci4NCj4gKw0KPiArICBAcGFyYW0gIFNpemUgICBUaGUgc2l6ZSBvZiB0aGUgdGFibGUNCj4gKyAg QHBhcmFtICBIZHIgICAgVGFibGUgdG8gdXBkYXRlDQo+ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ ICtWT0lEDQo+ICtQYXJ0aXRpb25TZXRDcmNBbHRTaXplICgNCj4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgIFNpemUsDQo+ICsgIElOIE9VVCBFRklfVEFCTEVfSEVBREVSICAqSGRyDQo+ICsg ICkNCj4gK3sNCj4gKyAgVUlOVDMyICBDcmM7DQo+ICsNCj4gKyAgSGRyLT5DUkMzMiA9IDA7DQo+ ICsgIGdCUy0+Q2FsY3VsYXRlQ3JjMzIgKChVSU5UOCAqKUhkciwgU2l6ZSwgJkNyYyk7DQo+ICsg IEhkci0+Q1JDMzIgPSBDcmM7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrcyB0 aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW0gIE1h eFNpemUgICBNYXggU2l6ZSBsaW1pdA0KPiArICBAcGFyYW0gIEhkciAgICAgICBUYWJsZSB0byBj aGVjaw0KPiArDQo+ICsgIEByZXR1cm4gVFJVRSAgICAgIENSQyBWYWxpZA0KPiArICBAcmV0dXJu IEZBTFNFICAgICBDUkMgSW52YWxpZA0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArQk9PTEVB Tg0KPiArUGFydGl0aW9uQ2hlY2tDcmMgKA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg TWF4U2l6ZSwNCj4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgICpIZHINCj4gKyAgKQ0KPiAr ew0KPiArICByZXR1cm4gUGFydGl0aW9uQ2hlY2tDcmNBbHRTaXplIChNYXhTaXplLCBIZHItPkhl YWRlclNpemUsIEhkcik7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrcyB0aGUg Q1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW0gIE1heFNp emUgICBNYXggU2l6ZSBsaW1pdA0KPiArICBAcGFyYW0gIFNpemUgICAgICBUaGUgc2l6ZSBvZiB0 aGUgdGFibGUNCj4gKyAgQHBhcmFtICBIZHIgICAgICAgVGFibGUgdG8gY2hlY2sNCj4gKw0KPiAr ICBAcmV0dXJuIFRSVUUgICAgQ1JDIFZhbGlkDQo+ICsgIEByZXR1cm4gRkFMU0UgICBDUkMgSW52 YWxpZA0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArQk9PTEVBTg0KPiArUGFydGl0aW9uQ2hl Y2tDcmNBbHRTaXplICgNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgIE1heFNpemUsDQo+ ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICBTaXplLA0KPiArICBJTiBPVVQgRUZJX1RBQkxF X0hFQURFUiAgKkhkcg0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQzMiAgICAgIENyYzsNCj4gKyAg VUlOVDMyICAgICAgT3JnQ3JjOw0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAg Q3JjID0gMDsNCj4gKw0KPiArICBpZiAoU2l6ZSA9PSAwKSB7DQo+ICsgICAgLy8NCj4gKyAgICAv LyBJZiBoZWFkZXIgc2l6ZSBpcyAwIENSQyB3aWxsIHBhc3Mgc28gcmV0dXJuIEZBTFNFIGhlcmUN Cj4gKyAgICAvLw0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgo TWF4U2l6ZSAhPSAwKSAmJiAoU2l6ZSA+IE1heFNpemUpKSB7DQo+ICsgICAgREVCVUcgKChFRklf RF9FUlJPUiwgIkNoZWNrQ3JjMzI6IFNpemUgPiBNYXhTaXplXG4iKSk7DQo+ICsgICAgcmV0dXJu IEZBTFNFOw0KPiArICB9DQo+ICsgIC8vDQo+ICsgIC8vIGNsZWFyIG9sZCBjcmMgZnJvbSBoZWFk ZXINCj4gKyAgLy8NCj4gKyAgT3JnQ3JjICAgICAgPSBIZHItPkNSQzMyOw0KPiArICBIZHItPkNS QzMyICA9IDA7DQo+ICsNCj4gKyAgU3RhdHVzICAgICAgPSBnQlMtPkNhbGN1bGF0ZUNyYzMyICgo VUlOVDggKilIZHIsIFNpemUsICZDcmMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkNoZWNrQ3JjMzI6IENyYyBjYWxjdWxhdGlv biBmYWlsZWRcbiIpKTsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKyAgLy8NCj4g KyAgLy8gc2V0IHJlc3VsdHMNCj4gKyAgLy8NCj4gKyAgSGRyLT5DUkMzMiA9IENyYzsNCj4gKw0K PiArICAvLw0KPiArICAvLyByZXR1cm4gc3RhdHVzDQo+ICsgIC8vDQo+ICsgIERFQlVHX0NPREVf QkVHSU4gKCk7DQo+ICsgIGlmIChPcmdDcmMgIT0gQ3JjKSB7DQo+ICsgICAgREVCVUcgKChFRklf RF9FUlJPUiwgIkNoZWNrQ3JjMzI6IENyYyBjaGVjayBmYWlsZWRcbiIpKTsNCj4gKyAgfQ0KPiAr ICBERUJVR19DT0RFX0VORCAoKTsNCj4gKw0KPiArICByZXR1cm4gKEJPT0xFQU4pKE9yZ0NyYyA9 PSBDcmMpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29udmVydHMgYSBHVUlEIGludG8gYSB1 bmljb2RlIHN0cmluZy4NCj4gKw0KPiArICBAcGFyYW0gIFtpbl0gR3VpZCAgICAgICAgICAgICBB IEdVSUQgdG8gYmUgY29udmVydGVkDQo+ICsgIEBwYXJhbSAgW291dF0gQnVmZmVyICAgICAgICAg IEEgcG9pbnRlciB0byBhIGJ1ZmZlciByZWNlaXZpbmcgdGhlIHN0cmluZw0KPiArICBAcGFyYW0g IFtpbl0gQnVmZmVyU2l6ZSAgICAgICBTaXplIG9mIHRoZSBidWZmZXINCj4gKw0KPiArICBAcmV0 dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICBTdWNjZXNzZnVsIGNvbnZlcnNpb24NCj4gKyAgQHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udmVyc2lvbiBmYWlsZWQNCj4gKw0KPiArKiov DQo+ICsNCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArR3VpZFRvU3RyaW5nICgNCj4gKyAg SU4gIEVGSV9HVUlEICAqR3VpZCwNCj4gKyAgT1VUIENIQVIxNiAgICAqQnVmZmVyLA0KPiArICBJ TiAgVUlOVE4gICAgIEJ1ZmZlclNpemUNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UTiBTaXplOw0K PiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN Cj4gKw0KPiArICBTaXplID0gVW5pY29kZVNQcmludCAoDQo+ICsgICAgQnVmZmVyLA0KPiArICAg IEJ1ZmZlclNpemUsDQo+ICsgICAgTCIlMDh4LSUwNHgtJTA0eC0lMDJ4JTAyeC0lMDJ4JTAyeCUw MnglMDJ4JTAyeCUwMngiLA0KPiArICAgIChVSU5UTilHdWlkLT5EYXRhMSwNCj4gKyAgICAoVUlO VE4pR3VpZC0+RGF0YTIsDQo+ICsgICAgKFVJTlROKUd1aWQtPkRhdGEzLA0KPiArICAgIChVSU5U TilHdWlkLT5EYXRhNFswXSwNCj4gKyAgICAoVUlOVE4pR3VpZC0+RGF0YTRbMV0sDQo+ICsgICAg KFVJTlROKUd1aWQtPkRhdGE0WzJdLA0KPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFszXSwNCj4g KyAgICAoVUlOVE4pR3VpZC0+RGF0YTRbNF0sDQo+ICsgICAgKFVJTlROKUd1aWQtPkRhdGE0WzVd LA0KPiArICAgIChVSU5UTilHdWlkLT5EYXRhNFs2XSwNCj4gKyAgICAoVUlOVE4pR3VpZC0+RGF0 YTRbN10NCj4gKyAgICApOw0KPiArICBpZiAoIVNpemUpIHsNCj4gKyAgICBTdGF0dXMgPSBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEga25v d24NCj4gKyAgcGFydGl0aW9uIHR5cGUgR1VJRC4gSWYgcGFydGl0aW9uIEdVSUQgaXMgbm90DQo+ ICsgIGtub3duLCBnZXRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBHVUlEDQo+ICsN Cj4gKyAgQHBhcmFtICBHVUlEICAgICAgICAgIEd1aWQgdG8gYmUgc2VhcmNoZWQgZm9yDQo+ICsg IEBwYXJhbSAgUGFydFR5cGVTdHIgICBCdWZmZXIgcmVjZWl2aW5nIHRoZSBzdHJpbmcNCj4gKyAg QHBhcmFtICBOb0d1aWRTdHIgICAgIERvIG5vdCBjb252ZXJ0IEdVSUQgdG8gc3RyaW5nDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBmb3IgYW4gdW5rbm93biBwYXJ0aXRpb24gdHlwZQ0KPiAr DQo+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICBHVUlEIHR5cGUgaXMga25vd24NCj4gKyAgQHJl dHVybiBFRklfTk9UX0ZPVU5EIFVua25vd24gR1VJRCBwYXJ0aXRpb24gdHlwZQ0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0dldFBhcnRpdGlvblR5cGVTdHIgKA0KPiArICBJTiBFRklf R1VJRCBHdWlkLA0KPiArICBPVVQgQ0hBUjE2ICpQYXJ0VHlwZVN0ciwNCj4gKyAgSU4gQk9PTEVB TiBOb0d1aWRTdHIpDQo+ICt7DQo+ICsgIFVJTlROIEluZGV4Ow0KPiArICBFRklfU1RBVFVTIFN0 YXR1czsNCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKyAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgQVJSQVlfU0laRSAoUGFydGl0aW9uVHlwZXMpOyBJbmRleCsrKSB7DQo+ICsg ICAgaWYgKENvbXBhcmVHdWlkICgmR3VpZCwgJlBhcnRpdGlvblR5cGVzW0luZGV4XS5UeXBlR3Vp ZCkpIHsNCj4gKyAgICAgIFN0cm5DcHkgKFBhcnRUeXBlU3RyLCBQYXJ0aXRpb25UeXBlc1tJbmRl eF0uVHlwZU5hbWUsDQo+IE1BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEgpOw0KPiArICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgaWYgKCFOb0d1aWRTdHIpIHsNCj4g KyAgICBHdWlkVG9TdHJpbmcgKCZHdWlkLCBQYXJ0VHlwZVN0ciwgKE1BWF9QQVJUSVRJT05fTkFN RV9MRU5HVEggKyAxKQ0KPiAqIHNpemVvZihDSEFSMTYpKTsNCj4gKyAgfQ0KPiArICByZXR1cm4g RUZJX05PVF9GT1VORDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIExpc3RzIHBhcnRpdGlvbnMg b24gYSBibG9jayBkZXZpY2UuDQo+ICsNCj4gKyAgQHJldHVybiAgIE51bWJlciBvZiBwYXJ0aXRp b25zIHVzZWQNCj4gKyoqLw0KPiArDQo+ICtVSU5UTg0KPiArUGFydGl0aW9uTGlzdEdwdEVudHJp ZXMgKFZPSUQpDQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBF RklfUEFSVElUSU9OX0VOVFJZICAqRW50cnk7DQo+ICsgIEVGSV9MQkEgICAgICAgICAgICAgIExl bmd0aDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgTnVtRW50cmllczsgLy8gVXNlZCBlbnRy aWVzDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsNCj4gKyAgQk9PTEVBTiAg ICAgICAgICAgICAgRmlyc3RUaW1lOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICBCbG9ja3NP Y2N1cGllZDsNCj4gKw0KPiArICBOdW1FbnRyaWVzID0gMDsNCj4gKyAgQmxvY2tTaXplID0gQmxv Y2tJby0+TWVkaWEtPkJsb2NrU2l6ZTsNCj4gKyAgRmlyc3RUaW1lID0gVFJVRTsNCj4gKw0KPiAr ICBpZiAoIUdwdFZhbGlkKSB7DQo+ICsgICAgcmV0dXJuIDA7DQo+ICsgIH0NCj4gKw0KPiArICBC bG9ja3NPY2N1cGllZCA9IDA7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUHJp bWFyeUhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzOw0KPiBJbmRleCsrKSB7DQo+ICsN Cj4gKyAgICBCT09MRUFOIFNwZWNpZmljOw0KPiArICAgIENIQVIxNiBQYXJ0VHlwZVN0cltNQVhf UEFSVElUSU9OX05BTUVfTEVOR1RIICsgMV07DQo+ICsNCj4gKyAgICBTcGVjaWZpYyA9IEZBTFNF Ow0KPiArDQo+ICsgICAgRW50cnkgPSAoRUZJX1BBUlRJVElPTl9FTlRSWSAqKSgoVUlOVDggKilQ YXJ0RW50cnkgKyBJbmRleCAqDQo+IFByaW1hcnlIZWFkZXItPlNpemVPZlBhcnRpdGlvbkVudHJ5 KTsNCj4gKw0KPiArICAgIExlbmd0aCA9IEVudHJ5LT5FbmRpbmdMQkEgLSBFbnRyeS0+U3RhcnRp bmdMQkEgKyAxOw0KPiArDQo+ICsgICAgaWYgKENvbXBhcmVHdWlkICgmRW50cnktPlBhcnRpdGlv blR5cGVHVUlELA0KPiAmZ0VmaVBhcnRUeXBlVW51c2VkR3VpZCkpIHsNCj4gKyAgICAgIGNvbnRp bnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChGaXJzdFRpbWUpIHsNCj4gKyAgICAgIFBy aW50IChMIiAgTm8gXHQlLTM2c1x0U3RhcnQgKExCQSlcdEVuZCAoTEJBKVx0U2l6ZSAoTWlCKVx0 IFBhcnRpdGlvbg0KPiBUeXBlXHJcbiIsIEwiTmFtZSIpOw0KPiArICAgICAgUHJpbnQgKEwiIC0t LS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0g ICAgIC0tLS0tLS0tLS0tICAgICAtLS0tLQ0KPiAtLS0tLSAgICAgICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tXHJcbiIpOw0KPiArICAgICAgRmlyc3RUaW1lID0gRkFMU0U7DQo+ICsg ICAgfQ0KPiArICAgIE51bUVudHJpZXMrKzsNCj4gKyAgICBpZiAoUEVudHJ5U3RhdHVzW0luZGV4 XS5PdXRPZlJhbmdlIHx8DQo+ICsgICAgICAgIFBFbnRyeVN0YXR1c1tJbmRleF0uT3ZlcmxhcCB8 fA0KPiArICAgICAgICBQRW50cnlTdGF0dXNbSW5kZXhdLk9zU3BlY2lmaWMpIHsNCj4gKyAgICAg IFNwZWNpZmljID0gVFJVRTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBCbG9ja3NPY2N1cGllZCAr PSBMZW5ndGg7DQo+ICsNCj4gKyAgICBHZXRQYXJ0aXRpb25UeXBlU3RyIChFbnRyeS0+UGFydGl0 aW9uVHlwZUdVSUQsIChDSEFSMTYgKikmUGFydFR5cGVTdHIsDQo+IEZBTFNFKTsNCj4gKw0KPiAr ICAgIFByaW50IChMIiUxcyAlLTNkXHQlLTM2c1x0MHglMDlsbHhcdDB4JTA5bGx4XHQlMDZsbHVc dCAgICAgICAgICVzXHJcbiIsDQo+ICsgICAgICAgICAgIFNwZWNpZmljID8gTCJTIiA6IEwiIiwN Cj4gKyAgICAgICAgICAgSW5kZXggKyAxLA0KPiArICAgICAgICAgICBFbnRyeS0+UGFydGl0aW9u TmFtZSwNCj4gKyAgICAgICAgICAgKFVJTlQ2NClFbnRyeS0+U3RhcnRpbmdMQkEsDQo+ICsgICAg ICAgICAgIChVSU5UNjQpRW50cnktPkVuZGluZ0xCQSwNCj4gKyAgICAgICAgICAgKE11bHRVNjR4 MzIgKExlbmd0aCwgQmxvY2tTaXplKSkgPj4gMjAsDQo+ICsgICAgICAgICAgIFBhcnRUeXBlU3Ry KTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIFRoaXMgY29kZSBibG9jayBpcyB0byBwcm92aWRlIGFk ZGl0aW9uYWwgaW5mbw0KPiArICB7DQo+ICsgICAgVUlOVDY0IERpc2tTaXplTWlCLCBTaXplT2Nj dXBpZWRNaUI7DQo+ICsNCj4gKyAgICBEaXNrU2l6ZU1pQiA9IE11bHRVNjR4MzIgKFByaW1hcnlI ZWFkZXItPkxhc3RVc2FibGVMQkEgLQ0KPiBQcmltYXJ5SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSAr IDEsIEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpID4+IDIwOw0KPiArICAgIFNpemVPY2N1cGll ZE1pQiA9IE11bHRVNjR4MzIgKEJsb2Nrc09jY3VwaWVkLCBCbG9ja0lvLT5NZWRpYS0NCj4gPkJs b2NrU2l6ZSkgPj4gMjA7DQo+ICsgICAgUHJpbnQgKEwiXHJcbiVkIHBhcnRpdGlvbihzKSB1c2Vk IG91dCBvZiAlZFxyXG4iLCBOdW1FbnRyaWVzLA0KPiBQcmltYXJ5SGVhZGVyLT5OdW1iZXJPZlBh cnRpdGlvbkVudHJpZXMpOw0KPiArICAgIFByaW50IChMIlRvdGFsIGRldmljZSBjYXBhY2l0eSAo bWludXMgR1BUIHNlcnZpY2UgYmxvY2tzKTogJWxsdQ0KPiBNaUJcclxuUGFydGl0aW9uZWQgc3Bh Y2U6ICVsbHUgTWlCXHJcbiIsDQo+ICsgICAgICAgICAgIERpc2tTaXplTWlCLA0KPiArICAgICAg ICAgICBTaXplT2NjdXBpZWRNaUIpOw0KPiArICAgIFByaW50IChMIlVucGFydGl0aW9uZWQgc3Bh Y2UgYXZhaWxhYmxlOiAlbGx1IE1pQiAoJWQlJSlcbiIsDQo+ICsgICAgICAgICAgIERpc2tTaXpl TWlCIC0gU2l6ZU9jY3VwaWVkTWlCLA0KPiArICAgICAgICAgICAoMTAwICogKERpc2tTaXplTWlC IC0gU2l6ZU9jY3VwaWVkTWlCKSkgLyBEaXNrU2l6ZU1pQik7DQo+ICsgIH0NCj4gKw0KPiArICBy ZXR1cm4gTnVtRW50cmllczsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIExvY2F0ZSBhIHBhcnRp dGlvbiBieSBjcml0ZXJpYQ0KPiArDQo+ICsgIEBwYXJhbSAgTmFtZSAgICAgICAgIFBhcnRpdGlv biBuYW1lIChvciBvcmRpbmFsIHJlcHJlc2VudGVkIGEgc3RyaW5nKQ0KPiArICBAcGFyYW0gIFN0 YXJ0TGJhICAgICBTdGFydExiYSBvZiB0aGUgcGFydGl0aW9uIHRvIHNlYXJjaCBmb3INCj4gKyAg QHBhcmFtICBFbmRpbmdMYmEgICAgRW5kaW5nTGJhIG9mIHRoZSBwYXJ0aXRpb24gdG8gc2VhcmNo IGZvcg0KPiArICBAcGFyYW0gIFNlYXJjaFR5cGUgICBBIGNvbWJpbmF0aW9uIChPUikgb2Ygc2Vh cmNoIG9wdGlvbnMuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnMgYXJlOg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgU1JDX0JZX05BTUUgICAgPSBzZWFyY2ggYnkgcGFydGl0 aW9uIG5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFNSQ19CWV9MQkEgICAgID0gc2Vh cmNoIGJ5IFN0YXJ0L0VuZGluZyBsYmENCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFNSQ19B TlkgICAgICAgID0gcmV0dXJucyBhIGZpcnN0IHVzZWQgcGFydGl0aW9uDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICBTUkNfQllfTlVNICAgICA9IHNlYXJjaCBieSBvcmRpbmFsDQo+ICsNCj4g Kw0KPiArICBAcmV0dXJuIE5vbi1OVUxMICAgIFBvaW50ZXIgdG8gdGggcGFydGl0aW9uIGZvdW5k DQo+ICsgIEByZXR1cm4gTlVMTCAgICAgICAgTm8gcGFydGl0aW9uIGZvdW5kDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1BBUlRJVElPTl9FTlRSWSAqDQo+ICtQYXJ0aXRpb25GaW5kUGFydGl0aW9uQnlD cml0ZXJpYSAoDQo+ICsgIElOIE9QVElPTkFMIENPTlNUIENIQVIxNiAgICpOYW1lLA0KPiArICBJ TiBPUFRJT05BTCBFRklfTEJBICAgICAgICBTdGFydExiYSwNCj4gKyAgSU4gT1BUSU9OQUwgRUZJ X0xCQSAgICAgICAgRW5kaW5nTGJhLA0KPiArICBJTiBTRUFSQ0hfVFlQRSAgICAgICAgICAgICBT ZWFyY2hUeXBlDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIEVGSV9QQVJUSVRJT05fRU5UUlkgICpFbnRyeTsNCj4gKw0KPiArICBpZiAoIUdwdFZh bGlkKSB7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIU5hbWUg JiYgKFNlYXJjaFR5cGUgJiBTUkNfQllfTkFNRSkpIHsNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4g KyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFByaW1hcnlIZWFkZXItPk51 bWJlck9mUGFydGl0aW9uRW50cmllczsNCj4gSW5kZXgrKykgew0KPiArICAgIEVudHJ5ID0gKEVG SV9QQVJUSVRJT05fRU5UUlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgSW5kZXggKg0KPiBQcmlt YXJ5SGVhZGVyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSk7DQo+ICsNCj4gKyAgICBpZiAoQ29tcGFy ZUd1aWQgKCZFbnRyeS0+UGFydGl0aW9uVHlwZUdVSUQsDQo+ICZnRWZpUGFydFR5cGVVbnVzZWRH dWlkKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFNl YXJjaFR5cGUgJiBTUkNfQU5ZKSB7DQo+ICsgICAgICByZXR1cm4gRW50cnk7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgaWYgKFNlYXJjaFR5cGUgJiBTUkNfQllfTkFNRSkgew0KPiArICAgICAgaWYg KCFTdHJDbXAgKE5hbWUsIEVudHJ5LT5QYXJ0aXRpb25OYW1lKSkgew0KPiArICAgICAgICByZXR1 cm4gRW50cnk7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICAgIGlmIChTZWFyY2hUeXBlICYg U1JDX0JZX05VTSkgew0KPiArICAgICAgVUlOVE4gT3JkaW5hbDsNCj4gKw0KPiArICAgICAgT3Jk aW5hbCA9IFNoZWxsU3RyVG9VaW50biAoTmFtZSk7DQo+ICsgICAgICBpZiAoSW5kZXggPT0gKE9y ZGluYWwgLSAxKSkgew0KPiArICAgICAgICByZXR1cm4gRW50cnk7DQo+ICsgICAgICB9DQo+ICsg ICAgfQ0KPiArICAgIGlmIChTZWFyY2hUeXBlICYgU1JDX0JZX0xCQSkgew0KPiArICAgICAgaWYg KA0KPiArICAgICAgICAgICgoU3RhcnRMYmEgPj0gRW50cnktPlN0YXJ0aW5nTEJBKSAmJg0KPiAr ICAgICAgICAgICAoU3RhcnRMYmEgPD0gRW50cnktPkVuZGluZ0xCQSkNCj4gKyAgICAgICAgICAp IHx8DQo+ICsgICAgICAgICAgKChFbmRpbmdMYmEgPj0gRW50cnktPlN0YXJ0aW5nTEJBKSAmJg0K PiArICAgICAgICAgICAoRW5kaW5nTGJhIDw9IEVudHJ5LT5FbmRpbmdMQkEpDQo+ICsgICAgICAg ICAgKQ0KPiArICAgICAgICAgKSB7DQo+ICsgICAgICAgIHJldHVybiBFbnRyeTsNCj4gKyAgICAg IH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBQcmludHMgaW5mb3JtYXRpb24gb24gYSBnaXZlbiBwYXJ0aXRpb24uDQo+ICsNCj4g KyAgQHBhcmFtICBFbnRyeSAgIFBvaW50ZXIgdG8gdGhlIFBhcnRpdGlvbiBvZiBpbnRlcmVzdA0K PiArKiovDQo+ICsNCj4gK1ZPSUQNCj4gK1BhcnRpdGlvblByaW50R3B0UGFydEluZm8gKA0KPiAr ICBJTiBFRklfUEFSVElUSU9OX0VOVFJZICpFbnRyeQ0KPiArICApDQo+ICt7DQo+ICsgIENPTlNU IENIQVIxNiBQYXJ0U3RyW01BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggKyAxXSA9IHsgTCdcMCcg fTsNCj4gKyAgQ09OU1QgQ0hBUjE2ICpTdHJVbmtub3duID0gTCJVbmtub3duIjsNCj4gKyAgRUZJ X1NUQVRVUyBTdGF0dXM7DQo+ICsgIEVGSV9MQkEgTGVuZ3RoOw0KPiArDQo+ICsgIEFTU0VSVCAo RW50cnkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IEdldFBhcnRpdGlvblR5cGVTdHIgKEVudHJ5LT5Q YXJ0aXRpb25UeXBlR1VJRCwgKENIQVIxNg0KPiAqKSZQYXJ0U3RyLCBUUlVFKTsNCj4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFN0ckNweSAoKENIQVIxNiAqKSZQYXJ0U3Ry LCBTdHJVbmtub3duKTsNCj4gKyAgfQ0KPiArDQo+ICsgIExlbmd0aCA9IEVudHJ5LT5FbmRpbmdM QkEgLSBFbnRyeS0+U3RhcnRpbmdMQkEgKyAxOw0KPiArDQo+ICsgIFByaW50IChMIlBhcnRpdGlv biBuYW1lOiAlc1xyXG4iLCBFbnRyeS0+UGFydGl0aW9uTmFtZSk7DQo+ICsgIFByaW50IChMIlN0 YXJ0aW5nIExCQSAgOiAweCUwOWxseFxyXG5FbmRpbmcgTEJBICAgIDogMHglMDlsbHhcclxuIiwN Cj4gKyAgICAgICAgIChVSU5UNjQpRW50cnktPlN0YXJ0aW5nTEJBLCAoVUlOVDY0KUVudHJ5LT5F bmRpbmdMQkEpOw0KPiArICBQcmludCAoTCJQYXJ0aXRpb24gU2l6ZTogJWxsdSBNaUIgKDB4JWxs eCBibG9ja3MpXG4iLA0KPiArICAgICAgICAgKE11bHRVNjR4MzIgKExlbmd0aCwgQmxvY2tJby0+ TWVkaWEtPkJsb2NrU2l6ZSkpID4+IDIwLCBMZW5ndGgpOw0KPiArICBQcmludCAoTCJBdHRyaWJ1 dGVzICAgIDogMHglMDlsbHhcclxuIiwgRW50cnktPkF0dHJpYnV0ZXMpOw0KPiArICBQcmludCAo TCJUeXBlL0dVSUQgICAgIDogJXMvJWdcclxuIiwgUGFydFN0ciwgJkVudHJ5LT5QYXJ0aXRpb25U eXBlR1VJRCk7DQo+ICsgIFByaW50IChMIlVuaXF1ZSBHVUlEICAgOiAlZ1xuIiwgJkVudHJ5LT5V bmlxdWVQYXJ0aXRpb25HVUlEKTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyAgV3JpdGVz IHByb3RlY3RpdmUgTUJSIHRvIGEgYmxvY2sgZGV2aWNlLg0KPiArDQo+ICsgIEByZXR1cm4gRUZJ X1NVQ0NFU1MgICAgTUJSIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR1cm4gb3RoZXIg ICAgICAgICAgRmFpbGVkIHRvIHdyaXRlIGFuIE1CUg0KPiArDQo+ICsqKi8NCj4gKw0KPiArU1RB VElDDQo+ICtFRklfU1RBVFVTDQo+ICtXcml0ZVByb3RlY3RpdmVNYnIgKA0KPiArICBWT0lEDQo+ ICsgICkNCj4gK3sNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgQmxvY2tTaXplOw0KPiArICBV SU5UNjQgICAgICAgICAgICAgICBEaXNrU2l6ZTsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAg U3RhdHVzOw0KPiArICBNQlJfUEFSVElUSU9OX1JFQ09SRCAqUGFydGl0aW9uOw0KPiArICBNQVNU RVJfQk9PVF9SRUNPUkQgICAqUHJvdGVjdGl2ZU1icjsNCj4gKw0KPiArICBCbG9ja1NpemUgPSBC bG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplOw0KPiArDQo+ICsgIFByb3RlY3RpdmVNYnIgPSBOVUxM Ow0KPiArICBQcm90ZWN0aXZlTWJyID0gQWxsb2NhdGVaZXJvUG9vbCAoQmxvY2tTaXplKTsNCj4g KyAgaWYgKFByb3RlY3RpdmVNYnIgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIERpc2tTaXplID0gQmxvY2tJby0+TWVkaWEt Pkxhc3RCbG9jayArIDE7DQo+ICsgIGlmIChEaXNrU2l6ZSA+IDB4ZmZmZmZmZmYpIHsNCj4gKyAg ICBEaXNrU2l6ZSA9IDB4ZmZmZmZmZmY7DQo+ICsgIH0NCj4gKw0KPiArICBDb3B5TWVtIChQcm90 ZWN0aXZlTWJyLCAmUHJvdGVjdGl2ZU1iclRlbXBsYXRlLA0KPiBzaXplb2YoTUFTVEVSX0JPT1Rf UkVDT1JEKSk7DQo+ICsNCj4gKyAgUGFydGl0aW9uID0gJlByb3RlY3RpdmVNYnItPlBhcnRpdGlv blswXTsNCj4gKw0KPiArICBQYXJ0aXRpb24tPkJvb3RJbmRpY2F0b3IgPSAwOw0KPiArICBQYXJ0 aXRpb24tPlN0YXJ0U2VjdG9yID0gMTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBXZSBkb24ndCBh Y3R1YWxseSBrbm93IHRoaXMgZGF0YSwgc28gd2UnbGwgbWFrZSB1cA0KPiArICAvLyBzb21ldGhp bmcgdGhhdCBzZWVtcyBsaWtlbHkuDQo+ICsgIC8vDQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gT2xk IHNvZnR3YXJlIGlzIGV4cGVjdGluZyB0aGUgUGFydGl0aW9uIHRvIHN0YXJ0IG9uDQo+ICsgIC8v IGEgVHJhY2sgYm91bmRhcnksIHNvIHdlJ2xsIHNldCB0cmFjayB0byAxIHRvIGF2b2lkICJvdmVy bGF5Ig0KPiArICAvLyB3aXRoIHRoZSBNQlINCj4gKyAgLy8NCj4gKw0KPiArICBQYXJ0aXRpb24t PlN0YXJ0VHJhY2sgPSAxOw0KPiArDQo+ICsgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrICgN Cj4gKyAgICBEaXNrSW8sDQo+ICsgICAgQmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ICsgICAg MCwNCj4gKyAgICBCbG9ja1NpemUsDQo+ICsgICAgUHJvdGVjdGl2ZU1icg0KPiArICAgICk7DQo+ ICsNCj4gKyAgTWJyVmFsaWQgPSAhRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArDQo+ICsgIFNIRUxM X0ZSRUVfTk9OX05VTEwgKFByb3RlY3RpdmVNYnIpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBXcml0ZSBHUFQgdGFibGVzIHRvIHRoZSBibG9jayBk ZXZpY2UuDQo+ICsNCj4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICBHUFQgdGFibGVzIHdlcmUg c3VjY2Vzc2Z1bGx5IHdyaXR0ZW4vdXBkYXRlZA0KPiArICBAcmV0dXJuIG90aGVyICAgICAgICAg IEZhaWxlZCB0byB3cml0ZS91cGRhdGUgR1BUIHRhYmxlcw0KPiArDQo+ICsqKi8NCj4gKw0KPiAr U1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtXcml0ZUdQVCAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0K PiArLyoNCj4gKyAgICBDQUxMRVIgaXMgZXhwZWN0ZWQgdG8gZmlsbCBpbjoNCj4gKyAgICAgICAg ICAgIEZpcnN0VXNlYWJsZUxCQQ0KPiArICAgICAgICAgICAgTGFzdFVzZWFibGVMQkENCj4gKyAg ICAgICAgICAgIEVudHJ5Q291bnQNCj4gKyAgICAgICAgICAgIERpc2tHVUlEDQo+ICsNCj4gKyAg ICBXZSBmaWxsIGluIHRoZSByZXN0LCBhbmQgYmxhc3QgaXQgb3V0Lg0KPiArDQo+ICsgICAgUmV0 dXJucyBhIHN0YXR1cy4NCj4gKw0KPiArKi8NCj4gK3sNCj4gKyAgVUlOVDMyICAgICAgQmxvY2tT aXplOw0KPiArICBVSU5UMzIgICAgICBUYWJsZVNpemU7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1 cyA9IEVGSV9TVUNDRVNTOw0KPiArDQo+ICsgIEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5C bG9ja1NpemU7DQo+ICsgIFRhYmxlU2l6ZSA9IFByaW1hcnlIZWFkZXItPk51bWJlck9mUGFydGl0 aW9uRW50cmllcyAqDQo+IHNpemVvZihFRklfUEFSVElUSU9OX0VOVFJZKTsNCj4gKw0KPiArICBp ZiAoIU1iclZhbGlkKSB7DQo+ICsgICAgV3JpdGVQcm90ZWN0aXZlTWJyICgpOw0KPiArICB9DQo+ ICsgIC8vDQo+ICsgIC8vIFdyaXRlIG91dCB0aGUgcHJpbWFyeSBoZWFkZXIuLi4NCj4gKyAgLy8N Cj4gKyAgUHJpbWFyeUhlYWRlci0+SGVhZGVyLlNpZ25hdHVyZSA9IEVGSV9QVEFCX0hFQURFUl9J RDsNCj4gKyAgUHJpbWFyeUhlYWRlci0+SGVhZGVyLlJldmlzaW9uID0gR1BUX1JFVklTSU9OXzFf MDsNCj4gKyAgUHJpbWFyeUhlYWRlci0+SGVhZGVyLkhlYWRlclNpemUgPQ0KPiBzaXplb2YoRUZJ X1BBUlRJVElPTl9UQUJMRV9IRUFERVIpOw0KPiArDQo+ICsgIFByaW1hcnlIZWFkZXItPkFsdGVy bmF0ZUxCQSA9IEJhY2t1cEhlYWRlci0+TXlMQkE7DQo+ICsNCj4gKyAgUHJpbWFyeUhlYWRlci0+ U2l6ZU9mUGFydGl0aW9uRW50cnkgPSBzaXplb2YoRUZJX1BBUlRJVElPTl9FTlRSWSk7DQo+ICsN Cj4gKyAgU3RhdHVzID0gZ0JTLT5DYWxjdWxhdGVDcmMzMiAoKFVJTlQ4ICopUGFydEVudHJ5LCBU YWJsZVNpemUsDQo+ICZQcmltYXJ5SGVhZGVyLT5QYXJ0aXRpb25FbnRyeUFycmF5Q1JDMzIpOw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArDQo+ICsgIC8vIFdyaXRlIHByaW1hcnkgaGVhZGVyDQo+ICsgIFBhcnRpdGlvblNl dENyYyAoJlByaW1hcnlIZWFkZXItPkhlYWRlcik7DQo+ICsNCj4gKyAgU3RhdHVzID0gRGlza0lv LT5Xcml0ZURpc2sgKA0KPiArICAgIERpc2tJbywNCj4gKyAgICBCbG9ja0lvLT5NZWRpYS0+TWVk aWFJZCwNCj4gKyAgICBNdWx0VTY0eDMyIChQcmltYXJ5SGVhZGVyLT5NeUxCQSwgKFVJTlQzMilC bG9ja1NpemUpLA0KPiArICAgIEJsb2NrU2l6ZSwNCj4gKyAgICBQcmltYXJ5SGVhZGVyDQo+ICsg ICAgKTsNCj4gKw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gV3JpdGUgb3V0IHRo ZSBwcmltYXJ5IHRhYmxlIC4uLg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBEaXNrSW8tPldyaXRl RGlzayAoDQo+ICsgICAgRGlza0lvLA0KPiArICAgIEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0K PiArICAgIE11bHRVNjR4MzIgKFByaW1hcnlIZWFkZXItPlBhcnRpdGlvbkVudHJ5TEJBLCAoVUlO VDMyKUJsb2NrU2l6ZSksDQo+ICsgICAgVGFibGVTaXplLA0KPiArICAgIFBhcnRFbnRyeQ0KPiAr ICAgICk7DQo+ICsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdyaXRlIG91dCB0 aGUgc2Vjb25kYXJ5IGhlYWRlciBhbmQgdGFibGUgYnkgY2FsbGluZyByZXN0b3JlDQo+ICsgIC8v DQo+ICsNCj4gKyAgaWYgKCFQYXJ0aXRpb25SZXN0b3JlR3B0VGFibGUgKFByaW1hcnlIZWFkZXIp KSB7DQo+ICsgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KPiArICB9DQo+ICsgIEJs b2NrSW8tPkZsdXNoQmxvY2tzIChCbG9ja0lvKTsNCj4gKyAgR3B0VmFsaWQgPSAhRUZJX0VSUk9S IChTdGF0dXMpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICAoUmUpaW5pdGlhbGl6ZSBHUFQgdGFibGVzIG9uIHRoZSBibG9jayBkZXZpY2UNCj4gKw0K PiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgIFN1Y2Nlc3NmdWxseSAocmUpaW5pdGlhbGl6ZWQg R1BUIFRhYmxlcw0KPiArICBAcmV0dXJuIG90aGVyICAgICAgICAgIEZhaWxlZCB0byAocmUpaW5p dGlhbGl6ZSBHUFQgdGFibGVzDQo+ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ICtFRklfU1RBVFVT DQo+ICtUYWJsZUNyZWF0ZUVtcHR5R3B0IChWT0lEKQ0KPiArew0KPiArICBVSU5UTiAgICAgICBF bnRyeUNvdW50Ow0KPiArICBVSU5UTiAgICAgICBCbG9ja0ZpdDsNCj4gKyAgVUlOVE4gICAgICAg QmxvY2tTaXplOw0KPiArICBVSU5UTiAgICAgICBFbnRyeUJsb2NrczsNCj4gKyAgVUlOVDY0ICAg ICAgRGlza1NpemU7DQo+ICsgIFVJTlROICAgICAgIFRhYmxlU2l6ZTsNCj4gKyAgRUZJX0xCQSAg ICAgSGVhZGVyMV9MQkE7DQo+ICsgIEVGSV9MQkEgICAgIFRhYmxlMV9MQkE7DQo+ICsgIEVGSV9M QkEgICAgIEhlYWRlcjJfTEJBOw0KPiArICBFRklfTEJBICAgICBUYWJsZTJfTEJBOw0KPiArICBF RklfTEJBICAgICBGaXJzdFVzYWJsZUxCQTsNCj4gKyAgRUZJX0xCQSAgICAgTGFzdFVzYWJsZUxC QTsNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIEVudHJ5Q291bnQgPSBFTlRS WV9ERUZBVUxUOw0KPiArICBCbG9ja1NpemUgPSBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplOw0K PiArICBCbG9ja0ZpdCA9ICBCbG9ja1NpemUgLyBzaXplb2YoRUZJX1BBUlRJVElPTl9FTlRSWSk7 DQo+ICsNCj4gKyAgaWYgKEJsb2NrRml0ID4gRU5UUllfREVGQVVMVCkgew0KPiArICAgIEVudHJ5 Q291bnQgPSBCbG9ja0ZpdDsNCj4gKyAgfQ0KPiArICBFbnRyeUJsb2NrcyA9IEVudHJ5Q291bnQg LyBCbG9ja0ZpdDsNCj4gKw0KPiArICBpZiAoKEVudHJ5QmxvY2tzICogQmxvY2tGaXQpICE9IEVu dHJ5Q291bnQpIHsNCj4gKyAgICBTdGF0dXMgPSBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gKyAg ICBQcmludEVyciAoTCJJbnZhbGlkIEVudHJ5IGJsb2NrcyBhbmQgRW50cnkgY291bnQgY29tYmlu YXRpb25cbiIsIFN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ ICsgIERpc2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkxhc3RCbG9jayArIDE7DQo+ICsNCj4gKyAg U0hFTExfRlJFRV9OT05fTlVMTCAoUHJpbWFyeUhlYWRlcik7DQo+ICsgIFNIRUxMX0ZSRUVfTk9O X05VTEwgKEJhY2t1cEhlYWRlcik7DQo+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFBhcnRFbnRy eSk7DQo+ICsNCj4gKyAgUHJpbWFyeUhlYWRlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJsb2NrU2l6 ZSk7DQo+ICsgIGlmIChQcmltYXJ5SGVhZGVyID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICBCYWNrdXBIZWFkZXIgPSBBbGxv Y2F0ZVplcm9Qb29sIChCbG9ja1NpemUpOw0KPiArICBpZiAoQmFja3VwSGVhZGVyID09IE5VTEwp IHsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiAr ICBIZWFkZXIxX0xCQSA9IDE7DQo+ICsgIFRhYmxlMV9MQkEgPSAyOw0KPiArICBGaXJzdFVzYWJs ZUxCQSA9IFRhYmxlMV9MQkEgKyBFbnRyeUJsb2NrczsNCj4gKw0KPiArICBIZWFkZXIyX0xCQSA9 IERpc2tTaXplIC0gMTsNCj4gKyAgVGFibGUyX0xCQSA9IEhlYWRlcjJfTEJBIC0gRW50cnlCbG9j a3M7DQo+ICsgIExhc3RVc2FibGVMQkEgPSBUYWJsZTJfTEJBIC0gMTsNCj4gKw0KPiArICBUYWJs ZVNpemUgPSBFbnRyeUJsb2NrcyAqIEJsb2NrU2l6ZTsNCj4gKw0KPiArICBpZiAoVGFibGVTaXpl ICE9IChFbnRyeUNvdW50ICogc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkpKSkgew0KPiArICAg IFN0YXR1cyA9IEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KPiArICAgIFByaW50RXJyIChMIkludmFs aWQgVGFibGUgc2l6ZSBhbmQgRW50cnkgY291bnQgY29tYmluYXRpb25cbiIsIFN0YXR1cyk7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChHUFRfREVCVUdfTEVW RUwpIHsNCj4gKyAgICBQcmludCAoTCJEaXNrU2l6ZSA9ICVseFxuIiwgRGlza1NpemUpOw0KPiAr ICAgIFByaW50IChMIkJsb2NrU2l6ZSA9ICV4XG4iLCBCbG9ja1NpemUpOw0KPiArICAgIFByaW50 IChMIkhlYWRlcjFfTEJBID0gJWx4XG4iLCBIZWFkZXIxX0xCQSk7DQo+ICsgICAgUHJpbnQgKEwi VGFibGUxX0xCQSA9ICVseFxuIiwgVGFibGUxX0xCQSk7DQo+ICsgICAgUHJpbnQgKEwiRmlyc3RV c2FibGVMQkEgPSAlbHhcbiIsIEZpcnN0VXNhYmxlTEJBKTsNCj4gKyAgICBQcmludCAoTCJIZWFk ZXIyX0xCQSA9ICVseFxuIiwgSGVhZGVyMl9MQkEpOw0KPiArICAgIFByaW50IChMIlRhYmxlMl9M QkEgPSAlbHhcbiIsIFRhYmxlMl9MQkEpOw0KPiArICAgIFByaW50IChMIkxhc3RVc2FibGVMQkEg PSAlbHhcbiIsIExhc3RVc2FibGVMQkEpOw0KPiArICAgIFByaW50IChMIkVudHJ5Q291bnQgPSAl eFxuIiwgRW50cnlDb3VudCk7DQo+ICsgICAgUHJpbnQgKEwiRW50cnlCbG9ja3MgPSAleFxuIiwg RW50cnlCbG9ja3MpOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2luY2Ugd2UncmUg bWFraW5nIGVtcHR5IHRhYmxlcywgd2UganVzdCB3cml0ZSB6ZXJvcy4uLg0KPiArICAvLw0KPiAr DQo+ICsgIFBhcnRFbnRyeSA9IEFsbG9jYXRlWmVyb1Bvb2wgKFRhYmxlU2l6ZSk7DQo+ICsgIGlm IChQYXJ0RW50cnkgPT0gTlVMTCkgew0KPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFByaW1h cnlIZWFkZXIpOw0KPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKEJhY2t1cEhlYWRlcik7DQo+ ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgUEVu dHJ5U3RhdHVzID0gQWxsb2NhdGVaZXJvUG9vbCAoVGFibGVTaXplKTsNCj4gKw0KPiArICBQcmlt YXJ5SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSA9IEZpcnN0VXNhYmxlTEJBOw0KPiArICBQcmltYXJ5 SGVhZGVyLT5MYXN0VXNhYmxlTEJBID0gTGFzdFVzYWJsZUxCQTsNCj4gKyAgUHJpbWFyeUhlYWRl ci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzID0gKFVJTlQzMilFbnRyeUNvdW50Ow0KPiArICBH ZW5lcmF0ZUd1aWQgKCZQcmltYXJ5SGVhZGVyLT5EaXNrR1VJRCk7DQo+ICsNCj4gKyAgUHJpbWFy eUhlYWRlci0+TXlMQkEgICAgICAgICAgICAgPSBIZWFkZXIxX0xCQTsNCj4gKyAgQmFja3VwSGVh ZGVyLT5NeUxCQSAgICAgICAgICAgICAgPSBIZWFkZXIyX0xCQTsNCj4gKyAgUHJpbWFyeUhlYWRl ci0+UGFydGl0aW9uRW50cnlMQkEgPSBUYWJsZTFfTEJBOw0KPiArICBCYWNrdXBIZWFkZXItPlBh cnRpdGlvbkVudHJ5TEJBICA9IFRhYmxlMl9MQkE7DQo+ICsNCj4gKyAgU3RhdHVzID0gV3JpdGVH UFQgKCk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IENsZWFyIEdQVCBwYXJ0aXRpb25zLg0KPiArDQo+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAg Q2xlYXJlZCBzdWNjZXNzZnVsbHkNCj4gKyAgQHJldHVybiBGQUxTRSAgICAgICAgICBGYWlsZWQg dG8gY2xlYXINCj4gKw0KPiArKiovDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1BhcnRpdGlvbkdw dENsZWFyQWxsIChWT0lEKQ0KPiArew0KPiArICBHcHRDbGVhbnVwR2xvYmFscyAoKTsNCj4gKyAg R3B0VmFsaWQgPSBGQUxTRTsNCj4gKyAgTWJyVmFsaWQgPSBGQUxTRTsNCj4gKyAgcmV0dXJuIFRh YmxlQ3JlYXRlRW1wdHlHcHQgKCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgYSBH UFQgcGFydGl0aW9uLg0KPiArDQo+ICsgIEBwYXJhbSAgUGFydE5hbWUgICAgICAgICAgICAgIFBh cnRpdGlvbiBOYW1lDQo+ICsgIEBwYXJhbSAgU3RhcnRMYmEgICAgICAgICAgICAgIFN0YXJ0aW5n IExCQSBvZiB0aGUgcGFydGl0aW9uLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiB6ZXJvLCB3aWxsIGJlIGNhbGN1bGF0ZWQNCj4gKyAgQHBhcmFtICBTaXplSW5NZWdhQnl0 ZXMgICAgICAgU2l6ZSBvZiB0aGUgcGFydGl0aW9uIGluIE1CDQo+ICsgIEBwYXJhbSAgQXR0cmli dXRlcyAgICAgICAgICAgIFBhcnRpdGlvbiBhdHRyaWJ1dGVzDQo+ICsgIEBwYXJhbSAgUGFydFR5 cGVHdWlkICAgICAgICAgIGEgVHlwZSBHVUlEIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBwYXJ0aXRp b24NCj4gKG5vdCBhIHBhcnRpdGlvbiB1bmlxdWUgR1VJRCkNCj4gKw0KPiArDQo+ICsgIEByZXR1 cm4gRUZJX1NVQ0NFU1MgICAgICAgICAgIFBhcnRpdGlvbiBzdWNjZXNzZnVsbHkgY3JlYXRlZA0K PiArICBAcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBFaXRoZXIgcGFydGl0aW9uIGV4aXN0 cywgb3Igd3JvbmcNCj4gcGFyYW1ldGVycyBzcGVjaWZpZWQNCj4gKyAgQHJldHVybiBvdGhlciAg ICAgICAgICAgICAgICAgRmFpbGVkIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbg0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtQYXJ0aXRpb25HcHRDcmVhdGVQYXJ0aXRpb24gKA0KPiArICBJTiBDT05T VCBDSEFSMTYgKlBhcnROYW1lLA0KPiArICBJTiBFRklfTEJBIFN0YXJ0TGJhLA0KPiArICBJTiBV SU5UNjQgU2l6ZUluTWVnYWJ5dGVzLA0KPiArICBJTiBVSU5UNjQgQXR0cmlidXRlcywNCj4gKyAg SU4gRUZJX0dVSUQgUGFydFR5cGVHdWlkKQ0KPiArew0KPiArICBFRklfR1VJRCAgICBHdWlkLCBQ YXJ0aXRpb25JZEd1aWQ7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKyAgVUlOVDY0ICAg ICAgU3RhcnRCbG9jazsNCj4gKyAgVUlOVDY0ICAgICAgRW5kQmxvY2s7DQo+ICsgIFVJTlQ2NCAg ICAgIFNpemVJbkJ5dGVzID0gMDsNCj4gKyAgVUlOVDMyICAgICAgQmxvY2tTaXplOw0KPiArICBV SU5UNjQgICAgICBEaXNrU2l6ZUJsb2NrczsNCj4gKyAgVUlOVDggICAgICAgKnA7DQo+ICsgIEJP T0xFQU4gICAgIE9mZnNldFNwZWNpZmllZCA9IEZBTFNFOw0KPiArICBCT09MRUFOICAgICBBbGxa ZXJvczsNCj4gKyAgSU5UTiAgICAgICAgQWxsWmVyb0VudHJ5Ow0KPiArICBJTlROICAgICAgICBP bGRGcmVlRW50cnk7DQo+ICsgIFVJTlQ2NCAgICAgIEF2YWlsQmxvY2tzOw0KPiArICBVSU5UNjQg ICAgICBCbG9ja3NUb0FsbG9jYXRlOw0KPiArICBVSU5UNjQgICAgICBIaWdoU2VlbjsNCj4gKyAg VUlOVE4gICAgICAgU2xvdDsNCj4gKyAgVUlOVDY0ICAgICAgTG93ZXN0QWxpZ25lZExiYTsNCj4g KyAgVUlOVDMyICAgICAgT3B0aW1hbFRyYW5zZmVyQmxvY2tzOw0KPiArICBVSU5UTiAgICAgICBp LCBqOw0KPiArICBDSEFSMTYgICAgICBQYXJ0TmFtZVVzZWRbTUFYX1BBUlRJVElPTl9OQU1FX0xF TkdUSCArIDFdID0geyBMJ1wwJyB9Ow0KPiArICBFRklfUEFSVElUSU9OX0VOVFJZICpFbnRyeTsN Cj4gKw0KPiArICBMb3dlc3RBbGlnbmVkTGJhID0gMDsNCj4gKyAgT3B0aW1hbFRyYW5zZmVyQmxv Y2tzID0gMTsNCj4gKw0KPiArICBBbGxaZXJvRW50cnkgPSAtMTsNCj4gKyAgT2xkRnJlZUVudHJ5 ID0gLTE7DQo+ICsNCj4gKyAgQmxvY2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZTsN Cj4gKyAgT2Zmc2V0U3BlY2lmaWVkID0gKFN0YXJ0TGJhICE9IDApOw0KPiArICBDb3B5TWVtICgm UGFydE5hbWVVc2VkLCBQYXJ0TmFtZSwgc2l6ZW9mKENIQVIxNikgKiBTdHJTaXplDQo+IChQYXJ0 TmFtZSkpOw0KPiArDQo+ICsgIEdlbmVyYXRlR3VpZCAoJkd1aWQpOw0KPiArDQo+ICsgIC8vIENy ZWF0aW5nIGEgbmV3IHBhcnRpdGlvbg0KPiArICBpZiAoIUdwdFZhbGlkKSB7DQo+ICsgICAgLy8g Q3JlYXRpbmcgYSBHUFQgZm9yIHRoZSBmaXJzdCB0aW1lDQo+ICsgICAgU3RhdHVzID0gVGFibGVD cmVhdGVFbXB0eUdwdCAoKTsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgLy8gRmlsbCBpbiB0aGUgc3RydWN0dXJlcw0KPiArICAgICAgU3RhdHVzID0gUGFydGl0 aW9uR2V0R3B0VGFibGVzIChEaXNrSW8sIEJsb2NrSW8pOw0KPiArICAgIH0NCj4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIEVudHJ5ID0gUGFydGl0aW9uRmluZFBhcnRpdGlvbkJ5Q3JpdGVy aWEgKFBhcnROYW1lLCAwLCAwLCBTUkNfQllfTkFNRSk7DQo+ICsgIGlmIChFbnRyeSkgew0KPiAr ICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICBQcmludEVyciAoTCJQ YXJ0aXRpb24gd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMiLCBTdGF0dXMpOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgSGlnaFNlZW4gICAgID0gUHJpbWFyeUhlYWRl ci0+Rmlyc3RVc2FibGVMQkEgLSAxOw0KPiArDQo+ICsgIGlmIChTdGFydExiYSkgew0KPiArICAg IC8vDQo+ICsgICAgLy8gaWYgb2Zmc2V0IGlzIHNwZWNpZmllZCwgY29tcHV0ZSB0aGUgc3RhcnQg YW5kIGVuZCBibG9ja3MNCj4gKyAgICAvLw0KPiArICAgIFN0YXJ0QmxvY2sgPSBTdGFydExiYTsN Cj4gKyAgICAvLw0KPiArICAgIC8vIFN0YXJ0QmxvY2sgc2hvdWxkIGJlIGFsaWduZWQgdG8gT3B0 aW1hbFRyYW5zZmVyQmxvY2tzLCB0aGUgbGVhc3QNCj4gY29tbW9uIG11bHRpcGxlIG9mOg0KPiAr ICAgIC8vIGEpLiB0aGUgcGh5c2ljYWwgYmxvY2sgYm91bmRhcnksIGlmIGFueQ0KPiArICAgIC8v IGIpLiB0aGUgb3B0aW1hbCB0cmFuc2ZlciBsZW5ndGggZ3JhbnVsYXJpdHksIGlmIGFueQ0KPiAr ICAgIC8vDQo+ICsgICAgaWYgKFN0YXJ0QmxvY2sgPCBMb3dlc3RBbGlnbmVkTGJhKSB7DQo+ICsg ICAgICBTdGFydEJsb2NrID0gTG93ZXN0QWxpZ25lZExiYTsNCj4gKyAgICB9IGVsc2Ugew0KPiAr ICAgICAgd2hpbGUgKCgoU3RhcnRCbG9jayAtIExvd2VzdEFsaWduZWRMYmEpICUgT3B0aW1hbFRy YW5zZmVyQmxvY2tzKSAhPSAwKSB7DQo+ICsgICAgICAgIFN0YXJ0QmxvY2srKzsNCj4gKyAgICAg IH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoU3RhcnRCbG9jayA8IFByaW1hcnlIZWFkZXIt PkZpcnN0VXNhYmxlTEJBIHx8DQo+ICsgICAgICAgIFN0YXJ0QmxvY2sgPiBQcmltYXJ5SGVhZGVy LT5MYXN0VXNhYmxlTEJBKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gT2Zmc2V0IHNwZWNp ZmllZCBpcyB0b28gbGFyZ2UNCj4gKyAgICAgIC8vDQo+ICsgICAgICBTdGF0dXMgPSBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICBQcmludEVyciAoTCJTcGVjaWZpZWQgb2Zmc2V0IGlz IHRvbyBsYXJnZSIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAgICBnb3RvIEV4aXQ7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU2l6ZUluQnl0ZXMgPSBNdWx0VTY0eDMyIChTaXplSW5N ZWdhYnl0ZXMsICgxMDI0ICogMTAyNCkpOw0KPiArICAgIGlmIChTaXplSW5CeXRlcyA8IFNpemVJ bk1lZ2FieXRlcyB8fCBTaXplSW5CeXRlcyA9PSAwKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAg Ly8gSWYgc2l6ZSBpcyBub3Qgc3BlY2lmaWVkIG9yIHRvbyBsYXJnZSwNCj4gKyAgICAgIC8vIHRy eSB0byBtYWtlIHRoZSBwYXJ0aXRpb24gYXMgYmlnIGFzIGl0IGNhbiBiZQ0KPiArICAgICAgLy8N Cj4gKyAgICAgIEJsb2Nrc1RvQWxsb2NhdGUgPSBFbmRCbG9jayA9IFNpemVJbkJ5dGVzID0gMHhm ZmZmZmZmZmZmZmZmZmZmOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBCbG9ja3NUb0FsbG9j YXRlID0gRGl2VTY0eDMyIChTaXplSW5CeXRlcywgQmxvY2tTaXplKTsNCj4gKyAgICAgIEVuZEJs b2NrID0gU3RhcnRCbG9jayArIEJsb2Nrc1RvQWxsb2NhdGUgLSAxOw0KPiArICAgICAgaWYgKEVu ZEJsb2NrID4gUHJpbWFyeUhlYWRlci0+TGFzdFVzYWJsZUxCQSkgew0KPiArICAgICAgICBFbmRC bG9jayA9IFByaW1hcnlIZWFkZXItPkxhc3RVc2FibGVMQkE7DQo+ICsgICAgICAgIEJsb2Nrc1Rv QWxsb2NhdGUgPSBFbmRCbG9jayAtIFN0YXJ0QmxvY2sgKyAxOw0KPiArICAgICAgfQ0KPiArICAg IH0NCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoaSA9IDA7IGkgPCBQcmltYXJ5SGVhZGVyLT5OdW1i ZXJPZlBhcnRpdGlvbkVudHJpZXM7IGkrKykgew0KPiArICAgIEVudHJ5ID0gKEVGSV9QQVJUSVRJ T05fRU5UUlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgaSAqDQo+IFByaW1hcnlIZWFkZXItPlNp emVPZlBhcnRpdGlvbkVudHJ5KTsNCj4gKyAgICBpZiAoIUNvbXBhcmVHdWlkICgmRW50cnktPlBh cnRpdGlvblR5cGVHVUlELA0KPiAmZ0VmaVBhcnRUeXBlVW51c2VkR3VpZCkpIHsNCj4gKw0KPiAr ICAgICAgLy8NCj4gKyAgICAgIC8vIFR5cGUgbm90IG51bGwsIHNvIGl0J3MgYWxsb2NhdGVkDQo+ ICsgICAgICAvLw0KPiArICAgICAgaWYgKEVudHJ5LT5FbmRpbmdMQkEgPiBIaWdoU2Vlbikgew0K PiArICAgICAgICBIaWdoU2VlbiA9IEVudHJ5LT5FbmRpbmdMQkE7DQo+ICsgICAgICB9DQo+ICsg ICAgICBpZiAoT2Zmc2V0U3BlY2lmaWVkKSB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIC8v IG1ha2Ugc3VyZSBuZXcgcGFydGl0aW9uIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBleGlzdGluZyBw YXJ0aXRpb25zDQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIGlmIChFbnRyeS0+U3RhcnRpbmdM QkEgPD0gU3RhcnRCbG9jayAmJg0KPiArICAgICAgICAgICAgU3RhcnRCbG9jayA8PSBFbnRyeS0+ RW5kaW5nTEJBKSB7DQo+ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICAvLyBzdGFydGluZyBi bG9jayBpcyBpbnNpZGUgYW4gZXhpc3RpbmcgcGFydGl0aW9uDQo+ICsgICAgICAgICAgLy8NCj4g KyAgICAgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICAgICAg UHJpbnRFcnIgKEwiU3RhcnRpbmcgYmxvY2sgaXMgaW5zaWRlIGFuIGV4aXN0aW5nIHBhcnRpdGlv biIsIFN0YXR1cyk7DQo+ICsgICAgICAgICAgZ290byBFeGl0Ow0KPiArICAgICAgICB9DQo+ICsg ICAgICAgIGlmICgoRW50cnktPlN0YXJ0aW5nTEJBIDw9IEVuZEJsb2NrICYmDQo+ICsgICAgICAg ICAgICAgRW5kQmxvY2sgPD0gRW50cnktPkVuZGluZ0xCQSkgfHwNCj4gKyAgICAgICAgICAgIChT dGFydEJsb2NrIDw9IEVudHJ5LT5TdGFydGluZ0xCQSAmJg0KPiArICAgICAgICAgICAgIEVudHJ5 LT5TdGFydGluZ0xCQSA8PSBFbmRCbG9jaykgfHwNCj4gKyAgICAgICAgICAgIChTdGFydEJsb2Nr IDw9IEVudHJ5LT5FbmRpbmdMQkEgJiYNCj4gKyAgICAgICAgICAgICBFbnRyeS0+RW5kaW5nTEJB IDw9IEVuZEJsb2NrKSkgew0KPiArICAgICAgICAgIC8vDQo+ICsgICAgICAgICAgLy8gbmV3IHBh cnRpdGlvbiBvdmVybGFwcyB3aXRoIGFuIGV4aXN0aW5nIHBhcnRpdGlvbg0KPiArICAgICAgICAg IC8vIHJlYWRqdXN0IG5ldyBwYXJ0aXRpb24gc2l6ZSB0byBhdm9pZCBvdmVybGFwcGluZw0KPiAr ICAgICAgICAgIC8vDQo+ICsgICAgICAgICAgRW5kQmxvY2sgPSBFbnRyeS0+U3RhcnRpbmdMQkEg LSAxOw0KPiArICAgICAgICAgIGlmIChFbmRCbG9jayA8IFN0YXJ0QmxvY2spIHsNCj4gKyAgICAg ICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgICAgICAgIFBy aW50RXJyIChMIkNhbm5vdCByZWFkanVzdCBuZXcgcGFydGl0aW9uIHNpemUgLSBvdmVybGFwcGlu ZyIsIFN0YXR1cyk7DQo+ICsgICAgICAgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgICAgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgICAgIEJsb2Nrc1RvQWxsb2NhdGUgPSBFbmRCbG9jayAtIFN0YXJ0 QmxvY2sgKyAxOw0KPiArICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiAr ICAgIH0gZWxzZSB7DQo+ICsgICAgICBwID0gKFVJTlQ4ICopKEVudHJ5KTsNCj4gKyAgICAgIEFs bFplcm9zID0gVFJVRTsNCj4gKyAgICAgIGZvciAoaiA9IDA7IGogPCBzaXplb2YoRUZJX1BBUlRJ VElPTl9FTlRSWSk7IGorKykgew0KPiArICAgICAgICBpZiAocFtqXSAhPSAwKSB7DQo+ICsgICAg ICAgICAgQWxsWmVyb3MgPSBGQUxTRTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAg ICAgaWYgKEFsbFplcm9zKSB7DQo+ICsgICAgICAgIGlmIChBbGxaZXJvRW50cnkgPT0gLTEpIHsN Cj4gKyAgICAgICAgICBBbGxaZXJvRW50cnkgPSBpOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9 IGVsc2UgaWYgKE9sZEZyZWVFbnRyeSA9PSAtMSkgew0KPiArICAgICAgICBPbGRGcmVlRW50cnkg PSBpOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IEFsbFplcm9FbnRyeSAtIGlmIG5vdCAtMSwgaXMgcG9pbnRlciB0byBhIG5ldmVyIGJlZm9yZSB1 c2VkIGVudHJ5IChmcmVlKQ0KPiArICAvLyBPbGRGcmVlRW50cnkgLSBpZiBub3QgLTEsIGlzIHBv aW50ZXIgdG8gc29tZSBwcmUtdXNlZCBmcmVlIGVudHJ5DQo+ICsgIC8vDQo+ICsgIGlmICgoQWxs WmVyb0VudHJ5ID09IC0xKSAmJiAoT2xkRnJlZUVudHJ5ID09IC0xKSkgew0KPiArICAgIC8vDQo+ ICsgICAgLy8gVEFCTEUgSVMgRlVMTCEhDQo+ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBQcmludEVyciAoTCJUYWJsZSBpcyBmdWxsIiwgU3Rh dHVzKTsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoT2Zmc2V0U3Bl Y2lmaWVkKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyB0aGUgdXNlciBoYXZlbid0IHNwZWNpZmll ZCB0aGUgbmV3IHBhcnRpdGlvbiBzaXplIGFuZCB3ZSBoYXZlbid0DQo+ICsgICAgLy8gcnVuIGlu dG8gYW55IHBhcnRpdGlvbiB0aGF0IHdpbGwgbGltaXQgdGhlIHNpemUgb2YgdGhpcyBuZXcgcGFy dGl0aW9uLg0KPiArICAgIC8vIFNvLCB1c2UgdGhlIG1heCBpdCBjYW4NCj4gKyAgICAvLw0KPiAr ICAgIGlmIChCbG9ja3NUb0FsbG9jYXRlID09IC0xKSB7DQo+ICsgICAgICBFbmRCbG9jayA9IFBy aW1hcnlIZWFkZXItPkxhc3RVc2FibGVMQkE7DQo+ICsgICAgICBCbG9ja3NUb0FsbG9jYXRlID0g RW5kQmxvY2sgLSBTdGFydEJsb2NrICsgMTsNCj4gKyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ICsg ICAgLy8NCj4gKyAgICAvLyBCZWNhdXNlIEhpZ2hTZWVuIGlzIHRoZSBsYXN0IExCQSBvZiB0aGUg dXNlZCBibG9ja3MsIGxldCBIaWdoU2VlbiBhbGlnbg0KPiB0byB0aGUgbGVhc3QgY29tbW9uIG11 bHRpcGxlIG9mOg0KPiArICAgIC8vIGEpLiB0aGUgcGh5c2ljYWwgYmxvY2sgYm91bmRhcnksIGlm IGFueQ0KPiArICAgIC8vIGIpLiB0aGUgb3B0aW1hbCB0cmFuc2ZlciBsZW5ndGggZ3JhbnVsYXJp dHksIGlmIGFueQ0KPiArICAgIC8vDQo+ICsgICAgaWYgKEhpZ2hTZWVuICsgMSA8IExvd2VzdEFs aWduZWRMYmEpIHsNCj4gKyAgICAgIEhpZ2hTZWVuID0gTG93ZXN0QWxpZ25lZExiYSAtIDE7DQo+ ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIHdoaWxlICgoKEhpZ2hTZWVuICsgMSAtIExvd2VzdEFs aWduZWRMYmEpICUgT3B0aW1hbFRyYW5zZmVyQmxvY2tzKSAhPSAwKQ0KPiB7DQo+ICsgICAgICAg IEhpZ2hTZWVuKys7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFByaW1h cnlIZWFkZXItPkxhc3RVc2FibGVMQkEgPD0gSGlnaFNlZW4pIHsNCj4gKyAgICAgIFN0YXR1cyA9 IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgUHJpbnRFcnIgKEwiRGlzayBoYXMgbm8g ZnJlZSBibG9ja3MgKEZVTEwpIGNhbm5vdCBjcmVhdGUiLCBTdGF0dXMpOw0KPiArICAgICAgZ290 byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgICAvLw0KPiArICAgIC8vIFtIaWdoU2VlbisxIC4uLiBM YXN0VXNhYmxlTEJBXSBpcyBhdmFpbGFibGUuLi4NCj4gKyAgICAvLyBhdmFpbCA9IChMYXN0VXNh YmxlTEJBIC0gKEhpZ2hTZWVuKzEpKSArIDEgPT4gTGFzdFVzYWJibGVMQkEgLQ0KPiBIaWdoU2Vl bg0KPiArICAgIC8vDQo+ICsgICAgQXZhaWxCbG9ja3MgPSBQcmltYXJ5SGVhZGVyLT5MYXN0VXNh YmxlTEJBIC0gSGlnaFNlZW47DQo+ICsNCj4gKyAgICBTaXplSW5CeXRlcyA9IE11bHRVNjR4MzIg KFNpemVJbk1lZ2FieXRlcywgKDEwMjQgKiAxMDI0KSk7DQo+ICsgICAgaWYgKFNpemVJbkJ5dGVz IDwgU2l6ZUluTWVnYWJ5dGVzKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gb3ZlcmZsb3cs IGZvcmNlIGEgdmVyeSBiaWcgYW5zd2VyDQo+ICsgICAgICAvLw0KPiArICAgICAgU2l6ZUluQnl0 ZXMgPSAweGZmZmZmZmZmZmZmZmZmZmY7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgICgoU2l6 ZUluQnl0ZXMgPT0gMCkgfHwNCj4gKyAgICAgICAgIChTaXplSW5CeXRlcyA+IChNdWx0VTY0eDMy IChBdmFpbEJsb2NrcywgQmxvY2tTaXplKSkpKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8g VXNlciBhc2tlZCBmb3IgemVybywgb3IgZm9yIG1vcmUgdGhhbiB3ZSd2ZSBnb3QsDQo+ICsgICAg ICAvLyBzbyBnaXZlIHRoZW0gYWxsIHRoYXQgaXMgbGVmdA0KPiArICAgICAgLy8NCj4gKyAgICAg IEJsb2Nrc1RvQWxsb2NhdGUgPSBBdmFpbEJsb2NrczsNCj4gKw0KPiArICAgIH0gZWxzZSB7DQo+ ICsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBXZSB3b3VsZCBoYXZlIHRvIGhhdmUgYSBCbG9j a1NpemUgPiAxbWIgZm9yIFJlbWFpbmRlciB0bw0KPiArICAgICAgLy8gbm90IGJlIDAuICBTaW5j ZSB3ZSBjYW5ub3QgYWN0dWFsbHkgdGVzdCB0aGlzIGNhc2UsIHdlDQo+ICsgICAgICAvLyBpbmdv cmUgaXQuLi4NCj4gKyAgICAgIC8vDQo+ICsgICAgICBCbG9ja3NUb0FsbG9jYXRlID0gRGl2VTY0 eDMyIChTaXplSW5CeXRlcywgQmxvY2tTaXplKTsNCj4gKw0KPiArICAgIH0NCj4gKyAgfQ0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIFdlIGhhdmUgYSBuYW1lDQo+ICsgIC8vIFdlIGhhdmUgYSB0eXBl IGd1aWQNCj4gKyAgLy8gV2UgaGF2ZSBhIHNpemUgaW4gYmxvY2tzDQo+ICsgIC8vIFdlIGhhdmUg YW4gYXR0cmlidXRlIG1hc2sNCj4gKyAgLy8NCj4gKw0KPiArICBpZiAoQmxvY2tzVG9BbGxvY2F0 ZSA8ICgoMTAyNCAqIDEwMjQpIC8gQmxvY2tTaXplKSkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9P VVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgIFByaW50RXJyIChMIlBhcnRpdGlvbiBpcyB0b28gc21h bGwgdG8gYmUgY3JlYXRlZCIsIFN0YXR1cyk7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKEdQVF9ERUJVR19MRVZFTCkgew0KPiArICAgIFByaW50IChMIlJlcXVlc3Rl ZCBTaXplSW5NZWdhQnl0ZXMgPSAlbGRcbiIsIFNpemVJbk1lZ2FieXRlcyk7DQo+ICsgICAgUHJp bnQgKEwiUmVzdWx0aW5nIHNpemUgaW4gQmxvY2tzID0gJWxkXG4iLCBCbG9ja3NUb0FsbG9jYXRl KTsNCj4gKyAgICBQcmludCAoTCJSZXN1bHRzIHNpemUgaW4gQnl0ZXMgPSAlbGRcbiIsIE11bHRV NjR4MzIgKEJsb2Nrc1RvQWxsb2NhdGUsDQo+IEJsb2NrU2l6ZSkpOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKEFsbFplcm9FbnRyeSAhPSAtMSkgew0KPiArICAgIFNsb3QgPSBBbGxaZXJvRW50cnk7 DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgU2xvdCA9IE9sZEZyZWVFbnRyeTsNCj4gKyAgfQ0KPiAr DQo+ICsgIEdlbmVyYXRlR3VpZCAoJlBhcnRpdGlvbklkR3VpZCk7DQo+ICsgIEVudHJ5ID0gKEVG SV9QQVJUSVRJT05fRU5UUlkgKikoKFVJTlQ4ICopUGFydEVudHJ5ICsgU2xvdCAqDQo+IFByaW1h cnlIZWFkZXItPlNpemVPZlBhcnRpdGlvbkVudHJ5KTsNCj4gKw0KPiArICBDb3B5TWVtICgmRW50 cnktPlBhcnRpdGlvblR5cGVHVUlELCAmUGFydFR5cGVHdWlkLA0KPiBzaXplb2YoRUZJX0dVSUQp KTsNCj4gKyAgQ29weU1lbSAoJkVudHJ5LT5VbmlxdWVQYXJ0aXRpb25HVUlELCAmUGFydGl0aW9u SWRHdWlkLA0KPiBzaXplb2YoRUZJX0dVSUQpKTsNCj4gKyAgaWYgKE9mZnNldFNwZWNpZmllZCkg ew0KPiArICAgIFBhcnRFbnRyeVtTbG90XS5TdGFydGluZ0xCQSA9IFN0YXJ0QmxvY2s7DQo+ICsg ICAgUGFydEVudHJ5W1Nsb3RdLkVuZGluZ0xCQSA9IEVuZEJsb2NrOw0KPiArICB9IGVsc2Ugew0K PiArICAgIFBhcnRFbnRyeVtTbG90XS5TdGFydGluZ0xCQSA9IEhpZ2hTZWVuICsgMTsNCj4gKyAg ICBQYXJ0RW50cnlbU2xvdF0uRW5kaW5nTEJBID0gSGlnaFNlZW4gKyBCbG9ja3NUb0FsbG9jYXRl Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKCEoKChFbnRyeS0+RW5kaW5nTEJBIC0gRW50cnktPlN0 YXJ0aW5nTEJBKSArIDEpID09IEJsb2Nrc1RvQWxsb2NhdGUpKSB7DQo+ICsgICAgUHJpbnRFcnIg KEwiV3JvbmcgU2l6ZSBmb3IgbmV3IHBhcnRpdG9uIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsN Cj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKEVudHJ5LT5TdGFydGlu Z0xCQSA8IFByaW1hcnlIZWFkZXItPkZpcnN0VXNhYmxlTEJBKSB8fA0KPiArICAgICAgKEVudHJ5 LT5FbmRpbmdMQkEgPiBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBKSkgew0KPiArICAgIFBy aW50RXJyIChMIk5ldyBQYXJ0aXRpb24gb3V0IG9mIGJvdW5kcyIsIEVGSV9JTlZBTElEX1BBUkFN RVRFUik7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgRW50cnktPkF0dHJp YnV0ZXMgPSBBdHRyaWJ1dGVzOw0KPiArICBDb3B5TWVtICgmKEVudHJ5LT5QYXJ0aXRpb25OYW1l WzBdKSwgUGFydE5hbWUsDQo+IE1BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggKiBzaXplb2YoQ0hB UjE2KSk7DQo+ICsNCj4gKyAgRGlza1NpemVCbG9ja3MgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJs b2NrICsgMTsNCj4gKyAgaWYgKERpc2tTaXplQmxvY2tzID4gMHhmZmZmZmZmZikgew0KPiArICAg IERpc2tTaXplQmxvY2tzID0gMHhmZmZmZmZmZjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9 IFdyaXRlR1BUICgpOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICBQcmludEVyciAoTCJBdHRlbXB0IHRvIFdyaXRlIG91dCBwYXJ0aXRpb24gdGFibGUgZmFpbGVk IiwgU3RhdHVzKTsNCj4gKyAgfQ0KPiArDQo+ICsgRXhpdDoNCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE1vZGlmaXkgYSBwYXJ0aXRpb24gYmFzZWQgb24gcGFy YW1ldGVycy4NCj4gKw0KPiArICBAcGFyYW0gIEVudHJ5ICAgICAgUG9pbnRlciB0byBhbiBleGlz dGluZyBwYXJ0aXRpb24NCj4gKyAgQHBhcmFtICBQYXJhbXMgICAgIFBhcmFtZXRlcnMgdG8gYmUg bW9kaWZpZWQNCj4gKyAgQHBhcmFtICBGbGFncyAgICAgIFdoaWNoIHBhcmFtZXRlciBpcyB0byBi ZSBtb2RpZmllZA0KPiArDQo+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgIFN1Y2Nlc3NmdWxseSBt b2RpZmllZCB0aGUgcGFydGl0aW9uDQo+ICsgIEByZXR1cm4gb3RoZXIgICAgICAgIEZhaWxlZCB0 byBtb2RpZnkgYSBwYXJ0aXRpb24NCj4gKw0KPiArKiovDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4g K1BhcnRpdGlvbkdwdE1vZGlmeVBhcnRpdGlvbiAoDQo+ICsgIElOIEVGSV9QQVJUSVRJT05fRU5U UlkgKkVudHJ5LA0KPiArICBJTiBNT0RfUEFSQU1TICpQYXJhbXMsDQo+ICsgIElOIE1PRF9GTEFH UyBGbGFncw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiArDQo+ICsg IEFTU0VSVCAoRW50cnkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4gKw0KPiArICBzd2l0Y2ggKEZsYWdzKSB7DQo+ICsgICAgY2FzZSBNT0RfREVMRVRFOg0K PiArICAgICAgWmVyb01lbSAoRW50cnksIHNpemVvZihFRklfUEFSVElUSU9OX0VOVFJZKSk7DQo+ ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIE1PRF9BVFRSOg0KPiArICAgICAgRW50cnktPkF0 dHJpYnV0ZXMgPSBQYXJhbXMtPkF0dHJpYnV0ZXM7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBj YXNlIE1PRF9UWVBFOg0KPiArICAgICAgRW50cnktPlBhcnRpdGlvblR5cGVHVUlEID0gUGFyYW1z LT5QYXJ0VHlwZUd1aWQ7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIE1PRF9SRU5BTUU6 DQo+ICsgICAgICBTdHJDcHkgKEVudHJ5LT5QYXJ0aXRpb25OYW1lLCBQYXJhbXMtPk5ld05hbWUp Ow0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAgIFByaW50RXJyIChM IlVua25vd24gbW9kaWZpY2F0aW9uIGZsYWcocykiLCBTdGF0dXMpOw0KPiArICAgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBXcml0ZUdQVCAoKTsNCj4gK30NCj4g Kw0KPiArRUZJX0tOT1dOX1BBUlRJVElPTl9UWVBFICpQYXJ0aXRpb25HZXRLbm93blR5cGUgKA0K PiArICBJTiBVSU5UTiBJbmRleCwNCj4gKyAgSU4gT1VUIE9QVElPTkFMIFVJTlROICpOdW1FbnRy aWVzDQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKE51bUVudHJpZXMpIHsNCj4gKyAgICAqTnVtRW50 cmllcyA9IEFSUkFZX1NJWkUoUGFydGl0aW9uVHlwZXMpOw0KPiArICB9DQo+ICsgIGlmIChJbmRl eCA+IEFSUkFZX1NJWkUoUGFydGl0aW9uVHlwZXMpKSB7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ ICsgIH0NCj4gKw0KPiArIHJldHVybiAmUGFydGl0aW9uVHlwZXNbSW5kZXhdOw0KPiArfQ0KPiAr DQo+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIv R3B0V29ya2VyLmgNCj4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIv R3B0V29ya2VyLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw Li45ZWZlYzVjZWZlOTQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9TaGVsbFBrZy9MaWJyYXJ5 L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmgNCj4gQEAgLTAsMCArMSwxODYgQEAN Cj4gKy8qDQo+ICsgKiAgQlNEIExJQ0VOU0UNCj4gKyAqDQo+ICsgKiAgQ29weXJpZ2h0KGMpIDIw MTYgQnJvYWRjb20uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArICoNCj4gKyAqICBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQNCj4gKyAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMNCj4gKyAqICBhcmUgbWV0Og0KPiArICoNCj4gKyAqICAgICog UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQNCj4gKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiArICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiArICogICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4NCj4gKyAqICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQ0KPiArICogICAgICBkaXN0cmlidXRpb24uDQo+ICsgKiAgICAq IE5laXRoZXIgdGhlIG5hbWUgb2YgQnJvYWRjb20gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCj4gKyAq ICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkDQo+ICsgKiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCj4gKyAqDQo+ICsgKiAgVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EDQo+IENPTlRSSUJVVE9S Uw0KPiArICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQNCj4gTk9UDQo+ICsgKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EDQo+IEZJVE5FU1MgRk9SDQo+ICsgKiAgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0K PiBDT1BZUklHSFQNCj4gKyAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwNCj4gSU5DSURFTlRBTCwNCj4gKyAqICBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQNCj4gTk9UDQo+ ICsgKiAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsgTE9TUw0KPiBPRiBVU0UsDQo+ICsgKiAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRA0KPiBBTkQgT04gQU5ZDQo+ICsgKiAgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1INCj4gVE9SVA0KPiArICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YNCj4gVEhFIFVTRQ0KPiArICogT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIDQo+IERBTUFHRS4N Cj4gKyAqLw0KPiArDQo+ICsvKiBHUFQgcGFydGl0aW9uZXIgaGVhZGVyIGZpbGUgKi8NCj4gKw0K PiArI2lmbmRlZiBfR1BUV09SS0VSX0hfDQo+ICsjZGVmaW5lIF9HUFRXT1JLRVJfSF8NCj4gKw0K PiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKyNpbmNsdWRlIDxTaGVsbEJhc2UuaD4NCj4gKw0KPiAr I2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1l bW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1No ZWxsQ29tbWFuZExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvU2hlbGxMaWIuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlTaGVs bExpYi9VZWZpU2hlbGxMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2Vydmlj ZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1Rh YmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvU2hlbGxDRW50cnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0hpaUxpYi5o Pg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRmlsZUhhbmRsZUxpYi5oPg0KPiArI2luY2x1ZGUgPFBy b3RvY29sL0RldmljZVBhdGguaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIu aD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9CbG9ja0lvLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9j b2wvRGlza0lvLmg+DQo+ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9NYnIuaD4NCj4gKw0K PiArdHlwZWRlZiBlbnVtIHsNCj4gKyAgTU9EX05BTUUgICA9IEJJVDAsDQo+ICsgIE1PRF9BVFRS ICAgPSBCSVQxLA0KPiArICBNT0RfVFlQRSAgID0gQklUMiwNCj4gKyAgTU9EX0RFTEVURSA9IEJJ VDMsDQo+ICsgIE1PRF9SRU5BTUUgPSBCSVQ0DQo+ICt9IE1PRF9GTEFHUzsNCj4gKw0KPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UTiBBdHRyaWJ1dGVzOw0KPiArICBFRklfR1VJRCBQYXJ0 VHlwZUd1aWQ7DQo+ICsgIENPTlNUIENIQVIxNiAqUGFydE5hbWU7DQo+ICsgIENPTlNUIENIQVIx NiAqTmV3TmFtZTsNCj4gK30gTU9EX1BBUkFNUzsNCj4gKw0KPiArdHlwZWRlZiBlbnVtIHsNCj4g KyAgU1JDX0JZX05BTUUgPSBCSVQwLA0KPiArICBTUkNfQllfTEJBICA9IEJJVDEsDQo+ICsgIFNS Q19CWV9OVU0gID0gQklUMiwNCj4gKyAgU1JDX0FOWSAgICAgPSBCSVQzDQo+ICt9IFNFQVJDSF9U WVBFOw0KPiArDQo+ICsjZGVmaW5lIE1BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEggMzYNCj4gKyNk ZWZpbmUgRU5UUllfREVGQVVMVCAgICAgICAgICAgICAxMjgNCj4gKyNkZWZpbmUgR1BUX1JFVklT SU9OXzFfMCAgICAgICAgICAweDAwMDEwMDAwDQo+ICsNCj4gKyNkZWZpbmUgQVJSQVlfU0laRSh4 KSBcDQo+ICsgIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkNCj4gKw0KPiArLy8NCj4gKy8v IEV4dHJhY3QgSU5UMzIgZnJvbSBjaGFyIGFycmF5DQo+ICsvLw0KPiArI2RlZmluZSBVTlBBQ0tf SU5UMzIoYSkgKElOVDMyKSggKCgoVUlOVDggKikgYSlbMF0gPDwgIDApIHwgICAgXA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoVUlOVDggKikgYSlbMV0gPDwgIDgpIHwg ICAgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoVUlOVDggKikgYSlb Ml0gPDwgMTYpIHwgICAgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgo VUlOVDggKikgYSlbM10gPDwgMjQpICkNCj4gKw0KPiArLy8NCj4gKy8vIEV4dHJhY3QgVUlOVDMy IGZyb20gY2hhciBhcnJheQ0KPiArLy8NCj4gKyNkZWZpbmUgVU5QQUNLX1VJTlQzMihhKSAoVUlO VDMyKSggKCgoVUlOVDggKikgYSlbMF0gPDwgIDApIHwgICAgXA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKChVSU5UOCAqKSBhKVsxXSA8PCAgOCkgfCAgICBcDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFVJTlQ4ICopIGEpWzJdIDw8IDE2 KSB8ICAgIFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoVUlOVDgg KikgYSlbM10gPDwgMjQpICkNCj4gKw0KPiArDQo+ICsvLw0KPiArLy8gR1BUIFBhcnRpdGlvbiBF bnRyeSBTdGF0dXMNCj4gKy8vDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIEJPT0xFQU4gT3V0 T2ZSYW5nZTsNCj4gKyAgQk9PTEVBTiBPdmVybGFwOw0KPiArICBCT09MRUFOIE9zU3BlY2lmaWM7 DQo+ICt9IEVGSV9QQVJUSVRJT05fRU5UUllfU1RBVFVTOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVj dCB7DQo+ICsgIENPTlNUIEVGSV9HVUlEIFR5cGVHdWlkOw0KPiArICBDT05TVCBDSEFSMTYgKlR5 cGVOYW1lOw0KPiArDQo+ICt9IEVGSV9LTk9XTl9QQVJUSVRJT05fVFlQRTsNCj4gKw0KPiArRUZJ X0tOT1dOX1BBUlRJVElPTl9UWVBFICpQYXJ0aXRpb25HZXRLbm93blR5cGUgKA0KPiArICBJTiBV SU5UTiBJbmRleCwNCj4gKyAgSU4gT1VUIE9QVElPTkFMIFVJTlROICpOdW1FbnRyaWVzDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1BhcnRpdGlvbkdldEdwdFRhYmxlcyAoDQo+ICsg IElOICBFRklfRElTS19JT19QUk9UT0NPTCAgICAgICAgICpEaXNrSW9Qcm90LA0KPiArICBJTiAg RUZJX0JMT0NLX0lPX1BST1RPQ09MICAgICAgICAqQmxvY2tJb1Byb3QNCj4gKyAgKTsNCj4gKw0K PiArVUlOVE4NCj4gK1BhcnRpdGlvbkxpc3RHcHRFbnRyaWVzICgNCj4gKyAgVk9JRA0KPiArICAp Ow0KPiArDQo+ICtWT0lEDQo+ICtQYXJ0aXRpb25QcmludEdwdFBhcnRJbmZvICgNCj4gKyAgSU4g RUZJX1BBUlRJVElPTl9FTlRSWSAqRW50cnkNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0K PiArR2V0UGFydGl0aW9uVHlwZVN0ciAoDQo+ICsgIEVGSV9HVUlEIEd1aWQsDQo+ICsgIENIQVIx NiAqUGFydFR5cGVTdHIsDQo+ICsgIEJPT0xFQU4gTm9HdWlkU3RyDQo+ICsgICk7DQo+ICsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArUGFydGl0aW9uR3B0Q2xlYXJBbGwgKA0KPiArICBWT0lEDQo+ ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1BhcnRpdGlvbkdwdENyZWF0ZVBhcnRpdGlv biAoDQo+ICsgIENPTlNUIENIQVIxNiAqUGFydE5hbWUsDQo+ICsgIEVGSV9MQkEgU3RhcnRMYmEs DQo+ICsgIEVGSV9MQkEgUGFydGl0aW9uU2l6ZSwNCj4gKyAgVUlOVDY0IEF0dHJpYnV0ZXMsDQo+ ICsgIEVGSV9HVUlEIFBhcnRUeXBlR3VpZCk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1BhcnRp dGlvbkdwdE1vZGlmeVBhcnRpdGlvbiAoDQo+ICsgIEVGSV9QQVJUSVRJT05fRU5UUlkgKkVudHJ5 LA0KPiArICBNT0RfUEFSQU1TICpQYXJhbXMsDQo+ICsgIE1PRF9GTEFHUyBGbGFncw0KPiArICAp Ow0KPiArDQo+ICtWT0lEDQo+ICtHcHRDbGVhbnVwR2xvYmFscyAoDQo+ICsgIFZPSUQNCj4gKyAg KTsNCj4gKw0KPiArRUZJX1BBUlRJVElPTl9FTlRSWSAqDQo+ICtQYXJ0aXRpb25GaW5kUGFydGl0 aW9uQnlDcml0ZXJpYSAoDQo+ICsgIENPTlNUIENIQVIxNiAgICpOYW1lLA0KPiArICBFRklfTEJB ICAgICAgICBTdGFydExiYSwNCj4gKyAgRUZJX0xCQSAgICAgICAgRW5kaW5nTGJhLA0KPiArICBT RUFSQ0hfVFlQRSAgICBTZWFyY2hUeXBlKTsNCj4gKw0KPiArVk9JRA0KPiArUHJpbnRFcnIgKElO IENPTlNUIENIQVIxNiAqTWVzc2FnZSwgSU4gRUZJX1NUQVRVUyBTdGF0dXMpOw0KPiArDQo+ICsj ZW5kaWYgLy9fR1BUV09SS0VSX0hfDQo+IGRpZmYgLS1naXQNCj4gYS9TaGVsbFBrZy9MaWJyYXJ5 L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5jDQo+IGIvU2hl bGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRM aWIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE5ZDc0 YTc4MDkxMQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmMNCj4gQEAgLTAsMCAr MSwxMTM1IEBADQo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioqKioqKioNCj4gK0NvcHlyaWdodCAo QykgMjAxNiBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiArDQo+ICtNYXJ2ZWxsIEJTRCBM aWNlbnNlIE9wdGlvbg0KPiArDQo+ICtJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFy dmVsbCwgeW91IG1heSBvcHQgdG8gdXNlLCByZWRpc3RyaWJ1dGUNCj4gYW5kL29yDQo+ICttb2Rp ZnkgdGhpcyBGaWxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIHRlcm1zLg0KPiArUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0DQo+IG1vZGlmaWNhdGlvbiwNCj4gK2FyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCj4gKw0KPiArKiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us DQo+ICsgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuDQo+ICsNCj4gKyogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gKyAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KPiArICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u Lg0KPiArDQo+ICsqIE5laXRoZXIgdGhlIG5hbWUgb2YgTWFydmVsbCBub3IgdGhlIG5hbWVzIG9m IGl0cyBjb250cmlidXRvcnMgbWF5IGJlDQo+ICsgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCj4gKyAgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KPiArDQo+ICtUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQNCj4gQ09OVFJJQlVUT1JTICJBUyBJ UyIgQU5EDQo+ICtBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLA0KPiBUSEUgSU1QTElFRA0KPiArV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KPiBQVVJQT1NFIEFSRQ0K PiArRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUg0K PiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KPiArQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCj4gQ09OU0VRVUVOVElBTCBEQU1BR0VT DQo+ICsoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMNCj4gT1IgU0VSVklDRVM7DQo+ICtMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQo+IENBVVNFRCBBTkQgT04N Cj4gK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg TElBQklMSVRZLCBPUg0KPiBUT1JUDQo+ICsoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GDQo+IFRIRSBVU0UgT0YgVEhJUw0KPiArU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu DQo+ICsNCj4gKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KPiAqKioqKioqKioqKioqKioqKioqKioqLw0KPiArDQo+ICsvKiBQb3J0aW9u cyBDb3B5cmlnaHQgKEMpIDIwMTYgQnJvYWRjb20gKi8NCj4gKw0KPiArI2luY2x1ZGUgIkZhdEZv cm1hdC5oIg0KPiArI2luY2x1ZGUNCj4gPExpYnJhcnkvVWVmaVNoZWxsRGVidWcxQ29tbWFuZHNM aWIvVWVmaVNoZWxsRGVidWcxQ29tbWFuZHNMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Rp bWVyTGliLmg+DQo+ICsNCj4gK0NPTlNUIENIQVIxNiBnU2hlbGxHcHRGaWxlTmFtZVtdID0gTCJT aGVsbENvbW1hbmQiOw0KPiArU1RBVElDIENPTlNUIENIQVIxNiBnQXBwTmFtZVtdID0gTCJncHQi Ow0KPiArRUZJX0hBTkRMRSBnU2hlbGxHcHRIaWlIYW5kbGUgPSBOVUxMOw0KPiArDQo+ICtTVEFU SUMgQ09OU1QgU0hFTExfUEFSQU1fSVRFTSBQYXJhbUxpc3RbXSA9IHsNCj4gKyAgLy8gUGFydGl0 aW9uLXJlbGF0ZWQgb3BlcmF0aW9ucw0KPiArICB7IEwiY2xlYXIiLCBUeXBlRmxhZyB9LCAgICAg ICAgICAgICAgICAgIC8vIENsZWFycyBhbGwgcGFydGl0aW9ucw0KPiArICB7IEwiY3JlYXRlIiwg VHlwZUZsYWcgfSwgICAgICAgICAgICAgICAgIC8vIENyZWF0ZXMgYSBwYXJ0aXRpb24NCj4gKyAg eyBMImRlbGV0ZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAvLyBEZWxldGVzIGEgcGFy dGl0aW9uDQo+ICsgIHsgTCJsaXN0IiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAgICAgLy8g TGlzdHMgYWxsIHBhcnRpdGlvbnMNCj4gKyAgeyBMInJlbmFtZSIsIFR5cGVGbGFnIH0sICAgICAg ICAgICAgICAgICAvLyBSZW5hbWVzIGEgcGFydGl0aW9uDQo+ICsgIHsgTCJzZXRhdHRyIiwgVHlw ZUZsYWcgfSwgICAgICAgICAgICAgICAgLy8gU2V0IGF0dHJpYnV0ZXMgZm9yIGEgcGFydGl0aW9u IGluIHBhcnRpdGlvbg0KPiB0YWJsZQ0KPiArICB7IEwic2V0dHlwZSIsIFR5cGVGbGFnIH0sDQo+ ICsgIHsgTCJzeW5jIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAgICAgLy8gU3luY2hyb25p emVzIGVpdGhlciBtYXN0ZXIgb3IgYWx0ZXJuYXRpdmUNCj4gcGFydGl0aW9uIHRhYmxlDQo+ICsg IHsgTCJ0eXBlc2luZm8iLCBUeXBlRmxhZyB9LCAgICAgICAgICAgICAgICAgLy8gVmVyaWZpZXMg Y29ycmVjdG5lc3Mgb2YgbWFzdGVyIGFuZA0KPiBhbHRlcm5hdGl2ZSBwYXJ0aXRpb24gdGFibGVz DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxv Y2tJby1yZWxhdGVkIG9wZXJhdGlvbnMNCj4gKyAgeyBMInJlYWQiLCBUeXBlRmxhZyB9LCAgICAg ICAgICAgICAgICAgICAvLyBSZWFkcyBuIGJ5dGVzIGludG8gbWVtb3J5IGFkZHJlc3MgZnJvbQ0K PiBhIHBhcnRpdGlvbiBzdGFydGluZyBmcm9tIGEgY2VydGFpbiBsYmENCj4gKyAgeyBMInJlYWRm aWxlIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgaW5z dGVhZCBvZiBzdG9yZSBpdCBpbg0KPiBtZW1vcnkgc2F2ZXMgaW50byBhIGZpbGUgc3lzdGVtDQo+ ICsgIHsgTCJ3cml0ZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAgLy8gV3JpdGVzIG4g Ynl0ZXMgZnJvbSBtZW1vcnkgaW50byBhDQo+IHBhcnRpdGlvbiBzdGFydGluZyBmcm9tIGEgY2Vy dGFpbiBsYmENCj4gKyAgeyBMIndyaXRlZmlsZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAv LyBTYW1lIGFzIGFib3ZlLCBidXQgaW5zdGVhZCBvZiBnZXR0aW5nDQo+IGRhdGEgZnJvbSBtZW1v cnkgcmVhZHMgYSBmaWxlDQo+ICsgIHsgTCJpbmZvIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAg ICAgICAgLy8gR2V0IGluZm9ybWF0aW9uIG9uIGEgY2VydGFpbiBwYXJ0aXRpb24NCj4gKHN0YXJ0 TGJhLCBsYXN0TGJhLCBhdHRyaWJ1dGVzKQ0KPiArICB7IEwiZmF0Zm9ybWF0IiwgVHlwZUZsYWcg fSwgICAgICAgICAgICAgIC8vIEZBVCBmb3JtYXQgb2YgYSBwYXJ0aXRpb24NCj4gKyAgeyBMIi10 eXBlIiwgVHlwZVZhbHVlIH0sDQo+ICsgIHsgTCIteWVzIiwgVHlwZUZsYWcgfSwNCj4gKyAgeyBM Ii12ZXJib3NlIiwgVHlwZUZsYWcgfSwNCj4gKyAgeyBOVUxMLCBUeXBlTWF4IH0NCj4gK307DQo+ ICsNCj4gK3R5cGVkZWYgZW51bSB7DQo+ICsgIC8vIE5vdCByZXF1aXJlcyBwcmVzZW5jZQ0KPiAr ICBDTEVBUiAgICAgICA9IEJJVDAsDQo+ICsgIENSRUFURSAgICAgID0gQklUMSwNCj4gKyAgTElT VCAgICAgICAgPSBCSVQyLA0KPiArICBTWU5DICAgICAgICA9IEJJVDMsDQo+ICsgIFRZUEVTX0lO Rk8gID0gQklUNCwNCj4gKw0KPiArICAvLyBSZXF1aXJlcyBwcmVzZW5jZQ0KPiArICBERUxFVEUg ICAgICA9IEJJVDUsDQo+ICsgIElORk8gICAgICAgID0gQklUNiwNCj4gKyAgUkVBRCAgICAgICAg PSBCSVQ3LA0KPiArICBSRUFEX0ZJTEUgICA9IEJJVDgsDQo+ICsgIFJFTkFNRSAgICAgID0gQklU OSwNCj4gKyAgU0VUQVRUUiAgICAgPSBCSVQxMCwNCj4gKyAgU0VUVFlQRSAgICAgPSBCSVQxMSwN Cj4gKyAgV1JJVEUgICAgICAgPSBCSVQxMiwNCj4gKyAgV1JJVEVfRklMRSAgPSBCSVQxMywNCj4g KyAgRkFUX0ZPUk1BVCAgPSBCSVQxNCwNCj4gK30gRmxhZ3M7DQo+ICsNCj4gKy8qKg0KPiArICBS ZXR1cm4gdGhlIGZpbGUgbmFtZSBvZiB0aGUgaGVscCB0ZXh0IGZpbGUgaWYgbm90IHVzaW5nIEhJ SS4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSBzdHJpbmcgcG9pbnRlciB0byB0aGUgZmlsZSBuYW1l Lg0KPiArKiovDQo+ICtDT05TVCBDSEFSMTYgKg0KPiArRUZJQVBJDQo+ICtTaGVsbENvbW1hbmRH ZXRNYW5GaWxlTmFtZUdwdCAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArDQo+ICsgIHJl dHVybiBnU2hlbGxHcHRGaWxlTmFtZTsNCj4gK30NCj4gKw0KPiArU1RBVElDDQo+ICtFRklfU1RB VFVTDQo+ICtPcGVuQW5kUHJlcGFyZUZpbGUgKA0KPiArICBJTiBDSEFSMTYgKkZpbGVQYXRoLA0K PiArICBPVVQgU0hFTExfRklMRV9IQU5ETEUgKkZpbGVIYW5kbGUsDQo+ICsgIElOIEJPT0xFQU4g V3JpdGVOZWVkZWQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gKyAg VUlOVDY0IE9wZW5Nb2RlOw0KPiArDQo+ICsgIE9wZW5Nb2RlID0gRUZJX0ZJTEVfTU9ERV9SRUFE Ow0KPiArDQo+ICsgIGlmIChXcml0ZU5lZWRlZCkgew0KPiArICAgIE9wZW5Nb2RlIHw9IEVGSV9G SUxFX01PREVfV1JJVEUgfCBFRklfRklMRV9NT0RFX0NSRUFURTsNCj4gKyAgfQ0KPiArDQo+ICsg IFN0YXR1cyA9IFNoZWxsT3BlbkZpbGVCeU5hbWUgKEZpbGVQYXRoLCBGaWxlSGFuZGxlLCBPcGVu TW9kZSwgMCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBTaGVsbFBy aW50SGlpRXggKC0xLCAtMSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19U T0tFTiAoU1RSX0dQVF9FUlJPUiksDQo+ICsgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRI aWlIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICBnQXBwTmFtZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgIFN0YXR1cywNCj4gKyAgICAgICAgICAgICAgICAgICAgIEwiQ2Fubm90IG9w ZW4gZmlsZSINCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRmlsZUhhbmRsZVNldFBvc2l0aW9uICgqRmls ZUhhbmRsZSwgMCk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiArICAgICAgICAgICAgICAgICAgICAgTlVMTCwg U1RSSU5HX1RPS0VOIChTVFJfR1BUX0VSUk9SKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIGdT aGVsbEdwdEhpaUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIGdBcHBOYW1lLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgU3RhdHVzLA0KPiArICAgICAgICAgICAgICAgICAgICAgIkNh bm5vdCBzZXQgZmlsZSBwb3NpdGlvbiB0byB0aGUgZmlyc3QgYnl0ZSINCj4gKyAgICAgICAgICAg ICAgICAgICAgKTsNCj4gKw0KPiArICAgIFNoZWxsQ2xvc2VGaWxlIChGaWxlSGFuZGxlKTsNCj4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiArfQ0KPiArDQo+ICtWT0lEDQo+ICtQcmludEVyciAoDQo+ICsgIElOIENPTlNUIENIQVIx NiAqTWVzc2FnZSwNCj4gKyAgSU4gRUZJX1NUQVRVUyBTdGF0dXMNCj4gKyAgKQ0KPiArew0KPiAr ICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwNCj4gKyAgICAgICAgICAgICAgICAgICBOVUxMLCBT VFJJTkdfVE9LRU4gKFNUUl9HUFRfRVJST1IpLA0KPiArICAgICAgICAgICAgICAgICAgIGdTaGVs bEdwdEhpaUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICBnQXBwTmFtZSwNCj4gKyAgICAg ICAgICAgICAgICAgICBTdGF0dXMsDQo+ICsgICAgICAgICAgICAgICAgICAgTWVzc2FnZQ0KPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArU1RBVElDDQo+ICtCT09MRUFODQo+ ICtJc1BhcnRpdGlvbmFibGVEZXZpY2VQYXRoICgNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIICpE ZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gUGF0aFNpemU7DQo+ICsgIEVGSV9E RVZJQ0VfUEFUSCAqUGF0aEluc3RhbmNlOw0KPiArICBCT09MRUFOIFBhcnRpdGlvbmFibGU7DQo+ ICsNCj4gKyAgUGFydGl0aW9uYWJsZSA9IFRSVUU7DQo+ICsgIHdoaWxlIChEZXZpY2VQYXRoICE9 IE5VTEwpIHsNCj4gKyAgICBQYXRoSW5zdGFuY2UgPSBHZXROZXh0RGV2aWNlUGF0aEluc3RhbmNl ICgmRGV2aWNlUGF0aCwgJlBhdGhTaXplKTsNCj4gKw0KPiArICAgIHdoaWxlICghSXNEZXZpY2VQ YXRoRW5kIChQYXRoSW5zdGFuY2UpKSB7DQo+ICsgICAgICBpZiAoKERldmljZVBhdGhUeXBlIChQ YXRoSW5zdGFuY2UpID09IE1FRElBX0RFVklDRV9QQVRIKSkgew0KPiArICAgICAgICBQYXJ0aXRp b25hYmxlID0gRkFMU0U7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFBhdGhJbnN0YW5jZSA9 IE5leHREZXZpY2VQYXRoTm9kZSAoUGF0aEluc3RhbmNlKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4g KyAgcmV0dXJuIFBhcnRpdGlvbmFibGU7DQo+ICt9DQo+ICsNCj4gK1NUQVRJQw0KPiArRUZJX1NU QVRVUw0KPiArR3B0UHJvbXB0WWVzTm8gKA0KPiArICBJTiBDT05TVCBFRklfU1RSSU5HX0lEIEhp aUZvcm1hdFN0cmluZ0lkDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ ICsgIFZPSUQgICAgICAgKlJlc3BvbnNlOw0KPiArDQo+ICsgIFN0YXR1cyA9IFNoZWxsUHJvbXB0 Rm9yUmVzcG9uc2VIaWkgKFNoZWxsUHJvbXB0UmVzcG9uc2VUeXBlWWVzTm8sDQo+IEhpaUZvcm1h dFN0cmluZ0lkLCBnU2hlbGxHcHRIaWlIYW5kbGUsICZSZXNwb25zZSk7DQo+ICsgIGlmICgoRUZJ X0VSUk9SIChTdGF0dXMpKSB8fCAoKihTSEVMTF9QUk9NUFRfUkVTUE9OU0UgKilSZXNwb25zZSkg IT0NCj4gU2hlbGxQcm9tcHRSZXNwb25zZVllcykgew0KPiArICAgIHJldHVybiBFRklfQUJPUlRF RDsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiAr U1RBVElDDQo+ICtWT0lEIEZvcm1hdFNpemUoDQo+ICsgIFVJTlQ2NCBTaXplLCBDSEFSMTYgKkJ1 ZmZlcikNCj4gK3sNCj4gKyNkZWZpbmUgTUFYX1NJWkVfQlVGX1NJWkUgMzINCj4gKyAgVUlOVDY0 IEJhc2UsIEZyYWM7DQo+ICsgIENIQVIxNiBNZXRyaWM7DQo+ICsNCj4gKyAgTWV0cmljID0gTCdC JzsNCj4gKyAgRnJhYyA9IDA7DQo+ICsgIGlmIChTaXplIDwgU0laRV8xS0IpIHsNCj4gKyAgICBC YXNlID0gU2l6ZTsNCj4gKyAgfSBlbHNlIGlmIChTaXplIDwgU0laRV8xTUIpIHsNCj4gKyAgICBC YXNlID0gU2l6ZSAvIFNJWkVfMUtCOw0KPiArICAgIEZyYWMgPSAoKFNpemUgJSBTSVpFXzFLQikg KiAxMCkgPj4gMTA7DQo+ICsgICAgTWV0cmljID0gTCdLJzsNCj4gKyAgfSBlbHNlIGlmIChTaXpl IDwgU0laRV8xR0IpIHsNCj4gKyAgICBCYXNlID0gU2l6ZSAvIFNJWkVfMU1COw0KPiArICAgIEZy YWMgPSAoKFNpemUgJSBTSVpFXzFNQikgKiAxMCkgPj4gMjA7DQo+ICsgICAgTWV0cmljID0gTCdN JzsNCj4gKyAgfSBlbHNlIGlmIChTaXplIDwgU0laRV8xVEIpIHsNCj4gKyAgICBCYXNlID0gU2l6 ZSAvIFNJWkVfMUdCOw0KPiArICAgIEZyYWMgPSAoKFNpemUgJSBTSVpFXzFHQikgKiAxMCkgPj4g MzA7DQo+ICsgICAgTWV0cmljID0gTCdHJzsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBCYXNlID0g U2l6ZSAvIFNJWkVfMVRCOw0KPiArICAgIEZyYWMgPSAoKFNpemUgJSBTSVpFXzFUQikgKiAxMCkg Pj4gNDA7DQo+ICsgICAgTWV0cmljID0gTCdUJzsNCj4gKyAgfQ0KPiArICBpZiAoRnJhYykgew0K PiArICAgIFVuaWNvZGVTUHJpbnQgKEJ1ZmZlciwgTUFYX1NJWkVfQlVGX1NJWkUsIEwiJWQuJWQl YyIsIEJhc2UsIEZyYWMsDQo+IE1ldHJpYyk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgVW5pY29k ZVNQcmludCAoQnVmZmVyLCBNQVhfU0laRV9CVUZfU0laRSwgTCIlZCVjIiwgQmFzZSwgTWV0cmlj KTsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0ZpbmRB bmRQcmludFBhcnRpdGlvbmFibGVEZXZpY2VzIChWT0lEKQ0KPiArew0KPiArICBVSU5UTiBJbmRl eDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICpIYW5kbGVQb2ludGVyOw0KPiArICBVSU5UTiAgICAg ICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIFVJTlROICAgICAgICAgICBEZXZDb3VudDsNCj4gKyAg RUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCj4gKyAgQk9PTEVBTiAgICAgICAgIEZpcnN0VGltZTsN Cj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoQnlQcm90b2NvbCwg JmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPiBOVUxMLCAmSGFuZGxlQ291bnQsICZIYW5kbGVQ b2ludGVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBEZXZDb3VudCA9IDA7DQo+ICsgIEZpcnN0VGltZSA9 IFRSVUU7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IElu ZGV4KyspIHsNCj4gKyAgICBFRklfREVWSUNFX1BBVEggICAgICAgKkRldmljZVBhdGg7DQo+ICsg ICAgQ09OU1QgQ0hBUjE2ICAgICAgICAgICpNYXBQYXRoOw0KPiArICAgIENIQVIxNiAgICAgICAg ICAgICAgICAqTWF0Y2g7DQo+ICsgICAgRUZJX0JMT0NLX0lPICAgICAgICAgICpCbGtJbzsNCj4g KyAgICBFRklfRElTS19JTyAgICAgICAgICAgKkRpc2tJbzsNCj4gKyAgICBDSEFSMTYgICAgICAg ICAgICAgICAgKkJ1ZmZlckZvclNpemU7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRs ZVByb3RvY29sIChIYW5kbGVQb2ludGVyW0luZGV4XSwNCj4gJmdFZmlCbG9ja0lvUHJvdG9jb2xH dWlkLCAoVk9JRCAqKikmQmxrSW8pOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIERldmljZVBhdGggPSBE ZXZpY2VQYXRoRnJvbUhhbmRsZSAoSGFuZGxlUG9pbnRlcltJbmRleF0pOw0KPiArICAgIGlmICgh SXNQYXJ0aXRpb25hYmxlRGV2aWNlUGF0aCAoRGV2aWNlUGF0aCkpIHsNCj4gKyAgICAgIGNvbnRp bnVlOw0KPiArICAgIH0NCj4gKyAgICBNYXBQYXRoID0gZ0VmaVNoZWxsUHJvdG9jb2wtPkdldE1h cEZyb21EZXZpY2VQYXRoICgmRGV2aWNlUGF0aCk7DQo+ICsgICAgaWYgKE1hcFBhdGggPT0gTlVM TCkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0g Z0JTLT5IYW5kbGVQcm90b2NvbCAoSGFuZGxlUG9pbnRlcltJbmRleF0sDQo+ICZnRWZpRGlza0lv UHJvdG9jb2xHdWlkLCAoVk9JRCAqKikmRGlza0lvKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBNYXRj aCA9IFN0clN0ciAoTWFwUGF0aCwgTCI7QkxLIik7DQo+ICsgICAgaWYgKE1hdGNoKSB7DQo+ICsg ICAgICBNYXBQYXRoID0gTWF0Y2g7DQo+ICsgICAgICBNYXBQYXRoKys7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgaWYgKEZpcnN0VGltZSkgew0KPiArICAgICAgQnVmZmVyRm9yU2l6ZSA9IEFsbG9j YXRlWmVyb1Bvb2wgKE1BWF9TSVpFX0JVRl9TSVpFICogc2l6ZW9mDQo+IChDSEFSMTYpKTsNCj4g KyAgICAgIEFTU0VSVCAoQnVmZmVyRm9yU2l6ZSk7DQo+ICsgICAgICBQcmludCAoTCIgRGV2aWNl XHQgICAgIFNpemUgIENvbW1lbnRzXG4iKTsNCj4gKyAgICAgIFByaW50IChMIiAtLS0tLS0gICAt LS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCj4gXG4iKTsNCj4gKyAgICAgIEZpcnN0VGltZSA9IEZBTFNFOw0KPiArICAg IH0NCj4gKyAgICBHcHRDbGVhbnVwR2xvYmFscyAoKTsNCj4gKyAgICBGb3JtYXRTaXplIChNdWx0 VTY0eDMyIChCbGtJby0+TWVkaWEtPkxhc3RCbG9jayArIDEsIEJsa0lvLT5NZWRpYS0NCj4gPkJs b2NrU2l6ZSksIEJ1ZmZlckZvclNpemUpOw0KPiArICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0x LA0KPiArICAgICAgICAgICAgICAgICAgICAgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR1BUX0xJ U1RfREVWUyksDQo+ICsgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICBNYXBQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAg QnVmZmVyRm9yU2l6ZSk7DQo+ICsgICAgaWYgKEJsa0lvLT5NZWRpYS0+UmVhZE9ubHkpIHsNCj4g KyAgICAgIFByaW50IChMIlJlYWQtT25seSEgIik7DQo+ICsgICAgfQ0KPiArICAgIGlmICghQmxr SW8tPk1lZGlhLT5NZWRpYVByZXNlbnQpIHsNCj4gKyAgICAgIFByaW50IChMIk5vIE1lZGlhISAi KTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFBhcnRpdGlvbkdldEdwdFRhYmxl cyAoRGlza0lvLCBCbGtJbykpKSB7DQo+ICsgICAgICBQcmludCAoTCJWYWxpZCBHUFQuICIpOw0K PiArICAgIH0NCj4gKyAgICBpZiAoQmxrSW8tPk1lZGlhLT5SZW1vdmFibGVNZWRpYSkgew0KPiAr ICAgICAgUHJpbnQgKEwiUmVtb3ZhYmxlIGRldmljZS4iKTsNCj4gKyAgICB9DQo+ICsgICAgUHJp bnQgKEwiXG4iKTsNCj4gKyAgICBEZXZDb3VudCsrOw0KPiArICB9DQo+ICsgIFByaW50IChMIlxy XG4iKTsNCj4gKyAgaWYgKERldkNvdW50KSB7DQo+ICsgICAgUHJpbnQgKEwiJWQgcG90ZW50aWFs bHkgcGFydGl0aW9uYWJsZSBkZXZpY2UocykgZm91bmRcbiIsIERldkNvdW50KTsNCj4gKyAgfSBl bHNlIHsNCj4gKyAgICBQcmludCAoTCJObyBwb3RlbnRpYWxseSBwYXJ0aXRpb25hYmxlIGRldmlj ZShzKSBmb3VuZFxuIik7DQo+ICsgIH0NCj4gKw0KPiArICBHcHRDbGVhbnVwR2xvYmFscyAoKTsN Cj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICtTSEVMTF9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArU2hlbGxDb21tYW5kUnVuR3B0ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAg ICAgSW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAgKkNoZWNrUGFja2FnZTsNCj4gKyAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgICBBZGRyZXNzID0gMCwgT2Zmc2V0ID0gMDsNCj4gKyAgVUlOVDY0 ICAgICAgICAgICAgICAgICAgICBQYXJ0QXR0cmlidXRlcyA9IDA7DQo+ICsgIEVGSV9HVUlEICAg ICAgICAgICAgICAgICAgUGFydFR5cGVHdWlkID0geyAwIH07DQo+ICsgIFNIRUxMX0ZJTEVfSEFO RExFICAgICAgICAgRmlsZUhhbmRsZSA9IE5VTEw7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgQnl0ZUNvdW50LCBGaWxlU2l6ZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBJOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIgPSBOVUxMLCAqRmls ZUJ1ZmZlciA9IE5VTEw7DQo+ICsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAqIFBy b2JsZW1QYXJhbSwqRmlsZVBhdGg7DQo+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAgKkFk ZHJlc3NTdHIgPSBOVUxMLCAqT2Zmc2V0U3RyID0gTlVMTDsNCj4gKyAgQ09OU1QgQ0hBUjE2ICAg ICAgICAgICAgICAqUGFydE5hbWUgPSBOVUxMLCAqTmV3UGFydE5hbWUgPSBOVUxMLA0KPiAqQXR0 clN0ciA9IE5VTEwsDQo+ICsgICAgKkd1aWRTdHIgPSBOVUxMLCAqVm9sdW1lTmFtZSA9IE5VTEw7 DQo+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAgKkxlbmd0aFN0ciA9IE5VTEwsICpGaWxl U3RyID0gTlVMTDsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICBBZGRyRmxhZyA9IEZB TFNFLCBMZW5ndGhGbGFnID0gVFJVRSwgRmlsZUZsYWcgPSBGQUxTRSwNCj4gR3VpZEZsYWcgPSBG QUxTRSwgT2Zmc2V0RmxhZyA9IFRSVUU7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg UGFydE5hbWVGbGFnID0gVFJVRSwgTmV3UGFydE5hbWVGbGFnID0gRkFMU0UsDQo+IEF0dHJGbGFn ID0gRkFMU0U7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgRmxhZyA9IDAsIENoZWNr RmxhZyA9IDA7DQo+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAgKkJsb2NrTmFtZTsNCj4g KyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRGV2UGF0aDsNCj4gKyAgRUZJX0JMT0NLX0lP X1BST1RPQ09MICAgICAqQmxvY2tJbzsNCj4gKyAgRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAgICAq RGlza0lvOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgIEJsb2NrSW9IYW5kbGU7DQo+ ICsgIE1PRF9QQVJBTVMgICAgICAgICAgICAgICAgTW9kUGFyYW1zOw0KPiArICBFRklfUEFSVElU SU9OX0VOVFJZICAgICAgICpFbnRyeTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBO dW1Lbm93blBhcnRUeXBlc0VudHJpZXM7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg VGFibGVOb3RFbXB0eSwgTm9Qcm9tcHQgPSBGQUxTRSwgUXVpZXQgPSBUUlVFOw0KPiArICBVSU5U NjQgICAgICAgICAgICAgICAgICAgIFRpbWVTdGFtcEIsIFRpbWVTdGFtcEUsIFNwZWVkS0IsIEZy ZXE7DQo+ICsNCj4gKyAgLy8gUGFyc2UgU2hlbGwgY29tbWFuZCBsaW5lDQo+ICsgIFN0YXR1cyA9 IFNoZWxsSW5pdGlhbGl6ZSAoKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIFByaW50RXJyIChMIkNhbm5vdCBpbml0aWFsaXplIFNoZWxsIiwgU3RhdHVzKTsNCj4gKyAg ICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArICAgIHJldHVybiBTSEVMTF9BQk9SVEVE Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gU2hlbGxDb21tYW5kTGluZVBhcnNlIChQYXJh bUxpc3QsICZDaGVja1BhY2thZ2UsDQo+ICZQcm9ibGVtUGFyYW0sIFRSVUUpOw0KPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnRFcnIgKEwiRXJyb3Igd2hpbGUgcGFy c2luZyBjb21tYW5kIGxpbmUiLCBTdGF0dXMpOw0KPiArICAgIHJldHVybiBTSEVMTF9BQk9SVEVE Ow0KPiArICB9DQo+ICsNCj4gKyAgVGltZVN0YW1wQiA9IDA7DQo+ICsgIFRpbWVTdGFtcEUgPSAw Ow0KPiArDQo+ICsgIE5vUHJvbXB0ID0gU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFj a2FnZSwgTCIteWVzIik7DQo+ICsgIFF1aWV0ID0gIVNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChD aGVja1BhY2thZ2UsIEwiLXZlcmJvc2UiKTsNCj4gKw0KPiArICBGcmVxID0gR2V0UGVyZm9ybWFu Y2VDb3VudGVyUHJvcGVydGllcyAoTlVMTCwgTlVMTCk7DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZmxh Z3MgcHJvdmlkZWQgYnkgdXNlcg0KPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0Rmxh ZyAoQ2hlY2tQYWNrYWdlLCBMImNsZWFyIikgPDwgMCk7DQo+ICsgIEZsYWcgfD0gKFNoZWxsQ29t bWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwiY3JlYXRlIikgPDwgMSk7DQo+ICsgIEZs YWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwibGlzdCIpIDw8 IDIpOw0KPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdl LCBMInN5bmMiKSA8PCAzKTsNCj4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcg KENoZWNrUGFja2FnZSwgTCJ0eXBlc2luZm8iKSA8PCA0KTsNCj4gKyAgRmxhZyB8PSAoU2hlbGxD b21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJkZWxldGUiKSA8PCA1KTsNCj4gKyAg RmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJpbmZvIikg PDwgNik7DQo+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2th Z2UsIEwicmVhZCIpIDw8IDcpOw0KPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0Rmxh ZyAoQ2hlY2tQYWNrYWdlLCBMInJlYWRmaWxlIikgPDwgOCk7DQo+ICsgIEZsYWcgfD0gKFNoZWxs Q29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwicmVuYW1lIikgPDwgOSk7DQo+ICsg IEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwic2V0YXR0 ciIpIDw8IDEwKTsNCj4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNr UGFja2FnZSwgTCJzZXR0eXBlIikgPDwgMTEpOw0KPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRM aW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMIndyaXRlIikgPDwgMTIpOw0KPiArICBGbGFnIHw9 IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMIndyaXRlZmlsZSIpIDw8 IDEzKTsNCj4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2Fn ZSwgTCJmYXRmb3JtYXQiKSA8PCAxNCk7DQo+ICsNCj4gKyAgUGFydGl0aW9uR2V0S25vd25UeXBl ICgoVUlOVE4pKC0xKSwgJk51bUtub3duUGFydFR5cGVzRW50cmllcyk7DQo+ICsNCj4gKyAgaWYg KEZsYWcgJiBUWVBFU19JTkZPKSB7DQo+ICsgICAgVUlOVE4gSW5kZXg7DQo+ICsNCj4gKyAgICBQ cmludCAoTCIgIE5vXHQlLTM2c1x0R1VJRFxyXG4iLCBMIlR5cGUgbmFtZSIpOw0KPiArICAgIFBy aW50IChMIiAtLS0tICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBcbiIpOw0KPiArICAgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IE51bUtub3duUGFydFR5cGVzRW50cmllczsgSW5kZXgrKykgew0K PiArICAgICAgRUZJX0tOT1dOX1BBUlRJVElPTl9UWVBFICpQYXJ0VHlwZTsNCj4gKw0KPiArICAg ICAgUGFydFR5cGUgPSBQYXJ0aXRpb25HZXRLbm93blR5cGUgKEluZGV4LCBOVUxMKTsNCj4gKyAg ICAgIGlmIChQYXJ0VHlwZSA9PSBOVUxMKSB7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAg fQ0KPiArICAgICAgUHJpbnQgKEwiICUzZFx0JS0zNnNcdCVnXG4iLCBJbmRleCwgUGFydFR5cGUt PlR5cGVOYW1lLCAmUGFydFR5cGUtDQo+ID5UeXBlR3VpZCk7DQo+ICsgICAgfQ0KPiArICAgIGlm IChGbGFnID09IFRZUEVTX0lORk8pIHsNCj4gKyAgICAgIHJldHVybiBTSEVMTF9TVUNDRVNTOw0K PiArICAgIH0NCj4gKyAgfQ0KPiArICAvLyBTdGFydCBwYXJzaW5nIHRoZSBjb21tYW5kLg0KPiAr ICAvLyBHZW5lcmFsbHkgY29tbWFuZCBpczoNCj4gKyAgLy8gYmxvY2tfbmFtZTpib290cGFydF9u byBhZGRyIG9yIGZpbGVuYW1lIG9mZnNldA0KPiArDQo+ICsgIEJsb2NrTmFtZSA9IFNoZWxsQ29t bWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAxKTsNCj4gKyAgaWYgKEJsb2NrTmFt ZSA9PSBOVUxMKSB7DQo+ICsgICAgaWYgKEZsYWcgJiBMSVNUKSB7DQo+ICsgICAgICBTdGF0dXMg PSBGaW5kQW5kUHJpbnRQYXJ0aXRpb25hYmxlRGV2aWNlcyAoKTsNCj4gKyAgICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgUHJpbnRFcnIgKEwiRXJyb3IgZ2V0dGluZyBs aXN0IG9mIHBhcnRpdGlvbmFibGUgZGV2aWNlcyIsIFN0YXR1cyk7DQo+ICsgICAgICAgIFN0YXR1 cyA9IFNIRUxMX0FCT1JURUQ7DQo+ICsgICAgICB9DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0K PiArICAgIH0NCj4gKyAgICBQcmludEVyciAoTCJNaXNzaW5nIGJsb2NrIGRldmljZSBuYW1lIiwg RUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICByZXR1cm4gU0hFTExfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBGaW5kIGRldmljZSBoYW5kbGUgYnkgbWFwcGVk IG5hbWUNCj4gKyAgaWYgKGdFZmlTaGVsbFByb3RvY29sLT5HZXREZXZpY2VQYXRoRnJvbU1hcCAo QmxvY2tOYW1lKSA9PSBOVUxMKSB7DQo+ICsgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5V TEwsIFNUUklOR19UT0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiBnU2hlbGxHcHRIaWlIYW5k bGUsIGdBcHBOYW1lLCBCbG9ja05hbWUpOw0KPiArICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURf UEFSQU1FVEVSOw0KPiArICB9IGVsc2Ugew0KPiArICAgIERldlBhdGggPSAoRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICopZ0VmaVNoZWxsUHJvdG9jb2wtDQo+ID5HZXREZXZpY2VQYXRoRnJvbU1h cCAoQmxvY2tOYW1lKTsNCj4gKyAgICBpZiAoZ0JTLT5Mb2NhdGVEZXZpY2VQYXRoICgmZ0VmaUJs b2NrSW9Qcm90b2NvbEd1aWQsICZEZXZQYXRoLCBOVUxMKQ0KPiA9PSBFRklfTk9UX0ZPVU5EKSB7 DQo+ICsgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VODQo+ IChTVFJfR0VOX01BUF9QUk9UT0NPTCksIGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0FwcE5hbWUsIEJs b2NrTmFtZSwNCj4gTCJCbG9ja0lvIik7DQo+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9JTlZBTElE X1BBUkFNRVRFUjsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoU3RhdHVzKSB7DQo+ ICsgICAgcmV0dXJuIFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAg QmxvY2tJb0hhbmRsZSA9IDA7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVEZXZpY2VQ YXRoICgmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+IChFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgKiopJkRldlBhdGgsICZCbG9ja0lvSGFuZGxlKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9 IGdCUy0+T3BlblByb3RvY29sIChCbG9ja0lvSGFuZGxlLCAmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1 aWQsDQo+IChWT0lEICoqKSZCbG9ja0lvLCBnSW1hZ2VIYW5kbGUsIE5VTEwsDQo+IEVGSV9PUEVO X1BST1RPQ09MX0dFVF9QUk9UT0NPTCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VODQo+IChT VFJfR0VOX01BUF9QUk9UT0NPTCksIGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0FwcE5hbWUsIEJsb2Nr TmFtZSwNCj4gTCJCbG9ja0lvIik7DQo+ICsgICAgZ290byBDbGVhblVwOw0KPiArICB9DQo+ICsN Cj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgQmxvY2tJb0hhbmRs ZSwNCj4gKyAgICAmZ0VmaURpc2tJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAoVk9JRCAqKikmRGlz a0lvDQo+ICsgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFNo ZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4NCj4gKFNUUl9HRU5fTUFQ X1BST1RPQ09MKSwgZ1NoZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgQmxvY2tOYW1lLA0KPiBM IkRpc2tJbyIpOw0KPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgfQ0KPiArDQo+ICsgIENoZWNr RmxhZyA9IEZsYWc7DQo+ICsgIGZvciAoSSA9IDA7IENoZWNrRmxhZzsgQ2hlY2tGbGFnID4+PSAx KSB7DQo+ICsgICAgSSArPSBDaGVja0ZsYWcgJiAxOw0KPiArICAgIGlmIChJID4gMSkgew0KPiAr ICAgICAgUHJpbnRFcnIgKEwiVG9vIG1hbnkgZmxhZ3MiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIp Ow0KPiArICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICBn b3RvIENsZWFuVXA7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZsYWcgJiBTWU5D KSB7DQo+ICsgICAgLy8gTGV0IHRoZSBQYXJ0aXRpb24gdGFibGUgZHJpdmVyIGtub3cgdGhhdA0K PiArICAgIC8vIHdlIHdhbnQgdG8gcmVyZWFkIHRoZSB0YWJsZXMNCj4gKyAgICBTdGF0dXMgPSBn QlMtPlJlaW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCj4gKyAgICAgIEJsb2NrSW9IYW5kbGUs DQo+ICsgICAgICAmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICBCbG9ja0lvLA0K PiArICAgICAgQmxvY2tJbw0KPiArICAgICAgKTsNCj4gKyAgICBTdGF0dXMgPSBTSEVMTF9TVUND RVNTOw0KPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghSXNQYXJ0 aXRpb25hYmxlRGV2aWNlUGF0aCAoRGV2aWNlUGF0aEZyb21IYW5kbGUgKEJsb2NrSW9IYW5kbGUp KSkgew0KPiArICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4g KFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4gZ1NoZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgQmxv Y2tOYW1lKTsNCj4gKyAgICBQcmludCAoTCIlcyBpcyBub3QgYSByYXcgYmxvY2sgZGV2aWNlXG4i LCBCbG9ja05hbWUpOw0KPiArICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0K PiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghQmxvY2tJby0+TWVk aWEtPk1lZGlhUHJlc2VudCkgew0KPiArICAgIFByaW50RXJyIChMIk1lZGlhIGlzIG5vdCBwcmVz ZW50IVxuIiwgRUZJX05PX01FRElBKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfTk9fTUVESUE7DQo+ ICsgICAgZ290byBDbGVhblVwOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gUHJlbG9hZCBHUFQgdGFi bGVzIHdpdGggdmFsaWRhdGlvbg0KPiArICBTdGF0dXMgPSBQYXJ0aXRpb25HZXRHcHRUYWJsZXMg KERpc2tJbywgQmxvY2tJbyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICBCT09MRUFOIENhbkNvbnRpbnVlOw0KPiArDQo+ICsgICAgQ2FuQ29udGludWUgPSAoRmxhZyAm IENSRUFURSkgfHwgKEZsYWcgJiBDTEVBUikgfHwgKEZsYWcgJg0KPiBGQVRfRk9STUFUKTsNCj4g KyAgICBpZiAoU3RhdHVzICE9IEVGSV9OT1RfRk9VTkQpIHsNCj4gKyAgICAgIFByaW50RXJyIChM IlVuZXhwZWN0ZWQgZXJyb3IgZ2V0dGluZyBHUFQgdGFibGVzIiwgU3RhdHVzKTsNCj4gKyAgICAg IGdvdG8gQ2xlYW5VcDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgaWYgKCFDYW5Db250aW51 ZSkgew0KPiArICAgICAgICBQcmludEVyciAoTCJObyBHUFQgdGFibGUgZm91bmQuIENyZWF0ZSBm aXJzdCIsIFN0YXR1cyk7DQo+ICsgICAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICAgIH0NCj4g KyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLyBEbyB3ZSBoYXZlIGFueSBwYXJ0aXRpb25zIGFs cmVhZHk/DQo+ICsgIFRhYmxlTm90RW1wdHkgPSAoUGFydGl0aW9uRmluZFBhcnRpdGlvbkJ5Q3Jp dGVyaWEgKE5VTEwsIDAsIDAsIFNSQ19BTlkpICE9DQo+IE5VTEwpOw0KPiArDQo+ICsgIFN0YXR1 cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArDQo+ICsgIGlmICgoRmxhZyA8IExJU1Qp IHx8DQo+ICsgICAgICAoRmxhZyAmIERFTEVURSkgfHwNCj4gKyAgICAgIChGbGFnID4gUkVBRF9G SUxFKQ0KPiArICAgICApIHsNCj4gKyAgICBpZiAoQmxvY2tJby0+TWVkaWEtPlJlYWRPbmx5KSB7 DQo+ICsgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICBQcmlu dEVyciAoTCJDYW5ub3Qgd3JpdGUgdG8gYSByZWFkLW9ubHkgZGV2aWNlIiwgU3RhdHVzKTsNCj4g KyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQmxv Y2tJby0+TWVkaWEtPlJlbW92YWJsZU1lZGlhKSB7DQo+ICsgICAgUHJpbnQgKEwiJXMgaXMgYSBy ZW1vdmFibGUgZGV2aWNlLiBKdXN0IGEgbm90ZVxuIiwgQmxvY2tOYW1lKTsNCj4gKyAgfQ0KPiAr DQo+ICsgIHN3aXRjaCAoRmxhZykgew0KPiArICAgIGNhc2UgSU5GTzoNCj4gKyAgICAgIFBhcnRO YW1lID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIpOw0KPiAr ICAgICAgT2Zmc2V0RmxhZyA9IEZBTFNFOw0KPiArICAgICAgTGVuZ3RoRmxhZyA9IEZBTFNFOw0K PiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBMSVNUOg0KPiArICAgIHsNCj4gKyAgICAgIFVJ TlROIE51bUVudHJpZXM7DQo+ICsNCj4gKyAgICAgIE51bUVudHJpZXMgPSBQYXJ0aXRpb25MaXN0 R3B0RW50cmllcyAoKTsNCj4gKyAgICAgIGlmIChOdW1FbnRyaWVzID09IDApIHsNCj4gKyAgICAg ICAgUHJpbnQgKEwiZ3B0OiBHUFQgaXMgdmFsaWQgb24gJXMsIGJ1dCBubyBwYXJ0aXRpb24ocykg ZGVmaW5lZCB5ZXQuIFVzZQ0KPiBjcmVhdGVcbiIsIEJsb2NrTmFtZSk7DQo+ICsgICAgICB9DQo+ ICsgICAgICBTdGF0dXMgPSBTSEVMTF9TVUNDRVNTOw0KPiArICAgICAgZ290byBDbGVhblVwOw0K PiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICAgIGNhc2UgQ0xFQVI6DQo+ICsgICAgICBp ZiAoVGFibGVOb3RFbXB0eSkgew0KPiArICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHdoYXQgaGUv c2hlIGlzIGRvaW5nLi4uDQo+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9OT1Rf RU1QVFkpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja05hbWUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIC8vIEV2ZW4gaWYgR1BUIHRh YmxlcyBkbyBub3QgZXhpc3QsIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZy4NCj4gKyAgICAgIC8v IFdhcm4gdGhlIHVzZXIgYW5kIGRvdWJsZSBzdXJlIGl0IGlzIHRoZSBpbnRlbnRpb24sDQo+ICsg ICAgICAvLyB0byBwcmV2ZW50IGEgdXNlciBmcm9tIGJyaWNraW5nIGEgZGV2aWNlIChKVEFHIHdv dWxkIGJlIG5lZWRlZCB0bw0KPiByZWNvdmVyKQ0KPiArICAgICAgLy8gYnkgb3ZlcndyaXRpbmcg YW4gQVRGIGJvb3QgZGV2aWNlLiBIb3dldmVyIHdpdGggTm9Qcm9tcHQgb24sIHRoZQ0KPiB1c2Vy IGlzDQo+ICsgICAgICAvLyByZXNwb25zaWJsZSBmb3Igb3BlcmF0aW9uIGJlY2F1c2UgdGhlcmUg aXMgbm8gY29uZmlybWF0aW9uIChhc3N1bWluZw0KPiB5ZXMgb24gYWxsIHF1ZXJpZXMpLg0KPiAr ICAgICAgaWYgKChOb1Byb21wdCkgfHwgKCFHcHRQcm9tcHRZZXNObyAoU1RSSU5HX1RPS0VODQo+ IChTVFJfR1BUX0NMRUFSX1NVUkUpKSAmJg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICgh R3B0UHJvbXB0WWVzTm8gKFNUUklOR19UT0tFTg0KPiAoU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUp KSkpDQo+ICsgICAgICAgICApIHsNCj4gKyAgICAgICAgUGFydGl0aW9uR3B0Q2xlYXJBbGwgKCk7 DQo+ICsgICAgICB9DQo+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9TVUNDRVNTOw0KPiArICAgICAg Z290byBDbGVhblVwOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBDUkVBVEU6DQo+ICsg ICAgICBQYXJ0TmFtZSAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNr YWdlLCAyKTsNCj4gKyAgICAgIE9mZnNldFN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1 ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gKyAgICAgIExlbmd0aFN0ciAgID0gU2hlbGxDb21tYW5k TGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDQpOw0KPiArICAgICAgQXR0clN0ciAgICAg PSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgNSk7DQo+ICsgICAg ICBHdWlkU3RyICAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRWYWx1ZSAgICAoQ2hlY2tQYWNrYWdl LCBMIi10eXBlIik7DQo+ICsgICAgICBHdWlkRmxhZyA9IFRSVUU7DQo+ICsgICAgICBicmVhazsN Cj4gKyAgICBjYXNlIERFTEVURToNCj4gKyAgICAgIFBhcnROYW1lICAgID0gU2hlbGxDb21tYW5k TGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIpOw0KPiArICAgICAgTGVuZ3RoRmxhZyAg PSBGQUxTRTsNCj4gKyAgICAgIE9mZnNldEZsYWcgPSBGQUxTRTsNCj4gKyAgICAgIGJyZWFrOw0K PiArICAgIGNhc2UgUkVOQU1FOg0KPiArICAgICAgUGFydE5hbWUgICAgPSBTaGVsbENvbW1hbmRM aW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMik7DQo+ICsgICAgICBOZXdQYXJ0TmFtZSA9 IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gKyAgICAg IE5ld1BhcnROYW1lRmxhZyA9IFRSVUU7DQo+ICsgICAgICBMZW5ndGhGbGFnID0gRkFMU0U7DQo+ ICsgICAgICBPZmZzZXRGbGFnID0gRkFMU0U7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNl IFNFVEFUVFI6DQo+ICsgICAgICBQYXJ0TmFtZSAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdW YWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsNCj4gKyAgICAgIEF0dHJTdHIgICAgID0gU2hlbGxDb21t YW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDMpOw0KPiArICAgICAgQXR0ckZsYWcg ICAgPSBUUlVFOw0KPiArICAgICAgTGVuZ3RoRmxhZyAgPSBGQUxTRTsNCj4gKyAgICAgIE9mZnNl dEZsYWcgID0gRkFMU0U7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFNFVFRZUEU6DQo+ ICsgICAgICBQYXJ0TmFtZSAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQ YWNrYWdlLCAyKTsNCj4gKyAgICAgIEd1aWRTdHIgICAgID0gU2hlbGxDb21tYW5kTGluZUdldFZh bHVlICAgIChDaGVja1BhY2thZ2UsIEwiLXR5cGUiKTsNCj4gKyAgICAgIEd1aWRGbGFnID0gVFJV RTsNCj4gKyAgICAgIExlbmd0aEZsYWcgPSBGQUxTRTsNCj4gKyAgICAgIE9mZnNldEZsYWcgPSBG QUxTRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgRkFUX0ZPUk1BVDoNCj4gKyAgICAg IFBhcnROYW1lICAgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdl LCAyKTsNCj4gKyAgICAgIFZvbHVtZU5hbWUgICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1 ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gKyAgICAgIExlbmd0aEZsYWcgICA9IEZBTFNFOw0KPiAr ICAgICAgT2Zmc2V0RmxhZyAgID0gRkFMU0U7DQo+ICsgICAgICBQYXJ0TmFtZUZsYWcgPSAoUGFy dE5hbWUgIT0gTlVMTCk7DQo+ICsgICAgICBpZiAoIVBhcnROYW1lRmxhZyAmJiBUYWJsZU5vdEVt cHR5KSB7DQo+ICsgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgd2hhdCBoZS9zaGUgaXMgZG9pbmcu Li4NCj4gKyAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR1BUX05PVF9FTVBUWSksDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgIEJsb2NrTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgICAgIH0NCj4gKyAgICAgIGJyZWFrOw0KPiArICAgICAgLy8gRmFsbCB0aHJvdWdoDQo+ ICsgICAgY2FzZSBSRUFEOg0KPiArICAgIGNhc2UgV1JJVEU6DQo+ICsgICAgICBBZGRyZXNzU3Ry ID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIpOw0KPiArICAg ICAgUGFydE5hbWUgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2Us IDMpOw0KPiArICAgICAgT2Zmc2V0U3RyID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChD aGVja1BhY2thZ2UsIDQpOw0KPiArICAgICAgTGVuZ3RoU3RyID0gU2hlbGxDb21tYW5kTGluZUdl dFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDUpOw0KPiArICAgICAgQWRkckZsYWcgPSBUUlVFOw0K PiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSRUFEX0ZJTEU6DQo+ICsgICAgICBGaWxlU3Ry ID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIpOw0KPiArICAg ICAgUGFydE5hbWUgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2Us IDMpOw0KPiArICAgICAgT2Zmc2V0U3RyID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChD aGVja1BhY2thZ2UsIDQpOw0KPiArICAgICAgTGVuZ3RoU3RyID0gU2hlbGxDb21tYW5kTGluZUdl dFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDUpOw0KPiArICAgICAgRmlsZUZsYWcgPSBUUlVFOw0K PiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBXUklURV9GSUxFOg0KPiArICAgICAgRmlsZVN0 ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsNCj4gKyAg ICAgIFBhcnROYW1lICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdl LCAzKTsNCj4gKyAgICAgIE9mZnNldFN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAo Q2hlY2tQYWNrYWdlLCA0KTsNCj4gKyAgICAgIExlbmd0aEZsYWcgPSBGQUxTRTsNCj4gKyAgICAg IEZpbGVGbGFnID0gVFJVRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsg ICAgICBQcmludCAoTCIlczogVW5zdXBwb3J0ZWQgY29tbWFuZC4gVHJ5IFwiaGVscCAlc1wiIiwg Z0FwcE5hbWUpOw0KPiArICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBSZWFkIGFkZHJlc3Mg cGFyYW1ldGVyDQo+ICsgIGlmICgoQWRkcmVzc1N0ciA9PSBOVUxMKSAmIEFkZHJGbGFnKSB7DQo+ ICsgICAgUHJpbnRFcnIgKEwiTm8gYWRkcmVzcyBwYXJhbWV0ZXIiLCBFRklfSU5WQUxJRF9QQVJB TUVURVIpOw0KPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgfSBlbHNlIGlmIChBZGRyRmxhZykg ew0KPiArICAgIEFkZHJlc3MgPSBTaGVsbEhleFN0clRvVWludG4gKEFkZHJlc3NTdHIpOw0KPiAr ICAgIGlmIChBZGRyZXNzID09IChVSU5UTikoLTEpKSB7DQo+ICsgICAgICBQcmludEVyciAoTCJX cm9uZyBhZGRyZXNzIHBhcmFtZXRlciIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAg ICBnb3RvIENsZWFuVXA7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChQYXJ0TmFt ZSA9PSBOVUxMKSAmIFBhcnROYW1lRmxhZykgew0KPiArICAgIFByaW50RXJyIChMIk1pc3Npbmcg cGFydGl0aW9uIG5hbWUiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiArICAgIGdvdG8gQ2xl YW5VcDsNCj4gKyAgfSBlbHNlIGlmIChQYXJ0TmFtZUZsYWcpIHsNCj4gKyAgICBpZiAoU3RyU2l6 ZSAoUGFydE5hbWUpID4gTUFYX1BBUlRJVElPTl9OQU1FX0xFTkdUSCkgew0KPiArICAgICAgUHJp bnRFcnIgKEwiUGFydGl0aW9uIG5hbWUgaXMgdG9vIGxvbmcgKG1heCAzNiBjaGFycykiLA0KPiBF RklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiArICAgICAgZ290byBDbGVhblVwOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIC8vIFJlYWQgb2Zmc2V0IHBhcmFtZXRlcg0KPiArICBpZiAoKE9m ZnNldFN0ciA9PSBOVUxMKSAmIE9mZnNldEZsYWcpIHsNCj4gKyAgICBQcmludEVyciAoTCJObyBv ZmZzZXQgUGFyYW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICBnb3RvIENs ZWFuVXA7DQo+ICsgIH0gZWxzZSBpZiAoT2Zmc2V0RmxhZykgew0KPiArICAgIE9mZnNldCA9IFNo ZWxsSGV4U3RyVG9VaW50biAoT2Zmc2V0U3RyKTsNCj4gKyAgICBpZiAoT2Zmc2V0IDwgMCkgew0K PiArICAgICAgUHJpbnQgKEwiJXM6IFdyb25nIG9mZnNldCBwYXJhbWV0ZXI6ICVzXG4iLCBnQXBw TmFtZSwgT2Zmc2V0U3RyKTsNCj4gKyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICB9DQo+ICsg IH0NCj4gKw0KPiArICAvLyBSZWFkIGxlbmd0aCBwYXJhbWV0ZXINCj4gKyAgaWYgKChMZW5ndGhT dHIgPT0gTlVMTCkgJiBMZW5ndGhGbGFnKSB7DQo+ICsgICAgUHJpbnRFcnIgKEwiTm8gbGVuZ3Ro IHBhcmFtZXRlciIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAgZ290byBDbGVhblVw Ow0KPiArICB9IGVsc2UgaWYgKExlbmd0aEZsYWcpIHsNCj4gKyAgICBCeXRlQ291bnQgPSAoVUlO VDY0KVNoZWxsU3RyVG9VaW50biAoTGVuZ3RoU3RyKTsNCj4gKyAgICBpZiAoQnl0ZUNvdW50IDwg MCkgew0KPiArICAgICAgUHJpbnQgKEwiJXM6IFdyb25nIGxlbmd0aCBwYXJhbWV0ZXIgJXMhXG4i LCBnQXBwTmFtZSwgTGVuZ3RoU3RyKTsNCj4gKyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKE5ld1BhcnROYW1lID09IE5VTEwpICYgTmV3UGFydE5h bWVGbGFnKSB7DQo+ICsgICAgUHJpbnRFcnIgKEwiTWlzc2luZyBuYW1lIHRvIGJlIGFzc2lnbmVk IHRvIHBhcnRpdGlvbiIsDQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAgZ290byBD bGVhblVwOw0KPiArICB9IGVsc2UgaWYgKE5ld1BhcnROYW1lRmxhZykgew0KPiArICAgIGlmIChT dHJTaXplIChOZXdQYXJ0TmFtZSkgPiBNQVhfUEFSVElUSU9OX05BTUVfTEVOR1RIKSB7DQo+ICsg ICAgICBQcmludEVyciAoTCJQYXJ0aXRpb24gbmFtZSBpcyB0b28gbG9uZyAobWF4IDM2IGNoYXJz KSIsDQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChBdHRyU3RyID09IE5VTEwpICYgQXR0ckZs YWcpIHsNCj4gKyAgICBQcmludEVyciAoTCJNaXNzaW5nIGF0dHJpYnV0ZXMgcGFyYW1ldGVyIiwg RUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0gZWxz ZSBpZiAoQXR0clN0cikgew0KPiArICAgIFBhcnRBdHRyaWJ1dGVzID0gKFVJTlQ2NClTaGVsbFN0 clRvVWludG4gKEF0dHJTdHIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChHdWlkU3RyID09IE5V TEwpICYgR3VpZEZsYWcpIHsNCj4gKyAgICBQcmludEVyciAoTCJNaXNzaW5nIHBhcnRpdGlvbiB0 eXBlIEdVSUQgcGFyYW1ldGVyIiwNCj4gRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICBn b3RvIENsZWFuVXA7DQo+ICsgIH0gZWxzZSBpZiAoR3VpZEZsYWcpIHsNCj4gKyAgICBTdGF0dXMg PSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICBpZiAoSW50ZXJuYWxTaGVsbElzSGV4 T3JEZWNpbWFsTnVtYmVyIChHdWlkU3RyLCBGQUxTRSwgVFJVRSwgRkFMU0UpKSB7DQo+ICsgICAg ICBVSU5UTiBPcmRpbmFsOw0KPiArDQo+ICsgICAgICBPcmRpbmFsID0gU2hlbGxTdHJUb1VpbnRu IChHdWlkU3RyKTsNCj4gKyAgICAgIGlmIChPcmRpbmFsIDwgTnVtS25vd25QYXJ0VHlwZXNFbnRy aWVzKSB7DQo+ICsgICAgICAgIFBhcnRUeXBlR3VpZCA9IFBhcnRpdGlvbkdldEtub3duVHlwZSAo T3JkaW5hbCwgTlVMTCktPlR5cGVHdWlkOw0KPiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9TVUND RVNTOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwg LTEsIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dFTl9QQVJBTV9JTlYpLA0KPiBnU2hlbGxHcHRI aWlIYW5kbGUsIGdBcHBOYW1lLCBHdWlkU3RyKTsNCj4gKyAgICAgICAgZ290byBDbGVhblVwOw0K PiArICAgICAgfQ0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBTdGF0dXMgPSBDb252ZXJ0U3Ry aW5nVG9HdWlkIChHdWlkU3RyLCAmUGFydFR5cGVHdWlkKTsNCj4gKyAgICAgIGlmICgoRUZJX0VS Uk9SIChTdGF0dXMpKSB8fCAoSXNaZXJvR3VpZCAoJlBhcnRUeXBlR3VpZCkpKSB7DQo+ICsgICAg ICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5f UEFSQU1fSU5WKSwNCj4gZ1NoZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgR3VpZFN0cik7DQo+ ICsgICAgICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAgICAgICBn b3RvIENsZWFuVXA7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYg KEZpbGVGbGFnKSB7DQo+ICsgICAgLy8gUmVhZCBGaWxlUGF0aCBwYXJhbWV0ZXINCj4gKyAgICBp ZiAoRmlsZVN0ciA9PSBOVUxMKSB7DQo+ICsgICAgICBQcmludEVyciAoTCJObyBGaWxlUGF0aCBw YXJhbWV0ZXIiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiArICAgICAgZ290byBDbGVhblVw Ow0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBGaWxlUGF0aCA9IChDSEFSMTYgKilGaWxlU3Ry Ow0KPiArICAgICAgU3RhdHVzID0gU2hlbGxJc0ZpbGUgKEZpbGVQYXRoKTsNCj4gKyAgICAgIC8v IFdoZW4gcmVhZCBmaWxlIGludG8gZmxhc2gsIGZpbGUgZG9lc24ndCBoYXZlIHRvIGV4aXN0DQo+ ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMgJiYgIShGbGFnICYgUkVBRF9GSUxFKSkpIHsN Cj4gKyAgICAgICAgUHJpbnRFcnIgKEwiV3JvbmcgRmlsZVBhdGggcGFyYW1ldGVyIiwgU3RhdHVz KTsNCj4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAg ICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0 dXMgPSBPcGVuQW5kUHJlcGFyZUZpbGUgKEZpbGVQYXRoLCAmRmlsZUhhbmRsZSwgKChGbGFnICYN Cj4gUkVBRF9GSUxFKSAhPSAwKSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgUHJpbnQgKEwiRXJyb3IgJXIgd2hpbGUgcHJlcGFyaW5nIGZpbGUgJXMiLCBTdGF0 dXMsIEZpbGVQYXRoKTsNCj4gKyAgICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ICsgICAg ICBnb3RvIENsZWFuVXA7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8gR2V0IGZpbGUgc2l6ZSBp biBvcmRlciB0byBjaGVjayBjb3JyZWN0bmVzcyBhdCB0aGUgZW5kIG9mIHRyYW5zZmVyDQo+ICsg ICAgaWYgKEZsYWcgJiAoV1JJVEVfRklMRSkpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEZpbGVIYW5k bGVHZXRTaXplIChGaWxlSGFuZGxlLCAmRmlsZVNpemUpOw0KPiArICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgICBQcmludEVyciAoTCJDYW5ub3QgZ2V0IGZpbGUgc2l6 ZSIsIFN0YXR1cyk7DQo+ICsgICAgICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ICsgICAg ICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICAgIH0NCj4gKyAgICAgIEJ5dGVDb3VudCA9IChVSU5U NjQpRmlsZVNpemU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRmlsZUJ1ZmZlciA9IEFsbG9jYXRl WmVyb1Bvb2wgKChVSU5UTilCeXRlQ291bnQpOw0KPiArICAgIGlmIChGaWxlQnVmZmVyID09IE5V TEwpIHsNCj4gKyAgICAgIFByaW50RXJyIChMIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkiLCBFRklf T1VUX09GX1JFU09VUkNFUyk7DQo+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiArICAgICAgZ290byBFcnJvcl9DbG9zZV9GaWxlOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIC8vIFJlYWQgZmlsZSBjb250ZW50IGFuZCBzdG9yZSBpdCBpbiBGaWxlQnVmZmVyDQo+ICsg ICAgaWYgKEZsYWcgJiAoV1JJVEVfRklMRSkpIHsNCj4gKyAgICAgIGlmICghUXVpZXQpIHsNCj4g KyAgICAgICAgUHJpbnQgKEwiUmVhZGluZyAlcy4uLlxyIiwgRmlsZVBhdGgpOw0KPiArICAgICAg fQ0KPiArICAgICAgU3RhdHVzID0gRmlsZUhhbmRsZVJlYWQgKEZpbGVIYW5kbGUsICZCeXRlQ291 bnQsIEZpbGVCdWZmZXIpOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgICBQcmludEVyciAoTCJSZWFkIGZyb20gZmlsZSBlcnJvciIsIFN0YXR1cyk7DQo+ICsg ICAgICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ICsgICAgICAgIGdvdG8gRXJyb3JfRnJl ZV9CdWZmZXI7DQo+ICsgICAgICB9IGVsc2UgaWYgKEJ5dGVDb3VudCAhPSAoVUlOVE4pRmlsZVNp emUpIHsNCj4gKyAgICAgICAgUHJpbnRFcnIgKEwiTm90IHdob2xlIGZpbGUgcmVhZC4gQWJvcnQi LCBFRklfREVWSUNFX0VSUk9SKTsNCj4gKyAgICAgICAgU3RhdHVzID0gU0hFTExfREVWSUNFX0VS Uk9SOw0KPiArICAgICAgICBnb3RvIEVycm9yX0ZyZWVfQnVmZmVyOw0KPiArICAgICAgfQ0KPiAr ICAgICAgaWYgKCFRdWlldCkgew0KPiArICAgICAgICBQcmludCAoTCJXcml0aW5nICVzIGludG8g ZGV2aWNlICVzLCBwYXJ0aXRpb24gJXMuLi5cbiIsIEZpbGVQYXRoLA0KPiBCbG9ja05hbWUsIFBh cnROYW1lKTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBCdWZmZXIg PSAoVUlOVDggKilBZGRyZXNzOw0KPiArICBpZiAoRmlsZUZsYWcpIHsNCj4gKyAgICBCdWZmZXIg PSBGaWxlQnVmZmVyOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZsYWcgPiBUWVBFU19JTkZPKSB7 DQo+ICsgICAgRW50cnkgPSBQYXJ0aXRpb25GaW5kUGFydGl0aW9uQnlDcml0ZXJpYSAoUGFydE5h bWUsIDAsIDAsIFNSQ19CWV9OQU1FKTsNCj4gKyAgICBpZiAoIUVudHJ5ICYmIFBhcnROYW1lICYm IChJbnRlcm5hbFNoZWxsSXNIZXhPckRlY2ltYWxOdW1iZXINCj4gKFBhcnROYW1lLCBGQUxTRSwg VFJVRSwgRkFMU0UpKSkgew0KPiArICAgICAgRW50cnkgPSBQYXJ0aXRpb25GaW5kUGFydGl0aW9u QnlDcml0ZXJpYSAoUGFydE5hbWUsIDAsIDAsIFNSQ19CWV9OVU0pOw0KPiArICAgIH0NCj4gKyAg ICBpZiAoKCFFbnRyeSkgJiYgKFBhcnROYW1lRmxhZykpIHsNCj4gKyAgICAgIFNoZWxsUHJpbnRI aWlFeCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4g Z1NoZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgUGFydE5hbWUpOw0KPiArICAgICAgUHJpbnQg KEwiQ291bGQgbm90IGZpbmQgcGFydGl0aW9uICVzIChjYXNlLXNlbnNpdGl2ZSkuIE1ha2Ugc3Vy ZSB0aGUgbmFtZQ0KPiBpcyBzcGVsbGVkIHByb3Blcmx5XG4iLCBQYXJ0TmFtZSk7DQo+ICsgICAg ICBTdGF0dXMgPSBTSEVMTF9OT1RfRk9VTkQ7DQo+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgc3dpdGNoIChGbGFnKSB7DQo+ICsgICAgY2FzZSBDUkVB VEU6DQo+ICsgICAgICBQYXJ0aXRpb25HcHRDcmVhdGVQYXJ0aXRpb24gKA0KPiArICAgICAgICBQ YXJ0TmFtZSwNCj4gKyAgICAgICAgT2Zmc2V0LCAgLy8gTGJhLiBJZiAwLCB0aGUgbmV4dCBhdmFp bGFibGUgaXMgYXNzdW1lZA0KPiArICAgICAgICBCeXRlQ291bnQsIC8vIGluIE1lZ2FCeXRlcy4g SWYgMCB0aGUgd2hvbGUgcmVtYWluaW5nIHNwYWNlIGlzIGFzc3VtZWQNCj4gKyAgICAgICAgUGFy dEF0dHJpYnV0ZXMsDQo+ICsgICAgICAgIFBhcnRUeXBlR3VpZCk7DQo+ICsgICAgICBicmVhazsN Cj4gKyAgICBjYXNlIERFTEVURToNCj4gKyAgICAgIE1vZFBhcmFtcy5QYXJ0TmFtZSA9IFBhcnRO YW1lOw0KPiArICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9ERUxFVEVfV0FSTklORyksDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgRW50cnktPlBhcnRpdGlvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICApOw0KPiArICAgICAgaWYgKChOb1Byb21wdCkgfHwgKCFHcHRQcm9tcHRZZXNObyAoU1RS SU5HX1RPS0VODQo+IChTVFJfR1BUX0FCU09MVVRFTFlfU1VSRSkpKSkgew0KPiArICAgICAgICBT dGF0dXMgPSBQYXJ0aXRpb25HcHRNb2RpZnlQYXJ0aXRpb24gKA0KPiArICAgICAgICAgIEVudHJ5 LCAmTW9kUGFyYW1zLCBNT0RfREVMRVRFKTsNCj4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgICAgIFByaW50RXJyIChMIkVycm9yIGRlbGV0aW5nIHRoZSBwYXJ0 aXRpb24iLCBTdGF0dXMpOw0KPiArICAgICAgICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ ICsgICAgICAgICAgZ290byBDbGVhblVwOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIFN0YXR1 cyA9IFNIRUxMX1NVQ0NFU1M7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBTdGF0dXMg PSBTSEVMTF9BQk9SVEVEOw0KPiArICAgICAgfQ0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2Fz ZSBGQVRfRk9STUFUOg0KPiArICAgIHsNCj4gKyAgICAgIEVGSV9MQkEgU3RhcnRpbmdMQkEsIEVu ZGluZ0xCQTsNCj4gKyAgICAgIENIQVI4ICAgICAgICAgICAgICAgIExhYmVsTmFtZVsxMl07DQo+ ICsNCj4gKyAgICAgIGlmIChWb2x1bWVOYW1lKSB7DQo+ICsgICAgICAgIGlmIChTdHJMZW4gKFZv bHVtZU5hbWUpID4gMTEpIHsNCj4gKyAgICAgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgICAgICAgICAgUHJpbnRFcnIgKEwiVGhlIHZvbHVtZSBsYWJlbCBpcyB0b28g bG9uZyIsIFN0YXR1cyk7DQo+ICsgICAgICAgICAgU3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJB TUVURVI7DQo+ICsgICAgICAgICAgZ290byBDbGVhblVwOw0KPiArICAgICAgICB9DQo+ICsgICAg ICAgIFVuaWNvZGVTdHJUb0FzY2lpU3RyIChWb2x1bWVOYW1lLCAoQ0hBUjggKilMYWJlbE5hbWUp Ow0KPiArICAgICAgfQ0KPiArICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9GT1JNQVRfV0FS TklORyksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgRW50cnkgPyBFbnRyeS0+UGFydGl0aW9uTmFtZSA6IEJs b2NrTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICAgIGlmICgo Tm9Qcm9tcHQpIHx8ICghR3B0UHJvbXB0WWVzTm8gKFNUUklOR19UT0tFTg0KPiAoU1RSX0dQVF9G T1JNQVRfU1VSRSkpICYmDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgKCFHcHRQcm9tcHRZ ZXNObyAoU1RSSU5HX1RPS0VODQo+IChTVFJfR1BUX0FCU09MVVRFTFlfU1VSRSkpKSkNCj4gKyAg ICAgICAgICkgew0KPiArICAgICAgICBTdGFydGluZ0xCQSA9IDA7DQo+ICsgICAgICAgIEVuZGlu Z0xCQSA9IEJsb2NrSW8tPk1lZGlhLT5MYXN0QmxvY2s7DQo+ICsgICAgICAgIGlmIChFbnRyeSkg ew0KPiArICAgICAgICAgIFN0YXJ0aW5nTEJBID0gRW50cnktPlN0YXJ0aW5nTEJBOw0KPiArICAg ICAgICAgIEVuZGluZ0xCQSA9IEVudHJ5LT5FbmRpbmdMQkE7DQo+ICsgICAgICAgIH0NCj4gKyAg ICAgICAgaWYgKCFRdWlldCkgew0KPiArICAgICAgICAgIFByaW50IChMIkZvcm1hdHRpbmcgJXMg dG8gRkFUMzIuLi5cciIsIFBhcnROYW1lRmxhZyA/IEVudHJ5LQ0KPiA+UGFydGl0aW9uTmFtZSA6 IEJsb2NrTmFtZSk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgU3RhdHVzID0gRmF0Rm9ybWF0 IChTdGFydGluZ0xCQSwgRW5kaW5nTEJBLCBCbG9ja0lvLCBEaXNrSW8sDQo+IFZvbHVtZU5hbWUg PyBMYWJlbE5hbWUgOiBOVUxMLCBUUlVFKTsNCj4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgICAgIFByaW50RXJyIChMIkVycm9yIGZvcm1hdHRpbmcgdGhlIHBh cnRpdGlvbiB0byBGQVQgICAgICAgICAgICAgIiwgU3RhdHVzKTsNCj4gKyAgICAgICAgICBTdGF0 dXMgPSBTSEVMTF9BQk9SVEVEOw0KPiArICAgICAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICAg ICAgfSBlbHNlIGlmICghUXVpZXQpIHsNCj4gKyAgICAgICAgICBQcmludCAoTCIlcyBzdWNjZXNz ZnVsbHkgZm9ybWF0dGVkIHRvIEZBVC4gRm9ybWF0dGVkIHNpemUgJWxsdSBNaUJcbiIsDQo+ICsg ICAgICAgICAgICAgICAgIFBhcnROYW1lRmxhZyA/IEVudHJ5LT5QYXJ0aXRpb25OYW1lIDogQmxv Y2tOYW1lLA0KPiArICAgICAgICAgICAgICAgICBNdWx0VTY0eDMyIChFbmRpbmdMQkEgLSBTdGFy dGluZ0xCQSArIDEsIEJsb2NrSW8tPk1lZGlhLQ0KPiA+QmxvY2tTaXplKSA+PiAyMA0KPiArICAg ICAgICAgICAgICAgICk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAg ICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICAg ICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSRU5BTUU6DQo+ICsgICAgICBNb2RQYXJhbXMuUGFydE5h bWUgPSBQYXJ0TmFtZTsNCj4gKyAgICAgIE1vZFBhcmFtcy5OZXdOYW1lICA9IE5ld1BhcnROYW1l Ow0KPiArICAgICAgU3RhdHVzID0gUGFydGl0aW9uR3B0TW9kaWZ5UGFydGl0aW9uICgNCj4gKyAg ICAgICAgRW50cnksICZNb2RQYXJhbXMsIE1PRF9SRU5BTUUpOw0KPiArICAgICAgYnJlYWs7DQo+ ICsgICAgY2FzZSBTRVRBVFRSOg0KPiArICAgICAgTW9kUGFyYW1zLkF0dHJpYnV0ZXMgPSBQYXJ0 QXR0cmlidXRlczsNCj4gKyAgICAgIFN0YXR1cyA9IFBhcnRpdGlvbkdwdE1vZGlmeVBhcnRpdGlv biAoDQo+ICsgICAgICAgIEVudHJ5LCAmTW9kUGFyYW1zLCBNT0RfQVRUUik7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICBjYXNlIFNFVFRZUEU6DQo+ICsgICAgICBNb2RQYXJhbXMuUGFydFR5cGVH dWlkID0gUGFydFR5cGVHdWlkOw0KPiArICAgICAgU3RhdHVzID0gUGFydGl0aW9uR3B0TW9kaWZ5 UGFydGl0aW9uICgNCj4gKyAgICAgICAgRW50cnksICZNb2RQYXJhbXMsIE1PRF9UWVBFKTsNCj4g KyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgSU5GTzoNCj4gKyAgICAgIFBhcnRpdGlvblByaW50 R3B0UGFydEluZm8gKEVudHJ5KTsNCj4gKyAgICAgIFN0YXR1cyA9IFNIRUxMX1NVQ0NFU1M7DQo+ ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJFQUQ6DQo+ICsgICAgY2FzZSBSRUFEX0ZJTEU6 DQo+ICsgICAgY2FzZSBXUklURToNCj4gKyAgICBjYXNlIFdSSVRFX0ZJTEU6DQo+ICsgICAgew0K PiArICAgICAgVUlOVDY0IE1heEJ5dGVzOw0KPiArICAgICAgQk9PTEVBTiBPcFJlYWQ7DQo+ICsN Cj4gKyAgICAgIE9wUmVhZCA9ICgoRmxhZyAmIFJFQUQpIHx8IChGbGFnICYgUkVBRF9GSUxFKSk7 DQo+ICsgICAgICBNYXhCeXRlcyA9IE11bHRVNjR4MzIgKA0KPiArICAgICAgICBFbnRyeS0+RW5k aW5nTEJBIC0gRW50cnktPlN0YXJ0aW5nTEJBLA0KPiArICAgICAgICBCbG9ja0lvLT5NZWRpYS0+ QmxvY2tTaXplKSArDQo+ICsgICAgICAgIEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemUgLQ0KPiAr ICAgICAgICBNdWx0VTY0eDMyIChPZmZzZXQsIEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpOw0K PiArICAgICAgaWYgKEJ5dGVDb3VudCA+IE1heEJ5dGVzKSB7DQo+ICsgICAgICAgIFN0YXR1cyA9 IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwg LTEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgKE9wUmVhZCkgPw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dQVF9SRUFEX0JPVU5EQVJZ KSA6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BUX1dS SVRFX0JPVU5EQVJZKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ0FwcE5hbWUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgRW50cnktPlBhcnRpdGlvbk5hbWUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgTWF4Qnl0ZXMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZUNv dW50DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgICBTdGF0dXMgPSBT SEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgICAgZ290byBDbGVhblVwOw0KPiArICAg ICAgfQ0KPiArDQo+ICsgICAgICBUaW1lU3RhbXBCID0gR2V0UGVyZm9ybWFuY2VDb3VudGVyICgp Ow0KPiArICAgICAgaWYgKE9wUmVhZCkgew0KPiArICAgICAgICBTdGF0dXMgPSBEaXNrSW8tPlJl YWREaXNrIChEaXNrSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJs b2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNdWx0VTY0eDMyIChPZmZzZXQgKyBFbnRyeS0+U3RhcnRpbmdMQkEsIEJsb2NrSW8tDQo+ ID5NZWRpYS0+QmxvY2tTaXplKSwgQnl0ZUNvdW50LCBCdWZmZXIpOw0KPiArICAgICAgfSBlbHNl IHsNCj4gKyAgICAgICAgU3RhdHVzID0gRGlza0lvLT5Xcml0ZURpc2sgKERpc2tJbywgQmxvY2tJ by0+TWVkaWEtPk1lZGlhSWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNdWx0VTY0eDMyIChPZmZzZXQgKyBFbnRyeS0+U3RhcnRpbmdMQkEsIEJsb2NrSW8tDQo+ID5N ZWRpYS0+QmxvY2tTaXplKSwgQnl0ZUNvdW50LCBCdWZmZXIpOw0KPiArICAgICAgfQ0KPiArICAg IH0NCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICBTdGF0dXMgPSBT SEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIFByaW50RXJyIChMIlVua25vd24gY29t bWFuZC4gVHJ5IFwiaGVscCBncHRcIiIsDQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsg ICAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgUHJpbnRFcnIgKEwiRXJyb3Igd2hpbGUgcGVyZm9ybWluZyB0cmFuc2Zl clxuIiwgU3RhdHVzKTsNCj4gKyAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0KPiArICAgIGdv dG8gQ2xlYW5VcDsNCj4gKyAgfQ0KPiArDQo+ICsgIFRpbWVTdGFtcEUgPSAoKEdldFBlcmZvcm1h bmNlQ291bnRlciAoKSAtIFRpbWVTdGFtcEIpICogMTAwMCkgLyBGcmVxOw0KPiArICBTcGVlZEtC ID0gVGltZVN0YW1wRSA/IChCeXRlQ291bnQgLyAoVGltZVN0YW1wRSAvIDEwMDApKSA+PiAxMCA6 IDA7DQo+ICsNCj4gKyAgc3dpdGNoIChGbGFnKSB7DQo+ICsgICAgY2FzZSBXUklURToNCj4gKyAg ICBjYXNlIFdSSVRFX0ZJTEU6DQo+ICsgICAgICBpZiAoIVF1aWV0KSB7DQo+ICsgICAgICAgIFNo ZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BUX1dSSVRF X09LKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZUNvdW50LA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgIE9mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeS0+UGFy dGl0aW9uTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXBFLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWVkS0INCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgICB9DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJFQUQ6DQo+ ICsgICAgICBpZiAoIVF1aWV0KSB7DQo+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0x LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BUX1JFQURfT0spLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBCeXRlQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5LT5QYXJ0aXRpb25OYW1lLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgIFRpbWVTdGFtcEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgU3BlZWRLQg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIH0NCj4g KyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUkVBRF9GSUxFOg0KPiArICAgICAgU3RhdHVzID0g RmlsZUhhbmRsZVdyaXRlIChGaWxlSGFuZGxlLCAmQnl0ZUNvdW50LCBGaWxlQnVmZmVyKTsNCj4g KyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgU2hlbGxQcmludEhp aUV4ICgtMSwgLTEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfRklMRV9XUklURV9GQUlM KSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgZ0FwcE5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgRmlsZVBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9ERVZJ Q0VfRVJST1I7DQo+ICsgICAgICAgIGdvdG8gRXJyb3JfRnJlZV9CdWZmZXI7DQo+ICsgICAgICB9 DQo+ICsNCj4gKyAgICAgIGlmICghUXVpZXQpIHsNCj4gKyAgICAgICAgU2hlbGxQcmludEhpaUV4 ICgtMSwgLTEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfUkVBREZJTEVfT0spLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBCeXRlQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg T2Zmc2V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5LT5QYXJ0aXRpb25OYW1l LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVQYXRoLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgIFRpbWVTdGFtcEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgU3Bl ZWRLQg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIH0NCj4gKyAgICAg IGJyZWFrOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZpbGVGbGFnKSB7DQo+ICsgICAgU0hFTExf RlJFRV9OT05fTlVMTCAoRmlsZUJ1ZmZlcik7DQo+ICsgICAgaWYgKEZpbGVIYW5kbGUgIT0gTlVM TCkgew0KPiArICAgICAgU2hlbGxDbG9zZUZpbGUgKCZGaWxlSGFuZGxlKTsNCj4gKyAgICAgIEZp bGVIYW5kbGUgPSBOVUxMOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9ICBT SEVMTF9TVUNDRVNTOw0KPiArDQo+ICsgRXJyb3JfRnJlZV9CdWZmZXI6DQo+ICsgIFNIRUxMX0ZS RUVfTk9OX05VTEwgKEZpbGVCdWZmZXIpOw0KPiArIEVycm9yX0Nsb3NlX0ZpbGU6DQo+ICsgIGlm IChGaWxlSGFuZGxlKSB7DQo+ICsgICAgU2hlbGxDbG9zZUZpbGUgKCZGaWxlSGFuZGxlKTsNCj4g KyAgfQ0KPiArIENsZWFuVXA6DQo+ICsgIGlmIChCbG9ja0lvSGFuZGxlKSB7DQo+ICsgICAgLy8g QnkgVUVGSSBTcGVjIGJsb2NrcyBtdXN0IGJlIGZsdXNoZWQNCj4gKyAgICBCbG9ja0lvLT5GbHVz aEJsb2NrcyAoQmxvY2tJbyk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sIChCbG9ja0lvSGFu ZGxlLCAmZ0VmaUJsb2NrSW9Qcm90b2NvbEd1aWQsDQo+IGdJbWFnZUhhbmRsZSwgTlVMTCk7DQo+ ICsgIH0NCj4gKw0KPiArICBHcHRDbGVhbnVwR2xvYmFscyAoKTsNCj4gKw0KPiArICBTaGVsbENv bW1hbmRMaW5lRnJlZVZhckxpc3QgKENoZWNrUGFja2FnZSk7DQo+ICsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFN0YXR1cyA9IFNIRUxMX0FCT1JURUQ7DQo+ICsgIH0N Cj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1NoZWxsR3B0TGliQ29uc3RydWN0b3IgKA0KPiArICBJTiBFRklfSEFORExFICAg ICAgICBJbWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxl DQo+ICsgICkNCj4gK3sNCj4gKyAgZ1NoZWxsR3B0SGlpSGFuZGxlID0gTlVMTDsNCj4gKw0KPiAr ICBnU2hlbGxHcHRIaWlIYW5kbGUgPSBIaWlBZGRQYWNrYWdlcyAoDQo+ICsgICAgJmdTaGVsbEdw dEhpaUd1aWQsIGdJbWFnZUhhbmRsZSwNCj4gKyAgICBVZWZpU2hlbGxHcHRDb21tYW5kTGliU3Ry aW5ncywgTlVMTA0KPiArICAgICk7DQo+ICsgIGlmIChnU2hlbGxHcHRIaWlIYW5kbGUgPT0gTlVM TCkgew0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAg U2hlbGxDb21tYW5kUmVnaXN0ZXJDb21tYW5kTmFtZSAoDQo+ICsgICAgZ0FwcE5hbWUsIFNoZWxs Q29tbWFuZFJ1bkdwdCwgU2hlbGxDb21tYW5kR2V0TWFuRmlsZU5hbWVHcHQsDQo+IDAsDQo+ICsg ICAgZ0FwcE5hbWUsIFRSVUUsIGdTaGVsbEdwdEhpaUhhbmRsZSwgU1RSSU5HX1RPS0VODQo+IChT VFJfR0VUX0hFTFBfR1BUKQ0KPiArICAgICk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiArfQ0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1NoZWxsR3B0TGliRGVz dHJ1Y3RvciAoDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJ TiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gKyAgKQ0KPiArew0KPiArDQo+ICsg IGlmIChnU2hlbGxHcHRIaWlIYW5kbGUgIT0gTlVMTCkgew0KPiArICAgIEhpaVJlbW92ZVBhY2th Z2VzIChnU2hlbGxHcHRIaWlIYW5kbGUpOw0KPiArICB9DQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gK30NCj4gZGlmZiAtLWdpdA0KPiBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0 Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmluZg0KPiBiL1NoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmluZg0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjFiZTRiMWFiMGYxMQ0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0 Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLmluZg0KPiBAQCAtMCwwICsxLDc5IEBA DQo+ICsjDQo+ICsjIE1hcnZlbGwgQlNEIExpY2Vuc2UgT3B0aW9uDQo+ICsjDQo+ICsjIElmIHlv dSByZWNlaXZlZCB0aGlzIEZpbGUgZnJvbSBNYXJ2ZWxsLCB5b3UgbWF5IG9wdCB0byB1c2UsIHJl ZGlzdHJpYnV0ZQ0KPiArIyBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSB1bmRlciB0aGUgZm9sbG93 aW5nIGxpY2Vuc2luZyB0ZXJtcy4NCj4gKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQo+ICsjIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUN Cj4gbWV0Og0KPiArIw0KPiArIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCj4gKyMgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCj4gKyMNCj4gKyMgKiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodA0KPiArIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlDQo+ICsjIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQo+ICsjDQo+ICsjICogTmVp dGhlciB0aGUgbmFtZSBvZiBNYXJ2ZWxsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y cyBtYXkgYmUNCj4gKyMgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dA0KPiArIyBzcGVjaWZpYyBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uDQo+ICsjDQo+ICsjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiBDT05UUklCVVRPUlMgIkFTIElTIg0KPiArIyBBTkQg QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCj4g TElNSVRFRCBUTywgVEhFDQo+ICsjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEENCj4gUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KPiArIyBESVND TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SDQo+IENPTlRS SUJVVE9SUyBCRSBMSUFCTEUNCj4gKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQo+IENPTlNFUVVFTlRJQUwNCj4gKyMgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQo+IFNVQlNU SVRVVEUgR09PRFMgT1INCj4gKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQo+IEhPV0VWRVINCj4gKyMgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwNCj4gU1RS SUNUIExJQUJJTElUWSwNCj4gKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCj4gT1VUIE9GIFRIRSBVU0UNCj4gKyMgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIDQo+ IERBTUFHRS4NCj4gKyMNCj4gKw0KPiArIw0KPiArIyBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIw MTYgQnJvYWRjb20NCj4gKyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgSU5GX1ZFUlNJT04gICAg ICAgICAgICAgICAgPSAweDAwMDEwMDA2DQo+ICsgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAg PSBVZWZpU2hlbGxHcHRDb21tYW5kTGliDQo+ICsgRklMRV9HVUlEICAgICAgICAgICAgICAgICAg PSBGNjJBQ0YyNS0wRDE1LTIyRjUtRTY0Mi1GRkI2NTE1RTAwRDcNCj4gKyBNT0RVTEVfVFlQRSAg ICAgICAgICAgICAgICA9IFVFRklfQVBQTElDQVRJT04NCj4gKyBWRVJTSU9OX1NUUklORyAgICAg ICAgICAgICA9IDAuMQ0KPiArIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgID0gTlVMTHxVRUZJ X0FQUExJQ0FUSU9OIFVFRklfRFJJVkVSDQo+ICsgQ09OU1RSVUNUT1IgICAgICAgICAgICAgICAg PSBTaGVsbEdwdExpYkNvbnN0cnVjdG9yDQo+ICsgREVTVFJVQ1RPUiAgICAgICAgICAgICAgICAg PSBTaGVsbEdwdExpYkRlc3RydWN0b3INCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgRmF0Rm9ybWF0 LmMNCj4gKyBHcHRXb3JrZXIuYw0KPiArIFVlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiArIFVl ZmlTaGVsbEdwdENvbW1hbmRMaWIudW5pDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyBNZGVNb2R1 bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArIE1kZVBrZy9NZGVQa2cuZGVjDQo+ICsgU2hlbGxQ a2cvU2hlbGxQa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gKyBCYXNlTGliDQo+ ICsgQmFzZU1lbW9yeUxpYg0KPiArIERlYnVnTGliDQo+ICsgRGV2aWNlUGF0aExpYg0KPiArIEZp bGVIYW5kbGVMaWINCj4gKyBIaWlMaWINCj4gKyBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ICsgUGNk TGliDQo+ICsgU2hlbGxDb21tYW5kTGliDQo+ICsgU2hlbGxMaWINCj4gKyBVZWZpQm9vdFNlcnZp Y2VzVGFibGVMaWINCj4gKyBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4gKyBVZWZpTGli DQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgIGdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkDQo+ICsg IGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlEaXNrSW9Qcm90b2NvbEd1aWQN Cj4gKw0KPiArW0d1aWRzXQ0KPiArIGdTaGVsbEdwdEhpaUd1aWQNCj4gKyBnRWZpUGFydFR5cGVV bnVzZWRHdWlkICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX0NPTlNVTUVTICMj IEdVSUQNCj4gZGlmZiAtLWdpdA0KPiBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29t bWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0KPiBiL1NoZWxsUGtnL0xpYnJhcnkv VWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjU1YmNiNDJjZmViMw0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKw0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29t bWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0KPiBAQCAtMCwwICsxLDExNyBAQA0K PiAr77u/LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KPiAqKioqKioqKioqKioqKioqKioqKioqDQo+ICtDb3B5cmlnaHQgKEMpIDIwMTYg TWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4gKw0KPiArTWFydmVsbCBCU0QgTGljZW5zZSBP cHRpb24NCj4gKw0KPiArSWYgeW91IHJlY2VpdmVkIHRoaXMgRmlsZSBmcm9tIE1hcnZlbGwsIHlv dSBtYXkgb3B0IHRvIHVzZSwgcmVkaXN0cmlidXRlDQo+IGFuZC9vcg0KPiArbW9kaWZ5IHRoaXMg RmlsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyB0ZXJtcy4NCj4gK1JlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0K PiBtb2RpZmljYXRpb24sDQo+ICthcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQo+ICsNCj4gKyAgICAgICAgKiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us DQo+ICsgICAgICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4NCj4gKw0KPiArICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsgICAgICAgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQ0KPiArICAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQo+ICsNCj4gKyAgICAgICAgKiBOZWl0 aGVyIHRoZSBuYW1lIG9mIE1hcnZlbGwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz IG1heSBiZQ0KPiArICAgICAgICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQo+IHdpdGhvdXQNCj4gKyAgICAgICAgICBzcGVj aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ICsNCj4gK1RISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiBDT05UUklCVVRPUlMgIkFT IElTIiBBTkQNCj4gK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sDQo+IFRIRSBJTVBMSUVEDQo+ICtXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSDQo+IFBVUlBPU0UgQVJF DQo+ICtESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S DQo+IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQo+ICtBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KPiBDT05TRVFVRU5USUFMIERBTUFH RVMNCj4gKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUw0KPiBPUiBTRVJWSUNFUzsNCj4gK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCj4gQ0FVU0VEIEFORCBP Tg0KPiArQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SDQo+IFRPUlQNCj4gKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YNCj4gVEhFIFVTRSBPRiBUSElTDQo+ICtT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4NCj4gKw0KPiArKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioqKioqKiovDQo+ICsNCj4gKy8qIFBvcnRp b25zIENvcHlyaWdodCAoQykgMjAxNiBCcm9hZGNvbSAqLw0KPiArLz0jDQo+ICsNCj4gKyNsYW5n ZGVmICAgZW4tVVMgImVuZ2xpc2giDQo+ICsNCj4gKyNzdHJpbmcgU1RSX0dFTl9QQVJBTV9JTlYg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogSW52YWxpZA0KPiBhcmd1bWVudCAtICcl SCVzJU4nXHJcbiINCj4gKyNzdHJpbmcgU1RSX0dFTl9NQVBfUFJPVE9DT0wgICAgICAjbGFuZ3Vh Z2UgZW4tVVMgIiVIJXMlTjoNCj4gTWFwcGVkIGRldmljZSAnJUIlcyVOJyBkb2VzIG5vdCBoYXZl IHByb3RvY29sICVCJXMlTlxyXG4iDQo+ICsNCj4gKyNzdHJpbmcgU1RSX0dQVF9FUlJPUiAgICAg ICAgICAgICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOiAlciAtICVzXHJcbiINCj4gKyNzdHJpbmcg U1RSX0dQVF9OT1RfRU1QVFkgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOiBXQVJOSU5H ISEhDQo+IFRoaXMgZGV2aWNlIGhhcyB2YWxpZCBHUFQgcGFydGl0aW9uIHRhYmxlcyFcclxuIg0K PiArI3N0cmluZyBTVFJfR1BUX0NMRUFSX1NVUkUgICAgICAgI2xhbmd1YWdlIGVuLVVTICJBcmUg eW91IHN1cmUgeW91IHdhbnQNCj4gdG8gY2xlYXIgdGhlIEdQVCB0YWJsZXMgb24gdGhpcyBkZXZp Y2U/ICVCWSVOZXMsICVCTiVObyAiDQo+ICsjc3RyaW5nIFNUUl9HUFRfQUJTT0xVVEVMWV9TVVJF ICAjbGFuZ3VhZ2UgZW4tVVMgIlxyXG5BcmUgeW91ICoqKg0KPiBBQlNPTFVURUxZIFNVUkUgKioq IHlvdSB3YW50IHRvIHBlcmZvcm0gdGhpcw0KPiBvcGVyYXRpb24gPyAlQlklTmVzLCAlQk4lTm8g Ig0KPiArI3N0cmluZyBTVFJfR1BUX0ZPUk1BVF9XQVJOSU5HICAgI2xhbmd1YWdlIGVuLVVTICIl SCVzJU46DQo+IFdBUk5JTkchISEgRm9ybWF0dGluZyBvZiB0aGlzIHBhcnRpdGlvbiB3aWxsIGRl c3Ryb3kgYWxsIGRhdGEgb24gaXQhXHJcbiINCj4gKyNzdHJpbmcgU1RSX0dQVF9GT1JNQVRfU1VS RSAgICAgICNsYW5ndWFnZSBlbi1VUyAiQXJlIHlvdSBzdXJlIHlvdQ0KPiB3YW50IHRvIGZvcm1h dCB0aGlzIHBhcnRpdGlvbiB0byBGQVQzMiBhbmQgZGVzdHJveSBhbGwgZGF0YSBvbg0KPiBpdCA/ ICVCWSVOZXMsICVCTiVObyAiDQo+ICsjc3RyaW5nIFNUUl9HUFRfREVMRVRFX1dBUk5JTkcgICAj bGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogRGVsZXRpbmcNCj4gb2YgdGhpcyBwYXJ0aXRpb24gd2ls bCBtYWtlIGRhdGEgb24gaXQgdW5yZWFjaGFibGUhXHJcbiINCj4gKyNzdHJpbmcgU1RSX0dQVF9S RUFEX0JPVU5EQVJZICAgICNsYW5ndWFnZSBlbi1VUyAiJUglcyVOOiBBdHRlbXB0DQo+IHRvIHJl YWQgYmV5b25kICVIJXMlTiBwYXJ0aXRpb24gYm91bmRhcnkgKGNhbiByZWFkIHVwdG8gJWxsdSBi eXRlcyBmcm9tDQo+IHRoZSBnaXZlbiBvZmZzZXQsIHJlcXVlc3RlZCAlbGx1IGJ5dGVzKVxyXG4i DQo+ICsjc3RyaW5nIFNUUl9HUFRfV1JJVEVfQk9VTkRBUlkgICAjbGFuZ3VhZ2UgZW4tVVMgIiVI JXMlTjoNCj4gQXR0ZW1wdCB0byB3cml0ZSBiZXlvbmQgJUglcyVOIHBhcnRpdGlvbiBib3VuZGFy eSAoY2FuIHdyaXRlIHVwdG8gJWxsdQ0KPiBieXRlcyBmcm9tIHRoZSBnaXZlbiBvZmZzZXQsIHJl cXVlc3RlZCAlbGx1IGJ5dGVzKVxyXG4iDQo+ICsjc3RyaW5nIFNUUl9HUFRfRklMRV9XUklURV9G QUlMICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogRmFpbGVkIHRvDQo+IHdyaXRlIHRvIHRoZSBm aWxlICVzLCBlcnJvciAlclxyXG4iDQo+ICsNCj4gKyNzdHJpbmcgU1RSX0dQVF9XUklURV9PSyAg ICAgICAgICNsYW5ndWFnZSBlbi1VUyAiV3JpdHRlbiAlbGx1IGJ5dGVzIGF0DQo+IG9mZnNldCAw eCV4LCBwYXJ0aXRpb24gJXMuIEVsYXBzZWQgdGltZSAlbGx1bXMgKCVsbHUgS0IvcylcclxuIg0K PiArI3N0cmluZyBTVFJfR1BUX1JFQURfT0sgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJSZWFk ICVsbHUgYnl0ZXMgZnJvbQ0KPiBvZmZzZXQgMHgleCwgcGFydGl0aW9uICVzLiBFbGFwc2VkIHRp bWUgJWxsdW1zICglbGx1IEtCL3MpXHJcbiINCj4gKyNzdHJpbmcgU1RSX0dQVF9SRUFERklMRV9P SyAgICAgICNsYW5ndWFnZSBlbi1VUyAiUmVhZCAlbGx1IGJ5dGVzIGZyb20NCj4gb2Zmc2V0IDB4 JXgsIHBhcnRpdGlvbiAlcyBpbnRvIGZpbGUgJXMuIEVsYXBzZWQgdGltZSAlbGx1bXMgKCVsbHUg S0IvcylcclxuIg0KPiArI3N0cmluZyBTVFJfR1BUX0xJU1RfREVWUyAgICAgICAgI2xhbmd1YWdl IGVuLVVTICIgJUglKzZzJU4gICUrOHMgICINCj4gKw0KPiArI3N0cmluZyBTVFJfR0VUX0hFTFBf R1BUICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIiDQo+ICsiLlRIIGdwdCAwICJHUFQgcGFydGl0 aW9uIG1hbmFnZXIuIlxyXG4iDQo+ICsiLlNIIE5BTUVcclxuIg0KPiArIk1hbmFnZXMgR1BUIHBh cnRpdGlvbnMgb24gYSBibG9jayBkZXZpY2UuXHJcbiINCj4gKyIuU0ggU1lOT1BTSVNcclxuIg0K PiArIiBcclxuIg0KPiArImdwdCBbcmVhZCB8IHJlYWRmaWxlIHwgd3JpdGUgfCB3cml0ZWZpbGUg fCBsaXN0IHwgaW5mbyB8IGNsZWFyIHxcclxuIg0KPiArIiAgICAgY3JlYXRlIHwgZGVsZXRlIHwg cmVuYW1lIHwgc2V0YXR0cnMgfCBzeW5jIHwgZmF0Zm9ybWF0IHwgLXR5cGVzaW5mbyB8IC15ZXNd DQo+IFxyXG4iDQo+ICsiVGhpcyBpcyBhIGNvbXBsZXggdXRpbGl0eS4gUGxlYXNlIHNlZSBleGFt cGxlcyBmb3IgdXNhZ2UgaW5mb1xyXG4iDQo+ICsiLlNIIE9QVElPTlNcclxuIg0KPiArIiBcclxu Ig0KPiArIiAgIERldmljZSAgICAgICAgLSBCbG9jayBkZXZpY2UgdG8gYmUgdXNlZCBmb3IgdGhl IG9wZXJhdGlvblxyXG4iDQo+ICsiICAgTGVuZ3RoICAgICAgICAtIE51bWJlciBvZiBieXRlcyB0 byB0cmFuc2ZlciAoZm9yIHJlYWQvd3JpdGUpKVxyXG4iDQo+ICsiICAgQWRkcmVzcyAgICAgICAt IEFkZHJlc3MgaW4gUkFNIHRvIHN0b3JlL2xvYWQgZGF0YVxyXG4iDQo+ICsiICAgT2Zmc2V0ICAg ICAgICAtIE9mZnNldCAoaW4gYmxvY2tzKSBmcm9tIGJlZ2dpbmluZyBvZiB0aGUgc3BlY2lmaWUg cGFydGl0aW9uIHRvDQo+IHN0b3JlL2xvYWQgZGF0YVxyXG4iDQo+ICsiICAgRmlsZVBhdGggICAg ICAtIFBhdGggdG8gZmlsZSB0byByZWFkIGRhdGEgaW50byBvciB3cml0ZS91cGRhdGUgZGF0YSBm cm9tXHJcbiINCj4gKyIgICAteWVzICAgICAgICAgIC0gQXNzdW1lIHllcyBmb3IgYWxsIHF1ZXJp ZXMsIGRvIG5vdCBwcm9tcHRcclxuXHJcbiINCj4gKyIuU0ggRVhBTVBMRVNcclxuIg0KPiArIiBc clxuIg0KPiArIkVYQU1QTEVTOlxyXG4iDQo+ICsiR2V0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBw YXJ0aXRpb25hYmxlIGJsb2NrIGRldmljZShzKVxyXG4iDQo+ICsiICBncHQgJUhsaXN0JU5cclxu Ig0KPiArIkdldCBpbmZvIG9uIHRoZSBwYXJ0aWN1bGFyIHBhcnRpdGlvbiB3aXRoIG5hbWUgUGFy dGl0aW9uTmFtZSBvbiB0aGUgYmxvY2sNCj4gZGV2aWNlIGJsazA6XHJcbiINCj4gKyIgIGdwdCAl SGluZm8lTiBibGswOiBQYXJ0aXRpb25OYW1lXHJcbiINCj4gKyJMaXN0IGFsbCBhdmFpbGFibGUg R1BUIHBhcnRpdGlvbnMgb24gdGhlIGJsb2NrIGRldmljZSBibGswOlxyXG4iDQo+ICsiICBncHQg bGlzdCBibGswOlxyXG4iDQo+ICsiTm90ZTogdGhlIG9yZGluYWwgbnVtYmVyIHNob3duIGJ5IHRo aXMgY29tbWFuZCBjYW4gYmUgdXNlZCBhcyBhDQo+IHBhcnRpdGlvbiBuYW1lIGluIGFueSBjb21t YW5kIHJlcXVpcmluZyBwYXJ0aXRpb24gbmFtZVxyXG4iDQo+ICsiVGh1cyBncHQgaW5mbyBibGsw OiAxIGlzIHZhbGlkIGlmIHRoZXJlIGlzIGEgcGFydGl0aW9uIHdpdGggb3JkaW5hbCAxIHByZXNl bnQgaW4NCj4gdGhlIG91dHB1dCBvZiBncHQgbGlzdCBjb21tYW5kXHJcbiINCj4gKyJHZXQgaW5m b3JtYXRpb24gb24gYWxsIHJlY29nbml6ZWQgcGFydGl0aW9uIHR5cGVzXHJcbiINCj4gKyIgIGdw dCAlSHR5cGVzaW5mbyVOXHJcbiINCj4gKyJDbGVhciBwYXJ0aXRpb25zIGluZm9ybWF0aW9uIGFu ZCBpbnN0YWxsIGVtcHR5IEdQVCB0YWJsZXMgZm9yIGEgYmxvY2sgZGV2aWNlDQo+IGJsazA6XHJc biINCj4gKyIgIGdwdCAlSGNsZWFyJU4gYmxrMDpcclxuIg0KPiArIkNyZWF0ZSBhIEdQVCBwYXJ0 aXRpb24gd2l0aCBuYW1lIFBhcnRpdGlvbk5hbWUgYW5kIHR5cGUgRUZJIFNZU1RFTSBpbg0KPiB0 aGUgR1BUIHRhYmxlLCB1c2luZyB0aGUgbmV4dCBhdmFpbGFibGUgTEJBLCB3aXRoIHNpemVcclxu Ig0KPiArIjY0TWlCLCB3aXRoIHN5c3RlbSBhdHRyaWJ1dGUsIG9uIGJsb2NrIGRldmljZSBibGsw OlxyXG4iDQo+ICsiICBncHQgJUhjcmVhdGUlTiBibGswOiBQYXJ0aXRpb25OYW1lIDAgNjQgMSAt dHlwZSAwXHJcbiINCj4gKyJTYW1lIGFzIGFib3ZlLCBidXQgbm93IHRoZSBwYXJ0aXRpb24gdHlw ZSBpcyBub3Qga25vd24gdG8gdGhlIGdwdCB1dGlsaXR5LA0KPiBzbyB1c2Ugc29tZSBHVUlEIGtu b3duIHRvIGEgM3JkIHBhcnR5XHJcbiINCj4gKyIgIGdwdCBjcmVhdGUgYmxrMDogUGFydGl0aW9u TmFtZSAwIDY0IDEgLXR5cGUgNDQ1ODFBNEEtQzgzNC1EMUE2LTI2MDItDQo+IDlENTIyQThGMjMw N1xyXG4iDQo+ICsiUmVuYW1lIHRoZSBHUFQgcGFydGl0aW9uIFBhcnRpdGlvbk5hbWUgb24gYmxr MDogdG8NCj4gTmV3UGFydGl0aW9uTmFtZVxyXG4iDQo+ICsiICBncHQgJUhyZW5hbWUlTiBibGsw OiBQYXJ0aXRpb25OYW1lIE5ld1BhcnRpdGlvbk5hbWVcclxuIg0KPiArIkhhdmUgdGhlIFBhcnRp dGlvbkR4ZSBkcml2ZXIgdG8gcmUtcmVhZCBHUFQgdGFibGVzIG9uIGEgYmxvY2sgZGV2aWNlDQo+ IGJsazA6KGFmdGVyIHRoZXkgd2VyZSB1cGRhdGVkIHdpdGggZ3B0IHV0aWxpdHkpXHJcbiINCj4g KyIgIGdwdCAlSHN5bmMlTiBibGswOlxyXG4iDQo+ICsiUmVhZCA0SyBmcm9tIGJsb2NrIG9mZnNl dCAweDBlMDAwIGluIFBhcnRpdGlvbiBuYW1lZCBQYXJ0aXRpb25OYW1lIG9mDQo+IHRoZSBibG9j ayBkZXZpY2UgYXQgYmxrMDogaW50byBSQU0gYXQgYWRkcmVzcyAweDEwMDAwMFxyXG4iDQo+ICsi ICBncHQgJUhyZWFkJU4gYmxrMDogMHgxMDAwMDAgUGFydGl0aW9uTmFtZSAweGUwMDAgNDA5Nlxy XG4iDQo+ICsiV3JpdGUgNTEyIGJ5dGVzIGZyb20gMHgyMDAwMDAgYXQgUkFNIGludG8gdGhlIGJs b2NrIGRldmljZSBhdCBibGswOg0KPiBwYXJ0aXRpb24gUGFydGl0aW9uTmFtZSBhdCBvZmZzZXQg MHgxMDAwXHJcbiINCj4gKyIgIGdwdCAlSHdyaXRlJU4gYmxrMDogMHgyMDAwMDAgUGFydGl0aW9u TmFtZSAweDEwMDAgNTEyXHJcbiINCj4gKyJSZWFkIDB4MzAwMCBieXRlcyBmcm9tIDB4MCBvZmZz ZXQgb2YgUGFydGl0aW9uIFBhcnRpdGlvbk5hbWUgYXQgdGhlIGJsb2NrDQo+IGRldmljZSBibGsw OiBpbnRvIGZpbGUgZnMyOmZpbGUuYmluXHJcbiINCj4gKyIgIGdwdCAlSHJlYWRmaWxlJU4gYmxr MDogZnMyOmZpbGUuYmluIFBhcnRpdGlvbk5hbWUgMHgwIDB4MzAwMFxyXG4iDQo+ICsiV3JpdGUg Y29udGVudHMgb2YgZmlsZSBmczI6ZmlsZS5iaW4gaW50byBwYXJ0aXRpb24gbmFtZWQgUGFydGl0 aW9uTmFtZSB3aXRoDQo+IG9mZnNldCAoaW4gbGJhKSAweDEwIG9uIGEgYmxvY2sgZGV2aWNlIGJs azA6XHJcbiINCj4gKyIgIGdwdCAlSHdyaXRlZmlsZSVOIGJsazA6IGZzMjpmaWxlLmJpbiBQYXJ0 aXRpb25OYW1lIDB4MTBcclxuIg0KPiArIkZBVCBGb3JtYXQgdGhlIHBhcnRpdGlvbiBQYXJ0aXRp b25OYW1lIG9uIGJsb2NrIGRldmljZSBibGswOlxyXG4iDQo+ICsiICBncHQgJUhmYXRmb3JtYXQl TiBibGswOiBQYXJ0aXRpb25OYW1lXHJcbiINCj4gKyJGQVQgRm9ybWF0IHRoZSB3aG9sZSBkZXZp Y2UgYmxrMDpcclxuIg0KPiArIiAgZ3B0IGZhdGZvcm1hdCBibGswOlxyXG4iDQo+ICsNCj4gKyIu U0ggUkVUVVJOVkFMVUVTXHJcbiINCj4gKyIgXHJcbiINCj4gKyJSRVRVUk4gVkFMVUVTOlxyXG4i DQo+ICsiICBTSEVMTF9TVUNDRVNTICAgICAgICAgVGhlIGFjdGlvbiB3YXMgY29tcGxldGVkIGFz IHJlcXVlc3RlZC5cclxuIg0KPiArIiAgU3BlY2lmaWMgU2hlbGwgZXJyb3IgIEVycm9yIHdoaWxl IHByb2Nlc3NpbmcgY29tbWFuZFxyXG4iDQo+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9TaGVsbFBr Zy5kZWMgYi9TaGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gaW5kZXggMzlmODAxMmI5OGMxLi41Mzc0 YTJhNjJkNWYgMTAwNjQ0DQo+IC0tLSBhL1NoZWxsUGtnL1NoZWxsUGtnLmRlYw0KPiArKysgYi9T aGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gQEAgLTU2LDYgKzU2LDcgQEAgW0d1aWRzXQ0KPiAgICBn U2hlbGxOZXR3b3JrMkhpaUd1aWQgICAgICAgICAgID0gezB4MTc0YjJiNSwgMHhmNTA1LCAweDRi MTIsIHsweGFhLCAweDYwLA0KPiAweDU5LCAweGRmLCAweGY4LCAweGQ2LCAweGVhLCAweDM3fX0N Cj4gICAgZ1NoZWxsVGZ0cEhpaUd1aWQgICAgICAgICAgICAgICA9IHsweDczOGE5MzE0LCAweDgy YzEsIDB4NDU5MiwgezB4OGYsIDB4ZjcsIDB4YzEsDQo+IDB4YmQsIDB4ZjEsIDB4YjIsIDB4MGUs IDB4ZDR9fQ0KPiAgICBnU2hlbGxCY2ZnSGlpR3VpZCAgICAgICAgICAgICAgID0gezB4NWY1ZjYw NWQsIDB4MTU4MywgMHg0YTJkLCB7MHhhNiwgMHhiMiwgMHhlYiwNCj4gMHgxMiwgMHhkYSwgMHhi NCwgMHhhMiwgMHhiNn19DQo+ICsgIGdTaGVsbEdwdEhpaUd1aWQgICAgICAgICAgICAgICAgPSB7 MHg1YTFlZDczOSwgMHg1ZWYxLCAweDQyOWEsIHsweDhkLCAweGY4LCAweDI4LA0KPiAweGM5LCAw eDkyLCAweDY0LCAweGQ3LCAweGY4fX0NCj4gDQo+ICBbUHJvdG9jb2xzXQ0KPiAgICBnRWZpU2hl bGxQcm90b2NvbEd1aWQgICAgICAgICAgICAgICA9IHsweDYzMDJkMDA4LCAweDdmOWIsIDB4NGYz MCwgezB4ODcsIDB4YWMsDQo+IDB4NjAsIDB4YzksIDB4ZmUsIDB4ZjUsIDB4ZGEsIDB4NGV9fQ0K PiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvU2hlbGxQa2cuZHNjIGIvU2hlbGxQa2cvU2hlbGxQa2cu ZHNjDQo+IGluZGV4IDgwOWJkNDIyMGFmMi4uOTg0YzFkMGFkNDhiIDEwMDY0NA0KPiAtLS0gYS9T aGVsbFBrZy9TaGVsbFBrZy5kc2MNCj4gKysrIGIvU2hlbGxQa2cvU2hlbGxQa2cuZHNjDQo+IEBA IC04OSw2ICs4OSw3IEBAIFtDb21wb25lbnRzXQ0KPiANCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZp U2hlbGxMZXZlbDJDb21tYW5kc0xpYi9VZWZpU2hlbGxMZXZlbDJDb21tYW5kc0xpYg0KPiAuaW5m DQo+IA0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbExldmVsM0NvbW1hbmRzTGliL1VlZmlT aGVsbExldmVsM0NvbW1hbmRzTGliDQo+IC5pbmYNCj4gDQo+IFNoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsRHJpdmVyMUNvbW1hbmRzTGliL1VlZmlTaGVsbERyaXZlcjFDb21tYW5kc0wNCj4gaWIu aW5mDQo+ICsgIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hl bGxHcHRDb21tYW5kTGliLmluZg0KPiANCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxJbnN0 YWxsMUNvbW1hbmRzTGliL1VlZmlTaGVsbEluc3RhbGwxQ29tbWFuZHNMaQ0KPiBiLmluZg0KPiAN Cj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxEZWJ1ZzFDb21tYW5kc0xpYi9VZWZpU2hlbGxE ZWJ1ZzFDb21tYW5kcw0KPiBMaWIuaW5mDQo+IA0KPiBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bE5ldHdvcmsxQ29tbWFuZHNMaWIvVWVmaVNoZWxsTmV0d29yazFDb21tDQo+IGFuZHNMaWIuaW5m DQo+IEBAIC0xMTksNiArMTIwLDkgQEAgW0NvbXBvbmVudHNdDQo+ICAhaWZkZWYgJChJTkNMVURF X1RGVFBfQ09NTUFORCkNCj4gDQo+IE5VTEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxUZnRw Q29tbWFuZExpYi9VZWZpU2hlbGxUZnRwQ29tbWFuZExpYg0KPiAuaW5mDQo+ICAhZW5kaWYgIyQo SU5DTFVERV9URlRQX0NPTU1BTkQpDQo+ICshaWZkZWYgJChJTkNMVURFX0dQVF9DT01NQU5EKQ0K PiArDQo+IE5VTEx8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlT aGVsbEdwdENvbW1hbmRMaWIuDQo+IGluZg0KPiArIWVuZGlmICMkKElOQ0xVREVfR1BUX0NPTU1B TkQpDQo+ICAhZW5kaWYgIyQoTk9fU0hFTExfUFJPRklMRVMpDQo+ICAgIH0NCj4gDQo+IC0tDQo+ IDEuOS4xDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f DQplZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCmh0dHBz Oi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0K