From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=ALL_TRUSTED, T_SCC_BODY_TEXT_LINE,URI_LONG_REPEAT autolearn=no autolearn_force=no version=3.4.4 Received: from inbox.vuxu.org (inbox.vuxu.org [IPv6:::1]) by inbox.vuxu.org (Postfix) with ESMTP id E9F1A230B8 for ; Mon, 22 Jan 2024 11:44:06 +0100 (CET) Content-Type: multipart/mixed; boundary="===============1431887708703324074==" MIME-Version: 1.0 Subject: =?utf8?q?Re=3A_=5BPR_PATCH=5D_=5BUpdated=5D_jack=3A_fix_build_for_python3=2E12?= To: ml@inbox.vuxu.org From: oreo639 Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Mon, 22 Jan 2024 11:44:06 +0100 List-Id: Message-Id: <20240122104406.E9F1A230B8@inbox.vuxu.org> GitHub notification mails are now in MIME to allow UTF8. --===============1431887708703324074== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgb3JlbzYzOSBhZ2FpbnN0IG1hc3Rl ciBvbiB0aGUgdm9pZC1wYWNrYWdlcyByZXBvc2l0b3J5CgpodHRwczovL2dpdGh1Yi5jb20vb3Jl bzYzOS92b2lkLXBhY2thZ2VzIGphY2sKaHR0cHM6Ly9naXRodWIuY29tL3ZvaWQtbGludXgvdm9p ZC1wYWNrYWdlcy9wdWxsLzQ4MzIxCgpqYWNrOiBmaXggYnVpbGQgZm9yIHB5dGhvbjMuMTIKPCEt LSBVbmNvbW1lbnQgcmVsZXZhbnQgc2VjdGlvbnMgYW5kIGRlbGV0ZSBvcHRpb25zIHdoaWNoIGFy ZSBub3QgYXBwbGljYWJsZSAtLT4NCg0KIyMjIyBUZXN0aW5nIHRoZSBjaGFuZ2VzDQotIEkgdGVz dGVkIHRoZSBjaGFuZ2VzIGluIHRoaXMgUFI6ICoqYnJpZWZseSoqDQoNCjwhLS0NCiMjIyMgTmV3 IHBhY2thZ2UNCi0gVGhpcyBuZXcgcGFja2FnZSBjb25mb3JtcyB0byB0aGUgW3BhY2thZ2UgcmVx dWlyZW1lbnRzXShodHRwczovL2dpdGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Js b2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCNwYWNrYWdlLXJlcXVpcmVtZW50cyk6ICoqWUVTKip8 KipOTyoqDQotLT4NCg0KPCEtLSBOb3RlOiBJZiB0aGUgYnVpbGQgaXMgbGlrZWx5IHRvIHRha2Ug bW9yZSB0aGFuIDIgaG91cnMsIHBsZWFzZSBhZGQgY2kgc2tpcCB0YWcgYXMgZGVzY3JpYmVkIGlu DQpodHRwczovL2dpdGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVy L0NPTlRSSUJVVElORy5tZCNjb250aW51b3VzLWludGVncmF0aW9uDQphbmQgdGVzdCBhdCBsZWFz dCBvbmUgbmF0aXZlIGJ1aWxkIGFuZCwgaWYgc3VwcG9ydGVkLCBhdCBsZWFzdCBvbmUgY3Jvc3Mg YnVpbGQuDQpJZ25vcmUgdGhpcyBzZWN0aW9uIGlmIHRoaXMgUFIgaXMgbm90IHNraXBwaW5nIENJ Lg0KLS0+DQo8IS0tDQojIyMjIExvY2FsIGJ1aWxkIHRlc3RpbmcNCi0gSSBidWlsdCB0aGlzIFBS IGxvY2FsbHkgZm9yIG15IG5hdGl2ZSBhcmNoaXRlY3R1cmUsIChBUkNILUxJQkMpDQotIEkgYnVp bHQgdGhpcyBQUiBsb2NhbGx5IGZvciB0aGVzZSBhcmNoaXRlY3R1cmVzIChpZiBzdXBwb3J0ZWQu IG1hcmsgY3Jvc3NidWlsZHMpOg0KICAtIGFhcmNoNjQtbXVzbA0KICAtIGFybXY3bA0KICAtIGFy bXY2bC1tdXNsDQotLT4NCgoKQSBwYXRjaCBmaWxlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Zv aWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzQ4MzIxLnBhdGNoIGlzIGF0dGFjaGVk --===============1431887708703324074== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-jack-48321.patch" RnJvbSA1NzM0NjIxOGI0NGI4OTdjMDBkODI4MzU4NDk1NzM0ODBkZWE5MWE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBvcmVvNjM5IDxvcmVvNjM5MUBnbWFpbC5jb20+CkRhdGU6IE1v biwgMjIgSmFuIDIwMjQgMDI6NDE6NTIgLTA4MDAKU3ViamVjdDogW1BBVENIXSBqYWNrOiBmaXgg YnVpbGQgZm9yIHB5dGhvbjMuMTIKCi0tLQogc3JjcGtncy9qYWNrL3BhdGNoZXMvdXBkYXRlLXdh Zi5wYXRjaCB8IDM0NzcgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjcGtncy9qYWNrL3Rl bXBsYXRlICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMzQ3OCBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy9q YWNrL3BhdGNoZXMvdXBkYXRlLXdhZi5wYXRjaAoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvamFjay9w YXRjaGVzL3VwZGF0ZS13YWYucGF0Y2ggYi9zcmNwa2dzL2phY2svcGF0Y2hlcy91cGRhdGUtd2Fm LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlZjUwNDcx MzFkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmNwa2dzL2phY2svcGF0Y2hlcy91cGRhdGUtd2Fm LnBhdGNoCkBAIC0wLDAgKzEsMzQ3NyBAQAorRnJvbSAyNTA0MjAzODFiMWE2OTc0Nzk4OTM5YWQ3 MTA0YWIxYTRiOWE5OTk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlscyBQaGls aXBwc2VuIDxuaWxzQHRpcHRvZS5kZT4KK0RhdGU6IFR1ZSwgMjkgQXVnIDIwMjMgMTI6NDE6NDYg KzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIHRvIHdhZiAyLjAuMjYKKworVGhpcyBtYWtl cyB3YWYgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEyIGFnYWluLgorCitBbHNvLCBhcHBseSBt b2RpZmljYXRpb25zIG5lZWRlZCBmb3IgTWFjT1MgYW5kIGFkZCBhcyBhIHBhdGNoIGZpbGUgKHNl ZQorY29tbWl0cyAwZjJlM2IyIGFuZCBkYzZjOTk1KS4KKworU2lnbmVkLW9mZi1ieTogTmlscyBQ aGlsaXBwc2VuIDxuaWxzQHRpcHRvZS5kZT4KKy0tLQorIHdhZiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICA3ICstCisgd2FmbGliLW1hY29zLW1vZHMucGF0Y2ggICAgICAgICAg ICAgfCAgMTggKworIHdhZmxpYi9CdWlsZC5weSAgICAgICAgICAgICAgICAgICAgIHwgIDQ3ICst Cisgd2FmbGliL0NvbmZpZ1NldC5weSAgICAgICAgICAgICAgICAgfCAgIDIgKy0KKyB3YWZsaWIv Q29uZmlndXJlLnB5ICAgICAgICAgICAgICAgICB8ICA0NiArLQorIHdhZmxpYi9Db250ZXh0LnB5 ICAgICAgICAgICAgICAgICAgIHwgIDI0ICstCisgd2FmbGliL0xvZ3MucHkgICAgICAgICAgICAg ICAgICAgICAgfCAgIDkgKy0KKyB3YWZsaWIvTm9kZS5weSAgICAgICAgICAgICAgICAgICAgICB8 ICAgMyArLQorIHdhZmxpYi9PcHRpb25zLnB5ICAgICAgICAgICAgICAgICAgIHwgIDMxICstCisg d2FmbGliL1J1bm5lci5weSAgICAgICAgICAgICAgICAgICAgfCAgMjcgKy0KKyB3YWZsaWIvU2Ny aXB0aW5nLnB5ICAgICAgICAgICAgICAgICB8ICAyNyArLQorIHdhZmxpYi9UYXNrLnB5ICAgICAg ICAgICAgICAgICAgICAgIHwgIDQ4ICsrLQorIHdhZmxpYi9UYXNrR2VuLnB5ICAgICAgICAgICAg ICAgICAgIHwgIDE2ICstCisgd2FmbGliL1Rvb2xzL2NfYWxpYXNlcy5weSAgICAgICAgICAgfCAg MTAgKy0KKyB3YWZsaWIvVG9vbHMvY19jb25maWcucHkgICAgICAgICAgICB8ICAzNyArLQorIHdh ZmxpYi9Ub29scy9jX3ByZXByb2MucHkgICAgICAgICAgIHwgICA2ICstCisgd2FmbGliL1Rvb2xz L2NfdGVzdHMucHkgICAgICAgICAgICAgfCAgMTggKy0KKyB3YWZsaWIvVG9vbHMvY2Nyb290LnB5 ICAgICAgICAgICAgICB8ICAyMCArLQorIHdhZmxpYi9Ub29scy9jb21waWxlcl9jLnB5ICAgICAg ICAgIHwgIDI1ICstCisgd2FmbGliL1Rvb2xzL2NvbXBpbGVyX2N4eC5weSAgICAgICAgfCAgMjUg Ky0KKyB3YWZsaWIvVG9vbHMvaXJpeGNjLnB5ICAgICAgICAgICAgICB8ICAxNCArLQorIHdhZmxp Yi9Ub29scy9tc3ZjLnB5ICAgICAgICAgICAgICAgIHwgIDQ1ICstCisgd2FmbGliL1Rvb2xzL3dh Zl91bml0X3Rlc3QucHkgICAgICAgfCAgMTQgKy0KKyB3YWZsaWIvVXRpbHMucHkgICAgICAgICAg ICAgICAgICAgICB8ICA2MCArKy0KKyB3YWZsaWIvYW5zaXRlcm0ucHkgICAgICAgICAgICAgICAg ICB8ICAgMiArLQorIHdhZmxpYi9leHRyYXMvY2xhbmdfY3Jvc3MucHkgICAgICAgIHwgIDkyICsr KysKKyB3YWZsaWIvZXh0cmFzL2NsYW5nX2Nyb3NzX2NvbW1vbi5weSB8IDExMyArKysrKworIHdh ZmxpYi9leHRyYXMvY2xhbmd4eF9jcm9zcy5weSAgICAgIHwgMTA2ICsrKysrCisgd2FmbGliL2V4 dHJhcy9jbGFzc2ljX3J1bm5lci5weSAgICAgfCAgNjggKysrCisgd2FmbGliL2V4dHJhcy9jb2xv cl9tc3ZjLnB5ICAgICAgICAgfCAgNTkgKysrCisgd2FmbGliL2V4dHJhcy9mY19mdWppdHN1LnB5 ICAgICAgICAgfCAgNTIgKysrCisgd2FmbGliL2V4dHJhcy9mY19uZm9ydC5weSAgICAgICAgICAg fCAgNTIgKysrCisgd2FmbGliL2V4dHJhcy9nZW5weWJpbmQucHkgICAgICAgICAgfCAxOTQgKysr KysrKysrCisgd2FmbGliL2V4dHJhcy9oYXhlLnB5ICAgICAgICAgICAgICAgfCAxNTQgKysrKysr KworIHdhZmxpYi9leHRyYXMvbXN2Y19wZGIucHkgICAgICAgICAgIHwgIDQ2ICsrCisgd2FmbGli L2V4dHJhcy9zcGhpbngucHkgICAgICAgICAgICAgfCAxMjAgKysrKysrCisgd2FmbGliL2V4dHJh cy93YWZjYWNoZS5weSAgICAgICAgICAgfCA2NDggKysrKysrKysrKysrKysrKysrKysrKysrKysr KworIHdhZmxpYi9leHRyYXMveGNvZGU2LnB5ICAgICAgICAgICAgIHwgIDE4ICstCisgd2FmbGli L2ZpeHB5Mi5weSAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KKyB3YWZsaWIvcHJvY2Vzc29y LnB5ICAgICAgICAgICAgICAgICB8ICAgNCArCisgNDAgZmlsZXMgY2hhbmdlZCwgMjExNCBpbnNl cnRpb25zKCspLCAxOTUgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxpYi1t YWNvcy1tb2RzLnBhdGNoCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMvY2xhbmdf Y3Jvc3MucHkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgd2FmbGliL2V4dHJhcy9jbGFuZ19jcm9zc19j b21tb24ucHkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgd2FmbGliL2V4dHJhcy9jbGFuZ3h4X2Nyb3Nz LnB5CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMvY2xhc3NpY19ydW5uZXIucHkK KyBjcmVhdGUgbW9kZSAxMDA2NDQgd2FmbGliL2V4dHJhcy9jb2xvcl9tc3ZjLnB5CisgY3JlYXRl IG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMvZmNfZnVqaXRzdS5weQorIGNyZWF0ZSBtb2RlIDEw MDY0NCB3YWZsaWIvZXh0cmFzL2ZjX25mb3J0LnB5CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxp Yi9leHRyYXMvZ2VucHliaW5kLnB5CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMv aGF4ZS5weQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB3YWZsaWIvZXh0cmFzL21zdmNfcGRiLnB5Cisg Y3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMvc3BoaW54LnB5CisgY3JlYXRlIG1vZGUg MTAwNjQ0IHdhZmxpYi9leHRyYXMvd2FmY2FjaGUucHkKKworZGlmZiAtLWdpdCBhL3dhZiBiL3dh ZgoraW5kZXggODQ1ZmJhNWU5Li4zOGIyYzkxMDYgMTAwNzU1CistLS0gYS93YWYKKysrKyBiL3dh ZgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9lbnYg cHl0aG9uCisgIyBlbmNvZGluZzogbGF0aW4tMQorICMgVGhvbWFzIE5hZ3ksIDIwMDUtMjAxOAor ICMKK0BAIC0zMiw3ICszMiw3IEBAIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIAorIGlt cG9ydCBvcywgc3lzLCBpbnNwZWN0CisgCistVkVSU0lPTj0iMi4wLjEyIgorK1ZFUlNJT049IjIu MC4yNiIKKyBSRVZJU0lPTj0ieCIKKyBHSVQ9IngiCisgSU5TVEFMTD0ieCIKK0BAIC0xNDIsNiAr MTQyLDkgQEAgZGVmIGZpbmRfbGliKCk6CisgCWlmIG5hbWUuZW5kc3dpdGgoJ3dhZi1saWdodCcp OgorIAkJdyA9IHRlc3QoYmFzZSkKKyAJCWlmIHc6IHJldHVybiB3CisrCQlmb3IgZGlyIGluIHN5 cy5wYXRoOgorKwkJCWlmIHRlc3QoZGlyKToKKysJCQkJcmV0dXJuIGRpcgorIAkJZXJyKCd3YWYt bGlnaHQgcmVxdWlyZXMgd2FmbGliIC0+IGV4cG9ydCBXQUZESVI9L2ZvbGRlcicpCisgCisgCWRp cm5hbWUgPSAnJXMtJXMtJXMnICUgKFdBRiwgVkVSU0lPTiwgUkVWSVNJT04pCitkaWZmIC0tZ2l0 IGEvd2FmbGliLW1hY29zLW1vZHMucGF0Y2ggYi93YWZsaWItbWFjb3MtbW9kcy5wYXRjaAorbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uOWUyYzhhM2RlCistLS0gL2Rldi9u dWxsCisrKysgYi93YWZsaWItbWFjb3MtbW9kcy5wYXRjaAorQEAgLTAsMCArMSwxOCBAQAorK2Rp ZmYgLS1naXQgYS93YWZsaWIvVG9vbHMvY2Nyb290LnB5IGIvd2FmbGliL1Rvb2xzL2Njcm9vdC5w eQorK2luZGV4IGNmZWY4YmY1Li40ODQ4NDZmNSAxMDA2NDQKKystLS0gYS93YWZsaWIvVG9vbHMv Y2Nyb290LnB5CisrKysrIGIvd2FmbGliL1Rvb2xzL2Njcm9vdC5weQorK0BAIC01NzUsMTIgKzU3 NSwxMCBAQCBkZWYgYXBwbHlfdm51bShzZWxmKToKKysgCisrIAljbnVtID0gZ2V0YXR0cihzZWxm LCAnY251bScsIHN0cihudW1zWzBdKSkKKysgCWNudW1zID0gY251bS5zcGxpdCgnLicpCisrLQlp ZiBsZW4oY251bXMpPmxlbihudW1zKSBvciBudW1zWzA6bGVuKGNudW1zKV0gIT0gY251bXM6Cisr LQkJcmFpc2UgRXJyb3JzLldhZkVycm9yKCdpbnZhbGlkIGNvbXBhdGliaWxpdHkgdmVyc2lvbiAl cycgJSBjbnVtKQorKyAKKysgCWxpYm5hbWUgPSBub2RlLm5hbWUKKysgCWlmIGxpYm5hbWUuZW5k c3dpdGgoJy5keWxpYicpOgorKy0JCW5hbWUzID0gbGlibmFtZS5yZXBsYWNlKCcuZHlsaWInLCAn LiVzLmR5bGliJyAlIHNlbGYudm51bSkKKysrCQluYW1lMyA9IGxpYm5hbWUucmVwbGFjZSgnLmR5 bGliJywgJy4lcy5keWxpYicgJSBjbnVtc1swXSkKKysgCQluYW1lMiA9IGxpYm5hbWUucmVwbGFj ZSgnLmR5bGliJywgJy4lcy5keWxpYicgJSBjbnVtKQorKyAJZWxzZToKKysgCQluYW1lMyA9IGxp Ym5hbWUgKyAnLicgKyBzZWxmLnZudW0KK2RpZmYgLS1naXQgYS93YWZsaWIvQnVpbGQucHkgYi93 YWZsaWIvQnVpbGQucHkKK2luZGV4IGM5NjYxZGYxNS4uYjQ5ZGQ4MzAyIDEwMDY0NAorLS0tIGEv d2FmbGliL0J1aWxkLnB5CisrKysgYi93YWZsaWIvQnVpbGQucHkKK0BAIC0xMDQsNyArMTA0LDcg QEAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3cpOgorIAkJIiIiQW1vdW50IG9mIGpvYnMgdG8gcnVu IGluIHBhcmFsbGVsIiIiCisgCisgCQlzZWxmLnRhcmdldHMgPSBPcHRpb25zLm9wdGlvbnMudGFy Z2V0cworLQkJIiIiTGlzdCBvZiB0YXJnZXRzIHRvIGJ1aWxkIChkZWZhdWx0OiBcKikiIiIKKysJ CSIiIkxpc3Qgb2YgdGFyZ2V0cyB0byBidWlsZCAoZGVmYXVsdDogXFwqKSIiIgorIAorIAkJc2Vs Zi5rZWVwID0gT3B0aW9ucy5vcHRpb25zLmtlZXAKKyAJCSIiIldoZXRoZXIgdGhlIGJ1aWxkIHNo b3VsZCBjb250aW51ZSBwYXN0IGVycm9ycyIiIgorQEAgLTc1MywxMCArNzUzLDEyIEBAIGRlZiB0 Z3Bvc3QodGcpOgorIAkJZWxzZToKKyAJCQlsbiA9IHNlbGYubGF1bmNoX25vZGUoKQorIAkJCWlm IGxuLmlzX2NoaWxkX29mKHNlbGYuYmxkbm9kZSk6CistCQkJCUxvZ3Mud2FybignQnVpbGRpbmcg ZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LCBmb3JjaW5nIC0tdGFyZ2V0cz0qJykKKysJCQkJaWYg TG9ncy52ZXJib3NlID4gMToKKysJCQkJCUxvZ3Mud2FybignQnVpbGRpbmcgZnJvbSB0aGUgYnVp bGQgZGlyZWN0b3J5LCBmb3JjaW5nIC0tdGFyZ2V0cz0qJykKKyAJCQkJbG4gPSBzZWxmLnNyY25v ZGUKKyAJCQllbGlmIG5vdCBsbi5pc19jaGlsZF9vZihzZWxmLnNyY25vZGUpOgorLQkJCQlMb2dz Lndhcm4oJ0NXRCAlcyBpcyBub3QgdW5kZXIgJXMsIGZvcmNpbmcgLS10YXJnZXRzPSogKHJ1biBk aXN0Y2xlYW4/KScsIGxuLmFic3BhdGgoKSwgc2VsZi5zcmNub2RlLmFic3BhdGgoKSkKKysJCQkJ aWYgTG9ncy52ZXJib3NlID4gMToKKysJCQkJCUxvZ3Mud2FybignQ1dEICVzIGlzIG5vdCB1bmRl ciAlcywgZm9yY2luZyAtLXRhcmdldHM9KiAocnVuIGRpc3RjbGVhbj8pJywgbG4uYWJzcGF0aCgp LCBzZWxmLnNyY25vZGUuYWJzcGF0aCgpKQorIAkJCQlsbiA9IHNlbGYuc3Jjbm9kZQorIAorIAkJ CWRlZiBpc19wb3N0KHRnLCBsbik6CitAQCAtMTA1NCw3ICsxMDU2LDcgQEAgZGVmIHBvc3RfcnVu KHNlbGYpOgorIAlkZWYgZ2V0X2luc3RhbGxfcGF0aChzZWxmLCBkZXN0ZGlyPVRydWUpOgorIAkJ IiIiCisgCQlSZXR1cm5zIHRoZSBkZXN0aW5hdGlvbiBwYXRoIHdoZXJlIGZpbGVzIHdpbGwgYmUg aW5zdGFsbGVkLCBwcmUtcGVuZGluZyBgZGVzdGRpcmAuCistCQkKKysKKyAJCVJlbGF0aXZlIHBh dGhzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gYFBSRUZJWGAgaWYgbm8gYGRlc3Rk aXJgIGlzIGdpdmVuLgorIAorIAkJOnJ0eXBlOiBzdHJpbmcKK0BAIC0xMDYyLDExICsxMDY0LDEx IEBAIGRlZiBnZXRfaW5zdGFsbF9wYXRoKHNlbGYsIGRlc3RkaXI9VHJ1ZSk6CisgCQlpZiBpc2lu c3RhbmNlKHNlbGYuaW5zdGFsbF90bywgTm9kZS5Ob2RlKToKKyAJCQlkZXN0ID0gc2VsZi5pbnN0 YWxsX3RvLmFic3BhdGgoKQorIAkJZWxzZToKKy0JCQlkZXN0ID0gVXRpbHMuc3Vic3RfdmFycyhz ZWxmLmluc3RhbGxfdG8sIHNlbGYuZW52KQorKwkJCWRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKFV0 aWxzLnN1YnN0X3ZhcnMoc2VsZi5pbnN0YWxsX3RvLCBzZWxmLmVudikpCisgCQlpZiBub3Qgb3Mu cGF0aC5pc2FicyhkZXN0KToKKy0JCSAgICBkZXN0ID0gb3MucGF0aC5qb2luKHNlbGYuZW52LlBS RUZJWCwgZGVzdCkKKysJCQlkZXN0ID0gb3MucGF0aC5qb2luKHNlbGYuZW52LlBSRUZJWCwgZGVz dCkKKyAJCWlmIGRlc3RkaXIgYW5kIE9wdGlvbnMub3B0aW9ucy5kZXN0ZGlyOgorLQkJCWRlc3Qg PSBvcy5wYXRoLmpvaW4oT3B0aW9ucy5vcHRpb25zLmRlc3RkaXIsIG9zLnBhdGguc3BsaXRkcml2 ZShkZXN0KVsxXS5sc3RyaXAob3Muc2VwKSkKKysJCQlkZXN0ID0gT3B0aW9ucy5vcHRpb25zLmRl c3RkaXIucnN0cmlwKG9zLnNlcCkgKyBvcy5zZXAgKyBvcy5wYXRoLnNwbGl0ZHJpdmUoZGVzdClb MV0ubHN0cmlwKG9zLnNlcCkKKyAJCXJldHVybiBkZXN0CisgCisgCWRlZiBjb3B5X2Z1bihzZWxm LCBzcmMsIHRndCk6CitAQCAtMTE2MCwxMSArMTE2MiwxOSBAQCBkZWYgZG9faW5zdGFsbChzZWxm LCBzcmMsIHRndCwgbGJsLCAqKmt3KToKKyAJCQkJIyBzYW1lIHNpemUgYW5kIGlkZW50aWNhbCB0 aW1lc3RhbXBzIC0+IG1ha2Ugbm8gY29weQorIAkJCQlpZiBzdDEuc3RfbXRpbWUgKyAyID49IHN0 Mi5zdF9tdGltZSBhbmQgc3QxLnN0X3NpemUgPT0gc3QyLnN0X3NpemU6CisgCQkJCQlpZiBub3Qg c2VsZi5nZW5lcmF0b3IuYmxkLnByb2dyZXNzX2JhcjoKKy0JCQkJCQlMb2dzLmluZm8oJy0gaW5z dGFsbCAlcyAoZnJvbSAlcyknLCB0Z3QsIGxibCkKKysKKysJCQkJCQljMSA9IExvZ3MuY29sb3Jz Lk5PUk1BTAorKwkJCQkJCWMyID0gTG9ncy5jb2xvcnMuQkxVRQorKworKwkJCQkJCUxvZ3MuaW5m bygnJXMtIGluc3RhbGwgJXMlcyVzIChmcm9tICVzKScsIGMxLCBjMiwgdGd0LCBjMSwgbGJsKQor IAkJCQkJcmV0dXJuIEZhbHNlCisgCisgCQlpZiBub3Qgc2VsZi5nZW5lcmF0b3IuYmxkLnByb2dy ZXNzX2JhcjoKKy0JCQlMb2dzLmluZm8oJysgaW5zdGFsbCAlcyAoZnJvbSAlcyknLCB0Z3QsIGxi bCkKKysKKysJCQljMSA9IExvZ3MuY29sb3JzLk5PUk1BTAorKwkJCWMyID0gTG9ncy5jb2xvcnMu QkxVRQorKworKwkJCUxvZ3MuaW5mbygnJXMrIGluc3RhbGwgJXMlcyVzIChmcm9tICVzKScsIGMx LCBjMiwgdGd0LCBjMSwgbGJsKQorIAorIAkJIyBHaXZlIGJlc3QgYXR0ZW1wdCBhdCBtYWtpbmcg ZGVzdGluYXRpb24gb3ZlcndyaXRhYmxlLAorIAkJIyBsaWtlIHRoZSAnaW5zdGFsbCcgdXRpbGl0 eSB1c2VkIGJ5ICdtYWtlIGluc3RhbGwnIGRvZXMuCitAQCAtMTIyMSwxNCArMTIzMSwxOCBAQCBk ZWYgZG9fbGluayhzZWxmLCBzcmMsIHRndCwgKiprdyk6CisgCQkiIiIKKyAJCWlmIG9zLnBhdGgu aXNsaW5rKHRndCkgYW5kIG9zLnJlYWRsaW5rKHRndCkgPT0gc3JjOgorIAkJCWlmIG5vdCBzZWxm LmdlbmVyYXRvci5ibGQucHJvZ3Jlc3NfYmFyOgorLQkJCQlMb2dzLmluZm8oJy0gc3ltbGluayAl cyAodG8gJXMpJywgdGd0LCBzcmMpCisrCQkJCWMxID0gTG9ncy5jb2xvcnMuTk9STUFMCisrCQkJ CWMyID0gTG9ncy5jb2xvcnMuQkxVRQorKwkJCQlMb2dzLmluZm8oJyVzLSBzeW1saW5rICVzJXMl cyAodG8gJXMpJywgYzEsIGMyLCB0Z3QsIGMxLCBzcmMpCisgCQllbHNlOgorIAkJCXRyeToKKyAJ CQkJb3MucmVtb3ZlKHRndCkKKyAJCQlleGNlcHQgT1NFcnJvcjoKKyAJCQkJcGFzcworIAkJCWlm IG5vdCBzZWxmLmdlbmVyYXRvci5ibGQucHJvZ3Jlc3NfYmFyOgorLQkJCQlMb2dzLmluZm8oJysg c3ltbGluayAlcyAodG8gJXMpJywgdGd0LCBzcmMpCisrCQkJCWMxID0gTG9ncy5jb2xvcnMuTk9S TUFMCisrCQkJCWMyID0gTG9ncy5jb2xvcnMuQkxVRQorKwkJCQlMb2dzLmluZm8oJyVzKyBzeW1s aW5rICVzJXMlcyAodG8gJXMpJywgYzEsIGMyLCB0Z3QsIGMxLCBzcmMpCisgCQkJb3Muc3ltbGlu ayhzcmMsIHRndCkKKyAJCQlzZWxmLmZpeF9wZXJtcyh0Z3QpCisgCitAQCAtMTIzNyw3ICsxMjUx LDkgQEAgZGVmIGRvX3VuaW5zdGFsbChzZWxmLCBzcmMsIHRndCwgbGJsLCAqKmt3KToKKyAJCVNl ZSA6cHk6bWV0aDpgd2FmbGliLkJ1aWxkLmluc3QuZG9faW5zdGFsbGAKKyAJCSIiIgorIAkJaWYg bm90IHNlbGYuZ2VuZXJhdG9yLmJsZC5wcm9ncmVzc19iYXI6CistCQkJTG9ncy5pbmZvKCctIHJl bW92ZSAlcycsIHRndCkKKysJCQljMSA9IExvZ3MuY29sb3JzLk5PUk1BTAorKwkJCWMyID0gTG9n cy5jb2xvcnMuQkxVRQorKwkJCUxvZ3MuaW5mbygnJXMtIHJlbW92ZSAlcyVzJXMnLCBjMSwgYzIs IHRndCwgYzEpCisgCisgCQkjc2VsZi51bmluc3RhbGwuYXBwZW5kKHRndCkKKyAJCXRyeToKK0BA IC0xMjU3LDcgKzEyNzMsOSBAQCBkZWYgZG9fdW5saW5rKHNlbGYsIHNyYywgdGd0LCAqKmt3KToK KyAJCSIiIgorIAkJdHJ5OgorIAkJCWlmIG5vdCBzZWxmLmdlbmVyYXRvci5ibGQucHJvZ3Jlc3Nf YmFyOgorLQkJCQlMb2dzLmluZm8oJy0gcmVtb3ZlICVzJywgdGd0KQorKwkJCQljMSA9IExvZ3Mu Y29sb3JzLk5PUk1BTAorKwkJCQljMiA9IExvZ3MuY29sb3JzLkJMVUUKKysJCQkJTG9ncy5pbmZv KCclcy0gcmVtb3ZlICVzJXMlcycsIGMxLCBjMiwgdGd0LCBjMSkKKyAJCQlvcy5yZW1vdmUodGd0 KQorIAkJZXhjZXB0IE9TRXJyb3I6CisgCQkJcGFzcworQEAgLTEzMTgsNyArMTMzNiw4IEBAIGRl ZiBidWlsZChibGQpOgorIAkJCWxzdCA9IFtdCisgCQkJZm9yIGVudiBpbiBzZWxmLmFsbF9lbnZz LnZhbHVlcygpOgorIAkJCQlsc3QuZXh0ZW5kKHNlbGYucm9vdC5maW5kX29yX2RlY2xhcmUoZikg Zm9yIGYgaW4gZW52W0NGR19GSUxFU10pCistCQkJZm9yIG4gaW4gc2VsZi5ibGRub2RlLmFudF9n bG9iKCcqKi8qJywgZXhjbD0nLmxvY2sqICpjb25mX2NoZWNrXyovKiogY29uZmlnLmxvZyBjNGNo ZS8qJywgcXVpZXQ9VHJ1ZSk6CisrCQkJZXhjbHVkZWRfZGlycyA9ICcubG9jayogKmNvbmZfY2hl Y2tfKi8qKiBjb25maWcubG9nICVzLyonICUgQ0FDSEVfRElSCisrCQkJZm9yIG4gaW4gc2VsZi5i bGRub2RlLmFudF9nbG9iKCcqKi8qJywgZXhjbD1leGNsdWRlZF9kaXJzLCBxdWlldD1UcnVlKToK KyAJCQkJaWYgbiBpbiBsc3Q6CisgCQkJCQljb250aW51ZQorIAkJCQluLmRlbGV0ZSgpCitkaWZm IC0tZ2l0IGEvd2FmbGliL0NvbmZpZ1NldC5weSBiL3dhZmxpYi9Db25maWdTZXQucHkKK2luZGV4 IDg0NzM2YzljOC4uOTAxZmJhNmMwIDEwMDY0NAorLS0tIGEvd2FmbGliL0NvbmZpZ1NldC5weQor KysrIGIvd2FmbGliL0NvbmZpZ1NldC5weQorQEAgLTExLDcgKzExLDcgQEAKKyAKKyBpbXBvcnQg Y29weSwgcmUsIG9zCisgZnJvbSB3YWZsaWIgaW1wb3J0IExvZ3MsIFV0aWxzCistcmVfaW1wID0g cmUuY29tcGlsZSgnXigjKSo/KFteIz1dKj8pXCA9XCAoLio/KSQnLCByZS5NKQorK3JlX2ltcCA9 IHJlLmNvbXBpbGUocideKCMpKj8oW14jPV0qPylcID1cICguKj8pJCcsIHJlLk0pCisgCisgY2xh c3MgQ29uZmlnU2V0KG9iamVjdCk6CisgCSIiIgorZGlmZiAtLWdpdCBhL3dhZmxpYi9Db25maWd1 cmUucHkgYi93YWZsaWIvQ29uZmlndXJlLnB5CitpbmRleCBkMGE0NzkzYTguLmY2ZmRjNGU5NCAx MDA2NDQKKy0tLSBhL3dhZmxpYi9Db25maWd1cmUucHkKKysrKyBiL3dhZmxpYi9Db25maWd1cmUu cHkKK0BAIC0xMjUsNyArMTI1LDcgQEAgZGVmIGluaXRfZGlycyhzZWxmKToKKyAJCXNlbGYuYmxk bm9kZS5ta2RpcigpCisgCisgCQlpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmJsZG5vZGUuYWJz cGF0aCgpKToKKy0JCQljb25mLmZhdGFsKCdDb3VsZCBub3QgY3JlYXRlIHRoZSBidWlsZCBkaXJl Y3RvcnkgJXMnICUgc2VsZi5ibGRub2RlLmFic3BhdGgoKSkKKysJCQlzZWxmLmZhdGFsKCdDb3Vs ZCBub3QgY3JlYXRlIHRoZSBidWlsZCBkaXJlY3RvcnkgJXMnICUgc2VsZi5ibGRub2RlLmFic3Bh dGgoKSkKKyAKKyAJZGVmIGV4ZWN1dGUoc2VsZik6CisgCQkiIiIKK0BAIC0xODAsNiArMTgwLDcg QEAgZGVmIGV4ZWN1dGUoc2VsZik6CisgCQllbnYuaGFzaCA9IHNlbGYuaGFzaAorIAkJZW52LmZp bGVzID0gc2VsZi5maWxlcworIAkJZW52LmVudmlyb24gPSBkaWN0KHNlbGYuZW52aXJvbikKKysJ CWVudi5sYXVuY2hfZGlyID0gQ29udGV4dC5sYXVuY2hfZGlyCisgCisgCQlpZiBub3QgKHNlbGYu ZW52Lk5PX0xPQ0tfSU5fUlVOIG9yIGVudi5lbnZpcm9uLmdldCgnTk9fTE9DS19JTl9SVU4nKSBv ciBnZXRhdHRyKE9wdGlvbnMub3B0aW9ucywgJ25vX2xvY2tfaW5fcnVuJykpOgorIAkJCWVudi5z dG9yZShvcy5wYXRoLmpvaW4oQ29udGV4dC5ydW5fZGlyLCBPcHRpb25zLmxvY2tmaWxlKSkKK0BA IC00MzgsNyArNDM5LDcgQEAgZGVmIGZpbmRfcHJvZ3JhbShzZWxmLCBmaWxlbmFtZSwgKiprdyk6 CisgCisgCXZhciA9IGt3LmdldCgndmFyJywgJycpCisgCWlmIG5vdCB2YXI6CistCQl2YXIgPSBy ZS5zdWIocidbLS5dJywgJ18nLCBmaWxlbmFtZVswXS51cHBlcigpKQorKwkJdmFyID0gcmUuc3Vi KHInXFcnLCAnXycsIGZpbGVuYW1lWzBdLnVwcGVyKCkpCisgCisgCXBhdGhfbGlzdCA9IGt3Lmdl dCgncGF0aF9saXN0JywgJycpCisgCWlmIHBhdGhfbGlzdDoKK0BAIC01MDcsMjMgKzUwOCwyNyBA QCBkZWYgZmluZF9iaW5hcnkoc2VsZiwgZmlsZW5hbWVzLCBleHRzLCBwYXRocyk6CisgQGNvbmYK KyBkZWYgcnVuX2J1aWxkKHNlbGYsICprLCAqKmt3KToKKyAJIiIiCistCUNyZWF0ZSBhIHRlbXBv cmFyeSBidWlsZCBjb250ZXh0IHRvIGV4ZWN1dGUgYSBidWlsZC4gQSByZWZlcmVuY2UgdG8gdGhh dCBidWlsZAorLQljb250ZXh0IGlzIGtlcHQgb24gc2VsZi50ZXN0X2JsZCBmb3IgZGVidWdnaW5n IHB1cnBvc2VzLCBhbmQgeW91IHNob3VsZCBub3QgcmVseQorLQlvbiBpdCB0b28gbXVjaCAocmVh ZCB0aGUgbm90ZSBvbiB0aGUgY2FjaGUgYmVsb3cpLgorLQlUaGUgcGFyYW1ldGVycyBnaXZlbiBp biB0aGUgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMg Zm9yCistCWEgc2luZ2xlIHRhc2sgZ2VuZXJhdG9yIGNyZWF0ZWQgaW4gdGhlIGJ1aWxkLiBPbmx5 IHRocmVlIHBhcmFtZXRlcnMgYXJlIG9ibGlnYXRvcnk6CisrCUNyZWF0ZSBhIHRlbXBvcmFyeSBi dWlsZCBjb250ZXh0IHRvIGV4ZWN1dGUgYSBidWlsZC4gQSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRv IHRoYXQgYnVpbGQKKysJY29udGV4dCBpcyBrZXB0IG9uIHNlbGYudGVzdF9ibGQgZm9yIGRlYnVn Z2luZyBwdXJwb3Nlcy4KKysJVGhlIGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNz ZWQgdG8gYSBzaW5nbGUgdGFzayBnZW5lcmF0b3IgZm9yIHRoYXQgYnVpbGQuCisrCU9ubHkgdGhy ZWUgcGFyYW1ldGVycyBhcmUgbWFuZGF0b3J5OgorIAorIAk6cGFyYW0gZmVhdHVyZXM6IGZlYXR1 cmVzIHRvIHBhc3MgdG8gYSB0YXNrIGdlbmVyYXRvciBjcmVhdGVkIGluIHRoZSBidWlsZAorIAk6 dHlwZSBmZWF0dXJlczogbGlzdCBvZiBzdHJpbmcKKyAJOnBhcmFtIGNvbXBpbGVfZmlsZW5hbWU6 IGZpbGUgdG8gY3JlYXRlIGZvciB0aGUgY29tcGlsYXRpb24gKGRlZmF1bHQ6ICp0ZXN0LmMqKQor IAk6dHlwZSBjb21waWxlX2ZpbGVuYW1lOiBzdHJpbmcKKy0JOnBhcmFtIGNvZGU6IGNvZGUgdG8g d3JpdGUgaW4gdGhlIGZpbGVuYW1lIHRvIGNvbXBpbGUKKysJOnBhcmFtIGNvZGU6IGlucHV0IGZp bGUgY29udGVudHMKKyAJOnR5cGUgY29kZTogc3RyaW5nCisgCistCVRob3VnaCB0aGlzIGZ1bmN0 aW9uIHJldHVybnMgKjAqIGJ5IGRlZmF1bHQsIHRoZSBidWlsZCBtYXkgc2V0IGFuIGF0dHJpYnV0 ZSBuYW1lZCAqcmV0dmFsKiBvbiB0aGUKKysJVGhvdWdoIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAq MCogYnkgZGVmYXVsdCwgdGhlIGJ1aWxkIG1heSBiaW5kIGF0dHJpYnV0ZSBuYW1lZCAqcmV0dmFs KiBvbiB0aGUKKyAJYnVpbGQgY29udGV4dCBvYmplY3QgdG8gcmV0dXJuIGEgcGFydGljdWxhciB2 YWx1ZS4gU2VlIDpweTpmdW5jOmB3YWZsaWIuVG9vbHMuY19jb25maWcudGVzdF9leGVjX2Z1bmAg Zm9yIGV4YW1wbGUuCisgCistCVRoaXMgZnVuY3Rpb24gYWxzbyBwcm92aWRlcyBhIGxpbWl0ZWQg Y2FjaGUuIFRvIHVzZSBpdCwgcHJvdmlkZSB0aGUgZm9sbG93aW5nIG9wdGlvbjo6CisrCVRoZSB0 ZW1wb3JhcnkgYnVpbGRzIGNyZWF0ZXMgYSB0ZW1wb3JhcnkgZm9sZGVyOyB0aGUgbmFtZSBvZiB0 aGF0IGZvbGRlciBpcyBjYWxjdWxhdGVkCisrCWJ5IGhhc2hpbmcgaW5wdXQgYXJndW1lbnRzIHRv IHRoaXMgZnVuY3Rpb24sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiA6cHk6Y2xhc3M6YHdhZmxpYi5D b25maWdTZXQuQ29uZmlnU2V0YAorKwlvYmplY3RzIHdoaWNoIGFyZSB1c2VkIGZvciBib3RoIHJl YWRpbmcgYW5kIHdyaXRpbmcgdmFsdWVzLgorKworKwlUaGlzIGZ1bmN0aW9uIGFsc28gZmVhdHVy ZXMgYSBjYWNoZSB3aGljaCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0OyB0aGF0IGNhY2hlIHJlbGll cworKwlvbiB0aGUgaGFzaCB2YWx1ZSBjYWxjdWxhdGVkIGFzIGluZGljYXRlZCBhYm92ZTo6Cisg CisgCQlkZWYgb3B0aW9ucyhvcHQpOgorIAkJCW9wdC5hZGRfb3B0aW9uKCctLWNvbmZjYWNoZScs IGRlc3Q9J2NvbmZjYWNoZScsIGRlZmF1bHQ9MCwKK0BAIC01MzQsMTAgKzUzOSwyNCBAQCBkZWYg b3B0aW9ucyhvcHQpOgorIAkJJCB3YWYgY29uZmlndXJlIC0tY29uZmNhY2hlCisgCisgCSIiIgor LQlsc3QgPSBbc3RyKHYpIGZvciAocCwgdikgaW4ga3cuaXRlbXMoKSBpZiBwICE9ICdlbnYnXQor LQloID0gVXRpbHMuaF9saXN0KGxzdCkKKysJYnVmID0gW10KKysJZm9yIGtleSBpbiBzb3J0ZWQo a3cua2V5cygpKToKKysJCXYgPSBrd1trZXldCisrCQlpZiBpc2luc3RhbmNlKHYsIENvbmZpZ1Nl dC5Db25maWdTZXQpOgorKwkJCSMgdmFsdWVzIGFyZSBiZWluZyB3cml0dGVuIHRvLCBzbyB0aGV5 IGFyZSBleGNsdWRlZCBmcm9tIGNvbnRyaWJ1dGluZyB0byB0aGUgaGFzaAorKwkJCWNvbnRpbnVl CisrCQllbGlmIGhhc2F0dHIodiwgJ19fY2FsbF9fJyk6CisrCQkJYnVmLmFwcGVuZChVdGlscy5o X2Z1bih2KSkKKysJCWVsc2U6CisrCQkJYnVmLmFwcGVuZChzdHIodikpCisrCWggPSBVdGlscy5o X2xpc3QoYnVmKQorIAlkaXIgPSBzZWxmLmJsZG5vZGUuYWJzcGF0aCgpICsgb3Muc2VwICsgKG5v dCBVdGlscy5pc193aW4zMiBhbmQgJy4nIG9yICcnKSArICdjb25mX2NoZWNrXycgKyBVdGlscy50 b19oZXgoaCkKKyAKKysJY2FjaGVtb2RlID0ga3cuZ2V0KCdjb25mY2FjaGUnLCBnZXRhdHRyKE9w dGlvbnMub3B0aW9ucywgJ2NvbmZjYWNoZScsIE5vbmUpKQorKworKwlpZiBub3QgY2FjaGVtb2Rl IGFuZCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorKwkJc2h1dGlsLnJtdHJlZShkaXIpCisrCisgCXRy eToKKyAJCW9zLm1ha2VkaXJzKGRpcikKKyAJZXhjZXB0IE9TRXJyb3I6CitAQCAtNTQ4LDcgKzU2 Nyw2IEBAIGRlZiBvcHRpb25zKG9wdCk6CisgCWV4Y2VwdCBPU0Vycm9yOgorIAkJc2VsZi5mYXRh bCgnY2Fubm90IHVzZSB0aGUgY29uZmlndXJhdGlvbiB0ZXN0IGZvbGRlciAlcicgJSBkaXIpCisg CistCWNhY2hlbW9kZSA9IGdldGF0dHIoT3B0aW9ucy5vcHRpb25zLCAnY29uZmNhY2hlJywgTm9u ZSkKKyAJaWYgY2FjaGVtb2RlID09IDE6CisgCQl0cnk6CisgCQkJcHJvaiA9IENvbmZpZ1NldC5D b25maWdTZXQob3MucGF0aC5qb2luKGRpciwgJ2NhY2hlX3J1bl9idWlsZCcpKQorQEAgLTU4OCw3 ICs2MDYsNyBAQCBkZWYgb3B0aW9ucyhvcHQpOgorIAkJZWxzZToKKyAJCQlyZXQgPSBnZXRhdHRy KGJsZCwgJ3JldHZhbCcsIDApCisgCWZpbmFsbHk6CistCQlpZiBjYWNoZW1vZGUgPT0gMToKKysJ CWlmIGNhY2hlbW9kZToKKyAJCQkjIGNhY2hlIHRoZSByZXN1bHRzIGVhY2ggdGltZQorIAkJCXBy b2ogPSBDb25maWdTZXQuQ29uZmlnU2V0KCkKKyAJCQlwcm9qWydjYWNoZV9ydW5fYnVpbGQnXSA9 IHJldAorZGlmZiAtLWdpdCBhL3dhZmxpYi9Db250ZXh0LnB5IGIvd2FmbGliL0NvbnRleHQucHkK K2luZGV4IDc2MWI1MjFmNS4uMzY5NjY0ODE5IDEwMDY0NAorLS0tIGEvd2FmbGliL0NvbnRleHQu cHkKKysrKyBiL3dhZmxpYi9Db250ZXh0LnB5CitAQCAtNiwyMCArNiwzMCBAQAorIENsYXNzZXMg YW5kIGZ1bmN0aW9ucyBlbmFibGluZyB0aGUgY29tbWFuZCBzeXN0ZW0KKyAiIiIKKyAKKy1pbXBv cnQgb3MsIHJlLCBpbXAsIHN5cworK2ltcG9ydCBvcywgcmUsIHN5cworIGZyb20gd2FmbGliIGlt cG9ydCBVdGlscywgRXJyb3JzLCBMb2dzCisgaW1wb3J0IHdhZmxpYi5Ob2RlCisgCisraWYgc3lz LmhleHZlcnNpb24gPiAweDMwNDAwMDA6CisrCWltcG9ydCB0eXBlcworKwljbGFzcyBpbXAob2Jq ZWN0KToKKysJCW5ld19tb2R1bGUgPSBsYW1iZGEgeDogdHlwZXMuTW9kdWxlVHlwZSh4KQorK2Vs c2U6CisrCWltcG9ydCBpbXAKKysKKyAjIHRoZSBmb2xsb3dpbmcgMyBjb25zdGFudHMgYXJlIHVw ZGF0ZWQgb24gZWFjaCBuZXcgcmVsZWFzZSAoZG8gbm90IHRvdWNoKQorLUhFWFZFUlNJT049MHgy MDAwYzAwCisrSEVYVkVSU0lPTj0weDIwMDFhMDAKKyAiIiJDb25zdGFudCB1cGRhdGVkIG9uIG5l dyByZWxlYXNlcyIiIgorIAorLVdBRlZFUlNJT049IjIuMC4xMiIKKytXQUZWRVJTSU9OPSIyLjAu MjYiCisgIiIiQ29uc3RhbnQgdXBkYXRlZCBvbiBuZXcgcmVsZWFzZXMiIiIKKyAKKy1XQUZSRVZJ U0lPTj0iNTQ4NDEyMTg4NDBmZmEzNGZkZGY4MzQ2ODBhNWExN2RiNjljYWExMiIKKytXQUZSRVZJ U0lPTj0iMGZiOTg1Y2UxOTMyYzZmM2U3NTMzZjQzNWU0ZWUyMDlkNjczNzc2ZSIKKyAiIiJHaXQg cmV2aXNpb24gd2hlbiB0aGUgd2FmIHZlcnNpb24gaXMgdXBkYXRlZCIiIgorIAorK1dBRk5BTUU9 IndhZiIKKysiIiJBcHBsaWNhdGlvbiBuYW1lIGRpc3BsYXllZCBvbiAtLWhlbHAiIiIKKysKKyBB QkkgPSAyMAorICIiIlZlcnNpb24gb2YgdGhlIGJ1aWxkIGRhdGEgY2FjaGUgZmlsZSBmb3JtYXQg KHVzZWQgaW4gOnB5OmNvbnN0OmB3YWZsaWIuQ29udGV4dC5EQkZJTEVgKSIiIgorIAorQEAgLTEz NCw3ICsxNDQsNyBAQCBkZWYgZm9vKGN0eCk6CisgCTp0eXBlIGZ1bjogc3RyaW5nCisgCisgCS4u IGluaGVyaXRhbmNlLWRpYWdyYW06OiB3YWZsaWIuQ29udGV4dC5Db250ZXh0IHdhZmxpYi5CdWls ZC5CdWlsZENvbnRleHQgd2FmbGliLkJ1aWxkLkluc3RhbGxDb250ZXh0IHdhZmxpYi5CdWlsZC5V bmluc3RhbGxDb250ZXh0IHdhZmxpYi5CdWlsZC5TdGVwQ29udGV4dCB3YWZsaWIuQnVpbGQuTGlz dENvbnRleHQgd2FmbGliLkNvbmZpZ3VyZS5Db25maWd1cmF0aW9uQ29udGV4dCB3YWZsaWIuU2Ny aXB0aW5nLkRpc3Qgd2FmbGliLlNjcmlwdGluZy5EaXN0Q2hlY2sgd2FmbGliLkJ1aWxkLkNsZWFu Q29udGV4dAorLQorKwkgICA6dG9wLWNsYXNzZXM6IHdhZmxpYi5Db250ZXh0LkNvbnRleHQKKyAJ IiIiCisgCisgCWVycm9ycyA9IEVycm9ycworQEAgLTYxMyw3ICs2MjMsNyBAQCBkZWYgbG9hZF9z cGVjaWFsX3Rvb2xzKHNlbGYsIHZhciwgYmFuPVtdKToKKyAJCWlzIHR5cGljYWxseSBjYWxsZWQg b25jZSBmb3IgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBncm91cCwgc2VlIGZvcgorIAkJZXhhbXBs ZSA6cHk6bW9kOmB3YWZsaWIuVG9vbHMuY29tcGlsZXJfY2AKKyAKKy0JCTpwYXJhbSB2YXI6IGds b2IgZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgJ2N4eFxfXCoucHknCisrCQk6cGFyYW0gdmFyOiBn bG9iIGV4cHJlc3Npb24sIGZvciBleGFtcGxlICdjeHhcXF9cXCoucHknCisgCQk6dHlwZSB2YXI6 IHN0cmluZworIAkJOnBhcmFtIGJhbjogbGlzdCBvZiBleGFjdCBmaWxlIG5hbWVzIHRvIGV4Y2x1 ZGUKKyAJCTp0eXBlIGJhbjogbGlzdCBvZiBzdHJpbmcKK0BAIC02NzgsNyArNjg4LDcgQEAgZGVm IGxvYWRfbW9kdWxlKHBhdGgsIGVuY29kaW5nPU5vbmUpOgorIAorIGRlZiBsb2FkX3Rvb2wodG9v bCwgdG9vbGRpcj1Ob25lLCBjdHg9Tm9uZSwgd2l0aF9zeXNfcGF0aD1UcnVlKToKKyAJIiIiCist CUltcG9ydHggYSBXYWYgdG9vbCBhcyBhIHB5dGhvbiBtb2R1bGUsIGFuZCBzdG9yZXMgaXQgaW4g dGhlIGRpY3QgOnB5OmNvbnN0OmB3YWZsaWIuQ29udGV4dC5Db250ZXh0LnRvb2xzYAorKwlJbXBv cnRzIGEgV2FmIHRvb2wgYXMgYSBweXRob24gbW9kdWxlLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBk aWN0IDpweTpjb25zdDpgd2FmbGliLkNvbnRleHQuQ29udGV4dC50b29sc2AKKyAKKyAJOnR5cGUg IHRvb2w6IHN0cmluZworIAk6cGFyYW0gdG9vbDogTmFtZSBvZiB0aGUgdG9vbAorZGlmZiAtLWdp dCBhL3dhZmxpYi9Mb2dzLnB5IGIvd2FmbGliL0xvZ3MucHkKK2luZGV4IDJhNDc1MTY5Yi4uMjk4 NDExZGI1IDEwMDY0NAorLS0tIGEvd2FmbGliL0xvZ3MucHkKKysrKyBiL3dhZmxpYi9Mb2dzLnB5 CitAQCAtMjM3LDcgKzIzNywxMCBAQCBkZWYgZm9ybWF0KHNlbGYsIHJlYyk6CisgCQlpZiByZWMu bGV2ZWxubyA+PSBsb2dnaW5nLklORk86CisgCQkJIyB0aGUgZ29hbCBvZiB0aGlzIGlzIHRvIGZv cm1hdCB3aXRob3V0IHRoZSBsZWFkaW5nICJMb2dzLCBob3VyIiBwcmVmaXgKKyAJCQlpZiByZWMu YXJnczoKKy0JCQkJcmV0dXJuIG1zZyAlIHJlYy5hcmdzCisrCQkJCXRyeToKKysJCQkJCXJldHVy biBtc2cgJSByZWMuYXJncworKwkJCQlleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorKwkJCQkJ cmV0dXJuIG1zZy5lbmNvZGUoJ3V0Zi04JykgJSByZWMuYXJncworIAkJCXJldHVybiBtc2cKKyAK KyAJCXJlYy5tc2cgPSBtc2cKK0BAIC0yNzYsOSArMjc5LDkgQEAgZGVmIGVycm9yKCprLCAqKmt3 KToKKyAKKyBkZWYgd2FybigqaywgKiprdyk6CisgCSIiIgorLQlXcmFwcyBsb2dnaW5nLndhcm4K KysJV3JhcHMgbG9nZ2luZy53YXJuaW5nCisgCSIiIgorLQlsb2cud2FybigqaywgKiprdykKKysJ bG9nLndhcm5pbmcoKmssICoqa3cpCisgCisgZGVmIGluZm8oKmssICoqa3cpOgorIAkiIiIKK2Rp ZmYgLS1naXQgYS93YWZsaWIvTm9kZS5weSBiL3dhZmxpYi9Ob2RlLnB5CitpbmRleCA0YWMxZWE4 YTAuLjJhZDE4NDY2OSAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Ob2RlLnB5CisrKysgYi93YWZsaWIv Tm9kZS5weQorQEAgLTczLDcgKzczLDcgQEAgZGVmIGFudF9tYXRjaGVyKHMsIGlnbm9yZWNhc2Up OgorIAkJCWlmIGsgPT0gJyoqJzoKKyAJCQkJYWNjdS5hcHBlbmQoaykKKyAJCQllbHNlOgorLQkJ CQlrID0gay5yZXBsYWNlKCcuJywgJ1suXScpLnJlcGxhY2UoJyonLCcuKicpLnJlcGxhY2UoJz8n LCAnLicpLnJlcGxhY2UoJysnLCAnXFwrJykKKysJCQkJayA9IGsucmVwbGFjZSgnLicsICdbLl0n KS5yZXBsYWNlKCcqJywgJy4qJykucmVwbGFjZSgnPycsICcuJykucmVwbGFjZSgnKycsICdcXCsn KQorIAkJCQlrID0gJ14lcyQnICUgaworIAkJCQl0cnk6CisgCQkJCQlleHAgPSByZS5jb21waWxl KGssIGZsYWdzPXJlZmxhZ3MpCitAQCAtNTk1LDcgKzU5NSw2IEBAIGRlZiBhbnRfaXRlcihzZWxm LCBhY2NlcHQ9Tm9uZSwgbWF4ZGVwdGg9MjUsIHBhdHM9W10sIGRpcj1GYWxzZSwgc3JjPVRydWUs IHJlbW92CisgCQk6cnR5cGU6IGl0ZXJhdG9yCisgCQkiIiIKKyAJCWRpcmNvbnQgPSBzZWxmLmxp c3RkaXIoKQorLQkJZGlyY29udC5zb3J0KCkKKyAKKyAJCXRyeToKKyAJCQlsc3QgPSBzZXQoc2Vs Zi5jaGlsZHJlbi5rZXlzKCkpCitkaWZmIC0tZ2l0IGEvd2FmbGliL09wdGlvbnMucHkgYi93YWZs aWIvT3B0aW9ucy5weQoraW5kZXggYWQ4MDJkNGI5Li5kNDEwNDkxN2MgMTAwNjQ0CistLS0gYS93 YWZsaWIvT3B0aW9ucy5weQorKysrIGIvd2FmbGliL09wdGlvbnMucHkKK0BAIC00NCw3ICs0NCw3 IEBAIGNsYXNzIG9wdF9wYXJzZXIob3B0cGFyc2UuT3B0aW9uUGFyc2VyKToKKyAJIiIiCisgCWRl ZiBfX2luaXRfXyhzZWxmLCBjdHgsIGFsbG93X3Vua25vd249RmFsc2UpOgorIAkJb3B0cGFyc2Uu T3B0aW9uUGFyc2VyLl9faW5pdF9fKHNlbGYsIGNvbmZsaWN0X2hhbmRsZXI9J3Jlc29sdmUnLCBh ZGRfaGVscF9vcHRpb249RmFsc2UsCistCQkJdmVyc2lvbj0nd2FmICVzICglcyknICUgKENvbnRl eHQuV0FGVkVSU0lPTiwgQ29udGV4dC5XQUZSRVZJU0lPTikpCisrCQkJdmVyc2lvbj0nJXMgJXMg KCVzKScgJSAoQ29udGV4dC5XQUZOQU1FLCBDb250ZXh0LldBRlZFUlNJT04sIENvbnRleHQuV0FG UkVWSVNJT04pKQorIAkJc2VsZi5mb3JtYXR0ZXIud2lkdGggPSBMb2dzLmdldF90ZXJtX2NvbHMo KQorIAkJc2VsZi5jdHggPSBjdHgKKyAJCXNlbGYuYWxsb3dfdW5rbm93biA9IGFsbG93X3Vua25v d24KK0BAIC02Miw2ICs2MiwyMSBAQCBkZWYgX3Byb2Nlc3NfYXJncyhzZWxmLCBsYXJncywgcmFy Z3MsIHZhbHVlcyk6CisgCQkJCWVsc2U6CisgCQkJCQlzZWxmLmVycm9yKHN0cihlKSkKKyAKKysJ ZGVmIF9wcm9jZXNzX2xvbmdfb3B0KHNlbGYsIHJhcmdzLCB2YWx1ZXMpOgorKwkJIyAtLWN1c3Rv bS1vcHRpb249LWZ0eHl6IGlzIGludGVycHJldGVkIGFzIC1mIC10Li4uIHNlZSAjMjI4MAorKwkJ aWYgc2VsZi5hbGxvd191bmtub3duOgorKwkJCWJhY2sgPSBbXSArIHJhcmdzCisrCQkJdHJ5Ogor KwkJCQlvcHRwYXJzZS5PcHRpb25QYXJzZXIuX3Byb2Nlc3NfbG9uZ19vcHQoc2VsZiwgcmFyZ3Ms IHZhbHVlcykKKysJCQlleGNlcHQgb3B0cGFyc2UuQmFkT3B0aW9uRXJyb3I6CisrCQkJCXdoaWxl IHJhcmdzOgorKwkJCQkJcmFyZ3MucG9wKCkKKysJCQkJcmFyZ3MuZXh0ZW5kKGJhY2spCisrCQkJ CXJhcmdzLnBvcCgwKQorKwkJCQlyYWlzZQorKwkJZWxzZToKKysJCQlvcHRwYXJzZS5PcHRpb25Q YXJzZXIuX3Byb2Nlc3NfbG9uZ19vcHQoc2VsZiwgcmFyZ3MsIHZhbHVlcykKKysKKyAJZGVmIHBy aW50X3VzYWdlKHNlbGYsIGZpbGU9Tm9uZSk6CisgCQlyZXR1cm4gc2VsZi5wcmludF9oZWxwKGZp bGUpCisgCitAQCAtOTYsMTEgKzExMSwxMSBAQCBkZWYgZ2V0X3VzYWdlKHNlbGYpOgorIAkJbHN0 LnNvcnQoKQorIAkJcmV0ID0gJ1xuJy5qb2luKGxzdCkKKyAKKy0JCXJldHVybiAnJyd3YWYgW2Nv bW1hbmRzXSBbb3B0aW9uc10KKysJCXJldHVybiAnJyclcyBbY29tbWFuZHNdIFtvcHRpb25zXQor IAorLU1haW4gY29tbWFuZHMgKGV4YW1wbGU6IC4vd2FmIGJ1aWxkIC1qNCkKKytNYWluIGNvbW1h bmRzIChleGFtcGxlOiAuLyVzIGJ1aWxkIC1qNCkKKyAlcworLScnJyAlIHJldAorKycnJyAlIChD b250ZXh0LldBRk5BTUUsIENvbnRleHQuV0FGTkFNRSwgcmV0KQorIAorIAorIGNsYXNzIE9wdGlv bnNDb250ZXh0KENvbnRleHQuQ29udGV4dCk6CitAQCAtMTQxLDkgKzE1Niw5IEBAIGRlZiBfX2lu aXRfXyhzZWxmLCAqKmt3KToKKyAJCWdyLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0JywgYWN0aW9u PSdzdG9yZScsIGRlZmF1bHQ9JycsIGhlbHA9J2J1aWxkIGRpciBmb3IgdGhlIHByb2plY3QnLCBk ZXN0PSdvdXQnKQorIAkJZ3IuYWRkX29wdGlvbignLXQnLCAnLS10b3AnLCBhY3Rpb249J3N0b3Jl JywgZGVmYXVsdD0nJywgaGVscD0nc3JjIGRpciBmb3IgdGhlIHByb2plY3QnLCBkZXN0PSd0b3An KQorIAorLQkJZ3IuYWRkX29wdGlvbignLS1uby1sb2NrLWluLXJ1bicsIGFjdGlvbj0nc3RvcmVf dHJ1ZScsIGRlZmF1bHQ9JycsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCwgZGVzdD0nbm9f bG9ja19pbl9ydW4nKQorLQkJZ3IuYWRkX29wdGlvbignLS1uby1sb2NrLWluLW91dCcsIGFjdGlv bj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9JycsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCwg ZGVzdD0nbm9fbG9ja19pbl9vdXQnKQorLQkJZ3IuYWRkX29wdGlvbignLS1uby1sb2NrLWluLXRv cCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9JycsIGhlbHA9b3B0cGFyc2UuU1VQUFJF U1NfSEVMUCwgZGVzdD0nbm9fbG9ja19pbl90b3AnKQorKwkJZ3IuYWRkX29wdGlvbignLS1uby1s b2NrLWluLXJ1bicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9b3MuZW52aXJvbi5nZXQo J05PX0xPQ0tfSU5fUlVOJywgJycpLCBoZWxwPW9wdHBhcnNlLlNVUFBSRVNTX0hFTFAsIGRlc3Q9 J25vX2xvY2tfaW5fcnVuJykKKysJCWdyLmFkZF9vcHRpb24oJy0tbm8tbG9jay1pbi1vdXQnLCBh Y3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PW9zLmVudmlyb24uZ2V0KCdOT19MT0NLX0lOX09V VCcsICcnKSwgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQLCBkZXN0PSdub19sb2NrX2luX291 dCcpCisrCQlnci5hZGRfb3B0aW9uKCctLW5vLWxvY2staW4tdG9wJywgYWN0aW9uPSdzdG9yZV90 cnVlJywgZGVmYXVsdD1vcy5lbnZpcm9uLmdldCgnTk9fTE9DS19JTl9UT1AnLCAnJyksIGhlbHA9 b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCwgZGVzdD0nbm9fbG9ja19pbl90b3AnKQorIAorIAkJZGVm YXVsdF9wcmVmaXggPSBnZXRhdHRyKENvbnRleHQuZ19tb2R1bGUsICdkZWZhdWx0X3ByZWZpeCcs IG9zLmVudmlyb24uZ2V0KCdQUkVGSVgnKSkKKyAJCWlmIG5vdCBkZWZhdWx0X3ByZWZpeDoKK0BA IC0yODIsNiArMjk3LDggQEAgZGVmIHBhcnNlX2NtZF9hcmdzKHNlbGYsIF9hcmdzPU5vbmUsIGN3 ZD1Ob25lLCBhbGxvd191bmtub3duPUZhbHNlKToKKyAJCQllbGlmIGFyZyAhPSAnb3B0aW9ucyc6 CisgCQkJCWNvbW1hbmRzLmFwcGVuZChhcmcpCisgCisrCQlpZiBvcHRpb25zLmpvYnMgPCAxOgor KwkJCW9wdGlvbnMuam9icyA9IDEKKyAJCWZvciBuYW1lIGluICd0b3Agb3V0IGRlc3RkaXIgcHJl Zml4IGJpbmRpciBsaWJkaXInLnNwbGl0KCk6CisgCQkJIyB0aG9zZSBwYXRocyBhcmUgdXN1YWxs eSBleHBhbmRlZCBmcm9tIENvbnRleHQubGF1bmNoX2RpcgorIAkJCWlmIGdldGF0dHIob3B0aW9u cywgbmFtZSwgTm9uZSk6CitkaWZmIC0tZ2l0IGEvd2FmbGliL1J1bm5lci5weSBiL3dhZmxpYi9S dW5uZXIucHkKK2luZGV4IDI2MTA4NGQyNy4uMzUwYzg2YTIyIDEwMDY0NAorLS0tIGEvd2FmbGli L1J1bm5lci5weQorKysrIGIvd2FmbGliL1J1bm5lci5weQorQEAgLTM3LDYgKzM3LDggQEAgZGVm IF9fbGVuX18oc2VsZik6CisgCQlyZXR1cm4gbGVuKHNlbGYubHN0KQorIAlkZWYgX19pdGVyX18o c2VsZik6CisgCQlyZXR1cm4gaXRlcihzZWxmLmxzdCkKKysJZGVmIF9fc3RyX18oc2VsZik6Cisr CQlyZXR1cm4gJ1ByaW9yaXR5VGFza3M6IFslc10nICUgJ1xuICAnLmpvaW4oc3RyKHgpIGZvciB4 IGluIHNlbGYubHN0KQorIAlkZWYgY2xlYXIoc2VsZik6CisgCQlzZWxmLmxzdCA9IFtdCisgCWRl ZiBhcHBlbmQoc2VsZiwgdGFzayk6CitAQCAtNjksNyArNzEsNyBAQCBkZWYgX19pbml0X18oc2Vs Ziwgc3Bhd25lciwgdGFzayk6CisgCQkiIiJUYXNrIHRvIGV4ZWN1dGUiIiIKKyAJCXNlbGYuc3Bh d25lciA9IHNwYXduZXIKKyAJCSIiIkNvb3JkaW5hdG9yIG9iamVjdCIiIgorLQkJc2VsZi5zZXRE YWVtb24oMSkKKysJCXNlbGYuZGFlbW9uID0gVHJ1ZQorIAkJc2VsZi5zdGFydCgpCisgCWRlZiBy dW4oc2VsZik6CisgCQkiIiIKK0BAIC05Niw3ICs5OCw3IEBAIGRlZiBfX2luaXRfXyhzZWxmLCBt YXN0ZXIpOgorIAkJIiIiOnB5OmNsYXNzOmB3YWZsaWIuUnVubmVyLlBhcmFsbGVsYCBwcm9kdWNl ciBpbnN0YW5jZSIiIgorIAkJc2VsZi5zZW0gPSBVdGlscy50aHJlYWRpbmcuU2VtYXBob3JlKG1h c3Rlci5udW1qb2JzKQorIAkJIiIiQm91bmRlZCBzZW1hcGhvcmUgdGhhdCBwcmV2ZW50cyBzcGF3 bmluZyBtb3JlIHRoYW4gKm4qIGNvbmN1cnJlbnQgY29uc3VtZXJzIiIiCistCQlzZWxmLnNldERh ZW1vbigxKQorKwkJc2VsZi5kYWVtb24gPSBUcnVlCisgCQlzZWxmLnN0YXJ0KCkKKyAJZGVmIHJ1 bihzZWxmKToKKyAJCSIiIgorQEAgLTE4MSwxMCArMTgzLDEyIEBAIGRlZiBfX2luaXRfXyhzZWxm LCBibGQsIGo9Mik6CisgCQlUaGUgcmV2ZXJzZSBkZXBlbmRlbmN5IGdyYXBoIG9mIGRlcGVuZGVu Y2llcyBvYnRhaW5lZCBmcm9tIFRhc2sucnVuX2FmdGVyCisgCQkiIiIKKyAKKy0JCXNlbGYuc3Bh d25lciA9IFNwYXduZXIoc2VsZikKKysJCXNlbGYuc3Bhd25lciA9IE5vbmUKKyAJCSIiIgorIAkJ Q29vcmRpbmF0aW5nIGRhZW1vbiB0aHJlYWQgdGhhdCBzcGF3bnMgdGhyZWFkIGNvbnN1bWVycwor IAkJIiIiCisrCQlpZiBzZWxmLm51bWpvYnMgPiAxOgorKwkJCXNlbGYuc3Bhd25lciA9IFNwYXdu ZXIoc2VsZikKKyAKKyAJZGVmIGdldF9uZXh0X3Rhc2soc2VsZik6CisgCQkiIiIKK0BAIC0yNTQs NiArMjU4LDggQEAgZGVmIHJlZmlsbF90YXNrX2xpc3Qoc2VsZik6CisgCQkJCQkJCXNlbGYub3V0 c3RhbmRpbmcuYXBwZW5kKHgpCisgCQkJCQkJCWJyZWFrCisgCQkJCQllbHNlOgorKwkJCQkJCWlm IHNlbGYuc3RvcCBvciBzZWxmLmVycm9yOgorKwkJCQkJCQlicmVhaworIAkJCQkJCXJhaXNlIEVy cm9ycy5XYWZFcnJvcignQnJva2VuIHJldmRlcHMgZGV0ZWN0ZWQgb24gJXInICUgc2VsZi5pbmNv bXBsZXRlKQorIAkJCQllbHNlOgorIAkJCQkJdGFza3MgPSBuZXh0KHNlbGYuYml0ZXIpCitAQCAt MzMxLDExICszMzcsMTYgQEAgZGVmIHRyeV91bmZyZWV6ZSh4KToKKyAKKyAJCWlmIGhhc2F0dHIo dHNrLCAnc2VtYXBob3JlJyk6CisgCQkJc2VtID0gdHNrLnNlbWFwaG9yZQorLQkJCXNlbS5yZWxl YXNlKHRzaykKKy0JCQl3aGlsZSBzZW0ud2FpdGluZyBhbmQgbm90IHNlbS5pc19sb2NrZWQoKToK Ky0JCQkJIyB0YWtlIGEgZnJvemVuIHRhc2ssIG1ha2UgaXQgcmVhZHkgdG8gcnVuCistCQkJCXgg PSBzZW0ud2FpdGluZy5wb3AoKQorLQkJCQlzZWxmLl9hZGRfdGFzayh4KQorKwkJCXRyeToKKysJ CQkJc2VtLnJlbGVhc2UodHNrKQorKwkJCWV4Y2VwdCBLZXlFcnJvcjoKKysJCQkJIyBUT0RPCisr CQkJCXBhc3MKKysJCQllbHNlOgorKwkJCQl3aGlsZSBzZW0ud2FpdGluZyBhbmQgbm90IHNlbS5p c19sb2NrZWQoKToKKysJCQkJCSMgdGFrZSBhIGZyb3plbiB0YXNrLCBtYWtlIGl0IHJlYWR5IHRv IHJ1bgorKwkJCQkJeCA9IHNlbS53YWl0aW5nLnBvcCgpCisrCQkJCQlzZWxmLl9hZGRfdGFzayh4 KQorIAorIAlkZWYgZ2V0X291dChzZWxmKToKKyAJCSIiIgorZGlmZiAtLWdpdCBhL3dhZmxpYi9T Y3JpcHRpbmcucHkgYi93YWZsaWIvU2NyaXB0aW5nLnB5CitpbmRleCA3NDlkNGYyZTYuLmE4MGNi MzY3OCAxMDA2NDQKKy0tLSBhL3dhZmxpYi9TY3JpcHRpbmcucHkKKysrKyBiL3dhZmxpYi9TY3Jp cHRpbmcucHkKK0BAIC0yMTYsNyArMjE2LDEwIEBAIGRlZiBwYXJzZV9vcHRpb25zKCk6CisgCWN0 eCA9IENvbnRleHQuY3JlYXRlX2NvbnRleHQoJ29wdGlvbnMnKQorIAljdHguZXhlY3V0ZSgpCisg CWlmIG5vdCBPcHRpb25zLmNvbW1hbmRzOgorLQkJT3B0aW9ucy5jb21tYW5kcy5hcHBlbmQoZGVm YXVsdF9jbWQpCisrCQlpZiBpc2luc3RhbmNlKGRlZmF1bHRfY21kLCBsaXN0KToKKysJCQlPcHRp b25zLmNvbW1hbmRzLmV4dGVuZChkZWZhdWx0X2NtZCkKKysJCWVsc2U6CisrCQkJT3B0aW9ucy5j b21tYW5kcy5hcHBlbmQoZGVmYXVsdF9jbWQpCisgCWlmIE9wdGlvbnMub3B0aW9ucy53aGVscDoK KyAJCWN0eC5wYXJzZXIucHJpbnRfaGVscCgpCisgCQlzeXMuZXhpdCgwKQorQEAgLTI4MCw3ICsy ODMsNyBAQCBkZWYgZGlzdGNsZWFuX2RpcihkaXJuYW1lKToKKyAJCQlwYXNzCisgCisgCXRyeToK Ky0JCXNodXRpbC5ybXRyZWUoJ2M0Y2hlJykKKysJCXNodXRpbC5ybXRyZWUoQnVpbGQuQ0FDSEVf RElSKQorIAlleGNlcHQgT1NFcnJvcjoKKyAJCXBhc3MKKyAKK0BAIC0zMDMsNyArMzA2LDcgQEAg ZGVmIHJlbW92ZV9hbmRfbG9nKGssIGZ1bik6CisgCisgCSMgcmVtb3ZlIGEgYnVpbGQgZm9sZGVy LCBpZiBhbnkKKyAJY3VyID0gJy4nCistCWlmIGN0eC5vcHRpb25zLm5vX2xvY2tfaW5fdG9wOgor KwlpZiBvcy5lbnZpcm9uLmdldCgnTk9fTE9DS19JTl9UT1AnKSBvciBjdHgub3B0aW9ucy5ub19s b2NrX2luX3RvcDoKKyAJCWN1ciA9IGN0eC5vcHRpb25zLm91dAorIAorIAl0cnk6CitAQCAtMzI5 LDcgKzMzMiwxMiBAQCBkZWYgcmVtb3ZlX2FuZF9sb2coaywgZnVuKToKKyAJCWVsc2U6CisgCQkJ cmVtb3ZlX2FuZF9sb2coZW52Lm91dF9kaXIsIHNodXRpbC5ybXRyZWUpCisgCistCQlmb3IgayBp biAoZW52Lm91dF9kaXIsIGVudi50b3BfZGlyLCBlbnYucnVuX2Rpcik6CisrCQllbnZfZGlycyA9 IFtlbnYub3V0X2Rpcl0KKysJCWlmIG5vdCAob3MuZW52aXJvbi5nZXQoJ05PX0xPQ0tfSU5fVE9Q Jykgb3IgY3R4Lm9wdGlvbnMubm9fbG9ja19pbl90b3ApOgorKwkJCWVudl9kaXJzLmFwcGVuZChl bnYudG9wX2RpcikKKysJCWlmIG5vdCAob3MuZW52aXJvbi5nZXQoJ05PX0xPQ0tfSU5fUlVOJykg b3IgY3R4Lm9wdGlvbnMubm9fbG9ja19pbl9ydW4pOgorKwkJCWVudl9kaXJzLmFwcGVuZChlbnYu cnVuX2RpcikKKysJCWZvciBrIGluIGVudl9kaXJzOgorIAkJCXAgPSBvcy5wYXRoLmpvaW4oaywg T3B0aW9ucy5sb2NrZmlsZSkKKyAJCQlyZW1vdmVfYW5kX2xvZyhwLCBvcy5yZW1vdmUpCisgCitA QCAtMzgwLDcgKzM4OCwxMSBAQCBkZWYgYXJjaGl2ZShzZWxmKToKKyAKKyAJCQlmb3IgeCBpbiBm aWxlczoKKyAJCQkJYXJjaGl2ZV9uYW1lID0gc2VsZi5nZXRfYmFzZV9uYW1lKCkgKyAnLycgKyB4 LnBhdGhfZnJvbShzZWxmLmJhc2VfcGF0aCkKKy0JCQkJemlwLndyaXRlKHguYWJzcGF0aCgpLCBh cmNoaXZlX25hbWUsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorKwkJCQlpZiBvcy5lbnZpcm9uLmdl dCgnU09VUkNFX0RBVEVfRVBPQ0gnKToKKysJCQkJCSMgVE9ETzogcGFyc2UgdGhhdCB0aW1lc3Rh bXAKKysJCQkJCXppcC53cml0ZXN0cih6aXBmaWxlLlppcEluZm8oYXJjaGl2ZV9uYW1lKSwgeC5y ZWFkKCksIHppcGZpbGUuWklQX0RFRkxBVEVEKQorKwkJCQllbHNlOgorKwkJCQkJemlwLndyaXRl KHguYWJzcGF0aCgpLCBhcmNoaXZlX25hbWUsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorIAkJCXpp cC5jbG9zZSgpCisgCQllbHNlOgorIAkJCXNlbGYuZmF0YWwoJ1ZhbGlkIGFsZ28gdHlwZXMgYXJl IHRhci5iejIsIHRhci5neiwgdGFyLnh6IG9yIHppcCcpCitAQCAtNDE3LDYgKzQyOSw4IEBAIGRl ZiBhZGRfdGFyX2ZpbGUoc2VsZiwgeCwgdGFyKToKKyAJCXRpbmZvLmdpZCAgID0gMAorIAkJdGlu Zm8udW5hbWUgPSAncm9vdCcKKyAJCXRpbmZvLmduYW1lID0gJ3Jvb3QnCisrCQlpZiBvcy5lbnZp cm9uLmdldCgnU09VUkNFX0RBVEVfRVBPQ0gnKToKKysJCQl0aW5mby5tdGltZSA9IGludChvcy5l bnZpcm9uLmdldCgnU09VUkNFX0RBVEVfRVBPQ0gnKSkKKyAKKyAJCWlmIG9zLnBhdGguaXNmaWxl KHApOgorIAkJCXdpdGggb3BlbihwLCAncmInKSBhcyBmOgorQEAgLTU5OCwxMiArNjEyLDE1IEBA IGRlZiBleGVjdXRlKHNlbGYpOgorIAkJCWNtZCA9IGVudi5jb25maWdfY21kIG9yICdjb25maWd1 cmUnCisgCQkJaWYgQ29uZmlndXJlLmF1dG9jb25maWcgPT0gJ2Nsb2JiZXInOgorIAkJCQl0bXAg PSBPcHRpb25zLm9wdGlvbnMuX19kaWN0X18KKysJCQkJbGF1bmNoX2Rpcl90bXAgPSBDb250ZXh0 LmxhdW5jaF9kaXIKKyAJCQkJaWYgZW52Lm9wdGlvbnM6CisgCQkJCQlPcHRpb25zLm9wdGlvbnMu X19kaWN0X18gPSBlbnYub3B0aW9ucworKwkJCQlDb250ZXh0LmxhdW5jaF9kaXIgPSBlbnYubGF1 bmNoX2RpcgorIAkJCQl0cnk6CisgCQkJCQlydW5fY29tbWFuZChjbWQpCisgCQkJCWZpbmFsbHk6 CisgCQkJCQlPcHRpb25zLm9wdGlvbnMuX19kaWN0X18gPSB0bXAKKysJCQkJCUNvbnRleHQubGF1 bmNoX2RpciA9IGxhdW5jaF9kaXJfdG1wCisgCQkJZWxzZToKKyAJCQkJcnVuX2NvbW1hbmQoY21k KQorIAkJCXJ1bl9jb21tYW5kKHNlbGYuY21kKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9UYXNrLnB5 IGIvd2FmbGliL1Rhc2sucHkKK2luZGV4IDZhZWJjNjA3NC4uY2I0OWE3Mzk0IDEwMDY0NAorLS0t IGEvd2FmbGliL1Rhc2sucHkKKysrKyBiL3dhZmxpYi9UYXNrLnB5CitAQCAtMTYzLDEwICsxNjMs MTAgQEAgY2xhc3MgVGFzayhldmlsKToKKyAJIiIiRmlsZSBleHRlbnNpb25zIHRoYXQgb2JqZWN0 cyBvZiB0aGlzIHRhc2sgY2xhc3MgbWF5IGNyZWF0ZSIiIgorIAorIAliZWZvcmUgPSBbXQorLQki IiJMaXN0IG9mIHRhc2sgY2xhc3MgbmFtZXMgdG8gZXhlY3V0ZSBiZWZvcmUgaW5zdGFuY2VzIG9m IHRoaXMgY2xhc3MiIiIKKysJIiIiVGhlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBleGVj dXRlZCBiZWZvcmUgdGhlIGluc3RhbmNlcyBvZiBjbGFzc2VzIHdob3NlIG5hbWVzIGFyZSBpbiB0 aGlzIGxpc3QiIiIKKyAKKyAJYWZ0ZXIgPSBbXQorLQkiIiJMaXN0IG9mIHRhc2sgY2xhc3MgbmFt ZXMgdG8gZXhlY3V0ZSBhZnRlciBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyIiIgorKwkiIiJUaGUg aW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBpbnN0YW5jZXMg b2YgY2xhc3NlcyB3aG9zZSBuYW1lcyBhcmUgaW4gdGhpcyBsaXN0IiIiCisgCisgCWhjb2RlID0g VXRpbHMuU0lHX05JTAorIAkiIiJTdHJpbmcgcmVwcmVzZW50aW5nIGFuIGFkZGl0aW9uYWwgaGFz aCBmb3IgdGhlIGNsYXNzIHJlcHJlc2VudGF0aW9uIiIiCitAQCAtMzA2LDI1ICszMDYsMzEgQEAg ZGVmIGV4ZWNfY29tbWFuZChzZWxmLCBjbWQsICoqa3cpOgorIAkJaWYgaGFzYXR0cihzZWxmLCAn c3RkZXJyJyk6CisgCQkJa3dbJ3N0ZGVyciddID0gc2VsZi5zdGRlcnIKKyAKKy0JCSMgd29ya2Fy b3VuZCBmb3IgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdDoKKy0JCSMgaHR0cDovL3N1cHBvcnQu bWljcm9zb2Z0LmNvbS9rYi84MzA0NzMKKy0JCWlmIG5vdCBpc2luc3RhbmNlKGNtZCwgc3RyKSBh bmQgKGxlbihyZXByKGNtZCkpID49IDgxOTIgaWYgVXRpbHMuaXNfd2luMzIgZWxzZSBsZW4oY21k KSA+IDIwMDAwMCk6CistCQkJY21kLCBhcmdzID0gc2VsZi5zcGxpdF9hcmdmaWxlKGNtZCkKKy0J CQl0cnk6CistCQkJCShmZCwgdG1wKSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorLQkJCQlvcy53cml0 ZShmZCwgJ1xyXG4nLmpvaW4oYXJncykuZW5jb2RlKCkpCistCQkJCW9zLmNsb3NlKGZkKQorLQkJ CQlpZiBMb2dzLnZlcmJvc2U6CistCQkJCQlMb2dzLmRlYnVnKCdhcmdmaWxlOiBAJXIgLT4gJXIn LCB0bXAsIGFyZ3MpCistCQkJCXJldHVybiBzZWxmLmdlbmVyYXRvci5ibGQuZXhlY19jb21tYW5k KGNtZCArIFsnQCcgKyB0bXBdLCAqKmt3KQorLQkJCWZpbmFsbHk6CisrCQlpZiBub3QgaXNpbnN0 YW5jZShjbWQsIHN0cik6CisrCQkJaWYgVXRpbHMuaXNfd2luMzI6CisrCQkJCSMgd2luMzIgY29t cGFyZXMgdGhlIHJlc3VsdGluZyBsZW5ndGggaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9r Yi84MzA0NzMKKysJCQkJdG9vX2xvbmcgPSBzdW0oW2xlbihhcmcpIGZvciBhcmcgaW4gY21kXSkg KyBsZW4oY21kKSA+IDgxOTIKKysJCQllbHNlOgorKwkJCQkjIG5vbi13aW4zMiBjb3VudHMgdGhl IGFtb3VudCBvZiBhcmd1bWVudHMgKDIwMGspCisrCQkJCXRvb19sb25nID0gbGVuKGNtZCkgPiAy MDAwMDAKKysKKysJCQlpZiB0b29fbG9uZyBhbmQgZ2V0YXR0cihzZWxmLCAnYWxsb3dfYXJnc2Zp bGUnLCBUcnVlKToKKysJCQkJIyBTaHVudCBhcmd1bWVudHMgdG8gYSB0ZW1wb3JhcnkgZmlsZSBp ZiB0aGUgY29tbWFuZCBpcyB0b28gbG9uZy4KKysJCQkJY21kLCBhcmdzID0gc2VsZi5zcGxpdF9h cmdmaWxlKGNtZCkKKyAJCQkJdHJ5OgorLQkJCQkJb3MucmVtb3ZlKHRtcCkKKy0JCQkJZXhjZXB0 IE9TRXJyb3I6CistCQkJCQkjIGFudGktdmlydXMgYW5kIGluZGV4ZXJzIGNhbiBrZWVwIGZpbGVz IG9wZW4gLV8tCistCQkJCQlwYXNzCistCQllbHNlOgorLQkJCXJldHVybiBzZWxmLmdlbmVyYXRv ci5ibGQuZXhlY19jb21tYW5kKGNtZCwgKiprdykKKysJCQkJCShmZCwgdG1wKSA9IHRlbXBmaWxl Lm1rc3RlbXAoKQorKwkJCQkJb3Mud3JpdGUoZmQsICdcclxuJy5qb2luKGFyZ3MpLmVuY29kZSgp KQorKwkJCQkJb3MuY2xvc2UoZmQpCisrCQkJCQlpZiBMb2dzLnZlcmJvc2U6CisrCQkJCQkJTG9n cy5kZWJ1ZygnYXJnZmlsZTogQCVyIC0+ICVyJywgdG1wLCBhcmdzKQorKwkJCQkJcmV0dXJuIHNl bGYuZ2VuZXJhdG9yLmJsZC5leGVjX2NvbW1hbmQoY21kICsgWydAJyArIHRtcF0sICoqa3cpCisr CQkJCWZpbmFsbHk6CisrCQkJCQl0cnk6CisrCQkJCQkJb3MucmVtb3ZlKHRtcCkKKysJCQkJCWV4 Y2VwdCBPU0Vycm9yOgorKwkJCQkJCSMgYW50aS12aXJ1cyBhbmQgaW5kZXhlcnMgY2FuIGtlZXAg ZmlsZXMgb3BlbiAtXy0KKysJCQkJCQlwYXNzCisrCQlyZXR1cm4gc2VsZi5nZW5lcmF0b3IuYmxk LmV4ZWNfY29tbWFuZChjbWQsICoqa3cpCisgCisgCWRlZiBwcm9jZXNzKHNlbGYpOgorIAkJIiIi CitAQCAtMTA0NCw3ICsxMDUwLDcgQEAgZGVmIGZ1bmV4KGMpOgorIAlleGVjKGMsIGRjKQorIAly ZXR1cm4gZGNbJ2YnXQorIAorLXJlX2NvbmQgPSByZS5jb21waWxlKCcoP1A8dmFyPlx3Kyl8KD9Q PG9yPlx8KXwoP1A8YW5kPiYpJykKKytyZV9jb25kID0gcmUuY29tcGlsZShyJyg/UDx2YXI+XHcr KXwoP1A8b3I+XHwpfCg/UDxhbmQ+JiknKQorIHJlX25vdmFyID0gcmUuY29tcGlsZShyJ14oU1JD fFRHVClcVysuKj8kJykKKyByZWdfYWN0ID0gcmUuY29tcGlsZShyJyg/UDxiYWNrc2xhc2g+XFwp fCg/UDxkb2xsYXI+XCRcJCl8KD9QPHN1YnN0PlwkXHsoP1A8dmFyPlx3KykoP1A8Y29kZT4uKj8p XH0pJywgcmUuTSkKKyBkZWYgY29tcGlsZV9mdW5fc2hlbGwobGluZSk6CitkaWZmIC0tZ2l0IGEv d2FmbGliL1Rhc2tHZW4ucHkgYi93YWZsaWIvVGFza0dlbi5weQoraW5kZXggYTc0ZTY0MzFkLi4z MjQ2OGYwM2QgMTAwNjQ0CistLS0gYS93YWZsaWIvVGFza0dlbi5weQorKysrIGIvd2FmbGliL1Rh c2tHZW4ucHkKK0BAIC03NCw3ICs3NCw3IEBAIGRlZiBfX2luaXRfXyhzZWxmLCAqaywgKiprdyk6 CisgCQllbHNlOgorIAkJCXNlbGYuYmxkID0ga3dbJ2JsZCddCisgCQkJc2VsZi5lbnYgPSBzZWxm LmJsZC5lbnYuZGVyaXZlKCkKKy0JCQlzZWxmLnBhdGggPSBzZWxmLmJsZC5wYXRoICMgZW11bGF0 ZSBjaGRpciB3aGVuIHJlYWRpbmcgc2NyaXB0cworKwkJCXNlbGYucGF0aCA9IGt3LmdldCgncGF0 aCcsIHNlbGYuYmxkLnBhdGgpICMgYnkgZGVmYXVsdCwgZW11bGF0ZSBjaGRpciB3aGVuIHJlYWRp bmcgc2NyaXB0cworIAorIAkJCSMgUHJvdmlkZSBhIHVuaXF1ZSBpbmRleCBwZXIgZm9sZGVyCisg CQkJIyBUaGlzIGlzIHBhcnQgb2YgYSBtZWFzdXJlIHRvIHByZXZlbnQgb3V0cHV0IGZpbGUgbmFt ZSBjb2xsaXNpb25zCitAQCAtNDAwLDcgKzQwMCw3IEBAIGRlZiBmZWF0dXJlKCprKToKKyAJRGVj b3JhdG9yIHRoYXQgcmVnaXN0ZXJzIGEgdGFzayBnZW5lcmF0b3IgbWV0aG9kIHRoYXQgd2lsbCBi ZSBleGVjdXRlZCB3aGVuIHRoZQorIAlvYmplY3QgYXR0cmlidXRlIGBgZmVhdHVyZWBgIGNvbnRh aW5zIHRoZSBjb3JyZXNwb25kaW5nIGtleShzKTo6CisgCistCQlmcm9tIHdhZmxpYi5UYXNrIGlt cG9ydCBmZWF0dXJlCisrCQlmcm9tIHdhZmxpYi5UYXNrR2VuIGltcG9ydCBmZWF0dXJlCisgCQlA ZmVhdHVyZSgnbXlmZWF0dXJlJykKKyAJCWRlZiBteWZ1bmN0aW9uKHNlbGYpOgorIAkJCXByaW50 KCd0aGF0IGlzIG15IGZlYXR1cmUhJykKK0BAIC02MzEsMTIgKzYzMSw4IEBAIGRlZiBjaG1vZF9m dW4odHNrKToKKyAJCQljbHMuc2NhbiA9IHNlbGYuc2NhbgorIAkJZWxpZiBoYXNfZGVwczoKKyAJ CQlkZWYgc2NhbihzZWxmKToKKy0JCQkJbm9kZXMgPSBbXQorLQkJCQlmb3IgeCBpbiBzZWxmLmdl bmVyYXRvci50b19saXN0KGdldGF0dHIoc2VsZi5nZW5lcmF0b3IsICdkZXBzJywgTm9uZSkpOgor LQkJCQkJbm9kZSA9IHNlbGYuZ2VuZXJhdG9yLnBhdGguZmluZF9yZXNvdXJjZSh4KQorLQkJCQkJ aWYgbm90IG5vZGU6CistCQkJCQkJc2VsZi5nZW5lcmF0b3IuYmxkLmZhdGFsKCdDb3VsZCBub3Qg ZmluZCAlciAod2FzIGl0IGRlY2xhcmVkPyknICUgeCkKKy0JCQkJCW5vZGVzLmFwcGVuZChub2Rl KQorKwkJCQlkZXBzID0gZ2V0YXR0cihzZWxmLmdlbmVyYXRvciwgJ2RlcHMnLCBOb25lKQorKwkJ CQlub2RlcyA9IHNlbGYuZ2VuZXJhdG9yLnRvX25vZGVzKGRlcHMpCisgCQkJCXJldHVybiBbbm9k ZXMsIFtdXQorIAkJCWNscy5zY2FuID0gc2NhbgorIAorQEAgLTcyNyw3ICs3MjMsNyBAQCBkZWYg c2VxdWVuY2Vfb3JkZXIoc2VsZik6CisgCXNlbGYuYmxkLnByZXYgPSBzZWxmCisgCisgCistcmVf bTQgPSByZS5jb21waWxlKCdAKFx3KylAJywgcmUuTSkKKytyZV9tNCA9IHJlLmNvbXBpbGUocidA KFx3KylAJywgcmUuTSkKKyAKKyBjbGFzcyBzdWJzdF9wYyhUYXNrLlRhc2spOgorIAkiIiIKK0BA IC05MDUsNyArOTAxLDcgQEAgZGVmIGJ1aWxkKGJsZCk6CisgCQkjIHBhcmFub2lkIHNhZmV0eSBt ZWFzdXJlIGZvciB0aGUgZ2VuZXJhbCBjYXNlIGZvby5pbi0+Zm9vLmggd2l0aCBhbWJpZ3VvdXMg ZGVwZW5kZW5jaWVzCisgCQlmb3IgeHQgaW4gSEVBREVSX0VYVFM6CisgCQkJaWYgYi5uYW1lLmVu ZHN3aXRoKHh0KToKKy0JCQkJdHNrLmV4dF9pbiA9IHRzay5leHRfaW4gKyBbJy5oJ10KKysJCQkJ dHNrLmV4dF9vdXQgPSB0c2suZXh0X291dCArIFsnLmgnXQorIAkJCQlicmVhaworIAorIAkJaW5z dF90byA9IGdldGF0dHIoc2VsZiwgJ2luc3RhbGxfcGF0aCcsIE5vbmUpCitkaWZmIC0tZ2l0IGEv d2FmbGliL1Rvb2xzL2NfYWxpYXNlcy5weSBiL3dhZmxpYi9Ub29scy9jX2FsaWFzZXMucHkKK2lu ZGV4IGM5ZDUzNjkyZS4uOTI4Y2ZlMjljIDEwMDY0NAorLS0tIGEvd2FmbGliL1Rvb2xzL2NfYWxp YXNlcy5weQorKysrIGIvd2FmbGliL1Rvb2xzL2NfYWxpYXNlcy5weQorQEAgLTM4LDcgKzM4LDcg QEAgZGVmIHNuaWZmX2ZlYXR1cmVzKCoqa3cpOgorIAk6cmV0dXJuOiB0aGUgbGlzdCBvZiBmZWF0 dXJlcyBmb3IgYSB0YXNrIGdlbmVyYXRvciBwcm9jZXNzaW5nIHRoZSBzb3VyY2UgZmlsZXMKKyAJ OnJ0eXBlOiBsaXN0IG9mIHN0cmluZworIAkiIiIKKy0JZXh0cyA9IGdldF9leHRlbnNpb25zKGt3 Wydzb3VyY2UnXSkKKysJZXh0cyA9IGdldF9leHRlbnNpb25zKGt3LmdldCgnc291cmNlJywgW10p KQorIAl0eXAgPSBrd1sndHlwJ10KKyAJZmVhdHMgPSBbXQorIAorQEAgLTQ3LDEwICs0NywxMiBA QCBkZWYgc25pZmZfZmVhdHVyZXMoKiprdyk6CisgCQlpZiB4IGluIGV4dHM6CisgCQkJZmVhdHMu YXBwZW5kKCdjeHgnKQorIAkJCWJyZWFrCistCisgCWlmICdjJyBpbiBleHRzIG9yICd2YWxhJyBp biBleHRzIG9yICdncycgaW4gZXh0czoKKyAJCWZlYXRzLmFwcGVuZCgnYycpCisgCisrCWlmICdz JyBpbiBleHRzIG9yICdTJyBpbiBleHRzOgorKwkJZmVhdHMuYXBwZW5kKCdhc20nKQorKworIAlm b3IgeCBpbiAnZiBmOTAgRiBGOTAgZm9yIEZPUicuc3BsaXQoKToKKyAJCWlmIHggaW4gZXh0czoK KyAJCQlmZWF0cy5hcHBlbmQoJ2ZjJykKK0BAIC02NiwxMSArNjgsMTEgQEAgZGVmIHNuaWZmX2Zl YXR1cmVzKCoqa3cpOgorIAlpZiB0eXAgaW4gKCdwcm9ncmFtJywgJ3NobGliJywgJ3N0bGliJyk6 CisgCQl3aWxsX2xpbmsgPSBGYWxzZQorIAkJZm9yIHggaW4gZmVhdHM6CistCQkJaWYgeCBpbiAo J2N4eCcsICdkJywgJ2ZjJywgJ2MnKToKKysJCQlpZiB4IGluICgnY3h4JywgJ2QnLCAnZmMnLCAn YycsICdhc20nKToKKyAJCQkJZmVhdHMuYXBwZW5kKHggKyB0eXApCisgCQkJCXdpbGxfbGluayA9 IFRydWUKKyAJCWlmIG5vdCB3aWxsX2xpbmsgYW5kIG5vdCBrdy5nZXQoJ2ZlYXR1cmVzJywgW10p OgorLQkJCXJhaXNlIEVycm9ycy5XYWZFcnJvcignQ2Fubm90IGxpbmsgZnJvbSAlciwgdHJ5IHBh c3NpbmcgZWc6IGZlYXR1cmVzPSJjIGNwcm9ncmFtIj8nICUga3cpCisrCQkJcmFpc2UgRXJyb3Jz LldhZkVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGhvdyB0byBsaW5rICVyLCB0cnkgYWRkaW5n IGVnOiBmZWF0dXJlcz0iYyBjc2hsaWIiPycgJSBrdykKKyAJcmV0dXJuIGZlYXRzCisgCisgZGVm IHNldF9mZWF0dXJlcyhrdywgdHlwKToKK2RpZmYgLS1naXQgYS93YWZsaWIvVG9vbHMvY19jb25m aWcucHkgYi93YWZsaWIvVG9vbHMvY19jb25maWcucHkKK2luZGV4IGQyYjNjMGQ4Zi4uZjVhYjE5 YmY2IDEwMDY0NAorLS0tIGEvd2FmbGliL1Rvb2xzL2NfY29uZmlnLnB5CisrKysgYi93YWZsaWIv VG9vbHMvY19jb25maWcucHkKK0BAIC02OCw2ICs2OCw4IEBACisgJ19fczM5MF9fJyAgICA6ICdz MzkwJywKKyAnX19zaF9fJyAgICAgIDogJ3NoJywKKyAnX194dGVuc2FfXycgIDogJ3h0ZW5zYScs CisrJ19fZTJrX18nICAgICA6ICdlMmsnLAorKydfX3Jpc2N2JyAgICAgOiAncmlzY3YnLAorIH0K KyAKKyBAY29uZgorQEAgLTg2LDYgKzg4LDEwIEBAIGRlZiBjb25maWd1cmUoY29uZik6CisgCTp0 eXBlIHVzZWxpYl9zdG9yZTogc3RyaW5nCisgCTpwYXJhbSBlbnY6IGNvbmZpZyBzZXQgb3IgY29u Zi5lbnYgYnkgZGVmYXVsdAorIAk6dHlwZSBlbnY6IDpweTpjbGFzczpgd2FmbGliLkNvbmZpZ1Nl dC5Db25maWdTZXRgCisrCTpwYXJhbSBmb3JjZV9zdGF0aWM6IGZvcmNlIHVzYWdlIG9mIHN0YXRp YyBsaWJyYXJpZXMKKysJOnR5cGUgZm9yY2Vfc3RhdGljOiBib29sIGRlZmF1bHQgRmFsc2UKKysJ OnBhcmFtIHBvc2l4OiB1c2FnZSBvZiBQT1NJWCBtb2RlIGZvciBzaGxleCBsZXhpY2FsIGFuYWxp eXNpcyBsaWJyYXJ5CisrCTp0eXBlIHBvc2l4OiBib29sIGRlZmF1bHQgVHJ1ZQorIAkiIiIKKyAK KyAJYXNzZXJ0KGlzaW5zdGFuY2UobGluZSwgc3RyKSkKK0BAIC0xMDMsNiArMTA5LDggQEAgZGVm IGNvbmZpZ3VyZShjb25mKToKKyAJbGV4LmNvbW1lbnRlcnMgPSAnJworIAlsc3QgPSBsaXN0KGxl eCkKKyAKKysJc29fcmUgPSByZS5jb21waWxlKHIiXC5zbyg/OlwuWzAtOV0rKSokIikKKysKKyAJ IyBhcHBlbmRfdW5pcXVlIGlzIG5vdCBhbHdheXMgcG9zc2libGUKKyAJIyBmb3IgZXhhbXBsZSwg YXBwbGUgZmxhZ3MgbWF5IHJlcXVpcmUgYm90aCAtYXJjaCBpMzg2IGFuZCAtYXJjaCBwcGMKKyAJ dXNlbGliID0gdXNlbGliX3N0b3JlCitAQCAtMTQ0LDcgKzE1Miw3IEBAIGRlZiBhcHB1KHZhciwg dmFsKToKKyAJCWVsaWYgeC5zdGFydHN3aXRoKCctc3RkPScpOgorIAkJCXByZWZpeCA9ICdDWFhG TEFHUycgaWYgJysrJyBpbiB4IGVsc2UgJ0NGTEFHUycKKyAJCQlhcHAocHJlZml4LCB4KQorLQkJ ZWxpZiB4LnN0YXJ0c3dpdGgoJysnKSBvciB4IGluICgnLXB0aHJlYWQnLCAnLWZQSUMnLCAnLWZw aWMnLCAnLWZQSUUnLCAnLWZwaWUnKToKKysJCWVsaWYgeC5zdGFydHN3aXRoKCcrJykgb3IgeCBp biAoJy1wdGhyZWFkJywgJy1mUElDJywgJy1mcGljJywgJy1mUElFJywgJy1mcGllJywgJy1mbHRv JywgJy1mbm8tbHRvJyk6CisgCQkJYXBwKCdDRkxBR1MnLCB4KQorIAkJCWFwcCgnQ1hYRkxBR1Mn LCB4KQorIAkJCWFwcCgnTElOS0ZMQUdTJywgeCkKK0BAIC0xODAsNyArMTg4LDcgQEAgZGVmIGFw cHUodmFyLCB2YWwpOgorIAkJCWFwcCgnQ0ZMQUdTJywgdG1wKQorIAkJCWFwcCgnQ1hYRkxBR1Mn LCB0bXApCisgCQkJYXBwKCdMSU5LRkxBR1MnLCB0bXApCistCQllbGlmIHguZW5kc3dpdGgoKCcu YScsICcuc28nLCAnLmR5bGliJywgJy5saWInKSk6CisrCQllbGlmIHguZW5kc3dpdGgoKCcuYScs ICcuZHlsaWInLCAnLmxpYicpKSBvciBzb19yZS5zZWFyY2goeCk6CisgCQkJYXBwdSgnTElOS0ZM QUdTJywgeCkgIyBub3QgY29vbCwgIzc2MgorIAkJZWxzZToKKyAJCQlzZWxmLnRvX2xvZygnVW5o YW5kbGVkIGZsYWcgJXInICUgeCkKK0BAIC0yNDYsMTMgKzI1NCwxNSBAQCBkZWYgZXhlY19jZmco c2VsZiwga3cpOgorIAkqIGlmIG1vZHZlcnNpb24gaXMgZ2l2ZW4sIHRoZW4gcmV0dXJuIHRoZSBt b2R1bGUgdmVyc2lvbgorIAkqIGVsc2UsIGV4ZWN1dGUgdGhlICotY29uZmlnKiBwcm9ncmFtIHdp dGggdGhlICphcmdzKiBhbmQgKnZhcmlhYmxlcyogZ2l2ZW4sIGFuZCBzZXQgdGhlIGZsYWdzIG9u IHRoZSAqY29uZi5lbnYuRkxBR1NfbmFtZSogdmFyaWFibGUKKyAKKysJOnBhcmFtIHBhdGg6IHRo ZSAqKi1jb25maWcgcHJvZ3JhbSB0byB1c2UqKgorKwk6dHlwZSBwYXRoOiBsaXN0IG9mIHN0cmlu ZworIAk6cGFyYW0gYXRsZWFzdF9wa2djb25maWdfdmVyc2lvbjogbWluaW11bSBwa2ctY29uZmln IHZlcnNpb24gdG8gdXNlIChkaXNhYmxlIG90aGVyIHRlc3RzKQorIAk6dHlwZSBhdGxlYXN0X3Br Z2NvbmZpZ192ZXJzaW9uOiBzdHJpbmcKKyAJOnBhcmFtIHBhY2thZ2U6IHBhY2thZ2UgbmFtZSwg Zm9yIGV4YW1wbGUgKmd0aystMi4wKgorIAk6dHlwZSBwYWNrYWdlOiBzdHJpbmcKKy0JOnBhcmFt IHVzZWxpYl9zdG9yZTogaWYgdGhlIHRlc3QgaXMgc3VjY2Vzc2Z1bCwgZGVmaW5lIEhBVkVcXypu YW1lKi4gSXQgaXMgYWxzbyB1c2VkIHRvIGRlZmluZSAqY29uZi5lbnYuRkxBR1NfbmFtZSogdmFy aWFibGVzLgorKwk6cGFyYW0gdXNlbGliX3N0b3JlOiBpZiB0aGUgdGVzdCBpcyBzdWNjZXNzZnVs LCBkZWZpbmUgSEFWRVxcXypuYW1lKi4gSXQgaXMgYWxzbyB1c2VkIHRvIGRlZmluZSAqY29uZi5l bnYuRkxBR1NfbmFtZSogdmFyaWFibGVzLgorIAk6dHlwZSB1c2VsaWJfc3RvcmU6IHN0cmluZwor LQk6cGFyYW0gbW9kdmVyc2lvbjogaWYgcHJvdmlkZWQsIHJldHVybiB0aGUgdmVyc2lvbiBvZiB0 aGUgZ2l2ZW4gbW9kdWxlIGFuZCBkZWZpbmUgKm5hbWUqXF9WRVJTSU9OCisrCTpwYXJhbSBtb2R2 ZXJzaW9uOiBpZiBwcm92aWRlZCwgcmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBtb2R1 bGUgYW5kIGRlZmluZSAqbmFtZSpcXF9WRVJTSU9OCisgCTp0eXBlIG1vZHZlcnNpb246IHN0cmlu ZworIAk6cGFyYW0gYXJnczogYXJndW1lbnRzIHRvIGdpdmUgdG8gKnBhY2thZ2UqIHdoZW4gcmV0 cmlldmluZyBmbGFncworIAk6dHlwZSBhcmdzOiBsaXN0IG9mIHN0cmluZworQEAgLTI2MCw2ICsy NzAsMTIgQEAgZGVmIGV4ZWNfY2ZnKHNlbGYsIGt3KToKKyAJOnR5cGUgdmFyaWFibGVzOiBsaXN0 IG9mIHN0cmluZworIAk6cGFyYW0gZGVmaW5lX3ZhcmlhYmxlOiBhZGRpdGlvbmFsIHZhcmlhYmxl cyB0byBkZWZpbmUgKGFsc28gaW4gY29uZi5lbnYuUEtHX0NPTkZJR19ERUZJTkVTKQorIAk6dHlw ZSBkZWZpbmVfdmFyaWFibGU6IGRpY3Qoc3RyaW5nOiBzdHJpbmcpCisrCTpwYXJhbSBwa2dfY29u ZmlnX3BhdGg6IHBhdGhzIHdoZXJlIHBrZy1jb25maWcgc2hvdWxkIHNlYXJjaCBmb3IgLnBjIGNv bmZpZyBmaWxlcyAob3ZlcnJpZGVzIGVudi5QS0dfQ09ORklHX1BBVEggaWYgZXhpc3RzKQorKwk6 dHlwZSBwa2dfY29uZmlnX3BhdGg6IHN0cmluZywgbGlzdCBvZiBkaXJlY3RvcmllcyBzZXBhcmF0 ZWQgYnkgY29sb24KKysJOnBhcmFtIGZvcmNlX3N0YXRpYzogZm9yY2UgdXNhZ2Ugb2Ygc3RhdGlj IGxpYnJhcmllcworKwk6dHlwZSBmb3JjZV9zdGF0aWM6IGJvb2wgZGVmYXVsdCBGYWxzZQorKwk6 cGFyYW0gcG9zaXg6IHVzYWdlIG9mIFBPU0lYIG1vZGUgZm9yIHNobGV4IGxleGljYWwgYW5hbGl5 c2lzIGxpYnJhcnkKKysJOnR5cGUgcG9zaXg6IGJvb2wgZGVmYXVsdCBUcnVlCisgCSIiIgorIAor IAlwYXRoID0gVXRpbHMudG9fbGlzdChrd1sncGF0aCddKQorQEAgLTMzNCw2ICszNTAsNyBAQCBk ZWYgY2hlY2tfY2ZnKHNlbGYsICprLCAqKmt3KToKKyAJIiIiCisgCUNoZWNrcyBmb3IgY29uZmln dXJhdGlvbiBmbGFncyB1c2luZyBhICoqLWNvbmZpZyoqLWxpa2UgcHJvZ3JhbSAocGtnLWNvbmZp Zywgc2RsLWNvbmZpZywgZXRjKS4KKyAJVGhpcyB3cmFwcyBpbnRlcm5hbCBjYWxscyB0byA6cHk6 ZnVuYzpgd2FmbGliLlRvb2xzLmNfY29uZmlnLnZhbGlkYXRlX2NmZ2AgYW5kIDpweTpmdW5jOmB3 YWZsaWIuVG9vbHMuY19jb25maWcuZXhlY19jZmdgCisrCXNvIGNoZWNrIGV4ZWNfY2ZnIHBhcmFt ZXRlcnMgZGVzY3JpcHRpb25zIGZvciBtb3JlIGRldGFpbHMgb24ga3cgcGFzc2VkCisgCisgCUEg ZmV3IGV4YW1wbGVzOjoKKyAKK0BAIC02NTksMjAgKzY3NiwyMSBAQCBjbGFzcyB0ZXN0X2V4ZWMo VGFzay5UYXNrKToKKyAJIiIiCisgCWNvbG9yID0gJ1BJTksnCisgCWRlZiBydW4oc2VsZik6Cisr CQljbWQgPSBbc2VsZi5pbnB1dHNbMF0uYWJzcGF0aCgpXSArIGdldGF0dHIoc2VsZi5nZW5lcmF0 b3IsICd0ZXN0X2FyZ3MnLCBbXSkKKyAJCWlmIGdldGF0dHIoc2VsZi5nZW5lcmF0b3IsICdycGF0 aCcsIE5vbmUpOgorIAkJCWlmIGdldGF0dHIoc2VsZi5nZW5lcmF0b3IsICdkZWZpbmVfcmV0Jywg RmFsc2UpOgorLQkJCQlzZWxmLmdlbmVyYXRvci5ibGQucmV0dmFsID0gc2VsZi5nZW5lcmF0b3Iu YmxkLmNtZF9hbmRfbG9nKFtzZWxmLmlucHV0c1swXS5hYnNwYXRoKCldKQorKwkJCQlzZWxmLmdl bmVyYXRvci5ibGQucmV0dmFsID0gc2VsZi5nZW5lcmF0b3IuYmxkLmNtZF9hbmRfbG9nKGNtZCkK KyAJCQllbHNlOgorLQkJCQlzZWxmLmdlbmVyYXRvci5ibGQucmV0dmFsID0gc2VsZi5nZW5lcmF0 b3IuYmxkLmV4ZWNfY29tbWFuZChbc2VsZi5pbnB1dHNbMF0uYWJzcGF0aCgpXSkKKysJCQkJc2Vs Zi5nZW5lcmF0b3IuYmxkLnJldHZhbCA9IHNlbGYuZ2VuZXJhdG9yLmJsZC5leGVjX2NvbW1hbmQo Y21kKQorIAkJZWxzZToKKyAJCQllbnYgPSBzZWxmLmVudi5lbnYgb3Ige30KKyAJCQllbnYudXBk YXRlKGRpY3Qob3MuZW52aXJvbikpCisgCQkJZm9yIHZhciBpbiAoJ0xEX0xJQlJBUllfUEFUSCcs ICdEWUxEX0xJQlJBUllfUEFUSCcsICdQQVRIJyk6CisgCQkJCWVudlt2YXJdID0gc2VsZi5pbnB1 dHNbMF0ucGFyZW50LmFic3BhdGgoKSArIG9zLnBhdGgucGF0aHNlcCArIGVudi5nZXQodmFyLCAn JykKKyAJCQlpZiBnZXRhdHRyKHNlbGYuZ2VuZXJhdG9yLCAnZGVmaW5lX3JldCcsIEZhbHNlKToK Ky0JCQkJc2VsZi5nZW5lcmF0b3IuYmxkLnJldHZhbCA9IHNlbGYuZ2VuZXJhdG9yLmJsZC5jbWRf YW5kX2xvZyhbc2VsZi5pbnB1dHNbMF0uYWJzcGF0aCgpXSwgZW52PWVudikKKysJCQkJc2VsZi5n ZW5lcmF0b3IuYmxkLnJldHZhbCA9IHNlbGYuZ2VuZXJhdG9yLmJsZC5jbWRfYW5kX2xvZyhjbWQs IGVudj1lbnYpCisgCQkJZWxzZToKKy0JCQkJc2VsZi5nZW5lcmF0b3IuYmxkLnJldHZhbCA9IHNl bGYuZ2VuZXJhdG9yLmJsZC5leGVjX2NvbW1hbmQoW3NlbGYuaW5wdXRzWzBdLmFic3BhdGgoKV0s IGVudj1lbnYpCisrCQkJCXNlbGYuZ2VuZXJhdG9yLmJsZC5yZXR2YWwgPSBzZWxmLmdlbmVyYXRv ci5ibGQuZXhlY19jb21tYW5kKGNtZCwgZW52PWVudikKKyAKKyBAZmVhdHVyZSgndGVzdF9leGVj JykKKyBAYWZ0ZXJfbWV0aG9kKCdhcHBseV9saW5rJykKK0BAIC0xMjY2LDEwICsxMjg0LDExIEBA IGRlZiB0b19sb2coc2VsZiwgKmssICoqa3cpOgorIAl0YXNrcyA9IFtdCisgCisgCWlkX3RvX3Rh c2sgPSB7fQorLQlmb3IgZGN0IGluIGs6CisrCWZvciBjb3VudGVyLCBkY3QgaW4gZW51bWVyYXRl KGspOgorIAkJeCA9IFRhc2suY2xhc3Nlc1snY2ZndGFzayddKGJsZD1ibGQsIGVudj1Ob25lKQor IAkJdGFza3MuYXBwZW5kKHgpCisgCQl4LmFyZ3MgPSBkY3QKKysJCXguYXJnc1snbXVsdGljaGVj a19jb3VudGVyJ10gPSBjb3VudGVyCisgCQl4LmJsZCA9IGJsZAorIAkJeC5jb25mID0gc2VsZgor IAkJeC5hcmdzID0gZGN0CitkaWZmIC0tZ2l0IGEvd2FmbGliL1Rvb2xzL2NfcHJlcHJvYy5weSBi L3dhZmxpYi9Ub29scy9jX3ByZXByb2MucHkKK2luZGV4IDdlMDRiNGE3Yy4uNjhlNWY1YWVhIDEw MDY0NAorLS0tIGEvd2FmbGliL1Rvb2xzL2NfcHJlcHJvYy5weQorKysrIGIvd2FmbGliL1Rvb2xz L2NfcHJlcHJvYy5weQorQEAgLTc1LDEzICs3NSwxMyBAQCBjbGFzcyBQcmVwcm9jRXJyb3IoRXJy b3JzLldhZkVycm9yKToKKyAJcmUuSUdOT1JFQ0FTRSB8IHJlLk1VTFRJTElORSkKKyAiIiJNYXRj aCAjaW5jbHVkZSBsaW5lcyIiIgorIAorLXJlX21hYyA9IHJlLmNvbXBpbGUoIl5bYS16QS1aX11c dyoiKQorK3JlX21hYyA9IHJlLmNvbXBpbGUociJeW2EtekEtWl9dXHcqIikKKyAiIiJNYXRjaCBt YWNybyBkZWZpbml0aW9ucyIiIgorIAorIHJlX2Z1biA9IHJlLmNvbXBpbGUoJ15bYS16QS1aX11b YS16QS1aMC05X10qWyhdJykKKyAiIiJNYXRjaCBtYWNybyBmdW5jdGlvbnMiIiIKKyAKKy1yZV9w cmFnbWFfb25jZSA9IHJlLmNvbXBpbGUoJ15ccypvbmNlXHMqJywgcmUuSUdOT1JFQ0FTRSkKKyty ZV9wcmFnbWFfb25jZSA9IHJlLmNvbXBpbGUocideXHMqb25jZVxzKicsIHJlLklHTk9SRUNBU0Up CisgIiIiTWF0Y2ggI3ByYWdtYSBvbmNlIHN0YXRlbWVudHMiIiIKKyAKKyByZV9ubCA9IHJlLmNv bXBpbGUoJ1xcXFxccipcbicsIHJlLk1VTFRJTElORSkKK0BAIC02NjAsNyArNjYwLDcgQEAgZGVm IGV4dHJhY3RfbWFjcm8odHh0KToKKyAJCQkjIGVtcHR5IGRlZmluZSwgYXNzaWduIGFuIGVtcHR5 IHRva2VuCisgCQkJcmV0dXJuICh2LCBbW10sIFsoJ1QnLCcnKV1dKQorIAorLXJlX2luY2x1ZGUg PSByZS5jb21waWxlKCdeXHMqKDwoPzouKik+fCIoPzouKikiKScpCisrcmVfaW5jbHVkZSA9IHJl LmNvbXBpbGUocideXHMqKDwoPzouKik+fCIoPzouKikiKScpCisgZGVmIGV4dHJhY3RfaW5jbHVk ZSh0eHQsIGRlZnMpOgorIAkiIiIKKyAJUHJvY2VzcyBhIGxpbmUgaW4gdGhlIGZvcm06OgorZGlm ZiAtLWdpdCBhL3dhZmxpYi9Ub29scy9jX3Rlc3RzLnB5IGIvd2FmbGliL1Rvb2xzL2NfdGVzdHMu cHkKK2luZGV4IGY4NThkZjU3Ni4uYmRkMTg2YzZiIDEwMDY0NAorLS0tIGEvd2FmbGliL1Rvb2xz L2NfdGVzdHMucHkKKysrKyBiL3dhZmxpYi9Ub29scy9jX3Rlc3RzLnB5CitAQCAtMTgwLDkgKzE4 MCwxNSBAQCBkZWYgY2hlY2tfbGFyZ2VfZmlsZShzZWxmLCAqKmt3KToKKyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisgCisgRU5ESUFOX0ZSQUdNRU5UID0gJycnCisrI2lmZGVmIF9N U0NfVkVSCisrI2RlZmluZSB0ZXN0c2hsaWJfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQor KyNlbHNlCisrI2RlZmluZSB0ZXN0c2hsaWJfRVhQT1JUCisrI2VuZGlmCisrCisgc2hvcnQgaW50 IGFzY2lpX21tW10gPSB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAw eDc5NTMsIDAgfTsKKyBzaG9ydCBpbnQgYXNjaWlfaWlbXSA9IHsgMHg2OTRDLCAweDU0NTQsIDB4 NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9OworLWludCB1c2VfYXNjaWkgKGludCBp KSB7CisraW50IHRlc3RzaGxpYl9FWFBPUlQgdXNlX2FzY2lpIChpbnQgaSkgeworIAlyZXR1cm4g YXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKKyB9Cisgc2hvcnQgaW50IGViY2RpY19paVtdID0g eyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CitA QCAtMjA4LDEyICsyMTQsMTIgQEAgZGVmIHJ1bihzZWxmKToKKyAJCQlyZXR1cm4gLTEKKyAKKyBA ZmVhdHVyZSgnZ3JlcF9mb3JfZW5kaWFubmVzcycpCistQGFmdGVyX21ldGhvZCgncHJvY2Vzc19z b3VyY2UnKQorK0BhZnRlcl9tZXRob2QoJ2FwcGx5X2xpbmsnKQorIGRlZiBncmVwX2Zvcl9lbmRp YW5uZXNzX2Z1bihzZWxmKToKKyAJIiIiCisgCVVzZWQgYnkgdGhlIGVuZGlhbm5lc3MgY29uZmln dXJhdGlvbiB0ZXN0CisgCSIiIgorLQlzZWxmLmNyZWF0ZV90YXNrKCdncmVwX2Zvcl9lbmRpYW5u ZXNzJywgc2VsZi5jb21waWxlZF90YXNrc1swXS5vdXRwdXRzWzBdKQorKwlzZWxmLmNyZWF0ZV90 YXNrKCdncmVwX2Zvcl9lbmRpYW5uZXNzJywgc2VsZi5saW5rX3Rhc2sub3V0cHV0c1swXSkKKyAK KyBAY29uZgorIGRlZiBjaGVja19lbmRpYW5uZXNzKHNlbGYpOgorQEAgLTIyMyw3ICsyMjksOSBA QCBkZWYgY2hlY2tfZW5kaWFubmVzcyhzZWxmKToKKyAJdG1wID0gW10KKyAJZGVmIGNoZWNrX21z ZyhzZWxmKToKKyAJCXJldHVybiB0bXBbMF0KKy0Jc2VsZi5jaGVjayhmcmFnbWVudD1FTkRJQU5f RlJBR01FTlQsIGZlYXR1cmVzPSdjIGdyZXBfZm9yX2VuZGlhbm5lc3MnLAorLQkJbXNnPSdDaGVj a2luZyBmb3IgZW5kaWFubmVzcycsIGRlZmluZT0nRU5ESUFOTkVTUycsIHRtcD10bXAsIG9rbXNn PWNoZWNrX21zZykKKysKKysJc2VsZi5jaGVjayhmcmFnbWVudD1FTkRJQU5fRlJBR01FTlQsIGZl YXR1cmVzPSdjIGNzaGxpYiBncmVwX2Zvcl9lbmRpYW5uZXNzJywKKysJCW1zZz0nQ2hlY2tpbmcg Zm9yIGVuZGlhbm5lc3MnLCBkZWZpbmU9J0VORElBTk5FU1MnLCB0bXA9dG1wLAorKwkJb2ttc2c9 Y2hlY2tfbXNnLCBjb25mY2FjaGU9Tm9uZSkKKyAJcmV0dXJuIHRtcFswXQorIAorZGlmZiAtLWdp dCBhL3dhZmxpYi9Ub29scy9jY3Jvb3QucHkgYi93YWZsaWIvVG9vbHMvY2Nyb290LnB5CitpbmRl eCA0ODQ4NDZmNWYuLjUzMzk5MjkwMyAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Ub29scy9jY3Jvb3Qu cHkKKysrKyBiL3dhZmxpYi9Ub29scy9jY3Jvb3QucHkKK0BAIC0xMTEsNyArMTExLDcgQEAgZGVm IGFwcGx5X2luY3BhdGhzKHNlbGYpOgorIAkJdGcgPSBibGQoZmVhdHVyZXM9J2luY2x1ZGVzJywg aW5jbHVkZXM9Jy4nKQorIAorIAlUaGUgZm9sZGVycyBvbmx5IG5lZWQgdG8gYmUgcmVsYXRpdmUg dG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGUgZXF1aXZhbGVudCBidWlsZCBkaXJlY3Rvcnkg aXMKKy0JYWRkZWQgYXV0b21hdGljYWxseSAoZm9yIGhlYWRlcnMgY3JlYXRlZCBpbiB0aGUgYnVp bGQgZGlyZWN0b3J5KS4gVGhpcyBlbmFibGUgdXNpbmcgYSBidWlsZCBkaXJlY3RvcnkKKysJYWRk ZWQgYXV0b21hdGljYWxseSAoZm9yIGhlYWRlcnMgY3JlYXRlZCBpbiB0aGUgYnVpbGQgZGlyZWN0 b3J5KS4gVGhpcyBlbmFibGVzIHVzaW5nIGEgYnVpbGQgZGlyZWN0b3J5CisgCW9yIG5vdCAoYGB0 b3AgPT0gb3V0YGApLgorIAorIAlUaGlzIG1ldGhvZCB3aWxsIGFkZCBhIGxpc3Qgb2Ygbm9kZXMg cmVhZCBieSA6cHk6ZnVuYzpgd2FmbGliLlRvb2xzLmNjcm9vdC50b19pbmNub2Rlc2AgaW4gYGB0 Zy5lbnYuSU5DUEFUSFNgYCwKK0BAIC0xMjgsNiArMTI4LDcgQEAgY2xhc3MgbGlua190YXNrKFRh c2suVGFzayk6CisgCUJhc2UgY2xhc3MgZm9yIGFsbCBsaW5rIHRhc2tzLiBBIHRhc2sgZ2VuZXJh dG9yIGlzIHN1cHBvc2VkIHRvIGhhdmUgYXQgbW9zdCBvbmUgbGluayB0YXNrIGJvdW5kIGluIHRo ZSBhdHRyaWJ1dGUgKmxpbmtfdGFzayouIFNlZSA6cHk6ZnVuYzpgd2FmbGliLlRvb2xzLmNjcm9v dC5hcHBseV9saW5rYC4KKyAKKyAJLi4gaW5oZXJpdGFuY2UtZGlhZ3JhbTo6IHdhZmxpYi5Ub29s cy5jY3Jvb3Quc3RsaW5rX3Rhc2sgd2FmbGliLlRvb2xzLmMuY3Byb2dyYW0gd2FmbGliLlRvb2xz LmMuY3NobGliIHdhZmxpYi5Ub29scy5jeHguY3h4c3RsaWIgIHdhZmxpYi5Ub29scy5jeHguY3h4 cHJvZ3JhbSB3YWZsaWIuVG9vbHMuY3h4LmN4eHNobGliIHdhZmxpYi5Ub29scy5kLmRwcm9ncmFt IHdhZmxpYi5Ub29scy5kLmRzaGxpYiB3YWZsaWIuVG9vbHMuZC5kc3RsaWIgd2FmbGliLlRvb2xz LmNjcm9vdC5mYWtlX3NobGliIHdhZmxpYi5Ub29scy5jY3Jvb3QuZmFrZV9zdGxpYiB3YWZsaWIu VG9vbHMuYXNtLmFzbXByb2dyYW0gd2FmbGliLlRvb2xzLmFzbS5hc21zaGxpYiB3YWZsaWIuVG9v bHMuYXNtLmFzbXN0bGliCisrCSAgOnRvcC1jbGFzc2VzOiB3YWZsaWIuVG9vbHMuY2Nyb290Lmxp bmtfdGFzaworIAkiIiIKKyAJY29sb3IgICA9ICdZRUxMT1cnCisgCitAQCAtMjM4LDYgKzIzOSwx NyBAQCBkZWYgd3JhcChzZWxmKToKKyAJc2V0YXR0cihjbHMsICdydW4nLCB3cmFwKQorIHJtX3Rn dChzdGxpbmtfdGFzaykKKyAKKytAZmVhdHVyZSgnc2tpcF9zdGxpYl9saW5rX2RlcHMnKQorK0Bi ZWZvcmVfbWV0aG9kKCdwcm9jZXNzX3VzZScpCisrZGVmIGFwcGx5X3NraXBfc3RsaWJfbGlua19k ZXBzKHNlbGYpOgorKwkiIiIKKysJVGhpcyBlbmFibGVzIGFuIG9wdGltaXphdGlvbiBpbiB0aGUg OnB5OmZ1bmM6d2FmaWxiLlRvb2xzLmNjcm9vdC5wcm9jZXNzZXNfdXNlOiBtZXRob2QgdGhhdCBz a2lwcyBkZXBlbmRlbmN5IGFuZAorKwlsaW5rIGZsYWcgb3B0aW1pemF0aW9ucyBmb3IgdGFyZ2V0 cyB0aGF0IGdlbmVyYXRlIHN0YXRpYyBsaWJyYXJpZXMgKHZpYSB0aGUgOnB5OmNsYXNzOlRvb2xz LmNjcm9vdC5zdGxpbmtfdGFzayB0YXNrKS4KKysJVGhlIGFjdHVhbCBiZWhhdmlvciBpcyBpbXBs ZW1lbnRlZCBpbiA6cHk6ZnVuYzp3YWZpbGIuVG9vbHMuY2Nyb290LnByb2Nlc3Nlc191c2U6IG1l dGhvZCBzbyB0aGlzIGZlYXR1cmUgb25seSB0ZWxscyB3YWYKKysJdG8gZW5hYmxlIHRoZSBuZXcg YmVoYXZpb3IuCisrCSIiIgorKwlzZWxmLmVudi5TS0lQX1NUTElCX0xJTktfREVQUyA9IFRydWUK KysKKyBAZmVhdHVyZSgnYycsICdjeHgnLCAnZCcsICdmYycsICdhc20nKQorIEBhZnRlcl9tZXRo b2QoJ3Byb2Nlc3Nfc291cmNlJykKKyBkZWYgYXBwbHlfbGluayhzZWxmKToKK0BAIC0zODYsNyAr Mzk4LDExIEBAIGRlZiBidWlsZChibGQpOgorIAkJeSA9IHNlbGYuYmxkLmdldF90Z2VuX2J5X25h bWUoeCkKKyAJCXZhciA9IHkudG1wX3VzZV92YXIKKyAJCWlmIHZhciBhbmQgbGlua190YXNrOgor LQkJCWlmIHZhciA9PSAnTElCJyBvciB5LnRtcF91c2Vfc3RsaWIgb3IgeCBpbiBuYW1lczoKKysJ CQlpZiBzZWxmLmVudi5TS0lQX1NUTElCX0xJTktfREVQUyBhbmQgaXNpbnN0YW5jZShsaW5rX3Rh c2ssIHN0bGlua190YXNrKToKKysJCQkJIyBJZiB0aGUgc2tpcF9zdGxpYl9saW5rX2RlcHMgZmVh dHVyZSBpcyBlbmFibGVkIHRoZW4gd2Ugc2hvdWxkCisrCQkJCSMgYXZvaWQgYWRkaW5nIGxpYiBk ZXBzIHRvIHRoZSBzdGxpbmtfdGFzayBpbnN0YW5jZS4KKysJCQkJcGFzcworKwkJCWVsaWYgdmFy ID09ICdMSUInIG9yIHkudG1wX3VzZV9zdGxpYiBvciB4IGluIG5hbWVzOgorIAkJCQlzZWxmLmVu di5hcHBlbmRfdmFsdWUodmFyLCBbeS50YXJnZXRbeS50YXJnZXQucmZpbmQob3Muc2VwKSArIDE6 XV0pCisgCQkJCXNlbGYubGlua190YXNrLmRlcF9ub2Rlcy5leHRlbmQoeS5saW5rX3Rhc2sub3V0 cHV0cykKKyAJCQkJdG1wX3BhdGggPSB5LmxpbmtfdGFzay5vdXRwdXRzWzBdLnBhcmVudC5wYXRo X2Zyb20oc2VsZi5nZXRfY3dkKCkpCitkaWZmIC0tZ2l0IGEvd2FmbGliL1Rvb2xzL2NvbXBpbGVy X2MucHkgYi93YWZsaWIvVG9vbHMvY29tcGlsZXJfYy5weQoraW5kZXggMmRiYTNmODI3Li5lMDMz Y2U2YzUgMTAwNjQ0CistLS0gYS93YWZsaWIvVG9vbHMvY29tcGlsZXJfYy5weQorKysrIGIvd2Fm bGliL1Rvb2xzL2NvbXBpbGVyX2MucHkKK0BAIC0zNiwxOCArMzYsMTkgQEAgZGVmIGJ1aWxkKGJs ZCk6CisgZnJvbSB3YWZsaWIuTG9ncyBpbXBvcnQgZGVidWcKKyAKKyBjX2NvbXBpbGVyID0gewor LSd3aW4zMic6ICBbJ21zdmMnLCAnZ2NjJywgJ2NsYW5nJ10sCistJ2N5Z3dpbic6IFsnZ2NjJ10s CistJ2Rhcndpbic6IFsnY2xhbmcnLCAnZ2NjJ10sCistJ2FpeCc6ICAgIFsneGxjJywgJ2djYycs ICdjbGFuZyddLAorLSdsaW51eCc6ICBbJ2djYycsICdjbGFuZycsICdpY2MnXSwKKy0nc3Vub3Mn OiAgWydzdW5jYycsICdnY2MnXSwKKy0naXJpeCc6ICAgWydnY2MnLCAnaXJpeGNjJ10sCistJ2hw dXgnOiAgIFsnZ2NjJ10sCistJ29zZjFWJzogIFsnZ2NjJ10sCistJ2dudSc6ICAgIFsnZ2NjJywg J2NsYW5nJ10sCistJ2phdmEnOiAgIFsnZ2NjJywgJ21zdmMnLCAnY2xhbmcnLCAnaWNjJ10sCist J2RlZmF1bHQnOlsnY2xhbmcnLCAnZ2NjJ10sCisrJ3dpbjMyJzogICAgICAgWydtc3ZjJywgJ2dj YycsICdjbGFuZyddLAorKydjeWd3aW4nOiAgICAgIFsnZ2NjJywgJ2NsYW5nJ10sCisrJ2Rhcndp bic6ICAgICAgWydjbGFuZycsICdnY2MnXSwKKysnYWl4JzogICAgICAgICBbJ3hsYycsICdnY2Mn LCAnY2xhbmcnXSwKKysnbGludXgnOiAgICAgICBbJ2djYycsICdjbGFuZycsICdpY2MnXSwKKysn c3Vub3MnOiAgICAgICBbJ3N1bmNjJywgJ2djYyddLAorKydpcml4JzogICAgICAgIFsnZ2NjJywg J2lyaXhjYyddLAorKydocHV4JzogICAgICAgIFsnZ2NjJ10sCisrJ29zZjFWJzogICAgICAgWydn Y2MnXSwKKysnZ251JzogICAgICAgICBbJ2djYycsICdjbGFuZyddLAorKydqYXZhJzogICAgICAg IFsnZ2NjJywgJ21zdmMnLCAnY2xhbmcnLCAnaWNjJ10sCisrJ2dudWtmcmVlYnNkJzogWydnY2Mn LCAnY2xhbmcnXSwKKysnZGVmYXVsdCc6ICAgICBbJ2NsYW5nJywgJ2djYyddLAorIH0KKyAiIiIK KyBEaWN0IG1hcHBpbmcgcGxhdGZvcm0gbmFtZXMgdG8gV2FmIHRvb2xzIGZpbmRpbmcgc3BlY2lm aWMgQyBjb21waWxlcnM6OgorZGlmZiAtLWdpdCBhL3dhZmxpYi9Ub29scy9jb21waWxlcl9jeHgu cHkgYi93YWZsaWIvVG9vbHMvY29tcGlsZXJfY3h4LnB5CitpbmRleCAxYWY2NWEyMjYuLjQyNjU4 YzU4NCAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Ub29scy9jb21waWxlcl9jeHgucHkKKysrKyBiL3dh ZmxpYi9Ub29scy9jb21waWxlcl9jeHgucHkKK0BAIC0zNywxOCArMzcsMTkgQEAgZGVmIGJ1aWxk KGJsZCk6CisgZnJvbSB3YWZsaWIuTG9ncyBpbXBvcnQgZGVidWcKKyAKKyBjeHhfY29tcGlsZXIg PSB7CistJ3dpbjMyJzogIFsnbXN2YycsICdnKysnLCAnY2xhbmcrKyddLAorLSdjeWd3aW4nOiBb J2crKyddLAorLSdkYXJ3aW4nOiBbJ2NsYW5nKysnLCAnZysrJ10sCistJ2FpeCc6ICAgIFsneGxj KysnLCAnZysrJywgJ2NsYW5nKysnXSwKKy0nbGludXgnOiAgWydnKysnLCAnY2xhbmcrKycsICdp Y3BjJ10sCistJ3N1bm9zJzogIFsnc3VuYysrJywgJ2crKyddLAorLSdpcml4JzogICBbJ2crKydd LAorLSdocHV4JzogICBbJ2crKyddLAorLSdvc2YxVic6ICBbJ2crKyddLAorLSdnbnUnOiAgICBb J2crKycsICdjbGFuZysrJ10sCistJ2phdmEnOiAgIFsnZysrJywgJ21zdmMnLCAnY2xhbmcrKycs ICdpY3BjJ10sCistJ2RlZmF1bHQnOiBbJ2NsYW5nKysnLCAnZysrJ10KKysnd2luMzInOiAgICAg ICBbJ21zdmMnLCAnZysrJywgJ2NsYW5nKysnXSwKKysnY3lnd2luJzogICAgICBbJ2crKycsICdj bGFuZysrJ10sCisrJ2Rhcndpbic6ICAgICAgWydjbGFuZysrJywgJ2crKyddLAorKydhaXgnOiAg ICAgICAgIFsneGxjKysnLCAnZysrJywgJ2NsYW5nKysnXSwKKysnbGludXgnOiAgICAgICBbJ2cr KycsICdjbGFuZysrJywgJ2ljcGMnXSwKKysnc3Vub3MnOiAgICAgICBbJ3N1bmMrKycsICdnKysn XSwKKysnaXJpeCc6ICAgICAgICBbJ2crKyddLAorKydocHV4JzogICAgICAgIFsnZysrJ10sCisr J29zZjFWJzogICAgICAgWydnKysnXSwKKysnZ251JzogICAgICAgICBbJ2crKycsICdjbGFuZysr J10sCisrJ2phdmEnOiAgICAgICAgWydnKysnLCAnbXN2YycsICdjbGFuZysrJywgJ2ljcGMnXSwK KysnZ251a2ZyZWVic2QnOiBbJ2crKycsICdjbGFuZysrJ10sCisrJ2RlZmF1bHQnOiAgICAgWydj bGFuZysrJywgJ2crKyddCisgfQorICIiIgorIERpY3QgbWFwcGluZyB0aGUgcGxhdGZvcm0gbmFt ZXMgdG8gV2FmIHRvb2xzIGZpbmRpbmcgc3BlY2lmaWMgQysrIGNvbXBpbGVyczo6CitkaWZmIC0t Z2l0IGEvd2FmbGliL1Rvb2xzL2lyaXhjYy5weSBiL3dhZmxpYi9Ub29scy9pcml4Y2MucHkKK2lu ZGV4IGMzYWUxYWM5MS4uMDMzNWMxM2NiIDEwMDY0NAorLS0tIGEvd2FmbGliL1Rvb2xzL2lyaXhj Yy5weQorKysrIGIvd2FmbGliL1Rvb2xzL2lyaXhjYy5weQorQEAgLTEzLDIyICsxMywxMSBAQAor IEBjb25mCisgZGVmIGZpbmRfaXJpeGNjKGNvbmYpOgorIAl2ID0gY29uZi5lbnYKKy0JY2MgPSBO b25lCistCWlmIHYuQ0M6CistCQljYyA9IHYuQ0MKKy0JZWxpZiAnQ0MnIGluIGNvbmYuZW52aXJv bjoKKy0JCWNjID0gY29uZi5lbnZpcm9uWydDQyddCistCWlmIG5vdCBjYzoKKy0JCWNjID0gY29u Zi5maW5kX3Byb2dyYW0oJ2NjJywgdmFyPSdDQycpCistCWlmIG5vdCBjYzoKKy0JCWNvbmYuZmF0 YWwoJ2lyaXhjYyB3YXMgbm90IGZvdW5kJykKKy0KKysJY2MgPSBjb25mLmZpbmRfcHJvZ3JhbSgn Y2MnLCB2YXI9J0NDJykKKyAJdHJ5OgorIAkJY29uZi5jbWRfYW5kX2xvZyhjYyArIFsnLXZlcnNp b24nXSkKKyAJZXhjZXB0IEVycm9ycy5XYWZFcnJvcjoKKyAJCWNvbmYuZmF0YWwoJyVyIC12ZXJz aW9uIGNvdWxkIG5vdCBiZSBleGVjdXRlZCcgJSBjYykKKy0KKy0Jdi5DQyA9IGNjCisgCXYuQ0Nf TkFNRSA9ICdpcml4JworIAorIEBjb25mCitAQCAtNTcsNyArNDYsNiBAQCBkZWYgaXJpeGNjX2Nv bW1vbl9mbGFncyhjb25mKToKKyAKKyBkZWYgY29uZmlndXJlKGNvbmYpOgorIAljb25mLmZpbmRf aXJpeGNjKCkKKy0JY29uZi5maW5kX2NwcCgpCisgCWNvbmYuZmluZF9hcigpCisgCWNvbmYuaXJp eGNjX2NvbW1vbl9mbGFncygpCisgCWNvbmYuY2NfbG9hZF90b29scygpCitkaWZmIC0tZ2l0IGEv d2FmbGliL1Rvb2xzL21zdmMucHkgYi93YWZsaWIvVG9vbHMvbXN2Yy5weQoraW5kZXggMTdiMzQ3 ZDQ1Li5kNjBmNjcwMjYgMTAwNjQ0CistLS0gYS93YWZsaWIvVG9vbHMvbXN2Yy5weQorKysrIGIv d2FmbGliL1Rvb2xzL21zdmMucHkKK0BAIC05OSwxMCArOTksMzEgQEAgZGVmIGJ1aWxkKGJsZCk6 CisgIiIiTGlzdCBvZiBpY2wgcGxhdGZvcm1zIiIiCisgCisgZGVmIG9wdGlvbnMob3B0KToKKy0J b3B0LmFkZF9vcHRpb24oJy0tbXN2Y192ZXJzaW9uJywgdHlwZT0nc3RyaW5nJywgaGVscCA9ICdt c3ZjIHZlcnNpb24sIGVnOiAibXN2YyAxMC4wLG1zdmMgOS4wIicsIGRlZmF1bHQ9JycpCisrCWRl ZmF1bHRfdmVyID0gJycKKysJdnN2ZXIgPSBvcy5nZXRlbnYoJ1ZTQ01EX1ZFUicpCisrCWlmIHZz dmVyOgorKwkJbSA9IHJlLm1hdGNoKHInKF5cZCtcLlxkKykuKicsIHZzdmVyKQorKwkJaWYgbToK KysJCQlkZWZhdWx0X3ZlciA9ICdtc3ZjICVzJyAlIG0uZ3JvdXAoMSkKKysJb3B0LmFkZF9vcHRp b24oJy0tbXN2Y192ZXJzaW9uJywgdHlwZT0nc3RyaW5nJywgaGVscCA9ICdtc3ZjIHZlcnNpb24s IGVnOiAibXN2YyAxMC4wLG1zdmMgOS4wIicsIGRlZmF1bHQ9ZGVmYXVsdF92ZXIpCisgCW9wdC5h ZGRfb3B0aW9uKCctLW1zdmNfdGFyZ2V0cycsIHR5cGU9J3N0cmluZycsIGhlbHAgPSAnbXN2YyB0 YXJnZXRzLCBlZzogIng2NCxhcm0iJywgZGVmYXVsdD0nJykKKyAJb3B0LmFkZF9vcHRpb24oJy0t bm8tbXN2Yy1sYXp5JywgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGhlbHAgPSAnbGF6aWx5IGNoZWNr IG1zdmMgdGFyZ2V0IGVudmlyb25tZW50cycsIGRlZmF1bHQ9VHJ1ZSwgZGVzdD0nbXN2Y19sYXp5 JykKKyAKKytjbGFzcyBNU1ZDVmVyc2lvbihvYmplY3QpOgorKwlkZWYgX19pbml0X18oc2VsZiwg dmVyKToKKysJCW0gPSByZS5zZWFyY2gocideKC4qKVxzKyhcZCtbLl1cZCspJywgdmVyKQorKwkJ aWYgbToKKysJCQlzZWxmLm5hbWUgPSBtLmdyb3VwKDEpCisrCQkJc2VsZi5udW1iZXIgPSBmbG9h dChtLmdyb3VwKDIpKQorKwkJZWxzZToKKysJCQlzZWxmLm5hbWUgPSB2ZXIKKysJCQlzZWxmLm51 bWJlciA9IDAuCisrCisrCWRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorKwkJaWYgc2VsZi5udW1i ZXIgPT0gb3RoZXIubnVtYmVyOgorKwkJCXJldHVybiBzZWxmLm5hbWUgPCBvdGhlci5uYW1lCisr CQlyZXR1cm4gc2VsZi5udW1iZXIgPCBvdGhlci5udW1iZXIKKysKKyBAY29uZgorIGRlZiBzZXR1 cF9tc3ZjKGNvbmYsIHZlcnNpb25kaWN0KToKKyAJIiIiCitAQCAtMTE5LDcgKzE0MCw3IEBAIGRl ZiBzZXR1cF9tc3ZjKGNvbmYsIHZlcnNpb25kaWN0KToKKyAJCXBsYXRmb3Jtcz1VdGlscy50b19s aXN0KGNvbmYuZW52Lk1TVkNfVEFSR0VUUykgb3IgW2kgZm9yIGksaiBpbiBhbGxfbXN2Y19wbGF0 Zm9ybXMrYWxsX2ljbF9wbGF0Zm9ybXMrYWxsX3dpbmNlX3BsYXRmb3Jtc10KKyAJZGVzaXJlZF92 ZXJzaW9ucyA9IGdldGF0dHIoT3B0aW9ucy5vcHRpb25zLCAnbXN2Y192ZXJzaW9uJywgJycpLnNw bGl0KCcsJykKKyAJaWYgZGVzaXJlZF92ZXJzaW9ucyA9PSBbJyddOgorLQkJZGVzaXJlZF92ZXJz aW9ucyA9IGNvbmYuZW52Lk1TVkNfVkVSU0lPTlMgb3IgbGlzdChyZXZlcnNlZChzb3J0ZWQodmVy c2lvbmRpY3Qua2V5cygpKSkpCisrCQlkZXNpcmVkX3ZlcnNpb25zID0gY29uZi5lbnYuTVNWQ19W RVJTSU9OUyBvciBsaXN0KHNvcnRlZCh2ZXJzaW9uZGljdC5rZXlzKCksIGtleT1NU1ZDVmVyc2lv biwgcmV2ZXJzZT1UcnVlKSkKKyAKKyAJIyBPdmVycmlkZSBsYXp5IGRldGVjdGlvbiBieSBldmFs dWF0aW5nIGFmdGVyIHRoZSBmYWN0LgorIAlsYXp5X2RldGVjdCA9IGdldGF0dHIoT3B0aW9ucy5v cHRpb25zLCAnbXN2Y19sYXp5JywgVHJ1ZSkKK0BAIC0xODcsNyArMjA4LDcgQEAgZGVmIGdldF9t c3ZjX3ZlcnNpb24oY29uZiwgY29tcGlsZXIsIHZlcnNpb24sIHRhcmdldCwgdmN2YXJzKToKKyBl Y2hvIElOQ0xVREU9JSVJTkNMVURFJSUKKyBlY2hvIExJQj0lJUxJQiUlOyUlTElCUEFUSCUlCisg IiIiICUgKHZjdmFycyx0YXJnZXQpKQorLQlzb3V0ID0gY29uZi5jbWRfYW5kX2xvZyhbJ2NtZC5l eGUnLCAnL0U6b24nLCAnL1Y6b24nLCAnL0MnLCBiYXRmaWxlLmFic3BhdGgoKV0pCisrCXNvdXQg PSBjb25mLmNtZF9hbmRfbG9nKFsnY21kLmV4ZScsICcvRTpvbicsICcvVjpvbicsICcvQycsIGJh dGZpbGUuYWJzcGF0aCgpXSwgc3RkaW49Z2V0YXR0cihVdGlscy5zdWJwcm9jZXNzLCAnREVWTlVM TCcsIE5vbmUpKQorIAlsaW5lcyA9IHNvdXQuc3BsaXRsaW5lcygpCisgCisgCWlmIG5vdCBsaW5l c1swXToKK0BAIC0yODEsNyArMzAyLDcgQEAgZGVmIGdhdGhlcl93aW5jZV9zdXBwb3J0ZWRfcGxh dGZvcm1zKCk6CisgCisgZGVmIGdhdGhlcl9tc3ZjX2RldGVjdGVkX3ZlcnNpb25zKCk6CisgCSNE ZXRlY3RlZCBNU1ZDIHZlcnNpb25zIQorLQl2ZXJzaW9uX3BhdHRlcm4gPSByZS5jb21waWxlKCde KFxkXGQ/XC5cZFxkPykoRXhwKT8kJykKKysJdmVyc2lvbl9wYXR0ZXJuID0gcmUuY29tcGlsZShy J14oXGRcZD9cLlxkXGQ/KShFeHApPyQnKQorIAlkZXRlY3RlZF92ZXJzaW9ucyA9IFtdCisgCWZv ciB2Y3Zlcix2Y3ZhciBpbiAoKCdWQ0V4cHJlc3MnLCdFeHAnKSwgKCdWaXN1YWxTdHVkaW8nLCcn KSk6CisgCQlwcmVmaXggPSAnU09GVFdBUkVcXFdvdzY0MzJub2RlXFxNaWNyb3NvZnRcXCcgKyB2 Y3ZlcgorQEAgLTM2Nyw3ICszODgsNyBAQCBkZWYgZ2F0aGVyX3dzZGtfdmVyc2lvbnMoY29uZiwg dmVyc2lvbnMpOgorIAk6cGFyYW0gdmVyc2lvbnM6IGxpc3QgdG8gbW9kaWZ5CisgCTp0eXBlIHZl cnNpb25zOiBsaXN0CisgCSIiIgorLQl2ZXJzaW9uX3BhdHRlcm4gPSByZS5jb21waWxlKCdedi4u Py4/XC4uLj8uPycpCisrCXZlcnNpb25fcGF0dGVybiA9IHJlLmNvbXBpbGUocidedi4uPy4/XC4u Lj8uPycpCisgCXRyeToKKyAJCWFsbF92ZXJzaW9ucyA9IFV0aWxzLndpbnJlZy5PcGVuS2V5KFV0 aWxzLndpbnJlZy5IS0VZX0xPQ0FMX01BQ0hJTkUsICdTT0ZUV0FSRVxcV293NjQzMm5vZGVcXE1p Y3Jvc29mdFxcTWljcm9zb2Z0IFNES3NcXFdpbmRvd3MnKQorIAlleGNlcHQgT1NFcnJvcjoKK0BA IC01MjUsNyArNTQ2LDcgQEAgZGVmIGdhdGhlcl9pY2xfdmVyc2lvbnMoY29uZiwgdmVyc2lvbnMp OgorIAk6cGFyYW0gdmVyc2lvbnM6IGxpc3QgdG8gbW9kaWZ5CisgCTp0eXBlIHZlcnNpb25zOiBs aXN0CisgCSIiIgorLQl2ZXJzaW9uX3BhdHRlcm4gPSByZS5jb21waWxlKCdeLi4uPy4/XC4uLi4/ Lj8nKQorKwl2ZXJzaW9uX3BhdHRlcm4gPSByZS5jb21waWxlKHInXi4uLj8uP1wuLi4uPy4/JykK KyAJdHJ5OgorIAkJYWxsX3ZlcnNpb25zID0gVXRpbHMud2lucmVnLk9wZW5LZXkoVXRpbHMud2lu cmVnLkhLRVlfTE9DQUxfTUFDSElORSwgJ1NPRlRXQVJFXFxXb3c2NDMybm9kZVxcSW50ZWxcXENv bXBpbGVyc1xcQysrJykKKyAJZXhjZXB0IE9TRXJyb3I6CitAQCAtNTc5LDcgKzYwMCw3IEBAIGRl ZiBnYXRoZXJfaW50ZWxfY29tcG9zZXJfdmVyc2lvbnMoY29uZiwgdmVyc2lvbnMpOgorIAk6cGFy YW0gdmVyc2lvbnM6IGxpc3QgdG8gbW9kaWZ5CisgCTp0eXBlIHZlcnNpb25zOiBsaXN0CisgCSIi IgorLQl2ZXJzaW9uX3BhdHRlcm4gPSByZS5jb21waWxlKCdeLi4uPy4/XC4uLj8uPy4/JykKKysJ dmVyc2lvbl9wYXR0ZXJuID0gcmUuY29tcGlsZShyJ14uLi4/Lj9cLi4uPy4/Lj8nKQorIAl0cnk6 CisgCQlhbGxfdmVyc2lvbnMgPSBVdGlscy53aW5yZWcuT3BlbktleShVdGlscy53aW5yZWcuSEtF WV9MT0NBTF9NQUNISU5FLCAnU09GVFdBUkVcXFdvdzY0MzJub2RlXFxJbnRlbFxcU3VpdGVzJykK KyAJZXhjZXB0IE9TRXJyb3I6CitAQCAtNjgzLDcgKzcwNCw3IEBAIGRlZiBmaW5kX2x0X25hbWVz X21zdmMoc2VsZiwgbGlibmFtZSwgaXNfc3RhdGljPUZhbHNlKToKKyAJCQkJaWYgbm90IGlzX3N0 YXRpYyBhbmQgbHRkaWN0LmdldCgnbGlicmFyeV9uYW1lcycsICcnKToKKyAJCQkJCWRsbG5hbWVz PWx0ZGljdFsnbGlicmFyeV9uYW1lcyddLnNwbGl0KCkKKyAJCQkJCWRsbD1kbGxuYW1lc1swXS5s b3dlcigpCistCQkJCQlkbGw9cmUuc3ViKCdcLmRsbCQnLCAnJywgZGxsKQorKwkJCQkJZGxsPXJl LnN1YihyJ1wuZGxsJCcsICcnLCBkbGwpCisgCQkJCQlyZXR1cm4gKGx0X2xpYmRpciwgZGxsLCBG YWxzZSkKKyAJCQkJZWxpZiBsdGRpY3QuZ2V0KCdvbGRfbGlicmFyeScsICcnKToKKyAJCQkJCW9s aWI9bHRkaWN0WydvbGRfbGlicmFyeSddCitAQCAtNzAwLDcgKzcyMSw3IEBAIGRlZiBmaW5kX2x0 X25hbWVzX21zdmMoc2VsZiwgbGlibmFtZSwgaXNfc3RhdGljPUZhbHNlKToKKyBAY29uZgorIGRl ZiBsaWJuYW1lX21zdmMoc2VsZiwgbGlibmFtZSwgaXNfc3RhdGljPUZhbHNlKToKKyAJbGliID0g bGlibmFtZS5sb3dlcigpCistCWxpYiA9IHJlLnN1YignXC5saWIkJywnJyxsaWIpCisrCWxpYiA9 IHJlLnN1YihyJ1wubGliJCcsJycsbGliKQorIAorIAlpZiBsaWIgaW4gZ19tc3ZjX3N5c3RlbWxp YnM6CisgCQlyZXR1cm4gbGliCitAQCAtNzQ3LDExICs3NjgsMTEgQEAgZGVmIGxpYm5hbWVfbXN2 YyhzZWxmLCBsaWJuYW1lLCBpc19zdGF0aWM9RmFsc2UpOgorIAkJZm9yIGxpYm4gaW4gbGlibmFt ZXM6CisgCQkJaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBhdGgsIGxpYm4pKToKKyAJ CQkJTG9ncy5kZWJ1ZygnbXN2YzogbGliIGZvdW5kOiAlcycsIG9zLnBhdGguam9pbihwYXRoLGxp Ym4pKQorLQkJCQlyZXR1cm4gcmUuc3ViKCdcLmxpYiQnLCAnJyxsaWJuKQorKwkJCQlyZXR1cm4g cmUuc3ViKHInXC5saWIkJywgJycsbGlibikKKyAKKyAJI2lmIG5vIGxpYiBjYW4gYmUgZm91bmQs IGp1c3QgcmV0dXJuIHRoZSBsaWJuYW1lIGFzIG1zdmMgZXhwZWN0cyBpdAorIAlzZWxmLmZhdGFs KCdUaGUgbGlicmFyeSAlciBjb3VsZCBub3QgYmUgZm91bmQnICUgbGlibmFtZSkKKy0JcmV0dXJu IHJlLnN1YignXC5saWIkJywgJycsIGxpYm5hbWUpCisrCXJldHVybiByZS5zdWIocidcLmxpYiQn LCAnJywgbGlibmFtZSkKKyAKKyBAY29uZgorIGRlZiBjaGVja19saWJfbXN2YyhzZWxmLCBsaWJu YW1lLCBpc19zdGF0aWM9RmFsc2UsIHVzZWxpYl9zdG9yZT1Ob25lKToKK0BAIC05NjksNyArOTkw LDcgQEAgZGVmIGJ1aWxkKGJsZCk6CisgCWlmIG5vdCBpc19zdGF0aWM6CisgCQlmb3IgZiBpbiBz ZWxmLmVudi5MSU5LRkxBR1M6CisgCQkJZCA9IGYubG93ZXIoKQorLQkJCWlmIGRbMTpdID09ICdk ZWJ1Zyc6CisrCQkJaWYgZFsxOl0gaW4gKCdkZWJ1ZycsICdkZWJ1ZzpmdWxsJywgJ2RlYnVnOmZh c3RsaW5rJyk6CisgCQkJCXBkYm5vZGUgPSBzZWxmLmxpbmtfdGFzay5vdXRwdXRzWzBdLmNoYW5n ZV9leHQoJy5wZGInKQorIAkJCQlzZWxmLmxpbmtfdGFzay5vdXRwdXRzLmFwcGVuZChwZGJub2Rl KQorIAorZGlmZiAtLWdpdCBhL3dhZmxpYi9Ub29scy93YWZfdW5pdF90ZXN0LnB5IGIvd2FmbGli L1Rvb2xzL3dhZl91bml0X3Rlc3QucHkKK2luZGV4IDc0ZDZjMDU2MS4uOGNmZjg5YmRlIDEwMDY0 NAorLS0tIGEvd2FmbGliL1Rvb2xzL3dhZl91bml0X3Rlc3QucHkKKysrKyBiL3dhZmxpYi9Ub29s cy93YWZfdW5pdF90ZXN0LnB5CitAQCAtOTcsNiArOTcsNyBAQCBkZWYgbWFrZV9pbnRlcnByZXRl ZF90ZXN0KHNlbGYpOgorIAkJaWYgaXNpbnN0YW5jZSh2LCBzdHIpOgorIAkJCXYgPSB2LnNwbGl0 KG9zLnBhdGhzZXApCisgCQlzZWxmLnV0X2VudltrXSA9IG9zLnBhdGhzZXAuam9pbihwICsgdikK KysJc2VsZi5lbnYuYXBwZW5kX3ZhbHVlKCdVVF9ERVBTJywgWyclciVyJyAlIChrZXksIHNlbGYu dXRfZW52W2tleV0pIGZvciBrZXkgaW4gc2VsZi51dF9lbnZdKQorIAorIEBmZWF0dXJlKCd0ZXN0 JykKKyBAYWZ0ZXJfbWV0aG9kKCdhcHBseV9saW5rJywgJ3Byb2Nlc3NfdXNlJykKK0BAIC0xMDgs NyArMTA5LDggQEAgZGVmIG1ha2VfdGVzdChzZWxmKToKKyAJdHNrID0gc2VsZi5jcmVhdGVfdGFz aygndXRlc3QnLCBzZWxmLmxpbmtfdGFzay5vdXRwdXRzKQorIAlpZiBnZXRhdHRyKHNlbGYsICd1 dF9zdHInLCBOb25lKToKKyAJCXNlbGYudXRfcnVuLCBsc3QgPSBUYXNrLmNvbXBpbGVfZnVuKHNl bGYudXRfc3RyLCBzaGVsbD1nZXRhdHRyKHNlbGYsICd1dF9zaGVsbCcsIEZhbHNlKSkKKy0JCXRz ay52YXJzID0gbHN0ICsgdHNrLnZhcnMKKysJCXRzay52YXJzID0gdHNrLnZhcnMgKyBsc3QKKysJ CXNlbGYuZW52LmFwcGVuZF92YWx1ZSgnVVRfREVQUycsIHNlbGYudXRfc3RyKQorIAorIAlzZWxm LmhhbmRsZV91dF9jd2QoJ3V0X2N3ZCcpCisgCitAQCAtMTM5LDYgKzE0MSwxMCBAQCBkZWYgYWRk X3BhdGgodmFyKToKKyAJaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3V0X2NtZCcpOgorIAkJc2VsZi51 dF9jbWQgPSBnZXRhdHRyKE9wdGlvbnMub3B0aW9ucywgJ3Rlc3RjbWQnLCBGYWxzZSkKKyAKKysJ c2VsZi5lbnYuYXBwZW5kX3ZhbHVlKCdVVF9ERVBTJywgc3RyKHNlbGYudXRfY21kKSkKKysJc2Vs Zi5lbnYuYXBwZW5kX3ZhbHVlKCdVVF9ERVBTJywgc2VsZi51dF9wYXRocykKKysJc2VsZi5lbnYu YXBwZW5kX3ZhbHVlKCdVVF9ERVBTJywgWyclciVyJyAlIChrZXksIHNlbGYudXRfZW52W2tleV0p IGZvciBrZXkgaW4gc2VsZi51dF9lbnZdKQorKworIEB0YXNrZ2VuX21ldGhvZAorIGRlZiBhZGRf dGVzdF9yZXN1bHRzKHNlbGYsIHR1cCk6CisgCSIiIk92ZXJyaWRlIGFuZCByZXR1cm4gdHVwWzFd IHRvIGludGVycnVwdCB0aGUgYnVpbGQgaW1tZWRpYXRlbHkgaWYgYSB0ZXN0IGRvZXMgbm90IHJ1 biIiIgorQEAgLTE1OSw3ICsxNjUsNyBAQCBjbGFzcyB1dGVzdChUYXNrLlRhc2spOgorIAkiIiIK KyAJY29sb3IgPSAnUElOSycKKyAJYWZ0ZXIgPSBbJ3ZudW0nLCAnaW5zdCddCistCXZhcnMgPSBb XQorKwl2YXJzID0gWydVVF9ERVBTJ10KKyAKKyAJZGVmIHJ1bm5hYmxlX3N0YXR1cyhzZWxmKToK KyAJCSIiIgorQEAgLTIwMCw3ICsyMDYsNyBAQCBkZWYgcnVuKHNlbGYpOgorIAkJc2VsZi51dF9l eGVjID0gZ2V0YXR0cihzZWxmLmdlbmVyYXRvciwgJ3V0X2V4ZWMnLCBbc2VsZi5pbnB1dHNbMF0u YWJzcGF0aCgpXSkKKyAJCXV0X2NtZCA9IGdldGF0dHIoc2VsZi5nZW5lcmF0b3IsICd1dF9jbWQn LCBGYWxzZSkKKyAJCWlmIHV0X2NtZDoKKy0JCQlzZWxmLnV0X2V4ZWMgPSBzaGxleC5zcGxpdCh1 dF9jbWQgJSAnICcuam9pbihzZWxmLnV0X2V4ZWMpKQorKwkJCXNlbGYudXRfZXhlYyA9IHNobGV4 LnNwbGl0KHV0X2NtZCAlIFV0aWxzLnNoZWxsX2VzY2FwZShzZWxmLnV0X2V4ZWMpKQorIAorIAkJ cmV0dXJuIHNlbGYuZXhlY19jb21tYW5kKHNlbGYudXRfZXhlYykKKyAKK0BAIC0yMTQsNyArMjIw LDcgQEAgZGVmIGV4ZWNfY29tbWFuZChzZWxmLCBjbWQsICoqa3cpOgorIAkJCQknY21kJzogY21k CisgCQkJfQorIAkJCXNjcmlwdF9maWxlID0gc2VsZi5pbnB1dHNbMF0uYWJzcGF0aCgpICsgJ19y dW4ucHknCistCQkJVXRpbHMud3JpdGVmKHNjcmlwdF9maWxlLCBzY3JpcHRfY29kZSkKKysJCQlV dGlscy53cml0ZWYoc2NyaXB0X2ZpbGUsIHNjcmlwdF9jb2RlLCBlbmNvZGluZz0ndXRmLTgnKQor IAkJCW9zLmNobW9kKHNjcmlwdF9maWxlLCBVdGlscy5PNzU1KQorIAkJCWlmIExvZ3MudmVyYm9z ZSA+IDE6CisgCQkJCUxvZ3MuaW5mbygnVGVzdCBkZWJ1ZyBmaWxlIHdyaXR0ZW4gYXMgJXInICUg c2NyaXB0X2ZpbGUpCitkaWZmIC0tZ2l0IGEvd2FmbGliL1V0aWxzLnB5IGIvd2FmbGliL1V0aWxz LnB5CitpbmRleCBhMGNjMmEwOWQuLmVhMGY3YTlkYiAxMDA2NDQKKy0tLSBhL3dhZmxpYi9VdGls cy5weQorKysrIGIvd2FmbGliL1V0aWxzLnB5CitAQCAtMTEsNyArMTEsNyBAQAorIAorIGZyb20g X19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKyAKKy1pbXBvcnQgYXRleGl0LCBvcywg c3lzLCBlcnJubywgaW5zcGVjdCwgcmUsIGRhdGV0aW1lLCBwbGF0Zm9ybSwgYmFzZTY0LCBzaWdu YWwsIGZ1bmN0b29scywgdGltZQorK2ltcG9ydCBhdGV4aXQsIG9zLCBzeXMsIGVycm5vLCBpbnNw ZWN0LCByZSwgZGF0ZXRpbWUsIHBsYXRmb3JtLCBiYXNlNjQsIHNpZ25hbCwgZnVuY3Rvb2xzLCB0 aW1lLCBzaGxleAorIAorIHRyeToKKyAJaW1wb3J0IGNQaWNrbGUKK0BAIC00OSwxMCArNDksMTYg QEAgY2xhc3MgVGltZW91dEV4cGlyZWQoRXhjZXB0aW9uKToKKyAJZnJvbSBoYXNobGliIGltcG9y dCBtZDUKKyBleGNlcHQgSW1wb3J0RXJyb3I6CisgCXRyeToKKy0JCWZyb20gbWQ1IGltcG9ydCBt ZDUKKysJCWZyb20gaGFzaGxpYiBpbXBvcnQgc2hhMSBhcyBtZDUKKyAJZXhjZXB0IEltcG9ydEVy cm9yOgorLQkJIyBuZXZlciBmYWlsIHRvIGVuYWJsZSBmaXhlcyBmcm9tIGFub3RoZXIgbW9kdWxl CisrCQkjIG5ldmVyIGZhaWwgdG8gZW5hYmxlIHBvdGVudGlhbCBmaXhlcyBmcm9tIGFub3RoZXIg bW9kdWxlCisgCQlwYXNzCisrZWxzZToKKysJdHJ5OgorKwkJbWQ1KCkuZGlnZXN0KCkKKysJZXhj ZXB0IFZhbHVlRXJyb3I6CisrCQkjIEZpcHM/ICMyMjEzCisrCQlmcm9tIGhhc2hsaWIgaW1wb3J0 IHNoYTEgYXMgbWQ1CisgCisgdHJ5OgorIAlpbXBvcnQgdGhyZWFkaW5nCitAQCAtMjAyLDcgKzIw OCw3IEBAIGRlZiBfX25leHRfXyhzZWxmKToKKyAKKyAJbmV4dCA9IF9fbmV4dF9fCisgCistaXNf d2luMzIgPSBvcy5zZXAgPT0gJ1xcJyBvciBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyAjIG1zeXMy CisraXNfd2luMzIgPSBvcy5zZXAgPT0gJ1xcJyBvciBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBv ciBvcy5uYW1lID09ICdudCcgIyBtc3lzMgorICIiIgorIFdoZXRoZXIgdGhpcyBzeXN0ZW0gaXMg YSBXaW5kb3dzIHNlcmllcworICIiIgorQEAgLTQ0Niw2ICs0NTIsOCBAQCBkZWYgY29uc29sZV9l bmNvZGluZygpOgorIAkJCXBhc3MKKyAJCWVsc2U6CisgCQkJaWYgY29kZXBhZ2U6CisrCQkJCWlm IDY1MDAxID09IGNvZGVwYWdlIGFuZCBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDMpOgorKwkJCQkJ cmV0dXJuICd1dGYtOCcKKyAJCQkJcmV0dXJuICdjcCVkJyAlIGNvZGVwYWdlCisgCXJldHVybiBz eXMuc3Rkb3V0LmVuY29kaW5nIG9yICgnY3AxMjUyJyBpZiBpc193aW4zMiBlbHNlICdsYXRpbi0x JykKKyAKK0BAIC00ODQsNyArNDkyLDkgQEAgZGVmIHNwbGl0X3BhdGhfbXN5cyhwYXRoKToKKyBp ZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgCXNwbGl0X3BhdGggPSBzcGxpdF9wYXRoX2N5 Z3dpbgorIGVsaWYgaXNfd2luMzI6CistCWlmIG9zLmVudmlyb24uZ2V0KCdNU1lTVEVNJyk6Cisr CSMgQ29uc2lkZXIgdGhpcyBhbiBNU1lTVEVNIGVudmlyb25tZW50IGlmICRNU1lTVEVNIGlzIHNl dCBhbmQgcHl0aG9uCisrCSMgcmVwb3J0cyBpcyBleGVjdXRhYmxlIGZyb20gYSB1bml4IGxpa2Ug cGF0aCBvbiBhIHdpbmRvd3MgaG9zdC4KKysJaWYgb3MuZW52aXJvbi5nZXQoJ01TWVNURU0nKSBh bmQgc3lzLmV4ZWN1dGFibGUuc3RhcnRzd2l0aCgnLycpOgorIAkJc3BsaXRfcGF0aCA9IHNwbGl0 X3BhdGhfbXN5cworIAllbHNlOgorIAkJc3BsaXRfcGF0aCA9IHNwbGl0X3BhdGhfd2luMzIKK0BA IC01NjksMTAgKzU3OSwxMyBAQCBkZWYgcXVvdGVfZGVmaW5lX25hbWUocyk6CisgCWZ1ID0gZnUu dXBwZXIoKQorIAlyZXR1cm4gZnUKKyAKKy1yZV9zaCA9IHJlLmNvbXBpbGUoJ1xcc3xcJ3wiJykK Ky0iIiIKKy1SZWdleHAgdXNlZCBmb3Igc2hlbGxfZXNjYXBlIGJlbG93CistIiIiCisrIyBzaGxl eC5xdW90ZSBkaWRuJ3QgZXhpc3QgdW50aWwgcHl0aG9uIDMuMy4gUHJpb3IgdG8gdGhhdCBpdCB3 YXMgYSBub24tZG9jdW1lbnRlZAorKyMgZnVuY3Rpb24gaW4gcGlwZXMuCisrdHJ5OgorKwlzaGVs bF9xdW90ZSA9IHNobGV4LnF1b3RlCisrZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorKwlpbXBvcnQg cGlwZXMKKysJc2hlbGxfcXVvdGUgPSBwaXBlcy5xdW90ZQorIAorIGRlZiBzaGVsbF9lc2NhcGUo Y21kKToKKyAJIiIiCitAQCAtNTgxLDcgKzU5NCw3IEBAIGRlZiBzaGVsbF9lc2NhcGUoY21kKToK KyAJIiIiCisgCWlmIGlzaW5zdGFuY2UoY21kLCBzdHIpOgorIAkJcmV0dXJuIGNtZAorLQlyZXR1 cm4gJyAnLmpvaW4ocmVwcih4KSBpZiByZV9zaC5zZWFyY2goeCkgZWxzZSB4IGZvciB4IGluIGNt ZCkKKysJcmV0dXJuICcgJy5qb2luKHNoZWxsX3F1b3RlKHgpIGZvciB4IGluIGNtZCkKKyAKKyBk ZWYgaF9saXN0KGxzdCk6CisgCSIiIgorQEAgLTU5Niw2ICs2MDksMTIgQEAgZGVmIGhfbGlzdChs c3QpOgorIAkiIiIKKyAJcmV0dXJuIG1kNShyZXByKGxzdCkuZW5jb2RlKCkpLmRpZ2VzdCgpCisg CisraWYgc3lzLmhleHZlcnNpb24gPCAweDMwMDAwMDA6CisrCWRlZiBoX2xpc3RfcHl0aG9uMihs c3QpOgorKwkJcmV0dXJuIG1kNShyZXByKGxzdCkpLmRpZ2VzdCgpCisrCWhfbGlzdF9weXRob24y Ll9fZG9jX18gPSBoX2xpc3QuX19kb2NfXworKwloX2xpc3QgPSBoX2xpc3RfcHl0aG9uMgorKwor IGRlZiBoX2Z1bihmdW4pOgorIAkiIiIKKyAJSGFzaCBmdW5jdGlvbnMKK0BAIC02MTUsNyArNjM0 LDcgQEAgZGVmIGhfZnVuKGZ1bik6CisgCQkJIworIAkJCSMgVGhlIHNvcnRpbmcgcmVzdWx0IG91 dGNvbWUgd2lsbCBiZSBjb25zaXN0ZW50IGJlY2F1c2U6CisgCQkJIyAxLiB0dXBsZXMgYXJlIGNv bXBhcmVkIGluIG9yZGVyIG9mIHRoZWlyIGVsZW1lbnRzCistCQkJIyAyLiBvcHRpb25hbCBhcmd1 bWVudCBuYW1lcyBhcmUgdW5pcXVlCisrCQkJIyAyLiBvcHRpb25hbCBhcmd1bWVudCBuYW1lc3Mg YXJlIHVuaXF1ZQorIAkJCWNvZGUuZXh0ZW5kKHNvcnRlZChmdW4ua2V5d29yZHMuaXRlbXMoKSkp CisgCQkJY29kZS5hcHBlbmQoaF9mdW4oZnVuLmZ1bmMpKQorIAkJCWZ1bi5jb2RlID0gaF9saXN0 KGNvZGUpCitAQCAtNzMwLDcgKzc0OSw3IEBAIGRlZiB1bnZlcnNpb25lZF9zeXNfcGxhdGZvcm0o KToKKyAJaWYgcyA9PSAnY2xpJyBhbmQgb3MubmFtZSA9PSAnbnQnOgorIAkJIyBpcm9ucHl0aG9u IGlzIG9ubHkgb24gd2luZG93cyBhcyBmYXIgYXMgd2Uga25vdworIAkJcmV0dXJuICd3aW4zMicK Ky0JcmV0dXJuIHJlLnNwbGl0KCdcZCskJywgcylbMF0KKysJcmV0dXJuIHJlLnNwbGl0KHInXGQr JCcsIHMpWzBdCisgCisgZGVmIG5hZGEoKmssICoqa3cpOgorIAkiIiIKK0BAIC04NTEsNiArODcw LDE5IEBAIGRlZiBsaWI2NCgpOgorIAkJCQlyZXR1cm4gJzY0JworIAlyZXR1cm4gJycKKyAKKytk ZWYgbG9vc2VfdmVyc2lvbih2ZXJfc3RyKToKKysJIyBwcml2YXRlIGZvciB0aGUgdGltZSBiZWlu ZyEKKysJIyBzZWUgIzI0MDIKKysJbHN0ID0gcmUuc3BsaXQocicoWy5dfFxcZCt8W2EtekEtWl0p JywgdmVyX3N0cikKKysJdmVyID0gW10KKysJZm9yIGksIHZhbCBpbiBlbnVtZXJhdGUobHN0KToK KysJCXRyeToKKysJCQl2ZXIuYXBwZW5kKGludCh2YWwpKQorKwkJZXhjZXB0IFZhbHVlRXJyb3I6 CisrCQkJaWYgdmFsICE9ICcuJzoKKysJCQkJdmVyLmFwcGVuZCh2YWwpCisrCXJldHVybiB2ZXIK KysKKyBkZWYgc2FuZV9wYXRoKHApOgorIAkjIHByaXZhdGUgZnVuY3Rpb24gZm9yIHRoZSB0aW1l IGJlaW5nIQorIAlyZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZXhwYW5kdXNlcihwKSkK K0BAIC04NzEsMTMgKzkwMywxMyBAQCBkZWYgZ2V0X3Byb2Nlc3MoKToKKyAJZXhjZXB0IEluZGV4 RXJyb3I6CisgCQlmaWxlcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19m aWxlX18pKSArIG9zLnNlcCArICdwcm9jZXNzb3IucHknCisgCQljbWQgPSBbc3lzLmV4ZWN1dGFi bGUsICctYycsIHJlYWRmKGZpbGVwYXRoKV0KKy0JCXJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNt ZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBidWZzaXpl PTApCisrCQlyZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJ UEUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgYnVmc2l6ZT0wLCBjbG9zZV9mZHM9bm90IGlzX3dp bjMyKQorIAorIGRlZiBydW5fcHJlZm9ya19wcm9jZXNzKGNtZCwga3dhcmdzLCBjYXJncyk6Cisg CSIiIgorIAlEZWxlZ2F0ZXMgcHJvY2VzcyBleGVjdXRpb24gdG8gYSBwcmUtZm9ya2VkIHByb2Nl c3MgaW5zdGFuY2UuCisgCSIiIgorLQlpZiBub3QgJ2VudicgaW4ga3dhcmdzOgorKwlpZiBub3Qg a3dhcmdzLmdldCgnZW52Jyk6CisgCQlrd2FyZ3NbJ2VudiddID0gZGljdChvcy5lbnZpcm9uKQor IAl0cnk6CisgCQlvYmogPSBiYXNlNjQuYjY0ZW5jb2RlKGNQaWNrbGUuZHVtcHMoW2NtZCwga3dh cmdzLCBjYXJnc10pKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9hbnNpdGVybS5weSBiL3dhZmxpYi9h bnNpdGVybS5weQoraW5kZXggMGQyMGM2Mzc0Li4wMjdmMGFkNjggMTAwNjQ0CistLS0gYS93YWZs aWIvYW5zaXRlcm0ucHkKKysrKyBiL3dhZmxpYi9hbnNpdGVybS5weQorQEAgLTI2NCw3ICsyNjQs NyBAQCBkZWYgaGlkZV9jdXJzb3Ioc2VsZixwYXJhbSk6CisgCQkJJ3UnOiBwb3BfY3Vyc29yLAor IAkJfQorIAkJIyBNYXRjaCBlaXRoZXIgdGhlIGVzY2FwZSBzZXF1ZW5jZSBvciB0ZXh0IG5vdCBj b250YWluaW5nIGVzY2FwZSBzZXF1ZW5jZQorLQkJYW5zaV90b2tlbnMgPSByZS5jb21waWxlKCco PzpceDFiXFsoWzAtOT87XSopKFthLXpBLVpdKXwoW15ceDFiXSspKScpCisrCQlhbnNpX3Rva2Vu cyA9IHJlLmNvbXBpbGUocicoPzpceDFiXFsoWzAtOT87XSopKFthLXpBLVpdKXwoW15ceDFiXSsp KScpCisgCQlkZWYgd3JpdGUoc2VsZiwgdGV4dCk6CisgCQkJdHJ5OgorIAkJCQl3bG9jay5hY3F1 aXJlKCkKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFzL2NsYW5nX2Nyb3NzLnB5IGIvd2FmbGli L2V4dHJhcy9jbGFuZ19jcm9zcy5weQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw MDAwMC4uMWI1MWUyODg2CistLS0gL2Rldi9udWxsCisrKysgYi93YWZsaWIvZXh0cmFzL2NsYW5n X2Nyb3NzLnB5CitAQCAtMCwwICsxLDkyIEBACisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyBl bmNvZGluZzogdXRmLTgKKysjIEtyenlzenRvZiBLb3NpxYRza2kgMjAxNAorKyMgRHJhZ29vblg2 IDIwMTgKKysKKysiIiIKKytEZXRlY3QgdGhlIENsYW5nIEMgY29tcGlsZXIKKytUaGlzIHZlcnNp b24gaXMgYW4gYXR0ZW1wdCBhdCBzdXBwb3J0aW5nIHRoZSAtdGFyZ2V0IGFuZCAtc3lzcm9vdCBm bGFnIG9mIENsYW5nLgorKyIiIgorKworK2Zyb20gd2FmbGliLlRvb2xzIGltcG9ydCBjY3Jvb3Qs IGFyLCBnY2MKKytmcm9tIHdhZmxpYi5Db25maWd1cmUgaW1wb3J0IGNvbmYKKytpbXBvcnQgd2Fm bGliLkNvbnRleHQKKytpbXBvcnQgd2FmbGliLmV4dHJhcy5jbGFuZ19jcm9zc19jb21tb24KKysK KytkZWYgb3B0aW9ucyhvcHQpOgorKwkiIiIKKysJVGFyZ2V0IHRyaXBsZXQgZm9yIGNsYW5nOjoK KysJCQkkIHdhZiBjb25maWd1cmUgLS1jbGFuZy10YXJnZXQtdHJpcGxlPXg4Nl82NC1wYy1saW51 eC1nbnUKKysJIiIiCisrCWNjX2NvbXBpbGVyX29wdHMgPSBvcHQuYWRkX29wdGlvbl9ncm91cCgn Q29uZmlndXJhdGlvbiBvcHRpb25zJykKKysJY2NfY29tcGlsZXJfb3B0cy5hZGRfb3B0aW9uKCct LWNsYW5nLXRhcmdldC10cmlwbGUnLCBkZWZhdWx0PU5vbmUsCisrCQloZWxwPSdUYXJnZXQgdHJp cGxlIGZvciBjbGFuZycsCisrCQlkZXN0PSdjbGFuZ190YXJnZXRfdHJpcGxlJykKKysJY2NfY29t cGlsZXJfb3B0cy5hZGRfb3B0aW9uKCctLWNsYW5nLXN5c3Jvb3QnLCBkZWZhdWx0PU5vbmUsCisr CQloZWxwPSdTeXNyb290IGZvciBjbGFuZycsCisrCQlkZXN0PSdjbGFuZ19zeXNyb290JykKKysK KytAY29uZgorK2RlZiBmaW5kX2NsYW5nKGNvbmYpOgorKwkiIiIKKysJRmluZHMgdGhlIHByb2dy YW0gY2xhbmcgYW5kIGV4ZWN1dGVzIGl0IHRvIGVuc3VyZSBpdCByZWFsbHkgaXMgY2xhbmcKKysJ IiIiCisrCisrCWltcG9ydCBvcworKworKwljYyA9IGNvbmYuZmluZF9wcm9ncmFtKCdjbGFuZycs IHZhcj0nQ0MnKQorKworKwlpZiBjb25mLm9wdGlvbnMuY2xhbmdfdGFyZ2V0X3RyaXBsZSAhPSBO b25lOgorKwkJY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdDQycsIFsnLXRhcmdldCcsIGNvbmYub3B0 aW9ucy5jbGFuZ190YXJnZXRfdHJpcGxlXSkKKysKKysJaWYgY29uZi5vcHRpb25zLmNsYW5nX3N5 c3Jvb3QgIT0gTm9uZToKKysJCXN5c3Jvb3QgPSBzdHIoKQorKworKwkJaWYgb3MucGF0aC5pc2Fi cyhjb25mLm9wdGlvbnMuY2xhbmdfc3lzcm9vdCk6CisrCQkJc3lzcm9vdCA9IGNvbmYub3B0aW9u cy5jbGFuZ19zeXNyb290CisrCQllbHNlOgorKwkJCXN5c3Jvb3QgPSBvcy5wYXRoLm5vcm1wYXRo KG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgY29uZi5vcHRpb25zLmNsYW5nX3N5c3Jvb3QpKQor KworKwkJY29uZi5lbnYuYXBwZW5kX3ZhbHVlKCdDQycsIFsnLS1zeXNyb290Jywgc3lzcm9vdF0p CisrCisrCWNvbmYuZ2V0X2NjX3ZlcnNpb24oY2MsIGNsYW5nPVRydWUpCisrCWNvbmYuZW52LkND X05BTUUgPSAnY2xhbmcnCisrCisrQGNvbmYKKytkZWYgY2xhbmdfbW9kaWZpZXJfeDg2XzY0X3c2 NF9taW5ndzMyKGNvbmYpOgorKwljb25mLmdjY19tb2RpZmllcl93aW4zMigpCisrCisrQGNvbmYK KytkZWYgY2xhbmdfbW9kaWZpZXJfaTM4Nl93NjRfbWluZ3czMihjb25mKToKKysJY29uZi5nY2Nf bW9kaWZpZXJfd2luMzIoKQorKworK0Bjb25mCisrZGVmIGNsYW5nX21vZGlmaWVyX3g4Nl82NF93 aW5kb3dzX21zdmMoY29uZik6CisrCWNvbmYuY2xhbmdfbW9kaWZpZXJfbXN2YygpCisrCisrCSMg QWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgYW55IGZsYWdzIGlmIHRoZXkgc28gZGVzaXJlLgor KwljbGFuZ19tb2RpZmllcl91c2VyX2Z1bmMgPSBnZXRhdHRyKGNvbmYsICdjbGFuZ19tb2RpZmll cl94ODZfNjRfd2luZG93c19tc3ZjX3VzZXInLCBOb25lKQorKwlpZiBjbGFuZ19tb2RpZmllcl91 c2VyX2Z1bmM6CisrCQljbGFuZ19tb2RpZmllcl91c2VyX2Z1bmMoKQorKworK0Bjb25mCisrZGVm IGNsYW5nX21vZGlmaWVyX2kzODZfd2luZG93c19tc3ZjKGNvbmYpOgorKwljb25mLmNsYW5nX21v ZGlmaWVyX21zdmMoKQorKworKwkjIEFsbG93IHRoZSB1c2VyIHRvIG92ZXJyaWRlIGFueSBmbGFn cyBpZiB0aGV5IHNvIGRlc2lyZS4KKysJY2xhbmdfbW9kaWZpZXJfdXNlcl9mdW5jID0gZ2V0YXR0 cihjb25mLCAnY2xhbmdfbW9kaWZpZXJfaTM4Nl93aW5kb3dzX21zdmNfdXNlcicsIE5vbmUpCisr CWlmIGNsYW5nX21vZGlmaWVyX3VzZXJfZnVuYzoKKysJCWNsYW5nX21vZGlmaWVyX3VzZXJfZnVu YygpCisrCisrZGVmIGNvbmZpZ3VyZShjb25mKToKKysJY29uZi5maW5kX2NsYW5nKCkKKysJY29u Zi5maW5kX3Byb2dyYW0oWydsbHZtLWFyJywgJ2FyJ10sIHZhcj0nQVInKQorKwljb25mLmZpbmRf YXIoKQorKwljb25mLmdjY19jb21tb25fZmxhZ3MoKQorKwkjIEFsbG93IHRoZSB1c2VyIHRvIHBy b3ZpZGUgZmxhZ3MgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uCisrCWNvbmYuZ2NjX21vZGlmaWVy X3BsYXRmb3JtKCkKKysJIyBBbmQgYWxsb3cgbW9yZSBmaW5lIGdyYWluZWQgY29udHJvbCBiYXNl ZCBvbiB0aGUgY29tcGlsZXIncyB0cmlwbGV0LgorKwljb25mLmNsYW5nX21vZGlmaWVyX3Rhcmdl dF90cmlwbGUoKQorKwljb25mLmNjX2xvYWRfdG9vbHMoKQorKwljb25mLmNjX2FkZF9mbGFncygp CisrCWNvbmYubGlua19hZGRfZmxhZ3MoKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9leHRyYXMvY2xh bmdfY3Jvc3NfY29tbW9uLnB5IGIvd2FmbGliL2V4dHJhcy9jbGFuZ19jcm9zc19jb21tb24ucHkK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLmI3NmEwNzAwNgorLS0tIC9k ZXYvbnVsbAorKysrIGIvd2FmbGliL2V4dHJhcy9jbGFuZ19jcm9zc19jb21tb24ucHkKK0BAIC0w LDAgKzEsMTEzIEBACisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyBlbmNvZGluZzogdXRmLTgK KysjIERyYWdvb25YNiAyMDE4CisrCisrIiIiCisrQ29tbW9uIHJvdXRpbmVzIGZvciBjcm9zc19j bGFuZy5weSBhbmQgY3Jvc3NfY2xhbmd4eC5weQorKyIiIgorKworK2Zyb20gd2FmbGliLkNvbmZp Z3VyZSBpbXBvcnQgY29uZgorK2ltcG9ydCB3YWZsaWIuQ29udGV4dAorKworK2RlZiBub3JtYWxp emVfdGFyZ2V0X3RyaXBsZSh0YXJnZXRfdHJpcGxlKToKKysJdGFyZ2V0X3RyaXBsZSA9IHRhcmdl dF90cmlwbGVbOi0xXQorKwlub3JtYWxpemVkX3RyaXBsZSA9IHRhcmdldF90cmlwbGUucmVwbGFj ZSgnLS0nLCAnLXVua25vd24tJykKKysKKysJaWYgbm9ybWFsaXplZF90cmlwbGUuc3RhcnRzd2l0 aCgnLScpOgorKwkJbm9ybWFsaXplZF90cmlwbGUgPSAndW5rbm93bicgKyBub3JtYWxpemVkX3Ry aXBsZQorKworKwlpZiBub3JtYWxpemVkX3RyaXBsZS5lbmRzd2l0aCgnLScpOgorKwkJbm9ybWFs aXplZF90cmlwbGUgKz0gJ3Vua25vd24nCisrCisrCSMgTm9ybWFsaXplIE1pbkdXIGJ1aWxkcyB0 byAqYXJjaCotdzY0LW1pbmd3MzIKKysJaWYgbm9ybWFsaXplZF90cmlwbGUuZW5kc3dpdGgoJ3dp bmRvd3MtZ251Jyk6CisrCQlub3JtYWxpemVkX3RyaXBsZSA9IG5vcm1hbGl6ZWRfdHJpcGxlWzpu b3JtYWxpemVkX3RyaXBsZS5pbmRleCgnLScpXSArICctdzY0LW1pbmd3MzInCisrCisrCSMgU3Ry aXAgdGhlIHZlbmRvciB3aGVuIGRvaW5nIG1zdmMgYnVpbGRzLCBzaW5jZSBpdCdzIHVudXNlZCBh bnl3YXkuCisrCWlmIG5vcm1hbGl6ZWRfdHJpcGxlLmVuZHN3aXRoKCd3aW5kb3dzLW1zdmMnKToK KysJCW5vcm1hbGl6ZWRfdHJpcGxlID0gbm9ybWFsaXplZF90cmlwbGVbOm5vcm1hbGl6ZWRfdHJp cGxlLmluZGV4KCctJyldICsgJy13aW5kb3dzLW1zdmMnCisrCisrCXJldHVybiBub3JtYWxpemVk X3RyaXBsZS5yZXBsYWNlKCctJywgJ18nKQorKworK0Bjb25mCisrZGVmIGNsYW5nX21vZGlmaWVy X21zdmMoY29uZik6CisrCWltcG9ydCBvcworKworKwkiIiIKKysJUmVhbGx5IGJhc2ljIHNldHVw IHRvIHVzZSBjbGFuZyBpbiBtc3ZjIG1vZGUuCisrCVdlIGFjdHVhbGx5IGRvbid0IHJlYWxseSB3 YW50IHRvIGRvIGEgbG90LCBldmVuIHRob3VnaCBjbGFuZyBpcyBtc3ZjIGNvbXBhdGlibGUKKysJ aW4gdGhpcyBtb2RlLCB0aGF0IGRvZXNuJ3QgbWVhbiB3ZSdyZSBhY3R1YWxseSB1c2luZyBtc3Zj LgorKwlJdCdzIHByb2JhYmx5IHRoZSBiZXN0IHRvIGxlYXZlIGl0IHRvIHRoZSB1c2VyLCB3ZSBj YW4gYXNzdW1lIG1zdmMgbW9kZSBpZiB0aGUgdXNlcgorKwl1c2VzIHRoZSBjbGFuZy1jbCBmcm9u dGVuZCwgYnV0IHRoaXMgbW9kdWxlIG9ubHkgY29uY2VybnMgaXRzZWxmIHdpdGggdGhlIGdjYy1s aWtlIGZyb250ZW5kLgorKwkiIiIKKysJdiA9IGNvbmYuZW52CisrCXYuY3Byb2dyYW1fUEFUVEVS TiA9ICclcy5leGUnCisrCisrCXYuY3NobGliX1BBVFRFUk4gICA9ICclcy5kbGwnCisrCXYuaW1w bGliX1BBVFRFUk4gICA9ICclcy5saWInCisrCXYuSU1QTElCX1NUICAgICAgICA9ICctV2wsLUlN UExJQjolcycKKysJdi5TSExJQl9NQVJLRVIgICAgID0gW10KKysKKysJdi5DRkxBR1NfY3NobGli ICAgID0gW10KKysJdi5MSU5LRkxBR1NfY3NobGliID0gWyctV2wsLURMTCddCisrCXYuY3N0bGli X1BBVFRFUk4gICA9ICclcy5saWInCisrCXYuU1RMSUJfTUFSS0VSICAgICA9IFtdCisrCisrCWRl bCh2LkFSKQorKwljb25mLmZpbmRfcHJvZ3JhbShbJ2xsdm0tbGliJywgJ2xpYiddLCB2YXI9J0FS JykKKysJdi5BUkZMQUdTICAgICAgICAgID0gWyctbm9sb2dvJ10KKysJdi5BUl9UR1RfRiAgICAg ICAgID0gWyctb3V0OiddCisrCisrCSMgRGVmYXVsdCB0byB0aGUgbGlua2VyIHN1cHBsaWVkIHdp dGggbGx2bSBpbnN0ZWFkIG9mIGxpbmsuZXhlIG9yIGxkCisrCXYuTElOS19DQyAgICAgICAgICA9 IHYuQ0MgKyBbJy1mdXNlLWxkPWxsZCcsICctbm9zdGRsaWInXQorKwl2LkNDTE5LX1RHVF9GICAg ICAgPSBbJy1vJ10KKysJdi5kZWZfUEFUVEVSTiAgICAgID0gJy1XbCwtZGVmOiVzJworKworKwl2 LkxJTktGTEFHUyA9IFtdCisrCisrCXYuTElCX1NUICAgICAgICAgICAgPSAnLWwlcycKKysJdi5M SUJQQVRIX1NUICAgICAgICA9ICctV2wsLUxJQlBBVEg6JXMnCisrCXYuU1RMSUJfU1QgICAgICAg ICAgPSAnLWwlcycKKysJdi5TVExJQlBBVEhfU1QgICAgICA9ICctV2wsLUxJQlBBVEg6JXMnCisr CisrCUNGTEFHU19DUlRfQ09NTU9OID0gWworKwkJJy1YY2xhbmcnLCAnLS1kZXBlbmRlbnQtbGli PW9sZG5hbWVzJywKKysJCSctWGNsYW5nJywgJy1mbm8tcnR0aS1kYXRhJywKKysJCSctRF9NVCcK KysJXQorKworKwl2LkNGTEFHU19DUlRfTVVMVElUSFJFQURFRCA9IENGTEFHU19DUlRfQ09NTU9O ICsgWworKwkJJy1YY2xhbmcnLCAnLWZsdG8tdmlzaWJpbGl0eS1wdWJsaWMtc3RkJywKKysJCSct WGNsYW5nJywgJy0tZGVwZW5kZW50LWxpYj1saWJjbXQnLAorKwldCisrCXYuQ1hYRkxBR1NfQ1JU X01VTFRJVEhSRUFERUQgPSB2LkNGTEFHU19DUlRfTVVMVElUSFJFQURFRAorKworKwl2LkNGTEFH U19DUlRfTVVMVElUSFJFQURFRF9EQkcgPSBDRkxBR1NfQ1JUX0NPTU1PTiArIFsKKysJCSctRF9E RUJVRycsCisrCQknLVhjbGFuZycsICctZmx0by12aXNpYmlsaXR5LXB1YmxpYy1zdGQnLAorKwkJ Jy1YY2xhbmcnLCAnLS1kZXBlbmRlbnQtbGliPWxpYmNtdGQnLAorKwldCisrCXYuQ1hYRkxBR1Nf Q1JUX01VTFRJVEhSRUFERURfREJHID0gdi5DRkxBR1NfQ1JUX01VTFRJVEhSRUFERURfREJHCisr CisrCXYuQ0ZMQUdTX0NSVF9NVUxUSVRIUkVBREVEX0RMTCA9IENGTEFHU19DUlRfQ09NTU9OICsg WworKwkJJy1EX0RMTCcsCisrCQknLVhjbGFuZycsICctLWRlcGVuZGVudC1saWI9bXN2Y3J0Jwor KwldCisrCXYuQ1hYRkxBR1NfQ1JUX01VTFRJVEhSRUFERURfRExMID0gdi5DRkxBR1NfQ1JUX01V TFRJVEhSRUFERURfRExMCisrCisrCXYuQ0ZMQUdTX0NSVF9NVUxUSVRIUkVBREVEX0RMTF9EQkcg PSBDRkxBR1NfQ1JUX0NPTU1PTiArIFsKKysJCSctRF9ETEwnLAorKwkJJy1EX0RFQlVHJywKKysJ CSctWGNsYW5nJywgJy0tZGVwZW5kZW50LWxpYj1tc3ZjcnRkJywKKysJXQorKwl2LkNYWEZMQUdT X0NSVF9NVUxUSVRIUkVBREVEX0RMTF9EQkcgPSB2LkNGTEFHU19DUlRfTVVMVElUSFJFQURFRF9E TExfREJHCisrCisrQGNvbmYKKytkZWYgY2xhbmdfbW9kaWZpZXJfdGFyZ2V0X3RyaXBsZShjb25m LCBjcHA9RmFsc2UpOgorKwljb21waWxlciA9IGNvbmYuZW52LkNYWCBpZiBjcHAgZWxzZSBjb25m LmVudi5DQworKwlvdXRwdXQgPSBjb25mLmNtZF9hbmRfbG9nKGNvbXBpbGVyICsgWyctZHVtcG1h Y2hpbmUnXSwgb3V0cHV0PXdhZmxpYi5Db250ZXh0LlNURE9VVCkKKysKKysJbW9kaWZpZXIgPSAo J2NsYW5neHgnIGlmIGNwcCBlbHNlICdjbGFuZycpICsgJ19tb2RpZmllcl8nCisrCWNsYW5nX21v ZGlmaWVyX2Z1bmMgPSBnZXRhdHRyKGNvbmYsIG1vZGlmaWVyICsgbm9ybWFsaXplX3RhcmdldF90 cmlwbGUob3V0cHV0KSwgTm9uZSkKKysJaWYgY2xhbmdfbW9kaWZpZXJfZnVuYzoKKysJCWNsYW5n X21vZGlmaWVyX2Z1bmMoKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9leHRyYXMvY2xhbmd4eF9jcm9z cy5weSBiL3dhZmxpYi9leHRyYXMvY2xhbmd4eF9jcm9zcy5weQorbmV3IGZpbGUgbW9kZSAxMDA2 NDQKK2luZGV4IDAwMDAwMDAwMC4uMGFkMzhhZDQ2CistLS0gL2Rldi9udWxsCisrKysgYi93YWZs aWIvZXh0cmFzL2NsYW5neHhfY3Jvc3MucHkKK0BAIC0wLDAgKzEsMTA2IEBACisrIyEvdXNyL2Jp bi9lbnYgcHl0aG9uCisrIyBlbmNvZGluZzogdXRmLTgKKysjIFRob21hcyBOYWd5IDIwMDktMjAx OCAoaXRhKQorKyMgRHJhZ29vblg2IDIwMTgKKysKKysiIiIKKytEZXRlY3QgdGhlIENsYW5nKysg QysrIGNvbXBpbGVyCisrVGhpcyB2ZXJzaW9uIGlzIGFuIGF0dGVtcHQgYXQgc3VwcG9ydGluZyB0 aGUgLXRhcmdldCBhbmQgLXN5c3Jvb3QgZmxhZyBvZiBDbGFuZysrLgorKyIiIgorKworK2Zyb20g d2FmbGliLlRvb2xzIGltcG9ydCBjY3Jvb3QsIGFyLCBneHgKKytmcm9tIHdhZmxpYi5Db25maWd1 cmUgaW1wb3J0IGNvbmYKKytpbXBvcnQgd2FmbGliLmV4dHJhcy5jbGFuZ19jcm9zc19jb21tb24K KysKKytkZWYgb3B0aW9ucyhvcHQpOgorKwkiIiIKKysJVGFyZ2V0IHRyaXBsZXQgZm9yIGNsYW5n Kys6OgorKwkJCSQgd2FmIGNvbmZpZ3VyZSAtLWNsYW5neHgtdGFyZ2V0LXRyaXBsZT14ODZfNjQt cGMtbGludXgtZ251CisrCSIiIgorKwljeHhfY29tcGlsZXJfb3B0cyA9IG9wdC5hZGRfb3B0aW9u X2dyb3VwKCdDb25maWd1cmF0aW9uIG9wdGlvbnMnKQorKwljeHhfY29tcGlsZXJfb3B0cy5hZGRf b3B0aW9uKCctLWNsYW5neHgtdGFyZ2V0LXRyaXBsZScsIGRlZmF1bHQ9Tm9uZSwKKysJCWhlbHA9 J1RhcmdldCB0cmlwbGUgZm9yIGNsYW5nKysnLAorKwkJZGVzdD0nY2xhbmd4eF90YXJnZXRfdHJp cGxlJykKKysJY3h4X2NvbXBpbGVyX29wdHMuYWRkX29wdGlvbignLS1jbGFuZ3h4LXN5c3Jvb3Qn LCBkZWZhdWx0PU5vbmUsCisrCQloZWxwPSdTeXNyb290IGZvciBjbGFuZysrJywKKysJCWRlc3Q9 J2NsYW5neHhfc3lzcm9vdCcpCisrCisrQGNvbmYKKytkZWYgZmluZF9jbGFuZ3h4KGNvbmYpOgor KwkiIiIKKysJRmluZHMgdGhlIHByb2dyYW0gY2xhbmcrKywgYW5kIGV4ZWN1dGVzIGl0IHRvIGVu c3VyZSBpdCByZWFsbHkgaXMgY2xhbmcrKworKwkiIiIKKysKKysJaW1wb3J0IG9zCisrCisrCWN4 eCA9IGNvbmYuZmluZF9wcm9ncmFtKCdjbGFuZysrJywgdmFyPSdDWFgnKQorKworKwlpZiBjb25m Lm9wdGlvbnMuY2xhbmd4eF90YXJnZXRfdHJpcGxlICE9IE5vbmU6CisrCQljb25mLmVudi5hcHBl bmRfdmFsdWUoJ0NYWCcsIFsnLXRhcmdldCcsIGNvbmYub3B0aW9ucy5jbGFuZ3h4X3RhcmdldF90 cmlwbGVdKQorKworKwlpZiBjb25mLm9wdGlvbnMuY2xhbmd4eF9zeXNyb290ICE9IE5vbmU6Cisr CQlzeXNyb290ID0gc3RyKCkKKysKKysJCWlmIG9zLnBhdGguaXNhYnMoY29uZi5vcHRpb25zLmNs YW5neHhfc3lzcm9vdCk6CisrCQkJc3lzcm9vdCA9IGNvbmYub3B0aW9ucy5jbGFuZ3h4X3N5c3Jv b3QKKysJCWVsc2U6CisrCQkJc3lzcm9vdCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2lu KG9zLmdldGN3ZCgpLCBjb25mLm9wdGlvbnMuY2xhbmd4eF9zeXNyb290KSkKKysKKysJCWNvbmYu ZW52LmFwcGVuZF92YWx1ZSgnQ1hYJywgWyctLXN5c3Jvb3QnLCBzeXNyb290XSkKKysKKysJY29u Zi5nZXRfY2NfdmVyc2lvbihjeHgsIGNsYW5nPVRydWUpCisrCWNvbmYuZW52LkNYWF9OQU1FID0g J2NsYW5nJworKworK0Bjb25mCisrZGVmIGNsYW5neHhfbW9kaWZpZXJfeDg2XzY0X3c2NF9taW5n dzMyKGNvbmYpOgorKwljb25mLmdjY19tb2RpZmllcl93aW4zMigpCisrCisrQGNvbmYKKytkZWYg Y2xhbmd4eF9tb2RpZmllcl9pMzg2X3c2NF9taW5ndzMyKGNvbmYpOgorKwljb25mLmdjY19tb2Rp Zmllcl93aW4zMigpCisrCisrQGNvbmYKKytkZWYgY2xhbmd4eF9tb2RpZmllcl9tc3ZjKGNvbmYp OgorKwl2ID0gY29uZi5lbnYKKysJdi5jeHhwcm9ncmFtX1BBVFRFUk4gPSB2LmNwcm9ncmFtX1BB VFRFUk4KKysJdi5jeHhzaGxpYl9QQVRURVJOICAgPSB2LmNzaGxpYl9QQVRURVJOCisrCisrCXYu Q1hYRkxBR1NfY3h4c2hsaWIgID0gW10KKysJdi5MSU5LRkxBR1NfY3h4c2hsaWIgPSB2LkxJTktG TEFHU19jc2hsaWIKKysJdi5jeHhzdGxpYl9QQVRURVJOICAgPSB2LmNzdGxpYl9QQVRURVJOCisr CisrCXYuTElOS19DWFggICAgICAgICAgID0gdi5DWFggKyBbJy1mdXNlLWxkPWxsZCcsICctbm9z dGRsaWInXQorKwl2LkNYWExOS19UR1RfRiAgICAgICA9IHYuQ0NMTktfVEdUX0YKKysKKytAY29u ZgorK2RlZiBjbGFuZ3h4X21vZGlmaWVyX3g4Nl82NF93aW5kb3dzX21zdmMoY29uZik6CisrCWNv bmYuY2xhbmdfbW9kaWZpZXJfbXN2YygpCisrCWNvbmYuY2xhbmd4eF9tb2RpZmllcl9tc3ZjKCkK KysKKysJIyBBbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSBhbnkgZmxhZ3MgaWYgdGhleSBzbyBk ZXNpcmUuCisrCWNsYW5nX21vZGlmaWVyX3VzZXJfZnVuYyA9IGdldGF0dHIoY29uZiwgJ2NsYW5n eHhfbW9kaWZpZXJfeDg2XzY0X3dpbmRvd3NfbXN2Y191c2VyJywgTm9uZSkKKysJaWYgY2xhbmdf bW9kaWZpZXJfdXNlcl9mdW5jOgorKwkJY2xhbmdfbW9kaWZpZXJfdXNlcl9mdW5jKCkKKysKKytA Y29uZgorK2RlZiBjbGFuZ3h4X21vZGlmaWVyX2kzODZfd2luZG93c19tc3ZjKGNvbmYpOgorKwlj b25mLmNsYW5nX21vZGlmaWVyX21zdmMoKQorKwljb25mLmNsYW5neHhfbW9kaWZpZXJfbXN2Yygp CisrCisrCSMgQWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgYW55IGZsYWdzIGlmIHRoZXkgc28g ZGVzaXJlLgorKwljbGFuZ19tb2RpZmllcl91c2VyX2Z1bmMgPSBnZXRhdHRyKGNvbmYsICdjbGFu Z3h4X21vZGlmaWVyX2kzODZfd2luZG93c19tc3ZjX3VzZXInLCBOb25lKQorKwlpZiBjbGFuZ19t b2RpZmllcl91c2VyX2Z1bmM6CisrCQljbGFuZ19tb2RpZmllcl91c2VyX2Z1bmMoKQorKworK2Rl ZiBjb25maWd1cmUoY29uZik6CisrCWNvbmYuZmluZF9jbGFuZ3h4KCkKKysJY29uZi5maW5kX3By b2dyYW0oWydsbHZtLWFyJywgJ2FyJ10sIHZhcj0nQVInKQorKwljb25mLmZpbmRfYXIoKQorKwlj b25mLmd4eF9jb21tb25fZmxhZ3MoKQorKwkjIEFsbG93IHRoZSB1c2VyIHRvIHByb3ZpZGUgZmxh Z3MgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uCisrCWNvbmYuZ3h4X21vZGlmaWVyX3BsYXRmb3Jt KCkKKysJIyBBbmQgYWxsb3cgbW9yZSBmaW5lIGdyYWluZWQgY29udHJvbCBiYXNlZCBvbiB0aGUg Y29tcGlsZXIncyB0cmlwbGV0LgorKwljb25mLmNsYW5nX21vZGlmaWVyX3RhcmdldF90cmlwbGUo Y3BwPVRydWUpCisrCWNvbmYuY3h4X2xvYWRfdG9vbHMoKQorKwljb25mLmN4eF9hZGRfZmxhZ3Mo KQorKwljb25mLmxpbmtfYWRkX2ZsYWdzKCkKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFzL2Ns YXNzaWNfcnVubmVyLnB5IGIvd2FmbGliL2V4dHJhcy9jbGFzc2ljX3J1bm5lci5weQorbmV3IGZp bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uYjA4Yzc5NGU4CistLS0gL2Rldi9udWxs CisrKysgYi93YWZsaWIvZXh0cmFzL2NsYXNzaWNfcnVubmVyLnB5CitAQCAtMCwwICsxLDY4IEBA CisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyBlbmNvZGluZzogdXRmLTgKKysjIFRob21hcyBO YWd5LCAyMDIxIChpdGEpCisrCisrZnJvbSB3YWZsaWIgaW1wb3J0IFV0aWxzLCBSdW5uZXIKKysK KysiIiIKKytSZS1lbmFibGUgdGhlIGNsYXNzaWMgdGhyZWFkaW5nIHN5c3RlbSBmcm9tIHdhZiAx LngKKysKKytkZWYgY29uZmlndXJlKGNvbmYpOgorKwljb25mLmxvYWQoJ2NsYXNzaWNfcnVubmVy JykKKysiIiIKKysKKytjbGFzcyBUYXNrQ29uc3VtZXIoVXRpbHMudGhyZWFkaW5nLlRocmVhZCk6 CisrCSIiIgorKwlUYXNrIGNvbnN1bWVycyBiZWxvbmcgdG8gYSBwb29sIG9mIHdvcmtlcnMKKysK KysJVGhleSB3YWl0IGZvciB0YXNrcyBpbiB0aGUgcXVldWUgYW5kIHRoZW4gdXNlIGBgdGFzay5w cm9jZXNzKC4uLilgYAorKwkiIiIKKysJZGVmIF9faW5pdF9fKHNlbGYsIHNwYXduZXIpOgorKwkJ VXRpbHMudGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorKwkJIiIiCisrCQlPYnRhaW4g OnB5OmNsYXNzOmB3YWZsaWIuVGFzay5UYXNrQmFzZWAgaW5zdGFuY2VzIGZyb20gdGhpcyBxdWV1 ZS4KKysJCSIiIgorKwkJc2VsZi5zcGF3bmVyID0gc3Bhd25lcgorKwkJc2VsZi5kYWVtb24gPSBU cnVlCisrCQlzZWxmLnN0YXJ0KCkKKysKKysJZGVmIHJ1bihzZWxmKToKKysJCSIiIgorKwkJTG9v cCBvdmVyIHRoZSB0YXNrcyB0byBleGVjdXRlCisrCQkiIiIKKysJCXRyeToKKysJCQlzZWxmLmxv b3AoKQorKwkJZXhjZXB0IEV4Y2VwdGlvbjoKKysJCQlwYXNzCisrCisrCWRlZiBsb29wKHNlbGYp OgorKwkJIiIiCisrCQlPYnRhaW4gdGFza3MgZnJvbSA6cHk6YXR0cjpgd2FmbGliLlJ1bm5lci5U YXNrQ29uc3VtZXIucmVhZHlgIGFuZCBjYWxsCisrCQk6cHk6bWV0aDpgd2FmbGliLlRhc2suVGFz a0Jhc2UucHJvY2Vzc2AuIElmIHRoZSBvYmplY3QgaXMgYSBmdW5jdGlvbiwgZXhlY3V0ZSBpdC4K KysJCSIiIgorKwkJbWFzdGVyID0gc2VsZi5zcGF3bmVyLm1hc3RlcgorKwkJd2hpbGUgMToKKysJ CQlpZiBub3QgbWFzdGVyLnN0b3A6CisrCQkJCXRyeToKKysJCQkJCXRzayA9IG1hc3Rlci5yZWFk eS5nZXQoKQorKwkJCQkJaWYgdHNrOgorKwkJCQkJCXRzay5sb2dfZGlzcGxheSh0c2suZ2VuZXJh dG9yLmJsZCkKKysJCQkJCQltYXN0ZXIucHJvY2Vzc190YXNrKHRzaykKKysJCQkJCWVsc2U6Cisr CQkJCQkJYnJlYWsKKysJCQkJZmluYWxseToKKysJCQkJCW1hc3Rlci5vdXQucHV0KHRzaykKKysK KytjbGFzcyBTcGF3bmVyKG9iamVjdCk6CisrCSIiIgorKwlEYWVtb24gdGhyZWFkIHRoYXQgY29u c3VtZXMgdGFza3MgZnJvbSA6cHk6Y2xhc3M6YHdhZmxpYi5SdW5uZXIuUGFyYWxsZWxgIHByb2R1 Y2VyIGFuZAorKwlzcGF3bnMgYSBjb25zdW1pbmcgdGhyZWFkIDpweTpjbGFzczpgd2FmbGliLlJ1 bm5lci5Db25zdW1lcmAgZm9yIGVhY2gKKysJOnB5OmNsYXNzOmB3YWZsaWIuVGFzay5UYXNrYCBp bnN0YW5jZS4KKysJIiIiCisrCWRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXIpOgorKwkJc2VsZi5t YXN0ZXIgPSBtYXN0ZXIKKysJCSIiIjpweTpjbGFzczpgd2FmbGliLlJ1bm5lci5QYXJhbGxlbGAg cHJvZHVjZXIgaW5zdGFuY2UiIiIKKysKKysJCXNlbGYucG9vbCA9IFtUYXNrQ29uc3VtZXIoc2Vs ZikgZm9yIGkgaW4gcmFuZ2UobWFzdGVyLm51bWpvYnMpXQorKworK1J1bm5lci5TcGF3bmVyID0g U3Bhd25lcgorZGlmZiAtLWdpdCBhL3dhZmxpYi9leHRyYXMvY29sb3JfbXN2Yy5weSBiL3dhZmxp Yi9leHRyYXMvY29sb3JfbXN2Yy5weQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw MDAwMC4uNjBiYWNiN2IyCistLS0gL2Rldi9udWxsCisrKysgYi93YWZsaWIvZXh0cmFzL2NvbG9y X21zdmMucHkKK0BAIC0wLDAgKzEsNTkgQEAKKysjIS91c3IvYmluL2VudiBweXRob24KKysjIGVu Y29kaW5nOiB1dGYtOAorKworKyMgUmVwbGFjZXMgdGhlIGRlZmF1bHQgZm9ybWF0dGVyIGJ5IG9u ZSB3aGljaCB1bmRlcnN0YW5kcyBNU1ZDIG91dHB1dCBhbmQgY29sb3JpemVzIGl0LgorKyMgTW9k aWZpZWQgZnJvbSBjb2xvcl9nY2MucHkKKysKKytfX2F1dGhvcl9fID0gX19tYWludGFpbmVyX18g PSAiQWxpYmVrIE9tYXJvdiA8YTFiYS5vbWFyb3ZAZ21haWwuY29tPiIKKytfX2NvcHlyaWdodF9f ID0gIkFsaWJlayBPbWFyb3YsIDIwMTkiCisrCisraW1wb3J0IHN5cworK2Zyb20gd2FmbGliIGlt cG9ydCBMb2dzCisrCisrY2xhc3MgQ29sb3JNU1ZDRm9ybWF0dGVyKExvZ3MuZm9ybWF0dGVyKToK KysJZGVmIF9faW5pdF9fKHNlbGYsIGNvbG9ycyk6CisrCQlzZWxmLmNvbG9ycyA9IGNvbG9ycwor KwkJTG9ncy5mb3JtYXR0ZXIuX19pbml0X18oc2VsZikKKysJCisrCWRlZiBwYXJzZU1lc3NhZ2Uo c2VsZiwgbGluZSwgY29sb3IpOgorKwkJIyBTcGxpdCBtZXNzYWFnZSBmcm9tICdkaXNrOmZpbGVw YXRoOiB0eXBlOiBtZXNzYWdlJworKwkJYXJyID0gbGluZS5zcGxpdCgnOicsIDMpCisrCQlpZiBs ZW4oYXJyKSA8IDQ6CisrCQkJcmV0dXJuIGxpbmUKKysJCQorKwkJY29sb3JlZCA9IHNlbGYuY29s b3JzLkJPTEQgKyBhcnJbMF0gKyAnOicgKyBhcnJbMV0gKyAnOicgKyBzZWxmLmNvbG9ycy5OT1JN QUwKKysJCWNvbG9yZWQgKz0gY29sb3IgKyBhcnJbMl0gKyAnOicgKyBzZWxmLmNvbG9ycy5OT1JN QUwKKysJCWNvbG9yZWQgKz0gYXJyWzNdCisrCQlyZXR1cm4gY29sb3JlZAorKwkKKysJZGVmIGZv cm1hdChzZWxmLCByZWMpOgorKwkJZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkKKysJCXdoaWxlIGZy YW1lOgorKwkJCWZ1bmMgPSBmcmFtZS5mX2NvZGUuY29fbmFtZQorKwkJCWlmIGZ1bmMgPT0gJ2V4 ZWNfY29tbWFuZCc6CisrCQkJCWNtZCA9IGZyYW1lLmZfbG9jYWxzLmdldCgnY21kJykKKysJCQkJ aWYgaXNpbnN0YW5jZShjbWQsIGxpc3QpOgorKwkJCQkJIyBGaXggZmlsZSBjYXNlLCBpdCBtYXkg YmUgQ0wuRVhFIG9yIGNsLmV4ZQorKwkJCQkJYXJndjAgPSBjbWRbMF0ubG93ZXIoKQorKwkJCQkJ aWYgJ2NsLmV4ZScgaW4gYXJndjA6CisrCQkJCQkJbGluZXMgPSBbXQorKwkJCQkJCSMgVGhpcyB3 aWxsIG5vdCB3b3JrIHdpdGggImxvY2FsaXplZCIgdmVyc2lvbnMKKysJCQkJCQkjIG9mIE1TVkMK KysJCQkJCQlmb3IgbGluZSBpbiByZWMubXNnLnNwbGl0bGluZXMoKToKKysJCQkJCQkJaWYgJzog d2FybmluZyAnIGluIGxpbmU6CisrCQkJCQkJCQlsaW5lcy5hcHBlbmQoc2VsZi5wYXJzZU1lc3Nh Z2UobGluZSwgc2VsZi5jb2xvcnMuWUVMTE9XKSkKKysJCQkJCQkJZWxpZiAnOiBlcnJvciAnIGlu IGxpbmU6CisrCQkJCQkJCQlsaW5lcy5hcHBlbmQoc2VsZi5wYXJzZU1lc3NhZ2UobGluZSwgc2Vs Zi5jb2xvcnMuUkVEKSkKKysJCQkJCQkJZWxpZiAnOiBmYXRhbCBlcnJvciAnIGluIGxpbmU6Cisr CQkJCQkJCQlsaW5lcy5hcHBlbmQoc2VsZi5wYXJzZU1lc3NhZ2UobGluZSwgc2VsZi5jb2xvcnMu UkVEICsgc2VsZi5jb2xvcnMuQk9MRCkpCisrCQkJCQkJCWVsaWYgJzogbm90ZTogJyBpbiBsaW5l OgorKwkJCQkJCQkJbGluZXMuYXBwZW5kKHNlbGYucGFyc2VNZXNzYWdlKGxpbmUsIHNlbGYuY29s b3JzLkNZQU4pKQorKwkJCQkJCQllbHNlOgorKwkJCQkJCQkJbGluZXMuYXBwZW5kKGxpbmUpCisr CQkJCQkJcmVjLm1zZyA9ICJcbiIuam9pbihsaW5lcykKKysJCQlmcmFtZSA9IGZyYW1lLmZfYmFj aworKwkJcmV0dXJuIExvZ3MuZm9ybWF0dGVyLmZvcm1hdChzZWxmLCByZWMpCisrCisrZGVmIG9w dGlvbnMob3B0KToKKysJTG9ncy5sb2cuaGFuZGxlcnNbMF0uc2V0Rm9ybWF0dGVyKENvbG9yTVNW Q0Zvcm1hdHRlcihMb2dzLmNvbG9ycykpCisrCitkaWZmIC0tZ2l0IGEvd2FmbGliL2V4dHJhcy9m Y19mdWppdHN1LnB5IGIvd2FmbGliL2V4dHJhcy9mY19mdWppdHN1LnB5CituZXcgZmlsZSBtb2Rl IDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi5jYWU2NzZjMjAKKy0tLSAvZGV2L251bGwKKysrKyBi L3dhZmxpYi9leHRyYXMvZmNfZnVqaXRzdS5weQorQEAgLTAsMCArMSw1MiBAQAorKyMhIC91c3Iv YmluL2VudiBweXRob24KKysjIGVuY29kaW5nOiB1dGYtOAorKyMgRGV0ZWN0aW9uIG9mIHRoZSBG dWppdHN1IEZvcnRyYW4gY29tcGlsZXIgZm9yIEFSTTY0RlgKKysKKytpbXBvcnQgcmUKKytmcm9t IHdhZmxpYi5Ub29scyBpbXBvcnQgZmMsZmNfY29uZmlnLGZjX3NjYW4KKytmcm9tIHdhZmxpYi5D b25maWd1cmUgaW1wb3J0IGNvbmYKKytmcm9tIHdhZmxpYi5Ub29scy5jb21waWxlcl9mYyBpbXBv cnQgZmNfY29tcGlsZXIKKytmY19jb21waWxlclsnbGludXgnXS5hcHBlbmQoJ2ZjX2Z1aml0c3Un KQorKworK0Bjb25mCisrZGVmIGZpbmRfZnVqaXRzdShjb25mKToKKysJZmM9Y29uZi5maW5kX3By b2dyYW0oWydmcnRweCddLHZhcj0nRkMnKQorKwljb25mLmdldF9mdWppdHN1X3ZlcnNpb24oZmMp CisrCWNvbmYuZW52LkZDX05BTUU9J0ZVSklUU1UnCisrCWNvbmYuZW52LkZDX01PRF9DQVBJVEFM SVpBVElPTj0nbG93ZXInCisrCisrQGNvbmYKKytkZWYgZnVqaXRzdV9mbGFncyhjb25mKToKKysJ dj1jb25mLmVudgorKwl2WydfRkNNT0RPVVRGTEFHUyddPVtdCisrCXZbJ0ZDRkxBR1NfREVCVUcn XT1bXQorKwl2WydGQ0ZMQUdTX2Zjc2hsaWInXT1bXQorKwl2WydMSU5LRkxBR1NfZmNzaGxpYidd PVtdCisrCXZbJ0ZDU1RMSUJfTUFSS0VSJ109JycKKysJdlsnRkNTSExJQl9NQVJLRVInXT0nJwor KworK0Bjb25mCisrZGVmIGdldF9mdWppdHN1X3ZlcnNpb24oY29uZixmYyk6CisrCXZlcnNpb25f cmU9cmUuY29tcGlsZShyImZydHB4XHMqXChGUlRcKVxzKig/UDxtYWpvcj5cZCspXC4oP1A8bWlu b3I+XGQrKVwuIixyZS5JKS5zZWFyY2gKKysJY21kPWZjK1snLS12ZXJzaW9uJ10KKysJb3V0LGVy cj1mY19jb25maWcuZ2V0b3V0cHV0KGNvbmYsY21kLHN0ZGluPUZhbHNlKQorKwlpZiBvdXQ6Cisr CQltYXRjaD12ZXJzaW9uX3JlKG91dCkKKysJZWxzZToKKysJCW1hdGNoPXZlcnNpb25fcmUoZXJy KQorKwlpZiBub3QgbWF0Y2g6CisrCQlyZXR1cm4oRmFsc2UpCisrCQljb25mLmZhdGFsKCdDb3Vs ZCBub3QgZGV0ZXJtaW5lIHRoZSBGdWppdHN1IEZSVCBGb3J0cmFuIGNvbXBpbGVyIHZlcnNpb24u JykKKysJZWxzZToKKysJCWs9bWF0Y2guZ3JvdXBkaWN0KCkKKysJCWNvbmYuZW52WydGQ19WRVJT SU9OJ109KGtbJ21ham9yJ10sa1snbWlub3InXSkKKysKKytkZWYgY29uZmlndXJlKGNvbmYpOgor Kwljb25mLmZpbmRfZnVqaXRzdSgpCisrCWNvbmYuZmluZF9wcm9ncmFtKCdhcicsdmFyPSdBUicp CisrCWNvbmYuYWRkX29zX2ZsYWdzKCdBUkZMQUdTJykKKysJaWYgbm90IGNvbmYuZW52LkFSRkxB R1M6CisrCQljb25mLmVudi5BUkZMQUdTPVsncmNzJ10KKysJY29uZi5mY19mbGFncygpCisrCWNv bmYuZmNfYWRkX2ZsYWdzKCkKKysJY29uZi5mdWppdHN1X2ZsYWdzKCkKK2RpZmYgLS1naXQgYS93 YWZsaWIvZXh0cmFzL2ZjX25mb3J0LnB5IGIvd2FmbGliL2V4dHJhcy9mY19uZm9ydC5weQorbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uYzI1ODg2YjhlCistLS0gL2Rldi9u dWxsCisrKysgYi93YWZsaWIvZXh0cmFzL2ZjX25mb3J0LnB5CitAQCAtMCwwICsxLDUyIEBACisr IyEgL3Vzci9iaW4vZW52IHB5dGhvbgorKyMgZW5jb2Rpbmc6IHV0Zi04CisrIyBEZXRlY3Rpb24g b2YgdGhlIE5FQyBGb3J0cmFuIGNvbXBpbGVyIGZvciBBdXJvcmEgVHN1YmFzYQorKworK2ltcG9y dCByZQorK2Zyb20gd2FmbGliLlRvb2xzIGltcG9ydCBmYyxmY19jb25maWcsZmNfc2NhbgorK2Zy b20gd2FmbGliLkNvbmZpZ3VyZSBpbXBvcnQgY29uZgorK2Zyb20gd2FmbGliLlRvb2xzLmNvbXBp bGVyX2ZjIGltcG9ydCBmY19jb21waWxlcgorK2ZjX2NvbXBpbGVyWydsaW51eCddLmFwcGVuZCgn ZmNfbmZvcnQnKQorKworK0Bjb25mCisrZGVmIGZpbmRfbmZvcnQoY29uZik6CisrCWZjPWNvbmYu ZmluZF9wcm9ncmFtKFsnbmZvcnQnXSx2YXI9J0ZDJykKKysJY29uZi5nZXRfbmZvcnRfdmVyc2lv bihmYykKKysJY29uZi5lbnYuRkNfTkFNRT0nTkZPUlQnCisrCWNvbmYuZW52LkZDX01PRF9DQVBJ VEFMSVpBVElPTj0nbG93ZXInCisrCisrQGNvbmYKKytkZWYgbmZvcnRfZmxhZ3MoY29uZik6Cisr CXY9Y29uZi5lbnYKKysJdlsnX0ZDTU9ET1VURkxBR1MnXT1bXQorKwl2WydGQ0ZMQUdTX0RFQlVH J109W10KKysJdlsnRkNGTEFHU19mY3NobGliJ109W10KKysJdlsnTElOS0ZMQUdTX2Zjc2hsaWIn XT1bXQorKwl2WydGQ1NUTElCX01BUktFUiddPScnCisrCXZbJ0ZDU0hMSUJfTUFSS0VSJ109JycK KysKKytAY29uZgorK2RlZiBnZXRfbmZvcnRfdmVyc2lvbihjb25mLGZjKToKKysJdmVyc2lvbl9y ZT1yZS5jb21waWxlKHIibmZvcnRccypcKE5GT1JUXClccyooP1A8bWFqb3I+XGQrKVwuKD9QPG1p bm9yPlxkKylcLiIscmUuSSkuc2VhcmNoCisrCWNtZD1mYytbJy0tdmVyc2lvbiddCisrCW91dCxl cnI9ZmNfY29uZmlnLmdldG91dHB1dChjb25mLGNtZCxzdGRpbj1GYWxzZSkKKysJaWYgb3V0Ogor KwkJbWF0Y2g9dmVyc2lvbl9yZShvdXQpCisrCWVsc2U6CisrCQltYXRjaD12ZXJzaW9uX3JlKGVy cikKKysJaWYgbm90IG1hdGNoOgorKwkJcmV0dXJuKEZhbHNlKQorKwkJY29uZi5mYXRhbCgnQ291 bGQgbm90IGRldGVybWluZSB0aGUgTkVDIE5GT1JUIEZvcnRyYW4gY29tcGlsZXIgdmVyc2lvbi4n KQorKwllbHNlOgorKwkJaz1tYXRjaC5ncm91cGRpY3QoKQorKwkJY29uZi5lbnZbJ0ZDX1ZFUlNJ T04nXT0oa1snbWFqb3InXSxrWydtaW5vciddKQorKworK2RlZiBjb25maWd1cmUoY29uZik6Cisr CWNvbmYuZmluZF9uZm9ydCgpCisrCWNvbmYuZmluZF9wcm9ncmFtKCduYXInLHZhcj0nQVInKQor Kwljb25mLmFkZF9vc19mbGFncygnQVJGTEFHUycpCisrCWlmIG5vdCBjb25mLmVudi5BUkZMQUdT OgorKwkJY29uZi5lbnYuQVJGTEFHUz1bJ3JjcyddCisrCWNvbmYuZmNfZmxhZ3MoKQorKwljb25m LmZjX2FkZF9mbGFncygpCisrCWNvbmYubmZvcnRfZmxhZ3MoKQorZGlmZiAtLWdpdCBhL3dhZmxp Yi9leHRyYXMvZ2VucHliaW5kLnB5IGIvd2FmbGliL2V4dHJhcy9nZW5weWJpbmQucHkKK25ldyBm aWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLmFjMjA2ZWU4YQorLS0tIC9kZXYvbnVs bAorKysrIGIvd2FmbGliL2V4dHJhcy9nZW5weWJpbmQucHkKK0BAIC0wLDAgKzEsMTk0IEBACisr aW1wb3J0IG9zCisraW1wb3J0IHBpcGVzCisraW1wb3J0IHN1YnByb2Nlc3MKKytpbXBvcnQgc3lz CisrCisrZnJvbSB3YWZsaWIgaW1wb3J0IExvZ3MsIFRhc2ssIENvbnRleHQKKytmcm9tIHdhZmxp Yi5Ub29scy5jX3ByZXByb2MgaW1wb3J0IHNjYW4gYXMgc2Nhbl9pbXBsCisrIyBeLS0gTm90ZTog d2FmbGliLmV4dHJhcy5nY2NkZXBzLnNjYW4gZG9lcyBub3Qgd29yayBmb3IgdXMsCisrIyBkdWUg dG8gaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb246CisrIyBUaGUgLU1EIGZsYWcgaXMgaW5qZWN0 ZWQgaW50byB0aGUge0MsQ1hYfUZMQUdTIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZAorKyMgZGVw ZW5kZW5jaWVzIGFyZSByZWFkIG91dCBpbiBhIHNlcGFyYXRlIHN0ZXAgYWZ0ZXIgY29tcGlsaW5n IGJ5IHJlYWRpbmcKKysjIHRoZSAuZCBmaWxlIHNhdmVkIGFsb25nc2lkZSB0aGUgb2JqZWN0IGZp bGUuCisrIyBBcyB0aGUgZ2VucHliaW5kIHRhc2sgcmVmZXJzIHRvIGEgaGVhZGVyIGZpbGUgdGhh dCBpcyBuZXZlciBjb21waWxlZCBpdHNlbGYsCisrIyBnY2NkZXBzIHdpbGwgbm90IGJlIGFibGUg dG8gZXh0cmFjdCB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMuCisrCisrZnJvbSB3YWZsaWIuVGFz a0dlbiBpbXBvcnQgZmVhdHVyZSwgYmVmb3JlX21ldGhvZAorKworKworK2RlZiBqb2luX2FyZ3Mo YXJncyk6CisrICAgIHJldHVybiAiICIuam9pbihwaXBlcy5xdW90ZShhcmcpIGZvciBhcmcgaW4g YXJncykKKysKKysKKytkZWYgY29uZmlndXJlKGNmZyk6CisrICAgIGNmZy5sb2FkKCJjb21waWxl cl9jeHgiKQorKyAgICBjZmcubG9hZCgicHl0aG9uIikKKysgICAgY2ZnLmNoZWNrX3B5dGhvbl92 ZXJzaW9uKG1pbnZlcj0oMiwgNykpCisrICAgIGlmIG5vdCBjZmcuZW52LkxMVk1fQ09ORklHOgor KyAgICAgICAgY2ZnLmZpbmRfcHJvZ3JhbSgibGx2bS1jb25maWciLCB2YXI9IkxMVk1fQ09ORklH IikKKysgICAgaWYgbm90IGNmZy5lbnYuR0VOUFlCSU5EOgorKyAgICAgICAgY2ZnLmZpbmRfcHJv Z3JhbSgiZ2VucHliaW5kIiwgdmFyPSJHRU5QWUJJTkQiKQorKworKyAgICAjIGZpbmQgY2xhbmcg cmVhc291cmNlIGRpciBmb3IgYnVpbHRpbiBoZWFkZXJzCisrICAgIGNmZy5lbnYuR0VOUFlCSU5E X1JFU09VUkNFX0RJUiA9IG9zLnBhdGguam9pbigKKysgICAgICAgICAgICBjZmcuY21kX2FuZF9s b2coY2ZnLmVudi5MTFZNX0NPTkZJRyArIFsiLS1saWJkaXIiXSkuc3RyaXAoKSwKKysgICAgICAg ICAgICAiY2xhbmciLAorKyAgICAgICAgICAgIGNmZy5jbWRfYW5kX2xvZyhjZmcuZW52LkxMVk1f Q09ORklHICsgWyItLXZlcnNpb24iXSkuc3RyaXAoKSkKKysgICAgaWYgb3MucGF0aC5leGlzdHMo Y2ZnLmVudi5HRU5QWUJJTkRfUkVTT1VSQ0VfRElSKToKKysgICAgICAgIGNmZy5tc2coIkNoZWNr aW5nIGNsYW5nIHJlc291cmNlIGRpciIsIGNmZy5lbnYuR0VOUFlCSU5EX1JFU09VUkNFX0RJUikK KysgICAgZWxzZToKKysgICAgICAgIGNmZy5mYXRhbCgiQ2xhbmcgcmVzb3VyY2UgZGlyIG5vdCBm b3VuZCIpCisrCisrCisrQGZlYXR1cmUoImdlbnB5YmluZCIpCisrQGJlZm9yZV9tZXRob2QoInBy b2Nlc3Nfc291cmNlIikKKytkZWYgZ2VuZXJhdGVfZ2VucHliaW5kX3NvdXJjZShzZWxmKToKKysg ICAgIiIiCisrICAgIFJ1biBnZW5weWJpbmQgb24gdGhlIGhlYWRlcnMgcHJvdmlkZWQgaW4gYHNv dXJjZWAgYW5kIGNvbXBpbGUvbGluayB0aGUKKysgICAgZ2VuZXJhdGVkIGNvZGUgaW5zdGVhZC4g IFRoaXMgd29ya3MgYnkgZ2VuZXJhdGluZyB0aGUgY29kZSBvbiB0aGUgZmx5IGFuZAorKyAgICBz d2FwcGluZyB0aGUgc291cmNlIG5vZGUgYmVmb3JlIGBwcm9jZXNzX3NvdXJjZWAgaXMgcnVuLgor KyAgICAiIiIKKysgICAgIyBuYW1lIG9mIG1vZHVsZSBkZWZhdWx0cyB0byBuYW1lIG9mIHRhcmdl dAorKyAgICBtb2R1bGUgPSBnZXRhdHRyKHNlbGYsICJtb2R1bGUiLCBzZWxmLnRhcmdldCkKKysK KysgICAgIyBjcmVhdGUgdGVtcG9yYXJ5IHNvdXJjZSBmaWxlIGluIGJ1aWxkIGRpcmVjdG9yeSB0 byBob2xkIGdlbmVyYXRlZCBjb2RlCisrICAgIG91dCA9ICJnZW5weWJpbmQtJXMuJWQuY3BwIiAl IChtb2R1bGUsIHNlbGYuaWR4KQorKyAgICBvdXQgPSBzZWxmLnBhdGguZ2V0X2JsZCgpLmZpbmRf b3JfZGVjbGFyZShvdXQpCisrCisrICAgIHRhc2sgPSBzZWxmLmNyZWF0ZV90YXNrKCJnZW5weWJp bmQiLCBzZWxmLnRvX25vZGVzKHNlbGYuc291cmNlKSwgb3V0KQorKyAgICAjIHVzZWQgdG8gZGV0 ZWN0IHdoZXRoZXIgQ0ZMQUdTIG9yIENYWEZMQUdTIHNob3VsZCBiZSBwYXNzZWQgdG8gZ2VucHli aW5kCisrICAgIHRhc2suZmVhdHVyZXMgPSBzZWxmLmZlYXR1cmVzCisrICAgIHRhc2subW9kdWxl ID0gbW9kdWxlCisrICAgICMgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGRlZmluaXRpb25zIHRvIGlu Y2x1ZGUgaW4gdGhlIGN1cnJlbnQgbW9kdWxlCisrICAgICMgKHdoZW4gaGVhZGVyIGZpbGVzIGFy ZSBzaGFyZWQgYnkgbW9yZSB0aGFuIG9uZSBtb2R1bGUpCisrICAgIHRhc2suZ2VucHliaW5kX3Rh Z3MgPSBzZWxmLnRvX2xpc3QoZ2V0YXR0cihzZWxmLCAiZ2VucHliaW5kX3RhZ3MiLCBbXSkpCisr ICAgICMgYWRkaXRpb25hbCBpbmNsdWRlIGRpcmVjdG9yaWVzCisrICAgIHRhc2suaW5jbHVkZXMg PSBzZWxmLnRvX2xpc3QoZ2V0YXR0cihzZWxmLCAiaW5jbHVkZXMiLCBbXSkpCisrICAgIHRhc2su Z2VucHliaW5kID0gc2VsZi5lbnYuR0VOUFlCSU5ECisrCisrICAgICMgVGVsbCB3YWYgdG8gY29t cGlsZS9saW5rIHRoZSBnZW5lcmF0ZWQgY29kZSBpbnN0ZWFkIG9mIHRoZSBoZWFkZXJzCisrICAg ICMgb3JpZ2luYWxseSBwYXNzZWQtaW4gdmlhIHRoZSBgc291cmNlYCBwYXJhbWV0ZXIuIChzZWUg YHByb2Nlc3Nfc291cmNlYCkKKysgICAgc2VsZi5zb3VyY2UgPSBbb3V0XQorKworKworK2NsYXNz IGdlbnB5YmluZChUYXNrLlRhc2spOiAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKysg ICAgIiIiCisrICAgIFJ1bnMgZ2VucHliaW5kIG9uIGhlYWRlcnMgcHJvdmlkZWQgYXMgaW5wdXQg dG8gdGhpcyB0YXNrLgorKyAgICBHZW5lcmF0ZWQgY29kZSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhl IGZpcnN0IChhbmQgb25seSkgb3V0cHV0IG5vZGUuCisrICAgICIiIgorKyAgICBxdWlldCA9IFRy dWUKKysgICAgY29sb3IgPSAiUElOSyIKKysgICAgc2NhbiA9IHNjYW5faW1wbAorKworKyAgICBA c3RhdGljbWV0aG9kCisrICAgIGRlZiBrZXl3b3JkKCk6CisrICAgICAgICByZXR1cm4gIkFuYWx5 emluZyIKKysKKysgICAgZGVmIHJ1bihzZWxmKToKKysgICAgICAgIGlmIG5vdCBzZWxmLmlucHV0 czoKKysgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgIGFyZ3MgPSBzZWxmLmZpbmRfZ2Vu cHliaW5kKCkgKyBzZWxmLl9hcmd1bWVudHMoCisrICAgICAgICAgICAgICAgIHJlc291cmNlX2Rp cj1zZWxmLmVudi5HRU5QWUJJTkRfUkVTT1VSQ0VfRElSKQorKworKyAgICAgICAgb3V0cHV0ID0g c2VsZi5ydW5fZ2VucHliaW5kKGFyZ3MpCisrCisrICAgICAgICAjIEZvciBkZWJ1Z2dpbmcgLyBs b2cgb3V0cHV0CisrICAgICAgICBwYXN0ZWFibGVfY29tbWFuZCA9IGpvaW5fYXJncyhhcmdzKQor KworKyAgICAgICAgIyB3cml0ZSBnZW5lcmF0ZWQgY29kZSB0byBmaWxlIGluIGJ1aWxkIGRpcmVj dG9yeQorKyAgICAgICAgIyAod2lsbCBiZSBjb21waWxlZCBkdXJpbmcgcHJvY2Vzc19zb3VyY2Ug c3RhZ2UpCisrICAgICAgICAob3V0cHV0X25vZGUsKSA9IHNlbGYub3V0cHV0cworKyAgICAgICAg b3V0cHV0X25vZGUud3JpdGUoIi8vIHt9XG57fVxuIi5mb3JtYXQoCisrICAgICAgICAgICAgcGFz dGVhYmxlX2NvbW1hbmQucmVwbGFjZSgiXG4iLCAiXG4vLyAiKSwgb3V0cHV0KSkKKysKKysgICAg ZGVmIGZpbmRfZ2VucHliaW5kKHNlbGYpOgorKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VucHliaW5k CisrCisrICAgIGRlZiBydW5fZ2VucHliaW5kKHNlbGYsIGFyZ3MpOgorKyAgICAgICAgYmxkID0g c2VsZi5nZW5lcmF0b3IuYmxkCisrCisrICAgICAgICBrd2FyZ3MgPSBkaWN0KGN3ZD1ibGQudmFy aWFudF9kaXIpCisrICAgICAgICBpZiBoYXNhdHRyKGJsZCwgImxvZ19jb21tYW5kIik6CisrICAg ICAgICAgICAgYmxkLmxvZ19jb21tYW5kKGFyZ3MsIGt3YXJncykKKysgICAgICAgIGVsc2U6Cisr ICAgICAgICAgICAgTG9ncy5kZWJ1ZygicnVubmVyOiB7IXJ9Ii5mb3JtYXQoYXJncykpCisrICAg ICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKysgICAgICAgICAgICBhcmdzLCBzdGRvdXQ9 c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCAqKmt3YXJncykKKysgICAg ICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpCisrCisrICAgICAgICBpZiBu b3QgaXNpbnN0YW5jZShzdGRvdXQsIHN0cik6CisrICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0 LmRlY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nLCBlcnJvcnM9InJlcGxhY2UiKQorKyAgICAgICAg aWYgbm90IGlzaW5zdGFuY2Uoc3RkZXJyLCBzdHIpOgorKyAgICAgICAgICAgIHN0ZGVyciA9IHN0 ZGVyci5kZWNvZGUoc3lzLnN0ZGVyci5lbmNvZGluZywgZXJyb3JzPSJyZXBsYWNlIikKKysKKysg ICAgICAgIGlmIHByb2MucmV0dXJuY29kZSAhPSAwOgorKyAgICAgICAgICAgIGJsZC5mYXRhbCgK KysgICAgICAgICAgICAgICAgImdlbnB5YmluZCByZXR1cm5lZCB7Y29kZX0gZHVyaW5nIHRoZSBm b2xsb3dpbmcgY2FsbDoiCisrICAgICAgICAgICAgICAgICJcbntjb21tYW5kfVxuXG57c3Rkb3V0 fVxuXG57c3RkZXJyfSIuZm9ybWF0KAorKyAgICAgICAgICAgICAgICAgICAgY29kZT1wcm9jLnJl dHVybmNvZGUsCisrICAgICAgICAgICAgICAgICAgICBjb21tYW5kPWpvaW5fYXJncyhhcmdzKSwK KysgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdGRvdXQsCisrICAgICAgICAgICAgICAgICAg ICBzdGRlcnI9c3RkZXJyLAorKyAgICAgICAgICAgICAgICApKQorKworKyAgICAgICAgaWYgc3Rk ZXJyLnN0cmlwKCk6CisrICAgICAgICAgICAgTG9ncy5kZWJ1Zygibm9uLWZhdGFsIHdhcm5pbmdz IGR1cmluZyBnZW5weWJpbmQgcnVuOlxue30iLmZvcm1hdChzdGRlcnIpKQorKworKyAgICAgICAg cmV0dXJuIHN0ZG91dAorKworKyAgICBkZWYgX2luY2x1ZGVfcGF0aHMoc2VsZik6CisrICAgICAg ICByZXR1cm4gc2VsZi5nZW5lcmF0b3IudG9faW5jbm9kZXMoc2VsZi5pbmNsdWRlcyArIHNlbGYu ZW52LklOQ0xVREVTKQorKworKyAgICBkZWYgX2lucHV0c19hc19yZWxhdGl2ZV9pbmNsdWRlcyhz ZWxmKToKKysgICAgICAgIGluY2x1ZGVfcGF0aHMgPSBzZWxmLl9pbmNsdWRlX3BhdGhzKCkKKysg ICAgICAgIHJlbGF0aXZlX2luY2x1ZGVzID0gW10KKysgICAgICAgIGZvciBub2RlIGluIHNlbGYu aW5wdXRzOgorKyAgICAgICAgICAgIGZvciBpbmMgaW4gaW5jbHVkZV9wYXRoczoKKysgICAgICAg ICAgICAgICAgaWYgbm9kZS5pc19jaGlsZF9vZihpbmMpOgorKyAgICAgICAgICAgICAgICAgICAg cmVsYXRpdmVfaW5jbHVkZXMuYXBwZW5kKG5vZGUucGF0aF9mcm9tKGluYykpCisrICAgICAgICAg ICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIHNl bGYuZ2VuZXJhdG9yLmJsZC5mYXRhbCgiY291bGQgbm90IHJlc29sdmUge30iLmZvcm1hdChub2Rl KSkKKysgICAgICAgIHJldHVybiByZWxhdGl2ZV9pbmNsdWRlcworKworKyAgICBkZWYgX2FyZ3Vt ZW50cyhzZWxmLCBnZW5weWJpbmRfcGFyc2U9Tm9uZSwgcmVzb3VyY2VfZGlyPU5vbmUpOgorKyAg ICAgICAgYXJncyA9IFtdCisrICAgICAgICByZWxhdGl2ZV9pbmNsdWRlcyA9IHNlbGYuX2lucHV0 c19hc19yZWxhdGl2ZV9pbmNsdWRlcygpCisrICAgICAgICBpc19jeHggPSAiY3h4IiBpbiBzZWxm LmZlYXR1cmVzCisrCisrICAgICAgICAjIG9wdGlvbnMgZm9yIGdlbnB5YmluZAorKyAgICAgICAg YXJncy5leHRlbmQoWyItLWdlbnB5YmluZC1tb2R1bGUiLCBzZWxmLm1vZHVsZV0pCisrICAgICAg ICBpZiBzZWxmLmdlbnB5YmluZF90YWdzOgorKyAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFsiLS1n ZW5weWJpbmQtdGFnIl0gKyBzZWxmLmdlbnB5YmluZF90YWdzKQorKyAgICAgICAgaWYgcmVsYXRp dmVfaW5jbHVkZXM6CisrICAgICAgICAgICAgYXJncy5leHRlbmQoWyItLWdlbnB5YmluZC1pbmNs dWRlIl0gKyByZWxhdGl2ZV9pbmNsdWRlcykKKysgICAgICAgIGlmIGdlbnB5YmluZF9wYXJzZToK KysgICAgICAgICAgICBhcmdzLmV4dGVuZChbIi0tZ2VucHliaW5kLXBhcnNlIiwgZ2VucHliaW5k X3BhcnNlXSkKKysKKysgICAgICAgIGFyZ3MuYXBwZW5kKCItLSIpCisrCisrICAgICAgICAjIGhl YWRlcnMgdG8gYmUgcHJvY2Vzc2VkIGJ5IGdlbnB5YmluZAorKyAgICAgICAgYXJncy5leHRlbmQo bm9kZS5hYnNwYXRoKCkgZm9yIG5vZGUgaW4gc2VsZi5pbnB1dHMpCisrCisrICAgICAgICBhcmdz LmFwcGVuZCgiLS0iKQorKworKyAgICAgICAgIyBvcHRpb25zIGZvciBjbGFuZy9nZW5weWJpbmQt cGFyc2UKKysgICAgICAgIGFyZ3MuYXBwZW5kKCItRF9fR0VOUFlCSU5EX18iKQorKyAgICAgICAg YXJncy5hcHBlbmQoIi14YysrIiBpZiBpc19jeHggZWxzZSAiLXhjIikKKysgICAgICAgIGhhc19z dGRfYXJndW1lbnQgPSBGYWxzZQorKyAgICAgICAgZm9yIGZsYWcgaW4gc2VsZi5lbnZbIkNYWEZM QUdTIiBpZiBpc19jeHggZWxzZSAiQ0ZMQUdTIl06CisrICAgICAgICAgICAgZmxhZyA9IGZsYWcu cmVwbGFjZSgiLXN0ZD1nbnUiLCAiLXN0ZD1jIikKKysgICAgICAgICAgICBpZiBmbGFnLnN0YXJ0 c3dpdGgoIi1zdGQ9YyIpOgorKyAgICAgICAgICAgICAgICBoYXNfc3RkX2FyZ3VtZW50ID0gVHJ1 ZQorKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGZsYWcpCisrICAgICAgICBpZiBub3QgaGFzX3N0 ZF9hcmd1bWVudDoKKysgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLXN0ZD1jKysxNCIpCisrICAg ICAgICBhcmdzLmV4dGVuZCgiLUl7fSIuZm9ybWF0KG4uYWJzcGF0aCgpKSBmb3IgbiBpbiBzZWxm Ll9pbmNsdWRlX3BhdGhzKCkpCisrICAgICAgICBhcmdzLmV4dGVuZCgiLUR7fSIuZm9ybWF0KHAp IGZvciBwIGluIHNlbGYuZW52LkRFRklORVMpCisrCisrICAgICAgICAjIHBvaW50IHRvIGNsYW5n IHJlc291cmNlIGRpciwgaWYgc3BlY2lmaWVkCisrICAgICAgICBpZiByZXNvdXJjZV9kaXI6Cisr ICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1yZXNvdXJjZS1kaXI9e30iLmZvcm1hdChyZXNvdXJj ZV9kaXIpKQorKworKyAgICAgICAgcmV0dXJuIGFyZ3MKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0 cmFzL2hheGUucHkgYi93YWZsaWIvZXh0cmFzL2hheGUucHkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0 CitpbmRleCAwMDAwMDAwMDAuLjRmZjM3NDU3OQorLS0tIC9kZXYvbnVsbAorKysrIGIvd2FmbGli L2V4dHJhcy9oYXhlLnB5CitAQCAtMCwwICsxLDE1NCBAQAorK2ltcG9ydCByZQorKworK2Zyb20g d2FmbGliIGltcG9ydCBVdGlscywgVGFzaywgRXJyb3JzLCBMb2dzCisrZnJvbSB3YWZsaWIuQ29u ZmlndXJlIGltcG9ydCBjb25mCisrZnJvbSB3YWZsaWIuVGFza0dlbiBpbXBvcnQgZXh0ZW5zaW9u LCB0YXNrZ2VuX21ldGhvZAorKworK0hBWEVfQ09NUElMRVJTID0geworKyAgICAnSlMnOiB7J3Rn dCc6ICctLWpzJywgJ2V4dF9vdXQnOiBbJy5qcyddfSwKKysgICAgJ0xVQSc6IHsndGd0JzogJy0t bHVhJywgJ2V4dF9vdXQnOiBbJy5sdWEnXX0sCisrICAgICdTV0YnOiB7J3RndCc6ICctLXN3Zics ICdleHRfb3V0JzogWycuc3dmJ119LAorKyAgICAnTkVLTyc6IHsndGd0JzogJy0tbmVrbycsICdl eHRfb3V0JzogWycubiddfSwKKysgICAgJ1BIUCc6IHsndGd0JzogJy0tcGhwJywgJ2V4dF9vdXQn OiBbJy5waHAnXX0sCisrICAgICdDUFAnOiB7J3RndCc6ICctLWNwcCcsICdleHRfb3V0JzogWycu aCcsICcuY3BwJ119LAorKyAgICAnQ1BQSUEnOiB7J3RndCc6ICctLWNwcGlhJywgJ2V4dF9vdXQn OiBbJy5jcHBpYSddfSwKKysgICAgJ0NTJzogeyd0Z3QnOiAnLS1jcycsICdleHRfb3V0JzogWycu Y3MnXX0sCisrICAgICdKQVZBJzogeyd0Z3QnOiAnLS1qYXZhJywgJ2V4dF9vdXQnOiBbJy5qYXZh J119LAorKyAgICAnSlZNJzogeyd0Z3QnOiAnLS1qdm0nLCAnZXh0X291dCc6IFsnLmphciddfSwK KysgICAgJ1BZVEhPTic6IHsndGd0JzogJy0tcHl0aG9uJywgJ2V4dF9vdXQnOiBbJy5weSddfSwK KysgICAgJ0hMJzogeyd0Z3QnOiAnLS1obCcsICdleHRfb3V0JzogWycuaGwnXX0sCisrICAgICdI TEMnOiB7J3RndCc6ICctLWhsJywgJ2V4dF9vdXQnOiBbJy5oJywgJy5jJ119LAorK30KKysKKytA Y29uZgorK2RlZiBjaGVja19oYXhlX3BrZyhzZWxmLCAqKmt3KToKKysgICAgc2VsZi5maW5kX3By b2dyYW0oJ2hheGVsaWInKQorKyAgICBsaWJzID0ga3cuZ2V0KCdsaWJzJykKKysgICAgaWYgbm90 IGxpYnMgb3Igbm90ICh0eXBlKGxpYnMpID09IHN0ciBvciAodHlwZShsaWJzKSA9PSBsaXN0IGFu ZCBhbGwoaXNpbnN0YW5jZShzLCBzdHIpIGZvciBzIGluIGxpYnMpKSk6CisrICAgICAgICBzZWxm LmZhdGFsKCdTcGVjaWZ5IGNvcnJlY3QgbGlicyB2YWx1ZSBpbiBlbnN1cmUgY2FsbCcpCisrICAg ICAgICByZXR1cm4KKysgICAgZmV0Y2ggPSBrdy5nZXQoJ2ZldGNoJykKKysgICAgaWYgbm90IGZl dGNoIGlzIE5vbmUgYW5kIG5vdCB0eXBlKGZldGNoKSA9PSBib29sOgorKyAgICAgICAgc2VsZi5m YXRhbCgnU3BlY2lmeSBjb3JyZWN0IGZldGNoIHZhbHVlIGluIGVuc3VyZSBjYWxsJykKKysKKysg ICAgbGlicyA9IFtsaWJzXSBpZiB0eXBlKGxpYnMpID09IHN0ciBlbHNlIGxpYnMKKysgICAgaGFs dCA9IEZhbHNlCisrICAgIGZvciBsaWIgaW4gbGliczoKKysgICAgICAgIHRyeToKKysgICAgICAg ICAgICBzZWxmLnN0YXJ0X21zZygnQ2hlY2tpbmcgZm9yIGxpYnJhcnkgJXMnICUgbGliKQorKyAg ICAgICAgICAgIG91dHB1dCA9IHNlbGYuY21kX2FuZF9sb2coc2VsZi5lbnYuSEFYRUxJQiArIFsn bGlzdCcsIGxpYl0pCisrICAgICAgICBleGNlcHQgRXJyb3JzLldhZkVycm9yOgorKyAgICAgICAg ICAgIHNlbGYuZW5kX21zZyhGYWxzZSkKKysgICAgICAgICAgICBzZWxmLmZhdGFsKCdDYW5cJ3Qg cnVuIGhheGVsaWIgbGlzdCwgZW5zdXJpbmcgaGFsdGVkJykKKysgICAgICAgICAgICByZXR1cm4K KysKKysgICAgICAgIGlmIGxpYiBpbiBvdXRwdXQ6CisrICAgICAgICAgICAgc2VsZi5lbmRfbXNn KGxpYiBpbiBvdXRwdXQpCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGlmIG5vdCBmZXRj aDoKKysgICAgICAgICAgICAgICAgc2VsZi5lbmRfbXNnKEZhbHNlKQorKyAgICAgICAgICAgICAg ICBoYWx0ID0gVHJ1ZQorKyAgICAgICAgICAgICAgICBjb250aW51ZQorKyAgICAgICAgICAgIHRy eToKKysgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjX2NvbW1hbmQoc2VsZi5lbnYu SEFYRUxJQiArIFsnaW5zdGFsbCcsIGxpYl0pCisrICAgICAgICAgICAgICAgIGlmIHN0YXR1czoK KysgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5kX21zZyhGYWxzZSkKKysgICAgICAgICAgICAg ICAgICAgIHNlbGYuZmF0YWwoJ0NhblwndCBnZXQgJXMgd2l0aCBoYXhlbGliLCBlbnN1cmluZyBo YWx0ZWQnICUgbGliKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICAgICAg ICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBzZWxmLmVuZF9tc2coJ2Rvd25sb2FkZWQn LCBjb2xvcj0nWUVMTE9XJykKKysgICAgICAgICAgICBleGNlcHQgRXJyb3JzLldhZkVycm9yOgor KyAgICAgICAgICAgICAgICBzZWxmLmVuZF9tc2coRmFsc2UpCisrICAgICAgICAgICAgICAgIHNl bGYuZmF0YWwoJ0NhblwndCBydW4gaGF4ZWxpYiBpbnN0YWxsLCBlbnN1cmluZyBoYWx0ZWQnKQor KyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIHBvc3RmaXggPSBrdy5nZXQoJ3VzZWxp Yl9zdG9yZScpIG9yIGxpYi51cHBlcigpCisrICAgICAgICBzZWxmLmVudi5hcHBlbmRfdW5pcXVl KCdMSUJfJyArIHBvc3RmaXgsIGxpYikKKysKKysgICAgaWYgaGFsdDoKKysgICAgICAgIHNlbGYu ZmF0YWwoJ0NhblwndCBmaW5kIGxpYnJhcmllcyBpbiBoYXhlbGliIGxpc3QsIGVuc3VyaW5nIGhh bHRlZCcpCisrICAgICAgICByZXR1cm4KKysKKytjbGFzcyBoYXhlKFRhc2suVGFzayk6CisrICAg IHZhcnMgPSBbJ0hBWEVfVkVSU0lPTicsICdIQVhFX0ZMQUdTJ10KKysgICAgZXh0X2luID0gWycu aHgnXQorKworKyAgICBkZWYgcnVuKHNlbGYpOgorKyAgICAgICAgY21kID0gc2VsZi5lbnYuSEFY RSArIHNlbGYuZW52LkhBWEVfRkxBR1NfREVGQVVMVCArIHNlbGYuZW52LkhBWEVfRkxBR1MKKysg ICAgICAgIHJldHVybiBzZWxmLmV4ZWNfY29tbWFuZChjbWQpCisrCisrZm9yIENPTVAgaW4gSEFY RV9DT01QSUxFUlM6CisrICAgICMgY3JlYXRlIHJ1bm5lcnMgZm9yIGVhY2ggY29tcGlsZSB0YXJn ZXQKKysgICAgdHlwZSgiaGF4ZV8iICsgQ09NUCwgKGhheGUsKSwgeydleHRfb3V0JzogSEFYRV9D T01QSUxFUlNbQ09NUF1bJ2V4dF9vdXQnXX0pCisrCisrQHRhc2tnZW5fbWV0aG9kCisrZGVmIGlu aXRfaGF4ZShzZWxmKToKKysgICAgZXJybXNnID0gJyVzIG5vdCBmb3VuZCwgc3BlY2lmeSBjb3Jy ZWN0IHZhbHVlJworKyAgICB0cnk6CisrICAgICAgICBjb21waWxlciA9IEhBWEVfQ09NUElMRVJT W3NlbGYuY29tcGlsZXJdCisrICAgICAgICBjb21wX3RndCA9IGNvbXBpbGVyWyd0Z3QnXQorKyAg ICAgICAgY29tcF9tb2QgPSAnL21haW4uYycgaWYgc2VsZi5jb21waWxlciA9PSAnSExDJyBlbHNl ICcnCisrICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEtleUVycm9yKToKKysgICAgICAgIHNl bGYuYmxkLmZhdGFsKGVycm1zZyAlICdDT01QSUxFUicgKyAnOiAnICsgJywgJy5qb2luKEhBWEVf Q09NUElMRVJTLmtleXMoKSkpCisrICAgICAgICByZXR1cm4KKysKKysgICAgc2VsZi5lbnYuYXBw ZW5kX3ZhbHVlKAorKyAgICAgICAgJ0hBWEVfRkxBR1MnLAorKyAgICAgICAgW2NvbXBfdGd0LCBz ZWxmLnBhdGguZ2V0X2JsZCgpLm1ha2Vfbm9kZShzZWxmLnRhcmdldCArIGNvbXBfbW9kKS5hYnNw YXRoKCldKQorKyAgICBpZiBoYXNhdHRyKHNlbGYsICd1c2UnKToKKysgICAgICAgIGlmIG5vdCAo dHlwZShzZWxmLnVzZSkgPT0gc3RyIG9yIHR5cGUoc2VsZi51c2UpID09IGxpc3QpOgorKyAgICAg ICAgICAgIHNlbGYuYmxkLmZhdGFsKGVycm1zZyAlICdVU0UnKQorKyAgICAgICAgICAgIHJldHVy bgorKyAgICAgICAgc2VsZi51c2UgPSBbc2VsZi51c2VdIGlmIHR5cGUoc2VsZi51c2UpID09IHN0 ciBlbHNlIHNlbGYudXNlCisrCisrICAgICAgICBmb3IgZGVwIGluIHNlbGYudXNlOgorKyAgICAg ICAgICAgIGlmIHNlbGYuZW52WydMSUJfJyArIGRlcF06CisrICAgICAgICAgICAgICAgIGZvciBs aWIgaW4gc2VsZi5lbnZbJ0xJQl8nICsgZGVwXToKKysgICAgICAgICAgICAgICAgICAgIHNlbGYu ZW52LmFwcGVuZF92YWx1ZSgnSEFYRV9GTEFHUycsIFsnLWxpYicsIGxpYl0pCisrCisrICAgIGlm IGhhc2F0dHIoc2VsZiwgJ3JlcycpOgorKyAgICAgICAgaWYgbm90IHR5cGUoc2VsZi5yZXMpID09 IHN0cjoKKysgICAgICAgICAgICBzZWxmLmJsZC5mYXRhbChlcnJtc2cgJSAnUkVTJykKKysgICAg ICAgICAgICByZXR1cm4KKysgICAgICAgIHNlbGYuZW52LmFwcGVuZF92YWx1ZSgnSEFYRV9GTEFH UycsIFsnLUQnLCAncmVzb3VyY2VzUGF0aD0lcycgJSBzZWxmLnJlc10pCisrCisrQGV4dGVuc2lv bignLmh4JykKKytkZWYgaGF4ZV9ob29rKHNlbGYsIG5vZGUpOgorKyAgICBpZiBsZW4oc2VsZi5z b3VyY2UpID4gMToKKysgICAgICAgIHNlbGYuYmxkLmZhdGFsKCdVc2Ugc2VwYXJhdGUgdGFzayBn ZW5lcmF0b3JzIGZvciBtdWx0aXBsZSBmaWxlcycpCisrICAgICAgICByZXR1cm4KKysKKysgICAg c3JjID0gbm9kZQorKyAgICB0Z3QgPSBzZWxmLnBhdGguZ2V0X2JsZCgpLmZpbmRfb3JfZGVjbGFy ZShzZWxmLnRhcmdldCkKKysKKysgICAgc2VsZi5pbml0X2hheGUoKQorKyAgICBzZWxmLmNyZWF0 ZV90YXNrKCdoYXhlXycgKyBzZWxmLmNvbXBpbGVyLCBzcmMsIHRndCkKKysKKytAY29uZgorK2Rl ZiBjaGVja19oYXhlKHNlbGYsIG1pbmk9Tm9uZSwgbWF4aT1Ob25lKToKKysgICAgc2VsZi5zdGFy dF9tc2coJ0NoZWNraW5nIGZvciBoYXhlIHZlcnNpb24nKQorKyAgICB0cnk6CisrICAgICAgICBj dXJyID0gcmUuc2VhcmNoKAorKyAgICAgICAgICAgIHInKFxkKy4/KSsnLAorKyAgICAgICAgICAg IHNlbGYuY21kX2FuZF9sb2coc2VsZi5lbnYuSEFYRSArIFsnLXZlcnNpb24nXSkpLmdyb3VwKCkK KysgICAgZXhjZXB0IEVycm9ycy5XYWZFcnJvcjoKKysgICAgICAgIHNlbGYuZW5kX21zZyhGYWxz ZSkKKysgICAgICAgIHNlbGYuZmF0YWwoJ0NhblwndCBnZXQgaGF4ZSB2ZXJzaW9uJykKKysgICAg ICAgIHJldHVybgorKworKyAgICBpZiBtaW5pIGFuZCBVdGlscy5udW0ydmVyKGN1cnIpIDwgVXRp bHMubnVtMnZlcihtaW5pKToKKysgICAgICAgIHNlbGYuZW5kX21zZygnd3JvbmcnLCBjb2xvcj0n UkVEJykKKysgICAgICAgIHNlbGYuZmF0YWwoJyVzIGlzIHRvbyBvbGQsIG5lZWQgPj0gJXMnICUg KGN1cnIsIG1pbmkpKQorKyAgICAgICAgcmV0dXJuCisrICAgIGlmIG1heGkgYW5kIFV0aWxzLm51 bTJ2ZXIoY3VycikgPiBVdGlscy5udW0ydmVyKG1heGkpOgorKyAgICAgICAgc2VsZi5lbmRfbXNn KCd3cm9uZycsIGNvbG9yPSdSRUQnKQorKyAgICAgICAgc2VsZi5mYXRhbCgnJXMgaXMgdG9vIG5l dywgbmVlZCA8PSAlcycgJSAoY3VyciwgbWF4aSkpCisrICAgICAgICByZXR1cm4KKysgICAgc2Vs Zi5lbmRfbXNnKGN1cnIsIGNvbG9yPSdHUkVFTicpCisrICAgIHNlbGYuZW52LkhBWEVfVkVSU0lP TiA9IGN1cnIKKysKKytkZWYgY29uZmlndXJlKHNlbGYpOgorKyAgICBzZWxmLmVudi5hcHBlbmRf dmFsdWUoCisrICAgICAgICAnSEFYRV9GTEFHU19ERUZBVUxUJywKKysgICAgICAgIFsnLUQnLCAn bm8tY29tcGlsYXRpb24nLCAnLWNwJywgc2VsZi5wYXRoLmFic3BhdGgoKV0pCisrICAgIExvZ3Mu d2FybignRGVmYXVsdCBmbGFnczogJXMnICUgJyAnLmpvaW4oc2VsZi5lbnYuSEFYRV9GTEFHU19E RUZBVUxUKSkKKysgICAgc2VsZi5maW5kX3Byb2dyYW0oJ2hheGUnKQorZGlmZiAtLWdpdCBhL3dh ZmxpYi9leHRyYXMvbXN2Y19wZGIucHkgYi93YWZsaWIvZXh0cmFzL21zdmNfcGRiLnB5CituZXcg ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi4wNzc2NTZiNGYKKy0tLSAvZGV2L251 bGwKKysrKyBiL3dhZmxpYi9leHRyYXMvbXN2Y19wZGIucHkKK0BAIC0wLDAgKzEsNDYgQEAKKysj IS91c3IvYmluL2VudiBweXRob24KKysjIGVuY29kaW5nOiB1dGYtOAorKyMgUmFmYcOrbCBLb29p IDIwMTkKKysKKytmcm9tIHdhZmxpYiBpbXBvcnQgVGFza0dlbgorKworK0BUYXNrR2VuLmZlYXR1 cmUoJ2MnLCAnY3h4JywgJ2ZjJykKKytAVGFza0dlbi5hZnRlcl9tZXRob2QoJ3Byb3BhZ2F0ZV91 c2VsaWJfdmFycycpCisrZGVmIGFkZF9wZGJfcGVyX29iamVjdChzZWxmKToKKysJIiIiRm9yIG1z dmMvZm9ydHJhbiwgc3BlY2lmeSBhIHVuaXF1ZSBjb21waWxlIHBkYiBwZXIgb2JqZWN0LCB0byB3 b3JrCisrCWFyb3VuZCBMTks0MDk5LiBGbGFncyBhcmUgdXBkYXRlZCB3aXRoIGEgdW5pcXVlIC9G ZCBmbGFnIGJhc2VkIG9uIHRoZQorKwl0YXNrIG91dHB1dCBuYW1lLiBUaGlzIGlzIHNlcGFyYXRl IGZyb20gdGhlIGxpbmsgcGRiLgorKwkiIiIKKysJaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2NvbXBp bGVkX3Rhc2tzJyk6CisrCQlyZXR1cm4KKysKKysJbGlua190YXNrID0gZ2V0YXR0cihzZWxmLCAn bGlua190YXNrJywgTm9uZSkKKysKKysJZm9yIHRhc2sgaW4gc2VsZi5jb21waWxlZF90YXNrczoK KysJCWlmIHRhc2suaW5wdXRzIGFuZCB0YXNrLmlucHV0c1swXS5uYW1lLmxvd2VyKCkuZW5kc3dp dGgoJy5yYycpOgorKwkJCWNvbnRpbnVlCisrCisrCQlhZGRfcGRiID0gRmFsc2UKKysJCWZvciBm bGFnbmFtZSBpbiAoJ0NGTEFHUycsICdDWFhGTEFHUycsICdGQ0ZMQUdTJyk6CisrCQkJIyBzZXZl cmFsIGxhbmd1YWdlcyBtYXkgYmUgdXNlZCBhdCBvbmNlCisrCQkJZm9yIGZsYWcgaW4gdGFzay5l bnZbZmxhZ25hbWVdOgorKwkJCQlpZiBmbGFnWzE6XS5sb3dlcigpID09ICd6aSc6CisrCQkJCQlh ZGRfcGRiID0gVHJ1ZQorKwkJCQkJYnJlYWsKKysKKysJCWlmIGFkZF9wZGI6CisrCQkJbm9kZSA9 IHRhc2sub3V0cHV0c1swXS5jaGFuZ2VfZXh0KCcucGRiJykKKysJCQlwZGJfZmxhZyA9ICcvRmQ6 JyArIG5vZGUuYWJzcGF0aCgpCisrCisrCQkJZm9yIGZsYWduYW1lIGluICgnQ0ZMQUdTJywgJ0NY WEZMQUdTJywgJ0ZDRkxBR1MnKToKKysJCQkJYnVmID0gW3BkYl9mbGFnXQorKwkJCQlmb3IgZmxh ZyBpbiB0YXNrLmVudltmbGFnbmFtZV06CisrCQkJCQlpZiBmbGFnWzE6M10gPT0gJ0ZkJyBvciBm bGFnWzE6XS5sb3dlcigpID09ICdmcycgb3IgZmxhZ1sxOl0ubG93ZXIoKSA9PSAnbXAnOgorKwkJ CQkJCWNvbnRpbnVlCisrCQkJCQlidWYuYXBwZW5kKGZsYWcpCisrCQkJCXRhc2suZW52W2ZsYWdu YW1lXSA9IGJ1ZgorKworKwkJCWlmIGxpbmtfdGFzayBhbmQgbm90IG5vZGUgaW4gbGlua190YXNr LmRlcF9ub2RlczoKKysJCQkJbGlua190YXNrLmRlcF9ub2Rlcy5hcHBlbmQobm9kZSkKKysJCQlp ZiBub3Qgbm9kZSBpbiB0YXNrLm91dHB1dHM6CisrCQkJCXRhc2sub3V0cHV0cy5hcHBlbmQobm9k ZSkKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFzL3NwaGlueC5weSBiL3dhZmxpYi9leHRyYXMv c3BoaW54LnB5CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi4wOGYzY2Zk OGEKKy0tLSAvZGV2L251bGwKKysrKyBiL3dhZmxpYi9leHRyYXMvc3BoaW54LnB5CitAQCAtMCww ICsxLDEyMCBAQAorKyIiIlN1cHBvcnQgZm9yIFNwaGlueCBkb2N1bWVudGF0aW9uCisrCisrVGhp cyBpcyBhIHdyYXBwZXIgZm9yIHNwaGlueC1idWlsZCBwcm9ncmFtLiBQbGVhc2Ugbm90ZSB0aGF0 IHNwaGlueC1idWlsZCBzdXBwb3J0cyBvbmx5Cisrb25lIG91dHB1dCBmb3JtYXQgYXQgYSB0aW1l LCBidXQgdGhlIHRvb2wgY2FuIGNyZWF0ZSBtdWx0aXBsZSB0YXNrcyB0byBoYW5kbGUgbW9yZS4K KytUaGUgb3V0cHV0IGZvcm1hdHMgY2FuIGJlIHBhc3NlZCB2aWEgdGhlIHNwaGlueF9vdXRwdXRf Zm9ybWF0LCB3aGljaCBpcyBhbiBhcnJheSBvZgorK3N0cmluZ3MuIEZvciBiYWNrd2FyZHMgY29t cGF0aWJpbGl0eSBpZiBvbmx5IG9uZSBvdXRwdXQgaXMgbmVlZGVkLCBpdCBjYW4gYmUgcGFzc2Vk CisrYXMgYSBzaW5nbGUgc3RyaW5nLgorK1RoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgaXMgaHRt bC4KKysKKytTcGVjaWZpYyBmb3JtYXRzIGNhbiBiZSBpbnN0YWxsZWQgaW4gZGlmZmVyZW50IGRp cmVjdG9yaWVzIGJ5IHNwZWNpZnlpbmcgdGhlCisraW5zdGFsbF9wYXRoXzxGT1JNQVQ+IGF0dHJp YnV0ZS4gSWYgbm90IGRlZmluZWQsIHRoZSBzdGFuZGFyZCBpbnN0YWxsX3BhdGgKKyt3aWxsIGJl IHVzZWQgaW5zdGVhZC4KKysKKytFeGFtcGxlIHdzY3JpcHQ6CisrCisrZGVmIGNvbmZpZ3VyZShj bmYpOgorKyAgICBjb25mLmxvYWQoJ3NwaGlueCcpCisrCisrZGVmIGJ1aWxkKGJsZCk6CisrICAg IGJsZCgKKysgICAgICAgIGZlYXR1cmVzPSdzcGhpbngnLAorKyAgICAgICAgc3BoaW54X3NvdXJj ZT0nc291cmNlcycsICAjIHBhdGggdG8gc291cmNlIGRpcmVjdG9yeQorKyAgICAgICAgc3BoaW54 X29wdGlvbnM9Jy1hIC12JywgICMgc3BoaW54LWJ1aWxkIHByb2dyYW0gYWRkaXRpb25hbCBvcHRp b25zCisrICAgICAgICBzcGhpbnhfb3V0cHV0X2Zvcm1hdD1bJ2h0bWwnLCAnbWFuJ10sICAjIG91 dHB1dCBmb3JtYXQgb2Ygc3BoaW54IGRvY3VtZW50YXRpb24KKysgICAgICAgIGluc3RhbGxfcGF0 aF9tYW49JyR7RE9DRElSfS9tYW4nICAgICAgICMgcHV0IG1hbiBwYWdlcyBpbiBhIHNwZWNpZmlj IGRpcmVjdG9yeQorKyAgICAgICAgKQorKworKyIiIgorKworK2Zyb20gd2FmbGliLk5vZGUgaW1w b3J0IE5vZGUKKytmcm9tIHdhZmxpYiBpbXBvcnQgVXRpbHMKKytmcm9tIHdhZmxpYiBpbXBvcnQg VGFzaworK2Zyb20gd2FmbGliLlRhc2tHZW4gaW1wb3J0IGZlYXR1cmUsIGFmdGVyX21ldGhvZAor KworKworK2RlZiBjb25maWd1cmUoY25mKToKKysgICAgIiIiQ2hlY2sgaWYgc3BoaW54LWJ1aWxk IHByb2dyYW0gaXMgYXZhaWxhYmxlIGFuZCBsb2FkcyBnbnVfZGlycyB0b29sLiIiIgorKyAgICBj bmYuZmluZF9wcm9ncmFtKCdzcGhpbngtYnVpbGQnLCB2YXI9J1NQSElOWF9CVUlMRCcsIG1hbmRh dG9yeT1GYWxzZSkKKysgICAgY25mLmxvYWQoJ2dudV9kaXJzJykKKysKKysKKytAZmVhdHVyZSgn c3BoaW54JykKKytkZWYgYnVpbGRfc3BoaW54KHNlbGYpOgorKyAgICAiIiJCdWlsZHMgc3BoaW54 IHNvdXJjZXMuCisrICAgICIiIgorKyAgICBpZiBub3Qgc2VsZi5lbnYuU1BISU5YX0JVSUxEOgor KyAgICAgICAgc2VsZi5ibGQuZmF0YWwoJ1Byb2dyYW0gU1BISU5YX0JVSUxEIG5vdCBkZWZpbmVk LicpCisrICAgIGlmIG5vdCBnZXRhdHRyKHNlbGYsICdzcGhpbnhfc291cmNlJywgTm9uZSk6Cisr ICAgICAgICBzZWxmLmJsZC5mYXRhbCgnQXR0cmlidXRlIHNwaGlueF9zb3VyY2Ugbm90IGRlZmlu ZWQuJykKKysgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5zcGhpbnhfc291cmNlLCBOb2RlKToK KysgICAgICAgIHNlbGYuc3BoaW54X3NvdXJjZSA9IHNlbGYucGF0aC5maW5kX25vZGUoc2VsZi5z cGhpbnhfc291cmNlKQorKyAgICBpZiBub3Qgc2VsZi5zcGhpbnhfc291cmNlOgorKyAgICAgICAg c2VsZi5ibGQuZmF0YWwoJ0NhblwndCBmaW5kIHNwaGlueF9zb3VyY2U6ICVyJyAlIHNlbGYuc3Bo aW54X3NvdXJjZSkKKysKKysgICAgIyBJbiB0aGUgdGFza2dlbiB3ZSBoYXZlIHRoZSBjb21wbGV0 ZSBsaXN0IG9mIGZvcm1hdHMKKysgICAgVXRpbHMuZGVmX2F0dHJzKHNlbGYsIHNwaGlueF9vdXRw dXRfZm9ybWF0PSdodG1sJykKKysgICAgc2VsZi5zcGhpbnhfb3V0cHV0X2Zvcm1hdCA9IFV0aWxz LnRvX2xpc3Qoc2VsZi5zcGhpbnhfb3V0cHV0X2Zvcm1hdCkKKysKKysgICAgc2VsZi5lbnYuU1BI SU5YX09QVElPTlMgPSBnZXRhdHRyKHNlbGYsICdzcGhpbnhfb3B0aW9ucycsIFtdKQorKworKyAg ICBmb3Igc291cmNlX2ZpbGUgaW4gc2VsZi5zcGhpbnhfc291cmNlLmFudF9nbG9iKCcqKi8qJyk6 CisrICAgICAgICBzZWxmLmJsZC5hZGRfbWFudWFsX2RlcGVuZGVuY3koc2VsZi5zcGhpbnhfc291 cmNlLCBzb3VyY2VfZmlsZSkKKysKKysgICAgZm9yIGNmbXQgaW4gc2VsZi5zcGhpbnhfb3V0cHV0 X2Zvcm1hdDoKKysgICAgICAgIHNwaGlueF9idWlsZF90YXNrID0gc2VsZi5jcmVhdGVfdGFzaygn U3BoaW54QnVpbGRpbmdUYXNrJykKKysgICAgICAgIHNwaGlueF9idWlsZF90YXNrLnNldF9pbnB1 dHMoc2VsZi5zcGhpbnhfc291cmNlKQorKyAgICAgICAgIyBJbiB0YXNrIHdlIGtlZXAgdGhlIHNw ZWNpZmljIGZvcm1hdCB0aGlzIHRhc2sgaXMgZ2VuZXJhdGluZworKyAgICAgICAgc3BoaW54X2J1 aWxkX3Rhc2suZW52LlNQSElOWF9PVVRQVVRfRk9STUFUID0gY2ZtdAorKworKyAgICAgICAgIyB0 aGUgc3BoaW54LWJ1aWxkIHJlc3VsdHMgYXJlIGluIDxidWlsZCArIG91dHB1dF9mb3JtYXQ+IGRp cmVjdG9yeQorKyAgICAgICAgc3BoaW54X2J1aWxkX3Rhc2suc3BoaW54X291dHB1dF9kaXJlY3Rv cnkgPSBzZWxmLnBhdGguZ2V0X2JsZCgpLm1ha2Vfbm9kZShjZm10KQorKyAgICAgICAgc3BoaW54 X2J1aWxkX3Rhc2suc2V0X291dHB1dHMoc3BoaW54X2J1aWxkX3Rhc2suc3BoaW54X291dHB1dF9k aXJlY3RvcnkpCisrICAgICAgICBzcGhpbnhfYnVpbGRfdGFzay5zcGhpbnhfb3V0cHV0X2RpcmVj dG9yeS5ta2RpcigpCisrCisrICAgICAgICBVdGlscy5kZWZfYXR0cnMoc3BoaW54X2J1aWxkX3Rh c2ssIGluc3RhbGxfcGF0aD1nZXRhdHRyKHNlbGYsICdpbnN0YWxsX3BhdGhfJyArIGNmbXQsIGdl dGF0dHIoc2VsZiwgJ2luc3RhbGxfcGF0aCcsIGdldF9pbnN0YWxsX3BhdGgoc3BoaW54X2J1aWxk X3Rhc2spKSkpCisrCisrCisrZGVmIGdldF9pbnN0YWxsX3BhdGgob2JqZWN0KToKKysgICAgaWYg b2JqZWN0LmVudi5TUEhJTlhfT1VUUFVUX0ZPUk1BVCA9PSAnbWFuJzoKKysgICAgICAgIHJldHVy biBvYmplY3QuZW52Lk1BTkRJUgorKyAgICBlbGlmIG9iamVjdC5lbnYuU1BISU5YX09VVFBVVF9G T1JNQVQgPT0gJ2luZm8nOgorKyAgICAgICAgcmV0dXJuIG9iamVjdC5lbnYuSU5GT0RJUgorKyAg ICBlbHNlOgorKyAgICAgICAgcmV0dXJuIG9iamVjdC5lbnYuRE9DRElSCisrCisrCisrY2xhc3Mg U3BoaW54QnVpbGRpbmdUYXNrKFRhc2suVGFzayk6CisrICAgIGNvbG9yID0gJ0JPTEQnCisrICAg IHJ1bl9zdHIgPSAnJHtTUEhJTlhfQlVJTER9IC1NICR7U1BISU5YX09VVFBVVF9GT1JNQVR9ICR7 U1JDfSAke1RHVH0gLWQgJHtUR1RbMF0uYmxkX2RpcigpfS9kb2N0cmVlcy0ke1NQSElOWF9PVVRQ VVRfRk9STUFUfSAke1NQSElOWF9PUFRJT05TfScKKysKKysgICAgZGVmIGtleXdvcmQoc2VsZik6 CisrICAgICAgICByZXR1cm4gJ0NvbXBpbGluZyAoJXMpJyAlIHNlbGYuZW52LlNQSElOWF9PVVRQ VVRfRk9STUFUCisrCisrICAgIGRlZiBydW5uYWJsZV9zdGF0dXMoc2VsZik6CisrCisrICAgICAg ICBmb3IgeCBpbiBzZWxmLnJ1bl9hZnRlcjoKKysgICAgICAgICAgICBpZiBub3QgeC5oYXNydW46 CisrICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkFTS19MQVRFUgorKworKyAgICAgICAgc2Vs Zi5zaWduYXR1cmUoKQorKyAgICAgICAgcmV0ID0gVGFzay5UYXNrLnJ1bm5hYmxlX3N0YXR1cyhz ZWxmKQorKyAgICAgICAgaWYgcmV0ID09IFRhc2suU0tJUF9NRToKKysgICAgICAgICAgICAjIGlu IGNhc2UgdGhlIGZpbGVzIHdlcmUgcmVtb3ZlZAorKyAgICAgICAgICAgIHNlbGYuYWRkX2luc3Rh bGwoKQorKyAgICAgICAgcmV0dXJuIHJldAorKworKworKyAgICBkZWYgcG9zdF9ydW4oc2VsZik6 CisrICAgICAgICBzZWxmLmFkZF9pbnN0YWxsKCkKKysgICAgICAgIHJldHVybiBUYXNrLlRhc2su cG9zdF9ydW4oc2VsZikKKysKKysKKysgICAgZGVmIGFkZF9pbnN0YWxsKHNlbGYpOgorKyAgICAg ICAgbm9kZXMgPSBzZWxmLnNwaGlueF9vdXRwdXRfZGlyZWN0b3J5LmFudF9nbG9iKCcqKi8qJywg cXVpZXQ9VHJ1ZSkKKysgICAgICAgIHNlbGYub3V0cHV0cyArPSBub2RlcworKyAgICAgICAgc2Vs Zi5nZW5lcmF0b3IuYWRkX2luc3RhbGxfZmlsZXMoaW5zdGFsbF90bz1zZWxmLmluc3RhbGxfcGF0 aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxfZnJv bT1ub2RlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3Rw b25lPUZhbHNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dk PXNlbGYuc3BoaW54X291dHB1dF9kaXJlY3RvcnkubWFrZV9ub2RlKHNlbGYuZW52LlNQSElOWF9P VVRQVVRfRk9STUFUKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlbGF0aXZlX3RyaWNrPVRydWUpCitkaWZmIC0tZ2l0IGEvd2FmbGliL2V4dHJhcy93YWZjYWNo ZS5weSBiL3dhZmxpYi9leHRyYXMvd2FmY2FjaGUucHkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAwMDAwMDAwMDAuLjMwYWMzZWY1MQorLS0tIC9kZXYvbnVsbAorKysrIGIvd2FmbGliL2V4 dHJhcy93YWZjYWNoZS5weQorQEAgLTAsMCArMSw2NDggQEAKKysjISAvdXNyL2Jpbi9lbnYgcHl0 aG9uCisrIyBlbmNvZGluZzogdXRmLTgKKysjIFRob21hcyBOYWd5LCAyMDE5IChpdGEpCisrCisr IiIiCisrRmlsZXN5c3RlbS1iYXNlZCBjYWNoZSBzeXN0ZW0gdG8gc2hhcmUgYW5kIHJlLXVzZSBi dWlsZCBhcnRpZmFjdHMKKysKKytDYWNoZSBhY2Nlc3Mgb3BlcmF0aW9ucyAoY29weSB0byBhbmQg ZnJvbSkgYXJlIGRlbGVnYXRlZCB0bworK2luZGVwZW5kZW50IHByZS1mb3JrZWQgd29ya2VyIHN1 YnByb2Nlc3Nlcy4KKysKKytUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBtYXkg YmUgc2V0OgorKyogV0FGQ0FDSEU6IHNldmVyYWwgcG9zc2liaWxpdGllczoKKysgIC0gRmlsZSBj YWNoZToKKysgICAgYWJzb2x1dGUgcGF0aCBvZiB0aGUgd2FmIGNhY2hlICh+Ly5jYWNoZS93YWZj YWNoZV91c2VyLAorKyAgICB3aGVyZSBgdXNlcmAgcmVwcmVzZW50cyB0aGUgY3VycmVudGx5IGxv Z2dlZC1pbiB1c2VyKQorKyAgLSBVUkwgdG8gYSBjYWNoZSBzZXJ2ZXIsIGZvciBleGFtcGxlOgor KyAgICBleHBvcnQgV0FGQ0FDSEU9aHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbGVzLworKyAgICBp biB0aGF0IGNhc2UsIEdFVC9QT1NUIHJlcXVlc3RzIGFyZSBtYWRlIHRvIHVybHMgb2YgdGhlIGZv cm0KKysgICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbGVzLzAwMDAwMDAwMC8wIChjYWNoZSBt YW5hZ2VtZW50IGlzIGRlbGVnYXRlZCB0byB0aGUgc2VydmVyKQorKyAgLSBHQ1MsIFMzIG9yIE1J TklPIGJ1Y2tldAorKyAgICBnczovL215LWJ1Y2tldC8gICAgKHVzZXMgZ3N1dGlsIGNvbW1hbmQg bGluZSB0b29sIG9yIFdBRkNBQ0hFX0NNRCkKKysgICAgczM6Ly9teS1idWNrZXQvICAgICh1c2Vz IGF3cyBjb21tYW5kIGxpbmUgdG9vbCBvciBXQUZDQUNIRV9DTUQpCisrICAgIG1pbmlvOi8vbXkt YnVja2V0LyAodXNlcyBtYyBjb21tYW5kIGxpbmUgdG9vbCBvciBXQUZDQUNIRV9DTUQpCisrKiBX QUZDQUNIRV9DTUQ6IGJ1Y2tldCB1cGxvYWQvZG93bmxvYWQgY29tbWFuZCwgZm9yIGV4YW1wbGU6 CisrICAgIFdBRkNBQ0hFX0NNRD0iZ3N1dGlsIGNwICV7U1JDfSAle1RHVH0iCisrICBOb3RlIHRo YXQgdGhlIFdBRkNBQ0hFIGJ1Y2tldCB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgc291cmNlIG9yIGRl c3RpbmF0aW9uCisrICBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbiAodXBsb2FkIG9yIGRvd25s b2FkKS4gRm9yIGV4YW1wbGUsIHdpdGg6CisrICAgIFdBRkNBQ0hFPSJnczovL215YnVja2V0LyIK KysgIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgbWF5IGJlIHJ1bjoKKysgICAgZ3N1dGlsIGNwIGJ1 aWxkL215cHJvZ3JhbSAgZ3M6Ly9teWJ1Y2tldC9hYS9hYWFhYS8xCisrICAgIGdzdXRpbCBjcCBn czovL215YnVja2V0L2JiL2JiYmJiLzIgYnVpbGQvc29tZWZpbGUKKysqIFdBRkNBQ0hFX05PX1BV U0g6IGlmIHNldCwgZGlzYWJsZXMgcHVzaGluZyB0byB0aGUgY2FjaGUKKysqIFdBRkNBQ0hFX1ZF UkJPU0lUWTogaWYgc2V0LCBkaXNwbGF5cyBtb3JlIGRldGFpbGVkIGNhY2hlIG9wZXJhdGlvbnMK KysqIFdBRkNBQ0hFX1NUQVRTOiBpZiBzZXQsIGRpc3BsYXlzIGNhY2hlIHVzYWdlIHN0YXRpc3Rp Y3Mgb24gZXhpdAorKworK0ZpbGUgY2FjaGUgc3BlY2lmaWMgb3B0aW9uczoKKysgIEZpbGVzIGFy ZSBjb3BpZWQgdXNpbmcgaGFyZCBsaW5rcyBieSBkZWZhdWx0OyBpZiB0aGUgY2FjaGUgaXMgbG9j YXRlZAorKyAgb250byBhbm90aGVyIHBhcnRpdGlvbiwgdGhlIHN5c3RlbSBzd2l0Y2hlcyB0byBm aWxlIGNvcGllcyBpbnN0ZWFkLgorKyogV0FGQ0FDSEVfVFJJTV9NQVhfRk9MREVSOiBtYXhpbXVt IGFtb3VudCBvZiB0YXNrcyB0byBjYWNoZSAoMU0pCisrKiBXQUZDQUNIRV9FVklDVF9NQVhfQllU RVM6IG1heGltdW0gYW1vdW50IG9mIGNhY2hlIHNpemUgaW4gYnl0ZXMgKDEwR0IpCisrKiBXQUZD QUNIRV9FVklDVF9JTlRFUlZBTF9NSU5VVEVTOiBtaW5pbXVtIHRpbWUgaW50ZXJ2YWwgdG8gdHJ5 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdHJpbSB0aGUgY2FjaGUg KDMgbWludXRlcykKKysKKytVcGxvYWQgc3BlY2lmaWMgb3B0aW9uczoKKysqIFdBRkNBQ0hFX0FT WU5DX1dPUktFUlM6IGRlZmluZSBhIG51bWJlciBvZiB3b3JrZXJzIHRvIHVwbG9hZCByZXN1bHRz IGFzeW5jaHJvbm91c2x5CisrICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1heSBpbXBy b3ZlIGJ1aWxkIHBlcmZvcm1hbmNlIHdpdGggbWFueS9sb25nIGZpbGUgdXBsb2FkcworKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgaXMgdW5zZXQgKHN5bmNocm9ub3VzIHVw bG9hZHMpCisrKiBXQUZDQUNIRV9BU1lOQ19OT1dBSVQ6IGRvIG5vdCB3YWl0IGZvciB1cGxvYWRz IHRvIGNvbXBsZXRlIChkZWZhdWx0OiBGYWxzZSkKKysgICAgICAgICAgICAgICAgICAgICAgICAg dGhpcyByZXF1aXJlcyBhc3luY2hvbm91cyB1cGxvYWRzIHRvIGhhdmUgYW4gZWZmZWN0CisrCisr VXNhZ2U6OgorKworKwlkZWYgYnVpbGQoYmxkKToKKysJCWJsZC5sb2FkKCd3YWZjYWNoZScpCisr CQkuLi4KKysKKytUbyB0cm91Ymxlc2hvb3Q6OgorKworKwl3YWYgY2xlYW4gYnVpbGQgLS16b25l PXdhZmNhY2hlCisrIiIiCisrCisraW1wb3J0IGF0ZXhpdCwgYmFzZTY0LCBlcnJubywgZmNudGws IGdldHBhc3MsIG9zLCByZSwgc2h1dGlsLCBzeXMsIHRpbWUsIHRocmVhZGluZywgdHJhY2ViYWNr LCB1cmxsaWIzLCBzaGxleAorK3RyeToKKysJaW1wb3J0IHN1YnByb2Nlc3MzMiBhcyBzdWJwcm9j ZXNzCisrZXhjZXB0IEltcG9ydEVycm9yOgorKwlpbXBvcnQgc3VicHJvY2VzcworKworK2Jhc2Vf Y2FjaGUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vLmNhY2hlLycpCisraWYgbm90IG9zLnBhdGgu aXNkaXIoYmFzZV9jYWNoZSk6CisrCWJhc2VfY2FjaGUgPSAnL3RtcC8nCisrZGVmYXVsdF93YWZj YWNoZV9kaXIgPSBvcy5wYXRoLmpvaW4oYmFzZV9jYWNoZSwgJ3dhZmNhY2hlXycgKyBnZXRwYXNz LmdldHVzZXIoKSkKKysKKytDQUNIRV9ESVIgPSBvcy5lbnZpcm9uLmdldCgnV0FGQ0FDSEUnLCBk ZWZhdWx0X3dhZmNhY2hlX2RpcikKKytXQUZDQUNIRV9DTUQgPSBvcy5lbnZpcm9uLmdldCgnV0FG Q0FDSEVfQ01EJykKKytUUklNX01BWF9GT0xERVJTID0gaW50KG9zLmVudmlyb24uZ2V0KCdXQUZD QUNIRV9UUklNX01BWF9GT0xERVInLCAxMDAwMDAwKSkKKytFVklDVF9JTlRFUlZBTF9NSU5VVEVT ID0gaW50KG9zLmVudmlyb24uZ2V0KCdXQUZDQUNIRV9FVklDVF9JTlRFUlZBTF9NSU5VVEVTJywg MykpCisrRVZJQ1RfTUFYX0JZVEVTID0gaW50KG9zLmVudmlyb24uZ2V0KCdXQUZDQUNIRV9FVklD VF9NQVhfQllURVMnLCAxMCoqMTApKQorK1dBRkNBQ0hFX05PX1BVU0ggPSAxIGlmIG9zLmVudmly b24uZ2V0KCdXQUZDQUNIRV9OT19QVVNIJykgZWxzZSAwCisrV0FGQ0FDSEVfVkVSQk9TSVRZID0g MSBpZiBvcy5lbnZpcm9uLmdldCgnV0FGQ0FDSEVfVkVSQk9TSVRZJykgZWxzZSAwCisrV0FGQ0FD SEVfU1RBVFMgPSAxIGlmIG9zLmVudmlyb24uZ2V0KCdXQUZDQUNIRV9TVEFUUycpIGVsc2UgMAor K1dBRkNBQ0hFX0FTWU5DX1dPUktFUlMgPSBvcy5lbnZpcm9uLmdldCgnV0FGQ0FDSEVfQVNZTkNf V09SS0VSUycpCisrV0FGQ0FDSEVfQVNZTkNfTk9XQUlUID0gb3MuZW52aXJvbi5nZXQoJ1dBRkNB Q0hFX0FTWU5DX05PV0FJVCcpCisrT0sgPSAib2siCisrCisrcmVfd2FmX2NtZCA9IHJlLmNvbXBp bGUoJyg/UDxzcmM+JXtTUkN9KXwoP1A8dGd0PiV7VEdUfSknKQorKworK3RyeToKKysJaW1wb3J0 IGNQaWNrbGUKKytleGNlcHQgSW1wb3J0RXJyb3I6CisrCWltcG9ydCBwaWNrbGUgYXMgY1BpY2ts ZQorKworK2lmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CisrCWZyb20gd2FmbGliIGltcG9ydCBU YXNrLCBMb2dzLCBVdGlscywgQnVpbGQKKysKKytkZWYgY2FuX3JldHJpZXZlX2NhY2hlKHNlbGYp OgorKwkiIiIKKysJTmV3IG1ldGhvZCBmb3Igd2FmIFRhc2sgY2xhc3NlcworKwkiIiIKKysJaWYg bm90IHNlbGYub3V0cHV0czoKKysJCXJldHVybiBGYWxzZQorKworKwlzZWxmLmNhY2hlZCA9IEZh bHNlCisrCisrCXNpZyA9IHNlbGYuc2lnbmF0dXJlKCkKKysJc3NpZyA9IFV0aWxzLnRvX2hleChz ZWxmLnVpZCgpICsgc2lnKQorKworKwlpZiBXQUZDQUNIRV9TVEFUUzoKKysJCXNlbGYuZ2VuZXJh dG9yLmJsZC5jYWNoZV9yZXFzICs9IDEKKysKKysJZmlsZXNfdG8gPSBbbm9kZS5hYnNwYXRoKCkg Zm9yIG5vZGUgaW4gc2VsZi5vdXRwdXRzXQorKwlwcm9jID0gZ2V0X3Byb2Nlc3MoKQorKwllcnIg PSBjYWNoZV9jb21tYW5kKHByb2MsIHNzaWcsIFtdLCBmaWxlc190bykKKysJcHJvY2Vzc19wb29s LmFwcGVuZChwcm9jKQorKwlpZiBlcnIuc3RhcnRzd2l0aChPSyk6CisrCQlpZiBXQUZDQUNIRV9W RVJCT1NJVFk6CisrCQkJTG9ncy5wcHJpbnQoJ0NZQU4nLCAnICBGZXRjaGVkICVyIGZyb20gY2Fj aGUnICUgZmlsZXNfdG8pCisrCQllbHNlOgorKwkJCUxvZ3MuZGVidWcoJ3dhZmNhY2hlOiBmZXRj aGVkICVyIGZyb20gY2FjaGUnLCBmaWxlc190bykKKysJCWlmIFdBRkNBQ0hFX1NUQVRTOgorKwkJ CXNlbGYuZ2VuZXJhdG9yLmJsZC5jYWNoZV9oaXRzICs9IDEKKysJZWxzZToKKysJCWlmIFdBRkNB Q0hFX1ZFUkJPU0lUWToKKysJCQlMb2dzLnBwcmludCgnWUVMTE9XJywgJyAgTm8gY2FjaGUgZW50 cnkgJXMnICUgZmlsZXNfdG8pCisrCQllbHNlOgorKwkJCUxvZ3MuZGVidWcoJ3dhZmNhY2hlOiBO byBjYWNoZSBlbnRyeSAlczogJXMnLCBmaWxlc190bywgZXJyKQorKwkJcmV0dXJuIEZhbHNlCisr CisrCXNlbGYuY2FjaGVkID0gVHJ1ZQorKwlyZXR1cm4gVHJ1ZQorKworK2RlZiBwdXRfZmlsZXNf Y2FjaGUoc2VsZik6CisrCSIiIgorKwlOZXcgbWV0aG9kIGZvciB3YWYgVGFzayBjbGFzc2VzCisr CSIiIgorKwlpZiBXQUZDQUNIRV9OT19QVVNIIG9yIGdldGF0dHIoc2VsZiwgJ2NhY2hlZCcsIE5v bmUpIG9yIG5vdCBzZWxmLm91dHB1dHM6CisrCQlyZXR1cm4KKysKKysJZmlsZXNfZnJvbSA9IFtd CisrCWZvciBub2RlIGluIHNlbGYub3V0cHV0czoKKysJCXBhdGggPSBub2RlLmFic3BhdGgoKQor KwkJaWYgbm90IG9zLnBhdGguaXNmaWxlKHBhdGgpOgorKwkJCXJldHVybgorKwkJZmlsZXNfZnJv bS5hcHBlbmQocGF0aCkKKysKKysJYmxkID0gc2VsZi5nZW5lcmF0b3IuYmxkCisrCW9sZF9zaWcg PSBzZWxmLnNpZ25hdHVyZSgpCisrCisrCWZvciBub2RlIGluIHNlbGYuaW5wdXRzOgorKwkJdHJ5 OgorKwkJCWRlbCBub2RlLmN0eC5jYWNoZV9zaWdbbm9kZV0KKysJCWV4Y2VwdCBLZXlFcnJvcjoK KysJCQlwYXNzCisrCisrCWRlbGF0dHIoc2VsZiwgJ2NhY2hlX3NpZycpCisrCXNpZyA9IHNlbGYu c2lnbmF0dXJlKCkKKysKKysJZGVmIF9hc3luY19wdXRfZmlsZXNfY2FjaGUoYmxkLCBzc2lnLCBm aWxlc19mcm9tKToKKysJCXByb2MgPSBnZXRfcHJvY2VzcygpCisrCQlpZiBXQUZDQUNIRV9BU1lO Q19XT1JLRVJTOgorKwkJCXdpdGggYmxkLndhZmNhY2hlX2xvY2s6CisrCQkJCWlmIGJsZC53YWZj YWNoZV9zdG9wOgorKwkJCQkJcHJvY2Vzc19wb29sLmFwcGVuZChwcm9jKQorKwkJCQkJcmV0dXJu CisrCQkJCWJsZC53YWZjYWNoZV9wcm9jcy5hZGQocHJvYykKKysKKysJCWVyciA9IGNhY2hlX2Nv bW1hbmQocHJvYywgc3NpZywgZmlsZXNfZnJvbSwgW10pCisrCQlwcm9jZXNzX3Bvb2wuYXBwZW5k KHByb2MpCisrCQlpZiBlcnIuc3RhcnRzd2l0aChPSyk6CisrCQkJaWYgV0FGQ0FDSEVfVkVSQk9T SVRZOgorKwkJCQlMb2dzLnBwcmludCgnQ1lBTicsICcgIFN1Y2Nlc3NmdWxseSB1cGxvYWRlZCAl cyB0byBjYWNoZScgJSBmaWxlc19mcm9tKQorKwkJCWVsc2U6CisrCQkJCUxvZ3MuZGVidWcoJ3dh ZmNhY2hlOiBTdWNjZXNzZnVsbHkgdXBsb2FkZWQgJXIgdG8gY2FjaGUnLCBmaWxlc19mcm9tKQor KwkJCWlmIFdBRkNBQ0hFX1NUQVRTOgorKwkJCQlibGQuY2FjaGVfcHV0cyArPSAxCisrCQllbHNl OgorKwkJCWlmIFdBRkNBQ0hFX1ZFUkJPU0lUWToKKysJCQkJTG9ncy5wcHJpbnQoJ1JFRCcsICcg IEVycm9yIGNhY2hpbmcgc3RlcCByZXN1bHRzICVzOiAlcycgJSAoZmlsZXNfZnJvbSwgZXJyKSkK KysJCQllbHNlOgorKwkJCQlMb2dzLmRlYnVnKCd3YWZjYWNoZTogRXJyb3IgY2FjaGluZyByZXN1 bHRzICVzOiAlcycsIGZpbGVzX2Zyb20sIGVycikKKysKKysJaWYgb2xkX3NpZyA9PSBzaWc6Cisr CQlzc2lnID0gVXRpbHMudG9faGV4KHNlbGYudWlkKCkgKyBzaWcpCisrCQlpZiBXQUZDQUNIRV9B U1lOQ19XT1JLRVJTOgorKwkJCWZ1dCA9IGJsZC53YWZjYWNoZV9leGVjdXRvci5zdWJtaXQoX2Fz eW5jX3B1dF9maWxlc19jYWNoZSwgYmxkLCBzc2lnLCBmaWxlc19mcm9tKQorKwkJCWJsZC53YWZj YWNoZV91cGxvYWRzLmFwcGVuZChmdXQpCisrCQllbHNlOgorKwkJCV9hc3luY19wdXRfZmlsZXNf Y2FjaGUoYmxkLCBzc2lnLCBmaWxlc19mcm9tKQorKwllbHNlOgorKwkJTG9ncy5kZWJ1Zygnd2Fm Y2FjaGU6IHNraXBwZWQgJXIgdXBsb2FkIGR1ZSB0byBsYXRlIGlucHV0IG1vZGlmaWNhdGlvbnMg JXInLCBzZWxmLm91dHB1dHMsIHNlbGYuaW5wdXRzKQorKworKwlibGQudGFza19zaWdzW3NlbGYu dWlkKCldID0gc2VsZi5jYWNoZV9zaWcKKysKKytkZWYgaGFzaF9lbnZfdmFycyhzZWxmLCBlbnYs IHZhcnNfbHN0KToKKysJIiIiCisrCVJlaW1wbGVtZW50IEJ1aWxkQ29udGV4dC5oYXNoX2Vudl92 YXJzIHNvIHRoYXQgdGhlIHJlc3VsdGluZyBoYXNoIGRvZXMgbm90IGRlcGVuZCBvbiBsb2NhbCBw YXRocworKwkiIiIKKysJaWYgbm90IGVudi50YWJsZToKKysJCWVudiA9IGVudi5wYXJlbnQKKysJ CWlmIG5vdCBlbnY6CisrCQkJcmV0dXJuIFV0aWxzLlNJR19OSUwKKysKKysJaWR4ID0gc3RyKGlk KGVudikpICsgc3RyKHZhcnNfbHN0KQorKwl0cnk6CisrCQljYWNoZSA9IHNlbGYuY2FjaGVfZW52 CisrCWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysJCWNhY2hlID0gc2VsZi5jYWNoZV9lbnYgPSB7 fQorKwllbHNlOgorKwkJdHJ5OgorKwkJCXJldHVybiBzZWxmLmNhY2hlX2VudltpZHhdCisrCQll eGNlcHQgS2V5RXJyb3I6CisrCQkJcGFzcworKworKwl2ID0gc3RyKFtlbnZbYV0gZm9yIGEgaW4g dmFyc19sc3RdKQorKwl2ID0gdi5yZXBsYWNlKHNlbGYuc3Jjbm9kZS5hYnNwYXRoKCkuX19yZXBy X18oKVs6LTFdLCAnJykKKysJbSA9IFV0aWxzLm1kNSgpCisrCW0udXBkYXRlKHYuZW5jb2RlKCkp CisrCXJldCA9IG0uZGlnZXN0KCkKKysKKysJTG9ncy5kZWJ1ZygnZW52aGFzaDogJXIgJXInLCBy ZXQsIHYpCisrCisrCWNhY2hlW2lkeF0gPSByZXQKKysKKysJcmV0dXJuIHJldAorKworK2RlZiB1 aWQoc2VsZik6CisrCSIiIgorKwlSZWltcGxlbWVudCBUYXNrLnVpZCgpIHNvIHRoYXQgdGhlIHNp Z25hdHVyZSBkb2VzIG5vdCBkZXBlbmQgb24gbG9jYWwgcGF0aHMKKysJIiIiCisrCXRyeToKKysJ CXJldHVybiBzZWxmLnVpZF8KKysJZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorKwkJbSA9IFV0aWxz Lm1kNSgpCisrCQlzcmMgPSBzZWxmLmdlbmVyYXRvci5ibGQuc3Jjbm9kZQorKwkJdXAgPSBtLnVw ZGF0ZQorKwkJdXAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18uZW5jb2RlKCkpCisrCQlmb3IgeCBp biBzZWxmLmlucHV0cyArIHNlbGYub3V0cHV0czoKKysJCQl1cCh4LnBhdGhfZnJvbShzcmMpLmVu Y29kZSgpKQorKwkJc2VsZi51aWRfID0gbS5kaWdlc3QoKQorKwkJcmV0dXJuIHNlbGYudWlkXwor KworKworK2RlZiBtYWtlX2NhY2hlZChjbHMpOgorKwkiIiIKKysJRW5hYmxlIHRoZSB3YWYgY2Fj aGUgZm9yIGEgZ2l2ZW4gdGFzayBjbGFzcworKwkiIiIKKysJaWYgZ2V0YXR0cihjbHMsICdub2Nh Y2hlJywgTm9uZSkgb3IgZ2V0YXR0cihjbHMsICdoYXNfY2FjaGUnLCBGYWxzZSk6CisrCQlyZXR1 cm4KKysKKysJZnVsbF9uYW1lID0gIiVzLiVzIiAlIChjbHMuX19tb2R1bGVfXywgY2xzLl9fbmFt ZV9fKQorKwlpZiBmdWxsX25hbWUgaW4gKCd3YWZsaWIuVG9vbHMuY2Nyb290LnZudW0nLCAnd2Fm bGliLkJ1aWxkLmluc3QnKToKKysJCXJldHVybgorKworKwltMSA9IGdldGF0dHIoY2xzLCAncnVu JywgTm9uZSkKKysJZGVmIHJ1bihzZWxmKToKKysJCWlmIGdldGF0dHIoc2VsZiwgJ25vY2FjaGUn LCBGYWxzZSk6CisrCQkJcmV0dXJuIG0xKHNlbGYpCisrCQlpZiBzZWxmLmNhbl9yZXRyaWV2ZV9j YWNoZSgpOgorKwkJCXJldHVybiAwCisrCQlyZXR1cm4gbTEoc2VsZikKKysJY2xzLnJ1biA9IHJ1 bgorKworKwltMiA9IGdldGF0dHIoY2xzLCAncG9zdF9ydW4nLCBOb25lKQorKwlkZWYgcG9zdF9y dW4oc2VsZik6CisrCQlpZiBnZXRhdHRyKHNlbGYsICdub2NhY2hlJywgRmFsc2UpOgorKwkJCXJl dHVybiBtMihzZWxmKQorKwkJcmV0ID0gbTIoc2VsZikKKysJCXNlbGYucHV0X2ZpbGVzX2NhY2hl KCkKKysJCXJldHVybiByZXQKKysJY2xzLnBvc3RfcnVuID0gcG9zdF9ydW4KKysJY2xzLmhhc19j YWNoZSA9IFRydWUKKysKKytwcm9jZXNzX3Bvb2wgPSBbXQorK2RlZiBnZXRfcHJvY2VzcygpOgor KwkiIiIKKysJUmV0dXJucyBhIHdvcmtlciBwcm9jZXNzIHRoYXQgY2FuIHByb2Nlc3Mgd2FmIGNh Y2hlIGNvbW1hbmRzCisrCVRoZSB3b3JrZXIgcHJvY2VzcyBpcyBhc3N1bWVkIHRvIGJlIHJldHVy bmVkIHRvIHRoZSBwcm9jZXNzIHBvb2wgd2hlbiB1bnVzZWQKKysJIiIiCisrCXRyeToKKysJCXJl dHVybiBwcm9jZXNzX3Bvb2wucG9wKCkKKysJZXhjZXB0IEluZGV4RXJyb3I6CisrCQlmaWxlcGF0 aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSArIG9zLnNlcCAr ICd3YWZjYWNoZS5weScKKysJCWNtZCA9IFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgVXRpbHMucmVh ZGYoZmlsZXBhdGgpXQorKwkJcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3Vi cHJvY2Vzcy5QSVBFLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIGJ1ZnNpemU9MCkKKysKKytkZWYg YXRleGl0X3Bvb2woKToKKysJZm9yIHByb2MgaW4gcHJvY2Vzc19wb29sOgorKwkJcHJvYy5raWxs KCkKKythdGV4aXQucmVnaXN0ZXIoYXRleGl0X3Bvb2wpCisrCisrZGVmIGJ1aWxkKGJsZCk6Cisr CSIiIgorKwlDYWxsZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHRvIGVuYWJsZSBmaWxlIGNh Y2hpbmcKKysJIiIiCisrCisrCWlmIFdBRkNBQ0hFX0FTWU5DX1dPUktFUlM6CisrCQl0cnk6Cisr CQkJbnVtX3dvcmtlcnMgPSBpbnQoV0FGQ0FDSEVfQVNZTkNfV09SS0VSUykKKysJCWV4Y2VwdCBW YWx1ZUVycm9yOgorKwkJCUxvZ3Mud2FybignSW52YWxpZCBXQUZDQUNIRV9BU1lOQ19XT1JLRVJT IHNwZWNpZmllZDogJXInICUgV0FGQ0FDSEVfQVNZTkNfV09SS0VSUykKKysJCWVsc2U6CisrCQkJ ZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgorKwkJCWJs ZC53YWZjYWNoZV9leGVjdXRvciA9IFRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz1udW1f d29ya2VycykKKysJCQlibGQud2FmY2FjaGVfdXBsb2FkcyA9IFtdCisrCQkJYmxkLndhZmNhY2hl X3Byb2NzID0gc2V0KFtdKQorKwkJCWJsZC53YWZjYWNoZV9zdG9wID0gRmFsc2UKKysJCQlibGQu d2FmY2FjaGVfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKysKKysJCWRlZiBmaW5hbGl6ZV91cGxv YWRfYXN5bmMoYmxkKToKKysJCQlpZiBXQUZDQUNIRV9BU1lOQ19OT1dBSVQ6CisrCQkJCXdpdGgg YmxkLndhZmNhY2hlX2xvY2s6CisrCQkJCQlibGQud2FmY2FjaGVfc3RvcCA9IFRydWUKKysKKysJ CQkJZm9yIGZ1dCBpbiByZXZlcnNlZChibGQud2FmY2FjaGVfdXBsb2Fkcyk6CisrCQkJCQlmdXQu Y2FuY2VsKCkKKysKKysJCQkJZm9yIHByb2MgaW4gYmxkLndhZmNhY2hlX3Byb2NzOgorKwkJCQkJ cHJvYy5raWxsKCkKKysKKysJCQkJYmxkLndhZmNhY2hlX3Byb2NzLmNsZWFyKCkKKysJCQllbHNl OgorKwkJCQlMb2dzLnBwcmludCgnQ1lBTicsICcuLi4gd2FpdGluZyBmb3Igd2FmY2FjaGUgdXBs b2FkcyB0byBjb21wbGV0ZSAoJXMgdXBsb2FkcyknICUgbGVuKGJsZC53YWZjYWNoZV91cGxvYWRz KSkKKysJCQlibGQud2FmY2FjaGVfZXhlY3V0b3Iuc2h1dGRvd24od2FpdD1UcnVlKQorKwkJYmxk LmFkZF9wb3N0X2Z1bihmaW5hbGl6ZV91cGxvYWRfYXN5bmMpCisrCisrCWlmIFdBRkNBQ0hFX1NU QVRTOgorKwkJIyBJbml0IGNvdW50ZXIgZm9yIHN0YXRpc3RpY3MgYW5kIGhvb2sgdG8gcHJpbnQg cmVzdWx0cyBhdCB0aGUgZW5kCisrCQlibGQuY2FjaGVfcmVxcyA9IGJsZC5jYWNoZV9oaXRzID0g YmxkLmNhY2hlX3B1dHMgPSAwCisrCisrCQlkZWYgcHJpbnRzdGF0cyhibGQpOgorKwkJCWhpdF9y YXRpbyA9IDAKKysJCQlpZiBibGQuY2FjaGVfcmVxcyA+IDA6CisrCQkJCWhpdF9yYXRpbyA9IChi bGQuY2FjaGVfaGl0cyAvIGJsZC5jYWNoZV9yZXFzKSAqIDEwMAorKwkJCUxvZ3MucHByaW50KCdD WUFOJywgJyAgd2FmY2FjaGUgc3RhdHM6ICVzIHJlcXVlc3RzLCAlcyBoaXRzIChyYXRpbzogJS4y ZiUlKSwgJXMgd3JpdGVzJyAlCisrCQkJCQkgKGJsZC5jYWNoZV9yZXFzLCBibGQuY2FjaGVfaGl0 cywgaGl0X3JhdGlvLCBibGQuY2FjaGVfcHV0cykgKQorKwkJYmxkLmFkZF9wb3N0X2Z1bihwcmlu dHN0YXRzKQorKworKwlpZiBwcm9jZXNzX3Bvb2w6CisrCQkjIGFscmVhZHkgY2FsbGVkIG9uY2UK KysJCXJldHVybgorKworKwkjIHByZS1hbGxvY2F0aW9uCisrCXByb2Nlc3NlcyA9IFtnZXRfcHJv Y2VzcygpIGZvciB4IGluIHJhbmdlKGJsZC5qb2JzKV0KKysJcHJvY2Vzc19wb29sLmV4dGVuZChw cm9jZXNzZXMpCisrCisrCVRhc2suVGFzay5jYW5fcmV0cmlldmVfY2FjaGUgPSBjYW5fcmV0cmll dmVfY2FjaGUKKysJVGFzay5UYXNrLnB1dF9maWxlc19jYWNoZSA9IHB1dF9maWxlc19jYWNoZQor KwlUYXNrLlRhc2sudWlkID0gdWlkCisrCUJ1aWxkLkJ1aWxkQ29udGV4dC5oYXNoX2Vudl92YXJz ID0gaGFzaF9lbnZfdmFycworKwlmb3IgeCBpbiByZXZlcnNlZChsaXN0KFRhc2suY2xhc3Nlcy52 YWx1ZXMoKSkpOgorKwkJbWFrZV9jYWNoZWQoeCkKKysKKytkZWYgY2FjaGVfY29tbWFuZChwcm9j LCBzaWcsIGZpbGVzX2Zyb20sIGZpbGVzX3RvKToKKysJIiIiCisrCUNyZWF0ZSBhIGNvbW1hbmQg Zm9yIGNhY2hlIHdvcmtlciBwcm9jZXNzZXMsIHJldHVybnMgYSBwaWNrbGVkCisrCWJhc2U2NC1l bmNvZGVkIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHRhc2sgc2lnbmF0dXJlLCBhIGxpc3Qgb2YgZmls ZXMgdG8KKysJY2FjaGUgYW5kIGEgbGlzdCBvZiBmaWxlcyBmaWxlcyB0byBnZXQgZnJvbSBjYWNo ZSAob25lIG9mIHRoZSBsaXN0cworKwlpcyBhc3N1bWVkIHRvIGJlIGVtcHR5KQorKwkiIiIKKysJ b2JqID0gYmFzZTY0LmI2NGVuY29kZShjUGlja2xlLmR1bXBzKFtzaWcsIGZpbGVzX2Zyb20sIGZp bGVzX3RvXSkpCisrCXByb2Muc3RkaW4ud3JpdGUob2JqKQorKwlwcm9jLnN0ZGluLndyaXRlKCdc bicuZW5jb2RlKCkpCisrCXByb2Muc3RkaW4uZmx1c2goKQorKwlvYmogPSBwcm9jLnN0ZG91dC5y ZWFkbGluZSgpCisrCWlmIG5vdCBvYmo6CisrCQlyYWlzZSBPU0Vycm9yKCdQcmVmb3JrZWQgc3Vi LXByb2Nlc3MgJXIgZGllZCcgJSBwcm9jLnBpZCkKKysJcmV0dXJuIGNQaWNrbGUubG9hZHMoYmFz ZTY0LmI2NGRlY29kZShvYmopKQorKworK3RyeToKKysJY29weWZ1biA9IG9zLmxpbmsKKytleGNl cHQgTmFtZUVycm9yOgorKwljb3B5ZnVuID0gc2h1dGlsLmNvcHkyCisrCisrZGVmIGF0b21pY19j b3B5KG9yaWcsIGRlc3QpOgorKwkiIiIKKysJQ29weSBmaWxlcyB0byB0aGUgY2FjaGUsIHRoZSBv cGVyYXRpb24gaXMgYXRvbWljIGZvciBhIGdpdmVuIGZpbGUKKysJIiIiCisrCWdsb2JhbCBjb3B5 ZnVuCisrCXRtcCA9IGRlc3QgKyAnLnRtcCcKKysJdXAgPSBvcy5wYXRoLmRpcm5hbWUoZGVzdCkK KysJdHJ5OgorKwkJb3MubWFrZWRpcnModXApCisrCWV4Y2VwdCBPU0Vycm9yOgorKwkJcGFzcwor KworKwl0cnk6CisrCQljb3B5ZnVuKG9yaWcsIHRtcCkKKysJZXhjZXB0IE9TRXJyb3IgYXMgZToK KysJCWlmIGUuZXJybm8gPT0gZXJybm8uRVhERVY6CisrCQkJY29weWZ1biA9IHNodXRpbC5jb3B5 MgorKwkJCWNvcHlmdW4ob3JpZywgdG1wKQorKwkJZWxzZToKKysJCQlyYWlzZQorKwlvcy5yZW5h bWUodG1wLCBkZXN0KQorKworK2RlZiBscnVfdHJpbSgpOgorKwkiIiIKKysJdGhlIGNhY2hlIGZv bGRlcnMgdGFrZSB0aGUgZm9ybToKKysJYENBQ0hFX0RJUi8wYi8wYjE4MGY4MjI0NmQ3MjZlY2Uz N2M4Y2NkMGZiMWNkZTI2NTBkN2JmY2YxMjJlYzFmMTY5MDc5YTNiZmMwYWI5YAorKwl0aGV5IGFy ZSBsaXN0ZWQgaW4gb3JkZXIgb2YgbGFzdCBhY2Nlc3MsIGFuZCB0aGVuIHJlbW92ZWQKKysJdW50 aWwgdGhlIGFtb3VudCBvZiBmb2xkZXJzIGlzIHdpdGhpbiBUUklNX01BWF9GT0xERVJTIGFuZCB0 aGUgdG90YWwgc3BhY2UKKysJdGFrZW4gYnkgZmlsZXMgaXMgbGVzcyB0aGFuIEVWSUNUX01BWF9C WVRFUworKwkiIiIKKysJbHN0ID0gW10KKysJZm9yIHVwIGluIG9zLmxpc3RkaXIoQ0FDSEVfRElS KToKKysJCWlmIGxlbih1cCkgPT0gMjoKKysJCQlzdWIgPSBvcy5wYXRoLmpvaW4oQ0FDSEVfRElS LCB1cCkKKysJCQlmb3IgaHZhbCBpbiBvcy5saXN0ZGlyKHN1Yik6CisrCQkJCXBhdGggPSBvcy5w YXRoLmpvaW4oc3ViLCBodmFsKQorKworKwkJCQlzaXplID0gMAorKwkJCQlmb3IgZm5hbWUgaW4g b3MubGlzdGRpcihwYXRoKToKKysJCQkJCXRyeToKKysJCQkJCQlzaXplICs9IG9zLmxzdGF0KG9z LnBhdGguam9pbihwYXRoLCBmbmFtZSkpLnN0X3NpemUKKysJCQkJCWV4Y2VwdCBPU0Vycm9yOgor KwkJCQkJCXBhc3MKKysJCQkJbHN0LmFwcGVuZCgob3Muc3RhdChwYXRoKS5zdF9tdGltZSwgc2l6 ZSwgcGF0aCkpCisrCisrCWxzdC5zb3J0KGtleT1sYW1iZGEgeDogeFswXSkKKysJbHN0LnJldmVy c2UoKQorKworKwl0b3QgPSBzdW0oeFsxXSBmb3IgeCBpbiBsc3QpCisrCXdoaWxlIHRvdCA+IEVW SUNUX01BWF9CWVRFUyBvciBsZW4obHN0KSA+IFRSSU1fTUFYX0ZPTERFUlM6CisrCQlfLCB0bXBf c2l6ZSwgcGF0aCA9IGxzdC5wb3AoKQorKwkJdG90IC09IHRtcF9zaXplCisrCisrCQl0bXAgPSBw YXRoICsgJy5yZW1vdmUnCisrCQl0cnk6CisrCQkJc2h1dGlsLnJtdHJlZSh0bXApCisrCQlleGNl cHQgT1NFcnJvcjoKKysJCQlwYXNzCisrCQl0cnk6CisrCQkJb3MucmVuYW1lKHBhdGgsIHRtcCkK KysJCWV4Y2VwdCBPU0Vycm9yOgorKwkJCXN5cy5zdGRlcnIud3JpdGUoJ0NvdWxkIG5vdCByZW5h bWUgJXIgdG8gJXJcbicgJSAocGF0aCwgdG1wKSkKKysJCWVsc2U6CisrCQkJdHJ5OgorKwkJCQlz aHV0aWwucm10cmVlKHRtcCkKKysJCQlleGNlcHQgT1NFcnJvcjoKKysJCQkJc3lzLnN0ZGVyci53 cml0ZSgnQ291bGQgbm90IHJlbW92ZSAlclxuJyAlIHRtcCkKKysJc3lzLnN0ZGVyci53cml0ZSgi Q2FjaGUgdHJpbW1lZDogJXIgYnl0ZXMgaW4gJXIgZm9sZGVycyBsZWZ0XG4iICUgKHRvdCwgbGVu KGxzdCkpKQorKworKworK2RlZiBscnVfZXZpY3QoKToKKysJIiIiCisrCVJlZHVjZSB0aGUgY2Fj aGUgc2l6ZQorKwkiIiIKKysJbG9ja2ZpbGUgPSBvcy5wYXRoLmpvaW4oQ0FDSEVfRElSLCAnYWxs LmxvY2snKQorKwl0cnk6CisrCQlzdCA9IG9zLnN0YXQobG9ja2ZpbGUpCisrCWV4Y2VwdCBFbnZp cm9ubWVudEVycm9yIGFzIGU6CisrCQlpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKKysJCQl3 aXRoIG9wZW4obG9ja2ZpbGUsICd3JykgYXMgZjoKKysJCQkJZi53cml0ZSgnJykKKysJCQlyZXR1 cm4KKysJCWVsc2U6CisrCQkJcmFpc2UKKysKKysJaWYgc3Quc3RfbXRpbWUgPCB0aW1lLnRpbWUo KSAtIEVWSUNUX0lOVEVSVkFMX01JTlVURVMgKiA2MDoKKysJCSMgY2hlY2sgZXZlcnkgRVZJQ1Rf SU5URVJWQUxfTUlOVVRFUyBtaW51dGVzIGlmIHRoZSBjYWNoZSBpcyB0b28gYmlnCisrCQkjIE9D TE9FWEVDIGlzIHVubmVjZXNzYXJ5IGJlY2F1c2Ugbm8gcHJvY2Vzc2VzIGFyZSBzcGF3bmVkCisr CQlmZCA9IG9zLm9wZW4obG9ja2ZpbGUsIG9zLk9fUkRXUiB8IG9zLk9fQ1JFQVQsIDBvNzU1KQor KwkJdHJ5OgorKwkJCXRyeToKKysJCQkJZmNudGwuZmxvY2soZmQsIGZjbnRsLkxPQ0tfRVggfCBm Y250bC5MT0NLX05CKQorKwkJCWV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorKwkJCQlpZiBXQUZD QUNIRV9WRVJCT1NJVFk6CisrCQkJCQlzeXMuc3RkZXJyLndyaXRlKCd3YWZjYWNoZTogYW5vdGhl ciBjbGVhbmluZyBwcm9jZXNzIGlzIHJ1bm5pbmdcbicpCisrCQkJZWxzZToKKysJCQkJIyBub3cg ZG93IHRoZSBhY3R1YWwgY2xlYW51cAorKwkJCQlscnVfdHJpbSgpCisrCQkJCW9zLnV0aW1lKGxv Y2tmaWxlLCBOb25lKQorKwkJZmluYWxseToKKysJCQlvcy5jbG9zZShmZCkKKysKKytjbGFzcyBu ZXRjYWNoZShvYmplY3QpOgorKwlkZWYgX19pbml0X18oc2VsZik6CisrCQlzZWxmLmh0dHAgPSB1 cmxsaWIzLlBvb2xNYW5hZ2VyKCkKKysKKysJZGVmIHVybF9vZihzZWxmLCBzaWcsIGkpOgorKwkJ cmV0dXJuICIlcy8lcy8lcyIgJSAoQ0FDSEVfRElSLCBzaWcsIGkpCisrCisrCWRlZiB1cGxvYWQo c2VsZiwgZmlsZV9wYXRoLCBzaWcsIGkpOgorKwkJdXJsID0gc2VsZi51cmxfb2Yoc2lnLCBpKQor KwkJd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3JiJykgYXMgZjoKKysJCQlmaWxlX2RhdGEgPSBmLnJl YWQoKQorKwkJciA9IHNlbGYuaHR0cC5yZXF1ZXN0KCdQT1NUJywgdXJsLCB0aW1lb3V0PTYwLAor KwkJCWZpZWxkcz17ICdmaWxlJzogKCclcy8lcycgJSAoc2lnLCBpKSwgZmlsZV9kYXRhKSwgfSkK KysJCWlmIHIuc3RhdHVzID49IDQwMDoKKysJCQlyYWlzZSBPU0Vycm9yKCJJbnZhbGlkIHN0YXR1 cyAlciAlciIgJSAodXJsLCByLnN0YXR1cykpCisrCisrCWRlZiBkb3dubG9hZChzZWxmLCBmaWxl X3BhdGgsIHNpZywgaSk6CisrCQl1cmwgPSBzZWxmLnVybF9vZihzaWcsIGkpCisrCQl3aXRoIHNl bGYuaHR0cC5yZXF1ZXN0KCdHRVQnLCB1cmwsIHByZWxvYWRfY29udGVudD1GYWxzZSwgdGltZW91 dD02MCkgYXMgaW5mOgorKwkJCWlmIGluZi5zdGF0dXMgPj0gNDAwOgorKwkJCQlyYWlzZSBPU0Vy cm9yKCJJbnZhbGlkIHN0YXR1cyAlciAlciIgJSAodXJsLCBpbmYuc3RhdHVzKSkKKysJCQl3aXRo IG9wZW4oZmlsZV9wYXRoLCAnd2InKSBhcyBvdXQ6CisrCQkJCXNodXRpbC5jb3B5ZmlsZW9iaihp bmYsIG91dCkKKysKKysJZGVmIGNvcHlfdG9fY2FjaGUoc2VsZiwgc2lnLCBmaWxlc19mcm9tLCBm aWxlc190byk6CisrCQl0cnk6CisrCQkJZm9yIGksIHggaW4gZW51bWVyYXRlKGZpbGVzX2Zyb20p OgorKwkJCQlpZiBub3Qgb3MucGF0aC5pc2xpbmsoeCk6CisrCQkJCQlzZWxmLnVwbG9hZCh4LCBz aWcsIGkpCisrCQlleGNlcHQgRXhjZXB0aW9uOgorKwkJCXJldHVybiB0cmFjZWJhY2suZm9ybWF0 X2V4YygpCisrCQlyZXR1cm4gT0sKKysKKysJZGVmIGNvcHlfZnJvbV9jYWNoZShzZWxmLCBzaWcs IGZpbGVzX2Zyb20sIGZpbGVzX3RvKToKKysJCXRyeToKKysJCQlmb3IgaSwgeCBpbiBlbnVtZXJh dGUoZmlsZXNfdG8pOgorKwkJCQlzZWxmLmRvd25sb2FkKHgsIHNpZywgaSkKKysJCWV4Y2VwdCBF eGNlcHRpb246CisrCQkJcmV0dXJuIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKysJCXJldHVybiBP SworKworK2NsYXNzIGZjYWNoZShvYmplY3QpOgorKwlkZWYgX19pbml0X18oc2VsZik6CisrCQlp ZiBub3Qgb3MucGF0aC5leGlzdHMoQ0FDSEVfRElSKToKKysJCQl0cnk6CisrCQkJCW9zLm1ha2Vk aXJzKENBQ0hFX0RJUikKKysJCQlleGNlcHQgT1NFcnJvcjoKKysJCQkJcGFzcworKwkJaWYgbm90 IG9zLnBhdGguZXhpc3RzKENBQ0hFX0RJUik6CisrCQkJcmFpc2UgVmFsdWVFcnJvcignQ291bGQg bm90IGluaXRpYWxpemUgdGhlIGNhY2hlIGRpcmVjdG9yeScpCisrCisrCWRlZiBjb3B5X3RvX2Nh Y2hlKHNlbGYsIHNpZywgZmlsZXNfZnJvbSwgZmlsZXNfdG8pOgorKwkJIiIiCisrCQlDb3B5IGZp bGVzIHRvIHRoZSBjYWNoZSwgZXhpc3RpbmcgZmlsZXMgYXJlIG92ZXJ3cml0dGVuLAorKwkJYW5k IHRoZSBjb3B5IGlzIGF0b21pYyBvbmx5IGZvciBhIGdpdmVuIGZpbGUsIG5vdCBmb3IgYWxsIGZp bGVzCisrCQl0aGF0IGJlbG9uZyB0byBhIGdpdmVuIHRhc2sgb2JqZWN0CisrCQkiIiIKKysJCXRy eToKKysJCQlmb3IgaSwgeCBpbiBlbnVtZXJhdGUoZmlsZXNfZnJvbSk6CisrCQkJCWRlc3QgPSBv cy5wYXRoLmpvaW4oQ0FDSEVfRElSLCBzaWdbOjJdLCBzaWcsIHN0cihpKSkKKysJCQkJYXRvbWlj X2NvcHkoeCwgZGVzdCkKKysJCWV4Y2VwdCBFeGNlcHRpb246CisrCQkJcmV0dXJuIHRyYWNlYmFj ay5mb3JtYXRfZXhjKCkKKysJCWVsc2U6CisrCQkJIyBhdHRlbXB0IHRyaW1taW5nIGlmIGNhY2hp bmcgd2FzIHN1Y2Nlc3NmdWw6CisrCQkJIyB3ZSBtYXkgaGF2ZSB0aGluZ3MgdG8gdHJpbSEKKysJ CQl0cnk6CisrCQkJCWxydV9ldmljdCgpCisrCQkJZXhjZXB0IEV4Y2VwdGlvbjoKKysJCQkJcmV0 dXJuIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKysJCXJldHVybiBPSworKworKwlkZWYgY29weV9m cm9tX2NhY2hlKHNlbGYsIHNpZywgZmlsZXNfZnJvbSwgZmlsZXNfdG8pOgorKwkJIiIiCisrCQlD b3B5IGZpbGVzIGZyb20gdGhlIGNhY2hlCisrCQkiIiIKKysJCXRyeToKKysJCQlmb3IgaSwgeCBp biBlbnVtZXJhdGUoZmlsZXNfdG8pOgorKwkJCQlvcmlnID0gb3MucGF0aC5qb2luKENBQ0hFX0RJ Uiwgc2lnWzoyXSwgc2lnLCBzdHIoaSkpCisrCQkJCWF0b21pY19jb3B5KG9yaWcsIHgpCisrCisr CQkJIyBzdWNjZXNzISB1cGRhdGUgdGhlIGNhY2hlIHRpbWUKKysJCQlvcy51dGltZShvcy5wYXRo LmpvaW4oQ0FDSEVfRElSLCBzaWdbOjJdLCBzaWcpLCBOb25lKQorKwkJZXhjZXB0IEV4Y2VwdGlv bjoKKysJCQlyZXR1cm4gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorKwkJcmV0dXJuIE9LCisrCisr Y2xhc3MgYnVja2V0X2NhY2hlKG9iamVjdCk6CisrCWRlZiBidWNrZXRfY29weShzZWxmLCBzb3Vy Y2UsIHRhcmdldCk6CisrCQlpZiBXQUZDQUNIRV9DTUQ6CisrCQkJZGVmIHJlcGxhY2VyKG1hdGNo KToKKysJCQkJaWYgbWF0Y2guZ3JvdXAoJ3NyYycpOgorKwkJCQkJcmV0dXJuIHNvdXJjZQorKwkJ CQllbGlmIG1hdGNoLmdyb3VwKCd0Z3QnKToKKysJCQkJCXJldHVybiB0YXJnZXQKKysJCQljbWQg PSBbcmVfd2FmX2NtZC5zdWIocmVwbGFjZXIsIHgpIGZvciB4IGluIHNobGV4LnNwbGl0KFdBRkNB Q0hFX0NNRCldCisrCQllbGlmIENBQ0hFX0RJUi5zdGFydHN3aXRoKCdzMzovLycpOgorKwkJCWNt ZCA9IFsnYXdzJywgJ3MzJywgJ2NwJywgc291cmNlLCB0YXJnZXRdCisrCQllbGlmIENBQ0hFX0RJ Ui5zdGFydHN3aXRoKCdnczovLycpOgorKwkJCWNtZCA9IFsnZ3N1dGlsJywgJ2NwJywgc291cmNl LCB0YXJnZXRdCisrCQllbHNlOgorKwkJCWNtZCA9IFsnbWMnLCAnY3AnLCBzb3VyY2UsIHRhcmdl dF0KKysKKysJCXByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3Mu UElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKysJCW91dCwgZXJyID0gcHJvYy5jb21tdW5p Y2F0ZSgpCisrCQlpZiBwcm9jLnJldHVybmNvZGU6CisrCQkJcmFpc2UgT1NFcnJvcignRXJyb3Ig Y29weSAlciB0byAlciB1c2luZzogJXIgKGV4aXQgJXIpOlxuICBvdXQ6JXNcbiAgZXJyOiVzJyAl ICgKKysJCQkJc291cmNlLCB0YXJnZXQsIGNtZCwgcHJvYy5yZXR1cm5jb2RlLCBvdXQuZGVjb2Rl KGVycm9ycz0ncmVwbGFjZScpLCBlcnIuZGVjb2RlKGVycm9ycz0ncmVwbGFjZScpKSkKKysKKysJ ZGVmIGNvcHlfdG9fY2FjaGUoc2VsZiwgc2lnLCBmaWxlc19mcm9tLCBmaWxlc190byk6CisrCQl0 cnk6CisrCQkJZm9yIGksIHggaW4gZW51bWVyYXRlKGZpbGVzX2Zyb20pOgorKwkJCQlkZXN0ID0g b3MucGF0aC5qb2luKENBQ0hFX0RJUiwgc2lnWzoyXSwgc2lnLCBzdHIoaSkpCisrCQkJCXNlbGYu YnVja2V0X2NvcHkoeCwgZGVzdCkKKysJCWV4Y2VwdCBFeGNlcHRpb246CisrCQkJcmV0dXJuIHRy YWNlYmFjay5mb3JtYXRfZXhjKCkKKysJCXJldHVybiBPSworKworKwlkZWYgY29weV9mcm9tX2Nh Y2hlKHNlbGYsIHNpZywgZmlsZXNfZnJvbSwgZmlsZXNfdG8pOgorKwkJdHJ5OgorKwkJCWZvciBp LCB4IGluIGVudW1lcmF0ZShmaWxlc190byk6CisrCQkJCW9yaWcgPSBvcy5wYXRoLmpvaW4oQ0FD SEVfRElSLCBzaWdbOjJdLCBzaWcsIHN0cihpKSkKKysJCQkJc2VsZi5idWNrZXRfY29weShvcmln LCB4KQorKwkJZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisrCQkJcmV0dXJuIHRyYWNlYmFjay5m b3JtYXRfZXhjKCkKKysJCXJldHVybiBPSworKworK2RlZiBsb29wKHNlcnZpY2UpOgorKwkiIiIK KysJVGhpcyBmdW5jdGlvbiBpcyBydW4gd2hlbiB0aGlzIGZpbGUgaXMgcnVuIGFzIGEgc3RhbmRh bG9uZSBweXRob24gc2NyaXB0LAorKwlpdCBhc3N1bWVzIGEgcGFyZW50IHByb2Nlc3MgdGhhdCB3 aWxsIGNvbW11bmljYXRlIHRoZSBjb21tYW5kcyB0byBpdAorKwlhcyBwaWNrbGVkLWVuY29kZWQg dHVwbGVzIChvbmUgbGluZSBwZXIgY29tbWFuZCkKKysKKysJVGhlIGNvbW1hbmRzIGFyZSB0byBj b3B5IGZpbGVzIHRvIHRoZSBjYWNoZSBvciBjb3B5IGZpbGVzIGZyb20gdGhlCisrCWNhY2hlIHRv IGEgdGFyZ2V0IGRlc3RpbmF0aW9uCisrCSIiIgorKwkjIG9uZSBvcGVyYXRpb24gaXMgcGVyZm9y bWVkIGF0IGEgc2luZ2xlIHRpbWUgYnkgYSBzaW5nbGUgcHJvY2VzcworKwkjIHRoZXJlZm9yZSBz dGRpbiBuZXZlciBoYXMgbW9yZSB0aGFuIG9uZSBsaW5lCisrCXR4dCA9IHN5cy5zdGRpbi5yZWFk bGluZSgpLnN0cmlwKCkKKysJaWYgbm90IHR4dDoKKysJCSMgcGFyZW50IHByb2Nlc3MgcHJvYmFi bHkgZW5kZWQKKysJCXN5cy5leGl0KDEpCisrCXJldCA9IE9LCisrCisrCVtzaWcsIGZpbGVzX2Zy b20sIGZpbGVzX3RvXSA9IGNQaWNrbGUubG9hZHMoYmFzZTY0LmI2NGRlY29kZSh0eHQpKQorKwlp ZiBmaWxlc19mcm9tOgorKwkJIyBUT0RPIHJldHVybiBlYXJseSB3aGVuIHB1c2hpbmcgZmlsZXMg dXBzdHJlYW0KKysJCXJldCA9IHNlcnZpY2UuY29weV90b19jYWNoZShzaWcsIGZpbGVzX2Zyb20s IGZpbGVzX3RvKQorKwllbGlmIGZpbGVzX3RvOgorKwkJIyB0aGUgYnVpbGQgcHJvY2VzcyB3YWl0 cyBmb3Igd29ya2VycyB0byAocG9zc2libHkpIG9idGFpbiBmaWxlcyBmcm9tIHRoZSBjYWNoZQor KwkJcmV0ID0gc2VydmljZS5jb3B5X2Zyb21fY2FjaGUoc2lnLCBmaWxlc19mcm9tLCBmaWxlc190 bykKKysJZWxzZToKKysJCXJldCA9ICJJbnZhbGlkIGNvbW1hbmQiCisrCisrCW9iaiA9IGJhc2U2 NC5iNjRlbmNvZGUoY1BpY2tsZS5kdW1wcyhyZXQpKQorKwlzeXMuc3Rkb3V0LndyaXRlKG9iai5k ZWNvZGUoKSkKKysJc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorKwlzeXMuc3Rkb3V0LmZsdXNoKCkK KysKKytpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorKwlpZiBDQUNIRV9ESVIuc3RhcnRzd2l0 aCgnczM6Ly8nKSBvciBDQUNIRV9ESVIuc3RhcnRzd2l0aCgnZ3M6Ly8nKSBvciBDQUNIRV9ESVIu c3RhcnRzd2l0aCgnbWluaW86Ly8nKToKKysJCWlmIENBQ0hFX0RJUi5zdGFydHN3aXRoKCdtaW5p bzovLycpOgorKwkJCUNBQ0hFX0RJUiA9IENBQ0hFX0RJUls4Ol0gICAjIG1pbmlvIGRvZXNuJ3Qg bmVlZCB0aGUgcHJvdG9jb2wgcGFydCwgdXNlcyBjb25maWcgYWxpYXNlcworKwkJc2VydmljZSA9 IGJ1Y2tldF9jYWNoZSgpCisrCWVsaWYgQ0FDSEVfRElSLnN0YXJ0c3dpdGgoJ2h0dHAnKToKKysJ CXNlcnZpY2UgPSBuZXRjYWNoZSgpCisrCWVsc2U6CisrCQlzZXJ2aWNlID0gZmNhY2hlKCkKKysJ d2hpbGUgMToKKysJCXRyeToKKysJCQlsb29wKHNlcnZpY2UpCisrCQlleGNlcHQgS2V5Ym9hcmRJ bnRlcnJ1cHQ6CisrCQkJYnJlYWsKKysKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFzL3hjb2Rl Ni5weSBiL3dhZmxpYi9leHRyYXMveGNvZGU2LnB5CitpbmRleCA5MWJiZmYxODEuLmM1YjMwOTEy MCAxMDA2NDQKKy0tLSBhL3dhZmxpYi9leHRyYXMveGNvZGU2LnB5CisrKysgYi93YWZsaWIvZXh0 cmFzL3hjb2RlNi5weQorQEAgLTk5LDcgKzk5LDcgQEAgZGVmIGRlbGV0ZV9pbnZhbGlkX3ZhbHVl cyhkY3QpOgorIAkJLi4uCisgCX0KKyAJJ1JlbGVhc2UnOiB7CistCQknQVJDSFMnIHg4Nl82NCcK KysJCSdBUkNIUyc6IHg4Nl82NCcKKyAJCS4uLgorIAl9CisgfQorQEAgLTE2MywxMiArMTYzLDEy IEBAIGRlZiB0b3N0cmluZyhzZWxmLCB2YWx1ZSk6CisgCQkJcmVzdWx0ID0gcmVzdWx0ICsgIlx0 XHR9IgorIAkJCXJldHVybiByZXN1bHQKKyAJCWVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToK Ky0JCQlyZXR1cm4gIlwiJXNcIiIgJSB2YWx1ZQorKwkJCXJldHVybiAnIiVzIicgJSB2YWx1ZS5y ZXBsYWNlKCciJywgJ1xcXFxcXCInKQorIAkJZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToK KyAJCQlyZXN1bHQgPSAiKFxuIgorIAkJCWZvciBpIGluIHZhbHVlOgorLQkJCQlyZXN1bHQgPSBy ZXN1bHQgKyAiXHRcdFx0JXMsXG4iICUgc2VsZi50b3N0cmluZyhpKQorLQkJCXJlc3VsdCA9IHJl c3VsdCArICJcdFx0KSIKKysJCQkJcmVzdWx0ID0gcmVzdWx0ICsgIlx0XHRcdFx0JXMsXG4iICUg c2VsZi50b3N0cmluZyhpKQorKwkJCXJlc3VsdCA9IHJlc3VsdCArICJcdFx0XHQpIgorIAkJCXJl dHVybiByZXN1bHQKKyAJCWVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgWENvZGVOb2RlKToKKyAJCQly ZXR1cm4gdmFsdWUuX2lkCitAQCAtNTY1LDEzICs1NjUsMTMgQEAgZGVmIHByb2Nlc3NfeGNvZGUo c2VsZik6CisgCSMgT3ZlcnJpZGUgdGFyZ2V0IHNwZWNpZmljIGJ1aWxkIHNldHRpbmdzCisgCWJs ZHNldHRpbmdzID0geworIAkJJ0hFQURFUl9TRUFSQ0hfUEFUSFMnOiBbJyQoaW5oZXJpdGVkKSdd ICsgc2VsZi5lbnZbJ0lOQ1BBVEhTJ10sCistCQknTElCUkFSWV9TRUFSQ0hfUEFUSFMnOiBbJyQo aW5oZXJpdGVkKSddICsgVXRpbHMudG9fbGlzdChzZWxmLmVudi5MSUJQQVRIKSArIFV0aWxzLnRv X2xpc3Qoc2VsZi5lbnYuU1RMSUJQQVRIKSArIFV0aWxzLnRvX2xpc3Qoc2VsZi5lbnYuTElCRElS KSAsCisrCQknTElCUkFSWV9TRUFSQ0hfUEFUSFMnOiBbJyQoaW5oZXJpdGVkKSddICsgVXRpbHMu dG9fbGlzdChzZWxmLmVudi5MSUJQQVRIKSArIFV0aWxzLnRvX2xpc3Qoc2VsZi5lbnYuU1RMSUJQ QVRIKSArIFV0aWxzLnRvX2xpc3Qoc2VsZi5lbnYuTElCRElSKSwKKyAJCSdGUkFNRVdPUktfU0VB UkNIX1BBVEhTJzogWyckKGluaGVyaXRlZCknXSArIFV0aWxzLnRvX2xpc3Qoc2VsZi5lbnYuRlJB TUVXT1JLUEFUSCksCistCQknT1RIRVJfTERGTEFHUyc6IGxpYnMgKyAnICcgKyBmcmFtZXdvcmtz LAorLQkJJ09USEVSX0xJQlRPT0xGTEFHUyc6IGJsZC5lbnZbJ0xJTktGTEFHUyddLAorKwkJJ09U SEVSX0xERkxBR1MnOiBsaWJzICsgJyAnICsgZnJhbWV3b3JrcyArICcgJyArICcgJy5qb2luKGJs ZC5lbnZbJ0xJTktGTEFHUyddKSwKKyAJCSdPVEhFUl9DUExVU1BMVVNGTEFHUyc6IFV0aWxzLnRv X2xpc3Qoc2VsZi5lbnZbJ0NYWEZMQUdTJ10pLAorIAkJJ09USEVSX0NGTEFHUyc6IFV0aWxzLnRv X2xpc3Qoc2VsZi5lbnZbJ0NGTEFHUyddKSwKKy0JCSdJTlNUQUxMX1BBVEgnOiBbXQorKwkJJ0lO U1RBTExfUEFUSCc6IFtdLAorKwkJJ0dDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMnOiBzZWxm LmVudlsnREVGSU5FUyddCisgCX0KKyAKKyAJIyBJbnN0YWxsIHBhdGgKK0BAIC01OTEsNyArNTkx LDcgQEAgZGVmIHByb2Nlc3NfeGNvZGUoc2VsZik6CisgCisgCSMgVGhlIGtleXMgcmVwcmVzZW50 cyBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbiwgZS5nLiBEZWJ1ZywgUmVsZWFzZSBhbmQg c28gb24uLgorIAkjIEluc2VydCBvdXIgZ2VuZXJhdGVkIGJ1aWxkIHNldHRpbmdzIHRvIGFsbCBj b25maWd1cmF0aW9uIG5hbWVzCistCWtleXMgPSBzZXQoc2V0dGluZ3Mua2V5cygpICsgYmxkLmVu di5QUk9KX0NPTkZJR1VSQVRJT04ua2V5cygpKQorKwlrZXlzID0gc2V0KHNldHRpbmdzLmtleXMo KSkgfCBzZXQoYmxkLmVudi5QUk9KX0NPTkZJR1VSQVRJT04ua2V5cygpKQorIAlmb3IgayBpbiBr ZXlzOgorIAkJaWYgayBpbiBzZXR0aW5nczoKKyAJCQlzZXR0aW5nc1trXS51cGRhdGUoYmxkc2V0 dGluZ3MpCitkaWZmIC0tZ2l0IGEvd2FmbGliL2ZpeHB5Mi5weSBiL3dhZmxpYi9maXhweTIucHkK K2luZGV4IDI0MTc2ZTA2Ni4uYzk5YmZmNGI5IDEwMDY0NAorLS0tIGEvd2FmbGliL2ZpeHB5Mi5w eQorKysrIGIvd2FmbGliL2ZpeHB5Mi5weQorQEAgLTU2LDcgKzU2LDcgQEAgZGVmIHIxKGNvZGUp OgorIEBzdWJzdCgnUnVubmVyLnB5JykKKyBkZWYgcjQoY29kZSk6CisgCSJnZW5lcmF0b3Igc3lu dGF4IgorLQlyZXR1cm4gY29kZS5yZXBsYWNlKCduZXh0KHNlbGYuYml0ZXIpJywgJ3NlbGYuYml0 ZXIubmV4dCgpJykKKysJcmV0dXJuIGNvZGUucmVwbGFjZSgnbmV4dChzZWxmLmJpdGVyKScsICdz ZWxmLmJpdGVyLm5leHQoKScpLnJlcGxhY2UoJ3NlbGYuZGFlbW9uID0gVHJ1ZScsICdzZWxmLnNl dERhZW1vbigxKScpCisgCisgQHN1YnN0KCdDb250ZXh0LnB5JykKKyBkZWYgcjUoY29kZSk6Citk aWZmIC0tZ2l0IGEvd2FmbGliL3Byb2Nlc3Nvci5weSBiL3dhZmxpYi9wcm9jZXNzb3IucHkKK2lu ZGV4IDJlZWNmM2JkOS4uZWZmMmU2OWFkIDEwMDc1NQorLS0tIGEvd2FmbGliL3Byb2Nlc3Nvci5w eQorKysrIGIvd2FmbGliL3Byb2Nlc3Nvci5weQorQEAgLTI3LDYgKzI3LDEwIEBAIGRlZiBydW4o KToKKyAJW2NtZCwga3dhcmdzLCBjYXJnc10gPSBjUGlja2xlLmxvYWRzKGJhc2U2NC5iNjRkZWNv ZGUodHh0KSkKKyAJY2FyZ3MgPSBjYXJncyBvciB7fQorIAorKwlpZiBub3QgJ2Nsb3NlX2Zkcycg aW4ga3dhcmdzOgorKwkJIyB3b3JrZXJzIGhhdmUgbm8gZmRzCisrCQlrd2FyZ3NbJ2Nsb3NlX2Zk cyddID0gRmFsc2UKKysKKyAJcmV0ID0gMQorIAlvdXQsIGVyciwgZXgsIHRyYWNlID0gKE5vbmUs IE5vbmUsIE5vbmUsIE5vbmUpCisgCXRyeToKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvamFjay90ZW1w bGF0ZSBiL3NyY3BrZ3MvamFjay90ZW1wbGF0ZQppbmRleCAwNWMxYWUwOGNlMDQ4Li44YjNmNjAz NTMxNzZhIDEwMDY0NAotLS0gYS9zcmNwa2dzL2phY2svdGVtcGxhdGUKKysrIGIvc3JjcGtncy9q YWNrL3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnamFjaycK IHBrZ25hbWU9amFjawogdmVyc2lvbj0xLjkuMjIKLXJldmlzaW9uPTEKK3JldmlzaW9uPTIKIGJ1 aWxkX3N0eWxlPXdhZjMKIGNvbmZpZ3VyZV9hcmdzPSItLWFsc2EgLS1jbGFzc2ljIC0tZGJ1cyIK IGhvc3RtYWtlZGVwZW5kcz0icGtnLWNvbmZpZyIK --===============1431887708703324074==--