From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: Re: [KVM-AUTOTEST][PATCH 1/2][virtio-console] Add subtest layer and prepare to add new tests. Date: Fri, 26 Nov 2010 10:50:21 -0200 Message-ID: <1290775821.2578.50.camel@freedom> References: <1290433139-13805-1-git-send-email-jzupka@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: autotest@test.kernel.org, kvm@vger.kernel.org, kvm-autotest@redhat.com To: =?UTF-8?Q?Ji=C5=99=C3=AD_=C5=BDupka?= Return-path: In-Reply-To: <1290433139-13805-1-git-send-email-jzupka@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autotest-bounces@test.kernel.org Errors-To: autotest-bounces@test.kernel.org List-Id: kvm.vger.kernel.org T24gTW9uLCAyMDEwLTExLTIyIGF0IDE0OjM4ICswMTAwLCBKacWZw60gxb11cGthIHdyb3RlOiAK PiBUaGlzIHBhdGNoIGNoYW5nZXMgc3RydWN0dXJlIG9mIHRoZSB2aXJ0aW9fY29uc29sZSB0ZXN0 IGFuZAo+IHByZXBhcmVzIHRoaXMgdGVzdCBmb3Igc2ltcGxlciBwb3J0aW5nIG9mIGFub3RoZXIg cmVxdWlyZWQgdGVzdHMuCj4gCj4gSXQgY3JlYXRlcyBhIG5ldyBsYXllciBmb3IgcnVubmluZyB0 aGUgZWxlbWVudGFyeSB0ZXN0cyBhbGxvd2luZyAKPiB0aGVtIHRvIG5vbi1jcml0aWNhbGx5IGZh aWwgYW5kIGxldCB0aGUgdGVzdCB0byBmaW5pc2ggdGhlIHdob2xlIHRlc3QgbG9vcC4KCl4gSSBt dXN0IHNheSBJIHJlYWxseSBsaWtlZCB0aGUgaWRlYS4gV2Ugc2hvdWxkIHR1cm4gdGhpcyBpbnRv IGZyYW1ld29yawppbmZyYXN0cnVjdHVyZSB0byBhY2NvbW9kYXRlIHNvbWUgcmVxdWVzdHMgSSd2 ZSBnb3QuIFB1dHRpbmcgaXQgb24gbXkKdG9kbyBsaXN0LgoKTWVhbndoaWxlLCBJJ3ZlIHJlc3Bp biB0aGUgcGF0Y2hlcyB5b3UgZ3V5cyBzZW50IGFuZCBhcHBsaWVkOgoKaHR0cDovL2F1dG90ZXN0 Lmtlcm5lbC5vcmcvY2hhbmdlc2V0LzQ5NDkKaHR0cDovL2F1dG90ZXN0Lmtlcm5lbC5vcmcvY2hh bmdlc2V0LzQ5NTAKClRoYW5rcyEKCj4gVGVzdHMgYXJlIGRpdmlkZWQgaW50byBwYXJ0cyBidXQg dGhlaXIgYmVoYXZpb3IgaXMgcHJlc2VydmVkLgo+IFRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIHNv bWUgY29kZSBjb3JyZWN0aW9uLgo+IAo+IENsYXNzIHdoaWNoIG1ha2VzIHN0YXRpc3RpYyBhbmQg c3RhcnQgc3VidGVzdCBpcyBuYW1lZCBTdWJUZXN0Lgo+IFVzYWdlOgo+ICAgZGVmIHRlc3RfZnVu YyhwYXJtYTEsIHBhcmFtMik6Cj4gICAgIGlmIHNvbWV0aGluazoKPiAgICAgICAgIHJhaXNlIGVy cm9yLlRlc3RGYWlsKCJTb21ldGhpbmsiKQo+IAo+ICAgZGVmIGNsZWFuX2Z1bmMocGFyYW0xLCBw YXJhbTIsIHBhcmFtMyk6Cj4gICAgIGNsZWFuCj4gCj4gICB0ZXN0ID0gU3ViVGVzdCgpCj4gCj4g ICAjc2V0IGNsZWFudXAgZnVuY3Rpb24gd2hlbiBzdWJ0ZXN0IGNyYXNoLgo+ICAgdGVzdC5zZXRf Y2xlYW51cF9mdW5jKGNsZWFuX2Z1bmMsIFtwYXJhbTEsIHBhcmFtMiwgLi5dKQo+IAo+ICAgI3N0 YXJ0IHRlc3QKPiAgIHRlc3QuZG9fdGVzdCh0ZXN0X2Z1bmMsW3BhcmFtcy4uXSkKPiAgIHRlc3Qu ZG9fdGVzdCh0ZXN0X2Z1bmMsW3BhcmFtcy4uXSx0cnVlKQo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXl5eXiAtIHRlc3QgaXMgY3JpdGljYWwuCj4gCj4gICAjcmV0dXJuIHN0 YXRpc3RpYwo+ICAgcHJpbnQgdGVzdC5nZXRfdGV4dF9yZXN1bHQoKQo+IAo+IGlmIGFueSBub24t Y3JpdGljYWwgc3VidGVzdHMgZmFpbHMgdGhlIHBhcnRpY3VsYXIgdGVzdCBmaW5pc2hlcyBhbmQg Y2FsbHMKPiB0aGUgY2xlYW4tdXAgZnVuY3Rpb24uIFRoZW4gdGhlIHRlc3QtbG9vcCBjb250aW51 ZXMgd2l0aCB0aGUgbmV4dAo+IGVsZW1lbnRhcnkgc3VidGVzdC4gQWx0aG91Z2ggU3ViVGVzdCBj bGFzcyBkaXNwbGF5cyBpbmZvcm1hdGlvbgo+IGFib3V0IHRoZSBzdWJ0ZXN0IHByb2JsZW0uIElm IHRoZSBjbGVhbi11cCBmdW5jdGlvbiBhbHNvIGZhaWxlZCBvcgo+IHN1YnRlc3Qgd2FzIGNyaXRp Y2FsLCB0aGVuIHRoZSB3aG9sZSB0ZXN0IHdpbGwgYmUgaW50ZXJydXB0ZWQuCj4gCj4gQXQgdGhl IGVuZCBvZiB0aGUgdGVzdC1sb29wIGl0IHN1bW1hcml6ZXMgdGhlIHBhc3NlZC9mYWlsZWQgdGVz dHMgYW5kCj4gcHJpbnQgb3V0IHRoZSBwb3NzaWJsZSBzdWJ0ZXN0IHRyYWNlLWJhY2tzLgo+IC0t LQo+ICBjbGllbnQvdGVzdHMva3ZtL3NjcmlwdHMvdmlydGlvX2d1ZXN0LnB5IHwgIDExMyArKyst LQo+ICBjbGllbnQvdGVzdHMva3ZtL3Rlc3RzL3ZpcnRpb19jb25zb2xlLnB5IHwgIDk0MSArKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiAgMiBmaWxlcyBjaGFuZ2VkLCA2MzggaW5zZXJ0 aW9ucygrKSwgNDE2IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9jbGllbnQvdGVzdHMv a3ZtL3NjcmlwdHMvdmlydGlvX2d1ZXN0LnB5IGIvY2xpZW50L3Rlc3RzL2t2bS9zY3JpcHRzL3Zp cnRpb19ndWVzdC5weQo+IGluZGV4IDQ4NjJlZjIuLjg3NzI3YzcgMTAwNzU1Cj4gLS0tIGEvY2xp ZW50L3Rlc3RzL2t2bS9zY3JpcHRzL3ZpcnRpb19ndWVzdC5weQo+ICsrKyBiL2NsaWVudC90ZXN0 cy9rdm0vc2NyaXB0cy92aXJ0aW9fZ3Vlc3QucHkKPiBAQCAtMywzNSArMywyMyBAQAo+ICAiIiIK PiAgQXV4aWxpYXJ5IHNjcmlwdCB1c2VkIHRvIHNlbmQgZGF0YSBiZXR3ZWVuIHBvcnRzIG9uIGd1 ZXN0cy4KPiAgCj4gLUBjb3B5cmlnaHQ6IDIwMDgtMjAwOSBSZWQgSGF0IEluYy4KPiArQGNvcHly aWdodDogMjAxMCBSZWQgSGF0LCBJbmMuCj4gIEBhdXRob3I6IEppcmkgWnVwa2EgKGp6dXBrYUBy ZWRoYXQuY29tKQo+ICBAYXV0aG9yOiBMdWthcyBEb2t0b3IgKGxkb2t0b3JAcmVkaGF0LmNvbSkK PiAgIiIiCj4gLSNmcm9tIF9weWRldl9TaW1wbGVYTUxSUENTZXJ2ZXIgaW1wb3J0IGZjbnRsCj4g LQo+IC0iIiIKPiAtVE9ETzoKPiAtdmlydC5pbml0KFtjb25zb2xlc10pICAgIyBzeXNmcywgdWRl diwgT0sKPiAtdmlydC5vcGVuKG5hbWUpCj4gLXZpcnQuY2xvc2UobmFtZSkKPiAtdmlydC5wb2xs KG5hbWUsIGV2ZW50bWFzaywgdGltZW91dCkgIyBwb2xsLnJlZ2lzdGVyKCksIHBvbGwucG9sbCgp LAo+IC1yZXR1cm4gZXZlbnQKPiAtdmlydC5zZW5kKG5hbWUsIGxlbmd0aCkgIyBob3N0IGRpc2Nv bm5lY3RlZAo+IC12aXJ0LnJlY3YobmFtZSwgbGVuZ3RoKSAjIGhvc3QgZGlzY29ubmVjdGVkCj4g LXZpcnQuYmxvY2tpbmcobmFtZSwgdHJ1ZSkgICAjIHRydWUgPSBibG9ja2luZywgZmFsc2UgPSBu b25ibG9ja2luZwo+IC12aXJ0Lmxvb3BiYWNrKGluX25hbWVzLCBvdXRfbmFtZXMsIHR5cGU9Ik5v bmUiKSAgIyB1c2Ugc2VsZWN0L3BvbGwKPiAtIiIiCj4gLQo+ICBpbXBvcnQgdGhyZWFkaW5nCj4g IGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKPiAtaW1wb3J0IG9zLCB0aW1lLCBzZWxlY3Qs IHJlLCByYW5kb20sIHN5cywgYXJyYXksIGZjbnRsLCBhcnJheSwgc3VicHJvY2Vzcwo+ICtpbXBv cnQgb3MsIHRpbWUsIHNlbGVjdCwgcmUsIHJhbmRvbSwgc3lzLCBhcnJheQo+ICtpbXBvcnQgZmNu dGwsIGFycmF5LCBzdWJwcm9jZXNzLCB0cmFjZWJhY2sKPiAgCj4gIERFQlVHUEFUSCA9ICIvc3lz L2tlcm5lbC9kZWJ1ZyIKPiAgU1lTRlNQQVRIID0gIi9zeXMvY2xhc3MvdmlydGlvLXBvcnRzLyIK PiAgCj4gCj4gLWNsYXNzIHZpcnRpb19ndWVzdCgpOgo+IC0KPiArY2xhc3MgVmlydGlvR3Vlc3Q6 Cj4gKyAgICAiIiIKPiArICAgIFRlc3QgdG9vbHMgb2YgdmlydGlvX3BvcnRzLgo+ICsgICAgIiIi Cj4gICAgICBMT09QX05PTkUgPSAwCj4gICAgICBMT09QX1BPTEwgPSAxCj4gICAgICBMT09QX1NF TEVDVCA9IDIKPiBAQCAtMTI1LDcgKzExMyw3IEBAIGNsYXNzIHZpcnRpb19ndWVzdCgpOgo+ICAg ICAgICAgIHByaW50ICJQQVNTOiBJbml0IGFuZCBjaGVjayB2aXJ0aW9jb25zb2xlIGZpbGVzIGlu IHN5c3RlbS4iCj4gIAo+IAo+IC0gICAgY2xhc3Mgc3dpdGNoKFRocmVhZCk6Cj4gKyAgICBjbGFz cyBTd2l0Y2goVGhyZWFkKToKPiAgICAgICAgICAiIiIKPiAgICAgICAgICBUaHJlYWQgdGhhdCBz ZW5kcyBkYXRhIGJldHdlZW4gcG9ydHMuCj4gICAgICAgICAgIiIiCj4gQEAgLTEzNyw3ICsxMjUs NyBAQCBjbGFzcyB2aXJ0aW9fZ3Vlc3QoKToKPiAgICAgICAgICAgICAgQHBhcmFtIG1ldGhvZDog TWV0aG9kIG9mIHJlYWQvd3JpdGUgYWNjZXNzLgo+ICAgICAgICAgICAgICBAcGFyYW0gY2FjaGVz aXplOiBCbG9jayB0byByZWNlaXZlIGFuZCBzZW5kLgo+ICAgICAgICAgICAgICAiIiIKPiAtICAg ICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCj4gKyAgICAgICAgICAgIFRocmVhZC5fX2lu aXRfXyhzZWxmLCBuYW1lPSJTd2l0Y2giKQo+ICAKPiAgICAgICAgICAgICAgc2VsZi5pbl9maWxl cyA9IGluX2ZpbGVzCj4gICAgICAgICAgICAgIHNlbGYub3V0X2ZpbGVzID0gb3V0X2ZpbGVzCj4g QEAgLTIxMSwxNSArMTk5LDE1IEBAIGNsYXNzIHZpcnRpb19ndWVzdCgpOgo+ICAKPiAKPiAgICAg ICAgICBkZWYgcnVuKHNlbGYpOgo+IC0gICAgICAgICAgICBpZiAoc2VsZi5tZXRob2QgPT0gdmly dGlvX2d1ZXN0LkxPT1BfUE9MTCk6Cj4gKyAgICAgICAgICAgIGlmIChzZWxmLm1ldGhvZCA9PSBW aXJ0aW9HdWVzdC5MT09QX1BPTEwpOgo+ICAgICAgICAgICAgICAgICAgc2VsZi5fcG9sbF9tb2Rl KCkKPiAtICAgICAgICAgICAgZWxpZiAoc2VsZi5tZXRob2QgPT0gdmlydGlvX2d1ZXN0LkxPT1Bf U0VMRUNUKToKPiArICAgICAgICAgICAgZWxpZiAoc2VsZi5tZXRob2QgPT0gVmlydGlvR3Vlc3Qu TE9PUF9TRUxFQ1QpOgo+ICAgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0X21vZGUoKQo+ICAg ICAgICAgICAgICBlbHNlOgo+ICAgICAgICAgICAgICAgICAgc2VsZi5fbm9uZV9tb2RlKCkKPiAg Cj4gCj4gLSAgICBjbGFzcyBzZW5kZXIoVGhyZWFkKToKPiArICAgIGNsYXNzIFNlbmRlcihUaHJl YWQpOgo+ICAgICAgICAgICIiIgo+ICAgICAgICAgIENyZWF0ZXMgYSB0aHJlYWQgd2hpY2ggc2Vu ZHMgcmFuZG9tIGJsb2NrcyBvZiBkYXRhIHRvIGRzdCBwb3J0Lgo+ICAgICAgICAgICIiIgo+IEBA IC0yMjgsNyArMjE2LDcgQEAgY2xhc3MgdmlydGlvX2d1ZXN0KCk6Cj4gICAgICAgICAgICAgIEBw YXJhbSBwb3J0OiBEZXN0aW5hdGlvbiBwb3J0Cj4gICAgICAgICAgICAgIEBwYXJhbSBsZW5ndGg6 IExlbmd0aCBvZiB0aGUgcmFuZG9tIGRhdGEgYmxvY2sKPiAgICAgICAgICAgICAgIiIiCj4gLSAg ICAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQo+ICsgICAgICAgICAgICBUaHJlYWQuX19p bml0X18oc2VsZiwgbmFtZT0iU2VuZGVyIikKPiAgICAgICAgICAgICAgc2VsZi5wb3J0ID0gcG9y dAo+ICAgICAgICAgICAgICBzZWxmLmV4aXRfdGhyZWFkID0gZXZlbnQKPiAgICAgICAgICAgICAg c2VsZi5kYXRhID0gYXJyYXkuYXJyYXkoJ0wnKQo+IEBAIC0yOTYsNyArMjg0LDIwIEBAIGNsYXNz IHZpcnRpb19ndWVzdCgpOgo+ICAgICAgICAgIGlmIChtYXNrWzBdWzFdICYgZXhwZWN0ZWQpID09 IGV4cGVjdGVkOgo+ICAgICAgICAgICAgICBwcmludCAiUEFTUzogRXZlbnRzOiAiICsgc3RyCj4g ICAgICAgICAgZWxzZToKPiAtICAgICAgICAgICAgcHJpbnQgIkZBSUw6IEV2ZW50czogIiArIHN0 cgo+ICsgICAgICAgICAgICBlc3RyID0gIiIKPiArICAgICAgICAgICAgaWYgKGV4cGVjdGVkICYg c2VsZWN0LlBPTExJTik6Cj4gKyAgICAgICAgICAgICAgICBlc3RyICs9ICJJTiAiCj4gKyAgICAg ICAgICAgIGlmIChleHBlY3RlZCAmIHNlbGVjdC5QT0xMUFJJKToKPiArICAgICAgICAgICAgICAg IGVzdHIgKz0gIlBSSSBJTiAiCj4gKyAgICAgICAgICAgIGlmIChleHBlY3RlZCAmIHNlbGVjdC5Q T0xMT1VUKToKPiArICAgICAgICAgICAgICAgIGVzdHIgKz0gIk9VVCAiCj4gKyAgICAgICAgICAg IGlmIChleHBlY3RlZCAmIHNlbGVjdC5QT0xMRVJSKToKPiArICAgICAgICAgICAgICAgIGVzdHIg Kz0gIkVSUiAiCj4gKyAgICAgICAgICAgIGlmIChleHBlY3RlZCAmIHNlbGVjdC5QT0xMSFVQKToK PiArICAgICAgICAgICAgICAgIGVzdHIgKz0gIkhVUCAiCj4gKyAgICAgICAgICAgIGlmIChleHBl Y3RlZCAmIHNlbGVjdC5QT0xMTVNHKToKPiArICAgICAgICAgICAgICAgIGVzdHIgKz0gIk1TRyAi Cj4gKyAgICAgICAgICAgIHByaW50ICJGQUlMOiBFdmVudHM6ICIgKyBzdHIgKyAiICBFeHBlY3Rl ZDogIiArIGVzdHIKPiAgCj4gCj4gICAgICBkZWYgYmxvY2tpbmcoc2VsZiwgcG9ydCwgbW9kZT1G YWxzZSk6Cj4gQEAgLTMwNiw4ICszMDcsNyBAQCBjbGFzcyB2aXJ0aW9fZ3Vlc3QoKToKPiAgICAg ICAgICBAcGFyYW0gcG9ydDogcG9ydCB0byBzZXQgbW9kZQo+ICAgICAgICAgIEBwYXJhbSBtb2Rl OiBGYWxzZSB0byBzZXQgbm9uYmxvY2sgbW9kZSwgVHJ1ZSBmb3IgYmxvY2sgbW9kZQo+ICAgICAg ICAgICIiIgo+IC0gICAgICAgIHBhdGggPSBzZWxmLnBvcnRzW3BvcnRdWyJwYXRoIl0KPiAtICAg ICAgICBmZCA9IHNlbGYuZmlsZXNbcGF0aF0KPiArICAgICAgICBmZCA9IHNlbGYuX29wZW4oW3Bv cnRdKVswXQo+ICAKPiAgICAgICAgICB0cnk6Cj4gICAgICAgICAgICAgIGZsID0gZmNudGwuZmNu dGwoZmQsIGZjbnRsLkZfR0VURkwpCj4gQEAgLTMzNiwyNCArMzM2LDI4IEBAIGNsYXNzIHZpcnRp b19ndWVzdCgpOgo+ICAgICAgICAgICAgICBpZiBwYXRoIGluIHNlbGYuZmlsZXMua2V5cygpOgo+ ICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IHNlbGYuZmlsZXNbcGF0aF0KPiAgICAgICAg ICAgICAgICAgIGRlbCBzZWxmLmZpbGVzW3BhdGhdCj4gLSAgICAgICAgdHJ5Ogo+IC0gICAgICAg ICAgICBvcy5jbG9zZShkZXNjcmlwdG9yKQo+IC0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg aW5zdDoKPiAtICAgICAgICAgICAgcHJpbnQgIkZBSUw6IENsb3NpbmcgdGhlIGZpbGU6ICIgKyBz dHIoaW5zdCkKPiAtICAgICAgICAgICAgcmV0dXJuCj4gKyAgICAgICAgICAgIGlmIGRlc2NyaXB0 b3IgIT0gTm9uZToKPiArICAgICAgICAgICAgICAgIHRyeToKPiArICAgICAgICAgICAgICAgICAg ICBvcy5jbG9zZShkZXNjcmlwdG9yKQo+ICsgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlv biBhcyBpbnN0Ogo+ICsgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlMOiBDbG9zaW5nIHRo ZSBmaWxlOiAiICsgc3RyKGluc3QpCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCj4gICAg ICAgICAgcHJpbnQgIlBBU1M6IENsb3NlIgo+ICAKPiAKPiAtICAgIGRlZiBvcGVuKHNlbGYsIGlu X2ZpbGVzKToKPiArICAgIGRlZiBvcGVuKHNlbGYsIGluX2ZpbGUpOgo+ICAgICAgICAgICIiIgo+ ICAgICAgICAgIERpcmVjdCBvcGVuIGRldmljZXMuCj4gIAo+IC0gICAgICAgIEBwYXJhbSBpbl9m aWxlczogQXJyYXkgb2YgZmlsZXMuCj4gKyAgICAgICAgQHBhcmFtIGluX2ZpbGU6IEFycmF5IG9m IGZpbGVzLgo+ICAgICAgICAgIEByZXR1cm46IEFycmF5IG9mIGRlc2NyaXB0b3JzLgo+ICAgICAg ICAgICIiIgo+IC0gICAgICAgIG5hbWUgPSBzZWxmLnBvcnRzW2luX2ZpbGVzXVsicGF0aCJdCj4g KyAgICAgICAgbmFtZSA9IHNlbGYucG9ydHNbaW5fZmlsZV1bInBhdGgiXQo+ICAgICAgICAgIHRy eToKPiAgICAgICAgICAgICAgc2VsZi5maWxlc1tuYW1lXSA9IG9zLm9wZW4obmFtZSwgb3MuT19S RFdSKQo+ICsgICAgICAgICAgICBpZiAoc2VsZi5wb3J0c1tpbl9maWxlXVsiaXNfY29uc29sZSJd ID09ICJ5ZXMiKToKPiArICAgICAgICAgICAgICAgIHByaW50IG9zLnN5c3RlbSgic3R0eSAtRiAl cyByYXcgLWVjaG8iICUgKG5hbWUpKQo+ICsgICAgICAgICAgICAgICAgcHJpbnQgb3Muc3lzdGVt KCJzdHR5IC1GICVzIC1hIiAlIChuYW1lKSkKPiAgICAgICAgICAgICAgcHJpbnQgIlBBU1M6IE9w ZW4gYWxsIGZpbGxlcyBjb3JyZWN0bHkuIgo+ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg aW5zdDoKPiAgICAgICAgICAgICAgcHJpbnQgIiVzXG5GQUlMOiBGYWlsZWQgb3BlbiBmaWxlICVz IiAlIChzdHIoaW5zdCksIG5hbWUpCj4gQEAgLTM3NCw3ICszNzgsNyBAQCBjbGFzcyB2aXJ0aW9f Z3Vlc3QoKToKPiAgICAgICAgICBpbl9mID0gc2VsZi5fb3Blbihpbl9maWxlcykKPiAgICAgICAg ICBvdXRfZiA9IHNlbGYuX29wZW4ob3V0X2ZpbGVzKQo+ICAKPiAtICAgICAgICBzID0gc2VsZi5z d2l0Y2goaW5fZiwgb3V0X2YsIHNlbGYuZXhpdF90aHJlYWQsIGNhY2hlc2l6ZSwgbW9kZSkKPiAr ICAgICAgICBzID0gc2VsZi5Td2l0Y2goaW5fZiwgb3V0X2YsIHNlbGYuZXhpdF90aHJlYWQsIGNh Y2hlc2l6ZSwgbW9kZSkKPiAgICAgICAgICBzLnN0YXJ0KCkKPiAgICAgICAgICBzZWxmLnRocmVh ZHMuYXBwZW5kKHMpCj4gICAgICAgICAgcHJpbnQgIlBBU1M6IFN0YXJ0IHN3aXRjaCIKPiBAQCAt NDEyLDcgKzQxNiw3IEBAIGNsYXNzIHZpcnRpb19ndWVzdCgpOgo+ICAgICAgICAgIHNlbGYucG9y dHMgPSBzZWxmLl9nZXRfcG9ydF9zdGF0dXMoKQo+ICAgICAgICAgIGluX2YgPSBzZWxmLl9vcGVu KFtwb3J0XSkKPiAgCj4gLSAgICAgICAgc2VsZi50aHJlYWRzLmFwcGVuZChzZWxmLnNlbmRlcihp bl9mWzBdLCBzZWxmLmV4aXRfdGhyZWFkLCBsZW5ndGgpKQo+ICsgICAgICAgIHNlbGYudGhyZWFk cy5hcHBlbmQoc2VsZi5TZW5kZXIoaW5fZlswXSwgc2VsZi5leGl0X3RocmVhZCwgbGVuZ3RoKSkK PiAgICAgICAgICBwcmludCAiUEFTUzogU2VuZGVyIHByZXBhcmUiCj4gIAo+IAo+IEBAIC00ODQs NiArNDg4LDI4IEBAIGNsYXNzIHZpcnRpb19ndWVzdCgpOgo+ICAgICAgICAgICAgICAgICAgICAg KGxlbmd0aCwgbGVuKHJlY3ZzKSkpCj4gIAo+IAo+ICsgICAgZGVmIGNsZWFuX3BvcnQoc2VsZiwg cG9ydCwgYnVmZmVyPTEwMjQpOgo+ICsgICAgICAgIGluX2YgPSBzZWxmLl9vcGVuKFtwb3J0XSkK PiArICAgICAgICByZXQgPSBzZWxlY3Quc2VsZWN0KFtpbl9mWzBdXSwgW10sIFtdLCAxLjApCj4g KyAgICAgICAgYnVmID0gIiIKPiArICAgICAgICBpZiByZXRbMF06Cj4gKyAgICAgICAgICAgIGJ1 ZiA9IG9zLnJlYWQoaW5fZlswXSwgYnVmZmVyKQo+ICsgICAgICAgIHByaW50ICgiUEFTUzogUmVz dCBpbiBzb2NrZXQ6ICIgKyBidWYpCj4gKwo+ICsKPiArZGVmIGlzX2FsaXZlKCk6Cj4gKyAgICAi IiIKPiArICAgIENoZWNrIGlzIG9ubHkgbWFpbiB0aHJlYWQgaXMgYWxpdmUgYW5kIGlmIGd1ZXN0 IHJlYWN0Lgo+ICsgICAgIiIiCj4gKyAgICBpZiB0aHJlYWRpbmcuYWN0aXZlQ291bnQoKSA9PSAx Ogo+ICsgICAgICAgIHByaW50ICgiUEFTUzogR3Vlc3QgaXMgb2sgbm8gdGhyZWFkIGFsaXZlIikK PiArICAgIGVsc2U6Cj4gKyAgICAgICAgdGhyZWFkcyA9ICIiCj4gKyAgICAgICAgZm9yIHRocmVh ZCBpbiB0aHJlYWRpbmcuZW51bWVyYXRlKCk6Cj4gKyAgICAgICAgICAgIHRocmVhZHMgKz0gdGhy ZWFkLm5hbWUgKyAiLCAiCj4gKyAgICAgICAgcHJpbnQgKCJGQUlMOiBPbiBndWVzdCBydW4gdGhy ZWFkLiBBY3RpdmUgdGhyZWFkOiIgKyB0aHJlYWRzKQo+ICsKPiArCj4gIGRlZiBjb21waWxlKCk6 Cj4gICAgICAiIiIKPiAgICAgIENvbXBpbGUgdmlydGlvX2d1ZXN0LnB5IHRvIHNwZWVkIHVwLgo+ IEBAIC01MDEsMTIgKzUyNywxOSBAQCBkZWYgbWFpbigpOgo+ICAgICAgaWYgKGxlbihzeXMuYXJn dikgPiAxKSBhbmQgKHN5cy5hcmd2WzFdID09ICItYyIpOgo+ICAgICAgICAgIGNvbXBpbGUoKQo+ ICAKPiAtICAgIHZpcnQgPSB2aXJ0aW9fZ3Vlc3QoKQo+ICsgICAgdmlydCA9IFZpcnRpb0d1ZXN0 KCkKPiAgICAgIHByaW50ICJQQVNTOiBTdGFydCIKPiAgCj4gICAgICB3aGlsZSBUcnVlOgo+ICAg ICAgICAgIHN0ciA9IHJhd19pbnB1dCgpCj4gLSAgICAgICAgZXhlYyBzdHIKPiArICAgICAgICB0 cnk6Cj4gKyAgICAgICAgICAgIGV4ZWMgc3RyCj4gKyAgICAgICAgZXhjZXB0Ogo+ICsgICAgICAg ICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkK PiArICAgICAgICAgICAgcHJpbnQgIk9uIEd1ZXN0IGV4Y2VwdGlvbiBmcm9tOiBcbiIgKyAiIi5q b2luKAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2suZm9y bWF0X2V4Y2VwdGlvbihleGNfdHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3ZhbHVlLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNf dHJhY2ViYWNrKSkKPiAgCj4gCj4gIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Cj4gZGlmZiAt LWdpdCBhL2NsaWVudC90ZXN0cy9rdm0vdGVzdHMvdmlydGlvX2NvbnNvbGUucHkgYi9jbGllbnQv dGVzdHMva3ZtL3Rlc3RzL3ZpcnRpb19jb25zb2xlLnB5Cj4gaW5kZXggYWE2NjhlMS4uZDY5YzBh NSAxMDA2NDQKPiAtLS0gYS9jbGllbnQvdGVzdHMva3ZtL3Rlc3RzL3ZpcnRpb19jb25zb2xlLnB5 Cj4gKysrIGIvY2xpZW50L3Rlc3RzL2t2bS90ZXN0cy92aXJ0aW9fY29uc29sZS5weQo+IEBAIC0x LDE1ICsxLDE2IEBACj4gICIiIgo+ICB2aXJ0aW9fY29uc29sZSB0ZXN0Cj4gIAo+IC1AY29weXJp Z2h0OiBSZWQgSGF0IDIwMTAKPiArQGNvcHlyaWdodDogMjAxMCBSZWQgSGF0LCBJbmMuCj4gICIi Igo+ICBpbXBvcnQgYXJyYXksIGxvZ2dpbmcsIG9zLCByYW5kb20sIHJlLCBzZWxlY3QsIHNodXRp bCwgc29ja2V0LCBzeXMsIHRlbXBmaWxlCj4gLWltcG9ydCB0aHJlYWRpbmcsIHRpbWUKPiAraW1w b3J0IHRocmVhZGluZywgdGltZSwgdHJhY2ViYWNrCj4gIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0 IGRlcXVlCj4gIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKPiAgCj4gIGltcG9ydCBrdm1f c3VicHJvY2Vzcywga3ZtX3Rlc3RfdXRpbHMsIGt2bV91dGlscywga3ZtX3ByZXByb2Nlc3NpbmcK PiAgZnJvbSBhdXRvdGVzdF9saWIuY2xpZW50LmNvbW1vbl9saWIgaW1wb3J0IGVycm9yCj4gK2Zy b20gYXV0b3Rlc3RfbGliLmNsaWVudC5iaW4gaW1wb3J0IHV0aWxzCj4gIAo+IAo+ICBkZWYgcnVu X3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiBAQCAtMzAsNyArMzEsMTk0IEBA IGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAgICAgQHBhcmFt IHBhcmFtczogRGljdGlvbmFyeSB3aXRoIHRoZSB0ZXN0IHBhcmFtZXRlcnMKPiAgICAgIEBwYXJh bSBlbnY6IERpY3Rpb25hcnkgd2l0aCB0ZXN0IGVudmlyb25tZW50Cj4gICAgICAiIiIKPiAtICAg IGNsYXNzIHRoX3NlbmQoVGhyZWFkKToKPiArICAgIGNsYXNzIFN1YlRlc3Qob2JqZWN0KToKPiAr ICAgICAgICAiIiIKPiArICAgICAgICBDb2xsZWN0IHJlc3VsdCBvZiBzdWJ0ZXN0IG9mIG1haW4g dGVzdC4KPiArICAgICAgICAiIiIKPiArICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Cj4gKyAg ICAgICAgICAgICIiIgo+ICsgICAgICAgICAgICBJbml0aWFsaXplIG9iamVjdAo+ICsgICAgICAg ICAgICAiIiIKPiArICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBbXQo+ICsgICAgICAgICAgICBz ZWxmLnBhc3NlZCA9IDAKPiArICAgICAgICAgICAgc2VsZi5mYWlsZWQgPSAwCj4gKyAgICAgICAg ICAgIHNlbGYuY2xlYW51cF9mdW5jID0gTm9uZQo+ICsgICAgICAgICAgICBzZWxmLmNsZWFudXBf YXJncyA9IE5vbmUKPiArCj4gKwo+ICsgICAgICAgIGRlZiBzZXRfY2xlYW51cF9mdW5jKHNlbGYs IGZ1bmMsIGFyZ3MpOgo+ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgU2V0IGNsZWFu dXAgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIHdoZW4gc3VidGVzdCBmYWlscy4KPiArCj4gKyAg ICAgICAgICAgIEBwYXJhbSBmdW5jOiBGdW5jdGlvbiB3aGljaCBzaG91bGQgYmUgY2FsbGVkIHdo ZW4gdGVzdCBmYWlscy4KPiArICAgICAgICAgICAgQHBhcmFtIGFyZ3M6IEFyZ3VtZW50cyBvZiBj bGVhbnVwIGZ1bmN0aW9uLgo+ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgc2VsZi5j bGVhbnVwX2Z1bmMgPSBmdW5jCj4gKyAgICAgICAgICAgIHNlbGYuY2xlYW51cF9hcmdzID0gYXJn cwo+ICsKPiArCj4gKyAgICAgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgZnVuY3Rpb24sIGFyZ3M9Tm9u ZSwgZmF0YWw9RmFsc2UsIGNsZWFudXA9VHJ1ZSk6Cj4gKyAgICAgICAgICAgICIiIgo+ICsgICAg ICAgICAgICBFeGVjdXRlIHN1YnRlc3QgZnVuY3Rpb24uCj4gKwo+ICsgICAgICAgICAgICBAcGFy YW0gZnVuY3Rpb246IE9iamVjdCBvZiBmdW5jdGlvbi4KPiArICAgICAgICAgICAgQHBhcmFtIGFy Z3M6IExpc3Qgb2YgYXJndW1lbnRzIG9mIGZ1bmN0aW9uLgo+ICsgICAgICAgICAgICBAcGFyYW0g ZmF0YWw6IElmIHRydWUgZXhjZXB0aW9uIGlzIGZvcndhcmRlZCB0byBtYWluIHRlc3QuCj4gKyAg ICAgICAgICAgIEByZXR1cm46IFJldHVybiB3aGF0IHJldHVybmVkIGV4ZWN1dGVkIHN1YnRlc3Qu Cj4gKyAgICAgICAgICAgIEByYWlzZSBUZXN0RXJyb3I6IElmIGNvbGxhcHNlIG9mIHRlc3QgaXMg ZmF0YWwgcmFpc2UgZm9yd2FyZAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24g ZnJvbSBzdWJ0ZXN0Lgo+ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgaWYgYXJncyA9 PSBOb25lOgo+ICsgICAgICAgICAgICAgICAgYXJncyA9IFtdCj4gKyAgICAgICAgICAgIHRyeToK PiArICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlN0YXJ0IHRlc3QgJXMuIiAlIGZ1bmN0 aW9uLmZ1bmNfbmFtZSkKPiArICAgICAgICAgICAgICAgIHJldCA9IGZ1bmN0aW9uKCphcmdzKQo+ ICsgICAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKHNlbGYucmVzdWx0X3RvX3N0cmluZygoVHJ1 ZSwgZnVuY3Rpb24uZnVuY19uYW1lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXJncykpKQo+ICsgICAgICAgICAgICAgICAgc2VsZi5yZXN1 bHQuYXBwZW5kKChUcnVlLCBmdW5jdGlvbi5mdW5jX25hbWUsIGFyZ3MpKQo+ICsgICAgICAgICAg ICAgICAgc2VsZi5wYXNzZWQgKz0gMQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJldAo+ICsg ICAgICAgICAgICBleGNlcHQ6Cj4gKyAgICAgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVl LCBleGNfdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKPiArICAgICAgICAgICAgICAgIGxvZ2dp bmcuZXJyb3IoIkluIGZ1bmN0aW9uICgiICsgZnVuY3Rpb24uZnVuY19uYW1lICsgIik6IikKPiAr ICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkNhbGwgZnJvbTpcbiIgKwo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X3N0YWNrKClbLTJdWzotMV0p Cj4gKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJFeGNlcHRpb24gZnJvbTpcbiIgKwo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIi5qb2luKHRyYWNlYmFjay5mb3JtYXRf ZXhjZXB0aW9uKAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3RyYWNlYmFjay50Yl9uZXh0 KSkpCj4gKyAgICAgICAgICAgICAgICAjQ2xlYW4gdXAgZW52aXJvbm1lbnQgYWZ0ZXIgc3ViVGVz dCBjcmFzaAo+ICsgICAgICAgICAgICAgICAgaWYgY2xlYW51cDoKPiArICAgICAgICAgICAgICAg ICAgICBzZWxmLmNsZWFudXBfZnVuYygqc2VsZi5jbGVhbnVwX2FyZ3MpCj4gKyAgICAgICAgICAg ICAgICBsb2dnaW5nLmluZm8oc2VsZi5yZXN1bHRfdG9fc3RyaW5nKChGYWxzZSwgZnVuY3Rpb24u ZnVuY19uYW1lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXJncykpKQo+ICsgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQuYXBwZW5kKChG YWxzZSwgZnVuY3Rpb24uZnVuY19uYW1lLCBhcmdzKSkKPiArICAgICAgICAgICAgICAgIHNlbGYu ZmFpbGVkICs9IDEKPiArICAgICAgICAgICAgICAgIGlmIGZhdGFsOgo+ICsgICAgICAgICAgICAg ICAgICAgIHJhaXNlCj4gKwo+ICsKPiArICAgICAgICBkZWYgaXNfZmFpbGVkKHNlbGYpOgo+ICsg ICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgQHJldHVybjogSWYgYW55IG9mIHN1YnRlc3Qg bm90IHBhc3MgcmV0dXJuIFRydWUuCj4gKyAgICAgICAgICAgICIiIgo+ICsgICAgICAgICAgICBy ZXR1cm4gVHJ1ZSBpZiBzZWxmLmZhaWxlZCA+IDAgZWxzZSBGYWxzZQo+ICsKPiArICAgICAgICBk ZWYgZ2V0X3Jlc3VsdChzZWxmKToKPiArICAgICAgICAgICAgIiIiCj4gKyAgICAgICAgICAgIEBy ZXR1cm46IFJlc3VsdCBvZiBzdWJ0ZXN0cy4KPiArICAgICAgICAgICAgICAgRm9ybWF0Ogo+ICsg ICAgICAgICAgICAgICAgIHR1cGxlKHBhc3MvZmFpbCxmdW5jdGlvbl9uYW1lLGNhbGxfYXJndW1l bnRzKQo+ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0 Cj4gKwo+ICsKPiArICAgICAgICBkZWYgcmVzdWx0X3RvX3N0cmluZ19kZWJ1ZyhzZWxmLCByZXN1 bHQpOgo+ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgQHBhcmFtIHJlc3VsdDogUmVz dWx0IG9mIHRlc3QuCj4gKyAgICAgICAgICAgICIiIgo+ICsgICAgICAgICAgICBzYXJncyA9ICIi Cj4gKyAgICAgICAgICAgIGZvciBhcmcgaW4gcmVzdWx0WzJdOgo+ICsgICAgICAgICAgICAgICAg c2FyZ3MgKz0gc3RyKGFyZykgKyAiLCIKPiArICAgICAgICAgICAgc2FyZ3MgPSBzYXJnc1s6LTFd Cj4gKyAgICAgICAgICAgIHJldHVybiAoIlN1YnRlc3QgKCVzKCVzKSk6ICAtLT4lcyIpICUgKHJl c3VsdFsxXSwgc2FyZ3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQQVNTImlmIHJlc3VsdFswXSBlbHNlICJGQUlMIikKPiArCj4gKwo+ICsgICAgICAg IGRlZiByZXN1bHRfdG9fc3RyaW5nKHNlbGYsIHJlc3VsdCk6Cj4gKyAgICAgICAgICAgICIiIgo+ ICsgICAgICAgICAgICBAcGFyYW0gcmVzdWx0OiBSZXN1bHQgb2YgdGVzdC4KPiArICAgICAgICAg ICAgIiIiCj4gKyAgICAgICAgICAgIHJldHVybiAoIlN1YnRlc3QgKCVzKTogIC0tPiVzIikgJSAo cmVzdWx0WzFdLCAiUEFTUyJpZiByZXN1bHRbMF0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAiRkFJTCIpCj4gKwo+ ICsKPiArICAgICAgICBkZWYgZ2V0X2Z1bGxfdGV4dF9yZXN1bHQoc2VsZik6Cj4gKyAgICAgICAg ICAgICIiIgo+ICsgICAgICAgICAgICBAcmV0dXJuIHN0cmluZyB3aXRoIHRleHQgZm9ybSBvZiBy ZXN1bHQKPiArICAgICAgICAgICAgIiIiCj4gKyAgICAgICAgICAgIHJlc3VsdCA9ICIiCj4gKyAg ICAgICAgICAgIGZvciByZXMgaW4gc2VsZi5yZXN1bHQ6Cj4gKyAgICAgICAgICAgICAgICByZXN1 bHQgKz0gc2VsZi5yZXN1bHRfdG9fc3RyaW5nX2RlYnVnKHJlcykgKyAiXG4iCj4gKyAgICAgICAg ICAgIHJldHVybiByZXN1bHQKPiArCj4gKwo+ICsgICAgICAgIGRlZiBnZXRfdGV4dF9yZXN1bHQo c2VsZik6Cj4gKyAgICAgICAgICAgICIiIgo+ICsgICAgICAgICAgICBAcmV0dXJuIHN0cmluZyB3 aXRoIHRleHQgZm9ybSBvZiByZXN1bHQKPiArICAgICAgICAgICAgIiIiCj4gKyAgICAgICAgICAg IHJlc3VsdCA9ICIiCj4gKyAgICAgICAgICAgIGZvciByZXMgaW4gc2VsZi5yZXN1bHQ6Cj4gKyAg ICAgICAgICAgICAgICByZXN1bHQgKz0gc2VsZi5yZXN1bHRfdG9fc3RyaW5nKHJlcykgKyAiXG4i Cj4gKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKPiArCj4gKwo+ICsgICAgY2xhc3MgUG9ydChv YmplY3QpOgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIERlZmluZSBzdHJ1Y3R1cmUgdG8ga2Vl cCBpbmZvcm1hdGlvbiBhYm91dCB1c2VkIHBvcnQuCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAg ZGVmIF9faW5pdF9fKHNlbGYsIHNvY2ssIG5hbWUsIHBvcnRfdHlwZSwgcGF0aCk6Cj4gKyAgICAg ICAgICAgICIiIgo+ICsgICAgICAgICAgICBAcGFyYW0gdm06IHZpcnR1YWwgbWFjaGluZSBvYmpl Y3QgdGhhdCBwb3J0IG93bmVkCj4gKyAgICAgICAgICAgIEBwYXJhbSBzb2NrOiBTb2NrZXQgb2Yg cG9ydCBpZiBwb3J0IGlzIG9wZW4uCj4gKyAgICAgICAgICAgIEBwYXJhbSBuYW1lOiBOYW1lIG9m IHBvcnQgZm9yIGd1ZXN0IHNpZGUuCj4gKyAgICAgICAgICAgIEBwYXJhbSBwb3J0X3R5cGU6IFR5 cGUgb2YgcG9ydCB5ZXMgPSBjb25zb2xlLCBubz0gc2VyaWFscG9ydC4KPiArICAgICAgICAgICAg QHBhcmFtIHBhdGg6IFBhdGggdG8gcG9ydCBvbiBob3N0IHNpZGUuCj4gKyAgICAgICAgICAgICIi Igo+ICsgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrCj4gKyAgICAgICAgICAgIHNlbGYubmFt ZSA9IG5hbWUKPiArICAgICAgICAgICAgc2VsZi5wb3J0X3R5cGUgPSBwb3J0X3R5cGUKPiArICAg ICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAo+ICsgICAgICAgICAgICBzZWxmLmlzX29wZW4gPSBG YWxzZQo+ICsKPiArCj4gKyAgICAgICAgZGVmIGZvcl9ndWVzdChzZWxmKToKPiArICAgICAgICAg ICAgIiIiCj4gKyAgICAgICAgICAgIEZvcm1hdCBkYXRhIGZvciBjb21tdW5pY2F0aW9uIHdpdGgg Z3Vlc3Qgc2lkZS4KPiArICAgICAgICAgICAgIiIiCj4gKyAgICAgICAgICAgIHJldHVybiBbc2Vs Zi5uYW1lLCBzZWxmLnBvcnRfdHlwZV0KPiArCj4gKwo+ICsgICAgICAgIGRlZiBvcGVuKHNlbGYp Ogo+ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgT3BlbiBwb3J0IG9uIGhvc3Qgc2lk ZS4KPiArICAgICAgICAgICAgIiIiCj4gKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5z b2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKPiArICAgICAgICAgICAg c2VsZi5zb2NrLmNvbm5lY3Qoc2VsZi5wYXRoKQo+ICsgICAgICAgICAgICBzZWxmLmlzX29wZW4g PSBUcnVlCj4gKwo+ICsKPiArICAgICAgICBkZWYgY2xlYW5fcG9ydChzZWxmKToKPiArICAgICAg ICAgICAgIiIiCj4gKyAgICAgICAgICAgIENsZWFuIGFsbCBkYXRhIGZyb20gb3BlbmVkIHBvcnQg b24gaG9zdCBzaWRlLgo+ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgaWYgc2VsZi5p c19vcGVuOgo+ICsgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCj4gKyAgICAgICAgICAgIHNl bGYub3BlbigpCj4gKyAgICAgICAgICAgIHJldCA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc29ja10s IFtdLCBbXSwgMS4wKQo+ICsgICAgICAgICAgICBpZiByZXRbMF06Cj4gKyAgICAgICAgICAgICAg ICBidWYgPSBzZWxmLnNvY2sucmVjdigxMDI0KQo+ICsgICAgICAgICAgICAgICAgbG9nZ2luZy5k ZWJ1ZygiUmVzdCBpbiBzb2NrZXQ6ICIgKyBidWYpCj4gKwo+ICsKPiArICAgICAgICBkZWYgY2xv c2Uoc2VsZik6Cj4gKyAgICAgICAgICAgICIiIgo+ICsgICAgICAgICAgICBDbG9zZSBwb3J0Lgo+ ICsgICAgICAgICAgICAiIiIKPiArICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tl dC5TSFVUX1JEV1IpCj4gKyAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCj4gKyAgICAgICAg ICAgIHNlbGYuaXNfb3BlbiA9IEZhbHNlCj4gKwo+ICsKPiArICAgICAgICBkZWYgX19zdHJfXyhz ZWxmKToKPiArICAgICAgICAgICAgIiIiCj4gKyAgICAgICAgICAgIENvbnZlcnQgdG8gdGV4dC4K PiArICAgICAgICAgICAgIiIiCj4gKyAgICAgICAgICAgIHJldHVybiAoIiVzLCVzLCVzLCVzLCVk IiAlICgiU29ja2V0Iiwgc2VsZi5uYW1lLCBzZWxmLnBvcnRfdHlwZSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0aCwgc2VsZi5pc19vcGVuKSkKPiAr Cj4gKwo+ICsgICAgY2xhc3MgVGhTZW5kKFRocmVhZCk6Cj4gICAgICAgICAgIiIiCj4gICAgICAg ICAgUmFuZG9tIGRhdGEgc2VuZGVyIHRocmVhZC4KPiAgICAgICAgICAiIiIKPiBAQCAtNTMsMTQg KzI0MSwxNCBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiAg Cj4gCj4gICAgICAgICAgZGVmIHJ1bihzZWxmKToKPiAtICAgICAgICAgICAgbG9nZ2luZy5kZWJ1 ZygidGhfc2VuZCAlczogcnVuIiwgc2VsZi5nZXROYW1lKCkpCj4gKyAgICAgICAgICAgIGxvZ2dp bmcuZGVidWcoIlRoU2VuZCAlczogcnVuIiwgc2VsZi5nZXROYW1lKCkpCj4gICAgICAgICAgICAg IHdoaWxlIG5vdCBzZWxmLmV4aXRldmVudC5pc1NldCgpOgo+ICAgICAgICAgICAgICAgICAgc2Vs Zi5pZHggKz0gc2VsZi5wb3J0LnNlbmQoc2VsZi5kYXRhKQo+IC0gICAgICAgICAgICBsb2dnaW5n LmRlYnVnKCJ0aF9zZW5kICVzOiBleGl0KCVkKSIsIHNlbGYuZ2V0TmFtZSgpLAo+ICsgICAgICAg ICAgICBsb2dnaW5nLmRlYnVnKCJUaFNlbmQgJXM6IGV4aXQoJWQpIiwgc2VsZi5nZXROYW1lKCks Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pZHgpCj4gIAo+IAo+IC0gICAgY2xh c3MgdGhfc2VuZF9jaGVjayhUaHJlYWQpOgo+ICsgICAgY2xhc3MgVGhTZW5kQ2hlY2soVGhyZWFk KToKPiAgICAgICAgICAiIiIKPiAgICAgICAgICBSYW5kb20gZGF0YSBzZW5kZXIgdGhyZWFkLgo+ ICAgICAgICAgICIiIgo+IEBAIC04NSw3ICsyNzMsNyBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xl KHRlc3QsIHBhcmFtcywgZW52KToKPiAgCj4gCj4gICAgICAgICAgZGVmIHJ1bihzZWxmKToKPiAt ICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGhfc2VuZF9jaGVjayAlczogcnVuIiwgc2VsZi5n ZXROYW1lKCkpCj4gKyAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlRoU2VuZENoZWNrICVzOiBy dW4iLCBzZWxmLmdldE5hbWUoKSkKPiAgICAgICAgICAgICAgdG9vX211Y2hfZGF0YSA9IEZhbHNl Cj4gICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmV4aXRldmVudC5pc1NldCgpOgo+ICAgICAg ICAgICAgICAgICAgIyBGSVhNRTogd29ya2Fyb3VuZCB0aGUgcHJvYmxlbSB3aXRoIHFlbXUta3Zt IHN0YWxsIHdoZW4gdG9vCj4gQEAgLTEwOSwxNCArMjk3LDE0IEBAIGRlZiBydW5fdmlydGlvX2Nv bnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAgICAgICAgICAgICAgICAgICAgICAgICBpZHgg PSBzZWxmLnBvcnQuc2VuZChidWYpCj4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1 ZltpZHg6XQo+ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlkeCArPSBpZHgKPiAtICAg ICAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGhfc2VuZF9jaGVjayAlczogZXhpdCglZCkiLCBzZWxm LmdldE5hbWUoKSwKPiArICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVGhTZW5kQ2hlY2sgJXM6 IGV4aXQoJWQpIiwgc2VsZi5nZXROYW1lKCksCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg c2VsZi5pZHgpCj4gICAgICAgICAgICAgIGlmIHRvb19tdWNoX2RhdGE6Cj4gLSAgICAgICAgICAg ICAgICBsb2dnaW5nLmVycm9yKCJ0aF9zZW5kX2NoZWNrOiB3b3JrYXJvdW5kIHRoZSAndG9vX211 Y2hfZGF0YSciCj4gKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJUaFNlbmRDaGVjazog d29ya2Fyb3VuZCB0aGUgJ3Rvb19tdWNoX2RhdGEnIgo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiYnVnIikKPiAgCj4gCj4gLSAgICBjbGFzcyB0aF9yZWN2KFRocmVhZCk6Cj4gKyAg ICBjbGFzcyBUaFJlY3YoVGhyZWFkKToKPiAgICAgICAgICAiIiIKPiAgICAgICAgICBSZWNpZXZl cyBkYXRhIGFuZCB0aHJvd3MgaXQgYXdheS4KPiAgICAgICAgICAiIiIKPiBAQCAtMTM0LDcgKzMy Miw3IEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAgICAg ICAgICAgICBzZWxmLmJsb2NrbGVuID0gYmxvY2tsZW4KPiAgICAgICAgICAgICAgc2VsZi5pZHgg PSAwCj4gICAgICAgICAgZGVmIHJ1bihzZWxmKToKPiAtICAgICAgICAgICAgbG9nZ2luZy5kZWJ1 ZygidGhfcmVjdiAlczogcnVuIiwgc2VsZi5nZXROYW1lKCkpCj4gKyAgICAgICAgICAgIGxvZ2dp bmcuZGVidWcoIlRoUmVjdiAlczogcnVuIiwgc2VsZi5nZXROYW1lKCkpCj4gICAgICAgICAgICAg IHdoaWxlIG5vdCBzZWxmLmV4aXRldmVudC5pc1NldCgpOgo+ICAgICAgICAgICAgICAgICAgIyBU T0RPOiBXb3JrYXJvdW5kLCBpdCBkaWRuJ3Qgd29yayB3aXRoIHNlbGVjdCA6LS8KPiAgICAgICAg ICAgICAgICAgIHRyeToKPiBAQCAtMTQyLDEwICszMzAsMTAgQEAgZGVmIHJ1bl92aXJ0aW9fY29u c29sZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0 LnRpbWVvdXQ6Cj4gICAgICAgICAgICAgICAgICAgICAgcGFzcwo+ICAgICAgICAgICAgICBzZWxm LnBvcnQuc2V0dGltZW91dChzZWxmLl9wb3J0X3RpbWVvdXQpCj4gLSAgICAgICAgICAgIGxvZ2dp bmcuZGVidWcoInRoX3JlY3YgJXM6IGV4aXQoJWQpIiwgc2VsZi5nZXROYW1lKCksIHNlbGYuaWR4 KQo+ICsgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJUaFJlY3YgJXM6IGV4aXQoJWQpIiwgc2Vs Zi5nZXROYW1lKCksIHNlbGYuaWR4KQo+ICAKPiAKPiAtICAgIGNsYXNzIHRoX3JlY3ZfY2hlY2so VGhyZWFkKToKPiArICAgIGNsYXNzIFRoUmVjdkNoZWNrKFRocmVhZCk6Cj4gICAgICAgICAgIiIi Cj4gICAgICAgICAgUmFuZG9tIGRhdGEgcmVjZWl2ZXIvY2hlY2tlciB0aHJlYWQuCj4gICAgICAg ICAgIiIiCj4gQEAgLTE2NSwxMCArMzUzLDEwIEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVz dCwgcGFyYW1zLCBlbnYpOgo+ICAKPiAKPiAgICAgICAgICBkZWYgcnVuKHNlbGYpOgo+IC0gICAg ICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9yZWN2X2NoZWNrICVzOiBydW4iLCBzZWxmLmdldE5h bWUoKSkKPiArICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVGhSZWN2Q2hlY2sgJXM6IHJ1biIs IHNlbGYuZ2V0TmFtZSgpKQo+ICAgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5leGl0ZXZlbnQu aXNTZXQoKToKPiAgICAgICAgICAgICAgICAgIHJldCA9IHNlbGVjdC5zZWxlY3QoW3NlbGYucG9y dF0sIFtdLCBbXSwgMS4wKQo+IC0gICAgICAgICAgICAgICAgaWYgcmV0IGFuZCAobm90IHNlbGYu ZXhpdGV2ZW50LmlzU2V0KCkpOgo+ICsgICAgICAgICAgICAgICAgaWYgcmV0WzBdIGFuZCAobm90 IHNlbGYuZXhpdGV2ZW50LmlzU2V0KCkpOgo+ICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IHNl bGYucG9ydC5yZWN2KHNlbGYuYmxvY2tsZW4pCj4gICAgICAgICAgICAgICAgICAgICAgaWYgYnVm Ogo+ICAgICAgICAgICAgICAgICAgICAgICAgICAjIENvbXBhcmUgdGhlIHJlY3ZkIGRhdGEgd2l0 aCB0aGUgY29udHJvbCBkYXRhCj4gQEAgLTE4NiwxNTYgKzM3NCwxMyBAQCBkZWYgcnVuX3ZpcnRp b19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgYnVmIGluIHNlbGYuYnVmZmVyOgo+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaF8gKz0gYnVmCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG9nZ2luZy5lcnJvcigiUXVldWUgPSAlcyIsIHJlcHIoY2hfKSkKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgidGhfcmVjdl9jaGVjazog aW5jb3JyZWN0ICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJv ci5UZXN0RmFpbCgiVGhSZWN2Q2hlY2s6IGluY29ycmVjdCAiCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGEiKQo+ICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmlkeCArPSBsZW4oYnVmKQo+IC0gICAgICAgICAgICBsb2dnaW5n LmRlYnVnKCJ0aF9yZWN2X2NoZWNrICVzOiBleGl0KCVkKSIsIHNlbGYuZ2V0TmFtZSgpLAo+ICsg ICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJUaFJlY3ZDaGVjayAlczogZXhpdCglZCkiLCBzZWxm LmdldE5hbWUoKSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlkeCkKPiAgCj4g Cj4gLSAgICBjbGFzcyBjcHVfbG9hZCgpOgo+IC0gICAgICAgICIiIgo+IC0gICAgICAgIEdldCBh dmVyYWdlIGNwdSBsb2FkIGJldHdlZW4gc3RhcnQgYW5kIGdldF9sb2FkLgo+IC0gICAgICAgICIi Igo+IC0gICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZik6Cj4gLSAgICAgICAgICAgIHNlbGYub2xk X2xvYWQgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0KPiAtICAgICAgICAgICAgc2Vs Zi5zdGFydFRpbWUgPSAwCj4gLSAgICAgICAgICAgIHNlbGYuZW5kVGltZSA9IDAKPiAtCj4gLQo+ IC0gICAgICAgIGRlZiBfZ2V0X2NwdV9sb2FkKHNlbGYpOgo+IC0gICAgICAgICAgICAjIExldCdz IHNlZSBpZiB3ZSBjYW4gY2FsYyBzeXN0ZW0gbG9hZC4KPiAtICAgICAgICAgICAgdHJ5Ogo+IC0g ICAgICAgICAgICAgICAgZiA9IG9wZW4oIi9wcm9jL3N0YXQiLCAiciIpCj4gLSAgICAgICAgICAg ICAgICB0bXAgPSBmLnJlYWRsaW5lcygyMDApCj4gLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkK PiAtICAgICAgICAgICAgZXhjZXB0Ogo+IC0gICAgICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNh bCgiRXJyb3IgcmVhZGluZyAvcHJvYy9zdGF0IikKPiAtICAgICAgICAgICAgICAgIGVycm9yLlRl c3RGYWlsKCJhdmVyYWdlX2NwdV9sb2FkOiBFcnJvciByZWFkaW5nIC9wcm9jL3N0YXQiKQo+IC0K PiAtICAgICAgICAgICAgIyAyMDAgYnl0ZXMgc2hvdWxkIGJlIGVub3VnaCBiZWNhdXNlIHRoZSBp bmZvcm1hdGlvbiB3ZSBuZWVkCj4gLSAgICAgICAgICAgICMgaXMgdHlwaWNhbGx5IHN0b3JlZCBp biB0aGUgZmlyc3QgbGluZQo+IC0gICAgICAgICAgICAjIEluZm8gYWJvdXQgaW5kaXZpZHVhbCBw cm9jZXNzb3JzIChub3QgeWV0IHN1cHBvcnRlZCkgaXMgaW4KPiAtICAgICAgICAgICAgIyB0aGUg c2Vjb25kICh0aGlyZCwgLi4uPykgbGluZQo+IC0gICAgICAgICAgICBmb3IgbGluZSBpbiB0bXA6 Cj4gLSAgICAgICAgICAgICAgICBpZiBsaW5lWzA6NF0gPT0gImNwdSAiOgo+IC0gICAgICAgICAg ICAgICAgICAgIHJlZyA9IHJlLmNvbXBpbGUoJ1swLTldKycpCj4gLSAgICAgICAgICAgICAgICAg ICAgbG9hZF92YWx1ZXMgPSByZWcuZmluZGFsbChsaW5lKQo+IC0gICAgICAgICAgICAgICAgICAg ICMgZXh0cmFjdCB2YWx1ZXMgZnJvbSAvcHJvYy9zdGF0Cj4gLSAgICAgICAgICAgICAgICAgICAg bG9hZCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXQo+IC0gICAgICAgICAgICAgICAg ICAgIGZvciBpIGluIHJhbmdlKDgpOgo+IC0gICAgICAgICAgICAgICAgICAgICAgICBsb2FkW2ld ID0gaW50KGxvYWRfdmFsdWVzW2ldKSAtIHNlbGYub2xkX2xvYWRbaV0KPiAtCj4gLSAgICAgICAg ICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoOCk6Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg IHNlbGYub2xkX2xvYWRbaV0gPSBpbnQobG9hZF92YWx1ZXNbaV0pCj4gLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGxvYWQKPiAtCj4gLQo+IC0gICAgICAgIGRlZiBzdGFydCAoc2VsZik6Cj4g LSAgICAgICAgICAgICIiIgo+IC0gICAgICAgICAgICBTdGFydCBDUFUgdXNhZ2UgbWVhc3VyZW1l bnQKPiAtICAgICAgICAgICAgIiIiCj4gLSAgICAgICAgICAgIHNlbGYub2xkX2xvYWQgPSBbMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0KPiAtICAgICAgICAgICAgc2VsZi5zdGFydFRpbWUg PSB0aW1lLnRpbWUoKQo+IC0gICAgICAgICAgICBzZWxmLl9nZXRfY3B1X2xvYWQoKQo+IC0KPiAt Cj4gLSAgICAgICAgZGVmIGdldF9sb2FkKHNlbGYpOgo+IC0gICAgICAgICAgICAiIiIKPiAtICAg ICAgICAgICAgR2V0IGFuZCByZXNldCBDUFUgdXNhZ2UKPiAtCj4gLSAgICAgICAgICAgIEByZXR1 cm46IHJldHVybiBncm91cCBjcHUgKHVzZXJbJV0sIHN5c3RlbVslXSwgc3VtWyVdLCB0ZXN0VGlt ZVtzXSkKPiAtICAgICAgICAgICAgIiIiCj4gLSAgICAgICAgICAgIHNlbGYuZW5kVGltZSA9IHRp bWUudGltZSgpCj4gLSAgICAgICAgICAgIHRlc3RUaW1lID0gc2VsZi5lbmRUaW1lIC0gc2VsZi5z dGFydFRpbWUKPiAtICAgICAgICAgICAgbG9hZCA9IHNlbGYuX2dldF9jcHVfbG9hZCgpCj4gLQo+ IC0gICAgICAgICAgICB1c2VyID0gbG9hZFswXSAvIHRlc3RUaW1lCj4gLSAgICAgICAgICAgIHN5 c3RlbSA9IGxvYWRbMl0gLyB0ZXN0VGltZQo+IC0gICAgICAgICAgICBzdW0gPSB1c2VyICsgc3lz dGVtCj4gLQo+IC0gICAgICAgICAgICByZXR1cm4gKHVzZXIsIHN5c3RlbSwgc3VtLCB0ZXN0VGlt ZSkKPiAtCj4gLQo+IC0gICAgY2xhc3MgcGlkX2xvYWQoKToKPiAtICAgICAgICAiIiIKPiAtICAg ICAgICBHZXQgYXZlcmFnZSBwcm9jZXNzIGNwdSBsb2FkIGJldHdlZW4gc3RhcnQgYW5kIGdldF9s b2FkCj4gLSAgICAgICAgIiIiCj4gLSAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCBwaWQsIG5h bWUpOgo+IC0gICAgICAgICAgICBzZWxmLm9sZF9sb2FkID0gWzAsIDBdCj4gLSAgICAgICAgICAg IHNlbGYuc3RhcnRUaW1lID0gMAo+IC0gICAgICAgICAgICBzZWxmLmVuZFRpbWUgPSAwCj4gLSAg ICAgICAgICAgIHNlbGYucGlkID0gcGlkCj4gLSAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUK PiAtCj4gLQo+IC0gICAgICAgIGRlZiBfZ2V0X2NwdV9sb2FkKHNlbGYsIHBpZCk6Cj4gLSAgICAg ICAgICAgICMgTGV0J3Mgc2VlIGlmIHdlIGNhbiBjYWxjIHN5c3RlbSBsb2FkLgo+IC0gICAgICAg ICAgICB0cnk6Cj4gLSAgICAgICAgICAgICAgICBmID0gb3BlbigiL3Byb2MvJWQvc3RhdCIgJSAo cGlkKSwgInIiKQo+IC0gICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQo+IC0gICAg ICAgICAgICAgICAgZi5jbG9zZSgpCj4gLSAgICAgICAgICAgIGV4Y2VwdDoKPiAtICAgICAgICAg ICAgICAgIGxvZ2dpbmcuY3JpdGljYWwoIkVycm9yIHJlYWRpbmcgL3Byb2MvJWQvc3RhdCIsIHBp ZCkKPiAtICAgICAgICAgICAgICAgIGVycm9yLlRlc3RGYWlsKCJhdmVyYWdlX3Byb2Nlc3NfY3B1 X2xvYWQ6IEVycm9yIHJlYWRpbmcgIgo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ii9wcm9jL3N0YXQiKQo+IC0gICAgICAgICAgICBlbHNlOgo+IC0gICAgICAgICAgICAgICAgcmVn ID0gcmUuY29tcGlsZSgnWzAtOV0rJykKPiAtICAgICAgICAgICAgICAgIGxvYWRfdmFsdWVzID0g cmVnLmZpbmRhbGwobGluZSkKPiAtICAgICAgICAgICAgICAgIGRlbCBsb2FkX3ZhbHVlc1swOjEx XQo+IC0gICAgICAgICAgICAgICAgIyBleHRyYWN0IHZhbHVlcyBmcm9tIC9wcm9jL3N0YXQKPiAt ICAgICAgICAgICAgICAgIGxvYWQgPSBbMCwgMF0KPiAtICAgICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKDIpOgo+IC0gICAgICAgICAgICAgICAgICAgIGxvYWRbaV0gPSBpbnQobG9hZF92YWx1 ZXNbaV0pIC0gc2VsZi5vbGRfbG9hZFtpXQo+IC0KPiAtICAgICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKDIpOgo+IC0gICAgICAgICAgICAgICAgICAgIHNlbGYub2xkX2xvYWRbaV0gPSBpbnQo bG9hZF92YWx1ZXNbaV0pCj4gLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZAo+IC0KPiAtCj4g LSAgICAgICAgZGVmIHN0YXJ0IChzZWxmKToKPiAtICAgICAgICAgICAgIiIiCj4gLSAgICAgICAg ICAgIFN0YXJ0IENQVSB1c2FnZSBtZWFzdXJlbWVudAo+IC0gICAgICAgICAgICAiIiIKPiAtICAg ICAgICAgICAgc2VsZi5vbGRfbG9hZCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXQo+ IC0gICAgICAgICAgICBzZWxmLnN0YXJ0VGltZSA9IHRpbWUudGltZSgpCj4gLSAgICAgICAgICAg IHNlbGYuX2dldF9jcHVfbG9hZChzZWxmLnBpZCkKPiAtCj4gLQo+IC0gICAgICAgIGRlZiBnZXRf bG9hZChzZWxmKToKPiAtICAgICAgICAgICAgIiIiCj4gLSAgICAgICAgICAgIEdldCBhbmQgcmVz ZXQgQ1BVIHVzYWdlLgo+IC0KPiAtICAgICAgICAgICAgQHJldHVybjogR3JvdXAgY3B1Cj4gLSAg ICAgICAgICAgICAgICAgICAgKHBpZCwgdXNlclslXSwgc3lzdGVtWyVdLCBzdW1bJV0sIHRlc3RU aW1lW3NdKQo+IC0gICAgICAgICAgICAiIiIKPiAtICAgICAgICAgICAgc2VsZi5lbmRUaW1lID0g dGltZS50aW1lKCkKPiAtICAgICAgICAgICAgdGVzdFRpbWUgPSBzZWxmLmVuZFRpbWUgLSBzZWxm LnN0YXJ0VGltZQo+IC0gICAgICAgICAgICBsb2FkID0gc2VsZi5fZ2V0X2NwdV9sb2FkKHNlbGYu cGlkKQo+IC0KPiAtICAgICAgICAgICAgdXNlciA9IGxvYWRbMF0gLyB0ZXN0VGltZQo+IC0gICAg ICAgICAgICBzeXN0ZW0gPSBsb2FkWzFdIC8gdGVzdFRpbWUKPiAtICAgICAgICAgICAgc3VtID0g dXNlciArIHN5c3RlbQo+IC0KPiAtICAgICAgICAgICAgcmV0dXJuIChzZWxmLm5hbWUsIHNlbGYu cGlkLCB1c2VyLCBzeXN0ZW0sIHN1bSwgdGVzdFRpbWUpCj4gLQo+IC0KPiAtICAgIGRlZiBwcmlu dF9sb2FkKHByb2Nlc3MsIHN5c3RlbSk6Cj4gLSAgICAgICAgIiIiCj4gLSAgICAgICAgUHJpbnQg bG9hZCBpbiB0YWJ1bGFyIG1vZGUuCj4gLQo+IC0gICAgICAgIEBwYXJhbSBwcm9jZXNzOiBMaXN0 IG9mIHByb2Nlc3Mgc3RhdGlzdGljIHR1cGxlcy4KPiAtICAgICAgICBAcGFyYW0gc3lzdGVtOiBU dXBsZSBvZiBzeXN0ZW0gY3B1IHVzYWdlLgo+IC0gICAgICAgICIiIgo+IC0KPiAtICAgICAgICBs b2dnaW5nLmluZm8oIiUtMTBzICU2cyAlNXMgJTVzICU1cyAlMTFzIiwKPiAtICAgICAgICAgICAg ICAgICAgICAgIk5BTUUiLCAiUElEIiwgIlVTRVIiLCAiU1lTIiwgIlNVTSIsICJUSU1FIikKPiAt ICAgICAgICBmb3IgcHIgaW4gcHJvY2VzczoKPiAtICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCIl LTEwcyAlNmQgJTQuMGYlJSAlNC4wZiUlICU0LjBmJSUgJTEwLjNmcyIgJSBwcikKPiAtICAgICAg ICBsb2dnaW5nLmluZm8oIlRPVEFMOiAgICAgLS0tLS0tICU0LjBmJSUgJTQuMGYlJSAlNC4wZiUl ICUxMC4zZnMiICUKPiAtICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKQo+IC0KPiAtCj4gICAg ICBkZWYgcHJvY2Vzc19zdGF0cyhzdGF0cywgc2NhbGU9MS4wKToKPiAgICAgICAgICAiIiIKPiAg ICAgICAgICBQcm9jZXNzIGFuZCBwcmludCB0aGUgc3RhdGlzdGljLgo+IEBAIC0zNTIsNyArMzk3 LDcgQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gICAgICAg ICAgcmV0dXJuIHN0YXRzCj4gIAo+IAo+IC0gICAgZGVmIGluaXRfZ3Vlc3Qodm0sIHRpbWVvdXQ9 Mik6Cj4gKyAgICBkZWYgX2luaXRfZ3Vlc3Qodm0sIHRpbWVvdXQ9Mik6Cj4gICAgICAgICAgIiIi Cj4gICAgICAgICAgRXhlY3V0ZSB2aXJ0aW9fZ3Vlc3QucHkgb24gZ3Vlc3QsIHdhaXQgdW50aWwg aXQgaXMgaW5pdGlhbGl6ZWQuCj4gIAo+IEBAIC0zODQsNiArNDI5LDIxIEBAIGRlZiBydW5fdmly dGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAgICAgICAgIHRpbWUuc2xlZXAoMikK PiAgCj4gCj4gKyAgICBkZWYgaW5pdF9ndWVzdCh2bSwgY29uc29sZXMpOgo+ICsgICAgICAgICIi Igo+ICsgICAgICAgIFByZXBhcmVzIGd1ZXN0LCBleGVjdXRlcyB2aXJ0aW9fZ3Vlc3QucHkgYW5k IGluaXRpYWxpemUgZm9yIHRlc3RpbmcKPiArCj4gKyAgICAgICAgQHBhcmFtIHZtOiBJbmZvcm1h dGlvbnMgYWJvdXQgdGhlIGd1ZXN0Lgo+ICsgICAgICAgIEBwYXJhbSBjb25zb2xlczogSW5mb3Jt YXRpb25zIGFib3V0IGNvbnNvbGVzCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgY29uc3MgPSBb XQo+ICsgICAgICAgIGZvciBtb2RlIGluIGNvbnNvbGVzOgo+ICsgICAgICAgICAgICBmb3IgY29u cyBpbiBtb2RlOgo+ICsgICAgICAgICAgICAgICAgY29uc3MuYXBwZW5kKGNvbnMuZm9yX2d1ZXN0 KCkpCj4gKyAgICAgICAgX2luaXRfZ3Vlc3Qodm0sIDEwKQo+ICsgICAgICAgIG9uX2d1ZXN0KCJ2 aXJ0LmluaXQoJXMpIiAlIChjb25zcyksIHZtLCAxMCkKPiArCj4gKwo+ICAgICAgZGVmIF9vbl9n dWVzdChjb21tYW5kLCB2bSwgdGltZW91dD0yKToKPiAgICAgICAgICAiIiIKPiAgICAgICAgICBF eGVjdXRlIGdpdmVuIGNvbW1hbmQgaW5zaWRlIHRoZSBzY3JpcHQncyBtYWluIGxvb3AsIGluZGlj YXRpbmcgdGhlIHZtCj4gQEAgLTQyNSwyOSArNDg1LDYgQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29s ZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gICAgICAgICAgcmV0dXJuIChtYXRjaCwgZGF0YSkKPiAg Cj4gCj4gLSAgICBkZWYgc29ja2V0X3JlYWRhbGwoc29jaywgcmVhZF90aW1lb3V0LCBtZXNhZ2Vz aXplKToKPiAtICAgICAgICAiIiIKPiAtICAgICAgICBSZWFkIGV2ZXJ5dGhpbmcgZnJvbSB0aGUg c29ja2V0Lgo+IC0KPiAtICAgICAgICBAcGFyYW0gc29jazogU29ja2V0Lgo+IC0gICAgICAgIEBw YXJhbSByZWFkX3RpbWVvdXQ6IFJlYWQgdGltZW91dC4KPiAtICAgICAgICBAcGFyYW0gbWVzYWdl c2l6ZTogU2l6ZSBvZiBtZXNzYWdlLgo+IC0gICAgICAgICIiIgo+IC0gICAgICAgIHNvY2tfZGVj cmlwdG9yID0gc29jay5maWxlbm8oKQo+IC0gICAgICAgIHNvY2suc2V0dGltZW91dChyZWFkX3Rp bWVvdXQpCj4gLSAgICAgICAgbWVzc2FnZSA9ICIiCj4gLSAgICAgICAgdHJ5Ogo+IC0gICAgICAg ICAgICB3aGlsZSAobGVuKG1lc3NhZ2UpIDwgbWVzYWdlc2l6ZSk6Cj4gLSAgICAgICAgICAgICAg ICBtZXNzYWdlICs9IHNvY2sucmVjdihtZXNhZ2VzaXplKQo+IC0gICAgICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgaW5zdDoKPiAtICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXSA9PSAidGltZWQg b3V0Iik6Cj4gLSAgICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJSZWFkaW5nIHRpbWVvdXQi KQo+IC0gICAgICAgICAgICBlbHNlOgo+IC0gICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1Zyhp bnN0KQo+IC0gICAgICAgIHNvY2suc2V0YmxvY2tpbmcoMSkKPiAtICAgICAgICByZXR1cm4gbWVz c2FnZQo+IC0KPiAtCj4gICAgICBkZWYgX2d1ZXN0X2V4aXRfdGhyZWFkcyh2bSwgc2VuZF9wdHMs IHJlY3ZfcHRzKToKPiAgICAgICAgICAiIiIKPiAgICAgICAgICBTYWZlbHkgZXhlY3V0ZXMgb25f Z3Vlc3QoInZpcnQuZXhpdF90aHJlYWRzKCkiKSB1c2luZyB3b3JrYXJvdW5kIG9mCj4gQEAgLTQ2 Myw3ICs1MDAsNyBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToK PiAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiV29ya2Fyb3VuZCB0aGUgc3R1Y2sgdGhyZWFk IG9uIGd1ZXN0IikKPiAgICAgICAgICAgICAgIyBUaHJlYWQgaXMgc3R1Y2tlZCBpbiByZWFkL3dy aXRlCj4gICAgICAgICAgICAgIGZvciBzZW5kX3B0IGluIHNlbmRfcHRzOgo+IC0gICAgICAgICAg ICAgICAgc2VuZF9wdFswXS5zZW5kYWxsKCIuIikKPiArICAgICAgICAgICAgICAgIHNlbmRfcHQu c29jay5zZW5kYWxsKCIuIikKPiAgICAgICAgICBlbGlmIG1hdGNoICE9IDA6Cj4gICAgICAgICAg ICAgICMgU29tZXRoaW5nIGVsc2UKPiAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwo IlVuZXhwZWN0ZWQgZmFpbFxuTWF0Y2g6ICVzXG5EYXRhOlxuJXMiCj4gQEAgLTQ3MSw4ICs1MDgs OCBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiAgCj4gICAg ICAgICAgIyBSZWFkLW91dCBhbGwgcmVtYWluaW5nIGRhdGEKPiAgICAgICAgICBmb3IgcmVjdl9w dCBpbiByZWN2X3B0czoKPiAtICAgICAgICAgICAgd2hpbGUgc2VsZWN0LnNlbGVjdChbcmVjdl9w dFswXV0sIFtdLCBbXSwgMC4xKVswXToKPiAtICAgICAgICAgICAgICAgIHJlY3ZfcHRbMF0ucmVj digxMDI0KQo+ICsgICAgICAgICAgICB3aGlsZSBzZWxlY3Quc2VsZWN0KFtyZWN2X3B0LnNvY2td LCBbXSwgW10sIDAuMSlbMF06Cj4gKyAgICAgICAgICAgICAgICByZWN2X3B0LnNvY2sucmVjdigx MDI0KQo+ICAKPiAgICAgICAgICAjIFRoaXMgd2lsbCBjYXVzZSBmYWlsIGluIGNhc2UgYW55dGhp bmcgd2VudCB3cm9uZy4KPiAgICAgICAgICBvbl9ndWVzdCgicHJpbnQgJ1BBU1M6IG5vdGhpbmcn Iiwgdm0sIDEwKQo+IEBAIC00ODIsNiArNTE5LDEzIEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUo dGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAgICAgICAgICIiIgo+ICAgICAgICAgIENyZWF0ZXMgdGhl IFZNIGFuZCBjb25uZWN0cyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjb25zb2xlcyBhbmQgc2Vy aWFsCj4gICAgICAgICAgcG9ydHMuCj4gKyAgICAgICAgUG9ydHMgYXJlIGFsbG9jYXRlZCBieSAy IHBlciAxIHZpcnRpby1zZXJpYWwtcGNpIGRldmljZSBzdGFydGluZyB3aXRoCj4gKyAgICAgICAg Y29uc29sZS4gKDMrMiA9PiBDQ3xDU3xTOyAwKzIgPT4gU1M7IDMrNCA9PiBDQ3xDU3xTU3xTLCAu Li4pIFRoaXMgd2F5Cj4gKyAgICAgICAgaXQncyBlYXN5IHRvIHRlc3QgY29tbXVuaWNhdGlvbiBv biB0aGUgc2FtZSBvciBkaWZmZXJlbnQKPiArICAgICAgICB2aXJ0aW8tc2VyaWFsLXBjaSBkZXZp Y2UuCj4gKyAgICAgICAgRnVydGhlciBpbiB0ZXN0cyB0aGUgY29uc29sZXMgYXJlIGJlaW5nIHBp Y2tlZCBhbHdheXMgZnJvbSB0aGUgZmlyc3QKPiArICAgICAgICBhdmFpbGFibGUgb25lICgzKzI6 IDJ4QyA9PiBDQ3xjc3xzIDxjb21tdW5pY2F0aW9uIG9uIHRoZSBzYW1lIFBDST47Cj4gKyAgICAg ICAgMnhDLDF4UyA9PiBDQ3xjU3xzIDxjb21tdW5pY2F0aW9uIGJldHdlZW4gMiBQQ0kgZGV2cykK PiAgCj4gICAgICAgICAgQHBhcmFtIG5vX2NvbnNvbGU6IE51bWJlciBvZiBkZXNpcmVkIHZpcnRj b25zb2xlcy4KPiAgICAgICAgICBAcGFyYW0gbm9fc2VyaWFscG9ydDogTnVtYmVyIG9mIGRlc2ly ZWQgdmlydHNlcmlhbHBvcnRzLgo+IEBAIC01MDgsMTIgKzU1MiwxMCBAQCBkZWYgcnVuX3ZpcnRp b19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiAgICAgICAgICAgICAgcGFyYW1zWydleHRy YV9wYXJhbXMnXSArPSAoIiAtZGV2aWNlIHZpcnRzZXJpYWxwb3J0LGNoYXJkZXY9dnMlZCwiCj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lPXNlcmlhbHBvcnQt JWQsaWQ9cCVkIiAlIChpLCBpLCBpKSkKPiAgCj4gLQo+ICAgICAgICAgIGxvZ2dpbmcuZGVidWco IkJvb3RpbmcgZmlyc3QgZ3Vlc3QgJXMiLCBwYXJhbXMuZ2V0KCJtYWluX3ZtIikpCj4gICAgICAg ICAga3ZtX3ByZXByb2Nlc3NpbmcucHJlcHJvY2Vzc192bSh0ZXN0LCBwYXJhbXMsIGVudiwKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5nZXQoIm1haW5f dm0iKSkKPiAgCj4gLQo+ICAgICAgICAgIHZtID0ga3ZtX3V0aWxzLmVudl9nZXRfdm0oZW52LCBw YXJhbXMuZ2V0KCJtYWluX3ZtIikpCj4gIAo+ICAgICAgICAgIHNlc3Npb24gPSBrdm1fdGVzdF91 dGlscy53YWl0X2Zvcl9sb2dpbih2bSwgMCwKPiBAQCAtNTIyLDMwICs1NjQsMjE5IEBAIGRlZiBy dW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAKPiAgICAgICAgICAjIGNv bm5lY3QgdGhlIHNvY2tldHMKPiAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBub19jb25zb2xl KToKPiAtICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNv Y2tldC5TT0NLX1NUUkVBTSkKPiAtICAgICAgICAgICAgc29jay5jb25uZWN0KCIlcy8lZCIgJSAo dG1wX2RpciwgaSkpCj4gLSAgICAgICAgICAgIGNvbnNvbGVzLmFwcGVuZChbc29jaywgImNvbnNv bGUtJWQiICUgaSwgInllcyJdKQo+ICsgICAgICAgICAgICBjb25zb2xlcy5hcHBlbmQoUG9ydChO b25lICwiY29uc29sZS0lZCIgJSBpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAieWVzIiwgIiVzLyVkIiAlICh0bXBfZGlyLCBpKSkpCj4gICAgICAgICAgZm9yIGkgaW4gcmFu Z2Uobm9fY29uc29sZSwgbm9fY29uc29sZSArIG5vX3NlcmlhbHBvcnQpOgo+IC0gICAgICAgICAg ICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFN KQo+IC0gICAgICAgICAgICBzb2NrLmNvbm5lY3QoIiVzLyVkIiAlICh0bXBfZGlyLCBpKSkKPiAt ICAgICAgICAgICAgc2VyaWFscG9ydHMuYXBwZW5kKFtzb2NrLCAic2VyaWFscG9ydC0lZCIgJSBp LCAibm8iXSkKPiArICAgICAgICAgICAgc2VyaWFscG9ydHMuYXBwZW5kKFBvcnQoTm9uZSAsInNl cmlhbHBvcnQtJWQiICUgaSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Im5vIiwgIiVzLyVkIiAlICh0bXBfZGlyLCBpKSkpCj4gIAo+ICAgICAgICAgIHJldHVybiBbdm0s IHNlc3Npb24sIHRtcF9kaXJdLCBbY29uc29sZXMsIHNlcmlhbHBvcnRzXQo+ICAKPiAKPiAtICAg IGRlZiB0ZXN0X3Ntb2tlKHZtLCBjb25zb2xlcywgcGFyYW1zKToKPiArICAgIGRlZiB0b3Blbih2 bSwgcG9ydCk6Cj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgT3BlbiB2aXJ0aW9jb25zb2xlIHBv cnQuCj4gKwo+ICsgICAgICAgIEBwYXJhbSB2bTogVGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0s IHNlc3Npb24sIHRtcF9kaXJdLgo+ICsgICAgICAgIEBwYXJhbSBwb3J0OiBQb3J0IGlkZW50aWZp ZXIuCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgb25fZ3Vlc3QoInZpcnQub3BlbignJXMnKSIg JSAocG9ydC5uYW1lKSwgdm0sIDIpCj4gKyAgICAgICAgcG9ydC5vcGVuKCkKPiArCj4gKwo+ICsg ICAgZGVmIHRtdWx0aV9vcGVuKHZtLCBwb3J0KToKPiArICAgICAgICAiIiIKPiArICAgICAgICBN dWx0aW9wZW4gdmlydGlvY29uc29sZSBwb3J0Lgo+ICsKPiArICAgICAgICBAcGFyYW0gdm06IFRh cmdldCB2aXJ0dWFsIG1hY2hpbmUgW3ZtLCBzZXNzaW9uLCB0bXBfZGlyXS4KPiArICAgICAgICBA cGFyYW0gcG9ydDogUG9ydCBpZGVudGlmaWVyLgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIG9u X2d1ZXN0KCJ2aXJ0LmNsb3NlKCclcycpIiAlIChwb3J0Lm5hbWUpLCB2bSwgMikKPiArICAgICAg ICBvbl9ndWVzdCgidmlydC5vcGVuKCclcycpIiAlIChwb3J0Lm5hbWUpLCB2bSwgMikKPiArICAg ICAgICBtYXRjaCA9IF9vbl9ndWVzdCgidmlydC5vcGVuKCclcycpIiAlIChwb3J0Lm5hbWUpLCB2 bSwgMilbMF0KPiArICAgICAgICAjIENvbnNvbGUgaXMgcGVybWl0dGVkIHRvIG9wZW4gdGhlIGRl dmljZSBtdWx0aXBsZSB0aW1lcwo+ICsgICAgICAgIGlmIG1hdGNoICE9IDAgYW5kIHBvcnQucG9y dF90eXBlID09ICJ5ZXMiOgo+ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiVW5l eHBlY3RlZCBmYWlsIG9mIG9wZW5uaW5nIHRoZSBjb25zb2xlIgo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiIGRldmljZSBmb3IgdGhlIDJuZCB0aW1lLiIpCj4gKyAgICAgICAg IyBTZXJpYWwgcG9ydCBpcyBmb3JiaWRkZW4gdG8gb3BlbiB0aGUgZGV2aWNlIG11bHRpcGxlIHRp bWVzCj4gKyAgICAgICAgZWxpZiBtYXRjaCAhPSAxIGFuZCBwb3J0LnBvcnRfdHlwZSA9PSAibm8i Ogo+ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiVW5leHBldGRlZCBwYXNzIG9m IG9wcGVuaW5nIHRoZSBzZXJpYWxwb3J0Igo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiIGRldmljZSBmb3IgdGhlIDJuZCB0aW1lLiIpCj4gKyAgICAgICAgcG9ydC5vcGVuKCkK PiArCj4gKyAgICBkZWYgdGNsb3NlKHZtLCBwb3J0KToKPiArICAgICAgICAiIiIKPiArICAgICAg ICBDbG9zZSBzb2NrZXQuCj4gKwo+ICsgICAgICAgIEBwYXJhbSB2bTogVGFyZ2V0IHZpcnR1YWwg bWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ICsgICAgICAgIEBwYXJhbSBwb3J0OiBQ b3J0IHRvIG9wZW4uCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgb25fZ3Vlc3QoInZpcnQuY2xv c2UoJyVzJykiICUgKHBvcnQubmFtZSksIHZtLCAyKQo+ICsgICAgICAgIHBvcnQuY2xvc2UoKQo+ ICsKPiArCj4gKyAgICBkZWYgdHBvb2xpbmcodm0sIHBvcnQpOgo+ICsgICAgICAgICIiIgo+ICsg ICAgICAgIFRlc3QgdHJ5IHBvb2xpbmcgZnVuY3Rpb24uCj4gKwo+ICsgICAgICAgIEBwYXJhbSB2 bTogVGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ICsgICAg ICAgIEBwYXJhbSBwb3J0OiBQb3J0IHVzZWQgaW4gdGVzdC4KPiArICAgICAgICAiIiIKPiArICAg ICAgICAjIFBvbGwgKE9VVCkKPiArICAgICAgICBvbl9ndWVzdCgidmlydC5wb2xsKCclcycsICVz KSIgJSAocG9ydC5uYW1lLCBzZWxlY3QuUE9MTE9VVCksIHZtLAo+ICsgICAgICAgICAgICAgICAg IDIpCj4gKwo+ICsgICAgICAgICMgUG9sbCAoSU4sIE9VVCkKPiArICAgICAgICBwb3J0LnNvY2su c2VuZGFsbCgidGVzdCIpCj4gKyAgICAgICAgZm9yIHRlc3QgaW4gW3NlbGVjdC5QT0xMSU4sIHNl bGVjdC5QT0xMT1VUXToKPiArICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQucG9sbCgnJXMnLCAl cykiICUgKHBvcnQubmFtZSwgdGVzdCksIHZtLCAyKQo+ICsKPiArICAgICAgICAjIFBvbGwgKElO IEhVUCkKPiArICAgICAgICAjIEkgc3RvcmUgdGhlIHNvY2tldCBpbmZvcm1hdGlvbnMgYW5kIGNs b3NlIHRoZSBzb2NrZXQKPiArICAgICAgICBwb3J0LmNsb3NlKCkKPiArICAgICAgICBmb3IgdGVz dCBpbiBbc2VsZWN0LlBPTExJTiwgc2VsZWN0LlBPTExIVVBdOgo+ICsgICAgICAgICAgICBvbl9n dWVzdCgidmlydC5wb2xsKCclcycsICVzKSIgJSAocG9ydC5uYW1lLCB0ZXN0KSwgdm0sIDIpCj4g Kwo+ICsgICAgICAgICMgUG9sbCAoSFVQKQo+ICsgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnJlY3Yo JyVzJywgNCwgMTAyNCwgRmFsc2UpIiAlIChwb3J0Lm5hbWUpLCB2bSwgMikKPiArICAgICAgICBv bl9ndWVzdCgidmlydC5wb2xsKCclcycsICVzKSIgJSAocG9ydC5uYW1lLCBzZWxlY3QuUE9MTEhV UCksIHZtLAo+ICsgICAgICAgICAgICAgICAgIDIpCj4gKwo+ICsgICAgICAgICMgUmVjb25uZWN0 IHRoZSBzb2NrZXQKPiArICAgICAgICBwb3J0Lm9wZW4oKQo+ICsgICAgICAgICMgUmVkZWZpbmUg c29ja2V0IGluIGNvbnNvbGVzCj4gKyAgICAgICAgb25fZ3Vlc3QoInZpcnQucG9sbCgnJXMnLCAl cykiICUgKHBvcnQubmFtZSwgc2VsZWN0LlBPTExPVVQpLCB2bSwKPiArICAgICAgICAgICAgICAg ICAyKQo+ICsKPiArCj4gKyAgICBkZWYgdHJ3X2hvc3Rfb2ZmbGluZSh2bSwgcG9ydCk6Cj4gKyAg ICAgICAgIiIiCj4gKyAgICAgICAgR3Vlc3QgcmVhZC93cml0ZSBmcm9tIGhvc3Qgd2hlbiBob3N0 IGlzIGRpc2Nvbm5lY3RlZC4KPiArCj4gKyAgICAgICAgQHBhcmFtIHZtOiBUYXJnZXQgdmlydHVh bCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0uCj4gKyAgICAgICAgQHBhcmFtIHBvcnQ6 IFBvcnQgdXNlZCBpbiB0ZXN0Lgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgIGlmIHBvcnQuaXNf b3BlbjoKPiArICAgICAgICAgICAgcG9ydC5jbG9zZSgpCj4gKwo+ICsgICAgICAgICMgUmVhZCBz aG91bGQgcGFzcwo+ICsgICAgICAgICMgRklYTUU6IENvbnNvbGUgZG9lc24ndCBzdXBwb3J0IHBv bGxpbmcgKFBPTExIVVAgd2l0aG91dCBob3N0IHNob290cwo+ICsgICAgICAgICMgdGhlIGd1ZXN0 IE9TKQo+ICsgICAgICAgIGlmIHBvcnQucG9ydF90eXBlICE9ICJ5ZXMiOgo+ICsgICAgICAgICAg ICBvbl9ndWVzdCgidmlydC5yZWN2KCclcycsIDAsIDEwMjQsIEZhbHNlKSIgJSBwb3J0Lm5hbWUs IHZtLCAyKQo+ICsgICAgICAgIGVsc2U6ICMgU2tpcCB0aGlzIHRlc3Qgb24gdmlydGlvLWNvbnNv bGUgcG9ydAo+ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiVGhpcyB0ZXN0IGlz IHVuYWJsZSB0byBydW4gd2l0aCB2aXJ0aW8iCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgY29uc29sZS4gUGxlYXNlIHNlZSB0aGUgaW5fY29kZSBGSVhNRSIKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBub3RlIGZvciBtb3JlIGluZm8uXG4iCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTa2lwcGluZyB0aGlzIHJvdW5kLiIpCj4g KyAgICAgICAgIyBXcml0ZSBzaG91bGQgdGltZWQtb3V0Cj4gKyAgICAgICAgbWF0Y2gsIHRtcCA9 IF9vbl9ndWVzdCgidmlydC5zZW5kKCclcycsIDEwLCBGYWxzZSkiCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJSBwb3J0Lm5hbWUsIHZtLCAyKQo+ICsgICAgICAgIGlmIG1hdGNo ICE9IE5vbmU6Cj4gKyAgICAgICAgICAgIHJhaXNlIGVycm9yLlRlc3RGYWlsKCJXcml0ZSBvbiBn dWVzdCB3aGlsZSBob3N0IGRpc2Nvbm5lY3RlZCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJkaWRuJ3QgdGltZWQgb3V0LlxuT3V0cHV0OlxuJXMiCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICUgdG1wKQo+ICsKPiArICAgICAgICBwb3J0Lm9wZW4oKQo+ ICsKPiArICAgICAgICBpZiAocG9ydC5zb2NrLnJlY3YoMTAyNCkgPCAxMCk6Cj4gKyAgICAgICAg ICAgIHJhaXNlIGVycm9yLlRlc3RGYWlsKCJEaWRuJ3QgcmVjZWl2ZWQgZGF0YSBmcm9tIGd1ZXN0 IikKPiArICAgICAgICAjIE5vdyB0aGUgX29uX2d1ZXN0KCJ2aXJ0LnNlbmQoJyVzJy4uLiBjb21t YW5kIHNob3VsZCBiZSBmaW5pc2hlZAo+ICsgICAgICAgIG9uX2d1ZXN0KCJwcmludCAnUEFTUzog bm90aGluZyciLCB2bSwgMikKPiArCj4gKwo+ICsgICAgZGVmIHRyd19ibG9ja2luZ19tb2RlKHZt LCBwb3J0KToKPiArICAgICAgICAiIiIKPiArICAgICAgICBHdWVzdCByZWFkXHdyaXRlIGRhdGEg aW4gYmxvY2tpbmcgbW9kZS4KPiArCj4gKyAgICAgICAgQHBhcmFtIHZtOiBUYXJnZXQgdmlydHVh bCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0uCj4gKyAgICAgICAgQHBhcmFtIHBvcnQ6 IFBvcnQgdXNlZCBpbiB0ZXN0Lgo+ICsgICAgICAgICIiIgo+ICsgICAgICAgICMgQmxvY2tpbmcg bW9kZQo+ICsgICAgICAgIGlmIG5vdCBwb3J0LmlzX29wZW46Cj4gKyAgICAgICAgICAgIHBvcnQu b3BlbigpCj4gKyAgICAgICAgb25fZ3Vlc3QoInZpcnQuYmxvY2tpbmcoJyVzJywgVHJ1ZSkiICUg cG9ydC5uYW1lLCB2bSwgMikKPiArICAgICAgICAjIFJlY3Ygc2hvdWxkIHRpbWVkIG91dAo+ICsg ICAgICAgIG1hdGNoLCB0bXAgPSBfb25fZ3Vlc3QoInZpcnQucmVjdignJXMnLCAxMCwgMTAyNCwg RmFsc2UpIiAlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Lm5hbWUsIHZt LCAyKQo+ICsgICAgICAgIGlmIG1hdGNoID09IDA6Cj4gKyAgICAgICAgICAgIHJhaXNlIGVycm9y LlRlc3RGYWlsKCJSZWNlaXZlZCBkYXRhIGV2ZW4gd2hlbiBub24gd2VyZSBzZW50XG4iCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRhOlxuJXMiICUgdG1wKQo+ICsgICAg ICAgIGVsaWYgbWF0Y2ggIT0gTm9uZToKPiArICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZh aWwoIlVuZXhwZWN0ZWQgZmFpbFxuTWF0Y2g6ICVzXG5EYXRhOlxuJXMiICUKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoLCB0bXApKQo+ICsgICAgICAgIHBvcnQuc29j ay5zZW5kYWxsKCIxMjM0NTY3ODkwIikKPiArICAgICAgICAjIE5vdyBndWVzdCByZWNlaXZlZCB0 aGUgZGF0YSBlbmQgZXNjYXBlZCBmcm9tIHRoZSByZWN2KCkKPiArICAgICAgICBvbl9ndWVzdCgi cHJpbnQgJ1BBU1M6IG5vdGhpbmcnIiwgdm0sIDIpCj4gKwo+ICsKPiArICAgIGRlZiB0cndfbm9u YmxvY2tpbmdfbW9kZSh2bSwgcG9ydCk6Cj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgR3Vlc3Qg cmVhZFx3cml0ZSBkYXRhIGluIG5vbmJsb2NraW5nIG1vZGUuCj4gKwo+ICsgICAgICAgIEBwYXJh bSB2bTogVGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ICsg ICAgICAgIEBwYXJhbSBwb3J0OiBQb3J0IHVzZWQgaW4gdGVzdC4KPiArICAgICAgICAiIiIKPiAr ICAgICAgICAjIE5vbi1ibG9ja2luZyBtb2RlCj4gKyAgICAgICAgaWYgbm90IHBvcnQuaXNfb3Bl bjoKPiArICAgICAgICAgICAgcG9ydC5vcGVuKCkKPiArICAgICAgICBvbl9ndWVzdCgidmlydC5i bG9ja2luZygnJXMnLCBGYWxzZSkiICUgcG9ydC5uYW1lLCB2bSwgMikKPiArICAgICAgICAjIFJl Y3Ygc2hvdWxkIHJldHVybiBGQUlMIHdpdGggMCByZWNlaXZlZCBkYXRhCj4gKyAgICAgICAgbWF0 Y2gsIHRtcCA9IF9vbl9ndWVzdCgidmlydC5yZWN2KCclcycsIDEwLCAxMDI0LCBGYWxzZSkiICUK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5uYW1lLCB2bSwgMikKPiArICAg ICAgICBpZiBtYXRjaCA9PSAwOgo+ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgi UmVjZWl2ZWQgZGF0YSBldmVuIHdoZW4gbm9uIHdlcmUgc2VudFxuIgo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiRGF0YTpcbiVzIiAlIHRtcCkKPiArICAgICAgICBlbGlmIG1h dGNoID09IE5vbmU6Cj4gKyAgICAgICAgICAgIHJhaXNlIGVycm9yLlRlc3RGYWlsKCJUaW1lZCBv dXQsIHByb2JhYmx5IGluIGJsb2NraW5nIG1vZGVcbiIKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkRhdGE6XG4lcyIgJSB0bXApCj4gKyAgICAgICAgZWxpZiBtYXRjaCAhPSAx Ogo+ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiVW5leHBlY3RlZCBmYWlsXG5N YXRjaDogJXNcbkRhdGE6XG4lcyIgJQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobWF0Y2gsIHRtcCkpCj4gKyAgICAgICAgcG9ydC5zb2NrLnNlbmRhbGwoIjEyMzQ1Njc4OTAi KQo+ICsgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnJlY3YoJyVzJywgMTAsIDEwMjQsIEZhbHNlKSIg JSBwb3J0Lm5hbWUsIHZtLCAyKQo+ICsKPiArCj4gKyAgICBkZWYgdGJhc2ljX2xvb3BiYWNrKHZt LCBzZW5kX3BvcnQsIHJlY3ZfcG9ydCwgZGF0YT0iU21va2UgdGVzdCBkYXRhIik6Cj4gKyAgICAg ICAgIiIiCj4gKyAgICAgICAgRWFzeSBsb29wIGJhY2sgdGVzdCB3aXRoIGxvb3Agb3ZlciBvbmx5 IHR3byBwb3J0Lgo+ICsKPiArICAgICAgICBAcGFyYW0gdm06IFRhcmdldCB2aXJ0dWFsIG1hY2hp bmUgW3ZtLCBzZXNzaW9uLCB0bXBfZGlyXS4KPiArICAgICAgICBAcGFyYW0gcG9ydDogUG9ydCB1 c2VkIGluIHRlc3QuCj4gKyAgICAgICAgIiIiCj4gKyAgICAgICAgaWYgbm90IHNlbmRfcG9ydC5p c19vcGVuOgo+ICsgICAgICAgICAgICBzZW5kX3BvcnQub3BlbigpCj4gKyAgICAgICAgaWYgbm90 IHJlY3ZfcG9ydC5pc19vcGVuOgo+ICsgICAgICAgICAgICByZWN2X3BvcnQub3BlbigpCj4gKyAg ICAgICAgb25fZ3Vlc3QoInZpcnQubG9vcGJhY2soWyclcyddLCBbJyVzJ10sIDEwMjQsIHZpcnQu TE9PUF9OT05FKSIgJQo+ICsgICAgICAgICAgICAgICAgICAgICAoc2VuZF9wb3J0Lm5hbWUsIHJl Y3ZfcG9ydC5uYW1lKSwgdm0sIDIpCj4gKyAgICAgICAgc2VuZF9wb3J0LnNvY2suc2VuZGFsbChk YXRhKQo+ICsgICAgICAgIHRtcCA9ICIiCj4gKyAgICAgICAgaSA9IDAKPiArICAgICAgICB3aGls ZSBpIDw9IDEwOgo+ICsgICAgICAgICAgICBpICs9IDEKPiArICAgICAgICAgICAgcmV0ID0gc2Vs ZWN0LnNlbGVjdChbcmVjdl9wb3J0LnNvY2tdLCBbXSwgW10sIDEuMCkKPiArICAgICAgICAgICAg aWYgcmV0Ogo+ICsgICAgICAgICAgICAgICAgdG1wICs9IHJlY3ZfcG9ydC5zb2NrLnJlY3YoMTAy NCkKPiArICAgICAgICAgICAgaWYgbGVuKHRtcCkgPj0gbGVuKGRhdGEpOgo+ICsgICAgICAgICAg ICAgICAgYnJlYWsKPiArICAgICAgICBpZiB0bXAgIT0gZGF0YToKPiArICAgICAgICAgICAgcmFp c2UgZXJyb3IuVGVzdEZhaWwoIkluY29ycmVjdCBkYXRhOiAnJXMnICE9ICclcyciLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCB0bXApCj4gKyAgICAgICAgX2d1ZXN0 X2V4aXRfdGhyZWFkcyh2bSwgW3NlbmRfcG9ydF0sIFtyZWN2X3BvcnRdKQo+ICsKPiArCj4gKyAg ICBkZWYgdGVzdF9zbW9rZSh0ZXN0LCB2bSwgY29uc29sZXMsIHBhcmFtcyk6Cj4gICAgICAgICAg IiIiCj4gICAgICAgICAgVmlydGlvIGNvbnNvbGUgc21va2UgdGVzdC4KPiAgCj4gICAgICAgICAg VGVzdHMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllcyAocG9sbCwgcmVhZC93cml0ZSB3aXRoIGFu ZCB3aXRob3V0Cj4gICAgICAgICAgY29ubmVjdGVkIGhvc3QsIGV0Yy4KPiAgCj4gLSAgICAgICAg QHBhcmFtIHZtOiB0YXJnZXQgdmlydHVhbCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0K PiAtICAgICAgICBAcGFyYW0gY29uc29sZXM6IGEgZmllbGQgb2YgdmlydGlvIHBvcnRzIHdpdGgg dGhlIG1pbmltdW0gb2YgMiBpdGVtcwo+IC0gICAgICAgIEBwYXJhbSBwYXJhbXM6IHRlc3QgcGFy YW1ldGVycyAnJGNvbnNvbGVfdHlwZTokZGF0YTsuLi4nCj4gKyAgICAgICAgQHBhcmFtIHZtOiBU YXJnZXQgdmlydHVhbCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0uCj4gKyAgICAgICAg QHBhcmFtIGNvbnNvbGVzOiBGaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0aGUgbWluaW11bSBv ZiAyIGl0ZW1zLgo+ICsgICAgICAgIEBwYXJhbSBwYXJhbXM6IFRlc3QgcGFyYW1ldGVycyAnJGNv bnNvbGVfdHlwZTokZGF0YTsuLi4nCj4gICAgICAgICAgIiIiCj4gLSAgICAgICAgbG9nZ2luZy5p bmZvKCJTbW9rZSB0ZXN0OiBUZXN0cyB0aGUgYmFzaWMgY2FwYWJpbGl0aWVzIG9mICIKPiAtICAg ICAgICAgICAgICAgICAgICAgInZpcnRpb19jb25zb2xlcy4iKQo+ICAgICAgICAgICMgUFJFUEFS RQo+ICAgICAgICAgIGZvciBwYXJhbSBpbiBwYXJhbXMuc3BsaXQoJzsnKToKPiAgICAgICAgICAg ICAgaWYgbm90IHBhcmFtOgo+IEBAIC01NjAsMTIxICs3OTEsMTggQEAgZGVmIHJ1bl92aXJ0aW9f Y29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gICAgICAgICAgICAgIHNlbmRfcHQgPSBjb25z b2xlc1twYXJhbV1bMF0KPiAgICAgICAgICAgICAgcmVjdl9wdCA9IGNvbnNvbGVzW3BhcmFtXVsx XQo+ICAKPiAtICAgICAgICAgICAgIyBURVNUCj4gLSAgICAgICAgICAgICMgUG9sbCAoT1VUKQo+ IC0gICAgICAgICAgICBvbl9ndWVzdCgidmlydC5wb2xsKCclcycsICVzKSIgJSAoc2VuZF9wdFsx XSwgc2VsZWN0LlBPTExPVVQpLCB2bSwKPiAtICAgICAgICAgICAgICAgICAgICAgMikKPiAtCj4g LSAgICAgICAgICAgICMgUG9sbCAoSU4sIE9VVCkKPiAtICAgICAgICAgICAgc2VuZF9wdFswXS5z ZW5kYWxsKCJ0ZXN0IikKPiAtICAgICAgICAgICAgZm9yIHRlc3QgaW4gW3NlbGVjdC5QT0xMSU4s IHNlbGVjdC5QT0xMT1VUXToKPiAtICAgICAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnBvbGwo JyVzJywgJXMpIiAlIChzZW5kX3B0WzFdLCB0ZXN0KSwgdm0sIDIpCj4gLQo+IC0gICAgICAgICAg ICAjIFBvbGwgKElOIEhVUCkKPiAtICAgICAgICAgICAgIyBJIHN0b3JlIHRoZSBzb2NrZXQgaW5m b3JtYXRpb25zIGFuZCBjbG9zZSB0aGUgc29ja2V0Cj4gLSAgICAgICAgICAgIHNvY2sgPSBzZW5k X3B0WzBdCj4gLSAgICAgICAgICAgIHNlbmRfcHRbMF0gPSBzb2NrLmdldHBlZXJuYW1lKCkKPiAt ICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQo+IC0gICAgICAgICAgICBzb2NrLmNsb3NlKCkK PiAtICAgICAgICAgICAgZGVsIHNvY2sKPiAtICAgICAgICAgICAgZm9yIHRlc3QgaW4gW3NlbGVj dC5QT0xMSU4sIHNlbGVjdC5QT0xMSFVQXToKPiAtICAgICAgICAgICAgICAgIG9uX2d1ZXN0KCJ2 aXJ0LnBvbGwoJyVzJywgJXMpIiAlIChzZW5kX3B0WzFdLCB0ZXN0KSwgdm0sIDIpCj4gLQo+IC0g ICAgICAgICAgICAjIFBvbGwgKEhVUCkKPiAtICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQucmVj dignJXMnLCA0LCAxMDI0LCBGYWxzZSkiICUgKHNlbmRfcHRbMV0pLCB2bSwgMikKPiAtICAgICAg ICAgICAgb25fZ3Vlc3QoInZpcnQucG9sbCgnJXMnLCAlcykiICUgKHNlbmRfcHRbMV0sIHNlbGVj dC5QT0xMSFVQKSwgdm0sCj4gLSAgICAgICAgICAgICAgICAgICAgIDIpCj4gLQo+IC0gICAgICAg ICAgICAjIFJlY29ubmVjdCB0aGUgc29ja2V0Cj4gLSAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQu c29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCj4gLSAgICAgICAgICAg IHNvY2suY29ubmVjdChzZW5kX3B0WzBdKQo+IC0gICAgICAgICAgICBzZW5kX3B0WzBdID0gc29j awo+IC0gICAgICAgICAgICAjIFJlZGVmaW5lIHNvY2tldCBpbiBjb25zb2xlcwo+IC0gICAgICAg ICAgICBjb25zb2xlc1twYXJhbV1bMF0gPSBzZW5kX3B0Cj4gLSAgICAgICAgICAgIG9uX2d1ZXN0 KCJ2aXJ0LnBvbGwoJyVzJywgJXMpIiAlIChzZW5kX3B0WzFdLCBzZWxlY3QuUE9MTE9VVCksIHZt LAo+IC0gICAgICAgICAgICAgICAgICAgICAyKQo+IC0KPiAtICAgICAgICAgICAgIyBSZWFkL3dy aXRlIHdpdGhvdXQgaG9zdCBjb25uZWN0ZWQKPiAtICAgICAgICAgICAgIyBJIHN0b3JlIHRoZSBz b2NrZXQgaW5mb3JtYXRpb25zIGFuZCBjbG9zZSB0aGUgc29ja2V0Cj4gLSAgICAgICAgICAgIHNv Y2sgPSBzZW5kX3B0WzBdCj4gLSAgICAgICAgICAgIHNlbmRfcHRbMF0gPSBzb2NrLmdldHBlZXJu YW1lKCkKPiAtICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQo+IC0gICAgICAgICAgICBzb2Nr LmNsb3NlKCkKPiAtICAgICAgICAgICAgZGVsIHNvY2sKPiAtICAgICAgICAgICAgIyBSZWFkIHNo b3VsZCBwYXNzCj4gLSAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnJlY3YoJyVzJywgMCwgMTAy NCwgRmFsc2UpIiAlIHNlbmRfcHRbMV0sIHZtLCAyKQo+IC0gICAgICAgICAgICAjIFdyaXRlIHNo b3VsZCB0aW1lZC1vdXQKPiAtICAgICAgICAgICAgbWF0Y2gsIHRtcCA9IF9vbl9ndWVzdCgidmly dC5zZW5kKCclcycsIDEwLCBGYWxzZSkiCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICUgc2VuZF9wdFsxXSwgdm0sIDIpCj4gLSAgICAgICAgICAgIGlmIG1hdGNoICE9IE5v bmU6Cj4gLSAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiUmVhZCBvbiBndWVz dCB3aGlsZSBob3N0IGRpc2Nvbm5lY3RlZCAiCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiZGlkbid0IHRpbWVkIG91dC5cbk91dHB1dDpcbiVzIgo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB0bXApCj4gLSAgICAgICAgICAgIHNvY2sgPSBz b2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCj4gLSAgICAg ICAgICAgIHNvY2suY29ubmVjdChzZW5kX3B0WzBdKQo+IC0gICAgICAgICAgICBzZW5kX3B0WzBd ID0gc29jawo+IC0KPiAtICAgICAgICAgICAgIyBSZWRlZmluZSBzb2NrZXQgaW4gY29uc29sZXMK PiAtICAgICAgICAgICAgY29uc29sZXNbcGFyYW1dWzBdID0gc2VuZF9wdAo+IC0gICAgICAgICAg ICBpZiAoc2VuZF9wdFswXS5yZWN2KDEwMjQpIDwgMTApOgo+IC0gICAgICAgICAgICAgICAgcmFp c2UgZXJyb3IuVGVzdEZhaWwoIkRpZG4ndCByZWNlaXZlZCBkYXRhIGZyb20gZ3Vlc3QiKQo+IC0g ICAgICAgICAgICAjIE5vdyB0aGUgX29uX2d1ZXN0KCJ2aXJ0LnNlbmQoJyVzJy4uLiBjb21tYW5k IHNob3VsZCBiZSBmaW5pc2hlZAo+IC0gICAgICAgICAgICBvbl9ndWVzdCgicHJpbnQgJ1BBU1M6 IG5vdGhpbmcnIiwgdm0sIDIpCj4gLQo+IC0gICAgICAgICAgICAjIE5vbi1ibG9ja2luZyBtb2Rl Cj4gLSAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LmJsb2NraW5nKCclcycsIEZhbHNlKSIgJSBz ZW5kX3B0WzFdLCB2bSwgMikKPiAtICAgICAgICAgICAgIyBSZWN2IHNob3VsZCByZXR1cm4gRkFJ TCB3aXRoIDAgcmVjZWl2ZWQgZGF0YQo+IC0gICAgICAgICAgICBtYXRjaCwgdG1wID0gX29uX2d1 ZXN0KCJ2aXJ0LnJlY3YoJyVzJywgMTAsIDEwMjQsIEZhbHNlKSIgJQo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbmRfcHRbMV0sIHZtLCAyKQo+IC0gICAgICAgICAgICBp ZiBtYXRjaCA9PSAwOgo+IC0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIlJl Y2VpdmVkIGRhdGEgZXZlbiB3aGVuIG5vbiB3ZXJlIHNlbnRcbiIKPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJEYXRhOlxuJXMiICUgdG1wKQo+IC0gICAgICAgICAgICBl bGlmIG1hdGNoID09IE5vbmU6Cj4gLSAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFp bCgiVGltZWQgb3V0LCBwcm9iYWJseSBpbiBibG9ja2luZyBtb2RlXG4iCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YTpcbiVzIiAlIHRtcCkKPiAtICAgICAgICAg ICAgZWxpZiBtYXRjaCAhPSAxOgo+IC0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZh aWwoIlVuZXhwZWN0ZWQgZmFpbFxuTWF0Y2g6ICVzXG5EYXRhOlxuJXMiICUKPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaCwgdG1wKSkKPiAtICAgICAgICAgICAg c2VuZF9wdFswXS5zZW5kYWxsKCIxMjM0NTY3ODkwIikKPiAtICAgICAgICAgICAgb25fZ3Vlc3Qo InZpcnQucmVjdignJXMnLCAxMCwgMTAyNCwgRmFsc2UpIiAlIHNlbmRfcHRbMV0sIHZtLCAyKQo+ IC0KPiAtICAgICAgICAgICAgIyBCbG9ja2luZyBtb2RlCj4gLSAgICAgICAgICAgIG9uX2d1ZXN0 KCJ2aXJ0LmJsb2NraW5nKCclcycsIFRydWUpIiAlIHNlbmRfcHRbMV0sIHZtLCAyKQo+IC0gICAg ICAgICAgICAjIFJlY3Ygc2hvdWxkIHRpbWVkIG91dAo+IC0gICAgICAgICAgICBtYXRjaCwgdG1w ID0gX29uX2d1ZXN0KCJ2aXJ0LnJlY3YoJyVzJywgMTAsIDEwMjQsIEZhbHNlKSIgJQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfcHRbMV0sIHZtLCAyKQo+IC0gICAg ICAgICAgICBpZiBtYXRjaCA9PSAwOgo+IC0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVz dEZhaWwoIlJlY2VpdmVkIGRhdGEgZXZlbiB3aGVuIG5vbiB3ZXJlIHNlbnRcbiIKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRhOlxuJXMiICUgdG1wKQo+IC0gICAg ICAgICAgICBlbGlmIG1hdGNoICE9IE5vbmU6Cj4gLSAgICAgICAgICAgICAgICByYWlzZSBlcnJv ci5UZXN0RmFpbCgiVW5leHBlY3RlZCBmYWlsXG5NYXRjaDogJXNcbkRhdGE6XG4lcyIgJQo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoLCB0bXApKQo+IC0gICAg ICAgICAgICBzZW5kX3B0WzBdLnNlbmRhbGwoIjEyMzQ1Njc4OTAiKQo+IC0gICAgICAgICAgICAj IE5vdyBndWVzdCByZWNlaXZlZCB0aGUgZGF0YSBlbmQgZXNjYXBlZCBmcm9tIHRoZSByZWN2KCkK PiAtICAgICAgICAgICAgb25fZ3Vlc3QoInByaW50ICdQQVNTOiBub3RoaW5nJyIsIHZtLCAyKQo+ IC0KPiAtICAgICAgICAgICAgIyBCYXNpYyBsb29wYmFjayB0ZXN0Cj4gLSAgICAgICAgICAgIG9u X2d1ZXN0KCJ2aXJ0Lmxvb3BiYWNrKFsnJXMnXSwgWyclcyddLCAxMDI0LCB2aXJ0LkxPT1BfTk9O RSkiICUKPiAtICAgICAgICAgICAgICAgICAgICAgKHNlbmRfcHRbMV0sIHJlY3ZfcHRbMV0pLCB2 bSwgMikKPiAtICAgICAgICAgICAgc2VuZF9wdFswXS5zZW5kYWxsKGRhdGEpCj4gLSAgICAgICAg ICAgIHRtcCA9ICIiCj4gLSAgICAgICAgICAgIGkgPSAwCj4gLSAgICAgICAgICAgIHdoaWxlIGkg PD0gMTA6Cj4gLSAgICAgICAgICAgICAgICBpICs9IDEKPiAtICAgICAgICAgICAgICAgIHJldCA9 IHNlbGVjdC5zZWxlY3QoW3JlY3ZfcHRbMF1dLCBbXSwgW10sIDEuMCkKPiAtICAgICAgICAgICAg ICAgIGlmIHJldDoKPiAtICAgICAgICAgICAgICAgICAgICB0bXAgKz0gcmVjdl9wdFswXS5yZWN2 KDEwMjQpCj4gLSAgICAgICAgICAgICAgICBpZiBsZW4odG1wKSA+PSBsZW4oZGF0YSk6Cj4gLSAg ICAgICAgICAgICAgICAgICAgYnJlYWsKPiAtICAgICAgICAgICAgaWYgdG1wICE9IGRhdGE6Cj4g LSAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiSW5jb3JyZWN0IGRhdGE6ICcl cycgIT0gJyVzJyIsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh LCB0bXApCj4gLSAgICAgICAgICAgIF9ndWVzdF9leGl0X3RocmVhZHModm0sIFtzZW5kX3B0XSwg W3JlY3ZfcHRdKQo+IC0KPiAtICAgICAgICByZXR1cm4gY29uc29sZXMKPiAtCj4gLQo+IC0gICAg ZGVmIHRlc3RfbG9vcGJhY2sodm0sIGNvbnNvbGVzLCBwYXJhbXMpOgo+ICsgICAgICAgICAgICB0 ZXN0LmRvX3Rlc3QodG9wZW4sIFt2bSwgc2VuZF9wdF0gLCBUcnVlKQo+ICsgICAgICAgICAgICB0 ZXN0LmRvX3Rlc3QodGNsb3NlLCBbdm0sIHNlbmRfcHRdLCBUcnVlKQo+ICsgICAgICAgICAgICB0 ZXN0LmRvX3Rlc3QodG11bHRpX29wZW4sIFt2bSwgc2VuZF9wdF0sIFRydWUpCj4gKyAgICAgICAg ICAgIHRlc3QuZG9fdGVzdCh0cG9vbGluZywgW3ZtLCBzZW5kX3B0XSkKPiArICAgICAgICAgICAg dGVzdC5kb190ZXN0KHRyd19ob3N0X29mZmxpbmUsIFt2bSwgc2VuZF9wdF0pCj4gKyAgICAgICAg ICAgIHRlc3QuZG9fdGVzdCh0cndfbm9uYmxvY2tpbmdfbW9kZSwgW3ZtLCBzZW5kX3B0XSkKPiAr ICAgICAgICAgICAgdGVzdC5kb190ZXN0KHRyd19ibG9ja2luZ19tb2RlLCBbdm0sIHNlbmRfcHRd KQo+ICsgICAgICAgICAgICB0ZXN0LmRvX3Rlc3QodGJhc2ljX2xvb3BiYWNrLCBbdm0sIHNlbmRf cHQsIHJlY3ZfcHRdLCBkYXRhKQo+ICsKPiArCj4gKwo+ICsgICAgZGVmIHRsb29wYmFjayh2bSwg Y29uc29sZXMsIHBhcmFtcyk6Cj4gICAgICAgICAgIiIiCj4gICAgICAgICAgVmlydGlvIGNvbnNv bGUgbG9vcGJhY2sgdGVzdC4KPiAgCj4gQEAgLTY4MiwxNiArODEwLDEzIEBAIGRlZiBydW5fdmly dGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAgICAgICAgIHBvcnRzIGFuZCBzZW5k cyBsZW5ndGggYW1vdW50IG9mIGRhdGEgdGhyb3VnaCB0aGlzIGNvbm5lY3Rpb24uCj4gICAgICAg ICAgSXQgdmFsaWRhdGVzIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgZGF0YSBzZW50Lgo+ICAKPiAt ICAgICAgICBAcGFyYW0gdm06IHRhcmdldCB2aXJ0dWFsIG1hY2hpbmUgW3ZtLCBzZXNzaW9uLCB0 bXBfZGlyXQo+IC0gICAgICAgIEBwYXJhbSBjb25zb2xlczogYSBmaWVsZCBvZiB2aXJ0aW8gcG9y dHMgd2l0aCB0aGUgbWluaW11bSBvZiAyIGl0ZW1zCj4gKyAgICAgICAgQHBhcmFtIHZtOiBUYXJn ZXQgdmlydHVhbCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0uCj4gKyAgICAgICAgQHBh cmFtIGNvbnNvbGVzOiBGaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0aGUgbWluaW11bSBvZiAy IGl0ZW1zLgo+ICAgICAgICAgIEBwYXJhbSBwYXJhbXM6IHRlc3QgcGFyYW1ldGVycywgbXVsdGlw bGUgcmVjaWV2ZXJzIGFsbG93ZWQuCj4gICAgICAgICAgICAgICckc291cmNlX2NvbnNvbGVfdHlw ZUBidWZmZXJfbGVuZ3RoOgo+ICAgICAgICAgICAgICAgJGRlc3RpbmF0aW9uX2NvbnNvbGVfdHlw ZTFAJGJ1ZmZlcl9sZW5ndGg6Li4uOgo+ICAgICAgICAgICAgICAgJGxvb3BiYWNrX2J1ZmZlcl9s ZW5ndGg7Li4uJwo+ICAgICAgICAgICIiIgo+IC0gICAgICAgIGxvZ2dpbmcuaW5mbygiTG9vcGJh Y2sgdGVzdDogQ3JlYXRlcyBhIGxvb3BiYWNrIGJldHdlZW4gc2VuZGVyIHBvcnQgIgo+IC0gICAg ICAgICAgICAgICAgICAgICAiYW5kIHJlY2VpdmluZyBwb3J0LCBzZW5kIGRhdGEgdGhyb3VnaCB0 aGlzIGNvbm5lY3Rpb24sICIKPiAtICAgICAgICAgICAgICAgICAgICAgInZlcmlmeSBkYXRhIGNv cnJlY3RuZXNzLiIpCj4gICAgICAgICAgIyBQUkVQQVJFCj4gICAgICAgICAgZm9yIHBhcmFtIGlu IHBhcmFtcy5zcGxpdCgnOycpOgo+ICAgICAgICAgICAgICBpZiBub3QgcGFyYW06Cj4gQEAgLTcz MCw2ICs4NTUsMTMgQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6 Cj4gICAgICAgICAgICAgIGlmIGxlbihidWZfbGVuKSA9PSAoaWR4X2NvbnNvbGUgKyBpZHhfc2Vy aWFscG9ydCk6Cj4gICAgICAgICAgICAgICAgICBidWZfbGVuLmFwcGVuZCgxMDI0KQo+ICAKPiAr ICAgICAgICAgICAgZm9yIHAgaW4gcmVjdl9wdHM6Cj4gKyAgICAgICAgICAgICAgICBpZiBub3Qg cC5pc19vcGVuOgo+ICsgICAgICAgICAgICAgICAgICAgIHAub3BlbigpCj4gKwo+ICsgICAgICAg ICAgICBpZiBub3Qgc2VuZF9wdC5pc19vcGVuOgo+ICsgICAgICAgICAgICAgICAgc2VuZF9wdC5v cGVuKCkKPiArCj4gICAgICAgICAgICAgIGlmIGxlbihyZWN2X3B0cykgPT0gMDoKPiAgICAgICAg ICAgICAgICAgIHJhaXNlIGVycm9yLlRlc3RGYWlsKCJ0ZXN0X2xvb3BiYWNrOiBpbmNvcnJlY3Qg cmVjdiBjb25zb2xlcyIKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk ZWZpbml0aW9uIikKPiBAQCAtNzM5LDIxICs4NzEsMjIgQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29s ZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxl bihyZWN2X3B0cykpOgo+ICAgICAgICAgICAgICAgICAgcXVldWVzLmFwcGVuZChkZXF1ZSgpKQo+ ICAKPiAtICAgICAgICAgICAgdG1wID0gIiclcyciICUgcmVjdl9wdHNbMF1bMV0KPiArICAgICAg ICAgICAgdG1wID0gIiclcyciICUgcmVjdl9wdHNbMF0ubmFtZQo+ICAgICAgICAgICAgICBmb3Ig cmVjdl9wdCBpbiByZWN2X3B0c1sxOl06Cj4gLSAgICAgICAgICAgICAgICB0bXAgKz0gIiwgJyVz JyIgJSAocmVjdl9wdFsxXSkKPiArICAgICAgICAgICAgICAgIHRtcCArPSAiLCAnJXMnIiAlIChy ZWN2X3B0Lm5hbWUpCj4gICAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0Lmxvb3BiYWNrKFsnJXMn XSwgWyVzXSwgJWQsIHZpcnQuTE9PUF9QT0xMKSIKPiAtICAgICAgICAgICAgICAgICAgICAgJSAo c2VuZF9wdFsxXSwgdG1wLCBidWZfbGVuWy0xXSksIHZtLCAyKQo+ICsgICAgICAgICAgICAgICAg ICAgICAlIChzZW5kX3B0Lm5hbWUsIHRtcCwgYnVmX2xlblstMV0pLCB2bSwgMikKPiAgCj4gICAg ICAgICAgICAgIGV4aXRfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQo+ICAKPiAgICAgICAgICAg ICAgIyBURVNUCj4gLSAgICAgICAgICAgIHRocmVhZCA9IHRoX3NlbmRfY2hlY2soc2VuZF9wdFsw XSwgZXhpdF9ldmVudCwgcXVldWVzLCBidWZfbGVuWzBdKQo+ICsgICAgICAgICAgICB0aHJlYWQg PSBUaFNlbmRDaGVjayhzZW5kX3B0LnNvY2ssIGV4aXRfZXZlbnQsIHF1ZXVlcywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfbGVuWzBdKQo+ICAgICAgICAgICAgICB0 aHJlYWQuc3RhcnQoKQo+ICAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWQpCj4gIAo+ ICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVjdl9wdHMpKToKPiAtICAgICAgICAg ICAgICAgIHRocmVhZCA9IHRoX3JlY3ZfY2hlY2socmVjdl9wdHNbaV1bMF0sIHF1ZXVlc1tpXSwg ZXhpdF9ldmVudCwKPiArICAgICAgICAgICAgICAgIHRocmVhZCA9IFRoUmVjdkNoZWNrKHJlY3Zf cHRzW2ldLnNvY2ssIHF1ZXVlc1tpXSwgZXhpdF9ldmVudCwKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnVmX2xlbltpICsgMV0pCj4gICAgICAgICAgICAgICAgICB0 aHJlYWQuc3RhcnQoKQo+ICAgICAgICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkKQo+ IEBAIC03NzAsOCArOTAzLDggQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMs IGVudik6Cj4gIAo+ICAgICAgICAgICAgICAjIFJlYWQtb3V0IGFsbCByZW1haW5pbmcgZGF0YQo+ ICAgICAgICAgICAgICBmb3IgcmVjdl9wdCBpbiByZWN2X3B0czoKPiAtICAgICAgICAgICAgICAg IHdoaWxlIHNlbGVjdC5zZWxlY3QoW3JlY3ZfcHRbMF1dLCBbXSwgW10sIDAuMSlbMF06Cj4gLSAg ICAgICAgICAgICAgICAgICAgcmVjdl9wdFswXS5yZWN2KDEwMjQpCj4gKyAgICAgICAgICAgICAg ICB3aGlsZSBzZWxlY3Quc2VsZWN0KFtyZWN2X3B0LnNvY2tdLCBbXSwgW10sIDAuMSlbMF06Cj4g KyAgICAgICAgICAgICAgICAgICAgcmVjdl9wdC5zb2NrLnJlY3YoMTAyNCkKPiAgCj4gICAgICAg ICAgICAgIF9ndWVzdF9leGl0X3RocmVhZHModm0sIFtzZW5kX3B0XSwgcmVjdl9wdHMpCj4gIAo+ IEBAIC03NzksMTkgKzkxMiwxNyBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFt cywgZW52KToKPiAgICAgICAgICAgICAgZGVsIHRocmVhZHNbOl0KPiAgCj4gCj4gLSAgICBkZWYg dGVzdF9wZXJmKHZtLCBjb25zb2xlcywgcGFyYW1zKToKPiArICAgIGRlZiB0cGVyZih2bSwgY29u c29sZXMsIHBhcmFtcyk6Cj4gICAgICAgICAgIiIiCj4gICAgICAgICAgVGVzdHMgcGVyZm9ybWFu Y2Ugb2YgdGhlIHZpcnRpb19jb25zb2xlIHR1bmVsLiBGaXJzdCBpdCBzZW5kcyB0aGUgZGF0YQo+ ICAgICAgICAgIGZyb20gaG9zdCB0byBndWVzdCBhbmQgdGhhbiBiYWNrLiBJdCBwcm92aWRlcyBp bmZvcm1hdGlvbnMgYWJvdXQKPiAgICAgICAgICBjb21wdXRlciB1dGlsaXNhdGlvbiBhbmQgc3Rh dGlzdGljIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgdHJvdWdocHV0Lgo+ICAKPiAtICAgICAgICBA cGFyYW0gdm06IHRhcmdldCB2aXJ0dWFsIG1hY2hpbmUgW3ZtLCBzZXNzaW9uLCB0bXBfZGlyXQo+ IC0gICAgICAgIEBwYXJhbSBjb25zb2xlczogYSBmaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0 aGUgbWluaW11bSBvZiAyIGl0ZW1zCj4gKyAgICAgICAgQHBhcmFtIHZtOiBUYXJnZXQgdmlydHVh bCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0uCj4gKyAgICAgICAgQHBhcmFtIGNvbnNv bGVzOiBGaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0aGUgbWluaW11bSBvZiAyIGl0ZW1zLgo+ ICAgICAgICAgIEBwYXJhbSBwYXJhbXM6IHRlc3QgcGFyYW1ldGVyczoKPiAgICAgICAgICAgICAg ICAgICckY29uc29sZV90eXBlQCRidWZmZXJfbGVuZ3RoOiR0ZXN0X2R1cmF0aW9uOy4uLicKPiAg ICAgICAgICAiIiIKPiAtICAgICAgICBsb2dnaW5nLmluZm8oIlBlcmZvcm1hbmNlIHRlc3Q6IE1l YXN1cmUgcGVyZm9ybWFuY2UgZm9yIHRoZSAiCj4gLSAgICAgICAgICAgICAgICAgICAgICJ2aXJ0 aW8gY29uc29sZSB0dW5uZWwiKQo+ICAgICAgICAgIGZvciBwYXJhbSBpbiBwYXJhbXMuc3BsaXQo JzsnKToKPiAgICAgICAgICAgICAgaWYgbm90IHBhcmFtOgo+ICAgICAgICAgICAgICAgICAgY29u dGludWUKPiBAQCAtODExLDM5ICs5NDIsMzggQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0 LCBwYXJhbXMsIGVudik6Cj4gICAgICAgICAgICAgIHBhcmFtID0gKHBhcmFtWzBdID09ICdzZXJp YWxwb3J0JykKPiAgICAgICAgICAgICAgcG9ydCA9IGNvbnNvbGVzW3BhcmFtXVswXQo+ICAKPiAr ICAgICAgICAgICAgaWYgbm90IHBvcnQuaXNfb3BlbjoKPiArICAgICAgICAgICAgICAgIHBvcnQu b3BlbigpCj4gKwo+ICAgICAgICAgICAgICBkYXRhID0gIiIKPiAgICAgICAgICAgICAgZm9yIGkg aW4gcmFuZ2UoYnVmX2xlbik6Cj4gICAgICAgICAgICAgICAgICBkYXRhICs9ICIlYyIgJSByYW5k b20ucmFuZHJhbmdlKDI1NSkKPiAgCj4gICAgICAgICAgICAgIGV4aXRfZXZlbnQgPSB0aHJlYWRp bmcuRXZlbnQoKQo+IC0gICAgICAgICAgICBzbGljZSA9IGZsb2F0KGR1cmF0aW9uKS8xMDAKPiAr ICAgICAgICAgICAgc2xpY2UgPSBmbG9hdChkdXJhdGlvbikgLyAxMDAKPiAgCj4gICAgICAgICAg ICAgICMgSE9TVCAtPiBHVUVTVAo+ICAgICAgICAgICAgICBvbl9ndWVzdCgndmlydC5sb29wYmFj ayhbIiVzIl0sIFtdLCAlZCwgdmlydC5MT09QX05PTkUpJyAlCj4gLSAgICAgICAgICAgICAgICAg ICAgIChwb3J0WzFdLCBidWZfbGVuKSwgdm0sIDIpCj4gLSAgICAgICAgICAgIHRocmVhZCA9IHRo X3NlbmQocG9ydFswXSwgZGF0YSwgZXhpdF9ldmVudCkKPiArICAgICAgICAgICAgICAgICAgICAg KHBvcnQubmFtZSwgYnVmX2xlbiksIHZtLCAyKQo+ICsgICAgICAgICAgICB0aHJlYWQgPSBUaFNl bmQocG9ydC5zb2NrLCBkYXRhLCBleGl0X2V2ZW50KQo+ICAgICAgICAgICAgICBzdGF0cyA9IGFy cmF5LmFycmF5KCdmJywgW10pCj4gLSAgICAgICAgICAgIGxvYWRzID0gW10KPiAtICAgICAgICAg ICAgbG9hZHMuYXBwZW5kKGNwdV9sb2FkKCkpCj4gLSAgICAgICAgICAgIGxvYWRzLmFwcGVuZChw aWRfbG9hZChvcy5nZXRwaWQoKSwgJ2F1dG90ZXN0JykpCj4gLSAgICAgICAgICAgIGxvYWRzLmFw cGVuZChwaWRfbG9hZCh2bVswXS5nZXRfcGlkKCksICdWTScpKQo+IC0KPiAtICAgICAgICAgICAg Zm9yIGxvYWQgaW4gbG9hZHM6Cj4gLSAgICAgICAgICAgICAgICBsb2FkLnN0YXJ0KCkKPiArICAg ICAgICAgICAgbG9hZHMgPSB1dGlscy5TeXN0ZW1Mb2FkKFsob3MuZ2V0cGlkKCksICdhdXRvdGVz dCcpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2bVswXS5nZXRf cGlkKCksICdWTScpLCAwXSkKPiArICAgICAgICAgICAgbG9hZHMuc3RhcnQoKQo+ICAgICAgICAg ICAgICBfdGltZSA9IHRpbWUudGltZSgpCj4gICAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCj4g ICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6Cj4gICAgICAgICAgICAgICAgICBzdGF0 cy5hcHBlbmQodGhyZWFkLmlkeCkKPiAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2xpY2Up Cj4gICAgICAgICAgICAgIF90aW1lID0gdGltZS50aW1lKCkgLSBfdGltZSAtIGR1cmF0aW9uCj4g LSAgICAgICAgICAgIHByaW50X2xvYWQoW2xvYWRzWzFdLmdldF9sb2FkKCksIGxvYWRzWzJdLmdl dF9sb2FkKCldLAo+IC0gICAgICAgICAgICAgICAgICAgICAgIGxvYWRzWzBdLmdldF9sb2FkKCkp Cj4gKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiXG4iICsgbG9hZHMuZ2V0X2NwdV9zdGF0dXNf c3RyaW5nKClbOi0xXSkKPiArICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJcbiIgKyBsb2Fkcy5n ZXRfbWVtX3N0YXR1c19zdHJpbmcoKVs6LTFdKQo+ICAgICAgICAgICAgICBleGl0X2V2ZW50LnNl dCgpCj4gICAgICAgICAgICAgIHRocmVhZC5qb2luKCkKPiAgCj4gICAgICAgICAgICAgICMgTGV0 IHRoZSBndWVzdCByZWFkLW91dCBhbGwgdGhlIHJlbWFpbmluZyBkYXRhCj4gICAgICAgICAgICAg IHdoaWxlIG5vdCBfb25fZ3Vlc3QoInZpcnQucG9sbCgnJXMnLCAlcykiICUKPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocG9ydFsxXSwgc2VsZWN0LlBPTExJTiksIHZtLCAyKVsw XToKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9ydC5uYW1lLCBzZWxlY3Qu UE9MTElOKSwgdm0sIDIpWzBdOgo+ICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQo+ICAK PiAgICAgICAgICAgICAgX2d1ZXN0X2V4aXRfdGhyZWFkcyh2bSwgW3BvcnRdLCBbXSkKPiBAQCAt ODUzLDMwICs5ODMsMjkgQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVu dik6Cj4gICAgICAgICAgICAgICAgICAiVGVzdCByYW4gJWZzIGxvbmdlciB3aGljaCBpcyBtb3Jl IHRoYW4gb25lIHNsaWNlIiwgX3RpbWUpCj4gICAgICAgICAgICAgIGVsc2U6Cj4gICAgICAgICAg ICAgICAgICBsb2dnaW5nLmRlYnVnKCJUZXN0IHJhbiAlZnMgbG9uZ2VyIiwgX3RpbWUpCj4gLSAg ICAgICAgICAgIHN0YXRzID0gcHJvY2Vzc19zdGF0cyhzdGF0c1sxOl0sIHNsaWNlKjEwNDg1NzYp Cj4gKyAgICAgICAgICAgIHN0YXRzID0gcHJvY2Vzc19zdGF0cyhzdGF0c1sxOl0sIHNsaWNlICog MTA0ODU3NikKPiAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhdHMgPSAlcyIsIHN0YXRz KQo+ICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oIkhvc3QgLT4gR3Vlc3QgW01CL3NdIChtaW4v bWVkL21heCkgPSAlLjNmLyUuM2YvJS4zZiIsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICBz dGF0c1swXSwgc3RhdHNbbGVuKHN0YXRzKS8yXSwgc3RhdHNbLTFdKQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0c1swXSwgc3RhdHNbbGVuKHN0YXRzKSAvIDJdLCBzdGF0c1stMV0pCj4g IAo+ICAgICAgICAgICAgICBkZWwgdGhyZWFkCj4gIAo+ICAgICAgICAgICAgICAjIEdVRVNUIC0+ IEhPU1QKPiAgICAgICAgICAgICAgZXhpdF9ldmVudC5jbGVhcigpCj4gICAgICAgICAgICAgIHN0 YXRzID0gYXJyYXkuYXJyYXkoJ2YnLCBbXSkKPiAtICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQu c2VuZF9sb29wX2luaXQoJyVzJywgJWQpIiAlIChwb3J0WzFdLCBidWZfbGVuKSwKPiArICAgICAg ICAgICAgb25fZ3Vlc3QoInZpcnQuc2VuZF9sb29wX2luaXQoJyVzJywgJWQpIiAlIChwb3J0Lm5h bWUsIGJ1Zl9sZW4pLAo+ICAgICAgICAgICAgICAgICAgICAgICB2bSwgMzApCj4gLSAgICAgICAg ICAgIHRocmVhZCA9IHRoX3JlY3YocG9ydFswXSwgZXhpdF9ldmVudCwgYnVmX2xlbikKPiArICAg ICAgICAgICAgdGhyZWFkID0gVGhSZWN2KHBvcnQuc29jaywgZXhpdF9ldmVudCwgYnVmX2xlbikK PiAgICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKPiAtICAgICAgICAgICAgZm9yIGxvYWQgaW4g bG9hZHM6Cj4gLSAgICAgICAgICAgICAgICBsb2FkLnN0YXJ0KCkKPiArICAgICAgICAgICAgbG9h ZHMuc3RhcnQoKQo+ICAgICAgICAgICAgICBvbl9ndWVzdCgidmlydC5zZW5kX2xvb3AoKSIsIHZt LCAyKQo+ICAgICAgICAgICAgICBfdGltZSA9IHRpbWUudGltZSgpCj4gICAgICAgICAgICAgIGZv ciBpIGluIHJhbmdlKDEwMCk6Cj4gICAgICAgICAgICAgICAgICBzdGF0cy5hcHBlbmQodGhyZWFk LmlkeCkKPiAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2xpY2UpCj4gICAgICAgICAgICAg IF90aW1lID0gdGltZS50aW1lKCkgLSBfdGltZSAtIGR1cmF0aW9uCj4gLSAgICAgICAgICAgIHBy aW50X2xvYWQoW2xvYWRzWzFdLmdldF9sb2FkKCksIGxvYWRzWzJdLmdldF9sb2FkKCldLAo+IC0g ICAgICAgICAgICAgICAgICAgICAgIGxvYWRzWzBdLmdldF9sb2FkKCkpCj4gKyAgICAgICAgICAg IGxvZ2dpbmcuaW5mbygiXG4iICsgbG9hZHMuZ2V0X2NwdV9zdGF0dXNfc3RyaW5nKClbOi0xXSkK PiArICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJcbiIgKyBsb2Fkcy5nZXRfbWVtX3N0YXR1c19z dHJpbmcoKVs6LTFdKQo+ICAgICAgICAgICAgICBvbl9ndWVzdCgidmlydC5leGl0X3RocmVhZHMo KSIsIHZtLCAyKQo+ICAgICAgICAgICAgICBleGl0X2V2ZW50LnNldCgpCj4gICAgICAgICAgICAg IHRocmVhZC5qb2luKCkKPiBAQCAtODg1LDM3ICsxMDE0LDg2IEBAIGRlZiBydW5fdmlydGlvX2Nv bnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ICAgICAgICAgICAgICAgICAgIlRlc3QgcmFuICVm cyBsb25nZXIgd2hpY2ggaXMgbW9yZSB0aGFuIG9uZSBzbGljZSIsIF90aW1lKQo+ICAgICAgICAg ICAgICBlbHNlOgo+ICAgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVGVzdCByYW4gJWZz IGxvbmdlciIgJSBfdGltZSkKPiAtICAgICAgICAgICAgc3RhdHMgPSBwcm9jZXNzX3N0YXRzKHN0 YXRzWzE6XSwgc2xpY2UqMTA0ODU3NikKPiArICAgICAgICAgICAgc3RhdHMgPSBwcm9jZXNzX3N0 YXRzKHN0YXRzWzE6XSwgc2xpY2UgKiAxMDQ4NTc2KQo+ICAgICAgICAgICAgICBsb2dnaW5nLmRl YnVnKCJTdGF0cyA9ICVzIiwgc3RhdHMpCj4gICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiR3Vl c3QgLT4gSG9zdCBbTUIvc10gKG1pbi9tZWQvbWF4KSA9ICUuM2YvJS4zZi8lLjNmIiwKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXRzWzBdLCBzdGF0c1tsZW4oc3RhdHMpLzJdLCBzdGF0 c1stMV0pCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0c1swXSwgc3RhdHNbbGVuKHN0 YXRzKSAvIDJdLCBzdGF0c1stMV0pCj4gIAo+ICAgICAgICAgICAgICBkZWwgdGhyZWFkCj4gLQo+ ICAgICAgICAgICAgICBkZWwgZXhpdF9ldmVudAo+IC0gICAgICAgICAgICBkZWwgbG9hZHNbOl0K PiArCj4gKwo+ICsgICAgZGVmIGNsZWFuX3BvcnRzKHZtLCBjb25zb2xlcyk6Cj4gKyAgICAgICAg IiIiCj4gKyAgICAgICAgQ2xlYW4gc3RhdGUgb2YgYWxsIHBvcnRzIGFuZCBzZXQgcG9ydCB0byBk ZWZhdWx0IHN0YXRlLgo+ICsgICAgICAgIERlZmF1bHQgc3RhdGU6Cj4gKyAgICAgICAgICAgTm8g ZGF0YSBvbiBwb3J0IG9yIGluIHBvcnQgYnVmZmVyLgo+ICsgICAgICAgICAgIFJlYWQgbW9kZSA9 IGJsb2NraW5nLgo+ICsKPiArICAgICAgICBAcGFyYW0gY29uc29sZXM6IENvbnNvbGVzIHdoaWNo IHNob3VsZCBiZSBjbGVhbi4KPiArICAgICAgICAiIiIKPiArICAgICAgICAjIENoZWNrIGlmIHB5 dGhvbiBpcyBzdGlsbCBhbGl2ZQo+ICsgICAgICAgIHByaW50ICJDTEVBTkVEIgo+ICsgICAgICAg IG1hdGNoLCB0bXAgPSBfb25fZ3Vlc3QoImlzX2FsaXZlKCkiLCB2bSwgMTApCj4gKyAgICAgICAg aWYgKG1hdGNoID09IE5vbmUpIG9yIChtYXRjaCAhPSAwKToKPiArICAgICAgICAgICAgbG9nZ2lu Zy5lcnJvcigiUHl0aG9uIGRpZWQvaXMgc3R1Y2tlZC9oYXZlIHJlbWFpbmluZyB0aHJlYWRzIikK PiArICAgICAgICAgICAgdm1bMV0uY2xvc2UoKQo+ICsgICAgICAgICAgICB2bVsxXSA9IGt2bV90 ZXN0X3V0aWxzLndhaXRfZm9yX2xvZ2luKHZtWzBdLCAwLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KHBhcmFtcy5nZXQoImJvb3RfdGltZW91dCIsIDI0 MCkpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDIpCj4g KyAgICAgICAgICAgIChtYXRjaCwgZGF0YSkgPSBfb25fZ3Vlc3QoImtpbGxhbGwgLTkgcHl0aG9u ICIKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJiYgZWNobyAtbiBQ QVNTOiBweXRob24ga2lsbGVkIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJ8fCBlY2hvIC1uIFBBU1M6IHB5dGhvbiB3YXMgZGVhdGgiLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCAzMCkKPiArICAgICAgICAgICAgaWYgKG1hdGNo ID09IE5vbmUpOgo+ICsgICAgICAgICAgICAgICAgIyBraWxsYWxsIC05IGNvbW1hbmQgZGlkbid0 IGZpbmlzaGVkIC0gcHl0aG9uIHN0dWNrZWQKPiArICAgICAgICAgICAgICAgIHJhaXNlIGVycm9y LlRlc3RGYWlsKCJQeXRob24gaXMgcmVhbGx5IHN0dWNrZWQgLSAiCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3Qga2lsbCAtOSBpdCIpCj4gKwo+ICsgICAgICAg ICAgICBvbl9ndWVzdCgicm1tb2QgLWYgdmlydGlvX2NvbnNvbGUgJiYgZWNobyAtbiBQQVNTOiBy bW1vZCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICJ8fCBlY2hvIC1uIEZBSUw6IHJtbW9kIiwg dm0sIDEwKQo+ICsgICAgICAgICAgICBvbl9ndWVzdCgibW9kcHJvYmUgdmlydGlvX2NvbnNvbGUg Igo+ICsgICAgICAgICAgICAgICAgICAgICAiJiYgZWNobyAtbiBQQVNTOiBtb2Rwcm9iZSB8fCBl Y2hvIC1uIEZBSUw6IG1vZHByb2JlIiwKPiArICAgICAgICAgICAgICAgICAgICAgdm0sIDEwKQo+ ICsKPiArICAgICAgICAgICAgaW5pdF9ndWVzdCh2bSwgY29uc29sZXMpCj4gKyAgICAgICAgICAg IChtYXRjaCwgZGF0YSkgPSBfb25fZ3Vlc3QoInZpcnQuY2xlYW5fcG9ydCgnJXMnKSwxMDI0IiAl Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZXNbMF1bMF0u bmFtZSwgdm0sIDIpCj4gKyAgICAgICAgICAgIGlmIChtYXRjaCA9PSBOb25lKSBvciAobWF0Y2gg IT0gMCk6Cj4gKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiVmlydGlvLWNv bnNvbGUgZHJpdmVyIGlzIGlycmVwYXJhYmx5Igo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIiBibG9ja2VkLiBFdmVyeSBjb21kIGVuZCB3aXRoIHNpZyBLSUxMLiIpCj4g Kwo+ICsgICAgICAgIGZvciBjdHlwZSBpbiBjb25zb2xlczoKPiArICAgICAgICAgICAgZm9yIHBv cnQgaW4gY3R5cGU6Cj4gKyAgICAgICAgICAgICAgICBvcGVubmVkID0gcG9ydC5pc19vcGVuCj4g KyAgICAgICAgICAgICAgICBwb3J0LmNsZWFuX3BvcnQoKQo+ICsgICAgICAgICAgICAgICAgI29u X2d1ZXN0KCJ2aXJ0LmJsb2NraW5nKCclcycsIFRydWUpIiAlIHBvcnQubmFtZSwgdm0sIDIpCj4g KyAgICAgICAgICAgICAgICBvbl9ndWVzdCgidmlydC5jbGVhbl9wb3J0KCclcycpLDEwMjQiICUg cG9ydC5uYW1lLCB2bSwgMikKPiArICAgICAgICAgICAgICAgIGlmIG5vdCBvcGVubmVkOgo+ICsg ICAgICAgICAgICAgICAgICAgIHBvcnQuY2xvc2UoKQo+ICAKPiAKPiAgICAgICMgSU5JVElBTEla RQo+IC0gICAgdGVzdF9zbW9rZV9wYXJhbXMgPSBwYXJhbXMuZ2V0KCd2aXJ0aW9fY29uc29sZV9z bW9rZScsICcnKQo+IC0gICAgdGVzdF9sb29wYmFja19wYXJhbXMgPSBwYXJhbXMuZ2V0KCd2aXJ0 aW9fY29uc29sZV9sb29wYmFjaycsICcnKQo+IC0gICAgdGVzdF9wZXJmX3BhcmFtcyA9IHBhcmFt cy5nZXQoJ3ZpcnRpb19jb25zb2xlX3BlcmYnLCAnJykKPiArCj4gKyAgICB0c21va2VfcGFyYW1z ID0gcGFyYW1zLmdldCgndmlydGlvX2NvbnNvbGVfc21va2UnLCAnJykKPiArICAgIHRsb29wYmFj a19wYXJhbXMgPSBwYXJhbXMuZ2V0KCd2aXJ0aW9fY29uc29sZV9sb29wYmFjaycsICcnKQo+ICsg ICAgdHBlcmZfcGFyYW1zID0gcGFyYW1zLmdldCgndmlydGlvX2NvbnNvbGVfcGVyZicsICcnKQo+ ICAKPiAgICAgIG5vX3NlcmlhbHBvcnRzID0gMAo+ICAgICAgbm9fY29uc29sZXMgPSAwCj4gICAg ICAjIGNvbnNvbGVzIHJlcXVpcmVkIGZvciBTbW9rZSB0ZXN0Cj4gLSAgICBpZiAodGVzdF9zbW9r ZV9wYXJhbXMuY291bnQoJ3NlcmlhbHBvcnQnKSk6Cj4gKyAgICBpZiAodHNtb2tlX3BhcmFtcy5j b3VudCgnc2VyaWFscG9ydCcpKToKPiAgICAgICAgICBub19zZXJpYWxwb3J0cyA9IG1heCgyLCBu b19zZXJpYWxwb3J0cykKPiAtICAgIGlmICh0ZXN0X3Ntb2tlX3BhcmFtcy5jb3VudCgnY29uc29s ZScpKToKPiArICAgIGlmICh0c21va2VfcGFyYW1zLmNvdW50KCdjb25zb2xlJykpOgo+ICAgICAg ICAgIG5vX2NvbnNvbGVzID0gbWF4KDIsIG5vX2NvbnNvbGVzKQo+ICAgICAgIyBjb25zb2xlcyBy ZXF1aXJlZCBmb3IgTG9vcGJhY2sgdGVzdAo+IC0gICAgZm9yIHBhcmFtIGluIHRlc3RfbG9vcGJh Y2tfcGFyYW1zLnNwbGl0KCc7Jyk6Cj4gKyAgICBmb3IgcGFyYW0gaW4gdGxvb3BiYWNrX3BhcmFt cy5zcGxpdCgnOycpOgo+ICAgICAgICAgIG5vX3NlcmlhbHBvcnRzID0gbWF4KG5vX3NlcmlhbHBv cnRzLCBwYXJhbS5jb3VudCgnc2VyaWFscG9ydCcpKQo+ICAgICAgICAgIG5vX2NvbnNvbGVzID0g bWF4KG5vX2NvbnNvbGVzLCBwYXJhbS5jb3VudCgnY29uc29sZScpKQo+ICAgICAgIyBjb25zb2xl cyByZXF1aXJlZCBmb3IgUGVyZm9ybWFuY2UgdGVzdAo+IC0gICAgaWYgKHRlc3RfcGVyZl9wYXJh bXMuY291bnQoJ3NlcmlhbHBvcnQnKSk6Cj4gKyAgICBpZiAodHBlcmZfcGFyYW1zLmNvdW50KCdz ZXJpYWxwb3J0JykpOgo+ICAgICAgICAgIG5vX3NlcmlhbHBvcnRzID0gbWF4KDEsIG5vX3Nlcmlh bHBvcnRzKQo+IC0gICAgaWYgKHRlc3RfcGVyZl9wYXJhbXMuY291bnQoJ2NvbnNvbGUnKSk6Cj4g KyAgICBpZiAodHBlcmZfcGFyYW1zLmNvdW50KCdjb25zb2xlJykpOgo+ICAgICAgICAgIG5vX2Nv bnNvbGVzID0gbWF4KDEsIG5vX2NvbnNvbGVzKQo+ICAKPiAgICAgIGlmIChub19zZXJpYWxwb3J0 cyArIG5vX2NvbnNvbGVzKSA9PSAwOgo+IEBAIC05MzMsMTYgKzExMTEsMjcgQEAgZGVmIHJ1bl92 aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gIAo+ICAgICAgIyBBQ1RVQUwgVEVT VElORwo+ICAgICAgIyBEZWZpbmVzIGFsbCBhdmFpbGFibGUgY29uc29sZXM7IHRlc3RzIHVkZXYg YW5kIHN5c2ZzCj4gLSAgICBjb25zcyA9IFtdCj4gLSAgICBmb3IgbW9kZSBpbiBjb25zb2xlczoK PiAtICAgICAgICBmb3IgY29ucyBpbiBtb2RlOgo+IC0gICAgICAgICAgICBjb25zcy5hcHBlbmQo Y29uc1sxOjNdKQo+IC0gICAgaW5pdF9ndWVzdCh2bSwgMTApCj4gLSAgICBvbl9ndWVzdCgidmly dC5pbml0KCVzKSIgJSAoY29uc3MpLCB2bSwgMTApCj4gLQo+IC0gICAgY29uc29sZXMgPSB0ZXN0 X3Ntb2tlKHZtLCBjb25zb2xlcywgdGVzdF9zbW9rZV9wYXJhbXMpCj4gLSAgICB0ZXN0X2xvb3Bi YWNrKHZtLCBjb25zb2xlcywgdGVzdF9sb29wYmFja19wYXJhbXMpCj4gLSAgICB0ZXN0X3BlcmYo dm0sIGNvbnNvbGVzLCB0ZXN0X3BlcmZfcGFyYW1zKQo+ICsgICAgaW5pdF9ndWVzdCh2bSwgY29u c29sZXMpCj4gKwo+ICsgICAgdGVzdCA9IFN1YlRlc3QoKQo+ICsgICAgdGVzdC5zZXRfY2xlYW51 cF9mdW5jKGNsZWFuX3BvcnRzLCBbdm0sIGNvbnNvbGVzXSkKPiArICAgICNUZXN0IFNtb2tlCj4g KyAgICB0ZXN0X3Ntb2tlKHRlc3QsIHZtLCBjb25zb2xlcywgdHNtb2tlX3BhcmFtcykKPiArCj4g KyAgICAjVGVzdCBMb29wYmFjawo+ICsgICAgdGVzdC5kb190ZXN0KHRsb29wYmFjaywgW3ZtLCBj b25zb2xlcywgdGxvb3BiYWNrX3BhcmFtc10pCj4gKwo+ICsgICAgI1Rlc3QgUGVyZm9ybWFuY2UK PiArICAgIHRlc3QuZG9fdGVzdCh0cGVyZiwgW3ZtLCBjb25zb2xlcywgdHBlcmZfcGFyYW1zXSkK PiArCj4gKyAgICBsb2dnaW5nLmluZm8oKCJTdW1tYXJ5OiAlZCB0ZXN0cyBwYXNzZWQgICVkIHRl c3QgZmFpbGVkIDpcbiIgJQo+ICsgICAgICAgICAgICAgICAgICAodGVzdC5wYXNzZWQsIHRlc3Qu ZmFpbGVkKSkgKyB0ZXN0LmdldF90ZXh0X3Jlc3VsdCgpKQo+ICsgICAgbG9nZ2luZy5kZWJ1Zygo IlN1bW1hcnk6ICVkIHRlc3RzIHBhc3NlZCAgJWQgdGVzdCBmYWlsZWQgOlxuIiAlCj4gKyAgICAg ICAgICAgICAgICAgICAodGVzdC5wYXNzZWQsIHRlc3QuZmFpbGVkKSkgKyB0ZXN0LmdldF9mdWxs X3RleHRfcmVzdWx0KCkpCj4gKwo+ICsgICAgaWYgdGVzdC5pc19mYWlsZWQoKToKPiArICAgICAg ICByYWlzZSBlcnJvci5UZXN0RmFpbCgiVmlydGlvX2NvbnNvbGUgdGVzdCBGQUlMRUQuIikKPiAr Cj4gIAo+ICAgICAgIyBDTEVBTlVQCj4gICAgICB2bVsxXS5jbG9zZSgpCgoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkF1dG90ZXN0IG1haWxpbmcgbGlz dApBdXRvdGVzdEB0ZXN0Lmtlcm5lbC5vcmcKaHR0cDovL3Rlc3Qua2VybmVsLm9yZy9jZ2ktYmlu L21haWxtYW4vbGlzdGluZm8vYXV0b3Rlc3QK