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 9856022281 for ; Mon, 22 Jan 2024 11:42:36 +0100 (CET) Content-Type: multipart/mixed; boundary="===============0350694754850336756==" MIME-Version: 1.0 Subject: =?utf8?q?=5BPR_PATCH=5D_jack=3A_fix_build_for_python3=2E12?= To: ml@inbox.vuxu.org From: oreo639 Reply-to: ml@inbox.vuxu.org Message-ID: Date: Mon, 22 Jan 2024 11:42:36 +0100 List-Id: GitHub notification mails are now in MIME to allow UTF8. --===============0350694754850336756== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYSBuZXcgcHVsbCByZXF1ZXN0IGJ5IG9yZW82MzkgYWdhaW5zdCBtYXN0ZXIgb24g dGhlIHZvaWQtcGFja2FnZXMgcmVwb3NpdG9yeQoKaHR0cHM6Ly9naXRodWIuY29tL29yZW82Mzkv dm9pZC1wYWNrYWdlcyBqYWNrCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQtcGFj a2FnZXMvcHVsbC80ODMyMQoKamFjazogZml4IGJ1aWxkIGZvciBweXRob24zLjEyCjwhLS0gVW5j b21tZW50IHJlbGV2YW50IHNlY3Rpb25zIGFuZCBkZWxldGUgb3B0aW9ucyB3aGljaCBhcmUgbm90 IGFwcGxpY2FibGUgLS0+DQoNCiMjIyMgVGVzdGluZyB0aGUgY2hhbmdlcw0KLSBJIHRlc3RlZCB0 aGUgY2hhbmdlcyBpbiB0aGlzIFBSOiAqKmJyaWVmbHkqKg0KDQo8IS0tDQojIyMjIE5ldyBwYWNr YWdlDQotIFRoaXMgbmV3IHBhY2thZ2UgY29uZm9ybXMgdG8gdGhlIFtwYWNrYWdlIHJlcXVpcmVt ZW50c10oaHR0cHM6Ly9naXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9ibG9iL21h c3Rlci9DT05UUklCVVRJTkcubWQjcGFja2FnZS1yZXF1aXJlbWVudHMpOiAqKllFUyoqfCoqTk8q Kg0KLS0+DQoNCjwhLS0gTm90ZTogSWYgdGhlIGJ1aWxkIGlzIGxpa2VseSB0byB0YWtlIG1vcmUg dGhhbiAyIGhvdXJzLCBwbGVhc2UgYWRkIGNpIHNraXAgdGFnIGFzIGRlc2NyaWJlZCBpbg0KaHR0 cHM6Ly9naXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9ibG9iL21hc3Rlci9DT05U UklCVVRJTkcubWQjY29udGludW91cy1pbnRlZ3JhdGlvbg0KYW5kIHRlc3QgYXQgbGVhc3Qgb25l IG5hdGl2ZSBidWlsZCBhbmQsIGlmIHN1cHBvcnRlZCwgYXQgbGVhc3Qgb25lIGNyb3NzIGJ1aWxk Lg0KSWdub3JlIHRoaXMgc2VjdGlvbiBpZiB0aGlzIFBSIGlzIG5vdCBza2lwcGluZyBDSS4NCi0t Pg0KPCEtLQ0KIyMjIyBMb2NhbCBidWlsZCB0ZXN0aW5nDQotIEkgYnVpbHQgdGhpcyBQUiBsb2Nh bGx5IGZvciBteSBuYXRpdmUgYXJjaGl0ZWN0dXJlLCAoQVJDSC1MSUJDKQ0KLSBJIGJ1aWx0IHRo aXMgUFIgbG9jYWxseSBmb3IgdGhlc2UgYXJjaGl0ZWN0dXJlcyAoaWYgc3VwcG9ydGVkLiBtYXJr IGNyb3NzYnVpbGRzKToNCiAgLSBhYXJjaDY0LW11c2wNCiAgLSBhcm12N2wNCiAgLSBhcm12Nmwt bXVzbA0KLS0+DQoKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxp bnV4L3ZvaWQtcGFja2FnZXMvcHVsbC80ODMyMS5wYXRjaCBpcyBhdHRhY2hlZA== --===============0350694754850336756== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-jack-48321.patch" RnJvbSBjZDkzMDY5N2MxMTcwOTg2N2E3ODdmZTczNDdiMDE4ZDEzMmE2YmIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBvcmVvNjM5IDxvcmVvNjM5MUBnbWFpbC5jb20+CkRhdGU6IE1v biwgMjIgSmFuIDIwMjQgMDI6NDE6NTIgLTA4MDAKU3ViamVjdDogW1BBVENIXSBqYWNrOiBmaXgg YnVpbGQgZm9yIHB5dGhvbjMuMTIKCi0tLQogc3JjcGtncy9qYWNrL3BhdGNoZXMvdXBkYXRlLXdh Zi5wYXRjaCB8IDM0NzcgKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs IDM0NzcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvamFjay9wYXRj aGVzL3VwZGF0ZS13YWYucGF0Y2gKCmRpZmYgLS1naXQgYS9zcmNwa2dzL2phY2svcGF0Y2hlcy91 cGRhdGUtd2FmLnBhdGNoIGIvc3JjcGtncy9qYWNrL3BhdGNoZXMvdXBkYXRlLXdhZi5wYXRjaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZWY1MDQ3MTMxZDYxCi0t LSAvZGV2L251bGwKKysrIGIvc3JjcGtncy9qYWNrL3BhdGNoZXMvdXBkYXRlLXdhZi5wYXRjaApA QCAtMCwwICsxLDM0NzcgQEAKK0Zyb20gMjUwNDIwMzgxYjFhNjk3NDc5ODkzOWFkNzEwNGFiMWE0 YjlhOTk5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pbHMgUGhpbGlwcHNlbiA8 bmlsc0B0aXB0b2UuZGU+CitEYXRlOiBUdWUsIDI5IEF1ZyAyMDIzIDEyOjQxOjQ2ICswMjAwCitT dWJqZWN0OiBbUEFUQ0hdIFVwZGF0ZSB0byB3YWYgMi4wLjI2CisKK1RoaXMgbWFrZXMgd2FmIGNv bXBhdGlibGUgd2l0aCBQeXRob24gMy4xMiBhZ2Fpbi4KKworQWxzbywgYXBwbHkgbW9kaWZpY2F0 aW9ucyBuZWVkZWQgZm9yIE1hY09TIGFuZCBhZGQgYXMgYSBwYXRjaCBmaWxlIChzZWUKK2NvbW1p dHMgMGYyZTNiMiBhbmQgZGM2Yzk5NSkuCisKK1NpZ25lZC1vZmYtYnk6IE5pbHMgUGhpbGlwcHNl biA8bmlsc0B0aXB0b2UuZGU+CistLS0KKyB3YWYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNyArLQorIHdhZmxpYi1tYWNvcy1tb2RzLnBhdGNoICAgICAgICAgICAgIHwgIDE4 ICsKKyB3YWZsaWIvQnVpbGQucHkgICAgICAgICAgICAgICAgICAgICB8ICA0NyArLQorIHdhZmxp Yi9Db25maWdTZXQucHkgICAgICAgICAgICAgICAgIHwgICAyICstCisgd2FmbGliL0NvbmZpZ3Vy ZS5weSAgICAgICAgICAgICAgICAgfCAgNDYgKy0KKyB3YWZsaWIvQ29udGV4dC5weSAgICAgICAg ICAgICAgICAgICB8ICAyNCArLQorIHdhZmxpYi9Mb2dzLnB5ICAgICAgICAgICAgICAgICAgICAg IHwgICA5ICstCisgd2FmbGliL05vZGUucHkgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0K KyB3YWZsaWIvT3B0aW9ucy5weSAgICAgICAgICAgICAgICAgICB8ICAzMSArLQorIHdhZmxpYi9S dW5uZXIucHkgICAgICAgICAgICAgICAgICAgIHwgIDI3ICstCisgd2FmbGliL1NjcmlwdGluZy5w eSAgICAgICAgICAgICAgICAgfCAgMjcgKy0KKyB3YWZsaWIvVGFzay5weSAgICAgICAgICAgICAg ICAgICAgICB8ICA0OCArKy0KKyB3YWZsaWIvVGFza0dlbi5weSAgICAgICAgICAgICAgICAgICB8 ICAxNiArLQorIHdhZmxpYi9Ub29scy9jX2FsaWFzZXMucHkgICAgICAgICAgIHwgIDEwICstCisg d2FmbGliL1Rvb2xzL2NfY29uZmlnLnB5ICAgICAgICAgICAgfCAgMzcgKy0KKyB3YWZsaWIvVG9v bHMvY19wcmVwcm9jLnB5ICAgICAgICAgICB8ICAgNiArLQorIHdhZmxpYi9Ub29scy9jX3Rlc3Rz LnB5ICAgICAgICAgICAgIHwgIDE4ICstCisgd2FmbGliL1Rvb2xzL2Njcm9vdC5weSAgICAgICAg ICAgICAgfCAgMjAgKy0KKyB3YWZsaWIvVG9vbHMvY29tcGlsZXJfYy5weSAgICAgICAgICB8ICAy NSArLQorIHdhZmxpYi9Ub29scy9jb21waWxlcl9jeHgucHkgICAgICAgIHwgIDI1ICstCisgd2Fm bGliL1Rvb2xzL2lyaXhjYy5weSAgICAgICAgICAgICAgfCAgMTQgKy0KKyB3YWZsaWIvVG9vbHMv bXN2Yy5weSAgICAgICAgICAgICAgICB8ICA0NSArLQorIHdhZmxpYi9Ub29scy93YWZfdW5pdF90 ZXN0LnB5ICAgICAgIHwgIDE0ICstCisgd2FmbGliL1V0aWxzLnB5ICAgICAgICAgICAgICAgICAg ICAgfCAgNjAgKystCisgd2FmbGliL2Fuc2l0ZXJtLnB5ICAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KKyB3YWZsaWIvZXh0cmFzL2NsYW5nX2Nyb3NzLnB5ICAgICAgICB8ICA5MiArKysrCisgd2Fm bGliL2V4dHJhcy9jbGFuZ19jcm9zc19jb21tb24ucHkgfCAxMTMgKysrKysKKyB3YWZsaWIvZXh0 cmFzL2NsYW5neHhfY3Jvc3MucHkgICAgICB8IDEwNiArKysrKworIHdhZmxpYi9leHRyYXMvY2xh c3NpY19ydW5uZXIucHkgICAgIHwgIDY4ICsrKworIHdhZmxpYi9leHRyYXMvY29sb3JfbXN2Yy5w eSAgICAgICAgIHwgIDU5ICsrKworIHdhZmxpYi9leHRyYXMvZmNfZnVqaXRzdS5weSAgICAgICAg IHwgIDUyICsrKworIHdhZmxpYi9leHRyYXMvZmNfbmZvcnQucHkgICAgICAgICAgIHwgIDUyICsr KworIHdhZmxpYi9leHRyYXMvZ2VucHliaW5kLnB5ICAgICAgICAgIHwgMTk0ICsrKysrKysrKwor IHdhZmxpYi9leHRyYXMvaGF4ZS5weSAgICAgICAgICAgICAgIHwgMTU0ICsrKysrKysKKyB3YWZs aWIvZXh0cmFzL21zdmNfcGRiLnB5ICAgICAgICAgICB8ICA0NiArKworIHdhZmxpYi9leHRyYXMv c3BoaW54LnB5ICAgICAgICAgICAgIHwgMTIwICsrKysrKworIHdhZmxpYi9leHRyYXMvd2FmY2Fj aGUucHkgICAgICAgICAgIHwgNjQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyB3YWZs aWIvZXh0cmFzL3hjb2RlNi5weSAgICAgICAgICAgICB8ICAxOCArLQorIHdhZmxpYi9maXhweTIu cHkgICAgICAgICAgICAgICAgICAgIHwgICAyICstCisgd2FmbGliL3Byb2Nlc3Nvci5weSAgICAg ICAgICAgICAgICAgfCAgIDQgKworIDQwIGZpbGVzIGNoYW5nZWQsIDIxMTQgaW5zZXJ0aW9ucygr KSwgMTk1IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB3YWZsaWItbWFjb3MtbW9k cy5wYXRjaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCB3YWZsaWIvZXh0cmFzL2NsYW5nX2Nyb3NzLnB5 CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMvY2xhbmdfY3Jvc3NfY29tbW9uLnB5 CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMvY2xhbmd4eF9jcm9zcy5weQorIGNy ZWF0ZSBtb2RlIDEwMDY0NCB3YWZsaWIvZXh0cmFzL2NsYXNzaWNfcnVubmVyLnB5CisgY3JlYXRl IG1vZGUgMTAwNjQ0IHdhZmxpYi9leHRyYXMvY29sb3JfbXN2Yy5weQorIGNyZWF0ZSBtb2RlIDEw MDY0NCB3YWZsaWIvZXh0cmFzL2ZjX2Z1aml0c3UucHkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgd2Fm bGliL2V4dHJhcy9mY19uZm9ydC5weQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB3YWZsaWIvZXh0cmFz L2dlbnB5YmluZC5weQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB3YWZsaWIvZXh0cmFzL2hheGUucHkK KyBjcmVhdGUgbW9kZSAxMDA2NDQgd2FmbGliL2V4dHJhcy9tc3ZjX3BkYi5weQorIGNyZWF0ZSBt b2RlIDEwMDY0NCB3YWZsaWIvZXh0cmFzL3NwaGlueC5weQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB3 YWZsaWIvZXh0cmFzL3dhZmNhY2hlLnB5CisKK2RpZmYgLS1naXQgYS93YWYgYi93YWYKK2luZGV4 IDg0NWZiYTVlOS4uMzhiMmM5MTA2IDEwMDc1NQorLS0tIGEvd2FmCisrKysgYi93YWYKK0BAIC0x LDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor ICMgZW5jb2Rpbmc6IGxhdGluLTEKKyAjIFRob21hcyBOYWd5LCAyMDA1LTIwMTgKKyAjCitAQCAt MzIsNyArMzIsNyBAQCBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAKKyBpbXBvcnQgb3Ms IHN5cywgaW5zcGVjdAorIAorLVZFUlNJT049IjIuMC4xMiIKKytWRVJTSU9OPSIyLjAuMjYiCisg UkVWSVNJT049IngiCisgR0lUPSJ4IgorIElOU1RBTEw9IngiCitAQCAtMTQyLDYgKzE0Miw5IEBA IGRlZiBmaW5kX2xpYigpOgorIAlpZiBuYW1lLmVuZHN3aXRoKCd3YWYtbGlnaHQnKToKKyAJCXcg PSB0ZXN0KGJhc2UpCisgCQlpZiB3OiByZXR1cm4gdworKwkJZm9yIGRpciBpbiBzeXMucGF0aDoK KysJCQlpZiB0ZXN0KGRpcik6CisrCQkJCXJldHVybiBkaXIKKyAJCWVycignd2FmLWxpZ2h0IHJl cXVpcmVzIHdhZmxpYiAtPiBleHBvcnQgV0FGRElSPS9mb2xkZXInKQorIAorIAlkaXJuYW1lID0g JyVzLSVzLSVzJyAlIChXQUYsIFZFUlNJT04sIFJFVklTSU9OKQorZGlmZiAtLWdpdCBhL3dhZmxp Yi1tYWNvcy1tb2RzLnBhdGNoIGIvd2FmbGliLW1hY29zLW1vZHMucGF0Y2gKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLjllMmM4YTNkZQorLS0tIC9kZXYvbnVsbAorKysr IGIvd2FmbGliLW1hY29zLW1vZHMucGF0Y2gKK0BAIC0wLDAgKzEsMTggQEAKKytkaWZmIC0tZ2l0 IGEvd2FmbGliL1Rvb2xzL2Njcm9vdC5weSBiL3dhZmxpYi9Ub29scy9jY3Jvb3QucHkKKytpbmRl eCBjZmVmOGJmNS4uNDg0ODQ2ZjUgMTAwNjQ0CisrLS0tIGEvd2FmbGliL1Rvb2xzL2Njcm9vdC5w eQorKysrKyBiL3dhZmxpYi9Ub29scy9jY3Jvb3QucHkKKytAQCAtNTc1LDEyICs1NzUsMTAgQEAg ZGVmIGFwcGx5X3ZudW0oc2VsZik6CisrIAorKyAJY251bSA9IGdldGF0dHIoc2VsZiwgJ2NudW0n LCBzdHIobnVtc1swXSkpCisrIAljbnVtcyA9IGNudW0uc3BsaXQoJy4nKQorKy0JaWYgbGVuKGNu dW1zKT5sZW4obnVtcykgb3IgbnVtc1swOmxlbihjbnVtcyldICE9IGNudW1zOgorKy0JCXJhaXNl IEVycm9ycy5XYWZFcnJvcignaW52YWxpZCBjb21wYXRpYmlsaXR5IHZlcnNpb24gJXMnICUgY251 bSkKKysgCisrIAlsaWJuYW1lID0gbm9kZS5uYW1lCisrIAlpZiBsaWJuYW1lLmVuZHN3aXRoKCcu ZHlsaWInKToKKystCQluYW1lMyA9IGxpYm5hbWUucmVwbGFjZSgnLmR5bGliJywgJy4lcy5keWxp YicgJSBzZWxmLnZudW0pCisrKwkJbmFtZTMgPSBsaWJuYW1lLnJlcGxhY2UoJy5keWxpYicsICcu JXMuZHlsaWInICUgY251bXNbMF0pCisrIAkJbmFtZTIgPSBsaWJuYW1lLnJlcGxhY2UoJy5keWxp YicsICcuJXMuZHlsaWInICUgY251bSkKKysgCWVsc2U6CisrIAkJbmFtZTMgPSBsaWJuYW1lICsg Jy4nICsgc2VsZi52bnVtCitkaWZmIC0tZ2l0IGEvd2FmbGliL0J1aWxkLnB5IGIvd2FmbGliL0J1 aWxkLnB5CitpbmRleCBjOTY2MWRmMTUuLmI0OWRkODMwMiAxMDA2NDQKKy0tLSBhL3dhZmxpYi9C dWlsZC5weQorKysrIGIvd2FmbGliL0J1aWxkLnB5CitAQCAtMTA0LDcgKzEwNCw3IEBAIGRlZiBf X2luaXRfXyhzZWxmLCAqKmt3KToKKyAJCSIiIkFtb3VudCBvZiBqb2JzIHRvIHJ1biBpbiBwYXJh bGxlbCIiIgorIAorIAkJc2VsZi50YXJnZXRzID0gT3B0aW9ucy5vcHRpb25zLnRhcmdldHMKKy0J CSIiIkxpc3Qgb2YgdGFyZ2V0cyB0byBidWlsZCAoZGVmYXVsdDogXCopIiIiCisrCQkiIiJMaXN0 IG9mIHRhcmdldHMgdG8gYnVpbGQgKGRlZmF1bHQ6IFxcKikiIiIKKyAKKyAJCXNlbGYua2VlcCA9 IE9wdGlvbnMub3B0aW9ucy5rZWVwCisgCQkiIiJXaGV0aGVyIHRoZSBidWlsZCBzaG91bGQgY29u dGludWUgcGFzdCBlcnJvcnMiIiIKK0BAIC03NTMsMTAgKzc1MywxMiBAQCBkZWYgdGdwb3N0KHRn KToKKyAJCWVsc2U6CisgCQkJbG4gPSBzZWxmLmxhdW5jaF9ub2RlKCkKKyAJCQlpZiBsbi5pc19j aGlsZF9vZihzZWxmLmJsZG5vZGUpOgorLQkJCQlMb2dzLndhcm4oJ0J1aWxkaW5nIGZyb20gdGhl IGJ1aWxkIGRpcmVjdG9yeSwgZm9yY2luZyAtLXRhcmdldHM9KicpCisrCQkJCWlmIExvZ3MudmVy Ym9zZSA+IDE6CisrCQkJCQlMb2dzLndhcm4oJ0J1aWxkaW5nIGZyb20gdGhlIGJ1aWxkIGRpcmVj dG9yeSwgZm9yY2luZyAtLXRhcmdldHM9KicpCisgCQkJCWxuID0gc2VsZi5zcmNub2RlCisgCQkJ ZWxpZiBub3QgbG4uaXNfY2hpbGRfb2Yoc2VsZi5zcmNub2RlKToKKy0JCQkJTG9ncy53YXJuKCdD V0QgJXMgaXMgbm90IHVuZGVyICVzLCBmb3JjaW5nIC0tdGFyZ2V0cz0qIChydW4gZGlzdGNsZWFu PyknLCBsbi5hYnNwYXRoKCksIHNlbGYuc3Jjbm9kZS5hYnNwYXRoKCkpCisrCQkJCWlmIExvZ3Mu dmVyYm9zZSA+IDE6CisrCQkJCQlMb2dzLndhcm4oJ0NXRCAlcyBpcyBub3QgdW5kZXIgJXMsIGZv cmNpbmcgLS10YXJnZXRzPSogKHJ1biBkaXN0Y2xlYW4/KScsIGxuLmFic3BhdGgoKSwgc2VsZi5z cmNub2RlLmFic3BhdGgoKSkKKyAJCQkJbG4gPSBzZWxmLnNyY25vZGUKKyAKKyAJCQlkZWYgaXNf cG9zdCh0ZywgbG4pOgorQEAgLTEwNTQsNyArMTA1Niw3IEBAIGRlZiBwb3N0X3J1bihzZWxmKToK KyAJZGVmIGdldF9pbnN0YWxsX3BhdGgoc2VsZiwgZGVzdGRpcj1UcnVlKToKKyAJCSIiIgorIAkJ UmV0dXJucyB0aGUgZGVzdGluYXRpb24gcGF0aCB3aGVyZSBmaWxlcyB3aWxsIGJlIGluc3RhbGxl ZCwgcHJlLXBlbmRpbmcgYGRlc3RkaXJgLgorLQkJCisrCisgCQlSZWxhdGl2ZSBwYXRocyB3aWxs IGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIGBQUkVGSVhgIGlmIG5vIGBkZXN0ZGlyYCBpcyBn aXZlbi4KKyAKKyAJCTpydHlwZTogc3RyaW5nCitAQCAtMTA2MiwxMSArMTA2NCwxMSBAQCBkZWYg Z2V0X2luc3RhbGxfcGF0aChzZWxmLCBkZXN0ZGlyPVRydWUpOgorIAkJaWYgaXNpbnN0YW5jZShz ZWxmLmluc3RhbGxfdG8sIE5vZGUuTm9kZSk6CisgCQkJZGVzdCA9IHNlbGYuaW5zdGFsbF90by5h YnNwYXRoKCkKKyAJCWVsc2U6CistCQkJZGVzdCA9IFV0aWxzLnN1YnN0X3ZhcnMoc2VsZi5pbnN0 YWxsX3RvLCBzZWxmLmVudikKKysJCQlkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChVdGlscy5zdWJz dF92YXJzKHNlbGYuaW5zdGFsbF90bywgc2VsZi5lbnYpKQorIAkJaWYgbm90IG9zLnBhdGguaXNh YnMoZGVzdCk6CistCQkgICAgZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLmVudi5QUkVGSVgsIGRl c3QpCisrCQkJZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLmVudi5QUkVGSVgsIGRlc3QpCisgCQlp ZiBkZXN0ZGlyIGFuZCBPcHRpb25zLm9wdGlvbnMuZGVzdGRpcjoKKy0JCQlkZXN0ID0gb3MucGF0 aC5qb2luKE9wdGlvbnMub3B0aW9ucy5kZXN0ZGlyLCBvcy5wYXRoLnNwbGl0ZHJpdmUoZGVzdClb MV0ubHN0cmlwKG9zLnNlcCkpCisrCQkJZGVzdCA9IE9wdGlvbnMub3B0aW9ucy5kZXN0ZGlyLnJz dHJpcChvcy5zZXApICsgb3Muc2VwICsgb3MucGF0aC5zcGxpdGRyaXZlKGRlc3QpWzFdLmxzdHJp cChvcy5zZXApCisgCQlyZXR1cm4gZGVzdAorIAorIAlkZWYgY29weV9mdW4oc2VsZiwgc3JjLCB0 Z3QpOgorQEAgLTExNjAsMTEgKzExNjIsMTkgQEAgZGVmIGRvX2luc3RhbGwoc2VsZiwgc3JjLCB0 Z3QsIGxibCwgKiprdyk6CisgCQkJCSMgc2FtZSBzaXplIGFuZCBpZGVudGljYWwgdGltZXN0YW1w cyAtPiBtYWtlIG5vIGNvcHkKKyAJCQkJaWYgc3QxLnN0X210aW1lICsgMiA+PSBzdDIuc3RfbXRp bWUgYW5kIHN0MS5zdF9zaXplID09IHN0Mi5zdF9zaXplOgorIAkJCQkJaWYgbm90IHNlbGYuZ2Vu ZXJhdG9yLmJsZC5wcm9ncmVzc19iYXI6CistCQkJCQkJTG9ncy5pbmZvKCctIGluc3RhbGwgJXMg KGZyb20gJXMpJywgdGd0LCBsYmwpCisrCisrCQkJCQkJYzEgPSBMb2dzLmNvbG9ycy5OT1JNQUwK KysJCQkJCQljMiA9IExvZ3MuY29sb3JzLkJMVUUKKysKKysJCQkJCQlMb2dzLmluZm8oJyVzLSBp bnN0YWxsICVzJXMlcyAoZnJvbSAlcyknLCBjMSwgYzIsIHRndCwgYzEsIGxibCkKKyAJCQkJCXJl dHVybiBGYWxzZQorIAorIAkJaWYgbm90IHNlbGYuZ2VuZXJhdG9yLmJsZC5wcm9ncmVzc19iYXI6 CistCQkJTG9ncy5pbmZvKCcrIGluc3RhbGwgJXMgKGZyb20gJXMpJywgdGd0LCBsYmwpCisrCisr CQkJYzEgPSBMb2dzLmNvbG9ycy5OT1JNQUwKKysJCQljMiA9IExvZ3MuY29sb3JzLkJMVUUKKysK KysJCQlMb2dzLmluZm8oJyVzKyBpbnN0YWxsICVzJXMlcyAoZnJvbSAlcyknLCBjMSwgYzIsIHRn dCwgYzEsIGxibCkKKyAKKyAJCSMgR2l2ZSBiZXN0IGF0dGVtcHQgYXQgbWFraW5nIGRlc3RpbmF0 aW9uIG92ZXJ3cml0YWJsZSwKKyAJCSMgbGlrZSB0aGUgJ2luc3RhbGwnIHV0aWxpdHkgdXNlZCBi eSAnbWFrZSBpbnN0YWxsJyBkb2VzLgorQEAgLTEyMjEsMTQgKzEyMzEsMTggQEAgZGVmIGRvX2xp bmsoc2VsZiwgc3JjLCB0Z3QsICoqa3cpOgorIAkJIiIiCisgCQlpZiBvcy5wYXRoLmlzbGluayh0 Z3QpIGFuZCBvcy5yZWFkbGluayh0Z3QpID09IHNyYzoKKyAJCQlpZiBub3Qgc2VsZi5nZW5lcmF0 b3IuYmxkLnByb2dyZXNzX2JhcjoKKy0JCQkJTG9ncy5pbmZvKCctIHN5bWxpbmsgJXMgKHRvICVz KScsIHRndCwgc3JjKQorKwkJCQljMSA9IExvZ3MuY29sb3JzLk5PUk1BTAorKwkJCQljMiA9IExv Z3MuY29sb3JzLkJMVUUKKysJCQkJTG9ncy5pbmZvKCclcy0gc3ltbGluayAlcyVzJXMgKHRvICVz KScsIGMxLCBjMiwgdGd0LCBjMSwgc3JjKQorIAkJZWxzZToKKyAJCQl0cnk6CisgCQkJCW9zLnJl bW92ZSh0Z3QpCisgCQkJZXhjZXB0IE9TRXJyb3I6CisgCQkJCXBhc3MKKyAJCQlpZiBub3Qgc2Vs Zi5nZW5lcmF0b3IuYmxkLnByb2dyZXNzX2JhcjoKKy0JCQkJTG9ncy5pbmZvKCcrIHN5bWxpbmsg JXMgKHRvICVzKScsIHRndCwgc3JjKQorKwkJCQljMSA9IExvZ3MuY29sb3JzLk5PUk1BTAorKwkJ CQljMiA9IExvZ3MuY29sb3JzLkJMVUUKKysJCQkJTG9ncy5pbmZvKCclcysgc3ltbGluayAlcyVz JXMgKHRvICVzKScsIGMxLCBjMiwgdGd0LCBjMSwgc3JjKQorIAkJCW9zLnN5bWxpbmsoc3JjLCB0 Z3QpCisgCQkJc2VsZi5maXhfcGVybXModGd0KQorIAorQEAgLTEyMzcsNyArMTI1MSw5IEBAIGRl ZiBkb191bmluc3RhbGwoc2VsZiwgc3JjLCB0Z3QsIGxibCwgKiprdyk6CisgCQlTZWUgOnB5Om1l dGg6YHdhZmxpYi5CdWlsZC5pbnN0LmRvX2luc3RhbGxgCisgCQkiIiIKKyAJCWlmIG5vdCBzZWxm LmdlbmVyYXRvci5ibGQucHJvZ3Jlc3NfYmFyOgorLQkJCUxvZ3MuaW5mbygnLSByZW1vdmUgJXMn LCB0Z3QpCisrCQkJYzEgPSBMb2dzLmNvbG9ycy5OT1JNQUwKKysJCQljMiA9IExvZ3MuY29sb3Jz LkJMVUUKKysJCQlMb2dzLmluZm8oJyVzLSByZW1vdmUgJXMlcyVzJywgYzEsIGMyLCB0Z3QsIGMx KQorIAorIAkJI3NlbGYudW5pbnN0YWxsLmFwcGVuZCh0Z3QpCisgCQl0cnk6CitAQCAtMTI1Nyw3 ICsxMjczLDkgQEAgZGVmIGRvX3VubGluayhzZWxmLCBzcmMsIHRndCwgKiprdyk6CisgCQkiIiIK KyAJCXRyeToKKyAJCQlpZiBub3Qgc2VsZi5nZW5lcmF0b3IuYmxkLnByb2dyZXNzX2JhcjoKKy0J CQkJTG9ncy5pbmZvKCctIHJlbW92ZSAlcycsIHRndCkKKysJCQkJYzEgPSBMb2dzLmNvbG9ycy5O T1JNQUwKKysJCQkJYzIgPSBMb2dzLmNvbG9ycy5CTFVFCisrCQkJCUxvZ3MuaW5mbygnJXMtIHJl bW92ZSAlcyVzJXMnLCBjMSwgYzIsIHRndCwgYzEpCisgCQkJb3MucmVtb3ZlKHRndCkKKyAJCWV4 Y2VwdCBPU0Vycm9yOgorIAkJCXBhc3MKK0BAIC0xMzE4LDcgKzEzMzYsOCBAQCBkZWYgYnVpbGQo YmxkKToKKyAJCQlsc3QgPSBbXQorIAkJCWZvciBlbnYgaW4gc2VsZi5hbGxfZW52cy52YWx1ZXMo KToKKyAJCQkJbHN0LmV4dGVuZChzZWxmLnJvb3QuZmluZF9vcl9kZWNsYXJlKGYpIGZvciBmIGlu IGVudltDRkdfRklMRVNdKQorLQkJCWZvciBuIGluIHNlbGYuYmxkbm9kZS5hbnRfZ2xvYignKiov KicsIGV4Y2w9Jy5sb2NrKiAqY29uZl9jaGVja18qLyoqIGNvbmZpZy5sb2cgYzRjaGUvKicsIHF1 aWV0PVRydWUpOgorKwkJCWV4Y2x1ZGVkX2RpcnMgPSAnLmxvY2sqICpjb25mX2NoZWNrXyovKiog Y29uZmlnLmxvZyAlcy8qJyAlIENBQ0hFX0RJUgorKwkJCWZvciBuIGluIHNlbGYuYmxkbm9kZS5h bnRfZ2xvYignKiovKicsIGV4Y2w9ZXhjbHVkZWRfZGlycywgcXVpZXQ9VHJ1ZSk6CisgCQkJCWlm IG4gaW4gbHN0OgorIAkJCQkJY29udGludWUKKyAJCQkJbi5kZWxldGUoKQorZGlmZiAtLWdpdCBh L3dhZmxpYi9Db25maWdTZXQucHkgYi93YWZsaWIvQ29uZmlnU2V0LnB5CitpbmRleCA4NDczNmM5 YzguLjkwMWZiYTZjMCAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Db25maWdTZXQucHkKKysrKyBiL3dh ZmxpYi9Db25maWdTZXQucHkKK0BAIC0xMSw3ICsxMSw3IEBACisgCisgaW1wb3J0IGNvcHksIHJl LCBvcworIGZyb20gd2FmbGliIGltcG9ydCBMb2dzLCBVdGlscworLXJlX2ltcCA9IHJlLmNvbXBp bGUoJ14oIykqPyhbXiM9XSo/KVwgPVwgKC4qPykkJywgcmUuTSkKKytyZV9pbXAgPSByZS5jb21w aWxlKHInXigjKSo/KFteIz1dKj8pXCA9XCAoLio/KSQnLCByZS5NKQorIAorIGNsYXNzIENvbmZp Z1NldChvYmplY3QpOgorIAkiIiIKK2RpZmYgLS1naXQgYS93YWZsaWIvQ29uZmlndXJlLnB5IGIv d2FmbGliL0NvbmZpZ3VyZS5weQoraW5kZXggZDBhNDc5M2E4Li5mNmZkYzRlOTQgMTAwNjQ0Cist LS0gYS93YWZsaWIvQ29uZmlndXJlLnB5CisrKysgYi93YWZsaWIvQ29uZmlndXJlLnB5CitAQCAt MTI1LDcgKzEyNSw3IEBAIGRlZiBpbml0X2RpcnMoc2VsZik6CisgCQlzZWxmLmJsZG5vZGUubWtk aXIoKQorIAorIAkJaWYgbm90IG9zLnBhdGguaXNkaXIoc2VsZi5ibGRub2RlLmFic3BhdGgoKSk6 CistCQkJY29uZi5mYXRhbCgnQ291bGQgbm90IGNyZWF0ZSB0aGUgYnVpbGQgZGlyZWN0b3J5ICVz JyAlIHNlbGYuYmxkbm9kZS5hYnNwYXRoKCkpCisrCQkJc2VsZi5mYXRhbCgnQ291bGQgbm90IGNy ZWF0ZSB0aGUgYnVpbGQgZGlyZWN0b3J5ICVzJyAlIHNlbGYuYmxkbm9kZS5hYnNwYXRoKCkpCisg CisgCWRlZiBleGVjdXRlKHNlbGYpOgorIAkJIiIiCitAQCAtMTgwLDYgKzE4MCw3IEBAIGRlZiBl eGVjdXRlKHNlbGYpOgorIAkJZW52Lmhhc2ggPSBzZWxmLmhhc2gKKyAJCWVudi5maWxlcyA9IHNl bGYuZmlsZXMKKyAJCWVudi5lbnZpcm9uID0gZGljdChzZWxmLmVudmlyb24pCisrCQllbnYubGF1 bmNoX2RpciA9IENvbnRleHQubGF1bmNoX2RpcgorIAorIAkJaWYgbm90IChzZWxmLmVudi5OT19M T0NLX0lOX1JVTiBvciBlbnYuZW52aXJvbi5nZXQoJ05PX0xPQ0tfSU5fUlVOJykgb3IgZ2V0YXR0 cihPcHRpb25zLm9wdGlvbnMsICdub19sb2NrX2luX3J1bicpKToKKyAJCQllbnYuc3RvcmUob3Mu cGF0aC5qb2luKENvbnRleHQucnVuX2RpciwgT3B0aW9ucy5sb2NrZmlsZSkpCitAQCAtNDM4LDcg KzQzOSw3IEBAIGRlZiBmaW5kX3Byb2dyYW0oc2VsZiwgZmlsZW5hbWUsICoqa3cpOgorIAorIAl2 YXIgPSBrdy5nZXQoJ3ZhcicsICcnKQorIAlpZiBub3QgdmFyOgorLQkJdmFyID0gcmUuc3ViKHIn Wy0uXScsICdfJywgZmlsZW5hbWVbMF0udXBwZXIoKSkKKysJCXZhciA9IHJlLnN1YihyJ1xXJywg J18nLCBmaWxlbmFtZVswXS51cHBlcigpKQorIAorIAlwYXRoX2xpc3QgPSBrdy5nZXQoJ3BhdGhf bGlzdCcsICcnKQorIAlpZiBwYXRoX2xpc3Q6CitAQCAtNTA3LDIzICs1MDgsMjcgQEAgZGVmIGZp bmRfYmluYXJ5KHNlbGYsIGZpbGVuYW1lcywgZXh0cywgcGF0aHMpOgorIEBjb25mCisgZGVmIHJ1 bl9idWlsZChzZWxmLCAqaywgKiprdyk6CisgCSIiIgorLQlDcmVhdGUgYSB0ZW1wb3JhcnkgYnVp bGQgY29udGV4dCB0byBleGVjdXRlIGEgYnVpbGQuIEEgcmVmZXJlbmNlIHRvIHRoYXQgYnVpbGQK Ky0JY29udGV4dCBpcyBrZXB0IG9uIHNlbGYudGVzdF9ibGQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nl cywgYW5kIHlvdSBzaG91bGQgbm90IHJlbHkKKy0Jb24gaXQgdG9vIG11Y2ggKHJlYWQgdGhlIG5v dGUgb24gdGhlIGNhY2hlIGJlbG93KS4KKy0JVGhlIHBhcmFtZXRlcnMgZ2l2ZW4gaW4gdGhlIGFy Z3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIGZvcgorLQlh IHNpbmdsZSB0YXNrIGdlbmVyYXRvciBjcmVhdGVkIGluIHRoZSBidWlsZC4gT25seSB0aHJlZSBw YXJhbWV0ZXJzIGFyZSBvYmxpZ2F0b3J5OgorKwlDcmVhdGUgYSB0ZW1wb3JhcnkgYnVpbGQgY29u dGV4dCB0byBleGVjdXRlIGEgYnVpbGQuIEEgdGVtcG9yYXJ5IHJlZmVyZW5jZSB0byB0aGF0IGJ1 aWxkCisrCWNvbnRleHQgaXMga2VwdCBvbiBzZWxmLnRlc3RfYmxkIGZvciBkZWJ1Z2dpbmcgcHVy cG9zZXMuCisrCVRoZSBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBhcmUgcGFzc2VkIHRvIGEg c2luZ2xlIHRhc2sgZ2VuZXJhdG9yIGZvciB0aGF0IGJ1aWxkLgorKwlPbmx5IHRocmVlIHBhcmFt ZXRlcnMgYXJlIG1hbmRhdG9yeToKKyAKKyAJOnBhcmFtIGZlYXR1cmVzOiBmZWF0dXJlcyB0byBw YXNzIHRvIGEgdGFzayBnZW5lcmF0b3IgY3JlYXRlZCBpbiB0aGUgYnVpbGQKKyAJOnR5cGUgZmVh dHVyZXM6IGxpc3Qgb2Ygc3RyaW5nCisgCTpwYXJhbSBjb21waWxlX2ZpbGVuYW1lOiBmaWxlIHRv IGNyZWF0ZSBmb3IgdGhlIGNvbXBpbGF0aW9uIChkZWZhdWx0OiAqdGVzdC5jKikKKyAJOnR5cGUg Y29tcGlsZV9maWxlbmFtZTogc3RyaW5nCistCTpwYXJhbSBjb2RlOiBjb2RlIHRvIHdyaXRlIGlu IHRoZSBmaWxlbmFtZSB0byBjb21waWxlCisrCTpwYXJhbSBjb2RlOiBpbnB1dCBmaWxlIGNvbnRl bnRzCisgCTp0eXBlIGNvZGU6IHN0cmluZworIAorLQlUaG91Z2ggdGhpcyBmdW5jdGlvbiByZXR1 cm5zICowKiBieSBkZWZhdWx0LCB0aGUgYnVpbGQgbWF5IHNldCBhbiBhdHRyaWJ1dGUgbmFtZWQg KnJldHZhbCogb24gdGhlCisrCVRob3VnaCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgKjAqIGJ5IGRl ZmF1bHQsIHRoZSBidWlsZCBtYXkgYmluZCBhdHRyaWJ1dGUgbmFtZWQgKnJldHZhbCogb24gdGhl CisgCWJ1aWxkIGNvbnRleHQgb2JqZWN0IHRvIHJldHVybiBhIHBhcnRpY3VsYXIgdmFsdWUuIFNl ZSA6cHk6ZnVuYzpgd2FmbGliLlRvb2xzLmNfY29uZmlnLnRlc3RfZXhlY19mdW5gIGZvciBleGFt cGxlLgorIAorLQlUaGlzIGZ1bmN0aW9uIGFsc28gcHJvdmlkZXMgYSBsaW1pdGVkIGNhY2hlLiBU byB1c2UgaXQsIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBvcHRpb246OgorKwlUaGUgdGVtcG9yYXJ5 IGJ1aWxkcyBjcmVhdGVzIGEgdGVtcG9yYXJ5IGZvbGRlcjsgdGhlIG5hbWUgb2YgdGhhdCBmb2xk ZXIgaXMgY2FsY3VsYXRlZAorKwlieSBoYXNoaW5nIGlucHV0IGFyZ3VtZW50cyB0byB0aGlzIGZ1 bmN0aW9uLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgOnB5OmNsYXNzOmB3YWZsaWIuQ29uZmlnU2V0 LkNvbmZpZ1NldGAKKysJb2JqZWN0cyB3aGljaCBhcmUgdXNlZCBmb3IgYm90aCByZWFkaW5nIGFu ZCB3cml0aW5nIHZhbHVlcy4KKysKKysJVGhpcyBmdW5jdGlvbiBhbHNvIGZlYXR1cmVzIGEgY2Fj aGUgd2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdDsgdGhhdCBjYWNoZSByZWxpZXMKKysJb24g dGhlIGhhc2ggdmFsdWUgY2FsY3VsYXRlZCBhcyBpbmRpY2F0ZWQgYWJvdmU6OgorIAorIAkJZGVm IG9wdGlvbnMob3B0KToKKyAJCQlvcHQuYWRkX29wdGlvbignLS1jb25mY2FjaGUnLCBkZXN0PSdj b25mY2FjaGUnLCBkZWZhdWx0PTAsCitAQCAtNTM0LDEwICs1MzksMjQgQEAgZGVmIG9wdGlvbnMo b3B0KToKKyAJCSQgd2FmIGNvbmZpZ3VyZSAtLWNvbmZjYWNoZQorIAorIAkiIiIKKy0JbHN0ID0g W3N0cih2KSBmb3IgKHAsIHYpIGluIGt3Lml0ZW1zKCkgaWYgcCAhPSAnZW52J10KKy0JaCA9IFV0 aWxzLmhfbGlzdChsc3QpCisrCWJ1ZiA9IFtdCisrCWZvciBrZXkgaW4gc29ydGVkKGt3LmtleXMo KSk6CisrCQl2ID0ga3dba2V5XQorKwkJaWYgaXNpbnN0YW5jZSh2LCBDb25maWdTZXQuQ29uZmln U2V0KToKKysJCQkjIHZhbHVlcyBhcmUgYmVpbmcgd3JpdHRlbiB0bywgc28gdGhleSBhcmUgZXhj bHVkZWQgZnJvbSBjb250cmlidXRpbmcgdG8gdGhlIGhhc2gKKysJCQljb250aW51ZQorKwkJZWxp ZiBoYXNhdHRyKHYsICdfX2NhbGxfXycpOgorKwkJCWJ1Zi5hcHBlbmQoVXRpbHMuaF9mdW4odikp CisrCQllbHNlOgorKwkJCWJ1Zi5hcHBlbmQoc3RyKHYpKQorKwloID0gVXRpbHMuaF9saXN0KGJ1 ZikKKyAJZGlyID0gc2VsZi5ibGRub2RlLmFic3BhdGgoKSArIG9zLnNlcCArIChub3QgVXRpbHMu aXNfd2luMzIgYW5kICcuJyBvciAnJykgKyAnY29uZl9jaGVja18nICsgVXRpbHMudG9faGV4KGgp CisgCisrCWNhY2hlbW9kZSA9IGt3LmdldCgnY29uZmNhY2hlJywgZ2V0YXR0cihPcHRpb25zLm9w dGlvbnMsICdjb25mY2FjaGUnLCBOb25lKSkKKysKKysJaWYgbm90IGNhY2hlbW9kZSBhbmQgb3Mu cGF0aC5leGlzdHMoZGlyKToKKysJCXNodXRpbC5ybXRyZWUoZGlyKQorKworIAl0cnk6CisgCQlv cy5tYWtlZGlycyhkaXIpCisgCWV4Y2VwdCBPU0Vycm9yOgorQEAgLTU0OCw3ICs1NjcsNiBAQCBk ZWYgb3B0aW9ucyhvcHQpOgorIAlleGNlcHQgT1NFcnJvcjoKKyAJCXNlbGYuZmF0YWwoJ2Nhbm5v dCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gdGVzdCBmb2xkZXIgJXInICUgZGlyKQorIAorLQljYWNo ZW1vZGUgPSBnZXRhdHRyKE9wdGlvbnMub3B0aW9ucywgJ2NvbmZjYWNoZScsIE5vbmUpCisgCWlm IGNhY2hlbW9kZSA9PSAxOgorIAkJdHJ5OgorIAkJCXByb2ogPSBDb25maWdTZXQuQ29uZmlnU2V0 KG9zLnBhdGguam9pbihkaXIsICdjYWNoZV9ydW5fYnVpbGQnKSkKK0BAIC01ODgsNyArNjA2LDcg QEAgZGVmIG9wdGlvbnMob3B0KToKKyAJCWVsc2U6CisgCQkJcmV0ID0gZ2V0YXR0cihibGQsICdy ZXR2YWwnLCAwKQorIAlmaW5hbGx5OgorLQkJaWYgY2FjaGVtb2RlID09IDE6CisrCQlpZiBjYWNo ZW1vZGU6CisgCQkJIyBjYWNoZSB0aGUgcmVzdWx0cyBlYWNoIHRpbWUKKyAJCQlwcm9qID0gQ29u ZmlnU2V0LkNvbmZpZ1NldCgpCisgCQkJcHJvalsnY2FjaGVfcnVuX2J1aWxkJ10gPSByZXQKK2Rp ZmYgLS1naXQgYS93YWZsaWIvQ29udGV4dC5weSBiL3dhZmxpYi9Db250ZXh0LnB5CitpbmRleCA3 NjFiNTIxZjUuLjM2OTY2NDgxOSAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Db250ZXh0LnB5CisrKysg Yi93YWZsaWIvQ29udGV4dC5weQorQEAgLTYsMjAgKzYsMzAgQEAKKyBDbGFzc2VzIGFuZCBmdW5j dGlvbnMgZW5hYmxpbmcgdGhlIGNvbW1hbmQgc3lzdGVtCisgIiIiCisgCistaW1wb3J0IG9zLCBy ZSwgaW1wLCBzeXMKKytpbXBvcnQgb3MsIHJlLCBzeXMKKyBmcm9tIHdhZmxpYiBpbXBvcnQgVXRp bHMsIEVycm9ycywgTG9ncworIGltcG9ydCB3YWZsaWIuTm9kZQorIAorK2lmIHN5cy5oZXh2ZXJz aW9uID4gMHgzMDQwMDAwOgorKwlpbXBvcnQgdHlwZXMKKysJY2xhc3MgaW1wKG9iamVjdCk6Cisr CQluZXdfbW9kdWxlID0gbGFtYmRhIHg6IHR5cGVzLk1vZHVsZVR5cGUoeCkKKytlbHNlOgorKwlp bXBvcnQgaW1wCisrCisgIyB0aGUgZm9sbG93aW5nIDMgY29uc3RhbnRzIGFyZSB1cGRhdGVkIG9u IGVhY2ggbmV3IHJlbGVhc2UgKGRvIG5vdCB0b3VjaCkKKy1IRVhWRVJTSU9OPTB4MjAwMGMwMAor K0hFWFZFUlNJT049MHgyMDAxYTAwCisgIiIiQ29uc3RhbnQgdXBkYXRlZCBvbiBuZXcgcmVsZWFz ZXMiIiIKKyAKKy1XQUZWRVJTSU9OPSIyLjAuMTIiCisrV0FGVkVSU0lPTj0iMi4wLjI2IgorICIi IkNvbnN0YW50IHVwZGF0ZWQgb24gbmV3IHJlbGVhc2VzIiIiCisgCistV0FGUkVWSVNJT049IjU0 ODQxMjE4ODQwZmZhMzRmZGRmODM0NjgwYTVhMTdkYjY5Y2FhMTIiCisrV0FGUkVWSVNJT049IjBm Yjk4NWNlMTkzMmM2ZjNlNzUzM2Y0MzVlNGVlMjA5ZDY3Mzc3NmUiCisgIiIiR2l0IHJldmlzaW9u IHdoZW4gdGhlIHdhZiB2ZXJzaW9uIGlzIHVwZGF0ZWQiIiIKKyAKKytXQUZOQU1FPSJ3YWYiCisr IiIiQXBwbGljYXRpb24gbmFtZSBkaXNwbGF5ZWQgb24gLS1oZWxwIiIiCisrCisgQUJJID0gMjAK KyAiIiJWZXJzaW9uIG9mIHRoZSBidWlsZCBkYXRhIGNhY2hlIGZpbGUgZm9ybWF0ICh1c2VkIGlu IDpweTpjb25zdDpgd2FmbGliLkNvbnRleHQuREJGSUxFYCkiIiIKKyAKK0BAIC0xMzQsNyArMTQ0 LDcgQEAgZGVmIGZvbyhjdHgpOgorIAk6dHlwZSBmdW46IHN0cmluZworIAorIAkuLiBpbmhlcml0 YW5jZS1kaWFncmFtOjogd2FmbGliLkNvbnRleHQuQ29udGV4dCB3YWZsaWIuQnVpbGQuQnVpbGRD b250ZXh0IHdhZmxpYi5CdWlsZC5JbnN0YWxsQ29udGV4dCB3YWZsaWIuQnVpbGQuVW5pbnN0YWxs Q29udGV4dCB3YWZsaWIuQnVpbGQuU3RlcENvbnRleHQgd2FmbGliLkJ1aWxkLkxpc3RDb250ZXh0 IHdhZmxpYi5Db25maWd1cmUuQ29uZmlndXJhdGlvbkNvbnRleHQgd2FmbGliLlNjcmlwdGluZy5E aXN0IHdhZmxpYi5TY3JpcHRpbmcuRGlzdENoZWNrIHdhZmxpYi5CdWlsZC5DbGVhbkNvbnRleHQK Ky0KKysJICAgOnRvcC1jbGFzc2VzOiB3YWZsaWIuQ29udGV4dC5Db250ZXh0CisgCSIiIgorIAor IAllcnJvcnMgPSBFcnJvcnMKK0BAIC02MTMsNyArNjIzLDcgQEAgZGVmIGxvYWRfc3BlY2lhbF90 b29scyhzZWxmLCB2YXIsIGJhbj1bXSk6CisgCQlpcyB0eXBpY2FsbHkgY2FsbGVkIG9uY2UgZm9y IGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZ3JvdXAsIHNlZSBmb3IKKyAJCWV4YW1wbGUgOnB5Om1v ZDpgd2FmbGliLlRvb2xzLmNvbXBpbGVyX2NgCisgCistCQk6cGFyYW0gdmFyOiBnbG9iIGV4cHJl c3Npb24sIGZvciBleGFtcGxlICdjeHhcX1wqLnB5JworKwkJOnBhcmFtIHZhcjogZ2xvYiBleHBy ZXNzaW9uLCBmb3IgZXhhbXBsZSAnY3h4XFxfXFwqLnB5JworIAkJOnR5cGUgdmFyOiBzdHJpbmcK KyAJCTpwYXJhbSBiYW46IGxpc3Qgb2YgZXhhY3QgZmlsZSBuYW1lcyB0byBleGNsdWRlCisgCQk6 dHlwZSBiYW46IGxpc3Qgb2Ygc3RyaW5nCitAQCAtNjc4LDcgKzY4OCw3IEBAIGRlZiBsb2FkX21v ZHVsZShwYXRoLCBlbmNvZGluZz1Ob25lKToKKyAKKyBkZWYgbG9hZF90b29sKHRvb2wsIHRvb2xk aXI9Tm9uZSwgY3R4PU5vbmUsIHdpdGhfc3lzX3BhdGg9VHJ1ZSk6CisgCSIiIgorLQlJbXBvcnR4 IGEgV2FmIHRvb2wgYXMgYSBweXRob24gbW9kdWxlLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBkaWN0 IDpweTpjb25zdDpgd2FmbGliLkNvbnRleHQuQ29udGV4dC50b29sc2AKKysJSW1wb3J0cyBhIFdh ZiB0b29sIGFzIGEgcHl0aG9uIG1vZHVsZSwgYW5kIHN0b3JlcyBpdCBpbiB0aGUgZGljdCA6cHk6 Y29uc3Q6YHdhZmxpYi5Db250ZXh0LkNvbnRleHQudG9vbHNgCisgCisgCTp0eXBlICB0b29sOiBz dHJpbmcKKyAJOnBhcmFtIHRvb2w6IE5hbWUgb2YgdGhlIHRvb2wKK2RpZmYgLS1naXQgYS93YWZs aWIvTG9ncy5weSBiL3dhZmxpYi9Mb2dzLnB5CitpbmRleCAyYTQ3NTE2OWIuLjI5ODQxMWRiNSAx MDA2NDQKKy0tLSBhL3dhZmxpYi9Mb2dzLnB5CisrKysgYi93YWZsaWIvTG9ncy5weQorQEAgLTIz Nyw3ICsyMzcsMTAgQEAgZGVmIGZvcm1hdChzZWxmLCByZWMpOgorIAkJaWYgcmVjLmxldmVsbm8g Pj0gbG9nZ2luZy5JTkZPOgorIAkJCSMgdGhlIGdvYWwgb2YgdGhpcyBpcyB0byBmb3JtYXQgd2l0 aG91dCB0aGUgbGVhZGluZyAiTG9ncywgaG91ciIgcHJlZml4CisgCQkJaWYgcmVjLmFyZ3M6Cist CQkJCXJldHVybiBtc2cgJSByZWMuYXJncworKwkJCQl0cnk6CisrCQkJCQlyZXR1cm4gbXNnICUg cmVjLmFyZ3MKKysJCQkJZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKysJCQkJCXJldHVybiBt c2cuZW5jb2RlKCd1dGYtOCcpICUgcmVjLmFyZ3MKKyAJCQlyZXR1cm4gbXNnCisgCisgCQlyZWMu bXNnID0gbXNnCitAQCAtMjc2LDkgKzI3OSw5IEBAIGRlZiBlcnJvcigqaywgKiprdyk6CisgCisg ZGVmIHdhcm4oKmssICoqa3cpOgorIAkiIiIKKy0JV3JhcHMgbG9nZ2luZy53YXJuCisrCVdyYXBz IGxvZ2dpbmcud2FybmluZworIAkiIiIKKy0JbG9nLndhcm4oKmssICoqa3cpCisrCWxvZy53YXJu aW5nKCprLCAqKmt3KQorIAorIGRlZiBpbmZvKCprLCAqKmt3KToKKyAJIiIiCitkaWZmIC0tZ2l0 IGEvd2FmbGliL05vZGUucHkgYi93YWZsaWIvTm9kZS5weQoraW5kZXggNGFjMWVhOGEwLi4yYWQx ODQ2NjkgMTAwNjQ0CistLS0gYS93YWZsaWIvTm9kZS5weQorKysrIGIvd2FmbGliL05vZGUucHkK K0BAIC03Myw3ICs3Myw3IEBAIGRlZiBhbnRfbWF0Y2hlcihzLCBpZ25vcmVjYXNlKToKKyAJCQlp ZiBrID09ICcqKic6CisgCQkJCWFjY3UuYXBwZW5kKGspCisgCQkJZWxzZToKKy0JCQkJayA9IGsu cmVwbGFjZSgnLicsICdbLl0nKS5yZXBsYWNlKCcqJywnLionKS5yZXBsYWNlKCc/JywgJy4nKS5y ZXBsYWNlKCcrJywgJ1xcKycpCisrCQkJCWsgPSBrLnJlcGxhY2UoJy4nLCAnWy5dJykucmVwbGFj ZSgnKicsICcuKicpLnJlcGxhY2UoJz8nLCAnLicpLnJlcGxhY2UoJysnLCAnXFwrJykKKyAJCQkJ ayA9ICdeJXMkJyAlIGsKKyAJCQkJdHJ5OgorIAkJCQkJZXhwID0gcmUuY29tcGlsZShrLCBmbGFn cz1yZWZsYWdzKQorQEAgLTU5NSw3ICs1OTUsNiBAQCBkZWYgYW50X2l0ZXIoc2VsZiwgYWNjZXB0 PU5vbmUsIG1heGRlcHRoPTI1LCBwYXRzPVtdLCBkaXI9RmFsc2UsIHNyYz1UcnVlLCByZW1vdgor IAkJOnJ0eXBlOiBpdGVyYXRvcgorIAkJIiIiCisgCQlkaXJjb250ID0gc2VsZi5saXN0ZGlyKCkK Ky0JCWRpcmNvbnQuc29ydCgpCisgCisgCQl0cnk6CisgCQkJbHN0ID0gc2V0KHNlbGYuY2hpbGRy ZW4ua2V5cygpKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9PcHRpb25zLnB5IGIvd2FmbGliL09wdGlv bnMucHkKK2luZGV4IGFkODAyZDRiOS4uZDQxMDQ5MTdjIDEwMDY0NAorLS0tIGEvd2FmbGliL09w dGlvbnMucHkKKysrKyBiL3dhZmxpYi9PcHRpb25zLnB5CitAQCAtNDQsNyArNDQsNyBAQCBjbGFz cyBvcHRfcGFyc2VyKG9wdHBhcnNlLk9wdGlvblBhcnNlcik6CisgCSIiIgorIAlkZWYgX19pbml0 X18oc2VsZiwgY3R4LCBhbGxvd191bmtub3duPUZhbHNlKToKKyAJCW9wdHBhcnNlLk9wdGlvblBh cnNlci5fX2luaXRfXyhzZWxmLCBjb25mbGljdF9oYW5kbGVyPSdyZXNvbHZlJywgYWRkX2hlbHBf b3B0aW9uPUZhbHNlLAorLQkJCXZlcnNpb249J3dhZiAlcyAoJXMpJyAlIChDb250ZXh0LldBRlZF UlNJT04sIENvbnRleHQuV0FGUkVWSVNJT04pKQorKwkJCXZlcnNpb249JyVzICVzICglcyknICUg KENvbnRleHQuV0FGTkFNRSwgQ29udGV4dC5XQUZWRVJTSU9OLCBDb250ZXh0LldBRlJFVklTSU9O KSkKKyAJCXNlbGYuZm9ybWF0dGVyLndpZHRoID0gTG9ncy5nZXRfdGVybV9jb2xzKCkKKyAJCXNl bGYuY3R4ID0gY3R4CisgCQlzZWxmLmFsbG93X3Vua25vd24gPSBhbGxvd191bmtub3duCitAQCAt NjIsNiArNjIsMjEgQEAgZGVmIF9wcm9jZXNzX2FyZ3Moc2VsZiwgbGFyZ3MsIHJhcmdzLCB2YWx1 ZXMpOgorIAkJCQllbHNlOgorIAkJCQkJc2VsZi5lcnJvcihzdHIoZSkpCisgCisrCWRlZiBfcHJv Y2Vzc19sb25nX29wdChzZWxmLCByYXJncywgdmFsdWVzKToKKysJCSMgLS1jdXN0b20tb3B0aW9u PS1mdHh5eiBpcyBpbnRlcnByZXRlZCBhcyAtZiAtdC4uLiBzZWUgIzIyODAKKysJCWlmIHNlbGYu YWxsb3dfdW5rbm93bjoKKysJCQliYWNrID0gW10gKyByYXJncworKwkJCXRyeToKKysJCQkJb3B0 cGFyc2UuT3B0aW9uUGFyc2VyLl9wcm9jZXNzX2xvbmdfb3B0KHNlbGYsIHJhcmdzLCB2YWx1ZXMp CisrCQkJZXhjZXB0IG9wdHBhcnNlLkJhZE9wdGlvbkVycm9yOgorKwkJCQl3aGlsZSByYXJnczoK KysJCQkJCXJhcmdzLnBvcCgpCisrCQkJCXJhcmdzLmV4dGVuZChiYWNrKQorKwkJCQlyYXJncy5w b3AoMCkKKysJCQkJcmFpc2UKKysJCWVsc2U6CisrCQkJb3B0cGFyc2UuT3B0aW9uUGFyc2VyLl9w cm9jZXNzX2xvbmdfb3B0KHNlbGYsIHJhcmdzLCB2YWx1ZXMpCisrCisgCWRlZiBwcmludF91c2Fn ZShzZWxmLCBmaWxlPU5vbmUpOgorIAkJcmV0dXJuIHNlbGYucHJpbnRfaGVscChmaWxlKQorIAor QEAgLTk2LDExICsxMTEsMTEgQEAgZGVmIGdldF91c2FnZShzZWxmKToKKyAJCWxzdC5zb3J0KCkK KyAJCXJldCA9ICdcbicuam9pbihsc3QpCisgCistCQlyZXR1cm4gJycnd2FmIFtjb21tYW5kc10g W29wdGlvbnNdCisrCQlyZXR1cm4gJycnJXMgW2NvbW1hbmRzXSBbb3B0aW9uc10KKyAKKy1NYWlu IGNvbW1hbmRzIChleGFtcGxlOiAuL3dhZiBidWlsZCAtajQpCisrTWFpbiBjb21tYW5kcyAoZXhh bXBsZTogLi8lcyBidWlsZCAtajQpCisgJXMKKy0nJycgJSByZXQKKysnJycgJSAoQ29udGV4dC5X QUZOQU1FLCBDb250ZXh0LldBRk5BTUUsIHJldCkKKyAKKyAKKyBjbGFzcyBPcHRpb25zQ29udGV4 dChDb250ZXh0LkNvbnRleHQpOgorQEAgLTE0MSw5ICsxNTYsOSBAQCBkZWYgX19pbml0X18oc2Vs ZiwgKiprdyk6CisgCQlnci5hZGRfb3B0aW9uKCctbycsICctLW91dCcsIGFjdGlvbj0nc3RvcmUn LCBkZWZhdWx0PScnLCBoZWxwPSdidWlsZCBkaXIgZm9yIHRoZSBwcm9qZWN0JywgZGVzdD0nb3V0 JykKKyAJCWdyLmFkZF9vcHRpb24oJy10JywgJy0tdG9wJywgYWN0aW9uPSdzdG9yZScsIGRlZmF1 bHQ9JycsIGhlbHA9J3NyYyBkaXIgZm9yIHRoZSBwcm9qZWN0JywgZGVzdD0ndG9wJykKKyAKKy0J CWdyLmFkZF9vcHRpb24oJy0tbm8tbG9jay1pbi1ydW4nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBk ZWZhdWx0PScnLCBoZWxwPW9wdHBhcnNlLlNVUFBSRVNTX0hFTFAsIGRlc3Q9J25vX2xvY2tfaW5f cnVuJykKKy0JCWdyLmFkZF9vcHRpb24oJy0tbm8tbG9jay1pbi1vdXQnLCBhY3Rpb249J3N0b3Jl X3RydWUnLCBkZWZhdWx0PScnLCBoZWxwPW9wdHBhcnNlLlNVUFBSRVNTX0hFTFAsIGRlc3Q9J25v X2xvY2tfaW5fb3V0JykKKy0JCWdyLmFkZF9vcHRpb24oJy0tbm8tbG9jay1pbi10b3AnLCBhY3Rp b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PScnLCBoZWxwPW9wdHBhcnNlLlNVUFBSRVNTX0hFTFAs IGRlc3Q9J25vX2xvY2tfaW5fdG9wJykKKysJCWdyLmFkZF9vcHRpb24oJy0tbm8tbG9jay1pbi1y dW4nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PW9zLmVudmlyb24uZ2V0KCdOT19MT0NL X0lOX1JVTicsICcnKSwgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQLCBkZXN0PSdub19sb2Nr X2luX3J1bicpCisrCQlnci5hZGRfb3B0aW9uKCctLW5vLWxvY2staW4tb3V0JywgYWN0aW9uPSdz dG9yZV90cnVlJywgZGVmYXVsdD1vcy5lbnZpcm9uLmdldCgnTk9fTE9DS19JTl9PVVQnLCAnJyks IGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCwgZGVzdD0nbm9fbG9ja19pbl9vdXQnKQorKwkJ Z3IuYWRkX29wdGlvbignLS1uby1sb2NrLWluLXRvcCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl ZmF1bHQ9b3MuZW52aXJvbi5nZXQoJ05PX0xPQ0tfSU5fVE9QJywgJycpLCBoZWxwPW9wdHBhcnNl LlNVUFBSRVNTX0hFTFAsIGRlc3Q9J25vX2xvY2tfaW5fdG9wJykKKyAKKyAJCWRlZmF1bHRfcHJl Zml4ID0gZ2V0YXR0cihDb250ZXh0LmdfbW9kdWxlLCAnZGVmYXVsdF9wcmVmaXgnLCBvcy5lbnZp cm9uLmdldCgnUFJFRklYJykpCisgCQlpZiBub3QgZGVmYXVsdF9wcmVmaXg6CitAQCAtMjgyLDYg KzI5Nyw4IEBAIGRlZiBwYXJzZV9jbWRfYXJncyhzZWxmLCBfYXJncz1Ob25lLCBjd2Q9Tm9uZSwg YWxsb3dfdW5rbm93bj1GYWxzZSk6CisgCQkJZWxpZiBhcmcgIT0gJ29wdGlvbnMnOgorIAkJCQlj b21tYW5kcy5hcHBlbmQoYXJnKQorIAorKwkJaWYgb3B0aW9ucy5qb2JzIDwgMToKKysJCQlvcHRp b25zLmpvYnMgPSAxCisgCQlmb3IgbmFtZSBpbiAndG9wIG91dCBkZXN0ZGlyIHByZWZpeCBiaW5k aXIgbGliZGlyJy5zcGxpdCgpOgorIAkJCSMgdGhvc2UgcGF0aHMgYXJlIHVzdWFsbHkgZXhwYW5k ZWQgZnJvbSBDb250ZXh0LmxhdW5jaF9kaXIKKyAJCQlpZiBnZXRhdHRyKG9wdGlvbnMsIG5hbWUs IE5vbmUpOgorZGlmZiAtLWdpdCBhL3dhZmxpYi9SdW5uZXIucHkgYi93YWZsaWIvUnVubmVyLnB5 CitpbmRleCAyNjEwODRkMjcuLjM1MGM4NmEyMiAxMDA2NDQKKy0tLSBhL3dhZmxpYi9SdW5uZXIu cHkKKysrKyBiL3dhZmxpYi9SdW5uZXIucHkKK0BAIC0zNyw2ICszNyw4IEBAIGRlZiBfX2xlbl9f KHNlbGYpOgorIAkJcmV0dXJuIGxlbihzZWxmLmxzdCkKKyAJZGVmIF9faXRlcl9fKHNlbGYpOgor IAkJcmV0dXJuIGl0ZXIoc2VsZi5sc3QpCisrCWRlZiBfX3N0cl9fKHNlbGYpOgorKwkJcmV0dXJu ICdQcmlvcml0eVRhc2tzOiBbJXNdJyAlICdcbiAgJy5qb2luKHN0cih4KSBmb3IgeCBpbiBzZWxm LmxzdCkKKyAJZGVmIGNsZWFyKHNlbGYpOgorIAkJc2VsZi5sc3QgPSBbXQorIAlkZWYgYXBwZW5k KHNlbGYsIHRhc2spOgorQEAgLTY5LDcgKzcxLDcgQEAgZGVmIF9faW5pdF9fKHNlbGYsIHNwYXdu ZXIsIHRhc2spOgorIAkJIiIiVGFzayB0byBleGVjdXRlIiIiCisgCQlzZWxmLnNwYXduZXIgPSBz cGF3bmVyCisgCQkiIiJDb29yZGluYXRvciBvYmplY3QiIiIKKy0JCXNlbGYuc2V0RGFlbW9uKDEp CisrCQlzZWxmLmRhZW1vbiA9IFRydWUKKyAJCXNlbGYuc3RhcnQoKQorIAlkZWYgcnVuKHNlbGYp OgorIAkJIiIiCitAQCAtOTYsNyArOTgsNyBAQCBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyKToK KyAJCSIiIjpweTpjbGFzczpgd2FmbGliLlJ1bm5lci5QYXJhbGxlbGAgcHJvZHVjZXIgaW5zdGFu Y2UiIiIKKyAJCXNlbGYuc2VtID0gVXRpbHMudGhyZWFkaW5nLlNlbWFwaG9yZShtYXN0ZXIubnVt am9icykKKyAJCSIiIkJvdW5kZWQgc2VtYXBob3JlIHRoYXQgcHJldmVudHMgc3Bhd25pbmcgbW9y ZSB0aGFuICpuKiBjb25jdXJyZW50IGNvbnN1bWVycyIiIgorLQkJc2VsZi5zZXREYWVtb24oMSkK KysJCXNlbGYuZGFlbW9uID0gVHJ1ZQorIAkJc2VsZi5zdGFydCgpCisgCWRlZiBydW4oc2VsZik6 CisgCQkiIiIKK0BAIC0xODEsMTAgKzE4MywxMiBAQCBkZWYgX19pbml0X18oc2VsZiwgYmxkLCBq PTIpOgorIAkJVGhlIHJldmVyc2UgZGVwZW5kZW5jeSBncmFwaCBvZiBkZXBlbmRlbmNpZXMgb2J0 YWluZWQgZnJvbSBUYXNrLnJ1bl9hZnRlcgorIAkJIiIiCisgCistCQlzZWxmLnNwYXduZXIgPSBT cGF3bmVyKHNlbGYpCisrCQlzZWxmLnNwYXduZXIgPSBOb25lCisgCQkiIiIKKyAJCUNvb3JkaW5h dGluZyBkYWVtb24gdGhyZWFkIHRoYXQgc3Bhd25zIHRocmVhZCBjb25zdW1lcnMKKyAJCSIiIgor KwkJaWYgc2VsZi5udW1qb2JzID4gMToKKysJCQlzZWxmLnNwYXduZXIgPSBTcGF3bmVyKHNlbGYp CisgCisgCWRlZiBnZXRfbmV4dF90YXNrKHNlbGYpOgorIAkJIiIiCitAQCAtMjU0LDYgKzI1OCw4 IEBAIGRlZiByZWZpbGxfdGFza19saXN0KHNlbGYpOgorIAkJCQkJCQlzZWxmLm91dHN0YW5kaW5n LmFwcGVuZCh4KQorIAkJCQkJCQlicmVhaworIAkJCQkJZWxzZToKKysJCQkJCQlpZiBzZWxmLnN0 b3Agb3Igc2VsZi5lcnJvcjoKKysJCQkJCQkJYnJlYWsKKyAJCQkJCQlyYWlzZSBFcnJvcnMuV2Fm RXJyb3IoJ0Jyb2tlbiByZXZkZXBzIGRldGVjdGVkIG9uICVyJyAlIHNlbGYuaW5jb21wbGV0ZSkK KyAJCQkJZWxzZToKKyAJCQkJCXRhc2tzID0gbmV4dChzZWxmLmJpdGVyKQorQEAgLTMzMSwxMSAr MzM3LDE2IEBAIGRlZiB0cnlfdW5mcmVlemUoeCk6CisgCisgCQlpZiBoYXNhdHRyKHRzaywgJ3Nl bWFwaG9yZScpOgorIAkJCXNlbSA9IHRzay5zZW1hcGhvcmUKKy0JCQlzZW0ucmVsZWFzZSh0c2sp CistCQkJd2hpbGUgc2VtLndhaXRpbmcgYW5kIG5vdCBzZW0uaXNfbG9ja2VkKCk6CistCQkJCSMg dGFrZSBhIGZyb3plbiB0YXNrLCBtYWtlIGl0IHJlYWR5IHRvIHJ1bgorLQkJCQl4ID0gc2VtLndh aXRpbmcucG9wKCkKKy0JCQkJc2VsZi5fYWRkX3Rhc2soeCkKKysJCQl0cnk6CisrCQkJCXNlbS5y ZWxlYXNlKHRzaykKKysJCQlleGNlcHQgS2V5RXJyb3I6CisrCQkJCSMgVE9ETworKwkJCQlwYXNz CisrCQkJZWxzZToKKysJCQkJd2hpbGUgc2VtLndhaXRpbmcgYW5kIG5vdCBzZW0uaXNfbG9ja2Vk KCk6CisrCQkJCQkjIHRha2UgYSBmcm96ZW4gdGFzaywgbWFrZSBpdCByZWFkeSB0byBydW4KKysJ CQkJCXggPSBzZW0ud2FpdGluZy5wb3AoKQorKwkJCQkJc2VsZi5fYWRkX3Rhc2soeCkKKyAKKyAJ ZGVmIGdldF9vdXQoc2VsZik6CisgCQkiIiIKK2RpZmYgLS1naXQgYS93YWZsaWIvU2NyaXB0aW5n LnB5IGIvd2FmbGliL1NjcmlwdGluZy5weQoraW5kZXggNzQ5ZDRmMmU2Li5hODBjYjM2NzggMTAw NjQ0CistLS0gYS93YWZsaWIvU2NyaXB0aW5nLnB5CisrKysgYi93YWZsaWIvU2NyaXB0aW5nLnB5 CitAQCAtMjE2LDcgKzIxNiwxMCBAQCBkZWYgcGFyc2Vfb3B0aW9ucygpOgorIAljdHggPSBDb250 ZXh0LmNyZWF0ZV9jb250ZXh0KCdvcHRpb25zJykKKyAJY3R4LmV4ZWN1dGUoKQorIAlpZiBub3Qg T3B0aW9ucy5jb21tYW5kczoKKy0JCU9wdGlvbnMuY29tbWFuZHMuYXBwZW5kKGRlZmF1bHRfY21k KQorKwkJaWYgaXNpbnN0YW5jZShkZWZhdWx0X2NtZCwgbGlzdCk6CisrCQkJT3B0aW9ucy5jb21t YW5kcy5leHRlbmQoZGVmYXVsdF9jbWQpCisrCQllbHNlOgorKwkJCU9wdGlvbnMuY29tbWFuZHMu YXBwZW5kKGRlZmF1bHRfY21kKQorIAlpZiBPcHRpb25zLm9wdGlvbnMud2hlbHA6CisgCQljdHgu cGFyc2VyLnByaW50X2hlbHAoKQorIAkJc3lzLmV4aXQoMCkKK0BAIC0yODAsNyArMjgzLDcgQEAg ZGVmIGRpc3RjbGVhbl9kaXIoZGlybmFtZSk6CisgCQkJcGFzcworIAorIAl0cnk6CistCQlzaHV0 aWwucm10cmVlKCdjNGNoZScpCisrCQlzaHV0aWwucm10cmVlKEJ1aWxkLkNBQ0hFX0RJUikKKyAJ ZXhjZXB0IE9TRXJyb3I6CisgCQlwYXNzCisgCitAQCAtMzAzLDcgKzMwNiw3IEBAIGRlZiByZW1v dmVfYW5kX2xvZyhrLCBmdW4pOgorIAorIAkjIHJlbW92ZSBhIGJ1aWxkIGZvbGRlciwgaWYgYW55 CisgCWN1ciA9ICcuJworLQlpZiBjdHgub3B0aW9ucy5ub19sb2NrX2luX3RvcDoKKysJaWYgb3Mu ZW52aXJvbi5nZXQoJ05PX0xPQ0tfSU5fVE9QJykgb3IgY3R4Lm9wdGlvbnMubm9fbG9ja19pbl90 b3A6CisgCQljdXIgPSBjdHgub3B0aW9ucy5vdXQKKyAKKyAJdHJ5OgorQEAgLTMyOSw3ICszMzIs MTIgQEAgZGVmIHJlbW92ZV9hbmRfbG9nKGssIGZ1bik6CisgCQllbHNlOgorIAkJCXJlbW92ZV9h bmRfbG9nKGVudi5vdXRfZGlyLCBzaHV0aWwucm10cmVlKQorIAorLQkJZm9yIGsgaW4gKGVudi5v dXRfZGlyLCBlbnYudG9wX2RpciwgZW52LnJ1bl9kaXIpOgorKwkJZW52X2RpcnMgPSBbZW52Lm91 dF9kaXJdCisrCQlpZiBub3QgKG9zLmVudmlyb24uZ2V0KCdOT19MT0NLX0lOX1RPUCcpIG9yIGN0 eC5vcHRpb25zLm5vX2xvY2tfaW5fdG9wKToKKysJCQllbnZfZGlycy5hcHBlbmQoZW52LnRvcF9k aXIpCisrCQlpZiBub3QgKG9zLmVudmlyb24uZ2V0KCdOT19MT0NLX0lOX1JVTicpIG9yIGN0eC5v cHRpb25zLm5vX2xvY2tfaW5fcnVuKToKKysJCQllbnZfZGlycy5hcHBlbmQoZW52LnJ1bl9kaXIp CisrCQlmb3IgayBpbiBlbnZfZGlyczoKKyAJCQlwID0gb3MucGF0aC5qb2luKGssIE9wdGlvbnMu bG9ja2ZpbGUpCisgCQkJcmVtb3ZlX2FuZF9sb2cocCwgb3MucmVtb3ZlKQorIAorQEAgLTM4MCw3 ICszODgsMTEgQEAgZGVmIGFyY2hpdmUoc2VsZik6CisgCisgCQkJZm9yIHggaW4gZmlsZXM6Cisg CQkJCWFyY2hpdmVfbmFtZSA9IHNlbGYuZ2V0X2Jhc2VfbmFtZSgpICsgJy8nICsgeC5wYXRoX2Zy b20oc2VsZi5iYXNlX3BhdGgpCistCQkJCXppcC53cml0ZSh4LmFic3BhdGgoKSwgYXJjaGl2ZV9u YW1lLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKysJCQkJaWYgb3MuZW52aXJvbi5nZXQoJ1NPVVJD RV9EQVRFX0VQT0NIJyk6CisrCQkJCQkjIFRPRE86IHBhcnNlIHRoYXQgdGltZXN0YW1wCisrCQkJ CQl6aXAud3JpdGVzdHIoemlwZmlsZS5aaXBJbmZvKGFyY2hpdmVfbmFtZSksIHgucmVhZCgpLCB6 aXBmaWxlLlpJUF9ERUZMQVRFRCkKKysJCQkJZWxzZToKKysJCQkJCXppcC53cml0ZSh4LmFic3Bh dGgoKSwgYXJjaGl2ZV9uYW1lLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAJCQl6aXAuY2xvc2Uo KQorIAkJZWxzZToKKyAJCQlzZWxmLmZhdGFsKCdWYWxpZCBhbGdvIHR5cGVzIGFyZSB0YXIuYnoy LCB0YXIuZ3osIHRhci54eiBvciB6aXAnKQorQEAgLTQxNyw2ICs0MjksOCBAQCBkZWYgYWRkX3Rh cl9maWxlKHNlbGYsIHgsIHRhcik6CisgCQl0aW5mby5naWQgICA9IDAKKyAJCXRpbmZvLnVuYW1l ID0gJ3Jvb3QnCisgCQl0aW5mby5nbmFtZSA9ICdyb290JworKwkJaWYgb3MuZW52aXJvbi5nZXQo J1NPVVJDRV9EQVRFX0VQT0NIJyk6CisrCQkJdGluZm8ubXRpbWUgPSBpbnQob3MuZW52aXJvbi5n ZXQoJ1NPVVJDRV9EQVRFX0VQT0NIJykpCisgCisgCQlpZiBvcy5wYXRoLmlzZmlsZShwKToKKyAJ CQl3aXRoIG9wZW4ocCwgJ3JiJykgYXMgZjoKK0BAIC01OTgsMTIgKzYxMiwxNSBAQCBkZWYgZXhl Y3V0ZShzZWxmKToKKyAJCQljbWQgPSBlbnYuY29uZmlnX2NtZCBvciAnY29uZmlndXJlJworIAkJ CWlmIENvbmZpZ3VyZS5hdXRvY29uZmlnID09ICdjbG9iYmVyJzoKKyAJCQkJdG1wID0gT3B0aW9u cy5vcHRpb25zLl9fZGljdF9fCisrCQkJCWxhdW5jaF9kaXJfdG1wID0gQ29udGV4dC5sYXVuY2hf ZGlyCisgCQkJCWlmIGVudi5vcHRpb25zOgorIAkJCQkJT3B0aW9ucy5vcHRpb25zLl9fZGljdF9f ID0gZW52Lm9wdGlvbnMKKysJCQkJQ29udGV4dC5sYXVuY2hfZGlyID0gZW52LmxhdW5jaF9kaXIK KyAJCQkJdHJ5OgorIAkJCQkJcnVuX2NvbW1hbmQoY21kKQorIAkJCQlmaW5hbGx5OgorIAkJCQkJ T3B0aW9ucy5vcHRpb25zLl9fZGljdF9fID0gdG1wCisrCQkJCQlDb250ZXh0LmxhdW5jaF9kaXIg PSBsYXVuY2hfZGlyX3RtcAorIAkJCWVsc2U6CisgCQkJCXJ1bl9jb21tYW5kKGNtZCkKKyAJCQly dW5fY29tbWFuZChzZWxmLmNtZCkKK2RpZmYgLS1naXQgYS93YWZsaWIvVGFzay5weSBiL3dhZmxp Yi9UYXNrLnB5CitpbmRleCA2YWViYzYwNzQuLmNiNDlhNzM5NCAxMDA2NDQKKy0tLSBhL3dhZmxp Yi9UYXNrLnB5CisrKysgYi93YWZsaWIvVGFzay5weQorQEAgLTE2MywxMCArMTYzLDEwIEBAIGNs YXNzIFRhc2soZXZpbCk6CisgCSIiIkZpbGUgZXh0ZW5zaW9ucyB0aGF0IG9iamVjdHMgb2YgdGhp cyB0YXNrIGNsYXNzIG1heSBjcmVhdGUiIiIKKyAKKyAJYmVmb3JlID0gW10KKy0JIiIiTGlzdCBv ZiB0YXNrIGNsYXNzIG5hbWVzIHRvIGV4ZWN1dGUgYmVmb3JlIGluc3RhbmNlcyBvZiB0aGlzIGNs YXNzIiIiCisrCSIiIlRoZSBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUgZXhlY3V0ZWQgYmVm b3JlIHRoZSBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aG9zZSBuYW1lcyBhcmUgaW4gdGhpcyBsaXN0 IiIiCisgCisgCWFmdGVyID0gW10KKy0JIiIiTGlzdCBvZiB0YXNrIGNsYXNzIG5hbWVzIHRvIGV4 ZWN1dGUgYWZ0ZXIgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MiIiIKKysJIiIiVGhlIGluc3RhbmNl cyBvZiB0aGlzIGNsYXNzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgaW5zdGFuY2VzIG9mIGNsYXNz ZXMgd2hvc2UgbmFtZXMgYXJlIGluIHRoaXMgbGlzdCIiIgorIAorIAloY29kZSA9IFV0aWxzLlNJ R19OSUwKKyAJIiIiU3RyaW5nIHJlcHJlc2VudGluZyBhbiBhZGRpdGlvbmFsIGhhc2ggZm9yIHRo ZSBjbGFzcyByZXByZXNlbnRhdGlvbiIiIgorQEAgLTMwNiwyNSArMzA2LDMxIEBAIGRlZiBleGVj X2NvbW1hbmQoc2VsZiwgY21kLCAqKmt3KToKKyAJCWlmIGhhc2F0dHIoc2VsZiwgJ3N0ZGVycicp OgorIAkJCWt3WydzdGRlcnInXSA9IHNlbGYuc3RkZXJyCisgCistCQkjIHdvcmthcm91bmQgZm9y IGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXQ6CistCQkjIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29m dC5jb20va2IvODMwNDczCistCQlpZiBub3QgaXNpbnN0YW5jZShjbWQsIHN0cikgYW5kIChsZW4o cmVwcihjbWQpKSA+PSA4MTkyIGlmIFV0aWxzLmlzX3dpbjMyIGVsc2UgbGVuKGNtZCkgPiAyMDAw MDApOgorLQkJCWNtZCwgYXJncyA9IHNlbGYuc3BsaXRfYXJnZmlsZShjbWQpCistCQkJdHJ5Ogor LQkJCQkoZmQsIHRtcCkgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKy0JCQkJb3Mud3JpdGUoZmQsICdc clxuJy5qb2luKGFyZ3MpLmVuY29kZSgpKQorLQkJCQlvcy5jbG9zZShmZCkKKy0JCQkJaWYgTG9n cy52ZXJib3NlOgorLQkJCQkJTG9ncy5kZWJ1ZygnYXJnZmlsZTogQCVyIC0+ICVyJywgdG1wLCBh cmdzKQorLQkJCQlyZXR1cm4gc2VsZi5nZW5lcmF0b3IuYmxkLmV4ZWNfY29tbWFuZChjbWQgKyBb J0AnICsgdG1wXSwgKiprdykKKy0JCQlmaW5hbGx5OgorKwkJaWYgbm90IGlzaW5zdGFuY2UoY21k LCBzdHIpOgorKwkJCWlmIFV0aWxzLmlzX3dpbjMyOgorKwkJCQkjIHdpbjMyIGNvbXBhcmVzIHRo ZSByZXN1bHRpbmcgbGVuZ3RoIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvODMwNDcz CisrCQkJCXRvb19sb25nID0gc3VtKFtsZW4oYXJnKSBmb3IgYXJnIGluIGNtZF0pICsgbGVuKGNt ZCkgPiA4MTkyCisrCQkJZWxzZToKKysJCQkJIyBub24td2luMzIgY291bnRzIHRoZSBhbW91bnQg b2YgYXJndW1lbnRzICgyMDBrKQorKwkJCQl0b29fbG9uZyA9IGxlbihjbWQpID4gMjAwMDAwCisr CisrCQkJaWYgdG9vX2xvbmcgYW5kIGdldGF0dHIoc2VsZiwgJ2FsbG93X2FyZ3NmaWxlJywgVHJ1 ZSk6CisrCQkJCSMgU2h1bnQgYXJndW1lbnRzIHRvIGEgdGVtcG9yYXJ5IGZpbGUgaWYgdGhlIGNv bW1hbmQgaXMgdG9vIGxvbmcuCisrCQkJCWNtZCwgYXJncyA9IHNlbGYuc3BsaXRfYXJnZmlsZShj bWQpCisgCQkJCXRyeToKKy0JCQkJCW9zLnJlbW92ZSh0bXApCistCQkJCWV4Y2VwdCBPU0Vycm9y OgorLQkJCQkJIyBhbnRpLXZpcnVzIGFuZCBpbmRleGVycyBjYW4ga2VlcCBmaWxlcyBvcGVuIC1f LQorLQkJCQkJcGFzcworLQkJZWxzZToKKy0JCQlyZXR1cm4gc2VsZi5nZW5lcmF0b3IuYmxkLmV4 ZWNfY29tbWFuZChjbWQsICoqa3cpCisrCQkJCQkoZmQsIHRtcCkgPSB0ZW1wZmlsZS5ta3N0ZW1w KCkKKysJCQkJCW9zLndyaXRlKGZkLCAnXHJcbicuam9pbihhcmdzKS5lbmNvZGUoKSkKKysJCQkJ CW9zLmNsb3NlKGZkKQorKwkJCQkJaWYgTG9ncy52ZXJib3NlOgorKwkJCQkJCUxvZ3MuZGVidWco J2FyZ2ZpbGU6IEAlciAtPiAlcicsIHRtcCwgYXJncykKKysJCQkJCXJldHVybiBzZWxmLmdlbmVy YXRvci5ibGQuZXhlY19jb21tYW5kKGNtZCArIFsnQCcgKyB0bXBdLCAqKmt3KQorKwkJCQlmaW5h bGx5OgorKwkJCQkJdHJ5OgorKwkJCQkJCW9zLnJlbW92ZSh0bXApCisrCQkJCQlleGNlcHQgT1NF cnJvcjoKKysJCQkJCQkjIGFudGktdmlydXMgYW5kIGluZGV4ZXJzIGNhbiBrZWVwIGZpbGVzIG9w ZW4gLV8tCisrCQkJCQkJcGFzcworKwkJcmV0dXJuIHNlbGYuZ2VuZXJhdG9yLmJsZC5leGVjX2Nv bW1hbmQoY21kLCAqKmt3KQorIAorIAlkZWYgcHJvY2VzcyhzZWxmKToKKyAJCSIiIgorQEAgLTEw NDQsNyArMTA1MCw3IEBAIGRlZiBmdW5leChjKToKKyAJZXhlYyhjLCBkYykKKyAJcmV0dXJuIGRj WydmJ10KKyAKKy1yZV9jb25kID0gcmUuY29tcGlsZSgnKD9QPHZhcj5cdyspfCg/UDxvcj5cfCl8 KD9QPGFuZD4mKScpCisrcmVfY29uZCA9IHJlLmNvbXBpbGUocicoP1A8dmFyPlx3Kyl8KD9QPG9y Plx8KXwoP1A8YW5kPiYpJykKKyByZV9ub3ZhciA9IHJlLmNvbXBpbGUocideKFNSQ3xUR1QpXFcr Lio/JCcpCisgcmVnX2FjdCA9IHJlLmNvbXBpbGUocicoP1A8YmFja3NsYXNoPlxcKXwoP1A8ZG9s bGFyPlwkXCQpfCg/UDxzdWJzdD5cJFx7KD9QPHZhcj5cdyspKD9QPGNvZGU+Lio/KVx9KScsIHJl Lk0pCisgZGVmIGNvbXBpbGVfZnVuX3NoZWxsKGxpbmUpOgorZGlmZiAtLWdpdCBhL3dhZmxpYi9U YXNrR2VuLnB5IGIvd2FmbGliL1Rhc2tHZW4ucHkKK2luZGV4IGE3NGU2NDMxZC4uMzI0NjhmMDNk IDEwMDY0NAorLS0tIGEvd2FmbGliL1Rhc2tHZW4ucHkKKysrKyBiL3dhZmxpYi9UYXNrR2VuLnB5 CitAQCAtNzQsNyArNzQsNyBAQCBkZWYgX19pbml0X18oc2VsZiwgKmssICoqa3cpOgorIAkJZWxz ZToKKyAJCQlzZWxmLmJsZCA9IGt3WydibGQnXQorIAkJCXNlbGYuZW52ID0gc2VsZi5ibGQuZW52 LmRlcml2ZSgpCistCQkJc2VsZi5wYXRoID0gc2VsZi5ibGQucGF0aCAjIGVtdWxhdGUgY2hkaXIg d2hlbiByZWFkaW5nIHNjcmlwdHMKKysJCQlzZWxmLnBhdGggPSBrdy5nZXQoJ3BhdGgnLCBzZWxm LmJsZC5wYXRoKSAjIGJ5IGRlZmF1bHQsIGVtdWxhdGUgY2hkaXIgd2hlbiByZWFkaW5nIHNjcmlw dHMKKyAKKyAJCQkjIFByb3ZpZGUgYSB1bmlxdWUgaW5kZXggcGVyIGZvbGRlcgorIAkJCSMgVGhp cyBpcyBwYXJ0IG9mIGEgbWVhc3VyZSB0byBwcmV2ZW50IG91dHB1dCBmaWxlIG5hbWUgY29sbGlz aW9ucworQEAgLTQwMCw3ICs0MDAsNyBAQCBkZWYgZmVhdHVyZSgqayk6CisgCURlY29yYXRvciB0 aGF0IHJlZ2lzdGVycyBhIHRhc2sgZ2VuZXJhdG9yIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0 ZWQgd2hlbiB0aGUKKyAJb2JqZWN0IGF0dHJpYnV0ZSBgYGZlYXR1cmVgYCBjb250YWlucyB0aGUg Y29ycmVzcG9uZGluZyBrZXkocyk6OgorIAorLQkJZnJvbSB3YWZsaWIuVGFzayBpbXBvcnQgZmVh dHVyZQorKwkJZnJvbSB3YWZsaWIuVGFza0dlbiBpbXBvcnQgZmVhdHVyZQorIAkJQGZlYXR1cmUo J215ZmVhdHVyZScpCisgCQlkZWYgbXlmdW5jdGlvbihzZWxmKToKKyAJCQlwcmludCgndGhhdCBp cyBteSBmZWF0dXJlIScpCitAQCAtNjMxLDEyICs2MzEsOCBAQCBkZWYgY2htb2RfZnVuKHRzayk6 CisgCQkJY2xzLnNjYW4gPSBzZWxmLnNjYW4KKyAJCWVsaWYgaGFzX2RlcHM6CisgCQkJZGVmIHNj YW4oc2VsZik6CistCQkJCW5vZGVzID0gW10KKy0JCQkJZm9yIHggaW4gc2VsZi5nZW5lcmF0b3Iu dG9fbGlzdChnZXRhdHRyKHNlbGYuZ2VuZXJhdG9yLCAnZGVwcycsIE5vbmUpKToKKy0JCQkJCW5v ZGUgPSBzZWxmLmdlbmVyYXRvci5wYXRoLmZpbmRfcmVzb3VyY2UoeCkKKy0JCQkJCWlmIG5vdCBu b2RlOgorLQkJCQkJCXNlbGYuZ2VuZXJhdG9yLmJsZC5mYXRhbCgnQ291bGQgbm90IGZpbmQgJXIg KHdhcyBpdCBkZWNsYXJlZD8pJyAlIHgpCistCQkJCQlub2Rlcy5hcHBlbmQobm9kZSkKKysJCQkJ ZGVwcyA9IGdldGF0dHIoc2VsZi5nZW5lcmF0b3IsICdkZXBzJywgTm9uZSkKKysJCQkJbm9kZXMg PSBzZWxmLmdlbmVyYXRvci50b19ub2RlcyhkZXBzKQorIAkJCQlyZXR1cm4gW25vZGVzLCBbXV0K KyAJCQljbHMuc2NhbiA9IHNjYW4KKyAKK0BAIC03MjcsNyArNzIzLDcgQEAgZGVmIHNlcXVlbmNl X29yZGVyKHNlbGYpOgorIAlzZWxmLmJsZC5wcmV2ID0gc2VsZgorIAorIAorLXJlX200ID0gcmUu Y29tcGlsZSgnQChcdyspQCcsIHJlLk0pCisrcmVfbTQgPSByZS5jb21waWxlKHInQChcdyspQCcs IHJlLk0pCisgCisgY2xhc3Mgc3Vic3RfcGMoVGFzay5UYXNrKToKKyAJIiIiCitAQCAtOTA1LDcg KzkwMSw3IEBAIGRlZiBidWlsZChibGQpOgorIAkJIyBwYXJhbm9pZCBzYWZldHkgbWVhc3VyZSBm b3IgdGhlIGdlbmVyYWwgY2FzZSBmb28uaW4tPmZvby5oIHdpdGggYW1iaWd1b3VzIGRlcGVuZGVu Y2llcworIAkJZm9yIHh0IGluIEhFQURFUl9FWFRTOgorIAkJCWlmIGIubmFtZS5lbmRzd2l0aCh4 dCk6CistCQkJCXRzay5leHRfaW4gPSB0c2suZXh0X2luICsgWycuaCddCisrCQkJCXRzay5leHRf b3V0ID0gdHNrLmV4dF9vdXQgKyBbJy5oJ10KKyAJCQkJYnJlYWsKKyAKKyAJCWluc3RfdG8gPSBn ZXRhdHRyKHNlbGYsICdpbnN0YWxsX3BhdGgnLCBOb25lKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9U b29scy9jX2FsaWFzZXMucHkgYi93YWZsaWIvVG9vbHMvY19hbGlhc2VzLnB5CitpbmRleCBjOWQ1 MzY5MmUuLjkyOGNmZTI5YyAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Ub29scy9jX2FsaWFzZXMucHkK KysrKyBiL3dhZmxpYi9Ub29scy9jX2FsaWFzZXMucHkKK0BAIC0zOCw3ICszOCw3IEBAIGRlZiBz bmlmZl9mZWF0dXJlcygqKmt3KToKKyAJOnJldHVybjogdGhlIGxpc3Qgb2YgZmVhdHVyZXMgZm9y IGEgdGFzayBnZW5lcmF0b3IgcHJvY2Vzc2luZyB0aGUgc291cmNlIGZpbGVzCisgCTpydHlwZTog bGlzdCBvZiBzdHJpbmcKKyAJIiIiCistCWV4dHMgPSBnZXRfZXh0ZW5zaW9ucyhrd1snc291cmNl J10pCisrCWV4dHMgPSBnZXRfZXh0ZW5zaW9ucyhrdy5nZXQoJ3NvdXJjZScsIFtdKSkKKyAJdHlw ID0ga3dbJ3R5cCddCisgCWZlYXRzID0gW10KKyAKK0BAIC00NywxMCArNDcsMTIgQEAgZGVmIHNu aWZmX2ZlYXR1cmVzKCoqa3cpOgorIAkJaWYgeCBpbiBleHRzOgorIAkJCWZlYXRzLmFwcGVuZCgn Y3h4JykKKyAJCQlicmVhaworLQorIAlpZiAnYycgaW4gZXh0cyBvciAndmFsYScgaW4gZXh0cyBv ciAnZ3MnIGluIGV4dHM6CisgCQlmZWF0cy5hcHBlbmQoJ2MnKQorIAorKwlpZiAncycgaW4gZXh0 cyBvciAnUycgaW4gZXh0czoKKysJCWZlYXRzLmFwcGVuZCgnYXNtJykKKysKKyAJZm9yIHggaW4g J2YgZjkwIEYgRjkwIGZvciBGT1InLnNwbGl0KCk6CisgCQlpZiB4IGluIGV4dHM6CisgCQkJZmVh dHMuYXBwZW5kKCdmYycpCitAQCAtNjYsMTEgKzY4LDExIEBAIGRlZiBzbmlmZl9mZWF0dXJlcygq Kmt3KToKKyAJaWYgdHlwIGluICgncHJvZ3JhbScsICdzaGxpYicsICdzdGxpYicpOgorIAkJd2ls bF9saW5rID0gRmFsc2UKKyAJCWZvciB4IGluIGZlYXRzOgorLQkJCWlmIHggaW4gKCdjeHgnLCAn ZCcsICdmYycsICdjJyk6CisrCQkJaWYgeCBpbiAoJ2N4eCcsICdkJywgJ2ZjJywgJ2MnLCAnYXNt Jyk6CisgCQkJCWZlYXRzLmFwcGVuZCh4ICsgdHlwKQorIAkJCQl3aWxsX2xpbmsgPSBUcnVlCisg CQlpZiBub3Qgd2lsbF9saW5rIGFuZCBub3Qga3cuZ2V0KCdmZWF0dXJlcycsIFtdKToKKy0JCQly YWlzZSBFcnJvcnMuV2FmRXJyb3IoJ0Nhbm5vdCBsaW5rIGZyb20gJXIsIHRyeSBwYXNzaW5nIGVn OiBmZWF0dXJlcz0iYyBjcHJvZ3JhbSI/JyAlIGt3KQorKwkJCXJhaXNlIEVycm9ycy5XYWZFcnJv cignVW5hYmxlIHRvIGRldGVybWluZSBob3cgdG8gbGluayAlciwgdHJ5IGFkZGluZyBlZzogZmVh dHVyZXM9ImMgY3NobGliIj8nICUga3cpCisgCXJldHVybiBmZWF0cworIAorIGRlZiBzZXRfZmVh dHVyZXMoa3csIHR5cCk6CitkaWZmIC0tZ2l0IGEvd2FmbGliL1Rvb2xzL2NfY29uZmlnLnB5IGIv d2FmbGliL1Rvb2xzL2NfY29uZmlnLnB5CitpbmRleCBkMmIzYzBkOGYuLmY1YWIxOWJmNiAxMDA2 NDQKKy0tLSBhL3dhZmxpYi9Ub29scy9jX2NvbmZpZy5weQorKysrIGIvd2FmbGliL1Rvb2xzL2Nf Y29uZmlnLnB5CitAQCAtNjgsNiArNjgsOCBAQAorICdfX3MzOTBfXycgICAgOiAnczM5MCcsCisg J19fc2hfXycgICAgICA6ICdzaCcsCisgJ19feHRlbnNhX18nICA6ICd4dGVuc2EnLAorKydfX2Uy a19fJyAgICAgOiAnZTJrJywKKysnX19yaXNjdicgICAgIDogJ3Jpc2N2JywKKyB9CisgCisgQGNv bmYKK0BAIC04Niw2ICs4OCwxMCBAQCBkZWYgY29uZmlndXJlKGNvbmYpOgorIAk6dHlwZSB1c2Vs aWJfc3RvcmU6IHN0cmluZworIAk6cGFyYW0gZW52OiBjb25maWcgc2V0IG9yIGNvbmYuZW52IGJ5 IGRlZmF1bHQKKyAJOnR5cGUgZW52OiA6cHk6Y2xhc3M6YHdhZmxpYi5Db25maWdTZXQuQ29uZmln U2V0YAorKwk6cGFyYW0gZm9yY2Vfc3RhdGljOiBmb3JjZSB1c2FnZSBvZiBzdGF0aWMgbGlicmFy aWVzCisrCTp0eXBlIGZvcmNlX3N0YXRpYzogYm9vbCBkZWZhdWx0IEZhbHNlCisrCTpwYXJhbSBw b3NpeDogdXNhZ2Ugb2YgUE9TSVggbW9kZSBmb3Igc2hsZXggbGV4aWNhbCBhbmFsaXlzaXMgbGli cmFyeQorKwk6dHlwZSBwb3NpeDogYm9vbCBkZWZhdWx0IFRydWUKKyAJIiIiCisgCisgCWFzc2Vy dChpc2luc3RhbmNlKGxpbmUsIHN0cikpCitAQCAtMTAzLDYgKzEwOSw4IEBAIGRlZiBjb25maWd1 cmUoY29uZik6CisgCWxleC5jb21tZW50ZXJzID0gJycKKyAJbHN0ID0gbGlzdChsZXgpCisgCisr CXNvX3JlID0gcmUuY29tcGlsZShyIlwuc28oPzpcLlswLTldKykqJCIpCisrCisgCSMgYXBwZW5k X3VuaXF1ZSBpcyBub3QgYWx3YXlzIHBvc3NpYmxlCisgCSMgZm9yIGV4YW1wbGUsIGFwcGxlIGZs YWdzIG1heSByZXF1aXJlIGJvdGggLWFyY2ggaTM4NiBhbmQgLWFyY2ggcHBjCisgCXVzZWxpYiA9 IHVzZWxpYl9zdG9yZQorQEAgLTE0NCw3ICsxNTIsNyBAQCBkZWYgYXBwdSh2YXIsIHZhbCk6Cisg CQllbGlmIHguc3RhcnRzd2l0aCgnLXN0ZD0nKToKKyAJCQlwcmVmaXggPSAnQ1hYRkxBR1MnIGlm ICcrKycgaW4geCBlbHNlICdDRkxBR1MnCisgCQkJYXBwKHByZWZpeCwgeCkKKy0JCWVsaWYgeC5z dGFydHN3aXRoKCcrJykgb3IgeCBpbiAoJy1wdGhyZWFkJywgJy1mUElDJywgJy1mcGljJywgJy1m UElFJywgJy1mcGllJyk6CisrCQllbGlmIHguc3RhcnRzd2l0aCgnKycpIG9yIHggaW4gKCctcHRo cmVhZCcsICctZlBJQycsICctZnBpYycsICctZlBJRScsICctZnBpZScsICctZmx0bycsICctZm5v LWx0bycpOgorIAkJCWFwcCgnQ0ZMQUdTJywgeCkKKyAJCQlhcHAoJ0NYWEZMQUdTJywgeCkKKyAJ CQlhcHAoJ0xJTktGTEFHUycsIHgpCitAQCAtMTgwLDcgKzE4OCw3IEBAIGRlZiBhcHB1KHZhciwg dmFsKToKKyAJCQlhcHAoJ0NGTEFHUycsIHRtcCkKKyAJCQlhcHAoJ0NYWEZMQUdTJywgdG1wKQor IAkJCWFwcCgnTElOS0ZMQUdTJywgdG1wKQorLQkJZWxpZiB4LmVuZHN3aXRoKCgnLmEnLCAnLnNv JywgJy5keWxpYicsICcubGliJykpOgorKwkJZWxpZiB4LmVuZHN3aXRoKCgnLmEnLCAnLmR5bGli JywgJy5saWInKSkgb3Igc29fcmUuc2VhcmNoKHgpOgorIAkJCWFwcHUoJ0xJTktGTEFHUycsIHgp ICMgbm90IGNvb2wsICM3NjIKKyAJCWVsc2U6CisgCQkJc2VsZi50b19sb2coJ1VuaGFuZGxlZCBm bGFnICVyJyAlIHgpCitAQCAtMjQ2LDEzICsyNTQsMTUgQEAgZGVmIGV4ZWNfY2ZnKHNlbGYsIGt3 KToKKyAJKiBpZiBtb2R2ZXJzaW9uIGlzIGdpdmVuLCB0aGVuIHJldHVybiB0aGUgbW9kdWxlIHZl cnNpb24KKyAJKiBlbHNlLCBleGVjdXRlIHRoZSAqLWNvbmZpZyogcHJvZ3JhbSB3aXRoIHRoZSAq YXJncyogYW5kICp2YXJpYWJsZXMqIGdpdmVuLCBhbmQgc2V0IHRoZSBmbGFncyBvbiB0aGUgKmNv bmYuZW52LkZMQUdTX25hbWUqIHZhcmlhYmxlCisgCisrCTpwYXJhbSBwYXRoOiB0aGUgKiotY29u ZmlnIHByb2dyYW0gdG8gdXNlKioKKysJOnR5cGUgcGF0aDogbGlzdCBvZiBzdHJpbmcKKyAJOnBh cmFtIGF0bGVhc3RfcGtnY29uZmlnX3ZlcnNpb246IG1pbmltdW0gcGtnLWNvbmZpZyB2ZXJzaW9u IHRvIHVzZSAoZGlzYWJsZSBvdGhlciB0ZXN0cykKKyAJOnR5cGUgYXRsZWFzdF9wa2djb25maWdf dmVyc2lvbjogc3RyaW5nCisgCTpwYXJhbSBwYWNrYWdlOiBwYWNrYWdlIG5hbWUsIGZvciBleGFt cGxlICpndGsrLTIuMCoKKyAJOnR5cGUgcGFja2FnZTogc3RyaW5nCistCTpwYXJhbSB1c2VsaWJf c3RvcmU6IGlmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIGRlZmluZSBIQVZFXF8qbmFtZSouIEl0 IGlzIGFsc28gdXNlZCB0byBkZWZpbmUgKmNvbmYuZW52LkZMQUdTX25hbWUqIHZhcmlhYmxlcy4K KysJOnBhcmFtIHVzZWxpYl9zdG9yZTogaWYgdGhlIHRlc3QgaXMgc3VjY2Vzc2Z1bCwgZGVmaW5l IEhBVkVcXF8qbmFtZSouIEl0IGlzIGFsc28gdXNlZCB0byBkZWZpbmUgKmNvbmYuZW52LkZMQUdT X25hbWUqIHZhcmlhYmxlcy4KKyAJOnR5cGUgdXNlbGliX3N0b3JlOiBzdHJpbmcKKy0JOnBhcmFt IG1vZHZlcnNpb246IGlmIHByb3ZpZGVkLCByZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhlIGdpdmVu IG1vZHVsZSBhbmQgZGVmaW5lICpuYW1lKlxfVkVSU0lPTgorKwk6cGFyYW0gbW9kdmVyc2lvbjog aWYgcHJvdmlkZWQsIHJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gbW9kdWxlIGFuZCBk ZWZpbmUgKm5hbWUqXFxfVkVSU0lPTgorIAk6dHlwZSBtb2R2ZXJzaW9uOiBzdHJpbmcKKyAJOnBh cmFtIGFyZ3M6IGFyZ3VtZW50cyB0byBnaXZlIHRvICpwYWNrYWdlKiB3aGVuIHJldHJpZXZpbmcg ZmxhZ3MKKyAJOnR5cGUgYXJnczogbGlzdCBvZiBzdHJpbmcKK0BAIC0yNjAsNiArMjcwLDEyIEBA IGRlZiBleGVjX2NmZyhzZWxmLCBrdyk6CisgCTp0eXBlIHZhcmlhYmxlczogbGlzdCBvZiBzdHJp bmcKKyAJOnBhcmFtIGRlZmluZV92YXJpYWJsZTogYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gZGVm aW5lIChhbHNvIGluIGNvbmYuZW52LlBLR19DT05GSUdfREVGSU5FUykKKyAJOnR5cGUgZGVmaW5l X3ZhcmlhYmxlOiBkaWN0KHN0cmluZzogc3RyaW5nKQorKwk6cGFyYW0gcGtnX2NvbmZpZ19wYXRo OiBwYXRocyB3aGVyZSBwa2ctY29uZmlnIHNob3VsZCBzZWFyY2ggZm9yIC5wYyBjb25maWcgZmls ZXMgKG92ZXJyaWRlcyBlbnYuUEtHX0NPTkZJR19QQVRIIGlmIGV4aXN0cykKKysJOnR5cGUgcGtn X2NvbmZpZ19wYXRoOiBzdHJpbmcsIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IGNv bG9uCisrCTpwYXJhbSBmb3JjZV9zdGF0aWM6IGZvcmNlIHVzYWdlIG9mIHN0YXRpYyBsaWJyYXJp ZXMKKysJOnR5cGUgZm9yY2Vfc3RhdGljOiBib29sIGRlZmF1bHQgRmFsc2UKKysJOnBhcmFtIHBv c2l4OiB1c2FnZSBvZiBQT1NJWCBtb2RlIGZvciBzaGxleCBsZXhpY2FsIGFuYWxpeXNpcyBsaWJy YXJ5CisrCTp0eXBlIHBvc2l4OiBib29sIGRlZmF1bHQgVHJ1ZQorIAkiIiIKKyAKKyAJcGF0aCA9 IFV0aWxzLnRvX2xpc3Qoa3dbJ3BhdGgnXSkKK0BAIC0zMzQsNiArMzUwLDcgQEAgZGVmIGNoZWNr X2NmZyhzZWxmLCAqaywgKiprdyk6CisgCSIiIgorIAlDaGVja3MgZm9yIGNvbmZpZ3VyYXRpb24g ZmxhZ3MgdXNpbmcgYSAqKi1jb25maWcqKi1saWtlIHByb2dyYW0gKHBrZy1jb25maWcsIHNkbC1j b25maWcsIGV0YykuCisgCVRoaXMgd3JhcHMgaW50ZXJuYWwgY2FsbHMgdG8gOnB5OmZ1bmM6YHdh ZmxpYi5Ub29scy5jX2NvbmZpZy52YWxpZGF0ZV9jZmdgIGFuZCA6cHk6ZnVuYzpgd2FmbGliLlRv b2xzLmNfY29uZmlnLmV4ZWNfY2ZnYAorKwlzbyBjaGVjayBleGVjX2NmZyBwYXJhbWV0ZXJzIGRl c2NyaXB0aW9ucyBmb3IgbW9yZSBkZXRhaWxzIG9uIGt3IHBhc3NlZAorIAorIAlBIGZldyBleGFt cGxlczo6CisgCitAQCAtNjU5LDIwICs2NzYsMjEgQEAgY2xhc3MgdGVzdF9leGVjKFRhc2suVGFz ayk6CisgCSIiIgorIAljb2xvciA9ICdQSU5LJworIAlkZWYgcnVuKHNlbGYpOgorKwkJY21kID0g W3NlbGYuaW5wdXRzWzBdLmFic3BhdGgoKV0gKyBnZXRhdHRyKHNlbGYuZ2VuZXJhdG9yLCAndGVz dF9hcmdzJywgW10pCisgCQlpZiBnZXRhdHRyKHNlbGYuZ2VuZXJhdG9yLCAncnBhdGgnLCBOb25l KToKKyAJCQlpZiBnZXRhdHRyKHNlbGYuZ2VuZXJhdG9yLCAnZGVmaW5lX3JldCcsIEZhbHNlKToK Ky0JCQkJc2VsZi5nZW5lcmF0b3IuYmxkLnJldHZhbCA9IHNlbGYuZ2VuZXJhdG9yLmJsZC5jbWRf YW5kX2xvZyhbc2VsZi5pbnB1dHNbMF0uYWJzcGF0aCgpXSkKKysJCQkJc2VsZi5nZW5lcmF0b3Iu YmxkLnJldHZhbCA9IHNlbGYuZ2VuZXJhdG9yLmJsZC5jbWRfYW5kX2xvZyhjbWQpCisgCQkJZWxz ZToKKy0JCQkJc2VsZi5nZW5lcmF0b3IuYmxkLnJldHZhbCA9IHNlbGYuZ2VuZXJhdG9yLmJsZC5l eGVjX2NvbW1hbmQoW3NlbGYuaW5wdXRzWzBdLmFic3BhdGgoKV0pCisrCQkJCXNlbGYuZ2VuZXJh dG9yLmJsZC5yZXR2YWwgPSBzZWxmLmdlbmVyYXRvci5ibGQuZXhlY19jb21tYW5kKGNtZCkKKyAJ CWVsc2U6CisgCQkJZW52ID0gc2VsZi5lbnYuZW52IG9yIHt9CisgCQkJZW52LnVwZGF0ZShkaWN0 KG9zLmVudmlyb24pKQorIAkJCWZvciB2YXIgaW4gKCdMRF9MSUJSQVJZX1BBVEgnLCAnRFlMRF9M SUJSQVJZX1BBVEgnLCAnUEFUSCcpOgorIAkJCQllbnZbdmFyXSA9IHNlbGYuaW5wdXRzWzBdLnBh cmVudC5hYnNwYXRoKCkgKyBvcy5wYXRoLnBhdGhzZXAgKyBlbnYuZ2V0KHZhciwgJycpCisgCQkJ aWYgZ2V0YXR0cihzZWxmLmdlbmVyYXRvciwgJ2RlZmluZV9yZXQnLCBGYWxzZSk6CistCQkJCXNl bGYuZ2VuZXJhdG9yLmJsZC5yZXR2YWwgPSBzZWxmLmdlbmVyYXRvci5ibGQuY21kX2FuZF9sb2co W3NlbGYuaW5wdXRzWzBdLmFic3BhdGgoKV0sIGVudj1lbnYpCisrCQkJCXNlbGYuZ2VuZXJhdG9y LmJsZC5yZXR2YWwgPSBzZWxmLmdlbmVyYXRvci5ibGQuY21kX2FuZF9sb2coY21kLCBlbnY9ZW52 KQorIAkJCWVsc2U6CistCQkJCXNlbGYuZ2VuZXJhdG9yLmJsZC5yZXR2YWwgPSBzZWxmLmdlbmVy YXRvci5ibGQuZXhlY19jb21tYW5kKFtzZWxmLmlucHV0c1swXS5hYnNwYXRoKCldLCBlbnY9ZW52 KQorKwkJCQlzZWxmLmdlbmVyYXRvci5ibGQucmV0dmFsID0gc2VsZi5nZW5lcmF0b3IuYmxkLmV4 ZWNfY29tbWFuZChjbWQsIGVudj1lbnYpCisgCisgQGZlYXR1cmUoJ3Rlc3RfZXhlYycpCisgQGFm dGVyX21ldGhvZCgnYXBwbHlfbGluaycpCitAQCAtMTI2NiwxMCArMTI4NCwxMSBAQCBkZWYgdG9f bG9nKHNlbGYsICprLCAqKmt3KToKKyAJdGFza3MgPSBbXQorIAorIAlpZF90b190YXNrID0ge30K Ky0JZm9yIGRjdCBpbiBrOgorKwlmb3IgY291bnRlciwgZGN0IGluIGVudW1lcmF0ZShrKToKKyAJ CXggPSBUYXNrLmNsYXNzZXNbJ2NmZ3Rhc2snXShibGQ9YmxkLCBlbnY9Tm9uZSkKKyAJCXRhc2tz LmFwcGVuZCh4KQorIAkJeC5hcmdzID0gZGN0CisrCQl4LmFyZ3NbJ211bHRpY2hlY2tfY291bnRl ciddID0gY291bnRlcgorIAkJeC5ibGQgPSBibGQKKyAJCXguY29uZiA9IHNlbGYKKyAJCXguYXJn cyA9IGRjdAorZGlmZiAtLWdpdCBhL3dhZmxpYi9Ub29scy9jX3ByZXByb2MucHkgYi93YWZsaWIv VG9vbHMvY19wcmVwcm9jLnB5CitpbmRleCA3ZTA0YjRhN2MuLjY4ZTVmNWFlYSAxMDA2NDQKKy0t LSBhL3dhZmxpYi9Ub29scy9jX3ByZXByb2MucHkKKysrKyBiL3dhZmxpYi9Ub29scy9jX3ByZXBy b2MucHkKK0BAIC03NSwxMyArNzUsMTMgQEAgY2xhc3MgUHJlcHJvY0Vycm9yKEVycm9ycy5XYWZF cnJvcik6CisgCXJlLklHTk9SRUNBU0UgfCByZS5NVUxUSUxJTkUpCisgIiIiTWF0Y2ggI2luY2x1 ZGUgbGluZXMiIiIKKyAKKy1yZV9tYWMgPSByZS5jb21waWxlKCJeW2EtekEtWl9dXHcqIikKKyty ZV9tYWMgPSByZS5jb21waWxlKHIiXlthLXpBLVpfXVx3KiIpCisgIiIiTWF0Y2ggbWFjcm8gZGVm aW5pdGlvbnMiIiIKKyAKKyByZV9mdW4gPSByZS5jb21waWxlKCdeW2EtekEtWl9dW2EtekEtWjAt OV9dKlsoXScpCisgIiIiTWF0Y2ggbWFjcm8gZnVuY3Rpb25zIiIiCisgCistcmVfcHJhZ21hX29u Y2UgPSByZS5jb21waWxlKCdeXHMqb25jZVxzKicsIHJlLklHTk9SRUNBU0UpCisrcmVfcHJhZ21h X29uY2UgPSByZS5jb21waWxlKHInXlxzKm9uY2VccyonLCByZS5JR05PUkVDQVNFKQorICIiIk1h dGNoICNwcmFnbWEgb25jZSBzdGF0ZW1lbnRzIiIiCisgCisgcmVfbmwgPSByZS5jb21waWxlKCdc XFxcXHIqXG4nLCByZS5NVUxUSUxJTkUpCitAQCAtNjYwLDcgKzY2MCw3IEBAIGRlZiBleHRyYWN0 X21hY3JvKHR4dCk6CisgCQkJIyBlbXB0eSBkZWZpbmUsIGFzc2lnbiBhbiBlbXB0eSB0b2tlbgor IAkJCXJldHVybiAodiwgW1tdLCBbKCdUJywnJyldXSkKKyAKKy1yZV9pbmNsdWRlID0gcmUuY29t cGlsZSgnXlxzKig8KD86LiopPnwiKD86LiopIiknKQorK3JlX2luY2x1ZGUgPSByZS5jb21waWxl KHInXlxzKig8KD86LiopPnwiKD86LiopIiknKQorIGRlZiBleHRyYWN0X2luY2x1ZGUodHh0LCBk ZWZzKToKKyAJIiIiCisgCVByb2Nlc3MgYSBsaW5lIGluIHRoZSBmb3JtOjoKK2RpZmYgLS1naXQg YS93YWZsaWIvVG9vbHMvY190ZXN0cy5weSBiL3dhZmxpYi9Ub29scy9jX3Rlc3RzLnB5CitpbmRl eCBmODU4ZGY1NzYuLmJkZDE4NmM2YiAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Ub29scy9jX3Rlc3Rz LnB5CisrKysgYi93YWZsaWIvVG9vbHMvY190ZXN0cy5weQorQEAgLTE4MCw5ICsxODAsMTUgQEAg ZGVmIGNoZWNrX2xhcmdlX2ZpbGUoc2VsZiwgKiprdyk6CisgIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIAorIEVORElBTl9GUkFHTUVOVCA9ICcnJworKyNpZmRlZiBfTVNDX1ZFUgor KyNkZWZpbmUgdGVzdHNobGliX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKysjZWxzZQor KyNkZWZpbmUgdGVzdHNobGliX0VYUE9SVAorKyNlbmRpZgorKworIHNob3J0IGludCBhc2NpaV9t bVtdID0geyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAw IH07Cisgc2hvcnQgaW50IGFzY2lpX2lpW10gPSB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4 NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKy1pbnQgdXNlX2FzY2lpIChpbnQgaSkgeworK2lu dCB0ZXN0c2hsaWJfRVhQT1JUIHVzZV9hc2NpaSAoaW50IGkpIHsKKyAJcmV0dXJuIGFzY2lpX21t W2ldICsgYXNjaWlfaWlbaV07CisgfQorIHNob3J0IGludCBlYmNkaWNfaWlbXSA9IHsgMHg4OUQz LCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OworQEAgLTIwOCwx MiArMjE0LDEyIEBAIGRlZiBydW4oc2VsZik6CisgCQkJcmV0dXJuIC0xCisgCisgQGZlYXR1cmUo J2dyZXBfZm9yX2VuZGlhbm5lc3MnKQorLUBhZnRlcl9tZXRob2QoJ3Byb2Nlc3Nfc291cmNlJykK KytAYWZ0ZXJfbWV0aG9kKCdhcHBseV9saW5rJykKKyBkZWYgZ3JlcF9mb3JfZW5kaWFubmVzc19m dW4oc2VsZik6CisgCSIiIgorIAlVc2VkIGJ5IHRoZSBlbmRpYW5uZXNzIGNvbmZpZ3VyYXRpb24g dGVzdAorIAkiIiIKKy0Jc2VsZi5jcmVhdGVfdGFzaygnZ3JlcF9mb3JfZW5kaWFubmVzcycsIHNl bGYuY29tcGlsZWRfdGFza3NbMF0ub3V0cHV0c1swXSkKKysJc2VsZi5jcmVhdGVfdGFzaygnZ3Jl cF9mb3JfZW5kaWFubmVzcycsIHNlbGYubGlua190YXNrLm91dHB1dHNbMF0pCisgCisgQGNvbmYK KyBkZWYgY2hlY2tfZW5kaWFubmVzcyhzZWxmKToKK0BAIC0yMjMsNyArMjI5LDkgQEAgZGVmIGNo ZWNrX2VuZGlhbm5lc3Moc2VsZik6CisgCXRtcCA9IFtdCisgCWRlZiBjaGVja19tc2coc2VsZik6 CisgCQlyZXR1cm4gdG1wWzBdCistCXNlbGYuY2hlY2soZnJhZ21lbnQ9RU5ESUFOX0ZSQUdNRU5U LCBmZWF0dXJlcz0nYyBncmVwX2Zvcl9lbmRpYW5uZXNzJywKKy0JCW1zZz0nQ2hlY2tpbmcgZm9y IGVuZGlhbm5lc3MnLCBkZWZpbmU9J0VORElBTk5FU1MnLCB0bXA9dG1wLCBva21zZz1jaGVja19t c2cpCisrCisrCXNlbGYuY2hlY2soZnJhZ21lbnQ9RU5ESUFOX0ZSQUdNRU5ULCBmZWF0dXJlcz0n YyBjc2hsaWIgZ3JlcF9mb3JfZW5kaWFubmVzcycsCisrCQltc2c9J0NoZWNraW5nIGZvciBlbmRp YW5uZXNzJywgZGVmaW5lPSdFTkRJQU5ORVNTJywgdG1wPXRtcCwKKysJCW9rbXNnPWNoZWNrX21z ZywgY29uZmNhY2hlPU5vbmUpCisgCXJldHVybiB0bXBbMF0KKyAKK2RpZmYgLS1naXQgYS93YWZs aWIvVG9vbHMvY2Nyb290LnB5IGIvd2FmbGliL1Rvb2xzL2Njcm9vdC5weQoraW5kZXggNDg0ODQ2 ZjVmLi41MzM5OTI5MDMgMTAwNjQ0CistLS0gYS93YWZsaWIvVG9vbHMvY2Nyb290LnB5CisrKysg Yi93YWZsaWIvVG9vbHMvY2Nyb290LnB5CitAQCAtMTExLDcgKzExMSw3IEBAIGRlZiBhcHBseV9p bmNwYXRocyhzZWxmKToKKyAJCXRnID0gYmxkKGZlYXR1cmVzPSdpbmNsdWRlcycsIGluY2x1ZGVz PScuJykKKyAKKyAJVGhlIGZvbGRlcnMgb25seSBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBj dXJyZW50IGRpcmVjdG9yeSwgdGhlIGVxdWl2YWxlbnQgYnVpbGQgZGlyZWN0b3J5IGlzCistCWFk ZGVkIGF1dG9tYXRpY2FsbHkgKGZvciBoZWFkZXJzIGNyZWF0ZWQgaW4gdGhlIGJ1aWxkIGRpcmVj dG9yeSkuIFRoaXMgZW5hYmxlIHVzaW5nIGEgYnVpbGQgZGlyZWN0b3J5CisrCWFkZGVkIGF1dG9t YXRpY2FsbHkgKGZvciBoZWFkZXJzIGNyZWF0ZWQgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSkuIFRo aXMgZW5hYmxlcyB1c2luZyBhIGJ1aWxkIGRpcmVjdG9yeQorIAlvciBub3QgKGBgdG9wID09IG91 dGBgKS4KKyAKKyAJVGhpcyBtZXRob2Qgd2lsbCBhZGQgYSBsaXN0IG9mIG5vZGVzIHJlYWQgYnkg OnB5OmZ1bmM6YHdhZmxpYi5Ub29scy5jY3Jvb3QudG9faW5jbm9kZXNgIGluIGBgdGcuZW52LklO Q1BBVEhTYGAsCitAQCAtMTI4LDYgKzEyOCw3IEBAIGNsYXNzIGxpbmtfdGFzayhUYXNrLlRhc2sp OgorIAlCYXNlIGNsYXNzIGZvciBhbGwgbGluayB0YXNrcy4gQSB0YXNrIGdlbmVyYXRvciBpcyBz dXBwb3NlZCB0byBoYXZlIGF0IG1vc3Qgb25lIGxpbmsgdGFzayBib3VuZCBpbiB0aGUgYXR0cmli dXRlICpsaW5rX3Rhc2sqLiBTZWUgOnB5OmZ1bmM6YHdhZmxpYi5Ub29scy5jY3Jvb3QuYXBwbHlf bGlua2AuCisgCisgCS4uIGluaGVyaXRhbmNlLWRpYWdyYW06OiB3YWZsaWIuVG9vbHMuY2Nyb290 LnN0bGlua190YXNrIHdhZmxpYi5Ub29scy5jLmNwcm9ncmFtIHdhZmxpYi5Ub29scy5jLmNzaGxp YiB3YWZsaWIuVG9vbHMuY3h4LmN4eHN0bGliICB3YWZsaWIuVG9vbHMuY3h4LmN4eHByb2dyYW0g d2FmbGliLlRvb2xzLmN4eC5jeHhzaGxpYiB3YWZsaWIuVG9vbHMuZC5kcHJvZ3JhbSB3YWZsaWIu VG9vbHMuZC5kc2hsaWIgd2FmbGliLlRvb2xzLmQuZHN0bGliIHdhZmxpYi5Ub29scy5jY3Jvb3Qu ZmFrZV9zaGxpYiB3YWZsaWIuVG9vbHMuY2Nyb290LmZha2Vfc3RsaWIgd2FmbGliLlRvb2xzLmFz bS5hc21wcm9ncmFtIHdhZmxpYi5Ub29scy5hc20uYXNtc2hsaWIgd2FmbGliLlRvb2xzLmFzbS5h c21zdGxpYgorKwkgIDp0b3AtY2xhc3Nlczogd2FmbGliLlRvb2xzLmNjcm9vdC5saW5rX3Rhc2sK KyAJIiIiCisgCWNvbG9yICAgPSAnWUVMTE9XJworIAorQEAgLTIzOCw2ICsyMzksMTcgQEAgZGVm IHdyYXAoc2VsZik6CisgCXNldGF0dHIoY2xzLCAncnVuJywgd3JhcCkKKyBybV90Z3Qoc3RsaW5r X3Rhc2spCisgCisrQGZlYXR1cmUoJ3NraXBfc3RsaWJfbGlua19kZXBzJykKKytAYmVmb3JlX21l dGhvZCgncHJvY2Vzc191c2UnKQorK2RlZiBhcHBseV9za2lwX3N0bGliX2xpbmtfZGVwcyhzZWxm KToKKysJIiIiCisrCVRoaXMgZW5hYmxlcyBhbiBvcHRpbWl6YXRpb24gaW4gdGhlIDpweTpmdW5j OndhZmlsYi5Ub29scy5jY3Jvb3QucHJvY2Vzc2VzX3VzZTogbWV0aG9kIHRoYXQgc2tpcHMgZGVw ZW5kZW5jeSBhbmQKKysJbGluayBmbGFnIG9wdGltaXphdGlvbnMgZm9yIHRhcmdldHMgdGhhdCBn ZW5lcmF0ZSBzdGF0aWMgbGlicmFyaWVzICh2aWEgdGhlIDpweTpjbGFzczpUb29scy5jY3Jvb3Qu c3RsaW5rX3Rhc2sgdGFzaykuCisrCVRoZSBhY3R1YWwgYmVoYXZpb3IgaXMgaW1wbGVtZW50ZWQg aW4gOnB5OmZ1bmM6d2FmaWxiLlRvb2xzLmNjcm9vdC5wcm9jZXNzZXNfdXNlOiBtZXRob2Qgc28g dGhpcyBmZWF0dXJlIG9ubHkgdGVsbHMgd2FmCisrCXRvIGVuYWJsZSB0aGUgbmV3IGJlaGF2aW9y LgorKwkiIiIKKysJc2VsZi5lbnYuU0tJUF9TVExJQl9MSU5LX0RFUFMgPSBUcnVlCisrCisgQGZl YXR1cmUoJ2MnLCAnY3h4JywgJ2QnLCAnZmMnLCAnYXNtJykKKyBAYWZ0ZXJfbWV0aG9kKCdwcm9j ZXNzX3NvdXJjZScpCisgZGVmIGFwcGx5X2xpbmsoc2VsZik6CitAQCAtMzg2LDcgKzM5OCwxMSBA QCBkZWYgYnVpbGQoYmxkKToKKyAJCXkgPSBzZWxmLmJsZC5nZXRfdGdlbl9ieV9uYW1lKHgpCisg CQl2YXIgPSB5LnRtcF91c2VfdmFyCisgCQlpZiB2YXIgYW5kIGxpbmtfdGFzazoKKy0JCQlpZiB2 YXIgPT0gJ0xJQicgb3IgeS50bXBfdXNlX3N0bGliIG9yIHggaW4gbmFtZXM6CisrCQkJaWYgc2Vs Zi5lbnYuU0tJUF9TVExJQl9MSU5LX0RFUFMgYW5kIGlzaW5zdGFuY2UobGlua190YXNrLCBzdGxp bmtfdGFzayk6CisrCQkJCSMgSWYgdGhlIHNraXBfc3RsaWJfbGlua19kZXBzIGZlYXR1cmUgaXMg ZW5hYmxlZCB0aGVuIHdlIHNob3VsZAorKwkJCQkjIGF2b2lkIGFkZGluZyBsaWIgZGVwcyB0byB0 aGUgc3RsaW5rX3Rhc2sgaW5zdGFuY2UuCisrCQkJCXBhc3MKKysJCQllbGlmIHZhciA9PSAnTElC JyBvciB5LnRtcF91c2Vfc3RsaWIgb3IgeCBpbiBuYW1lczoKKyAJCQkJc2VsZi5lbnYuYXBwZW5k X3ZhbHVlKHZhciwgW3kudGFyZ2V0W3kudGFyZ2V0LnJmaW5kKG9zLnNlcCkgKyAxOl1dKQorIAkJ CQlzZWxmLmxpbmtfdGFzay5kZXBfbm9kZXMuZXh0ZW5kKHkubGlua190YXNrLm91dHB1dHMpCisg CQkJCXRtcF9wYXRoID0geS5saW5rX3Rhc2sub3V0cHV0c1swXS5wYXJlbnQucGF0aF9mcm9tKHNl bGYuZ2V0X2N3ZCgpKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9Ub29scy9jb21waWxlcl9jLnB5IGIv d2FmbGliL1Rvb2xzL2NvbXBpbGVyX2MucHkKK2luZGV4IDJkYmEzZjgyNy4uZTAzM2NlNmM1IDEw MDY0NAorLS0tIGEvd2FmbGliL1Rvb2xzL2NvbXBpbGVyX2MucHkKKysrKyBiL3dhZmxpYi9Ub29s cy9jb21waWxlcl9jLnB5CitAQCAtMzYsMTggKzM2LDE5IEBAIGRlZiBidWlsZChibGQpOgorIGZy b20gd2FmbGliLkxvZ3MgaW1wb3J0IGRlYnVnCisgCisgY19jb21waWxlciA9IHsKKy0nd2luMzIn OiAgWydtc3ZjJywgJ2djYycsICdjbGFuZyddLAorLSdjeWd3aW4nOiBbJ2djYyddLAorLSdkYXJ3 aW4nOiBbJ2NsYW5nJywgJ2djYyddLAorLSdhaXgnOiAgICBbJ3hsYycsICdnY2MnLCAnY2xhbmcn XSwKKy0nbGludXgnOiAgWydnY2MnLCAnY2xhbmcnLCAnaWNjJ10sCistJ3N1bm9zJzogIFsnc3Vu Y2MnLCAnZ2NjJ10sCistJ2lyaXgnOiAgIFsnZ2NjJywgJ2lyaXhjYyddLAorLSdocHV4JzogICBb J2djYyddLAorLSdvc2YxVic6ICBbJ2djYyddLAorLSdnbnUnOiAgICBbJ2djYycsICdjbGFuZydd LAorLSdqYXZhJzogICBbJ2djYycsICdtc3ZjJywgJ2NsYW5nJywgJ2ljYyddLAorLSdkZWZhdWx0 JzpbJ2NsYW5nJywgJ2djYyddLAorKyd3aW4zMic6ICAgICAgIFsnbXN2YycsICdnY2MnLCAnY2xh bmcnXSwKKysnY3lnd2luJzogICAgICBbJ2djYycsICdjbGFuZyddLAorKydkYXJ3aW4nOiAgICAg IFsnY2xhbmcnLCAnZ2NjJ10sCisrJ2FpeCc6ICAgICAgICAgWyd4bGMnLCAnZ2NjJywgJ2NsYW5n J10sCisrJ2xpbnV4JzogICAgICAgWydnY2MnLCAnY2xhbmcnLCAnaWNjJ10sCisrJ3N1bm9zJzog ICAgICAgWydzdW5jYycsICdnY2MnXSwKKysnaXJpeCc6ICAgICAgICBbJ2djYycsICdpcml4Y2Mn XSwKKysnaHB1eCc6ICAgICAgICBbJ2djYyddLAorKydvc2YxVic6ICAgICAgIFsnZ2NjJ10sCisr J2dudSc6ICAgICAgICAgWydnY2MnLCAnY2xhbmcnXSwKKysnamF2YSc6ICAgICAgICBbJ2djYycs ICdtc3ZjJywgJ2NsYW5nJywgJ2ljYyddLAorKydnbnVrZnJlZWJzZCc6IFsnZ2NjJywgJ2NsYW5n J10sCisrJ2RlZmF1bHQnOiAgICAgWydjbGFuZycsICdnY2MnXSwKKyB9CisgIiIiCisgRGljdCBt YXBwaW5nIHBsYXRmb3JtIG5hbWVzIHRvIFdhZiB0b29scyBmaW5kaW5nIHNwZWNpZmljIEMgY29t cGlsZXJzOjoKK2RpZmYgLS1naXQgYS93YWZsaWIvVG9vbHMvY29tcGlsZXJfY3h4LnB5IGIvd2Fm bGliL1Rvb2xzL2NvbXBpbGVyX2N4eC5weQoraW5kZXggMWFmNjVhMjI2Li40MjY1OGM1ODQgMTAw NjQ0CistLS0gYS93YWZsaWIvVG9vbHMvY29tcGlsZXJfY3h4LnB5CisrKysgYi93YWZsaWIvVG9v bHMvY29tcGlsZXJfY3h4LnB5CitAQCAtMzcsMTggKzM3LDE5IEBAIGRlZiBidWlsZChibGQpOgor IGZyb20gd2FmbGliLkxvZ3MgaW1wb3J0IGRlYnVnCisgCisgY3h4X2NvbXBpbGVyID0geworLSd3 aW4zMic6ICBbJ21zdmMnLCAnZysrJywgJ2NsYW5nKysnXSwKKy0nY3lnd2luJzogWydnKysnXSwK Ky0nZGFyd2luJzogWydjbGFuZysrJywgJ2crKyddLAorLSdhaXgnOiAgICBbJ3hsYysrJywgJ2cr KycsICdjbGFuZysrJ10sCistJ2xpbnV4JzogIFsnZysrJywgJ2NsYW5nKysnLCAnaWNwYyddLAor LSdzdW5vcyc6ICBbJ3N1bmMrKycsICdnKysnXSwKKy0naXJpeCc6ICAgWydnKysnXSwKKy0naHB1 eCc6ICAgWydnKysnXSwKKy0nb3NmMVYnOiAgWydnKysnXSwKKy0nZ251JzogICAgWydnKysnLCAn Y2xhbmcrKyddLAorLSdqYXZhJzogICBbJ2crKycsICdtc3ZjJywgJ2NsYW5nKysnLCAnaWNwYydd LAorLSdkZWZhdWx0JzogWydjbGFuZysrJywgJ2crKyddCisrJ3dpbjMyJzogICAgICAgWydtc3Zj JywgJ2crKycsICdjbGFuZysrJ10sCisrJ2N5Z3dpbic6ICAgICAgWydnKysnLCAnY2xhbmcrKydd LAorKydkYXJ3aW4nOiAgICAgIFsnY2xhbmcrKycsICdnKysnXSwKKysnYWl4JzogICAgICAgICBb J3hsYysrJywgJ2crKycsICdjbGFuZysrJ10sCisrJ2xpbnV4JzogICAgICAgWydnKysnLCAnY2xh bmcrKycsICdpY3BjJ10sCisrJ3N1bm9zJzogICAgICAgWydzdW5jKysnLCAnZysrJ10sCisrJ2ly aXgnOiAgICAgICAgWydnKysnXSwKKysnaHB1eCc6ICAgICAgICBbJ2crKyddLAorKydvc2YxVic6 ICAgICAgIFsnZysrJ10sCisrJ2dudSc6ICAgICAgICAgWydnKysnLCAnY2xhbmcrKyddLAorKydq YXZhJzogICAgICAgIFsnZysrJywgJ21zdmMnLCAnY2xhbmcrKycsICdpY3BjJ10sCisrJ2dudWtm cmVlYnNkJzogWydnKysnLCAnY2xhbmcrKyddLAorKydkZWZhdWx0JzogICAgIFsnY2xhbmcrKycs ICdnKysnXQorIH0KKyAiIiIKKyBEaWN0IG1hcHBpbmcgdGhlIHBsYXRmb3JtIG5hbWVzIHRvIFdh ZiB0b29scyBmaW5kaW5nIHNwZWNpZmljIEMrKyBjb21waWxlcnM6OgorZGlmZiAtLWdpdCBhL3dh ZmxpYi9Ub29scy9pcml4Y2MucHkgYi93YWZsaWIvVG9vbHMvaXJpeGNjLnB5CitpbmRleCBjM2Fl MWFjOTEuLjAzMzVjMTNjYiAxMDA2NDQKKy0tLSBhL3dhZmxpYi9Ub29scy9pcml4Y2MucHkKKysr KyBiL3dhZmxpYi9Ub29scy9pcml4Y2MucHkKK0BAIC0xMywyMiArMTMsMTEgQEAKKyBAY29uZgor IGRlZiBmaW5kX2lyaXhjYyhjb25mKToKKyAJdiA9IGNvbmYuZW52CistCWNjID0gTm9uZQorLQlp ZiB2LkNDOgorLQkJY2MgPSB2LkNDCistCWVsaWYgJ0NDJyBpbiBjb25mLmVudmlyb246CistCQlj YyA9IGNvbmYuZW52aXJvblsnQ0MnXQorLQlpZiBub3QgY2M6CistCQljYyA9IGNvbmYuZmluZF9w cm9ncmFtKCdjYycsIHZhcj0nQ0MnKQorLQlpZiBub3QgY2M6CistCQljb25mLmZhdGFsKCdpcml4 Y2Mgd2FzIG5vdCBmb3VuZCcpCistCisrCWNjID0gY29uZi5maW5kX3Byb2dyYW0oJ2NjJywgdmFy PSdDQycpCisgCXRyeToKKyAJCWNvbmYuY21kX2FuZF9sb2coY2MgKyBbJy12ZXJzaW9uJ10pCisg CWV4Y2VwdCBFcnJvcnMuV2FmRXJyb3I6CisgCQljb25mLmZhdGFsKCclciAtdmVyc2lvbiBjb3Vs ZCBub3QgYmUgZXhlY3V0ZWQnICUgY2MpCistCistCXYuQ0MgPSBjYworIAl2LkNDX05BTUUgPSAn aXJpeCcKKyAKKyBAY29uZgorQEAgLTU3LDcgKzQ2LDYgQEAgZGVmIGlyaXhjY19jb21tb25fZmxh Z3MoY29uZik6CisgCisgZGVmIGNvbmZpZ3VyZShjb25mKToKKyAJY29uZi5maW5kX2lyaXhjYygp CistCWNvbmYuZmluZF9jcHAoKQorIAljb25mLmZpbmRfYXIoKQorIAljb25mLmlyaXhjY19jb21t b25fZmxhZ3MoKQorIAljb25mLmNjX2xvYWRfdG9vbHMoKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9U b29scy9tc3ZjLnB5IGIvd2FmbGliL1Rvb2xzL21zdmMucHkKK2luZGV4IDE3YjM0N2Q0NS4uZDYw ZjY3MDI2IDEwMDY0NAorLS0tIGEvd2FmbGliL1Rvb2xzL21zdmMucHkKKysrKyBiL3dhZmxpYi9U b29scy9tc3ZjLnB5CitAQCAtOTksMTAgKzk5LDMxIEBAIGRlZiBidWlsZChibGQpOgorICIiIkxp c3Qgb2YgaWNsIHBsYXRmb3JtcyIiIgorIAorIGRlZiBvcHRpb25zKG9wdCk6CistCW9wdC5hZGRf b3B0aW9uKCctLW1zdmNfdmVyc2lvbicsIHR5cGU9J3N0cmluZycsIGhlbHAgPSAnbXN2YyB2ZXJz aW9uLCBlZzogIm1zdmMgMTAuMCxtc3ZjIDkuMCInLCBkZWZhdWx0PScnKQorKwlkZWZhdWx0X3Zl ciA9ICcnCisrCXZzdmVyID0gb3MuZ2V0ZW52KCdWU0NNRF9WRVInKQorKwlpZiB2c3ZlcjoKKysJ CW0gPSByZS5tYXRjaChyJyheXGQrXC5cZCspLionLCB2c3ZlcikKKysJCWlmIG06CisrCQkJZGVm YXVsdF92ZXIgPSAnbXN2YyAlcycgJSBtLmdyb3VwKDEpCisrCW9wdC5hZGRfb3B0aW9uKCctLW1z dmNfdmVyc2lvbicsIHR5cGU9J3N0cmluZycsIGhlbHAgPSAnbXN2YyB2ZXJzaW9uLCBlZzogIm1z dmMgMTAuMCxtc3ZjIDkuMCInLCBkZWZhdWx0PWRlZmF1bHRfdmVyKQorIAlvcHQuYWRkX29wdGlv bignLS1tc3ZjX3RhcmdldHMnLCB0eXBlPSdzdHJpbmcnLCBoZWxwID0gJ21zdmMgdGFyZ2V0cywg ZWc6ICJ4NjQsYXJtIicsIGRlZmF1bHQ9JycpCisgCW9wdC5hZGRfb3B0aW9uKCctLW5vLW1zdmMt bGF6eScsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBoZWxwID0gJ2xhemlseSBjaGVjayBtc3ZjIHRh cmdldCBlbnZpcm9ubWVudHMnLCBkZWZhdWx0PVRydWUsIGRlc3Q9J21zdmNfbGF6eScpCisgCisr Y2xhc3MgTVNWQ1ZlcnNpb24ob2JqZWN0KToKKysJZGVmIF9faW5pdF9fKHNlbGYsIHZlcik6Cisr CQltID0gcmUuc2VhcmNoKHInXiguKilccysoXGQrWy5dXGQrKScsIHZlcikKKysJCWlmIG06Cisr CQkJc2VsZi5uYW1lID0gbS5ncm91cCgxKQorKwkJCXNlbGYubnVtYmVyID0gZmxvYXQobS5ncm91 cCgyKSkKKysJCWVsc2U6CisrCQkJc2VsZi5uYW1lID0gdmVyCisrCQkJc2VsZi5udW1iZXIgPSAw LgorKworKwlkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKysJCWlmIHNlbGYubnVtYmVyID09IG90 aGVyLm51bWJlcjoKKysJCQlyZXR1cm4gc2VsZi5uYW1lIDwgb3RoZXIubmFtZQorKwkJcmV0dXJu IHNlbGYubnVtYmVyIDwgb3RoZXIubnVtYmVyCisrCisgQGNvbmYKKyBkZWYgc2V0dXBfbXN2Yyhj b25mLCB2ZXJzaW9uZGljdCk6CisgCSIiIgorQEAgLTExOSw3ICsxNDAsNyBAQCBkZWYgc2V0dXBf bXN2Yyhjb25mLCB2ZXJzaW9uZGljdCk6CisgCQlwbGF0Zm9ybXM9VXRpbHMudG9fbGlzdChjb25m LmVudi5NU1ZDX1RBUkdFVFMpIG9yIFtpIGZvciBpLGogaW4gYWxsX21zdmNfcGxhdGZvcm1zK2Fs bF9pY2xfcGxhdGZvcm1zK2FsbF93aW5jZV9wbGF0Zm9ybXNdCisgCWRlc2lyZWRfdmVyc2lvbnMg PSBnZXRhdHRyKE9wdGlvbnMub3B0aW9ucywgJ21zdmNfdmVyc2lvbicsICcnKS5zcGxpdCgnLCcp CisgCWlmIGRlc2lyZWRfdmVyc2lvbnMgPT0gWycnXToKKy0JCWRlc2lyZWRfdmVyc2lvbnMgPSBj b25mLmVudi5NU1ZDX1ZFUlNJT05TIG9yIGxpc3QocmV2ZXJzZWQoc29ydGVkKHZlcnNpb25kaWN0 LmtleXMoKSkpKQorKwkJZGVzaXJlZF92ZXJzaW9ucyA9IGNvbmYuZW52Lk1TVkNfVkVSU0lPTlMg b3IgbGlzdChzb3J0ZWQodmVyc2lvbmRpY3Qua2V5cygpLCBrZXk9TVNWQ1ZlcnNpb24sIHJldmVy c2U9VHJ1ZSkpCisgCisgCSMgT3ZlcnJpZGUgbGF6eSBkZXRlY3Rpb24gYnkgZXZhbHVhdGluZyBh ZnRlciB0aGUgZmFjdC4KKyAJbGF6eV9kZXRlY3QgPSBnZXRhdHRyKE9wdGlvbnMub3B0aW9ucywg J21zdmNfbGF6eScsIFRydWUpCitAQCAtMTg3LDcgKzIwOCw3IEBAIGRlZiBnZXRfbXN2Y192ZXJz aW9uKGNvbmYsIGNvbXBpbGVyLCB2ZXJzaW9uLCB0YXJnZXQsIHZjdmFycyk6CisgZWNobyBJTkNM VURFPSUlSU5DTFVERSUlCisgZWNobyBMSUI9JSVMSUIlJTslJUxJQlBBVEglJQorICIiIiAlICh2 Y3ZhcnMsdGFyZ2V0KSkKKy0Jc291dCA9IGNvbmYuY21kX2FuZF9sb2coWydjbWQuZXhlJywgJy9F Om9uJywgJy9WOm9uJywgJy9DJywgYmF0ZmlsZS5hYnNwYXRoKCldKQorKwlzb3V0ID0gY29uZi5j bWRfYW5kX2xvZyhbJ2NtZC5leGUnLCAnL0U6b24nLCAnL1Y6b24nLCAnL0MnLCBiYXRmaWxlLmFi c3BhdGgoKV0sIHN0ZGluPWdldGF0dHIoVXRpbHMuc3VicHJvY2VzcywgJ0RFVk5VTEwnLCBOb25l KSkKKyAJbGluZXMgPSBzb3V0LnNwbGl0bGluZXMoKQorIAorIAlpZiBub3QgbGluZXNbMF06CitA QCAtMjgxLDcgKzMwMiw3IEBAIGRlZiBnYXRoZXJfd2luY2Vfc3VwcG9ydGVkX3BsYXRmb3Jtcygp OgorIAorIGRlZiBnYXRoZXJfbXN2Y19kZXRlY3RlZF92ZXJzaW9ucygpOgorIAkjRGV0ZWN0ZWQg TVNWQyB2ZXJzaW9ucyEKKy0JdmVyc2lvbl9wYXR0ZXJuID0gcmUuY29tcGlsZSgnXihcZFxkP1wu XGRcZD8pKEV4cCk/JCcpCisrCXZlcnNpb25fcGF0dGVybiA9IHJlLmNvbXBpbGUocideKFxkXGQ/ XC5cZFxkPykoRXhwKT8kJykKKyAJZGV0ZWN0ZWRfdmVyc2lvbnMgPSBbXQorIAlmb3IgdmN2ZXIs dmN2YXIgaW4gKCgnVkNFeHByZXNzJywnRXhwJyksICgnVmlzdWFsU3R1ZGlvJywnJykpOgorIAkJ cHJlZml4ID0gJ1NPRlRXQVJFXFxXb3c2NDMybm9kZVxcTWljcm9zb2Z0XFwnICsgdmN2ZXIKK0BA IC0zNjcsNyArMzg4LDcgQEAgZGVmIGdhdGhlcl93c2RrX3ZlcnNpb25zKGNvbmYsIHZlcnNpb25z KToKKyAJOnBhcmFtIHZlcnNpb25zOiBsaXN0IHRvIG1vZGlmeQorIAk6dHlwZSB2ZXJzaW9uczog bGlzdAorIAkiIiIKKy0JdmVyc2lvbl9wYXR0ZXJuID0gcmUuY29tcGlsZSgnXnYuLj8uP1wuLi4/ Lj8nKQorKwl2ZXJzaW9uX3BhdHRlcm4gPSByZS5jb21waWxlKHInXnYuLj8uP1wuLi4/Lj8nKQor IAl0cnk6CisgCQlhbGxfdmVyc2lvbnMgPSBVdGlscy53aW5yZWcuT3BlbktleShVdGlscy53aW5y ZWcuSEtFWV9MT0NBTF9NQUNISU5FLCAnU09GVFdBUkVcXFdvdzY0MzJub2RlXFxNaWNyb3NvZnRc XE1pY3Jvc29mdCBTREtzXFxXaW5kb3dzJykKKyAJZXhjZXB0IE9TRXJyb3I6CitAQCAtNTI1LDcg KzU0Niw3IEBAIGRlZiBnYXRoZXJfaWNsX3ZlcnNpb25zKGNvbmYsIHZlcnNpb25zKToKKyAJOnBh cmFtIHZlcnNpb25zOiBsaXN0IHRvIG1vZGlmeQorIAk6dHlwZSB2ZXJzaW9uczogbGlzdAorIAki IiIKKy0JdmVyc2lvbl9wYXR0ZXJuID0gcmUuY29tcGlsZSgnXi4uLj8uP1wuLi4uPy4/JykKKysJ dmVyc2lvbl9wYXR0ZXJuID0gcmUuY29tcGlsZShyJ14uLi4/Lj9cLi4uLj8uPycpCisgCXRyeToK KyAJCWFsbF92ZXJzaW9ucyA9IFV0aWxzLndpbnJlZy5PcGVuS2V5KFV0aWxzLndpbnJlZy5IS0VZ X0xPQ0FMX01BQ0hJTkUsICdTT0ZUV0FSRVxcV293NjQzMm5vZGVcXEludGVsXFxDb21waWxlcnNc XEMrKycpCisgCWV4Y2VwdCBPU0Vycm9yOgorQEAgLTU3OSw3ICs2MDAsNyBAQCBkZWYgZ2F0aGVy X2ludGVsX2NvbXBvc2VyX3ZlcnNpb25zKGNvbmYsIHZlcnNpb25zKToKKyAJOnBhcmFtIHZlcnNp b25zOiBsaXN0IHRvIG1vZGlmeQorIAk6dHlwZSB2ZXJzaW9uczogbGlzdAorIAkiIiIKKy0JdmVy c2lvbl9wYXR0ZXJuID0gcmUuY29tcGlsZSgnXi4uLj8uP1wuLi4/Lj8uPycpCisrCXZlcnNpb25f cGF0dGVybiA9IHJlLmNvbXBpbGUocideLi4uPy4/XC4uLj8uPy4/JykKKyAJdHJ5OgorIAkJYWxs X3ZlcnNpb25zID0gVXRpbHMud2lucmVnLk9wZW5LZXkoVXRpbHMud2lucmVnLkhLRVlfTE9DQUxf TUFDSElORSwgJ1NPRlRXQVJFXFxXb3c2NDMybm9kZVxcSW50ZWxcXFN1aXRlcycpCisgCWV4Y2Vw dCBPU0Vycm9yOgorQEAgLTY4Myw3ICs3MDQsNyBAQCBkZWYgZmluZF9sdF9uYW1lc19tc3ZjKHNl bGYsIGxpYm5hbWUsIGlzX3N0YXRpYz1GYWxzZSk6CisgCQkJCWlmIG5vdCBpc19zdGF0aWMgYW5k IGx0ZGljdC5nZXQoJ2xpYnJhcnlfbmFtZXMnLCAnJyk6CisgCQkJCQlkbGxuYW1lcz1sdGRpY3Rb J2xpYnJhcnlfbmFtZXMnXS5zcGxpdCgpCisgCQkJCQlkbGw9ZGxsbmFtZXNbMF0ubG93ZXIoKQor LQkJCQkJZGxsPXJlLnN1YignXC5kbGwkJywgJycsIGRsbCkKKysJCQkJCWRsbD1yZS5zdWIocidc LmRsbCQnLCAnJywgZGxsKQorIAkJCQkJcmV0dXJuIChsdF9saWJkaXIsIGRsbCwgRmFsc2UpCisg CQkJCWVsaWYgbHRkaWN0LmdldCgnb2xkX2xpYnJhcnknLCAnJyk6CisgCQkJCQlvbGliPWx0ZGlj dFsnb2xkX2xpYnJhcnknXQorQEAgLTcwMCw3ICs3MjEsNyBAQCBkZWYgZmluZF9sdF9uYW1lc19t c3ZjKHNlbGYsIGxpYm5hbWUsIGlzX3N0YXRpYz1GYWxzZSk6CisgQGNvbmYKKyBkZWYgbGlibmFt ZV9tc3ZjKHNlbGYsIGxpYm5hbWUsIGlzX3N0YXRpYz1GYWxzZSk6CisgCWxpYiA9IGxpYm5hbWUu bG93ZXIoKQorLQlsaWIgPSByZS5zdWIoJ1wubGliJCcsJycsbGliKQorKwlsaWIgPSByZS5zdWIo cidcLmxpYiQnLCcnLGxpYikKKyAKKyAJaWYgbGliIGluIGdfbXN2Y19zeXN0ZW1saWJzOgorIAkJ cmV0dXJuIGxpYgorQEAgLTc0NywxMSArNzY4LDExIEBAIGRlZiBsaWJuYW1lX21zdmMoc2VsZiwg bGlibmFtZSwgaXNfc3RhdGljPUZhbHNlKToKKyAJCWZvciBsaWJuIGluIGxpYm5hbWVzOgorIAkJ CWlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwYXRoLCBsaWJuKSk6CisgCQkJCUxvZ3Mu ZGVidWcoJ21zdmM6IGxpYiBmb3VuZDogJXMnLCBvcy5wYXRoLmpvaW4ocGF0aCxsaWJuKSkKKy0J CQkJcmV0dXJuIHJlLnN1YignXC5saWIkJywgJycsbGlibikKKysJCQkJcmV0dXJuIHJlLnN1Yihy J1wubGliJCcsICcnLGxpYm4pCisgCisgCSNpZiBubyBsaWIgY2FuIGJlIGZvdW5kLCBqdXN0IHJl dHVybiB0aGUgbGlibmFtZSBhcyBtc3ZjIGV4cGVjdHMgaXQKKyAJc2VsZi5mYXRhbCgnVGhlIGxp YnJhcnkgJXIgY291bGQgbm90IGJlIGZvdW5kJyAlIGxpYm5hbWUpCistCXJldHVybiByZS5zdWIo J1wubGliJCcsICcnLCBsaWJuYW1lKQorKwlyZXR1cm4gcmUuc3ViKHInXC5saWIkJywgJycsIGxp Ym5hbWUpCisgCisgQGNvbmYKKyBkZWYgY2hlY2tfbGliX21zdmMoc2VsZiwgbGlibmFtZSwgaXNf c3RhdGljPUZhbHNlLCB1c2VsaWJfc3RvcmU9Tm9uZSk6CitAQCAtOTY5LDcgKzk5MCw3IEBAIGRl ZiBidWlsZChibGQpOgorIAlpZiBub3QgaXNfc3RhdGljOgorIAkJZm9yIGYgaW4gc2VsZi5lbnYu TElOS0ZMQUdTOgorIAkJCWQgPSBmLmxvd2VyKCkKKy0JCQlpZiBkWzE6XSA9PSAnZGVidWcnOgor KwkJCWlmIGRbMTpdIGluICgnZGVidWcnLCAnZGVidWc6ZnVsbCcsICdkZWJ1ZzpmYXN0bGluaycp OgorIAkJCQlwZGJub2RlID0gc2VsZi5saW5rX3Rhc2sub3V0cHV0c1swXS5jaGFuZ2VfZXh0KCcu cGRiJykKKyAJCQkJc2VsZi5saW5rX3Rhc2sub3V0cHV0cy5hcHBlbmQocGRibm9kZSkKKyAKK2Rp ZmYgLS1naXQgYS93YWZsaWIvVG9vbHMvd2FmX3VuaXRfdGVzdC5weSBiL3dhZmxpYi9Ub29scy93 YWZfdW5pdF90ZXN0LnB5CitpbmRleCA3NGQ2YzA1NjEuLjhjZmY4OWJkZSAxMDA2NDQKKy0tLSBh L3dhZmxpYi9Ub29scy93YWZfdW5pdF90ZXN0LnB5CisrKysgYi93YWZsaWIvVG9vbHMvd2FmX3Vu aXRfdGVzdC5weQorQEAgLTk3LDYgKzk3LDcgQEAgZGVmIG1ha2VfaW50ZXJwcmV0ZWRfdGVzdChz ZWxmKToKKyAJCWlmIGlzaW5zdGFuY2Uodiwgc3RyKToKKyAJCQl2ID0gdi5zcGxpdChvcy5wYXRo c2VwKQorIAkJc2VsZi51dF9lbnZba10gPSBvcy5wYXRoc2VwLmpvaW4ocCArIHYpCisrCXNlbGYu ZW52LmFwcGVuZF92YWx1ZSgnVVRfREVQUycsIFsnJXIlcicgJSAoa2V5LCBzZWxmLnV0X2Vudltr ZXldKSBmb3Iga2V5IGluIHNlbGYudXRfZW52XSkKKyAKKyBAZmVhdHVyZSgndGVzdCcpCisgQGFm dGVyX21ldGhvZCgnYXBwbHlfbGluaycsICdwcm9jZXNzX3VzZScpCitAQCAtMTA4LDcgKzEwOSw4 IEBAIGRlZiBtYWtlX3Rlc3Qoc2VsZik6CisgCXRzayA9IHNlbGYuY3JlYXRlX3Rhc2soJ3V0ZXN0 Jywgc2VsZi5saW5rX3Rhc2sub3V0cHV0cykKKyAJaWYgZ2V0YXR0cihzZWxmLCAndXRfc3RyJywg Tm9uZSk6CisgCQlzZWxmLnV0X3J1biwgbHN0ID0gVGFzay5jb21waWxlX2Z1bihzZWxmLnV0X3N0 ciwgc2hlbGw9Z2V0YXR0cihzZWxmLCAndXRfc2hlbGwnLCBGYWxzZSkpCistCQl0c2sudmFycyA9 IGxzdCArIHRzay52YXJzCisrCQl0c2sudmFycyA9IHRzay52YXJzICsgbHN0CisrCQlzZWxmLmVu di5hcHBlbmRfdmFsdWUoJ1VUX0RFUFMnLCBzZWxmLnV0X3N0cikKKyAKKyAJc2VsZi5oYW5kbGVf dXRfY3dkKCd1dF9jd2QnKQorIAorQEAgLTEzOSw2ICsxNDEsMTAgQEAgZGVmIGFkZF9wYXRoKHZh cik6CisgCWlmIG5vdCBoYXNhdHRyKHNlbGYsICd1dF9jbWQnKToKKyAJCXNlbGYudXRfY21kID0g Z2V0YXR0cihPcHRpb25zLm9wdGlvbnMsICd0ZXN0Y21kJywgRmFsc2UpCisgCisrCXNlbGYuZW52 LmFwcGVuZF92YWx1ZSgnVVRfREVQUycsIHN0cihzZWxmLnV0X2NtZCkpCisrCXNlbGYuZW52LmFw cGVuZF92YWx1ZSgnVVRfREVQUycsIHNlbGYudXRfcGF0aHMpCisrCXNlbGYuZW52LmFwcGVuZF92 YWx1ZSgnVVRfREVQUycsIFsnJXIlcicgJSAoa2V5LCBzZWxmLnV0X2VudltrZXldKSBmb3Iga2V5 IGluIHNlbGYudXRfZW52XSkKKysKKyBAdGFza2dlbl9tZXRob2QKKyBkZWYgYWRkX3Rlc3RfcmVz dWx0cyhzZWxmLCB0dXApOgorIAkiIiJPdmVycmlkZSBhbmQgcmV0dXJuIHR1cFsxXSB0byBpbnRl cnJ1cHQgdGhlIGJ1aWxkIGltbWVkaWF0ZWx5IGlmIGEgdGVzdCBkb2VzIG5vdCBydW4iIiIKK0BA IC0xNTksNyArMTY1LDcgQEAgY2xhc3MgdXRlc3QoVGFzay5UYXNrKToKKyAJIiIiCisgCWNvbG9y ID0gJ1BJTksnCisgCWFmdGVyID0gWyd2bnVtJywgJ2luc3QnXQorLQl2YXJzID0gW10KKysJdmFy cyA9IFsnVVRfREVQUyddCisgCisgCWRlZiBydW5uYWJsZV9zdGF0dXMoc2VsZik6CisgCQkiIiIK K0BAIC0yMDAsNyArMjA2LDcgQEAgZGVmIHJ1bihzZWxmKToKKyAJCXNlbGYudXRfZXhlYyA9IGdl dGF0dHIoc2VsZi5nZW5lcmF0b3IsICd1dF9leGVjJywgW3NlbGYuaW5wdXRzWzBdLmFic3BhdGgo KV0pCisgCQl1dF9jbWQgPSBnZXRhdHRyKHNlbGYuZ2VuZXJhdG9yLCAndXRfY21kJywgRmFsc2Up CisgCQlpZiB1dF9jbWQ6CistCQkJc2VsZi51dF9leGVjID0gc2hsZXguc3BsaXQodXRfY21kICUg JyAnLmpvaW4oc2VsZi51dF9leGVjKSkKKysJCQlzZWxmLnV0X2V4ZWMgPSBzaGxleC5zcGxpdCh1 dF9jbWQgJSBVdGlscy5zaGVsbF9lc2NhcGUoc2VsZi51dF9leGVjKSkKKyAKKyAJCXJldHVybiBz ZWxmLmV4ZWNfY29tbWFuZChzZWxmLnV0X2V4ZWMpCisgCitAQCAtMjE0LDcgKzIyMCw3IEBAIGRl ZiBleGVjX2NvbW1hbmQoc2VsZiwgY21kLCAqKmt3KToKKyAJCQkJJ2NtZCc6IGNtZAorIAkJCX0K KyAJCQlzY3JpcHRfZmlsZSA9IHNlbGYuaW5wdXRzWzBdLmFic3BhdGgoKSArICdfcnVuLnB5Jwor LQkJCVV0aWxzLndyaXRlZihzY3JpcHRfZmlsZSwgc2NyaXB0X2NvZGUpCisrCQkJVXRpbHMud3Jp dGVmKHNjcmlwdF9maWxlLCBzY3JpcHRfY29kZSwgZW5jb2Rpbmc9J3V0Zi04JykKKyAJCQlvcy5j aG1vZChzY3JpcHRfZmlsZSwgVXRpbHMuTzc1NSkKKyAJCQlpZiBMb2dzLnZlcmJvc2UgPiAxOgor IAkJCQlMb2dzLmluZm8oJ1Rlc3QgZGVidWcgZmlsZSB3cml0dGVuIGFzICVyJyAlIHNjcmlwdF9m aWxlKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9VdGlscy5weSBiL3dhZmxpYi9VdGlscy5weQoraW5k ZXggYTBjYzJhMDlkLi5lYTBmN2E5ZGIgMTAwNjQ0CistLS0gYS93YWZsaWIvVXRpbHMucHkKKysr KyBiL3dhZmxpYi9VdGlscy5weQorQEAgLTExLDcgKzExLDcgQEAKKyAKKyBmcm9tIF9fZnV0dXJl X18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CisgCistaW1wb3J0IGF0ZXhpdCwgb3MsIHN5cywgZXJy bm8sIGluc3BlY3QsIHJlLCBkYXRldGltZSwgcGxhdGZvcm0sIGJhc2U2NCwgc2lnbmFsLCBmdW5j dG9vbHMsIHRpbWUKKytpbXBvcnQgYXRleGl0LCBvcywgc3lzLCBlcnJubywgaW5zcGVjdCwgcmUs IGRhdGV0aW1lLCBwbGF0Zm9ybSwgYmFzZTY0LCBzaWduYWwsIGZ1bmN0b29scywgdGltZSwgc2hs ZXgKKyAKKyB0cnk6CisgCWltcG9ydCBjUGlja2xlCitAQCAtNDksMTAgKzQ5LDE2IEBAIGNsYXNz IFRpbWVvdXRFeHBpcmVkKEV4Y2VwdGlvbik6CisgCWZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1Cisg ZXhjZXB0IEltcG9ydEVycm9yOgorIAl0cnk6CistCQlmcm9tIG1kNSBpbXBvcnQgbWQ1CisrCQlm cm9tIGhhc2hsaWIgaW1wb3J0IHNoYTEgYXMgbWQ1CisgCWV4Y2VwdCBJbXBvcnRFcnJvcjoKKy0J CSMgbmV2ZXIgZmFpbCB0byBlbmFibGUgZml4ZXMgZnJvbSBhbm90aGVyIG1vZHVsZQorKwkJIyBu ZXZlciBmYWlsIHRvIGVuYWJsZSBwb3RlbnRpYWwgZml4ZXMgZnJvbSBhbm90aGVyIG1vZHVsZQor IAkJcGFzcworK2Vsc2U6CisrCXRyeToKKysJCW1kNSgpLmRpZ2VzdCgpCisrCWV4Y2VwdCBWYWx1 ZUVycm9yOgorKwkJIyBGaXBzPyAjMjIxMworKwkJZnJvbSBoYXNobGliIGltcG9ydCBzaGExIGFz IG1kNQorIAorIHRyeToKKyAJaW1wb3J0IHRocmVhZGluZworQEAgLTIwMiw3ICsyMDgsNyBAQCBk ZWYgX19uZXh0X18oc2VsZik6CisgCisgCW5leHQgPSBfX25leHRfXworIAorLWlzX3dpbjMyID0g b3Muc2VwID09ICdcXCcgb3Igc3lzLnBsYXRmb3JtID09ICd3aW4zMicgIyBtc3lzMgorK2lzX3dp bjMyID0gb3Muc2VwID09ICdcXCcgb3Igc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igb3MubmFt ZSA9PSAnbnQnICMgbXN5czIKKyAiIiIKKyBXaGV0aGVyIHRoaXMgc3lzdGVtIGlzIGEgV2luZG93 cyBzZXJpZXMKKyAiIiIKK0BAIC00NDYsNiArNDUyLDggQEAgZGVmIGNvbnNvbGVfZW5jb2Rpbmco KToKKyAJCQlwYXNzCisgCQllbHNlOgorIAkJCWlmIGNvZGVwYWdlOgorKwkJCQlpZiA2NTAwMSA9 PSBjb2RlcGFnZSBhbmQgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAzKToKKysJCQkJCXJldHVybiAn dXRmLTgnCisgCQkJCXJldHVybiAnY3AlZCcgJSBjb2RlcGFnZQorIAlyZXR1cm4gc3lzLnN0ZG91 dC5lbmNvZGluZyBvciAoJ2NwMTI1MicgaWYgaXNfd2luMzIgZWxzZSAnbGF0aW4tMScpCisgCitA QCAtNDg0LDcgKzQ5Miw5IEBAIGRlZiBzcGxpdF9wYXRoX21zeXMocGF0aCk6CisgaWYgc3lzLnBs YXRmb3JtID09ICdjeWd3aW4nOgorIAlzcGxpdF9wYXRoID0gc3BsaXRfcGF0aF9jeWd3aW4KKyBl bGlmIGlzX3dpbjMyOgorLQlpZiBvcy5lbnZpcm9uLmdldCgnTVNZU1RFTScpOgorKwkjIENvbnNp ZGVyIHRoaXMgYW4gTVNZU1RFTSBlbnZpcm9ubWVudCBpZiAkTVNZU1RFTSBpcyBzZXQgYW5kIHB5 dGhvbgorKwkjIHJlcG9ydHMgaXMgZXhlY3V0YWJsZSBmcm9tIGEgdW5peCBsaWtlIHBhdGggb24g YSB3aW5kb3dzIGhvc3QuCisrCWlmIG9zLmVudmlyb24uZ2V0KCdNU1lTVEVNJykgYW5kIHN5cy5l eGVjdXRhYmxlLnN0YXJ0c3dpdGgoJy8nKToKKyAJCXNwbGl0X3BhdGggPSBzcGxpdF9wYXRoX21z eXMKKyAJZWxzZToKKyAJCXNwbGl0X3BhdGggPSBzcGxpdF9wYXRoX3dpbjMyCitAQCAtNTY5LDEw ICs1NzksMTMgQEAgZGVmIHF1b3RlX2RlZmluZV9uYW1lKHMpOgorIAlmdSA9IGZ1LnVwcGVyKCkK KyAJcmV0dXJuIGZ1CisgCistcmVfc2ggPSByZS5jb21waWxlKCdcXHN8XCd8IicpCistIiIiCist UmVnZXhwIHVzZWQgZm9yIHNoZWxsX2VzY2FwZSBiZWxvdworLSIiIgorKyMgc2hsZXgucXVvdGUg ZGlkbid0IGV4aXN0IHVudGlsIHB5dGhvbiAzLjMuIFByaW9yIHRvIHRoYXQgaXQgd2FzIGEgbm9u LWRvY3VtZW50ZWQKKysjIGZ1bmN0aW9uIGluIHBpcGVzLgorK3RyeToKKysJc2hlbGxfcXVvdGUg PSBzaGxleC5xdW90ZQorK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysJaW1wb3J0IHBpcGVzCisr CXNoZWxsX3F1b3RlID0gcGlwZXMucXVvdGUKKyAKKyBkZWYgc2hlbGxfZXNjYXBlKGNtZCk6Cisg CSIiIgorQEAgLTU4MSw3ICs1OTQsNyBAQCBkZWYgc2hlbGxfZXNjYXBlKGNtZCk6CisgCSIiIgor IAlpZiBpc2luc3RhbmNlKGNtZCwgc3RyKToKKyAJCXJldHVybiBjbWQKKy0JcmV0dXJuICcgJy5q b2luKHJlcHIoeCkgaWYgcmVfc2guc2VhcmNoKHgpIGVsc2UgeCBmb3IgeCBpbiBjbWQpCisrCXJl dHVybiAnICcuam9pbihzaGVsbF9xdW90ZSh4KSBmb3IgeCBpbiBjbWQpCisgCisgZGVmIGhfbGlz dChsc3QpOgorIAkiIiIKK0BAIC01OTYsNiArNjA5LDEyIEBAIGRlZiBoX2xpc3QobHN0KToKKyAJ IiIiCisgCXJldHVybiBtZDUocmVwcihsc3QpLmVuY29kZSgpKS5kaWdlc3QoKQorIAorK2lmIHN5 cy5oZXh2ZXJzaW9uIDwgMHgzMDAwMDAwOgorKwlkZWYgaF9saXN0X3B5dGhvbjIobHN0KToKKysJ CXJldHVybiBtZDUocmVwcihsc3QpKS5kaWdlc3QoKQorKwloX2xpc3RfcHl0aG9uMi5fX2RvY19f ID0gaF9saXN0Ll9fZG9jX18KKysJaF9saXN0ID0gaF9saXN0X3B5dGhvbjIKKysKKyBkZWYgaF9m dW4oZnVuKToKKyAJIiIiCisgCUhhc2ggZnVuY3Rpb25zCitAQCAtNjE1LDcgKzYzNCw3IEBAIGRl ZiBoX2Z1bihmdW4pOgorIAkJCSMKKyAJCQkjIFRoZSBzb3J0aW5nIHJlc3VsdCBvdXRjb21lIHdp bGwgYmUgY29uc2lzdGVudCBiZWNhdXNlOgorIAkJCSMgMS4gdHVwbGVzIGFyZSBjb21wYXJlZCBp biBvcmRlciBvZiB0aGVpciBlbGVtZW50cworLQkJCSMgMi4gb3B0aW9uYWwgYXJndW1lbnQgbmFt ZXMgYXJlIHVuaXF1ZQorKwkJCSMgMi4gb3B0aW9uYWwgYXJndW1lbnQgbmFtZXNzIGFyZSB1bmlx dWUKKyAJCQljb2RlLmV4dGVuZChzb3J0ZWQoZnVuLmtleXdvcmRzLml0ZW1zKCkpKQorIAkJCWNv ZGUuYXBwZW5kKGhfZnVuKGZ1bi5mdW5jKSkKKyAJCQlmdW4uY29kZSA9IGhfbGlzdChjb2RlKQor QEAgLTczMCw3ICs3NDksNyBAQCBkZWYgdW52ZXJzaW9uZWRfc3lzX3BsYXRmb3JtKCk6CisgCWlm IHMgPT0gJ2NsaScgYW5kIG9zLm5hbWUgPT0gJ250JzoKKyAJCSMgaXJvbnB5dGhvbiBpcyBvbmx5 IG9uIHdpbmRvd3MgYXMgZmFyIGFzIHdlIGtub3cKKyAJCXJldHVybiAnd2luMzInCistCXJldHVy biByZS5zcGxpdCgnXGQrJCcsIHMpWzBdCisrCXJldHVybiByZS5zcGxpdChyJ1xkKyQnLCBzKVsw XQorIAorIGRlZiBuYWRhKCprLCAqKmt3KToKKyAJIiIiCitAQCAtODUxLDYgKzg3MCwxOSBAQCBk ZWYgbGliNjQoKToKKyAJCQkJcmV0dXJuICc2NCcKKyAJcmV0dXJuICcnCisgCisrZGVmIGxvb3Nl X3ZlcnNpb24odmVyX3N0cik6CisrCSMgcHJpdmF0ZSBmb3IgdGhlIHRpbWUgYmVpbmchCisrCSMg c2VlICMyNDAyCisrCWxzdCA9IHJlLnNwbGl0KHInKFsuXXxcXGQrfFthLXpBLVpdKScsIHZlcl9z dHIpCisrCXZlciA9IFtdCisrCWZvciBpLCB2YWwgaW4gZW51bWVyYXRlKGxzdCk6CisrCQl0cnk6 CisrCQkJdmVyLmFwcGVuZChpbnQodmFsKSkKKysJCWV4Y2VwdCBWYWx1ZUVycm9yOgorKwkJCWlm IHZhbCAhPSAnLic6CisrCQkJCXZlci5hcHBlbmQodmFsKQorKwlyZXR1cm4gdmVyCisrCisgZGVm IHNhbmVfcGF0aChwKToKKyAJIyBwcml2YXRlIGZ1bmN0aW9uIGZvciB0aGUgdGltZSBiZWluZyEK KyAJcmV0dXJuIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIocCkpCitAQCAtODcx LDEzICs5MDMsMTMgQEAgZGVmIGdldF9wcm9jZXNzKCk6CisgCWV4Y2VwdCBJbmRleEVycm9yOgor IAkJZmlsZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkg KyBvcy5zZXAgKyAncHJvY2Vzc29yLnB5JworIAkJY21kID0gW3N5cy5leGVjdXRhYmxlLCAnLWMn LCByZWFkZihmaWxlcGF0aCldCistCQlyZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91 dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgYnVmc2l6ZT0wKQorKwkJ cmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRp bj1zdWJwcm9jZXNzLlBJUEUsIGJ1ZnNpemU9MCwgY2xvc2VfZmRzPW5vdCBpc193aW4zMikKKyAK KyBkZWYgcnVuX3ByZWZvcmtfcHJvY2VzcyhjbWQsIGt3YXJncywgY2FyZ3MpOgorIAkiIiIKKyAJ RGVsZWdhdGVzIHByb2Nlc3MgZXhlY3V0aW9uIHRvIGEgcHJlLWZvcmtlZCBwcm9jZXNzIGluc3Rh bmNlLgorIAkiIiIKKy0JaWYgbm90ICdlbnYnIGluIGt3YXJnczoKKysJaWYgbm90IGt3YXJncy5n ZXQoJ2VudicpOgorIAkJa3dhcmdzWydlbnYnXSA9IGRpY3Qob3MuZW52aXJvbikKKyAJdHJ5Ogor IAkJb2JqID0gYmFzZTY0LmI2NGVuY29kZShjUGlja2xlLmR1bXBzKFtjbWQsIGt3YXJncywgY2Fy Z3NdKSkKK2RpZmYgLS1naXQgYS93YWZsaWIvYW5zaXRlcm0ucHkgYi93YWZsaWIvYW5zaXRlcm0u cHkKK2luZGV4IDBkMjBjNjM3NC4uMDI3ZjBhZDY4IDEwMDY0NAorLS0tIGEvd2FmbGliL2Fuc2l0 ZXJtLnB5CisrKysgYi93YWZsaWIvYW5zaXRlcm0ucHkKK0BAIC0yNjQsNyArMjY0LDcgQEAgZGVm IGhpZGVfY3Vyc29yKHNlbGYscGFyYW0pOgorIAkJCSd1JzogcG9wX2N1cnNvciwKKyAJCX0KKyAJ CSMgTWF0Y2ggZWl0aGVyIHRoZSBlc2NhcGUgc2VxdWVuY2Ugb3IgdGV4dCBub3QgY29udGFpbmlu ZyBlc2NhcGUgc2VxdWVuY2UKKy0JCWFuc2lfdG9rZW5zID0gcmUuY29tcGlsZSgnKD86XHgxYlxb KFswLTk/O10qKShbYS16QS1aXSl8KFteXHgxYl0rKSknKQorKwkJYW5zaV90b2tlbnMgPSByZS5j b21waWxlKHInKD86XHgxYlxbKFswLTk/O10qKShbYS16QS1aXSl8KFteXHgxYl0rKSknKQorIAkJ ZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorIAkJCXRyeToKKyAJCQkJd2xvY2suYWNxdWlyZSgpCitk aWZmIC0tZ2l0IGEvd2FmbGliL2V4dHJhcy9jbGFuZ19jcm9zcy5weSBiL3dhZmxpYi9leHRyYXMv Y2xhbmdfY3Jvc3MucHkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLjFi NTFlMjg4NgorLS0tIC9kZXYvbnVsbAorKysrIGIvd2FmbGliL2V4dHJhcy9jbGFuZ19jcm9zcy5w eQorQEAgLTAsMCArMSw5MiBAQAorKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorKyMgZW5jb2Rpbmc6 IHV0Zi04CisrIyBLcnp5c3p0b2YgS29zacWEc2tpIDIwMTQKKysjIERyYWdvb25YNiAyMDE4Cisr CisrIiIiCisrRGV0ZWN0IHRoZSBDbGFuZyBDIGNvbXBpbGVyCisrVGhpcyB2ZXJzaW9uIGlzIGFu IGF0dGVtcHQgYXQgc3VwcG9ydGluZyB0aGUgLXRhcmdldCBhbmQgLXN5c3Jvb3QgZmxhZyBvZiBD bGFuZy4KKysiIiIKKysKKytmcm9tIHdhZmxpYi5Ub29scyBpbXBvcnQgY2Nyb290LCBhciwgZ2Nj CisrZnJvbSB3YWZsaWIuQ29uZmlndXJlIGltcG9ydCBjb25mCisraW1wb3J0IHdhZmxpYi5Db250 ZXh0CisraW1wb3J0IHdhZmxpYi5leHRyYXMuY2xhbmdfY3Jvc3NfY29tbW9uCisrCisrZGVmIG9w dGlvbnMob3B0KToKKysJIiIiCisrCVRhcmdldCB0cmlwbGV0IGZvciBjbGFuZzo6CisrCQkJJCB3 YWYgY29uZmlndXJlIC0tY2xhbmctdGFyZ2V0LXRyaXBsZT14ODZfNjQtcGMtbGludXgtZ251Cisr CSIiIgorKwljY19jb21waWxlcl9vcHRzID0gb3B0LmFkZF9vcHRpb25fZ3JvdXAoJ0NvbmZpZ3Vy YXRpb24gb3B0aW9ucycpCisrCWNjX2NvbXBpbGVyX29wdHMuYWRkX29wdGlvbignLS1jbGFuZy10 YXJnZXQtdHJpcGxlJywgZGVmYXVsdD1Ob25lLAorKwkJaGVscD0nVGFyZ2V0IHRyaXBsZSBmb3Ig Y2xhbmcnLAorKwkJZGVzdD0nY2xhbmdfdGFyZ2V0X3RyaXBsZScpCisrCWNjX2NvbXBpbGVyX29w dHMuYWRkX29wdGlvbignLS1jbGFuZy1zeXNyb290JywgZGVmYXVsdD1Ob25lLAorKwkJaGVscD0n U3lzcm9vdCBmb3IgY2xhbmcnLAorKwkJZGVzdD0nY2xhbmdfc3lzcm9vdCcpCisrCisrQGNvbmYK KytkZWYgZmluZF9jbGFuZyhjb25mKToKKysJIiIiCisrCUZpbmRzIHRoZSBwcm9ncmFtIGNsYW5n IGFuZCBleGVjdXRlcyBpdCB0byBlbnN1cmUgaXQgcmVhbGx5IGlzIGNsYW5nCisrCSIiIgorKwor KwlpbXBvcnQgb3MKKysKKysJY2MgPSBjb25mLmZpbmRfcHJvZ3JhbSgnY2xhbmcnLCB2YXI9J0ND JykKKysKKysJaWYgY29uZi5vcHRpb25zLmNsYW5nX3RhcmdldF90cmlwbGUgIT0gTm9uZToKKysJ CWNvbmYuZW52LmFwcGVuZF92YWx1ZSgnQ0MnLCBbJy10YXJnZXQnLCBjb25mLm9wdGlvbnMuY2xh bmdfdGFyZ2V0X3RyaXBsZV0pCisrCisrCWlmIGNvbmYub3B0aW9ucy5jbGFuZ19zeXNyb290ICE9 IE5vbmU6CisrCQlzeXNyb290ID0gc3RyKCkKKysKKysJCWlmIG9zLnBhdGguaXNhYnMoY29uZi5v cHRpb25zLmNsYW5nX3N5c3Jvb3QpOgorKwkJCXN5c3Jvb3QgPSBjb25mLm9wdGlvbnMuY2xhbmdf c3lzcm9vdAorKwkJZWxzZToKKysJCQlzeXNyb290ID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRo LmpvaW4ob3MuZ2V0Y3dkKCksIGNvbmYub3B0aW9ucy5jbGFuZ19zeXNyb290KSkKKysKKysJCWNv bmYuZW52LmFwcGVuZF92YWx1ZSgnQ0MnLCBbJy0tc3lzcm9vdCcsIHN5c3Jvb3RdKQorKworKwlj b25mLmdldF9jY192ZXJzaW9uKGNjLCBjbGFuZz1UcnVlKQorKwljb25mLmVudi5DQ19OQU1FID0g J2NsYW5nJworKworK0Bjb25mCisrZGVmIGNsYW5nX21vZGlmaWVyX3g4Nl82NF93NjRfbWluZ3cz Mihjb25mKToKKysJY29uZi5nY2NfbW9kaWZpZXJfd2luMzIoKQorKworK0Bjb25mCisrZGVmIGNs YW5nX21vZGlmaWVyX2kzODZfdzY0X21pbmd3MzIoY29uZik6CisrCWNvbmYuZ2NjX21vZGlmaWVy X3dpbjMyKCkKKysKKytAY29uZgorK2RlZiBjbGFuZ19tb2RpZmllcl94ODZfNjRfd2luZG93c19t c3ZjKGNvbmYpOgorKwljb25mLmNsYW5nX21vZGlmaWVyX21zdmMoKQorKworKwkjIEFsbG93IHRo ZSB1c2VyIHRvIG92ZXJyaWRlIGFueSBmbGFncyBpZiB0aGV5IHNvIGRlc2lyZS4KKysJY2xhbmdf bW9kaWZpZXJfdXNlcl9mdW5jID0gZ2V0YXR0cihjb25mLCAnY2xhbmdfbW9kaWZpZXJfeDg2XzY0 X3dpbmRvd3NfbXN2Y191c2VyJywgTm9uZSkKKysJaWYgY2xhbmdfbW9kaWZpZXJfdXNlcl9mdW5j OgorKwkJY2xhbmdfbW9kaWZpZXJfdXNlcl9mdW5jKCkKKysKKytAY29uZgorK2RlZiBjbGFuZ19t b2RpZmllcl9pMzg2X3dpbmRvd3NfbXN2Yyhjb25mKToKKysJY29uZi5jbGFuZ19tb2RpZmllcl9t c3ZjKCkKKysKKysJIyBBbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSBhbnkgZmxhZ3MgaWYgdGhl eSBzbyBkZXNpcmUuCisrCWNsYW5nX21vZGlmaWVyX3VzZXJfZnVuYyA9IGdldGF0dHIoY29uZiwg J2NsYW5nX21vZGlmaWVyX2kzODZfd2luZG93c19tc3ZjX3VzZXInLCBOb25lKQorKwlpZiBjbGFu Z19tb2RpZmllcl91c2VyX2Z1bmM6CisrCQljbGFuZ19tb2RpZmllcl91c2VyX2Z1bmMoKQorKwor K2RlZiBjb25maWd1cmUoY29uZik6CisrCWNvbmYuZmluZF9jbGFuZygpCisrCWNvbmYuZmluZF9w cm9ncmFtKFsnbGx2bS1hcicsICdhciddLCB2YXI9J0FSJykKKysJY29uZi5maW5kX2FyKCkKKysJ Y29uZi5nY2NfY29tbW9uX2ZsYWdzKCkKKysJIyBBbGxvdyB0aGUgdXNlciB0byBwcm92aWRlIGZs YWdzIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorKwljb25mLmdjY19tb2RpZmllcl9wbGF0Zm9y bSgpCisrCSMgQW5kIGFsbG93IG1vcmUgZmluZSBncmFpbmVkIGNvbnRyb2wgYmFzZWQgb24gdGhl IGNvbXBpbGVyJ3MgdHJpcGxldC4KKysJY29uZi5jbGFuZ19tb2RpZmllcl90YXJnZXRfdHJpcGxl KCkKKysJY29uZi5jY19sb2FkX3Rvb2xzKCkKKysJY29uZi5jY19hZGRfZmxhZ3MoKQorKwljb25m LmxpbmtfYWRkX2ZsYWdzKCkKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFzL2NsYW5nX2Nyb3Nz X2NvbW1vbi5weSBiL3dhZmxpYi9leHRyYXMvY2xhbmdfY3Jvc3NfY29tbW9uLnB5CituZXcgZmls ZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi5iNzZhMDcwMDYKKy0tLSAvZGV2L251bGwK KysrKyBiL3dhZmxpYi9leHRyYXMvY2xhbmdfY3Jvc3NfY29tbW9uLnB5CitAQCAtMCwwICsxLDEx MyBAQAorKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorKyMgZW5jb2Rpbmc6IHV0Zi04CisrIyBEcmFn b29uWDYgMjAxOAorKworKyIiIgorK0NvbW1vbiByb3V0aW5lcyBmb3IgY3Jvc3NfY2xhbmcucHkg YW5kIGNyb3NzX2NsYW5neHgucHkKKysiIiIKKysKKytmcm9tIHdhZmxpYi5Db25maWd1cmUgaW1w b3J0IGNvbmYKKytpbXBvcnQgd2FmbGliLkNvbnRleHQKKysKKytkZWYgbm9ybWFsaXplX3Rhcmdl dF90cmlwbGUodGFyZ2V0X3RyaXBsZSk6CisrCXRhcmdldF90cmlwbGUgPSB0YXJnZXRfdHJpcGxl WzotMV0KKysJbm9ybWFsaXplZF90cmlwbGUgPSB0YXJnZXRfdHJpcGxlLnJlcGxhY2UoJy0tJywg Jy11bmtub3duLScpCisrCisrCWlmIG5vcm1hbGl6ZWRfdHJpcGxlLnN0YXJ0c3dpdGgoJy0nKToK KysJCW5vcm1hbGl6ZWRfdHJpcGxlID0gJ3Vua25vd24nICsgbm9ybWFsaXplZF90cmlwbGUKKysK KysJaWYgbm9ybWFsaXplZF90cmlwbGUuZW5kc3dpdGgoJy0nKToKKysJCW5vcm1hbGl6ZWRfdHJp cGxlICs9ICd1bmtub3duJworKworKwkjIE5vcm1hbGl6ZSBNaW5HVyBidWlsZHMgdG8gKmFyY2gq LXc2NC1taW5ndzMyCisrCWlmIG5vcm1hbGl6ZWRfdHJpcGxlLmVuZHN3aXRoKCd3aW5kb3dzLWdu dScpOgorKwkJbm9ybWFsaXplZF90cmlwbGUgPSBub3JtYWxpemVkX3RyaXBsZVs6bm9ybWFsaXpl ZF90cmlwbGUuaW5kZXgoJy0nKV0gKyAnLXc2NC1taW5ndzMyJworKworKwkjIFN0cmlwIHRoZSB2 ZW5kb3Igd2hlbiBkb2luZyBtc3ZjIGJ1aWxkcywgc2luY2UgaXQncyB1bnVzZWQgYW55d2F5Lgor KwlpZiBub3JtYWxpemVkX3RyaXBsZS5lbmRzd2l0aCgnd2luZG93cy1tc3ZjJyk6CisrCQlub3Jt YWxpemVkX3RyaXBsZSA9IG5vcm1hbGl6ZWRfdHJpcGxlWzpub3JtYWxpemVkX3RyaXBsZS5pbmRl eCgnLScpXSArICctd2luZG93cy1tc3ZjJworKworKwlyZXR1cm4gbm9ybWFsaXplZF90cmlwbGUu cmVwbGFjZSgnLScsICdfJykKKysKKytAY29uZgorK2RlZiBjbGFuZ19tb2RpZmllcl9tc3ZjKGNv bmYpOgorKwlpbXBvcnQgb3MKKysKKysJIiIiCisrCVJlYWxseSBiYXNpYyBzZXR1cCB0byB1c2Ug Y2xhbmcgaW4gbXN2YyBtb2RlLgorKwlXZSBhY3R1YWxseSBkb24ndCByZWFsbHkgd2FudCB0byBk byBhIGxvdCwgZXZlbiB0aG91Z2ggY2xhbmcgaXMgbXN2YyBjb21wYXRpYmxlCisrCWluIHRoaXMg bW9kZSwgdGhhdCBkb2Vzbid0IG1lYW4gd2UncmUgYWN0dWFsbHkgdXNpbmcgbXN2Yy4KKysJSXQn cyBwcm9iYWJseSB0aGUgYmVzdCB0byBsZWF2ZSBpdCB0byB0aGUgdXNlciwgd2UgY2FuIGFzc3Vt ZSBtc3ZjIG1vZGUgaWYgdGhlIHVzZXIKKysJdXNlcyB0aGUgY2xhbmctY2wgZnJvbnRlbmQsIGJ1 dCB0aGlzIG1vZHVsZSBvbmx5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIHRoZSBnY2MtbGlrZSBmcm9u dGVuZC4KKysJIiIiCisrCXYgPSBjb25mLmVudgorKwl2LmNwcm9ncmFtX1BBVFRFUk4gPSAnJXMu ZXhlJworKworKwl2LmNzaGxpYl9QQVRURVJOICAgPSAnJXMuZGxsJworKwl2LmltcGxpYl9QQVRU RVJOICAgPSAnJXMubGliJworKwl2LklNUExJQl9TVCAgICAgICAgPSAnLVdsLC1JTVBMSUI6JXMn CisrCXYuU0hMSUJfTUFSS0VSICAgICA9IFtdCisrCisrCXYuQ0ZMQUdTX2NzaGxpYiAgICA9IFtd CisrCXYuTElOS0ZMQUdTX2NzaGxpYiA9IFsnLVdsLC1ETEwnXQorKwl2LmNzdGxpYl9QQVRURVJO ICAgPSAnJXMubGliJworKwl2LlNUTElCX01BUktFUiAgICAgPSBbXQorKworKwlkZWwodi5BUikK KysJY29uZi5maW5kX3Byb2dyYW0oWydsbHZtLWxpYicsICdsaWInXSwgdmFyPSdBUicpCisrCXYu QVJGTEFHUyAgICAgICAgICA9IFsnLW5vbG9nbyddCisrCXYuQVJfVEdUX0YgICAgICAgICA9IFsn LW91dDonXQorKworKwkjIERlZmF1bHQgdG8gdGhlIGxpbmtlciBzdXBwbGllZCB3aXRoIGxsdm0g aW5zdGVhZCBvZiBsaW5rLmV4ZSBvciBsZAorKwl2LkxJTktfQ0MgICAgICAgICAgPSB2LkNDICsg WyctZnVzZS1sZD1sbGQnLCAnLW5vc3RkbGliJ10KKysJdi5DQ0xOS19UR1RfRiAgICAgID0gWyct byddCisrCXYuZGVmX1BBVFRFUk4gICAgICA9ICctV2wsLWRlZjolcycKKysKKysJdi5MSU5LRkxB R1MgPSBbXQorKworKwl2LkxJQl9TVCAgICAgICAgICAgID0gJy1sJXMnCisrCXYuTElCUEFUSF9T VCAgICAgICAgPSAnLVdsLC1MSUJQQVRIOiVzJworKwl2LlNUTElCX1NUICAgICAgICAgID0gJy1s JXMnCisrCXYuU1RMSUJQQVRIX1NUICAgICAgPSAnLVdsLC1MSUJQQVRIOiVzJworKworKwlDRkxB R1NfQ1JUX0NPTU1PTiA9IFsKKysJCSctWGNsYW5nJywgJy0tZGVwZW5kZW50LWxpYj1vbGRuYW1l cycsCisrCQknLVhjbGFuZycsICctZm5vLXJ0dGktZGF0YScsCisrCQknLURfTVQnCisrCV0KKysK KysJdi5DRkxBR1NfQ1JUX01VTFRJVEhSRUFERUQgPSBDRkxBR1NfQ1JUX0NPTU1PTiArIFsKKysJ CSctWGNsYW5nJywgJy1mbHRvLXZpc2liaWxpdHktcHVibGljLXN0ZCcsCisrCQknLVhjbGFuZycs ICctLWRlcGVuZGVudC1saWI9bGliY210JywKKysJXQorKwl2LkNYWEZMQUdTX0NSVF9NVUxUSVRI UkVBREVEID0gdi5DRkxBR1NfQ1JUX01VTFRJVEhSRUFERUQKKysKKysJdi5DRkxBR1NfQ1JUX01V TFRJVEhSRUFERURfREJHID0gQ0ZMQUdTX0NSVF9DT01NT04gKyBbCisrCQknLURfREVCVUcnLAor KwkJJy1YY2xhbmcnLCAnLWZsdG8tdmlzaWJpbGl0eS1wdWJsaWMtc3RkJywKKysJCSctWGNsYW5n JywgJy0tZGVwZW5kZW50LWxpYj1saWJjbXRkJywKKysJXQorKwl2LkNYWEZMQUdTX0NSVF9NVUxU SVRIUkVBREVEX0RCRyA9IHYuQ0ZMQUdTX0NSVF9NVUxUSVRIUkVBREVEX0RCRworKworKwl2LkNG TEFHU19DUlRfTVVMVElUSFJFQURFRF9ETEwgPSBDRkxBR1NfQ1JUX0NPTU1PTiArIFsKKysJCSct RF9ETEwnLAorKwkJJy1YY2xhbmcnLCAnLS1kZXBlbmRlbnQtbGliPW1zdmNydCcKKysJXQorKwl2 LkNYWEZMQUdTX0NSVF9NVUxUSVRIUkVBREVEX0RMTCA9IHYuQ0ZMQUdTX0NSVF9NVUxUSVRIUkVB REVEX0RMTAorKworKwl2LkNGTEFHU19DUlRfTVVMVElUSFJFQURFRF9ETExfREJHID0gQ0ZMQUdT X0NSVF9DT01NT04gKyBbCisrCQknLURfRExMJywKKysJCSctRF9ERUJVRycsCisrCQknLVhjbGFu ZycsICctLWRlcGVuZGVudC1saWI9bXN2Y3J0ZCcsCisrCV0KKysJdi5DWFhGTEFHU19DUlRfTVVM VElUSFJFQURFRF9ETExfREJHID0gdi5DRkxBR1NfQ1JUX01VTFRJVEhSRUFERURfRExMX0RCRwor KworK0Bjb25mCisrZGVmIGNsYW5nX21vZGlmaWVyX3RhcmdldF90cmlwbGUoY29uZiwgY3BwPUZh bHNlKToKKysJY29tcGlsZXIgPSBjb25mLmVudi5DWFggaWYgY3BwIGVsc2UgY29uZi5lbnYuQ0MK KysJb3V0cHV0ID0gY29uZi5jbWRfYW5kX2xvZyhjb21waWxlciArIFsnLWR1bXBtYWNoaW5lJ10s IG91dHB1dD13YWZsaWIuQ29udGV4dC5TVERPVVQpCisrCisrCW1vZGlmaWVyID0gKCdjbGFuZ3h4 JyBpZiBjcHAgZWxzZSAnY2xhbmcnKSArICdfbW9kaWZpZXJfJworKwljbGFuZ19tb2RpZmllcl9m dW5jID0gZ2V0YXR0cihjb25mLCBtb2RpZmllciArIG5vcm1hbGl6ZV90YXJnZXRfdHJpcGxlKG91 dHB1dCksIE5vbmUpCisrCWlmIGNsYW5nX21vZGlmaWVyX2Z1bmM6CisrCQljbGFuZ19tb2RpZmll cl9mdW5jKCkKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFzL2NsYW5neHhfY3Jvc3MucHkgYi93 YWZsaWIvZXh0cmFzL2NsYW5neHhfY3Jvc3MucHkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl eCAwMDAwMDAwMDAuLjBhZDM4YWQ0NgorLS0tIC9kZXYvbnVsbAorKysrIGIvd2FmbGliL2V4dHJh cy9jbGFuZ3h4X2Nyb3NzLnB5CitAQCAtMCwwICsxLDEwNiBAQAorKyMhL3Vzci9iaW4vZW52IHB5 dGhvbgorKyMgZW5jb2Rpbmc6IHV0Zi04CisrIyBUaG9tYXMgTmFneSAyMDA5LTIwMTggKGl0YSkK KysjIERyYWdvb25YNiAyMDE4CisrCisrIiIiCisrRGV0ZWN0IHRoZSBDbGFuZysrIEMrKyBjb21w aWxlcgorK1RoaXMgdmVyc2lvbiBpcyBhbiBhdHRlbXB0IGF0IHN1cHBvcnRpbmcgdGhlIC10YXJn ZXQgYW5kIC1zeXNyb290IGZsYWcgb2YgQ2xhbmcrKy4KKysiIiIKKysKKytmcm9tIHdhZmxpYi5U b29scyBpbXBvcnQgY2Nyb290LCBhciwgZ3h4CisrZnJvbSB3YWZsaWIuQ29uZmlndXJlIGltcG9y dCBjb25mCisraW1wb3J0IHdhZmxpYi5leHRyYXMuY2xhbmdfY3Jvc3NfY29tbW9uCisrCisrZGVm IG9wdGlvbnMob3B0KToKKysJIiIiCisrCVRhcmdldCB0cmlwbGV0IGZvciBjbGFuZysrOjoKKysJ CQkkIHdhZiBjb25maWd1cmUgLS1jbGFuZ3h4LXRhcmdldC10cmlwbGU9eDg2XzY0LXBjLWxpbnV4 LWdudQorKwkiIiIKKysJY3h4X2NvbXBpbGVyX29wdHMgPSBvcHQuYWRkX29wdGlvbl9ncm91cCgn Q29uZmlndXJhdGlvbiBvcHRpb25zJykKKysJY3h4X2NvbXBpbGVyX29wdHMuYWRkX29wdGlvbign LS1jbGFuZ3h4LXRhcmdldC10cmlwbGUnLCBkZWZhdWx0PU5vbmUsCisrCQloZWxwPSdUYXJnZXQg dHJpcGxlIGZvciBjbGFuZysrJywKKysJCWRlc3Q9J2NsYW5neHhfdGFyZ2V0X3RyaXBsZScpCisr CWN4eF9jb21waWxlcl9vcHRzLmFkZF9vcHRpb24oJy0tY2xhbmd4eC1zeXNyb290JywgZGVmYXVs dD1Ob25lLAorKwkJaGVscD0nU3lzcm9vdCBmb3IgY2xhbmcrKycsCisrCQlkZXN0PSdjbGFuZ3h4 X3N5c3Jvb3QnKQorKworK0Bjb25mCisrZGVmIGZpbmRfY2xhbmd4eChjb25mKToKKysJIiIiCisr CUZpbmRzIHRoZSBwcm9ncmFtIGNsYW5nKyssIGFuZCBleGVjdXRlcyBpdCB0byBlbnN1cmUgaXQg cmVhbGx5IGlzIGNsYW5nKysKKysJIiIiCisrCisrCWltcG9ydCBvcworKworKwljeHggPSBjb25m LmZpbmRfcHJvZ3JhbSgnY2xhbmcrKycsIHZhcj0nQ1hYJykKKysKKysJaWYgY29uZi5vcHRpb25z LmNsYW5neHhfdGFyZ2V0X3RyaXBsZSAhPSBOb25lOgorKwkJY29uZi5lbnYuYXBwZW5kX3ZhbHVl KCdDWFgnLCBbJy10YXJnZXQnLCBjb25mLm9wdGlvbnMuY2xhbmd4eF90YXJnZXRfdHJpcGxlXSkK KysKKysJaWYgY29uZi5vcHRpb25zLmNsYW5neHhfc3lzcm9vdCAhPSBOb25lOgorKwkJc3lzcm9v dCA9IHN0cigpCisrCisrCQlpZiBvcy5wYXRoLmlzYWJzKGNvbmYub3B0aW9ucy5jbGFuZ3h4X3N5 c3Jvb3QpOgorKwkJCXN5c3Jvb3QgPSBjb25mLm9wdGlvbnMuY2xhbmd4eF9zeXNyb290CisrCQll bHNlOgorKwkJCXN5c3Jvb3QgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihvcy5nZXRj d2QoKSwgY29uZi5vcHRpb25zLmNsYW5neHhfc3lzcm9vdCkpCisrCisrCQljb25mLmVudi5hcHBl bmRfdmFsdWUoJ0NYWCcsIFsnLS1zeXNyb290Jywgc3lzcm9vdF0pCisrCisrCWNvbmYuZ2V0X2Nj X3ZlcnNpb24oY3h4LCBjbGFuZz1UcnVlKQorKwljb25mLmVudi5DWFhfTkFNRSA9ICdjbGFuZycK KysKKytAY29uZgorK2RlZiBjbGFuZ3h4X21vZGlmaWVyX3g4Nl82NF93NjRfbWluZ3czMihjb25m KToKKysJY29uZi5nY2NfbW9kaWZpZXJfd2luMzIoKQorKworK0Bjb25mCisrZGVmIGNsYW5neHhf bW9kaWZpZXJfaTM4Nl93NjRfbWluZ3czMihjb25mKToKKysJY29uZi5nY2NfbW9kaWZpZXJfd2lu MzIoKQorKworK0Bjb25mCisrZGVmIGNsYW5neHhfbW9kaWZpZXJfbXN2Yyhjb25mKToKKysJdiA9 IGNvbmYuZW52CisrCXYuY3h4cHJvZ3JhbV9QQVRURVJOID0gdi5jcHJvZ3JhbV9QQVRURVJOCisr CXYuY3h4c2hsaWJfUEFUVEVSTiAgID0gdi5jc2hsaWJfUEFUVEVSTgorKworKwl2LkNYWEZMQUdT X2N4eHNobGliICA9IFtdCisrCXYuTElOS0ZMQUdTX2N4eHNobGliID0gdi5MSU5LRkxBR1NfY3No bGliCisrCXYuY3h4c3RsaWJfUEFUVEVSTiAgID0gdi5jc3RsaWJfUEFUVEVSTgorKworKwl2LkxJ TktfQ1hYICAgICAgICAgICA9IHYuQ1hYICsgWyctZnVzZS1sZD1sbGQnLCAnLW5vc3RkbGliJ10K KysJdi5DWFhMTktfVEdUX0YgICAgICAgPSB2LkNDTE5LX1RHVF9GCisrCisrQGNvbmYKKytkZWYg Y2xhbmd4eF9tb2RpZmllcl94ODZfNjRfd2luZG93c19tc3ZjKGNvbmYpOgorKwljb25mLmNsYW5n X21vZGlmaWVyX21zdmMoKQorKwljb25mLmNsYW5neHhfbW9kaWZpZXJfbXN2YygpCisrCisrCSMg QWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgYW55IGZsYWdzIGlmIHRoZXkgc28gZGVzaXJlLgor KwljbGFuZ19tb2RpZmllcl91c2VyX2Z1bmMgPSBnZXRhdHRyKGNvbmYsICdjbGFuZ3h4X21vZGlm aWVyX3g4Nl82NF93aW5kb3dzX21zdmNfdXNlcicsIE5vbmUpCisrCWlmIGNsYW5nX21vZGlmaWVy X3VzZXJfZnVuYzoKKysJCWNsYW5nX21vZGlmaWVyX3VzZXJfZnVuYygpCisrCisrQGNvbmYKKytk ZWYgY2xhbmd4eF9tb2RpZmllcl9pMzg2X3dpbmRvd3NfbXN2Yyhjb25mKToKKysJY29uZi5jbGFu Z19tb2RpZmllcl9tc3ZjKCkKKysJY29uZi5jbGFuZ3h4X21vZGlmaWVyX21zdmMoKQorKworKwkj IEFsbG93IHRoZSB1c2VyIHRvIG92ZXJyaWRlIGFueSBmbGFncyBpZiB0aGV5IHNvIGRlc2lyZS4K KysJY2xhbmdfbW9kaWZpZXJfdXNlcl9mdW5jID0gZ2V0YXR0cihjb25mLCAnY2xhbmd4eF9tb2Rp Zmllcl9pMzg2X3dpbmRvd3NfbXN2Y191c2VyJywgTm9uZSkKKysJaWYgY2xhbmdfbW9kaWZpZXJf dXNlcl9mdW5jOgorKwkJY2xhbmdfbW9kaWZpZXJfdXNlcl9mdW5jKCkKKysKKytkZWYgY29uZmln dXJlKGNvbmYpOgorKwljb25mLmZpbmRfY2xhbmd4eCgpCisrCWNvbmYuZmluZF9wcm9ncmFtKFsn bGx2bS1hcicsICdhciddLCB2YXI9J0FSJykKKysJY29uZi5maW5kX2FyKCkKKysJY29uZi5neHhf Y29tbW9uX2ZsYWdzKCkKKysJIyBBbGxvdyB0aGUgdXNlciB0byBwcm92aWRlIGZsYWdzIGZvciB0 aGUgdGFyZ2V0IHBsYXRmb3JtLgorKwljb25mLmd4eF9tb2RpZmllcl9wbGF0Zm9ybSgpCisrCSMg QW5kIGFsbG93IG1vcmUgZmluZSBncmFpbmVkIGNvbnRyb2wgYmFzZWQgb24gdGhlIGNvbXBpbGVy J3MgdHJpcGxldC4KKysJY29uZi5jbGFuZ19tb2RpZmllcl90YXJnZXRfdHJpcGxlKGNwcD1UcnVl KQorKwljb25mLmN4eF9sb2FkX3Rvb2xzKCkKKysJY29uZi5jeHhfYWRkX2ZsYWdzKCkKKysJY29u Zi5saW5rX2FkZF9mbGFncygpCitkaWZmIC0tZ2l0IGEvd2FmbGliL2V4dHJhcy9jbGFzc2ljX3J1 bm5lci5weSBiL3dhZmxpYi9leHRyYXMvY2xhc3NpY19ydW5uZXIucHkKK25ldyBmaWxlIG1vZGUg MTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLmIwOGM3OTRlOAorLS0tIC9kZXYvbnVsbAorKysrIGIv d2FmbGliL2V4dHJhcy9jbGFzc2ljX3J1bm5lci5weQorQEAgLTAsMCArMSw2OCBAQAorKyMhL3Vz ci9iaW4vZW52IHB5dGhvbgorKyMgZW5jb2Rpbmc6IHV0Zi04CisrIyBUaG9tYXMgTmFneSwgMjAy MSAoaXRhKQorKworK2Zyb20gd2FmbGliIGltcG9ydCBVdGlscywgUnVubmVyCisrCisrIiIiCisr UmUtZW5hYmxlIHRoZSBjbGFzc2ljIHRocmVhZGluZyBzeXN0ZW0gZnJvbSB3YWYgMS54CisrCisr ZGVmIGNvbmZpZ3VyZShjb25mKToKKysJY29uZi5sb2FkKCdjbGFzc2ljX3J1bm5lcicpCisrIiIi CisrCisrY2xhc3MgVGFza0NvbnN1bWVyKFV0aWxzLnRocmVhZGluZy5UaHJlYWQpOgorKwkiIiIK KysJVGFzayBjb25zdW1lcnMgYmVsb25nIHRvIGEgcG9vbCBvZiB3b3JrZXJzCisrCisrCVRoZXkg d2FpdCBmb3IgdGFza3MgaW4gdGhlIHF1ZXVlIGFuZCB0aGVuIHVzZSBgYHRhc2sucHJvY2Vzcygu Li4pYGAKKysJIiIiCisrCWRlZiBfX2luaXRfXyhzZWxmLCBzcGF3bmVyKToKKysJCVV0aWxzLnRo cmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKysJCSIiIgorKwkJT2J0YWluIDpweTpjbGFz czpgd2FmbGliLlRhc2suVGFza0Jhc2VgIGluc3RhbmNlcyBmcm9tIHRoaXMgcXVldWUuCisrCQki IiIKKysJCXNlbGYuc3Bhd25lciA9IHNwYXduZXIKKysJCXNlbGYuZGFlbW9uID0gVHJ1ZQorKwkJ c2VsZi5zdGFydCgpCisrCisrCWRlZiBydW4oc2VsZik6CisrCQkiIiIKKysJCUxvb3Agb3ZlciB0 aGUgdGFza3MgdG8gZXhlY3V0ZQorKwkJIiIiCisrCQl0cnk6CisrCQkJc2VsZi5sb29wKCkKKysJ CWV4Y2VwdCBFeGNlcHRpb246CisrCQkJcGFzcworKworKwlkZWYgbG9vcChzZWxmKToKKysJCSIi IgorKwkJT2J0YWluIHRhc2tzIGZyb20gOnB5OmF0dHI6YHdhZmxpYi5SdW5uZXIuVGFza0NvbnN1 bWVyLnJlYWR5YCBhbmQgY2FsbAorKwkJOnB5Om1ldGg6YHdhZmxpYi5UYXNrLlRhc2tCYXNlLnBy b2Nlc3NgLiBJZiB0aGUgb2JqZWN0IGlzIGEgZnVuY3Rpb24sIGV4ZWN1dGUgaXQuCisrCQkiIiIK KysJCW1hc3RlciA9IHNlbGYuc3Bhd25lci5tYXN0ZXIKKysJCXdoaWxlIDE6CisrCQkJaWYgbm90 IG1hc3Rlci5zdG9wOgorKwkJCQl0cnk6CisrCQkJCQl0c2sgPSBtYXN0ZXIucmVhZHkuZ2V0KCkK KysJCQkJCWlmIHRzazoKKysJCQkJCQl0c2subG9nX2Rpc3BsYXkodHNrLmdlbmVyYXRvci5ibGQp CisrCQkJCQkJbWFzdGVyLnByb2Nlc3NfdGFzayh0c2spCisrCQkJCQllbHNlOgorKwkJCQkJCWJy ZWFrCisrCQkJCWZpbmFsbHk6CisrCQkJCQltYXN0ZXIub3V0LnB1dCh0c2spCisrCisrY2xhc3Mg U3Bhd25lcihvYmplY3QpOgorKwkiIiIKKysJRGFlbW9uIHRocmVhZCB0aGF0IGNvbnN1bWVzIHRh c2tzIGZyb20gOnB5OmNsYXNzOmB3YWZsaWIuUnVubmVyLlBhcmFsbGVsYCBwcm9kdWNlciBhbmQK KysJc3Bhd25zIGEgY29uc3VtaW5nIHRocmVhZCA6cHk6Y2xhc3M6YHdhZmxpYi5SdW5uZXIuQ29u c3VtZXJgIGZvciBlYWNoCisrCTpweTpjbGFzczpgd2FmbGliLlRhc2suVGFza2AgaW5zdGFuY2Uu CisrCSIiIgorKwlkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyKToKKysJCXNlbGYubWFzdGVyID0g bWFzdGVyCisrCQkiIiI6cHk6Y2xhc3M6YHdhZmxpYi5SdW5uZXIuUGFyYWxsZWxgIHByb2R1Y2Vy IGluc3RhbmNlIiIiCisrCisrCQlzZWxmLnBvb2wgPSBbVGFza0NvbnN1bWVyKHNlbGYpIGZvciBp IGluIHJhbmdlKG1hc3Rlci5udW1qb2JzKV0KKysKKytSdW5uZXIuU3Bhd25lciA9IFNwYXduZXIK K2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFzL2NvbG9yX21zdmMucHkgYi93YWZsaWIvZXh0cmFz L2NvbG9yX21zdmMucHkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLjYw YmFjYjdiMgorLS0tIC9kZXYvbnVsbAorKysrIGIvd2FmbGliL2V4dHJhcy9jb2xvcl9tc3ZjLnB5 CitAQCAtMCwwICsxLDU5IEBACisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyBlbmNvZGluZzog dXRmLTgKKysKKysjIFJlcGxhY2VzIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBieSBvbmUgd2hpY2gg dW5kZXJzdGFuZHMgTVNWQyBvdXRwdXQgYW5kIGNvbG9yaXplcyBpdC4KKysjIE1vZGlmaWVkIGZy b20gY29sb3JfZ2NjLnB5CisrCisrX19hdXRob3JfXyA9IF9fbWFpbnRhaW5lcl9fID0gIkFsaWJl ayBPbWFyb3YgPGExYmEub21hcm92QGdtYWlsLmNvbT4iCisrX19jb3B5cmlnaHRfXyA9ICJBbGli ZWsgT21hcm92LCAyMDE5IgorKworK2ltcG9ydCBzeXMKKytmcm9tIHdhZmxpYiBpbXBvcnQgTG9n cworKworK2NsYXNzIENvbG9yTVNWQ0Zvcm1hdHRlcihMb2dzLmZvcm1hdHRlcik6CisrCWRlZiBf X2luaXRfXyhzZWxmLCBjb2xvcnMpOgorKwkJc2VsZi5jb2xvcnMgPSBjb2xvcnMKKysJCUxvZ3Mu Zm9ybWF0dGVyLl9faW5pdF9fKHNlbGYpCisrCQorKwlkZWYgcGFyc2VNZXNzYWdlKHNlbGYsIGxp bmUsIGNvbG9yKToKKysJCSMgU3BsaXQgbWVzc2FhZ2UgZnJvbSAnZGlzazpmaWxlcGF0aDogdHlw ZTogbWVzc2FnZScKKysJCWFyciA9IGxpbmUuc3BsaXQoJzonLCAzKQorKwkJaWYgbGVuKGFycikg PCA0OgorKwkJCXJldHVybiBsaW5lCisrCQkKKysJCWNvbG9yZWQgPSBzZWxmLmNvbG9ycy5CT0xE ICsgYXJyWzBdICsgJzonICsgYXJyWzFdICsgJzonICsgc2VsZi5jb2xvcnMuTk9STUFMCisrCQlj b2xvcmVkICs9IGNvbG9yICsgYXJyWzJdICsgJzonICsgc2VsZi5jb2xvcnMuTk9STUFMCisrCQlj b2xvcmVkICs9IGFyclszXQorKwkJcmV0dXJuIGNvbG9yZWQKKysJCisrCWRlZiBmb3JtYXQoc2Vs ZiwgcmVjKToKKysJCWZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisrCQl3aGlsZSBmcmFtZToKKysJ CQlmdW5jID0gZnJhbWUuZl9jb2RlLmNvX25hbWUKKysJCQlpZiBmdW5jID09ICdleGVjX2NvbW1h bmQnOgorKwkJCQljbWQgPSBmcmFtZS5mX2xvY2Fscy5nZXQoJ2NtZCcpCisrCQkJCWlmIGlzaW5z dGFuY2UoY21kLCBsaXN0KToKKysJCQkJCSMgRml4IGZpbGUgY2FzZSwgaXQgbWF5IGJlIENMLkVY RSBvciBjbC5leGUKKysJCQkJCWFyZ3YwID0gY21kWzBdLmxvd2VyKCkKKysJCQkJCWlmICdjbC5l eGUnIGluIGFyZ3YwOgorKwkJCQkJCWxpbmVzID0gW10KKysJCQkJCQkjIFRoaXMgd2lsbCBub3Qg d29yayB3aXRoICJsb2NhbGl6ZWQiIHZlcnNpb25zCisrCQkJCQkJIyBvZiBNU1ZDCisrCQkJCQkJ Zm9yIGxpbmUgaW4gcmVjLm1zZy5zcGxpdGxpbmVzKCk6CisrCQkJCQkJCWlmICc6IHdhcm5pbmcg JyBpbiBsaW5lOgorKwkJCQkJCQkJbGluZXMuYXBwZW5kKHNlbGYucGFyc2VNZXNzYWdlKGxpbmUs IHNlbGYuY29sb3JzLllFTExPVykpCisrCQkJCQkJCWVsaWYgJzogZXJyb3IgJyBpbiBsaW5lOgor KwkJCQkJCQkJbGluZXMuYXBwZW5kKHNlbGYucGFyc2VNZXNzYWdlKGxpbmUsIHNlbGYuY29sb3Jz LlJFRCkpCisrCQkJCQkJCWVsaWYgJzogZmF0YWwgZXJyb3IgJyBpbiBsaW5lOgorKwkJCQkJCQkJ bGluZXMuYXBwZW5kKHNlbGYucGFyc2VNZXNzYWdlKGxpbmUsIHNlbGYuY29sb3JzLlJFRCArIHNl bGYuY29sb3JzLkJPTEQpKQorKwkJCQkJCQllbGlmICc6IG5vdGU6ICcgaW4gbGluZToKKysJCQkJ CQkJCWxpbmVzLmFwcGVuZChzZWxmLnBhcnNlTWVzc2FnZShsaW5lLCBzZWxmLmNvbG9ycy5DWUFO KSkKKysJCQkJCQkJZWxzZToKKysJCQkJCQkJCWxpbmVzLmFwcGVuZChsaW5lKQorKwkJCQkJCXJl Yy5tc2cgPSAiXG4iLmpvaW4obGluZXMpCisrCQkJZnJhbWUgPSBmcmFtZS5mX2JhY2sKKysJCXJl dHVybiBMb2dzLmZvcm1hdHRlci5mb3JtYXQoc2VsZiwgcmVjKQorKworK2RlZiBvcHRpb25zKG9w dCk6CisrCUxvZ3MubG9nLmhhbmRsZXJzWzBdLnNldEZvcm1hdHRlcihDb2xvck1TVkNGb3JtYXR0 ZXIoTG9ncy5jb2xvcnMpKQorKworZGlmZiAtLWdpdCBhL3dhZmxpYi9leHRyYXMvZmNfZnVqaXRz dS5weSBiL3dhZmxpYi9leHRyYXMvZmNfZnVqaXRzdS5weQorbmV3IGZpbGUgbW9kZSAxMDA2NDQK K2luZGV4IDAwMDAwMDAwMC4uY2FlNjc2YzIwCistLS0gL2Rldi9udWxsCisrKysgYi93YWZsaWIv ZXh0cmFzL2ZjX2Z1aml0c3UucHkKK0BAIC0wLDAgKzEsNTIgQEAKKysjISAvdXNyL2Jpbi9lbnYg cHl0aG9uCisrIyBlbmNvZGluZzogdXRmLTgKKysjIERldGVjdGlvbiBvZiB0aGUgRnVqaXRzdSBG b3J0cmFuIGNvbXBpbGVyIGZvciBBUk02NEZYCisrCisraW1wb3J0IHJlCisrZnJvbSB3YWZsaWIu VG9vbHMgaW1wb3J0IGZjLGZjX2NvbmZpZyxmY19zY2FuCisrZnJvbSB3YWZsaWIuQ29uZmlndXJl IGltcG9ydCBjb25mCisrZnJvbSB3YWZsaWIuVG9vbHMuY29tcGlsZXJfZmMgaW1wb3J0IGZjX2Nv bXBpbGVyCisrZmNfY29tcGlsZXJbJ2xpbnV4J10uYXBwZW5kKCdmY19mdWppdHN1JykKKysKKytA Y29uZgorK2RlZiBmaW5kX2Z1aml0c3UoY29uZik6CisrCWZjPWNvbmYuZmluZF9wcm9ncmFtKFsn ZnJ0cHgnXSx2YXI9J0ZDJykKKysJY29uZi5nZXRfZnVqaXRzdV92ZXJzaW9uKGZjKQorKwljb25m LmVudi5GQ19OQU1FPSdGVUpJVFNVJworKwljb25mLmVudi5GQ19NT0RfQ0FQSVRBTElaQVRJT049 J2xvd2VyJworKworK0Bjb25mCisrZGVmIGZ1aml0c3VfZmxhZ3MoY29uZik6CisrCXY9Y29uZi5l bnYKKysJdlsnX0ZDTU9ET1VURkxBR1MnXT1bXQorKwl2WydGQ0ZMQUdTX0RFQlVHJ109W10KKysJ dlsnRkNGTEFHU19mY3NobGliJ109W10KKysJdlsnTElOS0ZMQUdTX2Zjc2hsaWInXT1bXQorKwl2 WydGQ1NUTElCX01BUktFUiddPScnCisrCXZbJ0ZDU0hMSUJfTUFSS0VSJ109JycKKysKKytAY29u ZgorK2RlZiBnZXRfZnVqaXRzdV92ZXJzaW9uKGNvbmYsZmMpOgorKwl2ZXJzaW9uX3JlPXJlLmNv bXBpbGUociJmcnRweFxzKlwoRlJUXClccyooP1A8bWFqb3I+XGQrKVwuKD9QPG1pbm9yPlxkKylc LiIscmUuSSkuc2VhcmNoCisrCWNtZD1mYytbJy0tdmVyc2lvbiddCisrCW91dCxlcnI9ZmNfY29u ZmlnLmdldG91dHB1dChjb25mLGNtZCxzdGRpbj1GYWxzZSkKKysJaWYgb3V0OgorKwkJbWF0Y2g9 dmVyc2lvbl9yZShvdXQpCisrCWVsc2U6CisrCQltYXRjaD12ZXJzaW9uX3JlKGVycikKKysJaWYg bm90IG1hdGNoOgorKwkJcmV0dXJuKEZhbHNlKQorKwkJY29uZi5mYXRhbCgnQ291bGQgbm90IGRl dGVybWluZSB0aGUgRnVqaXRzdSBGUlQgRm9ydHJhbiBjb21waWxlciB2ZXJzaW9uLicpCisrCWVs c2U6CisrCQlrPW1hdGNoLmdyb3VwZGljdCgpCisrCQljb25mLmVudlsnRkNfVkVSU0lPTiddPShr WydtYWpvciddLGtbJ21pbm9yJ10pCisrCisrZGVmIGNvbmZpZ3VyZShjb25mKToKKysJY29uZi5m aW5kX2Z1aml0c3UoKQorKwljb25mLmZpbmRfcHJvZ3JhbSgnYXInLHZhcj0nQVInKQorKwljb25m LmFkZF9vc19mbGFncygnQVJGTEFHUycpCisrCWlmIG5vdCBjb25mLmVudi5BUkZMQUdTOgorKwkJ Y29uZi5lbnYuQVJGTEFHUz1bJ3JjcyddCisrCWNvbmYuZmNfZmxhZ3MoKQorKwljb25mLmZjX2Fk ZF9mbGFncygpCisrCWNvbmYuZnVqaXRzdV9mbGFncygpCitkaWZmIC0tZ2l0IGEvd2FmbGliL2V4 dHJhcy9mY19uZm9ydC5weSBiL3dhZmxpYi9leHRyYXMvZmNfbmZvcnQucHkKK25ldyBmaWxlIG1v ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAuLmMyNTg4NmI4ZQorLS0tIC9kZXYvbnVsbAorKysr IGIvd2FmbGliL2V4dHJhcy9mY19uZm9ydC5weQorQEAgLTAsMCArMSw1MiBAQAorKyMhIC91c3Iv YmluL2VudiBweXRob24KKysjIGVuY29kaW5nOiB1dGYtOAorKyMgRGV0ZWN0aW9uIG9mIHRoZSBO RUMgRm9ydHJhbiBjb21waWxlciBmb3IgQXVyb3JhIFRzdWJhc2EKKysKKytpbXBvcnQgcmUKKytm cm9tIHdhZmxpYi5Ub29scyBpbXBvcnQgZmMsZmNfY29uZmlnLGZjX3NjYW4KKytmcm9tIHdhZmxp Yi5Db25maWd1cmUgaW1wb3J0IGNvbmYKKytmcm9tIHdhZmxpYi5Ub29scy5jb21waWxlcl9mYyBp bXBvcnQgZmNfY29tcGlsZXIKKytmY19jb21waWxlclsnbGludXgnXS5hcHBlbmQoJ2ZjX25mb3J0 JykKKysKKytAY29uZgorK2RlZiBmaW5kX25mb3J0KGNvbmYpOgorKwlmYz1jb25mLmZpbmRfcHJv Z3JhbShbJ25mb3J0J10sdmFyPSdGQycpCisrCWNvbmYuZ2V0X25mb3J0X3ZlcnNpb24oZmMpCisr CWNvbmYuZW52LkZDX05BTUU9J05GT1JUJworKwljb25mLmVudi5GQ19NT0RfQ0FQSVRBTElaQVRJ T049J2xvd2VyJworKworK0Bjb25mCisrZGVmIG5mb3J0X2ZsYWdzKGNvbmYpOgorKwl2PWNvbmYu ZW52CisrCXZbJ19GQ01PRE9VVEZMQUdTJ109W10KKysJdlsnRkNGTEFHU19ERUJVRyddPVtdCisr CXZbJ0ZDRkxBR1NfZmNzaGxpYiddPVtdCisrCXZbJ0xJTktGTEFHU19mY3NobGliJ109W10KKysJ dlsnRkNTVExJQl9NQVJLRVInXT0nJworKwl2WydGQ1NITElCX01BUktFUiddPScnCisrCisrQGNv bmYKKytkZWYgZ2V0X25mb3J0X3ZlcnNpb24oY29uZixmYyk6CisrCXZlcnNpb25fcmU9cmUuY29t cGlsZShyIm5mb3J0XHMqXChORk9SVFwpXHMqKD9QPG1ham9yPlxkKylcLig/UDxtaW5vcj5cZCsp XC4iLHJlLkkpLnNlYXJjaAorKwljbWQ9ZmMrWyctLXZlcnNpb24nXQorKwlvdXQsZXJyPWZjX2Nv bmZpZy5nZXRvdXRwdXQoY29uZixjbWQsc3RkaW49RmFsc2UpCisrCWlmIG91dDoKKysJCW1hdGNo PXZlcnNpb25fcmUob3V0KQorKwllbHNlOgorKwkJbWF0Y2g9dmVyc2lvbl9yZShlcnIpCisrCWlm IG5vdCBtYXRjaDoKKysJCXJldHVybihGYWxzZSkKKysJCWNvbmYuZmF0YWwoJ0NvdWxkIG5vdCBk ZXRlcm1pbmUgdGhlIE5FQyBORk9SVCBGb3J0cmFuIGNvbXBpbGVyIHZlcnNpb24uJykKKysJZWxz ZToKKysJCWs9bWF0Y2guZ3JvdXBkaWN0KCkKKysJCWNvbmYuZW52WydGQ19WRVJTSU9OJ109KGtb J21ham9yJ10sa1snbWlub3InXSkKKysKKytkZWYgY29uZmlndXJlKGNvbmYpOgorKwljb25mLmZp bmRfbmZvcnQoKQorKwljb25mLmZpbmRfcHJvZ3JhbSgnbmFyJyx2YXI9J0FSJykKKysJY29uZi5h ZGRfb3NfZmxhZ3MoJ0FSRkxBR1MnKQorKwlpZiBub3QgY29uZi5lbnYuQVJGTEFHUzoKKysJCWNv bmYuZW52LkFSRkxBR1M9WydyY3MnXQorKwljb25mLmZjX2ZsYWdzKCkKKysJY29uZi5mY19hZGRf ZmxhZ3MoKQorKwljb25mLm5mb3J0X2ZsYWdzKCkKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0cmFz L2dlbnB5YmluZC5weSBiL3dhZmxpYi9leHRyYXMvZ2VucHliaW5kLnB5CituZXcgZmlsZSBtb2Rl IDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi5hYzIwNmVlOGEKKy0tLSAvZGV2L251bGwKKysrKyBi L3dhZmxpYi9leHRyYXMvZ2VucHliaW5kLnB5CitAQCAtMCwwICsxLDE5NCBAQAorK2ltcG9ydCBv cworK2ltcG9ydCBwaXBlcworK2ltcG9ydCBzdWJwcm9jZXNzCisraW1wb3J0IHN5cworKworK2Zy b20gd2FmbGliIGltcG9ydCBMb2dzLCBUYXNrLCBDb250ZXh0CisrZnJvbSB3YWZsaWIuVG9vbHMu Y19wcmVwcm9jIGltcG9ydCBzY2FuIGFzIHNjYW5faW1wbAorKyMgXi0tIE5vdGU6IHdhZmxpYi5l eHRyYXMuZ2NjZGVwcy5zY2FuIGRvZXMgbm90IHdvcmsgZm9yIHVzLAorKyMgZHVlIHRvIGl0cyBj dXJyZW50IGltcGxlbWVudGF0aW9uOgorKyMgVGhlIC1NRCBmbGFnIGlzIGluamVjdGVkIGludG8g dGhlIHtDLENYWH1GTEFHUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQKKysjIGRlcGVuZGVuY2ll cyBhcmUgcmVhZCBvdXQgaW4gYSBzZXBhcmF0ZSBzdGVwIGFmdGVyIGNvbXBpbGluZyBieSByZWFk aW5nCisrIyB0aGUgLmQgZmlsZSBzYXZlZCBhbG9uZ3NpZGUgdGhlIG9iamVjdCBmaWxlLgorKyMg QXMgdGhlIGdlbnB5YmluZCB0YXNrIHJlZmVycyB0byBhIGhlYWRlciBmaWxlIHRoYXQgaXMgbmV2 ZXIgY29tcGlsZWQgaXRzZWxmLAorKyMgZ2NjZGVwcyB3aWxsIG5vdCBiZSBhYmxlIHRvIGV4dHJh Y3QgdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLgorKworK2Zyb20gd2FmbGliLlRhc2tHZW4gaW1w b3J0IGZlYXR1cmUsIGJlZm9yZV9tZXRob2QKKysKKysKKytkZWYgam9pbl9hcmdzKGFyZ3MpOgor KyAgICByZXR1cm4gIiAiLmpvaW4ocGlwZXMucXVvdGUoYXJnKSBmb3IgYXJnIGluIGFyZ3MpCisr CisrCisrZGVmIGNvbmZpZ3VyZShjZmcpOgorKyAgICBjZmcubG9hZCgiY29tcGlsZXJfY3h4IikK KysgICAgY2ZnLmxvYWQoInB5dGhvbiIpCisrICAgIGNmZy5jaGVja19weXRob25fdmVyc2lvbiht aW52ZXI9KDIsIDcpKQorKyAgICBpZiBub3QgY2ZnLmVudi5MTFZNX0NPTkZJRzoKKysgICAgICAg IGNmZy5maW5kX3Byb2dyYW0oImxsdm0tY29uZmlnIiwgdmFyPSJMTFZNX0NPTkZJRyIpCisrICAg IGlmIG5vdCBjZmcuZW52LkdFTlBZQklORDoKKysgICAgICAgIGNmZy5maW5kX3Byb2dyYW0oImdl bnB5YmluZCIsIHZhcj0iR0VOUFlCSU5EIikKKysKKysgICAgIyBmaW5kIGNsYW5nIHJlYXNvdXJj ZSBkaXIgZm9yIGJ1aWx0aW4gaGVhZGVycworKyAgICBjZmcuZW52LkdFTlBZQklORF9SRVNPVVJD RV9ESVIgPSBvcy5wYXRoLmpvaW4oCisrICAgICAgICAgICAgY2ZnLmNtZF9hbmRfbG9nKGNmZy5l bnYuTExWTV9DT05GSUcgKyBbIi0tbGliZGlyIl0pLnN0cmlwKCksCisrICAgICAgICAgICAgImNs YW5nIiwKKysgICAgICAgICAgICBjZmcuY21kX2FuZF9sb2coY2ZnLmVudi5MTFZNX0NPTkZJRyAr IFsiLS12ZXJzaW9uIl0pLnN0cmlwKCkpCisrICAgIGlmIG9zLnBhdGguZXhpc3RzKGNmZy5lbnYu R0VOUFlCSU5EX1JFU09VUkNFX0RJUik6CisrICAgICAgICBjZmcubXNnKCJDaGVja2luZyBjbGFu ZyByZXNvdXJjZSBkaXIiLCBjZmcuZW52LkdFTlBZQklORF9SRVNPVVJDRV9ESVIpCisrICAgIGVs c2U6CisrICAgICAgICBjZmcuZmF0YWwoIkNsYW5nIHJlc291cmNlIGRpciBub3QgZm91bmQiKQor KworKworK0BmZWF0dXJlKCJnZW5weWJpbmQiKQorK0BiZWZvcmVfbWV0aG9kKCJwcm9jZXNzX3Nv dXJjZSIpCisrZGVmIGdlbmVyYXRlX2dlbnB5YmluZF9zb3VyY2Uoc2VsZik6CisrICAgICIiIgor KyAgICBSdW4gZ2VucHliaW5kIG9uIHRoZSBoZWFkZXJzIHByb3ZpZGVkIGluIGBzb3VyY2VgIGFu ZCBjb21waWxlL2xpbmsgdGhlCisrICAgIGdlbmVyYXRlZCBjb2RlIGluc3RlYWQuICBUaGlzIHdv cmtzIGJ5IGdlbmVyYXRpbmcgdGhlIGNvZGUgb24gdGhlIGZseSBhbmQKKysgICAgc3dhcHBpbmcg dGhlIHNvdXJjZSBub2RlIGJlZm9yZSBgcHJvY2Vzc19zb3VyY2VgIGlzIHJ1bi4KKysgICAgIiIi CisrICAgICMgbmFtZSBvZiBtb2R1bGUgZGVmYXVsdHMgdG8gbmFtZSBvZiB0YXJnZXQKKysgICAg bW9kdWxlID0gZ2V0YXR0cihzZWxmLCAibW9kdWxlIiwgc2VsZi50YXJnZXQpCisrCisrICAgICMg Y3JlYXRlIHRlbXBvcmFyeSBzb3VyY2UgZmlsZSBpbiBidWlsZCBkaXJlY3RvcnkgdG8gaG9sZCBn ZW5lcmF0ZWQgY29kZQorKyAgICBvdXQgPSAiZ2VucHliaW5kLSVzLiVkLmNwcCIgJSAobW9kdWxl LCBzZWxmLmlkeCkKKysgICAgb3V0ID0gc2VsZi5wYXRoLmdldF9ibGQoKS5maW5kX29yX2RlY2xh cmUob3V0KQorKworKyAgICB0YXNrID0gc2VsZi5jcmVhdGVfdGFzaygiZ2VucHliaW5kIiwgc2Vs Zi50b19ub2RlcyhzZWxmLnNvdXJjZSksIG91dCkKKysgICAgIyB1c2VkIHRvIGRldGVjdCB3aGV0 aGVyIENGTEFHUyBvciBDWFhGTEFHUyBzaG91bGQgYmUgcGFzc2VkIHRvIGdlbnB5YmluZAorKyAg ICB0YXNrLmZlYXR1cmVzID0gc2VsZi5mZWF0dXJlcworKyAgICB0YXNrLm1vZHVsZSA9IG1vZHVs ZQorKyAgICAjIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBkZWZpbml0aW9ucyB0byBpbmNsdWRlIGlu IHRoZSBjdXJyZW50IG1vZHVsZQorKyAgICAjICh3aGVuIGhlYWRlciBmaWxlcyBhcmUgc2hhcmVk IGJ5IG1vcmUgdGhhbiBvbmUgbW9kdWxlKQorKyAgICB0YXNrLmdlbnB5YmluZF90YWdzID0gc2Vs Zi50b19saXN0KGdldGF0dHIoc2VsZiwgImdlbnB5YmluZF90YWdzIiwgW10pKQorKyAgICAjIGFk ZGl0aW9uYWwgaW5jbHVkZSBkaXJlY3RvcmllcworKyAgICB0YXNrLmluY2x1ZGVzID0gc2VsZi50 b19saXN0KGdldGF0dHIoc2VsZiwgImluY2x1ZGVzIiwgW10pKQorKyAgICB0YXNrLmdlbnB5Ymlu ZCA9IHNlbGYuZW52LkdFTlBZQklORAorKworKyAgICAjIFRlbGwgd2FmIHRvIGNvbXBpbGUvbGlu ayB0aGUgZ2VuZXJhdGVkIGNvZGUgaW5zdGVhZCBvZiB0aGUgaGVhZGVycworKyAgICAjIG9yaWdp bmFsbHkgcGFzc2VkLWluIHZpYSB0aGUgYHNvdXJjZWAgcGFyYW1ldGVyLiAoc2VlIGBwcm9jZXNz X3NvdXJjZWApCisrICAgIHNlbGYuc291cmNlID0gW291dF0KKysKKysKKytjbGFzcyBnZW5weWJp bmQoVGFzay5UYXNrKTogIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCisrICAgICIiIgor KyAgICBSdW5zIGdlbnB5YmluZCBvbiBoZWFkZXJzIHByb3ZpZGVkIGFzIGlucHV0IHRvIHRoaXMg dGFzay4KKysgICAgR2VuZXJhdGVkIGNvZGUgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBmaXJzdCAo YW5kIG9ubHkpIG91dHB1dCBub2RlLgorKyAgICAiIiIKKysgICAgcXVpZXQgPSBUcnVlCisrICAg IGNvbG9yID0gIlBJTksiCisrICAgIHNjYW4gPSBzY2FuX2ltcGwKKysKKysgICAgQHN0YXRpY21l dGhvZAorKyAgICBkZWYga2V5d29yZCgpOgorKyAgICAgICAgcmV0dXJuICJBbmFseXppbmciCisr CisrICAgIGRlZiBydW4oc2VsZik6CisrICAgICAgICBpZiBub3Qgc2VsZi5pbnB1dHM6CisrICAg ICAgICAgICAgcmV0dXJuCisrCisrICAgICAgICBhcmdzID0gc2VsZi5maW5kX2dlbnB5YmluZCgp ICsgc2VsZi5fYXJndW1lbnRzKAorKyAgICAgICAgICAgICAgICByZXNvdXJjZV9kaXI9c2VsZi5l bnYuR0VOUFlCSU5EX1JFU09VUkNFX0RJUikKKysKKysgICAgICAgIG91dHB1dCA9IHNlbGYucnVu X2dlbnB5YmluZChhcmdzKQorKworKyAgICAgICAgIyBGb3IgZGVidWdnaW5nIC8gbG9nIG91dHB1 dAorKyAgICAgICAgcGFzdGVhYmxlX2NvbW1hbmQgPSBqb2luX2FyZ3MoYXJncykKKysKKysgICAg ICAgICMgd3JpdGUgZ2VuZXJhdGVkIGNvZGUgdG8gZmlsZSBpbiBidWlsZCBkaXJlY3RvcnkKKysg ICAgICAgICMgKHdpbGwgYmUgY29tcGlsZWQgZHVyaW5nIHByb2Nlc3Nfc291cmNlIHN0YWdlKQor KyAgICAgICAgKG91dHB1dF9ub2RlLCkgPSBzZWxmLm91dHB1dHMKKysgICAgICAgIG91dHB1dF9u b2RlLndyaXRlKCIvLyB7fVxue31cbiIuZm9ybWF0KAorKyAgICAgICAgICAgIHBhc3RlYWJsZV9j b21tYW5kLnJlcGxhY2UoIlxuIiwgIlxuLy8gIiksIG91dHB1dCkpCisrCisrICAgIGRlZiBmaW5k X2dlbnB5YmluZChzZWxmKToKKysgICAgICAgIHJldHVybiBzZWxmLmdlbnB5YmluZAorKworKyAg ICBkZWYgcnVuX2dlbnB5YmluZChzZWxmLCBhcmdzKToKKysgICAgICAgIGJsZCA9IHNlbGYuZ2Vu ZXJhdG9yLmJsZAorKworKyAgICAgICAga3dhcmdzID0gZGljdChjd2Q9YmxkLnZhcmlhbnRfZGly KQorKyAgICAgICAgaWYgaGFzYXR0cihibGQsICJsb2dfY29tbWFuZCIpOgorKyAgICAgICAgICAg IGJsZC5sb2dfY29tbWFuZChhcmdzLCBrd2FyZ3MpCisrICAgICAgICBlbHNlOgorKyAgICAgICAg ICAgIExvZ3MuZGVidWcoInJ1bm5lcjogeyFyfSIuZm9ybWF0KGFyZ3MpKQorKyAgICAgICAgcHJv YyA9IHN1YnByb2Nlc3MuUG9wZW4oCisrICAgICAgICAgICAgYXJncywgc3Rkb3V0PXN1YnByb2Nl c3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgKiprd2FyZ3MpCisrICAgICAgICBzdGRv dXQsIHN0ZGVyciA9IHByb2MuY29tbXVuaWNhdGUoKQorKworKyAgICAgICAgaWYgbm90IGlzaW5z dGFuY2Uoc3Rkb3V0LCBzdHIpOgorKyAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5kZWNvZGUo c3lzLnN0ZG91dC5lbmNvZGluZywgZXJyb3JzPSJyZXBsYWNlIikKKysgICAgICAgIGlmIG5vdCBp c2luc3RhbmNlKHN0ZGVyciwgc3RyKToKKysgICAgICAgICAgICBzdGRlcnIgPSBzdGRlcnIuZGVj b2RlKHN5cy5zdGRlcnIuZW5jb2RpbmcsIGVycm9ycz0icmVwbGFjZSIpCisrCisrICAgICAgICBp ZiBwcm9jLnJldHVybmNvZGUgIT0gMDoKKysgICAgICAgICAgICBibGQuZmF0YWwoCisrICAgICAg ICAgICAgICAgICJnZW5weWJpbmQgcmV0dXJuZWQge2NvZGV9IGR1cmluZyB0aGUgZm9sbG93aW5n IGNhbGw6IgorKyAgICAgICAgICAgICAgICAiXG57Y29tbWFuZH1cblxue3N0ZG91dH1cblxue3N0 ZGVycn0iLmZvcm1hdCgKKysgICAgICAgICAgICAgICAgICAgIGNvZGU9cHJvYy5yZXR1cm5jb2Rl LAorKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1qb2luX2FyZ3MoYXJncyksCisrICAgICAg ICAgICAgICAgICAgICBzdGRvdXQ9c3Rkb3V0LAorKyAgICAgICAgICAgICAgICAgICAgc3RkZXJy PXN0ZGVyciwKKysgICAgICAgICAgICAgICAgKSkKKysKKysgICAgICAgIGlmIHN0ZGVyci5zdHJp cCgpOgorKyAgICAgICAgICAgIExvZ3MuZGVidWcoIm5vbi1mYXRhbCB3YXJuaW5ncyBkdXJpbmcg Z2VucHliaW5kIHJ1bjpcbnt9Ii5mb3JtYXQoc3RkZXJyKSkKKysKKysgICAgICAgIHJldHVybiBz dGRvdXQKKysKKysgICAgZGVmIF9pbmNsdWRlX3BhdGhzKHNlbGYpOgorKyAgICAgICAgcmV0dXJu IHNlbGYuZ2VuZXJhdG9yLnRvX2luY25vZGVzKHNlbGYuaW5jbHVkZXMgKyBzZWxmLmVudi5JTkNM VURFUykKKysKKysgICAgZGVmIF9pbnB1dHNfYXNfcmVsYXRpdmVfaW5jbHVkZXMoc2VsZik6Cisr ICAgICAgICBpbmNsdWRlX3BhdGhzID0gc2VsZi5faW5jbHVkZV9wYXRocygpCisrICAgICAgICBy ZWxhdGl2ZV9pbmNsdWRlcyA9IFtdCisrICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmlucHV0czoK KysgICAgICAgICAgICBmb3IgaW5jIGluIGluY2x1ZGVfcGF0aHM6CisrICAgICAgICAgICAgICAg IGlmIG5vZGUuaXNfY2hpbGRfb2YoaW5jKToKKysgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZl X2luY2x1ZGVzLmFwcGVuZChub2RlLnBhdGhfZnJvbShpbmMpKQorKyAgICAgICAgICAgICAgICAg ICAgYnJlYWsKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICBzZWxmLmdlbmVy YXRvci5ibGQuZmF0YWwoImNvdWxkIG5vdCByZXNvbHZlIHt9Ii5mb3JtYXQobm9kZSkpCisrICAg ICAgICByZXR1cm4gcmVsYXRpdmVfaW5jbHVkZXMKKysKKysgICAgZGVmIF9hcmd1bWVudHMoc2Vs ZiwgZ2VucHliaW5kX3BhcnNlPU5vbmUsIHJlc291cmNlX2Rpcj1Ob25lKToKKysgICAgICAgIGFy Z3MgPSBbXQorKyAgICAgICAgcmVsYXRpdmVfaW5jbHVkZXMgPSBzZWxmLl9pbnB1dHNfYXNfcmVs YXRpdmVfaW5jbHVkZXMoKQorKyAgICAgICAgaXNfY3h4ID0gImN4eCIgaW4gc2VsZi5mZWF0dXJl cworKworKyAgICAgICAgIyBvcHRpb25zIGZvciBnZW5weWJpbmQKKysgICAgICAgIGFyZ3MuZXh0 ZW5kKFsiLS1nZW5weWJpbmQtbW9kdWxlIiwgc2VsZi5tb2R1bGVdKQorKyAgICAgICAgaWYgc2Vs Zi5nZW5weWJpbmRfdGFnczoKKysgICAgICAgICAgICBhcmdzLmV4dGVuZChbIi0tZ2VucHliaW5k LXRhZyJdICsgc2VsZi5nZW5weWJpbmRfdGFncykKKysgICAgICAgIGlmIHJlbGF0aXZlX2luY2x1 ZGVzOgorKyAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFsiLS1nZW5weWJpbmQtaW5jbHVkZSJdICsg cmVsYXRpdmVfaW5jbHVkZXMpCisrICAgICAgICBpZiBnZW5weWJpbmRfcGFyc2U6CisrICAgICAg ICAgICAgYXJncy5leHRlbmQoWyItLWdlbnB5YmluZC1wYXJzZSIsIGdlbnB5YmluZF9wYXJzZV0p CisrCisrICAgICAgICBhcmdzLmFwcGVuZCgiLS0iKQorKworKyAgICAgICAgIyBoZWFkZXJzIHRv IGJlIHByb2Nlc3NlZCBieSBnZW5weWJpbmQKKysgICAgICAgIGFyZ3MuZXh0ZW5kKG5vZGUuYWJz cGF0aCgpIGZvciBub2RlIGluIHNlbGYuaW5wdXRzKQorKworKyAgICAgICAgYXJncy5hcHBlbmQo Ii0tIikKKysKKysgICAgICAgICMgb3B0aW9ucyBmb3IgY2xhbmcvZ2VucHliaW5kLXBhcnNlCisr ICAgICAgICBhcmdzLmFwcGVuZCgiLURfX0dFTlBZQklORF9fIikKKysgICAgICAgIGFyZ3MuYXBw ZW5kKCIteGMrKyIgaWYgaXNfY3h4IGVsc2UgIi14YyIpCisrICAgICAgICBoYXNfc3RkX2FyZ3Vt ZW50ID0gRmFsc2UKKysgICAgICAgIGZvciBmbGFnIGluIHNlbGYuZW52WyJDWFhGTEFHUyIgaWYg aXNfY3h4IGVsc2UgIkNGTEFHUyJdOgorKyAgICAgICAgICAgIGZsYWcgPSBmbGFnLnJlcGxhY2Uo Ii1zdGQ9Z251IiwgIi1zdGQ9YyIpCisrICAgICAgICAgICAgaWYgZmxhZy5zdGFydHN3aXRoKCIt c3RkPWMiKToKKysgICAgICAgICAgICAgICAgaGFzX3N0ZF9hcmd1bWVudCA9IFRydWUKKysgICAg ICAgICAgICBhcmdzLmFwcGVuZChmbGFnKQorKyAgICAgICAgaWYgbm90IGhhc19zdGRfYXJndW1l bnQ6CisrICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1zdGQ9YysrMTQiKQorKyAgICAgICAgYXJn cy5leHRlbmQoIi1Je30iLmZvcm1hdChuLmFic3BhdGgoKSkgZm9yIG4gaW4gc2VsZi5faW5jbHVk ZV9wYXRocygpKQorKyAgICAgICAgYXJncy5leHRlbmQoIi1Ee30iLmZvcm1hdChwKSBmb3IgcCBp biBzZWxmLmVudi5ERUZJTkVTKQorKworKyAgICAgICAgIyBwb2ludCB0byBjbGFuZyByZXNvdXJj ZSBkaXIsIGlmIHNwZWNpZmllZAorKyAgICAgICAgaWYgcmVzb3VyY2VfZGlyOgorKyAgICAgICAg ICAgIGFyZ3MuYXBwZW5kKCItcmVzb3VyY2UtZGlyPXt9Ii5mb3JtYXQocmVzb3VyY2VfZGlyKSkK KysKKysgICAgICAgIHJldHVybiBhcmdzCitkaWZmIC0tZ2l0IGEvd2FmbGliL2V4dHJhcy9oYXhl LnB5IGIvd2FmbGliL2V4dHJhcy9oYXhlLnB5CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg MDAwMDAwMDAwLi40ZmYzNzQ1NzkKKy0tLSAvZGV2L251bGwKKysrKyBiL3dhZmxpYi9leHRyYXMv aGF4ZS5weQorQEAgLTAsMCArMSwxNTQgQEAKKytpbXBvcnQgcmUKKysKKytmcm9tIHdhZmxpYiBp bXBvcnQgVXRpbHMsIFRhc2ssIEVycm9ycywgTG9ncworK2Zyb20gd2FmbGliLkNvbmZpZ3VyZSBp bXBvcnQgY29uZgorK2Zyb20gd2FmbGliLlRhc2tHZW4gaW1wb3J0IGV4dGVuc2lvbiwgdGFza2dl bl9tZXRob2QKKysKKytIQVhFX0NPTVBJTEVSUyA9IHsKKysgICAgJ0pTJzogeyd0Z3QnOiAnLS1q cycsICdleHRfb3V0JzogWycuanMnXX0sCisrICAgICdMVUEnOiB7J3RndCc6ICctLWx1YScsICdl eHRfb3V0JzogWycubHVhJ119LAorKyAgICAnU1dGJzogeyd0Z3QnOiAnLS1zd2YnLCAnZXh0X291 dCc6IFsnLnN3ZiddfSwKKysgICAgJ05FS08nOiB7J3RndCc6ICctLW5la28nLCAnZXh0X291dCc6 IFsnLm4nXX0sCisrICAgICdQSFAnOiB7J3RndCc6ICctLXBocCcsICdleHRfb3V0JzogWycucGhw J119LAorKyAgICAnQ1BQJzogeyd0Z3QnOiAnLS1jcHAnLCAnZXh0X291dCc6IFsnLmgnLCAnLmNw cCddfSwKKysgICAgJ0NQUElBJzogeyd0Z3QnOiAnLS1jcHBpYScsICdleHRfb3V0JzogWycuY3Bw aWEnXX0sCisrICAgICdDUyc6IHsndGd0JzogJy0tY3MnLCAnZXh0X291dCc6IFsnLmNzJ119LAor KyAgICAnSkFWQSc6IHsndGd0JzogJy0tamF2YScsICdleHRfb3V0JzogWycuamF2YSddfSwKKysg ICAgJ0pWTSc6IHsndGd0JzogJy0tanZtJywgJ2V4dF9vdXQnOiBbJy5qYXInXX0sCisrICAgICdQ WVRIT04nOiB7J3RndCc6ICctLXB5dGhvbicsICdleHRfb3V0JzogWycucHknXX0sCisrICAgICdI TCc6IHsndGd0JzogJy0taGwnLCAnZXh0X291dCc6IFsnLmhsJ119LAorKyAgICAnSExDJzogeyd0 Z3QnOiAnLS1obCcsICdleHRfb3V0JzogWycuaCcsICcuYyddfSwKKyt9CisrCisrQGNvbmYKKytk ZWYgY2hlY2tfaGF4ZV9wa2coc2VsZiwgKiprdyk6CisrICAgIHNlbGYuZmluZF9wcm9ncmFtKCdo YXhlbGliJykKKysgICAgbGlicyA9IGt3LmdldCgnbGlicycpCisrICAgIGlmIG5vdCBsaWJzIG9y IG5vdCAodHlwZShsaWJzKSA9PSBzdHIgb3IgKHR5cGUobGlicykgPT0gbGlzdCBhbmQgYWxsKGlz aW5zdGFuY2Uocywgc3RyKSBmb3IgcyBpbiBsaWJzKSkpOgorKyAgICAgICAgc2VsZi5mYXRhbCgn U3BlY2lmeSBjb3JyZWN0IGxpYnMgdmFsdWUgaW4gZW5zdXJlIGNhbGwnKQorKyAgICAgICAgcmV0 dXJuCisrICAgIGZldGNoID0ga3cuZ2V0KCdmZXRjaCcpCisrICAgIGlmIG5vdCBmZXRjaCBpcyBO b25lIGFuZCBub3QgdHlwZShmZXRjaCkgPT0gYm9vbDoKKysgICAgICAgIHNlbGYuZmF0YWwoJ1Nw ZWNpZnkgY29ycmVjdCBmZXRjaCB2YWx1ZSBpbiBlbnN1cmUgY2FsbCcpCisrCisrICAgIGxpYnMg PSBbbGlic10gaWYgdHlwZShsaWJzKSA9PSBzdHIgZWxzZSBsaWJzCisrICAgIGhhbHQgPSBGYWxz ZQorKyAgICBmb3IgbGliIGluIGxpYnM6CisrICAgICAgICB0cnk6CisrICAgICAgICAgICAgc2Vs Zi5zdGFydF9tc2coJ0NoZWNraW5nIGZvciBsaWJyYXJ5ICVzJyAlIGxpYikKKysgICAgICAgICAg ICBvdXRwdXQgPSBzZWxmLmNtZF9hbmRfbG9nKHNlbGYuZW52LkhBWEVMSUIgKyBbJ2xpc3QnLCBs aWJdKQorKyAgICAgICAgZXhjZXB0IEVycm9ycy5XYWZFcnJvcjoKKysgICAgICAgICAgICBzZWxm LmVuZF9tc2coRmFsc2UpCisrICAgICAgICAgICAgc2VsZi5mYXRhbCgnQ2FuXCd0IHJ1biBoYXhl bGliIGxpc3QsIGVuc3VyaW5nIGhhbHRlZCcpCisrICAgICAgICAgICAgcmV0dXJuCisrCisrICAg ICAgICBpZiBsaWIgaW4gb3V0cHV0OgorKyAgICAgICAgICAgIHNlbGYuZW5kX21zZyhsaWIgaW4g b3V0cHV0KQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBpZiBub3QgZmV0Y2g6CisrICAg ICAgICAgICAgICAgIHNlbGYuZW5kX21zZyhGYWxzZSkKKysgICAgICAgICAgICAgICAgaGFsdCA9 IFRydWUKKysgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICB0cnk6CisrICAg ICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY19jb21tYW5kKHNlbGYuZW52LkhBWEVMSUIg KyBbJ2luc3RhbGwnLCBsaWJdKQorKyAgICAgICAgICAgICAgICBpZiBzdGF0dXM6CisrICAgICAg ICAgICAgICAgICAgICBzZWxmLmVuZF9tc2coRmFsc2UpCisrICAgICAgICAgICAgICAgICAgICBz ZWxmLmZhdGFsKCdDYW5cJ3QgZ2V0ICVzIHdpdGggaGF4ZWxpYiwgZW5zdXJpbmcgaGFsdGVkJyAl IGxpYikKKysgICAgICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgICAgICBlbHNl OgorKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbmRfbXNnKCdkb3dubG9hZGVkJywgY29sb3I9 J1lFTExPVycpCisrICAgICAgICAgICAgZXhjZXB0IEVycm9ycy5XYWZFcnJvcjoKKysgICAgICAg ICAgICAgICAgc2VsZi5lbmRfbXNnKEZhbHNlKQorKyAgICAgICAgICAgICAgICBzZWxmLmZhdGFs KCdDYW5cJ3QgcnVuIGhheGVsaWIgaW5zdGFsbCwgZW5zdXJpbmcgaGFsdGVkJykKKysgICAgICAg ICAgICAgICAgcmV0dXJuCisrICAgICAgICBwb3N0Zml4ID0ga3cuZ2V0KCd1c2VsaWJfc3RvcmUn KSBvciBsaWIudXBwZXIoKQorKyAgICAgICAgc2VsZi5lbnYuYXBwZW5kX3VuaXF1ZSgnTElCXycg KyBwb3N0Zml4LCBsaWIpCisrCisrICAgIGlmIGhhbHQ6CisrICAgICAgICBzZWxmLmZhdGFsKCdD YW5cJ3QgZmluZCBsaWJyYXJpZXMgaW4gaGF4ZWxpYiBsaXN0LCBlbnN1cmluZyBoYWx0ZWQnKQor KyAgICAgICAgcmV0dXJuCisrCisrY2xhc3MgaGF4ZShUYXNrLlRhc2spOgorKyAgICB2YXJzID0g WydIQVhFX1ZFUlNJT04nLCAnSEFYRV9GTEFHUyddCisrICAgIGV4dF9pbiA9IFsnLmh4J10KKysK KysgICAgZGVmIHJ1bihzZWxmKToKKysgICAgICAgIGNtZCA9IHNlbGYuZW52LkhBWEUgKyBzZWxm LmVudi5IQVhFX0ZMQUdTX0RFRkFVTFQgKyBzZWxmLmVudi5IQVhFX0ZMQUdTCisrICAgICAgICBy ZXR1cm4gc2VsZi5leGVjX2NvbW1hbmQoY21kKQorKworK2ZvciBDT01QIGluIEhBWEVfQ09NUElM RVJTOgorKyAgICAjIGNyZWF0ZSBydW5uZXJzIGZvciBlYWNoIGNvbXBpbGUgdGFyZ2V0CisrICAg IHR5cGUoImhheGVfIiArIENPTVAsIChoYXhlLCksIHsnZXh0X291dCc6IEhBWEVfQ09NUElMRVJT W0NPTVBdWydleHRfb3V0J119KQorKworK0B0YXNrZ2VuX21ldGhvZAorK2RlZiBpbml0X2hheGUo c2VsZik6CisrICAgIGVycm1zZyA9ICclcyBub3QgZm91bmQsIHNwZWNpZnkgY29ycmVjdCB2YWx1 ZScKKysgICAgdHJ5OgorKyAgICAgICAgY29tcGlsZXIgPSBIQVhFX0NPTVBJTEVSU1tzZWxmLmNv bXBpbGVyXQorKyAgICAgICAgY29tcF90Z3QgPSBjb21waWxlclsndGd0J10KKysgICAgICAgIGNv bXBfbW9kID0gJy9tYWluLmMnIGlmIHNlbGYuY29tcGlsZXIgPT0gJ0hMQycgZWxzZSAnJworKyAg ICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBLZXlFcnJvcik6CisrICAgICAgICBzZWxmLmJsZC5m YXRhbChlcnJtc2cgJSAnQ09NUElMRVInICsgJzogJyArICcsICcuam9pbihIQVhFX0NPTVBJTEVS Uy5rZXlzKCkpKQorKyAgICAgICAgcmV0dXJuCisrCisrICAgIHNlbGYuZW52LmFwcGVuZF92YWx1 ZSgKKysgICAgICAgICdIQVhFX0ZMQUdTJywKKysgICAgICAgIFtjb21wX3RndCwgc2VsZi5wYXRo LmdldF9ibGQoKS5tYWtlX25vZGUoc2VsZi50YXJnZXQgKyBjb21wX21vZCkuYWJzcGF0aCgpXSkK KysgICAgaWYgaGFzYXR0cihzZWxmLCAndXNlJyk6CisrICAgICAgICBpZiBub3QgKHR5cGUoc2Vs Zi51c2UpID09IHN0ciBvciB0eXBlKHNlbGYudXNlKSA9PSBsaXN0KToKKysgICAgICAgICAgICBz ZWxmLmJsZC5mYXRhbChlcnJtc2cgJSAnVVNFJykKKysgICAgICAgICAgICByZXR1cm4KKysgICAg ICAgIHNlbGYudXNlID0gW3NlbGYudXNlXSBpZiB0eXBlKHNlbGYudXNlKSA9PSBzdHIgZWxzZSBz ZWxmLnVzZQorKworKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnVzZToKKysgICAgICAgICAgICBp ZiBzZWxmLmVudlsnTElCXycgKyBkZXBdOgorKyAgICAgICAgICAgICAgICBmb3IgbGliIGluIHNl bGYuZW52WydMSUJfJyArIGRlcF06CisrICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5hcHBl bmRfdmFsdWUoJ0hBWEVfRkxBR1MnLCBbJy1saWInLCBsaWJdKQorKworKyAgICBpZiBoYXNhdHRy KHNlbGYsICdyZXMnKToKKysgICAgICAgIGlmIG5vdCB0eXBlKHNlbGYucmVzKSA9PSBzdHI6Cisr ICAgICAgICAgICAgc2VsZi5ibGQuZmF0YWwoZXJybXNnICUgJ1JFUycpCisrICAgICAgICAgICAg cmV0dXJuCisrICAgICAgICBzZWxmLmVudi5hcHBlbmRfdmFsdWUoJ0hBWEVfRkxBR1MnLCBbJy1E JywgJ3Jlc291cmNlc1BhdGg9JXMnICUgc2VsZi5yZXNdKQorKworK0BleHRlbnNpb24oJy5oeCcp CisrZGVmIGhheGVfaG9vayhzZWxmLCBub2RlKToKKysgICAgaWYgbGVuKHNlbGYuc291cmNlKSA+ IDE6CisrICAgICAgICBzZWxmLmJsZC5mYXRhbCgnVXNlIHNlcGFyYXRlIHRhc2sgZ2VuZXJhdG9y cyBmb3IgbXVsdGlwbGUgZmlsZXMnKQorKyAgICAgICAgcmV0dXJuCisrCisrICAgIHNyYyA9IG5v ZGUKKysgICAgdGd0ID0gc2VsZi5wYXRoLmdldF9ibGQoKS5maW5kX29yX2RlY2xhcmUoc2VsZi50 YXJnZXQpCisrCisrICAgIHNlbGYuaW5pdF9oYXhlKCkKKysgICAgc2VsZi5jcmVhdGVfdGFzaygn aGF4ZV8nICsgc2VsZi5jb21waWxlciwgc3JjLCB0Z3QpCisrCisrQGNvbmYKKytkZWYgY2hlY2tf aGF4ZShzZWxmLCBtaW5pPU5vbmUsIG1heGk9Tm9uZSk6CisrICAgIHNlbGYuc3RhcnRfbXNnKCdD aGVja2luZyBmb3IgaGF4ZSB2ZXJzaW9uJykKKysgICAgdHJ5OgorKyAgICAgICAgY3VyciA9IHJl LnNlYXJjaCgKKysgICAgICAgICAgICByJyhcZCsuPykrJywKKysgICAgICAgICAgICBzZWxmLmNt ZF9hbmRfbG9nKHNlbGYuZW52LkhBWEUgKyBbJy12ZXJzaW9uJ10pKS5ncm91cCgpCisrICAgIGV4 Y2VwdCBFcnJvcnMuV2FmRXJyb3I6CisrICAgICAgICBzZWxmLmVuZF9tc2coRmFsc2UpCisrICAg ICAgICBzZWxmLmZhdGFsKCdDYW5cJ3QgZ2V0IGhheGUgdmVyc2lvbicpCisrICAgICAgICByZXR1 cm4KKysKKysgICAgaWYgbWluaSBhbmQgVXRpbHMubnVtMnZlcihjdXJyKSA8IFV0aWxzLm51bTJ2 ZXIobWluaSk6CisrICAgICAgICBzZWxmLmVuZF9tc2coJ3dyb25nJywgY29sb3I9J1JFRCcpCisr ICAgICAgICBzZWxmLmZhdGFsKCclcyBpcyB0b28gb2xkLCBuZWVkID49ICVzJyAlIChjdXJyLCBt aW5pKSkKKysgICAgICAgIHJldHVybgorKyAgICBpZiBtYXhpIGFuZCBVdGlscy5udW0ydmVyKGN1 cnIpID4gVXRpbHMubnVtMnZlcihtYXhpKToKKysgICAgICAgIHNlbGYuZW5kX21zZygnd3Jvbmcn LCBjb2xvcj0nUkVEJykKKysgICAgICAgIHNlbGYuZmF0YWwoJyVzIGlzIHRvbyBuZXcsIG5lZWQg PD0gJXMnICUgKGN1cnIsIG1heGkpKQorKyAgICAgICAgcmV0dXJuCisrICAgIHNlbGYuZW5kX21z ZyhjdXJyLCBjb2xvcj0nR1JFRU4nKQorKyAgICBzZWxmLmVudi5IQVhFX1ZFUlNJT04gPSBjdXJy CisrCisrZGVmIGNvbmZpZ3VyZShzZWxmKToKKysgICAgc2VsZi5lbnYuYXBwZW5kX3ZhbHVlKAor KyAgICAgICAgJ0hBWEVfRkxBR1NfREVGQVVMVCcsCisrICAgICAgICBbJy1EJywgJ25vLWNvbXBp bGF0aW9uJywgJy1jcCcsIHNlbGYucGF0aC5hYnNwYXRoKCldKQorKyAgICBMb2dzLndhcm4oJ0Rl ZmF1bHQgZmxhZ3M6ICVzJyAlICcgJy5qb2luKHNlbGYuZW52LkhBWEVfRkxBR1NfREVGQVVMVCkp CisrICAgIHNlbGYuZmluZF9wcm9ncmFtKCdoYXhlJykKK2RpZmYgLS1naXQgYS93YWZsaWIvZXh0 cmFzL21zdmNfcGRiLnB5IGIvd2FmbGliL2V4dHJhcy9tc3ZjX3BkYi5weQorbmV3IGZpbGUgbW9k ZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uMDc3NjU2YjRmCistLS0gL2Rldi9udWxsCisrKysg Yi93YWZsaWIvZXh0cmFzL21zdmNfcGRiLnB5CitAQCAtMCwwICsxLDQ2IEBACisrIyEvdXNyL2Jp bi9lbnYgcHl0aG9uCisrIyBlbmNvZGluZzogdXRmLTgKKysjIFJhZmHDq2wgS29vaSAyMDE5Cisr CisrZnJvbSB3YWZsaWIgaW1wb3J0IFRhc2tHZW4KKysKKytAVGFza0dlbi5mZWF0dXJlKCdjJywg J2N4eCcsICdmYycpCisrQFRhc2tHZW4uYWZ0ZXJfbWV0aG9kKCdwcm9wYWdhdGVfdXNlbGliX3Zh cnMnKQorK2RlZiBhZGRfcGRiX3Blcl9vYmplY3Qoc2VsZik6CisrCSIiIkZvciBtc3ZjL2ZvcnRy YW4sIHNwZWNpZnkgYSB1bmlxdWUgY29tcGlsZSBwZGIgcGVyIG9iamVjdCwgdG8gd29yaworKwlh cm91bmQgTE5LNDA5OS4gRmxhZ3MgYXJlIHVwZGF0ZWQgd2l0aCBhIHVuaXF1ZSAvRmQgZmxhZyBi YXNlZCBvbiB0aGUKKysJdGFzayBvdXRwdXQgbmFtZS4gVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIHRo ZSBsaW5rIHBkYi4KKysJIiIiCisrCWlmIG5vdCBoYXNhdHRyKHNlbGYsICdjb21waWxlZF90YXNr cycpOgorKwkJcmV0dXJuCisrCisrCWxpbmtfdGFzayA9IGdldGF0dHIoc2VsZiwgJ2xpbmtfdGFz aycsIE5vbmUpCisrCisrCWZvciB0YXNrIGluIHNlbGYuY29tcGlsZWRfdGFza3M6CisrCQlpZiB0 YXNrLmlucHV0cyBhbmQgdGFzay5pbnB1dHNbMF0ubmFtZS5sb3dlcigpLmVuZHN3aXRoKCcucmMn KToKKysJCQljb250aW51ZQorKworKwkJYWRkX3BkYiA9IEZhbHNlCisrCQlmb3IgZmxhZ25hbWUg aW4gKCdDRkxBR1MnLCAnQ1hYRkxBR1MnLCAnRkNGTEFHUycpOgorKwkJCSMgc2V2ZXJhbCBsYW5n dWFnZXMgbWF5IGJlIHVzZWQgYXQgb25jZQorKwkJCWZvciBmbGFnIGluIHRhc2suZW52W2ZsYWdu YW1lXToKKysJCQkJaWYgZmxhZ1sxOl0ubG93ZXIoKSA9PSAnemknOgorKwkJCQkJYWRkX3BkYiA9 IFRydWUKKysJCQkJCWJyZWFrCisrCisrCQlpZiBhZGRfcGRiOgorKwkJCW5vZGUgPSB0YXNrLm91 dHB1dHNbMF0uY2hhbmdlX2V4dCgnLnBkYicpCisrCQkJcGRiX2ZsYWcgPSAnL0ZkOicgKyBub2Rl LmFic3BhdGgoKQorKworKwkJCWZvciBmbGFnbmFtZSBpbiAoJ0NGTEFHUycsICdDWFhGTEFHUycs ICdGQ0ZMQUdTJyk6CisrCQkJCWJ1ZiA9IFtwZGJfZmxhZ10KKysJCQkJZm9yIGZsYWcgaW4gdGFz ay5lbnZbZmxhZ25hbWVdOgorKwkJCQkJaWYgZmxhZ1sxOjNdID09ICdGZCcgb3IgZmxhZ1sxOl0u bG93ZXIoKSA9PSAnZnMnIG9yIGZsYWdbMTpdLmxvd2VyKCkgPT0gJ21wJzoKKysJCQkJCQljb250 aW51ZQorKwkJCQkJYnVmLmFwcGVuZChmbGFnKQorKwkJCQl0YXNrLmVudltmbGFnbmFtZV0gPSBi dWYKKysKKysJCQlpZiBsaW5rX3Rhc2sgYW5kIG5vdCBub2RlIGluIGxpbmtfdGFzay5kZXBfbm9k ZXM6CisrCQkJCWxpbmtfdGFzay5kZXBfbm9kZXMuYXBwZW5kKG5vZGUpCisrCQkJaWYgbm90IG5v ZGUgaW4gdGFzay5vdXRwdXRzOgorKwkJCQl0YXNrLm91dHB1dHMuYXBwZW5kKG5vZGUpCitkaWZm IC0tZ2l0IGEvd2FmbGliL2V4dHJhcy9zcGhpbngucHkgYi93YWZsaWIvZXh0cmFzL3NwaGlueC5w eQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uMDhmM2NmZDhhCistLS0g L2Rldi9udWxsCisrKysgYi93YWZsaWIvZXh0cmFzL3NwaGlueC5weQorQEAgLTAsMCArMSwxMjAg QEAKKysiIiJTdXBwb3J0IGZvciBTcGhpbnggZG9jdW1lbnRhdGlvbgorKworK1RoaXMgaXMgYSB3 cmFwcGVyIGZvciBzcGhpbngtYnVpbGQgcHJvZ3JhbS4gUGxlYXNlIG5vdGUgdGhhdCBzcGhpbngt YnVpbGQgc3VwcG9ydHMgb25seQorK29uZSBvdXRwdXQgZm9ybWF0IGF0IGEgdGltZSwgYnV0IHRo ZSB0b29sIGNhbiBjcmVhdGUgbXVsdGlwbGUgdGFza3MgdG8gaGFuZGxlIG1vcmUuCisrVGhlIG91 dHB1dCBmb3JtYXRzIGNhbiBiZSBwYXNzZWQgdmlhIHRoZSBzcGhpbnhfb3V0cHV0X2Zvcm1hdCwg d2hpY2ggaXMgYW4gYXJyYXkgb2YKKytzdHJpbmdzLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxp dHkgaWYgb25seSBvbmUgb3V0cHV0IGlzIG5lZWRlZCwgaXQgY2FuIGJlIHBhc3NlZAorK2FzIGEg c2luZ2xlIHN0cmluZy4KKytUaGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGlzIGh0bWwuCisrCisr U3BlY2lmaWMgZm9ybWF0cyBjYW4gYmUgaW5zdGFsbGVkIGluIGRpZmZlcmVudCBkaXJlY3Rvcmll cyBieSBzcGVjaWZ5aW5nIHRoZQorK2luc3RhbGxfcGF0aF88Rk9STUFUPiBhdHRyaWJ1dGUuIElm IG5vdCBkZWZpbmVkLCB0aGUgc3RhbmRhcmQgaW5zdGFsbF9wYXRoCisrd2lsbCBiZSB1c2VkIGlu c3RlYWQuCisrCisrRXhhbXBsZSB3c2NyaXB0OgorKworK2RlZiBjb25maWd1cmUoY25mKToKKysg ICAgY29uZi5sb2FkKCdzcGhpbngnKQorKworK2RlZiBidWlsZChibGQpOgorKyAgICBibGQoCisr ICAgICAgICBmZWF0dXJlcz0nc3BoaW54JywKKysgICAgICAgIHNwaGlueF9zb3VyY2U9J3NvdXJj ZXMnLCAgIyBwYXRoIHRvIHNvdXJjZSBkaXJlY3RvcnkKKysgICAgICAgIHNwaGlueF9vcHRpb25z PSctYSAtdicsICAjIHNwaGlueC1idWlsZCBwcm9ncmFtIGFkZGl0aW9uYWwgb3B0aW9ucworKyAg ICAgICAgc3BoaW54X291dHB1dF9mb3JtYXQ9WydodG1sJywgJ21hbiddLCAgIyBvdXRwdXQgZm9y bWF0IG9mIHNwaGlueCBkb2N1bWVudGF0aW9uCisrICAgICAgICBpbnN0YWxsX3BhdGhfbWFuPSck e0RPQ0RJUn0vbWFuJyAgICAgICAjIHB1dCBtYW4gcGFnZXMgaW4gYSBzcGVjaWZpYyBkaXJlY3Rv cnkKKysgICAgICAgICkKKysKKysiIiIKKysKKytmcm9tIHdhZmxpYi5Ob2RlIGltcG9ydCBOb2Rl CisrZnJvbSB3YWZsaWIgaW1wb3J0IFV0aWxzCisrZnJvbSB3YWZsaWIgaW1wb3J0IFRhc2sKKytm cm9tIHdhZmxpYi5UYXNrR2VuIGltcG9ydCBmZWF0dXJlLCBhZnRlcl9tZXRob2QKKysKKysKKytk ZWYgY29uZmlndXJlKGNuZik6CisrICAgICIiIkNoZWNrIGlmIHNwaGlueC1idWlsZCBwcm9ncmFt IGlzIGF2YWlsYWJsZSBhbmQgbG9hZHMgZ251X2RpcnMgdG9vbC4iIiIKKysgICAgY25mLmZpbmRf cHJvZ3JhbSgnc3BoaW54LWJ1aWxkJywgdmFyPSdTUEhJTlhfQlVJTEQnLCBtYW5kYXRvcnk9RmFs c2UpCisrICAgIGNuZi5sb2FkKCdnbnVfZGlycycpCisrCisrCisrQGZlYXR1cmUoJ3NwaGlueCcp CisrZGVmIGJ1aWxkX3NwaGlueChzZWxmKToKKysgICAgIiIiQnVpbGRzIHNwaGlueCBzb3VyY2Vz LgorKyAgICAiIiIKKysgICAgaWYgbm90IHNlbGYuZW52LlNQSElOWF9CVUlMRDoKKysgICAgICAg IHNlbGYuYmxkLmZhdGFsKCdQcm9ncmFtIFNQSElOWF9CVUlMRCBub3QgZGVmaW5lZC4nKQorKyAg ICBpZiBub3QgZ2V0YXR0cihzZWxmLCAnc3BoaW54X3NvdXJjZScsIE5vbmUpOgorKyAgICAgICAg c2VsZi5ibGQuZmF0YWwoJ0F0dHJpYnV0ZSBzcGhpbnhfc291cmNlIG5vdCBkZWZpbmVkLicpCisr ICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuc3BoaW54X3NvdXJjZSwgTm9kZSk6CisrICAgICAg ICBzZWxmLnNwaGlueF9zb3VyY2UgPSBzZWxmLnBhdGguZmluZF9ub2RlKHNlbGYuc3BoaW54X3Nv dXJjZSkKKysgICAgaWYgbm90IHNlbGYuc3BoaW54X3NvdXJjZToKKysgICAgICAgIHNlbGYuYmxk LmZhdGFsKCdDYW5cJ3QgZmluZCBzcGhpbnhfc291cmNlOiAlcicgJSBzZWxmLnNwaGlueF9zb3Vy Y2UpCisrCisrICAgICMgSW4gdGhlIHRhc2tnZW4gd2UgaGF2ZSB0aGUgY29tcGxldGUgbGlzdCBv ZiBmb3JtYXRzCisrICAgIFV0aWxzLmRlZl9hdHRycyhzZWxmLCBzcGhpbnhfb3V0cHV0X2Zvcm1h dD0naHRtbCcpCisrICAgIHNlbGYuc3BoaW54X291dHB1dF9mb3JtYXQgPSBVdGlscy50b19saXN0 KHNlbGYuc3BoaW54X291dHB1dF9mb3JtYXQpCisrCisrICAgIHNlbGYuZW52LlNQSElOWF9PUFRJ T05TID0gZ2V0YXR0cihzZWxmLCAnc3BoaW54X29wdGlvbnMnLCBbXSkKKysKKysgICAgZm9yIHNv dXJjZV9maWxlIGluIHNlbGYuc3BoaW54X3NvdXJjZS5hbnRfZ2xvYignKiovKicpOgorKyAgICAg ICAgc2VsZi5ibGQuYWRkX21hbnVhbF9kZXBlbmRlbmN5KHNlbGYuc3BoaW54X3NvdXJjZSwgc291 cmNlX2ZpbGUpCisrCisrICAgIGZvciBjZm10IGluIHNlbGYuc3BoaW54X291dHB1dF9mb3JtYXQ6 CisrICAgICAgICBzcGhpbnhfYnVpbGRfdGFzayA9IHNlbGYuY3JlYXRlX3Rhc2soJ1NwaGlueEJ1 aWxkaW5nVGFzaycpCisrICAgICAgICBzcGhpbnhfYnVpbGRfdGFzay5zZXRfaW5wdXRzKHNlbGYu c3BoaW54X3NvdXJjZSkKKysgICAgICAgICMgSW4gdGFzayB3ZSBrZWVwIHRoZSBzcGVjaWZpYyBm b3JtYXQgdGhpcyB0YXNrIGlzIGdlbmVyYXRpbmcKKysgICAgICAgIHNwaGlueF9idWlsZF90YXNr LmVudi5TUEhJTlhfT1VUUFVUX0ZPUk1BVCA9IGNmbXQKKysKKysgICAgICAgICMgdGhlIHNwaGlu eC1idWlsZCByZXN1bHRzIGFyZSBpbiA8YnVpbGQgKyBvdXRwdXRfZm9ybWF0PiBkaXJlY3RvcnkK KysgICAgICAgIHNwaGlueF9idWlsZF90YXNrLnNwaGlueF9vdXRwdXRfZGlyZWN0b3J5ID0gc2Vs Zi5wYXRoLmdldF9ibGQoKS5tYWtlX25vZGUoY2ZtdCkKKysgICAgICAgIHNwaGlueF9idWlsZF90 YXNrLnNldF9vdXRwdXRzKHNwaGlueF9idWlsZF90YXNrLnNwaGlueF9vdXRwdXRfZGlyZWN0b3J5 KQorKyAgICAgICAgc3BoaW54X2J1aWxkX3Rhc2suc3BoaW54X291dHB1dF9kaXJlY3RvcnkubWtk aXIoKQorKworKyAgICAgICAgVXRpbHMuZGVmX2F0dHJzKHNwaGlueF9idWlsZF90YXNrLCBpbnN0 YWxsX3BhdGg9Z2V0YXR0cihzZWxmLCAnaW5zdGFsbF9wYXRoXycgKyBjZm10LCBnZXRhdHRyKHNl bGYsICdpbnN0YWxsX3BhdGgnLCBnZXRfaW5zdGFsbF9wYXRoKHNwaGlueF9idWlsZF90YXNrKSkp KQorKworKworK2RlZiBnZXRfaW5zdGFsbF9wYXRoKG9iamVjdCk6CisrICAgIGlmIG9iamVjdC5l bnYuU1BISU5YX09VVFBVVF9GT1JNQVQgPT0gJ21hbic6CisrICAgICAgICByZXR1cm4gb2JqZWN0 LmVudi5NQU5ESVIKKysgICAgZWxpZiBvYmplY3QuZW52LlNQSElOWF9PVVRQVVRfRk9STUFUID09 ICdpbmZvJzoKKysgICAgICAgIHJldHVybiBvYmplY3QuZW52LklORk9ESVIKKysgICAgZWxzZToK KysgICAgICAgIHJldHVybiBvYmplY3QuZW52LkRPQ0RJUgorKworKworK2NsYXNzIFNwaGlueEJ1 aWxkaW5nVGFzayhUYXNrLlRhc2spOgorKyAgICBjb2xvciA9ICdCT0xEJworKyAgICBydW5fc3Ry ID0gJyR7U1BISU5YX0JVSUxEfSAtTSAke1NQSElOWF9PVVRQVVRfRk9STUFUfSAke1NSQ30gJHtU R1R9IC1kICR7VEdUWzBdLmJsZF9kaXIoKX0vZG9jdHJlZXMtJHtTUEhJTlhfT1VUUFVUX0ZPUk1B VH0gJHtTUEhJTlhfT1BUSU9OU30nCisrCisrICAgIGRlZiBrZXl3b3JkKHNlbGYpOgorKyAgICAg ICAgcmV0dXJuICdDb21waWxpbmcgKCVzKScgJSBzZWxmLmVudi5TUEhJTlhfT1VUUFVUX0ZPUk1B VAorKworKyAgICBkZWYgcnVubmFibGVfc3RhdHVzKHNlbGYpOgorKworKyAgICAgICAgZm9yIHgg aW4gc2VsZi5ydW5fYWZ0ZXI6CisrICAgICAgICAgICAgaWYgbm90IHguaGFzcnVuOgorKyAgICAg ICAgICAgICAgICByZXR1cm4gVGFzay5BU0tfTEFURVIKKysKKysgICAgICAgIHNlbGYuc2lnbmF0 dXJlKCkKKysgICAgICAgIHJldCA9IFRhc2suVGFzay5ydW5uYWJsZV9zdGF0dXMoc2VsZikKKysg ICAgICAgIGlmIHJldCA9PSBUYXNrLlNLSVBfTUU6CisrICAgICAgICAgICAgIyBpbiBjYXNlIHRo ZSBmaWxlcyB3ZXJlIHJlbW92ZWQKKysgICAgICAgICAgICBzZWxmLmFkZF9pbnN0YWxsKCkKKysg ICAgICAgIHJldHVybiByZXQKKysKKysKKysgICAgZGVmIHBvc3RfcnVuKHNlbGYpOgorKyAgICAg ICAgc2VsZi5hZGRfaW5zdGFsbCgpCisrICAgICAgICByZXR1cm4gVGFzay5UYXNrLnBvc3RfcnVu KHNlbGYpCisrCisrCisrICAgIGRlZiBhZGRfaW5zdGFsbChzZWxmKToKKysgICAgICAgIG5vZGVz ID0gc2VsZi5zcGhpbnhfb3V0cHV0X2RpcmVjdG9yeS5hbnRfZ2xvYignKiovKicsIHF1aWV0PVRy dWUpCisrICAgICAgICBzZWxmLm91dHB1dHMgKz0gbm9kZXMKKysgICAgICAgIHNlbGYuZ2VuZXJh dG9yLmFkZF9pbnN0YWxsX2ZpbGVzKGluc3RhbGxfdG89c2VsZi5pbnN0YWxsX3BhdGgsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX2Zyb209bm9kZXMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0cG9uZT1GYWxz ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnNw aGlueF9vdXRwdXRfZGlyZWN0b3J5Lm1ha2Vfbm9kZShzZWxmLmVudi5TUEhJTlhfT1VUUFVUX0ZP Uk1BVCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2 ZV90cmljaz1UcnVlKQorZGlmZiAtLWdpdCBhL3dhZmxpYi9leHRyYXMvd2FmY2FjaGUucHkgYi93 YWZsaWIvZXh0cmFzL3dhZmNhY2hlLnB5CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw MDAwMDAwLi4zMGFjM2VmNTEKKy0tLSAvZGV2L251bGwKKysrKyBiL3dhZmxpYi9leHRyYXMvd2Fm Y2FjaGUucHkKK0BAIC0wLDAgKzEsNjQ4IEBACisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorKyMg ZW5jb2Rpbmc6IHV0Zi04CisrIyBUaG9tYXMgTmFneSwgMjAxOSAoaXRhKQorKworKyIiIgorK0Zp bGVzeXN0ZW0tYmFzZWQgY2FjaGUgc3lzdGVtIHRvIHNoYXJlIGFuZCByZS11c2UgYnVpbGQgYXJ0 aWZhY3RzCisrCisrQ2FjaGUgYWNjZXNzIG9wZXJhdGlvbnMgKGNvcHkgdG8gYW5kIGZyb20pIGFy ZSBkZWxlZ2F0ZWQgdG8KKytpbmRlcGVuZGVudCBwcmUtZm9ya2VkIHdvcmtlciBzdWJwcm9jZXNz ZXMuCisrCisrVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWF5IGJlIHNldDoK KysqIFdBRkNBQ0hFOiBzZXZlcmFsIHBvc3NpYmlsaXRpZXM6CisrICAtIEZpbGUgY2FjaGU6Cisr ICAgIGFic29sdXRlIHBhdGggb2YgdGhlIHdhZiBjYWNoZSAofi8uY2FjaGUvd2FmY2FjaGVfdXNl ciwKKysgICAgd2hlcmUgYHVzZXJgIHJlcHJlc2VudHMgdGhlIGN1cnJlbnRseSBsb2dnZWQtaW4g dXNlcikKKysgIC0gVVJMIHRvIGEgY2FjaGUgc2VydmVyLCBmb3IgZXhhbXBsZToKKysgICAgZXhw b3J0IFdBRkNBQ0hFPWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maWxlcy8KKysgICAgaW4gdGhhdCBj YXNlLCBHRVQvUE9TVCByZXF1ZXN0cyBhcmUgbWFkZSB0byB1cmxzIG9mIHRoZSBmb3JtCisrICAg IGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maWxlcy8wMDAwMDAwMDAvMCAoY2FjaGUgbWFuYWdlbWVu dCBpcyBkZWxlZ2F0ZWQgdG8gdGhlIHNlcnZlcikKKysgIC0gR0NTLCBTMyBvciBNSU5JTyBidWNr ZXQKKysgICAgZ3M6Ly9teS1idWNrZXQvICAgICh1c2VzIGdzdXRpbCBjb21tYW5kIGxpbmUgdG9v bCBvciBXQUZDQUNIRV9DTUQpCisrICAgIHMzOi8vbXktYnVja2V0LyAgICAodXNlcyBhd3MgY29t bWFuZCBsaW5lIHRvb2wgb3IgV0FGQ0FDSEVfQ01EKQorKyAgICBtaW5pbzovL215LWJ1Y2tldC8g KHVzZXMgbWMgY29tbWFuZCBsaW5lIHRvb2wgb3IgV0FGQ0FDSEVfQ01EKQorKyogV0FGQ0FDSEVf Q01EOiBidWNrZXQgdXBsb2FkL2Rvd25sb2FkIGNvbW1hbmQsIGZvciBleGFtcGxlOgorKyAgICBX QUZDQUNIRV9DTUQ9ImdzdXRpbCBjcCAle1NSQ30gJXtUR1R9IgorKyAgTm90ZSB0aGF0IHRoZSBX QUZDQUNIRSBidWNrZXQgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlv bgorKyAgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRpb24gKHVwbG9hZCBvciBkb3dubG9hZCkuIEZv ciBleGFtcGxlLCB3aXRoOgorKyAgICBXQUZDQUNIRT0iZ3M6Ly9teWJ1Y2tldC8iCisrICB0aGUg Zm9sbG93aW5nIGNvbW1hbmRzIG1heSBiZSBydW46CisrICAgIGdzdXRpbCBjcCBidWlsZC9teXBy b2dyYW0gIGdzOi8vbXlidWNrZXQvYWEvYWFhYWEvMQorKyAgICBnc3V0aWwgY3AgZ3M6Ly9teWJ1 Y2tldC9iYi9iYmJiYi8yIGJ1aWxkL3NvbWVmaWxlCisrKiBXQUZDQUNIRV9OT19QVVNIOiBpZiBz ZXQsIGRpc2FibGVzIHB1c2hpbmcgdG8gdGhlIGNhY2hlCisrKiBXQUZDQUNIRV9WRVJCT1NJVFk6 IGlmIHNldCwgZGlzcGxheXMgbW9yZSBkZXRhaWxlZCBjYWNoZSBvcGVyYXRpb25zCisrKiBXQUZD QUNIRV9TVEFUUzogaWYgc2V0LCBkaXNwbGF5cyBjYWNoZSB1c2FnZSBzdGF0aXN0aWNzIG9uIGV4 aXQKKysKKytGaWxlIGNhY2hlIHNwZWNpZmljIG9wdGlvbnM6CisrICBGaWxlcyBhcmUgY29waWVk IHVzaW5nIGhhcmQgbGlua3MgYnkgZGVmYXVsdDsgaWYgdGhlIGNhY2hlIGlzIGxvY2F0ZWQKKysg IG9udG8gYW5vdGhlciBwYXJ0aXRpb24sIHRoZSBzeXN0ZW0gc3dpdGNoZXMgdG8gZmlsZSBjb3Bp ZXMgaW5zdGVhZC4KKysqIFdBRkNBQ0hFX1RSSU1fTUFYX0ZPTERFUjogbWF4aW11bSBhbW91bnQg b2YgdGFza3MgdG8gY2FjaGUgKDFNKQorKyogV0FGQ0FDSEVfRVZJQ1RfTUFYX0JZVEVTOiBtYXhp bXVtIGFtb3VudCBvZiBjYWNoZSBzaXplIGluIGJ5dGVzICgxMEdCKQorKyogV0FGQ0FDSEVfRVZJ Q1RfSU5URVJWQUxfTUlOVVRFUzogbWluaW11bSB0aW1lIGludGVydmFsIHRvIHRyeQorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRyaW0gdGhlIGNhY2hlICgzIG1pbnV0 ZXMpCisrCisrVXBsb2FkIHNwZWNpZmljIG9wdGlvbnM6CisrKiBXQUZDQUNIRV9BU1lOQ19XT1JL RVJTOiBkZWZpbmUgYSBudW1iZXIgb2Ygd29ya2VycyB0byB1cGxvYWQgcmVzdWx0cyBhc3luY2hy b25vdXNseQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYXkgaW1wcm92ZSBidWls ZCBwZXJmb3JtYW5jZSB3aXRoIG1hbnkvbG9uZyBmaWxlIHVwbG9hZHMKKysgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGlzIHVuc2V0IChzeW5jaHJvbm91cyB1cGxvYWRzKQor KyogV0FGQ0FDSEVfQVNZTkNfTk9XQUlUOiBkbyBub3Qgd2FpdCBmb3IgdXBsb2FkcyB0byBjb21w bGV0ZSAoZGVmYXVsdDogRmFsc2UpCisrICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcmVx dWlyZXMgYXN5bmNob25vdXMgdXBsb2FkcyB0byBoYXZlIGFuIGVmZmVjdAorKworK1VzYWdlOjoK KysKKysJZGVmIGJ1aWxkKGJsZCk6CisrCQlibGQubG9hZCgnd2FmY2FjaGUnKQorKwkJLi4uCisr CisrVG8gdHJvdWJsZXNob290OjoKKysKKysJd2FmIGNsZWFuIGJ1aWxkIC0tem9uZT13YWZjYWNo ZQorKyIiIgorKworK2ltcG9ydCBhdGV4aXQsIGJhc2U2NCwgZXJybm8sIGZjbnRsLCBnZXRwYXNz LCBvcywgcmUsIHNodXRpbCwgc3lzLCB0aW1lLCB0aHJlYWRpbmcsIHRyYWNlYmFjaywgdXJsbGli Mywgc2hsZXgKKyt0cnk6CisrCWltcG9ydCBzdWJwcm9jZXNzMzIgYXMgc3VicHJvY2VzcworK2V4 Y2VwdCBJbXBvcnRFcnJvcjoKKysJaW1wb3J0IHN1YnByb2Nlc3MKKysKKytiYXNlX2NhY2hlID0g b3MucGF0aC5leHBhbmR1c2VyKCd+Ly5jYWNoZS8nKQorK2lmIG5vdCBvcy5wYXRoLmlzZGlyKGJh c2VfY2FjaGUpOgorKwliYXNlX2NhY2hlID0gJy90bXAvJworK2RlZmF1bHRfd2FmY2FjaGVfZGly ID0gb3MucGF0aC5qb2luKGJhc2VfY2FjaGUsICd3YWZjYWNoZV8nICsgZ2V0cGFzcy5nZXR1c2Vy KCkpCisrCisrQ0FDSEVfRElSID0gb3MuZW52aXJvbi5nZXQoJ1dBRkNBQ0hFJywgZGVmYXVsdF93 YWZjYWNoZV9kaXIpCisrV0FGQ0FDSEVfQ01EID0gb3MuZW52aXJvbi5nZXQoJ1dBRkNBQ0hFX0NN RCcpCisrVFJJTV9NQVhfRk9MREVSUyA9IGludChvcy5lbnZpcm9uLmdldCgnV0FGQ0FDSEVfVFJJ TV9NQVhfRk9MREVSJywgMTAwMDAwMCkpCisrRVZJQ1RfSU5URVJWQUxfTUlOVVRFUyA9IGludChv cy5lbnZpcm9uLmdldCgnV0FGQ0FDSEVfRVZJQ1RfSU5URVJWQUxfTUlOVVRFUycsIDMpKQorK0VW SUNUX01BWF9CWVRFUyA9IGludChvcy5lbnZpcm9uLmdldCgnV0FGQ0FDSEVfRVZJQ1RfTUFYX0JZ VEVTJywgMTAqKjEwKSkKKytXQUZDQUNIRV9OT19QVVNIID0gMSBpZiBvcy5lbnZpcm9uLmdldCgn V0FGQ0FDSEVfTk9fUFVTSCcpIGVsc2UgMAorK1dBRkNBQ0hFX1ZFUkJPU0lUWSA9IDEgaWYgb3Mu ZW52aXJvbi5nZXQoJ1dBRkNBQ0hFX1ZFUkJPU0lUWScpIGVsc2UgMAorK1dBRkNBQ0hFX1NUQVRT ID0gMSBpZiBvcy5lbnZpcm9uLmdldCgnV0FGQ0FDSEVfU1RBVFMnKSBlbHNlIDAKKytXQUZDQUNI RV9BU1lOQ19XT1JLRVJTID0gb3MuZW52aXJvbi5nZXQoJ1dBRkNBQ0hFX0FTWU5DX1dPUktFUlMn KQorK1dBRkNBQ0hFX0FTWU5DX05PV0FJVCA9IG9zLmVudmlyb24uZ2V0KCdXQUZDQUNIRV9BU1lO Q19OT1dBSVQnKQorK09LID0gIm9rIgorKworK3JlX3dhZl9jbWQgPSByZS5jb21waWxlKCcoP1A8 c3JjPiV7U1JDfSl8KD9QPHRndD4le1RHVH0pJykKKysKKyt0cnk6CisrCWltcG9ydCBjUGlja2xl CisrZXhjZXB0IEltcG9ydEVycm9yOgorKwlpbXBvcnQgcGlja2xlIGFzIGNQaWNrbGUKKysKKytp ZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgorKwlmcm9tIHdhZmxpYiBpbXBvcnQgVGFzaywgTG9n cywgVXRpbHMsIEJ1aWxkCisrCisrZGVmIGNhbl9yZXRyaWV2ZV9jYWNoZShzZWxmKToKKysJIiIi CisrCU5ldyBtZXRob2QgZm9yIHdhZiBUYXNrIGNsYXNzZXMKKysJIiIiCisrCWlmIG5vdCBzZWxm Lm91dHB1dHM6CisrCQlyZXR1cm4gRmFsc2UKKysKKysJc2VsZi5jYWNoZWQgPSBGYWxzZQorKwor KwlzaWcgPSBzZWxmLnNpZ25hdHVyZSgpCisrCXNzaWcgPSBVdGlscy50b19oZXgoc2VsZi51aWQo KSArIHNpZykKKysKKysJaWYgV0FGQ0FDSEVfU1RBVFM6CisrCQlzZWxmLmdlbmVyYXRvci5ibGQu Y2FjaGVfcmVxcyArPSAxCisrCisrCWZpbGVzX3RvID0gW25vZGUuYWJzcGF0aCgpIGZvciBub2Rl IGluIHNlbGYub3V0cHV0c10KKysJcHJvYyA9IGdldF9wcm9jZXNzKCkKKysJZXJyID0gY2FjaGVf Y29tbWFuZChwcm9jLCBzc2lnLCBbXSwgZmlsZXNfdG8pCisrCXByb2Nlc3NfcG9vbC5hcHBlbmQo cHJvYykKKysJaWYgZXJyLnN0YXJ0c3dpdGgoT0spOgorKwkJaWYgV0FGQ0FDSEVfVkVSQk9TSVRZ OgorKwkJCUxvZ3MucHByaW50KCdDWUFOJywgJyAgRmV0Y2hlZCAlciBmcm9tIGNhY2hlJyAlIGZp bGVzX3RvKQorKwkJZWxzZToKKysJCQlMb2dzLmRlYnVnKCd3YWZjYWNoZTogZmV0Y2hlZCAlciBm cm9tIGNhY2hlJywgZmlsZXNfdG8pCisrCQlpZiBXQUZDQUNIRV9TVEFUUzoKKysJCQlzZWxmLmdl bmVyYXRvci5ibGQuY2FjaGVfaGl0cyArPSAxCisrCWVsc2U6CisrCQlpZiBXQUZDQUNIRV9WRVJC T1NJVFk6CisrCQkJTG9ncy5wcHJpbnQoJ1lFTExPVycsICcgIE5vIGNhY2hlIGVudHJ5ICVzJyAl IGZpbGVzX3RvKQorKwkJZWxzZToKKysJCQlMb2dzLmRlYnVnKCd3YWZjYWNoZTogTm8gY2FjaGUg ZW50cnkgJXM6ICVzJywgZmlsZXNfdG8sIGVycikKKysJCXJldHVybiBGYWxzZQorKworKwlzZWxm LmNhY2hlZCA9IFRydWUKKysJcmV0dXJuIFRydWUKKysKKytkZWYgcHV0X2ZpbGVzX2NhY2hlKHNl bGYpOgorKwkiIiIKKysJTmV3IG1ldGhvZCBmb3Igd2FmIFRhc2sgY2xhc3NlcworKwkiIiIKKysJ aWYgV0FGQ0FDSEVfTk9fUFVTSCBvciBnZXRhdHRyKHNlbGYsICdjYWNoZWQnLCBOb25lKSBvciBu b3Qgc2VsZi5vdXRwdXRzOgorKwkJcmV0dXJuCisrCisrCWZpbGVzX2Zyb20gPSBbXQorKwlmb3Ig bm9kZSBpbiBzZWxmLm91dHB1dHM6CisrCQlwYXRoID0gbm9kZS5hYnNwYXRoKCkKKysJCWlmIG5v dCBvcy5wYXRoLmlzZmlsZShwYXRoKToKKysJCQlyZXR1cm4KKysJCWZpbGVzX2Zyb20uYXBwZW5k KHBhdGgpCisrCisrCWJsZCA9IHNlbGYuZ2VuZXJhdG9yLmJsZAorKwlvbGRfc2lnID0gc2VsZi5z aWduYXR1cmUoKQorKworKwlmb3Igbm9kZSBpbiBzZWxmLmlucHV0czoKKysJCXRyeToKKysJCQlk ZWwgbm9kZS5jdHguY2FjaGVfc2lnW25vZGVdCisrCQlleGNlcHQgS2V5RXJyb3I6CisrCQkJcGFz cworKworKwlkZWxhdHRyKHNlbGYsICdjYWNoZV9zaWcnKQorKwlzaWcgPSBzZWxmLnNpZ25hdHVy ZSgpCisrCisrCWRlZiBfYXN5bmNfcHV0X2ZpbGVzX2NhY2hlKGJsZCwgc3NpZywgZmlsZXNfZnJv bSk6CisrCQlwcm9jID0gZ2V0X3Byb2Nlc3MoKQorKwkJaWYgV0FGQ0FDSEVfQVNZTkNfV09SS0VS UzoKKysJCQl3aXRoIGJsZC53YWZjYWNoZV9sb2NrOgorKwkJCQlpZiBibGQud2FmY2FjaGVfc3Rv cDoKKysJCQkJCXByb2Nlc3NfcG9vbC5hcHBlbmQocHJvYykKKysJCQkJCXJldHVybgorKwkJCQli bGQud2FmY2FjaGVfcHJvY3MuYWRkKHByb2MpCisrCisrCQllcnIgPSBjYWNoZV9jb21tYW5kKHBy b2MsIHNzaWcsIGZpbGVzX2Zyb20sIFtdKQorKwkJcHJvY2Vzc19wb29sLmFwcGVuZChwcm9jKQor KwkJaWYgZXJyLnN0YXJ0c3dpdGgoT0spOgorKwkJCWlmIFdBRkNBQ0hFX1ZFUkJPU0lUWToKKysJ CQkJTG9ncy5wcHJpbnQoJ0NZQU4nLCAnICBTdWNjZXNzZnVsbHkgdXBsb2FkZWQgJXMgdG8gY2Fj aGUnICUgZmlsZXNfZnJvbSkKKysJCQllbHNlOgorKwkJCQlMb2dzLmRlYnVnKCd3YWZjYWNoZTog U3VjY2Vzc2Z1bGx5IHVwbG9hZGVkICVyIHRvIGNhY2hlJywgZmlsZXNfZnJvbSkKKysJCQlpZiBX QUZDQUNIRV9TVEFUUzoKKysJCQkJYmxkLmNhY2hlX3B1dHMgKz0gMQorKwkJZWxzZToKKysJCQlp ZiBXQUZDQUNIRV9WRVJCT1NJVFk6CisrCQkJCUxvZ3MucHByaW50KCdSRUQnLCAnICBFcnJvciBj YWNoaW5nIHN0ZXAgcmVzdWx0cyAlczogJXMnICUgKGZpbGVzX2Zyb20sIGVycikpCisrCQkJZWxz ZToKKysJCQkJTG9ncy5kZWJ1Zygnd2FmY2FjaGU6IEVycm9yIGNhY2hpbmcgcmVzdWx0cyAlczog JXMnLCBmaWxlc19mcm9tLCBlcnIpCisrCisrCWlmIG9sZF9zaWcgPT0gc2lnOgorKwkJc3NpZyA9 IFV0aWxzLnRvX2hleChzZWxmLnVpZCgpICsgc2lnKQorKwkJaWYgV0FGQ0FDSEVfQVNZTkNfV09S S0VSUzoKKysJCQlmdXQgPSBibGQud2FmY2FjaGVfZXhlY3V0b3Iuc3VibWl0KF9hc3luY19wdXRf ZmlsZXNfY2FjaGUsIGJsZCwgc3NpZywgZmlsZXNfZnJvbSkKKysJCQlibGQud2FmY2FjaGVfdXBs b2Fkcy5hcHBlbmQoZnV0KQorKwkJZWxzZToKKysJCQlfYXN5bmNfcHV0X2ZpbGVzX2NhY2hlKGJs ZCwgc3NpZywgZmlsZXNfZnJvbSkKKysJZWxzZToKKysJCUxvZ3MuZGVidWcoJ3dhZmNhY2hlOiBz a2lwcGVkICVyIHVwbG9hZCBkdWUgdG8gbGF0ZSBpbnB1dCBtb2RpZmljYXRpb25zICVyJywgc2Vs Zi5vdXRwdXRzLCBzZWxmLmlucHV0cykKKysKKysJYmxkLnRhc2tfc2lnc1tzZWxmLnVpZCgpXSA9 IHNlbGYuY2FjaGVfc2lnCisrCisrZGVmIGhhc2hfZW52X3ZhcnMoc2VsZiwgZW52LCB2YXJzX2xz dCk6CisrCSIiIgorKwlSZWltcGxlbWVudCBCdWlsZENvbnRleHQuaGFzaF9lbnZfdmFycyBzbyB0 aGF0IHRoZSByZXN1bHRpbmcgaGFzaCBkb2VzIG5vdCBkZXBlbmQgb24gbG9jYWwgcGF0aHMKKysJ IiIiCisrCWlmIG5vdCBlbnYudGFibGU6CisrCQllbnYgPSBlbnYucGFyZW50CisrCQlpZiBub3Qg ZW52OgorKwkJCXJldHVybiBVdGlscy5TSUdfTklMCisrCisrCWlkeCA9IHN0cihpZChlbnYpKSAr IHN0cih2YXJzX2xzdCkKKysJdHJ5OgorKwkJY2FjaGUgPSBzZWxmLmNhY2hlX2VudgorKwlleGNl cHQgQXR0cmlidXRlRXJyb3I6CisrCQljYWNoZSA9IHNlbGYuY2FjaGVfZW52ID0ge30KKysJZWxz ZToKKysJCXRyeToKKysJCQlyZXR1cm4gc2VsZi5jYWNoZV9lbnZbaWR4XQorKwkJZXhjZXB0IEtl eUVycm9yOgorKwkJCXBhc3MKKysKKysJdiA9IHN0cihbZW52W2FdIGZvciBhIGluIHZhcnNfbHN0 XSkKKysJdiA9IHYucmVwbGFjZShzZWxmLnNyY25vZGUuYWJzcGF0aCgpLl9fcmVwcl9fKClbOi0x XSwgJycpCisrCW0gPSBVdGlscy5tZDUoKQorKwltLnVwZGF0ZSh2LmVuY29kZSgpKQorKwlyZXQg PSBtLmRpZ2VzdCgpCisrCisrCUxvZ3MuZGVidWcoJ2Vudmhhc2g6ICVyICVyJywgcmV0LCB2KQor KworKwljYWNoZVtpZHhdID0gcmV0CisrCisrCXJldHVybiByZXQKKysKKytkZWYgdWlkKHNlbGYp OgorKwkiIiIKKysJUmVpbXBsZW1lbnQgVGFzay51aWQoKSBzbyB0aGF0IHRoZSBzaWduYXR1cmUg ZG9lcyBub3QgZGVwZW5kIG9uIGxvY2FsIHBhdGhzCisrCSIiIgorKwl0cnk6CisrCQlyZXR1cm4g c2VsZi51aWRfCisrCWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysJCW0gPSBVdGlscy5tZDUoKQor KwkJc3JjID0gc2VsZi5nZW5lcmF0b3IuYmxkLnNyY25vZGUKKysJCXVwID0gbS51cGRhdGUKKysJ CXVwKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLmVuY29kZSgpKQorKwkJZm9yIHggaW4gc2VsZi5p bnB1dHMgKyBzZWxmLm91dHB1dHM6CisrCQkJdXAoeC5wYXRoX2Zyb20oc3JjKS5lbmNvZGUoKSkK KysJCXNlbGYudWlkXyA9IG0uZGlnZXN0KCkKKysJCXJldHVybiBzZWxmLnVpZF8KKysKKysKKytk ZWYgbWFrZV9jYWNoZWQoY2xzKToKKysJIiIiCisrCUVuYWJsZSB0aGUgd2FmIGNhY2hlIGZvciBh IGdpdmVuIHRhc2sgY2xhc3MKKysJIiIiCisrCWlmIGdldGF0dHIoY2xzLCAnbm9jYWNoZScsIE5v bmUpIG9yIGdldGF0dHIoY2xzLCAnaGFzX2NhY2hlJywgRmFsc2UpOgorKwkJcmV0dXJuCisrCisr CWZ1bGxfbmFtZSA9ICIlcy4lcyIgJSAoY2xzLl9fbW9kdWxlX18sIGNscy5fX25hbWVfXykKKysJ aWYgZnVsbF9uYW1lIGluICgnd2FmbGliLlRvb2xzLmNjcm9vdC52bnVtJywgJ3dhZmxpYi5CdWls ZC5pbnN0Jyk6CisrCQlyZXR1cm4KKysKKysJbTEgPSBnZXRhdHRyKGNscywgJ3J1bicsIE5vbmUp CisrCWRlZiBydW4oc2VsZik6CisrCQlpZiBnZXRhdHRyKHNlbGYsICdub2NhY2hlJywgRmFsc2Up OgorKwkJCXJldHVybiBtMShzZWxmKQorKwkJaWYgc2VsZi5jYW5fcmV0cmlldmVfY2FjaGUoKToK KysJCQlyZXR1cm4gMAorKwkJcmV0dXJuIG0xKHNlbGYpCisrCWNscy5ydW4gPSBydW4KKysKKysJ bTIgPSBnZXRhdHRyKGNscywgJ3Bvc3RfcnVuJywgTm9uZSkKKysJZGVmIHBvc3RfcnVuKHNlbGYp OgorKwkJaWYgZ2V0YXR0cihzZWxmLCAnbm9jYWNoZScsIEZhbHNlKToKKysJCQlyZXR1cm4gbTIo c2VsZikKKysJCXJldCA9IG0yKHNlbGYpCisrCQlzZWxmLnB1dF9maWxlc19jYWNoZSgpCisrCQly ZXR1cm4gcmV0CisrCWNscy5wb3N0X3J1biA9IHBvc3RfcnVuCisrCWNscy5oYXNfY2FjaGUgPSBU cnVlCisrCisrcHJvY2Vzc19wb29sID0gW10KKytkZWYgZ2V0X3Byb2Nlc3MoKToKKysJIiIiCisr CVJldHVybnMgYSB3b3JrZXIgcHJvY2VzcyB0aGF0IGNhbiBwcm9jZXNzIHdhZiBjYWNoZSBjb21t YW5kcworKwlUaGUgd29ya2VyIHByb2Nlc3MgaXMgYXNzdW1lZCB0byBiZSByZXR1cm5lZCB0byB0 aGUgcHJvY2VzcyBwb29sIHdoZW4gdW51c2VkCisrCSIiIgorKwl0cnk6CisrCQlyZXR1cm4gcHJv Y2Vzc19wb29sLnBvcCgpCisrCWV4Y2VwdCBJbmRleEVycm9yOgorKwkJZmlsZXBhdGggPSBvcy5w YXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkgKyBvcy5zZXAgKyAnd2FmY2Fj aGUucHknCisrCQljbWQgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsIFV0aWxzLnJlYWRmKGZpbGVw YXRoKV0KKysJCXJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3Mu UElQRSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBidWZzaXplPTApCisrCisrZGVmIGF0ZXhpdF9w b29sKCk6CisrCWZvciBwcm9jIGluIHByb2Nlc3NfcG9vbDoKKysJCXByb2Mua2lsbCgpCisrYXRl eGl0LnJlZ2lzdGVyKGF0ZXhpdF9wb29sKQorKworK2RlZiBidWlsZChibGQpOgorKwkiIiIKKysJ Q2FsbGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyB0byBlbmFibGUgZmlsZSBjYWNoaW5nCisr CSIiIgorKworKwlpZiBXQUZDQUNIRV9BU1lOQ19XT1JLRVJTOgorKwkJdHJ5OgorKwkJCW51bV93 b3JrZXJzID0gaW50KFdBRkNBQ0hFX0FTWU5DX1dPUktFUlMpCisrCQlleGNlcHQgVmFsdWVFcnJv cjoKKysJCQlMb2dzLndhcm4oJ0ludmFsaWQgV0FGQ0FDSEVfQVNZTkNfV09SS0VSUyBzcGVjaWZp ZWQ6ICVyJyAlIFdBRkNBQ0hFX0FTWU5DX1dPUktFUlMpCisrCQllbHNlOgorKwkJCWZyb20gY29u Y3VycmVudC5mdXR1cmVzIGltcG9ydCBUaHJlYWRQb29sRXhlY3V0b3IKKysJCQlibGQud2FmY2Fj aGVfZXhlY3V0b3IgPSBUaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9bnVtX3dvcmtlcnMp CisrCQkJYmxkLndhZmNhY2hlX3VwbG9hZHMgPSBbXQorKwkJCWJsZC53YWZjYWNoZV9wcm9jcyA9 IHNldChbXSkKKysJCQlibGQud2FmY2FjaGVfc3RvcCA9IEZhbHNlCisrCQkJYmxkLndhZmNhY2hl X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisrCisrCQlkZWYgZmluYWxpemVfdXBsb2FkX2FzeW5j KGJsZCk6CisrCQkJaWYgV0FGQ0FDSEVfQVNZTkNfTk9XQUlUOgorKwkJCQl3aXRoIGJsZC53YWZj YWNoZV9sb2NrOgorKwkJCQkJYmxkLndhZmNhY2hlX3N0b3AgPSBUcnVlCisrCisrCQkJCWZvciBm dXQgaW4gcmV2ZXJzZWQoYmxkLndhZmNhY2hlX3VwbG9hZHMpOgorKwkJCQkJZnV0LmNhbmNlbCgp CisrCisrCQkJCWZvciBwcm9jIGluIGJsZC53YWZjYWNoZV9wcm9jczoKKysJCQkJCXByb2Mua2ls bCgpCisrCisrCQkJCWJsZC53YWZjYWNoZV9wcm9jcy5jbGVhcigpCisrCQkJZWxzZToKKysJCQkJ TG9ncy5wcHJpbnQoJ0NZQU4nLCAnLi4uIHdhaXRpbmcgZm9yIHdhZmNhY2hlIHVwbG9hZHMgdG8g Y29tcGxldGUgKCVzIHVwbG9hZHMpJyAlIGxlbihibGQud2FmY2FjaGVfdXBsb2FkcykpCisrCQkJ YmxkLndhZmNhY2hlX2V4ZWN1dG9yLnNodXRkb3duKHdhaXQ9VHJ1ZSkKKysJCWJsZC5hZGRfcG9z dF9mdW4oZmluYWxpemVfdXBsb2FkX2FzeW5jKQorKworKwlpZiBXQUZDQUNIRV9TVEFUUzoKKysJ CSMgSW5pdCBjb3VudGVyIGZvciBzdGF0aXN0aWNzIGFuZCBob29rIHRvIHByaW50IHJlc3VsdHMg YXQgdGhlIGVuZAorKwkJYmxkLmNhY2hlX3JlcXMgPSBibGQuY2FjaGVfaGl0cyA9IGJsZC5jYWNo ZV9wdXRzID0gMAorKworKwkJZGVmIHByaW50c3RhdHMoYmxkKToKKysJCQloaXRfcmF0aW8gPSAw CisrCQkJaWYgYmxkLmNhY2hlX3JlcXMgPiAwOgorKwkJCQloaXRfcmF0aW8gPSAoYmxkLmNhY2hl X2hpdHMgLyBibGQuY2FjaGVfcmVxcykgKiAxMDAKKysJCQlMb2dzLnBwcmludCgnQ1lBTicsICcg IHdhZmNhY2hlIHN0YXRzOiAlcyByZXF1ZXN0cywgJXMgaGl0cyAocmF0aW86ICUuMmYlJSksICVz IHdyaXRlcycgJQorKwkJCQkJIChibGQuY2FjaGVfcmVxcywgYmxkLmNhY2hlX2hpdHMsIGhpdF9y YXRpbywgYmxkLmNhY2hlX3B1dHMpICkKKysJCWJsZC5hZGRfcG9zdF9mdW4ocHJpbnRzdGF0cykK KysKKysJaWYgcHJvY2Vzc19wb29sOgorKwkJIyBhbHJlYWR5IGNhbGxlZCBvbmNlCisrCQlyZXR1 cm4KKysKKysJIyBwcmUtYWxsb2NhdGlvbgorKwlwcm9jZXNzZXMgPSBbZ2V0X3Byb2Nlc3MoKSBm b3IgeCBpbiByYW5nZShibGQuam9icyldCisrCXByb2Nlc3NfcG9vbC5leHRlbmQocHJvY2Vzc2Vz KQorKworKwlUYXNrLlRhc2suY2FuX3JldHJpZXZlX2NhY2hlID0gY2FuX3JldHJpZXZlX2NhY2hl CisrCVRhc2suVGFzay5wdXRfZmlsZXNfY2FjaGUgPSBwdXRfZmlsZXNfY2FjaGUKKysJVGFzay5U YXNrLnVpZCA9IHVpZAorKwlCdWlsZC5CdWlsZENvbnRleHQuaGFzaF9lbnZfdmFycyA9IGhhc2hf ZW52X3ZhcnMKKysJZm9yIHggaW4gcmV2ZXJzZWQobGlzdChUYXNrLmNsYXNzZXMudmFsdWVzKCkp KToKKysJCW1ha2VfY2FjaGVkKHgpCisrCisrZGVmIGNhY2hlX2NvbW1hbmQocHJvYywgc2lnLCBm aWxlc19mcm9tLCBmaWxlc190byk6CisrCSIiIgorKwlDcmVhdGUgYSBjb21tYW5kIGZvciBjYWNo ZSB3b3JrZXIgcHJvY2Vzc2VzLCByZXR1cm5zIGEgcGlja2xlZAorKwliYXNlNjQtZW5jb2RlZCB0 dXBsZSBjb250YWluaW5nIHRoZSB0YXNrIHNpZ25hdHVyZSwgYSBsaXN0IG9mIGZpbGVzIHRvCisr CWNhY2hlIGFuZCBhIGxpc3Qgb2YgZmlsZXMgZmlsZXMgdG8gZ2V0IGZyb20gY2FjaGUgKG9uZSBv ZiB0aGUgbGlzdHMKKysJaXMgYXNzdW1lZCB0byBiZSBlbXB0eSkKKysJIiIiCisrCW9iaiA9IGJh c2U2NC5iNjRlbmNvZGUoY1BpY2tsZS5kdW1wcyhbc2lnLCBmaWxlc19mcm9tLCBmaWxlc190b10p KQorKwlwcm9jLnN0ZGluLndyaXRlKG9iaikKKysJcHJvYy5zdGRpbi53cml0ZSgnXG4nLmVuY29k ZSgpKQorKwlwcm9jLnN0ZGluLmZsdXNoKCkKKysJb2JqID0gcHJvYy5zdGRvdXQucmVhZGxpbmUo KQorKwlpZiBub3Qgb2JqOgorKwkJcmFpc2UgT1NFcnJvcignUHJlZm9ya2VkIHN1Yi1wcm9jZXNz ICVyIGRpZWQnICUgcHJvYy5waWQpCisrCXJldHVybiBjUGlja2xlLmxvYWRzKGJhc2U2NC5iNjRk ZWNvZGUob2JqKSkKKysKKyt0cnk6CisrCWNvcHlmdW4gPSBvcy5saW5rCisrZXhjZXB0IE5hbWVF cnJvcjoKKysJY29weWZ1biA9IHNodXRpbC5jb3B5MgorKworK2RlZiBhdG9taWNfY29weShvcmln LCBkZXN0KToKKysJIiIiCisrCUNvcHkgZmlsZXMgdG8gdGhlIGNhY2hlLCB0aGUgb3BlcmF0aW9u IGlzIGF0b21pYyBmb3IgYSBnaXZlbiBmaWxlCisrCSIiIgorKwlnbG9iYWwgY29weWZ1bgorKwl0 bXAgPSBkZXN0ICsgJy50bXAnCisrCXVwID0gb3MucGF0aC5kaXJuYW1lKGRlc3QpCisrCXRyeToK KysJCW9zLm1ha2VkaXJzKHVwKQorKwlleGNlcHQgT1NFcnJvcjoKKysJCXBhc3MKKysKKysJdHJ5 OgorKwkJY29weWZ1bihvcmlnLCB0bXApCisrCWV4Y2VwdCBPU0Vycm9yIGFzIGU6CisrCQlpZiBl LmVycm5vID09IGVycm5vLkVYREVWOgorKwkJCWNvcHlmdW4gPSBzaHV0aWwuY29weTIKKysJCQlj b3B5ZnVuKG9yaWcsIHRtcCkKKysJCWVsc2U6CisrCQkJcmFpc2UKKysJb3MucmVuYW1lKHRtcCwg ZGVzdCkKKysKKytkZWYgbHJ1X3RyaW0oKToKKysJIiIiCisrCXRoZSBjYWNoZSBmb2xkZXJzIHRh a2UgdGhlIGZvcm06CisrCWBDQUNIRV9ESVIvMGIvMGIxODBmODIyNDZkNzI2ZWNlMzdjOGNjZDBm YjFjZGUyNjUwZDdiZmNmMTIyZWMxZjE2OTA3OWEzYmZjMGFiOWAKKysJdGhleSBhcmUgbGlzdGVk IGluIG9yZGVyIG9mIGxhc3QgYWNjZXNzLCBhbmQgdGhlbiByZW1vdmVkCisrCXVudGlsIHRoZSBh bW91bnQgb2YgZm9sZGVycyBpcyB3aXRoaW4gVFJJTV9NQVhfRk9MREVSUyBhbmQgdGhlIHRvdGFs IHNwYWNlCisrCXRha2VuIGJ5IGZpbGVzIGlzIGxlc3MgdGhhbiBFVklDVF9NQVhfQllURVMKKysJ IiIiCisrCWxzdCA9IFtdCisrCWZvciB1cCBpbiBvcy5saXN0ZGlyKENBQ0hFX0RJUik6CisrCQlp ZiBsZW4odXApID09IDI6CisrCQkJc3ViID0gb3MucGF0aC5qb2luKENBQ0hFX0RJUiwgdXApCisr CQkJZm9yIGh2YWwgaW4gb3MubGlzdGRpcihzdWIpOgorKwkJCQlwYXRoID0gb3MucGF0aC5qb2lu KHN1YiwgaHZhbCkKKysKKysJCQkJc2l6ZSA9IDAKKysJCQkJZm9yIGZuYW1lIGluIG9zLmxpc3Rk aXIocGF0aCk6CisrCQkJCQl0cnk6CisrCQkJCQkJc2l6ZSArPSBvcy5sc3RhdChvcy5wYXRoLmpv aW4ocGF0aCwgZm5hbWUpKS5zdF9zaXplCisrCQkJCQlleGNlcHQgT1NFcnJvcjoKKysJCQkJCQlw YXNzCisrCQkJCWxzdC5hcHBlbmQoKG9zLnN0YXQocGF0aCkuc3RfbXRpbWUsIHNpemUsIHBhdGgp KQorKworKwlsc3Quc29ydChrZXk9bGFtYmRhIHg6IHhbMF0pCisrCWxzdC5yZXZlcnNlKCkKKysK KysJdG90ID0gc3VtKHhbMV0gZm9yIHggaW4gbHN0KQorKwl3aGlsZSB0b3QgPiBFVklDVF9NQVhf QllURVMgb3IgbGVuKGxzdCkgPiBUUklNX01BWF9GT0xERVJTOgorKwkJXywgdG1wX3NpemUsIHBh dGggPSBsc3QucG9wKCkKKysJCXRvdCAtPSB0bXBfc2l6ZQorKworKwkJdG1wID0gcGF0aCArICcu cmVtb3ZlJworKwkJdHJ5OgorKwkJCXNodXRpbC5ybXRyZWUodG1wKQorKwkJZXhjZXB0IE9TRXJy b3I6CisrCQkJcGFzcworKwkJdHJ5OgorKwkJCW9zLnJlbmFtZShwYXRoLCB0bXApCisrCQlleGNl cHQgT1NFcnJvcjoKKysJCQlzeXMuc3RkZXJyLndyaXRlKCdDb3VsZCBub3QgcmVuYW1lICVyIHRv ICVyXG4nICUgKHBhdGgsIHRtcCkpCisrCQllbHNlOgorKwkJCXRyeToKKysJCQkJc2h1dGlsLnJt dHJlZSh0bXApCisrCQkJZXhjZXB0IE9TRXJyb3I6CisrCQkJCXN5cy5zdGRlcnIud3JpdGUoJ0Nv dWxkIG5vdCByZW1vdmUgJXJcbicgJSB0bXApCisrCXN5cy5zdGRlcnIud3JpdGUoIkNhY2hlIHRy aW1tZWQ6ICVyIGJ5dGVzIGluICVyIGZvbGRlcnMgbGVmdFxuIiAlICh0b3QsIGxlbihsc3QpKSkK KysKKysKKytkZWYgbHJ1X2V2aWN0KCk6CisrCSIiIgorKwlSZWR1Y2UgdGhlIGNhY2hlIHNpemUK KysJIiIiCisrCWxvY2tmaWxlID0gb3MucGF0aC5qb2luKENBQ0hFX0RJUiwgJ2FsbC5sb2NrJykK KysJdHJ5OgorKwkJc3QgPSBvcy5zdGF0KGxvY2tmaWxlKQorKwlleGNlcHQgRW52aXJvbm1lbnRF cnJvciBhcyBlOgorKwkJaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisrCQkJd2l0aCBvcGVu KGxvY2tmaWxlLCAndycpIGFzIGY6CisrCQkJCWYud3JpdGUoJycpCisrCQkJcmV0dXJuCisrCQll bHNlOgorKwkJCXJhaXNlCisrCisrCWlmIHN0LnN0X210aW1lIDwgdGltZS50aW1lKCkgLSBFVklD VF9JTlRFUlZBTF9NSU5VVEVTICogNjA6CisrCQkjIGNoZWNrIGV2ZXJ5IEVWSUNUX0lOVEVSVkFM X01JTlVURVMgbWludXRlcyBpZiB0aGUgY2FjaGUgaXMgdG9vIGJpZworKwkJIyBPQ0xPRVhFQyBp cyB1bm5lY2Vzc2FyeSBiZWNhdXNlIG5vIHByb2Nlc3NlcyBhcmUgc3Bhd25lZAorKwkJZmQgPSBv cy5vcGVuKGxvY2tmaWxlLCBvcy5PX1JEV1IgfCBvcy5PX0NSRUFULCAwbzc1NSkKKysJCXRyeToK KysJCQl0cnk6CisrCQkJCWZjbnRsLmZsb2NrKGZkLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9D S19OQikKKysJCQlleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKysJCQkJaWYgV0FGQ0FDSEVfVkVS Qk9TSVRZOgorKwkJCQkJc3lzLnN0ZGVyci53cml0ZSgnd2FmY2FjaGU6IGFub3RoZXIgY2xlYW5p bmcgcHJvY2VzcyBpcyBydW5uaW5nXG4nKQorKwkJCWVsc2U6CisrCQkJCSMgbm93IGRvdyB0aGUg YWN0dWFsIGNsZWFudXAKKysJCQkJbHJ1X3RyaW0oKQorKwkJCQlvcy51dGltZShsb2NrZmlsZSwg Tm9uZSkKKysJCWZpbmFsbHk6CisrCQkJb3MuY2xvc2UoZmQpCisrCisrY2xhc3MgbmV0Y2FjaGUo b2JqZWN0KToKKysJZGVmIF9faW5pdF9fKHNlbGYpOgorKwkJc2VsZi5odHRwID0gdXJsbGliMy5Q b29sTWFuYWdlcigpCisrCisrCWRlZiB1cmxfb2Yoc2VsZiwgc2lnLCBpKToKKysJCXJldHVybiAi JXMvJXMvJXMiICUgKENBQ0hFX0RJUiwgc2lnLCBpKQorKworKwlkZWYgdXBsb2FkKHNlbGYsIGZp bGVfcGF0aCwgc2lnLCBpKToKKysJCXVybCA9IHNlbGYudXJsX29mKHNpZywgaSkKKysJCXdpdGgg b3BlbihmaWxlX3BhdGgsICdyYicpIGFzIGY6CisrCQkJZmlsZV9kYXRhID0gZi5yZWFkKCkKKysJ CXIgPSBzZWxmLmh0dHAucmVxdWVzdCgnUE9TVCcsIHVybCwgdGltZW91dD02MCwKKysJCQlmaWVs ZHM9eyAnZmlsZSc6ICgnJXMvJXMnICUgKHNpZywgaSksIGZpbGVfZGF0YSksIH0pCisrCQlpZiBy LnN0YXR1cyA+PSA0MDA6CisrCQkJcmFpc2UgT1NFcnJvcigiSW52YWxpZCBzdGF0dXMgJXIgJXIi ICUgKHVybCwgci5zdGF0dXMpKQorKworKwlkZWYgZG93bmxvYWQoc2VsZiwgZmlsZV9wYXRoLCBz aWcsIGkpOgorKwkJdXJsID0gc2VsZi51cmxfb2Yoc2lnLCBpKQorKwkJd2l0aCBzZWxmLmh0dHAu cmVxdWVzdCgnR0VUJywgdXJsLCBwcmVsb2FkX2NvbnRlbnQ9RmFsc2UsIHRpbWVvdXQ9NjApIGFz IGluZjoKKysJCQlpZiBpbmYuc3RhdHVzID49IDQwMDoKKysJCQkJcmFpc2UgT1NFcnJvcigiSW52 YWxpZCBzdGF0dXMgJXIgJXIiICUgKHVybCwgaW5mLnN0YXR1cykpCisrCQkJd2l0aCBvcGVuKGZp bGVfcGF0aCwgJ3diJykgYXMgb3V0OgorKwkJCQlzaHV0aWwuY29weWZpbGVvYmooaW5mLCBvdXQp CisrCisrCWRlZiBjb3B5X3RvX2NhY2hlKHNlbGYsIHNpZywgZmlsZXNfZnJvbSwgZmlsZXNfdG8p OgorKwkJdHJ5OgorKwkJCWZvciBpLCB4IGluIGVudW1lcmF0ZShmaWxlc19mcm9tKToKKysJCQkJ aWYgbm90IG9zLnBhdGguaXNsaW5rKHgpOgorKwkJCQkJc2VsZi51cGxvYWQoeCwgc2lnLCBpKQor KwkJZXhjZXB0IEV4Y2VwdGlvbjoKKysJCQlyZXR1cm4gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQor KwkJcmV0dXJuIE9LCisrCisrCWRlZiBjb3B5X2Zyb21fY2FjaGUoc2VsZiwgc2lnLCBmaWxlc19m cm9tLCBmaWxlc190byk6CisrCQl0cnk6CisrCQkJZm9yIGksIHggaW4gZW51bWVyYXRlKGZpbGVz X3RvKToKKysJCQkJc2VsZi5kb3dubG9hZCh4LCBzaWcsIGkpCisrCQlleGNlcHQgRXhjZXB0aW9u OgorKwkJCXJldHVybiB0cmFjZWJhY2suZm9ybWF0X2V4YygpCisrCQlyZXR1cm4gT0sKKysKKytj bGFzcyBmY2FjaGUob2JqZWN0KToKKysJZGVmIF9faW5pdF9fKHNlbGYpOgorKwkJaWYgbm90IG9z LnBhdGguZXhpc3RzKENBQ0hFX0RJUik6CisrCQkJdHJ5OgorKwkJCQlvcy5tYWtlZGlycyhDQUNI RV9ESVIpCisrCQkJZXhjZXB0IE9TRXJyb3I6CisrCQkJCXBhc3MKKysJCWlmIG5vdCBvcy5wYXRo LmV4aXN0cyhDQUNIRV9ESVIpOgorKwkJCXJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCBpbml0 aWFsaXplIHRoZSBjYWNoZSBkaXJlY3RvcnknKQorKworKwlkZWYgY29weV90b19jYWNoZShzZWxm LCBzaWcsIGZpbGVzX2Zyb20sIGZpbGVzX3RvKToKKysJCSIiIgorKwkJQ29weSBmaWxlcyB0byB0 aGUgY2FjaGUsIGV4aXN0aW5nIGZpbGVzIGFyZSBvdmVyd3JpdHRlbiwKKysJCWFuZCB0aGUgY29w eSBpcyBhdG9taWMgb25seSBmb3IgYSBnaXZlbiBmaWxlLCBub3QgZm9yIGFsbCBmaWxlcworKwkJ dGhhdCBiZWxvbmcgdG8gYSBnaXZlbiB0YXNrIG9iamVjdAorKwkJIiIiCisrCQl0cnk6CisrCQkJ Zm9yIGksIHggaW4gZW51bWVyYXRlKGZpbGVzX2Zyb20pOgorKwkJCQlkZXN0ID0gb3MucGF0aC5q b2luKENBQ0hFX0RJUiwgc2lnWzoyXSwgc2lnLCBzdHIoaSkpCisrCQkJCWF0b21pY19jb3B5KHgs IGRlc3QpCisrCQlleGNlcHQgRXhjZXB0aW9uOgorKwkJCXJldHVybiB0cmFjZWJhY2suZm9ybWF0 X2V4YygpCisrCQllbHNlOgorKwkJCSMgYXR0ZW1wdCB0cmltbWluZyBpZiBjYWNoaW5nIHdhcyBz dWNjZXNzZnVsOgorKwkJCSMgd2UgbWF5IGhhdmUgdGhpbmdzIHRvIHRyaW0hCisrCQkJdHJ5Ogor KwkJCQlscnVfZXZpY3QoKQorKwkJCWV4Y2VwdCBFeGNlcHRpb246CisrCQkJCXJldHVybiB0cmFj ZWJhY2suZm9ybWF0X2V4YygpCisrCQlyZXR1cm4gT0sKKysKKysJZGVmIGNvcHlfZnJvbV9jYWNo ZShzZWxmLCBzaWcsIGZpbGVzX2Zyb20sIGZpbGVzX3RvKToKKysJCSIiIgorKwkJQ29weSBmaWxl cyBmcm9tIHRoZSBjYWNoZQorKwkJIiIiCisrCQl0cnk6CisrCQkJZm9yIGksIHggaW4gZW51bWVy YXRlKGZpbGVzX3RvKToKKysJCQkJb3JpZyA9IG9zLnBhdGguam9pbihDQUNIRV9ESVIsIHNpZ1s6 Ml0sIHNpZywgc3RyKGkpKQorKwkJCQlhdG9taWNfY29weShvcmlnLCB4KQorKworKwkJCSMgc3Vj Y2VzcyEgdXBkYXRlIHRoZSBjYWNoZSB0aW1lCisrCQkJb3MudXRpbWUob3MucGF0aC5qb2luKENB Q0hFX0RJUiwgc2lnWzoyXSwgc2lnKSwgTm9uZSkKKysJCWV4Y2VwdCBFeGNlcHRpb246CisrCQkJ cmV0dXJuIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKysJCXJldHVybiBPSworKworK2NsYXNzIGJ1 Y2tldF9jYWNoZShvYmplY3QpOgorKwlkZWYgYnVja2V0X2NvcHkoc2VsZiwgc291cmNlLCB0YXJn ZXQpOgorKwkJaWYgV0FGQ0FDSEVfQ01EOgorKwkJCWRlZiByZXBsYWNlcihtYXRjaCk6CisrCQkJ CWlmIG1hdGNoLmdyb3VwKCdzcmMnKToKKysJCQkJCXJldHVybiBzb3VyY2UKKysJCQkJZWxpZiBt YXRjaC5ncm91cCgndGd0Jyk6CisrCQkJCQlyZXR1cm4gdGFyZ2V0CisrCQkJY21kID0gW3JlX3dh Zl9jbWQuc3ViKHJlcGxhY2VyLCB4KSBmb3IgeCBpbiBzaGxleC5zcGxpdChXQUZDQUNIRV9DTUQp XQorKwkJZWxpZiBDQUNIRV9ESVIuc3RhcnRzd2l0aCgnczM6Ly8nKToKKysJCQljbWQgPSBbJ2F3 cycsICdzMycsICdjcCcsIHNvdXJjZSwgdGFyZ2V0XQorKwkJZWxpZiBDQUNIRV9ESVIuc3RhcnRz d2l0aCgnZ3M6Ly8nKToKKysJCQljbWQgPSBbJ2dzdXRpbCcsICdjcCcsIHNvdXJjZSwgdGFyZ2V0 XQorKwkJZWxzZToKKysJCQljbWQgPSBbJ21jJywgJ2NwJywgc291cmNlLCB0YXJnZXRdCisrCisr CQlwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0 ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisrCQlvdXQsIGVyciA9IHByb2MuY29tbXVuaWNhdGUoKQor KwkJaWYgcHJvYy5yZXR1cm5jb2RlOgorKwkJCXJhaXNlIE9TRXJyb3IoJ0Vycm9yIGNvcHkgJXIg dG8gJXIgdXNpbmc6ICVyIChleGl0ICVyKTpcbiAgb3V0OiVzXG4gIGVycjolcycgJSAoCisrCQkJ CXNvdXJjZSwgdGFyZ2V0LCBjbWQsIHByb2MucmV0dXJuY29kZSwgb3V0LmRlY29kZShlcnJvcnM9 J3JlcGxhY2UnKSwgZXJyLmRlY29kZShlcnJvcnM9J3JlcGxhY2UnKSkpCisrCisrCWRlZiBjb3B5 X3RvX2NhY2hlKHNlbGYsIHNpZywgZmlsZXNfZnJvbSwgZmlsZXNfdG8pOgorKwkJdHJ5OgorKwkJ CWZvciBpLCB4IGluIGVudW1lcmF0ZShmaWxlc19mcm9tKToKKysJCQkJZGVzdCA9IG9zLnBhdGgu am9pbihDQUNIRV9ESVIsIHNpZ1s6Ml0sIHNpZywgc3RyKGkpKQorKwkJCQlzZWxmLmJ1Y2tldF9j b3B5KHgsIGRlc3QpCisrCQlleGNlcHQgRXhjZXB0aW9uOgorKwkJCXJldHVybiB0cmFjZWJhY2su Zm9ybWF0X2V4YygpCisrCQlyZXR1cm4gT0sKKysKKysJZGVmIGNvcHlfZnJvbV9jYWNoZShzZWxm LCBzaWcsIGZpbGVzX2Zyb20sIGZpbGVzX3RvKToKKysJCXRyeToKKysJCQlmb3IgaSwgeCBpbiBl bnVtZXJhdGUoZmlsZXNfdG8pOgorKwkJCQlvcmlnID0gb3MucGF0aC5qb2luKENBQ0hFX0RJUiwg c2lnWzoyXSwgc2lnLCBzdHIoaSkpCisrCQkJCXNlbGYuYnVja2V0X2NvcHkob3JpZywgeCkKKysJ CWV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorKwkJCXJldHVybiB0cmFjZWJhY2suZm9ybWF0X2V4 YygpCisrCQlyZXR1cm4gT0sKKysKKytkZWYgbG9vcChzZXJ2aWNlKToKKysJIiIiCisrCVRoaXMg ZnVuY3Rpb24gaXMgcnVuIHdoZW4gdGhpcyBmaWxlIGlzIHJ1biBhcyBhIHN0YW5kYWxvbmUgcHl0 aG9uIHNjcmlwdCwKKysJaXQgYXNzdW1lcyBhIHBhcmVudCBwcm9jZXNzIHRoYXQgd2lsbCBjb21t dW5pY2F0ZSB0aGUgY29tbWFuZHMgdG8gaXQKKysJYXMgcGlja2xlZC1lbmNvZGVkIHR1cGxlcyAo b25lIGxpbmUgcGVyIGNvbW1hbmQpCisrCisrCVRoZSBjb21tYW5kcyBhcmUgdG8gY29weSBmaWxl cyB0byB0aGUgY2FjaGUgb3IgY29weSBmaWxlcyBmcm9tIHRoZQorKwljYWNoZSB0byBhIHRhcmdl dCBkZXN0aW5hdGlvbgorKwkiIiIKKysJIyBvbmUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhdCBh IHNpbmdsZSB0aW1lIGJ5IGEgc2luZ2xlIHByb2Nlc3MKKysJIyB0aGVyZWZvcmUgc3RkaW4gbmV2 ZXIgaGFzIG1vcmUgdGhhbiBvbmUgbGluZQorKwl0eHQgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5z dHJpcCgpCisrCWlmIG5vdCB0eHQ6CisrCQkjIHBhcmVudCBwcm9jZXNzIHByb2JhYmx5IGVuZGVk CisrCQlzeXMuZXhpdCgxKQorKwlyZXQgPSBPSworKworKwlbc2lnLCBmaWxlc19mcm9tLCBmaWxl c190b10gPSBjUGlja2xlLmxvYWRzKGJhc2U2NC5iNjRkZWNvZGUodHh0KSkKKysJaWYgZmlsZXNf ZnJvbToKKysJCSMgVE9ETyByZXR1cm4gZWFybHkgd2hlbiBwdXNoaW5nIGZpbGVzIHVwc3RyZWFt CisrCQlyZXQgPSBzZXJ2aWNlLmNvcHlfdG9fY2FjaGUoc2lnLCBmaWxlc19mcm9tLCBmaWxlc190 bykKKysJZWxpZiBmaWxlc190bzoKKysJCSMgdGhlIGJ1aWxkIHByb2Nlc3Mgd2FpdHMgZm9yIHdv cmtlcnMgdG8gKHBvc3NpYmx5KSBvYnRhaW4gZmlsZXMgZnJvbSB0aGUgY2FjaGUKKysJCXJldCA9 IHNlcnZpY2UuY29weV9mcm9tX2NhY2hlKHNpZywgZmlsZXNfZnJvbSwgZmlsZXNfdG8pCisrCWVs c2U6CisrCQlyZXQgPSAiSW52YWxpZCBjb21tYW5kIgorKworKwlvYmogPSBiYXNlNjQuYjY0ZW5j b2RlKGNQaWNrbGUuZHVtcHMocmV0KSkKKysJc3lzLnN0ZG91dC53cml0ZShvYmouZGVjb2RlKCkp CisrCXN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKysJc3lzLnN0ZG91dC5mbHVzaCgpCisrCisraWYg X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKysJaWYgQ0FDSEVfRElSLnN0YXJ0c3dpdGgoJ3MzOi8v Jykgb3IgQ0FDSEVfRElSLnN0YXJ0c3dpdGgoJ2dzOi8vJykgb3IgQ0FDSEVfRElSLnN0YXJ0c3dp dGgoJ21pbmlvOi8vJyk6CisrCQlpZiBDQUNIRV9ESVIuc3RhcnRzd2l0aCgnbWluaW86Ly8nKToK KysJCQlDQUNIRV9ESVIgPSBDQUNIRV9ESVJbODpdICAgIyBtaW5pbyBkb2Vzbid0IG5lZWQgdGhl IHByb3RvY29sIHBhcnQsIHVzZXMgY29uZmlnIGFsaWFzZXMKKysJCXNlcnZpY2UgPSBidWNrZXRf Y2FjaGUoKQorKwllbGlmIENBQ0hFX0RJUi5zdGFydHN3aXRoKCdodHRwJyk6CisrCQlzZXJ2aWNl ID0gbmV0Y2FjaGUoKQorKwllbHNlOgorKwkJc2VydmljZSA9IGZjYWNoZSgpCisrCXdoaWxlIDE6 CisrCQl0cnk6CisrCQkJbG9vcChzZXJ2aWNlKQorKwkJZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0 OgorKwkJCWJyZWFrCisrCitkaWZmIC0tZ2l0IGEvd2FmbGliL2V4dHJhcy94Y29kZTYucHkgYi93 YWZsaWIvZXh0cmFzL3hjb2RlNi5weQoraW5kZXggOTFiYmZmMTgxLi5jNWIzMDkxMjAgMTAwNjQ0 CistLS0gYS93YWZsaWIvZXh0cmFzL3hjb2RlNi5weQorKysrIGIvd2FmbGliL2V4dHJhcy94Y29k ZTYucHkKK0BAIC05OSw3ICs5OSw3IEBAIGRlZiBkZWxldGVfaW52YWxpZF92YWx1ZXMoZGN0KToK KyAJCS4uLgorIAl9CisgCSdSZWxlYXNlJzogeworLQkJJ0FSQ0hTJyB4ODZfNjQnCisrCQknQVJD SFMnOiB4ODZfNjQnCisgCQkuLi4KKyAJfQorIH0KK0BAIC0xNjMsMTIgKzE2MywxMiBAQCBkZWYg dG9zdHJpbmcoc2VsZiwgdmFsdWUpOgorIAkJCXJlc3VsdCA9IHJlc3VsdCArICJcdFx0fSIKKyAJ CQlyZXR1cm4gcmVzdWx0CisgCQllbGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CistCQkJcmV0 dXJuICJcIiVzXCIiICUgdmFsdWUKKysJCQlyZXR1cm4gJyIlcyInICUgdmFsdWUucmVwbGFjZSgn IicsICdcXFxcXFwiJykKKyAJCWVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgCQkJcmVz dWx0ID0gIihcbiIKKyAJCQlmb3IgaSBpbiB2YWx1ZToKKy0JCQkJcmVzdWx0ID0gcmVzdWx0ICsg Ilx0XHRcdCVzLFxuIiAlIHNlbGYudG9zdHJpbmcoaSkKKy0JCQlyZXN1bHQgPSByZXN1bHQgKyAi XHRcdCkiCisrCQkJCXJlc3VsdCA9IHJlc3VsdCArICJcdFx0XHRcdCVzLFxuIiAlIHNlbGYudG9z dHJpbmcoaSkKKysJCQlyZXN1bHQgPSByZXN1bHQgKyAiXHRcdFx0KSIKKyAJCQlyZXR1cm4gcmVz dWx0CisgCQllbGlmIGlzaW5zdGFuY2UodmFsdWUsIFhDb2RlTm9kZSk6CisgCQkJcmV0dXJuIHZh bHVlLl9pZAorQEAgLTU2NSwxMyArNTY1LDEzIEBAIGRlZiBwcm9jZXNzX3hjb2RlKHNlbGYpOgor IAkjIE92ZXJyaWRlIHRhcmdldCBzcGVjaWZpYyBidWlsZCBzZXR0aW5ncworIAlibGRzZXR0aW5n cyA9IHsKKyAJCSdIRUFERVJfU0VBUkNIX1BBVEhTJzogWyckKGluaGVyaXRlZCknXSArIHNlbGYu ZW52WydJTkNQQVRIUyddLAorLQkJJ0xJQlJBUllfU0VBUkNIX1BBVEhTJzogWyckKGluaGVyaXRl ZCknXSArIFV0aWxzLnRvX2xpc3Qoc2VsZi5lbnYuTElCUEFUSCkgKyBVdGlscy50b19saXN0KHNl bGYuZW52LlNUTElCUEFUSCkgKyBVdGlscy50b19saXN0KHNlbGYuZW52LkxJQkRJUikgLAorKwkJ J0xJQlJBUllfU0VBUkNIX1BBVEhTJzogWyckKGluaGVyaXRlZCknXSArIFV0aWxzLnRvX2xpc3Qo c2VsZi5lbnYuTElCUEFUSCkgKyBVdGlscy50b19saXN0KHNlbGYuZW52LlNUTElCUEFUSCkgKyBV dGlscy50b19saXN0KHNlbGYuZW52LkxJQkRJUiksCisgCQknRlJBTUVXT1JLX1NFQVJDSF9QQVRI Uyc6IFsnJChpbmhlcml0ZWQpJ10gKyBVdGlscy50b19saXN0KHNlbGYuZW52LkZSQU1FV09SS1BB VEgpLAorLQkJJ09USEVSX0xERkxBR1MnOiBsaWJzICsgJyAnICsgZnJhbWV3b3JrcywKKy0JCSdP VEhFUl9MSUJUT09MRkxBR1MnOiBibGQuZW52WydMSU5LRkxBR1MnXSwKKysJCSdPVEhFUl9MREZM QUdTJzogbGlicyArICcgJyArIGZyYW1ld29ya3MgKyAnICcgKyAnICcuam9pbihibGQuZW52WydM SU5LRkxBR1MnXSksCisgCQknT1RIRVJfQ1BMVVNQTFVTRkxBR1MnOiBVdGlscy50b19saXN0KHNl bGYuZW52WydDWFhGTEFHUyddKSwKKyAJCSdPVEhFUl9DRkxBR1MnOiBVdGlscy50b19saXN0KHNl bGYuZW52WydDRkxBR1MnXSksCistCQknSU5TVEFMTF9QQVRIJzogW10KKysJCSdJTlNUQUxMX1BB VEgnOiBbXSwKKysJCSdHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TJzogc2VsZi5lbnZbJ0RF RklORVMnXQorIAl9CisgCisgCSMgSW5zdGFsbCBwYXRoCitAQCAtNTkxLDcgKzU5MSw3IEBAIGRl ZiBwcm9jZXNzX3hjb2RlKHNlbGYpOgorIAorIAkjIFRoZSBrZXlzIHJlcHJlc2VudHMgZGlmZmVy ZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24sIGUuZy4gRGVidWcsIFJlbGVhc2UgYW5kIHNvIG9uLi4K KyAJIyBJbnNlcnQgb3VyIGdlbmVyYXRlZCBidWlsZCBzZXR0aW5ncyB0byBhbGwgY29uZmlndXJh dGlvbiBuYW1lcworLQlrZXlzID0gc2V0KHNldHRpbmdzLmtleXMoKSArIGJsZC5lbnYuUFJPSl9D T05GSUdVUkFUSU9OLmtleXMoKSkKKysJa2V5cyA9IHNldChzZXR0aW5ncy5rZXlzKCkpIHwgc2V0 KGJsZC5lbnYuUFJPSl9DT05GSUdVUkFUSU9OLmtleXMoKSkKKyAJZm9yIGsgaW4ga2V5czoKKyAJ CWlmIGsgaW4gc2V0dGluZ3M6CisgCQkJc2V0dGluZ3Nba10udXBkYXRlKGJsZHNldHRpbmdzKQor ZGlmZiAtLWdpdCBhL3dhZmxpYi9maXhweTIucHkgYi93YWZsaWIvZml4cHkyLnB5CitpbmRleCAy NDE3NmUwNjYuLmM5OWJmZjRiOSAxMDA2NDQKKy0tLSBhL3dhZmxpYi9maXhweTIucHkKKysrKyBi L3dhZmxpYi9maXhweTIucHkKK0BAIC01Niw3ICs1Niw3IEBAIGRlZiByMShjb2RlKToKKyBAc3Vi c3QoJ1J1bm5lci5weScpCisgZGVmIHI0KGNvZGUpOgorIAkiZ2VuZXJhdG9yIHN5bnRheCIKKy0J cmV0dXJuIGNvZGUucmVwbGFjZSgnbmV4dChzZWxmLmJpdGVyKScsICdzZWxmLmJpdGVyLm5leHQo KScpCisrCXJldHVybiBjb2RlLnJlcGxhY2UoJ25leHQoc2VsZi5iaXRlciknLCAnc2VsZi5iaXRl ci5uZXh0KCknKS5yZXBsYWNlKCdzZWxmLmRhZW1vbiA9IFRydWUnLCAnc2VsZi5zZXREYWVtb24o MSknKQorIAorIEBzdWJzdCgnQ29udGV4dC5weScpCisgZGVmIHI1KGNvZGUpOgorZGlmZiAtLWdp dCBhL3dhZmxpYi9wcm9jZXNzb3IucHkgYi93YWZsaWIvcHJvY2Vzc29yLnB5CitpbmRleCAyZWVj ZjNiZDkuLmVmZjJlNjlhZCAxMDA3NTUKKy0tLSBhL3dhZmxpYi9wcm9jZXNzb3IucHkKKysrKyBi L3dhZmxpYi9wcm9jZXNzb3IucHkKK0BAIC0yNyw2ICsyNywxMCBAQCBkZWYgcnVuKCk6CisgCVtj bWQsIGt3YXJncywgY2FyZ3NdID0gY1BpY2tsZS5sb2FkcyhiYXNlNjQuYjY0ZGVjb2RlKHR4dCkp CisgCWNhcmdzID0gY2FyZ3Mgb3Ige30KKyAKKysJaWYgbm90ICdjbG9zZV9mZHMnIGluIGt3YXJn czoKKysJCSMgd29ya2VycyBoYXZlIG5vIGZkcworKwkJa3dhcmdzWydjbG9zZV9mZHMnXSA9IEZh bHNlCisrCisgCXJldCA9IDEKKyAJb3V0LCBlcnIsIGV4LCB0cmFjZSA9IChOb25lLCBOb25lLCBO b25lLCBOb25lKQorIAl0cnk6Cg== --===============0350694754850336756==--