From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 790B21A1E4D for ; Mon, 3 Oct 2016 13:38:28 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP; 03 Oct 2016 13:38:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,291,1473145200"; d="scan'208,217";a="15807532" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga005.fm.intel.com with ESMTP; 03 Oct 2016 13:38:26 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 3 Oct 2016 13:38:26 -0700 Received: from fmsmsx103.amr.corp.intel.com ([169.254.2.167]) by fmsmsx101.amr.corp.intel.com ([169.254.1.28]) with mapi id 14.03.0248.002; Mon, 3 Oct 2016 13:38:25 -0700 From: "Carsey, Jaben" To: "Rothman, Michael A" , "Ni, Ruiyu" , "Yao, Jiewen" , "Kinney, Michael D" , "edk2-devel@lists.01.org" CC: "Tian, Feng" , "Zhang, Chao B" , "Gao, Liming" , "Zeng, Star" , "Carsey, Jaben" Thread-Topic: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. Thread-Index: AQHSGe3DjFodYsCoiEOxFZmPjkeaMqCQNkoAgABDtQCAAFnHgIABD6WAgABHjjCABWB2AP//rGVg Date: Mon, 3 Oct 2016 20:38:24 +0000 Message-ID: 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 X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzI1YmFkNjYtNGQzZC00NDEwLWI1MmQtNDc1MmQ5NmM1NTU5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IjZJc2lmSmpmUmRZRlhMbTFNV253QkhWeTgyakZkNVwveDNWY0FBTXMxK00wPSJ9 x-ctpclassification: CTP_IC x-originating-ip: [10.1.200.108] MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 03 Oct 2016 15:01:41 -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: Mon, 03 Oct 2016 20:38:28 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SSBkb27igJl0IHRoaW5rIHRoYXQgaXMgd2hhdCBJIG1lYW50LiAgSXTigJlzIGEgc3RyaW5nIGFu ZCBhIGxlbmd0aCwgbm90IGEgc3RydWN0dXJlLg0KDQpJIG1lYW4gY2xhcmlmeSB0aGUgZm9sbG93 aW5nOg0KDQoxKSAgICAgIElzIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgaXRzZWxmIGluIHRoZSBM b2FkT3B0aW9ucyBzdHJpbmcgYXMgdGhlIGZpcnN0IG9wdGlvbiBvciBub3QgdGhlcmUgYXQgYWxs Pw0KDQoyKSAgICAgIFRoZW4gY2xhcmlmeSB0aGF0IGFsbCBQYXJhbWV0ZXJzIGFyZSBzcGFjZSBk ZWxpbWl0ZWQuDQoNCkZyb206IFJvdGhtYW4sIE1pY2hhZWwgQQ0KU2VudDogTW9uZGF5LCBPY3Rv YmVyIDAzLCAyMDE2IDExOjM2IEFNDQpUbzogQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGlu dGVsLmNvbT47IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPjsgWWFvLCBKaWV3ZW4gPGpp ZXdlbi55YW9AaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCkNjOiBUaWFuLCBGZW5nIDxmZW5n LnRpYW5AaW50ZWwuY29tPjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbT47 IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IFplbmcsIFN0YXIgPHN0YXIuemVu Z0BpbnRlbC5jb20+OyBSb3RobWFuLCBNaWNoYWVsIEEgPG1pY2hhZWwuYS5yb3RobWFuQGludGVs LmNvbT4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBw OiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCkltcG9ydGFuY2U6IEhpZ2gNCg0KWW91IG1l YW4gdXBkYXRlIHRoZSBMb2FkT3B0aW9ucyByZWZlcmVuY2UgdG8gcmVmZXIgdG8gdGhlIEVGSV9M T0FEX09QVElPTiBzdHJ1Y3R1cmU/IEJlY2F1c2UgdGhhdOKAmXMgaW4gZXNzZW5jZSB3aGF0IGl0 IG1lYW5zLg0KDQpUaGFua3MsDQpNaWtlIFJvdGhtYW4NCijov4jlhYsg572X5pav5pu8IC8g4KSu 4KS+4KSH4KSV4KSyIOCksOCli+CkpeCljeCkruClh+CkqOCljSAvINCc0LjRhdCw0LjQuyDQoNC+ 0YLQvNCw0L0gLyDXntep15Qg16jXldeY157XnykNCteo15XXoteUINei15nXp9eo15kg16nXnCDX l9eq15XXnNeZ150NCg0KRnJvbTogQ2Fyc2V5LCBKYWJlbg0KU2VudDogRnJpZGF5LCBTZXB0ZW1i ZXIgMzAsIDIwMTYgODozMSBBTQ0KVG86IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPG1h aWx0bzpydWl5dS5uaUBpbnRlbC5jb20+PjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwu Y29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9y Zz47IFJvdGhtYW4sIE1pY2hhZWwgQSA8bWljaGFlbC5hLnJvdGhtYW5AaW50ZWwuY29tPG1haWx0 bzptaWNoYWVsLmEucm90aG1hbkBpbnRlbC5jb20+Pg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlh bkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8 Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBH YW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwu Y29tPj47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0Bp bnRlbC5jb20+PjsgQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbTxtYWlsdG86 amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVN b2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQoNCk1pa2Ug Um90aG1hbiwNCg0KQ2FuIHdlIGdldCBMb2FkT3B0aW9ucyBhbmQgTG9hZE9wdGlvbnNTaXplIGNs YXJpZmllZCBpbiB0aGUgVUVGSSBTcGVjPyAgVGhpcyBzZWVtcyBsaWtlIGEgc2ltcGxlIGNsYXJp ZmljYXRpb24gYW5kIEkgd291bGQgYXJndWUgaXRzIG5lZWRlZC4gIFRoZSBVRUZJIFNoZWxsIGlz IG5vdCB0aGUgb25seSBwcm9kdWNlciBvZiB0aGlzIHByb3RvY29sLiAgQkRTIGxhdW5jaGVzIHRo aW5ncyAobGlrZSB0aGUgVUVGSSBTaGVsbCBpdHNlbGYpIGFuZCB0aGUgc2hlbGwgYWxyZWFkeSBj b25zdW1lcyBpdCBmb3IgaXRzZWxmIChhbmQgaXQgd29ya3MpLiAgSSB0aGluayBpdCBqdXN0IG5l ZWRzIGNsYXJpZmljYXRpb24gc28gcGVvcGxlIGNhbiBkZXBlbmQgb24gdGhlIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gbm90IGNoYW5naW5nLg0KDQotSmFiZW4NCg0KRnJvbTogTmksIFJ1aXl1DQpT ZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDI5LCAyMDE2IDk6MTMgUE0NClRvOiBDYXJzZXksIEph YmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPG1haWx0bzpqYWJlbi5jYXJzZXlAaW50ZWwuY29t Pj47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0Bp bnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t PG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwgRmVuZyA8ZmVu Zy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBaaGFuZywgQ2hh byBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29t Pj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0Bp bnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56 ZW5nQGludGVsLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cv Q2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQpJbXBvcnRhbmNlOiBIaWdo DQoNClN1cHBvc2luZyB1c2VyIGlucHV0cyDigJxDYXBzdWxlQXBwLmVmaSBQYXJhbWV0ZXIxIFBh cmFtZXRlcjLigJ0uDQpUaGVyZSBpcyBubyBzcGVjIHRvIGRlZmluZSB3aGF0IHRoZSBMb2FkT3B0 aW9uIHNob3VsZCBlcXVhbCB0by4NCklmIHRoZXJlIGlzIGFub3RoZXIgVUVGSSBTaGVsbCBpbXBs ZW1lbnRhdGlvbiwgaXQgY291bGQgaW50ZXJwcmV0IHRoZSBjb21tYW5kIGxpbmUgdGhlbiBzZXRz IG9ubHkg4oCcUGFyYW1ldGVyMSBQYXJhbWV0ZXIy4oCdIGludG8gTG9hZE9wdGlvbiwgb3Igc2V0 cyDigJxDYXBzdWxlQXBwLmVmaVx0UGFyYW1ldGVyMVx0UGFyYW1ldGVyMuKAnSB0byBMb2FkT3B0 aW9uLCBvciBzZXRzIOKAnFtTaGVsbF1cdENhcHN1bGVBcHAuZWZpXHRQYXJhbWV0ZXIxXHRQYXJh bWV0ZXIy4oCdIHRvIExvYWRPcHRpb24uDQpCZWNhdXNlIGl04oCccHJvZHVjZXPigJ0gc3VjaCBM b2FkT3B0aW9uLCBpdCBrbm93cyBob3cgdG8g4oCcY29uc3VtZeKAnS9wYXJzZSBpdCB0byBnZXQg dGhlIEFSR1ZzLg0KDQpTbyBJIHN1Z2dlc3Qgd2UgcHV0IHRoZSBDYXBzdWxlQXBwIGluIFNoZWxs UGtnIGFuZCBsZXQgaXQgdXNlIHRoZSBTaGVsbFBhcmFtZXRlciBwcm90b2NvbC4NCg0KUmVnYXJk cywNClJheQ0KDQpGcm9tOiBDYXJzZXksIEphYmVuDQpTZW50OiBGcmlkYXksIFNlcHRlbWJlciAz MCwgMjAxNiAzOjExIEFNDQpUbzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb208bWFpbHRv OnJ1aXl1Lm5pQGludGVsLmNvbT4+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208 bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pjsg ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0K Q2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRl bC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hh by5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208 bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRl bC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+PjsgQ2Fyc2V5LCBKYWJlbiA8amFiZW4u Y2Fyc2V5QGludGVsLmNvbTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+DQpTdWJqZWN0 OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVB cHAgYXBwbGljYXRpb24uDQoNCkkgYW0gY29uZnVzZWQuDQoNCldoeSBpcyBMb2FkT3B0aW9uIGFu ZCBMb2FkT3B0aW9uU2l6ZSBub3Qgd29ya2luZz8gIFRoaXMgaXMgc3BlY2lmaWVkIGFzIHBhcnQg b2YgVUVGSSBTcGVjIChOb3RlOiBOb3QgVUVGSSBTaGVsbCBTcGVjKSBhcyBhIHN0YW5kYXJkIHdh eSB0byBwYXNzIHBhcmFtZXRlcnMgdG8gVUVGSSBhcHBsaWF0aW9ucy4gIEkgdGhpbmsgdGhpcyBz aG91bGQgd29yayAoYWx0aG91Z2ggaXQgaXMgbW9yZSB3b3JrIHRoYW4ganVzdCBleGFtaW5pbmcg YXJnYy9hcmd2KS4NCg0KLUphYmVuDQoNCkZyb206IE5pLCBSdWl5dQ0KU2VudDogV2VkbmVzZGF5 LCBTZXB0ZW1iZXIgMjgsIDIwMTYgMTE6NDAgUE0NClRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlh b0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFl bCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlz dHMuMDEub3JnPg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZl bmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNv bTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdh b0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcsIFN0YXIgPHN0 YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+PjsgQ2Fyc2V5LCBK YWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNv bT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDog QWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQpJbXBvcnRhbmNlOiBIaWdoDQoNCkppZXdlbiwN ClRoZSB3YXkgQ2Fwc3VsZUFwcCBleHRyYWN0cyB0aGUgQVJHViBhc3N1bWVzIFVFRkkgU2hlbGwg ZW5jb2RlcyB0aGUgcGFyYW1ldGVycyB1c2luZyBhIGNlcnRhaW4gd2F5LiBCdXQgdGhlIHBhcmFt ZXRlciBlbmNvZGluZyB3YXkgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgU2hlbGwgc3BlYy4NCk1h eWJlIHdlIGNhbiBwdXQgdGhlIENhcHN1bGVBcHAgaW4gU2hlbGxQa2csIHRoZW4gbGV0IGl0IGRp cmVjdGx5IHVzZSBTaGVsbFBhcmFtZXRlciBwcm90b2NvbCB0byBnZXQgdGhlIEFSR1YuDQoNCkNv cHlpbmcgSmFiZW4uDQoNClJlZ2FyZHMsDQpSYXkNCg0KRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRv OmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJlaGFsZiBPZiBZYW8sIEppZXdl bg0KU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAyOSwgMjAxNiAxMDozNyBBTQ0KVG86IEtpbm5l eSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnPg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208 bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5n QGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8 bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcs IFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+Pg0K U3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBw OiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCg0KUmlnaHQuIENhcHN1bGVPbkRpc2sgaXMg bm90IHN1cHBvcnRlZCBpbiBCSU9TIHlldC4NCkkgd2lsbCByZW1vdmUgaXQgaW4gQ2Fwc3VsZUFw cC4NCg0KQ2Fwc3VsZUFwcCBqdXN0IHdvcmtzIGFzIGFuIGFnZW50IHRvIHBhc3MgY2Fwc3VsZSB0 byBDYXBzdWxlRHhlUnVudGltZSBkcml2ZXIuDQpTbyBpdCBpcyBjaGVja2VkIGJ5IENhcHN1bGVE eGVSdW50aW1lLCBub3QgQ2Fwc3VsZUFwcC4NCg0KVGhhbmsgeW91DQpZYW8gSmlld2VuDQoNCkZy b206IEtpbm5leSwgTWljaGFlbCBEDQpTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDI5LCAyMDE2 IDk6MDYgQU0NClRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmpp ZXdlbi55YW9AaW50ZWwuY29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsy LWRldmVsQGxpc3RzLjAxLm9yZz47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0KQ2M6IFRpYW4s IEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+Pjsg WmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNv bT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9A aW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRv OmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRl TW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0KDQpKaWV3 ZW4sDQoNCkRvZXMgdGhlIGNhcHN1bGUgb24gZGlzayBmZWF0dXJlIHByb3ZpZGVkIGJ5IHRoaXMg YXBwIHdvcms/DQoNCkkgdHJpZWQgaXQgd2l0aCB0aGUgUXVhcmtQbGF0Zm9ybVBrZyBjYXBzdWxl IGFuZCBJIGNhbiBnZXQNClRoZSBhcHAgdG8gY29weSB0aGUgY2Fwc3VsZSB0byBhbiBFRkkgU3lz dGVtIFBhcnRpdGlvbiwgYnV0DQpUaGUgbG9naWMgYWZ0ZXIgdGhhdCBwb2ludCBsb29rcyBpbmNv bXBsZXRlLg0KDQpBbHNvLCBpZiBJIGNsZWFyIHRoZSBQZXJzaXN0IGFuZCBSZXNldCBmbGFncyBv biB0aGUgY2Fwc3VsZSwNCnRoZSBpbW1lZGlhdGUgcHJvY2Vzc2luZyBvZiB0aGUgY2Fwc3VsZSBk b2VzIG5vdCB3b3JrLg0KDQpJcyB0aGVyZSBhbnkgRlcgY29kZSB0aGF0IHdpbGwgbG9vayBmb3Ig Y2Fwc3VsZXMgb24gZGlzaz8NCg0KSWYgdGhlcmUgYXJlIGluY29tcGxldGUgZmVhdHVyZXMgaW4g Q2Fwc3VsZUFwcCwgdGhlbiBJIHRoaW5rDQp3ZSBzaG91bGQgcmVtb3ZlIHRoZW0uDQoNCk1pa2UN Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZYW8sIEppZXdlbg0KPiBT ZW50OiBUdWVzZGF5LCBTZXB0ZW1iZXIgMjAsIDIwMTYgMTE6NDUgUE0NCj4gVG86IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmclM2NtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+Pg0K PiBDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGlu dGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbSUzY21haWx0bzpmZW5nLnRpYW5AaW50 ZWwuY29tPj4+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnpl bmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tJTNjbWFpbHRvOnN0YXIuemVu Z0BpbnRlbC5jb20+Pj47IEtpbm5leSwgTWljaGFlbA0KPiBEIDxtaWNoYWVsLmQua2lubmV5QGlu dGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwu ZC5raW5uZXlAaW50ZWwuY29tJTNjbWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4+ OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50 ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbSUzY21haWx0bzpsaW1pbmcuZ2FvQGlu dGVsLmNvbT4+PjsgWmhhbmcsIENoYW8gQg0KPiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWls dG86Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbSUz Y21haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj4+DQo+IFN1YmplY3Q6IFtQQVRDSCAxNy80 NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0K Pg0KPiBUaGlzIENhcHN1bGVBcHAgY2FuIGhlbHAgcGVyZm9ybSBjYXBzdWxlIHVwZGF0ZSBpbiBV RUZJIHNoZWxsIGVudmlyb25tZW50Lg0KPiBJdCBjYW4gYWxzbyBkdW1wIGNhcHN1bGUgaW5mb3Jt YXRpb24sIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlLCBFU1JUIGFuZCBGTVAuDQo+DQo+IENjOiBG ZW5nIFRpYW4gPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb208 bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20lM2NtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+ Pg0KPiBDYzogU3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdA aW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tJTNjbWFpbHRvOnN0YXIuemVuZ0Bp bnRlbC5jb20+Pj4NCj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20lM2NtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pj4N Cj4gQ2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2Fv QGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20lM2NtYWlsdG86bGltaW5nLmdh b0BpbnRlbC5jb20+Pj4NCj4gQ2M6IENoYW8gWmhhbmcgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208 bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5j b20lM2NtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+Pg0KPiBDb250cmlidXRlZC11bmRl cjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4wDQo+IFNpZ25lZC1vZmYtYnk6 IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVs LmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20lM2NtYWlsdG86amlld2VuLnlhb0BpbnRl bC5jb20+Pj4NCj4gLS0tDQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9B cHBTdXBwb3J0LmMgICAgICAgIHwgIDQ4MCArKysrKysrKysNCj4gIE1kZU1vZHVsZVBrZy9BcHBs aWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAuYyAgICAgICAgfCAxMDQ3ICsrKysrKysrKysr KysrKysrKysrDQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxl QXBwLmluZiAgICAgIHwgICA3MSArKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1 bGVBcHAvQ2Fwc3VsZUFwcC51bmkgICAgICB8ICAgMjIgKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxp Y2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaSB8ICAgMTkgKw0KPiAgTWRlTW9k dWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUR1bXAuYyAgICAgICB8ICA4NDAg KysrKysrKysrKysrKysrKw0KPiAgNiBmaWxlcyBjaGFuZ2VkLCAyNDc5IGluc2VydGlvbnMoKykN Cj4NCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0Fw cFN1cHBvcnQuYw0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0FwcFN1 cHBvcnQuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4zNjUwNjdk DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1 bGVBcHAvQXBwU3VwcG9ydC5jDQo+IEBAIC0wLDAgKzEsNDgwIEBADQo+ICsvKiogQGZpbGUNCj4g KyAgQSBzaGVsbCBhcHBsaWNhdGlvbiB0aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nl c3MuDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFu eWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGlj ZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBP UiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1l U2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2Fk ZWRJbWFnZS5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4g KyNpbmNsdWRlIDxHdWlkL0ZpbGVJbmZvLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9HcHQuaD4NCj4g Kw0KPiArI2RlZmluZSBNQVhfQVJHX05VTSAgICAgMTENCj4gKw0KPiArVUlOVE4gIEFyZ2MgPSAw Ow0KPiArQ0hBUjE2ICpBcmd2W01BWF9BUkdfTlVNXTsNCj4gK0NIQVIxNiAqQXJnQnVmZmVyOw0K PiArDQo+ICsvKioNCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHBhcnNlIGFwcGxpY2F0aW9uIEFS Ry4NCj4gKw0KPiArICBAcmV0dXJuIFN0YXR1cw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtH ZXRBcmcgKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgKkRhdGE7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIERh dGFTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqSW5kZXg7DQo+ICsg IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICpFbmQ7DQo+ICsgIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgICpESW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgRUZJX0xPQURFRF9JTUFHRV9QUk9UT0NPTCAgICAgKkxvYWRlZElt YWdlOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgZ0ltYWdlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlMb2Fk ZWRJbWFnZVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEKiopJkxvYWRl ZEltYWdlDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgRGF0YSA9IExv YWRlZEltYWdlLT5Mb2FkT3B0aW9uczsNCj4gKyAgRGF0YVNpemUgPSBMb2FkZWRJbWFnZS0+TG9h ZE9wdGlvbnNTaXplOw0KPiArDQo+ICsgIEVuZCA9IChDSEFSMTYqKShVSU5UTikoRGF0YSArIERh dGFTaXplKTsNCj4gKyAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNl c0RhdGEsIERhdGFTaXplLCAoVk9JRCAqKikmQXJnQnVmZmVyKTsNCj4gKyAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCj4gKyAgREluZGV4ID0gQXJnQnVmZmVyOw0KPiArICBBcmd2W0FyZ2Mr K10gPSBBcmdCdWZmZXI7DQo+ICsgIGZvciAoSW5kZXggPSAoQ0hBUjE2KilEYXRhOyBJbmRleCA8 IEVuZDsgKSB7DQo+ICsgICAgaWYgKCpJbmRleCA9PSBMJyAnKSB7DQo+ICsgICAgICAqREluZGV4 ID0gTCdcMCc7DQo+ICsgICAgICBpZiAoQXJnYyA+PSBNQVhfQVJHX05VTSkgew0KPiArICAgICAg ICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAgfQ0KPiArICAgICAgQXJndltBcmdj KytdID0gKCsrIERJbmRleCk7DQo+ICsgICAgICB3aGlsZSgqSW5kZXggPT0gTCcgJykgew0KPiAr ICAgICAgICBJbmRleCArKzsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgKCooREluZGV4 ICsrKSkgPSAoKihJbmRleCArKykpOw0KPiArICB9DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENsZWFyIEFQUCBBUkcuDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK0NsZWFuQXJnICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEZyZWVQb29sIChB cmd2WzBdKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybiBGaWxlIFN5c3RlbSBWb2x1 bWUgY29udGFpbmluZyB0aGlzIHNoZWxsIGFwcGxpY2F0aW9uLg0KPiArDQo+ICsgIEByZXR1cm4g RmlsZSBTeXN0ZW0gVm9sdW1lIGNvbnRhaW5pbmcgdGhpcyBzaGVsbCBhcHBsaWNhdGlvbi4NCj4g KyoqLw0KPiArRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAqDQo+ICtHZXRNeVZvbCAo DQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfTE9BREVEX0lNQUdFX1BST1RPQ09MICAgICAgICAg KkxvYWRlZEltYWdlOw0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZv bDsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICAgICAgIGdJbWFnZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpTG9hZGVk SW1hZ2VQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmTG9hZGVk SW1hZ2UNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICAgICBMb2FkZWRJbWFnZS0+RGV2aWNlSGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJlZvbA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gVm9sOw0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIGEgZmlsZSBmcm9t IHRoaXMgdm9sdW1lLg0KPiArDQo+ICsgIEBwYXJhbSBWb2wgICAgICAgICAgICAgRmlsZSBTeXN0 ZW0gVm9sdW1lDQo+ICsgIEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUgcmVh ZC4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0KPiAr ICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgUmVhZCBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiArICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgIEZpbGUgbm90IGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Jl YWRGaWxlRnJvbVZvbCAoDQo+ICsgIElOICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09M ICAgKlZvbCwNCj4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmls ZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZl clNpemUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZm ZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiArICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgUm9vdERpcjsN Cj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJbmZvU2l6ZTsNCj4gKyAgRUZJX0ZJ TEVfSU5GTyAgICAgICAgICAgICAgICAgICAgICpGaWxlSW5mbzsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRlbXBCdWZmZXJTaXplOw0KPiArICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKlRlbXBCdWZmZXI7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g T3BlbiB0aGUgcm9vdCBkaXJlY3RvcnkNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gVm9sLT5PcGVu Vm9sdW1lIChWb2wsICZSb290RGlyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBPcGVu IHRoZSBmaWxlDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFJvb3REaXItPk9wZW4gKA0KPiArICAg ICAgICAgICAgICAgICAgICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBGaWxlTmFtZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg MA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFJvb3REaXItPkNsb3NlIChSb290RGlyKTsNCj4gKw0K PiArICAvLw0KPiArICAvLyBHZXQgdGhlIGZpbGUgaW5mb3JtYXRpb24NCj4gKyAgLy8NCj4gKyAg RmlsZUluZm9TaXplID0gc2l6ZW9mKEVGSV9GSUxFX0lORk8pICsgMTAyNDsNCj4gKw0KPiArICBG aWxlSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKEZpbGVJbmZvU2l6ZSk7DQo+ICsgIGlmIChGaWxl SW5mbyA9PSBOVUxMKSB7DQo+ICsgICAgSGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gSGFuZGxlLT5HZXRJbmZv ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgIEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICZnRWZpRmlsZUluZm9HdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgJkZpbGVJbmZv U2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEZpbGVJbmZvDQo+ICsgICAgICAgICAgICAg ICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgSGFuZGxl LT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICBnQlMtPkZyZWVQb29sIChGaWxlSW5mbyk7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRl IGJ1ZmZlciBmb3IgdGhlIGZpbGUgZGF0YS4gVGhlIGxhc3QgQ0hBUjE2IGlzIGZvciBMJ1wwJw0K PiArICAvLw0KPiArICBUZW1wQnVmZmVyU2l6ZSA9IChVSU5UTikgRmlsZUluZm8tPkZpbGVTaXpl ICsgc2l6ZW9mKENIQVIxNik7DQo+ICsgIFRlbXBCdWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChU ZW1wQnVmZmVyU2l6ZSk7DQo+ICsgIGlmIChUZW1wQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBI YW5kbGUtPkNsb3NlIChIYW5kbGUpOw0KPiArICAgIGdCUy0+RnJlZVBvb2wgKEZpbGVJbmZvKTsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZ0JTLT5GcmVlUG9vbCAo RmlsZUluZm8pOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFJlYWQgdGhlIGZpbGUgZGF0YSB0byB0 aGUgYnVmZmVyDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEhhbmRsZS0+UmVhZCAoDQo+ICsgICAg ICAgICAgICAgICAgICAgICBIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAmVGVtcEJ1 ZmZlclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICBUZW1wQnVmZmVyDQo+ICsgICAgICAg ICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg SGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICBnQlMtPkZyZWVQb29sIChUZW1wQnVmZmVy KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgSGFuZGxlLT5DbG9z ZSAoSGFuZGxlKTsNCj4gKw0KPiArICAqQnVmZmVyU2l6ZSA9IFRlbXBCdWZmZXJTaXplOw0KPiAr ICAqQnVmZmVyICAgICA9IFRlbXBCdWZmZXI7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgYSBmaWxlLg0KPiArICBJZiBTY2FuRnMgaXMgRkxB U0UsIGl0IHdpbGwgdXNlIHRoaXMgVm9sIGFzIGRlZmF1bHQgRnMuDQo+ICsgIElmIFNjYW5GcyBp cyBUUlVFLCBpdCB3aWxsIHNjYW4gYWxsIEZTIGFuZCBjaGVjayB0aGUgZmlsZS4NCj4gKyAgICBJ ZiB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIG1hdGNoIHRoZSBuYW1lLCBpdCB3aWxsIGJlIHJlYWQu DQo+ICsgICAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBmaWxlIG1hdGNoIHRoZSBuYW1lLCBp dCB3aWxsIHJldHVybiBFcnJvci4NCj4gKw0KPiArICBAcGFyYW0gVGhpc1ZvbCAgICAgICAgIEZp bGUgU3lzdGVtIFZvbHVtZQ0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRoZSBmaWxlIHRv IGJlIHJlYWQuDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUgYnVmZmVyIHNp emUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZmZXINCj4gKyAgQHBh cmFtIFNjYW5GcyAgICAgICAgICBOZWVkIFNjYW4gYWxsIEZTDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICBSZWFkIGZpbGUgc3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR2YWwgRUZJX05P VF9GT1VORCAgRmlsZSBub3QgZm91bmQNCj4gKyAgQHJldHZhbCBFRklfTk9fTUFQUElORyBUaGVy ZSBpcyBkdXBsaWNhdGVkIGZpbGVzIGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Jl YWRGaWxlVG9CdWZmZXJFeCAoDQo+ICsgIElOIE9VVCBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BS T1RPQ09MICAgKipUaGlzVm9sLA0KPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKkJ1ZmZlciwNCj4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTY2FuRnMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BS T1RPQ09MICAgKlZvbDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRl bXBCdWZmZXJTaXplOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRl bXBCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb0hhbmRs ZXM7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVy Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gQ2hlY2sgcGFyYW1ldGVycw0KPiArICAvLw0KPiArICBpZiAoKEZpbGVO YW1lID09IE5VTEwpIHx8IChCdWZmZXIgPT0gTlVMTCkgfHwgKFRoaXNWb2wgPT0gTlVMTCkpIHsN Cj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gbm90IHNjYW4gZnMNCj4gKyAgLy8NCj4gKyAgaWYgKCFTY2FuRnMpIHsNCj4g KyAgICBpZiAoKlRoaXNWb2wgPT0gTlVMTCkgew0KPiArICAgICAgKlRoaXNWb2wgPSBHZXRNeVZv bCAoKTsNCj4gKyAgICAgIGlmICgqVGhpc1ZvbCA9PSBOVUxMKSB7DQo+ICsgICAgICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICAgIC8v DQo+ICsgICAgLy8gUmVhZCBmaWxlIGRpcmVjdGx5IGZyb20gVm9sDQo+ICsgICAgLy8NCj4gKyAg ICByZXR1cm4gUmVhZEZpbGVGcm9tVm9sICgqVGhpc1ZvbCwgRmlsZU5hbWUsIEJ1ZmZlclNpemUs IEJ1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBuZWVkIHNjYW4gZnMNCj4g KyAgLy8NCj4gKw0KPiArICAvLw0KPiArICAvLyBHZXQgYWxsIFZvbCBoYW5kbGUNCj4gKyAgLy8N Cj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPiArICAgICAgICAgICAg ICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxl U3lzdGVtUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAg ICAgICAgICAgICAgICAgJk5vSGFuZGxlcywNCj4gKyAgICAgICAgICAgICAgICAgICAmSGFuZGxl QnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSAmJiAoTm9IYW5kbGVzID09IDApKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBXYWxrIHRocm91Z2ggZWFjaCBWb2wNCj4g KyAgLy8NCj4gKyAgKlRoaXNWb2wgPSBOVUxMOw0KPiArICAqQnVmZmVyU2l6ZSA9IDA7DQo+ICsg ICpCdWZmZXIgICAgID0gTlVMTDsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTm9IYW5k bGVzOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAg ICAgICAgICAgICZnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopJlZvbA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgU3RhdHVzID0gUmVhZEZpbGVGcm9tVm9sIChWb2wsIEZpbGVOYW1lLCAm VGVtcEJ1ZmZlclNpemUsICZUZW1wQnVmZmVyKTsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFJlYWQgZmlsZSBPSywgY2hlY2sgZHVw bGljYXRpb24NCj4gKyAgICAgIC8vDQo+ICsgICAgICBpZiAoKlRoaXNWb2wgIT0gTlVMTCkgew0K PiArICAgICAgICAvLw0KPiArICAgICAgICAvLyBGaW5kIHRoZSBkdXBsaWNhdGVkIGZpbGUNCj4g KyAgICAgICAgLy8NCj4gKyAgICAgICAgZ0JTLT5GcmVlUG9vbCAoVGVtcEJ1ZmZlcik7DQo+ICsg ICAgICAgIGdCUy0+RnJlZVBvb2wgKCpCdWZmZXIpOw0KPiArICAgICAgICBQcmludCAoTCJEdXBs aWNhdGVkIEZpbGVOYW1lIGZvdW5kIVxuIik7DQo+ICsgICAgICAgIHJldHVybiBFRklfTk9fTUFQ UElORzsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIC8vIFJl Y29yZCB2YWx1ZQ0KPiArICAgICAgICAvLw0KPiArICAgICAgICAqVGhpc1ZvbCA9IFZvbDsNCj4g KyAgICAgICAgKkJ1ZmZlclNpemUgPSBUZW1wQnVmZmVyU2l6ZTsNCj4gKyAgICAgICAgKkJ1ZmZl ciAgICAgPSBUZW1wQnVmZmVyOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIFNjYW4gRnMgZG9uZQ0KPiArICAvLw0KPiArICBpZiAoKlRoaXNWb2wg PT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gRG9uZQ0KPiArICAvLw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIGEgZmlsZS4NCj4gKw0KPiArICBAcGFyYW0gRmls ZU5hbWUgICAgICAgIFRoZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXpl ICAgICAgVGhlIGZpbGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBU aGUgZmlsZSBidWZmZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFJlYWQgZmls ZSBzdWNjZXNzZnVsbHkNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICBGaWxlIG5vdCBmb3Vu ZA0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSZWFkRmlsZVRvQnVmZmVyICgNCj4gKyAgSU4g IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9V VCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsg IE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXINCj4gKyAg KQ0KPiArew0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZvbDsNCj4g KyAgVm9sID0gTlVMTDsNCj4gKyAgcmV0dXJuIFJlYWRGaWxlVG9CdWZmZXJFeCgmVm9sLCBGaWxl TmFtZSwgQnVmZmVyU2l6ZSwgQnVmZmVyLCBGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBXcml0ZSBhIGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBUaGUgZmls ZSB0byBiZSB3cml0dGVuLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxlIGJ1 ZmZlciBzaXplDQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVyDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBXcml0ZSBmaWxlIHN1Y2Nlc3NmdWxseQ0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtXcml0ZUZpbGVGcm9tQnVmZmVyKA0KPiArICBJTiAg Q0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgSU4g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPiArICBJ TiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAr ICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgUm9vdERpcjsNCj4gKyAgRUZJX0ZJ TEVfSEFORExFICAgICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRlbXBCdWZmZXJTaXplOw0KPiArICBFRklfU0lNUExFX0ZJTEVf U1lTVEVNX1BST1RPQ09MICAgKlZvbDsNCj4gKw0KPiArICBWb2wgPSBHZXRNeVZvbCgpOw0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIE9wZW4gdGhlIHJvb3QgZGlyZWN0b3J5DQo+ICsgIC8vDQo+ICsg IFN0YXR1cyA9IFZvbC0+T3BlblZvbHVtZSAoVm9sLCAmUm9vdERpcik7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gT3BlbiB0aGUgZmlsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBSb290 RGlyLT5PcGVuICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBSb290RGlyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICZIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRmlsZU5h bWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJ TEVfTU9ERV9XUklURXwgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgMA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIERlbGV0ZSBmaWxlDQo+ ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEhhbmRsZS0+RGVsZXRlKEhhbmRsZSk7DQo+ICsgIGlmIChF RklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICAvLw0KPiArICAvLyBPcGVuIHRoZSBmaWxlIGFnYWluDQo+ICsgIC8vDQo+ICsgIFN0YXR1 cyA9IFJvb3REaXItPk9wZW4gKA0KPiArICAgICAgICAgICAgICAgICAgICAgIFJvb3REaXIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICBGaWxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQg fCBFRklfRklMRV9NT0RFX1dSSVRFfCBFRklfRklMRV9NT0RFX0NSRUFURSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFJvb3REaXItPkNsb3NlIChSb290RGlyKTsNCj4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgUm9vdERpci0+Q2xvc2UgKFJv b3REaXIpOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdyaXRlIHRoZSBmaWxlIGRhdGEgZnJvbSB0 aGUgYnVmZmVyDQo+ICsgIC8vDQo+ICsgIFRlbXBCdWZmZXJTaXplID0gQnVmZmVyU2l6ZTsNCj4g KyAgU3RhdHVzID0gSGFuZGxlLT5Xcml0ZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICBIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAmVGVtcEJ1ZmZlclNpemUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICBCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBIYW5kbGUtPkNsb3NlIChIYW5kbGUpOw0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBIYW5kbGUtPkNsb3NlIChI YW5kbGUpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiBkaWZm IC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5j DQo+IGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5jDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjBhMjg1NTcNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBz dWxlQXBwLmMNCj4gQEAgLTAsMCArMSwxMDQ3IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgQSBzaGVs bCBhcHBsaWNhdGlvbiB0aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nlc3MuDQo+ICsN Cj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkg YmUgZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBC U0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE Lg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKyNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsj aW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9N ZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZp Y2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNU YWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2FkZWRJbWFnZS5o Pg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4gKyNpbmNsdWRl IDxQcm90b2NvbC9HcmFwaGljc091dHB1dC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvRmlsZUluZm8u aD4NCj4gKyNpbmNsdWRlIDxHdWlkL0dwdC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvR2xvYmFsVmFy aWFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0NhcHN1bGVSZXBvcnQuaD4NCj4gKyNpbmNsdWRl IDxHdWlkL1N5c3RlbVJlc291cmNlVGFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ZtcENhcHN1 bGUuaD4NCj4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1dpbmRvd3NVeENhcHN1bGUuaD4N Cj4gKw0KPiArI2RlZmluZSBDQVBTVUxFX0hFQURFUl9TSVpFICAweDIwDQo+ICsNCj4gKyNkZWZp bmUgTkVTVEVEX0NBUFNVTEVfSEVBREVSX1NJWkUgIFNJWkVfNEtCDQo+ICsjZGVmaW5lIFNZU1RF TV9GSVJNV0FSRV9GTEFHIDB4NTAwMDANCj4gKyNkZWZpbmUgREVWSUNFX0ZJUk1XQVJFX0ZMQUcg MHg3ODAxMA0KPiArDQo+ICsjZGVmaW5lIEVGSV9DQVBTVUxFX0ZST01fRklMRV9ESVIgICAgICAg ICAgICAgICAgICAgICAgICAgICBMIlxcRUZJXFxVcGRhdGVDYXBzdWxlXFw8ZmlsZTovLy9cXEVG SVxVcGRhdGVDYXBzdWxlXD48ZmlsZTovLy9cXEVGSVxVcGRhdGVDYXBzdWxlXCUzY2ZpbGU6XEVG SVxVcGRhdGVDYXBzdWxlXCUzZT4iDQo+ICsjZGVmaW5lIEVGSV9PU19JTkRJQ0FUSU9OU19GSUxF X0NBUFNVTEVfREVMSVZFUllfU1VQUE9SVEVEICAweDAwMDAwMDAwMDAwMDAwMDQNCj4gKw0KPiAr I2RlZmluZSBNQUpPUl9WRVJTSU9OICAgMQ0KPiArI2RlZmluZSBNSU5PUl9WRVJTSU9OICAgMA0K PiArDQo+ICsjZGVmaW5lIE1BWF9BUkdfTlVNICAgICAxMQ0KPiArI2RlZmluZSBNQVhfQ0FQU1VM RV9OVU0gKE1BWF9BUkdfTlVNIC0gMSkNCj4gKw0KPiArZXh0ZXJuIFVJTlROICBBcmdjOw0KPiAr ZXh0ZXJuIENIQVIxNiAqQXJndltdOw0KPiArDQo+ICsvLw0KPiArLy8gRGVmaW5lIGhvdyBtYW55 IGJsb2NrIGRlc2NyaXB0b3JzIHdlIHdhbnQgdG8gdGVzdCB3aXRoLg0KPiArLy8NCj4gK1VJTlRO ICBOdW1iZXJPZkRlc2NyaXB0b3JzID0gMTsNCj4gK1VJTlROICBDYXBzdWxlRmlyc3RJbmRleDsN Cj4gK1VJTlROICBDYXBzdWxlTGFzdEluZGV4Ow0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBjYXBz dWxlIGluZm9ybWF0aW9uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg IFRoZSBjYXBzdWxlIGluZm9ybWF0aW9uIGlzIGR1bXBlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgIElucHV0IHBhcmFtZXRlciBpcyBub3QgdmFsaWQuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0R1bXBDYXBzdWxlKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBEdW1wIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUgaXMg ZHVtcGVkLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1l dGVyIGlzIG5vdCB2YWxpZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRG1wQ2Fwc3VsZVN0 YXR1c1ZhcmlhYmxlKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBEdW1w IEZNUCBwcm90b2NvbCBpbmZvLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wRGF0YSgNCj4g KyAgVk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIGluZm8uDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK0R1bXBFc3J0RGF0YSgNCj4gKyAgVk9JRA0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKyAgUmVhZCBhIGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAg ICBUaGUgZmlsZSB0byBiZSByZWFkLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBm aWxlIGJ1ZmZlciBzaXplDQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVm ZmVyDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBSZWFkIGZpbGUgc3VjY2Vzc2Z1 bGx5DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmlsZSBub3QgZm91bmQNCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArUmVhZEZpbGVUb0J1ZmZlcigNCj4gKyAgSU4gIENIQVIxNiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsgIE9VVCBWT0lEICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXINCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIFdyaXRlIGEgZmlsZS4NCj4gKw0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAg IFRoZSBmaWxlIHRvIGJlIHdyaXR0ZW4uDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhl IGZpbGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBi dWZmZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFdyaXRlIGZpbGUgc3VjY2Vz c2Z1bGx5DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1dyaXRlRmlsZUZyb21CdWZmZXIoDQo+ ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0K PiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUs DQo+ICsgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0K PiArICApOw0KPiArDQo+ICsvKioNCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHBhcnNlIGFwcGxp Y2F0aW9uIEFSRy4NCj4gKw0KPiArICBAcmV0dXJuIFN0YXR1cw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtHZXRBcmcgKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBD bGVhciBBUFAgQVJHLg0KPiArKiovDQo+ICtWT0lEDQo+ICtDbGVhbkFyZyAoDQo+ICsgIFZPSUQN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENyZWF0ZSBVWCBjYXBzdWxlLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fwc3VsZSBoZWFkZXIgaXMgYXBw ZW5kZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0 ZXIgaXMgbm90IHZhbGlkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm8g ZW5vdWdoIHJlc291cmNlIHRvIGNyZWF0ZSBVWCBjYXBzdWxlLg0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtDcmVhdGVCbXBGbXAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk91dHB1dENhcHN1bGVO YW1lOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkJtcEJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbGVTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkJtcE5hbWU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqRnVsbENhcHN1bGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ ICsgIEVGSV9ESVNQTEFZX0NBUFNVTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAqRGlzcGxh eUNhcHN1bGU7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgICAgICAgICAg ICAgICAgICAqR29wOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2woJmdF ZmlHcmFwaGljc091dHB1dFByb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopJkdvcCk7DQo+ICsg IGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogTk8g R09QIGlzIGZvdW5kLlxuIik7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAg fQ0KPiArICBQcmludChMIkN1cnJlbnQgR09QOiBNb2RlIC0gJWQsICIsIEdvcC0+TW9kZS0+TW9k ZSk7DQo+ICsgIFByaW50KEwiSG9yaXpvbnRhbFJlc29sdXRpb24gLSAlZCwgIiwgR29wLT5Nb2Rl LT5JbmZvLT5Ib3Jpem9udGFsUmVzb2x1dGlvbik7DQo+ICsgIFByaW50KEwiVmVydGljYWxSZXNv bHV0aW9uIC0gJWRcbiIsIEdvcC0+TW9kZS0+SW5mby0+VmVydGljYWxSZXNvbHV0aW9uKTsNCj4g KyAgLy8gSG9yaXpvbnRhbFJlc29sdXRpb24gPj0gQk1QX0lNQUdFX0hFQURFUi5QaXhlbFdpZHRo DQo+ICsgIC8vIFZlcnRpY2FsUmVzb2x1dGlvbiAgID49IEJNUF9JTUFHRV9IRUFERVIuUGl4ZWxI ZWlnaHQNCj4gKw0KPiArICBpZiAoQXJnYyAhPSA1KSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxl QXBwOiBJbnZhbGlkIFBhcmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JU RUQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbM10sIEwiLU8iKSAhPSAwKSB7 DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBOTyBvdXRwdXQgY2Fwc3VsZSBuYW1lLlxuIik7 DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArICBPdXRwdXRDYXBz dWxlTmFtZSA9IEFyZ3ZbNF07DQo+ICsNCj4gKyAgQm1wQnVmZmVyID0gTlVMTDsNCj4gKyAgRmls ZVNpemUgPSAwOw0KPiArICBGdWxsQ2Fwc3VsZUJ1ZmZlciA9IE5VTEw7DQo+ICsNCj4gKyAgQm1w TmFtZSA9IEFyZ3ZbMl07DQo+ICsgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZmZXIoQm1wTmFtZSwg JkZpbGVTaXplLCAmQm1wQnVmZmVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBCTVAgaW1hZ2UgKCVzKSBpcyBub3QgZm91bmQuXG4i LCBCbXBOYW1lKTsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBGdWxsQ2Fw c3VsZUJ1ZmZlclNpemUgPSBzaXplb2YoRUZJX0RJU1BMQVlfQ0FQU1VMRSkgKyBGaWxlU2l6ZTsN Cj4gKyAgRnVsbENhcHN1bGVCdWZmZXIgPSBBbGxvY2F0ZVBvb2woRnVsbENhcHN1bGVCdWZmZXJT aXplKTsNCj4gKyAgaWYgKEZ1bGxDYXBzdWxlQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBQcmlu dChMIkNhcHN1bGVBcHA6IENhcHN1bGUgQnVmZmVyIHNpemUgKDB4JXgpIHRvbyBiaWcuXG4iLA0K PiBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemUpOw0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIERpc3BsYXlDYXBz dWxlID0gKEVGSV9ESVNQTEFZX0NBUFNVTEUgKilGdWxsQ2Fwc3VsZUJ1ZmZlcjsNCj4gKyAgQ29w eUd1aWQoJkRpc3BsYXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkNhcHN1bGVHdWlkLCAmZ1dpbmRv d3NVeENhcHN1bGVHdWlkKTsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuSGVh ZGVyU2l6ZSA9IHNpemVvZihEaXNwbGF5Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlcik7DQo+ICsgIERp c3BsYXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkZsYWdzID0gQ0FQU1VMRV9GTEFHU19QRVJTSVNU X0FDUk9TU19SRVNFVDsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuQ2Fwc3Vs ZUltYWdlU2l6ZSA9IChVSU5UMzIpRnVsbENhcHN1bGVCdWZmZXJTaXplOw0KPiArDQo+ICsgIERp c3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuVmVyc2lvbiA9IDE7DQo+ICsgIERpc3BsYXlDYXBz dWxlLT5JbWFnZVBheWxvYWQuQ2hlY2tzdW0gPSAwOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1h Z2VQYXlsb2FkLkltYWdlVHlwZSA9IDA7IC8vIEJNUA0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1h Z2VQYXlsb2FkLlJlc2VydmVkID0gMDsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9h ZC5Nb2RlID0gR29wLT5Nb2RlLT5Nb2RlOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXls b2FkLk9mZnNldFggPSAwOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk9mZnNl dFkgPSAwOw0KPiArDQo+ICsgIENvcHlNZW0oKERpc3BsYXlDYXBzdWxlICsgMSksIEJtcEJ1ZmZl ciwgRmlsZVNpemUpOw0KPiArDQo+ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuQ2hl Y2tzdW0gPSBDYWxjdWxhdGVDaGVja1N1bTgoRnVsbENhcHN1bGVCdWZmZXIsDQo+IEZ1bGxDYXBz dWxlQnVmZmVyU2l6ZSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gV3JpdGVGaWxlRnJvbUJ1ZmZlcihP dXRwdXRDYXBzdWxlTmFtZSwgRnVsbENhcHN1bGVCdWZmZXJTaXplLA0KPiBGdWxsQ2Fwc3VsZUJ1 ZmZlcik7DQo+ICsgIFByaW50KEwiQ2Fwc3VsZUFwcDogV3JpdGUgJXMgJXJcbiIsIE91dHB1dENh cHN1bGVOYW1lLCBTdGF0dXMpOw0KPiArDQo+ICtEb25lOg0KPiArICBpZiAoQm1wQnVmZmVyICE9 IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChCbXBCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKEZ1bGxDYXBzdWxlQnVmZmVyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChGdWxsQ2Fw c3VsZUJ1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgR2V0IEltYWdlVHlwZUlkIGluIHRoZSBGTVAgY2Fwc3VsZSBoZWFkZXIu DQo+ICsNCj4gKyAgQHBhcmFtIENhcHN1bGVIZWFkZXIgIFRoZSBGTVAgY2Fwc3VsZSBpbWFnZSBo ZWFkZXIuDQo+ICsNCj4gKyAgQHJldHVybiBJbWFnZVR5cGVJZA0KPiArKiovDQo+ICtFRklfR1VJ RCAqDQo+ICtHZXRDYXBzdWxlSW1hZ2VUeXBlSWQoDQo+ICsgIElOIEVGSV9DQVBTVUxFX0hFQURF UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZUhlYWRlcg0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSICAgICAgICpGbXBD YXBzdWxlSGVhZGVyOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqSXRlbU9mZnNldExpc3Q7DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NB UFNVTEVfSU1BR0VfSEVBREVSICpJbWFnZUhlYWRlcjsNCj4gKw0KPiArICBGbXBDYXBzdWxlSGVh ZGVyID0gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSICopKChVSU5UOCAq KUNhcHN1bGVIZWFkZXINCj4gKyBDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplKTsNCj4gKyAgSXRl bU9mZnNldExpc3QgPSAoVUlOVDY0ICopKEZtcENhcHN1bGVIZWFkZXIgKyAxKTsNCj4gKyAgaWYg KEZtcENhcHN1bGVIZWFkZXItPlBheWxvYWRJdGVtQ291bnQgPT0gMCkgew0KPiArICAgIHJldHVy biBOVUxMOw0KPiArICB9DQo+ICsgIEltYWdlSGVhZGVyID0gKEVGSV9GSVJNV0FSRV9NQU5BR0VN RU5UX0NBUFNVTEVfSU1BR0VfSEVBREVSICopKChVSU5UOA0KPiAqKUZtcENhcHN1bGVIZWFkZXIg KyBJdGVtT2Zmc2V0TGlzdFtGbXBDYXBzdWxlSGVhZGVyLT5FbWJlZGRlZERyaXZlckNvdW50XSk7 DQo+ICsgIHJldHVybiAmSW1hZ2VIZWFkZXItPlVwZGF0ZUltYWdlVHlwZUlkOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgR2V0IEVTUlQgRndUeXBlIGFjY29yZGluZyB0byBJbWFnZVR5cGVJZA0K PiArDQo+ICsgIEBwYXJhbSAgSW1hZ2VUeXBlSWQgICBJbWFnZVR5cGVJZCBvZiBhbiBGTVAgY2Fw c3VsZS4NCj4gKw0KPiArICBAcmV0dXJuIEVTUlQgRndUeXBlDQo+ICsqKi8NCj4gK1VJTlQzMg0K PiArR2V0RXNydEZ3VHlwZSgNCj4gKyAgSU4gIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqSW1hZ2VUeXBlSWQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9TWVNURU1fUkVTT1VSQ0VfVEFC TEUgICpFc3J0Ow0KPiArICBFRklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICAqRXNydEVudHJ5Ow0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKw0KPiArICAvLw0KPiAr ICAvLyBDaGVjayBFU1JUDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEVmaUdldFN5c3RlbUNvbmZp Z3VyYXRpb25UYWJsZSgmZ0VmaVN5c3RlbVJlc291cmNlVGFibGVHdWlkLCAoVk9JRA0KPiAqKikm RXNydCk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBFc3J0RW50cnkg PSAoVk9JRCAqKShFc3J0ICsgMSk7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNy dC0+RndSZXNvdXJjZUNvdW50OyBJbmRleCsrLCBFc3J0RW50cnkrKykgew0KPiArICAgICAgaWYg KENvbXBhcmVHdWlkKCZFc3J0RW50cnktPkZ3Q2xhc3MsIEltYWdlVHlwZUlkKSkgew0KPiArICAg ICAgICByZXR1cm4gRXNydEVudHJ5LT5Gd1R5cGU7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVTUlRfRldfVFlQRV9VTktOT1dOOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgQXBwZW5kIGEgY2Fwc3VsZSBoZWFkZXIgb24gdG9wIG9mIGN1cnJlbnQgaW1h Z2UuDQo+ICsgIFRoaXMgZnVuY3Rpb24gZm9sbG93cyBXaW5kb3dzIFVFRkkgRmlybXdhcmUgVXBk YXRlIFBsYXRmb3JtIGRvY3VtZW50Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBUaGUgY2Fwc3VsZSBoZWFkZXIgaXMgYXBwZW5kZWQuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkLg0KPiArICBA cmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm8gZW5vdWdoIHJlc291cmNlIHRvIGFwcGVu ZCBjYXBzdWxlIGhlYWRlci4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ3JlYXRlTmVzdGVk Rm1wKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpPdXRwdXRDYXBzdWxlTmFtZTsNCj4gKyAgVk9JRCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlQnVmZmVyOw0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVNp emU7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq Q2Fwc3VsZU5hbWU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqRnVsbENhcHN1bGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsgIEVGSV9D QVBTVUxFX0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqTmVzdGVkQ2Fwc3VsZUhl YWRlcjsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpJbWFnZVR5cGVJZDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZ3VHlwZTsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoQXJnYyAhPSA1KSB7DQo+ICsgICAg UHJpbnQoTCJDYXBzdWxlQXBwOiBJbnZhbGlkIFBhcmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbM10s IEwiLU8iKSAhPSAwKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBOTyBvdXRwdXQgY2Fw c3VsZSBuYW1lLlxuIik7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0K PiArICBPdXRwdXRDYXBzdWxlTmFtZSA9IEFyZ3ZbNF07DQo+ICsNCj4gKyAgQ2Fwc3VsZUJ1ZmZl ciA9IE5VTEw7DQo+ICsgIEZpbGVTaXplID0gMDsNCj4gKyAgRnVsbENhcHN1bGVCdWZmZXIgPSBO VUxMOw0KPiArDQo+ICsgIENhcHN1bGVOYW1lID0gQXJndlsyXTsNCj4gKyAgU3RhdHVzID0gUmVh ZEZpbGVUb0J1ZmZlcihDYXBzdWxlTmFtZSwgJkZpbGVTaXplLCAmQ2Fwc3VsZUJ1ZmZlcik7DQo+ ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDog Q2Fwc3VsZSBpbWFnZSAoJXMpIGlzIG5vdCBmb3VuZC5cbiIsIENhcHN1bGVOYW1lKTsNCj4gKyAg ICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBJbWFnZVR5cGVJZCA9IEdldENhcHN1bGVJ bWFnZVR5cGVJZChDYXBzdWxlQnVmZmVyKTsNCj4gKyAgaWYgKEltYWdlVHlwZUlkID09IE5VTEwp IHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IENhcHN1bGUgSW1hZ2VUeXBlSWQgaXMgbm90 IGZvdW5kLlxuIik7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsgIEZ3VHlwZSA9IEdl dEVzcnRGd1R5cGUoSW1hZ2VUeXBlSWQpOw0KPiArICBpZiAoKEZ3VHlwZSAhPSBFU1JUX0ZXX1RZ UEVfU1lTVEVNRklSTVdBUkUpICYmIChGd1R5cGUgIT0NCj4gRVNSVF9GV19UWVBFX0RFVklDRUZJ Uk1XQVJFKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogQ2Fwc3VsZSBGd1R5cGUgaXMg aW52YWxpZC5cbiIpOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIEZ1bGxD YXBzdWxlQnVmZmVyU2l6ZSA9IE5FU1RFRF9DQVBTVUxFX0hFQURFUl9TSVpFICsgRmlsZVNpemU7 DQo+ICsgIEZ1bGxDYXBzdWxlQnVmZmVyID0gQWxsb2NhdGVQb29sKEZ1bGxDYXBzdWxlQnVmZmVy U2l6ZSk7DQo+ICsgIGlmIChGdWxsQ2Fwc3VsZUJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgUHJp bnQoTCJDYXBzdWxlQXBwOiBDYXBzdWxlIEJ1ZmZlciBzaXplICgweCV4KSB0b28gYmlnLlxuIiwN Cj4gRnVsbENhcHN1bGVCdWZmZXJTaXplKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBOZXN0ZWRDYXBz dWxlSGVhZGVyID0gKEVGSV9DQVBTVUxFX0hFQURFUiAqKUZ1bGxDYXBzdWxlQnVmZmVyOw0KPiAr ICBaZXJvTWVtKE5lc3RlZENhcHN1bGVIZWFkZXIsIE5FU1RFRF9DQVBTVUxFX0hFQURFUl9TSVpF KTsNCj4gKyAgQ29weUd1aWQoJk5lc3RlZENhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLCBJbWFn ZVR5cGVJZCk7DQo+ICsgIE5lc3RlZENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUgPSBORVNURURf Q0FQU1VMRV9IRUFERVJfU0laRTsNCj4gKyAgTmVzdGVkQ2Fwc3VsZUhlYWRlci0+RmxhZ3MgPSAo RndUeXBlID09IEVTUlRfRldfVFlQRV9ERVZJQ0VGSVJNV0FSRSkgPw0KPiBTWVNURU1fRklSTVdB UkVfRkxBRyA6IERFVklDRV9GSVJNV0FSRV9GTEFHOw0KPiArICBOZXN0ZWRDYXBzdWxlSGVhZGVy LT5DYXBzdWxlSW1hZ2VTaXplID0gKFVJTlQzMilGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsN Cj4gKyAgQ29weU1lbSgoVUlOVDggKilOZXN0ZWRDYXBzdWxlSGVhZGVyICsgTmVzdGVkQ2Fwc3Vs ZUhlYWRlci0+SGVhZGVyU2l6ZSwNCj4gQ2Fwc3VsZUJ1ZmZlciwgRmlsZVNpemUpOw0KPiArDQo+ ICsgIFN0YXR1cyA9IFdyaXRlRmlsZUZyb21CdWZmZXIoT3V0cHV0Q2Fwc3VsZU5hbWUsIEZ1bGxD YXBzdWxlQnVmZmVyU2l6ZSwNCj4gRnVsbENhcHN1bGVCdWZmZXIpOw0KPiArICBQcmludChMIkNh cHN1bGVBcHA6IFdyaXRlICVzICVyXG4iLCBPdXRwdXRDYXBzdWxlTmFtZSwgU3RhdHVzKTsNCj4g Kw0KPiArRG9uZToNCj4gKyAgaWYgKENhcHN1bGVCdWZmZXIgIT0gTlVMTCkgew0KPiArICAgIEZy ZWVQb29sKENhcHN1bGVCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZ1bGxDYXBzdWxl QnVmZmVyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChGdWxsQ2Fwc3VsZUJ1ZmZlcik7DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0K PiArICBDbGVhciBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlIGlzIGNsZWFy ZWQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NsZWFyQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxl KA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fw c3VsZVZhck5hbWVbMjBdOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqVGVtcFZhck5hbWU7DQo+ICsNCj4gKyAgU3RyQ3B5UyAoQ2Fwc3VsZVZhck5hbWUsIHNpemVv ZihDYXBzdWxlVmFyTmFtZSkvc2l6ZW9mKENhcHN1bGVWYXJOYW1lWzBdKSwNCj4gTCJDYXBzdWxl Iik7DQo+ICsgIFRlbXBWYXJOYW1lID0gQ2Fwc3VsZVZhck5hbWUgKyBTdHJMZW4gKENhcHN1bGVW YXJOYW1lKTsNCj4gKyAgSW5kZXggPSAwOw0KPiArDQo+ICsgIHdoaWxlIChUUlVFKSB7DQo+ICsg ICAgVW5pY29kZVNQcmludCAoVGVtcFZhck5hbWUsIDUgKiBzaXplb2YoQ0hBUjE2KSwgTCIlMDR4 IiwgSW5kZXgpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gZ1JULT5TZXRWYXJpYWJsZSAoDQo+ICsg ICAgICAgICAgICAgICAgICAgIENhcHN1bGVWYXJOYW1lLA0KPiArICAgICAgICAgICAgICAgICAg ICAmZ0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfVkFS SUFCTEVfTk9OX1ZPTEFUSUxFIHwgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIHwNCj4gRUZJ X1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUywNCj4gKyAgICAgICAgICAgICAgICAgICAgMCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKilOVUxMDQo+ICsgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICAvLw0KPiAr ICAgICAgLy8gVGhlcmUgaXMgbm8gY2Fwc3VsZSB2YXJpYWJsZXMsIHF1aXQNCj4gKyAgICAgIC8v DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJbmRleCsrOw0KPiArICAg IGlmIChJbmRleCA+IDB4RkZGRikgew0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg R2V0IHRoZSBhY3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uIGZyb20gYm9vdG9wdGlvbiBsaXN0 Lg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIEZzICAgIFNpbXBsZSBGaWxlIFN5c3RlbSBwcm90b2Nv bCBvbiB0aGUgYWN0aXZlIFVFRkkgc3lzdGVtIHBhcnRpdGlvbg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICBhY3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uIGZvdW5kDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0dldEVmaVN5c1BhcnRpdGlvbigNCj4gKyAgT1VUIEVGSV9TSU1Q TEVfRklMRV9TWVNURU1fUFJPVE9DT0wgKipGcw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZ U1RFTV9QUk9UT0NPTCAgKkZzVGVtcDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgTm9IYW5kbGVzOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAq SGFuZGxlczsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ ICsNCj4gKyAgSGFuZGxlcyA9IE5VTEw7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gc2VhcmNoIGZv ciBFRkkgc3lzdGVtIHBhcnRpdGlvbiBwcm90b2NvbCBvbiBCb290IG9wdGlvbiBkZXZpY2UgcGF0 aA0KPiArICAvLw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlcihCeVByb3Rv Y29sLCAmZ0VmaVBhcnRUeXBlU3lzdGVtUGFydEd1aWQsIE5VTEwsDQo+ICZOb0hhbmRsZXMsICZI YW5kbGVzKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFNraXAgQm9vdE9wdGlvbnMgd2l0 aGluIEZWDQo+ICsgIC8vDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5vSGFuZGxlczsg SW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKEhhbmRsZXNb SW5kZXhdLCAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+IChWT0lEICoqKSZG c1RlbXApOw0KPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKXsNCj4gKyAgICAgICpGcyA9 IEZzVGVtcDsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICByZXR1cm4g U3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29weSBhIGxpc3Qgb2YgY2Fwc3VsZSBp bWFnZXMgdG8gdGhlIGFjdGl2ZSBVRUZJIHN5c3RlbSBwYXJ0aXRpb24gZnJvbSBib290b3B0aW9u DQo+IGxpc3QuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBDYXBzdWxlQnVmZmVyICAgIEFuIGFycmF5 IG9mIHBvaW50ZXIgdG8gY2Fwc3VsZSBpbWFnZXMNCj4gKyAgQHBhcmFtW2luXSBGaWxlU2l6ZSAg ICAgICAgIEFuIGFycmF5IG9mIFVJTlROIHRvIGNhcHN1bGUgaW1hZ2VzIHNpemUNCj4gKyAgQHBh cmFtW2luXSBDYXBzdWxlTnVtICAgICAgIFRoZSBjb3VudCBvZiBjYXBzdWxlIGltYWdlcw0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICBDYXBzdWxlIGltYWdlcyBhcmUgY29waWVkIHRv IHRoZSBhY3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0NvcHlDYXBzdWxlVG9BY3RpdmVFZmlQYXJ0aXRpb24oDQo+ICsgIElOIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICoqQ2Fwc3VsZUJ1ZmZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgKkZpbGVTaXplLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICBDYXBzdWxlTnVtDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAg ICAgICAgICAqQ2Fwc3VsZU5hbWU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAqRnM7DQo+ ICsgIEVGSV9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgIFJvb3REaXI7DQo+ICsgIEVGSV9G SUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgIENhcHN1bGVEaXI7DQo+ICsgIEVGSV9GSUxFX0hB TkRMRSAgICAgICAgICAgICAgICAgIERlc3RIYW5kbGU7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERhdGFTaXplOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICAgICBPc0luZGljYXRpb247DQo+ICsNCj4gKyAgUm9vdERpciAgICAgID0gTlVMTDsNCj4g KyAgQ2Fwc3VsZURpciAgID0gTlVMTDsNCj4gKw0KPiArICBTdGF0dXMgPSBHZXRFZmlTeXNQYXJ0 aXRpb24oJkZzKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQg KEwiQ2FuIG5vdCBmaW5kIGFjdGl2ZSBVRUZJIFN5c3RlbSBQYXJ0aXRpb25cbiIpOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGcy0+T3BlblZvbHVt ZShGcywgJlJvb3REaXIpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBn b3RvIEVYSVQ7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBSb290RGlyLT5PcGVuKA0KPiAr ICAgICAgICAgICAgICAgICAgICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg JkNhcHN1bGVEaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX0NBUFNVTEVfRlJPTV9G SUxFX0RJUiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQgfCBF RklfRklMRV9NT0RFX1dSSVRFIHwgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgRUZJX0ZJTEVfRElSRUNUT1JZDQo+ICsgICAgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgZ290byBFWElUOw0KPiAr ICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVhZCB0aGUgaW5wdXQgZmlsZXMuDQo+ICsgIC8v DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07IEluZGV4KyspIHsNCj4g KyAgICBDYXBzdWxlTmFtZSA9IEFyZ3ZbQ2Fwc3VsZUZpcnN0SW5kZXggKyBJbmRleF07DQo+ICsg ICAgU3RhdHVzID0gQ2Fwc3VsZURpci0+T3BlbigNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIENhcHN1bGVEaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzdEhhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVOYW1lLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJTEVfTU9ERV9X UklURSB8DQo+IEVGSV9GSUxFX01PREVfQ1JFQVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgRUZJX0ZJTEVfQVJDSElWRQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICAgIFByaW50KEwiQ2Fwc3Vs ZUFwcDogJXMgb3BlbiBlcnJvciAtICVyXG4iLCBDYXBzdWxlTmFtZSwgU3RhdHVzKTsNCj4gKyAg ICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIERhdGFTaXplID0gRmlsZVNpemVb SW5kZXhdOw0KPiArICAgIFN0YXR1cyA9IERlc3RIYW5kbGUtPldyaXRlKA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGVzdEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICZEYXRhU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVCdWZm ZXJbSW5kZXhdDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIERlc3RI YW5kbGUtPkNsb3NlKERlc3RIYW5kbGUpOw0KPiArICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkg ew0KPiArICAgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiAlcyB3cml0ZSBlcnJvciAtICVyLCBGaWxl U2l6ZSAtIDB4JXhcbiIsIENhcHN1bGVOYW1lLA0KPiBTdGF0dXMsIEZpbGVTaXplW0luZGV4XSk7 DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAo DQo+ICsgICAgICAgICAgICAgICAgICBMIk9zSW5kaWNhdGlvbnMiLA0KPiArICAgICAgICAgICAg ICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxM LA0KPiArICAgICAgICAgICAgICAgICAgJkRhdGFTaXplLA0KPiArICAgICAgICAgICAgICAgICAg KFZPSUQgKikgJk9zSW5kaWNhdGlvbg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiAr ICBpZiAoRUZJX0VSUk9SKFN0YXR1cykgfHwgRGF0YVNpemUgIT0gc2l6ZW9mKE9zSW5kaWNhdGlv bikpIHsNCj4gKyAgICBPc0luZGljYXRpb24gPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gU2V0IE9zSW5kaWNhdGlvbnMgVmFyaWFibGUgRUZJX09TX0lORElDQVRJT05TX0ZJTEVf Q0FQU1VMRV9ERUxJVkVSWV9TVVBQT1JURUQgYml0DQo+ICsgIC8vDQo+ICsgIE9zSW5kaWNhdGlv biB8PSBFRklfT1NfSU5ESUNBVElPTlNfRklMRV9DQVBTVUxFX0RFTElWRVJZX1NVUFBPUlRFRDsN Cj4gKyAgU3RhdHVzID0gZ1JULT5TZXRWYXJpYWJsZSAoDQo+ICsgICAgICAgICAgICAgICAgICBM Ik9zSW5kaWNhdGlvbnMiLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJs ZUd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwg RUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIHwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9W QVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICBzaXplb2Yo T3NJbmRpY2F0aW9uKSwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICopJk9zSW5kaWNhdGlv bg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArDQo+ICtFWElUOg0KPiArICBpZiAo Um9vdERpciAhPSBOVUxMKSB7DQo+ICsgICAgUm9vdERpci0+Q2xvc2UoUm9vdERpcik7DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoQ2Fwc3VsZURpciAhPSBOVUxMKSB7DQo+ICsgICAgQ2Fwc3VsZURp ci0+Q2xvc2UoQ2Fwc3VsZURpcik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQnVpbGQgR2F0aGVyIGxpc3QgZm9yIGEgbGlzdCBvZiBj YXBzdWxlIGltYWdlcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDYXBzdWxlQnVmZmVyICAgIEFu IGFycmF5IG9mIHBvaW50ZXIgdG8gY2Fwc3VsZSBpbWFnZXMNCj4gKyAgQHBhcmFtW2luXSAgRmls ZVNpemUgICAgICAgICBBbiBhcnJheSBvZiBVSU5UTiB0byBjYXBzdWxlIGltYWdlcyBzaXplDQo+ ICsgIEBwYXJhbVtpbl0gIENhcHN1bGVOdW0gICAgICAgVGhlIGNvdW50IG9mIGNhcHN1bGUgaW1h Z2VzDQo+ICsgIEBwYXJhbVtvdXRdIEJsb2NrRGVzY3JpcHRvcnMgVGhlIGJsb2NrIGRlc2NyaXB0 b3JzIGZvciB0aGUgY2Fwc3VsZSBpbWFnZXMNCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT IFRoZSBibG9jayBkZXNjcmlwdG9ycyBmb3IgdGhlIGNhcHN1bGUgaW1hZ2VzIGFyZSBjb25zdHJ1 Y3RlZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQnVpbGRHYXRoZXJMaXN0KA0KPiArICBJ TiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqKkNhcHN1bGVCdWZmZXIsDQo+ICsgIElO IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlU2l6ZSwNCj4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZU51bSwNCj4gKyAgT1VUIEVGSV9DQVBTVUxF X0JMT0NLX0RFU0NSSVBUT1IgKipCbG9ja0Rlc2NyaXB0b3JzDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfQ0FQU1VMRV9C TE9DS19ERVNDUklQVE9SICAqQmxvY2tEZXNjcmlwdG9yczE7DQo+ICsgIEVGSV9DQVBTVUxFX0JM T0NLX0RFU0NSSVBUT1IgICpCbG9ja0Rlc2NyaXB0b3JzMjsNCj4gKyAgRUZJX0NBUFNVTEVfQkxP Q0tfREVTQ1JJUFRPUiAgKkJsb2NrRGVzY3JpcHRvclByZTsNCj4gKyAgRUZJX0NBUFNVTEVfQkxP Q0tfREVTQ1JJUFRPUiAgKkJsb2NrRGVzY3JpcHRvcnNIZWFkZXI7DQo+ICsgIEVGSV9DQVBTVUxF X0JMT0NLX0RFU0NSSVBUT1IgICpUZW1wQmxvY2tQdHI7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgICpUZW1wRGF0YVB0cjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgU2l6ZUxlZnQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFNpemU7 DQo+ICsgIElOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KPiArDQo+ICsgIFRlbXBCbG9ja1B0ciAgICAgICAgICAgPSBOVUxM Ow0KPiArICBCbG9ja0Rlc2NyaXB0b3JzMSAgICAgID0gTlVMTDsNCj4gKyAgQmxvY2tEZXNjcmlw dG9yczIgICAgICA9IE5VTEw7DQo+ICsgIEJsb2NrRGVzY3JpcHRvclByZSAgICAgPSBOVUxMOw0K PiArICBCbG9ja0Rlc2NyaXB0b3JzSGVhZGVyID0gTlVMTDsNCj4gKw0KPiArICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBDYXBzdWxlTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgLy8NCj4gKyAgICAv LyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBkZXNjcmlwdG9ycy4NCj4gKyAgICAvLw0KPiArICAg IGlmIChOdW1iZXJPZkRlc2NyaXB0b3JzID09IDEpIHsNCj4gKyAgICAgIENvdW50ID0gMjsNCj4g KyAgICB9IGVsc2Ugew0KPiArICAgICAgQ291bnQgPSAoSU5UMzIpKE51bWJlck9mRGVzY3JpcHRv cnMgKyAyKSAvIDI7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU2l6ZSAgICAgICAgICAgICAgID0g Q291bnQgKiBzaXplb2YgKEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IpOw0KPiArICAgIEJs b2NrRGVzY3JpcHRvcnMxICA9IEFsbG9jYXRlUnVudGltZVplcm9Qb29sIChTaXplKTsNCj4gKyAg ICBpZiAoQmxvY2tEZXNjcmlwdG9yczEgPT0gTlVMTCkgew0KPiArICAgICAgUHJpbnQgKEwiQ2Fw c3VsZUFwcDogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnNcbiIpOw0K PiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICBnb3RvIEVS UkVYSVQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNy ZWF0aW5nIGNhcHN1bGUgZGVzY3JpcHRvcnMgYXQgMHglWFxuIiwgKFVJTlROKQ0KPiBCbG9ja0Rl c2NyaXB0b3JzMSk7DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGRhdGEg c3RhcnRzICAgICAgICAgIGF0IDB4JVggd2l0aCBzaXplIDB4JVhcbiIsDQo+IChVSU5UTikgQ2Fw c3VsZUJ1ZmZlciwgRmlsZVNpemUpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vDQo+ICsgICAg Ly8gUmVjb3JkIGRlc2NpcnB0b3IgaGVhZGVyDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoSW5kZXgg PT0gMCkgew0KPiArICAgICAgQmxvY2tEZXNjcmlwdG9yc0hlYWRlciA9IEJsb2NrRGVzY3JpcHRv cnMxOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChCbG9ja0Rlc2NyaXB0b3JQcmUgIT0gTlVM TCkgew0KPiArICAgICAgQmxvY2tEZXNjcmlwdG9yUHJlLT5Vbmlvbi5Db250aW51YXRpb25Qb2lu dGVyID0gKFVJTlROKSBCbG9ja0Rlc2NyaXB0b3JzMTsNCj4gKyAgICAgIEJsb2NrRGVzY3JpcHRv clByZS0+TGVuZ3RoID0gMDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZp bGwgdGhlbSBpbg0KPiArICAgIC8vDQo+ICsgICAgVGVtcEJsb2NrUHRyICA9IEJsb2NrRGVzY3Jp cHRvcnMxOw0KPiArICAgIFRlbXBEYXRhUHRyICAgPSBDYXBzdWxlQnVmZmVyW0luZGV4XTsNCj4g KyAgICBTaXplTGVmdCAgICAgID0gRmlsZVNpemVbSW5kZXhdOw0KPiArICAgIGZvciAoTnVtYmVy ID0gMDsgKE51bWJlciA8IENvdW50IC0gMSkgJiYgKFNpemVMZWZ0ICE9IDApOyBOdW1iZXIrKykg ew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIERpdmlkZSByZW1haW5pbmcgZGF0YSBpbiBoYWxm DQo+ICsgICAgICAvLw0KPiArICAgICAgaWYgKE51bWJlck9mRGVzY3JpcHRvcnMgIT0gMSkgew0K PiArICAgICAgICBpZiAoU2l6ZUxlZnQgPT0gMSkgew0KPiArICAgICAgICAgIFNpemUgPSAxOw0K PiArICAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgIFNpemUgPSBTaXplTGVmdCAvIDI7DQo+ ICsgICAgICAgIH0NCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIFNpemUgPSBTaXplTGVm dDsNCj4gKyAgICAgIH0NCj4gKyAgICAgIFRlbXBCbG9ja1B0ci0+VW5pb24uRGF0YUJsb2NrICAg ID0gKFVJTlROKVRlbXBEYXRhUHRyOw0KPiArICAgICAgVGVtcEJsb2NrUHRyLT5MZW5ndGggID0g U2l6ZTsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNhcHN1bGUgYmxvY2svc2l6ZSAg ICAgICAgICAgICAgMHglWC8weCVYXG4iLCAoVUlOVE4pDQo+IFRlbXBEYXRhUHRyLCBTaXplKTsN Cj4gKyAgICAgIFNpemVMZWZ0IC09IFNpemU7DQo+ICsgICAgICBUZW1wRGF0YVB0ciArPSBTaXpl Ow0KPiArICAgICAgVGVtcEJsb2NrUHRyKys7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8NCj4g KyAgICAvLyBBbGxvY2F0ZSB0aGUgc2Vjb25kIGxpc3QsIHBvaW50IHRoZSBmaXJzdCBibG9jaydz IGxhc3QgZW50cnkgdG8gcG9pbnQNCj4gKyAgICAvLyB0byB0aGlzIG9uZSwgYW5kIGZpbGwgdGhp cyBvbmUgaW4uIFdvcnN0IGNhc2UgaXMgdGhhdCB0aGUgcHJldmlvdXMNCj4gKyAgICAvLyBsaXN0 IG9ubHkgaGFkIG9uZSBlbGVtZW50IHRoYXQgcG9pbnRlZCBoZXJlLCBzbyB3ZSBuZWVkIGF0IGxl YXN0IHR3bw0KPiArICAgIC8vIGVsZW1lbnRzIC0tIG9uZSB0byBwb2ludCB0byBhbGwgdGhlIGRh dGEsIGFub3RoZXIgdG8gdGVybWluYXRlIHRoZSBsaXN0Lg0KPiArICAgIC8vDQo+ICsgICAgaWYg KChOdW1iZXJPZkRlc2NyaXB0b3JzICE9IDEpICYmIChTaXplTGVmdCAhPSAwKSkgew0KPiArICAg ICAgQ291bnQgPSAoSU5UMzIpKE51bWJlck9mRGVzY3JpcHRvcnMgKyAyKSAtIENvdW50Ow0KPiAr ICAgICAgaWYgKENvdW50ID09IDEpIHsNCj4gKyAgICAgICAgQ291bnQrKzsNCj4gKyAgICAgIH0N Cj4gKw0KPiArICAgICAgU2l6ZSAgICAgICAgICAgICAgPSBDb3VudCAqIHNpemVvZiAoRUZJX0NB UFNVTEVfQkxPQ0tfREVTQ1JJUFRPUik7DQo+ICsgICAgICBCbG9ja0Rlc2NyaXB0b3JzMiA9IEFs bG9jYXRlUnVudGltZVplcm9Qb29sIChTaXplKTsNCj4gKyAgICAgIGlmIChCbG9ja0Rlc2NyaXB0 b3JzMiA9PSBOVUxMKSB7DQo+ICsgICAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGZhaWxlZCB0 byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzXG4iKTsNCj4gKyAgICAgICAgU3RhdHVz ID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICAgIGdvdG8gRVJSRVhJVDsNCj4gKyAg ICAgIH0NCj4gKw0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFBvaW50IHRoZSBmaXJzdCBsaXN0 J3MgbGFzdCBlbGVtZW50IHRvIHBvaW50IHRvIHRoaXMgc2Vjb25kIGxpc3QuDQo+ICsgICAgICAv Lw0KPiArICAgICAgVGVtcEJsb2NrUHRyLT5Vbmlvbi5Db250aW51YXRpb25Qb2ludGVyICAgPSAo VUlOVE4pIEJsb2NrRGVzY3JpcHRvcnMyOw0KPiArDQo+ICsgICAgICBUZW1wQmxvY2tQdHItPkxl bmd0aCAgPSAwOw0KPiArICAgICAgVGVtcEJsb2NrUHRyID0gQmxvY2tEZXNjcmlwdG9yczI7DQo+ ICsgICAgICBmb3IgKE51bWJlciA9IDA7IE51bWJlciA8IENvdW50IC0gMTsgTnVtYmVyKyspIHsN Cj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgLy8gSWYgc2Vjb25kLXRvLWxhc3Qgb25lLCB0aGVu IGR1bXAgcmVzdCB0byB0aGlzIGVsZW1lbnQNCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgaWYg KE51bWJlciA9PSAoQ291bnQgLSAyKSkgew0KPiArICAgICAgICAgIFNpemUgPSBTaXplTGVmdDsN Cj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIC8vIERp dmlkZSByZW1haW5pbmcgZGF0YSBpbiBoYWxmDQo+ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAg ICBpZiAoU2l6ZUxlZnQgPT0gMSkgew0KPiArICAgICAgICAgICAgU2l6ZSA9IDE7DQo+ICsgICAg ICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgIFNpemUgPSBTaXplTGVmdCAvIDI7DQo+ICsg ICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgVGVtcEJsb2NrUHRyLT5V bmlvbi5EYXRhQmxvY2sgICAgPSAoVUlOVE4pVGVtcERhdGFQdHI7DQo+ICsgICAgICAgIFRlbXBC bG9ja1B0ci0+TGVuZ3RoICA9IFNpemU7DQo+ICsgICAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6 IGNhcHN1bGUgYmxvY2svc2l6ZSAgICAgICAgICAgICAgMHglWC8weCVYXG4iLCAoVUlOVE4pDQo+ IFRlbXBEYXRhUHRyLCBTaXplKTsNCj4gKyAgICAgICAgU2l6ZUxlZnQgLT0gU2l6ZTsNCj4gKyAg ICAgICAgVGVtcERhdGFQdHIgKz0gU2l6ZTsNCj4gKyAgICAgICAgVGVtcEJsb2NrUHRyKys7DQo+ ICsgICAgICAgIGlmIChTaXplTGVmdCA9PSAwKSB7DQo+ICsgICAgICAgICAgYnJlYWs7DQo+ICsg ICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBCbG9ja0Rlc2NyaXB0 b3JQcmUgPSBUZW1wQmxvY2tQdHI7DQo+ICsgICAgQmxvY2tEZXNjcmlwdG9yczEgID0gTlVMTDsN Cj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE51bGwtdGVybWluYXRlLg0KPiArICAvLw0K PiArICBpZiAoVGVtcEJsb2NrUHRyICE9IE5VTEwpIHsNCj4gKyAgICBUZW1wQmxvY2tQdHItPlVu aW9uLkNvbnRpbnVhdGlvblBvaW50ZXIgICAgPSAoVUlOVE4pTlVMTDsNCj4gKyAgICBUZW1wQmxv Y2tQdHItPkxlbmd0aCAgPSAwOw0KPiArICAgICpCbG9ja0Rlc2NyaXB0b3JzID0gQmxvY2tEZXNj cmlwdG9yc0hlYWRlcjsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g Kw0KPiArRVJSRVhJVDoNCj4gKyAgaWYgKEJsb2NrRGVzY3JpcHRvcnMxICE9IE5VTEwpIHsNCj4g KyAgICBGcmVlUG9vbChCbG9ja0Rlc2NyaXB0b3JzMSk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo QmxvY2tEZXNjcmlwdG9yczIgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sKEJsb2NrRGVzY3Jp cHRvcnMyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBDbGVhciB0aGUgR2F0aGVyIGxpc3QgZm9yIGEgbGlzdCBvZiBjYXBzdWxlIGlt YWdlcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBCbG9ja0Rlc2NyaXB0b3JzIFRoZSBibG9jayBk ZXNjcmlwdG9ycyBmb3IgdGhlIGNhcHN1bGUgaW1hZ2VzDQo+ICsgIEBwYXJhbVtpbl0gIENhcHN1 bGVOdW0gICAgICAgVGhlIGNvdW50IG9mIGNhcHN1bGUgaW1hZ2VzDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK0NsZWFuR2F0aGVyTGlzdCgNCj4gKyAgSU4gRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRP UiAgICpCbG9ja0Rlc2NyaXB0b3JzLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgQ2Fwc3VsZU51bQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RF U0NSSVBUT1IgICAqVGVtcEJsb2NrUHRyOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQ VE9SICAgKlRlbXBCbG9ja1B0cjE7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1Ig ICAqVGVtcEJsb2NrUHRyMjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4Ow0KPiArDQo+ICsgIGlmIChCbG9ja0Rlc2NyaXB0b3JzICE9IE5VTEwpIHsNCj4gKyAgICBU ZW1wQmxvY2tQdHIxID0gQmxvY2tEZXNjcmlwdG9yczsNCj4gKyAgICB3aGlsZSAoMSl7DQo+ICsg ICAgICBUZW1wQmxvY2tQdHIgPSBUZW1wQmxvY2tQdHIxOw0KPiArICAgICAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgICAgICBpZiAoVGVtcEJs b2NrUHRyW0luZGV4XS5MZW5ndGggPT0gMCkgew0KPiArICAgICAgICAgIGJyZWFrOw0KPiArICAg ICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChUZW1wQmxvY2tQdHJbSW5kZXhd LlVuaW9uLkNvbnRpbnVhdGlvblBvaW50ZXIgPT0gKFVJTlROKU5VTEwpIHsNCj4gKyAgICAgICAg YnJlYWs7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFRlbXBCbG9ja1B0cjIgPSAoVk9JRCAq KSAoKFVJTlROKSBUZW1wQmxvY2tQdHItPlVuaW9uLkNvbnRpbnVhdGlvblBvaW50ZXIpOw0KPiAr ICAgICAgRnJlZVBvb2woVGVtcEJsb2NrUHRyMSk7DQo+ICsgICAgICBUZW1wQmxvY2tQdHIxID0g VGVtcEJsb2NrUHRyMjsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFByaW50IEFQUCB1c2FnZS4NCj4gKyoqLw0KPiArVk9JRA0KPiArUHJpbnRVc2FnZSAoDQo+ICsg IFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBQcmludChMIkNhcHN1bGVBcHA6ICB1c2FnZVxuIik7 DQo+ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIFstRl0gPENhcHN1bGUuLi4+IFstTlJdXG4iKTsN Cj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAgLVNcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3Vs ZUFwcCAtQ1xuIik7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIC1QXG4iKTsNCj4gKyAgUHJp bnQoTCIgIENhcHN1bGVBcHAgLUVcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtRyA8 Qk1QPiAtTyA8Q2Fwc3VsZT5cbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtTiA8Q2Fw c3VsZT4gLU8gPE5lc3RlZENhcHN1bGU+XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAg LUR8LURTIDxDYXBzdWxlPlxuIik7DQo+ICsgIFByaW50KEwiUGFyYW1ldGVyOlxuIik7DQo+ICsg IFByaW50KEwiICAtRjogIFB1dCBjYXBzdWxlIGZpbGUgdG8gZGlzay5cbiIpOw0KPiArICBQcmlu dChMIiAgICAgICBObyAtRiBtZWFucyB0byBwdXQgY2Fwc3VsZSBmaWxlIGluIG1lbW9yeS5cbiIp Ow0KPiArICBQcmludChMIiAgLU5SOiBObyBSZXNldC5cbiIpOw0KPiArICBQcmludChMIiAgLVM6 ICBEdW1wIGNhcHN1bGUgc3RhdHVzLlxuIik7DQo+ICsgIFByaW50KEwiICAtQzogIENsZWFyIGNh cHN1bGUgc3RhdHVzLlxuIik7DQo+ICsgIFByaW50KEwiICAtUDogIER1bXAgRk1QIHByb3RvY29s IGluZm8uXG4iKTsNCj4gKyAgUHJpbnQoTCIgIC1FOiAgRHVtcCBFU1JUIHRhYmxlIGluZm8uXG4i KTsNCj4gKyAgUHJpbnQoTCIgIC1HOiAgSW5wdXQgQk1QIGZpbGUgbmFtZVxuIik7DQo+ICsgIFBy aW50KEwiICAtTjogIEFwcGVuZCBDYXBzdWxlIEhlYWRlciBhY2Nyb2RpbmcgdG8gV2luZG93cyBG aXJtd2FyZSBVcGRhdGVcbiIpOw0KPiArICBQcmludChMIiAgLU86ICBPdXRwdXQgQ2Fwc3VsZSBm aWxlIG5hbWVcbiIpOw0KPiArICBQcmludChMIiAgLUQ6ICBEdW1wIENhcHN1bGVcbiIpOw0KPiAr ICBQcmludChMIiAgLURTOiBEdW1wIENhcHN1bGUgd2l0aCBTeXN0ZW0gRk1QIGZvcm1hdFxuIik7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVcGRhdGUgQ2Fwc3VsZSBpbWFnZS4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgVGhlIGltYWdlIGhhbmRsZS4NCj4gKyAgQHBh cmFtW2luXSAgU3lzdGVtVGFibGUgICAgIFRoZSBzeXN0ZW0gdGFibGUuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIENvbW1hbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIENvbW1hbmQgdXNhZ2UgZXJy b3IuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgaW5wdXQgZmlsZSBj YW4ndCBiZSBmb3VuZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVZWZp TWFpbiAoDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiBF RklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgIEZpbGVTaXplW01BWF9DQVBTVUxFX05VTV07DQo+ICsgIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICpDYXBzdWxlQnVmZmVyW01BWF9DQVBTVUxFX05VTV07DQo+ICsgIEVG SV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICpCbG9ja0Rlc2NyaXB0b3JzOw0KPiArICBFRklf Q0FQU1VMRV9IRUFERVIgICAgICAgICAgICAgKkNhcHN1bGVIZWFkZXJBcnJheVtNQVhfQ0FQU1VM RV9OVU0gKyAxXTsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1heENhcHN1 bGVTaXplOw0KPiArICBFRklfUkVTRVRfVFlQRSAgICAgICAgICAgICAgICAgUmVzZXRUeXBlOw0K PiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgTmVlZFJlc2V0Ow0KPiArICBCT09M RUFOICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXNldDsNCj4gKyAgQk9PTEVBTiAgICAgICAg ICAgICAgICAgICAgICAgIE5lZWRDb3B5T25EaXNrOw0KPiArICBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgICAgKkNhcHN1bGVOYW1lOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgQ2Fwc3VsZU51bTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4Ow0KPiArDQo+ICsgIFN0YXR1cyA9IEdldEFyZygpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0 YXR1cykpIHsNCj4gKyAgICBQcmludFVzYWdlKCk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArICBpZiAoQXJnYyA8IDIpIHsNCj4gKyAgICBQcmludFVzYWdlKCk7DQo+ICsgICAg Q2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9 DQo+ICsgIGlmICgoU3RyQ21wKEFyZ3ZbMV0sIEwiLUQiKSA9PSAwKSB8fA0KPiArICAgICAgKFN0 ckNtcChBcmd2WzFdLCBMIi1EUyIpID09IDApKSB7DQo+ICsgICAgU3RhdHVzID0gRHVtcENhcHN1 bGUoKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1HIikgPT0gMCkgew0KPiArICAgIFN0YXR1cyA9 IENyZWF0ZUJtcEZtcCgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLU4iKSA9PSAwKSB7DQo+ICsg ICAgU3RhdHVzID0gQ3JlYXRlTmVzdGVkRm1wKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItUyIp ID09IDApIHsNCj4gKyAgICBTdGF0dXMgPSBEbXBDYXBzdWxlU3RhdHVzVmFyaWFibGUoKTsNCj4g KyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiAr ICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLUMiKSA9PSAwKSB7DQo+ICsgICAgU3RhdHVzID0gQ2xl YXJDYXBzdWxlU3RhdHVzVmFyaWFibGUoKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1QIikgPT0g MCkgew0KPiArICAgIER1bXBGbXBEYXRhKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1F IikgPT0gMCkgew0KPiArICAgIER1bXBFc3J0RGF0YSgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsx XSwgTCItRiIpID09IDApIHsNCj4gKyAgICBOZWVkQ29weU9uRGlzayA9IFRSVUU7DQo+ICsgICAg Q2Fwc3VsZUZpcnN0SW5kZXggPSAyOw0KPiArICB9IGVsc2Ugew0KPiArICAgIE5lZWRDb3B5T25E aXNrID0gRkFMU0U7DQo+ICsgICAgQ2Fwc3VsZUZpcnN0SW5kZXggPSAxOw0KPiArICB9DQo+ICsg IGlmIChTdHJDbXAoQXJndltBcmdjIC0gMV0sIEwiLU5SIikgPT0gMCkgew0KPiArICAgIE5vUmVz ZXQgPSBUUlVFOw0KPiArICAgIENhcHN1bGVMYXN0SW5kZXggPSBBcmdjIC0gMjsNCj4gKyAgfSBl bHNlIHsNCj4gKyAgICBOb1Jlc2V0ID0gRkFMU0U7DQo+ICsgICAgQ2Fwc3VsZUxhc3RJbmRleCA9 IEFyZ2MgLSAxOw0KPiArICB9DQo+ICsgIENhcHN1bGVOdW0gPSBDYXBzdWxlTGFzdEluZGV4IC0g Q2Fwc3VsZUZpcnN0SW5kZXggKyAxOw0KPiArDQo+ICsgIGlmIChDYXBzdWxlRmlyc3RJbmRleCA+ IENhcHN1bGVMYXN0SW5kZXgpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IE5PIGNhcHN1 bGUgaW1hZ2UuXG4iKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBFRklfVU5T VVBQT1JURUQ7DQo+ICsgIH0NCj4gKyAgaWYgKENhcHN1bGVOdW0gPiBNQVhfQ0FQU1VMRV9OVU0p IHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IFRvbyBtYW55IGNhcHN1bGUgaW1hZ2VzLlxu Iik7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0K PiArICB9DQo+ICsNCj4gKyAgWmVyb01lbSgmQ2Fwc3VsZUJ1ZmZlciwgc2l6ZW9mKENhcHN1bGVC dWZmZXIpKTsNCj4gKyAgWmVyb01lbSgmRmlsZVNpemUsIHNpemVvZihGaWxlU2l6ZSkpOw0KPiAr ICBCbG9ja0Rlc2NyaXB0b3JzID0gTlVMTDsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBDYXBzdWxlTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgQ2Fwc3VsZU5hbWUgPSBBcmd2W0Nh cHN1bGVGaXJzdEluZGV4ICsgSW5kZXhdOw0KPiArICAgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZm ZXIoQ2Fwc3VsZU5hbWUsICZGaWxlU2l6ZVtJbmRleF0sICZDYXBzdWxlQnVmZmVyW0luZGV4XSk7 DQo+ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkNhcHN1 bGVBcHA6IGNhcHN1bGUgaW1hZ2UgKCVzKSBpcyBub3QgZm91bmQuXG4iLCBDYXBzdWxlTmFtZSk7 DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5l ZWRDb3B5T25EaXNrKSB7DQo+ICsgICAgU3RhdHVzID0gQ29weUNhcHN1bGVUb0FjdGl2ZUVmaVBh cnRpdGlvbihDYXBzdWxlQnVmZmVyLCBGaWxlU2l6ZSwgQ2Fwc3VsZU51bSk7DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBFdmVyeSBjYXBzdWxlIHVzZSAyIGRlc2NyaXB0b3Ig MSBmb3IgZGF0YSAxIGZvciBlbmQNCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IEJ1aWxkR2F0 aGVyTGlzdChDYXBzdWxlQnVmZmVyLCBGaWxlU2l6ZSwgQ2Fwc3VsZU51bSwgJkJsb2NrRGVzY3Jp cHRvcnMpOw0KPiArICB9DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIGdv dG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGwgdGhlIHJ1bnRpbWUg c2VydmljZSBjYXBzdWxlLg0KPiArICAvLw0KPiArICBOZWVkUmVzZXQgPSBGQUxTRTsNCj4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgIENh cHN1bGVIZWFkZXJBcnJheVtJbmRleF0gPSAoRUZJX0NBUFNVTEVfSEVBREVSICopIENhcHN1bGVC dWZmZXJbSW5kZXhdOw0KPiArICAgIGlmICgoQ2Fwc3VsZUhlYWRlckFycmF5W0luZGV4XS0+Rmxh Z3MgJiBDQVBTVUxFX0ZMQUdTX1BFUlNJU1RfQUNST1NTX1JFU0VUKSAhPSAwKQ0KPiB7DQo+ICsg ICAgICBOZWVkUmVzZXQgPSBUUlVFOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBDYXBzdWxlSGVh ZGVyQXJyYXlbQ2Fwc3VsZU51bV0gPSBOVUxMOw0KPiArICBpZiAoTm9SZXNldCkgew0KPiArICAg IE5lZWRSZXNldCA9IEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5xdWly ZSBwbGF0Zm9ybSBjYXBhYmlsaXR5IG9mIFVwZGF0ZUNhcHN1bGUuDQo+ICsgIC8vDQo+ICsgIFN0 YXR1cyA9IGdSVC0+UXVlcnlDYXBzdWxlQ2FwYWJpbGl0aWVzIChDYXBzdWxlSGVhZGVyQXJyYXks IENhcHN1bGVOdW0sDQo+ICZNYXhDYXBzdWxlU2l6ZSwgJlJlc2V0VHlwZSk7DQo+ICsgIGlmIChF RklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGZhaWxlZCB0 byBxdWVyeSBjYXBzdWxlIGNhcGFiaWxpdHkgLSAlclxuIiwgU3RhdHVzKTsNCj4gKyAgICBnb3Rv IERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxl TnVtOyBJbmRleCsrKSB7DQo+ICsgICAgaWYgKEZpbGVTaXplW0luZGV4XSA+IE1heENhcHN1bGVT aXplKSB7DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGlzIHRvbyBsYXJn ZSB0byB1cGRhdGUsICVsZCBpcyBhbGxvd2VkXG4iLA0KPiBNYXhDYXBzdWxlU2l6ZSk7DQo+ICsg ICAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgd2hldGhlciB0aGUgaW5w dXQgY2Fwc3VsZSBpbWFnZSBoYXMgdGhlIGZsYWcgb2YgcGVyc2lzdCBhY3Jvc3Mgc3lzdGVtDQo+ IHJlc2V0Lg0KPiArICAvLw0KPiArICBpZiAoTmVlZFJlc2V0KSB7DQo+ICsgICAgU3RhdHVzID0g Z1JULT5VcGRhdGVDYXBzdWxlKENhcHN1bGVIZWFkZXJBcnJheSxDYXBzdWxlTnVtLChVSU5UTikN Cj4gQmxvY2tEZXNjcmlwdG9ycyk7DQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykg ew0KPiArICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogZmFpbGVkIHRvIHVwZGF0ZSBjYXBzdWxl IC0gJXJcbiIsIFN0YXR1cyk7DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAgfQ0KPiArICAg IC8vDQo+ICsgICAgLy8gRm9yIGNhcHN1bGUgd2hvIGhhcyByZXNldCBmbGFnLCBhZnRlciBjYWxs aW5nIFVwZGF0ZUNhcHN1bGUgc2VydmljZSx0cmlnZXIgYQ0KPiArICAgIC8vIHN5c3RlbSByZXNl dCB0byBwcm9jZXNzIGNhcHN1bGUgcGVyc2lzdCBhY3Jvc3MgYSBzeXN0ZW0gcmVzZXQuDQo+ICsg ICAgLy8NCj4gKyAgICBnUlQtPlJlc2V0U3lzdGVtIChSZXNldFR5cGUsIEVGSV9TVUNDRVNTLCAw LCBOVUxMKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZvciBjYXBzdWxl IHdobyBoYXMgbm8gcmVzZXQgZmxhZywgb25seSBjYWxsIFVwZGF0ZUNhcHN1bGUgU2VydmljZSB3 aXRob3V0IGENCj4gKyAgICAvLyBzeXN0ZW0gcmVzZXQuIFRoZSBzZXJ2aWNlIHdpbGwgcHJvY2Vz cyB0aGUgY2Fwc3VsZSBpbW1lZGlhdGVseS4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdS VC0+VXBkYXRlQ2Fwc3VsZSAoQ2Fwc3VsZUhlYWRlckFycmF5LENhcHN1bGVOdW0sKFVJTlROKQ0K PiBCbG9ja0Rlc2NyaXB0b3JzKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7 DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBmYWlsZWQgdG8gdXBkYXRlIGNhcHN1bGUg LSAlclxuIiwgU3RhdHVzKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBF RklfU1VDQ0VTUzsNCj4gKw0KPiArRG9uZToNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg Q2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgIGlmIChDYXBzdWxlQnVmZmVyW0luZGV4XSAh PSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQ2Fwc3VsZUJ1ZmZlcltJbmRleF0pOw0KPiAr ICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIENsZWFuR2F0aGVyTGlzdChCbG9ja0Rlc2NyaXB0b3Jz LCBDYXBzdWxlTnVtKTsNCj4gKyAgQ2xlYW5BcmcoKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVB cHAvQ2Fwc3VsZUFwcC5pbmYNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFw cC9DYXBzdWxlQXBwLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw Li43ZWU0NGZjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0 aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5pbmYNCj4gQEAgLTAsMCArMSw3MSBAQA0KPiArIyMg IEBmaWxlDQo+ICsjICBBIHNoZWxsIGFwcGxpY2F0aW9uIHRoYXQgdHJpZ2dlcnMgY2Fwc3VsZSB1 cGRhdGUgcHJvY2Vzcy4NCj4gKyMNCj4gKyMgVGhpcyBhcHBsaWNhdGlvbiBjYW4gdHJpZ2dlciBj YXBzdWxlIHVwZGF0ZSBwcm9jZXNzLiBJdCBjYW4gYWxzbw0KPiArIyBnZW5lcmF0ZSBjYXBzdWxl IGltYWdlLCBvciBkdW1wIGNhcHN1bGUgdmFyaWFibGUgaW5mb3JtYXRpb24uDQo+ICsjDQo+ICsj ICBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gKyMgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlh bHMNCj4gKyMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArIyAgd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZSBmb3VuZCBhdA0KPiArIyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPiArIw0KPiArIyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhF IEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsjICBXSVRIT1VUIFdBUlJBTlRJ RVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBM SUVELg0KPiArIw0KPiArIyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9OICAg ICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDYNCj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAg ICAgICAgICAgID0gQ2Fwc3VsZUFwcA0KPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAg ICAgPSBDYXBzdWxlQXBwLnVuaQ0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAg PSA0Q0VGMzFEQS04NjgyLTQyNzQtOUNDNC1BRUU3NTE2QTVFN0INCj4gKyAgTU9EVUxFX1RZUEUg ICAgICAgICAgICAgICAgICAgID0gVUVGSV9BUFBMSUNBVElPTg0KPiArICBWRVJTSU9OX1NUUklO RyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAg ICAgID0gVWVmaU1haW4NCj4gKw0KPiArIw0KPiArIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9u IGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29s cy4NCj4gKyMNCj4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQN Cj4gKyMNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIENhcHN1bGVBcHAuYw0KPiArICBDYXBzdWxl RHVtcC5jDQo+ICsgIEFwcFN1cHBvcnQuYw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBr Zy9NZGVQa2cuZGVjDQo+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ICsNCj4g K1tHdWlkc10NCj4gKyAgZ0VmaUZpbGVJbmZvR3VpZA0KPiArICBnRWZpUGFydFR5cGVTeXN0ZW1Q YXJ0R3VpZA0KPiArICBnRWZpR2xvYmFsVmFyaWFibGVHdWlkDQo+ICsgIGdFZmlDYXBzdWxlUmVw b3J0R3VpZA0KPiArICBnRWZpRm1wQ2Fwc3VsZUd1aWQNCj4gKyAgZ1dpbmRvd3NVeENhcHN1bGVH dWlkDQo+ICsgIGdFZmlDZXJ0VHlwZVJzYTIwNDhTaGEyNTZHdWlkDQo+ICsgIGdFZmlDZXJ0UGtj czdHdWlkDQo+ICsgIGdFZmlTeXN0ZW1SZXNvdXJjZVRhYmxlR3VpZA0KPiArDQo+ICtbUHJvdG9j b2xzXQ0KPiArICBnRWZpTG9hZGVkSW1hZ2VQcm90b2NvbEd1aWQNCj4gKyAgZ0VmaVNpbXBsZUZp bGVTeXN0ZW1Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlk DQo+ICsgIGdFZmlGaXJtd2FyZU1hbmFnZW1lbnRQcm90b2NvbEd1aWQNCj4gKw0KPiArW0xpYnJh cnlDbGFzc2VzXQ0KPiArICBCYXNlTGliDQo+ICsgIFVlZmlBcHBsaWNhdGlvbkVudHJ5UG9pbnQN Cj4gKyAgRGVidWdMaWINCj4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiArICBVZWZpQm9vdFNl cnZpY2VzVGFibGVMaWINCj4gKyAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVl ZmlMaWINCj4gKyAgUHJpbnRMaWINCj4gKyAgRWRraWlTeXN0ZW1DYXBzdWxlTGliDQo+ICsNCj4g K1tVc2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiArICBDYXBzdWxlQXBw RXh0cmEudW5pDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3Vs ZUFwcC9DYXBzdWxlQXBwLnVuaQ0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxl QXBwL0NhcHN1bGVBcHAudW5pDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAuLjU0ZDZlMTINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGlj YXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLnVuaQ0KPiBAQCAtMCwwICsxLDIyIEBADQo+ICsv LyAvKiogQGZpbGUNCj4gKy8vIEEgc2hlbGwgYXBwbGljYXRpb24gdGhhdCB0cmlnZ2VycyBjYXBz dWxlIHVwZGF0ZSBwcm9jZXNzLg0KPiArLy8NCj4gKy8vIFRoaXMgYXBwbGljYXRpb24gY2FuIHRy aWdnZXIgY2Fwc3VsZSB1cGRhdGUgcHJvY2Vzcy4gSXQgY2FuIGFsc28NCj4gKy8vIGdlbmVyYXRl IGNhcHN1bGUgaW1hZ2UsIG9yIGR1bXAgY2Fwc3VsZSB2YXJpYWJsZSBpbmZvcm1hdGlvbi4NCj4g Ky8vDQo+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4gKy8vDQo+ICsvLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsvLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxl IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4gKy8v IHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xp Y2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQg VU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsvLyBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT UyBPUiBJTVBMSUVELg0KPiArLy8NCj4gKy8vICoqLw0KPiArDQo+ICsNCj4gKyNzdHJpbmcgU1RS X01PRFVMRV9BQlNUUkFDVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkEgc2hlbGwgYXBw bGljYXRpb24gdGhhdA0KPiB0cmlnZ2VycyBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLiINCj4gKw0K PiArI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiVGhpcyBhcHBsaWNhdGlvbiBjYW4gdHJpZ2dlcg0KPiBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNz LiBJdCBjYW4gYWxzbyBnZW5lcmF0ZSBjYXBzdWxlIGltYWdlLCBvciBkdW1wIGNhcHN1bGUgdmFy aWFibGUNCj4gaW5mb3JtYXRpb24uIg0KPiArDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cv QXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwRXh0cmEudW5pDQo+IGIvTWRlTW9kdWxl UGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaQ0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5iNWE4ODQwDQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4 dHJhLnVuaQ0KPiBAQCAtMCwwICsxLDE5IEBADQo+ICsvLyAvKiogQGZpbGUNCj4gKy8vIENhcHN1 bGVBcHAgTG9jYWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCj4gKy8vDQo+ICsvLyBDb3B5cmln aHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4gKy8vDQo+ICsvLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxz DQo+ICsvLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4gKy8vIHdoaWNoIGFjY29tcGFuaWVz IHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBm b3VuZCBhdA0KPiArLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNl LnBocA0KPiArLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNF TlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQ UkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiAr Ly8NCj4gKy8vICoqLw0KPiArDQo+ICsjc3RyaW5nIFNUUl9QUk9QRVJUSUVTX01PRFVMRV9OQU1F DQo+ICsjbGFuZ3VhZ2UgZW4tVVMNCj4gKyJDYXBzdWxlIEFwcGxpY2F0aW9uIg0KPiArDQo+ICsN Cj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1 bGVEdW1wLmMNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxl RHVtcC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmM1NmY0MWYN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3Vs ZUFwcC9DYXBzdWxlRHVtcC5jDQo+IEBAIC0wLDAgKzEsODQwIEBADQo+ICsvKiogQGZpbGUNCj4g KyAgRHVtcCBDYXBzdWxlIGltYWdlIGluZm9ybWF0aW9uLg0KPiArDQo+ICsgIENvcHlyaWdodCAo YykgMjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAr ICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBs aWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsg IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiAr ICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ ICsNCj4gKyNpbmNsdWRlIDxQaUR4ZS5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5o Pg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25M aWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0K PiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsj aW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExp Yi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRWRraWlTeXN0ZW1DYXBzdWxlTGliLmg+DQo+ICsj aW5jbHVkZSA8UHJvdG9jb2wvRmlybXdhcmVNYW5hZ2VtZW50Lmg+DQo+ICsjaW5jbHVkZSA8R3Vp ZC9JbWFnZUF1dGhlbnRpY2F0aW9uLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9FZGtpaVN5c3RlbUZt cENhcHN1bGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0NhcHN1bGVSZXBvcnQuaD4NCj4gKyNpbmNs dWRlIDxHdWlkL1N5c3RlbVJlc291cmNlVGFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ZtcENh cHN1bGUuaD4NCj4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1dpbmRvd3NVeENhcHN1bGUu aD4NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgYSBmaWxlLg0KPiArDQo+ICsgIEBwYXJhbSBGaWxl TmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUgcmVhZC4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUg ICAgICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0KPiArICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRo ZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgUmVhZCBmaWxl IHN1Y2Nlc3NmdWxseQ0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIEZpbGUgbm90IGZvdW5k DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JlYWRGaWxlVG9CdWZmZXIoDQo+ICsgIElOICBD SEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBPVVQg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiArICBP VVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ICsgICk7 DQo+ICsNCj4gK2V4dGVybiBVSU5UTiAgQXJnYzsNCj4gK2V4dGVybiBDSEFSMTYgKkFyZ3ZbXTsN Cj4gKw0KPiArLyoqDQo+ICsgIER1bXAgVVggY2Fwc3VsZSBpbmZvcm1hdGlvbi4NCj4gKw0KPiAr ICBAcGFyYW0gQ2Fwc3VsZUhlYWRlciAgICAgIFRoZSBVWCBjYXBzdWxlIGhlYWRlcg0KPiArKiov DQo+ICtWT0lEDQo+ICtEdW1wVXhDYXBzdWxlKA0KPiArICBJTiBFRklfQ0FQU1VMRV9IRUFERVIg ICpDYXBzdWxlSGVhZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0RJU1BMQVlfQ0FQU1VMRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICpEaXNwbGF5Q2Fwc3VsZTsNCj4gKyAgRGlzcGxheUNh cHN1bGUgPSAoRUZJX0RJU1BMQVlfQ0FQU1VMRSAqKUNhcHN1bGVIZWFkZXI7DQo+ICsgIFByaW50 KEwiW1V4Q2FwdXN1bGVdXG4iKTsNCj4gKyAgUHJpbnQoTCJDYXBzdWxlSGVhZGVyOlxuIik7DQo+ ICsgIFByaW50KEwiICBDYXBzdWxlR3VpZCAgICAgIC0gJWdcbiIsICZEaXNwbGF5Q2Fwc3VsZS0+ Q2Fwc3VsZUhlYWRlci5DYXBzdWxlR3VpZCk7DQo+ICsgIFByaW50KEwiICBIZWFkZXJTaXplICAg ICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuSGVhZGVyU2l6ZSk7 DQo+ICsgIFByaW50KEwiICBGbGFncyAgICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1 bGUtPkNhcHN1bGVIZWFkZXIuRmxhZ3MpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUltYWdlU2l6 ZSAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLQ0KPiA+Q2Fwc3VsZUhlYWRlci5DYXBzdWxlSW1h Z2VTaXplKTsNCj4gKyAgUHJpbnQoTCJJbWFnZVBheWxvYWQ6XG4iKTsNCj4gKyAgUHJpbnQoTCIg IFZlcnNpb24gICAgICAgICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2Fk LlZlcnNpb24pOw0KPiArICBQcmludChMIiAgQ2hlY2tzdW0gICAgICAgICAtIDB4JXhcbiIsIERp c3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuQ2hlY2tzdW0pOw0KPiArICBQcmludChMIiAgSW1h Z2VUeXBlICAgICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuSW1h Z2VUeXBlKTsNCj4gKyAgUHJpbnQoTCIgIE1vZGUgICAgICAgICAgICAgLSAweCV4XG4iLCBEaXNw bGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk1vZGUpOw0KPiArICBQcmludChMIiAgT2Zmc2V0WCAg ICAgICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuT2Zmc2V0WCk7 DQo+ICsgIFByaW50KEwiICBPZmZzZXRZICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1 bGUtPkltYWdlUGF5bG9hZC5PZmZzZXRZKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAg Rk1QIGltYWdlIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbSBJ bWFnZSAgICAgIFRoZSBGTVAgY2Fwc3VsZSBpbWFnZQ0KPiArICBAcGFyYW0gSW1hZ2VTaXplICBU aGUgc2l6ZSBvZiB0aGUgRk1QIGNhcHN1bGUgaW1hZ2UgaW4gYnl0ZXMuDQo+ICsNCj4gKyAgQHJl dHVybiB0aGUgc2l6ZSBvZiBGTVAgYXV0aGVudGljYXRpb24uDQo+ICsqKi8NCj4gK1VJTlRODQo+ ICtEdW1wSW1hZ2VBdXRoZW50aWNhdGlvbigNCj4gKyAgSU4gVk9JRCAgICpJbWFnZSwNCj4gKyAg SU4gVUlOVE4gIEltYWdlU2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFH RV9BVVRIRU5USUNBVElPTiAgICAgICAgICAgICAqSW1hZ2VBdXRoZW50aWNhdGlvbjsNCj4gKw0K PiArICBJbWFnZUF1dGhlbnRpY2F0aW9uID0gSW1hZ2U7DQo+ICsgIGlmIChDb21wYXJlR3VpZCgm SW1hZ2VBdXRoZW50aWNhdGlvbi0+QXV0aEluZm8uQ2VydFR5cGUsICZnRWZpQ2VydFBrY3M3R3Vp ZCkgfHwNCj4gKyAgICAgIENvbXBhcmVHdWlkKCZJbWFnZUF1dGhlbnRpY2F0aW9uLT5BdXRoSW5m by5DZXJ0VHlwZSwNCj4gJmdFZmlDZXJ0VHlwZVJzYTIwNDhTaGEyNTZHdWlkKSkgew0KPiArICAg IFByaW50KEwiW0ltYWdlQXV0aGVudGljYXRpb25dXG4iKTsNCj4gKyAgICBQcmludChMIiAgTW9u b3RvbmljQ291bnQgICAtIDB4JWx4XG4iLCBJbWFnZUF1dGhlbnRpY2F0aW9uLT5Nb25vdG9uaWND b3VudCk7DQo+ICsgICAgUHJpbnQoTCJXSU5fQ0VSVElGSUNBVEU6XG4iKTsNCj4gKyAgICBQcmlu dChMIiAgZHdMZW5ndGggICAgICAgICAtIDB4JXhcbiIsIEltYWdlQXV0aGVudGljYXRpb24tPkF1 dGhJbmZvLkhkci5kd0xlbmd0aCk7DQo+ICsgICAgUHJpbnQoTCIgIHdSZXZpc2lvbiAgICAgICAg LSAweCV4XG4iLCBJbWFnZUF1dGhlbnRpY2F0aW9uLQ0KPiA+QXV0aEluZm8uSGRyLndSZXZpc2lv bik7DQo+ICsgICAgUHJpbnQoTCIgIHdDZXJ0aWZpY2F0ZVR5cGUgLSAweCV4XG4iLCBJbWFnZUF1 dGhlbnRpY2F0aW9uLQ0KPiA+QXV0aEluZm8uSGRyLndDZXJ0aWZpY2F0ZVR5cGUpOw0KPiArICAg IFByaW50KEwiICBDZXJ0VHlwZSAgICAgICAgIC0gJWdcbiIsICZJbWFnZUF1dGhlbnRpY2F0aW9u LT5BdXRoSW5mby5DZXJ0VHlwZSk7DQo+ICsgICAgcmV0dXJuIHNpemVvZihJbWFnZUF1dGhlbnRp Y2F0aW9uLT5Nb25vdG9uaWNDb3VudCkgKyBJbWFnZUF1dGhlbnRpY2F0aW9uLQ0KPiA+QXV0aElu Zm8uSGRyLmR3TGVuZ3RoOw0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiAwOw0KPiArICB9 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEVES0lJIHN5c3RlbSBGTVAgY2Fwc3VsZS4N Cj4gKw0KPiArICBAcGFyYW0gSW1hZ2UgICAgICBUaGUgRURLSUkgc3lzdGVtIEZNUCBjYXBzdWxl Lg0KPiArICBAcGFyYW0gSW1hZ2VTaXplICBUaGUgc2l6ZSBvZiB0aGUgRURLSUkgc3lzdGVtIEZN UCBjYXBzdWxlIGluIGJ5dGVzLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRWRraWlTeXN0ZW1G bXBDYXBzdWxlKA0KPiArICBJTiBWT0lEICAgKkltYWdlLA0KPiArICBJTiBVSU5UTiAgSW1hZ2VT aXplDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEltYWdlT2Zmc2V0Ow0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKkJpb3NJbWFnZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpb3NJbWFnZVNpemU7DQo+ICsgIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+ICsgIEVES0lJ X1NZU1RFTV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAqVGVtcEltYWdlRm1wSW5m bzsNCj4gKyAgRURLSUlfU1lTVEVNX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICpJ bWFnZUZtcEluZm87DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbWFnZUZtcEluZm9TaXplOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdlIGRvIG5v dCBrbm93IGlmIHRoZXJlIGlzIEVGSV9GSVJNV0FSRV9JTUFHRV9BVVRIRU5USUNBVElPTi4NCj4g KyAgLy8gc28ganVzdCAqdHJ5KiB0byBwYXJzZSBpdA0KPiArICAvLw0KPiArICBJbWFnZU9mZnNl dCA9IER1bXBJbWFnZUF1dGhlbnRpY2F0aW9uKEltYWdlLCBJbWFnZVNpemUpOw0KPiArICBJbWFn ZSA9IChVSU5UOCAqKUltYWdlICsgSW1hZ2VPZmZzZXQ7DQo+ICsgIEltYWdlU2l6ZSAtPSBJbWFn ZU9mZnNldDsNCj4gKyAgUHJpbnQoTCJbSW1hZ2VdXG4iKTsNCj4gKyAgUHJpbnQoTCIgIEltYWdl U2l6ZSAgIC0gMHgleFxuIiwgSW1hZ2VTaXplKTsNCj4gKw0KPiArICBSZXN1bHQgPSBFeHRyYWN0 Q29uZmlnSW1hZ2UoSW1hZ2UsIEltYWdlU2l6ZSwgJkJpb3NJbWFnZSwgJkJpb3NJbWFnZVNpemUp Ow0KPiArICBpZiAoUmVzdWx0KSB7DQo+ICsgICAgUHJpbnQoTCIgIENvbmZpZ0ZpbGVTaXplICAt IDB4JXhcbiIsIEJpb3NJbWFnZVNpemUpOw0KPiArICB9DQo+ICsgIFJlc3VsdCA9IEV4dHJhY3RE cml2ZXJGdkltYWdlKEltYWdlLCBJbWFnZVNpemUsICZCaW9zSW1hZ2UsICZCaW9zSW1hZ2VTaXpl KTsNCj4gKyAgaWYgKFJlc3VsdCkgew0KPiArICAgIFByaW50KEwiICBEcml2ZXJGdlNpemUgICAg LSAweCV4XG4iLCBCaW9zSW1hZ2VTaXplKTsNCj4gKyAgfQ0KPiArICBSZXN1bHQgPSBFeHRyYWN0 U3lzdGVtRmlybXdhcmVJbWFnZShJbWFnZSwgSW1hZ2VTaXplLCAmQmlvc0ltYWdlLCAmQmlvc0lt YWdlU2l6ZSk7DQo+ICsgIGlmIChSZXN1bHQpIHsNCj4gKyAgICBQcmludChMIiAgQmlvc0ltYWdl U2l6ZSAgIC0gMHgleFxuIiwgQmlvc0ltYWdlU2l6ZSk7DQo+ICsgIH0NCj4gKyAgUmVzdWx0ID0g RXh0cmFjdFN5c3RlbUZpcm13YXJlSW1hZ2VGbXBJbmZvKEJpb3NJbWFnZSwgQmlvc0ltYWdlU2l6 ZSwNCj4gJlRlbXBJbWFnZUZtcEluZm8sICZJbWFnZUZtcEluZm9TaXplKTsNCj4gKyAgaWYgKFJl c3VsdCkgew0KPiArICAgIEltYWdlRm1wSW5mbyA9IEFsbG9jYXRlQ29weVBvb2woSW1hZ2VGbXBJ bmZvU2l6ZSwgVGVtcEltYWdlRm1wSW5mbyk7DQo+ICsgICAgaWYgKEltYWdlRm1wSW5mbyAhPSBO VUxMKSB7DQo+ICsgICAgICBQcmludChMIltJbWFnZUZtcEluZm9dXG4iKTsNCj4gKyAgICAgIFBy aW50KEwiICBTaWduYXR1cmUgICAgICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZt cEluZm8tPlNpZ25hdHVyZSk7DQo+ICsgICAgICBQcmludChMIiAgSGVhZGVyTGVuZ3RoICAgICAg ICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5IZWFkZXJMZW5ndGgpOw0KPiAr ICAgICAgUHJpbnQoTCIgIExlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIs IEltYWdlRm1wSW5mby0+TGVuZ3RoKTsNCj4gKyAgICAgIFByaW50KEwiICBQYWNrYWdlVmVyc2lv biAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5QYWNrYWdlVmVy c2lvbik7DQo+ICsgICAgICBQcmludChMIiAgUGFja2FnZVZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0 IC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+UGFja2FnZVZlcnNpb25OYW1lU3RyaW5nT2Zm c2V0KTsNCj4gKyAgICAgIGlmIChJbWFnZUZtcEluZm8tPlBhY2thZ2VWZXJzaW9uTmFtZVN0cmlu Z09mZnNldCAhPSAwKSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1hZ2VGbXBJ bmZvLT5QYWNrYWdlVmVyc2lvbk5hbWVTdHJpbmdPZmZzZXQpOw0KPiArICAgICAgfQ0KPiArICAg ICAgUHJpbnQoTCIgIEltYWdlSW5kZXggICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIElt YWdlRm1wSW5mby0+SW1hZ2VJbmRleCk7DQo+ICsgICAgICBQcmludChMIiAgSW1hZ2VUeXBlSWQg ICAgICAgICAgICAgICAgICAgIC0gJWdcbiIsICZJbWFnZUZtcEluZm8tPkltYWdlVHlwZUlkKTsN Cj4gKyAgICAgIFByaW50KEwiICBJbWFnZUlkICAgICAgICAgICAgICAgICAgICAgICAgLSAweCVs eFxuIiwgSW1hZ2VGbXBJbmZvLT5JbWFnZUlkKTsNCj4gKyAgICAgIFByaW50KEwiICBJbWFnZUlk TmFtZVN0cmluZ09mZnNldCAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5JbWFn ZUlkTmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICBpZiAoSW1hZ2VGbXBJbmZvLT5JbWFnZUlk TmFtZVN0cmluZ09mZnNldCAhPSAwKSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4g SW1hZ2VGbXBJbmZvLT5JbWFnZUlkTmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICB9DQo+ICsg ICAgICBQcmludChMIiAgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwg SW1hZ2VGbXBJbmZvLT5WZXJzaW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBWZXJzaW9uTmFtZVN0 cmluZ09mZnNldCAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5WZXJzaW9uTmFt ZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICBpZiAoSW1hZ2VGbXBJbmZvLT5WZXJzaW9uTmFtZVN0 cmluZ09mZnNldCAhPSAwKSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1hZ2VG bXBJbmZvLT5WZXJzaW9uTmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICB9DQo+ICsgICAgICBQ cmludChMIiAgU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdl Rm1wSW5mby0+U2l6ZSk7DQo+ICsgICAgICBQcmludChMIiAgQXR0cmlidXRlc1N1cHBvcnRlZCAg ICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0 ZWQpOw0KPiArICAgICAgUHJpbnQoTCIgIEF0dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgICAgICAt IDB4JWx4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyk7DQo+ICsgICAg ICBQcmludChMIiAgQ29tcGF0aWJpbGl0aWVzICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIElt YWdlRm1wSW5mby0NCj4gPkNvbXBhdGliaWxpdGllcyk7DQo+ICsgICAgICBQcmludChMIiAgTG93 ZXN0U3VwcG9ydGVkSW1hZ2VWZXJzaW9uICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+ TG93ZXN0U3VwcG9ydGVkSW1hZ2VWZXJzaW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBMYXN0QXR0 ZW1wdFZlcnNpb24gICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5MYXN0 QXR0ZW1wdFZlcnNpb24pOw0KPiArICAgICAgUHJpbnQoTCIgIExhc3RBdHRlbXB0U3RhdHVzICAg ICAgICAgICAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkxhc3RBdHRlbXB0U3RhdHVz KTsNCj4gKyAgICAgIFByaW50KEwiICBIYXJkd2FyZUluc3RhbmNlICAgICAgICAgICAgICAgLSAw eCVseFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+SGFyZHdhcmVJbnN0YW5jZSk7DQo+ICsgICAgICBQ cmludChMIiAgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VG bXBJbmZvLT5WZXJzaW9uKTsNCj4gKyAgICAgIEZyZWVQb29sKEltYWdlRm1wSW5mbyk7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIGEgbm9uLW5lc3RlZCBG TVAgY2Fwc3VsZS4NCj4gKw0KPiArICBAcGFyYW0gIENhcHN1bGVIZWFkZXIgIEEgcG9pbnRlciB0 byBDYXBzdWxlSGVhZGVyDQo+ICsgIEBwYXJhbSAgSXNTeXN0ZW1GbXAgICAgSWYgaXQgaXMgYSBz eXN0ZW0gRk1QDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1bXBGbXBDYXBzdWxlKA0KPiArICBJTiBF RklfQ0FQU1VMRV9IRUFERVIgICpDYXBzdWxlSGVhZGVyLA0KPiArICBJTiBCT09MRUFOICAgICAg ICAgICAgIElzU3lzdGVtRm1wDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFH RU1FTlRfQ0FQU1VMRV9IRUFERVIgICAgICAgICpGbXBDYXBzdWxlSGVhZGVyOw0KPiArICBVSU5U NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkl0ZW1PZmZzZXRMaXN0 Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5k ZXg7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD b3VudDsNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIg ICpGbXBJbWFnZUhlYWRlcjsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpJbWFnZTsNCj4gKw0KPiArICBQcmludChMIltGbXBDYXB1c3VsZV1cbiIp Ow0KPiArICBQcmludChMIkNhcHN1bGVIZWFkZXI6XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1 bGVHdWlkICAgICAgLSAlZ1xuIiwgJkNhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkKTsNCj4gKyAg UHJpbnQoTCIgIEhlYWRlclNpemUgICAgICAgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5IZWFk ZXJTaXplKTsNCj4gKyAgUHJpbnQoTCIgIEZsYWdzICAgICAgICAgICAgLSAweCV4XG4iLCBDYXBz dWxlSGVhZGVyLT5GbGFncyk7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlSW1hZ2VTaXplIC0gMHgl eFxuIiwgQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUltYWdlU2l6ZSk7DQo+ICsNCj4gKyAgRm1wQ2Fw c3VsZUhlYWRlciA9IChFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0hFQURFUiAqKSgo VUlOVDggKilDYXBzdWxlSGVhZGVyDQo+ICsgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ ICsgIEl0ZW1PZmZzZXRMaXN0ID0gKFVJTlQ2NCAqKShGbXBDYXBzdWxlSGVhZGVyICsgMSk7DQo+ ICsgIFByaW50KEwiRm1wSGVhZGVyOlxuIik7DQo+ICsgIFByaW50KEwiICBWZXJzaW9uICAgICAg ICAgICAgIC0gMHgleFxuIiwgRm1wQ2Fwc3VsZUhlYWRlci0+VmVyc2lvbik7DQo+ICsgIFByaW50 KEwiICBFbWJlZGRlZERyaXZlckNvdW50IC0gMHgleFxuIiwgRm1wQ2Fwc3VsZUhlYWRlci0+RW1i ZWRkZWREcml2ZXJDb3VudCk7DQo+ICsgIFByaW50KEwiICBQYXlsb2FkSXRlbUNvdW50ICAgIC0g MHgleFxuIiwgRm1wQ2Fwc3VsZUhlYWRlci0+UGF5bG9hZEl0ZW1Db3VudCk7DQo+ICsgIENvdW50 ID0gRm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3VudCArIEZtcENhcHN1bGVIZWFk ZXItPlBheWxvYWRJdGVtQ291bnQ7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50 OyBJbmRleCsrKSB7DQo+ICsgICAgUHJpbnQoTCIgIE9mZnNldFslZF0gICAgICAgICAgIC0gMHgl eFxuIiwgSW5kZXgsIEl0ZW1PZmZzZXRMaXN0W0luZGV4XSk7DQo+ICsgIH0NCj4gKw0KPiArICBm b3IgKEluZGV4ID0gRm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3VudDsgSW5kZXgg PCBDb3VudDsgSW5kZXgrKykgew0KPiArICAgIFByaW50KEwiRm1wUGF5bG9hZFslZF0gSW1hZ2VI ZWFkZXI6XG4iLCBJbmRleCk7DQo+ICsgICAgRm1wSW1hZ2VIZWFkZXIgPSAoRUZJX0ZJUk1XQVJF X01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIgKikoKFVJTlQ4DQo+ICopRm1wQ2Fwc3Vs ZUhlYWRlciArIEl0ZW1PZmZzZXRMaXN0W0luZGV4XSk7DQo+ICsgICAgUHJpbnQoTCIgIFZlcnNp b24gICAgICAgICAgICAgICAgLSAweCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VmVyc2lvbik7DQo+ ICsgICAgUHJpbnQoTCIgIFVwZGF0ZUltYWdlVHlwZUlkICAgICAgLSAlZ1xuIiwgJkZtcEltYWdl SGVhZGVyLT5VcGRhdGVJbWFnZVR5cGVJZCk7DQo+ICsgICAgUHJpbnQoTCIgIFVwZGF0ZUltYWdl SW5kZXggICAgICAgLSAweCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VXBkYXRlSW1hZ2VJbmRleCk7 DQo+ICsgICAgUHJpbnQoTCIgIFVwZGF0ZUltYWdlU2l6ZSAgICAgICAgLSAweCV4XG4iLCBGbXBJ bWFnZUhlYWRlci0+VXBkYXRlSW1hZ2VTaXplKTsNCj4gKyAgICBQcmludChMIiAgVXBkYXRlVmVu ZG9yQ29kZVNpemUgICAtIDB4JXhcbiIsIEZtcEltYWdlSGVhZGVyLT5VcGRhdGVWZW5kb3JDb2Rl U2l6ZSk7DQo+ICsgICAgaWYgKEZtcEltYWdlSGVhZGVyLT5WZXJzaW9uID49DQo+IEVGSV9GSVJN V0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSU1BR0VfSEVBREVSX0lOSVRfVkVSU0lPTikgew0KPiAr ICAgICAgUHJpbnQoTCIgIFVwZGF0ZUhhcmR3YXJlSW5zdGFuY2UgLSAweCVseFxuIiwgRm1wSW1h Z2VIZWFkZXItDQo+ID5VcGRhdGVIYXJkd2FyZUluc3RhbmNlKTsNCj4gKyAgICB9DQo+ICsgICAg aWYgKEZtcEltYWdlSGVhZGVyLT5WZXJzaW9uID49DQo+IEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5U X0NBUFNVTEVfSU1BR0VfSEVBREVSX0lOSVRfVkVSU0lPTikgew0KPiArICAgICAgSW1hZ2UgPSAo VUlOVDggKikoRm1wSW1hZ2VIZWFkZXIgKyAxKTsNCj4gKyAgICB9ICBlbHNlIHsNCj4gKyAgICAg IEltYWdlID0gKFVJTlQ4ICopRm1wSW1hZ2VIZWFkZXIgKw0KPiBPRkZTRVRfT0YoRUZJX0ZJUk1X QVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIsIFVwZGF0ZUhhcmR3YXJlSW5zdGFu Y2UpOw0KPiArICAgIH0NCj4gKyAgICBpZiAoSXNTeXN0ZW1GbXApIHsNCj4gKyAgICAgIER1bXBF ZGtpaVN5c3RlbUZtcENhcHN1bGUoSW1hZ2UsIEZtcEltYWdlSGVhZGVyLT5VcGRhdGVJbWFnZVNp emUpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0dXJuIGlm IHRoZXJlIGlzIGEgRk1QIGhlYWRlciBiZWxvdyBjYXBzdWxlIGhlYWRlci4NCj4gKw0KPiArICBA cGFyYW1baW5dIENhcHN1bGVIZWFkZXIgQSBwb2ludGVyIHRvIEVGSV9DQVBTVUxFX0hFQURFUg0K PiArDQo+ICsgIEByZXR2YWwgVFJVRSAgVGhlcmUgaXMgYSBGTVAgaGVhZGVyIGJlbG93IGNhcHN1 bGUgaGVhZGVyLg0KPiArICBAcmV0dmFsIEZBTFNFIFRoZXJlIGlzIG5vdCBhIEZNUCBoZWFkZXIg YmVsb3cgY2Fwc3VsZSBoZWFkZXINCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNOZXN0ZWRGbXBD YXBzdWxlKA0KPiArICBJTiBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAqQ2Fwc3VsZUhlYWRl cg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgRUZJX1NZU1RFTV9SRVNPVVJDRV9UQUJMRSAgKkVzcnQ7DQo+ICsgIEVGSV9TWVNURU1f UkVTT1VSQ0VfRU5UUlkgICpFc3J0RW50cnk7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICBFc3J0R3VpZEZvdW5k Ow0KPiArICBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAqTmVzdGVkQ2Fwc3VsZUhlYWRlcjsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgTmVzdGVkQ2Fwc3VsZVNpemU7DQo+ICsN Cj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgRVNSVA0KPiArICAvLw0KPiArICBFc3J0R3VpZEZvdW5k ID0gRkFMU0U7DQo+ICsgIFN0YXR1cyA9IEVmaUdldFN5c3RlbUNvbmZpZ3VyYXRpb25UYWJsZSgm Z0VmaVN5c3RlbVJlc291cmNlVGFibGVHdWlkLCAoVk9JRA0KPiAqKikmRXNydCk7DQo+ICsgIGlm ICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBFc3J0RW50cnkgPSAoVk9JRCAqKShFc3J0 ICsgMSk7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNydC0+RndSZXNvdXJjZUNv dW50OyBJbmRleCsrLCBFc3J0RW50cnkrKykgew0KPiArICAgICAgaWYgKENvbXBhcmVHdWlkKCZF c3J0RW50cnktPkZ3Q2xhc3MsICZDYXBzdWxlSGVhZGVyLT5DYXBzdWxlR3VpZCkpIHsNCj4gKyAg ICAgICAgRXNydEd1aWRGb3VuZCA9IFRSVUU7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAg fQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghRXNydEd1aWRGb3VuZCkgew0KPiAr ICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIG5l c3RlZCBjYXBzdWxlIGhlYWRlcg0KPiArICAvLyBGTVAgR1VJRCBhZnRlciBFU1JUIG9uZQ0KPiAr ICAvLw0KPiArICBOZXN0ZWRDYXBzdWxlSGVhZGVyID0gKEVGSV9DQVBTVUxFX0hFQURFUiAqKSgo VUlOVDggKilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0NCj4gPkhlYWRlclNpemUpOw0K PiArICBOZXN0ZWRDYXBzdWxlU2l6ZSA9IChVSU5UTilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhl YWRlci0+SGVhZGVyU2l6ZSAtDQo+IChVSU5UTilOZXN0ZWRDYXBzdWxlSGVhZGVyOw0KPiArICBp ZiAoTmVzdGVkQ2Fwc3VsZVNpemUgPCBzaXplb2YoRUZJX0NBUFNVTEVfSEVBREVSKSkgew0KPiAr ICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArICBpZiAoIUNvbXBhcmVHdWlkKCZOZXN0ZWRD YXBzdWxlSGVhZGVyLT5DYXBzdWxlR3VpZCwgJmdFZmlGbXBDYXBzdWxlR3VpZCkpIHsNCj4gKyAg ICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKyAgcmV0dXJuIFRSVUU7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBEdW1wIGNhcHN1bGUgaW5mb3JtYXRpb24NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIGNhcHN1bGUgaW5mb3JtYXRpb24gaXMgZHVtcGVkLg0K PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1ldGVyIGlzIG5v dCB2YWxpZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHVtcENhcHN1bGUoDQo+ICsgIFZP SUQNCj4gKyAgKQ0KPiArew0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkNhcHN1bGVOYW1lOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVTaXplOw0KPiArICBCT09MRUFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNTeXN0ZW1GbXA7DQo+ICsgIEVGSV9DQVBT VUxFX0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZUhlYWRlcjsNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKw0KPiArICBpZiAoQXJnYyAhPSAzKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBJ bnZhbGlkIFBhcmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ICsgIH0NCj4gKw0KPiArICBJc1N5c3RlbUZtcCA9IEZBTFNFOw0KPiArICBpZiAoU3RyQ21wKEFy Z3ZbMV0sIEwiLURTIikgPT0gMCkgew0KPiArICAgIElzU3lzdGVtRm1wID0gVFJVRTsNCj4gKyAg fQ0KPiArDQo+ICsgIENhcHN1bGVOYW1lID0gQXJndlsyXTsNCj4gKyAgU3RhdHVzID0gUmVhZEZp bGVUb0J1ZmZlcihDYXBzdWxlTmFtZSwgJkZpbGVTaXplLCAmQnVmZmVyKTsNCj4gKyAgaWYgKEVG SV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBDYXBzdWxlICgl cykgaXMgbm90IGZvdW5kLlxuIiwgQ2Fwc3VsZU5hbWUpOw0KPiArICAgIGdvdG8gRG9uZTsNCj4g KyAgfQ0KPiArDQo+ICsgIENhcHN1bGVIZWFkZXIgPSBCdWZmZXI7DQo+ICsgIGlmIChDb21wYXJl R3VpZCgmQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUd1aWQsICZnV2luZG93c1V4Q2Fwc3VsZUd1aWQp KSB7DQo+ICsgICAgRHVtcFV4Q2Fwc3VsZShDYXBzdWxlSGVhZGVyKTsNCj4gKyAgICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo Q29tcGFyZUd1aWQoJkNhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLCAmZ0VmaUZtcENhcHN1bGVH dWlkKSkgew0KPiArICAgIER1bXBGbXBDYXBzdWxlKENhcHN1bGVIZWFkZXIsIElzU3lzdGVtRm1w KTsNCj4gKyAgfQ0KPiArICBpZiAoSXNOZXN0ZWRGbXBDYXBzdWxlKENhcHN1bGVIZWFkZXIpKSB7 DQo+ICsgICAgUHJpbnQoTCJbTmVzdGVkQ2FwdXN1bGVdXG4iKTsNCj4gKyAgICBQcmludChMIkNh cHN1bGVIZWFkZXI6XG4iKTsNCj4gKyAgICBQcmludChMIiAgQ2Fwc3VsZUd1aWQgICAgICAtICVn XG4iLCAmQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUd1aWQpOw0KPiArICAgIFByaW50KEwiICBIZWFk ZXJTaXplICAgICAgIC0gMHgleFxuIiwgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ICsg ICAgUHJpbnQoTCIgIEZsYWdzICAgICAgICAgICAgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5G bGFncyk7DQo+ICsgICAgUHJpbnQoTCIgIENhcHN1bGVJbWFnZVNpemUgLSAweCV4XG4iLCBDYXBz dWxlSGVhZGVyLT5DYXBzdWxlSW1hZ2VTaXplKTsNCj4gKyAgICBEdW1wRm1wQ2Fwc3VsZSgoRUZJ X0NBUFNVTEVfSEVBREVSICopKChVSU5UTilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0N Cj4gPkhlYWRlclNpemUpLCBJc1N5c3RlbUZtcCk7DQo+ICsgIH0NCj4gKw0KPiArRG9uZToNCj4g KyAgRnJlZVBvb2woQnVmZmVyKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIER1bXAgY2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZSBpcyBk dW1wZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0 ZXIgaXMgbm90IHZhbGlkLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEbXBDYXBzdWxlU3Rh dHVzVmFyaWFibGUoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDYXBzdWxlVmFyTmFtZVsyMF07DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpUZW1wVmFyTmFtZTsNCj4gKyAgRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklB QkxFX0hFQURFUiAgKkNhcHN1bGVSZXN1bHQ7DQo+ICsgIEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJ QUJMRV9GTVAgICAgICpDYXBzdWxlUmVzdWx0Rm1wOw0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDYXBzdWxlRmlsZU5hbWVTaXplOw0KPiArICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlSW5kZXhEYXRhWzEyXTsNCj4gKyAgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVJbmRleDsNCj4gKw0KPiArICBT dGF0dXMgPSBHZXRWYXJpYWJsZTIoDQo+ICsgICAgICAgICAgICAgTCJDYXBzdWxlTWF4IiwNCj4g KyAgICAgICAgICAgICAmZ0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0KPiArICAgICAgICAgICAgIChW T0lEICoqKSZDYXBzdWxlSW5kZXgsDQo+ICsgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAg ICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBDb3B5TWVtKENh cHN1bGVJbmRleERhdGEsIENhcHN1bGVJbmRleCwgMTEgKiBzaXplb2YoQ0hBUjE2KSk7DQo+ICsg ICAgQ2Fwc3VsZUluZGV4RGF0YVsxMV0gPSAwOw0KPiArICAgIFByaW50KEwiQ2Fwc3VsZU1heCAt ICVzXG4iLCBDYXBzdWxlSW5kZXhEYXRhKTsNCj4gKyAgICBGcmVlUG9vbChDYXBzdWxlSW5kZXgp Ow0KPiArICB9DQo+ICsgIFN0YXR1cyA9IEdldFZhcmlhYmxlMigNCj4gKyAgICAgICAgICAgICBM IkNhcHN1bGVMYXN0IiwNCj4gKyAgICAgICAgICAgICAmZ0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0K PiArICAgICAgICAgICAgIChWT0lEICoqKSZDYXBzdWxlSW5kZXgsDQo+ICsgICAgICAgICAgICAg TlVMTA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsN Cj4gKyAgICBDb3B5TWVtKENhcHN1bGVJbmRleERhdGEsIENhcHN1bGVJbmRleCwgMTEgKiBzaXpl b2YoQ0hBUjE2KSk7DQo+ICsgICAgQ2Fwc3VsZUluZGV4RGF0YVsxMV0gPSAwOw0KPiArICAgIFBy aW50KEwiQ2Fwc3VsZUxhc3QgLSAlc1xuIiwgQ2Fwc3VsZUluZGV4RGF0YSk7DQo+ICsgICAgRnJl ZVBvb2woQ2Fwc3VsZUluZGV4KTsNCj4gKyAgfQ0KPiArDQo+ICsNCj4gKyAgU3RyQ3B5UyAoQ2Fw c3VsZVZhck5hbWUsIHNpemVvZihDYXBzdWxlVmFyTmFtZSkvc2l6ZW9mKENhcHN1bGVWYXJOYW1l WzBdKSwNCj4gTCJDYXBzdWxlIik7DQo+ICsgIFRlbXBWYXJOYW1lID0gQ2Fwc3VsZVZhck5hbWUg KyBTdHJMZW4gKENhcHN1bGVWYXJOYW1lKTsNCj4gKyAgSW5kZXggPSAwOw0KPiArDQo+ICsgIHdo aWxlIChUUlVFKSB7DQo+ICsgICAgVW5pY29kZVNQcmludCAoVGVtcFZhck5hbWUsIDUgKiBzaXpl b2YoQ0hBUjE2KSwgTCIlMDR4IiwgSW5kZXgpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gR2V0VmFy aWFibGUyICgNCj4gKyAgICAgICAgICAgICAgIENhcHN1bGVWYXJOYW1lLA0KPiArICAgICAgICAg ICAgICAgJmdFZmlDYXBzdWxlUmVwb3J0R3VpZCwNCj4gKyAgICAgICAgICAgICAgIChWT0lEICoq KSAmQ2Fwc3VsZVJlc3VsdCwNCj4gKyAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAg ICAgICk7DQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSB7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICB9IGVsc2UgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBj b250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIGRpc3BsYXkgY2Fw c3VsZSBwcm9jZXNzIHN0YXR1cw0KPiArICAgIC8vDQo+ICsgICAgaWYgKENhcHN1bGVSZXN1bHQt PlZhcmlhYmxlVG90YWxTaXplID49DQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFC TEVfSEVBREVSKSkgew0KPiArICAgICAgUHJpbnQgKEwiQ2Fwc3VsZU5hbWU6ICVzXG4iLCBDYXBz dWxlVmFyTmFtZSk7DQo+ICsgICAgICBQcmludCAoTCIgIENhcHN1bGUgR3VpZDogJWdcbiIsICZD YXBzdWxlUmVzdWx0LT5DYXBzdWxlR3VpZCk7DQo+ICsgICAgICBQcmludCAoTCIgIENhcHN1bGUg UHJvY2Vzc2VkVGltZTogJXRcbiIsICZDYXBzdWxlUmVzdWx0LT5DYXBzdWxlUHJvY2Vzc2VkKTsN Cj4gKyAgICAgIFByaW50IChMIiAgQ2Fwc3VsZSBTdGF0dXM6ICVyXG4iLCBDYXBzdWxlUmVzdWx0 LT5DYXBzdWxlU3RhdHVzKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoQ29tcGFyZUd1aWQo JkNhcHN1bGVSZXN1bHQtPkNhcHN1bGVHdWlkLCAmZ0VmaUZtcENhcHN1bGVHdWlkKSkgew0KPiAr ICAgICAgaWYgKENhcHN1bGVSZXN1bHQtPlZhcmlhYmxlVG90YWxTaXplID49DQo+IHNpemVvZihF RklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSKSArIHNpemVvZihFRklfQ0FQU1VMRV9S RVNVTFRfVkFSSUFCTEVfRk1QKSkgew0KPiArICAgICAgICBDYXBzdWxlUmVzdWx0Rm1wID0gKEVG SV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9GTVAgKikoQ2Fwc3VsZVJlc3VsdCArIDEpOw0KPiAr ICAgICAgICBQcmludChMIiAgQ2Fwc3VsZSBGTVAgVmVyc2lvbjogMHgleFxuIiwgQ2Fwc3VsZVJl c3VsdEZtcC0+VmVyc2lvbik7DQo+ICsgICAgICAgIFByaW50KEwiICBDYXBzdWxlIEZNUCBQYXls b2FkSW5kZXg6IDB4JXhcbiIsIENhcHN1bGVSZXN1bHRGbXAtPlBheWxvYWRJbmRleCk7DQo+ICsg ICAgICAgIFByaW50KEwiICBDYXBzdWxlIEZNUCBVcGRhdGVJbWFnZUluZGV4OiAweCV4XG4iLCBD YXBzdWxlUmVzdWx0Rm1wLQ0KPiA+VXBkYXRlSW1hZ2VJbmRleCk7DQo+ICsgICAgICAgIFByaW50 KEwiICBDYXBzdWxlIEZNUCBVcGRhdGVJbWFnZVR5cGVJZDogJWdcbiIsICZDYXBzdWxlUmVzdWx0 Rm1wLQ0KPiA+VXBkYXRlSW1hZ2VUeXBlSWQpOw0KPiArICAgICAgICBpZiAoQ2Fwc3VsZVJlc3Vs dC0+VmFyaWFibGVUb3RhbFNpemUgPg0KPiBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklB QkxFX0hFQURFUikgKyBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0ZNUCkpIHsN Cj4gKyAgICAgICAgICBQcmludChMIiAgQ2Fwc3VsZSBGTVAgQ2Fwc3VsZUZpbGVOYW1lOiAlc1xu IiwgKENhcHN1bGVSZXN1bHRGbXAgKyAxKSk7DQo+ICsgICAgICAgICAgQ2Fwc3VsZUZpbGVOYW1l U2l6ZSA9IFN0clNpemUoKENIQVIxNiAqKShDYXBzdWxlUmVzdWx0Rm1wICsgMSkpOw0KPiArICAg ICAgICAgIGlmIChDYXBzdWxlUmVzdWx0LT5WYXJpYWJsZVRvdGFsU2l6ZSA+DQo+IHNpemVvZihF RklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSKSArIHNpemVvZihFRklfQ0FQU1VMRV9S RVNVTFRfVkFSSUFCTEVfRk1QKSArDQo+IENhcHN1bGVGaWxlTmFtZVNpemUpIHsNCj4gKyAgICAg ICAgICAgIFByaW50KEwiICBDYXBzdWxlIEZNUCBDYXBzdWxlVGFyZ2V0OiAlc1xuIiwgKFVJTlQ4 ICopKENhcHN1bGVSZXN1bHRGbXAgKw0KPiAxKSArIENhcHN1bGVGaWxlTmFtZVNpemUpOw0KPiAr ICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiAr ICAgIEZyZWVQb29sKENhcHN1bGVSZXN1bHQpOw0KPiArDQo+ICsgICAgSW5kZXgrKzsNCj4gKyAg ICBpZiAoSW5kZXggPiAweEZGRkYpIHsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAg fQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArQ0hBUjggKm1G d1R5cGVTdHJpbmdbXSA9IHsNCj4gKyAgIlVua25vd24iLA0KPiArICAiU3lzdGVtRmlybXdhcmUi LA0KPiArICAiRGV2aWNlRmlybXdhcmUiLA0KPiArICAiVWVmaURyaXZlciIsDQo+ICt9Ow0KPiAr DQo+ICtDSEFSOCAqbUxhc3RBdHRlbXB0U3RhdHVzU3RyaW5nW10gPSB7DQo+ICsgICJTdWNjZXNz IiwNCj4gKyAgIkVycm9yOiBVbnN1Y2Nlc3NmdWwiLA0KPiArICAiRXJyb3I6IEluc3VmZmljaWVu dCBSZXNvdXJjZXMiLA0KPiArICAiRXJyb3I6IEluY29ycmVjdCBWZXJzaW9uIiwNCj4gKyAgIkVy cm9yOiBJbnZhbGlkIEZvcm1hdCIsDQo+ICsgICJFcnJvcjogQXV0aCBFcnJvciIsDQo+ICsgICJF cnJvcjogUG93ZXIgRXZlbnQgQUMiLA0KPiArICAiRXJyb3I6IFBvd2VyIEV2ZW50IEJhdHRlcnki LA0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIENvbnZlcnQgRndUeXBlIHRvIGEgc3RyaW5nLg0K PiArDQo+ICsgIEBwYXJhbSBGd1R5cGUgIEZ3VHlwZSBpbiBFU1JUDQo+ICsNCj4gKyAgQHJldHVy biBhIHN0cmluZyBmb3IgRndUeXBlLg0KPiArKiovDQo+ICtDSEFSOCAqDQo+ICtGd1R5cGVUb1N0 cmluZygNCj4gKyAgSU4gVUlOVDMyIEZ3VHlwZQ0KPiArICApDQo+ICt7DQo+ICsgIGlmIChGd1R5 cGUgPCBzaXplb2YobUZ3VHlwZVN0cmluZykgLyBzaXplb2YobUZ3VHlwZVN0cmluZ1swXSkpIHsN Cj4gKyAgICByZXR1cm4gbUZ3VHlwZVN0cmluZ1tGd1R5cGVdOw0KPiArICB9IGVsc2Ugew0KPiAr ICAgIHJldHVybiAiSW52YWxpZCI7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENv bnZlcnQgTGFzdEF0dGVtcHRTdGF0dXMgdG8gYSBzdHJpbmcuDQo+ICsNCj4gKyAgQHBhcmFtIExh c3RBdHRlbXB0U3RhdHVzICBMYXN0QXR0ZW1wdFN0YXR1cyBpbiBGTVAgb3IgRVNSVA0KPiArDQo+ ICsgIEByZXR1cm4gYSBzdHJpbmcgZm9yIExhc3RBdHRlbXB0U3RhdHVzLg0KPiArKiovDQo+ICtD SEFSOCAqDQo+ICtMYXN0QXR0ZW1wdFN0YXR1c1RvU3RyaW5nKA0KPiArICBJTiBVSU5UMzIgTGFz dEF0dGVtcHRTdGF0dXMNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoTGFzdEF0dGVtcHRTdGF0dXMg PCBzaXplb2YobUxhc3RBdHRlbXB0U3RhdHVzU3RyaW5nKSAvDQo+IHNpemVvZihtTGFzdEF0dGVt cHRTdGF0dXNTdHJpbmdbMF0pKSB7DQo+ICsgICAgcmV0dXJuIG1MYXN0QXR0ZW1wdFN0YXR1c1N0 cmluZ1tMYXN0QXR0ZW1wdFN0YXR1c107DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuICJF cnJvcjogVW5rbm93biI7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRVNS VCBlbnRyeS4NCj4gKw0KPiArICBAcGFyYW0gRXNydEVudHJ5ICBFU1JUIGVudHJ5DQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK0R1bXBFc3J0RW50cnkoDQo+ICsgIElOIEVGSV9TWVNURU1fUkVTT1VSQ0Vf RU5UUlkgICpFc3J0RW50cnkNCj4gKyAgKQ0KPiArew0KPiArICBQcmludChMIiAgRndDbGFzcyAg ICAgICAgICAgICAgICAgIC0gJWdcbiIsICZFc3J0RW50cnktPkZ3Q2xhc3MpOw0KPiArICBQcmlu dChMIiAgRndUeXBlICAgICAgICAgICAgICAgICAgIC0gMHgleCAoJWEpXG4iLCBFc3J0RW50cnkt PkZ3VHlwZSwNCj4gRndUeXBlVG9TdHJpbmcoRXNydEVudHJ5LT5Gd1R5cGUpKTsNCj4gKyAgUHJp bnQoTCIgIEZ3VmVyc2lvbiAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+RndW ZXJzaW9uKTsNCj4gKyAgUHJpbnQoTCIgIExvd2VzdFN1cHBvcnRlZEZ3VmVyc2lvbiAtIDB4JXhc biIsIEVzcnRFbnRyeS0+TG93ZXN0U3VwcG9ydGVkRndWZXJzaW9uKTsNCj4gKyAgUHJpbnQoTCIg IENhcHN1bGVGbGFncyAgICAgICAgICAgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+Q2Fwc3VsZUZs YWdzKTsNCj4gKyAgUHJpbnQoTCIgICAgUEVSU0lTVF9BQ1JPU1NfUkVTRVQgICAtIDB4JXhcbiIs IEVzcnRFbnRyeS0+Q2Fwc3VsZUZsYWdzICYNCj4gQ0FQU1VMRV9GTEFHU19QRVJTSVNUX0FDUk9T U19SRVNFVCk7DQo+ICsgIFByaW50KEwiICAgIFBPUFVMQVRFX1NZU1RFTV9UQUJMRSAgLSAweCV4 XG4iLCBFc3J0RW50cnktPkNhcHN1bGVGbGFncyAmDQo+IENBUFNVTEVfRkxBR1NfUE9QVUxBVEVf U1lTVEVNX1RBQkxFKTsNCj4gKyAgUHJpbnQoTCIgICAgSU5JVElBVEVfUkVTRVQgICAgICAgICAt IDB4JXhcbiIsIEVzcnRFbnRyeS0+Q2Fwc3VsZUZsYWdzICYNCj4gQ0FQU1VMRV9GTEFHU19JTklU SUFURV9SRVNFVCk7DQo+ICsgIFByaW50KEwiICBMYXN0QXR0ZW1wdFZlcnNpb24gICAgICAgLSAw eCV4XG4iLCBFc3J0RW50cnktPkxhc3RBdHRlbXB0VmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBM YXN0QXR0ZW1wdFN0YXR1cyAgICAgICAgLSAweCV4ICglYSlcbiIsIEVzcnRFbnRyeS0+TGFzdEF0 dGVtcHRTdGF0dXMsDQo+IExhc3RBdHRlbXB0U3RhdHVzVG9TdHJpbmcoRXNydEVudHJ5LT5MYXN0 QXR0ZW1wdFN0YXR1cykpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIHRhYmxl Lg0KPiArDQo+ICsgIEBwYXJhbSBFc3J0ICBFU1JUIHRhYmxlDQo+ICsqKi8NCj4gK1ZPSUQNCj4g K0R1bXBFc3J0KA0KPiArICBJTiBFRklfU1lTVEVNX1JFU09VUkNFX1RBQkxFICAqRXNydA0KPiAr ICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBF RklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICAqRXNydEVudHJ5Ow0KPiArDQo+ICsgIFByaW50KEwi RUZJX1NZU1RFTV9SRVNPVVJDRV9UQUJMRTpcbiIpOw0KPiArICBQcmludChMIkZ3UmVzb3VyY2VD b3VudCAgICAtIDB4JXhcbiIsIEVzcnQtPkZ3UmVzb3VyY2VDb3VudCk7DQo+ICsgIFByaW50KEwi RndSZXNvdXJjZUNvdW50TWF4IC0gMHgleFxuIiwgRXNydC0+RndSZXNvdXJjZUNvdW50TWF4KTsN Cj4gKyAgUHJpbnQoTCJGd1Jlc291cmNlVmVyc2lvbiAgLSAweCVseFxuIiwgRXNydC0+RndSZXNv dXJjZVZlcnNpb24pOw0KPiArDQo+ICsgIEVzcnRFbnRyeSA9IChWT0lEICopKEVzcnQgKyAxKTsN Cj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNydC0+RndSZXNvdXJjZUNvdW50OyBJbmRl eCsrKSB7DQo+ICsgICAgUHJpbnQoTCJFRklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICglZCk6XG4i LCBJbmRleCk7DQo+ICsgICAgRHVtcEVzcnRFbnRyeShFc3J0RW50cnkpOw0KPiArICAgIEVzcnRF bnRyeSsrOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEVTUlQgaW5mby4N Cj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEVzcnREYXRhICgNCj4gKyAgVk9JRA0KPiArICApDQo+ ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NZ U1RFTV9SRVNPVVJDRV9UQUJMRSAgKkVzcnQ7DQo+ICsNCj4gKyAgUHJpbnQoTCIjIyMjIyMjIyMj IyMjI1xuIik7DQo+ICsgIFByaW50KEwiIyBFU1JUIFRBQkxFICNcbiIpOw0KPiArICBQcmludChM IiMjIyMjIyMjIyMjIyMjXG4iKTsNCj4gKw0KPiArICBTdGF0dXMgPSBFZmlHZXRTeXN0ZW1Db25m aWd1cmF0aW9uVGFibGUgKCZnRWZpU3lzdGVtUmVzb3VyY2VUYWJsZUd1aWQsIChWT0lEDQo+ICoq KSZFc3J0KTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQoTCJF U1JUIC0gJXJcbiIsIFN0YXR1cyk7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsgIER1bXBF c3J0KEVzcnQpOw0KPiArICBQcmludChMIlxuIik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBE dW1wIEZNUCBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBAcGFyYW0gSW1hZ2VJbmZvU2l6ZSAgICAg ICBUaGUgc2l6ZSBvZiBJbWFnZUluZm8sIGluIGJ5dGVzLg0KPiArICBAcGFyYW0gSW1hZ2VJbmZv ICAgICAgICAgICBBIHBvaW50ZXIgdG8gRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IuDQo+ ICsgIEBwYXJhbSBEZXNjcmlwdG9yVmVyc2lvbiAgIFRoZSB2ZXJzaW9uIG9mIEVGSV9GSVJNV0FS RV9JTUFHRV9ERVNDUklQVE9SLg0KPiArICBAcGFyYW0gRGVzY3JpcHRvckNvdW50ICAgICBUaGUg Y291bnQgb2YgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IuDQo+ICsgIEBwYXJhbSBEZXNj cmlwdG9yU2l6ZSAgICAgIFRoZSBzaXplIG9mIGFuIGluZGl2aWR1YWwgRUZJX0ZJUk1XQVJFX0lN QUdFX0RFU0NSSVBUT1IsDQo+IGluIGJ5dGVzLg0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb24g ICAgICBUaGUgdmVyc2lvbiBvZiBwYWNrYWdlLg0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb25O YW1lICBUaGUgdmVyc2lvbiBuYW1lIG9mIHBhY2thZ2UuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1 bXBGbXBJbWFnZUluZm8oDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg SW1hZ2VJbmZvU2l6ZSwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAq SW1hZ2VJbmZvLA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny aXB0b3JWZXJzaW9uLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIERl c2NyaXB0b3JDb3VudCwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBE ZXNjcmlwdG9yU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBQ YWNrYWdlVmVyc2lvbiwNCj4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAq UGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdF X0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICpDdXJyZW50SW1hZ2VJbmZvOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4g KyAgUHJpbnQoTCIgIERlc2NyaXB0b3JWZXJzaW9uICAtIDB4JXhcbiIsIERlc2NyaXB0b3JWZXJz aW9uKTsNCj4gKyAgUHJpbnQoTCIgIERlc2NyaXB0b3JDb3VudCAgICAtIDB4JXhcbiIsIERlc2Ny aXB0b3JDb3VudCk7DQo+ICsgIFByaW50KEwiICBEZXNjcmlwdG9yU2l6ZSAgICAgLSAweCV4XG4i LCBEZXNjcmlwdG9yU2l6ZSk7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbiAgICAgLSAw eCV4XG4iLCBQYWNrYWdlVmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbk5h bWUgLSBcIiVzXCJcbiIsIFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgIEN1cnJlbnRJbWFnZUlu Zm8gPSBJbWFnZUluZm87DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IERlc2NyaXB0b3JD b3VudDsgSW5kZXgrKykgew0KPiArICAgIFByaW50KEwiICBJbWFnZURlc2NyaXB0b3IgKCVkKVxu IiwgSW5kZXgpOw0KPiArICAgIFByaW50KEwiICAgIEltYWdlSW5kZXggICAgICAgICAgICAgICAg ICAtIDB4JXhcbiIsIEN1cnJlbnRJbWFnZUluZm8tPkltYWdlSW5kZXgpOw0KPiArICAgIFByaW50 KEwiICAgIEltYWdlVHlwZUlkICAgICAgICAgICAgICAgICAtICVnXG4iLCAmQ3VycmVudEltYWdl SW5mby0+SW1hZ2VUeXBlSWQpOw0KPiArICAgIFByaW50KEwiICAgIEltYWdlSWQgICAgICAgICAg ICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLT5JbWFnZUlkKTsNCj4gKyAg ICBQcmludChMIiAgICBJbWFnZUlkTmFtZSAgICAgICAgICAgICAgICAgLSBcIiVzXCJcbiIsIEN1 cnJlbnRJbWFnZUluZm8tDQo+ID5JbWFnZUlkTmFtZSk7DQo+ICsgICAgUHJpbnQoTCIgICAgVmVy c2lvbiAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgQ3VycmVudEltYWdlSW5mby0+VmVy c2lvbik7DQo+ICsgICAgUHJpbnQoTCIgICAgVmVyc2lvbk5hbWUgICAgICAgICAgICAgICAgIC0g XCIlc1wiXG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+VmVyc2lvbk5hbWUpOw0KPiArICAgIFBy aW50KEwiICAgIFNpemUgICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEN1cnJlbnRJ bWFnZUluZm8tPlNpemUpOw0KPiArICAgIFByaW50KEwiICAgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQg ICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBv cnRlZCk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBJTUFHRV9VUERBVEFCTEUgICAgICAgICAgIC0g MHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9ydGVkICYgSU1B R0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBSRVNF VF9SRVFVSVJFRCAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5B dHRyaWJ1dGVzU3VwcG9ydGVkICYgSU1BR0VfQVRUUklCVVRFX1JFU0VUX1JFUVVJUkVEKTsNCj4g KyAgICBQcmludChMIiAgICAgIEFVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEICAgLSAweCVseFxuIiwg Q3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJV VEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpOw0KPiArICAgIFByaW50KEwiICAgICAgSU5fVVNF ICAgICAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0 cmlidXRlc1N1cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9JTl9VU0UpOw0KPiArICAgIFByaW50 KEwiICAgICAgVUVGSV9JTUFHRSAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1h Z2VJbmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9VRUZJX0lN QUdFKTsNCj4gKyAgICBQcmludChMIiAgICBBdHRyaWJ1dGVzU2V0dGluZyAgICAgICAgICAgLSAw eCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nKTsNCj4gKyAg ICBQcmludChMIiAgICAgIElNQUdFX1VQREFUQUJMRSAgICAgICAgICAgLSAweCVseFxuIiwgQ3Vy cmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1BR0VfQVRUUklCVVRFX0lN QUdFX1VQREFUQUJMRSk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBSRVNFVF9SRVFVSVJFRCAgICAg ICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGlu ZyAmIElNQUdFX0FUVFJJQlVURV9SRVNFVF9SRVFVSVJFRCk7DQo+ICsgICAgUHJpbnQoTCIgICAg ICBBVVRIRU5USUNBVElPTl9SRVFVSVJFRCAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8t DQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9S RVFVSVJFRCk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBJTl9VU0UgICAgICAgICAgICAgICAgICAg IC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElN QUdFX0FUVFJJQlVURV9JTl9VU0UpOw0KPiArICAgIFByaW50KEwiICAgICAgVUVGSV9JTUFHRSAg ICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRl c1NldHRpbmcgJiBJTUFHRV9BVFRSSUJVVEVfVUVGSV9JTUFHRSk7DQo+ICsgICAgUHJpbnQoTCIg ICAgQ29tcGF0aWJpbGl0aWVzICAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUlu Zm8tDQo+ID5Db21wYXRpYmlsaXRpZXMpOw0KPiArICAgIFByaW50KEwiICAgICAgQ09NUEFUSUJf Q0hFQ0tfU1VQUE9SVEVEICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+Q29tcGF0 aWJpbGl0aWVzICYgSU1BR0VfQ09NUEFUSUJJTElUWV9DSEVDS19TVVBQT1JURUQpOw0KPiArICAg IGlmIChEZXNjcmlwdG9yVmVyc2lvbiA+IDEpIHsNCj4gKyAgICAgIFByaW50KEwiICAgIExvd2Vz dFN1cHBvcnRlZEltYWdlVmVyc2lvbiAtIDB4JXhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5M b3dlc3RTdXBwb3J0ZWRJbWFnZVZlcnNpb24pOw0KPiArICAgICAgaWYgKERlc2NyaXB0b3JWZXJz aW9uID4gMikgew0KPiArICAgICAgICBQcmludChMIiAgICBMYXN0QXR0ZW1wdFZlcnNpb24gICAg ICAgICAgLSAweCV4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+TGFzdEF0dGVtcHRWZXJzaW9u KTsNCj4gKyAgICAgICAgUHJpbnQoTCIgICAgTGFzdEF0dGVtcHRTdGF0dXMgICAgICAgICAgIC0g MHgleCAoJWEpXG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+TGFzdEF0dGVtcHRTdGF0dXMsIExh c3RBdHRlbXB0U3RhdHVzVG9TdHJpbmcoQ3VycmVudEltYWdlSW5mby0+TGFzdEF0dGVtcHRTdGF0 dXMpKTsNCj4gKyAgICAgICAgUHJpbnQoTCIgICAgSGFyZHdhcmVJbnN0YW5jZSAgICAgICAgICAg IC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5IYXJkd2FyZUluc3RhbmNlKTsNCj4g KyAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgLy8NCj4gKyAgICAvLyBVc2UgRGVzY3JpcHRvclNp emUgdG8gbW92ZSBJbWFnZUluZm8gUG9pbnRlciB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBkaWZm ZXJlbnQNCj4gSW1hZ2VJbmZvIHZlcnNpb24NCj4gKyAgICAvLw0KPiArICAgIEN1cnJlbnRJbWFn ZUluZm8gPSAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgKikoKFVJTlQ4ICopQ3VycmVu dEltYWdlSW5mbyArDQo+IERlc2NyaXB0b3JTaXplKTsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgRHVtcCBGTVAgcGFja2FnZSBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBAcGFyYW0g UGFja2FnZVZlcnNpb24gICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgcGFja2FnZS4NCj4gKyAg QHBhcmFtIFBhY2thZ2VWZXJzaW9uTmFtZSAgICAgICAgIFRoZSB2ZXJzaW9uIG5hbWUgb2YgcGFj a2FnZS4NCj4gKyAgQHBhcmFtIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiAgIFRoZSBtYXhpbXVt IGxlbmd0aCBvZiBQYWNrYWdlVmVyc2lvbk5hbWUuDQo+ICsgIEBwYXJhbSBBdHRyaWJ1dGVzU3Vw cG9ydGVkICAgICAgICBQYWNrYWdlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRo aXMNCj4gZGV2aWNlLg0KPiArICBAcGFyYW0gQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgUGFj a2FnZSBhdHRyaWJ1dGVzLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wUGFja2FnZUluZm8o DQo+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9u LA0KPiArICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2FnZVZlcnNp b25OYW1lLA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdl VmVyc2lvbk5hbWVNYXhMZW4sDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAg ICAgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAg ICAgICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5nDQo+ICsgICkNCj4gK3sNCj4gKyAgUHJpbnQoTCIg IFBhY2thZ2VWZXJzaW9uICAgICAgICAgICAgICAtIDB4JXhcbiIsIFBhY2thZ2VWZXJzaW9uKTsN Cj4gKyAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uTmFtZSAgICAgICAgICAtIFwiJXNcIlxuIiwg UGFja2FnZVZlcnNpb25OYW1lKTsNCj4gKyAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uTmFtZU1h eExlbiAgICAtIDB4JXhcbiIsIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbik7DQo+ICsgIFByaW50 KEwiICBBdHRyaWJ1dGVzU3VwcG9ydGVkICAgICAgICAgLSAweCVseFxuIiwgQXR0cmlidXRlc1N1 cHBvcnRlZCk7DQo+ICsgIFByaW50KEwiICAgIElNQUdFX1VQREFUQUJMRSAgICAgICAgICAgLSAw eCVseFxuIiwgQXR0cmlidXRlc1N1cHBvcnRlZCAmDQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9V UERBVEFCTEUpOw0KPiArICBQcmludChMIiAgICBSRVNFVF9SRVFVSVJFRCAgICAgICAgICAgIC0g MHglbHhcbiIsIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfUkVTRVRf UkVRVUlSRUQpOw0KPiArICBQcmludChMIiAgICBBVVRIRU5USUNBVElPTl9SRVFVSVJFRCAgIC0g MHglbHhcbiIsIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVO VElDQVRJT05fUkVRVUlSRUQpOw0KPiArICBQcmludChMIiAgQXR0cmlidXRlc1NldHRpbmcgICAg ICAgICAgIC0gMHglbHhcbiIsIEF0dHJpYnV0ZXNTZXR0aW5nKTsNCj4gKyAgUHJpbnQoTCIgICAg SU1BR0VfVVBEQVRBQkxFICAgICAgICAgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyAm DQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpOw0KPiArICBQcmludChMIiAgICBS RVNFVF9SRVFVSVJFRCAgICAgICAgICAgIC0gMHglbHhcbiIsIEF0dHJpYnV0ZXNTZXR0aW5nICYN Cj4gSU1BR0VfQVRUUklCVVRFX1JFU0VUX1JFUVVJUkVEKTsNCj4gKyAgUHJpbnQoTCIgICAgQVVU SEVOVElDQVRJT05fUkVRVUlSRUQgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyAmDQo+ IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCk7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBEdW1wIEZNUCBwcm90b2NvbCBpbmZvLg0KPiArKiovDQo+ICtWT0lEDQo+ICtE dW1wRm1wRGF0YSAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfRklSTVdB UkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICAgKkZtcDsNCj4gKyAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkhh bmRsZXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAg ICAgICpGbXBJbWFnZUluZm9CdWY7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRm1wSW1hZ2VJbmZvRGVzY3JpcHRvclZlcjsNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZtcEltYWdl SW5mb0NvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGVzY3JpcHRvclNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWU7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lv bk5hbWVNYXhMZW47DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBdHRyaWJ1dGVzU3VwcG9ydGVkOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1NldHRpbmc7DQo+ICsNCj4gKyAgUHJp bnQoTCIjIyMjIyMjIyMjIyNcbiIpOw0KPiArICBQcmludChMIiMgRk1QIERBVEEgI1xuIik7DQo+ ICsgIFByaW50KEwiIyMjIyMjIyMjIyMjXG4iKTsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVI YW5kbGVCdWZmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAg ICAgICAgICAgICAgICZnRWZpRmlybXdhcmVNYW5hZ2VtZW50UHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICZOdW1iZXJPZkhhbmRs ZXMsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAg ICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBQcmludChMIkZN UCBwcm90b2NvbCAtICVyXG4iLCBFRklfTk9UX0ZPVU5EKTsNCj4gKyAgICByZXR1cm47DQo+ICsg IH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkhhbmRsZXM7IElu ZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sKA0KPiArICAgICAg ICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAg ICAmZ0VmaUZpcm13YXJlTWFuYWdlbWVudFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJkZtcA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlm IChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgSW1hZ2VJbmZvU2l6ZSA9IDA7DQo+ICsgICAgU3RhdHVzID0gRm1wLT5HZXRJbWFn ZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAgICAgICAgICAg ICAgICZJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAg ICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiAr ICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0K PiArICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgICAgY29u dGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRm1wSW1hZ2VJbmZvQnVmID0gTlVMTDsNCj4g KyAgICBGbXBJbWFnZUluZm9CdWYgPSBBbGxvY2F0ZVplcm9Qb29sIChJbWFnZUluZm9TaXplKTsN Cj4gKyAgICBpZiAoRm1wSW1hZ2VJbmZvQnVmID09IE5VTEwpIHsNCj4gKyAgICAgIFN0YXR1cyA9 IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgZ290byBFWElUOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgICAgU3RhdHVzID0gRm1w LT5HZXRJbWFnZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAg ICAgICAgICAgICAgICZJbWFnZUluZm9TaXplLCAgICAgICAgICAgICAgIC8vIEltYWdlSW5mb1Np emUNCj4gKyAgICAgICAgICAgICAgICAgICAgRm1wSW1hZ2VJbmZvQnVmLCAgICAgICAgICAgICAg Ly8gSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgICZGbXBJbWFnZUluZm9EZXNjcmlw dG9yVmVyLCAgIC8vIERlc2NyaXB0b3JWZXJzaW9uDQo+ICsgICAgICAgICAgICAgICAgICAgICZG bXBJbWFnZUluZm9Db3VudCwgICAgICAgICAgIC8vIERlc2NyaXB0b3JDb3VudA0KPiArICAgICAg ICAgICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsICAgICAgICAgICAgICAvLyBEZXNjcmlwdG9y U2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sICAgICAgICAgICAg ICAvLyBQYWNrYWdlVmVyc2lvbg0KPiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNp b25OYW1lICAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gSWYgRk1QIEdldEluZm9ybWF0aW9u IGludGVyZmFjZSBmYWlsZWQsIHNraXAgdGhpcyByZXNvdXJjZQ0KPiArICAgIC8vDQo+ICsgICAg aWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkZNUCAoJWQpIEltYWdl SW5mbyAtICVyXG4iLCBJbmRleCwgU3RhdHVzKTsNCj4gKyAgICAgIEZyZWVQb29sKEZtcEltYWdl SW5mb0J1Zik7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBQcmlu dChMIkZNUCAoJWQpIEltYWdlSW5mbzpcbiIsIEluZGV4KTsNCj4gKyAgICBEdW1wRm1wSW1hZ2VJ bmZvKA0KPiArICAgICAgSW1hZ2VJbmZvU2l6ZSwgICAgICAgICAgICAgICAvLyBJbWFnZUluZm9T aXplDQo+ICsgICAgICBGbXBJbWFnZUluZm9CdWYsICAgICAgICAgICAgIC8vIEltYWdlSW5mbw0K PiArICAgICAgRm1wSW1hZ2VJbmZvRGVzY3JpcHRvclZlciwgICAvLyBEZXNjcmlwdG9yVmVyc2lv bg0KPiArICAgICAgRm1wSW1hZ2VJbmZvQ291bnQsICAgICAgICAgICAvLyBEZXNjcmlwdG9yQ291 bnQNCj4gKyAgICAgIERlc2NyaXB0b3JTaXplLCAgICAgICAgICAgICAgLy8gRGVzY3JpcHRvclNp emUNCj4gKyAgICAgIFBhY2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFja2FnZVZlcnNp b24NCj4gKyAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZSAgICAgICAgICAgLy8gUGFja2FnZVZlcnNp b25OYW1lDQo+ICsgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAh PSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbChQYWNrYWdlVmVyc2lvbk5hbWUpOw0KPiArICAg IH0NCj4gKyAgICBGcmVlUG9vbChGbXBJbWFnZUluZm9CdWYpOw0KPiArDQo+ICsgICAgLy8NCj4g KyAgICAvLyBHZXQgcGFja2FnZSBpbmZvDQo+ICsgICAgLy8NCj4gKyAgICBQYWNrYWdlVmVyc2lv bk5hbWUgPSBOVUxMOw0KPiArICAgIFN0YXR1cyA9IEZtcC0+R2V0UGFja2FnZUluZm8gKA0KPiAr ICAgICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAgICAgICAgICAgICAgICZQYWNrYWdl VmVyc2lvbiwgICAgICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uDQo+ICsgICAgICAgICAgICAg ICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUsICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uTmFt ZQ0KPiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLCAgICAv LyBQYWNrYWdlVmVyc2lvbk5hbWVNYXhMZW4NCj4gKyAgICAgICAgICAgICAgICAgICAgJkF0dHJp YnV0ZXNTdXBwb3J0ZWQsICAgICAgICAgLy8gQXR0cmlidXRlc1N1cHBvcnRlZA0KPiArICAgICAg ICAgICAgICAgICAgICAmQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgICAvLyBBdHRyaWJ1dGVz U2V0dGluZw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1Io U3RhdHVzKSkgew0KPiArICAgICAgUHJpbnQoTCJGTVAgKCVkKSBQYWNrYWdlSW5mbyAtICVyXG4i LCBJbmRleCwgU3RhdHVzKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgUHJpbnQoTCJGTVAg KCVkKSBJbWFnZUluZm86XG4iLCBJbmRleCk7DQo+ICsgICAgICBEdW1wRm1wUGFja2FnZUluZm8o DQo+ICsgICAgICAgIFBhY2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFja2FnZVZlcnNp b24NCj4gKyAgICAgICAgUGFja2FnZVZlcnNpb25OYW1lLCAgICAgICAgICAvLyBQYWNrYWdlVmVy c2lvbk5hbWUNCj4gKyAgICAgICAgUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLCAgICAvLyBQYWNr YWdlVmVyc2lvbk5hbWVNYXhMZW4NCj4gKyAgICAgICAgQXR0cmlidXRlc1N1cHBvcnRlZCwgICAg ICAgICAvLyBBdHRyaWJ1dGVzU3VwcG9ydGVkDQo+ICsgICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5n ICAgICAgICAgICAgLy8gQXR0cmlidXRlc1NldHRpbmcNCj4gKyAgICAgICAgKTsNCj4gKw0KPiAr ICAgICAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAhPSBOVUxMKSB7DQo+ICsgICAgICAgIEZyZWVQ b29sKFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsgIFByaW50KEwiXG4iKTsNCj4gKw0KPiArRVhJVDoNCj4gKyAgRnJlZVBvb2woSGFuZGxlQnVm ZmVyKTsNCj4gK30NCj4gLS0NCj4gMi43LjQud2luZG93cy4xDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCmVk azItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCmh0 dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0K