From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 43BD01A1E30 for ; Tue, 11 Oct 2016 01:08:19 -0700 (PDT) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP; 11 Oct 2016 01:08:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,476,1473145200"; d="scan'208,217";a="888788493" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga003.jf.intel.com with ESMTP; 11 Oct 2016 01:08:17 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 11 Oct 2016 01:08:14 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.101]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.234]) with mapi id 14.03.0248.002; Tue, 11 Oct 2016 16:08:09 +0800 From: "Ni, Ruiyu" To: "Carsey, Jaben" , "Rothman, Michael A" , "Yao, Jiewen" , "Kinney, Michael D" , "edk2-devel@lists.01.org" CC: "Tian, Feng" , "Zhang, Chao B" , "Gao, Liming" , "Zeng, Star" Thread-Topic: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. Thread-Index: AQHSGe3EKzbbi+OGYkeIlbtytI+k5KCPOtUAgADHS0CAAE5JAIABGHSAgAA8bgCABOqvAIAAIjoAgAxGXSA= Date: Tue, 11 Oct 2016 08:08:09 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D58E181D1@SHSMSX104.ccr.corp.intel.com> References: <1474440326-9292-1-git-send-email-jiewen.yao@intel.com> <1474440326-9292-18-git-send-email-jiewen.yao@intel.com> <74D8A39837DF1E4DA445A8C0B3885C503869ADBD@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0E64C@SHSMSX104.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0F608@SHSMSX104.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 11 Oct 2016 08:21:32 -0700 X-Content-Filtered-By: Mailman/MimeDel 2.1.21 Subject: Re: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. 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, 11 Oct 2016 08:08:19 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SmFiZW4sDQpIb3cgYWJvdXQgbW92aW5nIHRoZSBjb250ZW50cyBpbiBTaGVsbFBrZ1xJbmNsdWRl XFByb3RvY29sXCB0byBNZGVQa2dcSW5jbHVkZVxQcm90b2NvbFw/DQpBbGwgaW5kdXN0cnkgc3Rh bmRhcmQgcHJvdG9jb2xzIGFyZSBkZWZpbmVkIGluIE1kZVBrZywgZXhjZXB0IHRoZSBTaGVsbCBy ZWxhdGVkIHByb3RvY29scy4NCg0KVGhhbmtzL1JheQ0KDQpGcm9tOiBDYXJzZXksIEphYmVuDQpT ZW50OiBUdWVzZGF5LCBPY3RvYmVyIDQsIDIwMTYgNDozOCBBTQ0KVG86IFJvdGhtYW4sIE1pY2hh ZWwgQSA8bWljaGFlbC5hLnJvdGhtYW5AaW50ZWwuY29tPjsgTmksIFJ1aXl1IDxydWl5dS5uaUBp bnRlbC5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBLaW5uZXksIE1p Y2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZw0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb20+OyBaaGFuZywgQ2hhbyBC IDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwu Y29tPjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IENhcnNleSwgSmFiZW4gPGph YmVuLmNhcnNleUBpbnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1 bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQoNCkkgZG9u4oCZ dCB0aGluayB0aGF0IGlzIHdoYXQgSSBtZWFudC4gIEl04oCZcyBhIHN0cmluZyBhbmQgYSBsZW5n dGgsIG5vdCBhIHN0cnVjdHVyZS4NCg0KSSBtZWFuIGNsYXJpZnkgdGhlIGZvbGxvd2luZzoNCg0K MSkgICAgICBJcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGl0c2VsZiBpbiB0aGUgTG9hZE9wdGlv bnMgc3RyaW5nIGFzIHRoZSBmaXJzdCBvcHRpb24gb3Igbm90IHRoZXJlIGF0IGFsbD8NCg0KMikg ICAgICBUaGVuIGNsYXJpZnkgdGhhdCBhbGwgUGFyYW1ldGVycyBhcmUgc3BhY2UgZGVsaW1pdGVk Lg0KDQpGcm9tOiBSb3RobWFuLCBNaWNoYWVsIEENClNlbnQ6IE1vbmRheSwgT2N0b2JlciAwMywg MjAxNiAxMTozNiBBTQ0KVG86IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20+ OyBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFv QGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNv bT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGlu dGVsLmNvbT47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+OyBHYW8sIExp bWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwu Y29tPjsgUm90aG1hbiwgTWljaGFlbCBBIDxtaWNoYWVsLmEucm90aG1hbkBpbnRlbC5jb20+DQpT dWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENh cHN1bGVBcHAgYXBwbGljYXRpb24uDQpJbXBvcnRhbmNlOiBIaWdoDQoNCllvdSBtZWFuIHVwZGF0 ZSB0aGUgTG9hZE9wdGlvbnMgcmVmZXJlbmNlIHRvIHJlZmVyIHRvIHRoZSBFRklfTE9BRF9PUFRJ T04gc3RydWN0dXJlPyBCZWNhdXNlIHRoYXTigJlzIGluIGVzc2VuY2Ugd2hhdCBpdCBtZWFucy4N Cg0KVGhhbmtzLA0KTWlrZSBSb3RobWFuDQoo6L+I5YWLIOe9l+aWr+abvCAvIOCkruCkvuCkh+Ck leCksiDgpLDgpYvgpKXgpY3gpK7gpYfgpKjgpY0gLyDQnNC40YXQsNC40Lsg0KDQvtGC0LzQsNC9 IC8g157XqdeUINeo15XXmNee158pDQrXqNeV16LXlCDXoteZ16fXqNeZINep15wg15fXqteV15zX mdedDQoNCkZyb206IENhcnNleSwgSmFiZW4NClNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDMwLCAy MDE2IDg6MzEgQU0NClRvOiBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbTxtYWlsdG86cnVp eXUubmlAaW50ZWwuY29tPj47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWls dG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5r aW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsy LWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+OyBSb3Ro bWFuLCBNaWNoYWVsIEEgPG1pY2hhZWwuYS5yb3RobWFuQGludGVsLmNvbTxtYWlsdG86bWljaGFl bC5hLnJvdGhtYW5AaW50ZWwuY29tPj4NCkNjOiBUaWFuLCBGZW5nIDxmZW5nLnRpYW5AaW50ZWwu Y29tPG1haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56 aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgR2FvLCBMaW1p bmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBa ZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29t Pj47IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb208bWFpbHRvOmphYmVuLmNh cnNleUBpbnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRlTW9kdWxlUGtn L0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0KDQpNaWtlIFJvdGhtYW4s DQoNCkNhbiB3ZSBnZXQgTG9hZE9wdGlvbnMgYW5kIExvYWRPcHRpb25zU2l6ZSBjbGFyaWZpZWQg aW4gdGhlIFVFRkkgU3BlYz8gIFRoaXMgc2VlbXMgbGlrZSBhIHNpbXBsZSBjbGFyaWZpY2F0aW9u IGFuZCBJIHdvdWxkIGFyZ3VlIGl0cyBuZWVkZWQuICBUaGUgVUVGSSBTaGVsbCBpcyBub3QgdGhl IG9ubHkgcHJvZHVjZXIgb2YgdGhpcyBwcm90b2NvbC4gIEJEUyBsYXVuY2hlcyB0aGluZ3MgKGxp a2UgdGhlIFVFRkkgU2hlbGwgaXRzZWxmKSBhbmQgdGhlIHNoZWxsIGFscmVhZHkgY29uc3VtZXMg aXQgZm9yIGl0c2VsZiAoYW5kIGl0IHdvcmtzKS4gIEkgdGhpbmsgaXQganVzdCBuZWVkcyBjbGFy aWZpY2F0aW9uIHNvIHBlb3BsZSBjYW4gZGVwZW5kIG9uIHRoZSBjdXJyZW50IGltcGxlbWVudGF0 aW9uIG5vdCBjaGFuZ2luZy4NCg0KLUphYmVuDQoNCkZyb206IE5pLCBSdWl5dQ0KU2VudDogVGh1 cnNkYXksIFNlcHRlbWJlciAyOSwgMjAxNiA5OjEzIFBNDQpUbzogQ2Fyc2V5LCBKYWJlbiA8amFi ZW4uY2Fyc2V5QGludGVsLmNvbTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+OyBZYW8s IEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29t Pj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFp bHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBp bnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hh by5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8s IExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29t Pj47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRl bC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVB cHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0KSW1wb3J0YW5jZTogSGlnaA0KDQpTdXBw b3NpbmcgdXNlciBpbnB1dHMg4oCcQ2Fwc3VsZUFwcC5lZmkgUGFyYW1ldGVyMSBQYXJhbWV0ZXIy 4oCdLg0KVGhlcmUgaXMgbm8gc3BlYyB0byBkZWZpbmUgd2hhdCB0aGUgTG9hZE9wdGlvbiBzaG91 bGQgZXF1YWwgdG8uDQpJZiB0aGVyZSBpcyBhbm90aGVyIFVFRkkgU2hlbGwgaW1wbGVtZW50YXRp b24sIGl0IGNvdWxkIGludGVycHJldCB0aGUgY29tbWFuZCBsaW5lIHRoZW4gc2V0cyBvbmx5IOKA nFBhcmFtZXRlcjEgUGFyYW1ldGVyMuKAnSBpbnRvIExvYWRPcHRpb24sIG9yIHNldHMg4oCcQ2Fw c3VsZUFwcC5lZmlcdFBhcmFtZXRlcjFcdFBhcmFtZXRlcjLigJ0gdG8gTG9hZE9wdGlvbiwgb3Ig c2V0cyDigJxbU2hlbGxdXHRDYXBzdWxlQXBwLmVmaVx0UGFyYW1ldGVyMVx0UGFyYW1ldGVyMuKA nSB0byBMb2FkT3B0aW9uLg0KQmVjYXVzZSBpdOKAnHByb2R1Y2Vz4oCdIHN1Y2ggTG9hZE9wdGlv biwgaXQga25vd3MgaG93IHRvIOKAnGNvbnN1bWXigJ0vcGFyc2UgaXQgdG8gZ2V0IHRoZSBBUkdW cy4NCg0KU28gSSBzdWdnZXN0IHdlIHB1dCB0aGUgQ2Fwc3VsZUFwcCBpbiBTaGVsbFBrZyBhbmQg bGV0IGl0IHVzZSB0aGUgU2hlbGxQYXJhbWV0ZXIgcHJvdG9jb2wuDQoNClJlZ2FyZHMsDQpSYXkN Cg0KRnJvbTogQ2Fyc2V5LCBKYWJlbg0KU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMzAsIDIwMTYg MzoxMSBBTQ0KVG86IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPG1haWx0bzpydWl5dS5u aUBpbnRlbC5jb20+PjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpq aWV3ZW4ueWFvQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCkNjOiBUaWFu LCBGZW5nIDxmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPj47 IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFu Z0BpbnRlbC5jb20+PjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzps aW1pbmcuZ2FvQGludGVsLmNvbT4+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPG1h aWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPj47IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBp bnRlbC5jb208bWFpbHRvOmphYmVuLmNhcnNleUBpbnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IFtQ QVRDSCAxNy80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxp Y2F0aW9uLg0KDQpJIGFtIGNvbmZ1c2VkLg0KDQpXaHkgaXMgTG9hZE9wdGlvbiBhbmQgTG9hZE9w dGlvblNpemUgbm90IHdvcmtpbmc/ICBUaGlzIGlzIHNwZWNpZmllZCBhcyBwYXJ0IG9mIFVFRkkg U3BlYyAoTm90ZTogTm90IFVFRkkgU2hlbGwgU3BlYykgYXMgYSBzdGFuZGFyZCB3YXkgdG8gcGFz cyBwYXJhbWV0ZXJzIHRvIFVFRkkgYXBwbGlhdGlvbnMuICBJIHRoaW5rIHRoaXMgc2hvdWxkIHdv cmsgKGFsdGhvdWdoIGl0IGlzIG1vcmUgd29yayB0aGFuIGp1c3QgZXhhbWluaW5nIGFyZ2MvYXJn dikuDQoNCi1KYWJlbg0KDQpGcm9tOiBOaSwgUnVpeXUNClNlbnQ6IFdlZG5lc2RheSwgU2VwdGVt YmVyIDI4LCAyMDE2IDExOjQwIFBNDQpUbzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwu Y29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9y Zz4NCkNjOiBUaWFuLCBGZW5nIDxmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5A aW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRv OmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwu Y29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdA aW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPj47IENhcnNleSwgSmFiZW4gPGph YmVuLmNhcnNleUBpbnRlbC5jb208bWFpbHRvOmphYmVuLmNhcnNleUBpbnRlbC5jb20+Pg0KU3Vi amVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBz dWxlQXBwIGFwcGxpY2F0aW9uLg0KSW1wb3J0YW5jZTogSGlnaA0KDQpKaWV3ZW4sDQpUaGUgd2F5 IENhcHN1bGVBcHAgZXh0cmFjdHMgdGhlIEFSR1YgYXNzdW1lcyBVRUZJIFNoZWxsIGVuY29kZXMg dGhlIHBhcmFtZXRlcnMgdXNpbmcgYSBjZXJ0YWluIHdheS4gQnV0IHRoZSBwYXJhbWV0ZXIgZW5j b2Rpbmcgd2F5IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFNoZWxsIHNwZWMuDQpNYXliZSB3ZSBj YW4gcHV0IHRoZSBDYXBzdWxlQXBwIGluIFNoZWxsUGtnLCB0aGVuIGxldCBpdCBkaXJlY3RseSB1 c2UgU2hlbGxQYXJhbWV0ZXIgcHJvdG9jb2wgdG8gZ2V0IHRoZSBBUkdWLg0KDQpDb3B5aW5nIEph YmVuLg0KDQpSZWdhcmRzLA0KUmF5DQoNCkZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsyLWRl dmVsLWJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbiBCZWhhbGYgT2YgWWFvLCBKaWV3ZW4NClNlbnQ6 IFRodXJzZGF5LCBTZXB0ZW1iZXIgMjksIDIwMTYgMTA6MzcgQU0NClRvOiBLaW5uZXksIE1pY2hh ZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxp c3RzLjAxLm9yZz4NCkNjOiBUaWFuLCBGZW5nIDxmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpm ZW5nLnRpYW5AaW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5j b208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgR2FvLCBMaW1pbmcgPGxpbWluZy5n YW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBaZW5nLCBTdGFyIDxz dGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPj4NClN1YmplY3Q6 IFJlOiBbZWRrMl0gW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENh cHN1bGVBcHAgYXBwbGljYXRpb24uDQoNClJpZ2h0LiBDYXBzdWxlT25EaXNrIGlzIG5vdCBzdXBw b3J0ZWQgaW4gQklPUyB5ZXQuDQpJIHdpbGwgcmVtb3ZlIGl0IGluIENhcHN1bGVBcHAuDQoNCkNh cHN1bGVBcHAganVzdCB3b3JrcyBhcyBhbiBhZ2VudCB0byBwYXNzIGNhcHN1bGUgdG8gQ2Fwc3Vs ZUR4ZVJ1bnRpbWUgZHJpdmVyLg0KU28gaXQgaXMgY2hlY2tlZCBieSBDYXBzdWxlRHhlUnVudGlt ZSwgbm90IENhcHN1bGVBcHAuDQoNClRoYW5rIHlvdQ0KWWFvIEppZXdlbg0KDQpGcm9tOiBLaW5u ZXksIE1pY2hhZWwgRA0KU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAyOSwgMjAxNiA5OjA2IEFN DQpUbzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFv QGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBs aXN0cy4wMS5vcmc+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4NCkNjOiBUaWFuLCBGZW5nIDxm ZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPj47IFplbmcsIFN0 YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+PjsgR2Fv LCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNv bT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIu emhhbmdAaW50ZWwuY29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBr Zy9DYXBzdWxlQXBwOiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCg0KSmlld2VuLA0KDQpE b2VzIHRoZSBjYXBzdWxlIG9uIGRpc2sgZmVhdHVyZSBwcm92aWRlZCBieSB0aGlzIGFwcCB3b3Jr Pw0KDQpJIHRyaWVkIGl0IHdpdGggdGhlIFF1YXJrUGxhdGZvcm1Qa2cgY2Fwc3VsZSBhbmQgSSBj YW4gZ2V0DQpUaGUgYXBwIHRvIGNvcHkgdGhlIGNhcHN1bGUgdG8gYW4gRUZJIFN5c3RlbSBQYXJ0 aXRpb24sIGJ1dA0KVGhlIGxvZ2ljIGFmdGVyIHRoYXQgcG9pbnQgbG9va3MgaW5jb21wbGV0ZS4N Cg0KQWxzbywgaWYgSSBjbGVhciB0aGUgUGVyc2lzdCBhbmQgUmVzZXQgZmxhZ3Mgb24gdGhlIGNh cHN1bGUsDQp0aGUgaW1tZWRpYXRlIHByb2Nlc3Npbmcgb2YgdGhlIGNhcHN1bGUgZG9lcyBub3Qg d29yay4NCg0KSXMgdGhlcmUgYW55IEZXIGNvZGUgdGhhdCB3aWxsIGxvb2sgZm9yIGNhcHN1bGVz IG9uIGRpc2s/DQoNCklmIHRoZXJlIGFyZSBpbmNvbXBsZXRlIGZlYXR1cmVzIGluIENhcHN1bGVB cHAsIHRoZW4gSSB0aGluaw0Kd2Ugc2hvdWxkIHJlbW92ZSB0aGVtLg0KDQpNaWtlDQoNCj4gLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWFvLCBKaWV3ZW4NCj4gU2VudDogVHVl c2RheSwgU2VwdGVtYmVyIDIwLCAyMDE2IDExOjQ1IFBNDQo+IFRvOiBlZGsyLWRldmVsQGxpc3Rz LjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxA bGlzdHMuMDEub3JnJTNjbWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPj4NCj4gQ2M6IFRp YW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb208 bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20lM2NtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+ PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVs LmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbSUzY21haWx0bzpzdGFyLnplbmdAaW50ZWwu Y29tPj4+OyBLaW5uZXksIE1pY2hhZWwNCj4gRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208 bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbSUzY21haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+PjsgR2FvLCBM aW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbTxt YWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20lM2NtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+ Pj47IFpoYW5nLCBDaGFvIEINCj4gPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8u Yi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20lM2NtYWlsdG86 Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+Pg0KPiBTdWJqZWN0OiBbUEFUQ0ggMTcvNDVdIE1kZU1v ZHVsZVBrZy9DYXBzdWxlQXBwOiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCj4NCj4gVGhp cyBDYXBzdWxlQXBwIGNhbiBoZWxwIHBlcmZvcm0gY2Fwc3VsZSB1cGRhdGUgaW4gVUVGSSBzaGVs bCBlbnZpcm9ubWVudC4NCj4gSXQgY2FuIGFsc28gZHVtcCBjYXBzdWxlIGluZm9ybWF0aW9uLCBj YXBzdWxlIHN0YXR1cyB2YXJpYWJsZSwgRVNSVCBhbmQgRk1QLg0KPg0KPiBDYzogRmVuZyBUaWFu IDxmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpm ZW5nLnRpYW5AaW50ZWwuY29tJTNjbWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+Pj4NCj4gQ2M6 IFN0YXIgWmVuZyA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNv bTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbSUzY21haWx0bzpzdGFyLnplbmdAaW50ZWwuY29t Pj4+DQo+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxt YWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tJTNjbWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4+DQo+IENjOiBM aW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5j b208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tJTNjbWFpbHRvOmxpbWluZy5nYW9AaW50ZWwu Y29tPj4+DQo+IENjOiBDaGFvIFpoYW5nIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpj aGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tJTNjbWFp bHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+Pj4NCj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5v Q29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMA0KPiBTaWduZWQtb2ZmLWJ5OiBKaWV3ZW4g WWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb208bWFp bHRvOmppZXdlbi55YW9AaW50ZWwuY29tJTNjbWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj4+ DQo+IC0tLQ0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQXBwU3VwcG9y dC5jICAgICAgICB8ICA0ODAgKysrKysrKysrDQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24v Q2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmMgICAgICAgIHwgMTA0NyArKysrKysrKysrKysrKysrKysr Kw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5pbmYg ICAgICB8ICAgNzEgKysNCj4gIE1kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0Nh cHN1bGVBcHAudW5pICAgICAgfCAgIDIyICsNCj4gIE1kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9D YXBzdWxlQXBwL0NhcHN1bGVBcHBFeHRyYS51bmkgfCAgIDE5ICsNCj4gIE1kZU1vZHVsZVBrZy9B cHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVEdW1wLmMgICAgICAgfCAgODQwICsrKysrKysr KysrKysrKysNCj4gIDYgZmlsZXMgY2hhbmdlZCwgMjQ3OSBpbnNlcnRpb25zKCspDQo+DQo+IGRp ZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9BcHBTdXBwb3J0 LmMNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9BcHBTdXBwb3J0LmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMzY1MDY3ZA0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0Fw cFN1cHBvcnQuYw0KPiBAQCAtMCwwICsxLDQ4MCBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEEgc2hl bGwgYXBwbGljYXRpb24gdGhhdCB0cmlnZ2VycyBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLg0KPiAr DQo+ICsgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0 ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBh bmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5 IGJlIGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGlj ZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUg QlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVT IE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElF RC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9CYXNlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkv TWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2 aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2Vz VGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTG9hZGVkSW1hZ2Uu aD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9TaW1wbGVGaWxlU3lzdGVtLmg+DQo+ICsjaW5jbHVk ZSA8R3VpZC9GaWxlSW5mby5oPg0KPiArI2luY2x1ZGUgPEd1aWQvR3B0Lmg+DQo+ICsNCj4gKyNk ZWZpbmUgTUFYX0FSR19OVU0gICAgIDExDQo+ICsNCj4gK1VJTlROICBBcmdjID0gMDsNCj4gK0NI QVIxNiAqQXJndltNQVhfQVJHX05VTV07DQo+ICtDSEFSMTYgKkFyZ0J1ZmZlcjsNCj4gKw0KPiAr LyoqDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBwYXJzZSBhcHBsaWNhdGlvbiBBUkcuDQo+ICsN Cj4gKyAgQHJldHVybiBTdGF0dXMNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArR2V0QXJnICgN Cj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICpEYXRhOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZTsN Cj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKkluZGV4Ow0KPiArICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICAqRW5kOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAg ICAgICAgICAqREluZGV4Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIEVGSV9MT0FERURfSU1BR0VfUFJPVE9DT0wgICAgICpMb2FkZWRJbWFnZTsNCj4g Kw0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAg ICAgIGdJbWFnZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpTG9hZGVkSW1hZ2VQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCoqKSZMb2FkZWRJbWFnZQ0K PiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIERhdGEgPSBMb2FkZWRJbWFn ZS0+TG9hZE9wdGlvbnM7DQo+ICsgIERhdGFTaXplID0gTG9hZGVkSW1hZ2UtPkxvYWRPcHRpb25z U2l6ZTsNCj4gKw0KPiArICBFbmQgPSAoQ0hBUjE2KikoVUlOVE4pKERhdGEgKyBEYXRhU2l6ZSk7 DQo+ICsgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlCb290U2VydmljZXNEYXRhLCBE YXRhU2l6ZSwgKFZPSUQgKiopJkFyZ0J1ZmZlcik7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQo+ICsgIERJbmRleCA9IEFyZ0J1ZmZlcjsNCj4gKyAgQXJndltBcmdjKytdID0gQXJn QnVmZmVyOw0KPiArICBmb3IgKEluZGV4ID0gKENIQVIxNiopRGF0YTsgSW5kZXggPCBFbmQ7ICkg ew0KPiArICAgIGlmICgqSW5kZXggPT0gTCcgJykgew0KPiArICAgICAgKkRJbmRleCA9IEwnXDAn Ow0KPiArICAgICAgaWYgKEFyZ2MgPj0gTUFYX0FSR19OVU0pIHsNCj4gKyAgICAgICAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgICAgIH0NCj4gKyAgICAgIEFyZ3ZbQXJnYysrXSA9ICgr KyBESW5kZXgpOw0KPiArICAgICAgd2hpbGUoKkluZGV4ID09IEwnICcpIHsNCj4gKyAgICAgICAg SW5kZXggKys7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICAgICgqKERJbmRleCArKykpID0g KCooSW5kZXggKyspKTsNCj4gKyAgfQ0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDbGVhciBBUFAgQVJHLg0KPiArKiovDQo+ICtWT0lEDQo+ICtDbGVh bkFyZyAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBGcmVlUG9vbCAoQXJndlswXSk7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm4gRmlsZSBTeXN0ZW0gVm9sdW1lIGNvbnRh aW5pbmcgdGhpcyBzaGVsbCBhcHBsaWNhdGlvbi4NCj4gKw0KPiArICBAcmV0dXJuIEZpbGUgU3lz dGVtIFZvbHVtZSBjb250YWluaW5nIHRoaXMgc2hlbGwgYXBwbGljYXRpb24uDQo+ICsqKi8NCj4g K0VGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgKg0KPiArR2V0TXlWb2wgKA0KPiArICBW T0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCj4gKyAgRUZJX0xPQURFRF9JTUFHRV9QUk9UT0NPTCAgICAgICAgICpMb2FkZWRJ bWFnZTsNCj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAgICpWb2w7DQo+ICsN Cj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAg ICBnSW1hZ2VIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaUxvYWRlZEltYWdlUHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJkxvYWRlZEltYWdlDQo+ ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K PiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgTG9hZGVkSW1hZ2UtPkRldmljZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZn RWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChW T0lEICoqKSZWb2wNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFZvbDsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVy biBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZCBhIGZpbGUgZnJvbSB0aGlzIHZv bHVtZS4NCj4gKw0KPiArICBAcGFyYW0gVm9sICAgICAgICAgICAgIEZpbGUgU3lzdGVtIFZvbHVt ZQ0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRoZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsg IEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFt IEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZmZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgIFJlYWQgZmlsZSBzdWNjZXNzZnVsbHkNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICBGaWxlIG5vdCBmb3VuZA0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSZWFkRmlsZUZy b21Wb2wgKA0KPiArICBJTiAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAgICpWb2ws DQo+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0K PiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0K PiArICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAgIFJvb3REaXI7DQo+ICsgIEVG SV9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWxlSW5mb1NpemU7DQo+ICsgIEVGSV9GSUxFX0lORk8g ICAgICAgICAgICAgICAgICAgICAqRmlsZUluZm87DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUZW1wQnVmZmVyU2l6ZTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpUZW1wQnVmZmVyOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE9wZW4gdGhl IHJvb3QgZGlyZWN0b3J5DQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFZvbC0+T3BlblZvbHVtZSAo Vm9sLCAmUm9vdERpcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gT3BlbiB0aGUgZmls ZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBSb290RGlyLT5PcGVuICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBSb290RGlyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgRmlsZU5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgRUZJX0ZJTEVfTU9ERV9SRUFELA0KPiArICAgICAgICAgICAgICAgICAgICAgIDANCj4gKyAg ICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgUm9vdERpci0+Q2xvc2UgKFJvb3REaXIpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKw0KPiArICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gR2V0IHRoZSBmaWxlIGluZm9ybWF0aW9uDQo+ICsgIC8vDQo+ICsgIEZpbGVJbmZv U2l6ZSA9IHNpemVvZihFRklfRklMRV9JTkZPKSArIDEwMjQ7DQo+ICsNCj4gKyAgRmlsZUluZm8g PSBBbGxvY2F0ZVplcm9Qb29sIChGaWxlSW5mb1NpemUpOw0KPiArICBpZiAoRmlsZUluZm8gPT0g TlVMTCkgew0KPiArICAgIEhhbmRsZS0+Q2xvc2UgKEhhbmRsZSk7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEhhbmRsZS0+R2V0SW5mbyAoDQo+ICsg ICAgICAgICAgICAgICAgICAgICBIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAmZ0Vm aUZpbGVJbmZvR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICZGaWxlSW5mb1NpemUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICBGaWxlSW5mbw0KPiArICAgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEhhbmRsZS0+Q2xvc2Ug KEhhbmRsZSk7DQo+ICsgICAgZ0JTLT5GcmVlUG9vbCAoRmlsZUluZm8pOw0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBBbGxvY2F0ZSBidWZmZXIg Zm9yIHRoZSBmaWxlIGRhdGEuIFRoZSBsYXN0IENIQVIxNiBpcyBmb3IgTCdcMCcNCj4gKyAgLy8N Cj4gKyAgVGVtcEJ1ZmZlclNpemUgPSAoVUlOVE4pIEZpbGVJbmZvLT5GaWxlU2l6ZSArIHNpemVv ZihDSEFSMTYpOw0KPiArICBUZW1wQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoVGVtcEJ1ZmZl clNpemUpOw0KPiArICBpZiAoVGVtcEJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgSGFuZGxlLT5D bG9zZSAoSGFuZGxlKTsNCj4gKyAgICBnQlMtPkZyZWVQb29sIChGaWxlSW5mbyk7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGdCUy0+RnJlZVBvb2wgKEZpbGVJbmZv KTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBSZWFkIHRoZSBmaWxlIGRhdGEgdG8gdGhlIGJ1ZmZl cg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBIYW5kbGUtPlJlYWQgKA0KPiArICAgICAgICAgICAg ICAgICAgICAgSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgJlRlbXBCdWZmZXJTaXpl LA0KPiArICAgICAgICAgICAgICAgICAgICAgVGVtcEJ1ZmZlcg0KPiArICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEhhbmRsZS0+ Q2xvc2UgKEhhbmRsZSk7DQo+ICsgICAgZ0JTLT5GcmVlUG9vbCAoVGVtcEJ1ZmZlcik7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIEhhbmRsZS0+Q2xvc2UgKEhhbmRs ZSk7DQo+ICsNCj4gKyAgKkJ1ZmZlclNpemUgPSBUZW1wQnVmZmVyU2l6ZTsNCj4gKyAgKkJ1ZmZl ciAgICAgPSBUZW1wQnVmZmVyOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBSZWFkIGEgZmlsZS4NCj4gKyAgSWYgU2NhbkZzIGlzIEZMQVNFLCBpdCB3 aWxsIHVzZSB0aGlzIFZvbCBhcyBkZWZhdWx0IEZzLg0KPiArICBJZiBTY2FuRnMgaXMgVFJVRSwg aXQgd2lsbCBzY2FuIGFsbCBGUyBhbmQgY2hlY2sgdGhlIGZpbGUuDQo+ICsgICAgSWYgdGhlcmUg aXMgb25seSBvbmUgZmlsZSBtYXRjaCB0aGUgbmFtZSwgaXQgd2lsbCBiZSByZWFkLg0KPiArICAg IElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZmlsZSBtYXRjaCB0aGUgbmFtZSwgaXQgd2lsbCBy ZXR1cm4gRXJyb3IuDQo+ICsNCj4gKyAgQHBhcmFtIFRoaXNWb2wgICAgICAgICBGaWxlIFN5c3Rl bSBWb2x1bWUNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBUaGUgZmlsZSB0byBiZSByZWFk Lg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxlIGJ1ZmZlciBzaXplDQo+ICsg IEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVyDQo+ICsgIEBwYXJhbSBTY2Fu RnMgICAgICAgICAgTmVlZCBTY2FuIGFsbCBGUw0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgUmVhZCBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQg IEZpbGUgbm90IGZvdW5kDQo+ICsgIEByZXR2YWwgRUZJX05PX01BUFBJTkcgVGhlcmUgaXMgZHVw bGljYXRlZCBmaWxlcyBmb3VuZA0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSZWFkRmlsZVRv QnVmZmVyRXggKA0KPiArICBJTiBPVVQgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAg ICoqVGhpc1ZvbCwNCj4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqRmlsZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKkJ1ZmZlclNpemUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKipCdWZmZXIsDQo+ICsgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU2NhbkZzDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAg ICpWb2w7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wQnVmZmVy U2l6ZTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUZW1wQnVmZmVy Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9IYW5kbGVzOw0KPiAr ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIENoZWNrIHBhcmFtZXRlcnMNCj4gKyAgLy8NCj4gKyAgaWYgKChGaWxlTmFtZSA9PSBO VUxMKSB8fCAoQnVmZmVyID09IE5VTEwpIHx8IChUaGlzVm9sID09IE5VTEwpKSB7DQo+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIG5vdCBzY2FuIGZzDQo+ICsgIC8vDQo+ICsgIGlmICghU2NhbkZzKSB7DQo+ICsgICAgaWYg KCpUaGlzVm9sID09IE5VTEwpIHsNCj4gKyAgICAgICpUaGlzVm9sID0gR2V0TXlWb2wgKCk7DQo+ ICsgICAgICBpZiAoKlRoaXNWb2wgPT0gTlVMTCkgew0KPiArICAgICAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgICAvLw0KPiArICAg IC8vIFJlYWQgZmlsZSBkaXJlY3RseSBmcm9tIFZvbA0KPiArICAgIC8vDQo+ICsgICAgcmV0dXJu IFJlYWRGaWxlRnJvbVZvbCAoKlRoaXNWb2wsIEZpbGVOYW1lLCBCdWZmZXJTaXplLCBCdWZmZXIp Ow0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gbmVlZCBzY2FuIGZzDQo+ICsgIC8vDQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gR2V0IGFsbCBWb2wgaGFuZGxlDQo+ICsgIC8vDQo+ICsgIFN0 YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICBC eVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgICZnRWZpU2ltcGxlRmlsZVN5c3RlbVBy b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAg ICAgICAgICZOb0hhbmRsZXMsDQo+ICsgICAgICAgICAgICAgICAgICAgJkhhbmRsZUJ1ZmZlcg0K PiArICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykgJiYg KE5vSGFuZGxlcyA9PSAwKSkgew0KPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gV2FsayB0aHJvdWdoIGVhY2ggVm9sDQo+ICsgIC8vDQo+ ICsgICpUaGlzVm9sID0gTlVMTDsNCj4gKyAgKkJ1ZmZlclNpemUgPSAwOw0KPiArICAqQnVmZmVy ICAgICA9IE5VTEw7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5vSGFuZGxlczsgSW5k ZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAg ICAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgIChWT0lEICoqKSZWb2wNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAo RUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0K PiArICAgIFN0YXR1cyA9IFJlYWRGaWxlRnJvbVZvbCAoVm9sLCBGaWxlTmFtZSwgJlRlbXBCdWZm ZXJTaXplLCAmVGVtcEJ1ZmZlcik7DQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBSZWFkIGZpbGUgT0ssIGNoZWNrIGR1cGxpY2F0aW9u DQo+ICsgICAgICAvLw0KPiArICAgICAgaWYgKCpUaGlzVm9sICE9IE5VTEwpIHsNCj4gKyAgICAg ICAgLy8NCj4gKyAgICAgICAgLy8gRmluZCB0aGUgZHVwbGljYXRlZCBmaWxlDQo+ICsgICAgICAg IC8vDQo+ICsgICAgICAgIGdCUy0+RnJlZVBvb2wgKFRlbXBCdWZmZXIpOw0KPiArICAgICAgICBn QlMtPkZyZWVQb29sICgqQnVmZmVyKTsNCj4gKyAgICAgICAgUHJpbnQgKEwiRHVwbGljYXRlZCBG aWxlTmFtZSBmb3VuZCFcbiIpOw0KPiArICAgICAgICByZXR1cm4gRUZJX05PX01BUFBJTkc7DQo+ ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAvLw0KPiArICAgICAgICAvLyBSZWNvcmQgdmFs dWUNCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgKlRoaXNWb2wgPSBWb2w7DQo+ICsgICAgICAg ICpCdWZmZXJTaXplID0gVGVtcEJ1ZmZlclNpemU7DQo+ICsgICAgICAgICpCdWZmZXIgICAgID0g VGVtcEJ1ZmZlcjsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLw0K PiArICAvLyBTY2FuIEZzIGRvbmUNCj4gKyAgLy8NCj4gKyAgaWYgKCpUaGlzVm9sID09IE5VTEwp IHsNCj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIERvbmUNCj4gKyAgLy8NCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgUmVhZCBhIGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAg ICAgICBUaGUgZmlsZSB0byBiZSByZWFkLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRo ZSBmaWxlIGJ1ZmZlciBzaXplDQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUg YnVmZmVyDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBSZWFkIGZpbGUgc3VjY2Vz c2Z1bGx5DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmlsZSBub3QgZm91bmQNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArUmVhZEZpbGVUb0J1ZmZlciAoDQo+ICsgIElOICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBPVVQgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiArICBPVVQgVk9J RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAgICpWb2w7DQo+ICsgIFZvbCA9 IE5VTEw7DQo+ICsgIHJldHVybiBSZWFkRmlsZVRvQnVmZmVyRXgoJlZvbCwgRmlsZU5hbWUsIEJ1 ZmZlclNpemUsIEJ1ZmZlciwgRkFMU0UpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgV3JpdGUg YSBmaWxlLg0KPiArDQo+ICsgIEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUg d3JpdHRlbi4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBidWZmZXIgc2l6 ZQ0KPiArICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgV3JpdGUgZmlsZSBzdWNjZXNzZnVsbHkNCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArV3JpdGVGaWxlRnJvbUJ1ZmZlcigNCj4gKyAgSU4gIENIQVIxNiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZSwNCj4gKyAgSU4gIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0ZJ TEVfSEFORExFICAgICAgICAgICAgICAgICAgIFJvb3REaXI7DQo+ICsgIEVGSV9GSUxFX0hBTkRM RSAgICAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUZW1wQnVmZmVyU2l6ZTsNCj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9Q Uk9UT0NPTCAgICpWb2w7DQo+ICsNCj4gKyAgVm9sID0gR2V0TXlWb2woKTsNCj4gKw0KPiArICAv Lw0KPiArICAvLyBPcGVuIHRoZSByb290IGRpcmVjdG9yeQ0KPiArICAvLw0KPiArICBTdGF0dXMg PSBWb2wtPk9wZW5Wb2x1bWUgKFZvbCwgJlJvb3REaXIpOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIE9wZW4gdGhlIGZpbGUNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gUm9vdERpci0+T3Bl biAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgUm9vdERpciwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAmSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgIEZpbGVOYW1lLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8IEVGSV9GSUxFX01PREVf V1JJVEV8IEVGSV9GSUxFX01PREVfQ1JFQVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgIDAN Cj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgUm9vdERpci0+Q2xvc2UgKFJvb3REaXIpOw0KPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBEZWxldGUgZmlsZQ0KPiArICAvLw0K PiArICBTdGF0dXMgPSBIYW5kbGUtPkRlbGV0ZShIYW5kbGUpOw0KPiArICBpZiAoRUZJX0VSUk9S KFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gT3BlbiB0aGUgZmlsZSBhZ2Fpbg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBSb290 RGlyLT5PcGVuICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBSb290RGlyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICZIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRmlsZU5h bWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJ TEVfTU9ERV9XUklURXwgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgMA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFJvb3REaXItPkNsb3NlIChSb290RGlyKTsN Cj4gKw0KPiArICAvLw0KPiArICAvLyBXcml0ZSB0aGUgZmlsZSBkYXRhIGZyb20gdGhlIGJ1ZmZl cg0KPiArICAvLw0KPiArICBUZW1wQnVmZmVyU2l6ZSA9IEJ1ZmZlclNpemU7DQo+ICsgIFN0YXR1 cyA9IEhhbmRsZS0+V3JpdGUgKA0KPiArICAgICAgICAgICAgICAgICAgICAgSGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgJlRlbXBCdWZmZXJTaXplLA0KPiArICAgICAgICAgICAgICAg ICAgICAgQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgSGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgSGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsN Cj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gZGlmZiAtLWdpdCBh L01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAuYw0KPiBiL01k ZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAuYw0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4wYTI4NTU3DQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5j DQo+IEBAIC0wLDAgKzEsMTA0NyBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEEgc2hlbGwgYXBwbGlj YXRpb24gdGhhdCB0cmlnZ2VycyBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLg0KPiArDQo+ICsgIENv cHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5k IGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJF U0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0K PiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9C YXNlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxs b2NhdGlvbkxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L1ByaW50TGliLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTG9hZGVkSW1hZ2UuaD4NCj4gKyNp bmNsdWRlIDxQcm90b2NvbC9TaW1wbGVGaWxlU3lzdGVtLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9j b2wvR3JhcGhpY3NPdXRwdXQuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ZpbGVJbmZvLmg+DQo+ICsj aW5jbHVkZSA8R3VpZC9HcHQuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0dsb2JhbFZhcmlhYmxlLmg+ DQo+ICsjaW5jbHVkZSA8R3VpZC9DYXBzdWxlUmVwb3J0Lmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9T eXN0ZW1SZXNvdXJjZVRhYmxlLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9GbXBDYXBzdWxlLmg+DQo+ ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9XaW5kb3dzVXhDYXBzdWxlLmg+DQo+ICsNCj4g KyNkZWZpbmUgQ0FQU1VMRV9IRUFERVJfU0laRSAgMHgyMA0KPiArDQo+ICsjZGVmaW5lIE5FU1RF RF9DQVBTVUxFX0hFQURFUl9TSVpFICBTSVpFXzRLQg0KPiArI2RlZmluZSBTWVNURU1fRklSTVdB UkVfRkxBRyAweDUwMDAwDQo+ICsjZGVmaW5lIERFVklDRV9GSVJNV0FSRV9GTEFHIDB4NzgwMTAN Cj4gKw0KPiArI2RlZmluZSBFRklfQ0FQU1VMRV9GUk9NX0ZJTEVfRElSICAgICAgICAgICAgICAg ICAgICAgICAgICAgTCJcXEVGSVxcVXBkYXRlQ2Fwc3VsZVxcPGZpbGU6Ly8vXFxFRklcVXBkYXRl Q2Fwc3VsZVw+PGZpbGU6Ly9FRkkvVXBkYXRlQ2Fwc3VsZS8lM2NmaWxlOi9FRkkvVXBkYXRlQ2Fw c3VsZS8lM2U+Ig0KPiArI2RlZmluZSBFRklfT1NfSU5ESUNBVElPTlNfRklMRV9DQVBTVUxFX0RF TElWRVJZX1NVUFBPUlRFRCAgMHgwMDAwMDAwMDAwMDAwMDA0DQo+ICsNCj4gKyNkZWZpbmUgTUFK T1JfVkVSU0lPTiAgIDENCj4gKyNkZWZpbmUgTUlOT1JfVkVSU0lPTiAgIDANCj4gKw0KPiArI2Rl ZmluZSBNQVhfQVJHX05VTSAgICAgMTENCj4gKyNkZWZpbmUgTUFYX0NBUFNVTEVfTlVNIChNQVhf QVJHX05VTSAtIDEpDQo+ICsNCj4gK2V4dGVybiBVSU5UTiAgQXJnYzsNCj4gK2V4dGVybiBDSEFS MTYgKkFyZ3ZbXTsNCj4gKw0KPiArLy8NCj4gKy8vIERlZmluZSBob3cgbWFueSBibG9jayBkZXNj cmlwdG9ycyB3ZSB3YW50IHRvIHRlc3Qgd2l0aC4NCj4gKy8vDQo+ICtVSU5UTiAgTnVtYmVyT2ZE ZXNjcmlwdG9ycyA9IDE7DQo+ICtVSU5UTiAgQ2Fwc3VsZUZpcnN0SW5kZXg7DQo+ICtVSU5UTiAg Q2Fwc3VsZUxhc3RJbmRleDsNCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgY2Fwc3VsZSBpbmZvcm1h dGlvbg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fwc3Vs ZSBpbmZvcm1hdGlvbiBpcyBkdW1wZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkLg0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtEdW1wQ2Fwc3VsZSgNCj4gKyAgVk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg RHVtcCBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgVGhlIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlIGlzIGR1bXBlZC4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIElucHV0IHBhcmFtZXRlciBpcyBub3Qg dmFsaWQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0RtcENhcHN1bGVTdGF0dXNWYXJpYWJs ZSgNCj4gKyAgVk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBGTVAgcHJvdG9j b2wgaW5mby4NCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEZtcERhdGEoDQo+ICsgIFZPSUQNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRVNSVCBpbmZvLg0KPiArKiovDQo+ICtWT0lE DQo+ICtEdW1wRXNydERhdGEoDQo+ICsgIFZPSUQNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsg IFJlYWQgYSBmaWxlLg0KPiArDQo+ICsgIEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUg dG8gYmUgcmVhZC4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBidWZmZXIg c2l6ZQ0KPiArICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgUmVhZCBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiArICBA cmV0dmFsIEVGSV9OT1RfRk9VTkQgIEZpbGUgbm90IGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK1JlYWRGaWxlVG9CdWZmZXIoDQo+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiArICBPVVQgVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBX cml0ZSBhIGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBUaGUgZmlsZSB0 byBiZSB3cml0dGVuLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxlIGJ1ZmZl ciBzaXplDQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVyDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBXcml0ZSBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtXcml0ZUZpbGVGcm9tQnVmZmVyKA0KPiArICBJTiAgQ0hB UjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPiArICBJTiAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKTsNCj4g Kw0KPiArLyoqDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBwYXJzZSBhcHBsaWNhdGlvbiBBUkcu DQo+ICsNCj4gKyAgQHJldHVybiBTdGF0dXMNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArR2V0 QXJnICgNCj4gKyAgVk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ2xlYXIgQVBQIEFS Ry4NCj4gKyoqLw0KPiArVk9JRA0KPiArQ2xlYW5BcmcgKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgVVggY2Fwc3VsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIGNhcHN1bGUgaGVhZGVyIGlzIGFwcGVuZGVkLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1ldGVyIGlzIG5vdCB2 YWxpZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIE5vIGVub3VnaCByZXNv dXJjZSB0byBjcmVhdGUgVVggY2Fwc3VsZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ3Jl YXRlQm1wRm1wKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgQ0hBUjE2ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpPdXRwdXRDYXBzdWxlTmFtZTsNCj4gKyAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCbXBCdWZmZXI7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxl U2l6ZTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpCbXBOYW1lOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkZ1bGxDYXBzdWxlQnVmZmVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRnVsbENhcHN1bGVCdWZmZXJTaXplOw0KPiArICBFRklfRElT UExBWV9DQVBTVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRpc3BsYXlDYXBzdWxlOw0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MICAgICAgICAgICAgICAgICAgKkdv cDsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sKCZnRWZpR3JhcGhpY3NP dXRwdXRQcm90b2NvbEd1aWQsIE5VTEwsIChWT0lEICoqKSZHb3ApOw0KPiArICBpZiAoRUZJX0VS Uk9SKFN0YXR1cykpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IE5PIEdPUCBpcyBmb3Vu ZC5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKyAgUHJp bnQoTCJDdXJyZW50IEdPUDogTW9kZSAtICVkLCAiLCBHb3AtPk1vZGUtPk1vZGUpOw0KPiArICBQ cmludChMIkhvcml6b250YWxSZXNvbHV0aW9uIC0gJWQsICIsIEdvcC0+TW9kZS0+SW5mby0+SG9y aXpvbnRhbFJlc29sdXRpb24pOw0KPiArICBQcmludChMIlZlcnRpY2FsUmVzb2x1dGlvbiAtICVk XG4iLCBHb3AtPk1vZGUtPkluZm8tPlZlcnRpY2FsUmVzb2x1dGlvbik7DQo+ICsgIC8vIEhvcml6 b250YWxSZXNvbHV0aW9uID49IEJNUF9JTUFHRV9IRUFERVIuUGl4ZWxXaWR0aA0KPiArICAvLyBW ZXJ0aWNhbFJlc29sdXRpb24gICA+PSBCTVBfSU1BR0VfSEVBREVSLlBpeGVsSGVpZ2h0DQo+ICsN Cj4gKyAgaWYgKEFyZ2MgIT0gNSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogSW52YWxp ZCBQYXJhbWV0ZXIuXG4iKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKFN0ckNtcChBcmd2WzNdLCBMIi1PIikgIT0gMCkgew0KPiArICAgIFBy aW50KEwiQ2Fwc3VsZUFwcDogTk8gb3V0cHV0IGNhcHN1bGUgbmFtZS5cbiIpOw0KPiArICAgIHJl dHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKyAgT3V0cHV0Q2Fwc3VsZU5hbWUgPSBB cmd2WzRdOw0KPiArDQo+ICsgIEJtcEJ1ZmZlciA9IE5VTEw7DQo+ICsgIEZpbGVTaXplID0gMDsN Cj4gKyAgRnVsbENhcHN1bGVCdWZmZXIgPSBOVUxMOw0KPiArDQo+ICsgIEJtcE5hbWUgPSBBcmd2 WzJdOw0KPiArICBTdGF0dXMgPSBSZWFkRmlsZVRvQnVmZmVyKEJtcE5hbWUsICZGaWxlU2l6ZSwg JkJtcEJ1ZmZlcik7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50 KEwiQ2Fwc3VsZUFwcDogQk1QIGltYWdlICglcykgaXMgbm90IGZvdW5kLlxuIiwgQm1wTmFtZSk7 DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgRnVsbENhcHN1bGVCdWZmZXJT aXplID0gc2l6ZW9mKEVGSV9ESVNQTEFZX0NBUFNVTEUpICsgRmlsZVNpemU7DQo+ICsgIEZ1bGxD YXBzdWxlQnVmZmVyID0gQWxsb2NhdGVQb29sKEZ1bGxDYXBzdWxlQnVmZmVyU2l6ZSk7DQo+ICsg IGlmIChGdWxsQ2Fwc3VsZUJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxl QXBwOiBDYXBzdWxlIEJ1ZmZlciBzaXplICgweCV4KSB0b28gYmlnLlxuIiwNCj4gRnVsbENhcHN1 bGVCdWZmZXJTaXplKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g KyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBEaXNwbGF5Q2Fwc3VsZSA9IChFRklf RElTUExBWV9DQVBTVUxFICopRnVsbENhcHN1bGVCdWZmZXI7DQo+ICsgIENvcHlHdWlkKCZEaXNw bGF5Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlci5DYXBzdWxlR3VpZCwgJmdXaW5kb3dzVXhDYXBzdWxl R3VpZCk7DQo+ICsgIERpc3BsYXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkhlYWRlclNpemUgPSBz aXplb2YoRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIpOw0KPiArICBEaXNwbGF5Q2Fwc3Vs ZS0+Q2Fwc3VsZUhlYWRlci5GbGFncyA9IENBUFNVTEVfRkxBR1NfUEVSU0lTVF9BQ1JPU1NfUkVT RVQ7DQo+ICsgIERpc3BsYXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkNhcHN1bGVJbWFnZVNpemUg PSAoVUlOVDMyKUZ1bGxDYXBzdWxlQnVmZmVyU2l6ZTsNCj4gKw0KPiArICBEaXNwbGF5Q2Fwc3Vs ZS0+SW1hZ2VQYXlsb2FkLlZlcnNpb24gPSAxOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQ YXlsb2FkLkNoZWNrc3VtID0gMDsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5J bWFnZVR5cGUgPSAwOyAvLyBCTVANCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5S ZXNlcnZlZCA9IDA7DQo+ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuTW9kZSA9IEdv cC0+TW9kZS0+TW9kZTsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5PZmZzZXRY ID0gMDsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5PZmZzZXRZID0gMDsNCj4g Kw0KPiArICBDb3B5TWVtKChEaXNwbGF5Q2Fwc3VsZSArIDEpLCBCbXBCdWZmZXIsIEZpbGVTaXpl KTsNCj4gKw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLkNoZWNrc3VtID0gQ2Fs Y3VsYXRlQ2hlY2tTdW04KEZ1bGxDYXBzdWxlQnVmZmVyLA0KPiBGdWxsQ2Fwc3VsZUJ1ZmZlclNp emUpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFdyaXRlRmlsZUZyb21CdWZmZXIoT3V0cHV0Q2Fwc3Vs ZU5hbWUsIEZ1bGxDYXBzdWxlQnVmZmVyU2l6ZSwNCj4gRnVsbENhcHN1bGVCdWZmZXIpOw0KPiAr ICBQcmludChMIkNhcHN1bGVBcHA6IFdyaXRlICVzICVyXG4iLCBPdXRwdXRDYXBzdWxlTmFtZSwg U3RhdHVzKTsNCj4gKw0KPiArRG9uZToNCj4gKyAgaWYgKEJtcEJ1ZmZlciAhPSBOVUxMKSB7DQo+ ICsgICAgRnJlZVBvb2woQm1wQnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGdWxsQ2Fw c3VsZUJ1ZmZlciAhPSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2woRnVsbENhcHN1bGVCdWZmZXIp Ow0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIEdldCBJbWFnZVR5cGVJZCBpbiB0aGUgRk1QIGNhcHN1bGUgaGVhZGVyLg0KPiArDQo+ICsg IEBwYXJhbSBDYXBzdWxlSGVhZGVyICBUaGUgRk1QIGNhcHN1bGUgaW1hZ2UgaGVhZGVyLg0KPiAr DQo+ICsgIEByZXR1cm4gSW1hZ2VUeXBlSWQNCj4gKyoqLw0KPiArRUZJX0dVSUQgKg0KPiArR2V0 Q2Fwc3VsZUltYWdlVHlwZUlkKA0KPiArICBJTiBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkNhcHN1bGVIZWFkZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklf RklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0hFQURFUiAgICAgICAqRm1wQ2Fwc3VsZUhlYWRl cjsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkl0 ZW1PZmZzZXRMaXN0Ow0KPiArICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0lNQUdF X0hFQURFUiAqSW1hZ2VIZWFkZXI7DQo+ICsNCj4gKyAgRm1wQ2Fwc3VsZUhlYWRlciA9IChFRklf RklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0hFQURFUiAqKSgoVUlOVDggKilDYXBzdWxlSGVh ZGVyDQo+ICsgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ICsgIEl0ZW1PZmZzZXRMaXN0 ID0gKFVJTlQ2NCAqKShGbXBDYXBzdWxlSGVhZGVyICsgMSk7DQo+ICsgIGlmIChGbXBDYXBzdWxl SGVhZGVyLT5QYXlsb2FkSXRlbUNvdW50ID09IDApIHsNCj4gKyAgICByZXR1cm4gTlVMTDsNCj4g KyAgfQ0KPiArICBJbWFnZUhlYWRlciA9IChFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxF X0lNQUdFX0hFQURFUiAqKSgoVUlOVDgNCj4gKilGbXBDYXBzdWxlSGVhZGVyICsgSXRlbU9mZnNl dExpc3RbRm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3VudF0pOw0KPiArICByZXR1 cm4gJkltYWdlSGVhZGVyLT5VcGRhdGVJbWFnZVR5cGVJZDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIEdldCBFU1JUIEZ3VHlwZSBhY2NvcmRpbmcgdG8gSW1hZ2VUeXBlSWQNCj4gKw0KPiArICBA cGFyYW0gIEltYWdlVHlwZUlkICAgSW1hZ2VUeXBlSWQgb2YgYW4gRk1QIGNhcHN1bGUuDQo+ICsN Cj4gKyAgQHJldHVybiBFU1JUIEZ3VHlwZQ0KPiArKiovDQo+ICtVSU5UMzINCj4gK0dldEVzcnRG d1R5cGUoDQo+ICsgIElOICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKkltYWdlVHlwZUlkDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfU1lTVEVNX1JFU09VUkNFX1RBQkxFICAqRXNydDsN Cj4gKyAgRUZJX1NZU1RFTV9SRVNPVVJDRV9FTlRSWSAgKkVzcnRFbnRyeTsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sg RVNSVA0KPiArICAvLw0KPiArICBTdGF0dXMgPSBFZmlHZXRTeXN0ZW1Db25maWd1cmF0aW9uVGFi bGUoJmdFZmlTeXN0ZW1SZXNvdXJjZVRhYmxlR3VpZCwgKFZPSUQNCj4gKiopJkVzcnQpOw0KPiAr ICBpZiAoIUVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgRXNydEVudHJ5ID0gKFZPSUQgKiko RXNydCArIDEpOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEVzcnQtPkZ3UmVzb3Vy Y2VDb3VudDsgSW5kZXgrKywgRXNydEVudHJ5KyspIHsNCj4gKyAgICAgIGlmIChDb21wYXJlR3Vp ZCgmRXNydEVudHJ5LT5Gd0NsYXNzLCBJbWFnZVR5cGVJZCkpIHsNCj4gKyAgICAgICAgcmV0dXJu IEVzcnRFbnRyeS0+RndUeXBlOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ ICsgIHJldHVybiBFU1JUX0ZXX1RZUEVfVU5LTk9XTjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IEFwcGVuZCBhIGNhcHN1bGUgaGVhZGVyIG9uIHRvcCBvZiBjdXJyZW50IGltYWdlLg0KPiArICBU aGlzIGZ1bmN0aW9uIGZvbGxvd3MgV2luZG93cyBVRUZJIEZpcm13YXJlIFVwZGF0ZSBQbGF0Zm9y bSBkb2N1bWVudC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhl IGNhcHN1bGUgaGVhZGVyIGlzIGFwcGVuZGVkLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICAgSW5wdXQgcGFyYW1ldGVyIGlzIG5vdCB2YWxpZC4NCj4gKyAgQHJldHZhbCBFRklf T1VUX09GX1JFU09VUkNFUyAgIE5vIGVub3VnaCByZXNvdXJjZSB0byBhcHBlbmQgY2Fwc3VsZSBo ZWFkZXIuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NyZWF0ZU5lc3RlZEZtcCgNCj4gKyAg Vk9JRA0KPiArICApDQo+ICt7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqT3V0cHV0Q2Fwc3VsZU5hbWU7DQo+ICsgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZUJ1ZmZlcjsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVTaXplOw0KPiArICBD SEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVOYW1l Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZ1 bGxDYXBzdWxlQnVmZmVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRnVsbENhcHN1bGVCdWZmZXJTaXplOw0KPiArICBFRklfQ0FQU1VMRV9IRUFE RVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5lc3RlZENhcHN1bGVIZWFkZXI7DQo+ICsg IEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2VUeXBl SWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG d1R5cGU7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKEFyZ2MgIT0gNSkgew0KPiArICAgIFByaW50KEwiQ2Fw c3VsZUFwcDogSW52YWxpZCBQYXJhbWV0ZXIuXG4iKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKFN0ckNtcChBcmd2WzNdLCBMIi1PIikgIT0g MCkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogTk8gb3V0cHV0IGNhcHN1bGUgbmFtZS5c biIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKyAgT3V0cHV0 Q2Fwc3VsZU5hbWUgPSBBcmd2WzRdOw0KPiArDQo+ICsgIENhcHN1bGVCdWZmZXIgPSBOVUxMOw0K PiArICBGaWxlU2l6ZSA9IDA7DQo+ICsgIEZ1bGxDYXBzdWxlQnVmZmVyID0gTlVMTDsNCj4gKw0K PiArICBDYXBzdWxlTmFtZSA9IEFyZ3ZbMl07DQo+ICsgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZm ZXIoQ2Fwc3VsZU5hbWUsICZGaWxlU2l6ZSwgJkNhcHN1bGVCdWZmZXIpOw0KPiArICBpZiAoRUZJ X0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IENhcHN1bGUgaW1h Z2UgKCVzKSBpcyBub3QgZm91bmQuXG4iLCBDYXBzdWxlTmFtZSk7DQo+ICsgICAgZ290byBEb25l Ow0KPiArICB9DQo+ICsNCj4gKyAgSW1hZ2VUeXBlSWQgPSBHZXRDYXBzdWxlSW1hZ2VUeXBlSWQo Q2Fwc3VsZUJ1ZmZlcik7DQo+ICsgIGlmIChJbWFnZVR5cGVJZCA9PSBOVUxMKSB7DQo+ICsgICAg UHJpbnQoTCJDYXBzdWxlQXBwOiBDYXBzdWxlIEltYWdlVHlwZUlkIGlzIG5vdCBmb3VuZC5cbiIp Ow0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArICBGd1R5cGUgPSBHZXRFc3J0RndUeXBl KEltYWdlVHlwZUlkKTsNCj4gKyAgaWYgKChGd1R5cGUgIT0gRVNSVF9GV19UWVBFX1NZU1RFTUZJ Uk1XQVJFKSAmJiAoRndUeXBlICE9DQo+IEVTUlRfRldfVFlQRV9ERVZJQ0VGSVJNV0FSRSkpIHsN Cj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IENhcHN1bGUgRndUeXBlIGlzIGludmFsaWQuXG4i KTsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBGdWxsQ2Fwc3VsZUJ1ZmZl clNpemUgPSBORVNURURfQ0FQU1VMRV9IRUFERVJfU0laRSArIEZpbGVTaXplOw0KPiArICBGdWxs Q2Fwc3VsZUJ1ZmZlciA9IEFsbG9jYXRlUG9vbChGdWxsQ2Fwc3VsZUJ1ZmZlclNpemUpOw0KPiAr ICBpZiAoRnVsbENhcHN1bGVCdWZmZXIgPT0gTlVMTCkgew0KPiArICAgIFByaW50KEwiQ2Fwc3Vs ZUFwcDogQ2Fwc3VsZSBCdWZmZXIgc2l6ZSAoMHgleCkgdG9vIGJpZy5cbiIsDQo+IEZ1bGxDYXBz dWxlQnVmZmVyU2l6ZSk7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgTmVzdGVkQ2Fwc3VsZUhlYWRlciA9 IChFRklfQ0FQU1VMRV9IRUFERVIgKilGdWxsQ2Fwc3VsZUJ1ZmZlcjsNCj4gKyAgWmVyb01lbShO ZXN0ZWRDYXBzdWxlSGVhZGVyLCBORVNURURfQ0FQU1VMRV9IRUFERVJfU0laRSk7DQo+ICsgIENv cHlHdWlkKCZOZXN0ZWRDYXBzdWxlSGVhZGVyLT5DYXBzdWxlR3VpZCwgSW1hZ2VUeXBlSWQpOw0K PiArICBOZXN0ZWRDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplID0gTkVTVEVEX0NBUFNVTEVfSEVB REVSX1NJWkU7DQo+ICsgIE5lc3RlZENhcHN1bGVIZWFkZXItPkZsYWdzID0gKEZ3VHlwZSA9PSBF U1JUX0ZXX1RZUEVfREVWSUNFRklSTVdBUkUpID8NCj4gU1lTVEVNX0ZJUk1XQVJFX0ZMQUcgOiBE RVZJQ0VfRklSTVdBUkVfRkxBRzsNCj4gKyAgTmVzdGVkQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUlt YWdlU2l6ZSA9IChVSU5UMzIpRnVsbENhcHN1bGVCdWZmZXJTaXplOw0KPiArDQo+ICsgIENvcHlN ZW0oKFVJTlQ4ICopTmVzdGVkQ2Fwc3VsZUhlYWRlciArIE5lc3RlZENhcHN1bGVIZWFkZXItPkhl YWRlclNpemUsDQo+IENhcHN1bGVCdWZmZXIsIEZpbGVTaXplKTsNCj4gKw0KPiArICBTdGF0dXMg PSBXcml0ZUZpbGVGcm9tQnVmZmVyKE91dHB1dENhcHN1bGVOYW1lLCBGdWxsQ2Fwc3VsZUJ1ZmZl clNpemUsDQo+IEZ1bGxDYXBzdWxlQnVmZmVyKTsNCj4gKyAgUHJpbnQoTCJDYXBzdWxlQXBwOiBX cml0ZSAlcyAlclxuIiwgT3V0cHV0Q2Fwc3VsZU5hbWUsIFN0YXR1cyk7DQo+ICsNCj4gK0RvbmU6 DQo+ICsgIGlmIChDYXBzdWxlQnVmZmVyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChDYXBz dWxlQnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGdWxsQ2Fwc3VsZUJ1ZmZlciAhPSBO VUxMKSB7DQo+ICsgICAgRnJlZVBvb2woRnVsbENhcHN1bGVCdWZmZXIpOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyAgQ2xlYXIg Y2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFRoZSBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZSBpcyBjbGVhcmVkLg0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtDbGVhckNhcHN1bGVTdGF0dXNWYXJpYWJsZSgNCj4gKyAgVk9J RA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVWYXJOYW1l WzIwXTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRlbXBWYXJO YW1lOw0KPiArDQo+ICsgIFN0ckNweVMgKENhcHN1bGVWYXJOYW1lLCBzaXplb2YoQ2Fwc3VsZVZh ck5hbWUpL3NpemVvZihDYXBzdWxlVmFyTmFtZVswXSksDQo+IEwiQ2Fwc3VsZSIpOw0KPiArICBU ZW1wVmFyTmFtZSA9IENhcHN1bGVWYXJOYW1lICsgU3RyTGVuIChDYXBzdWxlVmFyTmFtZSk7DQo+ ICsgIEluZGV4ID0gMDsNCj4gKw0KPiArICB3aGlsZSAoVFJVRSkgew0KPiArICAgIFVuaWNvZGVT UHJpbnQgKFRlbXBWYXJOYW1lLCA1ICogc2l6ZW9mKENIQVIxNiksIEwiJTA0eCIsIEluZGV4KTsN Cj4gKw0KPiArICAgIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPiArICAgICAgICAgICAg ICAgICAgICBDYXBzdWxlVmFyTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlDYXBz dWxlUmVwb3J0R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX05PTl9W T0xBVElMRSB8IEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUyB8DQo+IEVGSV9WQVJJQUJMRV9C T09UU0VSVklDRV9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAg ICAgICAgICAgICAgIChWT0lEICopTlVMTA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFRo ZXJlIGlzIG5vIGNhcHN1bGUgdmFyaWFibGVzLCBxdWl0DQo+ICsgICAgICAvLw0KPiArICAgICAg YnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSW5kZXgrKzsNCj4gKyAgICBpZiAoSW5kZXgg PiAweEZGRkYpIHsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCB0aGUgYWN0 aXZlIFVFRkkgc3lzdGVtIHBhcnRpdGlvbiBmcm9tIGJvb3RvcHRpb24gbGlzdC4NCj4gKw0KPiAr ICBAcGFyYW1bb3V0XSBGcyAgICBTaW1wbGUgRmlsZSBTeXN0ZW0gcHJvdG9jb2wgb24gdGhlIGFj dGl2ZSBVRUZJIHN5c3RlbSBwYXJ0aXRpb24NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgYWN0aXZlIFVFRkkgc3lzdGVtIHBhcnRpdGlvbiBmb3VuZA0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtHZXRFZmlTeXNQYXJ0aXRpb24oDQo+ICsgIE9VVCBFRklfU0lNUExFX0ZJTEVfU1lT VEVNX1BST1RPQ09MICoqRnMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9D T0wgICpGc1RlbXA7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vSGFu ZGxlczsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgKkhhbmRsZXM7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICsgIEhh bmRsZXMgPSBOVUxMOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIHNlYXJjaCBmb3IgRUZJIHN5c3Rl bSBwYXJ0aXRpb24gcHJvdG9jb2wgb24gQm9vdCBvcHRpb24gZGV2aWNlIHBhdGgNCj4gKyAgLy8N Cj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIoQnlQcm90b2NvbCwgJmdFZmlQ YXJ0VHlwZVN5c3RlbVBhcnRHdWlkLCBOVUxMLA0KPiAmTm9IYW5kbGVzLCAmSGFuZGxlcyk7DQo+ ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBTa2lwIEJvb3RPcHRpb25zIHdpdGhpbiBGVg0KPiAr ICAvLw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOb0hhbmRsZXM7IEluZGV4KyspIHsN Cj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChIYW5kbGVzW0luZGV4XSwgJmdF ZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KPiAoVk9JRCAqKikmRnNUZW1wKTsNCj4g KyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSl7DQo+ICsgICAgICAqRnMgPSBGc1RlbXA7DQo+ ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIENvcHkgYSBsaXN0IG9mIGNhcHN1bGUgaW1hZ2VzIHRvIHRo ZSBhY3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uIGZyb20gYm9vdG9wdGlvbg0KPiBsaXN0Lg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gQ2Fwc3VsZUJ1ZmZlciAgICBBbiBhcnJheSBvZiBwb2ludGVy IHRvIGNhcHN1bGUgaW1hZ2VzDQo+ICsgIEBwYXJhbVtpbl0gRmlsZVNpemUgICAgICAgICBBbiBh cnJheSBvZiBVSU5UTiB0byBjYXBzdWxlIGltYWdlcyBzaXplDQo+ICsgIEBwYXJhbVtpbl0gQ2Fw c3VsZU51bSAgICAgICBUaGUgY291bnQgb2YgY2Fwc3VsZSBpbWFnZXMNCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgQ2Fwc3VsZSBpbWFnZXMgYXJlIGNvcGllZCB0byB0aGUgYWN0aXZl IFVFRkkgc3lzdGVtIHBhcnRpdGlvbg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtDb3B5Q2Fw c3VsZVRvQWN0aXZlRWZpUGFydGl0aW9uKA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICAqKkNhcHN1bGVCdWZmZXIsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICpGaWxlU2l6ZSwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg Q2Fwc3VsZU51bQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNh cHN1bGVOYW1lOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAgKkZzOw0KPiArICBFRklfRklM RV9IQU5ETEUgICAgICAgICAgICAgICAgICBSb290RGlyOw0KPiArICBFRklfRklMRV9IQU5ETEUg ICAgICAgICAgICAgICAgICBDYXBzdWxlRGlyOw0KPiArICBFRklfRklMRV9IQU5ETEUgICAgICAg ICAgICAgICAgICBEZXN0SGFuZGxlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEYXRhU2l6ZTsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3NJ bmRpY2F0aW9uOw0KPiArDQo+ICsgIFJvb3REaXIgICAgICA9IE5VTEw7DQo+ICsgIENhcHN1bGVE aXIgICA9IE5VTEw7DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RWZpU3lzUGFydGl0aW9uKCZGcyk7 DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50IChMIkNhbiBub3Qg ZmluZCBhY3RpdmUgVUVGSSBTeXN0ZW0gUGFydGl0aW9uXG4iKTsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRnMtPk9wZW5Wb2x1bWUoRnMsICZSb290 RGlyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgZ290byBFWElUOw0K PiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gUm9vdERpci0+T3BlbigNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBSb290RGlyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZDYXBzdWxlRGly LA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVGSV9DQVBTVUxFX0ZST01fRklMRV9ESVIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJTEVfTU9E RV9XUklURSB8IEVGSV9GSUxFX01PREVfQ1JFQVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAg IEVGSV9GSUxFX0RJUkVDVE9SWQ0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlm IChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gRVhJVDsNCj4gKyAgfQ0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIFJlYWQgdGhlIGlucHV0IGZpbGVzLg0KPiArICAvLw0KPiArICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgQ2Fwc3Vs ZU5hbWUgPSBBcmd2W0NhcHN1bGVGaXJzdEluZGV4ICsgSW5kZXhdOw0KPiArICAgIFN0YXR1cyA9 IENhcHN1bGVEaXItPk9wZW4oDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxl RGlyLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRlc3RIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8IEVGSV9GSUxFX01PREVfV1JJVEUgfA0KPiBF RklfRklMRV9NT0RFX0NSRUFURSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9G SUxFX0FSQ0hJVkUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYg KEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkNhcHN1bGVBcHA6ICVzIG9w ZW4gZXJyb3IgLSAlclxuIiwgQ2Fwc3VsZU5hbWUsIFN0YXR1cyk7DQo+ICsgICAgICBjb250aW51 ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBEYXRhU2l6ZSA9IEZpbGVTaXplW0luZGV4XTsNCj4g KyAgICBTdGF0dXMgPSBEZXN0SGFuZGxlLT5Xcml0ZSgNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIERlc3RIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGF0YVNp emUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlQnVmZmVyW0luZGV4XQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBEZXN0SGFuZGxlLT5DbG9z ZShEZXN0SGFuZGxlKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICAg IFByaW50KEwiQ2Fwc3VsZUFwcDogJXMgd3JpdGUgZXJyb3IgLSAlciwgRmlsZVNpemUgLSAweCV4 XG4iLCBDYXBzdWxlTmFtZSwNCj4gU3RhdHVzLCBGaWxlU2l6ZVtJbmRleF0pOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPiArICAgICAg ICAgICAgICAgICAgTCJPc0luZGljYXRpb25zIiwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZp R2xvYmFsVmFyaWFibGVHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAg ICAgICAgICAgICAgICZEYXRhU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICopICZP c0luZGljYXRpb24NCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9F UlJPUihTdGF0dXMpIHx8IERhdGFTaXplICE9IHNpemVvZihPc0luZGljYXRpb24pKSB7DQo+ICsg ICAgT3NJbmRpY2F0aW9uID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFNldCBP c0luZGljYXRpb25zIFZhcmlhYmxlIEVGSV9PU19JTkRJQ0FUSU9OU19GSUxFX0NBUFNVTEVfREVM SVZFUllfU1VQUE9SVEVEIGJpdA0KPiArICAvLw0KPiArICBPc0luZGljYXRpb24gfD0gRUZJX09T X0lORElDQVRJT05TX0ZJTEVfQ0FQU1VMRV9ERUxJVkVSWV9TVVBQT1JURUQ7DQo+ICsgIFN0YXR1 cyA9IGdSVC0+U2V0VmFyaWFibGUgKA0KPiArICAgICAgICAgICAgICAgICAgTCJPc0luZGljYXRp b25zIiwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpR2xvYmFsVmFyaWFibGVHdWlkLA0KPiAr ICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8IEVGSV9WQVJJQUJM RV9SVU5USU1FX0FDQ0VTUyB8DQo+ICsgICAgICAgICAgICAgICAgICBFRklfVkFSSUFCTEVfQk9P VFNFUlZJQ0VfQUNDRVNTLA0KPiArICAgICAgICAgICAgICAgICAgc2l6ZW9mKE9zSW5kaWNhdGlv biksDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKSZPc0luZGljYXRpb24NCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsNCj4gKw0KPiArRVhJVDoNCj4gKyAgaWYgKFJvb3REaXIgIT0g TlVMTCkgew0KPiArICAgIFJvb3REaXItPkNsb3NlKFJvb3REaXIpOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKENhcHN1bGVEaXIgIT0gTlVMTCkgew0KPiArICAgIENhcHN1bGVEaXItPkNsb3NlKENh cHN1bGVEaXIpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIEJ1aWxkIEdhdGhlciBsaXN0IGZvciBhIGxpc3Qgb2YgY2Fwc3VsZSBpbWFn ZXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Fwc3VsZUJ1ZmZlciAgICBBbiBhcnJheSBvZiBw b2ludGVyIHRvIGNhcHN1bGUgaW1hZ2VzDQo+ICsgIEBwYXJhbVtpbl0gIEZpbGVTaXplICAgICAg ICAgQW4gYXJyYXkgb2YgVUlOVE4gdG8gY2Fwc3VsZSBpbWFnZXMgc2l6ZQ0KPiArICBAcGFyYW1b aW5dICBDYXBzdWxlTnVtICAgICAgIFRoZSBjb3VudCBvZiBjYXBzdWxlIGltYWdlcw0KPiArICBA cGFyYW1bb3V0XSBCbG9ja0Rlc2NyaXB0b3JzIFRoZSBibG9jayBkZXNjcmlwdG9ycyBmb3IgdGhl IGNhcHN1bGUgaW1hZ2VzDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyBUaGUgYmxvY2sg ZGVzY3JpcHRvcnMgZm9yIHRoZSBjYXBzdWxlIGltYWdlcyBhcmUgY29uc3RydWN0ZWQuDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0J1aWxkR2F0aGVyTGlzdCgNCj4gKyAgSU4gVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgKipDYXBzdWxlQnVmZmVyLA0KPiArICBJTiBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAqRmlsZVNpemUsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgIENhcHN1bGVOdW0sDQo+ICsgIE9VVCBFRklfQ0FQU1VMRV9CTE9DS19ERVND UklQVE9SICoqQmxvY2tEZXNjcmlwdG9ycw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJ UFRPUiAgKkJsb2NrRGVzY3JpcHRvcnMxOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQ VE9SICAqQmxvY2tEZXNjcmlwdG9yczI7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBU T1IgICpCbG9ja0Rlc2NyaXB0b3JQcmU7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBU T1IgICpCbG9ja0Rlc2NyaXB0b3JzSGVhZGVyOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVND UklQVE9SICAqVGVtcEJsb2NrUHRyOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAg ICAqVGVtcERhdGFQdHI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFNpemVM ZWZ0Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KPiArICBJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAgSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgTnVtYmVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleDsNCj4gKw0KPiArICBUZW1wQmxvY2tQdHIgICAgICAgICAgID0gTlVMTDsNCj4gKyAgQmxv Y2tEZXNjcmlwdG9yczEgICAgICA9IE5VTEw7DQo+ICsgIEJsb2NrRGVzY3JpcHRvcnMyICAgICAg PSBOVUxMOw0KPiArICBCbG9ja0Rlc2NyaXB0b3JQcmUgICAgID0gTlVMTDsNCj4gKyAgQmxvY2tE ZXNjcmlwdG9yc0hlYWRlciA9IE5VTEw7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgQ2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgIC8vDQo+ICsgICAgLy8gQWxsb2NhdGUg bWVtb3J5IGZvciB0aGUgZGVzY3JpcHRvcnMuDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoTnVtYmVy T2ZEZXNjcmlwdG9ycyA9PSAxKSB7DQo+ICsgICAgICBDb3VudCA9IDI7DQo+ICsgICAgfSBlbHNl IHsNCj4gKyAgICAgIENvdW50ID0gKElOVDMyKShOdW1iZXJPZkRlc2NyaXB0b3JzICsgMikgLyAy Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIFNpemUgICAgICAgICAgICAgICA9IENvdW50ICogc2l6 ZW9mIChFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SKTsNCj4gKyAgICBCbG9ja0Rlc2NyaXB0 b3JzMSAgPSBBbGxvY2F0ZVJ1bnRpbWVaZXJvUG9vbCAoU2l6ZSk7DQo+ICsgICAgaWYgKEJsb2Nr RGVzY3JpcHRvcnMxID09IE5VTEwpIHsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGZh aWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzXG4iKTsNCj4gKyAgICAgIFN0 YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgZ290byBFUlJFWElUOw0KPiAr ICAgIH0gZWxzZSB7DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjcmVhdGluZyBjYXBz dWxlIGRlc2NyaXB0b3JzIGF0IDB4JVhcbiIsIChVSU5UTikNCj4gQmxvY2tEZXNjcmlwdG9yczEp Ow0KPiArICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogY2Fwc3VsZSBkYXRhIHN0YXJ0cyAgICAg ICAgICBhdCAweCVYIHdpdGggc2l6ZSAweCVYXG4iLA0KPiAoVUlOVE4pIENhcHN1bGVCdWZmZXIs IEZpbGVTaXplKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIFJlY29yZCBk ZXNjaXJwdG9yIGhlYWRlcg0KPiArICAgIC8vDQo+ICsgICAgaWYgKEluZGV4ID09IDApIHsNCj4g KyAgICAgIEJsb2NrRGVzY3JpcHRvcnNIZWFkZXIgPSBCbG9ja0Rlc2NyaXB0b3JzMTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBpZiAoQmxvY2tEZXNjcmlwdG9yUHJlICE9IE5VTEwpIHsNCj4gKyAg ICAgIEJsb2NrRGVzY3JpcHRvclByZS0+VW5pb24uQ29udGludWF0aW9uUG9pbnRlciA9IChVSU5U TikgQmxvY2tEZXNjcmlwdG9yczE7DQo+ICsgICAgICBCbG9ja0Rlc2NyaXB0b3JQcmUtPkxlbmd0 aCA9IDA7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBGaWxsIHRoZW0gaW4N Cj4gKyAgICAvLw0KPiArICAgIFRlbXBCbG9ja1B0ciAgPSBCbG9ja0Rlc2NyaXB0b3JzMTsNCj4g KyAgICBUZW1wRGF0YVB0ciAgID0gQ2Fwc3VsZUJ1ZmZlcltJbmRleF07DQo+ICsgICAgU2l6ZUxl ZnQgICAgICA9IEZpbGVTaXplW0luZGV4XTsNCj4gKyAgICBmb3IgKE51bWJlciA9IDA7IChOdW1i ZXIgPCBDb3VudCAtIDEpICYmIChTaXplTGVmdCAhPSAwKTsgTnVtYmVyKyspIHsNCj4gKyAgICAg IC8vDQo+ICsgICAgICAvLyBEaXZpZGUgcmVtYWluaW5nIGRhdGEgaW4gaGFsZg0KPiArICAgICAg Ly8NCj4gKyAgICAgIGlmIChOdW1iZXJPZkRlc2NyaXB0b3JzICE9IDEpIHsNCj4gKyAgICAgICAg aWYgKFNpemVMZWZ0ID09IDEpIHsNCj4gKyAgICAgICAgICBTaXplID0gMTsNCj4gKyAgICAgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgICBTaXplID0gU2l6ZUxlZnQgLyAyOw0KPiArICAgICAgICB9 DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBTaXplID0gU2l6ZUxlZnQ7DQo+ICsgICAg ICB9DQo+ICsgICAgICBUZW1wQmxvY2tQdHItPlVuaW9uLkRhdGFCbG9jayAgICA9IChVSU5UTilU ZW1wRGF0YVB0cjsNCj4gKyAgICAgIFRlbXBCbG9ja1B0ci0+TGVuZ3RoICA9IFNpemU7DQo+ICsg ICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGJsb2NrL3NpemUgICAgICAgICAgICAg IDB4JVgvMHglWFxuIiwgKFVJTlROKQ0KPiBUZW1wRGF0YVB0ciwgU2l6ZSk7DQo+ICsgICAgICBT aXplTGVmdCAtPSBTaXplOw0KPiArICAgICAgVGVtcERhdGFQdHIgKz0gU2l6ZTsNCj4gKyAgICAg IFRlbXBCbG9ja1B0cisrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gQWxs b2NhdGUgdGhlIHNlY29uZCBsaXN0LCBwb2ludCB0aGUgZmlyc3QgYmxvY2sncyBsYXN0IGVudHJ5 IHRvIHBvaW50DQo+ICsgICAgLy8gdG8gdGhpcyBvbmUsIGFuZCBmaWxsIHRoaXMgb25lIGluLiBX b3JzdCBjYXNlIGlzIHRoYXQgdGhlIHByZXZpb3VzDQo+ICsgICAgLy8gbGlzdCBvbmx5IGhhZCBv bmUgZWxlbWVudCB0aGF0IHBvaW50ZWQgaGVyZSwgc28gd2UgbmVlZCBhdCBsZWFzdCB0d28NCj4g KyAgICAvLyBlbGVtZW50cyAtLSBvbmUgdG8gcG9pbnQgdG8gYWxsIHRoZSBkYXRhLCBhbm90aGVy IHRvIHRlcm1pbmF0ZSB0aGUgbGlzdC4NCj4gKyAgICAvLw0KPiArICAgIGlmICgoTnVtYmVyT2ZE ZXNjcmlwdG9ycyAhPSAxKSAmJiAoU2l6ZUxlZnQgIT0gMCkpIHsNCj4gKyAgICAgIENvdW50ID0g KElOVDMyKShOdW1iZXJPZkRlc2NyaXB0b3JzICsgMikgLSBDb3VudDsNCj4gKyAgICAgIGlmIChD b3VudCA9PSAxKSB7DQo+ICsgICAgICAgIENvdW50Kys7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAg ICAgIFNpemUgICAgICAgICAgICAgID0gQ291bnQgKiBzaXplb2YgKEVGSV9DQVBTVUxFX0JMT0NL X0RFU0NSSVBUT1IpOw0KPiArICAgICAgQmxvY2tEZXNjcmlwdG9yczIgPSBBbGxvY2F0ZVJ1bnRp bWVaZXJvUG9vbCAoU2l6ZSk7DQo+ICsgICAgICBpZiAoQmxvY2tEZXNjcmlwdG9yczIgPT0gTlVM TCkgew0KPiArICAgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBmYWlsZWQgdG8gYWxsb2NhdGUg bWVtb3J5IGZvciBkZXNjcmlwdG9yc1xuIik7DQo+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICBnb3RvIEVSUkVYSVQ7DQo+ICsgICAgICB9DQo+ICsN Cj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBQb2ludCB0aGUgZmlyc3QgbGlzdCdzIGxhc3QgZWxl bWVudCB0byBwb2ludCB0byB0aGlzIHNlY29uZCBsaXN0Lg0KPiArICAgICAgLy8NCj4gKyAgICAg IFRlbXBCbG9ja1B0ci0+VW5pb24uQ29udGludWF0aW9uUG9pbnRlciAgID0gKFVJTlROKSBCbG9j a0Rlc2NyaXB0b3JzMjsNCj4gKw0KPiArICAgICAgVGVtcEJsb2NrUHRyLT5MZW5ndGggID0gMDsN Cj4gKyAgICAgIFRlbXBCbG9ja1B0ciA9IEJsb2NrRGVzY3JpcHRvcnMyOw0KPiArICAgICAgZm9y IChOdW1iZXIgPSAwOyBOdW1iZXIgPCBDb3VudCAtIDE7IE51bWJlcisrKSB7DQo+ICsgICAgICAg IC8vDQo+ICsgICAgICAgIC8vIElmIHNlY29uZC10by1sYXN0IG9uZSwgdGhlbiBkdW1wIHJlc3Qg dG8gdGhpcyBlbGVtZW50DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIGlmIChOdW1iZXIgPT0g KENvdW50IC0gMikpIHsNCj4gKyAgICAgICAgICBTaXplID0gU2l6ZUxlZnQ7DQo+ICsgICAgICAg IH0gZWxzZSB7DQo+ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICAvLyBEaXZpZGUgcmVtYWlu aW5nIGRhdGEgaW4gaGFsZg0KPiArICAgICAgICAgIC8vDQo+ICsgICAgICAgICAgaWYgKFNpemVM ZWZ0ID09IDEpIHsNCj4gKyAgICAgICAgICAgIFNpemUgPSAxOw0KPiArICAgICAgICAgIH0gZWxz ZSB7DQo+ICsgICAgICAgICAgICBTaXplID0gU2l6ZUxlZnQgLyAyOw0KPiArICAgICAgICAgIH0N Cj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIFRlbXBCbG9ja1B0ci0+VW5pb24uRGF0YUJs b2NrICAgID0gKFVJTlROKVRlbXBEYXRhUHRyOw0KPiArICAgICAgICBUZW1wQmxvY2tQdHItPkxl bmd0aCAgPSBTaXplOw0KPiArICAgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGJs b2NrL3NpemUgICAgICAgICAgICAgIDB4JVgvMHglWFxuIiwgKFVJTlROKQ0KPiBUZW1wRGF0YVB0 ciwgU2l6ZSk7DQo+ICsgICAgICAgIFNpemVMZWZ0IC09IFNpemU7DQo+ICsgICAgICAgIFRlbXBE YXRhUHRyICs9IFNpemU7DQo+ICsgICAgICAgIFRlbXBCbG9ja1B0cisrOw0KPiArICAgICAgICBp ZiAoU2l6ZUxlZnQgPT0gMCkgew0KPiArICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICB9DQo+ ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQmxvY2tEZXNjcmlwdG9yUHJlID0gVGVt cEJsb2NrUHRyOw0KPiArICAgIEJsb2NrRGVzY3JpcHRvcnMxICA9IE5VTEw7DQo+ICsgIH0NCj4g Kw0KPiArICAvLw0KPiArICAvLyBOdWxsLXRlcm1pbmF0ZS4NCj4gKyAgLy8NCj4gKyAgaWYgKFRl bXBCbG9ja1B0ciAhPSBOVUxMKSB7DQo+ICsgICAgVGVtcEJsb2NrUHRyLT5Vbmlvbi5Db250aW51 YXRpb25Qb2ludGVyICAgID0gKFVJTlROKU5VTEw7DQo+ICsgICAgVGVtcEJsb2NrUHRyLT5MZW5n dGggID0gMDsNCj4gKyAgICAqQmxvY2tEZXNjcmlwdG9ycyA9IEJsb2NrRGVzY3JpcHRvcnNIZWFk ZXI7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsNCj4gK0VSUkVY SVQ6DQo+ICsgIGlmIChCbG9ja0Rlc2NyaXB0b3JzMSAhPSBOVUxMKSB7DQo+ICsgICAgRnJlZVBv b2woQmxvY2tEZXNjcmlwdG9yczEpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEJsb2NrRGVzY3Jp cHRvcnMyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChCbG9ja0Rlc2NyaXB0b3JzMik7DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg Q2xlYXIgdGhlIEdhdGhlciBsaXN0IGZvciBhIGxpc3Qgb2YgY2Fwc3VsZSBpbWFnZXMuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgQmxvY2tEZXNjcmlwdG9ycyBUaGUgYmxvY2sgZGVzY3JpcHRvcnMg Zm9yIHRoZSBjYXBzdWxlIGltYWdlcw0KPiArICBAcGFyYW1baW5dICBDYXBzdWxlTnVtICAgICAg IFRoZSBjb3VudCBvZiBjYXBzdWxlIGltYWdlcw0KPiArKiovDQo+ICtWT0lEDQo+ICtDbGVhbkdh dGhlckxpc3QoDQo+ICsgIElOIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICAqQmxvY2tE ZXNjcmlwdG9ycywNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1 bGVOdW0NCj4gKyAgKQ0KPiArew0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAg KlRlbXBCbG9ja1B0cjsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgICpUZW1w QmxvY2tQdHIxOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAgKlRlbXBCbG9j a1B0cjI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKw0K PiArICBpZiAoQmxvY2tEZXNjcmlwdG9ycyAhPSBOVUxMKSB7DQo+ICsgICAgVGVtcEJsb2NrUHRy MSA9IEJsb2NrRGVzY3JpcHRvcnM7DQo+ICsgICAgd2hpbGUgKDEpew0KPiArICAgICAgVGVtcEJs b2NrUHRyID0gVGVtcEJsb2NrUHRyMTsNCj4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IENhcHN1bGVOdW07IEluZGV4KyspIHsNCj4gKyAgICAgICAgaWYgKFRlbXBCbG9ja1B0cltJbmRl eF0uTGVuZ3RoID09IDApIHsNCj4gKyAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoVGVtcEJsb2NrUHRyW0luZGV4XS5Vbmlvbi5Db250 aW51YXRpb25Qb2ludGVyID09IChVSU5UTilOVUxMKSB7DQo+ICsgICAgICAgIGJyZWFrOw0KPiAr ICAgICAgfQ0KPiArDQo+ICsgICAgICBUZW1wQmxvY2tQdHIyID0gKFZPSUQgKikgKChVSU5UTikg VGVtcEJsb2NrUHRyLT5Vbmlvbi5Db250aW51YXRpb25Qb2ludGVyKTsNCj4gKyAgICAgIEZyZWVQ b29sKFRlbXBCbG9ja1B0cjEpOw0KPiArICAgICAgVGVtcEJsb2NrUHRyMSA9IFRlbXBCbG9ja1B0 cjI7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBQcmludCBBUFAg dXNhZ2UuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1ByaW50VXNhZ2UgKA0KPiArICBWT0lEDQo+ICsg ICkNCj4gK3sNCj4gKyAgUHJpbnQoTCJDYXBzdWxlQXBwOiAgdXNhZ2VcbiIpOw0KPiArICBQcmlu dChMIiAgQ2Fwc3VsZUFwcCBbLUZdIDxDYXBzdWxlLi4uPiBbLU5SXVxuIik7DQo+ICsgIFByaW50 KEwiICBDYXBzdWxlQXBwIC1TXG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAgLUNcbiIp Ow0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtUFxuIik7DQo+ICsgIFByaW50KEwiICBDYXBz dWxlQXBwIC1FXG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAgLUcgPEJNUD4gLU8gPENh cHN1bGU+XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAgLU4gPENhcHN1bGU+IC1PIDxO ZXN0ZWRDYXBzdWxlPlxuIik7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIC1EfC1EUyA8Q2Fw c3VsZT5cbiIpOw0KPiArICBQcmludChMIlBhcmFtZXRlcjpcbiIpOw0KPiArICBQcmludChMIiAg LUY6ICBQdXQgY2Fwc3VsZSBmaWxlIHRvIGRpc2suXG4iKTsNCj4gKyAgUHJpbnQoTCIgICAgICAg Tm8gLUYgbWVhbnMgdG8gcHV0IGNhcHN1bGUgZmlsZSBpbiBtZW1vcnkuXG4iKTsNCj4gKyAgUHJp bnQoTCIgIC1OUjogTm8gUmVzZXQuXG4iKTsNCj4gKyAgUHJpbnQoTCIgIC1TOiAgRHVtcCBjYXBz dWxlIHN0YXR1cy5cbiIpOw0KPiArICBQcmludChMIiAgLUM6ICBDbGVhciBjYXBzdWxlIHN0YXR1 cy5cbiIpOw0KPiArICBQcmludChMIiAgLVA6ICBEdW1wIEZNUCBwcm90b2NvbCBpbmZvLlxuIik7 DQo+ICsgIFByaW50KEwiICAtRTogIER1bXAgRVNSVCB0YWJsZSBpbmZvLlxuIik7DQo+ICsgIFBy aW50KEwiICAtRzogIElucHV0IEJNUCBmaWxlIG5hbWVcbiIpOw0KPiArICBQcmludChMIiAgLU46 ICBBcHBlbmQgQ2Fwc3VsZSBIZWFkZXIgYWNjcm9kaW5nIHRvIFdpbmRvd3MgRmlybXdhcmUgVXBk YXRlXG4iKTsNCj4gKyAgUHJpbnQoTCIgIC1POiAgT3V0cHV0IENhcHN1bGUgZmlsZSBuYW1lXG4i KTsNCj4gKyAgUHJpbnQoTCIgIC1EOiAgRHVtcCBDYXBzdWxlXG4iKTsNCj4gKyAgUHJpbnQoTCIg IC1EUzogRHVtcCBDYXBzdWxlIHdpdGggU3lzdGVtIEZNUCBmb3JtYXRcbiIpOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVXBkYXRlIENhcHN1bGUgaW1hZ2UuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgSW1hZ2VIYW5kbGUgICAgIFRoZSBpbWFnZSBoYW5kbGUuDQo+ICsgIEBwYXJhbVtpbl0gIFN5 c3RlbVRhYmxlICAgICBUaGUgc3lzdGVtIHRhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICBDb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBDb21tYW5kIHVzYWdlIGVycm9yLg0KPiArICBA cmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhlIGlucHV0IGZpbGUgY2FuJ3QgYmUgZm91 bmQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVWVmaU1haW4gKA0KPiAr ICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9U QUJMRSAgKlN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBG aWxlU2l6ZVtNQVhfQ0FQU1VMRV9OVU1dOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAqQ2Fwc3VsZUJ1ZmZlcltNQVhfQ0FQU1VMRV9OVU1dOw0KPiArICBFRklfQ0FQU1VMRV9C TE9DS19ERVNDUklQVE9SICAqQmxvY2tEZXNjcmlwdG9yczsNCj4gKyAgRUZJX0NBUFNVTEVfSEVB REVSICAgICAgICAgICAgICpDYXBzdWxlSGVhZGVyQXJyYXlbTUFYX0NBUFNVTEVfTlVNICsgMV07 DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBNYXhDYXBzdWxlU2l6ZTsNCj4g KyAgRUZJX1JFU0VUX1RZUEUgICAgICAgICAgICAgICAgIFJlc2V0VHlwZTsNCj4gKyAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgIE5lZWRSZXNldDsNCj4gKyAgQk9PTEVBTiAgICAgICAg ICAgICAgICAgICAgICAgIE5vUmVzZXQ7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgICBOZWVkQ29weU9uRGlzazsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAg ICpDYXBzdWxlTmFtZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1 bGVOdW07DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKw0K PiArICBTdGF0dXMgPSBHZXRBcmcoKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ ICsgICAgUHJpbnRVc2FnZSgpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAg aWYgKEFyZ2MgPCAyKSB7DQo+ICsgICAgUHJpbnRVc2FnZSgpOw0KPiArICAgIENsZWFuQXJnKCk7 DQo+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArICBpZiAo KFN0ckNtcChBcmd2WzFdLCBMIi1EIikgPT0gMCkgfHwNCj4gKyAgICAgIChTdHJDbXAoQXJndlsx XSwgTCItRFMiKSA9PSAwKSkgew0KPiArICAgIFN0YXR1cyA9IER1bXBDYXBzdWxlKCk7DQo+ICsg ICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIGlmIChT dHJDbXAoQXJndlsxXSwgTCItRyIpID09IDApIHsNCj4gKyAgICBTdGF0dXMgPSBDcmVhdGVCbXBG bXAoKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1OIikgPT0gMCkgew0KPiArICAgIFN0YXR1cyA9 IENyZWF0ZU5lc3RlZEZtcCgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLVMiKSA9PSAwKSB7DQo+ ICsgICAgU3RhdHVzID0gRG1wQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxlKCk7DQo+ICsgICAgQ2xlYW5B cmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNt cChBcmd2WzFdLCBMIi1DIikgPT0gMCkgew0KPiArICAgIFN0YXR1cyA9IENsZWFyQ2Fwc3VsZVN0 YXR1c1ZhcmlhYmxlKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItUCIpID09IDApIHsNCj4gKyAg ICBEdW1wRm1wRGF0YSgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItRSIpID09IDApIHsN Cj4gKyAgICBEdW1wRXNydERhdGEoKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLUYiKSA9 PSAwKSB7DQo+ICsgICAgTmVlZENvcHlPbkRpc2sgPSBUUlVFOw0KPiArICAgIENhcHN1bGVGaXJz dEluZGV4ID0gMjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBOZWVkQ29weU9uRGlzayA9IEZBTFNF Ow0KPiArICAgIENhcHN1bGVGaXJzdEluZGV4ID0gMTsNCj4gKyAgfQ0KPiArICBpZiAoU3RyQ21w KEFyZ3ZbQXJnYyAtIDFdLCBMIi1OUiIpID09IDApIHsNCj4gKyAgICBOb1Jlc2V0ID0gVFJVRTsN Cj4gKyAgICBDYXBzdWxlTGFzdEluZGV4ID0gQXJnYyAtIDI7DQo+ICsgIH0gZWxzZSB7DQo+ICsg ICAgTm9SZXNldCA9IEZBTFNFOw0KPiArICAgIENhcHN1bGVMYXN0SW5kZXggPSBBcmdjIC0gMTsN Cj4gKyAgfQ0KPiArICBDYXBzdWxlTnVtID0gQ2Fwc3VsZUxhc3RJbmRleCAtIENhcHN1bGVGaXJz dEluZGV4ICsgMTsNCj4gKw0KPiArICBpZiAoQ2Fwc3VsZUZpcnN0SW5kZXggPiBDYXBzdWxlTGFz dEluZGV4KSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBOTyBjYXBzdWxlIGltYWdlLlxu Iik7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0K PiArICB9DQo+ICsgIGlmIChDYXBzdWxlTnVtID4gTUFYX0NBUFNVTEVfTlVNKSB7DQo+ICsgICAg UHJpbnQoTCJDYXBzdWxlQXBwOiBUb28gbWFueSBjYXBzdWxlIGltYWdlcy5cbiIpOw0KPiArICAg IENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiAr DQo+ICsgIFplcm9NZW0oJkNhcHN1bGVCdWZmZXIsIHNpemVvZihDYXBzdWxlQnVmZmVyKSk7DQo+ ICsgIFplcm9NZW0oJkZpbGVTaXplLCBzaXplb2YoRmlsZVNpemUpKTsNCj4gKyAgQmxvY2tEZXNj cmlwdG9ycyA9IE5VTEw7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2Fwc3Vs ZU51bTsgSW5kZXgrKykgew0KPiArICAgIENhcHN1bGVOYW1lID0gQXJndltDYXBzdWxlRmlyc3RJ bmRleCArIEluZGV4XTsNCj4gKyAgICBTdGF0dXMgPSBSZWFkRmlsZVRvQnVmZmVyKENhcHN1bGVO YW1lLCAmRmlsZVNpemVbSW5kZXhdLCAmQ2Fwc3VsZUJ1ZmZlcltJbmRleF0pOw0KPiArICAgIGlm IChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBjYXBz dWxlIGltYWdlICglcykgaXMgbm90IGZvdW5kLlxuIiwgQ2Fwc3VsZU5hbWUpOw0KPiArICAgICAg Z290byBEb25lOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOZWVkQ29weU9uRGlz aykgew0KPiArICAgIFN0YXR1cyA9IENvcHlDYXBzdWxlVG9BY3RpdmVFZmlQYXJ0aXRpb24oQ2Fw c3VsZUJ1ZmZlciwgRmlsZVNpemUsIENhcHN1bGVOdW0pOw0KPiArICB9IGVsc2Ugew0KPiArICAg IC8vDQo+ICsgICAgLy8gRXZlcnkgY2Fwc3VsZSB1c2UgMiBkZXNjcmlwdG9yIDEgZm9yIGRhdGEg MSBmb3IgZW5kDQo+ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBCdWlsZEdhdGhlckxpc3QoQ2Fw c3VsZUJ1ZmZlciwgRmlsZVNpemUsIENhcHN1bGVOdW0sICZCbG9ja0Rlc2NyaXB0b3JzKTsNCj4g KyAgfQ0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIERvbmU7DQo+ ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDYWxsIHRoZSBydW50aW1lIHNlcnZpY2UgY2Fw c3VsZS4NCj4gKyAgLy8NCj4gKyAgTmVlZFJlc2V0ID0gRkFMU0U7DQo+ICsgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IENhcHN1bGVOdW07IEluZGV4KyspIHsNCj4gKyAgICBDYXBzdWxlSGVhZGVy QXJyYXlbSW5kZXhdID0gKEVGSV9DQVBTVUxFX0hFQURFUiAqKSBDYXBzdWxlQnVmZmVyW0luZGV4 XTsNCj4gKyAgICBpZiAoKENhcHN1bGVIZWFkZXJBcnJheVtJbmRleF0tPkZsYWdzICYgQ0FQU1VM RV9GTEFHU19QRVJTSVNUX0FDUk9TU19SRVNFVCkgIT0gMCkNCj4gew0KPiArICAgICAgTmVlZFJl c2V0ID0gVFJVRTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgQ2Fwc3VsZUhlYWRlckFycmF5W0Nh cHN1bGVOdW1dID0gTlVMTDsNCj4gKyAgaWYgKE5vUmVzZXQpIHsNCj4gKyAgICBOZWVkUmVzZXQg PSBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIElucXVpcmUgcGxhdGZvcm0g Y2FwYWJpbGl0eSBvZiBVcGRhdGVDYXBzdWxlLg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBnUlQt PlF1ZXJ5Q2Fwc3VsZUNhcGFiaWxpdGllcyAoQ2Fwc3VsZUhlYWRlckFycmF5LCBDYXBzdWxlTnVt LA0KPiAmTWF4Q2Fwc3VsZVNpemUsICZSZXNldFR5cGUpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0 YXR1cykpIHsNCj4gKyAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBmYWlsZWQgdG8gcXVlcnkgY2Fw c3VsZSBjYXBhYmlsaXR5IC0gJXJcbiIsIFN0YXR1cyk7DQo+ICsgICAgZ290byBEb25lOw0KPiAr ICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5kZXgr Kykgew0KPiArICAgIGlmIChGaWxlU2l6ZVtJbmRleF0gPiBNYXhDYXBzdWxlU2l6ZSkgew0KPiAr ICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogY2Fwc3VsZSBpcyB0b28gbGFyZ2UgdG8gdXBkYXRl LCAlbGQgaXMgYWxsb3dlZFxuIiwNCj4gTWF4Q2Fwc3VsZVNpemUpOw0KPiArICAgICAgU3RhdHVz ID0gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAgZ290byBEb25lOw0KPiArICAgIH0NCj4gKyAg fQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGlucHV0IGNhcHN1bGUg aW1hZ2UgaGFzIHRoZSBmbGFnIG9mIHBlcnNpc3QgYWNyb3NzIHN5c3RlbQ0KPiByZXNldC4NCj4g KyAgLy8NCj4gKyAgaWYgKE5lZWRSZXNldCkgew0KPiArICAgIFN0YXR1cyA9IGdSVC0+VXBkYXRl Q2Fwc3VsZShDYXBzdWxlSGVhZGVyQXJyYXksQ2Fwc3VsZU51bSwoVUlOVE4pDQo+IEJsb2NrRGVz Y3JpcHRvcnMpOw0KPiArICAgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAgICAg IFByaW50IChMIkNhcHN1bGVBcHA6IGZhaWxlZCB0byB1cGRhdGUgY2Fwc3VsZSAtICVyXG4iLCBT dGF0dXMpOw0KPiArICAgICAgZ290byBEb25lOw0KPiArICAgIH0NCj4gKyAgICAvLw0KPiArICAg IC8vIEZvciBjYXBzdWxlIHdobyBoYXMgcmVzZXQgZmxhZywgYWZ0ZXIgY2FsbGluZyBVcGRhdGVD YXBzdWxlIHNlcnZpY2UsdHJpZ2VyIGENCj4gKyAgICAvLyBzeXN0ZW0gcmVzZXQgdG8gcHJvY2Vz cyBjYXBzdWxlIHBlcnNpc3QgYWNyb3NzIGEgc3lzdGVtIHJlc2V0Lg0KPiArICAgIC8vDQo+ICsg ICAgZ1JULT5SZXNldFN5c3RlbSAoUmVzZXRUeXBlLCBFRklfU1VDQ0VTUywgMCwgTlVMTCk7DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBGb3IgY2Fwc3VsZSB3aG8gaGFzIG5v IHJlc2V0IGZsYWcsIG9ubHkgY2FsbCBVcGRhdGVDYXBzdWxlIFNlcnZpY2Ugd2l0aG91dCBhDQo+ ICsgICAgLy8gc3lzdGVtIHJlc2V0LiBUaGUgc2VydmljZSB3aWxsIHByb2Nlc3MgdGhlIGNhcHN1 bGUgaW1tZWRpYXRlbHkuDQo+ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBnUlQtPlVwZGF0ZUNh cHN1bGUgKENhcHN1bGVIZWFkZXJBcnJheSxDYXBzdWxlTnVtLChVSU5UTikNCj4gQmxvY2tEZXNj cmlwdG9ycyk7DQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiArICAgICAg UHJpbnQgKEwiQ2Fwc3VsZUFwcDogZmFpbGVkIHRvIHVwZGF0ZSBjYXBzdWxlIC0gJXJcbiIsIFN0 YXR1cyk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7 DQo+ICsNCj4gK0RvbmU6DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07 IEluZGV4KyspIHsNCj4gKyAgICBpZiAoQ2Fwc3VsZUJ1ZmZlcltJbmRleF0gIT0gTlVMTCkgew0K PiArICAgICAgRnJlZVBvb2wgKENhcHN1bGVCdWZmZXJbSW5kZXhdKTsNCj4gKyAgICB9DQo+ICsg IH0NCj4gKw0KPiArICBDbGVhbkdhdGhlckxpc3QoQmxvY2tEZXNjcmlwdG9ycywgQ2Fwc3VsZU51 bSk7DQo+ICsgIENsZWFuQXJnKCk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4g ZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVB cHAuaW5mDQo+IGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFw cC5pbmYNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uN2VlNDRmYw0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxl QXBwL0NhcHN1bGVBcHAuaW5mDQo+IEBAIC0wLDAgKzEsNzEgQEANCj4gKyMjICBAZmlsZQ0KPiAr IyAgQSBzaGVsbCBhcHBsaWNhdGlvbiB0aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nl c3MuDQo+ICsjDQo+ICsjIFRoaXMgYXBwbGljYXRpb24gY2FuIHRyaWdnZXIgY2Fwc3VsZSB1cGRh dGUgcHJvY2Vzcy4gSXQgY2FuIGFsc28NCj4gKyMgZ2VuZXJhdGUgY2Fwc3VsZSBpbWFnZSwgb3Ig ZHVtcCBjYXBzdWxlIHZhcmlhYmxlIGluZm9ybWF0aW9uLg0KPiArIw0KPiArIyAgQ29weXJpZ2h0 IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ ICsjICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsjICBh cmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0 aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4gKyMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQN Cj4gKyMgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4g KyMNCj4gKyMgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5T RSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJF U0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKyMN Cj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAg ICAgICAgPSAweDAwMDEwMDA2DQo+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9 IENhcHN1bGVBcHANCj4gKyAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAgID0gQ2Fwc3Vs ZUFwcC51bmkNCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gNENFRjMxREEt ODY4Mi00Mjc0LTlDQzQtQUVFNzUxNkE1RTdCDQo+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAg ICAgICAgICA9IFVFRklfQVBQTElDQVRJT04NCj4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAg ICAgICAgID0gMS4wDQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFVlZmlN YWluDQo+ICsNCj4gKyMNCj4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVm ZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUgYnVpbGQgdG9vbHMuDQo+ICsjDQo+ ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0DQo+ICsjDQo+ICsN Cj4gK1tTb3VyY2VzXQ0KPiArICBDYXBzdWxlQXBwLmMNCj4gKyAgQ2Fwc3VsZUR1bXAuYw0KPiAr ICBBcHBTdXBwb3J0LmMNCj4gKw0KPiArW1BhY2thZ2VzXQ0KPiArICBNZGVQa2cvTWRlUGtnLmRl Yw0KPiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArDQo+ICtbR3VpZHNdDQo+ ICsgIGdFZmlGaWxlSW5mb0d1aWQNCj4gKyAgZ0VmaVBhcnRUeXBlU3lzdGVtUGFydEd1aWQNCj4g KyAgZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZA0KPiArICBnRWZpQ2Fwc3VsZVJlcG9ydEd1aWQNCj4g KyAgZ0VmaUZtcENhcHN1bGVHdWlkDQo+ICsgIGdXaW5kb3dzVXhDYXBzdWxlR3VpZA0KPiArICBn RWZpQ2VydFR5cGVSc2EyMDQ4U2hhMjU2R3VpZA0KPiArICBnRWZpQ2VydFBrY3M3R3VpZA0KPiAr ICBnRWZpU3lzdGVtUmVzb3VyY2VUYWJsZUd1aWQNCj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAg Z0VmaUxvYWRlZEltYWdlUHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlTaW1wbGVGaWxlU3lzdGVtUHJv dG9jb2xHdWlkDQo+ICsgIGdFZmlHcmFwaGljc091dHB1dFByb3RvY29sR3VpZA0KPiArICBnRWZp RmlybXdhcmVNYW5hZ2VtZW50UHJvdG9jb2xHdWlkDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10N Cj4gKyAgQmFzZUxpYg0KPiArICBVZWZpQXBwbGljYXRpb25FbnRyeVBvaW50DQo+ICsgIERlYnVn TGliDQo+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliDQo+ICsgIFVlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYg0KPiArICBVZWZpTGliDQo+ICsg IFByaW50TGliDQo+ICsgIEVka2lpU3lzdGVtQ2Fwc3VsZUxpYg0KPiArDQo+ICtbVXNlckV4dGVu c2lvbnMuVGlhbm9Db3JlLiJFeHRyYUZpbGVzIl0NCj4gKyAgQ2Fwc3VsZUFwcEV4dHJhLnVuaQ0K PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3Vs ZUFwcC51bmkNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxl QXBwLnVuaQ0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi41NGQ2ZTEy DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1 bGVBcHAvQ2Fwc3VsZUFwcC51bmkNCj4gQEAgLTAsMCArMSwyMiBAQA0KPiArLy8gLyoqIEBmaWxl DQo+ICsvLyBBIHNoZWxsIGFwcGxpY2F0aW9uIHRoYXQgdHJpZ2dlcnMgY2Fwc3VsZSB1cGRhdGUg cHJvY2Vzcy4NCj4gKy8vDQo+ICsvLyBUaGlzIGFwcGxpY2F0aW9uIGNhbiB0cmlnZ2VyIGNhcHN1 bGUgdXBkYXRlIHByb2Nlc3MuIEl0IGNhbiBhbHNvDQo+ICsvLyBnZW5lcmF0ZSBjYXBzdWxlIGlt YWdlLCBvciBkdW1wIGNhcHN1bGUgdmFyaWFibGUgaW5mb3JtYXRpb24uDQo+ICsvLw0KPiArLy8g Q29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQo+ICsvLw0KPiArLy8gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1h dGVyaWFscw0KPiArLy8gYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsvLyB3aGljaCBhY2Nv bXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBt YXkgYmUgZm91bmQgYXQNCj4gKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2Qt bGljZW5zZS5waHANCj4gKy8vIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBC U0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArLy8gV0lUSE9VVCBXQVJSQU5USUVT IE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElF RC4NCj4gKy8vDQo+ICsvLyAqKi8NCj4gKw0KPiArDQo+ICsjc3RyaW5nIFNUUl9NT0RVTEVfQUJT VFJBQ1QgICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJBIHNoZWxsIGFwcGxpY2F0aW9uIHRo YXQNCj4gdHJpZ2dlcnMgY2Fwc3VsZSB1cGRhdGUgcHJvY2Vzcy4iDQo+ICsNCj4gKyNzdHJpbmcg U1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlRoaXMgYXBw bGljYXRpb24gY2FuIHRyaWdnZXINCj4gY2Fwc3VsZSB1cGRhdGUgcHJvY2Vzcy4gSXQgY2FuIGFs c28gZ2VuZXJhdGUgY2Fwc3VsZSBpbWFnZSwgb3IgZHVtcCBjYXBzdWxlIHZhcmlhYmxlDQo+IGlu Zm9ybWF0aW9uLiINCj4gKw0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9u L0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaQ0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNh dGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHBFeHRyYS51bmkNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMC4uYjVhODg0MA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01k ZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHBFeHRyYS51bmkNCj4g QEAgLTAsMCArMSwxOSBAQA0KPiArLy8gLyoqIEBmaWxlDQo+ICsvLyBDYXBzdWxlQXBwIExvY2Fs aXplZCBTdHJpbmdzIGFuZCBDb250ZW50DQo+ICsvLw0KPiArLy8gQ29weXJpZ2h0IChjKSAyMDE2 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsvLw0KPiAr Ly8gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArLy8gYXJl IGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsvLyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3Ry aWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4g Ky8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKy8v IFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAi QVMgSVMiIEJBU0lTLA0KPiArLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKy8vDQo+ICsvLyAq Ki8NCj4gKw0KPiArI3N0cmluZyBTVFJfUFJPUEVSVElFU19NT0RVTEVfTkFNRQ0KPiArI2xhbmd1 YWdlIGVuLVVTDQo+ICsiQ2Fwc3VsZSBBcHBsaWNhdGlvbiINCj4gKw0KPiArDQo+IGRpZmYgLS1n aXQgYS9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlRHVtcC5jDQo+ IGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUR1bXAuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5jNTZmNDFmDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3Vs ZUR1bXAuYw0KPiBAQCAtMCwwICsxLDg0MCBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIER1bXAgQ2Fw c3VsZSBpbWFnZSBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTYsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5zZWQgYW5k IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE IExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArICBodHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFT SVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5j bHVkZSA8UGlEeGUuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5 TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsj aW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExp YnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0Vka2lpU3lzdGVtQ2Fwc3VsZUxpYi5oPg0KPiArI2luY2x1ZGUgPFBy b3RvY29sL0Zpcm13YXJlTWFuYWdlbWVudC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvSW1hZ2VBdXRo ZW50aWNhdGlvbi5oPg0KPiArI2luY2x1ZGUgPEd1aWQvRWRraWlTeXN0ZW1GbXBDYXBzdWxlLmg+ DQo+ICsjaW5jbHVkZSA8R3VpZC9DYXBzdWxlUmVwb3J0Lmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9T eXN0ZW1SZXNvdXJjZVRhYmxlLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9GbXBDYXBzdWxlLmg+DQo+ ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9XaW5kb3dzVXhDYXBzdWxlLmg+DQo+ICsNCj4g Ky8qKg0KPiArICBSZWFkIGEgZmlsZS4NCj4gKw0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAg IFRoZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZp bGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZm ZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFJlYWQgZmlsZSBzdWNjZXNzZnVs bHkNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICBGaWxlIG5vdCBmb3VuZA0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtSZWFkRmlsZVRvQnVmZmVyKA0KPiArICBJTiAgQ0hBUjE2ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgT1VUIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gKyAgT1VUIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICtl eHRlcm4gVUlOVE4gIEFyZ2M7DQo+ICtleHRlcm4gQ0hBUjE2ICpBcmd2W107DQo+ICsNCj4gKy8q Kg0KPiArICBEdW1wIFVYIGNhcHN1bGUgaW5mb3JtYXRpb24uDQo+ICsNCj4gKyAgQHBhcmFtIENh cHN1bGVIZWFkZXIgICAgICBUaGUgVVggY2Fwc3VsZSBoZWFkZXINCj4gKyoqLw0KPiArVk9JRA0K PiArRHVtcFV4Q2Fwc3VsZSgNCj4gKyAgSU4gRUZJX0NBUFNVTEVfSEVBREVSICAqQ2Fwc3VsZUhl YWRlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9ESVNQTEFZX0NBUFNVTEUgICAgICAgICAgICAg ICAgICAgICAgICAgICAqRGlzcGxheUNhcHN1bGU7DQo+ICsgIERpc3BsYXlDYXBzdWxlID0gKEVG SV9ESVNQTEFZX0NBUFNVTEUgKilDYXBzdWxlSGVhZGVyOw0KPiArICBQcmludChMIltVeENhcHVz dWxlXVxuIik7DQo+ICsgIFByaW50KEwiQ2Fwc3VsZUhlYWRlcjpcbiIpOw0KPiArICBQcmludChM IiAgQ2Fwc3VsZUd1aWQgICAgICAtICVnXG4iLCAmRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFk ZXIuQ2Fwc3VsZUd1aWQpOw0KPiArICBQcmludChMIiAgSGVhZGVyU2l6ZSAgICAgICAtIDB4JXhc biIsIERpc3BsYXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkhlYWRlclNpemUpOw0KPiArICBQcmlu dChMIiAgRmxhZ3MgICAgICAgICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5DYXBzdWxl SGVhZGVyLkZsYWdzKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVJbWFnZVNpemUgLSAweCV4XG4i LCBEaXNwbGF5Q2Fwc3VsZS0NCj4gPkNhcHN1bGVIZWFkZXIuQ2Fwc3VsZUltYWdlU2l6ZSk7DQo+ ICsgIFByaW50KEwiSW1hZ2VQYXlsb2FkOlxuIik7DQo+ICsgIFByaW50KEwiICBWZXJzaW9uICAg ICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5WZXJzaW9uKTsN Cj4gKyAgUHJpbnQoTCIgIENoZWNrc3VtICAgICAgICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3Vs ZS0+SW1hZ2VQYXlsb2FkLkNoZWNrc3VtKTsNCj4gKyAgUHJpbnQoTCIgIEltYWdlVHlwZSAgICAg ICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLkltYWdlVHlwZSk7DQo+ ICsgIFByaW50KEwiICBNb2RlICAgICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUt PkltYWdlUGF5bG9hZC5Nb2RlKTsNCj4gKyAgUHJpbnQoTCIgIE9mZnNldFggICAgICAgICAgLSAw eCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk9mZnNldFgpOw0KPiArICBQcmlu dChMIiAgT2Zmc2V0WSAgICAgICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBh eWxvYWQuT2Zmc2V0WSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEZNUCBpbWFnZSBh dXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBAcGFyYW0gSW1hZ2UgICAgICBU aGUgRk1QIGNhcHN1bGUgaW1hZ2UNCj4gKyAgQHBhcmFtIEltYWdlU2l6ZSAgVGhlIHNpemUgb2Yg dGhlIEZNUCBjYXBzdWxlIGltYWdlIGluIGJ5dGVzLg0KPiArDQo+ICsgIEByZXR1cm4gdGhlIHNp emUgb2YgRk1QIGF1dGhlbnRpY2F0aW9uLg0KPiArKiovDQo+ICtVSU5UTg0KPiArRHVtcEltYWdl QXV0aGVudGljYXRpb24oDQo+ICsgIElOIFZPSUQgICAqSW1hZ2UsDQo+ICsgIElOIFVJTlROICBJ bWFnZVNpemUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfQVVUSEVOVElD QVRJT04gICAgICAgICAgICAgKkltYWdlQXV0aGVudGljYXRpb247DQo+ICsNCj4gKyAgSW1hZ2VB dXRoZW50aWNhdGlvbiA9IEltYWdlOw0KPiArICBpZiAoQ29tcGFyZUd1aWQoJkltYWdlQXV0aGVu dGljYXRpb24tPkF1dGhJbmZvLkNlcnRUeXBlLCAmZ0VmaUNlcnRQa2NzN0d1aWQpIHx8DQo+ICsg ICAgICBDb21wYXJlR3VpZCgmSW1hZ2VBdXRoZW50aWNhdGlvbi0+QXV0aEluZm8uQ2VydFR5cGUs DQo+ICZnRWZpQ2VydFR5cGVSc2EyMDQ4U2hhMjU2R3VpZCkpIHsNCj4gKyAgICBQcmludChMIltJ bWFnZUF1dGhlbnRpY2F0aW9uXVxuIik7DQo+ICsgICAgUHJpbnQoTCIgIE1vbm90b25pY0NvdW50 ICAgLSAweCVseFxuIiwgSW1hZ2VBdXRoZW50aWNhdGlvbi0+TW9ub3RvbmljQ291bnQpOw0KPiAr ICAgIFByaW50KEwiV0lOX0NFUlRJRklDQVRFOlxuIik7DQo+ICsgICAgUHJpbnQoTCIgIGR3TGVu Z3RoICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUF1dGhlbnRpY2F0aW9uLT5BdXRoSW5mby5IZHIu ZHdMZW5ndGgpOw0KPiArICAgIFByaW50KEwiICB3UmV2aXNpb24gICAgICAgIC0gMHgleFxuIiwg SW1hZ2VBdXRoZW50aWNhdGlvbi0NCj4gPkF1dGhJbmZvLkhkci53UmV2aXNpb24pOw0KPiArICAg IFByaW50KEwiICB3Q2VydGlmaWNhdGVUeXBlIC0gMHgleFxuIiwgSW1hZ2VBdXRoZW50aWNhdGlv bi0NCj4gPkF1dGhJbmZvLkhkci53Q2VydGlmaWNhdGVUeXBlKTsNCj4gKyAgICBQcmludChMIiAg Q2VydFR5cGUgICAgICAgICAtICVnXG4iLCAmSW1hZ2VBdXRoZW50aWNhdGlvbi0+QXV0aEluZm8u Q2VydFR5cGUpOw0KPiArICAgIHJldHVybiBzaXplb2YoSW1hZ2VBdXRoZW50aWNhdGlvbi0+TW9u b3RvbmljQ291bnQpICsgSW1hZ2VBdXRoZW50aWNhdGlvbi0NCj4gPkF1dGhJbmZvLkhkci5kd0xl bmd0aDsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICByZXR1cm4gMDsNCj4gKyAgfQ0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgRHVtcCBFREtJSSBzeXN0ZW0gRk1QIGNhcHN1bGUuDQo+ICsNCj4gKyAg QHBhcmFtIEltYWdlICAgICAgVGhlIEVES0lJIHN5c3RlbSBGTVAgY2Fwc3VsZS4NCj4gKyAgQHBh cmFtIEltYWdlU2l6ZSAgVGhlIHNpemUgb2YgdGhlIEVES0lJIHN5c3RlbSBGTVAgY2Fwc3VsZSBp biBieXRlcy4NCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEVka2lpU3lzdGVtRm1wQ2Fwc3VsZSgN Cj4gKyAgSU4gVk9JRCAgICpJbWFnZSwNCj4gKyAgSU4gVUlOVE4gIEltYWdlU2l6ZQ0KPiArICAp DQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbWFnZU9mZnNldDsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpCaW9zSW1hZ2U7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCaW9zSW1hZ2VTaXplOw0KPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ow0KPiArICBFREtJSV9TWVNURU1fRklS TVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgKlRlbXBJbWFnZUZtcEluZm87DQo+ICsgIEVE S0lJX1NZU1RFTV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAqSW1hZ2VGbXBJbmZv Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1h Z2VGbXBJbmZvU2l6ZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBXZSBkbyBub3Qga25vdyBpZiB0 aGVyZSBpcyBFRklfRklSTVdBUkVfSU1BR0VfQVVUSEVOVElDQVRJT04uDQo+ICsgIC8vIHNvIGp1 c3QgKnRyeSogdG8gcGFyc2UgaXQNCj4gKyAgLy8NCj4gKyAgSW1hZ2VPZmZzZXQgPSBEdW1wSW1h Z2VBdXRoZW50aWNhdGlvbihJbWFnZSwgSW1hZ2VTaXplKTsNCj4gKyAgSW1hZ2UgPSAoVUlOVDgg KilJbWFnZSArIEltYWdlT2Zmc2V0Ow0KPiArICBJbWFnZVNpemUgLT0gSW1hZ2VPZmZzZXQ7DQo+ ICsgIFByaW50KEwiW0ltYWdlXVxuIik7DQo+ICsgIFByaW50KEwiICBJbWFnZVNpemUgICAtIDB4 JXhcbiIsIEltYWdlU2l6ZSk7DQo+ICsNCj4gKyAgUmVzdWx0ID0gRXh0cmFjdENvbmZpZ0ltYWdl KEltYWdlLCBJbWFnZVNpemUsICZCaW9zSW1hZ2UsICZCaW9zSW1hZ2VTaXplKTsNCj4gKyAgaWYg KFJlc3VsdCkgew0KPiArICAgIFByaW50KEwiICBDb25maWdGaWxlU2l6ZSAgLSAweCV4XG4iLCBC aW9zSW1hZ2VTaXplKTsNCj4gKyAgfQ0KPiArICBSZXN1bHQgPSBFeHRyYWN0RHJpdmVyRnZJbWFn ZShJbWFnZSwgSW1hZ2VTaXplLCAmQmlvc0ltYWdlLCAmQmlvc0ltYWdlU2l6ZSk7DQo+ICsgIGlm IChSZXN1bHQpIHsNCj4gKyAgICBQcmludChMIiAgRHJpdmVyRnZTaXplICAgIC0gMHgleFxuIiwg Qmlvc0ltYWdlU2l6ZSk7DQo+ICsgIH0NCj4gKyAgUmVzdWx0ID0gRXh0cmFjdFN5c3RlbUZpcm13 YXJlSW1hZ2UoSW1hZ2UsIEltYWdlU2l6ZSwgJkJpb3NJbWFnZSwgJkJpb3NJbWFnZVNpemUpOw0K PiArICBpZiAoUmVzdWx0KSB7DQo+ICsgICAgUHJpbnQoTCIgIEJpb3NJbWFnZVNpemUgICAtIDB4 JXhcbiIsIEJpb3NJbWFnZVNpemUpOw0KPiArICB9DQo+ICsgIFJlc3VsdCA9IEV4dHJhY3RTeXN0 ZW1GaXJtd2FyZUltYWdlRm1wSW5mbyhCaW9zSW1hZ2UsIEJpb3NJbWFnZVNpemUsDQo+ICZUZW1w SW1hZ2VGbXBJbmZvLCAmSW1hZ2VGbXBJbmZvU2l6ZSk7DQo+ICsgIGlmIChSZXN1bHQpIHsNCj4g KyAgICBJbWFnZUZtcEluZm8gPSBBbGxvY2F0ZUNvcHlQb29sKEltYWdlRm1wSW5mb1NpemUsIFRl bXBJbWFnZUZtcEluZm8pOw0KPiArICAgIGlmIChJbWFnZUZtcEluZm8gIT0gTlVMTCkgew0KPiAr ICAgICAgUHJpbnQoTCJbSW1hZ2VGbXBJbmZvXVxuIik7DQo+ICsgICAgICBQcmludChMIiAgU2ln bmF0dXJlICAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5TaWdu YXR1cmUpOw0KPiArICAgICAgUHJpbnQoTCIgIEhlYWRlckxlbmd0aCAgICAgICAgICAgICAgICAg ICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0+SGVhZGVyTGVuZ3RoKTsNCj4gKyAgICAgIFByaW50 KEwiICBMZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcElu Zm8tPkxlbmd0aCk7DQo+ICsgICAgICBQcmludChMIiAgUGFja2FnZVZlcnNpb24gICAgICAgICAg ICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+UGFja2FnZVZlcnNpb24pOw0KPiAr ICAgICAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uTmFtZVN0cmluZ09mZnNldCAtIDB4JXhcbiIs IEltYWdlRm1wSW5mby0NCj4gPlBhY2thZ2VWZXJzaW9uTmFtZVN0cmluZ09mZnNldCk7DQo+ICsg ICAgICBpZiAoSW1hZ2VGbXBJbmZvLT5QYWNrYWdlVmVyc2lvbk5hbWVTdHJpbmdPZmZzZXQgIT0g MCkgew0KPiArICAgICAgICBQcmludChMIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0gJXNcbiIsIChVSU5UOCAqKUltYWdlRm1wSW5mbyArDQo+IEltYWdlRm1wSW5mby0+UGFja2Fn ZVZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0KTsNCj4gKyAgICAgIH0NCj4gKyAgICAgIFByaW50KEwi ICBJbWFnZUluZGV4ICAgICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8t PkltYWdlSW5kZXgpOw0KPiArICAgICAgUHJpbnQoTCIgIEltYWdlVHlwZUlkICAgICAgICAgICAg ICAgICAgICAtICVnXG4iLCAmSW1hZ2VGbXBJbmZvLT5JbWFnZVR5cGVJZCk7DQo+ICsgICAgICBQ cmludChMIiAgSW1hZ2VJZCAgICAgICAgICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdl Rm1wSW5mby0+SW1hZ2VJZCk7DQo+ICsgICAgICBQcmludChMIiAgSW1hZ2VJZE5hbWVTdHJpbmdP ZmZzZXQgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+SW1hZ2VJZE5hbWVTdHJp bmdPZmZzZXQpOw0KPiArICAgICAgaWYgKEltYWdlRm1wSW5mby0+SW1hZ2VJZE5hbWVTdHJpbmdP ZmZzZXQgIT0gMCkgew0KPiArICAgICAgICBQcmludChMIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0gJXNcbiIsIChVSU5UOCAqKUltYWdlRm1wSW5mbyArDQo+IEltYWdlRm1wSW5m by0+SW1hZ2VJZE5hbWVTdHJpbmdPZmZzZXQpOw0KPiArICAgICAgfQ0KPiArICAgICAgUHJpbnQo TCIgIFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5m by0+VmVyc2lvbik7DQo+ICsgICAgICBQcmludChMIiAgVmVyc2lvbk5hbWVTdHJpbmdPZmZzZXQg ICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+VmVyc2lvbk5hbWVTdHJpbmdPZmZz ZXQpOw0KPiArICAgICAgaWYgKEltYWdlRm1wSW5mby0+VmVyc2lvbk5hbWVTdHJpbmdPZmZzZXQg IT0gMCkgew0KPiArICAgICAgICBQcmludChMIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0gJXNcbiIsIChVSU5UOCAqKUltYWdlRm1wSW5mbyArDQo+IEltYWdlRm1wSW5mby0+VmVy c2lvbk5hbWVTdHJpbmdPZmZzZXQpOw0KPiArICAgICAgfQ0KPiArICAgICAgUHJpbnQoTCIgIFNp emUgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBJbWFnZUZtcEluZm8tPlNp emUpOw0KPiArICAgICAgUHJpbnQoTCIgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgICAgICAgICAgICAt IDB4JWx4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9ydGVkKTsNCj4gKyAg ICAgIFByaW50KEwiICBBdHRyaWJ1dGVzU2V0dGluZyAgICAgICAgICAgICAgLSAweCVseFxuIiwg SW1hZ2VGbXBJbmZvLQ0KPiA+QXR0cmlidXRlc1NldHRpbmcpOw0KPiArICAgICAgUHJpbnQoTCIg IENvbXBhdGliaWxpdGllcyAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBJbWFnZUZtcEluZm8t DQo+ID5Db21wYXRpYmlsaXRpZXMpOw0KPiArICAgICAgUHJpbnQoTCIgIExvd2VzdFN1cHBvcnRl ZEltYWdlVmVyc2lvbiAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkxvd2VzdFN1cHBv cnRlZEltYWdlVmVyc2lvbik7DQo+ICsgICAgICBQcmludChMIiAgTGFzdEF0dGVtcHRWZXJzaW9u ICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+TGFzdEF0dGVtcHRWZXJz aW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBMYXN0QXR0ZW1wdFN0YXR1cyAgICAgICAgICAgICAg LSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5MYXN0QXR0ZW1wdFN0YXR1cyk7DQo+ICsgICAg ICBQcmludChMIiAgSGFyZHdhcmVJbnN0YW5jZSAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIElt YWdlRm1wSW5mby0NCj4gPkhhcmR3YXJlSW5zdGFuY2UpOw0KPiArICAgICAgUHJpbnQoTCIgIFZl cnNpb24gICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0+VmVy c2lvbik7DQo+ICsgICAgICBGcmVlUG9vbChJbWFnZUZtcEluZm8pOw0KPiArICAgIH0NCj4gKyAg fQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBhIG5vbi1uZXN0ZWQgRk1QIGNhcHN1bGUu DQo+ICsNCj4gKyAgQHBhcmFtICBDYXBzdWxlSGVhZGVyICBBIHBvaW50ZXIgdG8gQ2Fwc3VsZUhl YWRlcg0KPiArICBAcGFyYW0gIElzU3lzdGVtRm1wICAgIElmIGl0IGlzIGEgc3lzdGVtIEZNUA0K PiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wQ2Fwc3VsZSgNCj4gKyAgSU4gRUZJX0NBUFNVTEVf SEVBREVSICAqQ2Fwc3VsZUhlYWRlciwNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICBJc1N5 c3RlbUZtcA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNV TEVfSEVBREVSICAgICAgICAqRm1wQ2Fwc3VsZUhlYWRlcjsNCj4gKyAgVUlOVDY0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJdGVtT2Zmc2V0TGlzdDsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ICsg IEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSU1BR0VfSEVBREVSICAqRm1wSW1hZ2VI ZWFkZXI7DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqSW1hZ2U7DQo+ICsNCj4gKyAgUHJpbnQoTCJbRm1wQ2FwdXN1bGVdXG4iKTsNCj4gKyAgUHJp bnQoTCJDYXBzdWxlSGVhZGVyOlxuIik7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlR3VpZCAgICAg IC0gJWdcbiIsICZDYXBzdWxlSGVhZGVyLT5DYXBzdWxlR3VpZCk7DQo+ICsgIFByaW50KEwiICBI ZWFkZXJTaXplICAgICAgIC0gMHgleFxuIiwgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ ICsgIFByaW50KEwiICBGbGFncyAgICAgICAgICAgIC0gMHgleFxuIiwgQ2Fwc3VsZUhlYWRlci0+ RmxhZ3MpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUltYWdlU2l6ZSAtIDB4JXhcbiIsIENhcHN1 bGVIZWFkZXItPkNhcHN1bGVJbWFnZVNpemUpOw0KPiArDQo+ICsgIEZtcENhcHN1bGVIZWFkZXIg PSAoRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9IRUFERVIgKikoKFVJTlQ4ICopQ2Fw c3VsZUhlYWRlcg0KPiArIENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUpOw0KPiArICBJdGVtT2Zm c2V0TGlzdCA9IChVSU5UNjQgKikoRm1wQ2Fwc3VsZUhlYWRlciArIDEpOw0KPiArICBQcmludChM IkZtcEhlYWRlcjpcbiIpOw0KPiArICBQcmludChMIiAgVmVyc2lvbiAgICAgICAgICAgICAtIDB4 JXhcbiIsIEZtcENhcHN1bGVIZWFkZXItPlZlcnNpb24pOw0KPiArICBQcmludChMIiAgRW1iZWRk ZWREcml2ZXJDb3VudCAtIDB4JXhcbiIsIEZtcENhcHN1bGVIZWFkZXItPkVtYmVkZGVkRHJpdmVy Q291bnQpOw0KPiArICBQcmludChMIiAgUGF5bG9hZEl0ZW1Db3VudCAgICAtIDB4JXhcbiIsIEZt cENhcHN1bGVIZWFkZXItPlBheWxvYWRJdGVtQ291bnQpOw0KPiArICBDb3VudCA9IEZtcENhcHN1 bGVIZWFkZXItPkVtYmVkZGVkRHJpdmVyQ291bnQgKyBGbXBDYXBzdWxlSGVhZGVyLT5QYXlsb2Fk SXRlbUNvdW50Ow0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDb3VudDsgSW5kZXgrKykg ew0KPiArICAgIFByaW50KEwiICBPZmZzZXRbJWRdICAgICAgICAgICAtIDB4JXhcbiIsIEluZGV4 LCBJdGVtT2Zmc2V0TGlzdFtJbmRleF0pOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9 IEZtcENhcHN1bGVIZWFkZXItPkVtYmVkZGVkRHJpdmVyQ291bnQ7IEluZGV4IDwgQ291bnQ7IElu ZGV4KyspIHsNCj4gKyAgICBQcmludChMIkZtcFBheWxvYWRbJWRdIEltYWdlSGVhZGVyOlxuIiwg SW5kZXgpOw0KPiArICAgIEZtcEltYWdlSGVhZGVyID0gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5U X0NBUFNVTEVfSU1BR0VfSEVBREVSICopKChVSU5UOA0KPiAqKUZtcENhcHN1bGVIZWFkZXIgKyBJ dGVtT2Zmc2V0TGlzdFtJbmRleF0pOw0KPiArICAgIFByaW50KEwiICBWZXJzaW9uICAgICAgICAg ICAgICAgIC0gMHgleFxuIiwgRm1wSW1hZ2VIZWFkZXItPlZlcnNpb24pOw0KPiArICAgIFByaW50 KEwiICBVcGRhdGVJbWFnZVR5cGVJZCAgICAgIC0gJWdcbiIsICZGbXBJbWFnZUhlYWRlci0+VXBk YXRlSW1hZ2VUeXBlSWQpOw0KPiArICAgIFByaW50KEwiICBVcGRhdGVJbWFnZUluZGV4ICAgICAg IC0gMHgleFxuIiwgRm1wSW1hZ2VIZWFkZXItPlVwZGF0ZUltYWdlSW5kZXgpOw0KPiArICAgIFBy aW50KEwiICBVcGRhdGVJbWFnZVNpemUgICAgICAgIC0gMHgleFxuIiwgRm1wSW1hZ2VIZWFkZXIt PlVwZGF0ZUltYWdlU2l6ZSk7DQo+ICsgICAgUHJpbnQoTCIgIFVwZGF0ZVZlbmRvckNvZGVTaXpl ICAgLSAweCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VXBkYXRlVmVuZG9yQ29kZVNpemUpOw0KPiAr ICAgIGlmIChGbXBJbWFnZUhlYWRlci0+VmVyc2lvbiA+PQ0KPiBFRklfRklSTVdBUkVfTUFOQUdF TUVOVF9DQVBTVUxFX0lNQUdFX0hFQURFUl9JTklUX1ZFUlNJT04pIHsNCj4gKyAgICAgIFByaW50 KEwiICBVcGRhdGVIYXJkd2FyZUluc3RhbmNlIC0gMHglbHhcbiIsIEZtcEltYWdlSGVhZGVyLQ0K PiA+VXBkYXRlSGFyZHdhcmVJbnN0YW5jZSk7DQo+ICsgICAgfQ0KPiArICAgIGlmIChGbXBJbWFn ZUhlYWRlci0+VmVyc2lvbiA+PQ0KPiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0lN QUdFX0hFQURFUl9JTklUX1ZFUlNJT04pIHsNCj4gKyAgICAgIEltYWdlID0gKFVJTlQ4ICopKEZt cEltYWdlSGVhZGVyICsgMSk7DQo+ICsgICAgfSAgZWxzZSB7DQo+ICsgICAgICBJbWFnZSA9IChV SU5UOCAqKUZtcEltYWdlSGVhZGVyICsNCj4gT0ZGU0VUX09GKEVGSV9GSVJNV0FSRV9NQU5BR0VN RU5UX0NBUFNVTEVfSU1BR0VfSEVBREVSLCBVcGRhdGVIYXJkd2FyZUluc3RhbmNlKTsNCj4gKyAg ICB9DQo+ICsgICAgaWYgKElzU3lzdGVtRm1wKSB7DQo+ICsgICAgICBEdW1wRWRraWlTeXN0ZW1G bXBDYXBzdWxlKEltYWdlLCBGbXBJbWFnZUhlYWRlci0+VXBkYXRlSW1hZ2VTaXplKTsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybiBpZiB0aGVyZSBpcyBh IEZNUCBoZWFkZXIgYmVsb3cgY2Fwc3VsZSBoZWFkZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBD YXBzdWxlSGVhZGVyIEEgcG9pbnRlciB0byBFRklfQ0FQU1VMRV9IRUFERVINCj4gKw0KPiArICBA cmV0dmFsIFRSVUUgIFRoZXJlIGlzIGEgRk1QIGhlYWRlciBiZWxvdyBjYXBzdWxlIGhlYWRlci4N Cj4gKyAgQHJldHZhbCBGQUxTRSBUaGVyZSBpcyBub3QgYSBGTVAgaGVhZGVyIGJlbG93IGNhcHN1 bGUgaGVhZGVyDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzTmVzdGVkRm1wQ2Fwc3VsZSgNCj4g KyAgSU4gRUZJX0NBUFNVTEVfSEVBREVSICAgICAgICAgKkNhcHN1bGVIZWFkZXINCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9T WVNURU1fUkVTT1VSQ0VfVEFCTEUgICpFc3J0Ow0KPiArICBFRklfU1lTVEVNX1JFU09VUkNFX0VO VFJZICAqRXNydEVudHJ5Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgRXNydEd1aWRGb3VuZDsNCj4gKyAgRUZJ X0NBUFNVTEVfSEVBREVSICAgICAgICAgKk5lc3RlZENhcHN1bGVIZWFkZXI7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgIE5lc3RlZENhcHN1bGVTaXplOw0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIENoZWNrIEVTUlQNCj4gKyAgLy8NCj4gKyAgRXNydEd1aWRGb3VuZCA9IEZBTFNFOw0K PiArICBTdGF0dXMgPSBFZmlHZXRTeXN0ZW1Db25maWd1cmF0aW9uVGFibGUoJmdFZmlTeXN0ZW1S ZXNvdXJjZVRhYmxlR3VpZCwgKFZPSUQNCj4gKiopJkVzcnQpOw0KPiArICBpZiAoIUVGSV9FUlJP UihTdGF0dXMpKSB7DQo+ICsgICAgRXNydEVudHJ5ID0gKFZPSUQgKikoRXNydCArIDEpOw0KPiAr ICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEVzcnQtPkZ3UmVzb3VyY2VDb3VudDsgSW5kZXgr KywgRXNydEVudHJ5KyspIHsNCj4gKyAgICAgIGlmIChDb21wYXJlR3VpZCgmRXNydEVudHJ5LT5G d0NsYXNzLCAmQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUd1aWQpKSB7DQo+ICsgICAgICAgIEVzcnRH dWlkRm91bmQgPSBUUlVFOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4gKyAgICB9 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIUVzcnRHdWlkRm91bmQpIHsNCj4gKyAgICByZXR1cm4g RkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayBuZXN0ZWQgY2Fwc3Vs ZSBoZWFkZXINCj4gKyAgLy8gRk1QIEdVSUQgYWZ0ZXIgRVNSVCBvbmUNCj4gKyAgLy8NCj4gKyAg TmVzdGVkQ2Fwc3VsZUhlYWRlciA9IChFRklfQ0FQU1VMRV9IRUFERVIgKikoKFVJTlQ4ICopQ2Fw c3VsZUhlYWRlciArIENhcHN1bGVIZWFkZXItDQo+ID5IZWFkZXJTaXplKTsNCj4gKyAgTmVzdGVk Q2Fwc3VsZVNpemUgPSAoVUlOVE4pQ2Fwc3VsZUhlYWRlciArIENhcHN1bGVIZWFkZXItPkhlYWRl clNpemUgLQ0KPiAoVUlOVE4pTmVzdGVkQ2Fwc3VsZUhlYWRlcjsNCj4gKyAgaWYgKE5lc3RlZENh cHN1bGVTaXplIDwgc2l6ZW9mKEVGSV9DQVBTVUxFX0hFQURFUikpIHsNCj4gKyAgICByZXR1cm4g RkFMU0U7DQo+ICsgIH0NCj4gKyAgaWYgKCFDb21wYXJlR3VpZCgmTmVzdGVkQ2Fwc3VsZUhlYWRl ci0+Q2Fwc3VsZUd1aWQsICZnRWZpRm1wQ2Fwc3VsZUd1aWQpKSB7DQo+ICsgICAgcmV0dXJuIEZB TFNFOw0KPiArICB9DQo+ICsgIHJldHVybiBUUlVFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg RHVtcCBjYXBzdWxlIGluZm9ybWF0aW9uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFRoZSBjYXBzdWxlIGluZm9ybWF0aW9uIGlzIGR1bXBlZC4NCj4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgIElucHV0IHBhcmFtZXRlciBpcyBub3QgdmFsaWQuDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0R1bXBDYXBzdWxlKA0KPiArICBWT0lEDQo+ICsgICkN Cj4gK3sNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpDYXBzdWxlTmFtZTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWxlU2l6ZTsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIElzU3lzdGVtRm1wOw0KPiArICBFRklfQ0FQU1VMRV9IRUFERVIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVIZWFkZXI7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAg aWYgKEFyZ2MgIT0gMykgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogSW52YWxpZCBQYXJh bWV0ZXIuXG4iKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsN Cj4gKyAgSXNTeXN0ZW1GbXAgPSBGQUxTRTsNCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1E UyIpID09IDApIHsNCj4gKyAgICBJc1N5c3RlbUZtcCA9IFRSVUU7DQo+ICsgIH0NCj4gKw0KPiAr ICBDYXBzdWxlTmFtZSA9IEFyZ3ZbMl07DQo+ICsgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZmZXIo Q2Fwc3VsZU5hbWUsICZGaWxlU2l6ZSwgJkJ1ZmZlcik7DQo+ICsgIGlmIChFRklfRVJST1IoU3Rh dHVzKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogQ2Fwc3VsZSAoJXMpIGlzIG5vdCBm b3VuZC5cbiIsIENhcHN1bGVOYW1lKTsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0K PiArICBDYXBzdWxlSGVhZGVyID0gQnVmZmVyOw0KPiArICBpZiAoQ29tcGFyZUd1aWQoJkNhcHN1 bGVIZWFkZXItPkNhcHN1bGVHdWlkLCAmZ1dpbmRvd3NVeENhcHN1bGVHdWlkKSkgew0KPiArICAg IER1bXBVeENhcHN1bGUoQ2Fwc3VsZUhlYWRlcik7DQo+ICsgICAgU3RhdHVzID0gRUZJX1NVQ0NF U1M7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENvbXBhcmVHdWlk KCZDYXBzdWxlSGVhZGVyLT5DYXBzdWxlR3VpZCwgJmdFZmlGbXBDYXBzdWxlR3VpZCkpIHsNCj4g KyAgICBEdW1wRm1wQ2Fwc3VsZShDYXBzdWxlSGVhZGVyLCBJc1N5c3RlbUZtcCk7DQo+ICsgIH0N Cj4gKyAgaWYgKElzTmVzdGVkRm1wQ2Fwc3VsZShDYXBzdWxlSGVhZGVyKSkgew0KPiArICAgIFBy aW50KEwiW05lc3RlZENhcHVzdWxlXVxuIik7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlSGVhZGVy OlxuIik7DQo+ICsgICAgUHJpbnQoTCIgIENhcHN1bGVHdWlkICAgICAgLSAlZ1xuIiwgJkNhcHN1 bGVIZWFkZXItPkNhcHN1bGVHdWlkKTsNCj4gKyAgICBQcmludChMIiAgSGVhZGVyU2l6ZSAgICAg ICAtIDB4JXhcbiIsIENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUpOw0KPiArICAgIFByaW50KEwi ICBGbGFncyAgICAgICAgICAgIC0gMHgleFxuIiwgQ2Fwc3VsZUhlYWRlci0+RmxhZ3MpOw0KPiAr ICAgIFByaW50KEwiICBDYXBzdWxlSW1hZ2VTaXplIC0gMHgleFxuIiwgQ2Fwc3VsZUhlYWRlci0+ Q2Fwc3VsZUltYWdlU2l6ZSk7DQo+ICsgICAgRHVtcEZtcENhcHN1bGUoKEVGSV9DQVBTVUxFX0hF QURFUiAqKSgoVUlOVE4pQ2Fwc3VsZUhlYWRlciArIENhcHN1bGVIZWFkZXItDQo+ID5IZWFkZXJT aXplKSwgSXNTeXN0ZW1GbXApOw0KPiArICB9DQo+ICsNCj4gK0RvbmU6DQo+ICsgIEZyZWVQb29s KEJ1ZmZlcik7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBE dW1wIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICBUaGUgY2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUgaXMgZHVtcGVkLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1ldGVyIGlzIG5vdCB2 YWxpZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRG1wQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxl KA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fw c3VsZVZhck5hbWVbMjBdOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqVGVtcFZhck5hbWU7DQo+ICsgIEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9IRUFERVIg ICpDYXBzdWxlUmVzdWx0Ow0KPiArICBFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfRk1QICAg ICAqQ2Fwc3VsZVJlc3VsdEZtcDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ2Fwc3VsZUZpbGVOYW1lU2l6ZTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ2Fwc3VsZUluZGV4RGF0YVsxMl07DQo+ICsgIENIQVIxNiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpDYXBzdWxlSW5kZXg7DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0 VmFyaWFibGUyKA0KPiArICAgICAgICAgICAgIEwiQ2Fwc3VsZU1heCIsDQo+ICsgICAgICAgICAg ICAgJmdFZmlDYXBzdWxlUmVwb3J0R3VpZCwNCj4gKyAgICAgICAgICAgICAoVk9JRCAqKikmQ2Fw c3VsZUluZGV4LA0KPiArICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICApOw0KPiAr ICBpZiAoIUVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgQ29weU1lbShDYXBzdWxlSW5kZXhE YXRhLCBDYXBzdWxlSW5kZXgsIDExICogc2l6ZW9mKENIQVIxNikpOw0KPiArICAgIENhcHN1bGVJ bmRleERhdGFbMTFdID0gMDsNCj4gKyAgICBQcmludChMIkNhcHN1bGVNYXggLSAlc1xuIiwgQ2Fw c3VsZUluZGV4RGF0YSk7DQo+ICsgICAgRnJlZVBvb2woQ2Fwc3VsZUluZGV4KTsNCj4gKyAgfQ0K PiArICBTdGF0dXMgPSBHZXRWYXJpYWJsZTIoDQo+ICsgICAgICAgICAgICAgTCJDYXBzdWxlTGFz dCIsDQo+ICsgICAgICAgICAgICAgJmdFZmlDYXBzdWxlUmVwb3J0R3VpZCwNCj4gKyAgICAgICAg ICAgICAoVk9JRCAqKikmQ2Fwc3VsZUluZGV4LA0KPiArICAgICAgICAgICAgIE5VTEwNCj4gKyAg ICAgICAgICAgICApOw0KPiArICBpZiAoIUVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgQ29w eU1lbShDYXBzdWxlSW5kZXhEYXRhLCBDYXBzdWxlSW5kZXgsIDExICogc2l6ZW9mKENIQVIxNikp Ow0KPiArICAgIENhcHN1bGVJbmRleERhdGFbMTFdID0gMDsNCj4gKyAgICBQcmludChMIkNhcHN1 bGVMYXN0IC0gJXNcbiIsIENhcHN1bGVJbmRleERhdGEpOw0KPiArICAgIEZyZWVQb29sKENhcHN1 bGVJbmRleCk7DQo+ICsgIH0NCj4gKw0KPiArDQo+ICsgIFN0ckNweVMgKENhcHN1bGVWYXJOYW1l LCBzaXplb2YoQ2Fwc3VsZVZhck5hbWUpL3NpemVvZihDYXBzdWxlVmFyTmFtZVswXSksDQo+IEwi Q2Fwc3VsZSIpOw0KPiArICBUZW1wVmFyTmFtZSA9IENhcHN1bGVWYXJOYW1lICsgU3RyTGVuIChD YXBzdWxlVmFyTmFtZSk7DQo+ICsgIEluZGV4ID0gMDsNCj4gKw0KPiArICB3aGlsZSAoVFJVRSkg ew0KPiArICAgIFVuaWNvZGVTUHJpbnQgKFRlbXBWYXJOYW1lLCA1ICogc2l6ZW9mKENIQVIxNiks IEwiJTA0eCIsIEluZGV4KTsNCj4gKw0KPiArICAgIFN0YXR1cyA9IEdldFZhcmlhYmxlMiAoDQo+ ICsgICAgICAgICAgICAgICBDYXBzdWxlVmFyTmFtZSwNCj4gKyAgICAgICAgICAgICAgICZnRWZp Q2Fwc3VsZVJlcG9ydEd1aWQsDQo+ICsgICAgICAgICAgICAgICAoVk9JRCAqKikgJkNhcHN1bGVS ZXN1bHQsDQo+ICsgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICApOw0KPiAr ICAgIGlmIChTdGF0dXMgPT0gRUZJX05PVF9GT1VORCkgew0KPiArICAgICAgYnJlYWs7DQo+ICsg ICAgfSBlbHNlIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBkaXNwbGF5IGNhcHN1bGUgcHJvY2Vz cyBzdGF0dXMNCj4gKyAgICAvLw0KPiArICAgIGlmIChDYXBzdWxlUmVzdWx0LT5WYXJpYWJsZVRv dGFsU2l6ZSA+PQ0KPiBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0hFQURFUikp IHsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVOYW1lOiAlc1xuIiwgQ2Fwc3VsZVZhck5hbWUp Ow0KPiArICAgICAgUHJpbnQgKEwiICBDYXBzdWxlIEd1aWQ6ICVnXG4iLCAmQ2Fwc3VsZVJlc3Vs dC0+Q2Fwc3VsZUd1aWQpOw0KPiArICAgICAgUHJpbnQgKEwiICBDYXBzdWxlIFByb2Nlc3NlZFRp bWU6ICV0XG4iLCAmQ2Fwc3VsZVJlc3VsdC0+Q2Fwc3VsZVByb2Nlc3NlZCk7DQo+ICsgICAgICBQ cmludCAoTCIgIENhcHN1bGUgU3RhdHVzOiAlclxuIiwgQ2Fwc3VsZVJlc3VsdC0+Q2Fwc3VsZVN0 YXR1cyk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKENvbXBhcmVHdWlkKCZDYXBzdWxlUmVz dWx0LT5DYXBzdWxlR3VpZCwgJmdFZmlGbXBDYXBzdWxlR3VpZCkpIHsNCj4gKyAgICAgIGlmIChD YXBzdWxlUmVzdWx0LT5WYXJpYWJsZVRvdGFsU2l6ZSA+PQ0KPiBzaXplb2YoRUZJX0NBUFNVTEVf UkVTVUxUX1ZBUklBQkxFX0hFQURFUikgKyBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklB QkxFX0ZNUCkpIHsNCj4gKyAgICAgICAgQ2Fwc3VsZVJlc3VsdEZtcCA9IChFRklfQ0FQU1VMRV9S RVNVTFRfVkFSSUFCTEVfRk1QICopKENhcHN1bGVSZXN1bHQgKyAxKTsNCj4gKyAgICAgICAgUHJp bnQoTCIgIENhcHN1bGUgRk1QIFZlcnNpb246IDB4JXhcbiIsIENhcHN1bGVSZXN1bHRGbXAtPlZl cnNpb24pOw0KPiArICAgICAgICBQcmludChMIiAgQ2Fwc3VsZSBGTVAgUGF5bG9hZEluZGV4OiAw eCV4XG4iLCBDYXBzdWxlUmVzdWx0Rm1wLT5QYXlsb2FkSW5kZXgpOw0KPiArICAgICAgICBQcmlu dChMIiAgQ2Fwc3VsZSBGTVAgVXBkYXRlSW1hZ2VJbmRleDogMHgleFxuIiwgQ2Fwc3VsZVJlc3Vs dEZtcC0NCj4gPlVwZGF0ZUltYWdlSW5kZXgpOw0KPiArICAgICAgICBQcmludChMIiAgQ2Fwc3Vs ZSBGTVAgVXBkYXRlSW1hZ2VUeXBlSWQ6ICVnXG4iLCAmQ2Fwc3VsZVJlc3VsdEZtcC0NCj4gPlVw ZGF0ZUltYWdlVHlwZUlkKTsNCj4gKyAgICAgICAgaWYgKENhcHN1bGVSZXN1bHQtPlZhcmlhYmxl VG90YWxTaXplID4NCj4gc2l6ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9IRUFERVIp ICsgc2l6ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9GTVApKSB7DQo+ICsgICAgICAg ICAgUHJpbnQoTCIgIENhcHN1bGUgRk1QIENhcHN1bGVGaWxlTmFtZTogJXNcbiIsIChDYXBzdWxl UmVzdWx0Rm1wICsgMSkpOw0KPiArICAgICAgICAgIENhcHN1bGVGaWxlTmFtZVNpemUgPSBTdHJT aXplKChDSEFSMTYgKikoQ2Fwc3VsZVJlc3VsdEZtcCArIDEpKTsNCj4gKyAgICAgICAgICBpZiAo Q2Fwc3VsZVJlc3VsdC0+VmFyaWFibGVUb3RhbFNpemUgPg0KPiBzaXplb2YoRUZJX0NBUFNVTEVf UkVTVUxUX1ZBUklBQkxFX0hFQURFUikgKyBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklB QkxFX0ZNUCkgKw0KPiBDYXBzdWxlRmlsZU5hbWVTaXplKSB7DQo+ICsgICAgICAgICAgICBQcmlu dChMIiAgQ2Fwc3VsZSBGTVAgQ2Fwc3VsZVRhcmdldDogJXNcbiIsIChVSU5UOCAqKShDYXBzdWxl UmVzdWx0Rm1wICsNCj4gMSkgKyBDYXBzdWxlRmlsZU5hbWVTaXplKTsNCj4gKyAgICAgICAgICB9 DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBGcmVlUG9v bChDYXBzdWxlUmVzdWx0KTsNCj4gKw0KPiArICAgIEluZGV4Kys7DQo+ICsgICAgaWYgKEluZGV4 ID4gMHhGRkZGKSB7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gK0NIQVI4ICptRndUeXBlU3RyaW5n W10gPSB7DQo+ICsgICJVbmtub3duIiwNCj4gKyAgIlN5c3RlbUZpcm13YXJlIiwNCj4gKyAgIkRl dmljZUZpcm13YXJlIiwNCj4gKyAgIlVlZmlEcml2ZXIiLA0KPiArfTsNCj4gKw0KPiArQ0hBUjgg Km1MYXN0QXR0ZW1wdFN0YXR1c1N0cmluZ1tdID0gew0KPiArICAiU3VjY2VzcyIsDQo+ICsgICJF cnJvcjogVW5zdWNjZXNzZnVsIiwNCj4gKyAgIkVycm9yOiBJbnN1ZmZpY2llbnQgUmVzb3VyY2Vz IiwNCj4gKyAgIkVycm9yOiBJbmNvcnJlY3QgVmVyc2lvbiIsDQo+ICsgICJFcnJvcjogSW52YWxp ZCBGb3JtYXQiLA0KPiArICAiRXJyb3I6IEF1dGggRXJyb3IiLA0KPiArICAiRXJyb3I6IFBvd2Vy IEV2ZW50IEFDIiwNCj4gKyAgIkVycm9yOiBQb3dlciBFdmVudCBCYXR0ZXJ5IiwNCj4gK307DQo+ ICsNCj4gKy8qKg0KPiArICBDb252ZXJ0IEZ3VHlwZSB0byBhIHN0cmluZy4NCj4gKw0KPiArICBA cGFyYW0gRndUeXBlICBGd1R5cGUgaW4gRVNSVA0KPiArDQo+ICsgIEByZXR1cm4gYSBzdHJpbmcg Zm9yIEZ3VHlwZS4NCj4gKyoqLw0KPiArQ0hBUjggKg0KPiArRndUeXBlVG9TdHJpbmcoDQo+ICsg IElOIFVJTlQzMiBGd1R5cGUNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoRndUeXBlIDwgc2l6ZW9m KG1Gd1R5cGVTdHJpbmcpIC8gc2l6ZW9mKG1Gd1R5cGVTdHJpbmdbMF0pKSB7DQo+ICsgICAgcmV0 dXJuIG1Gd1R5cGVTdHJpbmdbRndUeXBlXTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICByZXR1cm4g IkludmFsaWQiOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDb252ZXJ0IExhc3RB dHRlbXB0U3RhdHVzIHRvIGEgc3RyaW5nLg0KPiArDQo+ICsgIEBwYXJhbSBMYXN0QXR0ZW1wdFN0 YXR1cyAgTGFzdEF0dGVtcHRTdGF0dXMgaW4gRk1QIG9yIEVTUlQNCj4gKw0KPiArICBAcmV0dXJu IGEgc3RyaW5nIGZvciBMYXN0QXR0ZW1wdFN0YXR1cy4NCj4gKyoqLw0KPiArQ0hBUjggKg0KPiAr TGFzdEF0dGVtcHRTdGF0dXNUb1N0cmluZygNCj4gKyAgSU4gVUlOVDMyIExhc3RBdHRlbXB0U3Rh dHVzDQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKExhc3RBdHRlbXB0U3RhdHVzIDwgc2l6ZW9mKG1M YXN0QXR0ZW1wdFN0YXR1c1N0cmluZykgLw0KPiBzaXplb2YobUxhc3RBdHRlbXB0U3RhdHVzU3Ry aW5nWzBdKSkgew0KPiArICAgIHJldHVybiBtTGFzdEF0dGVtcHRTdGF0dXNTdHJpbmdbTGFzdEF0 dGVtcHRTdGF0dXNdOw0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiAiRXJyb3I6IFVua25v d24iOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEVTUlQgZW50cnkuDQo+ ICsNCj4gKyAgQHBhcmFtIEVzcnRFbnRyeSAgRVNSVCBlbnRyeQ0KPiArKiovDQo+ICtWT0lEDQo+ ICtEdW1wRXNydEVudHJ5KA0KPiArICBJTiBFRklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICAqRXNy dEVudHJ5DQo+ICsgICkNCj4gK3sNCj4gKyAgUHJpbnQoTCIgIEZ3Q2xhc3MgICAgICAgICAgICAg ICAgICAtICVnXG4iLCAmRXNydEVudHJ5LT5Gd0NsYXNzKTsNCj4gKyAgUHJpbnQoTCIgIEZ3VHlw ZSAgICAgICAgICAgICAgICAgICAtIDB4JXggKCVhKVxuIiwgRXNydEVudHJ5LT5Gd1R5cGUsDQo+ IEZ3VHlwZVRvU3RyaW5nKEVzcnRFbnRyeS0+RndUeXBlKSk7DQo+ICsgIFByaW50KEwiICBGd1Zl cnNpb24gICAgICAgICAgICAgICAgLSAweCV4XG4iLCBFc3J0RW50cnktPkZ3VmVyc2lvbik7DQo+ ICsgIFByaW50KEwiICBMb3dlc3RTdXBwb3J0ZWRGd1ZlcnNpb24gLSAweCV4XG4iLCBFc3J0RW50 cnktPkxvd2VzdFN1cHBvcnRlZEZ3VmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlRmxh Z3MgICAgICAgICAgICAgLSAweCV4XG4iLCBFc3J0RW50cnktPkNhcHN1bGVGbGFncyk7DQo+ICsg IFByaW50KEwiICAgIFBFUlNJU1RfQUNST1NTX1JFU0VUICAgLSAweCV4XG4iLCBFc3J0RW50cnkt PkNhcHN1bGVGbGFncyAmDQo+IENBUFNVTEVfRkxBR1NfUEVSU0lTVF9BQ1JPU1NfUkVTRVQpOw0K PiArICBQcmludChMIiAgICBQT1BVTEFURV9TWVNURU1fVEFCTEUgIC0gMHgleFxuIiwgRXNydEVu dHJ5LT5DYXBzdWxlRmxhZ3MgJg0KPiBDQVBTVUxFX0ZMQUdTX1BPUFVMQVRFX1NZU1RFTV9UQUJM RSk7DQo+ICsgIFByaW50KEwiICAgIElOSVRJQVRFX1JFU0VUICAgICAgICAgLSAweCV4XG4iLCBF c3J0RW50cnktPkNhcHN1bGVGbGFncyAmDQo+IENBUFNVTEVfRkxBR1NfSU5JVElBVEVfUkVTRVQp Ow0KPiArICBQcmludChMIiAgTGFzdEF0dGVtcHRWZXJzaW9uICAgICAgIC0gMHgleFxuIiwgRXNy dEVudHJ5LT5MYXN0QXR0ZW1wdFZlcnNpb24pOw0KPiArICBQcmludChMIiAgTGFzdEF0dGVtcHRT dGF0dXMgICAgICAgIC0gMHgleCAoJWEpXG4iLCBFc3J0RW50cnktPkxhc3RBdHRlbXB0U3RhdHVz LA0KPiBMYXN0QXR0ZW1wdFN0YXR1c1RvU3RyaW5nKEVzcnRFbnRyeS0+TGFzdEF0dGVtcHRTdGF0 dXMpKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRVNSVCB0YWJsZS4NCj4gKw0KPiAr ICBAcGFyYW0gRXNydCAgRVNSVCB0YWJsZQ0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRXNydCgN Cj4gKyAgSU4gRUZJX1NZU1RFTV9SRVNPVVJDRV9UQUJMRSAgKkVzcnQNCj4gKyAgKQ0KPiArew0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgRUZJX1NZU1RFTV9S RVNPVVJDRV9FTlRSWSAgKkVzcnRFbnRyeTsNCj4gKw0KPiArICBQcmludChMIkVGSV9TWVNURU1f UkVTT1VSQ0VfVEFCTEU6XG4iKTsNCj4gKyAgUHJpbnQoTCJGd1Jlc291cmNlQ291bnQgICAgLSAw eCV4XG4iLCBFc3J0LT5Gd1Jlc291cmNlQ291bnQpOw0KPiArICBQcmludChMIkZ3UmVzb3VyY2VD b3VudE1heCAtIDB4JXhcbiIsIEVzcnQtPkZ3UmVzb3VyY2VDb3VudE1heCk7DQo+ICsgIFByaW50 KEwiRndSZXNvdXJjZVZlcnNpb24gIC0gMHglbHhcbiIsIEVzcnQtPkZ3UmVzb3VyY2VWZXJzaW9u KTsNCj4gKw0KPiArICBFc3J0RW50cnkgPSAoVk9JRCAqKShFc3J0ICsgMSk7DQo+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IEVzcnQtPkZ3UmVzb3VyY2VDb3VudDsgSW5kZXgrKykgew0KPiAr ICAgIFByaW50KEwiRUZJX1NZU1RFTV9SRVNPVVJDRV9FTlRSWSAoJWQpOlxuIiwgSW5kZXgpOw0K PiArICAgIER1bXBFc3J0RW50cnkoRXNydEVudHJ5KTsNCj4gKyAgICBFc3J0RW50cnkrKzsNCj4g KyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIGluZm8uDQo+ICsqKi8NCj4g K1ZPSUQNCj4gK0R1bXBFc3J0RGF0YSAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9TWVNURU1fUkVTT1VS Q0VfVEFCTEUgICpFc3J0Ow0KPiArDQo+ICsgIFByaW50KEwiIyMjIyMjIyMjIyMjIyNcbiIpOw0K PiArICBQcmludChMIiMgRVNSVCBUQUJMRSAjXG4iKTsNCj4gKyAgUHJpbnQoTCIjIyMjIyMjIyMj IyMjI1xuIik7DQo+ICsNCj4gKyAgU3RhdHVzID0gRWZpR2V0U3lzdGVtQ29uZmlndXJhdGlvblRh YmxlICgmZ0VmaVN5c3RlbVJlc291cmNlVGFibGVHdWlkLCAoVk9JRA0KPiAqKikmRXNydCk7DQo+ ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiRVNSVCAtICVyXG4i LCBTdGF0dXMpOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArICBEdW1wRXNydChFc3J0KTsN Cj4gKyAgUHJpbnQoTCJcbiIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBGTVAgaW5m b3JtYXRpb24uDQo+ICsNCj4gKyAgQHBhcmFtIEltYWdlSW5mb1NpemUgICAgICAgVGhlIHNpemUg b2YgSW1hZ2VJbmZvLCBpbiBieXRlcy4NCj4gKyAgQHBhcmFtIEltYWdlSW5mbyAgICAgICAgICAg QSBwb2ludGVyIHRvIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SLg0KPiArICBAcGFyYW0g RGVzY3JpcHRvclZlcnNpb24gICBUaGUgdmVyc2lvbiBvZiBFRklfRklSTVdBUkVfSU1BR0VfREVT Q1JJUFRPUi4NCj4gKyAgQHBhcmFtIERlc2NyaXB0b3JDb3VudCAgICAgVGhlIGNvdW50IG9mIEVG SV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SLg0KPiArICBAcGFyYW0gRGVzY3JpcHRvclNpemUg ICAgICBUaGUgc2l6ZSBvZiBhbiBpbmRpdmlkdWFsIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQ VE9SLA0KPiBpbiBieXRlcy4NCj4gKyAgQHBhcmFtIFBhY2thZ2VWZXJzaW9uICAgICAgVGhlIHZl cnNpb24gb2YgcGFja2FnZS4NCj4gKyAgQHBhcmFtIFBhY2thZ2VWZXJzaW9uTmFtZSAgVGhlIHZl cnNpb24gbmFtZSBvZiBwYWNrYWdlLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wSW1hZ2VJ bmZvKA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mb1Np emUsDQo+ICsgIElOIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgKkltYWdlSW5mbywN Cj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yVmVyc2lv biwNCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yQ291 bnQsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclNp emUsDQo+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNp b24sDQo+ICsgIElOIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgKlBhY2thZ2VWZXJz aW9uTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9S ICAgICAgICAgICAgICAgICAqQ3VycmVudEltYWdlSW5mbzsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICsgIFByaW50KEwi ICBEZXNjcmlwdG9yVmVyc2lvbiAgLSAweCV4XG4iLCBEZXNjcmlwdG9yVmVyc2lvbik7DQo+ICsg IFByaW50KEwiICBEZXNjcmlwdG9yQ291bnQgICAgLSAweCV4XG4iLCBEZXNjcmlwdG9yQ291bnQp Ow0KPiArICBQcmludChMIiAgRGVzY3JpcHRvclNpemUgICAgIC0gMHgleFxuIiwgRGVzY3JpcHRv clNpemUpOw0KPiArICBQcmludChMIiAgUGFja2FnZVZlcnNpb24gICAgIC0gMHgleFxuIiwgUGFj a2FnZVZlcnNpb24pOw0KPiArICBQcmludChMIiAgUGFja2FnZVZlcnNpb25OYW1lIC0gXCIlc1wi XG4iLCBQYWNrYWdlVmVyc2lvbk5hbWUpOw0KPiArICBDdXJyZW50SW1hZ2VJbmZvID0gSW1hZ2VJ bmZvOw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBEZXNjcmlwdG9yQ291bnQ7IEluZGV4 KyspIHsNCj4gKyAgICBQcmludChMIiAgSW1hZ2VEZXNjcmlwdG9yICglZClcbiIsIEluZGV4KTsN Cj4gKyAgICBQcmludChMIiAgICBJbWFnZUluZGV4ICAgICAgICAgICAgICAgICAgLSAweCV4XG4i LCBDdXJyZW50SW1hZ2VJbmZvLT5JbWFnZUluZGV4KTsNCj4gKyAgICBQcmludChMIiAgICBJbWFn ZVR5cGVJZCAgICAgICAgICAgICAgICAgLSAlZ1xuIiwgJkN1cnJlbnRJbWFnZUluZm8tPkltYWdl VHlwZUlkKTsNCj4gKyAgICBQcmludChMIiAgICBJbWFnZUlkICAgICAgICAgICAgICAgICAgICAg LSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0+SW1hZ2VJZCk7DQo+ICsgICAgUHJpbnQoTCIg ICAgSW1hZ2VJZE5hbWUgICAgICAgICAgICAgICAgIC0gXCIlc1wiXG4iLCBDdXJyZW50SW1hZ2VJ bmZvLQ0KPiA+SW1hZ2VJZE5hbWUpOw0KPiArICAgIFByaW50KEwiICAgIFZlcnNpb24gICAgICAg ICAgICAgICAgICAgICAtIDB4JXhcbiIsIEN1cnJlbnRJbWFnZUluZm8tPlZlcnNpb24pOw0KPiAr ICAgIFByaW50KEwiICAgIFZlcnNpb25OYW1lICAgICAgICAgICAgICAgICAtIFwiJXNcIlxuIiwg Q3VycmVudEltYWdlSW5mby0NCj4gPlZlcnNpb25OYW1lKTsNCj4gKyAgICBQcmludChMIiAgICBT aXplICAgICAgICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLT5T aXplKTsNCj4gKyAgICBQcmludChMIiAgICBBdHRyaWJ1dGVzU3VwcG9ydGVkICAgICAgICAgLSAw eCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQpOw0KPiAr ICAgIFByaW50KEwiICAgICAgSU1BR0VfVVBEQVRBQkxFICAgICAgICAgICAtIDB4JWx4XG4iLCBD dXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVU RV9JTUFHRV9VUERBVEFCTEUpOw0KPiArICAgIFByaW50KEwiICAgICAgUkVTRVRfUkVRVUlSRUQg ICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1N1 cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9SRVNFVF9SRVFVSVJFRCk7DQo+ICsgICAgUHJpbnQo TCIgICAgICBBVVRIRU5USUNBVElPTl9SRVFVSVJFRCAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFn ZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9ydGVkICYgSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJ Q0FUSU9OX1JFUVVJUkVEKTsNCj4gKyAgICBQcmludChMIiAgICAgIElOX1VTRSAgICAgICAgICAg ICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBw b3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfSU5fVVNFKTsNCj4gKyAgICBQcmludChMIiAgICAgIFVF RklfSU1BR0UgICAgICAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4g PkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfVUVGSV9JTUFHRSk7DQo+ICsg ICAgUHJpbnQoTCIgICAgQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgIC0gMHglbHhcbiIsIEN1 cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyk7DQo+ICsgICAgUHJpbnQoTCIg ICAgICBJTUFHRV9VUERBVEFCTEUgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUlu Zm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFC TEUpOw0KPiArICAgIFByaW50KEwiICAgICAgUkVTRVRfUkVRVUlSRUQgICAgICAgICAgICAtIDB4 JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1NldHRpbmcgJiBJTUFHRV9B VFRSSUJVVEVfUkVTRVRfUkVRVUlSRUQpOw0KPiArICAgIFByaW50KEwiICAgICAgQVVUSEVOVElD QVRJT05fUkVRVUlSRUQgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmli dXRlc1NldHRpbmcgJiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpOw0K PiArICAgIFByaW50KEwiICAgICAgSU5fVVNFICAgICAgICAgICAgICAgICAgICAtIDB4JWx4XG4i LCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1NldHRpbmcgJiBJTUFHRV9BVFRSSUJV VEVfSU5fVVNFKTsNCj4gKyAgICBQcmludChMIiAgICAgIFVFRklfSU1BR0UgICAgICAgICAgICAg ICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nICYg SU1BR0VfQVRUUklCVVRFX1VFRklfSU1BR0UpOw0KPiArICAgIFByaW50KEwiICAgIENvbXBhdGli aWxpdGllcyAgICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+Q29t cGF0aWJpbGl0aWVzKTsNCj4gKyAgICBQcmludChMIiAgICAgIENPTVBBVElCX0NIRUNLX1NVUFBP UlRFRCAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkNvbXBhdGliaWxpdGllcyAm IElNQUdFX0NPTVBBVElCSUxJVFlfQ0hFQ0tfU1VQUE9SVEVEKTsNCj4gKyAgICBpZiAoRGVzY3Jp cHRvclZlcnNpb24gPiAxKSB7DQo+ICsgICAgICBQcmludChMIiAgICBMb3dlc3RTdXBwb3J0ZWRJ bWFnZVZlcnNpb24gLSAweCV4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+TG93ZXN0U3VwcG9y dGVkSW1hZ2VWZXJzaW9uKTsNCj4gKyAgICAgIGlmIChEZXNjcmlwdG9yVmVyc2lvbiA+IDIpIHsN Cj4gKyAgICAgICAgUHJpbnQoTCIgICAgTGFzdEF0dGVtcHRWZXJzaW9uICAgICAgICAgIC0gMHgl eFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkxhc3RBdHRlbXB0VmVyc2lvbik7DQo+ICsgICAg ICAgIFByaW50KEwiICAgIExhc3RBdHRlbXB0U3RhdHVzICAgICAgICAgICAtIDB4JXggKCVhKVxu IiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkxhc3RBdHRlbXB0U3RhdHVzLCBMYXN0QXR0ZW1wdFN0 YXR1c1RvU3RyaW5nKEN1cnJlbnRJbWFnZUluZm8tPkxhc3RBdHRlbXB0U3RhdHVzKSk7DQo+ICsg ICAgICAgIFByaW50KEwiICAgIEhhcmR3YXJlSW5zdGFuY2UgICAgICAgICAgICAtIDB4JWx4XG4i LCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+SGFyZHdhcmVJbnN0YW5jZSk7DQo+ICsgICAgICB9DQo+ ICsgICAgfQ0KPiArICAgIC8vDQo+ICsgICAgLy8gVXNlIERlc2NyaXB0b3JTaXplIHRvIG1vdmUg SW1hZ2VJbmZvIFBvaW50ZXIgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggZGlmZmVyZW50DQo+IElt YWdlSW5mbyB2ZXJzaW9uDQo+ICsgICAgLy8NCj4gKyAgICBDdXJyZW50SW1hZ2VJbmZvID0gKEVG SV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICopKChVSU5UOCAqKUN1cnJlbnRJbWFnZUluZm8g Kw0KPiBEZXNjcmlwdG9yU2l6ZSk7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1 bXAgRk1QIHBhY2thZ2UgaW5mb3JtYXRpb24uDQo+ICsNCj4gKyAgQHBhcmFtIFBhY2thZ2VWZXJz aW9uICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHBhY2thZ2UuDQo+ICsgIEBwYXJhbSBQYWNr YWdlVmVyc2lvbk5hbWUgICAgICAgICBUaGUgdmVyc2lvbiBuYW1lIG9mIHBhY2thZ2UuDQo+ICsg IEBwYXJhbSBQYWNrYWdlVmVyc2lvbk5hbWVNYXhMZW4gICBUaGUgbWF4aW11bSBsZW5ndGggb2Yg UGFja2FnZVZlcnNpb25OYW1lLg0KPiArICBAcGFyYW0gQXR0cmlidXRlc1N1cHBvcnRlZCAgICAg ICAgUGFja2FnZSBhdHRyaWJ1dGVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGlzDQo+IGRldmlj ZS4NCj4gKyAgQHBhcmFtIEF0dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgIFBhY2thZ2UgYXR0cmli dXRlcy4NCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEZtcFBhY2thZ2VJbmZvKA0KPiArICBJTiBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbiwNCj4gKyAgSU4g Q0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBhY2thZ2VWZXJzaW9uTmFtZSwNCj4g KyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb25OYW1l TWF4TGVuLA0KPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1 dGVzU3VwcG9ydGVkLA0KPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICBB dHRyaWJ1dGVzU2V0dGluZw0KPiArICApDQo+ICt7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVy c2lvbiAgICAgICAgICAgICAgLSAweCV4XG4iLCBQYWNrYWdlVmVyc2lvbik7DQo+ICsgIFByaW50 KEwiICBQYWNrYWdlVmVyc2lvbk5hbWUgICAgICAgICAgLSBcIiVzXCJcbiIsIFBhY2thZ2VWZXJz aW9uTmFtZSk7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbk5hbWVNYXhMZW4gICAgLSAw eCV4XG4iLCBQYWNrYWdlVmVyc2lvbk5hbWVNYXhMZW4pOw0KPiArICBQcmludChMIiAgQXR0cmli dXRlc1N1cHBvcnRlZCAgICAgICAgIC0gMHglbHhcbiIsIEF0dHJpYnV0ZXNTdXBwb3J0ZWQpOw0K PiArICBQcmludChMIiAgICBJTUFHRV9VUERBVEFCTEUgICAgICAgICAgIC0gMHglbHhcbiIsIEF0 dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKTsN Cj4gKyAgUHJpbnQoTCIgICAgUkVTRVRfUkVRVUlSRUQgICAgICAgICAgICAtIDB4JWx4XG4iLCBB dHRyaWJ1dGVzU3VwcG9ydGVkICYNCj4gSU1BR0VfQVRUUklCVVRFX1JFU0VUX1JFUVVJUkVEKTsN Cj4gKyAgUHJpbnQoTCIgICAgQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgICAtIDB4JWx4XG4iLCBB dHRyaWJ1dGVzU3VwcG9ydGVkICYNCj4gSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JF UVVJUkVEKTsNCj4gKyAgUHJpbnQoTCIgIEF0dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgICAtIDB4 JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyk7DQo+ICsgIFByaW50KEwiICAgIElNQUdFX1VQREFU QUJMRSAgICAgICAgICAgLSAweCVseFxuIiwgQXR0cmlidXRlc1NldHRpbmcgJg0KPiBJTUFHRV9B VFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKTsNCj4gKyAgUHJpbnQoTCIgICAgUkVTRVRfUkVRVUlS RUQgICAgICAgICAgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyAmDQo+IElNQUdFX0FU VFJJQlVURV9SRVNFVF9SRVFVSVJFRCk7DQo+ICsgIFByaW50KEwiICAgIEFVVEhFTlRJQ0FUSU9O X1JFUVVJUkVEICAgLSAweCVseFxuIiwgQXR0cmlidXRlc1NldHRpbmcgJg0KPiBJTUFHRV9BVFRS SUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg RHVtcCBGTVAgcHJvdG9jb2wgaW5mby4NCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEZtcERhdGEg KA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfUFJPVE9DT0wgICAgICAgICAgICAgICpGbXA7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZIYW5kbGVzOw0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAqRm1wSW1h Z2VJbmZvQnVmOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW1hZ2VJbmZvU2l6ZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZtcEltYWdlSW5mb0Rlc2NyaXB0b3JWZXI7DQo+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbXBJbWFnZUluZm9Db3VudDsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny aXB0b3JTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUGFja2FnZVZlcnNpb247DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqUGFja2FnZVZlcnNpb25OYW1lOw0KPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb25OYW1lTWF4TGVu Ow0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0 cmlidXRlc1N1cHBvcnRlZDsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5nOw0KPiArDQo+ICsgIFByaW50KEwiIyMjIyMj IyMjIyMjXG4iKTsNCj4gKyAgUHJpbnQoTCIjIEZNUCBEQVRBICNcbiIpOw0KPiArICBQcmludChM IiMjIyMjIyMjIyMjI1xuIik7DQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVy ICgNCj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAg ICAmZ0VmaUZpcm13YXJlTWFuYWdlbWVudFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmTnVtYmVyT2ZIYW5kbGVzLA0KPiArICAg ICAgICAgICAgICAgICAgJkhhbmRsZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQoTCJGTVAgcHJvdG9jb2wg LSAlclxuIiwgRUZJX05PVF9GT1VORCk7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4g KyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVyT2ZIYW5kbGVzOyBJbmRleCsrKSB7DQo+ ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCgNCj4gKyAgICAgICAgICAgICAgICAg ICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlGaXJt d2FyZU1hbmFnZW1lbnRQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lE ICoqKSZGbXANCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9S KFN0YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIElt YWdlSW5mb1NpemUgPSAwOw0KPiArICAgIFN0YXR1cyA9IEZtcC0+R2V0SW1hZ2VJbmZvICgNCj4g KyAgICAgICAgICAgICAgICAgICAgRm1wLA0KPiArICAgICAgICAgICAgICAgICAgICAmSW1hZ2VJ bmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChT dGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIEZtcEltYWdlSW5mb0J1ZiA9IE5VTEw7DQo+ICsgICAgRm1wSW1h Z2VJbmZvQnVmID0gQWxsb2NhdGVaZXJvUG9vbCAoSW1hZ2VJbmZvU2l6ZSk7DQo+ICsgICAgaWYg KEZtcEltYWdlSW5mb0J1ZiA9PSBOVUxMKSB7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gKyAgICAgIGdvdG8gRVhJVDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBQ YWNrYWdlVmVyc2lvbk5hbWUgPSBOVUxMOw0KPiArICAgIFN0YXR1cyA9IEZtcC0+R2V0SW1hZ2VJ bmZvICgNCj4gKyAgICAgICAgICAgICAgICAgICAgRm1wLA0KPiArICAgICAgICAgICAgICAgICAg ICAmSW1hZ2VJbmZvU2l6ZSwgICAgICAgICAgICAgICAvLyBJbWFnZUluZm9TaXplDQo+ICsgICAg ICAgICAgICAgICAgICAgIEZtcEltYWdlSW5mb0J1ZiwgICAgICAgICAgICAgIC8vIEltYWdlSW5m bw0KPiArICAgICAgICAgICAgICAgICAgICAmRm1wSW1hZ2VJbmZvRGVzY3JpcHRvclZlciwgICAv LyBEZXNjcmlwdG9yVmVyc2lvbg0KPiArICAgICAgICAgICAgICAgICAgICAmRm1wSW1hZ2VJbmZv Q291bnQsICAgICAgICAgICAvLyBEZXNjcmlwdG9yQ291bnQNCj4gKyAgICAgICAgICAgICAgICAg ICAgJkRlc2NyaXB0b3JTaXplLCAgICAgICAgICAgICAgLy8gRGVzY3JpcHRvclNpemUNCj4gKyAg ICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFja2Fn ZVZlcnNpb24NCj4gKyAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uTmFtZSAgICAg ICAgICAgLy8gUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIElmIEZNUCBHZXRJbmZvcm1hdGlvbiBpbnRlcmZhY2Ug ZmFpbGVkLCBza2lwIHRoaXMgcmVzb3VyY2UNCj4gKyAgICAvLw0KPiArICAgIGlmIChFRklfRVJS T1IoU3RhdHVzKSkgew0KPiArICAgICAgUHJpbnQoTCJGTVAgKCVkKSBJbWFnZUluZm8gLSAlclxu IiwgSW5kZXgsIFN0YXR1cyk7DQo+ICsgICAgICBGcmVlUG9vbChGbXBJbWFnZUluZm9CdWYpOw0K PiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUHJpbnQoTCJGTVAgKCVk KSBJbWFnZUluZm86XG4iLCBJbmRleCk7DQo+ICsgICAgRHVtcEZtcEltYWdlSW5mbygNCj4gKyAg ICAgIEltYWdlSW5mb1NpemUsICAgICAgICAgICAgICAgLy8gSW1hZ2VJbmZvU2l6ZQ0KPiArICAg ICAgRm1wSW1hZ2VJbmZvQnVmLCAgICAgICAgICAgICAvLyBJbWFnZUluZm8NCj4gKyAgICAgIEZt cEltYWdlSW5mb0Rlc2NyaXB0b3JWZXIsICAgLy8gRGVzY3JpcHRvclZlcnNpb24NCj4gKyAgICAg IEZtcEltYWdlSW5mb0NvdW50LCAgICAgICAgICAgLy8gRGVzY3JpcHRvckNvdW50DQo+ICsgICAg ICBEZXNjcmlwdG9yU2l6ZSwgICAgICAgICAgICAgIC8vIERlc2NyaXB0b3JTaXplDQo+ICsgICAg ICBQYWNrYWdlVmVyc2lvbiwgICAgICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uDQo+ICsgICAg ICBQYWNrYWdlVmVyc2lvbk5hbWUgICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uTmFtZQ0KPiAr ICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChQYWNrYWdlVmVyc2lvbk5hbWUgIT0gTlVMTCkgew0K PiArICAgICAgRnJlZVBvb2woUGFja2FnZVZlcnNpb25OYW1lKTsNCj4gKyAgICB9DQo+ICsgICAg RnJlZVBvb2woRm1wSW1hZ2VJbmZvQnVmKTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gR2V0 IHBhY2thZ2UgaW5mbw0KPiArICAgIC8vDQo+ICsgICAgUGFja2FnZVZlcnNpb25OYW1lID0gTlVM TDsNCj4gKyAgICBTdGF0dXMgPSBGbXAtPkdldFBhY2thZ2VJbmZvICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgRm1wLA0KPiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sICAg ICAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbg0KPiArICAgICAgICAgICAgICAgICAgICAmUGFj a2FnZVZlcnNpb25OYW1lLCAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAg ICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiwgICAgLy8gUGFja2FnZVZl cnNpb25OYW1lTWF4TGVuDQo+ICsgICAgICAgICAgICAgICAgICAgICZBdHRyaWJ1dGVzU3VwcG9y dGVkLCAgICAgICAgIC8vIEF0dHJpYnV0ZXNTdXBwb3J0ZWQNCj4gKyAgICAgICAgICAgICAgICAg ICAgJkF0dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgICAgLy8gQXR0cmlidXRlc1NldHRpbmcNCj4g KyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsN Cj4gKyAgICAgIFByaW50KEwiRk1QICglZCkgUGFja2FnZUluZm8gLSAlclxuIiwgSW5kZXgsIFN0 YXR1cyk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIFByaW50KEwiRk1QICglZCkgSW1hZ2VJ bmZvOlxuIiwgSW5kZXgpOw0KPiArICAgICAgRHVtcEZtcFBhY2thZ2VJbmZvKA0KPiArICAgICAg ICBQYWNrYWdlVmVyc2lvbiwgICAgICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uDQo+ICsgICAg ICAgIFBhY2thZ2VWZXJzaW9uTmFtZSwgICAgICAgICAgLy8gUGFja2FnZVZlcnNpb25OYW1lDQo+ ICsgICAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiwgICAgLy8gUGFja2FnZVZlcnNpb25O YW1lTWF4TGVuDQo+ICsgICAgICAgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQsICAgICAgICAgLy8gQXR0 cmlidXRlc1N1cHBvcnRlZA0KPiArICAgICAgICBBdHRyaWJ1dGVzU2V0dGluZyAgICAgICAgICAg IC8vIEF0dHJpYnV0ZXNTZXR0aW5nDQo+ICsgICAgICAgICk7DQo+ICsNCj4gKyAgICAgIGlmIChQ YWNrYWdlVmVyc2lvbk5hbWUgIT0gTlVMTCkgew0KPiArICAgICAgICBGcmVlUG9vbChQYWNrYWdl VmVyc2lvbk5hbWUpOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBQcmludChM IlxuIik7DQo+ICsNCj4gK0VYSVQ6DQo+ICsgIEZyZWVQb29sKEhhbmRsZUJ1ZmZlcik7DQo+ICt9 DQo+IC0tDQo+IDIuNy40LndpbmRvd3MuMQ0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18NCmVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQplZGsyLWRldmVsQGxp c3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpodHRwczovL2xpc3Rz LjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCg==