Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1EA60C282DA for ; Fri, 19 Apr 2019 18:32:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CAD0D204EC for ; Fri, 19 Apr 2019 18:32:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727390AbfDSScV (ORCPT ); Fri, 19 Apr 2019 14:32:21 -0400 Received: from mga02.intel.com ([134.134.136.20]:36066 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727648AbfDSScU (ORCPT ); Fri, 19 Apr 2019 14:32:20 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Apr 2019 09:10:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,370,1549958400"; d="scan'208";a="338986752" Received: from orsmsx106.amr.corp.intel.com ([10.22.225.133]) by fmsmga006.fm.intel.com with ESMTP; 19 Apr 2019 09:10:28 -0700 Received: from orsmsx151.amr.corp.intel.com (10.22.226.38) by ORSMSX106.amr.corp.intel.com (10.22.225.133) with Microsoft SMTP Server (TLS) id 14.3.408.0; Fri, 19 Apr 2019 09:10:28 -0700 Received: from orsmsx103.amr.corp.intel.com ([169.254.5.76]) by ORSMSX151.amr.corp.intel.com ([169.254.7.24]) with mapi id 14.03.0415.000; Fri, 19 Apr 2019 09:10:28 -0700 From: "Gix, Brian" To: "linux-bluetooth@vger.kernel.org" , "Stotland, Inga" CC: "luiz.dentz@gmail.com" , "johan.hedberg@gmail.com" Subject: Re: [PATCH BlueZ 1/2] test: Drive test-mesh with a string-based menu Thread-Topic: [PATCH BlueZ 1/2] test: Drive test-mesh with a string-based menu Thread-Index: AQHU9bB5KvkRmRAzsUyzX3fLMSA6oaZEHsOA Date: Fri, 19 Apr 2019 16:10:27 +0000 Message-ID: <1555690225.3265.1.camel@intel.com> References: <20190418063110.22237-1-inga.stotland@intel.com> In-Reply-To: <20190418063110.22237-1-inga.stotland@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.112.76] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org UGF0Y2ggc2V0IGFwcGxpZWQNCg0KT24gV2VkLCAyMDE5LTA0LTE3IGF0IDIzOjMxIC0wNzAwLCBJ bmdhIFN0b3RsYW5kIHdyb3RlOg0KPiBTd2l0Y2ggdG8gIHN0cmluZyBpbnRlcmFjdGl2ZSBjb21t YW5kcyB0byBkcml2ZSB0ZXN0aW5nDQo+IG9mIGJsdWV0b290aC1tZXNoZC4gUmUtd29yayB0aGUg bWVudSB0byBhbGxvdyBnbG9iYWwgc2V0dGluZyBvZg0KPiBkZXN0aW5hdGlvbiBhZGRyZXNzIGFu ZCBBcHBLZXkgaW5kZXggZm9yIG91dGJvdW5kIG1lc2ggbWVzc2FnZXMuDQo+IC0tLQ0KPiAgdGVz dC90ZXN0LW1lc2ggfCA1MzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tLS0tLS0tLQ0KPiAgMSBmaWxlIGNoYW5nZWQsIDMxNyBpbnNlcnRpb25zKCspLCAyMjIgZGVs ZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW1lc2ggYi90ZXN0L3Rlc3Qt bWVzaA0KPiBpbmRleCBmZDAyMjA3YmMuLjAyZjUyYTI2OSAxMDA3NTUNCj4gLS0tIGEvdGVzdC90 ZXN0LW1lc2gNCj4gKysrIGIvdGVzdC90ZXN0LW1lc2gNCj4gQEAgLTE4LDIzICsxOCwyNiBAQA0K PiAgIw0KPiAgIyAgICAgIFRoZSB0ZXN0IGltaXRhdGVzIGEgZGV2aWNlIHdpdGggMiBlbGVtZW50 czoNCj4gICMgICAgICAgICAgICBlbGVtZW50IDA6IE9uT2ZmIFNlcnZlciBtb2RlbA0KPiArIyAg ICAgICAgICAgICAgICAgICAgICAgU2FtcGxlIFZlbmRvciBtb2RlbA0KPiAgIyAgICAgICAgICAg IGVsZW1lbnQgMTogT25PZmYgQ2xpZW50IG1vZGVsDQo+ICAjDQo+ICAjIFRoZSBtYWluIG1lbnU6 DQo+IC0jICAgICAgIDEgLSBzZXQgbm9kZSBJRCAodG9rZW4pDQo+IC0jICAgICAgIDIgLSBqb2lu IG1lc2ggbmV0d29yaw0KPiAtIyAgICAgICAzIC0gYXR0YWNoIG1lc2ggbm9kZQ0KPiAtIyAgICAg ICA0IC0gcmVtb3ZlIG5vZGUNCj4gLSMgICAgICAgNSAtIGNsaWVudCBtZW51DQo+IC0jICAgICAg IDYgLSBleGl0DQo+ICsjICAgICAgIHRva2VuDQo+ICsjICAgICAgIGpvaW4NCj4gKyMgICAgICAg YXR0YWNoDQo+ICsjICAgICAgIHJlbW92ZQ0KPiArIyAgICAgICBkZXN0DQo+ICsjICAgICAgIGFw cC1pbmRleA0KPiArIyAgICAgICBjbGllbnQtbWVudQ0KPiArIyAgICAgICBleGl0DQo+ICAjDQo+ ICAjIFRoZSBtYWluIG1lbnUgb3B0aW9ucyBleHBsYWluZWQ6DQo+IC0jICAgICAxIC0gc2V0IHRv a2VuDQo+ICsjICAgICB0b2tlbg0KPiAgIyAgICAgICAgICAgIFNldCB0aGUgdW5pcXVlIG5vZGUg dG9rZW4uDQo+ICAjICAgICAgICAgICAgVGhlIHRva2VuIGNhbiBiZSBzZXQgZnJvbSBjb21tYW5k IGxpbmUgYXJndW1lbnRzIGFzDQo+ICAjICAgICAgICAgICAgd2VsbC4NCj4gICMNCj4gLSMgICAg IDIgLSBqb2luDQo+ICsjICAgICBqb2luDQo+ICAjICAgICAgICAgICAgUmVxdWVzdCBwcm92aXNp b25pbmcgb2YgYSBkZXZpY2UgdG8gYmVjb21lIGEgbm9kZQ0KPiAgIyAgICAgICAgICAgIG9uIGEg bWVzaCBuZXR3b3JrLiBUaGUgdGVzdCBnZW5lcmF0ZXMgZGV2aWNlIFVVSUQNCj4gICMgICAgICAg ICAgICB3aGljaCBpcyBkaXNwbGF5ZWQgYW5kIHdpbGwgbmVlZCB0byBiZSBwcm92aWRlZCB0bw0K PiBAQCAtNDksNyArNTIsNyBAQA0KPiAgIyAgICAgICAgICAgICd0b2tlbicgaXMgcmV0dXJuZWQg dG8gdGhlIGFwcGxpY2F0aW9uIGFuZCBpcyB1c2VkDQo+ICAjICAgICAgICAgICAgZm9yIHRoZSBy dW50aW1lIG9mIHRoZSB0ZXN0Lg0KPiAgIw0KPiAtIyAgICAgMyAtIGF0dGFjaA0KPiArIyAgICAg YXR0YWNoDQo+ICAjICAgICAgICAgICAgQXR0YWNoIHRoZSBhcHBsaWNhdGlvbiB0byBibHVldG9v dGhkLWRhZW1vbiBhcyBhIG5vZGUuDQo+ICAjICAgICAgICAgICAgRm9yIHRoZSBjYWxsIHRvIGJl IHN1Y2Nlc3NmdWwsIHRoZSB2YWxpZCBub2RlIHRva2VuIG11c3QNCj4gICMgICAgICAgICAgICBi ZSBhbHJlYWR5IHNldCwgZWl0aGVyIGZyb20gY29tbWFuZCBhcmd1bWVudHMgb3IgYnkNCj4gQEAg LTU3LDE2ICs2MCwyNCBAQA0KPiAgIyAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBleGVjdXRpbmcg ImpvaW4iIG9wZXJhdGlvbiBpbiB0aGUgc2FtZSB0ZXN0DQo+ICAjICAgICAgICAgICAgcnVuLg0K PiAgIw0KPiAtIyAgICAgNCAtIHJlbW92ZQ0KPiArIyAgICAgcmVtb3ZlDQo+ICAjICAgICAgICAg ICBQZXJtYW5lbnRseSByZW1vdmVzIGFueSBub2RlIGNvbmZpZ3VyYXRpb24gZnJvbSBkYWVtb24N Cj4gICMgICAgICAgICAgIGFuZCBwZXJzaXN0ZW50IHN0b3JhZ2UuIEFmdGVyIHRoaXMgb3BlcmF0 aW9uLCB0aGUgbm9kZQ0KPiAgIyAgICAgICAgICAgaXMgcGVybWFuZW50bHkgZm9yZ290dGVuIGJ5 IHRoZSBkYWVtb24gYW5kIHRoZSBhc3NvY2lhdGVkDQo+ICAjICAgICAgICAgICBub2RlIHRva2Vu IGlzIG5vIGxvbmdlciB2YWxpZC4NCj4gICMNCj4gLSMgICAgIDUgLSBjbGllbnQgbWVudQ0KPiAr IyAgICAgZGVzdA0KPiArIyAgICAgICAgICAgU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgdG8gc2Vu ZCBtZXNzYWdlczogNCBoZXggZGlnaXRzDQo+ICsjDQo+ICsjICAgICBhcHAtaW5kZXgNCj4gKyMg ICAgICAgICAgIFNldCBBcHBLZXkgaW5kZXggdG8gaW5kaWNhdGUgd2hpY2ggYXBwbGljYXRpb24g a2V5IHRvIHVzZQ0KPiArIyAgICAgICAgICAgdG8gZW5jb2RlIG91dGdvaW5nIG1lc3NhZ2VzOiB1 cCB0byAzIGhleCBkaWdpdHMNCj4gKyMNCj4gKyMgICAgIGNsaWVudC1tZW51DQo+ICAjICAgICAg ICAgICBFbnRlciBPbi9PZmYgY2xpZW50IHN1Ym1lbnUuDQo+ICAjDQo+IC0jICAgICA2IC0gZXhp dA0KPiArIyAgICAgcXVpdA0KPiArIyAgICAgICAgICAgRXhpdHMgdGhlIHRlc3QuDQo+ICAjDQo+ ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjDQo+ICBpbXBvcnQgc3lzDQo+IEBAIC0xMjgsMTYgKzEzOSw0MSBAQCBtYWlu bG9vcCA9IE5vbmUNCj4gIG5vZGUgPSBOb25lDQo+ICBtZXNoX25ldCA9IE5vbmUNCj4gIA0KPiAt bWVudV9sZXZlbCA9IDANCj4gIGRzdF9hZGRyID0gMHgwMDAwDQo+ICBhcHBfaWR4ID0gMA0KPiAg DQo+ICAjIE5vZGUgdG9rZW4gaG91c2VrZWVwaW5nDQo+ICB0b2tlbiA9IE5vbmUNCj4gIGhhdmVf dG9rZW4gPSBGYWxzZQ0KPiArYXR0YWNoZWQgPSBGYWxzZQ0KPiArDQo+ICsjIE1lbnUgaG91c2Vr ZWVwaW5nDQo+ICtNQUlOX01FTlUgPSAwDQo+ICtPTl9PRkZfQ0xJRU5UX01FTlUgPSAxDQo+ICsN Cj4gK0lOUFVUX05PTkUgPSAwDQo+ICtJTlBVVF9UT0tFTiA9IDENCj4gK0lOUFVUX0RFU1RfQURE UkVTUyA9IDINCj4gK0lOUFVUX0FQUF9LRVlfSU5ERVggPSAzDQo+ICsNCj4gK21lbnVzID0gW10N Cj4gK2N1cnJlbnRfbWVudSA9IE5vbmUNCj4gIA0KPiAgdXNlcl9pbnB1dCA9IDANCj4gK2lucHV0 X2Vycm9yID0gRmFsc2UNCj4gIA0KPiArZGVmIHJhaXNlX2Vycm9yKHN0cl92YWx1ZSk6DQo+ICsJ Z2xvYmFsIGlucHV0X2Vycm9yDQo+ICsNCj4gKwlpbnB1dF9lcnJvciA9IFRydWUNCj4gKwlwcmlu dChzZXRfZXJyb3Ioc3RyX3ZhbHVlKSkNCj4gKw0KPiArZGVmIGNsZWFyX2Vycm9yKCk6DQo+ICsJ Z2xvYmFsIGlucHV0X2Vycm9yDQo+ICsJaW5wdXRfZXJyb3IgPSBGYWxzZQ0KPiArDQo+ICtkZWYg aXNfZXJyb3IoKToNCj4gKwlyZXR1cm4gaW5wdXRfZXJyb3INCj4gIA0KPiAgZGVmIGFwcF9leGl0 KCk6DQo+ICAJZ2xvYmFsIG1haW5sb29wDQo+IEBAIC0xNDksMTEgKzE4NSwyOCBAQCBkZWYgYXBw X2V4aXQoKToNCj4gIAkJCQltb2RlbC50aW1lci5jYW5jZWwoKQ0KPiAgCW1haW5sb29wLnF1aXQo KQ0KPiAgDQo+ICtkZWYgc2V0X3Rva2VuKHN0cl92YWx1ZSk6DQo+ICsJZ2xvYmFsIHRva2VuDQo+ ICsJZ2xvYmFsIGhhdmVfdG9rZW4NCj4gKw0KPiArCWlmIGxlbihzdHJfdmFsdWUpICE9IDE2Og0K PiArCQlyYWlzZV9lcnJvcignRXhwZWN0ZWQgMTYgZGlnaXRzJykNCj4gKwkJcmV0dXJuDQo+ICsN Cj4gKwl0cnk6DQo+ICsJCWlucHV0X251bWJlciA9IGludChzdHJfdmFsdWUsIDE2KQ0KPiArCWV4 Y2VwdCBWYWx1ZUVycm9yOg0KPiArCQlyYWlzZV9lcnJvcignTm90IGEgdmFsaWQgaGV4YWRlY2lt YWwgbnVtYmVyJykNCj4gKwkJcmV0dXJuDQo+ICsNCj4gKwl0b2tlbiA9IG51bXB5LnVpbnQ2NChp bnB1dF9udW1iZXIpDQo+ICsJaGF2ZV90b2tlbiA9IFRydWUNCj4gKw0KPiAgZGVmIGFycmF5X3Rv X3N0cmluZyhiX2FycmF5KToNCj4gLQlzdHIgPSAiIg0KPiArCXN0cl92YWx1ZSA9ICIiDQo+ICAJ Zm9yIGIgaW4gYl9hcnJheToNCj4gLQkJc3RyICs9ICIlMDJ4IiAlIGINCj4gLQlyZXR1cm4gc3Ry DQo+ICsJCXN0cl92YWx1ZSArPSAiJTAyeCIgJSBiDQo+ICsJcmV0dXJuIHN0cl92YWx1ZQ0KPiAg DQo+ICBkZWYgZ2VuZXJpY19lcnJvcl9jYihlcnJvcik6DQo+ICAJcHJpbnQoc2V0X2Vycm9yKCdE LUJ1cyBjYWxsIGZhaWxlZDogJykgKyBzdHIoZXJyb3IpKQ0KPiBAQCAtMTc3LDYgKzIzMCwxNCBA QCBkZWYgam9pbl9jYigpOg0KPiAgZGVmIGpvaW5fZXJyb3JfY2IocmVhc29uKToNCj4gIAlwcmlu dCgnSm9pbiBwcm9jZWR1cmUgZmFpbGVkOiAnLCByZWFzb24pDQo+ICANCj4gK2RlZiByZW1vdmVf bm9kZV9jYigpOg0KPiArCWdsb2JhbCBhdHRhY2hlZA0KPiArCWdsb2JhbCBoYXZlX3Rva2VuDQo+ ICsNCj4gKwlwcmludChzZXRfeWVsbG93KCdOb2RlIHJlbW92ZWQnKSkNCj4gKwlhdHRhY2hlZCA9 IEZhbHNlDQo+ICsJaGF2ZV90b2tlbiA9IEZhbHNlDQo+ICsNCj4gIGRlZiB1bndyYXAoaXRlbSk6 DQo+ICAJaWYgaXNpbnN0YW5jZShpdGVtLCBkYnVzLkJvb2xlYW4pOg0KPiAgCQlyZXR1cm4gYm9v bChpdGVtKQ0KPiBAQCAtMTk3LDcgKzI1OCwxMSBAQCBkZWYgdW53cmFwKGl0ZW0pOg0KPiAgCXJl dHVybiBpdGVtDQo+ICANCj4gIGRlZiBhdHRhY2hfYXBwX2NiKG5vZGVfcGF0aCwgZGljdF9hcnJh eSk6DQo+IC0JcHJpbnQoJ01lc2ggYXBwbGljYXRpb24gcmVnaXN0ZXJlZCAnLCBub2RlX3BhdGgp DQo+ICsJZ2xvYmFsIGF0dGFjaGVkDQo+ICsNCj4gKwlhdHRhY2hlZCA9IFRydWUNCj4gKw0KPiAr CXByaW50KHNldF95ZWxsb3coJ01lc2ggYXBwIHJlZ2lzdGVyZWQ6ICcpICsgc2V0X2dyZWVuKG5v ZGVfcGF0aCkpDQo+ICANCj4gIAlvYmogPSBidXMuZ2V0X29iamVjdChNRVNIX1NFUlZJQ0VfTkFN RSwgbm9kZV9wYXRoKQ0KPiAgDQo+IEBAIC0yMjMsMTcgKzI4OCw2IEBAIGRlZiBpbnRlcmZhY2Vz X3JlbW92ZWRfY2Iob2JqZWN0X3BhdGgsIGludGVyZmFjZXMpOg0KPiAgCQlwcmludCgnU2Vydmlj ZSB3YXMgcmVtb3ZlZCcpDQo+ICAJCWFwcF9leGl0KCkNCj4gIA0KPiAtZGVmIHNlbmRfcmVzcG9u c2UocGF0aCwgZGVzdCwga2V5LCBkYXRhKToNCj4gLQkJbm9kZS5TZW5kKHBhdGgsIGRlc3QsIGtl eSwgZGF0YSwgcmVwbHlfaGFuZGxlcj1nZW5lcmljX3JlcGx5X2NiLA0KPiAtCQkJCQkJZXJyb3Jf aGFuZGxlcj1nZW5lcmljX2Vycm9yX2NiKQ0KPiAtDQo+IC1kZWYgc2VuZF9wdWJsaWNhdGlvbihw YXRoLCBtb2RlbF9pZCwgZGF0YSk6DQo+IC0JCXByaW50KCdTZW5kIHB1YmxpY2F0aW9uICcsIGVu ZD0nJykNCj4gLQkJcHJpbnQoZGF0YSkNCj4gLQkJbm9kZS5QdWJsaXNoKHBhdGgsIG1vZGVsX2lk LCBkYXRhLA0KPiAtCQkJCQkJcmVwbHlfaGFuZGxlcj1nZW5lcmljX3JlcGx5X2NiLA0KPiAtCQkJ CQkJZXJyb3JfaGFuZGxlcj1nZW5lcmljX2Vycm9yX2NiKQ0KPiAtDQo+ICBkZWYgcHJpbnRfc3Rh dGUoc3RhdGUpOg0KPiAgCXByaW50KCdTdGF0ZSBpcyAnLCBlbmQ9JycpDQo+ICAJaWYgc3RhdGUg PT0gMDoNCj4gQEAgLTMxNSwxMyArMzY5LDE1IEBAIGNsYXNzIEFwcGxpY2F0aW9uKGRidXMuc2Vy dmljZS5PYmplY3QpOg0KPiAgCWRlZiBKb2luQ29tcGxldGUoc2VsZiwgdmFsdWUpOg0KPiAgCQln bG9iYWwgdG9rZW4NCj4gIAkJZ2xvYmFsIGhhdmVfdG9rZW4NCj4gKwkJZ2xvYmFsIGF0dGFjaA0K PiAgDQo+IC0JCXByaW50KCdKb2luQ29tcGxldGUgd2l0aCB0b2tlbiAnICsgc2V0X2dyZWVuKGhl eCh2YWx1ZSkpKQ0KPiArCQlwcmludChzZXRfeWVsbG93KCdKb2luZWQgbWVzaCBuZXR3b3JrIHdp dGggdG9rZW4gJykgKw0KPiArCQkJCXNldF9ncmVlbihmb3JtYXQodmFsdWUsICcxNngnKSkpDQo+ ICANCj4gIAkJdG9rZW4gPSB2YWx1ZQ0KPiAgCQloYXZlX3Rva2VuID0gVHJ1ZQ0KPiAtDQo+IC0J CWF0dGFjaCh0b2tlbikNCj4gKwkJaWYgYXR0YWNoZWQgPT0gRmFsc2U6DQo+ICsJCQlhdHRhY2go dG9rZW4pDQo+ICANCj4gIAlAZGJ1cy5zZXJ2aWNlLm1ldGhvZChNRVNIX0FQUExJQ0FUSU9OX0lG QUNFLA0KPiAgCQkJCQlpbl9zaWduYXR1cmU9InMiLCBvdXRfc2lnbmF0dXJlPSIiKQ0KPiBAQCAt MzQ4LDE0ICs0MDQsMjggQEAgY2xhc3MgRWxlbWVudChkYnVzLnNlcnZpY2UuT2JqZWN0KToNCj4g IAkJCQlpZHMuYXBwZW5kKGlkKQ0KPiAgCQlyZXR1cm4gaWRzDQo+ICANCj4gKwlkZWYgX2dldF92 X21vZGVscyhzZWxmKToNCj4gKwkJaWRzID0gW10NCj4gKwkJZm9yIG1vZGVsIGluIHNlbGYubW9k ZWxzOg0KPiArCQkJaWQgPSBtb2RlbC5nZXRfaWQoKQ0KPiArCQkJdiA9IG1vZGVsLmdldF92ZW5k b3IoKQ0KPiArCQkJaWYgdiAhPSBWRU5ET1JfSURfTk9ORToNCj4gKwkJCQl2ZW5kb3JfaWQgPSAo diwgaWQpDQo+ICsJCQkJaWRzLmFwcGVuZCh2ZW5kb3JfaWQpDQo+ICsJCXJldHVybiBpZHMNCj4g Kw0KPiAgCWRlZiBnZXRfcHJvcGVydGllcyhzZWxmKToNCj4gLQkJcmV0dXJuIHsNCj4gLQkJCU1F U0hfRUxFTUVOVF9JRkFDRTogew0KPiAtCQkJCSdJbmRleCc6IGRidXMuQnl0ZShzZWxmLmluZGV4 KSwNCj4gLQkJCQknTW9kZWxzJzogZGJ1cy5BcnJheSgNCj4gLQkJCQkJc2VsZi5fZ2V0X3NpZ19t b2RlbHMoKSwgc2lnbmF0dXJlPSdxJykNCj4gLQkJCX0NCj4gLQkJfQ0KPiArCQl2ZW5kb3JfbW9k ZWxzID0gc2VsZi5fZ2V0X3ZfbW9kZWxzKCkNCj4gKwkJc2lnX21vZGVscyA9IHNlbGYuX2dldF9z aWdfbW9kZWxzKCkNCj4gKw0KPiArCQlwcm9wcyA9IHsnSW5kZXgnIDogZGJ1cy5CeXRlKHNlbGYu aW5kZXgpfQ0KPiArCQlpZiBsZW4oc2lnX21vZGVscykgIT0gMDoNCj4gKwkJCXByb3BzWydNb2Rl bHMnXSA9IGRidXMuQXJyYXkoc2lnX21vZGVscywgc2lnbmF0dXJlPSdxJykNCj4gKwkJaWYgbGVu KHZlbmRvcl9tb2RlbHMpICE9IDA6DQo+ICsJCQlwcm9wc1snVmVuZG9yTW9kZWxzJ10gPSBkYnVz LkFycmF5KHZlbmRvcl9tb2RlbHMsDQo+ICsJCQkJCQkJc2lnbmF0dXJlPScocXEpJykNCj4gKwkJ I3ByaW50KHByb3BzKQ0KPiArCQlyZXR1cm4geyBNRVNIX0VMRU1FTlRfSUZBQ0U6IHByb3BzIH0N Cj4gIA0KPiAgCWRlZiBhZGRfbW9kZWwoc2VsZiwgbW9kZWwpOg0KPiAgCQltb2RlbC5zZXRfcGF0 aChzZWxmLnBhdGgpDQo+IEBAIC0zODEsOCArNDUxLDggQEAgY2xhc3MgRWxlbWVudChkYnVzLnNl cnZpY2UuT2JqZWN0KToNCj4gIAkJCQkJaW5fc2lnbmF0dXJlPSJxYXtzdn0iLCBvdXRfc2lnbmF0 dXJlPSIiKQ0KPiAgDQo+ICAJZGVmIFVwZGF0ZU1vZGVsQ29uZmlndXJhdGlvbihzZWxmLCBtb2Rl bF9pZCwgY29uZmlnKToNCj4gLQkJcHJpbnQoJ1VwZGF0ZU1vZGVsQ29uZmlnICcsIGVuZD0nJykN Cj4gLQkJcHJpbnQoaGV4KG1vZGVsX2lkKSkNCj4gKwkJcHJpbnQoKCdVcGRhdGUgTW9kZWwgQ29u ZmlnICcpLCBlbmQ9JycpDQo+ICsJCXByaW50KGZvcm1hdChtb2RlbF9pZCwgJzA0eCcpKQ0KPiAg CQlmb3IgbW9kZWwgaW4gc2VsZi5tb2RlbHM6DQo+ICAJCQlpZiBtb2RlbF9pZCA9PSBtb2RlbC5n ZXRfaWQoKToNCj4gIAkJCQltb2RlbC5zZXRfY29uZmlnKGNvbmZpZykNCj4gQEAgLTQyMCw2ICs0 OTAsMTggQEAgY2xhc3MgTW9kZWwoKToNCj4gIAlkZWYgc2V0X3B1YmxpY2F0aW9uKHNlbGYsIHBl cmlvZCk6DQo+ICAJCXNlbGYucHViX3BlcmlvZCA9IHBlcmlvZA0KPiAgDQo+ICsJZGVmIHNlbmRf cHVibGljYXRpb24oc2VsZiwgZGF0YSk6DQo+ICsJCXByaW50KCdTZW5kIHB1YmxpY2F0aW9uICcs IGVuZD0nJykNCj4gKwkJcHJpbnQoZGF0YSkNCj4gKwkJbm9kZS5QdWJsaXNoKHNlbGYucGF0aCwg c2VsZi5tb2RlbF9pZCwgZGF0YSwNCj4gKwkJCQkJCXJlcGx5X2hhbmRsZXI9Z2VuZXJpY19yZXBs eV9jYiwNCj4gKwkJCQkJCWVycm9yX2hhbmRsZXI9Z2VuZXJpY19lcnJvcl9jYikNCj4gKw0KPiAr CWRlZiBzZW5kX21lc3NhZ2Uoc2VsZiwgZGVzdCwga2V5LCBkYXRhKToNCj4gKwkJbm9kZS5TZW5k KHNlbGYucGF0aCwgZGVzdCwga2V5LCBkYXRhLA0KPiArCQkJCQkJcmVwbHlfaGFuZGxlcj1nZW5l cmljX3JlcGx5X2NiLA0KPiArCQkJCQkJZXJyb3JfaGFuZGxlcj1nZW5lcmljX2Vycm9yX2NiKQ0K PiArDQo+ICAJZGVmIHNldF9jb25maWcoc2VsZiwgY29uZmlnKToNCj4gIAkJaWYgJ0JpbmRpbmdz JyBpbiBjb25maWc6DQo+ICAJCQlzZWxmLmJpbmRpbmdzID0gY29uZmlnLmdldCgnQmluZGluZ3Mn KQ0KPiBAQCAtNDMyLDEzICs1MTQsMTUgQEAgY2xhc3MgTW9kZWwoKToNCj4gIAkJCXByaW50KCcg bXMnKQ0KPiAgDQo+ICAJZGVmIHByaW50X2JpbmRpbmdzKHNlbGYpOg0KPiAtCQlwcmludChzZXRf Y3lhbignTW9kZWwnKSwgc2V0X2N5YW4oJyUwNHgnICUgc2VsZi5tb2RlbF9pZCksDQo+IC0JCQlz ZXRfY3lhbignaXMgYm91bmQgdG8gYXBwbGljYXRpb24ga2V5KHMpOiAnKSwgZW5kID0gJycpDQo+ ICsJCXByaW50KHNldF9jeWFuKCdNb2RlbCcpLCBzZXRfY3lhbignJTAzeCcgJSBzZWxmLm1vZGVs X2lkKSwNCj4gKwkJCQkJCXNldF9jeWFuKCdpcyBib3VuZCB0bzogJykpDQo+ICANCj4gIAkJaWYg bGVuKHNlbGYuYmluZGluZ3MpID09IDA6DQo+ICAJCQlwcmludChzZXRfY3lhbignKiogTm9uZSAq KicpKQ0KPiArCQkJcmV0dXJuDQo+ICsNCj4gIAkJZm9yIGIgaW4gc2VsZi5iaW5kaW5nczoNCj4g LQkJCXByaW50KHNldF9jeWFuKCclMDR4JyAlIGIpLCBzZXRfY3lhbignLCAnKSkNCj4gKwkJCXBy aW50KHNldF9ncmVlbignJTAzeCcgJSBiKSArICcgJykNCj4gIA0KPiAgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjDQo+ICAjIE9uIE9mZiBTZXJ2ZXIgTW9kZWwNCj4gQEAgLTQ3OSw3ICs1NjMsNyBA QCBjbGFzcyBPbk9mZlNlcnZlcihNb2RlbCk6DQo+ICAJCQlwcmludF9zdGF0ZShzZWxmLnN0YXRl KQ0KPiAgDQo+ICAJCXJzcF9kYXRhID0gc3RydWN0LnBhY2soJzxIQicsIDB4ODIwNCwgc2VsZi5z dGF0ZSkNCj4gLQkJc2VuZF9yZXNwb25zZShzZWxmLnBhdGgsIHNvdXJjZSwga2V5LCByc3BfZGF0 YSkNCj4gKwkJc2VsZi5zZW5kX21lc3NhZ2Uoc291cmNlLCBrZXksIHJzcF9kYXRhKQ0KPiAgDQo+ ICAJZGVmIHNldF9wdWJsaWNhdGlvbihzZWxmLCBwZXJpb2QpOg0KPiAgDQo+IEBAIC00OTQsMTEg KzU3OCwxMCBAQCBjbGFzcyBPbk9mZlNlcnZlcihNb2RlbCk6DQo+ICANCj4gIAkJc2VsZi50aW1l ci5zdGFydChwZXJpb2QvMTAwMCwgc2VsZi5wdWJsaXNoKQ0KPiAgDQo+IC0NCj4gIAlkZWYgcHVi bGlzaChzZWxmKToNCj4gIAkJcHJpbnQoJ1B1Ymxpc2gnKQ0KPiAgCQlkYXRhID0gc3RydWN0LnBh Y2soJzxIQicsIDB4ODIwNCwgc2VsZi5zdGF0ZSkNCj4gLQkJc2VuZF9wdWJsaWNhdGlvbihzZWxm LnBhdGgsIHNlbGYubW9kZWxfaWQsIGRhdGEpDQo+ICsJCXNlbGYuc2VuZF9wdWJsaWNhdGlvbihk YXRhKQ0KPiAgDQo+ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gICMgT24gT2ZmIENsaWVu dCBNb2RlbA0KPiBAQCAtNTEyLDI1ICs1OTUsMjAgQEAgY2xhc3MgT25PZmZDbGllbnQoTW9kZWwp Og0KPiAgCQkJCSAweDgyMDQgfSAjIHN0YXR1cw0KPiAgCQlwcmludCgnT25PZmYgQ2xpZW50JykN Cj4gIA0KPiAtCWRlZiBfcmVwbHlfY2Ioc3RhdGUpOg0KPiAtCQlwcmludCgnU3RhdGUgJywgZW5k PScnKTsNCj4gLQkJcHJpbnQoc3RhdGUpDQo+IC0NCj4gLQlkZWYgX3NlbmRfbWVzc2FnZShzZWxm LCBkZXN0LCBrZXksIGRhdGEsIHJlcGx5X2NiKToNCj4gLQkJcHJpbnQoJ09uT2ZmQ2xpZW50IHNl bmQgZGF0YScpDQo+IC0JCW5vZGUuU2VuZChzZWxmLnBhdGgsIGRlc3QsIGtleSwgZGF0YSwgcmVw bHlfaGFuZGxlcj1yZXBseV9jYiwNCj4gLQkJCQkgIGVycm9yX2hhbmRsZXI9Z2VuZXJpY19lcnJv cl9jYikNCj4gKwlkZWYgX3NlbmRfbWVzc2FnZShzZWxmLCBkZXN0LCBrZXksIGRhdGEpOg0KPiAr CQlwcmludCgnT25PZmZDbGllbnQgc2VuZCBjb21tYW5kJykNCj4gKwkJc2VsZi5zZW5kX21lc3Nh Z2UoZGVzdCwga2V5LCBkYXRhKQ0KPiAgDQo+ICAJZGVmIGdldF9zdGF0ZShzZWxmLCBkZXN0LCBr ZXkpOg0KPiAgCQlvcGNvZGUgPSAweDgyMDENCj4gIAkJZGF0YSA9IHN0cnVjdC5wYWNrKCc8SCcs IG9wY29kZSkNCj4gLQkJc2VsZi5fc2VuZF9tZXNzYWdlKGRlc3QsIGtleSwgZGF0YSwgc2VsZi5f cmVwbHlfY2IpDQo+ICsJCXNlbGYuX3NlbmRfbWVzc2FnZShkZXN0LCBrZXksIGRhdGEpDQo+ICAN Cj4gIAlkZWYgc2V0X3N0YXRlKHNlbGYsIGRlc3QsIGtleSwgc3RhdGUpOg0KPiAgCQlvcGNvZGUg PSAweDgyMDINCj4gLQkJcHJpbnQoJ1N0YXRlOicsIHN0YXRlKQ0KPiArCQlwcmludCgnU2V0IHN0 YXRlOicsIHN0YXRlKQ0KPiAgCQlkYXRhID0gc3RydWN0LnBhY2soJzxIQicsIG9wY29kZSwgc3Rh dGUpDQo+IC0JCXNlbGYuX3NlbmRfbWVzc2FnZShkZXN0LCBrZXksIGRhdGEsIHNlbGYuX3JlcGx5 X2NiKQ0KPiArCQlzZWxmLl9zZW5kX21lc3NhZ2UoZGVzdCwga2V5LCBkYXRhKQ0KPiAgDQo+ICAJ ZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBzb3VyY2UsIGtleSwgZGF0YSk6DQo+ICAJCXByaW50 KCdPbk9mZkNsaWVudCBwcm9jZXNzIG1lc3NhZ2UgbGVuID0gJywgZW5kID0gJycpDQo+IEBAIC01 NDEsNyArNjE5LDcgQEAgY2xhc3MgT25PZmZDbGllbnQoTW9kZWwpOg0KPiAgCQkJIyBUaGUgb3Bj b2RlIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRoaXMgbW9kZWwNCj4gIAkJCXJldHVybg0KPiAgDQo+ IC0JCW9wY29kZSwgc3RhdGU9c3RydWN0LnVucGFjaygnPEhCJyxieXRlcyhkYXRhKSkNCj4gKwkJ b3Bjb2RlLCBzdGF0ZSA9IHN0cnVjdC51bnBhY2soJzxIQicsYnl0ZXMoZGF0YSkpDQo+ICANCj4g IAkJaWYgb3Bjb2RlICE9IDB4ODIwNCA6DQo+ICAJCQkjIFRoZSBvcGNvZGUgaXMgbm90IHJlY29n bml6ZWQgYnkgdGhpcyBtb2RlbA0KPiBAQCAtNTU2LDkgKzYzNCw1NCBAQCBjbGFzcyBPbk9mZkNs aWVudChNb2RlbCk6DQo+ICAJCXByaW50KHNldF9ncmVlbihzdGF0ZV9zdHIpLCBzZXRfeWVsbG93 KCdmcm9tJyksDQo+ICAJCQkJCQlzZXRfZ3JlZW4oJyUwNHgnICUgc291cmNlKSkNCj4gIA0KPiAr IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICsjIFNhbXBsZSBWZW5kb3IgTW9kZWwNCj4gKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArY2xhc3MgU2FtcGxlVmVuZG9yKE1vZGVsKToNCj4g KwlkZWYgX19pbml0X18oc2VsZiwgbW9kZWxfaWQpOg0KPiArCQlNb2RlbC5fX2luaXRfXyhzZWxm LCBtb2RlbF9pZCkNCj4gKwkJc2VsZi52ZW5kb3IgPSAweDA1RjEgIyBMaW51eCBGb3VuZGF0aW9u IENvbXBhbnkgSUQNCj4gKw0KPiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICAjIE1lbnUg ZnVuY3Rpb25zDQo+ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gK2NsYXNzIE1lbnVJdGVt KCk6DQo+ICsJZGVmIF9faW5pdF9fKHNlbGYsIGRlc2MsIGZ1bmMpOg0KPiArCQlzZWxmLmRlc2Mg PSBkZXNjDQo+ICsJCXNlbGYuZnVuYyA9IGZ1bmMNCj4gKw0KPiArY2xhc3MgTWVudSgpOg0KPiAr CWRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgbWVudSk6DQo+ICsJCXNlbGYudGl0bGUgPSB0aXRs ZQ0KPiArCQlzZWxmLm1lbnUgPSBtZW51DQo+ICsNCj4gKwlkZWYgc2hvdyhzZWxmKToNCj4gKwkJ cHJpbnQoc2V0X2N5YW4oJyoqKiAnICsgc2VsZi50aXRsZS51cHBlcigpICsgJyAqKionKSkNCj4g KwkJZm9yIGssIHYgaW4gc2VsZi5tZW51Lml0ZW1zKCk6DQo+ICsJCQlwcmludChzZXRfZ3JlZW4o ayksIHNldF9jeWFuKHYuZGVzYykpDQo+ICsNCj4gKwlkZWYgcHJvY2Vzc19jbWQoc2VsZiwgc3Ry X3ZhbHVlKToNCj4gKwkJaWYgaXNfZXJyb3IoKToNCj4gKwkJCXNlbGYuc2hvdygpDQo+ICsJCQlj bGVhcl9lcnJvcigpDQo+ICsJCQlyZXR1cm4NCj4gKw0KPiArCQljbWRzID0gW10NCj4gKwkJZm9y IGtleSBpbiBzZWxmLm1lbnUua2V5cygpOg0KPiArCQkJaWYga2V5LnN0YXJ0c3dpdGgoc3RyX3Zh bHVlKToNCj4gKwkJCQljbWRzLmFwcGVuZChrZXkpDQo+ICsNCj4gKwkJaWYgbGVuKGNtZHMpID09 IDA6DQo+ICsJCQlwcmludChzZXRfZXJyb3IoJ1Vua25vd24gbWVudSBvcHRpb246ICcpLCBzdHJf dmFsdWUpDQo+ICsJCQlzZWxmLnNob3coKQ0KPiArCQkJcmV0dXJuDQo+ICsJCWlmIGxlbihjbWRz KSA+IDE6DQo+ICsJCQlmb3IgY21kIGluIGNtZHM6DQo+ICsJCQkgICAgIHByaW50KHNldF9jeWFu KGNtZCArICc/JykpDQo+ICsJCQlyZXR1cm4NCj4gKw0KPiArCQlzZWxmLm1lbnUuZ2V0KGNtZHNb MF0pLmZ1bmMoKQ0KPiArDQo+ICBjbGFzcyBNZW51SGFuZGxlcihvYmplY3QpOg0KPiAgCWRlZiBf X2luaXRfXyhzZWxmLCBjYWxsYmFjayk6DQo+ICAJCXNlbGYuY2IgPSBjYWxsYmFjaw0KPiBAQCAt NTc5LDIyMSArNzAyLDE4NCBAQCBjbGFzcyBNZW51SGFuZGxlcihvYmplY3QpOg0KPiAgCQlyZXR1 cm4gVHJ1ZQ0KPiAgDQo+ICBkZWYgcHJvY2Vzc19pbnB1dChpbnB1dF9zdHIpOg0KPiAtCWlmIG1l bnVfbGV2ZWwgPT0gMDoNCj4gLQkJcHJvY2Vzc19tYWluX21lbnUoaW5wdXRfc3RyKQ0KPiAtCWVs aWYgbWVudV9sZXZlbCA9PSAxOg0KPiAtCQlwcm9jZXNzX2NsaWVudF9tZW51KGlucHV0X3N0cikN Cj4gLQllbHNlOg0KPiAtCQlwcmludChzZXRfZXJyb3IoJ0JVRzogYmFkIG1lbnUgbGV2ZWwnKSkN Cj4gKwlzdHJfdmFsdWUgPSBpbnB1dF9zdHIuc3RyaXAoKQ0KPiArDQo+ICsJIyBBbGxvdyBlbnRl cmluZyBlbXB0eSBsaW5lcyBmb3IgYmV0dGVyIG91dHB1dCB2aXNpYmlsaXR5DQo+ICsJaWYgbGVu KHN0cl92YWx1ZSkgPT0gMDoNCj4gKwkJcmV0dXJuDQo+ICsNCj4gKwljdXJyZW50X21lbnUucHJv Y2Vzc19jbWQoc3RyX3ZhbHVlKQ0KPiAgDQo+ICBkZWYgc3dpdGNoX21lbnUobGV2ZWwpOg0KPiAt CWdsb2JhbCBtZW51X2xldmVsDQo+ICsJZ2xvYmFsIGN1cnJlbnRfbWVudQ0KPiAgDQo+IC0JaWYg bGV2ZWwgPiAxOg0KPiArCWlmIGxldmVsID49IGxlbihtZW51cyk6DQo+ICAJCXJldHVybg0KPiAg DQo+IC0JaWYgbGV2ZWwgPT0gMDoNCj4gLQkJbWFpbl9tZW51KCkNCj4gLQllbGlmIGxldmVsID09 IDE6DQo+IC0JCWNsaWVudF9tZW51KCkNCj4gLQ0KPiAtCW1lbnVfbGV2ZWwgPSBsZXZlbA0KPiAr CWN1cnJlbnRfbWVudSA9IG1lbnVzW2xldmVsXQ0KPiArCWN1cnJlbnRfbWVudS5zaG93KCkNCj4g IA0KPiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+IC0jIE1haW4gbWVudSBmdW5jdGlvbnMN Cj4gKyMgTWFpbiBtZW51IGNsYXNzDQo+ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gLWRl ZiBwcm9jZXNzX21haW5fbWVudShpbnB1dF9zdHIpOg0KPiAtCWdsb2JhbCB0b2tlbg0KPiAtCWds b2JhbCB1c2VyX2lucHV0DQo+IC0JZ2xvYmFsIGhhdmVfdG9rZW4NCj4gK2NsYXNzIE1haW5NZW51 KE1lbnUpOg0KPiArCWRlZiBfX2luaXRfXyhzZWxmKToNCj4gKwkJbWVudV9pdGVtcyA9IHsNCj4g KwkJCSd0b2tlbic6IE1lbnVJdGVtKCcgLSBzZXQgbm9kZSBJRCAodG9rZW4pJywNCj4gKwkJCQkJ CXNlbGYuX19jbWRfc2V0X3Rva2VuKSwNCj4gKwkJCSdqb2luJzogTWVudUl0ZW0oJyAtIGpvaW4g bWVzaCBuZXR3b3JrJywNCj4gKwkJCQkJCXNlbGYuX19jbWRfam9pbiksDQo+ICsJCQknYXR0YWNo JzogTWVudUl0ZW0oJyAtIGF0dGFjaCBtZXNoIG5vZGUnLA0KPiArCQkJCQkJc2VsZi5fX2NtZF9h dHRhY2gpLA0KPiArCQkJJ3JlbW92ZSc6IE1lbnVJdGVtKCcgLSBkZWxldGUgbm9kZScsDQo+ICsJ CQkJCQlzZWxmLl9fY21kX3JlbW92ZSksDQo+ICsJCQknZGVzdCc6IE1lbnVJdGVtKCcgLSBzZXQg ZGVzdGluYXRpb24gYWRkcmVzcycsDQo+ICsJCQkJCQlzZWxmLl9fY21kX3NldF9kZXN0KSwNCj4g KwkJCSdhcHAtaW5kZXgnOiBNZW51SXRlbSgnIC0gc2V0IEFwcEtleSBpbmRleCcsDQo+ICsJCQkJ CQlzZWxmLl9fY21kX3NldF9hcHBfaWR4KSwNCj4gKwkJCSdjbGllbnQtbWVudSc6IE1lbnVJdGVt KCcgLSBPbi9PZmYgY2xpZW50IG1lbnUnLA0KPiArCQkJCQkJc2VsZi5fX2NtZF9jbGllbnRfbWVu dSksDQo+ICsJCQkncXVpdCc6IE1lbnVJdGVtKCcgLSBleGl0IHRoZSB0ZXN0JywgYXBwX2V4aXQp DQo+ICsJCX0NCj4gIA0KPiAtCXN0ciA9IGlucHV0X3N0ci5zdHJpcCgpDQo+ICsJCU1lbnUuX19p bml0X18oc2VsZiwgJ01haW4gTWVudScsIG1lbnVfaXRlbXMpDQo+ICANCj4gLQlpZiB1c2VyX2lu cHV0ID09IDE6DQo+IC0JCXJlcyA9IHNldF90b2tlbihzdHIpDQo+IC0JCXVzZXJfaW5wdXQgPSAw DQo+ICsJZGVmIF9fY21kX2NsaWVudF9tZW51KHNlbGYpOg0KPiArCQlpZiBhdHRhY2hlZCAhPSBU cnVlOg0KPiArCQkJcHJpbnQoc2V0X2Vycm9yKCdEaXNhbGxvd2VkOiBub2RlIGlzIG5vdCBhdHRh Y2hlZCcpKQ0KPiArCQkJcmV0dXJuDQo+ICsJCXN3aXRjaF9tZW51KE9OX09GRl9DTElFTlRfTUVO VSkNCj4gIA0KPiAtCQlpZiByZXMgPT0gRmFsc2U6DQo+IC0JCQltYWluX21lbnUoKQ0KPiArCWRl ZiBfX2NtZF9zZXRfdG9rZW4oc2VsZik6DQo+ICsJCWdsb2JhbCB1c2VyX2lucHV0DQo+ICANCj4g LQkJcmV0dXJuDQo+ICsJCWlmIGhhdmVfdG9rZW4gPT0gVHJ1ZToNCj4gKwkJCXByaW50KCdUb2tl biBhbHJlYWR5IHNldCcpDQo+ICsJCQlyZXR1cm4NCj4gIA0KPiAtCSMgQWxsb3cgZW50ZXJpbmcg ZW1wdHkgbGluZXMgZm9yIGJldHRlciBvdXRwdXQgdmlzaWJpbGl0eQ0KPiAtCWlmIGxlbihzdHIp ID09IDA6DQo+IC0JCXJldHVybg0KPiArCQl1c2VyX2lucHV0ID0gSU5QVVRfVE9LRU4NCj4gKwkJ cHJpbnQoc2V0X2N5YW4oJ0VudGVyIDE2LWRpZ2l0IGhleCBub2RlIElEOicpKQ0KPiAgDQo+IC0J aWYgc3RyLmlzZGlnaXQoKSA9PSBGYWxzZToNCj4gLQkJbWFpbl9tZW51KCkNCj4gLQkJcmV0dXJu DQo+ICsJZGVmIF9fY21kX3NldF9kZXN0KHNlbGYpOg0KPiArCQlnbG9iYWwgdXNlcl9pbnB1dA0K PiAgDQo+IC0Jb3B0ID0gaW50KHN0cikNCj4gKwkJdXNlcl9pbnB1dCA9IElOUFVUX0RFU1RfQURE UkVTUw0KPiArCQlwcmludChzZXRfY3lhbignRW50ZXIgNC1kaWdpdCBoZXggZGVzdGluYXRpb24g YWRkcmVzczonKSkNCj4gIA0KPiAtCWlmIG9wdCA+IDY6DQo+IC0JCXByaW50KHNldF9lcnJvcign VW5rbm93biBtZW51IG9wdGlvbjogJyksIG9wdCkNCj4gLQkJbWFpbl9tZW51KCkNCj4gLQllbGlm IG9wdCA9PSAxOg0KPiAtCQlpZiBoYXZlX3Rva2VuOg0KPiAtCQkJcHJpbnQoJ1Rva2VuIGFscmVh ZHkgc2V0JykNCj4gLQkJCXJldHVybg0KPiArCWRlZiBfX2NtZF9zZXRfYXBwX2lkeChzZWxmKToN Cj4gKwkJZ2xvYmFsIHVzZXJfaW5wdXQNCj4gIA0KPiAtCQl1c2VyX2lucHV0ID0gMTsNCj4gLQkJ cHJpbnQoc2V0X2N5YW4oJ0VudGVyIDE2LWRpZ2l0IGhleCBub2RlIElEOicpKQ0KPiAtCWVsaWYg b3B0ID09IDI6DQo+ICsJCXVzZXJfaW5wdXQgPSBJTlBVVF9BUFBfS0VZX0lOREVYOw0KPiArCQlw cmludChzZXRfY3lhbignRW50ZXIgYXBwIGtleSBpbmRleCAodXAgdG8gMyBkaWdpdCBoZXgpOicp KQ0KPiArDQo+ICsJZGVmIF9fY21kX2pvaW4oc2VsZik6DQo+ICAJCWlmIGFnZW50ID09IE5vbmU6 DQo+ICAJCQlwcmludChzZXRfZXJyb3IoJ1Byb3Zpc2lvbmluZyBhZ2VudCBub3QgZm91bmQnKSkN Cj4gIAkJCXJldHVybg0KPiAgDQo+IC0JCWpvaW5fbWVzaCgpDQo+IC0JZWxpZiBvcHQgPT0gMzoN Cj4gKwkJdXVpZCA9IGJ5dGVhcnJheS5mcm9taGV4KCIwYTAxMDIwMzA0MDUwNjA3MDgwOTBBMEIw QzBEMEUwRiIpDQo+ICsJCXJhbmRvbS5zaHVmZmxlKHV1aWQpDQo+ICsJCXV1aWRfc3RyID0gYXJy YXlfdG9fc3RyaW5nKHV1aWQpDQo+ICsJCWNhcHMgPSBbIm91dC1udW1lcmljIl0NCj4gKwkJb29i ID0gWyJvdGhlciJdDQo+ICsNCj4gKwkJcHJpbnQoc2V0X3llbGxvdygnSm9pbmluZyB3aXRoIFVV SUQgJykgKyBzZXRfZ3JlZW4odXVpZF9zdHIpKQ0KPiArCQltZXNoX25ldC5Kb2luKGFwcC5nZXRf cGF0aCgpLCB1dWlkLA0KPiArCQkJcmVwbHlfaGFuZGxlcj1qb2luX2NiLA0KPiArCQkJZXJyb3Jf aGFuZGxlcj1qb2luX2Vycm9yX2NiKQ0KPiArDQo+ICsJZGVmIF9fY21kX2F0dGFjaChzZWxmKToN Cj4gIAkJaWYgaGF2ZV90b2tlbiA9PSBGYWxzZToNCj4gIAkJCXByaW50KHNldF9lcnJvcignVG9r ZW4gaXMgbm90IHNldCcpKQ0KPiAtCQkJbWFpbl9tZW51KCkNCj4gKwkJCXNlbGYuc2hvdygpDQo+ ICAJCQlyZXR1cm4NCj4gIA0KPiAgCQlhdHRhY2godG9rZW4pDQo+IC0JZWxpZiBvcHQgPT0gNDoN Cj4gKw0KPiArCWRlZiBfX2NtZF9yZW1vdmUoc2VsZik6DQo+ICAJCWlmIGhhdmVfdG9rZW4gPT0g RmFsc2U6DQo+ICAJCQlwcmludChzZXRfZXJyb3IoJ1Rva2VuIGlzIG5vdCBzZXQnKSkNCj4gLQkJ CW1haW5fbWVudSgpDQo+ICsJCQlzZWxmLnNob3coKQ0KPiAgCQkJcmV0dXJuDQo+ICANCj4gLQkJ cHJpbnQoJ1JlbW92ZSBtZXNoIG5vZGUnKQ0KPiAtCQltZXNoX25ldC5MZWF2ZSh0b2tlbiwgcmVw bHlfaGFuZGxlcj1nZW5lcmljX3JlcGx5X2NiLA0KPiArCQlwcmludCgnUmVtb3ZpbmcgbWVzaCBu b2RlJykNCj4gKwkJbWVzaF9uZXQuTGVhdmUodG9rZW4sIHJlcGx5X2hhbmRsZXI9cmVtb3ZlX25v ZGVfY2IsDQo+ICAJCQkJCWVycm9yX2hhbmRsZXI9Z2VuZXJpY19lcnJvcl9jYikNCj4gLQkJaGF2 ZV90b2tlbiA9IEZhbHNlDQo+IC0JZWxpZiBvcHQgPT0gNToNCj4gLQkJc3dpdGNoX21lbnUoMSkN Cj4gLQllbGlmIG9wdCA9PSA2Og0KPiAtCQlhcHBfZXhpdCgpDQo+IC0NCj4gLQ0KPiAtZGVmIG1h aW5fbWVudSgpOg0KPiAtCXByaW50KHNldF9jeWFuKCcqKiogTUFJTiBNRU5VICoqKicpKQ0KPiAt CXByaW50KHNldF9jeWFuKCcxIC0gc2V0IG5vZGUgSUQgKHRva2VuKScpKQ0KPiAtCXByaW50KHNl dF9jeWFuKCcyIC0gam9pbiBtZXNoIG5ldHdvcmsnKSkNCj4gLQlwcmludChzZXRfY3lhbignMyAt IGF0dGFjaCBtZXNoIG5vZGUnKSkNCj4gLQlwcmludChzZXRfY3lhbignNCAtIHJlbW92ZSBub2Rl JykpDQo+IC0JcHJpbnQoc2V0X2N5YW4oJzUgLSBjbGllbnQgbWVudScpKQ0KPiAtCXByaW50KHNl dF9jeWFuKCc2IC0gZXhpdCcpKQ0KPiAgDQo+IC1kZWYgc2V0X3Rva2VuKHN0cik6DQo+IC0JZ2xv YmFsIHRva2VuDQo+IC0JZ2xvYmFsIGhhdmVfdG9rZW4NCj4gLQ0KPiAtCWlmIGxlbihzdHIpICE9 IDE2Og0KPiAtCQlwcmludChzZXRfZXJyb3IoJ0V4cGVjdGVkIDE2IGRpZ2l0cycpKQ0KPiAtCQly ZXR1cm4gRmFsc2UNCj4gLQ0KPiAtCXRyeToNCj4gLQkJaW5wdXRfbnVtYmVyID0gaW50KHN0ciwg MTYpDQo+IC0JZXhjZXB0IFZhbHVlRXJyb3I6DQo+IC0JCXByaW50KHNldF9lcnJvcignTm90IGEg dmFsaWQgaGV4YWRlY2ltYWwgbnVtYmVyJykpDQo+IC0JCXJldHVybiBGYWxzZQ0KPiAtDQo+IC0J dG9rZW4gPSBudW1weS51aW50NjQoaW5wdXRfbnVtYmVyKQ0KPiAtCWhhdmVfdG9rZW4gPSBUcnVl DQo+IC0NCj4gLQlyZXR1cm4gVHJ1ZQ0KPiAtDQo+IC1kZWYgam9pbl9tZXNoKCk6DQo+IC0JdXVp ZCA9IGJ5dGVhcnJheS5mcm9taGV4KCIwYTAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRiIp DQo+IC0NCj4gLQljYXBzID0gWyJvdXQtbnVtZXJpYyJdDQo+IC0Jb29iID0gWyJvdGhlciJdDQo+ IC0NCj4gLQlyYW5kb20uc2h1ZmZsZSh1dWlkKQ0KPiAtCXV1aWRfc3RyID0gYXJyYXlfdG9fc3Ry aW5nKHV1aWQpDQo+IC0JcHJpbnQoJ0pvaW5pbmcgd2l0aCBVVUlEICcgKyBzZXRfZ3JlZW4odXVp ZF9zdHIpKQ0KPiArCWRlZiBwcm9jZXNzX2NtZChzZWxmLCBzdHJfdmFsdWUpOg0KPiArCQlnbG9i YWwgdXNlcl9pbnB1dA0KPiArCQlnbG9iYWwgZHN0X2FkZHINCj4gKwkJZ2xvYmFsIGFwcF9pZHgN Cj4gKw0KPiArCQlpZiB1c2VyX2lucHV0ID09IElOUFVUX1RPS0VOOg0KPiArCQkJc2V0X3Rva2Vu KHN0cl92YWx1ZSkNCj4gKwkJZWxpZiB1c2VyX2lucHV0ID09IElOUFVUX0RFU1RfQUREUkVTUzoN Cj4gKwkJCXJlcyA9IHNldF92YWx1ZShzdHJfdmFsdWUsIDQsIDQpDQo+ICsJCQlpZiBpc19lcnJv cigpICE9IFRydWU6DQo+ICsJCQkJZHN0X2FkZHIgPSByZXMNCj4gKwkJCQlwcmludChzZXRfeWVs bG93KCJEZXN0aW5hdGlvbiBhZGRyZXNzOiAiKSArDQo+ICsJCQkJCXNldF9ncmVlbihmb3JtYXQo ZHN0X2FkZHIsICcwNHgnKSkpDQo+ICsJCWVsaWYgdXNlcl9pbnB1dCA9PSBJTlBVVF9BUFBfS0VZ X0lOREVYOg0KPiArCQkJcmVzID0gc2V0X3ZhbHVlKHN0cl92YWx1ZSwgMSwgMykNCj4gKwkJCWlm IGlzX2Vycm9yKCkgIT0gVHJ1ZToNCj4gKwkJCQlhcHBfaWR4ID0gcmVzDQo+ICsJCQkJcHJpbnQo c2V0X3llbGxvdygiQXBwbGljYXRpb24gaW5kZXg6ICIpICsNCj4gKwkJCQkJc2V0X2dyZWVuKGZv cm1hdChhcHBfaWR4LCAnMDN4JykpKQ0KPiArDQo+ICsJCWlmIHVzZXJfaW5wdXQgIT0gSU5QVVRf Tk9ORToNCj4gKwkJCXVzZXJfaW5wdXQgPSBJTlBVVF9OT05FDQo+ICsJCQlpZiBpc19lcnJvcigp ICE9IFRydWU6DQo+ICsJCQkJcmV0dXJuDQo+ICANCj4gLQltZXNoX25ldC5Kb2luKGFwcC5nZXRf cGF0aCgpLCB1dWlkLA0KPiAtCQkJcmVwbHlfaGFuZGxlcj1qb2luX2NiLA0KPiAtCQkJZXJyb3Jf aGFuZGxlcj1qb2luX2Vycm9yX2NiKQ0KPiArCQlNZW51LnByb2Nlc3NfY21kKHNlbGYsIHN0cl92 YWx1ZSkNCj4gIA0KPiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+IC0jIE9uL09m ZiBDbGllbnQgbWVudSBmdW5jdGlvbnMNCj4gKyMgT24vT2ZmIENsaWVudCBtZW51IGNsYXNzDQo+ ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gLWRlZiBwcm9jZXNzX2NsaWVudF9t ZW51KGlucHV0X3N0cik6DQo+IC0JZ2xvYmFsIHVzZXJfaW5wdXQNCj4gLQlnbG9iYWwgZHN0X2Fk ZHINCj4gLQlnbG9iYWwgYXBwX2lkeA0KPiAtDQo+IC0JcmVzID0gLTENCj4gLQlzdHIgPSBpbnB1 dF9zdHIuc3RyaXAoKQ0KPiAtDQo+IC0JaWYgdXNlcl9pbnB1dCA9PSAxOg0KPiAtCQlyZXMgPSBz ZXRfdmFsdWUoc3RyKQ0KPiAtCQlpZiByZXMgIT0gLTE6DQo+IC0JCQlkc3RfYWRkciA9IHJlcw0K PiAtCWVsaWYgdXNlcl9pbnB1dCA9PSAyOg0KPiAtCQlyZXMgPSBzZXRfdmFsdWUoc3RyKQ0KPiAt CQlpZiByZXMgIT0gLTE6DQo+IC0JCQlhcHBfaWR4ID0gcmVzDQo+IC0NCj4gLQlpZiB1c2VyX2lu cHV0ICE9IDA6DQo+IC0JCXVzZXJfaW5wdXQgPSAwDQo+IC0JCWlmIHJlcyA9PSAtMToNCj4gLQkJ CWNsaWVudF9tZW51KCkNCj4gLQkJcmV0dXJuDQo+IC0NCj4gLQkjIEFsbG93IGVudGVyaW5nIGVt cHR5IGxpbmVzIGZvciBiZXR0ZXIgb3V0cHV0IHZpc2liaWxpdHkNCj4gLQlpZiBsZW4oc3RyKSA9 PSAwOg0KPiAtCQlyZXR1cm4NCj4gK2NsYXNzIENsaWVudE1lbnUoTWVudSk6DQo+ICsJZGVmIF9f aW5pdF9fKHNlbGYpOg0KPiArCQltZW51X2l0ZW1zID0gew0KPiArCQkJJ2dldC1zdGF0ZSc6IE1l bnVJdGVtKCcgLSBnZXQgc2VydmVyIHN0YXRlJywNCj4gKwkJCQkJCXNlbGYuX19jbWRfZ2V0X3N0 YXRlKSwNCj4gKwkJCSdvZmYnOiBNZW51SXRlbSgnIC0gc2V0IHN0YXRlIE9GRicsDQo+ICsJCQkJ CQlzZWxmLl9fY21kX3NldF9zdGF0ZV9vZmYpLA0KPiArCQkJJ29uJzogTWVudUl0ZW0oJyAtIHNl dCBzdGF0ZSBPTicsDQo+ICsJCQkJCQlzZWxmLl9fY21kX3NldF9zdGF0ZV9vbiksDQo+ICsJCQkn YmFjayc6IE1lbnVJdGVtKCcgLSBiYWNrIHRvIG1haW4gbWVudScsDQo+ICsJCQkJCQlzZWxmLl9f Y21kX21haW5fbWVudSksDQo+ICsJCQkncXVpdCc6IE1lbnVJdGVtKCcgLSBleGl0IHRoZSB0ZXN0 JywgYXBwX2V4aXQpDQo+ICsJCX0NCj4gIA0KPiAtCWlmIHN0ci5pc2RpZ2l0KCkgPT0gRmFsc2U6 DQo+IC0JCWNsaWVudF9tZW51KCkNCj4gLQkJcmV0dXJuDQo+ICsJCU1lbnUuX19pbml0X18oc2Vs ZiwgJ09uL09mZiBDbGllbiBNZW51JywgbWVudV9pdGVtcykNCj4gIA0KPiAtCW9wdCA9IGludChz dHIpDQo+ICsJZGVmIF9fY21kX21haW5fbWVudShzZWxmKToNCj4gKwkJc3dpdGNoX21lbnUoTUFJ Tl9NRU5VKQ0KPiAgDQo+IC0JaWYgb3B0ID4gNzoNCj4gLQkJcHJpbnQoc2V0X2Vycm9yKCdVbmtu b3duIG1lbnUgb3B0aW9uOiAnKSwgb3B0KQ0KPiAtCQljbGllbnRfbWVudSgpDQo+IC0JCXJldHVy bg0KPiArCWRlZiBfX2NtZF9nZXRfc3RhdGUoc2VsZik6DQo+ICsJCWFwcC5lbGVtZW50c1sxXS5t b2RlbHNbMF0uZ2V0X3N0YXRlKGRzdF9hZGRyLCBhcHBfaWR4KQ0KPiAgDQo+IC0JaWYgb3B0ID49 IDMgYW5kIG9wdCA8PSA1IGFuZCBkc3RfYWRkciA9PSAweDAwMDA6DQo+IC0JCXByaW50KHNldF9l cnJvcignRGVzdGluYXRpb24gYWRkcmVzcyBub3Qgc2V0IScpKQ0KPiAtCQlyZXR1cm4NCj4gKwlk ZWYgX19jbWRfc2V0X3N0YXRlX29mZihzZWxmKToNCj4gKwkJYXBwLmVsZW1lbnRzWzFdLm1vZGVs c1swXS5zZXRfc3RhdGUoZHN0X2FkZHIsIGFwcF9pZHgsIDApDQo+ICANCj4gLQlpZiBvcHQgPT0g MToNCj4gLQkJdXNlcl9pbnB1dCA9IDE7DQo+IC0JCXByaW50KHNldF9jeWFuKCdFbnRlciA0LWRp Z2l0IGhleCBkZXN0aW5hdGlvbiBhZGRyZXNzOicpKQ0KPiAtCWVsaWYgb3B0ID09IDI6DQo+IC0J CXVzZXJfaW5wdXQgPSAyOw0KPiAtCQlhcHAuZWxlbWVudHNbMV0ubW9kZWxzWzBdLnByaW50X2Jp bmRpbmdzKCkNCj4gLQkJcHJpbnQoc2V0X2N5YW4oJ0Nob29zZSBhcHBsaWNhdGlvbiBrZXkgaW5k ZXg6JykpDQo+IC0JZWxpZiBvcHQgPT0gMzoNCj4gLQkJYXBwLmVsZW1lbnRzWzFdLm1vZGVsc1sw XS5nZXRfc3RhdGUoZHN0X2FkZHIsIGFwcF9pZHgpDQo+IC0JZWxpZiBvcHQgPT0gNCBvciBvcHQg PT0gNToNCj4gLQkJYXBwLmVsZW1lbnRzWzFdLm1vZGVsc1swXS5zZXRfc3RhdGUoZHN0X2FkZHIs IGFwcF9pZHgsIG9wdCAtIDQpDQo+IC0JZWxpZiBvcHQgPT0gNjoNCj4gLQkJc3dpdGNoX21lbnUo MCkNCj4gLQllbGlmIG9wdCA9PSA3Og0KPiAtCQlhcHBfZXhpdCgpDQo+ICsJZGVmIF9fY21kX3Nl dF9zdGF0ZV9vbihzZWxmKToNCj4gKwkJYXBwLmVsZW1lbnRzWzFdLm1vZGVsc1swXS5zZXRfc3Rh dGUoZHN0X2FkZHIsIGFwcF9pZHgsIDEpDQo+ICANCj4gLWRlZiBjbGllbnRfbWVudSgpOg0KPiAt CXByaW50KHNldF9jeWFuKCcqKiogT04vT0ZGIENMSUVOVCBNRU5VICoqKicpKQ0KPiAtCXByaW50 KHNldF9jeWFuKCcxIC0gc2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MnKSkNCj4gLQlwcmludChzZXRf Y3lhbignMiAtIHNldCBhcHBsaWNhdGlvbiBrZXkgaW5kZXgnKSkNCj4gLQlwcmludChzZXRfY3lh bignMyAtIGdldCBzdGF0ZScpKQ0KPiAtCXByaW50KHNldF9jeWFuKCc0IC0gc2V0IHN0YXRlIE9G RicpKQ0KPiAtCXByaW50KHNldF9jeWFuKCc1IC0gc2V0IHN0YXRlIE9OJykpDQo+IC0JcHJpbnQo c2V0X2N5YW4oJzYgLSBiYWNrIHRvIG1haW4gbWVudScpKQ0KPiAtCXByaW50KHNldF9jeWFuKCc3 IC0gZXhpdCcpKQ0KPiAgDQo+IC1kZWYgc2V0X3ZhbHVlKHN0cik6DQo+ICtkZWYgc2V0X3ZhbHVl KHN0cl92YWx1ZSwgbWluLCBtYXgpOg0KPiAgDQo+IC0JaWYgbGVuKHN0cikgIT0gNDoNCj4gLQkJ cHJpbnQoc2V0X2Vycm9yKCdFeHBlY3RlZCA0IGRpZ2l0cycpKQ0KPiArCWlmIGxlbihzdHJfdmFs dWUpID4gbWF4IG9yIGxlbihzdHJfdmFsdWUpIDwgbWluOg0KPiArCQlyYWlzZV9lcnJvcignQmFk IGlucHV0IGxlbmd0aCAlZCcgJSBsZW4oc3RyX3ZhbHVlKSkNCj4gIAkJcmV0dXJuIC0xDQo+ICAN Cj4gIAl0cnk6DQo+IC0JCXZhbHVlID0gaW50KHN0ciwgMTYpDQo+ICsJCXZhbHVlID0gaW50KHN0 cl92YWx1ZSwgMTYpDQo+ICAJZXhjZXB0IFZhbHVlRXJyb3I6DQo+IC0JCXByaW50KHNldF9lcnJv cignTm90IGEgdmFsaWQgaGV4YWRlY2ltYWwgbnVtYmVyJykpDQo+ICsJCXJhaXNlX2Vycm9yKCdO b3QgYSB2YWxpZCBoZXhhZGVjaW1hbCBudW1iZXInKQ0KPiAgCQlyZXR1cm4gLTENCj4gIA0KPiAg CXJldHVybiB2YWx1ZQ0KPiAgDQo+ICsNCj4gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAg IyBNYWluIGVudHJ5DQo+ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gQEAgLTgwNiw2ICs4 OTIsOCBAQCBkZWYgbWFpbigpOg0KPiAgCWdsb2JhbCBtYWlubG9vcA0KPiAgCWdsb2JhbCBhcHAN Cj4gIAlnbG9iYWwgbWVzaF9uZXQNCj4gKwlnbG9iYWwgbWVudQ0KPiArCWdsb2JhbCBjdXJyZW50 X21lbnUNCj4gIA0KPiAgCWlmIGxlbihzeXMuYXJndikgPiAxIDoNCj4gIAkJc2V0X3Rva2VuKHN5 cy5hcmd2WzFdKQ0KPiBAQCAtODI3LDE0ICs5MTUsMjEgQEAgZGVmIG1haW4oKToNCj4gIAlwcmlu dChzZXRfeWVsbG93KCdSZWdpc3RlciBPbk9mZiBTZXJ2ZXIgbW9kZWwgb24gZWxlbWVudCAwJykp DQo+ICAJZmlyc3RfZWxlLmFkZF9tb2RlbChPbk9mZlNlcnZlcigweDEwMDApKQ0KPiAgDQo+ICsJ cHJpbnQoc2V0X3llbGxvdygnUmVnaXN0ZXIgVmVuZG9yIG1vZGVsIG9uIGVsZW1lbnQgMCcpKQ0K PiArCWZpcnN0X2VsZS5hZGRfbW9kZWwoU2FtcGxlVmVuZG9yKDB4MDAwMSkpDQo+ICsNCj4gIAlw cmludChzZXRfeWVsbG93KCdSZWdpc3RlciBPbk9mZiBDbGllbnQgbW9kZWwgb24gZWxlbWVudCAx JykpDQo+ICAJc2Vjb25kX2VsZS5hZGRfbW9kZWwoT25PZmZDbGllbnQoMHgxMDAxKSkNCj4gKw0K PiAgCWFwcC5hZGRfZWxlbWVudChmaXJzdF9lbGUpDQo+ICAJYXBwLmFkZF9lbGVtZW50KHNlY29u ZF9lbGUpDQo+ICANCj4gIAltYWlubG9vcCA9IEdMaWIuTWFpbkxvb3AoKQ0KPiAgDQo+IC0JbWFp bl9tZW51KCkNCj4gKwltZW51cy5hcHBlbmQoTWFpbk1lbnUoKSkNCj4gKwltZW51cy5hcHBlbmQo Q2xpZW50TWVudSgpKQ0KPiArCXN3aXRjaF9tZW51KE1BSU5fTUVOVSkNCj4gKw0KPiAgCWV2ZW50 X2NhdGNoZXIgPSBNZW51SGFuZGxlcihwcm9jZXNzX2lucHV0KTsNCj4gIAltYWlubG9vcC5ydW4o KQ0KPiAg