From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id D62DBC314 for ; Mon, 18 May 2015 15:57:49 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP; 18 May 2015 06:57:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,453,1427785200"; d="scan'208";a="731148036" Received: from pgsmsx102.gar.corp.intel.com ([10.221.44.80]) by orsmga002.jf.intel.com with ESMTP; 18 May 2015 06:57:45 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by PGSMSX102.gar.corp.intel.com (10.221.44.80) with Microsoft SMTP Server (TLS) id 14.3.224.2; Mon, 18 May 2015 21:57:44 +0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.23]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.180]) with mapi id 14.03.0224.002; Mon, 18 May 2015 21:57:43 +0800 From: "Liu, Yong" To: "Jiajia, SunX" , "dts@dpdk.org" Thread-Topic: =?utf-8?B?W2R0c10gW+KAmGR0cy12MeKAmSA0LzldIEFkZCBWTSBjbGFzcyBhbmQgdGhl?= =?utf-8?B?IHZpcnR1YWwgRFVUIGNsYXNzIGFuZCB0aGUgdmlydHVhbCByZXNvdXJjZSBt?= =?utf-8?Q?odule?= Thread-Index: AQHQkSiYJua7hxnOz0C4MX5pzGYdHZ2BVe/A Date: Mon, 18 May 2015 13:57:42 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E10DE4D1B@SHSMSX103.ccr.corp.intel.com> References: <1431925646-1314-1-git-send-email-sunx.jiajia@intel.com> <1431925646-1314-5-git-send-email-sunx.jiajia@intel.com> In-Reply-To: <1431925646-1314-5-git-send-email-sunx.jiajia@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dts] =?utf-8?b?W+KAmGR0cy12MeKAmSA0LzldIEFkZCBWTSBjbGFzcyBhbmQg?= =?utf-8?q?the_virtual_DUT_class_and_the_virtual_resource_module?= X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 May 2015 13:57:53 -0000 SmlhamlhLCBwbGVhc2Ugc2VlIG15IGNvbW1lbnRzIGJlbG93Lg0KVGhpcyBwYXRjaCBpcyBzbyBo dWdlIGFuZCB3aGVuIGVkaXQgdGhpcyBlbWFpbCBzb21ldGltZSBteSBvdXRsb29rIGhhbmcgdXAu IENhbiB5b3Ugc2VwYXJhdGVkIHRoaXMgcGF0Y2ggaW50byB0d28gb3IgdGhyZWUgcGF0Y2hlcz8N Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBkdHMgW21haWx0bzpkdHMt Ym91bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIHNqaWFqaWF4DQo+IFNlbnQ6IE1vbmRheSwg TWF5IDE4LCAyMDE1IDE6MDcgUE0NCj4gVG86IGR0c0BkcGRrLm9yZw0KPiBTdWJqZWN0OiBbZHRz XSBb4oCYZHRzLXYx4oCZIDQvOV0gQWRkIFZNIGNsYXNzIGFuZCB0aGUgdmlydHVhbCBEVVQgY2xh c3MgYW5kDQo+IHRoZSB2aXJ0dWFsIHJlc291cmNlIG1vZHVsZQ0KPiANCj4gU2lnbmVkLW9mZi1i eTogc2ppYWppYXggPHN1bnguamlhamlhQGludGVsLmNvbT4NCj4gLS0tDQo+ICBmcmFtZXdvcmsv cWVtdV9rdm0ucHkgICAgICB8IDkxMg0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gIGZyYW1ld29yay92aXJ0X2Jhc2UucHkgICAgIHwgMjUwICsrKysr KysrKysrKysNCj4gIGZyYW1ld29yay92aXJ0X2R1dC5weSAgICAgIHwgMjM5ICsrKysrKysrKysr Kw0KPiAgZnJhbWV3b3JrL3ZpcnRfcmVzb3VyY2UucHkgfCA0ODYgKysrKysrKysrKysrKysrKysr KysrKysrDQo+ICA0IGZpbGVzIGNoYW5nZWQsIDE4ODcgaW5zZXJ0aW9ucygrKQ0KPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGZyYW1ld29yay9xZW11X2t2bS5weQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGZyYW1ld29yay92aXJ0X2Jhc2UucHkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcmFtZXdvcmsv dmlydF9kdXQucHkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcmFtZXdvcmsvdmlydF9yZXNvdXJj ZS5weQ0KPiANCj4gZGlmZiAtLWdpdCBhL2ZyYW1ld29yay9xZW11X2t2bS5weSBiL2ZyYW1ld29y ay9xZW11X2t2bS5weQ0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi41 ZjVmNjY1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZnJhbWV3b3JrL3FlbXVfa3ZtLnB5DQo+ IEBAIC0wLDAgKzEsOTEyIEBADQo+ICsjIDxDT1BZUklHSFRfVEFHPg0KPiArDQo+ICtpbXBvcnQg dGltZQ0KPiAraW1wb3J0IHJlDQo+ICtpbXBvcnQgb3MNCj4gKw0KPiArZnJvbSB2aXJ0X2Jhc2Ug aW1wb3J0IFZpcnRCYXNlDQo+ICtmcm9tIGV4Y2VwdGlvbiBpbXBvcnQgU3RhcnRWTUZhaWxlZEV4 Y2VwdGlvbg0KPiArDQo+ICsjIFRoaXMgbmFtZSBpcyBkZXJpY3RseSBkZWZpbmVkIGluIHRoZSBx ZW11IGd1ZXN0IHNlcml2Y2UNCj4gKyMgU28geW91IGNhbiBub3QgY2hhbmdlIGl0IGV4Y2VwdCBp dCBpcyBjaGFuZ2VkIGJ5IHRoZSBzZXJ2aWNlDQo+ICtRR0FfREVWX05BTUUgPSAnb3JnLnFlbXUu Z3Vlc3RfYWdlbnQuMCcNCj4gKyMgVGhpcyBwYXRoIGRlZmluZXMgYW4gc29ja2V0IHBhdGggb24g dGhlIGhvc3QgY29ubmVjdGVkIHdpdGgNCj4gKyMgYSBzcGVjaWZpZWQgVk0NCj4gK1FHQV9TT0NL X1BBVEhfVEVNUExBVEUgPSAnL3RtcC8lKHZtX25hbWUpc19xZ2EwLnNvY2snDQo+ICsNCj4gKw0K PiArY2xhc3MgUUVNVUt2bShWaXJ0QmFzZSk6DQo+ICsNCj4gKyAgICBERUZBVUxUX0JSSURHRSA9 ICdicjAnDQo+ICsgICAgUUVNVV9JRlVQID0gIiIiIyEvYmluL3NoDQo+ICsNCj4gK3NldCAteA0K PiArDQo+ICtzd2l0Y2g9JShzd2l0Y2gpcw0KPiArDQo+ICtpZiBbIC1uICIkMSIgXTt0aGVuDQo+ ICsgICAgdHVuY3RsIC10ICQxDQo+ICsgICAgaXAgbGluayBzZXQgJDEgdXANCj4gKyAgICBzbGVl cCAwLjVzDQo+ICsgICAgYnJjdGwgYWRkaWYgJHN3aXRjaCAkMQ0KPiArICAgIGV4aXQgMA0KPiAr ZWxzZQ0KPiArICAgIGVjaG8gIkVycm9yOiBubyBpbnRlcmZhY2Ugc3BlY2lmaWVkIg0KPiArICAg IGV4aXQgMQ0KPiArZmkNCj4gKyIiIg0KDQpJZiB0aGlzIGZpbGUgbm90IGNoYW5nZWQsIGNhbiBi ZSBqdXN0IG1vdmVkIGludG8gZGVwIGZvbGRlci4gVGhpcyB3aWxsIG1ha2UgdGhpcyBtb2R1bGUg bW9yZSBjbGVhci4NCg0KPiArICAgIFFFTVVfSUZVUF9QQVRIID0gJy9ldGMvcWVtdS1pZnVwJw0K PiArDQo+ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGR1dCwgdm1fbmFtZSwgc3VpdGVfbmFtZSk6 DQo+ICsgICAgICAgIHN1cGVyKFFFTVVLdm0sIHNlbGYpLl9faW5pdF9fKGR1dCwgdm1fbmFtZSwg c3VpdGVfbmFtZSkNCkNhbiB3ZSBhdXRvLWRldGVjdGVkIHN1aXRlIG5hbWU/IEluIHRlc3QgY2Fz ZSB3ZSBzaG91bGQgbm90IHVzZSBoYXJkIGNvZGUgc3VpdGUgbmFtZS4gICANCg0KPiArICAgICAg ICBzZWxmLnNldF92bV9uYW1lKHNlbGYudm1fbmFtZSkNCj4gKyAgICAgICAgc2VsZi5zZXRfdm1f ZW5hYmxlX2t2bSgpDQo+ICsgICAgICAgIHNlbGYuc2V0X3ZtX3FnYSgpDQo+ICsgICAgICAgIHNl bGYuc2V0X3ZtX2RhZW1vbigpDQo+ICsNCg0KSXQncyBiZXR0ZXIgdG8gdXNlIG9uZSBmdW5jdGlv biAic2V0X3ZtX2RlZmF1bHQiIHRvIHJlcGxhY2UgdGhlc2UgZnVuY3Rpb25zLg0KDQo+ICsgICAg ICAgICMgaW5pdGlhbGl6ZSBxZW11IGVtdWxhdG9yLCBleGFtcGxlOiBxZW11LXN5c3RlbS14ODZf NjQNCj4gKyAgICAgICAgc2VsZi5xZW11X2VtdWxhdG9yID0gc2VsZi5nZXRfcWVtdV9lbXVsYXRv cigpDQo+ICsNCj4gKyAgICAgICAgIyBpbml0aWFsaXplIHFlbXUgYm9vdCBjb21tYW5kIGxpbmUN Cj4gKyAgICAgICAgIyBleGFtcGxlOiBxZW11LXN5c3RlbS14ODZfNjQgLW5hbWUgdm0xIC1tIDIw NDggLXZuYyA6MSAtDQo+IGRhZW1vbml6ZQ0KPiArICAgICAgICBzZWxmLndob2xlX3FlbXVfa3Zt X2Jvb3RfbGluZSA9ICcnDQo+ICsNCg0KVGhlIG5hbWUgaXMgdG9vIGxvbmcsIHBsZWFzZSBuYXJy b3cgaXQgbGlrZSAic2VsZi5xZW11X2NvbW1tYW5kbGluZSIuIA0KDQo+ICsgICAgICAgIHNlbGYu aW5pdF92bV9yZXF1ZXN0X3Jlc291cmNlKCkNCg0KUGxlYXNlIGFkZCBzb21lIGRlc2NyaXB0aW9u IG9mIHRoaXMgZnVuY3Rpb24uDQo+ICsNCj4gKyAgICAgICAgUUdBX0NMSV9QQVRIID0gJy1yIGRl cC9RTVAvJw0KPiArICAgICAgICBzZWxmLmhvc3Rfc2Vzc2lvbi5jb3B5X2ZpbGVfdG8oUUdBX0NM SV9QQVRIKQ0KPiArDQo+ICsgICAgZGVmIGluaXRfdm1fcmVxdWVzdF9yZXNvdXJjZShzZWxmKToN Cj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGluaXRpYWxpemUgdmNwdXMgd2hhdCB3aWxsIGJl IHBpbm5lZCB0byB0aGUgVk0uDQo+ICsgICAgICAgIElmIHNwZWNpZnkgdGhpcyBwYXJhbSwgdGhl IHNwZWNpZmllZCB2Y3B1cyB3aWxsDQo+ICsgICAgICAgIGJlIHBpbm5lZCB0byBWTSBieSB0aGUg Y29tbWFuZCAndGFza3NldCcgd2hlbg0KPiArICAgICAgICBzdGFydGluZyB0aGUgVk0uDQo+ICsg ICAgICAgIGV4YW1wbGU6DQo+ICsgICAgICAgICAgICB2Y3B1c19waW5uZWRfdG9fdm0gPSAnMSAy IDMgNCcNCj4gKyAgICAgICAgICAgIHRhc2tzZXQgLWMgMSwyLDMsNCBxZW11LWJvb3QtY29tbWFu ZC1saW5lDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBzZWxmLnZjcHVzX3Bpbm5lZF90b192 bSA9ICcnDQo+ICsNCj4gKyAgICAgICAgIyBpbml0aWFsaXplIGFzc2lnbmVkIFBDSQ0KPiArICAg ICAgICBzZWxmLmFzc2lnbmVkX3BjaXMgPSBbXQ0KPiArDQo+ICsgICAgZGVmIGdldF92aXJ0X3R5 cGUoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBHZXQgdGhlIHZpcnR1YWwgdHlw ZS4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIHJldHVybiAnS1ZNJw0KPiArDQo+ICsgICAg ZGVmIGdldF9xZW11X2VtdWxhdG9yKHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAg R2V0IHRoZSBxZW11IGVtdWxhdG9yIGJhc2VkIG9uIHRoZSBjcmIuDQo+ICsgICAgICAgICIiIg0K PiArICAgICAgICBhcmNoID0gc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoJ3VuYW1lIC1t JywgJyMgJykNCj4gKyAgICAgICAgcmV0dXJuICdxZW11LXN5c3RlbS0nICsgYXJjaA0KPiArDQo+ ICsgICAgZGVmIHNldF9xZW11X2VtdWxhdG9yKHNlbGYsIHFlbXVfZW11bGF0b3IpOg0KPiArICAg ICAgICAiIiINCj4gKyAgICAgICAgU2V0IHRoZSBxZW11IGVtdWxhdG9yIGV4cGxpY2l0bHkuDQo+ ICsgICAgICAgICIiIg0KPiArICAgICAgICBvdXQgPSBzZWxmLmhvc3Rfc2Vzc2lvbi5zZW5kX2V4 cGVjdCgNCj4gKyAgICAgICAgICAgICd3aGVyZWlzICVzJyAlIHN0cihxZW11X2VtdWxhdG9yKSwg J1suKicpDQo+ICsgICAgICAgIGNvbW1hbmRfcGF0aHMgPSBvdXQuc3BsaXQoJzonKVsxOl0NCj4g KyAgICAgICAgaWYgY29tbWFuZF9wYXRoc1swXS5sc3RyaXAoKToNCj4gKyAgICAgICAgICAgIHBy aW50ICJObyBlbXVsYXRvciBbICVzIF0gb24gdGhlIERVVCBbICVzIF0iICUgXA0KPiArICAgICAg ICAgICAgICAgIChxZW11X2VtdWxhdG9yLCBzZWxmLmhvc3RfZHV0LmdldF9pcF9hZGRyZXNzKCkp DQo+ICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiArICAgICAgICBzZWxmLnFlbXVfZW11bGF0 b3IgPSBxZW11X2VtdWxhdG9yDQo+ICsNClRoaXMgZnVuY3Rpb24gbm90IGNhbGxlZCBieSBkdHMu IElmIHRoaXMgZnVuY3Rpb24gaXMgZm9yIGV4cGxpY2F0ZWQgcWVtdSBiaW5hcnksIHRoZXJlJ3Mg bm8gbWVhbmluZ2Z1bCB0byB1c2UgIndoZXJlaXMiIGZpbmQgcWVtdS4NCg0KPiArICAgIGRlZiBo YXNfdmlydHVhbF9hYmlsaXR5KHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgQ2hl Y2sgaWYgaG9zdCBoYXMgdGhlIHZpcnR1YWwgYWJpbGl0eS4NCj4gKyAgICAgICAgIiIiDQo+ICsg ICAgICAgIG91dCA9IHNlbGYuaG9zdF9zZXNzaW9uLnNlbmRfZXhwZWN0KCdsc21vZCB8IGdyZXAg a3ZtJywgJyMgJykNCj4gKyAgICAgICAgaWYgJ2t2bScgaW4gb3V0IGFuZCAna3ZtX2ludGVsJyBp biBvdXQ6DQo+ICsgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KPiArICAgICAgICBlbHNlOg0KPiAr ICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQo+ICsNCg0KV2Ugc2hvdWxkIGFsc28gY2hlY2sgd2hl dGhlciAidm14IiBzdXBwb3J0ZWQgaW4gY3B1aW5mby4NCg0KPiArICAgIGRlZiBlbmFibGVfdmly dHVhbF9hYmlsaXR5KHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgTG9hZCB0aGUg dmlydXRhbCBtb2R1bGUgb2Yga2VybmVsIHRvIGVuYWJsZSB0aGUgdmlydXRhbCBhYmlsaXR5Lg0K PiArICAgICAgICAiIiINCj4gKyAgICAgICAgc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3Qo J21vZHByb2JlIGt2bScsICcjICcpDQo+ICsgICAgICAgIHNlbGYuaG9zdF9zZXNzaW9uLnNlbmRf ZXhwZWN0KCdtb2Rwcm9iZSBrdm1faW50ZWwnLCAnIyAnKQ0KPiArICAgICAgICByZXR1cm4gVHJ1 ZQ0KPiArDQo+ICsgICAgZGVmIGRpc2tfaW1hZ2VfaXNfb2soc2VsZiwgaW1hZ2UpOg0KPiArICAg ICAgICAiIiINCj4gKyAgICAgICAgQ2hlY2sgaWYgdGhlIGltYWdlIGlzIE9LIGFuZCBubyBlcnJv ci4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIHBhc3MNCj4gKw0KPiArICAgIGRlZiBpbWFn ZV9pc191c2VkKHNlbGYsIGltYWdlX3BhdGgpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAg Q2hlY2sgaWYgdGhlIGltYWdlIGhhcyBiZWVuIHVzZWQgb24gdGhlIGhvc3QuDQo+ICsgICAgICAg ICIiIg0KPiArICAgICAgICBxZW11X2NtZF9saW5lcyA9IHNlbGYuaG9zdF9zZXNzaW9uLnNlbmRf ZXhwZWN0KA0KPiArICAgICAgICAgICAgInBzIGF1eCB8IGdyZXAgcWVtdSB8IGdyZXAgLXYgZ3Jl cCIsICIjICIpDQo+ICsNCj4gKyAgICAgICAgaW1hZ2VfbmFtZV9mbGFnID0gJy8nICsgaW1hZ2Vf cGF0aC5zdHJpcCgpLnNwbGl0KCcvJylbLTFdICsgJyAnDQo+ICsgICAgICAgIGlmIGltYWdlX3Bh dGggaW4gcWVtdV9jbWRfbGluZXMgb3IgXA0KPiArICAgICAgICAgICAgICAgIGltYWdlX25hbWVf ZmxhZyBpbiBxZW11X2NtZF9saW5lczoNCj4gKyAgICAgICAgICAgIHJldHVybiBUcnVlDQo+ICsg ICAgICAgIHJldHVybiBGYWxzZQ0KPiArDQo+ICsgICAgZGVmIF9fYWRkX2Jvb3RfbGluZShzZWxm LCBvcHRpb25fYm9vdF9saW5lKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIEFkZCBib290 IG9wdGlvbiBpbnRvIHRoZSBib290IGxpbmUuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBz ZXBhcmF0b3IgPSAnICcNCj4gKyAgICAgICAgc2VsZi53aG9sZV9xZW11X2t2bV9ib290X2xpbmUg Kz0gc2VwYXJhdG9yICsgb3B0aW9uX2Jvb3RfbGluZQ0KPiArDQo+ICsgICAgZGVmIHNldF92bV9l bmFibGVfa3ZtKHNlbGYsIGVuYWJsZT0neWVzJyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAg ICBTZXQgVk0gYm9vdCBvcHRpb24gdG8gZW5hYmxlIHRoZSBvcHRpb24gJ2VuYWJsZS1rdm0nLg0K PiArICAgICAgICAiIiINCj4gKyAgICAgICAgc2VsZi5wYXJhbXMuYXBwZW5kKHsnZW5hYmxlX2t2 bSc6IFt7J2VuYWJsZSc6ICclcycgJSBlbmFibGV9XX0pDQo+ICsNCj4gKyAgICBkZWYgYWRkX3Zt X2VuYWJsZV9rdm0oc2VsZiwgKipvcHRpb25zKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAg ICdlbmFibGUnOiAneWVzJw0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgaWYgJ2VuYWJsZScg aW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydlbmFi bGUnXSA9PSAneWVzJzoNCj4gKyAgICAgICAgICAgIGVuYWJsZV9rdm1fYm9vdF9saW5lID0gJy1l bmFibGUta3ZtJw0KPiArICAgICAgICAgICAgc2VsZi5fX2FkZF9ib290X2xpbmUoZW5hYmxlX2t2 bV9ib290X2xpbmUpDQo+ICsNCj4gKyAgICBkZWYgc2V0X3ZtX25hbWUoc2VsZiwgdm1fbmFtZSk6 DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBTZXQgVk0gbmFtZS4NCj4gKyAgICAgICAgIiIi DQo+ICsgICAgICAgIHNlbGYucGFyYW1zLmFwcGVuZCh7J25hbWUnOiBbeyduYW1lJzogJyVzJyAl IHZtX25hbWV9XX0pDQo+ICsNCj4gKyAgICBkZWYgYWRkX3ZtX25hbWUoc2VsZiwgKipvcHRpb25z KToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIG5hbWU6IHZtMQ0KPiArICAgICAgICAiIiIN Cj4gKyAgICAgICAgaWYgJ25hbWUnIGluIG9wdGlvbnMua2V5cygpIGFuZCBcDQo+ICsgICAgICAg ICAgICAgICAgb3B0aW9uc1snbmFtZSddOg0KPiArICAgICAgICAgICAgbmFtZV9ib290X2xpbmUg PSAnLW5hbWUgJXMnICUgb3B0aW9uc1snbmFtZSddDQo+ICsgICAgICAgICAgICBzZWxmLl9fYWRk X2Jvb3RfbGluZShuYW1lX2Jvb3RfbGluZSkNCj4gKw0KPiArICAgIGRlZiBhZGRfdm1fY3B1KHNl bGYsICoqb3B0aW9ucyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBtb2RlbDogW2hvc3Qg fCBjb3JlMmR1byB8IC4uLl0NCj4gKyAgICAgICAgICAgICAgIHVzYWdlOg0KPiArICAgICAgICAg ICAgICAgICAgICBjaG9vc2UgbW9kZWwgdmFsdWUgZnJvbSB0aGUgY29tbWFuZA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgcWVtdS1zeXN0ZW0teDg2XzY0IC1jcHUgaGVscA0KPiArICAgICAg ICBudW1iZXI6ICc0JyAjbnVtYmVyIG9mIHZjcHVzDQo+ICsgICAgICAgIGNwdXBpbjogJzMgNCA1 IDYnICMgaG9zdCBjcHUgbGlzdA0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgaWYgJ21vZGVs JyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0KPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ21v ZGVsJ106DQo+ICsgICAgICAgICAgICBjcHVfYm9vdF9saW5lID0gJy1jcHUgJXMnICUgb3B0aW9u c1snbW9kZWwnXQ0KPiArICAgICAgICAgICAgc2VsZi5fX2FkZF9ib290X2xpbmUoY3B1X2Jvb3Rf bGluZSkNCj4gKyAgICAgICAgaWYgJ251bWJlcicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4g KyAgICAgICAgICAgICAgICBvcHRpb25zWydudW1iZXInXToNCj4gKyAgICAgICAgICAgIHNtcF9j bWRfbGluZSA9ICctc21wICVkJyAlIGludChvcHRpb25zWydudW1iZXInXSkNCj4gKyAgICAgICAg ICAgIHNlbGYuX19hZGRfYm9vdF9saW5lKHNtcF9jbWRfbGluZSkNCj4gKyAgICAgICAgaWYgJ2Nw dXBpbicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gKyAgICAgICAgICAgICAgICBvcHRpb25z WydjcHVwaW4nXToNCj4gKyAgICAgICAgICAgIHNlbGYudmNwdXNfcGlubmVkX3RvX3ZtID0gc3Ry KG9wdGlvbnNbJ2NwdXBpbiddKQ0KPiArDQo+ICsgICAgZGVmIGFkZF92bV9tZW0oc2VsZiwgKipv cHRpb25zKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIHNpemU6IDEwMjQNCj4gKyAgICAg ICAgIiIiDQo+ICsgICAgICAgIGlmICdzaXplJyBpbiBvcHRpb25zLmtleXMoKToNCj4gKyAgICAg ICAgICAgIG1lbV9ib290X2xpbmUgPSAnLW0gJXMnICUgb3B0aW9uc1snc2l6ZSddDQo+ICsgICAg ICAgICAgICBzZWxmLl9fYWRkX2Jvb3RfbGluZShtZW1fYm9vdF9saW5lKQ0KPiArDQo+ICsgICAg ZGVmIGFkZF92bV9kaXNrKHNlbGYsICoqb3B0aW9ucyk6DQo+ICsgICAgICAgICIiIg0KPiArICAg ICAgICBmaWxlOiAvaG9tZS9pbWFnZS90ZXN0LmltZw0KPiArICAgICAgICAiIiINCj4gKyAgICAg ICAgaWYgJ2ZpbGUnIGluIG9wdGlvbnMua2V5cygpOg0KPiArICAgICAgICAgICAgZGlza19ib290 X2xpbmUgPSAnLWRyaXZlIGZpbGU9JXMnICUgb3B0aW9uc1snZmlsZSddDQo+ICsgICAgICAgICAg ICBzZWxmLl9fYWRkX2Jvb3RfbGluZShkaXNrX2Jvb3RfbGluZSkNCj4gKw0KPiArICAgIGRlZiBh ZGRfdm1fbmV0KHNlbGYsICoqb3B0aW9ucyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBB ZGQgVk0gbmV0IGRldmljZS4NCj4gKyAgICAgICAgdHlwZTogW25pYyB8IHVzZXIgfCB0YXAgfCBi cmlkZ2UgfCAuLi5dDQo+ICsgICAgICAgIG9wdF9bdmxhbiB8IGZkIHwgYnIgfCBtYWMgfCAuLi5d DQo+ICsgICAgICAgICAgICBub3RlOnRoZSBzdWItb3B0aW9uIHdpbGwgYmUgZGVjaWRlZCBhY2Nv cmRpbmcgdG8gdGhlIG5ldCB0eXBlLg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgaWYgJ3R5 cGUnIGluIG9wdGlvbnMua2V5cygpOg0KPiArICAgICAgICAgICAgaWYgJ29wdF92bGFuJyBub3Qg aW4gb3B0aW9ucy5rZXlzKCk6DQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0X3ZsYW4n XSA9ICcwJw0KPiArICAgICAgICAgICAgaWYgb3B0aW9uc1sndHlwZSddID09ICduaWMnOg0KPiAr ICAgICAgICAgICAgICAgIHNlbGYuX19hZGRfdm1fbmV0X25pYygqKm9wdGlvbnMpDQo+ICsgICAg ICAgICAgICBpZiBvcHRpb25zWyd0eXBlJ10gPT0gJ3VzZXInOg0KPiArICAgICAgICAgICAgICAg IHNlbGYuX19hZGRfdm1fbmV0X3VzZXIoKipvcHRpb25zKQ0KPiArICAgICAgICAgICAgaWYgb3B0 aW9uc1sndHlwZSddID09ICd0YXAnOg0KPiArICAgICAgICAgICAgICAgIHNlbGYuX19hZGRfdm1f bmV0X3RhcCgqKm9wdGlvbnMpDQo+ICsNCj4gKyAgICAgICAgICAgIGlmIG9wdGlvbnNbJ3R5cGUn XSA9PSAndXNlcic6DQo+ICsgICAgICAgICAgICAgICAgc2VsZi5uZXRfdHlwZSA9ICdob3N0Zndk Jw0KPiArICAgICAgICAgICAgZWxpZiBvcHRpb25zWyd0eXBlJ10gaW4gWyd0YXAnLCAnYnJpZGdl J106DQo+ICsgICAgICAgICAgICAgICAgc2VsZi5uZXRfdHlwZSA9ICdicmlkZ2UnDQo+ICsNCg0K RWxlbWVudCAibmV0X3R5cGUiIG5vdCB1c2VkLCB3aHkgYWRkIHRoaXMgaGVyZT8NCg0KPiArICAg IGRlZiBfX2FkZF92bV9uZXRfbmljKHNlbGYsICoqb3B0aW9ucyk6DQo+ICsgICAgICAgICIiIg0K PiArICAgICAgICB0eXBlOiBuaWMNCj4gKyAgICAgICAgb3B0X3ZsYW46IDANCj4gKyAgICAgICAg ICAgIG5vdGU6IERlZmF1bHQgaXMgMC4NCj4gKyAgICAgICAgb3B0X21hY2FkZHI6IDAwOjAwOjAw OjAwOjAxOjAxDQo+ICsgICAgICAgICAgICBub3RlOiBpZiBjcmVhdGluZyBhIG5pYywgaXRgcyBi ZXR0ZXIgdG8gc3BlY2lmeSBhIE1BQywNCj4gKyAgICAgICAgICAgICAgICAgIGVsc2UgaXQgd2ls bCBnZXQgYSByYW5kb20gbnVtYmVyLg0KPiArICAgICAgICBvcHRfbW9kZWw6WyJlMTAwMCIgfCAi dmlydGlvIiB8ICJpODI1NTEiIHwgLi4uXQ0KPiArICAgICAgICAgICAgbm90ZTogRGVmYXVsdCBp cyBlMTAwMC4NCj4gKyAgICAgICAgb3B0X25hbWU6ICduaWMxJw0KPiArICAgICAgICBvcHRfYWRk cjogJycNCj4gKyAgICAgICAgICAgIG5vdGU6IFBDSSBjYXJkcyBvbmx5Lg0KPiArICAgICAgICBv cHRfdmVjdG9yczoNCj4gKyAgICAgICAgICAgIG5vdGU6IFRoaXMgb3B0aW9uIGN1cnJlbnRseSBv bmx5IGFmZmVjdHMgdmlydGlvIGNhcmRzLg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgbmV0 X2Jvb3RfbGluZSA9ICctbmV0IG5pYycNCj4gKyAgICAgICAgc2VwYXJhdG9yID0gJywnDQo+ICsg ICAgICAgIGlmICdvcHRfdmxhbicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gKyAgICAgICAg ICAgICAgICBvcHRpb25zWydvcHRfdmxhbiddOg0KPiArICAgICAgICAgICAgbmV0X2Jvb3RfbGlu ZSArPSBzZXBhcmF0b3IgKyAndmxhbj0lcycgJSBvcHRpb25zWydvcHRfdmxhbiddDQo+ICsNCj4g KyAgICAgICAgIyBhZGQgTUFDIGluZm8NCj4gKyAgICAgICAgaWYgJ29wdF9tYWNhZGRyJyBpbiBv cHRpb25zLmtleXMoKSBhbmQgXA0KPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ29wdF9tYWNh ZGRyJ106DQo+ICsgICAgICAgICAgICBtYWMgPSBvcHRpb25zWydvcHRfbWFjYWRkciddDQo+ICsg ICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICBtYWMgPSBzZWxmLmdlbmVyYXRlX3VuaXF1ZV9t YWMoKQ0KPiArICAgICAgICBuZXRfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICdtYWNhZGRyPSVz JyAlIG1hYw0KPiArDQo+ICsgICAgICAgIGlmICdvcHRfbW9kZWwnIGluIG9wdGlvbnMua2V5cygp IGFuZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0X21vZGVsJ106DQo+ICsgICAg ICAgICAgICBuZXRfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICdtb2RlbD0lcycgJSBvcHRpb25z WydvcHRfbW9kZWwnXQ0KPiArICAgICAgICBpZiAnb3B0X25hbWUnIGluIG9wdGlvbnMua2V5cygp IGFuZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0X25hbWUnXToNCj4gKyAgICAg ICAgICAgIG5ldF9ib290X2xpbmUgKz0gc2VwYXJhdG9yICsgJ25hbWU9JXMnICUgb3B0aW9uc1sn b3B0X25hbWUnXQ0KPiArICAgICAgICBpZiAnb3B0X2FkZHInIGluIG9wdGlvbnMua2V5cygpIGFu ZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0X2FkZHInXToNCj4gKyAgICAgICAg ICAgIG5ldF9ib290X2xpbmUgKz0gc2VwYXJhdG9yICsgJ2FkZHI9JXMnICUgb3B0aW9uc1snb3B0 X2FkZHInXQ0KPiArICAgICAgICBpZiAnb3B0X3ZlY3RvcnMnIGluIG9wdGlvbnMua2V5cygpIGFu ZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0X3ZlY3RvcnMnXToNCj4gKyAgICAg ICAgICAgIG5ldF9ib290X2xpbmUgKz0gc2VwYXJhdG9yICsgJ3ZlY3RvcnM9JXMnICUNCj4gb3B0 aW9uc1snb3B0X3ZlY3RvcnMnXQ0KPiArDQo+ICsgICAgICAgIGlmIHNlbGYuX19zdHJpbmdfaGFz X211bHRpX2ZpZWxkcyhuZXRfYm9vdF9saW5lLCBzZXBhcmF0b3IpOg0KPiArICAgICAgICAgICAg c2VsZi5fX2FkZF9ib290X2xpbmUobmV0X2Jvb3RfbGluZSkNCj4gKw0KPiArICAgIGRlZiBfX2Fk ZF92bV9uZXRfdXNlcihzZWxmLCAqKm9wdGlvbnMpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAg ICAgdHlwZTogdXNlcg0KPiArICAgICAgICBvcHRfdmxhbjogMA0KPiArICAgICAgICAgICAgbm90 ZTogZGVmYXVsdCBpcyAwLg0KPiArICAgICAgICBvcHRfaG9zdGZ3ZDogW3RjcHx1ZHBdOltob3N0 YWRkcl06aG9zdHBvcnQtW2d1ZXN0YWRkcl06Z3Vlc3Rwb3J0DQo+ICsgICAgICAgICIiIg0KPiAr ICAgICAgICBuZXRfYm9vdF9saW5lID0gJy1uZXQgdXNlcicNCj4gKyAgICAgICAgc2VwYXJhdG9y ID0gJywnDQo+ICsgICAgICAgIGlmICdvcHRfdmxhbicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwN Cj4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfdmxhbiddOg0KPiArICAgICAgICAgICAg bmV0X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyAndmxhbj0lcycgJSBvcHRpb25zWydvcHRfdmxh biddDQo+ICsgICAgICAgIGlmICdvcHRfaG9zdGZ3ZCcgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwN Cj4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfaG9zdGZ3ZCddOg0KPiArICAgICAgICAg ICAgc2VsZi5fX2NoZWNrX25ldF91c2VyX29wdF9ob3N0ZndkKG9wdGlvbnNbJ29wdF9ob3N0Zndk J10pDQo+ICsgICAgICAgICAgICBvcHRfaG9zdGZ3ZCA9IG9wdGlvbnNbJ29wdF9ob3N0ZndkJ10N Cj4gKyAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgIG9wdF9ob3N0ZndkID0gJzo6LTonDQo+ ICsgICAgICAgIGhvc3Rmd2RfbGluZSA9IHNlbGYuX19wYXJzZV9uZXRfdXNlcl9vcHRfaG9zdGZ3 ZChvcHRfaG9zdGZ3ZCkNCj4gKyAgICAgICAgbmV0X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyAn aG9zdGZ3ZD0lcycgJSBob3N0ZndkX2xpbmUNCj4gKw0KPiArICAgICAgICBpZiBzZWxmLl9fc3Ry aW5nX2hhc19tdWx0aV9maWVsZHMobmV0X2Jvb3RfbGluZSwgc2VwYXJhdG9yKToNCj4gKyAgICAg ICAgICAgIHNlbGYuX19hZGRfYm9vdF9saW5lKG5ldF9ib290X2xpbmUpDQo+ICsNCj4gKyAgICBk ZWYgX19jaGVja19uZXRfdXNlcl9vcHRfaG9zdGZ3ZChzZWxmLCBvcHRfaG9zdGZ3ZCk6DQo+ICsg ICAgICAgICIiIg0KPiArICAgICAgICBVc2UgcmVndWxhciBleHByZXNzaW9uIHRvIGNoZWNrIGlm IGhvc3Rmd2QgdmFsdWUgZm9ybWF0IGlzDQo+IGNvcnJlY3QuDQo+ICsgICAgICAgICIiIg0KPiAr ICAgICAgICByZWd4X2lwID0gJ1xkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30nDQo+ ICsgICAgICAgIHJlZ3hfaG9zdGZ3ZCA9IHInWyJ0Y3AiIHwgInVkcCJdPzolcz86XGQrLSVzPzpc ZCsnICUgKHJlZ3hfaXAsDQo+IHJlZ3hfaXApDQo+ICsgICAgICAgIGlmIG5vdCByZS5tYXRjaChy ZWd4X2hvc3Rmd2QsIG9wdF9ob3N0ZndkKToNCj4gKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv bigiT3B0aW9uIG9wdF9ob3N0ZndkIGZvcm1hdCBpcyBub3QgY29ycmVjdCxcbiINCj4gKw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBpcyAlcyxcbiAiICUgb3B0X2hvc3Rmd2Qg Kw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGQgYmUgW3RjcHx1ZHBd Oltob3N0YWRkcl06aG9zdHBvcnQtIg0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIltndWVzdGFkZHJdOmd1ZXN0cG9ydC5cbiIpDQo+ICsNCj4gKyAgICBkZWYgX19wYXJzZV9u ZXRfdXNlcl9vcHRfaG9zdGZ3ZChzZWxmLCBvcHRfaG9zdGZ3ZCk6DQo+ICsgICAgICAgICIiIg0K PiArICAgICAgICBQYXJzZSB0aGUgYm9vdCBvcHRpb24gJ2hvc3Rmd2QnLg0KPiArICAgICAgICAi IiINCj4gKyAgICAgICAgc2VwYXJhdG9yID0gJzonDQo+ICsgICAgICAgIGZpZWxkID0gbGFtYmRh IG9wdGlvbiwgaW5kZXgsIHNlcGFyYXRvcj0nOic6IFwNCj4gKyAgICAgICAgICAgIG9wdGlvbi5z cGxpdChzZXBhcmF0b3IpW2luZGV4XQ0KPiArDQo+ICsgICAgICAgICMgZ2V0IHRoZSBmb3J3b3Jk IHR5cGUNCj4gKyAgICAgICAgZndkX3R5cGUgPSBmaWVsZChvcHRfaG9zdGZ3ZCwgMCkNCj4gKyAg ICAgICAgaWYgbm90IGZ3ZF90eXBlOg0KPiArICAgICAgICAgICAgZndkX3R5cGUgPSAndGNwJw0K PiArDQo+ICsgICAgICAgICMgZ2V0IHRoZSBob3N0IGFkZHINCj4gKyAgICAgICAgaG9zdF9hZGRy ID0gZmllbGQob3B0X2hvc3Rmd2QsIDEpDQo+ICsgICAgICAgIGlmIG5vdCBob3N0X2FkZHI6DQo+ ICsgICAgICAgICAgICBob3N0X2FkZHIgPSBzdHIoc2VsZi5ob3N0X2R1dC5nZXRfaXBfYWRkcmVz cygpKQ0KPiArDQo+ICsgICAgICAgICMgZ2V0IHRoZSBob3N0IHBvcnQgaW4gdGhlIG9wdGlvbg0K PiArICAgICAgICBob3N0X3BvcnQgPSBmaWVsZChvcHRfaG9zdGZ3ZCwgMikuc3BsaXQoJy0nKVsw XQ0KPiArICAgICAgICBpZiBub3QgaG9zdF9wb3J0Og0KPiArICAgICAgICAgICAgaG9zdF9wb3J0 ID0gc3RyKHNlbGYudmlydF9wb29sLmFsbG9jX3BvcnQoc2VsZi52bV9uYW1lKSkNCj4gKyAgICAg ICAgc2VsZi5yZWRpcl9wb3J0ID0gaG9zdF9wb3J0DQo+ICsNCj4gKyAgICAgICAgIyBnZXQgdGhl IGd1ZXN0IGFkZHINCj4gKyAgICAgICAgdHJ5Og0KPiArICAgICAgICAgICAgZ3Vlc3RfYWRkciA9 IHN0cihmaWVsZChvcHRfaG9zdGZ3ZCwgMikuc3BsaXQoJy0nKVsxXSkNCj4gKyAgICAgICAgZXhj ZXB0IEluZGV4RXJyb3IgYXMgZToNCj4gKyAgICAgICAgICAgIGd1ZXN0X2FkZHIgPSAnJw0KPiAr DQo+ICsgICAgICAgICMgZ2V0IHRoZSBndWVzdCBwb3J0IGluIHRoZSBvcHRpb24NCj4gKyAgICAg ICAgZ3Vlc3RfcG9ydCA9IHN0cihmaWVsZChvcHRfaG9zdGZ3ZCwgMykpDQo+ICsgICAgICAgIGlm IG5vdCBndWVzdF9wb3J0Og0KPiArICAgICAgICAgICAgZ3Vlc3RfcG9ydCA9ICcyMicNCj4gKw0K PiArICAgICAgICBob3N0ZndkX2xpbmUgPSBmd2RfdHlwZSArIHNlcGFyYXRvciArIFwNCj4gKyAg ICAgICAgICAgIGhvc3RfYWRkciArIHNlcGFyYXRvciArIFwNCj4gKyAgICAgICAgICAgIGhvc3Rf cG9ydCArIFwNCj4gKyAgICAgICAgICAgICctJyArIFwNCj4gKyAgICAgICAgICAgIGd1ZXN0X2Fk ZHIgKyBzZXBhcmF0b3IgKyBcDQo+ICsgICAgICAgICAgICBndWVzdF9wb3J0DQo+ICsNCj4gKyAg ICAgICAgIyBpbml0IHRoZSByZWRpcmVjdCBpbmNvbWluZyBUQ1Agb3IgVURQIGNvbm5lY3Rpb25z DQo+ICsgICAgICAgICMganVzdCBjb21iaW5lIGhvc3QgYWRkcmVzcyBhbmQgaG9zdCBwb3J0LCBp dCBpcyBlbm91Z2gNCj4gKyAgICAgICAgIyBmb3IgdXNpbmcgc3NoIHRvIGNvbm5lY3Qgd2l0aCBW TQ0KPiArICAgICAgICBzZWxmLmhvc3Rmd2RfYWRkciA9IGhvc3RfYWRkciArIHNlcGFyYXRvciAr IGhvc3RfcG9ydA0KPiArDQo+ICsgICAgICAgIHJldHVybiBob3N0ZndkX2xpbmUNCj4gKw0KPiAr ICAgIGRlZiBfX2FkZF92bV9uZXRfdGFwKHNlbGYsICoqb3B0aW9ucyk6DQo+ICsgICAgICAgICIi Ig0KPiArICAgICAgICB0eXBlOiB0YXANCj4gKyAgICAgICAgb3B0X3ZsYW46IDANCj4gKyAgICAg ICAgICAgIG5vdGU6IGRlZmF1bHQgaXMgMC4NCj4gKyAgICAgICAgb3B0X2JyOiBicjANCj4gKyAg ICAgICAgICAgIG5vdGU6IGlmIGNob29zaW5nIHRhcCwgbmVlZCB0byBzcGVjaWZ5IGJyaWRnZSBu YW1lLA0KPiArICAgICAgICAgICAgICAgICAgZWxzZSBpdCB3aWxsIGJlIGJyMC4NCj4gKyAgICAg ICAgb3B0X3NjcmlwdDogUUVNVV9JRlVQX1BBVEgNCj4gKyAgICAgICAgICAgIG5vdGU6IGlmIG5v dCBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgc2VsZi5RRU1VX0lGVVBfUEFUSC4NCj4gKyAgICAgICAg b3B0X2Rvd25zY3JpcHQ6IFFFTVVfSUZET1dOX1BBVEgNCj4gKyAgICAgICAgICAgIG5vdGU6IGlm IG5vdCBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgc2VsZi5RRU1VX0lGRE9XTl9QQVRILg0KPiArICAg ICAgICAiIiINCj4gKyAgICAgICAgbmV0X2Jvb3RfbGluZSA9ICctbmV0IHRhcCcNCj4gKyAgICAg ICAgc2VwYXJhdG9yID0gJywnDQo+ICsNCj4gKyAgICAgICAgIyBhZGQgYnJpZGdlIGluZm8NCj4g KyAgICAgICAgaWYgJ29wdF9icicgaW4gb3B0aW9ucy5rZXlzKCkgYW5kIFwNCj4gKyAgICAgICAg ICAgICAgICBvcHRpb25zWydvcHRfYnInXToNCj4gKyAgICAgICAgICAgIGJyaWRnZSA9IG9wdGlv bnNbJ29wdF9iciddDQo+ICsgICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICBicmlkZ2UgPSBz ZWxmLkRFRkFVTFRfQlJJREdFDQo+ICsgICAgICAgIHNlbGYuX19nZW5lcmF0ZV9uZXRfY29uZmln X3NjcmlwdChzdHIoYnJpZGdlKSkNCj4gKw0KPiArICAgICAgICBpZiAnb3B0X3ZsYW4nIGluIG9w dGlvbnMua2V5cygpIGFuZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snb3B0X3ZsYW4n XToNCj4gKyAgICAgICAgICAgIG5ldF9ib290X2xpbmUgKz0gc2VwYXJhdG9yICsgJ3ZsYW49JXMn ICUgb3B0aW9uc1snb3B0X3ZsYW4nXQ0KPiArDQo+ICsgICAgICAgICMgYWRkIG5ldHdvcmsgY29u ZmlndXJlIHNjcmlwdCBwYXRoDQo+ICsgICAgICAgIGlmICdvcHRfc2NyaXB0JyBpbiBvcHRpb25z LmtleXMoKSBhbmQgXA0KPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ29wdF9zY3JpcHQnXToN Cj4gKyAgICAgICAgICAgIHNjcmlwdF9wYXRoID0gb3B0aW9uc1snb3B0X3NjcmlwdCddDQo+ICsg ICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICBzY3JpcHRfcGF0aCA9IHNlbGYuUUVNVV9JRlVQ X1BBVEgNCj4gKyAgICAgICAgbmV0X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyAnc2NyaXB0PSVz JyAlIHNjcmlwdF9wYXRoDQo+ICsNCj4gKyAgICAgICAgIyBhZGQgbmV0d29yayBjb25maWd1cmUg ZG93bnNjcmlwdCBwYXRoDQo+ICsgICAgICAgIGlmICdvcHRfZG93bnNjcmlwdCcgaW4gb3B0aW9u cy5rZXlzKCkgYW5kIFwNCj4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydvcHRfZG93bnNjcmlw dCddOg0KPiArICAgICAgICAgICAgbmV0X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyBcDQo+ICsg ICAgICAgICAgICAgICAgJ2Rvd25zY3JpcHQ9JXMnICUgb3B0aW9uc1snb3B0X2Rvd25zY3JpcHQn XQ0KPiArDQo+ICsgICAgICAgIGlmIHNlbGYuX19zdHJpbmdfaGFzX211bHRpX2ZpZWxkcyhuZXRf Ym9vdF9saW5lLCBzZXBhcmF0b3IpOg0KPiArICAgICAgICAgICAgc2VsZi5fX2FkZF9ib290X2xp bmUobmV0X2Jvb3RfbGluZSkNCj4gKw0KPiArICAgIGRlZiBfX2dlbmVyYXRlX25ldF9jb25maWdf c2NyaXB0KHNlbGYsIHN3aXRjaD1ERUZBVUxUX0JSSURHRSk6DQo+ICsgICAgICAgICIiIg0KPiAr ICAgICAgICBHZW5lcmF0ZSBhIHNjcmlwdCBmb3IgcWVtdSBlbXVsYXRvciB0byBidWlsZCBhIHRh cCBkZXZpY2UNCj4gKyAgICAgICAgYmV0d2VlbiBob3N0IGFuZCBndWVzdC4NCj4gKyAgICAgICAg IiIiDQo+ICsgICAgICAgIHFlbXVfaWZ1cCA9IHNlbGYuUUVNVV9JRlVQICUgeydzd2l0Y2gnOiBz d2l0Y2h9DQo+ICsgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5RRU1V X0lGVVBfUEFUSCkNCj4gKyAgICAgICAgdG1wX2ZpbGVfcGF0aCA9ICcvdG1wLyVzJyAlIGZpbGVf bmFtZQ0KPiArICAgICAgICBzZWxmLmhvc3RfZHV0LmNyZWF0ZV9maWxlKHFlbXVfaWZ1cCwgdG1w X2ZpbGVfcGF0aCkNCj4gKyAgICAgICAgc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoJ212 IC1mIH4vJXMgJXMnICUgKGZpbGVfbmFtZSwNCj4gKw0KPiBzZWxmLlFFTVVfSUZVUF9QQVRIKSwg JyMgJykNCj4gKyAgICAgICAgc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoDQo+ICsgICAg ICAgICAgICAnY2htb2QgK3ggJXMnICUgc2VsZi5RRU1VX0lGVVBfUEFUSCwgJyMgJykNCj4gKw0K PiArICAgIGRlZiBzZXRfdm1fZGV2aWNlKHNlbGYsIGRyaXZlcj0ncGNpLWFzc2lnbicsICoqcHJv cHMpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU2V0IFZNIGRldmljZSB3aXRoIHNwZWNp ZmllZCBkcml2ZXIuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBwcm9wc1snZHJpdmVyJ10g PSBkcml2ZXINCj4gKyAgICAgICAgaW5kZXggPSBzZWxmLmZpbmRfb3B0aW9uX2luZGV4KCdkZXZp Y2UnKQ0KPiArICAgICAgICBpZiBpbmRleDoNCj4gKyAgICAgICAgICAgIHNlbGYucGFyYW1zW2lu ZGV4XVsnZGV2aWNlJ10uYXBwZW5kKHByb3BzKQ0KPiArICAgICAgICBlbHNlOg0KPiArICAgICAg ICAgICAgc2VsZi5wYXJhbXMuYXBwZW5kKHsnZGV2aWNlJzogW3Byb3BzXX0pDQo+ICsNCj4gKyAg ICBkZWYgYWRkX3ZtX2RldmljZShzZWxmLCAqKm9wdGlvbnMpOg0KPiArICAgICAgICAiIiINCj4g KyAgICAgICAgZHJpdmVyOiBbcGNpLWFzc2lnbiB8IHZpcnRpby1uZXQtcGNpIHwgLi4uXQ0KPiAr ICAgICAgICBwcm9wX1tob3N0IHwgYWRkciB8IC4uLl06IHZhbHVlDQo+ICsgICAgICAgICAgICBu b3RlOnRoZSBzdWItcHJvcGVydHkgd2lsbCBiZSBkZWNpZGVkIGFjY29yZGluZyB0byB0aGUgZHJp dmVyLg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgaWYgJ2RyaXZlcicgaW4gb3B0aW9ucy5r ZXlzKCkgYW5kIFwNCj4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydkcml2ZXInXToNCj4gKyAg ICAgICAgICAgIGlmIG9wdGlvbnNbJ2RyaXZlciddID09ICdwY2ktYXNzaWduJzoNCj4gKyAgICAg ICAgICAgICAgICBzZWxmLl9fYWRkX3ZtX3BjaV9hc3NpZ24oKipvcHRpb25zKQ0KPiArICAgICAg ICAgICAgZWxpZiBvcHRpb25zWydkcml2ZXInXSA9PSAndmlydGlvLW5ldC1wY2knOg0KPiArICAg ICAgICAgICAgICAgIHNlbGYuX19hZGRfdm1fdmlydGlvX25ldF9wY2koKipvcHRpb25zKQ0KPiAr DQo+ICsgICAgZGVmIF9fYWRkX3ZtX3BjaV9hc3NpZ24oc2VsZiwgKipvcHRpb25zKToNCj4gKyAg ICAgICAgIiIiDQo+ICsgICAgICAgIGRyaXZlcjogcGNpLWFzc2lnbg0KPiArICAgICAgICBwcm9w X2hvc3Q6IDA4OjAwLjANCj4gKyAgICAgICAgcHJvcF9hZGRyOiAwMDowMDowMDowMDowMTowMg0K PiArICAgICAgICAiIiINCj4gKyAgICAgICAgZGV2X2Jvb3RfbGluZSA9ICctZGV2aWNlIHBjaS1h c3NpZ24nDQo+ICsgICAgICAgIHNlcGFyYXRvciA9ICcsJw0KPiArICAgICAgICBpZiAncHJvcF9o b3N0JyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0KPiArICAgICAgICAgICAgICAgIG9wdGlvbnNb J3Byb3BfaG9zdCddOg0KPiArICAgICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBhcmF0b3Ig KyAnaG9zdD0lcycgJSBvcHRpb25zWydwcm9wX2hvc3QnXQ0KPiArICAgICAgICBpZiAncHJvcF9h ZGRyJyBpbiBvcHRpb25zLmtleXMoKSBhbmQgXA0KPiArICAgICAgICAgICAgICAgIG9wdGlvbnNb J3Byb3BfYWRkciddOg0KPiArICAgICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBhcmF0b3Ig KyAnYWRkcj0lcycgJSBvcHRpb25zWydwcm9wX2FkZHInXQ0KPiArICAgICAgICAgICAgc2VsZi5h c3NpZ25lZF9wY2lzLmFwcGVuZChvcHRpb25zWydwcm9wX2FkZHInXSkNCj4gKw0KPiArICAgICAg ICBpZiBzZWxmLl9fc3RyaW5nX2hhc19tdWx0aV9maWVsZHMoZGV2X2Jvb3RfbGluZSwgc2VwYXJh dG9yKToNCj4gKyAgICAgICAgICAgIHNlbGYuX19hZGRfYm9vdF9saW5lKGRldl9ib290X2xpbmUp DQo+ICsNCj4gKyAgICBkZWYgX19hZGRfdm1fdmlydGlvX25ldF9wY2koc2VsZiwgKipvcHRpb25z KToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGRyaXZlcjogdmlydGlvLW5ldC1wY2kNCj4g KyAgICAgICAgcHJvcF9uZXRkZXY6IG15bmV0MQ0KPiArICAgICAgICBwcm9wX2lkOiBuZXQxDQo+ ICsgICAgICAgIHByb3BfbWFjOiAwMDowMDowMDowMDowMTowMw0KPiArICAgICAgICBwcm9wX2J1 czogcGNpLjANCj4gKyAgICAgICAgcHJvcF9hZGRyOiAweDMNCj4gKyAgICAgICAgIiIiDQo+ICsg ICAgICAgIGRldl9ib290X2xpbmUgPSAnLWRldmljZSB2aXJ0aW8tbmV0LXBjaScNCj4gKyAgICAg ICAgc2VwYXJhdG9yID0gJywnDQo+ICsgICAgICAgIGlmICdwcm9wX25ldGRldicgaW4gb3B0aW9u cy5rZXlzKCkgYW5kIFwNCj4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydwcm9wX25ldGRldidd Og0KPiArICAgICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyAnbmV0ZGV2PSVz JyAlDQo+IG9wdGlvbnNbJ3Byb3BfbmV0ZGV2J10NCj4gKyAgICAgICAgaWYgJ3Byb3BfaWQnIGlu IG9wdGlvbnMua2V5cygpIGFuZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1sncHJvcF9p ZCddOg0KPiArICAgICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyAnaWQ9JXMn ICUgb3B0aW9uc1sncHJvcF9pZCddDQo+ICsgICAgICAgIGlmICdwcm9wX21hYycgaW4gb3B0aW9u cy5rZXlzKCkgYW5kIFwNCj4gKyAgICAgICAgICAgICAgICBvcHRpb25zWydwcm9wX21hYyddOg0K PiArICAgICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyAnbWFjPSVzJyAlIG9w dGlvbnNbJ3Byb3BfbWFjJ10NCj4gKyAgICAgICAgaWYgJ3Byb3BfYnVzJyBpbiBvcHRpb25zLmtl eXMoKSBhbmQgXA0KPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3Byb3BfYnVzJ106DQo+ICsg ICAgICAgICAgICBkZXZfYm9vdF9saW5lICs9IHNlcGFyYXRvciArICdidXM9JXMnICUgb3B0aW9u c1sncHJvcF9idXMnXQ0KPiArICAgICAgICBpZiAncHJvcF9hZGRyJyBpbiBvcHRpb25zLmtleXMo KSBhbmQgXA0KPiArICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3Byb3BfYWRkciddOg0KPiArICAg ICAgICAgICAgZGV2X2Jvb3RfbGluZSArPSBzZXBhcmF0b3IgKyAnYWRkcj0lcycgJSBvcHRpb25z Wydwcm9wX2FkZHInXQ0KPiArDQo+ICsgICAgICAgIGlmIHNlbGYuX19zdHJpbmdfaGFzX211bHRp X2ZpZWxkcyhzZWxmLCBzdHJpbmcsIHNlcGFyYXRvcik6DQo+ICsgICAgICAgICAgICBzZWxmLl9f YWRkX2Jvb3RfbGluZShkZXZfYm9vdF9saW5lKQ0KPiArDQoNCldoYXQncyB0aGUgbmVlZCAgdG8g Y2hlY2sgbXVsdGlfZmllbGRzPyBJcyBpdCBlbm91Z2ggdG8gY2hlY2sgd2hldGhlciBjb25maWd1 cmF0aW9uIGF2YWlsYWJsZT8NCg0KPiArICAgIGRlZiBfX3N0cmluZ19oYXNfbXVsdGlfZmllbGRz KHNlbGYsIHN0cmluZywgc2VwYXJhdG9yLCBmaWVsZF9udW09Mik6DQo+ICsgICAgICAgICIiIg0K PiArICAgICAgICBDaGVjayBpZiBzdHJpbmcgaGFzIG11bHRpcGxlIGZpZWxkcyB3aGljaCBpcyBz cGxpdGVkIHdpdGgNCj4gKyAgICAgICAgc3BlY2lmaWVkIHNlcGFyYXRvci4NCj4gKyAgICAgICAg IiIiDQo+ICsgICAgICAgIGZpZWxkcyA9IHN0cmluZy5zcGxpdChzZXBhcmF0b3IpDQo+ICsgICAg ICAgIG51bWJlciA9IDANCj4gKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoNCj4gKyAgICAg ICAgICAgIGlmIGZpZWxkOg0KPiArICAgICAgICAgICAgICAgIG51bWJlciArPSAxDQo+ICsgICAg ICAgIGlmIG51bWJlciA+PSBmaWVsZF9udW06DQo+ICsgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0K PiArICAgICAgICBlbHNlOg0KPiArICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQo+ICsNCj4gKyAg ICBkZWYgYWRkX3ZtX21vbml0b3Ioc2VsZiwgKipvcHRpb25zKToNCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIHBvcnQ6IDYwNjEgICAjIGlmIGFkZGluZyBtb25pdG9yIHRvIHZtLCBuZWVkIHRv IHNwZWNpY3kNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBwb3J0LCBlbHNlIGl0IHdp bGwgZ2V0IGEgZnJlZSBwb3J0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBob3N0 IG1hY2hpbmUuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBpZiAncG9ydCcgaW4gb3B0aW9u cy5rZXlzKCk6DQo+ICsgICAgICAgICAgICBpZiBvcHRpb25zWydwb3J0J106DQo+ICsgICAgICAg ICAgICAgICAgcG9ydCA9IG9wdGlvbnNbJ3BvcnQnXQ0KPiArICAgICAgICAgICAgZWxzZToNCj4g KyAgICAgICAgICAgICAgICBwb3J0ID0gc2VsZi52aXJ0X3Bvb2wuYWxsb2NfcG9ydChzZWxmLnZt X25hbWUpDQo+ICsNCj4gKyAgICAgICAgICAgIG1vbml0b3JfYm9vdF9saW5lID0gJy1tb25pdG9y IHRjcDo6JWQsc2VydmVyLG5vd2FpdCcgJQ0KPiBpbnQocG9ydCkNCj4gKyAgICAgICAgICAgIHNl bGYuX19hZGRfYm9vdF9saW5lKG1vbml0b3JfYm9vdF9saW5lKQ0KPiArDQo+ICsgICAgZGVmIHNl dF92bV9xZ2Eoc2VsZiwgZW5hYmxlPSd5ZXMnKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAg IFNldCBWTSBxZW11LWd1ZXN0LWFnZW50Lg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgaW5k ZXggPSBzZWxmLmZpbmRfb3B0aW9uX2luZGV4KCdxZ2EnKQ0KPiArICAgICAgICBpZiBpbmRleDoN Cj4gKyAgICAgICAgICAgIHNlbGYucGFyYW1zW2luZGV4XSA9IHsncWdhJzogW3snZW5hYmxlJzog JyVzJyAlIGVuYWJsZX1dfQ0KPiArICAgICAgICBlbHNlOg0KPiArICAgICAgICAgICAgc2VsZi5w YXJhbXMuYXBwZW5kKHsncWdhJzogW3snZW5hYmxlJzogJyVzJyAlIGVuYWJsZX1dfSkNCj4gKyAg ICAgICAgUUdBX1NPQ0tfUEFUSCA9IFFHQV9TT0NLX1BBVEhfVEVNUExBVEUgJSB7J3ZtX25hbWUn OiBzZWxmLnZtX25hbWV9DQo+ICsgICAgICAgIHNlbGYucWdhX3NvY2tfcGF0aCA9IFFHQV9TT0NL X1BBVEgNCj4gKw0KPiArICAgIGRlZiBhZGRfdm1fcWdhKHNlbGYsICoqb3B0aW9ucyk6DQo+ICsg ICAgICAgICIiIg0KPiArICAgICAgICBlbmFibGU6ICd5ZXMnDQo+ICsgICAgICAgICIiIg0KPiAr ICAgICAgICBRR0FfREVWX0lEID0gJyUodm1fbmFtZSlzX3FnYTAnICUgeyd2bV9uYW1lJzogc2Vs Zi52bV9uYW1lfQ0KPiArICAgICAgICBRR0FfU09DS19QQVRIID0gUUdBX1NPQ0tfUEFUSF9URU1Q TEFURSAlIHsndm1fbmFtZSc6IHNlbGYudm1fbmFtZX0NCj4gKw0KPiArICAgICAgICBzZXBhcmF0 b3IgPSAnICcNCj4gKw0KPiArICAgICAgICBpZiAnZW5hYmxlJyBpbiBvcHRpb25zLmtleXMoKToN Cj4gKyAgICAgICAgICAgIGlmIG9wdGlvbnNbJ2VuYWJsZSddID09ICd5ZXMnOg0KPiArICAgICAg ICAgICAgICAgIHFnYV9ib290X2Jsb2NrID0gJy1jaGFyZGV2DQo+IHNvY2tldCxwYXRoPSUoU09D S19QQVRIKXMsc2VydmVyLG5vd2FpdCxpZD0lKElEKXMnICsgXA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yICsgJy1kZXZpY2UgdmlydGlvLXNlcmlhbCcgKw0K PiBzZXBhcmF0b3IgKyBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWRl dmljZQ0KPiB2aXJ0c2VyaWFscG9ydCxjaGFyZGV2PSUoSUQpcyxuYW1lPSUoREVWX05BTUUpcycN Cj4gKyAgICAgICAgICAgICAgICBxZ2FfYm9vdF9saW5lID0gcWdhX2Jvb3RfYmxvY2sgJSB7J1NP Q0tfUEFUSCc6DQo+IFFHQV9TT0NLX1BBVEgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdERVZfTkFNRSc6DQo+IFFHQV9ERVZfTkFNRSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lEJzog UUdBX0RFVl9JRH0NCj4gKyAgICAgICAgICAgICAgICBzZWxmLl9fYWRkX2Jvb3RfbGluZShxZ2Ff Ym9vdF9saW5lKQ0KPiArICAgICAgICAgICAgICAgIHNlbGYucWdhX3NvY2tfcGF0aCA9IFFHQV9T T0NLX1BBVEgNCj4gKyAgICAgICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICAgICAgc2VsZi5x Z2Ffc29ja19wYXRoID0gJycNCj4gKw0KPiArICAgIGRlZiBhZGRfdm1fc2VyaWFsX3BvcnQoc2Vs ZiwgKipvcHRpb25zKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGVuYWJsZTogJ3llcycN Cj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFNFUkFJTF9TT0NLX1BBVEggPSAiL3RtcC8lc19z ZXJpYWwuc29jayIgJSBzZWxmLnZtX25hbWUNCj4gKyAgICAgICAgaWYgJ2VuYWJsZScgaW4gb3B0 aW9ucy5rZXlzKCk6DQo+ICsgICAgICAgICAgICBpZiBvcHRpb25zWydlbmFibGUnXSA9PSAneWVz JzoNCj4gKyAgICAgICAgICAgICAgICBzZXJpYWxfYm9vdF9saW5lID0gJy1zZXJpYWwgdW5peDol cyxzZXJ2ZXIsbm93YWl0JyAlDQo+IFNFUklBTF9TT0NLX1BBVEgNCj4gKyAgICAgICAgICAgICAg ICBzZWxmLl9fYWRkX2Jvb3RfbGluZShzZXJpYWxfYm9vdF9saW5lKQ0KPiArICAgICAgICAgICAg ZWxzZToNCj4gKyAgICAgICAgICAgICAgICBwYXNzDQo+ICsNCj4gKyAgICBkZWYgYWRkX3ZtX3Zu YyhzZWxmLCAqKm9wdGlvbnMpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgZGlzcGxheU51 bTogMQ0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgaWYgJ2Rpc3BsYXlOdW0nIGluIG9wdGlv bnMua2V5cygpIGFuZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snZGlzcGxheU51bSdd Og0KPiArICAgICAgICAgICAgZGlzcGxheV9udW0gPSBvcHRpb25zWydkaXNwbGF5TnVtJ10NCj4g KyAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgIGRpc3BsYXlfbnVtID0gc2VsZi52aXJ0X3Bv b2wuYWxsb2Nfdm5jX251bShzZWxmLnZtX25hbWUpDQo+ICsNCj4gKyAgICAgICAgdm5jX2Jvb3Rf bGluZSA9ICctdm5jIDolZCcgJSBpbnQoZGlzcGxheV9udW0pDQo+ICsgICAgICAgIHNlbGYuX19h ZGRfYm9vdF9saW5lKHZuY19ib290X2xpbmUpDQo+ICsNCj4gKyAgICBkZWYgc2V0X3ZtX2RhZW1v bihzZWxmLCBlbmFibGU9J3llcycpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU2V0IFZN IGRhZW1vbiBvcHRpb24uDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBpbmRleCA9IHNlbGYu ZmluZF9vcHRpb25faW5kZXgoJ2RhZW1vbicpDQo+ICsgICAgICAgIGlmIGluZGV4Og0KPiArICAg ICAgICAgICAgc2VsZi5wYXJhbXNbaW5kZXhdID0geydkYWVtb24nOiBbeydlbmFibGUnOiAnJXMn ICUgZW5hYmxlfV19DQo+ICsgICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICBzZWxmLnBhcmFt cy5hcHBlbmQoeydkYWVtb24nOiBbeydlbmFibGUnOiAnJXMnICUgZW5hYmxlfV19KQ0KPiArDQo+ ICsgICAgZGVmIGFkZF92bV9kYWVtb24oc2VsZiwgKipvcHRpb25zKToNCj4gKyAgICAgICAgIiIi DQo+ICsgICAgICAgIGVuYWJsZTogJ3llcycNCj4gKyAgICAgICAgICAgIG5vdGU6DQo+ICsgICAg ICAgICAgICAgICAgQnkgZGVmYXVsdCBWTSB3aWxsIHN0YXJ0IHdpdGggdGhlIGRhZW1vbml6ZSBz dGF0dXMuDQo+ICsgICAgICAgICAgICAgICAgTm90IHN1cHBvcnQgc3RhcnRpbmcgaXQgb24gdGhl IHN0ZGluIG5vdy4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGlmICdkYWVtb24nIGluIG9w dGlvbnMua2V5cygpIGFuZCBcDQo+ICsgICAgICAgICAgICAgICAgb3B0aW9uc1snZW5hYmxlJ10g PT0gJ25vJzoNCj4gKyAgICAgICAgICAgIHBhc3MNCj4gKyAgICAgICAgZWxzZToNCj4gKyAgICAg ICAgICAgIGRhZW1vbl9ib290X2xpbmUgPSAnLWRhZW1vbml6ZScNCj4gKyAgICAgICAgICAgIHNl bGYuX19hZGRfYm9vdF9saW5lKGRhZW1vbl9ib290X2xpbmUpDQo+ICsNCj4gKyAgICBkZWYgc3Rh cnRfdm0oc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBTdGFydCBWTS4NCj4gKyAg ICAgICAgIiIiDQo+ICsgICAgICAgIHFlbXVfZW11bGF0b3IgPSBzZWxmLnFlbXVfZW11bGF0b3IN Cj4gKw0KPiArICAgICAgICBzZWxmLl9fYWxsb2NfYXNzaWduZWRfcGNpcygpDQo+ICsNCj4gKyAg ICAgICAgaWYgc2VsZi52Y3B1c19waW5uZWRfdG9fdm0uc3RyaXAoKToNCj4gKyAgICAgICAgICAg IHZjcHVzID0gc2VsZi5fX2FsbG9jX3ZjcHVzKCkNCj4gKw0KPiArICAgICAgICAgICAgaWYgdmNw dXMuc3RyaXAoKToNCj4gKyAgICAgICAgICAgICAgICB3aG9sZV9xZW11X2t2bV9ib290X2xpbmUg PSAndGFza3NldCAtYyAlcyAnICUgdmNwdXMgKyBcDQo+ICsgICAgICAgICAgICAgICAgICAgIHFl bXVfZW11bGF0b3IgKyAnICcgKyBcDQo+ICsgICAgICAgICAgICAgICAgICAgIHNlbGYud2hvbGVf cWVtdV9rdm1fYm9vdF9saW5lDQoNCklmIGhlcmUgb25seSB0byBnZXQgdmNwdXMgZm9yIHVzYWdl LCBiZXR0ZXIgdG8gdXNlIGZ1bmN0aW9uIHJlcGxhY2UgY29kZXMgaGVyZS4gIA0KDQo+ICsgICAg ICAgIGVsc2U6DQo+ICsgICAgICAgICAgICB3aG9sZV9xZW11X2t2bV9ib290X2xpbmUgPSBxZW11 X2VtdWxhdG9yICsgJyAnICsgXA0KPiArICAgICAgICAgICAgICAgIHNlbGYud2hvbGVfcWVtdV9r dm1fYm9vdF9saW5lDQo+ICsNCj4gKyAgICAgICAgIyBTdGFydCBWTSB1c2luZyB0aGUgcWVtdSBj b21tYW5kDQo+ICsgICAgICAgIG91dCA9IHNlbGYuaG9zdF9zZXNzaW9uLnNlbmRfZXhwZWN0KHdo b2xlX3FlbXVfa3ZtX2Jvb3RfbGluZSwgJyMNCj4gJykNCj4gKyAgICAgICAgdGltZS5zbGVlcCgz MCkNCj4gKyAgICAgICAgaWYgb3V0Og0KPiArICAgICAgICAgICAgcmFpc2UgU3RhcnRWTUZhaWxl ZEV4Y2VwdGlvbihvdXQpDQo+ICsNCj4gKyAgICBkZWYgX19hbGxvY192Y3B1cyhzZWxmKToNCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIEFsbG9jYXRlIHZpcnR1YWwgQ1BVcyBmb3IgVk0uDQo+ ICsgICAgICAgICIiIg0KPiArICAgICAgICByZXFfY3B1cyA9IHNlbGYudmNwdXNfcGlubmVkX3Rv X3ZtLnNwbGl0KCkNCj4gKyAgICAgICAgY3B1cyA9IHNlbGYudmlydF9wb29sLmFsbG9jX2NwdSh2 bT1zZWxmLnZtX25hbWUsDQo+IGNvcmVsaXN0PXJlcV9jcHVzKQ0KPiArDQo+ICsgICAgICAgIHZj cHVzX3Bpbm5lZF90b192bSA9ICcnDQo+ICsgICAgICAgIGZvciBjcHUgaW4gY3B1czoNCj4gKyAg ICAgICAgICAgIHZjcHVzX3Bpbm5lZF90b192bSArPSAnLCcgKyBjcHUNCj4gKyAgICAgICAgdmNw dXNfcGlubmVkX3RvX3ZtID0gdmNwdXNfcGlubmVkX3RvX3ZtLmxzdHJpcCgnLCcpDQo+ICsNCj4g KyAgICAgICAgaWYgbGVuKHJlcV9jcHVzKSAhPSBsZW4oY3B1cyk6DQo+ICsgICAgICAgICAgICBw cmludCAiV0FSTklORzogSnVzdCBwaW4gdmNwdXMgWyAlcyBdIHRvIFZNISIgJQ0KPiB2Y3B1c19w aW5uZWRfdG9fdm0NCj4gKw0KDQpJZiBjYW5ub3QgYWxsb2NhdGUgY3B1cywgc2hvdWxkIHJhaXNl IGZhaWx1cmUuDQogDQo+ICsgICAgICAgIHJldHVybiB2Y3B1c19waW5uZWRfdG9fdm0NCj4gKw0K PiArICAgIGRlZiBfX2FsbG9jX2Fzc2lnbmVkX3BjaXMoc2VsZik6DQo+ICsgICAgICAgICIiIg0K PiArICAgICAgICBSZWNvcmQgdGhlIFBDSSBkZXZpY2UgaW5mbw0KPiArICAgICAgICBTdHJ1Y3Q6 IHtkZXYgcGNpOiB7J2lzX3ZmJzogW1RydWUgfCBGYWxzZV0sDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3BmX3BjaSc6IHBjaX19DQo+ICsgICAgICAgIGV4YW1wbGU6DQo+ICsgICAg ICAgICAgICB7JzA4OjEwLjAnOnsnaXNfdmYnOlRydWUsICdwZl9wY2knOiAwODowMC4wfX0NCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIGFzc2lnbmVkX3BjaXNfaW5mbyA9IHt9DQo+ICsgICAg ICAgIGZvciBwY2kgaW4gc2VsZi5hc3NpZ25lZF9wY2lzOg0KPiArICAgICAgICAgICAgYXNzaWdu ZWRfcGNpc19pbmZvW3BjaV0gPSB7fQ0KPiArICAgICAgICAgICAgaWYgc2VsZi5fX2lzX3ZmX3Bj aShwY2kpOg0KPiArICAgICAgICAgICAgICAgIGFzc2lnbmVkX3BjaXNfaW5mb1twY2ldWydpc192 ZiddID0gVHJ1ZQ0KPiArICAgICAgICAgICAgICAgIHBmX3BjaSA9IHNlbGYuX19tYXBfdmZfdG9f cGYocGNpKQ0KPiArICAgICAgICAgICAgICAgIGFzc2dpbmVkX3BjaXNfaW5mb1twY2ldWydwZl9w Y2knXSA9IHBmX3BjaQ0KPiArICAgICAgICAgICAgICAgIGlmIHNlbGYudmlydF9wb29sLmFsbG9j X3ZmX2Zyb21fcGYodm09c2VsZi52bV9uYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZfcGNpPXBmX3BjaSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpbcGNpXSk6DQo+ICsgICAg ICAgICAgICAgICAgICAgIHBvcnQgPSBzZWxmLl9fZ2V0X3ZmX3BvcnQocGNpKQ0KPiArICAgICAg ICAgICAgICAgICAgICBwb3J0LnVuYmluZF9kcml2ZXIoKQ0KPiArICAgICAgICAgICAgICAgICAg ICBwb3J0LmJpbmRfZHJpdmVyKCdwY2ktc3R1YicpDQo+ICsgICAgICAgICAgICBlbHNlOg0KPiAr ICAgICAgICAgICAgICAgICMgY2hlY2sgdGhhdCBpZiBhbnkgVkYgb2Ygc3BlY2lmaWVkIFBGIGhh cyBiZWVuDQo+ICsgICAgICAgICAgICAgICAgIyB1c2VkLCByYWlzZSBleGNlcHRpb24NCj4gKyAg ICAgICAgICAgICAgICB2Zl9wY2kgPSBzZWxmLl9fdmZfaGFzX2JlZW5fYXNzaW5nZWQocGNpLA0K PiAqKmFzc2luZ2VkX3BjaXNfaW5mbykNCj4gKyAgICAgICAgICAgICAgICBpZiB2Zl9wY2k6DQo+ ICsgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICJFcnJvcjogQSBWRiBbJXNdIGdlbmVyYXRlZCBieSBQRiBbJXNdIGhhcyAiICUN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICh2Zl9wY2ksIHBjaSkgKw0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgImJlZW4gYXNzaWduZWQgdG8gVk0sIHNvIHRoaXMgUEYgY2FuIG5vdCBi ZSAiICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJhc3NpZ25lZCB0byBWTSBhZ2FpbiEi KQ0KPiArICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBwb3J0IGluc3RhbmNlIG9mIFBGDQo+ICsg ICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYuX19nZXRfbmV0X2RldmljZV9ieV9wY2kocGNpKQ0K PiArDQo+ICsgICAgICAgICAgICAgICAgaWYgc2VsZi52aXJ0X3Bvb2wuYWxsb2NfcGYodm09c2Vs Zi52bV9uYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpbcGNpXSk6DQo+ICsgICAgICAgICAgICAgICAgICAgIHBvcnQudW5iaW5kX2RyaXZlcigpDQo+ ICsNCj4gKyAgICBkZWYgX19pc192Zl9wY2koc2VsZiwgZGV2X3BjaSk6DQo+ICsgICAgICAgICIi Ig0KPiArICAgICAgICBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIFBDSSBkZXYgaXMgYSBWRi4NCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIGZvciBwb3J0X2luZm8gaW4gc2VsZi5ob3N0X2R1dC5w b3J0c19pbmZvOg0KPiArICAgICAgICAgICAgaWYgJ3NyaW92X3Zmc19wY2knIGluIHBvcnRfaW5m by5rZXlzKCk6DQo+ICsgICAgICAgICAgICAgICAgaWYgZGV2X3BjaSBpbiBwb3J0X2luZm9bJ3Ny aW92X3Zmc19wY2knXToNCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUNCj4gKyAg ICAgICAgcmV0dXJuIEZhbHNlDQo+ICsNCg0KVmYgcGNpIGRldmljZSBzaG91bGQgYmUgaGFuZGxl ZCBpbiB2aXJ0X2R1dCBtb2R1bGUgYW5kIHNoYXJlZCB3aXRoIGRpZmZlcmVudCB0eXBlcyBvZiB2 aXJ0dWFsaXphdGlvbiBoeXBlcnZpc29yLg0KDQo+ICsgICAgZGVmIF9fbWFwX3ZmX3RvX3BmKHNl bGYsIGRldl9wY2kpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgTWFwIHRoZSBzcGVjaWZp ZWQgVkYgdG8gUEYuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBmb3IgcG9ydF9pbmZvIGlu IHNlbGYuaG9zdF9kdXQucG9ydHNfaW5mbzoNCj4gKyAgICAgICAgICAgIGlmICdzcmlvdl92ZnNf cGNpJyBpbiBwb3J0X2luZm8ua2V5cygpOg0KPiArICAgICAgICAgICAgICAgIGlmIGRldl9wY2kg aW4gcG9ydF9pbmZvWydzcmlvdl92ZnNfcGNpJ106DQo+ICsgICAgICAgICAgICAgICAgICAgIHJl dHVybiBwb3J0X2luZm9bJ3BjaSddDQo+ICsgICAgICAgIHJldHVybiBOb25lDQo+ICsNClNhbWUg YXMgYWJvdmUuDQoNCj4gKyAgICBkZWYgX19nZXRfdmZfcG9ydChzZWxmLCBkZXZfcGNpKToNCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIEdldCB0aGUgTmV0RGV2aWNlIGluc3RhbmNlIG9mIHNw ZWNpZmllZCBWRi4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGZvciBwb3J0X2luZm8gaW4g c2VsZi5ob3N0X2R1dC5wb3J0c19pbmZvOg0KPiArICAgICAgICAgICAgaWYgJ3Zmc19wb3J0JyBp biBwb3J0X2luZm8ua2V5cygpOg0KPiArICAgICAgICAgICAgICAgIGZvciBwb3J0IGluIHBvcnRf aW5mb1sndmZzX3BvcnQnXToNCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgZGV2X3BjaSA9PSBw b3J0LnBjaToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3J0DQo+ICsgICAg ICAgIHJldHVybiBOb25lDQo+ICsNCg0KU2FtZSBhcyBhYm92ZS4NCj4gKyAgICBkZWYgX192Zl9o YXNfYmVlbl9hc3NpZ25lZChzZWxmLCBwZl9wY2ksICoqYXNzaWduZWRfcGNpc19pbmZvKToNCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgVkYgaGFzIGJl ZW4gdXNlZC4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGZvciBwY2kgaW4gYXNzaWduZWRf cGNpc19pbmZvLmtleXMoKToNCj4gKyAgICAgICAgICAgIGlmIGFzc2lnbmVkX3BjaXNfaW5mb1tw Y2ldWydpc192ZiddIGFuZCBcDQo+ICsgICAgICAgICAgICAgICAgICAgIGFzc2lnbmVkX3BjaXNf aW5mb1twY2ldWydwZl9wY2knXSA9PSBwZl9wY2k6DQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IHBjaQ0KPiArICAgICAgICByZXR1cm4gRmFsc2UNCj4gKw0KVkYgZGV2aWNlIGNhbuKAmXQgYmUg c2hhcmVkIHdpdGggVk1zLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbiByZXNvdXJjZSBtb2R1 bGUuIA0KDQo+ICsgICAgZGVmIF9fZ2V0X25ldF9kZXZpY2VfYnlfcGNpKHNlbGYsIG5ldF9kZXZp Y2VfcGNpKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIEdldCBOZXREZXZpY2UgaW5zdGFu Y2UgYnkgdGhlIHNwZWNpZmllZCBQQ0kgYnVzIG51bWJlci4NCj4gKyAgICAgICAgIiIiDQo+ICsg ICAgICAgIHBvcnRfaW5mbyA9IHNlbGYuaG9zdF9kdXQuZ2V0X3BvcnRfaW5mbyhuZXRfZGV2aWNl X3BjaSkNCj4gKyAgICAgICAgcmV0dXJuIHBvcnRfaW5mb1sncG9ydCddDQo+ICsNCg0KVmYgcGNp IGRldmljZSBzaG91bGQgYmUgaGFuZGxlZCBpbiB2aXJ0X2R1dCBtb2R1bGUgYW5kIHNoYXJlZCB3 aXRoIGRpZmZlcmVudCB0eXBlcyBvZiB2aXJ0dWFsaXphdGlvbiBoeXBlcnZpc29yLg0KDQo+ICsg ICAgZGVmIGdldF92bV9pcChzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIEdldCBW TSBJUC4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGdldF92bV9pcCA9IGdldGF0dHIoc2Vs ZiwgImdldF92bV9pcF8lcyIgJSBzZWxmLm5ldF90eXBlKQ0KPiArICAgICAgICByZXR1cm4gZ2V0 X3ZtX2lwKCkNCj4gKw0KPiArICAgIGRlZiBnZXRfdm1faXBfaG9zdGZ3ZChzZWxmKToNCj4gKyAg ICAgICAgIiIiDQo+ICsgICAgICAgIEdldCBJUCB3aGljaCBWTSBpcyBjb25uZWN0ZWQgYnkgaG9z dGZ3ZC4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIHJldHVybiBzZWxmLmhvc3Rmd2RfYWRk cg0KPiArDQo+ICsgICAgZGVmIGdldF92bV9pcF9icmlkZ2Uoc2VsZik6DQo+ICsgICAgICAgICIi Ig0KPiArICAgICAgICBHZXQgSVAgd2hpY2ggVk0gaXMgY29ubmVjdGVkIGJ5IGJyaWRnZS4NCj4g KyAgICAgICAgIiIiDQo+ICsgICAgICAgIG91dCA9IHNlbGYuX19jb250cm9sX3Nlc3Npb24oJ3Bp bmcnLCAnNjAnKQ0KPiArICAgICAgICBpZiBub3Qgb3V0Og0KPiArICAgICAgICAgICAgdGltZS5z bGVlcCgxMCkNCj4gKyAgICAgICAgICAgIG91dCA9IHNlbGYuX19jb250cm9sX3Nlc3Npb24oJ2lm Y29uZmlnJykNCj4gKyAgICAgICAgICAgIGlwcyA9IHJlLmZpbmRhbGwocidpbmV0IChcZCtcLlxk K1wuXGQrXC5cZCspJywgb3V0KQ0KPiArDQo+ICsgICAgICAgICAgICBpZiAnMTI3LjAuMC4xJyBp biBpcHM6DQo+ICsgICAgICAgICAgICAgICAgaXBzLnJlbW92ZSgnMTI3LjAuMC4xJykNCj4gKw0K PiArICAgICAgICAgICAgbnVtID0gMw0KPiArICAgICAgICAgICAgZm9yIGlwIGluIGlwczoNCj4g KyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLmhvc3Rfc2Vzc2lvbi5zZW5kX2V4cGVjdCgNCj4g KyAgICAgICAgICAgICAgICAgICAgJ3BpbmcgLWMgJWQgJXMnICUgKG51bSwgaXApLCAnIyAnKQ0K PiArICAgICAgICAgICAgICAgIGlmICcwJSBwYWNrZXQgbG9zcycgaW4gb3V0Og0KPiArICAgICAg ICAgICAgICAgICAgICByZXR1cm4gaXANCg0KVGhlIGZpcnN0IHBpbmdlZCBpbnRlcmZhY2Ugd2ls bCBiZSB0aGUgaW50ZXJmYWNlIG9mIGJyaWRnZSwgY2FuIHdlIG1ha2Ugc3VyZSB0aGF0Pw0KPiAr ICAgICAgICByZXR1cm4gJycNCj4gKw0KPiArICAgIGRlZiBfX2NvbnRyb2xfc2Vzc2lvbihzZWxm LCBjb21tYW5kLCAqYXJncyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBVc2UgdGhlIHFl bXUgZ3Vlc3QgYWdlbnQgc2VydmljZSB0byBjb250cm9sIFZNLg0KPiArICAgICAgICBOb3RlOg0K PiArICAgICAgICAgICAgOmNvbW1hbmQ6IHRoZXJlIGFyZSB0aGVzZSBjb21tYW5kcyBhcyBiZWxv dzoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY2F0LCBmc2ZyZWV6ZSwgZnN0cmltLCBoYWx0 LCBpZmNvbmZpZywgaW5mbyxcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHBpbmcsIHBvd2Vy ZG93biwgcmVib290LCBzaHV0ZG93biwgc3VzcGVuZA0KPiArICAgICAgICAgICAgOmFyZ3M6IGdp dmUgZGlmZmVyZW50IGFyZ3MgYnkgdGhlIGRpZmZlcmVudCBjb21tYW5kcy4NCj4gKyAgICAgICAg IiIiDQo+ICsgICAgICAgIGlmIG5vdCBzZWxmLnFnYV9zb2NrX3BhdGg6DQo+ICsgICAgICAgICAg ICBzZWxmLmhvc3RfbG9nZ2VyLmluZm8oDQo+ICsgICAgICAgICAgICAgICAgIk5vIFFHQSBzZXJ2 aWNlIGJldHdlZW4gaG9zdCBbICVzIF0gYW5kIGd1ZXN0IFsgJXMgXSIgJQ0KPiArICAgICAgICAg ICAgICAgIChzZWxmLmhvc3RfZHV0Lk5hbWUsIHNlbGYudm1fbmFtZSkpDQo+ICsgICAgICAgICAg ICByZXR1cm4gTm9uZQ0KPiArDQo+ICsgICAgICAgIGNtZF9oZWFkID0gJ34vUU1QLycgKyBcDQo+ ICsgICAgICAgICAgICAicWVtdS1nYS1jbGllbnQgIiArIFwNCj4gKyAgICAgICAgICAgICItLWFk ZHJlc3M9JXMgJXMiICUgXA0KPiArICAgICAgICAgICAgKHNlbGYucWdhX3NvY2tfcGF0aCwgY29t bWFuZCkNCj4gKw0KPiArICAgICAgICBjbWQgPSBjbWRfaGVhZA0KPiArICAgICAgICBmb3IgYXJn IGluIGFyZ3M6DQo+ICsgICAgICAgICAgICBjbWQgPSBjbWRfaGVhZCArICcgJyArIHN0cihhcmcp DQo+ICsNCj4gKyAgICAgICAgb3V0ID0gc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoY21k LCAnIyAnKQ0KPiArDQo+ICsgICAgICAgIHJldHVybiBvdXQNCj4gKw0KPiArICAgIGRlZiBzdG9w KHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU3RvcCBWTS4NCj4gKyAgICAgICAg IiIiDQo+ICsgICAgICAgIHNlbGYuX19jb250cm9sX3Nlc3Npb24oJ3Bvd2VyZG93bicpDQoNCkhl cmUncyBuZWVkIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgc2h1dGRvd24gc3VjY2Vzc2Z1bGx5 Lg0KDQo+ICsgICAgICAgIHRpbWUuc2xlZXAoNSkNCj4gKyAgICAgICAgc2VsZi52aXJ0X3Bvb2wu ZnJlZV9hbGxfcmVzb3VyY2Uoc2VsZi52bV9uYW1lKQ0KPiArDQo+ICsNCj4gK2lmIF9fbmFtZV9f ID09ICJfX21haW5fXyI6DQo+ICsgICAgaW1wb3J0IHN1YnByb2Nlc3MNCj4gKyAgICBpbXBvcnQg c3lzDQo+ICsgICAgaW1wb3J0IHBkYg0KPiArICAgIGZyb20gc2VyaWFsaXplciBpbXBvcnQgU2Vy aWFsaXplcg0KPiArICAgIGZyb20gY3JicyBpbXBvcnQgY3Jicw0KPiArICAgIGZyb20gdGVzdGVy IGltcG9ydCBUZXN0ZXINCj4gKyAgICBmcm9tIGR1dCBpbXBvcnQgRHV0DQo+ICsgICAgaW1wb3J0 IGR0cw0KPiArICAgIGZyb20gdmlydF9wcm94eSBpbXBvcnQgVmlydFByb3h5DQo+ICsNCj4gKyAg ICBjb21tYW5kID0gImlmY29uZmlnIGJyMCINCj4gKyAgICBzdWJwID0gc3VicHJvY2Vzcy5Qb3Bl bihjb21tYW5kLnNwbGl0KCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpDQo+ICsgICAgc3VicC53 YWl0KCkNCj4gKw0KPiArICAgIGludGZfaW5mbyA9IHN1YnAuc3Rkb3V0LnJlYWRsaW5lcygpDQo+ ICsgICAgZm9yIGxpbmVfaW5mbyBpbiBpbnRmX2luZm86DQo+ICsgICAgICAgIHJlZ3ggPSByZS5z ZWFyY2gocidpbmV0IChcZCtcLlxkK1wuXGQrXC5cZCspJywgbGluZV9pbmZvKQ0KPiArICAgICAg ICBpZiByZWd4Og0KPiArICAgICAgICAgICAgZHV0SVAgPSByZWd4Lmdyb3VwKDEpDQo+ICsgICAg ICAgICAgICBicmVhaw0KPiArDQo+ICsgICAgcHJpbnQgIkRFQlVHOiBkdXRJcDogIiwgZHV0SVAN Cj4gKw0KPiArICAgICMgbG9vayB1cCBpbiBjcmJzIC0gdG8gZmluZCB0aGUgbWF0Y2hpbmcgSVAN Cj4gKyAgICBjcmJJbnN0ID0gTm9uZQ0KPiArICAgIGZvciBjcmIgaW4gY3JiczoNCj4gKyAgICAg ICAgaWYgY3JiWydJUCddID09IGR1dElQOg0KPiArICAgICAgICAgICAgY3JiSW5zdCA9IGNyYg0K PiArICAgICAgICAgICAgYnJlYWsNCj4gKw0KPiArICAgICMgb25seSBydW4gb24gdGhlIGR1dCBp biBrbm93biBjcmJzDQo+ICsgICAgaWYgY3JiSW5zdCBpcyBOb25lOg0KPiArICAgICAgICByYWlz ZSBFeGNlcHRpb24oIk5vIGF2YWlsYWJsZSBjcmIgaW5zdGFuY2UhISEiKQ0KPiArDQo+ICsgICAg IyBpbml0aWFsaXplIHRoZSBkdXQgYW5kIHRlc3Rlcg0KPiArICAgIHNlcmlhbGl6ZXIgPSBTZXJp YWxpemVyKCkNCj4gKyAgICBzZXJpYWxpemVyLnNldF9zZXJpYWxpemVkX2ZpbGVuYW1lKCcuLi8u JXMuY2FjaGUnICUgY3JiSW5zdFsnSVAnXSkNCj4gKyAgICBzZXJpYWxpemVyLmxvYWRfZnJvbV9m aWxlKCkNCj4gKw0KPiArICAgIHJlYWRfY2FjaGUgPSBOb25lDQo+ICsgICAgc2tpcF9zZXR1cCA9 IE5vbmUNCj4gKw0KPiArICAgIHByb2plY3QgPSAiZHBkayINCj4gKyAgICBkdHMuUGFja2FnZSA9 ICdkZXAvZHBkay50YXIuZ3onDQo+ICsgICAgZHV0ID0gZHRzLmdldF9wcm9qZWN0X29iaihwcm9q ZWN0LCBEdXQsIGNyYkluc3QsIHNlcmlhbGl6ZXIpDQo+ICsgICAgdGVzdGVyID0gZHRzLmdldF9w cm9qZWN0X29iaihwcm9qZWN0LCBUZXN0ZXIsIGNyYkluc3QsIHNlcmlhbGl6ZXIpDQo+ICsgICAg ZHV0LnRlc3RlciA9IHRlc3Rlcg0KPiArICAgIGR1dC5iYXNlX2RpciA9ICdkcGRrJw0KPiArICAg IGR1dC5zZXRfbmljX3R5cGUoJ25pYW50aWMnKQ0KPiArICAgIHRlc3Rlci5kdXQgPSBkdXQNCj4g Kw0KPiArICAgIHRlc3Rlci5zZXRfdGVzdF90eXBlcyhUcnVlLCBGYWxzZSkNCj4gKyAgICBkdXQu c2V0X3Rlc3RfdHlwZXMoVHJ1ZSwgRmFsc2UpDQo+ICsNCj4gKyAgICB0ZXN0ZXIuc2V0X3NwZWVk dXBfb3B0aW9ucyhyZWFkX2NhY2hlLCBza2lwX3NldHVwKQ0KPiArICAgIHRlc3Rlci50ZXN0ZXJf cHJlcmVxdWlzaXRlcygpDQo+ICsgICAgZHV0LnNldF9zcGVlZHVwX29wdGlvbnMocmVhZF9jYWNo ZSwgc2tpcF9zZXR1cCkNCj4gKyAgICBkdXQuZHV0X3ByZXJlcXVpc2l0ZXMoKQ0KPiArDQo+ICsg ICAgIyB0ZXN0IHRoYXQgZ2VuZXJhdGluZyBhbmQgZGVzdHJveWluZyBWRg0KPiArICAgIHBvcnQw ID0gZHV0LnBvcnRzX2luZm9bMF1bJ3BvcnQnXQ0KPiArICAgIGR1dC5nZW5lcmF0ZV9zcmlvdl92 ZnNfYnlfcG9ydCgwLCA0KQ0KPiArICAgIHByaW50ICJwb3J0IDAgc3Jpb3YgdmZzOiAiLCBkdXQu cG9ydHNfaW5mb1swXQ0KPiArDQo+ICsgICAgZHV0LmRlc3Ryb3lfc3Jpb3ZfdmZzX2J5X3BvcnQo MCkNCj4gKw0KPiArICAgIHRpbWUuc2xlZXAoMikNCj4gKw0KPiArICAgICMgdGVzdCB0aGF0IGJp bmRpbmcgYW5kIHVuYmluZyB0aGUgTklDDQo+ICsgICAgcG9ydDBfcGNpID0gZHV0LnBvcnRzX2lu Zm9bMF1bJ3BjaSddDQo+ICsgICAgcG9ydDAudW5iaW5kX2RyaXZlcigpDQo+ICsNCj4gKyAgICBk dXQubG9nZ2VyLmluZm8oIkpVU1QgVEVTVElORyEhISIpDQo+ICsNCj4gKyAgICAjIFN0YXJ0IFZN IGJ5IHRoZSBxZW11IGt2bSBjb25maWcgZmlsZQ0KPiArICAgIHZtMSA9IFFFTVVLdm0oZHV0LCAn dm0xJywgJ3BtZF9zcmlvdicpDQo+ICsgICAgcHJpbnQgIlZNIGNvbmZpZyBwYXJhbXM6Ig0KPiAr ICAgIHByaW50IHZtMS5wYXJhbXMNCj4gKyAgICB2bTFfZHV0ID0gdm0xLnN0YXJ0KCkNCj4gKw0K PiArICAgIHRyeToNCj4gKyAgICAgICAgaG9zdF9pcCA9IHZtMS5zZXNzaW9uLnNlbmRfZXhwZWN0 KCJpZmNvbmZpZyIsICcjICcpDQo+ICsgICAgICAgIHByaW50ICJIb3N0IElQOiINCj4gKyAgICAg ICAgcHJpbnQgaG9zdF9pcA0KPiArDQo+ICsgICAgICAgIHZtMV9pcCA9IHZtMS5nZXRfdm1faXAo KQ0KPiArICAgICAgICBwcmludCAiVk0xIElQOiINCj4gKyAgICAgICAgcHJpbnQgdm0xX2lwDQo+ ICsNCj4gKyAgICAgICAgcHJpbnQgIlZNMSBQQ0kgZGV2aWNlOiINCj4gKyAgICAgICAgcHJpbnQg dm1fZHV0LnNlc3Npb24uc2VuZF9leHBlY3QoJ2xzcGNpIC1ubiB8IGdyZXAgLWkgZXRoJywgJyMg JykNCj4gKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ICsgICAgICAgIHByaW50IGUNCj4g KyAgICAgICAgdm0xX2R1dC5zdG9wKCkNCj4gKyAgICAgICAgcG9ydDAuYmluZF9kcml2ZXIoKQ0K PiArICAgICMgU3RvcCBWTQ0KPiArICAgIHZtMS5zdG9wKCkNCj4gKyAgICBwb3J0MC5iaW5kX2Ry aXZlcigpDQo+ICsNCj4gKyAgICBkdXQuaG9zdF9sb2dnZXIubG9nZ2VyX2V4aXQoKQ0KPiArICAg IGR1dC5sb2dnZXIubG9nZ2VyX2V4aXQoKQ0KPiArICAgIHRlc3Rlci5sb2dnZXIubG9nZ2VyX2V4 aXQoKQ0KPiArDQo+ICsgICAgcHJpbnQgIlN0YXJ0IGFuZCBzdG9wIFZNIG92ZXIhIg0KPiBkaWZm IC0tZ2l0IGEvZnJhbWV3b3JrL3ZpcnRfYmFzZS5weSBiL2ZyYW1ld29yay92aXJ0X2Jhc2UucHkN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNjI1YzMwOQ0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL2ZyYW1ld29yay92aXJ0X2Jhc2UucHkNCj4gQEAgLTAsMCArMSwy NTAgQEANCj4gKyMgPENPUFlSSUdIVF9UQUc+DQo+ICsNCj4gK2Zyb20gcmFuZG9tIGltcG9ydCBy YW5kaW50DQo+ICtmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaW1hcA0KPiArDQo+ICtpbXBvcnQgZHRz DQo+ICtmcm9tIGR1dCBpbXBvcnQgRHV0DQo+ICtmcm9tIGNvbmZpZyBpbXBvcnQgVmlydENvbmYN Cj4gK2Zyb20gY29uZmlnIGltcG9ydCBWSVJUQ09ORg0KPiArZnJvbSBsb2dnZXIgaW1wb3J0IGdl dExvZ2dlcg0KPiArZnJvbSBzZXR0aW5ncyBpbXBvcnQgQ09ORklHX1JPT1RfUEFUSA0KPiArZnJv bSB2aXJ0X2R1dCBpbXBvcnQgVmlydER1dA0KPiArDQo+ICsNCj4gK2NsYXNzIFZpcnRCYXNlKG9i amVjdCk6DQo+ICsNCj4gKyAgICAiIiINCj4gKyAgICBCYXNpYyBtb2R1bGUgZm9yIGN1c3RvbWVy IHNwZWNpYWwgdmlydHVhbCB0eXBlLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnQNCj4gZnVuY3Rpb25z DQo+ICsgICAgY29uZmlndXJhdGVkIGFuZCBjb21wb3NlZCB0aGUgVk0gYm9vdCBjb21tYW5kLiBX aXRoIHRoZXNlIGZ1bmN0aW9uLA0KPiB3ZSBjYW4gZ2V0DQo+ICsgICAgYW5kIHNldCB0aGUgVk0g Ym9vdCBjb21tYW5kLCBhbmQgaW5zdGFudGlhdGUgdGhlIFZNLg0KPiArICAgICIiIg0KPiArDQo+ ICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGR1dCwgdm1fbmFtZSwgc3VpdGVfbmFtZSk6DQo+ICsg ICAgICAgICIiIg0KPiArICAgICAgICBJbml0aWFsaXplIHRoZSBWaXJ0QmFzZS4NCj4gKyAgICAg ICAgZHV0OiB0aGUgaW5zdGFuY2Ugb2YgRHV0DQo+ICsgICAgICAgIHZtX25hbWU6IHRoZSBuYW1l IG9mIFZNIHdoaWNoIHlvdSBoYXZlIGNvbmZpdXJlZCBpbiB0aGUgY29uZmlndXJlDQo+ICsgICAg ICAgIHN1aXRlX25hbWU6IHRoZSBuYW1lIG9mIHRlc3Qgc3VpdGUNCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIHNlbGYuaG9zdF9kdXQgPSBkdXQNCj4gKyAgICAgICAgc2VsZi52bV9uYW1lID0g dm1fbmFtZQ0KPiArICAgICAgICBzZWxmLnN1aXRlID0gc3VpdGVfbmFtZQ0KPiArDQo+ICsgICAg ICAgICMgaW5pdCB0aGUgaG9zdCBzZXNzaW9uIGFuZCBsb2dnZXIgZm9yIFZNDQo+ICsgICAgICAg IHNlbGYuaG9zdF9kdXQuaW5pdF9ob3N0X3Nlc3Npb24oKQ0KPiArDQo+ICsgICAgICAgICMgcmVw bGFjZSBkdXQgc2Vzc2lvbg0KPiArICAgICAgICBzZWxmLmhvc3Rfc2Vzc2lvbiA9IHNlbGYuaG9z dF9kdXQuaG9zdF9zZXNzaW9uDQo+ICsgICAgICAgIHNlbGYuaG9zdF9sb2dnZXIgPSBzZWxmLmhv c3RfZHV0LmxvZ2dlcg0KPiArDQo+ICsgICAgICAgICMgaW5pdCB0aGUgaG9zdCByZXNvdWNlIHBv b2wgZm9yIFZNDQo+ICsgICAgICAgIHNlbGYudmlydF9wb29sID0gc2VsZi5ob3N0X2R1dC52aXJ0 X3Bvb2wNCj4gKw0KPiArICAgICAgICBpZiBub3Qgc2VsZi5oYXNfdmlydHVhbF9hYmlsaXR5KCk6 DQo+ICsgICAgICAgICAgICBpZiBub3Qgc2VsZi5lbmFibGVfdmlydHVhbF9hYmlsaXR5KCk6DQo+ ICsgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKA0KPiArICAgICAgICAgICAgICAgICAg ICAiRHV0IFsgJXMgXSBjYW5ub3QgaGF2ZSB0aGUgdmlydHVhbCBhYmlsaXR5ISEhIikNCj4gKw0K DQpXZSBuZWVkIGhhbmRsZSB0aG9zZSBleGNlcHRpb24gaW4gdmlydHVhbGl6YXRpb24gbW9kdWxl Lg0KDQo+ICsgICAgICAgIHNlbGYudmlydF90eXBlID0gc2VsZi5nZXRfdmlydF90eXBlKCkNCj4g KyAgICAgICAgc2VsZi5sb2FkX2dsb2JhbF9jb25maWcoKQ0KPiArICAgICAgICBzZWxmLmxvYWRf bG9jYWxfY29uZmlnKHN1aXRlX25hbWUpDQo+ICsNCj4gKyAgICBkZWYgZ2V0X3ZpcnRfdHlwZShz ZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIEdldCB0aGUgdmlydHVhbCB0eXBlLCBz dWNoIGFzIEtWTSwgWEVOIG9yIExJQlZJUlQuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBO b3RJbXBsZW1lbnRlZA0KPiArDQo+ICsgICAgZGVmIGhhc192aXJ0dWFsX2FiaWxpdHkoc2VsZik6 DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBDaGVjayBpZiB0aGUgaG9zdCBoYXZlIHRoZSBh YmlsaXR5IG9mIHZpcnR1YWxpemF0aW9uLg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgTm90 SW1wbGVtZW50ZWQNCj4gKw0KPiArICAgIGRlZiBlbmFibGVfdmlydHVhbF9hYmlsaXR5KHNlbGYp Og0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgRW5hbGJlIHRoZSB2aXJ0dWFsIGFiaWxpdHkg b24gdGhlIERVVC4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIE5vdEltcGxlbWVudGVkDQo+ ICsNCj4gKyAgICBkZWYgbG9hZF9nbG9iYWxfY29uZmlnKHNlbGYpOg0KPiArICAgICAgICAiIiIN Cj4gKyAgICAgICAgTG9hZCBnbG9iYWwgY29uZmlndXJlIGluIHRoZSBwYXRoIERUU19ST09UX1BB SFQvY29uZi4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGNvbmYgPSBWaXJ0Q29uZihWSVJU Q09ORikNCj4gKyAgICAgICAgY29uZi5sb2FkX3ZpcnRfY29uZmlnKHNlbGYudmlydF90eXBlKQ0K PiArICAgICAgICBzZWxmLnBhcmFtcyA9IGNvbmYuZ2V0X3ZpcnRfY29uZmlnKCkNCj4gKw0KTmVl ZCBhZGQgY2hlY2sgd2hldGhlciBjb25maWd1cmF0aW9uIGZpbGUgbG9hZCBzdWNjZXNzZnVsbHku DQoNCj4gKyAgICBkZWYgbG9hZF9sb2NhbF9jb25maWcoc2VsZiwgc3VpdGVfbmFtZSk6DQo+ICsg ICAgICAgICIiIg0KPiArICAgICAgICBMb2FkIGxvY2FsIGNvbmZpZ3VyZSBpbiB0aGUgcGF0aCBE VFNfUk9PVF9QQVRIL2NvbmYuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICAjIGxvYWQgbG9j YWwgY29uZmlndXJhdGlvbiBieSBzdWl0ZSBhbmQgdm0gbmFtZQ0KPiArICAgICAgICBjb25mID0g VmlydENvbmYoQ09ORklHX1JPT1RfUEFUSCArIHN1aXRlX25hbWUgKyAnLmNmZycpDQo+ICsgICAg ICAgIGNvbmYubG9hZF92aXJ0X2NvbmZpZyhzZWxmLnZtX25hbWUpDQo+ICsgICAgICAgIGxvY2Fs cGFyYW1zID0gY29uZi5nZXRfdmlydF9jb25maWcoKQ0KDQpOZWVkIGFkZCBjaGVjayB3aGV0aGVy IGNvbmZpZ3VyYXRpb24gZmlsZSBsb2FkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgICAgICAgIyByZXBs YWNlIGdsb2JhbCBjb25maWd1cmF0aW9ucyB3aXRoIGxvY2FsIGNvbmZpZ3VyYXRpb25zDQo+ICsg ICAgICAgIGZvciBwYXJhbSBpbiBsb2NhbHBhcmFtczoNCj4gKyAgICAgICAgICAgIGlmICdtZW0n IGluIHBhcmFtLmtleXMoKToNCj4gKyAgICAgICAgICAgICAgICBzZWxmLl9fc2F2ZV9sb2NhbF9j b25maWcoJ21lbScsIHBhcmFtWydtZW0nXSkNCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZQ0K PiArICAgICAgICAgICAgaWYgJ2NwdScgaW4gcGFyYW0ua2V5cygpOg0KPiArICAgICAgICAgICAg ICAgIHNlbGYuX19zYXZlX2xvY2FsX2NvbmZpZygnY3B1JywgcGFyYW1bJ2NwdSddKQ0KPiArICAg ICAgICAgICAgICAgIGNvbnRpbnVlDQo+ICsgICAgICAgICAgICAjIHNhdmUgbG9jYWwgY29uZmln dXJhdGlvbnMNCj4gKyAgICAgICAgICAgIHNlbGYucGFyYW1zLmFwcGVuZChwYXJhbSkNCj4gKw0K PiArICAgIGRlZiBfX3NhdmVfbG9jYWxfY29uZmlnKHNlbGYsIGtleSwgdmFsdWUpOg0KPiArICAg ICAgICAiIiINCj4gKyAgICAgICAgU2F2ZSB0aGUgbG9jYWwgY29uZmlnIGludG8gdGhlIGdsb2Jh bCBkaWN0IHNlbGYucGFyYW0uDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBmb3IgcGFyYW0g aW4gc2VsZi5wYXJhbXM6DQo+ICsgICAgICAgICAgICBpZiBrZXkgaW4gcGFyYW0ua2V5cygpOg0K PiArICAgICAgICAgICAgICAgIHBhcmFtW2tleV0gPSB2YWx1ZQ0KPiArDQo+ICsgICAgZGVmIGNv bXBvc2VfYm9vdF9wYXJhbShzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIENvbXBv c2UgYWxsIGJvb3QgcGFyYW0gZm9yIHN0YXJ0aW5nIHRoZSBWTS4NCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIGZvciBwYXJhbSBpbiBzZWxmLnBhcmFtczoNCj4gKyAgICAgICAgICAgIGtleSA9 IHBhcmFtLmtleXMoKVswXQ0KPiArICAgICAgICAgICAgdmFsdWUgPSBwYXJhbVtrZXldDQo+ICsg ICAgICAgICAgICB0cnk6DQo+ICsgICAgICAgICAgICAgICAgcGFyYW1fZnVuYyA9IGdldGF0dHIo c2VsZiwgJ2FkZF92bV8nICsga2V5KQ0KPiArICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKHBh cmFtX2Z1bmMpOg0KPiArICAgICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uIGluIHZhbHVlOg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fZnVuYygqKm9wdGlvbikNCj4gKyAgICAg ICAgICAgICAgICBlbHNlOg0KPiArICAgICAgICAgICAgICAgICAgICBwcmludCAiVmlydCAlcyBm dW5jdGlvbiBub3QgaW1wbGVtZW50ZWQhISEiICUga2V5DQo+ICsgICAgICAgICAgICBleGNlcHQg RXhjZXB0aW9uIGFzIGU6DQo+ICsgICAgICAgICAgICAgICAgcHJpbnQgIkZhaWxlZDogIiwgZQ0K PiArDQoNCkZ1bmN0aW9uIGNhbGwgZmFpbGVkIHNob3VsZCBsb2cgd2l0aCBlcnJvci4NCg0KPiAr ICAgIGRlZiBmaW5kX29wdGlvbl9pbmRleChzZWxmLCBvcHRpb24pOg0KPiArICAgICAgICAiIiIN Cj4gKyAgICAgICAgRmluZCB0aGUgYm9vdCBvcHRpb24gaW4gdGhlIHBhcmFtcyB3aGljaCBpcyBn ZW5lcmF0ZWQgZnJvbQ0KPiArICAgICAgICB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBjb25maWd1cmVz LCBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsDQo+ICsgICAgICAgIHJldHVybiB0aGUgaW5kZXggYnkg d2hpY2ggb3B0aW9uIGNhbiBiZSBpbmRleGVkIGluIHRoZQ0KPiArICAgICAgICBwYXJhbSBsaXN0 Lg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgaW5kZXggPSAwDQo+ICsgICAgICAgIGZvciBw YXJhbSBpbiBzZWxmLnBhcmFtczoNCj4gKyAgICAgICAgICAgIGtleSA9IHBhcmFtLmtleXMoKVsw XQ0KPiArICAgICAgICAgICAgaWYga2V5LnN0cmlwKCkgPT0gb3B0aW9uLnN0cmlwKCk6DQo+ICsg ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4DQo+ICsgICAgICAgICAgICBpbmRleCArPSAxDQo+ ICsNCj4gKyAgICAgICAgcmV0dXJuIE5vbmUNCj4gKw0KPiArICAgIGRlZiBnZW5lcmF0ZV91bmlx dWVfbWFjKHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgR2VuZXJhdGUgYSB1bmlx dWUgTUFDIGJhc2VkIG9uIHRoZSBEVVQuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBtYWNf aGVhZCA9ICcwMDowMDowMDonDQo+ICsgICAgICAgIG1hY190YWlsID0gJzonLmpvaW4oDQo+ICsg ICAgICAgICAgICBbJyUwMngnICUgeCBmb3IgeCBpbiBpbWFwKGxhbWJkYSB4OnJhbmRpbnQoMCwg MjU1KSwNCj4gcmFuZ2UoMykpXSkNCj4gKyAgICAgICAgcmV0dXJuIG1hY19oZWFkICsgbWFjX3Rh aWwNCj4gKw0KPiArICAgIGRlZiBnZXRfdm1faXAoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiAr ICAgICAgICBHZXQgdGhlIFZNIElQLg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgTm90SW1w bGVtZW50ZWQNCj4gKw0KPiArICAgIGRlZiBzdGFydChzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIFN0YXJ0IFZNIGFuZCBpbnN0YW50aWF0ZSB0aGUgVk0gd2l0aCBWaXJ0RHV0Lg0K PiArICAgICAgICAiIiINCj4gKyAgICAgICAgc2VsZi5jb21wb3NlX2Jvb3RfcGFyYW0oKQ0KPiAr ICAgICAgICB0cnk6DQo+ICsgICAgICAgICAgICBzZWxmLnN0YXJ0X3ZtKCkNCj4gKyAgICAgICAg ZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KPiArICAgICAgICAgICAgc2VsZi5ob3N0X2xvZ2dlci5l cnJvcihlKQ0KPiArICAgICAgICAgICAgcmV0dXJuIE5vbmUNCj4gKyAgICAgICAgdHJ5Og0KPiAr ICAgICAgICAgICAgdm1fZHV0ID0gc2VsZi5pbnN0YW50aWF0ZV92bV9kdXQoKQ0KPiArICAgICAg ICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ICsgICAgICAgICAgICBzZWxmLmhvc3RfbG9nZ2Vy LmVycm9yKGUpDQo+ICsgICAgICAgICAgICBzZWxmLnN0b3AoKQ0KQWZ0ZXIgc3RvcCB2bSwgbmVl ZCBjbGVhbiB1cCByZXNvdXJjZSBsaWtlIFZGcyBhbmQgY29yZXMuDQoNCj4gKyAgICAgICAgICAg IHJldHVybiBOb25lDQo+ICsgICAgICAgIHJldHVybiB2bV9kdXQNCj4gKw0KPiArICAgIGRlZiBz dGFydF92bShzZWxmKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFN0YXJ0IFZNLg0KPiAr ICAgICAgICAiIiINCj4gKyAgICAgICAgTm90SW1wbGVtZW50ZWQNCj4gKw0KPiArICAgIGRlZiBp bnN0YW50aWF0ZV92bV9kdXQoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBJbnN0 YW50aWF0ZSB0aGUgRHV0IGNsYXNzIGZvciBWTS4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAg IGNyYiA9IHNlbGYuaG9zdF9kdXQuY3JiLmNvcHkoKQ0KPiArICAgICAgICBjcmJbJ2J5cGFzcyBj b3JlMCddID0gRmFsc2UNCj4gKyAgICAgICAgdm1faXAgPSBzZWxmLmdldF92bV9pcCgpDQpOZWVk IGNoZWNrIHdoZXRoZXIgdm1faXAgdmFsaWQuDQoNCj4gKyAgICAgICAgY3JiWydJUCddID0gdm1f aXANCj4gKyAgICAgICAgaWYgJzonIG5vdCBpbiB2bV9pcDoNCj4gKyAgICAgICAgICAgIHJlbW90 ZV9pcCA9IHZtX2lwLnN0cmlwKCkNCj4gKyAgICAgICAgICAgIHJlZGlyZWN0X3BvcnQgPSAnJw0K PiArICAgICAgICBlbHNlOg0KPiArICAgICAgICAgICAgcmVtb3RlX2FkZHIgPSB2bV9pcC5zcGxp dCgnOicpDQo+ICsgICAgICAgICAgICByZW1vdGVfaXAgPSByZW1vdGVfYWRkclswXS5zdHJpcCgp DQo+ICsgICAgICAgICAgICByZWRpcmVjdF9wb3J0ID0gcmVtb3RlX2FkZHJbMV0uc3RyaXAoKQ0K PiArICAgICAgICBzZWxmLl9fcmVtb3ZlX29sZF9yc2Ffa2V5KHJlbW90ZV9pcCwgcmVkaXJlY3Rf cG9ydCkNCj4gKw0KDQpUaGVzZSBjb2RlIGNhbiBiZSBtb3ZlZCB0byBmdW5jdGlvbiAiX19yZW1v dmVfb2xkX3JzYV9rZXkiLg0KDQo+ICsgICAgICAgIHNlcmlhbGl6ZXIgPSBzZWxmLmhvc3RfZHV0 LnNlcmlhbGl6ZXINCj4gKw0KPiArICAgICAgICB0cnk6DQo+ICsgICAgICAgICAgICB2bV9kdXQg PSBWaXJ0RHV0KA0KPiArICAgICAgICAgICAgICAgIGNyYiwNCj4gKyAgICAgICAgICAgICAgICBz ZXJpYWxpemVyLA0KPiArICAgICAgICAgICAgICAgIHNlbGYudmlydF90eXBlLA0KPiArICAgICAg ICAgICAgICAgIHNlbGYudm1fbmFtZSwNCj4gKyAgICAgICAgICAgICAgICBzZWxmLnN1aXRlKQ0K PiArICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQo+ICsgICAgICAgICAgICByYWlzZSBF eGNlcHRpb24oZSkNCg0KSWYgVmlydER1dCBpbnN0YW50aWF0aW9uIGZhaWxlZCwgIGZ1bmN0aW9u IGluc3RhbnRpYXRlX3ZtX2R1dCBzaG91bGQgcmV0dXJuIGZhaWx1cmUgYW5kIHNob3VsZCBub3Qg cnVuIHJlbWFpbmluZyBjb2Rlcy4NCg0KPiArICAgICAgICB2bV9kdXQubmljX3R5cGUgPSAnYW55 Jw0KPiArICAgICAgICB2bV9kdXQudGVzdGVyID0gc2VsZi5ob3N0X2R1dC50ZXN0ZXINCj4gKyAg ICAgICAgdm1fZHV0Lmhvc3RfZHV0ID0gc2VsZi5ob3N0X2R1dA0KPiArICAgICAgICB2bV9kdXQu aG9zdF9zZXNzaW9uID0gc2VsZi5ob3N0X3Nlc3Npb24NCj4gKw0KPiArICAgICAgICByZWFkX2Nh Y2hlID0gRmFsc2UNCj4gKyAgICAgICAgc2tpcF9zZXR1cCA9IHNlbGYuaG9zdF9kdXQuc2tpcF9z ZXR1cA0KPiArICAgICAgICBiYXNlX2RpciA9IHNlbGYuaG9zdF9kdXQuYmFzZV9kaXINCj4gKyAg ICAgICAgdm1fZHV0LnNldF9zcGVlZHVwX29wdGlvbnMocmVhZF9jYWNoZSwgc2tpcF9zZXR1cCkN Cj4gKyAgICAgICAgZnVuY19vbmx5ID0gc2VsZi5ob3N0X2R1dC53YW50X2Z1bmNfdGVzdHMNCj4g KyAgICAgICAgcGVyZl9vbmx5ID0gc2VsZi5ob3N0X2R1dC53YW50X3BlcmZfdGVzdHMNCj4gKyAg ICAgICAgdm1fZHV0LnNldF90ZXN0X3R5cGVzKGZ1bmNfdGVzdHM9ZnVuY19vbmx5LCBwZXJmX3Rl c3RzPXBlcmZfb25seSkNCj4gKyAgICAgICAgIyBiYXNlX2RpciBzaG91bGQgYmUgc2V0IGJlZm9y ZSBwcmVyZXF1aXNpdGVzDQo+ICsgICAgICAgIHZtX2R1dC5zZXRfZGlyZWN0b3J5KGJhc2VfZGly KQ0KPiArDQo+ICsgICAgICAgICMgc2V0dGluZyB1cCBkcGRrIGluIHZtLCBtdXN0IGNhbGwgYXQg bGFzdA0KPiArICAgICAgICB2bV9kdXQucHJlcmVxdWlzaXRlcyhkdHMuUGFja2FnZSwgZHRzLlBh dGNoZXMpDQo+ICsNClByZXJlcXVpc2l0ZXMgbWF5YmUgZmFpbGVkLCBuZWVkIGFkZCBjaGVjayBo ZXJlLg0KDQo+ICsgICAgICAgIHRhcmdldCA9IHNlbGYuaG9zdF9kdXQudGFyZ2V0DQo+ICsgICAg ICAgIGlmIHRhcmdldDoNCj4gKyAgICAgICAgICAgIHZtX2R1dC5zZXRfdGFyZ2V0KHRhcmdldCkN Cj4gKyAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2Fubm90 IGdldCB0aGUgSE9TVCBEVVQgdGVzdCB0YXJnZXQhIikNCj4gKw0KPiArICAgICAgICByZXR1cm4g dm1fZHV0DQo+ICsNCj4gKyAgICBkZWYgX19yZW1vdmVfb2xkX3JzYV9rZXkoc2VsZiwgcmVtb3Rl X2lwLCByZWRpcmVjdF9wb3J0KToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFJlbW92ZSB0 aGUgb2xkIFJTQSBrZXkgb2Ygc3BlY2lmaWVkIHJlbW90ZSBJUC4NCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIHJzYV9rZXlfcGF0aCA9ICJ+Ly5zc2gva25vd25faG9zdHMiDQo+ICsgICAgICAg IGlmIHJlZGlyZWN0X3BvcnQ6DQo+ICsgICAgICAgICAgICByZW1vdmVfcnNhX2tleV9jbWQgPSAi c2VkIC1pICcvXlxbJXNcXTolZC9kJyAlcyIgJSBcDQo+ICsgICAgICAgICAgICAgICAgKHJlbW90 ZV9pcC5zdHJpcCgpLCBpbnQoDQo+ICsgICAgICAgICAgICAgICAgIHJlZGlyZWN0X3BvcnQpLCBy c2Ffa2V5X3BhdGgpDQo+ICsgICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICByZW1vdmVfcnNh X2tleV9jbWQgPSAic2VkIC1pICcvXiVzL2QnICVzIiAlIFwNCj4gKyAgICAgICAgICAgICAgICAo cmVtb3RlX2lwLnN0cmlwKCksIHJzYV9rZXlfcGF0aCkNCj4gKyAgICAgICAgc2VsZi5ob3N0X2R1 dC50ZXN0ZXIuc2VuZF9leHBlY3QocmVtb3ZlX3JzYV9rZXlfY21kLCAiIyAiKQ0KPiArDQo+ICsg ICAgZGVmIHN0b3Aoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBTdG9wIHRoZSBW TSBieSB0aGUgbmFtZSBvZiBWTS4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIE5vdEltcGxl bWVudGVkDQo+IGRpZmYgLS1naXQgYS9mcmFtZXdvcmsvdmlydF9kdXQucHkgYi9mcmFtZXdvcmsv dmlydF9kdXQucHkNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMTA3 MzI1Mw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2ZyYW1ld29yay92aXJ0X2R1dC5weQ0KPiBA QCAtMCwwICsxLDIzOSBAQA0KPiArIyBCU0QgTElDRU5TRQ0KPiArIw0KPiArIyBDb3B5cmlnaHQo YykgMjAxMC0yMDE1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiAr IyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArIw0KPiArIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCj4gKyMgbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zDQo+ICsjIGFyZSBtZXQ6DQo+ICsjDQo+ICsjICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KPiArIyAgICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0K PiArIyAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQNCj4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KPiArIyAgICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KPiArIyAgICAg ZGlzdHJpYnV0aW9uLg0KPiArIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3Jh dGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KPiArIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkDQo+ICsjICAgICBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u DQo+ICsjDQo+ICsjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI T0xERVJTIEFORCBDT05UUklCVVRPUlMNCj4gKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCj4gKyMgTElNSVRFRCBUTywg VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S DQo+ICsjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQ09QWVJJR0hUDQo+ICsjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KPiArIyBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQo+ICsj IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLA0KPiArIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCj4gKyMgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KPiArIyAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UNCj4gKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCj4gKw0KPiAraW1wb3J0IG9zDQo+ICtpbXBv cnQgcmUNCj4gK2ltcG9ydCB0aW1lDQo+ICtpbXBvcnQgZHRzDQo+ICtpbXBvcnQgc2V0dGluZ3MN Cj4gK2Zyb20gY29uZmlnIGltcG9ydCBQb3J0Q29uZg0KPiArZnJvbSBzZXR0aW5ncyBpbXBvcnQg TklDUywgTE9HX05BTUVfU0VQDQo+ICtmcm9tIHNzaF9jb25uZWN0aW9uIGltcG9ydCBTU0hDb25u ZWN0aW9uDQo+ICtmcm9tIHByb2plY3RfZHBkayBpbXBvcnQgRFBES2R1dA0KPiArZnJvbSBkdXQg aW1wb3J0IER1dA0KPiArZnJvbSBuZXRfZGV2aWNlIGltcG9ydCBOZXREZXZpY2UNCj4gK2Zyb20g bG9nZ2VyIGltcG9ydCBnZXRMb2dnZXINCj4gKw0KPiArDQo+ICtjbGFzcyBWaXJ0RHV0KERQREtk dXQpOg0KPiArDQo+ICsgICAgIiIiDQo+ICsgICAgQSBjb25uZWN0aW9uIHRvIHRoZSBDUkIgdW5k ZXIgdGVzdC4NCj4gKyAgICBUaGlzIGNsYXNzIHNlbmRzIGNvbW1hbmRzIHRvIHRoZSBDUkIgYW5k IHZhbGlkYXRlcyB0aGUgcmVzcG9uc2VzLiBJdA0KPiBpcw0KPiArICAgIGltcGxlbWVudGVkIHVz aW5nIGVpdGhlciBzc2ggZm9yIGxpbnV4YXBwIG9yIHRoZSB0ZXJtaW5hbCBzZXJ2ZXIgZm9yDQo+ ICsgICAgYmFyZW1ldGFsLg0KPiArICAgIEFsbCBvcGVyYXRpb25zIGFyZSBpbiBmYWN0IGRlbGVn YXRlZCB0byBhbiBpbnN0YW5jZSBvZiBlaXRoZXINCj4gQ1JCTGludXhBcHANCj4gKyAgICBvciBD UkJCYXJlTWV0YWwuDQo+ICsgICAgIiIiDQo+ICsNCj4gKyAgICBkZWYgX19pbml0X18oc2VsZiwg Y3JiLCBzZXJpYWxpemVyLCB2aXJ0dHlwZSwgdm1fbmFtZSwgc3VpdGUpOg0KPiArICAgICAgICBz dXBlcihEdXQsIHNlbGYpLl9faW5pdF9fKGNyYiwgc2VyaWFsaXplcikNCj4gKyAgICAgICAgc2Vs Zi52bV9pcCA9IHNlbGYuZ2V0X2lwX2FkZHJlc3MoKQ0KPiArICAgICAgICBzZWxmLk5BTUUgPSAn dmlydGR1dCcgKyBMT0dfTkFNRV9TRVAgKyAnJXMnICUgc2VsZi52bV9pcA0KPiArICAgICAgICAj IGxvYWQgcG9ydCBjb25maWcgZnJvbSBzdWl0ZSBjZmcNCj4gKyAgICAgICAgc2VsZi5zdWl0ZSA9 IHN1aXRlDQo+ICsgICAgICAgIHNlbGYubG9nZ2VyID0gZ2V0TG9nZ2VyKHNlbGYuTkFNRSkNCj4g KyAgICAgICAgc2VsZi5sb2dnZXIuY29uZmlnX2V4ZWN1dGlvbigndm1kdXQnKQ0KPiArICAgICAg ICBzZWxmLnNlc3Npb24gPSBTU0hDb25uZWN0aW9uKHNlbGYudm1faXAsIHNlbGYuTkFNRSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9wYXNzd29yZCgp KQ0KPiArICAgICAgICBzZWxmLnNlc3Npb24uaW5pdF9sb2coc2VsZi5sb2dnZXIpDQo+ICsNCj4g KyAgICAgICAgIyBpZiByZWRpcmVjdCBzc2ggcG9ydCwgdGhlcmUncyBvbmx5IG9uZSBzZXNzaW9u IGVuYWJsZWQNCj4gKyAgICAgICAgc2VsZi5hbHRfc2Vzc2lvbiA9IFNTSENvbm5lY3Rpb24oc2Vs Zi52bV9pcCwgc2VsZi5OQU1FICsgJ19hbHQnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLmdldF9wYXNzd29yZCgpKQ0KPiArICAgICAgICBzZWxmLmFs dF9zZXNzaW9uLmluaXRfbG9nKHNlbGYubG9nZ2VyKQ0KPiArDQo+ICsgICAgICAgIHNlbGYubnVt YmVyX29mX2NvcmVzID0gMA0KPiArICAgICAgICBzZWxmLnRlc3RlciA9IE5vbmUNCj4gKyAgICAg ICAgc2VsZi5jb3JlcyA9IFtdDQo+ICsgICAgICAgIHNlbGYuYXJjaGl0ZWN0dXJlID0gTm9uZQ0K PiArICAgICAgICBzZWxmLnBvcnRzX2luZm8gPSBOb25lDQo+ICsgICAgICAgIHNlbGYucG9ydHNf bWFwID0gW10NCj4gKyAgICAgICAgc2VsZi52aXJ0dHlwZSA9IHZpcnR0eXBlDQo+ICsgICAgICAg IHNlbGYudm10eXBlID0gJycNCj4gKyAgICAgICAgaWYgc2VsZi52aXJ0dHlwZSA9PSAnWEVOJzoN Cj4gKyAgICAgICAgICAgIHNlbGYudm10eXBlID0gJ2RvbXUnDQoNCkNoYW5nZSB2aXJ0dHlwZSB0 byB2aXJ0X3R5cGUsIGFuZCB3aHkgbm90IGNoZWNrIG9ubHkgYnkgdmlydF90eXBlPyBXaGF0J3Mg dGhlIGRpZmZlcmVuY2Ugb2Ygdm10eXBlPw0KDQo+ICsgICAgICAgICAgICBzZWxmLnZpcnR0eXBl ID0gJ2hvc3QnCQ0KPiArDQo+ICsgICAgZGVmIHNldF9uaWNfdHlwZShzZWxmLCBuaWNfdHlwZSk6 DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBTZXQgQ1JCIE5JQ1MgcmVhZHkgdG8gdmFsaWRh dGVkLg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgc2VsZi5uaWNfdHlwZSA9IG5pY190eXBl DQo+ICsgICAgICAgICMgdm1fZHV0IGNvbmZpZyB3aWxsIGxvYWQgZnJvbSB2bSBjb25maWd1cmF0 aW9uIGZpbGUNCj4gKw0KPiArICAgIGRlZiBsb2FkX3BvcnRjb25mKHNlbGYpOg0KPiArICAgICAg ICAiIiINCj4gKyAgICAgICAgTG9hZCBwb3J0IGNvbmZpZyBmb3IgdGhpcyB2aXJ0dWFsIG1hY2hp bmUNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIHJldHVybg0KPiArDQo+ICsgICAgZGVmIHNl dF90YXJnZXQoc2VsZiwgdGFyZ2V0KToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFNldCBl bnYgdmFyaWFibGUsIHRoZXNlIGhhdmUgdG8gYmUgc2V0dXAgYWxsIHRoZSB0aW1lLiBTb21lIHRl c3RzDQo+ICsgICAgICAgIG5lZWQgdG8gY29tcGlsZSBleGFtcGxlIGFwcHMgYnkgdGhlbXNlbHZl cyBhbmQgd2lsbCBmYWlsDQo+IG90aGVyd2lzZS4NCj4gKyAgICAgICAgU2V0IGh1Z2VwYWdlIG9u IERVVCBhbmQgaW5zdGFsbCBtb2R1bGVzIHJlcXVpcmVkIGJ5IERQREsuDQo+ICsgICAgICAgIENv bmZpZ3VyZSBkZWZhdWx0IGl4Z2JlIFBNRCBmdW5jdGlvbi4NCj4gKyAgICAgICAgIiIiDQo+ICsg ICAgICAgIHNlbGYuc2V0X3Rvb2xjaGFpbih0YXJnZXQpDQo+ICsNCj4gKyAgICAgICAgIyBzZXQg ZW52IHZhcmlhYmxlDQo+ICsgICAgICAgICMgVGhlc2UgaGF2ZSB0byBiZSBzZXR1cCBhbGwgdGhl IHRpbWUuIFNvbWUgdGVzdHMgbmVlZCB0byBjb21waWxlDQo+ICsgICAgICAgICMgZXhhbXBsZSBh cHBzIGJ5IHRoZW1zZWx2ZXMgYW5kIHdpbGwgZmFpbCBvdGhlcndpc2UuDQo+ICsgICAgICAgIHNl bGYuc2VuZF9leHBlY3QoImV4cG9ydCBSVEVfVEFSR0VUPSIgKyB0YXJnZXQsICIjIikNCj4gKyAg ICAgICAgc2VsZi5zZW5kX2V4cGVjdCgiZXhwb3J0IFJURV9TREs9YHB3ZGAiLCAiIyIpDQo+ICsN Cj4gKyAgICAgICAgaWYgbm90IHNlbGYuc2tpcF9zZXR1cDoNCj4gKyAgICAgICAgICAgIHNlbGYu YnVpbGRfaW5zdGFsbF9kcGRrKHRhcmdldCkNCj4gKw0KPiArICAgICAgICBzZWxmLnNldHVwX21l bW9yeShodWdlcGFnZXM9NTEyKQ0KNTEyTSBtYXliZSBub3QgYXZhaWxhYmxlLCB0aGlzIHZhbHVl IHNob3VsZCBjYWxjdWxhdGVkIGJ5IHZpcnR1YWwgbWFjaGluZSBtZW1vcnkgc2l6ZSBvciB2YWx1 ZSBzdHJpcHBlZCBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZS4gDQoNCj4gKyAgICAgICAgc2VsZi5z ZXR1cF9tb2R1bGVzKHRhcmdldCkNCj4gKw0KPiArICAgICAgICBzZWxmLmJpbmRfaW50ZXJmYWNl c19saW51eCgnaWdiX3VpbycpDQoNCk1vZHVsZSBzaG91bGQgYWxzbyBzdHJpcHBlZCBmcm9tIGNv bmZpZ3VyYXRpb24gZmlsZS4NCg0KPiArDQo+ICsgICAgZGVmIHByZXJlcXVpc2l0ZXMoc2VsZiwg cGtnTmFtZSwgcGF0Y2gpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgUHJlcmVxdWVzdCBm dW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBleGVjdXRlIGFueSB0ZXN0IGNhc2UuDQo+ ICsgICAgICAgIFdpbGwgY2FsbCBmdW5jdGlvbiB0byBzY2FuIGFsbCBsY29yZSdzIGluZm9ybWF0 aW9uIHdoaWNoIG9uIERVVC4NCj4gKyAgICAgICAgVGhlbiBjYWxsIHBjaSBzY2FuIGZ1bmN0aW9u IHRvIGNvbGxlY3QgbmljIGRldmljZSBpbmZvcm1hdGlvbi4NCj4gKyAgICAgICAgQXQgbGFzdCBz ZXR1cCBEVVQnIGVudmlyb25tZW50IGZvciB2YWxpZGF0aW9uLg0KPiArICAgICAgICAiIiINCj4g KyAgICAgICAgc2VsZi5wcmVwYXJlX3BhY2thZ2UocGtnTmFtZSwgcGF0Y2gpDQo+ICsNCj4gKyAg ICAgICAgc2VsZi5zZW5kX2V4cGVjdCgiY2QgJXMiICUgc2VsZi5iYXNlX2RpciwgIiMgIikNCj4g KyAgICAgICAgc2VsZi5ob3N0X3Nlc3Npb24uc2VuZF9leHBlY3QoImNkICVzIiAlIHNlbGYuYmFz ZV9kaXIsICIjICIpDQo+ICsgICAgICAgIHNlbGYuc2VuZF9leHBlY3QoImFsaWFzIGxzPSdscyAt LWNvbG9yPW5vbmUnIiwgIiMiKQ0KPiArDQo+ICsgICAgICAgIGlmIHNlbGYuZ2V0X29zX3R5cGUo KSA9PSAnZnJlZWJzZCc6DQo+ICsgICAgICAgICAgICBzZWxmLnNlbmRfZXhwZWN0KCdhbGlhcyBt YWtlPWdtYWtlJywgJyMgJykNCj4gKyAgICAgICAgICAgIHNlbGYuc2VuZF9leHBlY3QoJ2FsaWFz IHNlZD1nc2VkJywgJyMgJykNCj4gKw0KV2UgZG8gbm90IHN1cHBvcnQgZnJlZWJzZCBndWVzdCwg dGhvc2UgY29kZSBzaG91bGQgcmVtb3ZlZC4NCg0KPiArICAgICAgICBzZWxmLmluaXRfY29yZV9s aXN0KCkNCj4gKyAgICAgICAgc2VsZi5wY2lfZGV2aWNlc19pbmZvcm1hdGlvbigpDQo+ICsNCj4g KyAgICAgICAgIyBzY2FuIHBvcnRzIGJlZm9yZSByZXN0b3JlIGludGVyZmFjZQ0KPiArICAgICAg ICBzZWxmLnNjYW5fcG9ydHMoKQ0KPiArICAgICAgICAjIHJlc3RvcmUgZHV0IHBvcnRzIHRvIGtl cm5lbA0KPiArICAgICAgICBpZiBzZWxmLnZtdHlwZSAhPSAnZG9tdSc6DQo+ICsgICAgICAgICAg ICBzZWxmLnJlc3RvcmVfaW50ZXJmYWNlcygpDQo+ICsgICAgICAgIGVsc2U6DQo+ICsgICAgICAg ICAgICBzZWxmLnJlc3RvcmVfaW50ZXJmYWNlc19kb211KCkNCj4gKyAgICAgICAgIyByZXNjYW4g cG9ydHMgYWZ0ZXIgaW50ZXJmYWNlIHVwDQpEdXBsaWNhdGVkIGNvbmNlcHQgd2l0aCB2aXJ0X3R5 cGUuIElmIGZ1bmN0aW9ucyBkaWZmZXJlbnQgYmV0d2VlbiBoeXBlcnZpc29ycywgd2UgbmVlZCBp bXBsZW1lbnRlZCB0aGVtIGluIHFlbXVfe3ZpcnRfdHlwZX0uDQoNCj4gKyAgICAgICAgc2VsZi5y ZXNjYW5fcG9ydHMoKQ0KPiArDQo+ICsgICAgICAgICMgbm8gbmVlZCB0byByZXNjYW4gcG9ydHMg Zm9yIGd1ZXN0IG9zIGp1c3QgYm9vdHVwDQo+ICsgICAgICAgICMgbG9hZCBwb3J0IGluZm9yIGZy b20gY29uZmlnIGZpbGUNCj4gKyAgICAgICAgc2VsZi5sb2FkX3BvcnRjb25mKCkNCj4gKw0KTmVl ZCBjaGVjayB3aGV0aGVyIGxvYWQgZmFpbGVkLg0KDQo+ICsgICAgICAgICMgZW5hYmxlIHRlc3Rl ciBwb3J0IGlwdjYNCj4gKyAgICAgICAgc2VsZi5ob3N0X2R1dC5lbmFibGVfdGVzdGVyX2lwdjYo KQ0KPiArICAgICAgICBzZWxmLm1vdW50X3Byb2NmcygpDQo+ICsgICAgICAgICMgYXV0byBkZXRl Y3QgbmV0d29yayB0b3BvbG9neQ0KPiArICAgICAgICBzZWxmLm1hcF9hdmFpbGFibGVfcG9ydHMo KQ0KPiArICAgICAgICAjIGRpc2FibGUgdGVzdGVyIHBvcnQgaXB2Ng0KPiArICAgICAgICBzZWxm Lmhvc3RfZHV0LmRpc2FibGVfdGVzdGVyX2lwdjYoKQ0KPiArDQo+ICsgICAgICAgICMgcHJpbnQg bGF0ZXN0IHBvcnRzX2luZm8NCj4gKyAgICAgICAgZm9yIHBvcnRfaW5mbyBpbiBzZWxmLnBvcnRz X2luZm86DQo+ICsgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKHBvcnRfaW5mbykNCj4gKw0K PiArICAgIGRlZiByZXN0b3JlX2ludGVyZmFjZXNfZG9tdShzZWxmKToNCj4gKyAgICAgICAgIiIi DQo+ICsgICAgICAgIFJlc3RvcmUgTGludXggaW50ZXJmYWNlcy4NCj4gKyAgICAgICAgIiIiDQo+ ICsgICAgICAgIGZvciBwb3J0IGluIHNlbGYucG9ydHNfaW5mbzoNCj4gKyAgICAgICAgICAgIHBj aV9idXMgPSBwb3J0WydwY2knXQ0KPiArICAgICAgICAgICAgcGNpX2lkID0gcG9ydFsndHlwZSdd DQo+ICsgICAgICAgICAgICBkcml2ZXIgPSBzZXR0aW5ncy5nZXRfbmljX2RyaXZlcihwY2lfaWQp DQo+ICsgICAgICAgICAgICBpZiBkcml2ZXIgaXMgbm90IE5vbmU6DQo+ICsgICAgICAgICAgICAg ICAgYWRkcl9hcnJheSA9IHBjaV9idXMuc3BsaXQoJzonKQ0KPiArICAgICAgICAgICAgICAgIGJ1 c19pZCA9IGFkZHJfYXJyYXlbMF0NCj4gKyAgICAgICAgICAgICAgICBkZXZmdW5faWQgPSBhZGRy X2FycmF5WzFdDQo+ICsgICAgICAgICAgICAgICAgcG9ydCA9IE5ldERldmljZShzZWxmLCBidXNf aWQsIGRldmZ1bl9pZCkNCg0KUG9ydCBvYmplY3QgaXMgdGVtcG9yYXJ5IHVzZWQsIHdoeSB1c2Ug TmV0RGV2aWNlIG1vZHVsZSBjcmVhdGUgYW5vdGhlciBvbmU/IFdlIGNhbiBqdXN0IHVzZSBwb3J0 Wydwb3J0J10gdG8gdXNlIE5ldERldmljZSBvYmplY3QuDQo+ICsgICAgICAgICAgICAgICAgaXRm ID0gcG9ydC5nZXRfaW50ZXJmYWNlX25hbWUoKQ0KPiArICAgICAgICAgICAgICAgIHNlbGYuc2Vu ZF9leHBlY3QoImlmY29uZmlnICVzIHVwIiAlIGl0ZiwgIiMgIikNCj4gKyAgICAgICAgICAgICAg ICB0aW1lLnNsZWVwKDMwKQ0KDQpTbGVlcCAzMCBzZWNvbmRzIGlzIHRvbyBsb25nIGFuZCBldmVy eSBwb3J0IHdpbGwgd2FpdCBzbyBsb25nLiBJcyB0aGVyZSBhbnkgbmVlZCB0byB3YWl0IHNvIGxv bmc/IFdlIHNob3VsZCBjYWxsIGFsbCBwb3J0cyB1cCBhbmQgdGhlbiB3YWl0IGZldyBzZWNvbmRz Lg0KPiArICAgICAgICAgICAgICAgIHByaW50IHNlbGYuc2VuZF9leHBlY3QoImlwIGxpbmsgbHMg JXMiICUgaXRmLCAiIyAiKQ0KPiArICAgICAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgICAg ICBzZWxmLmxvZ2dlci5pbmZvKA0KPiArICAgICAgICAgICAgICAgICAgICAiTk9UIEZPVU5EIERS SVZFUiBGT1IgUE9SVCAoJXN8JXMpISEhIiAlIChwY2lfYnVzLA0KPiBwY2lfaWQpKQ0KPiArDQo+ ICsgICAgZGVmIHBjaV9kZXZpY2VzX2luZm9ybWF0aW9uKHNlbGYpOg0KPiArICAgICAgICBzZWxm LnBjaV9kZXZpY2VzX2luZm9ybWF0aW9uX3VuY2FjaGVkKCkNCj4gKw0KPiArICAgIGRlZiBnZXRf bWVtb3J5X2NoYW5uZWxzKHNlbGYpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgVmlydHVh bCBtYWNoaW5lIGhhcyBubyBtZW1vcnkgY2hhbm5lbCBjb25jZXB0LCBzbyBhbHdheXMgcmV0dXJu IDENCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIHJldHVybiAxDQo+ICsNCj4gKyAgICBkZWYg Y2hlY2tfcG9ydHNfYXZhaWxhYmxlKHNlbGYsIHBjaV9idXMsIHBjaV9pZCk6DQo+ICsgICAgICAg ICIiIg0KPiArICAgICAgICBDaGVjayB0aGF0IHdoZXRoZXIgYXV0byBzY2FubmVkIHBvcnRzIHJl YWR5IHRvIHVzZQ0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgcGNpX2FkZHIgPSAiJXM6JXMi ICUgKHBjaV9idXMsIHBjaV9pZCkNCj4gKyAgICAgICAgaWYgcGNpX2lkID09ICI4MDg2OjEwMGUi Og0KPiArICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQoNCldoeSBlMTAwMCBkZWZhdWx0IHBjaV9p ZCBpcyBpbnZhbGlkZWQsIG5lZWQgY29tbWVudHMgaGVyZS4NCg0KPiArICAgICAgICByZXR1cm4g VHJ1ZQ0KPiArICAgICAgICAjIHBjaV9hZGRyID0gIiVzOiVzIiAlIChwY2lfYnVzLCBwY2lfaWQp DQo+ICsgICAgICAgICMgaWYgc2VsZi5uaWNfdHlwZSA9PSAnYW55JzoNCj4gKyAgICAgICAgIyBs b2FkIHZtIHBvcnQgY29uZiBuZWVkIGFub3RoZXIgZnVuY3Rpb24NCj4gKyAgICAgICAgIyBuZWVk IGFkZCB2aXRydWFsIGZ1bmN0aW9uIGRldmljZSBpbnRvIE5JQ1MNCg0KTWlzc2luZyBmdW5jdGlv bnMgaGVyZS4NCg0KPiArDQo+ICsgICAgZGVmIHNjYW5fcG9ydHMoc2VsZik6DQo+ICsgICAgICAg ICIiIg0KPiArICAgICAgICBTY2FuIHBvcnRzIGluZm9ybWF0aW9uLCBmb3Igdm0gd2lsbCBhbHdh eXMgc2Nhbg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgc2VsZi5zY2FuX3BvcnRzX3VuY2Fj aGVkKCkNCj4gKw0KPiArICAgIGRlZiBzY2FuX3BvcnRzX3VuY2FjaGVkKHNlbGYpOg0KPiArICAg ICAgICAiIiINCj4gKyAgICAgICAgU2NhbiBwb3J0cyBhbmQgY29sbGVjdCBwb3J0J3MgcGNpIGlk LCBtYWMgYWRyZXNzLCBpcHY2IGFkZHJlc3MuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBz Y2FuX3BvcnRzX3VuY2FjaGVkID0gZ2V0YXR0cigNCj4gKyAgICAgICAgICAgIHNlbGYsICdzY2Fu X3BvcnRzX3VuY2FjaGVkXyVzJyAlIHNlbGYuZ2V0X29zX3R5cGUoKSkNCj4gKyAgICAgICAgcmV0 dXJuIHNjYW5fcG9ydHNfdW5jYWNoZWQoKQ0KPiArDQo+ICsgICAgZGVmIG1hcF9hdmFpbGFibGVf cG9ydHMoc2VsZik6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBMb2FkIG9yIGdlbmVyYXRl IG5ldHdvcmsgY29ubmVjdGlvbiBtYXBwaW5nIGxpc3QuDQo+ICsgICAgICAgICIiIg0KPiArICAg ICAgICBzZWxmLm1hcF9hdmFpbGFibGVfcG9ydHNfdW5jYWNoZWQoKQ0KPiArICAgICAgICBzZWxm LmxvZ2dlci53YXJuaW5nKCJEVVQgUE9SVCBNQVA6ICIgKyBzdHIoc2VsZi5wb3J0c19tYXApKQ0K PiArDQo+ICsgICAgZGVmIHNlbmRfcGluZzYoc2VsZiwgbG9jYWxQb3J0LCBpcHY2LCBtYWM9Jycp Og0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgU2VuZCBwaW5nNiBwYWNrZXQgZnJvbSBsb2Nh bCBwb3J0IHdpdGggZGVzdGluYXRpb24gaXB2NiBhZGRyZXNzLg0KPiArICAgICAgICAiIiINCj4g KyAgICAgICAgaWYgc2VsZi5wb3J0c19pbmZvW2xvY2FsUG9ydF1bJ3R5cGUnXSA9PSAnaXhpYSc6 DQo+ICsgICAgICAgICAgICBwYXNzDQo+ICsgICAgICAgIGVsc2U6DQo+ICsgICAgICAgICAgICBy ZXR1cm4gc2VsZi5zZW5kX2V4cGVjdCgicGluZzYgLXcgMSAtYyAxIC1BIC1JICVzICVzIiAlDQo+ IChzZWxmLnBvcnRzX2luZm9bbG9jYWxQb3J0XVsnaW50ZiddLCBpcHY2KSwgIiMgIiwgMTApDQo+ IGRpZmYgLS1naXQgYS9mcmFtZXdvcmsvdmlydF9yZXNvdXJjZS5weSBiL2ZyYW1ld29yay92aXJ0 X3Jlc291cmNlLnB5DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjg1 NmY5ZGMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9mcmFtZXdvcmsvdmlydF9yZXNvdXJjZS5w eQ0KPiBAQCAtMCwwICsxLDQ4NiBAQA0KPiArIyEvdXNyL2Jpbi9weXRob24NCj4gKyMgQlNEIExJ Q0VOU0UNCj4gKyMNCj4gKyMgQ29weXJpZ2h0KGMpIDIwMTAtMjAxNSBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyMN Cj4gKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0DQo+ICsjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KPiArIyBhcmUgbWV0Og0KPiArIw0KPiAr IyAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQNCj4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCj4gKyMgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsjICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4NCj4gKyMgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUNCj4gKyMgICAgIGRpc3RyaWJ1dGlvbi4NCj4gKyMgICAqIE5laXRo ZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCj4g KyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZA0KPiArIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KPiArIw0KPiArIyBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQo+ICsj ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UDQo+ICsjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KPiArIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KPiArIyBPV05F UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwNCj4gKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVA0KPiArIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCj4gKyMgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZDQo+ICsjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQNCj4gKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQo+ICsjIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu DQo+ICtmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludA0KPiArDQo+ICtmcm9tIHV0aWxzIGltcG9y dCBnZXRfb2JqX2Z1bmNzDQo+ICsNCj4gK0lOSVRfRlJFRV9QT1JUID0gNjA2MA0KPiArDQo+ICsN Cj4gK2NsYXNzIFZpcnRSZXNvdXJjZShvYmplY3QpOg0KPiArDQo+ICsgICAgIiIiDQo+ICsgICAg Q2xhc3MgaGFuZGxlIGR1dCByZXNvdXJjZSwgbGlrZSBjcHUsIG1lbW9yeSwgbmV0IGRldmljZXMN Cj4gKyAgICAiIiINCj4gKw0KPiArICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkdXQpOg0KPiArICAg ICAgICBzZWxmLmR1dCA9IGR1dA0KPiArDQo+ICsgICAgICAgIHNlbGYuY29yZXMgPSBbaW50KGNv cmVbJ3RocmVhZCddKSBmb3IgY29yZSBpbiBkdXQuY29yZXNdDQo+ICsgICAgICAgICMgaW5pdGlh bGl6ZWQgdW51c2VkIGNvcmVzDQo+ICsgICAgICAgIHNlbGYudW51c2VkX2NvcmVzID0gc2VsZi5j b3Jlc1s6XQ0KPiArICAgICAgICAjIGluaXRpYWxpemVkIHVzZWQgY29yZXMNCj4gKyAgICAgICAg c2VsZi51c2VkX2NvcmVzID0gWy0xXSAqIGxlbihzZWxmLnVudXNlZF9jb3JlcykNCj4gKw0KTmVl ZCBtYWNybyBJTlZMIHJlcGxhY2Ugb2YgIi0xIi4NCg0KPiArICAgICAgICBzZWxmLnBvcnRzX2lu Zm8gPSBkdXQucG9ydHNfaW5mbw0KPiArICAgICAgICAjIGluaXRpYWxpemVkIHVudXNlZCBwb3J0 cw0KPiArICAgICAgICBzZWxmLnBvcnRzID0gW3BvcnRbJ3BjaSddIGZvciBwb3J0IGluIGR1dC5w b3J0c19pbmZvXQ0KPiArICAgICAgICBzZWxmLnVudXNlZF9wb3J0cyA9IHNlbGYucG9ydHNbOl0N Cj4gKyAgICAgICAgIyBpbml0aWFsaXplZCB1c2VkIHBvcnRzDQo+ICsgICAgICAgIHNlbGYudXNl ZF9wb3J0cyA9IFsndW51c2VkJ10gKiBsZW4oc2VsZi51bnVzZWRfcG9ydHMpDQo+ICsNCj4gKyAg ICAgICAgIyBpbml0aWFsaXplZCB2ZiBwb3J0cw0KPiArICAgICAgICBzZWxmLnZmc19pbmZvID0g W10NCj4gKyAgICAgICAgc2VsZi52ZnMgPSBbXQ0KPiArICAgICAgICBzZWxmLnVudXNlZF92ZnMg PSBbXQ0KPiArICAgICAgICBzZWxmLnVzZWRfdmZzID0gW10NCj4gKw0KPiArICAgICAgICAjIHNh dmUgYWxsb2NhdGVkIGNvcmVzIGFuZCByZWxhdGVkIHZtDQo+ICsgICAgICAgIHNlbGYuYWxsb2Nh dGVkX2luZm8gPSB7fQ0KPiArDQo+ICsgICAgZGVmIF9fcG9ydF91c2VkKHNlbGYsIHBjaSk6DQo+ ICsgICAgICAgIGluZGV4ID0gc2VsZi5wb3J0cy5pbmRleChwY2kpDQpBZGQgY2hlY2sgbm90IGZv dW5kIHRoZSBwY2kgZGV2aWNlLg0KDQo+ICsgICAgICAgIHNlbGYudXNlZF9wb3J0c1tpbmRleF0g PSBwY2kNCj4gKyAgICAgICAgc2VsZi51bnVzZWRfcG9ydHNbaW5kZXhdID0gJ3VzZWQnDQo+ICsN Cj4gKyAgICBkZWYgX19wb3J0X3VudXNlZChzZWxmLCBwY2kpOg0KPiArICAgICAgICBpbmRleCA9 IHNlbGYucG9ydHMuaW5kZXgocGNpKQ0KQWRkIGNoZWNrIG5vdCBmb3VuZCB0aGUgcGNpIGRldmlj ZS4NCj4gKyAgICAgICAgc2VsZi51bnVzZWRfcG9ydHNbaW5kZXhdID0gcGNpDQo+ICsgICAgICAg IHNlbGYudXNlZF9wb3J0c1tpbmRleF0gPSAndW51c2VkJw0KPiArDQo+ICsgICAgZGVmIF9fcG9y dF9vbl9zb2NrZXQoc2VsZiwgcGNpLCBzb2NrZXQpOg0KPiArICAgICAgICBmb3IgcG9ydCBpbiBz ZWxmLnBvcnRzX2luZm86DQo+ICsgICAgICAgICAgICBpZiBwb3J0WydwY2knXSA9PSBwY2k6DQo+ ICsgICAgICAgICAgICAgICAgaWYgc29ja2V0IGlzIC0xOg0KPiArICAgICAgICAgICAgICAgICAg ICByZXR1cm4gVHJ1ZQ0KPiArDQo+ICsgICAgICAgICAgICAgICAgaWYgcG9ydFsnbnVtYSddID09 IHNvY2tldDoNCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUNCj4gKyAgICAgICAg ICAgICAgICBlbHNlOg0KPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UNCj4gKw0K PiArICAgICAgICByZXR1cm4gRmFsc2UNCj4gKw0KPiArICAgIGRlZiBfX3ZmX3VzZWQoc2VsZiwg cGNpKToNCj4gKyAgICAgICAgaW5kZXggPSBzZWxmLnZmcy5pbmRleChwY2kpDQpBZGQgY2hlY2sg bm90IGZvdW5kIHRoZSBwY2kgZGV2aWNlLg0KPiArICAgICAgICBzZWxmLnVzZWRfdmZzW2luZGV4 XSA9IHBjaQ0KPiArICAgICAgICBzZWxmLnVudXNlZF92ZnNbaW5kZXhdID0gJ3VzZWQnDQo+ICsN Cj4gKyAgICBkZWYgX192Zl91bnVzZWQoc2VsZiwgcGNpKToNCj4gKyAgICAgICAgaW5kZXggPSBz ZWxmLnZmcy5pbmRleChwY2kpDQpBZGQgY2hlY2sgbm90IGZvdW5kIHRoZSBwY2kgZGV2aWNlLg0K PiArICAgICAgICBzZWxmLnVzZWRfdmZzW2luZGV4XSA9ICd1bnVzZWQnDQo+ICsgICAgICAgIHNl bGYudW51c2VkX3Zmc1tpbmRleF0gPSBwY2kNCj4gKw0KPiArICAgIGRlZiBfX2NvcmVfdXNlZChz ZWxmLCBjb3JlKToNCj4gKyAgICAgICAgY29yZSA9IGludChjb3JlKQ0KPiArICAgICAgICBpbmRl eCA9IHNlbGYuY29yZXMuaW5kZXgoY29yZSkNCkFkZCBjaGVjayBub3QgZm91bmQgY29yZS4NCj4g KyAgICAgICAgc2VsZi51c2VkX2NvcmVzW2luZGV4XSA9IGNvcmUNCj4gKyAgICAgICAgc2VsZi51 bnVzZWRfY29yZXNbaW5kZXhdID0gLTENCj4gKw0KPiArICAgIGRlZiBfX2NvcmVfdW51c2VkKHNl bGYsIGNvcmUpOg0KPiArICAgICAgICBjb3JlID0gaW50KGNvcmUpDQo+ICsgICAgICAgIGluZGV4 ID0gc2VsZi5jb3Jlcy5pbmRleChjb3JlKQ0KQWRkIGNoZWNrIG5vdCBmb3VuZCBjb3JlLg0KPiAr ICAgICAgICBzZWxmLnVudXNlZF9jb3Jlc1tpbmRleF0gPSBjb3JlDQo+ICsgICAgICAgIHNlbGYu dXNlZF9jb3Jlc1tpbmRleF0gPSAtMQ0KPiArDQo+ICsgICAgZGVmIF9fY29yZV9vbl9zb2NrZXQo c2VsZiwgY29yZSwgc29ja2V0KToNCj4gKyAgICAgICAgZm9yIGR1dF9jb3JlIGluIHNlbGYuZHV0 LmNvcmVzOg0KPiArICAgICAgICAgICAgaWYgaW50KGR1dF9jb3JlWyd0aHJlYWQnXSkgPT0gY29y ZToNCj4gKyAgICAgICAgICAgICAgICBpZiBzb2NrZXQgaXMgLTE6DQo+ICsgICAgICAgICAgICAg ICAgICAgIHJldHVybiBUcnVlDQo+ICsNCj4gKyAgICAgICAgICAgICAgICBpZiBpbnQoZHV0X2Nv cmVbJ3NvY2tldCddKSA9PSBzb2NrZXQ6DQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBU cnVlDQo+ICsgICAgICAgICAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIEZhbHNlDQo+ICsNCj4gKyAgICAgICAgcmV0dXJuIEZhbHNlDQo+ICsNCj4gKyAgICBkZWYg X19jb3JlX2lzdXNlZChzZWxmLCBjb3JlKToNCj4gKyAgICAgICAgaW5kZXggPSBzZWxmLmNvcmVz LmluZGV4KGNvcmUpDQo+ICsgICAgICAgIGlmIHNlbGYudXNlZF9jb3Jlc1tpbmRleF0gIT0gLTE6 DQo+ICsgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KPiArICAgICAgICBlbHNlOg0KPiArICAgICAg ICAgICAgcmV0dXJuIEZhbHNlDQo+ICsNCj4gKyAgICBkZWYgcmVzZXJ2ZV9jcHUoc2VsZiwgY29y ZW1hc2s9JycpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgUmVzZXJ2ZSBkcGRrIHVzZWQg Y3B1cyBieSBtYXNrDQo+ICsgICAgICAgICIiIg0KQWRkIGNvbW1lbnRzIGhvdyB0byBjYWxjdWxh dGUgY3B1cy4NCg0KPiArICAgICAgICB2YWwgPSBpbnQoY29yZW1hc2ssIGJhc2U9MTYpDQo+ICsg ICAgICAgIGNwdXMgPSBbXQ0KPiArICAgICAgICBpbmRleCA9IDANCj4gKyAgICAgICAgd2hpbGUg dmFsICE9IDA6DQo+ICsgICAgICAgICAgICBpZiB2YWwgJiAweDE6DQo+ICsgICAgICAgICAgICAg ICAgY3B1cy5hcHBlbmQoaW5kZXgpDQo+ICsNCj4gKyAgICAgICAgICAgIHZhbCA9IHZhbCA+PiAx DQo+ICsgICAgICAgICAgICBpbmRleCArPSAxDQo+ICsNCj4gKyAgICAgICAgZm9yIGNwdSBpbiBj cHVzOg0KPiArICAgICAgICAgICAgc2VsZi5fX2NvcmVfdXNlZChjcHUpDQo+ICsNCj4gKyAgICBk ZWYgYWxsb2NfY3B1KHNlbGYsIHZtPScnLCBudW1iZXI9LTEsIHNvY2tldD0tMSwgY29yZWxpc3Q9 Tm9uZSk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBUaGVyZSdyZSB0d28gb3B0aW9ucyBm b3IgcmVxdWVzdCBjcHUgcmVzb3VjZSBmb3Igdm0uDQo+ICsgICAgICAgIElmIG51bWJlciBpcyBu b3QgLTEsIGp1c3QgYWxsb2NhdGUgY3B1IGZyb20gbm90IHVzZWQgY29yZXMuDQo+ICsgICAgICAg IElmIGxpc3QgaXMgbm90IE5vbmUsIHdpbGwgYWxsb2NhdGUgY3B1IGFmdGVyIGNoZWNrZWQuDQo+ ICsgICAgICAgICIiIg0KPiArICAgICAgICBjb3JlcyA9IFtdDQo+ICsNCj4gKyAgICAgICAgaWYg dm0gPT0gJyc6DQo+ICsgICAgICAgICAgICBwcmludCAiQWxsb2MgY3B1IHJlcXVlc3Qgdml0dWFs IG1hY2hpbmUgbmFtZSEhISINCj4gKyAgICAgICAgICAgIHJldHVybiBjb3Jlcw0KPiArDQo+ICsg ICAgICAgIGlmIG51bWJlciAhPSAtMToNCj4gKyAgICAgICAgICAgIGZvciBjb3JlIGluIHNlbGYu dW51c2VkX2NvcmVzOg0KPiArICAgICAgICAgICAgICAgIGlmIGNvcmUgIT0gLTEgYW5kIG51bWJl ciAhPSAwOg0KLTEgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IG1hY3JvIElOVkFMLg0KPiArICAgICAg ICAgICAgICAgICAgICBpZiBzZWxmLl9fY29yZV9vbl9zb2NrZXQoY29yZSwgc29ja2V0KSBpcyBU cnVlOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NvcmVfdXNlZChjb3JlKQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgY29yZXMuYXBwZW5kKHN0cihjb3JlKSkNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAtIDENCj4gKyAgICAgICAgICAg IGlmIG51bWJlciAhPSAwOg0KPiArICAgICAgICAgICAgICAgIHByaW50ICJDYW4ndCBhbGxvY2F0 ZWQgcmVxdWVzdGVkIGNwdSEhISINCj4gKw0KU2hvdWxkIHJldHVybiBlcnJvciBhbmQgZnJlZSB1 c2VkIGNvcmVzLg0KDQo+ICsgICAgICAgIGlmIGNvcmVsaXN0IGlzIG5vdCBOb25lOg0KPiArICAg ICAgICAgICAgZm9yIGNvcmUgaW4gY29yZWxpc3Q6DQo+ICsgICAgICAgICAgICAgICAgaWYgc2Vs Zi5fX2NvcmVfaXN1c2VkKGludChjb3JlKSkgaXMgVHJ1ZToNCj4gKyAgICAgICAgICAgICAgICAg ICAgcHJpbnQgIkNvcmUgJXMgaGFzIGJlZW4gdXNlZCEhISIgJSBjb3JlDQpTaG91bGQgcmV0dXJu IGVycm9yIGhlcmUuDQo+ICsgICAgICAgICAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgICAg ICAgICAgaWYgc2VsZi5fX2NvcmVfb25fc29ja2V0KGludChjb3JlKSwgc29ja2V0KSBpcyBUcnVl Og0KPiArICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NvcmVfdXNlZChpbnQoY29yZSkp DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb3Jlcy5hcHBlbmQoY29yZSkNCj4gKw0KPiAr ICAgICAgICBpZiB2bSBub3QgaW4gc2VsZi5hbGxvY2F0ZWRfaW5mbzoNCj4gKyAgICAgICAgICAg IHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dID0ge30NCj4gKw0KPiArICAgICAgICBzZWxmLmFsbG9j YXRlZF9pbmZvW3ZtXVsnY29yZXMnXSA9IGNvcmVzDQo+ICsgICAgICAgIHJldHVybiBjb3Jlcw0K PiArDQo+ICsgICAgZGVmIF9fdm1faGFzX3Jlc291cmNlKHNlbGYsIHZtLCByZXNvdXJjZT0nJyk6 DQo+ICsgICAgICAgIGlmIHZtID09ICcnOg0KPiArICAgICAgICAgICAgc2VsZi5kdXQubG9nZ2Vy LmluZm8oIlZNIG5hbWUgY2FubnQgYmUgTlVMTCEhISIpDQo+ICsgICAgICAgICAgICByYWlzZSBF eGNlcHRpb24oIlZNIG5hbWUgY2FubnQgYmUgTlVMTCEhISIpDQoNCkhvdyB0byBoYW5kbGUgdGhp cyBleGNlcHRpb24/DQoNCj4gKyAgICAgICAgaWYgdm0gbm90IGluIHNlbGYuYWxsb2NhdGVkX2lu Zm86DQo+ICsgICAgICAgICAgICBzZWxmLmR1dC5sb2dnZXIuaW5mbygNCj4gKyAgICAgICAgICAg ICAgICAiVGhlcmUgaXMgbm8gcmVzb3VyY2UgYWxsb2NhdGVkIHRvIFZNIFslc10uIiAlIHZtKQ0K PiArICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQo+ICsgICAgICAgIGlmIHJlc291cmNlID09ICcn Og0KPiArICAgICAgICAgICAgcmV0dXJuIFRydWUNCj4gKyAgICAgICAgaWYgcmVzb3VyY2Ugbm90 IGluIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dOg0KPiArICAgICAgICAgICAgc2VsZi5kdXQubG9n Z2VyLmluZm8oDQo+ICsgICAgICAgICAgICAgICAgIlRoZXJlIGlzIG5vIHJlc291cmNlIFslc10g YWxsb2NhdGVkIHRvIFZNIFslc10gIiAlDQo+ICsgICAgICAgICAgICAgICAgKHJlc291cmNlLCB2 bSkpDQo+ICsgICAgICAgICAgICByZXR1cm4gRmFsc2UNCj4gKyAgICAgICAgcmV0dXJuIFRydWUN Cj4gKw0KPiArICAgIGRlZiBmcmVlX2NwdShzZWxmLCB2bSk6DQo+ICsgICAgICAgIGlmIHNlbGYu X192bV9oYXNfcmVzb3VyY2Uodm0sICdjb3JlcycpOg0KPiArICAgICAgICAgICAgZm9yIGNvcmUg aW4gc2VsZi5hbGxvY2F0ZWRfaW5mb1t2bV1bJ2NvcmVzJ106DQo+ICsgICAgICAgICAgICAgICAg c2VsZi5fX2NvcmVfdW51c2VkKGNvcmUpDQo+ICsgICAgICAgICAgICBzZWxmLmFsbG9jYXRlZF9p bmZvW3ZtXS5wb3AoJ2NvcmVzJykNCj4gKw0KPiArICAgIGRlZiBhbGxvY19wZihzZWxmLCB2bT0n JywgbnVtYmVyPS0xLCBzb2NrZXQ9LTEsIHBmbGlzdD1bXSk6DQo+ICsgICAgICAgICIiIg0KPiAr ICAgICAgICBUaGVyZSdyZSB0d28gb3B0aW9ucyBmb3IgcmVxdWVzdCBwZiBkZXZpY2VzIGZvciB2 bS4NCj4gKyAgICAgICAgSWYgbnVtYmVyIGlzIG5vdCAtMSwganVzdCBhbGxvY2F0ZSBwZiBkZXZp Y2UgZnJvbSBub3QgdXNlZCBwZnMuDQo+ICsgICAgICAgIElmIGxpc3QgaXMgbm90IE5vbmUsIHdp bGwgYWxsb2NhdGUgcGYgZGV2aWNlcyBhZnRlciBjaGVja2VkLg0KPiArICAgICAgICAiIiINCj4g KyAgICAgICAgcG9ydHMgPSBbXQ0KPiArDQo+ICsgICAgICAgIGlmIG51bWJlciAhPSAtMToNCj4g KyAgICAgICAgICAgIGZvciBwY2kgaW4gc2VsZi51bnVzZWRfcG9ydHM6DQo+ICsgICAgICAgICAg ICAgICAgaWYgcGNpICE9ICd1bnVzZWQnIGFuZCBudW1iZXIgIT0gMDoNCj4gKyAgICAgICAgICAg ICAgICAgICAgaWYgc2VsZi5fX3BvcnRfb25fc29ja2V0KHBjaSwgc29ja2V0KSBpcyBUcnVlOg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3BvcnRfdXNlZChwY2kpDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICBwb3J0cy5hcHBlbmQocGNpKQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgbnVtYmVyID0gbnVtYmVyIC0gMQ0KPiArICAgICAgICAgICAgaWYgbnVtYmVyICE9 IDA6DQo+ICsgICAgICAgICAgICAgICAgcHJpbnQgIkNhbid0IGFsbG9jYXRlZCByZXF1ZXN0ZWQg UEYgZGV2aWNlcyEhISINCj4gKw0KU2hvdWxkIGZyZWUgdXNlZCBwb3J0cyBhbmQgcmV0dXJuIGVy cm9yLg0KDQo+ICsgICAgICAgIGlmIHBmbGlzdCBpcyBub3QgTm9uZToNCj4gKyAgICAgICAgICAg IGZvciBwY2kgaW4gcGZsaXN0Og0KPiArICAgICAgICAgICAgICAgIGlmIHNlbGYuX19wb3J0X2lz dXNlZChwY2kpIGlzIFRydWU6DQo+ICsgICAgICAgICAgICAgICAgICAgIHByaW50ICJQb3J0ICVz IGhhcyBiZWVuIHVzZWQhISEiICUgcGNpDQoNClNob3VsZCByZXR1cm4gZXJyb3IuDQo+ICsgICAg ICAgICAgICAgICAgZWxzZToNCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fX3BvcnRf b25fc29ja2V0KHBjaSwgc29ja2V0KSBpcyBUcnVlOg0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5fX3BvcnRfdXNlZChjb3JlKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgcG9y dHMuYXBwZW5kKGNvcmUpDQo+ICsNCj4gKyAgICAgICAgaWYgdm0gbm90IGluIHNlbGYuYWxsb2Nh dGVkX2luZm86DQo+ICsgICAgICAgICAgICBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXSA9IHt9DQo+ ICsNCj4gKyAgICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5mb1t2bV1bJ3BvcnRzJ10gPSBwb3J0cw0K PiArICAgICAgICByZXR1cm4gcG9ydHMNCj4gKw0KPiArICAgIGRlZiBmcmVlX3BmKHNlbGYsIHZt KToNCj4gKyAgICAgICAgaWYgc2VsZi5fX3ZtX2hhc19yZXNvdXJjZSh2bSwgJ3BvcnRzJyk6DQo+ ICsgICAgICAgICAgICBmb3IgcGNpIGluIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dWydwb3J0cydd Og0KPiArICAgICAgICAgICAgICAgIHNlbGYuX19wb3J0X3VudXNlZChwY2kpDQo+ICsgICAgICAg ICAgICBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXS5wb3AoJ3BvcnRzJykNCj4gKw0KPiArICAgIGRl ZiBhbGxvY192Zl9mcm9tX3BmKHNlbGYsIHZtPScnLCBwZl9wY2k9JycsIG51bWJlcj0tMSwgdmZs aXN0PVtdKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFRoZXJlJ3JlIHR3byBvcHRpb25z IGZvciByZXF1ZXN0IHZmIGRldmljZXMgb2YgcGYgZGV2aWNlLg0KPiArICAgICAgICBJZiBudW1i ZXIgaXMgbm90IC0xLCBqdXN0IGFsbG9jYXRlIHZmIGRldmljZSBmcm9tIG5vdCB1c2VkIHZmcy4N Cj4gKyAgICAgICAgSWYgbGlzdCBpcyBub3QgTm9uZSwgd2lsbCBhbGxvY2F0ZSB2ZiBkZXZpY2Vz IGFmdGVyIGNoZWNrZWQuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICB2ZnMgPSBbXQ0KPiAr ICAgICAgICBpZiB2bSA9PSAnJzoNCj4gKyAgICAgICAgICAgIHByaW50ICJBbGxvYyBWRiByZXF1 ZXN0IHZpdHVhbCBtYWNoaW5lIG5hbWUhISEiDQo+ICsgICAgICAgICAgICByZXR1cm4gdmZzDQo+ ICsNCj4gKyAgICAgICAgaWYgcGZfcGNpID09ICcnOg0KPiArICAgICAgICAgICAgcHJpbnQgIkFs bG9jIFZGIHJlcXVlc3QgUEYgcGNpIGFkZHJlc3MhISEiDQo+ICsgICAgICAgICAgICByZXR1cm4g dmZzDQo+ICsNCj4gKyAgICAgICAgZm9yIHZmX2luZm8gaW4gc2VsZi52ZnNfaW5mbzoNCj4gKyAg ICAgICAgICAgIGlmIHZmX2luZm9bJ3BmX3BjaSddID09IHBmX3BjaToNCj4gKyAgICAgICAgICAg ICAgICBpZiB2Zl9pbmZvWydwY2knXSBpbiB2Zmxpc3Q6DQo+ICsgICAgICAgICAgICAgICAgICAg IHZmcy5hcHBlbmQodmZfaW5mb1sncGNpJ10pDQo+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlDQo+ICsNCj4gKyAgICAgICAgICAgICAgICBpZiBudW1iZXIgPiAwOg0KPiArICAgICAgICAg ICAgICAgICAgICB2ZnMuYXBwZW5kKHZmX2luZm9bJ3BjaSddKQ0KPiArICAgICAgICAgICAgICAg ICAgICBudW1iZXIgPSBudW1iZXIgLSAxDQo+ICsNCj4gKyAgICAgICAgZm9yIHZmIGluIHZmczoN Cj4gKyAgICAgICAgICAgIHNlbGYuX192Zl91c2VkKHZmKQ0KPiArDQo+ICsgICAgICAgIGlmIHZt IG5vdCBpbiBzZWxmLmFsbG9jYXRlZF9pbmZvOg0KPiArICAgICAgICAgICAgc2VsZi5hbGxvY2F0 ZWRfaW5mb1t2bV0gPSB7fQ0KPiArDQo+ICsgICAgICAgIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1d Wyd2ZnMnXSA9IHZmcw0KPiArICAgICAgICByZXR1cm4gdmZzDQo+ICsNCj4gKyAgICBkZWYgZnJl ZV92ZihzZWxmLCB2bSk6DQo+ICsgICAgICAgIGlmIHNlbGYuX192bV9oYXNfcmVzb3VyY2Uodm0s ICd2ZnMnKToNCj4gKyAgICAgICAgICAgIGZvciBwY2kgaW4gc2VsZi5hbGxvY2F0ZWRfaW5mb1t2 bV1bJ3ZmcyddOg0KPiArICAgICAgICAgICAgICAgIHNlbGYuX192Zl91bnVzZWQocGNpKQ0KPiAr ICAgICAgICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5mb1t2bV0ucG9wKCd2ZnMnKQ0KPiArDQo+ICsg ICAgZGVmIGFkZF92Zl9vbl9wZihzZWxmLCBwZl9wY2k9JycsIHZmbGlzdD1bXSk6DQo+ICsgICAg ICAgICIiIg0KPiArICAgICAgICBBZGQgdmYgZGV2aWNlcyBnZW5lcmF0ZWQgYnkgc3BlY2lmaWVk IHBmIGRldmljZXMuDQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICAjIGFkZCB2ZnMgaW50byB2 ZiBpbmZvIGxpc3QNCj4gKyAgICAgICAgdmZzID0gW10NCj4gKyAgICAgICAgZm9yIHZmIGluIHZm bGlzdDoNCj4gKyAgICAgICAgICAgIGlmIHZmIG5vdCBpbiBzZWxmLnZmczoNCj4gKyAgICAgICAg ICAgICAgICBzZWxmLnZmc19pbmZvLmFwcGVuZCh7J3BjaSc6IHZmLCAncGZfcGNpJzogcGZfcGNp fSkNCj4gKyAgICAgICAgICAgICAgICB2ZnMuYXBwZW5kKHZmKQ0KPiArICAgICAgICB1c2VkX3Zm cyA9IFsndW51c2VkJ10gKiBsZW4odmZsaXN0KQ0KPiArICAgICAgICBzZWxmLnVudXNlZF92ZnMg Kz0gdmZzDQo+ICsgICAgICAgIHNlbGYudXNlZF92ZnMgKz0gdXNlZF92ZnMNCj4gKyAgICAgICAg c2VsZi52ZnMgKz0gdmZzDQo+ICsNCj4gKyAgICBkZWYgZGVsX3ZmX29uX3BmKHNlbGYsIHBmX3Bj aT0nJywgdmZsaXN0PVtdKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIFJlbW92ZSB2ZiBk ZXZpY2VzIGdlbmVyYXRlZCBieSBzcGVjaWZpZWQgcGYgZGV2aWNlcy4NCj4gKyAgICAgICAgIiIi DQo+ICsgICAgICAgIHZmcyA9IFtdDQo+ICsgICAgICAgIGZvciB2ZiBpbiB2Zmxpc3Q6DQo+ICsg ICAgICAgICAgICBmb3IgdmZzX2luZm8gaW4gc2VsZi52ZnNfaW5mbzoNCj4gKyAgICAgICAgICAg ICAgICBpZiB2ZnNfaW5mb1sncGNpJ10gPT0gdmY6DQo+ICsgICAgICAgICAgICAgICAgICAgIHZm cy5hcHBlbmQodmYpDQo+ICsNCj4gKyAgICAgICAgZm9yIHZmIGluIHZmczoNCj4gKyAgICAgICAg ICAgIHRyeToNCj4gKyAgICAgICAgICAgICAgICBpbmRleCA9IHNlbGYudmZzLmluZGV4KHZmKQ0K PiArICAgICAgICAgICAgZXhjZXB0Og0KPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlDQo+ICsg ICAgICAgICAgICBkZWwgc2VsZi52ZnNfaW5mb1tpbmRleF0NCj4gKyAgICAgICAgICAgIGRlbCBz ZWxmLnVudXNlZF92ZnNbaW5kZXhdDQo+ICsgICAgICAgICAgICBkZWwgc2VsZi51c2VkX3Zmc1tp bmRleF0NCj4gKyAgICAgICAgICAgIGRlbCBzZWxmLnZmc1tpbmRleF0NCj4gKw0KPiArICAgIGRl ZiBhbGxvY19wb3J0KHNlbGYsIHZtPScnKToNCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIEFs bG9jYXRlIHVudXNlZCBob3N0IHBvcnQgZm9yIHZtDQo+ICsgICAgICAgICIiIg0KPiArICAgICAg ICBpZiB2bSA9PSAnJzoNCj4gKyAgICAgICAgICAgIHByaW50ICJBbGxvYyBob3N0IHBvcnQgcmVx dWVzdCB2aXR1YWwgbWFjaGluZSBuYW1lISEhIg0KPiArICAgICAgICAgICAgcmV0dXJuIE5vbmUN Cj4gKw0KPiArICAgICAgICBwb3J0X3N0YXJ0ID0gSU5JVF9GUkVFX1BPUlQgKyByYW5kaW50KDEs IDEwMCkNCj4gKyAgICAgICAgcG9ydF9zdGVwID0gcmFuZGludCgxLCAxMCkNCj4gKyAgICAgICAg cG9ydCA9IE5vbmUNCj4gKyAgICAgICAgY291bnQgPSAyMA0KPiArICAgICAgICB3aGlsZSBUcnVl Og0KPiArICAgICAgICAgICAgaWYgc2VsZi5kdXQuY2hlY2tfcG9ydF9vY2N1cGllZChwb3J0X3N0 YXJ0KSBpcyBGYWxzZToNCj4gKyAgICAgICAgICAgICAgICBwb3J0ID0gcG9ydF9zdGFydA0KPiAr ICAgICAgICAgICAgICAgIGJyZWFrDQo+ICsgICAgICAgICAgICBjb3VudCAtPSAxDQo+ICsgICAg ICAgICAgICBpZiBjb3VudCA8IDA6DQo+ICsgICAgICAgICAgICAgICAgcHJpbnQgJ05vIGF2YWls YWJsZSBwb3J0IG9uIHRoZSBob3N0ISEhJw0KPiArICAgICAgICAgICAgICAgIGJyZWFrDQo+ICsg ICAgICAgICAgICBwb3J0X3N0YXJ0ICs9IHBvcnRfc3RlcA0KPiArDQo+ICsgICAgICAgIGlmIHZt IG5vdCBpbiBzZWxmLmFsbG9jYXRlZF9pbmZvOg0KPiArICAgICAgICAgICAgc2VsZi5hbGxvY2F0 ZWRfaW5mb1t2bV0gPSB7fQ0KPiArDQo+ICsgICAgICAgIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1d Wydob3N0cG9ydCddID0gcG9ydA0KPiArICAgICAgICByZXR1cm4gcG9ydA0KPiArDQo+ICsgICAg ZGVmIGZyZWVfcG9ydChzZWxmLCB2bSk6DQo+ICsgICAgICAgIGlmIHNlbGYuX192bV9oYXNfcmVz b3VyY2Uodm0sICdob3N0cG9ydCcpOg0KPiArICAgICAgICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5m b1t2bV0ucG9wKCdob3N0cG9ydCcpDQo+ICsNCj4gKyAgICBkZWYgYWxsb2Nfdm5jX251bShzZWxm LCB2bT0nJyk6DQo+ICsgICAgICAgICIiIg0KPiArICAgICAgICBBbGxvY2F0ZSB1bnVzZWQgaG9z dCBWTkMgZGlzcGxheSBudW1iZXIgZm9yIFZNLg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAg aWYgdm0gPT0gJyc6DQo+ICsgICAgICAgICAgICBwcmludCAiQWxsb2Mgdm5jIGRpc3BsYXkgbnVt YmVyIHJlcXVlc3Qgdml0dWFsIG1hY2hpbmUNCj4gbmFtZSEhISINCj4gKyAgICAgICAgICAgIHJl dHVybiBOb25lDQo+ICsNCj4gKyAgICAgICAgbWF4X3ZuY19kaXNwbGF5X251bSA9IHNlbGYuZHV0 LmdldF9tYXhpbWFsX3ZuY19udW0oKQ0KPiArICAgICAgICBmcmVlX3ZuY19kaXNwbGF5X251bSA9 IG1heF92bmNfZGlzcGxheV9udW0gKyAxDQo+ICsNCj4gKyAgICAgICAgaWYgdm0gbm90IGluIHNl bGYuYWxsb2NhdGVkX2luZm86DQo+ICsgICAgICAgICAgICBzZWxmLmFsbG9jYXRlZF9pbmZvW3Zt XSA9IHt9DQo+ICsNCj4gKyAgICAgICAgc2VsZi5hbGxvY2F0ZWRfaW5mb1t2bV1bJ3ZuY19kaXNw bGF5X251bSddID0gZnJlZV92bmNfZGlzcGxheV9udW0NCj4gKw0KPiArICAgICAgICByZXR1cm4g ZnJlZV92bmNfZGlzcGxheV9udW0NCj4gKw0KPiArICAgIGRlZiBmcmVlX3ZuY19udW0oc2VsZiwg dm0pOg0KPiArICAgICAgICBpZiBzZWxmLl9fdm1faGFzX3Jlc291cmNlKHZtLCAndm5jX2Rpc3Bs YXlfbnVtJyk6DQo+ICsgICAgICAgICAgICBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXS5wb3AoJ3Zu Y19kaXNwbGF5X251bScpDQo+ICsNCj4gKyAgICBkZWYgZnJlZV9hbGxfcmVzb3VyY2Uoc2VsZiwg dm0pOg0KPiArICAgICAgICBhbGxfZnJlZV9mdW5jcyA9IGdldF9vYmpfZnVuY3Moc2VsZiwgcidm cmVlXycpDQo+ICsgICAgICAgIGZvciBmdW5jIGluIGFsbF9mcmVlX2Z1bmNzOg0KPiArICAgICAg ICAgICAgaWYgZnVuYy5fX25hbWVfXyA9PSAnZnJlZV9hbGxfcmVzb3VyY2UnOg0KPiArICAgICAg ICAgICAgICAgIGNvbnRpbnVlDQo+ICsgICAgICAgICAgICBmdW5jKHZtKQ0KPiArICAgICAgICBp ZiBzZWxmLl9fdm1faGFzX3Jlc291cmNlKHZtKToNCj4gKyAgICAgICAgICAgIHNlbGYuYWxsb2Nh dGVkX2luZm8ucG9wKHZtKQ0KPiArDQo+ICsgICAgZGVmIGdldF9jcHVfb25fdm0oc2VsZiwgdm09 JycpOg0KPiArICAgICAgICAiIiINCj4gKyAgICAgICAgUmV0dXJuIGNvcmUgbGlzdCBvbiBzcGVj aWZpZCBWTS4NCj4gKyAgICAgICAgIiIiDQo+ICsgICAgICAgIGlmIHZtIGluIHNlbGYuYWxsb2Nh dGVkX2luZm86DQo+ICsgICAgICAgICAgICBpZiAiY29yZXMiIGluIHNlbGYuYWxsb2NhdGVkX2lu Zm9bdm1dOg0KPiArICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmFsbG9jYXRlZF9pbmZvW3Zt XVsnY29yZXMnXQ0KPiArDQpTbyBtYW55IGR1cGxpY2F0ZWQgY29kZXMgaW4gZ2V0Xz9fb25fdm0g ZnVuY3Rpb25zLCBzaG91bGQgdXNlIHNpbXBsZSBmdW5jdGlvbiByZXBsYWNlIG9mIHRoZW0uIA0K DQo+ICsgICAgZGVmIGdldF92ZnNfb25fdm0oc2VsZiwgdm09JycpOg0KPiArICAgICAgICAiIiIN Cj4gKyAgICAgICAgUmV0dXJuIHZmIGRldmljZSBsaXN0IG9uIHNwZWNpZmlkIFZNLg0KPiArICAg ICAgICAiIiINCj4gKyAgICAgICAgaWYgdm0gaW4gc2VsZi5hbGxvY2F0ZWRfaW5mbzoNCj4gKyAg ICAgICAgICAgIGlmICd2ZnMnIGluIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dOg0KPiArICAgICAg ICAgICAgICAgIHJldHVybiBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXVsndmZzJ10NCj4gKw0KPiAr ICAgIGRlZiBnZXRfcGZzX29uX3ZtKHNlbGYsIHZtPScnKToNCj4gKyAgICAgICAgIiIiDQo+ICsg ICAgICAgIFJldHVybiBwZiBkZXZpY2UgbGlzdCBvbiBzcGVjaWZpZCBWTS4NCj4gKyAgICAgICAg IiIiDQo+ICsgICAgICAgIGlmIHZtIGluIHNlbGYuYWxsb2NhdGVkX2luZm86DQo+ICsgICAgICAg ICAgICBpZiAncG9ydHMnIGluIHNlbGYuYWxsb2NhdGVkX2luZm9bdm1dOg0KPiArICAgICAgICAg ICAgICAgIHJldHVybiBzZWxmLmFsbG9jYXRlZF9pbmZvW3ZtXVsncG9ydHMnXQ0KPiArDQo+ICsN Cj4gK2NsYXNzIHNpbXBsZV9kdXQob2JqZWN0KToNCj4gKw0KPiArICAgIGRlZiBfX2luaXRfXyhz ZWxmKToNCj4gKyAgICAgICAgc2VsZi5wb3J0c19pbmZvID0gW10NCj4gKyAgICAgICAgc2VsZi5j b3JlcyA9IFtdDQo+ICsNCj4gKyAgICBkZWYgY2hlY2tfcG9ydF9vY2N1cGllZChzZWxmLCBwb3J0 KToNCj4gKyAgICAgICAgcmV0dXJuIEZhbHNlDQo+ICsNCj4gK2lmIF9fbmFtZV9fID09ICJfX21h aW5fXyI6DQo+ICsgICAgZHV0ID0gc2ltcGxlX2R1dCgpDQo+ICsgICAgZHV0LmNvcmVzID0gW3sn dGhyZWFkJzogJzEnLCAnc29ja2V0JzogJzAnfSwgeyd0aHJlYWQnOiAnMicsICdzb2NrZXQnOg0K PiAnMCd9LA0KPiArICAgICAgICAgICAgICAgICB7J3RocmVhZCc6ICczJywgJ3NvY2tldCc6ICcw J30sIHsndGhyZWFkJzogJzQnLCAnc29ja2V0JzoNCj4gJzAnfSwNCj4gKyAgICAgICAgICAgICAg ICAgeyd0aHJlYWQnOiAnNScsICdzb2NrZXQnOiAnMCd9LCB7J3RocmVhZCc6ICc2JywgJ3NvY2tl dCc6DQo+ICcwJ30sDQo+ICsgICAgICAgICAgICAgICAgIHsndGhyZWFkJzogJzcnLCAnc29ja2V0 JzogJzEnfSwgeyd0aHJlYWQnOiAnOCcsICdzb2NrZXQnOg0KPiAnMSd9LA0KPiArICAgICAgICAg ICAgICAgICB7J3RocmVhZCc6ICc5JywgJ3NvY2tldCc6ICcxJ30sIHsndGhyZWFkJzogJzEwJywN Cj4gJ3NvY2tldCc6ICcxJ30sDQo+ICsgICAgICAgICAgICAgICAgIHsndGhyZWFkJzogJzExJywg J3NvY2tldCc6ICcxJ30sIHsndGhyZWFkJzogJzEyJywNCj4gJ3NvY2tldCc6ICcxJ31dDQo+ICsN Cj4gKyAgICBkdXQucG9ydHNfaW5mbyA9IFt7J2ludGYnOiAncDc4NnAxJywgJ3NvdXJjZSc6ICdj ZmcnLCAnbWFjJzoNCj4gJzkwOmUyOmJhOjY5OmU1OmU0JywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgJ3BjaSc6ICcwODowMC4wJywgJ251bWEnOiAwLCAnaXB2Nic6DQo+ICdmZTgwOjo5MmUy OmJhZmY6ZmU2OTplNWU0JywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJ3BlZXInOiAnSVhJ QTo2LjUnLCAndHlwZSc6ICc4MDg2OjEwZmInfSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICB7 J2ludGYnOiAncDc4NnAyJywgJ3NvdXJjZSc6ICdjZmcnLCAnbWFjJzoNCj4gJzkwOmUyOmJhOjY5 OmU1OmU1JywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJ3BjaSc6ICcwODowMC4xJywgJ251 bWEnOiAwLCAnaXB2Nic6DQo+ICdmZTgwOjo5MmUyOmJhZmY6ZmU2OTplNWU1JywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgJ3BlZXInOiAnSVhJQTo2LjYnLCAndHlwZSc6ICc4MDg2OjEwZmIn fSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICB7J2ludGYnOiAncDc4N3AxJywgJ3NvdXJjZSc6 ICdjZmcnLCAnbWFjJzoNCj4gJzkwOmUyOmJhOjY5OmU1OmU2JywNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgJ3BjaSc6ICc4NDowMC4wJywgJ251bWEnOiAxLCAnaXB2Nic6DQo+ICdmZTgwOjo5 MmUyOmJhZmY6ZmU2OTplNWU2JywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJ3BlZXInOiAn SVhJQTo2LjcnLCAndHlwZSc6ICc4MDg2OjEwZmInfSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICB7J2ludGYnOiAncDc4N3AyJywgJ3NvdXJjZSc6ICdjZmcnLCAnbWFjJzoNCj4gJzkwOmUyOmJh OjY5OmU1OmU3JywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJ3BjaSc6ICc4NDowMC4xJywg J251bWEnOiAxLCAnaXB2Nic6DQo+ICdmZTgwOjo5MmUyOmJhZmY6ZmU2OTplNWU3JywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgJ3BlZXInOiAnSVhJQTo2LjgnLCAndHlwZSc6ICc4MDg2OjEw ZmInfV0NCj4gKw0KPiArICAgIHZpcnRfcG9vbCA9IFZpcnRSZXNvdXJjZShkdXQpDQo+ICsgICAg cHJpbnQgIkFsbG9jIHR3byBQRiBkZXZpY2VzIG9uIHNvY2tldCAxIGZyb20gVk0iDQo+ICsgICAg cHJpbnQgdmlydF9wb29sLmFsbG9jX3BmKHZtPSd0ZXN0MScsIG51bWJlcj0yLCBzb2NrZXQ9MSkN Cj4gKw0KPiArICAgIHZpcnRfcG9vbC5hZGRfdmZfb25fcGYocGZfcGNpPScwODowMC4wJywgdmZs aXN0PVsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcwODoxMC4wJywgJzA4OjEwLjIn LCAnMDg6MTAuNCcsICcwODoxMC42J10pDQo+ICsgICAgdmlydF9wb29sLmFkZF92Zl9vbl9wZihw Zl9wY2k9JzA4OjAwLjEnLCB2Zmxpc3Q9Ww0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg JzA4OjEwLjEnLCAnMDg6MTAuMycsICcwODoxMC41JywgJzA4OjEwLjcnXSkNCj4gKyAgICBwcmlu dCAiQWRkIFZGIGRldmljZXMgdG8gcmVzb3VyY2UgcG9vbCINCj4gKyAgICBwcmludCB2aXJ0X3Bv b2wudmZzX2luZm8NCj4gKw0KPiArICAgIHByaW50ICJBbGxvYyBWRiBkZXZpY2UgZnJvbSByZXNv dXJjZSBwb29sIg0KPiArICAgIHByaW50IHZpcnRfcG9vbC5hbGxvY192Zl9mcm9tX3BmKHZtPSd0 ZXN0MScsIHBmX3BjaT0nMDg6MDAuMCcsDQo+IG51bWJlcj0yKQ0KPiArICAgIHByaW50IHZpcnRf cG9vbC51c2VkX3Zmcw0KPiArICAgIHByaW50ICJBbGxvYyBWRiBkZXZpY2UgZnJvbSByZXNvdXJj ZSBwb29sIg0KPiArICAgIHByaW50IHZpcnRfcG9vbC5hbGxvY192Zl9mcm9tX3BmKHZtPSd0ZXN0 MicsIHBmX3BjaT0nMDg6MDAuMScsDQo+IHZmbGlzdD1bJzA4OjEwLjMnLCAnMDg6MTAuNSddKQ0K PiArICAgIHByaW50IHZpcnRfcG9vbC51c2VkX3Zmcw0KPiArDQo+ICsgICAgcHJpbnQgIkRlbCBW RiBkZXZpY2VzIGZyb20gcmVzb3VyY2UgcG9vbCINCj4gKyAgICB2aXJ0X3Bvb2wuZGVsX3ZmX29u X3BmKHBmX3BjaT0nMDg6MDAuMCcsIHZmbGlzdD1bJzA4OjEwLjQnLA0KPiAnMDg6MTAuMiddKQ0K PiArICAgIHByaW50IHZpcnRfcG9vbC52ZnNfaW5mbw0KPiArDQo+ICsgICAgdmlydF9wb29sLnJl c2VydmVfY3B1KCdlJykNCj4gKyAgICBwcmludCAiUmVzZXJ2ZSB0aHJlZSBjb3JlcyBmcm9tIHJl c291cmNlIHBvb2wiDQo+ICsgICAgcHJpbnQgdmlydF9wb29sLnVudXNlZF9jb3Jlcw0KPiArICAg IHByaW50ICJBbGxvYyB0d28gY29yZXMgb24gc29ja2V0MSBmb3IgVk0tdGVzdDEiDQo+ICsgICAg cHJpbnQgdmlydF9wb29sLmFsbG9jX2NwdSh2bT0idGVzdDEiLCBudW1iZXI9Miwgc29ja2V0PTEp DQo+ICsgICAgcHJpbnQgIkFsbG9jIHR3byBjb3JlcyBpbiBsaXN0IGZvciBWTS10ZXN0MiINCj4g KyAgICBwcmludCB2aXJ0X3Bvb2wuYWxsb2NfY3B1KHZtPSJ0ZXN0MiIsIGNvcmVsaXN0PVsnNCcs ICc1J10pDQo+ICsgICAgcHJpbnQgIkFsbG9jIHR3byBjb3JlcyBmb3IgVk0tdGVzdDMiDQo+ICsg ICAgcHJpbnQgdmlydF9wb29sLmFsbG9jX2NwdSh2bT0idGVzdDMiLCBudW1iZXI9MikNCj4gKyAg ICBwcmludCAiQWxsb2MgcG9ydCBmb3IgVk0tdGVzdDEiDQo+ICsgICAgcHJpbnQgdmlydF9wb29s LmFsbG9jX3BvcnQodm09J3Rlc3QxJykNCj4gKyAgICBwcmludCAiQWxsb2MgaW5mb3JtYXRpb24g YWZ0ZXIgYWxsY2F0ZWQiDQo+ICsgICAgcHJpbnQgdmlydF9wb29sLmFsbG9jYXRlZF9pbmZvDQo+ ICsNCj4gKyAgICBwcmludCAiR2V0IGNvcmVzIG9uIFZNLXRlc3QxIg0KPiArICAgIHByaW50IHZp cnRfcG9vbC5nZXRfY3B1X29uX3ZtKCJ0ZXN0MSIpDQo+ICsgICAgcHJpbnQgIkdldCBwZnMgb24g Vk0tdGVzdDEiDQo+ICsgICAgcHJpbnQgdmlydF9wb29sLmdldF9wZnNfb25fdm0oInRlc3QxIikN Cj4gKyAgICBwcmludCAiR2V0IHZmcyBvbiBWTS10ZXN0MiINCj4gKyAgICBwcmludCB2aXJ0X3Bv b2wuZ2V0X3Zmc19vbl92bSgidGVzdDIiKQ0KPiAtLQ0KPiAxLjkuMA0KDQo=