From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Owen W. Taylor To: git-commits@fedoraproject.org Subject: [flatpaks/flatpak-runtime] f45: Add application-reporting functionality Date: Fri, 11 Sep 2026 14:40:20 GMT Message-ID: <178913762002.1.9290502397079455286.flatpaks-flatpak-runtime-646539e2f360@fedoraproject.org> List-ID: X-Git-Repo: flatpaks/flatpak-runtime X-Git-Branch: f45 X-Git-Rev: 646539e2f36026a0e6f69bd8c7d0a5de3d7bca7e ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IGZsYXRwYWtzL2ZsYXRwYWstcnVudGltZQogICAgICAgICAgICBCcmFuY2ggOiBmNDUK ICAgICAgICAgICAgQ29tbWl0IDogNjQ2NTM5ZTJmMzYwMjZhMGU2ZjY5YmQ4YzdkMGE1ZGUzZDdi Y2E3ZQogICAgICAgICAgICBBdXRob3IgOiBPd2VuIFcuIFRheWxvciA8b3RheWxvckBmaXNoc291 cC5uZXQ+CiAgICAgICAgICAgIERhdGUgICA6IDIwMTgtMDItMTRUMTQ6MjU6NDEtMDU6MDAKICAg ICAgICAgICAgU3RhdHMgIDogKzE3NzYvLTc5OSBpbiAyMiBmaWxlKHMpCiAgICAgICAgICAgIFVS TCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL2ZsYXRwYWtzL2ZsYXRwYWstcnVu dGltZS9jLzY0NjUzOWUyZjM2MDI2YTBlNmY2OWJkOGM3ZDBhNWRlM2Q3YmNhN2U/YnJhbmNoPWY0 NQoKICAgICAgICAgICAgTG9nOgogICAgICAgICAgICBBZGQgYXBwbGljYXRpb24tcmVwb3J0aW5n IGZ1bmN0aW9uYWxpdHkKCkV4dGVuZCByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eSB0byBnZW5lcmF0 ZSByZXBvcnRzIGFib3V0IGFwcGxpY2F0aW9ucwp3ZSBtaWdodCB3YW50IHRvIHBhY2thZ2UgYXMg RmxhdHBha3MgaW4gRmVkb3JhIC0gYXBwbGljYXRpb25zIHRoYXQKYXJlIHBhY2thZ2VkIGluIEZl ZG9yYSBhbmQgaGF2ZSBhIGRlc2t0b3AgZmlsZSwgYXBwbGljYXRpb25zIHRoYXQKYXJlIG9uIGZs YXRodWIub3JnLCBhcHBsaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gcmV2aWV3ZWQgb24Kb2Rycy5n bm9tZS5vcmcuIEZvciBlYWNoIGFwcGxpY2F0aW9uLCB3ZSBkZXRlcm1pbmUgd2hhdCBleHRyYSBw YWNrYWdlcwphcmUgbmVlZGVkIGJleW9uZCB0aG9zZSBpbiB0aGUgcnVudGltZSAodXNpbmcgYSBu ZXcKZmVkbW9kIGZsYXRwYWstcmVwb3J0KS4gcmVwb3J0cy9hcHBsaWNhdGlvbnMuaHRtbCBzaG93 cyBleHRyYSBwYWNrYWdlcwpieSBhcHBsaWNhdGlvbiwgd2hpbGUgcmVwb3J0cy9ydW50aW1lLXBh Y2thZ2UtYXBwLmh0bWwgYW5kCnJlcG9ydHMvZXh0cmEtcGFja2FnZS1hcHAuaHRtbCByZXZlcnNl IHRoYXQgYW5kIHNob3cgd2hpY2ggYXBwbGljYXRpb25zCnVzZSBlYWNoIHBhY2thZ2UuCgpUaGUg bmV3IEhUTUwgcmVwb3J0cyB1c2UgdGhlIGpRdWVyeSBEYXRhVGFibGVzIHBsdWdpbnMgdG8gYnVp bGQgYSBVSQpmcm9tIEpTT04gZmlsZXMgcmF0aGVyIHRoYW4gc3RhdGljIHRlbXBsYXRpbmcuIE5v IHBhcnRpY3VsYXIgcmVhc29uIGZvcgp0aGlzIG90aGVyIHRoYW4gd2FudGluZyB0aGUgc29ydGlu ZyBhbmQgc2VhcmNoaW5nIGZ1bmN0aW9uYWxpdHkgb2YKRGF0YVRhYmxlcy4KCi0tLQpkaWZmIC0t Z2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggZWI4MDlkNy4uZjcxOWY2NiAxMDA2 NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xLDQgKzEsNSBAQAogb3V0 LyoKLXJlcG9ydC5odG1sCiB0b29scy9fX3B5Y2FjaGVfXwogZmxhdHBhay1ydW50aW1lLm5ldy55 YW1sCityZXBvcnRzLyouanNvbgorcmVwb3J0cy9ydW50aW1lLmh0bWwKCmRpZmYgLS1naXQgYS9N YWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGY5MTVkNmEuLjIxMWNjZDEgMTAwNjQ0Ci0tLSBhL01h a2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xNSwyNiArMTUsMzcgQEAgRklMRV9MSVNUUyA9IFwK IAogYWxsOgogCUBlY2hvICJUYXJnZXRzOiIKLQlAZWNobyAiICByZXBvcnQ6IEdlbmVyYXRlcyBy ZXBvcnQuaHRtbCwgYW5kIGEgY2FuZGlkYXRlIGZsYXRwYWstcnVudGltZS5uZXcueWFtbCIKKwlA ZWNobyAiICByZXBvcnQ6IEdlbmVyYXRlcyBIVE1MIHJlcG9ydHMgaW4gcmVwb3J0cy8sIGFuZCBh IGNhbmRpZGF0ZSBmbGF0cGFrLXJ1bnRpbWUubmV3LnlhbWwiCiAJQGVjaG8gIiAgdXBkYXRlOiBH ZW5lcmF0ZXMgdGhlIGFib3ZlIGZpbGVzLCB0aGVuIGNvcGllcyBmbGF0cGFrLXJ1bnRpbWUubmV3 LnlhbWwgdG8gZmxhdHBhay1ydW50aW1lLnlhbWwiCiAKLXJlcG9ydDogcmVwb3J0Lmh0bWwgZmxh dHBhay1ydW50aW1lLm5ldy55YW1sCityZXBvcnQ6IHJlcG9ydHMvYXBwbGljYXRpb25zLmpzb24g cmVwb3J0cy9hcHBsaWNhdGlvbi1wYWNrYWdlcy5qc29uIHJlcG9ydHMvcnVudGltZS5odG1sIGZs YXRwYWstcnVudGltZS5uZXcueWFtbAogCiB1cGRhdGU6IHJlcG9ydAogCWNwIGZsYXRwYWstcnVu dGltZS5uZXcueWFtbCBmbGF0cGFrLXJ1bnRpbWUueWFtbAogCi1yZXBvcnQuaHRtbCAkKFBST0ZJ TEVfRklMRVMpOiAkKFBBQ0tBR0VfTElTVFMpIHBhY2thZ2Utbm90ZXMudHh0IHRvb2xzL2dlbmVy YXRlLXJlcG9ydC5weSByZXBvcnQtdGVtcGxhdGUuaHRtbAotCS4vdG9vbHMvZ2VuZXJhdGUtcmVw b3J0LnB5CityZXBvcnRzL3J1bnRpbWUuaHRtbCAkKFBST0ZJTEVfRklMRVMpOiAkKFBBQ0tBR0Vf TElTVFMpIHBhY2thZ2Utbm90ZXMudHh0IHRvb2xzL2dlbmVyYXRlLXJ1bnRpbWUtcmVwb3J0LnB5 IHJ1bnRpbWUtdGVtcGxhdGUuaHRtbAorCS4vdG9vbHMvZ2VuZXJhdGUtcnVudGltZS1yZXBvcnQu cHkKIAogJChGSUxFX0xJU1RTKTogdG9vbHMvZ2VuZXJhdGUtZmlsZXMuc2ggdG9vbHMvbGlzdC1m aWxlcy5weQogCS4vdG9vbHMvZ2VuZXJhdGUtZmlsZXMuc2ggJEAKIAogJChQQUNLQUdFX0xJU1RT KTogdG9vbHMvcmVzb2x2ZS1maWxlcy5weSAkKEZJTEVfTElTVFMpCi0KIAlmb3IgZiBpbiAkKHBh dHN1YnN0ICUucGFja2FnZXMsJS5maWxlcywkKFBBQ0tBR0VfTElTVFMpKSA7IGRvCVwKLQkJLi90 b29scy9yZXNvbHZlLWZpbGVzLnB5ICQkZiA7CQlcCisJCS4vdG9vbHMvcmVzb2x2ZS1maWxlcy5w eSAkJGYgfHwgZXhpdCAxOwkJXAogCWRvbmUKIAorb3V0L2ZlZG9yYS1hcHBzdHJlYW0ueG1sLmd6 OiB0b29scy9kb3dubG9hZC1mZWRvcmEtYXBwc3RyZWFtLnNoCisJLi90b29scy9kb3dubG9hZC1m ZWRvcmEtYXBwc3RyZWFtLnNoCisKK291dC9mbGF0aHViLWFwcHN0cmVhbS54bWwuZ3o6IHRvb2xz L2Rvd25sb2FkLWZsYXRodWItYXBwc3RyZWFtLnNoCisJLi90b29scy9kb3dubG9hZC1mbGF0aHVi LWFwcHN0cmVhbS5zaAorCitvdXQvcmF0aW5ncy5qc29uOiB0b29scy9kb3dubG9hZC1yZXZpZXdz LnNoCisJLi90b29scy9kb3dubG9hZC1yZXZpZXdzLnNoCisKK3JlcG9ydHMvYXBwbGljYXRpb25z Lmpzb24gcmVwb3J0cy9hcHBsaWNhdGlvbi1wYWNrYWdlcy5qc29uOiB0b29scy9nZW5lcmF0ZS1h cHAtcmVwb3J0cy5weSBvdXQvZmVkb3JhLWFwcHN0cmVhbS54bWwuZ3ogb3V0L2ZsYXRodWItYXBw c3RyZWFtLnhtbC5neiBvdXQvcmF0aW5ncy5qc29uCisJLi90b29scy9nZW5lcmF0ZS1hcHAtcmVw b3J0cy5weQorCiBmbGF0cGFrLXJ1bnRpbWUubmV3LnlhbWw6ICQoUFJPRklMRV9GSUxFUykgZmxh dHBhay1ydW50aW1lLmluLnlhbWwgdG9vbHMvZ2VuZXJhdGUtbW9kdWxlbWQucHkKIAkuL3Rvb2xz L2dlbmVyYXRlLW1vZHVsZW1kLnB5CiAKCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUu bWQKaW5kZXggMmY0MTVkNC4uZjZjNzI4MyAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JF QURNRS5tZApAQCAtMzAsOCArMzAsMTYgQEAgc3RlcHMgYXJlIGFzIGZvbGxvd3M6CiAgICBjb3Jy ZXNwb25kaW5nIHBhY2thZ2VzLiAoYHRvb2xzL3Jlc29sdmUtZmlsZXMucHlgKQogICogRmluZCBh bGwgZGVwZW5kZW5jaWVzIG9mIHRoZSByZXNvbHZlZCBwYWNrYWdlcyB1c2luZyBgZmVkbW9kIHJl c29sdmUtZGVwc2AsCiAgICBjb3JyZWxhdGUgaXQgYWxsIHRvZ2V0aGVyLCBmaWd1cmUgb3V0IHRo ZSBpbnN0YWxsIHByb2ZpbGVzIGZvciBlYWNoIHJ1bnRpbWUsCi0gICBhbmQgY3JlYXRlIGByZXBv cnQuaHRtbGAuIChgdG9vbHMvZ2VuZXJhdGUtcmVwb3J0LnB5YCkKKyAgIGFuZCBjcmVhdGUgYHJl cG9ydC9ydW50aW1lLmh0bWxgLiAoYHRvb2xzL2dlbmVyYXRlLXJ1bnRpbWUtcmVwb3J0LnB5YCkK ICAqIENyZWF0ZSBhIGBmbGF0cGFrLXJ1bnRpbWUubmV3LnlhbWxgIHVzaW5nIHRoZSBwcm9maWxl cy4gKGB0b29scy9nZW5lcmF0ZS1tb2R1bGVtZC5weWApCisgKiBGaW5kcyBkYXRhIGFib3V0IGFw cGxpY2F0aW9ucyBwYWNrYWdlZCBpbiBGZWRvcmEgYW5kIEZsYXRodWIKKyAgIChgdG9vbHMvZG93 bmxvYWQtZmVkb3JhLWFwcHN0cmVhbS5zaGAsIGB0b29scy9kb3dubG9hZC1mbGF0aHViLWFwcHN0 cmVhbS5zaGAsCisgICBgdG9vbHMvZG93bmxvYWQtcmV2aWV3cy5weWApCisgKiBGaW5kcyBvdXQg aG93IHRob3NlIGFwcGxpY2F0aW9ucyB3b3VsZCBidWlsZCB1c2luZyB0aGUgKmN1cnJlbnQqIGJ1 aWxkIG9mIHRoZQorICAgcnVudGltZSAobm90IHRoZSBvbmUgdGhhdCB3ZSdyZSBjcmVhdGluZyBo ZXJlKSAsIGFuZCBnZW5lcmF0ZXMgbW9yZSByZXBvcnRzCisgICBpbiBgcmVwb3J0cy9gLiAoYHRv b2xzL2dlbmVyYXRlLWFwcC1yZXBvcnRzLnB5YCkuIChJbXByb3ZlbWVudCB3b3VsZCBiZSB0byB1 c2UKKyAgIHRoZSBjYW5kaWRhdGUgbmV4dCBidWlsZCAtIHJlcXVpcmVzIHVzIHRvIHBhc3MgdGhl IHJ1bnRpbWUgZGF0YSB0byBmZWRtb2QgcmF0aGVyCisgICB0aGFuIGhhdmUgZmVkbW9kIGRvd25s b2FkIGl0IGZyb20gdGhlIEZlZG9yYSBQREMuKQogICogQ29weSBgZmxhdHBhay1ydW50aW1lLm5l dy55YW1sYCB0byBgZmxhdHBhay1ydW50aW1lLnlhbWxgCiAKICpSZXBvcnQgZ2VuZXJhdGlvbio6 IGlmIHlvdSB0eXBlIGBtYWtlIHJlcG9ydGAgaW5zdGVhZCB0aGVuIGFsbCB0aGUgYWJvdmUgaGFw cGVucwoKZGlmZiAtLWdpdCBhL3JlcG9ydC10ZW1wbGF0ZS5odG1sIGIvcmVwb3J0LXRlbXBsYXRl Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MzllOWUuLjAwMDAwMDAKLS0t IGEvcmVwb3J0LXRlbXBsYXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08 IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotICA8aGVhZD4KLSAgICA8bWV0YSBjaGFyc2V0PSJVVEYt OCI+Ci0gICAgPGxpbmsgaHJlZj0icmVwb3J0LmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KLSAgPC9o ZWFkPgotICA8Ym9keT4KLSAgICA8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KLSAgICAgIDx0YWJsZT4K LQk8dHI+PHRkPkZEL1A8L3RkPjx0ZD4gLSBvcmcuZnJlZWRlc2t0b3AuUGxhdGZvcm0KLQkgICAg eyVpZiB1bm1hdGNoZWQuZnJlZWRlc2t0b3BfcGxhdGZvcm0gPiAwJX0KLQkgICAgKDxhIGhyZWY9 Im91dC9mcmVlZGVza3RvcC1QbGF0Zm9ybS51bm1hdGNoZWQiPnt7dW5tYXRjaGVkLmZyZWVkZXNr dG9wX3BsYXRmb3JtfX0gdW5tYXRjaGVkPC9hPikKLQkgICAgeyVlbmRpZiV9Ci0JICA8L3RkPgot CTwvdHI+Ci0JPHRyPjx0ZD5HTi9QPC90ZD48dGQ+IC0gb3JnLmdub21lLlBsYXRmb3JtCi0JICAg IHslaWYgdW5tYXRjaGVkLmdub21lX3BsYXRmb3JtID4gMCV9Ci0JICAgICg8YSBocmVmPSJvdXQv Z25vbWUtUGxhdGZvcm0udW5tYXRjaGVkIj57e3VubWF0Y2hlZC5nbm9tZV9wbGF0Zm9ybX19IHVu bWF0Y2hlZDwvYT4pCi0JICAgIHslZW5kaWYlfQotCSAgPC90ZD4KLQk8L3RyPgotCTx0cj48dGQ+ RkQvUzwvdGQ+PHRkPiAtIG9yZy5mcmVlZGVza3RvcC5TZGs8L3RkPjwvdHI+Ci0JPHRyPjx0ZD5H Ti9TPC90ZD48dGQ+IC0gb3JnLmdub21lLlNkazwvdGQ+PC90cj4KLQk8dHI+PHRkPkxJVkU8L3Rk Pjx0ZD4gLSBGMjcgbGl2ZSBpbWFnZTwvdGQ+PC90cj4KLQk8dHI+PHRkPlJGMjY8L3RkPjx0ZD4g LSBGMjYgb3JnLmZlZG9yYS5QbGF0Zm9ybTwvdGQ+PC90cj4KLQk8dHI+PHRkIGNsYXNzPSJidWls ZC1wbGF0Zm9ybSI+PC90ZD48dGQ+IC0gQnVpbGQgaW4gZGVza3RvcC1ydW50aW1lIG1vZHVsZTwv dGQ+PC90cj4KLQk8dHI+PHRkIGNsYXNzPSJidWlsZC1zZGsiPjwvdGQ+PHRkPiAtIEJ1aWxkIGlu IGZsYXRwYWstcnVudGltZSBtb2R1bGU8L3RkPjwvdHI+Ci0JPHRyPjx0ZCBjbGFzcz0icm9vdCI+ PC90ZD48dGQ+IC0gUm9vdCBwYWNrYWdlLCBvbmx5IGluY2x1ZGVkIGJlY2F1c2Ugb2YgZmlsZXMg aW4gcnVudGltZTwvdGQ+PC90cj4KLQk8dHI+PHRkIGNsYXNzPSJmaWxlcyI+PC90ZD48dGQ+IC0g SW5jbHVkZWQgYmVjYXVzZSBvZiBmaWxlcyBpbiBydW50aW1lLCBhbHNvIGRlcGVuZGVkIHVwb248 L3RkPjwvdHI+Ci0JPHRyPjx0ZCBjbGFzcz0iZGVwIj48L3RkPjx0ZD4gLSBJbmNsdWRlZCBiZWNh dXNlIG9mIGRlcGVuZGVuY2llczwvdGQ+PC90cj4KLQk8dHI+PHRkIGNsYXNzPSJleHRyYSI+PC90 ZD48dGQ+IC0gTGlzdGVkIGFzIGFuIGV4dHJhIHBhY2thZ2UgaW4gcGFja2FnZS1ub3Rlcy50eHQ8 L3RkPjwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+TW91c2Ug b3ZlciBzaGFkZWQgc3F1YXJlcyBmb3IgZGV0YWlscy48L2Rpdj4KLSAgICA8L2Rpdj4KLSAgICA8 dGFibGUgY2xhc3M9InBhY2thZ2VzIj4KLSAgICAgIDx0Ym9keT4KLQl7JSBmb3IgbGV0dGVyIGlu IGxldHRlcnMgJX0KLQk8dHIgY2xhc3M9ImxldHRlci1oZWFkZXItYWJvdmUiPgotCTwvdHI+Ci0J PHRyIGNsYXNzPSJsZXR0ZXItaGVhZGVyIj4KLQkgIDx0aCBjbGFzcz0ibGV0dGVyIj57eyBsZXR0 ZXIubGV0dGVyIH19PC90aD4KLQkgIDx0aCB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLlBsYXRmb3Jt Ij5GRC9QPC90aD4KLQkgIDx0aCB0aXRsZT0ib3JnLmdub21lLlBsYXRmb3JtIj5HTi9QPC90aD4K LQkgIDx0aCB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLlNkayI+RkQvUzwvdGg+Ci0JICA8dGggdGl0 bGU9Im9yZy5nbm9tZS5TZGsiPkdOL1M8L3RoPgotCSAgPHRoPkxJVkU8L3RoPgotCSAgPHRoPlJG MjY8L3RoPgotCSAgPHRoPjwvdGg+Ci0JPC90cj4KLQl7JSBmb3Igc3BhY2thZ2UgaW4gbGV0dGVy LnBhY2thZ2VzICV9Ci0JPHRyIGNsYXNzPSJzb3VyY2UtcGFja2FnZSB7eyBzcGFja2FnZS5rbGFz cyB9fSI+Ci0JICA8dGQ+e3sgc3BhY2thZ2UubmFtZSB9fTwvdGQ+Ci0JICA8dGQ+PC90ZD4KLQkg IDx0ZD48L3RkPgotCSAgPHRkPjwvdGQ+Ci0JICA8dGQ+PC90ZD4KLQkgIDx0ZD48L3RkPgotCSAg PHRkPjwvdGQ+Ci0JICA8dGQ+e3sgc3BhY2thZ2UubW9kdWxlcyB9fTwvdGQ+Ci0JPC90cj4KLQl7 JSBmb3IgcGFja2FnZSBpbiBzcGFja2FnZS5wYWNrYWdlcyAlfQotCTx0ciBjbGFzcz0icGFja2Fn ZSB7eyBwYWNrYWdlLmtsYXNzIH19Ij4KLQkgIDx0ZD57eyBwYWNrYWdlLm5hbWUgfX08L3RkPgot CSAgPHRkIGNsYXNzPSJ7e3BhY2thZ2UuZnJlZWRlc2t0b3BfcGxhdGZvcm1faW5jbHVzaW9ufX0i IHRpdGxlPSJ7eyBwYWNrYWdlLmZyZWVkZXNrdG9wX3BsYXRmb3JtX3doeSB9fSI+PC90ZD4KLQkg IDx0ZCBjbGFzcz0ie3twYWNrYWdlLmdub21lX3BsYXRmb3JtX2luY2x1c2lvbn19IiB0aXRsZT0i e3sgcGFja2FnZS5nbm9tZV9wbGF0Zm9ybV93aHkgfX0iPjwvdGQ+Ci0JICA8dGQgY2xhc3M9Int7 cGFja2FnZS5mcmVlZGVza3RvcF9zZGtfaW5jbHVzaW9ufX0iIHRpdGxlPSJ7eyBwYWNrYWdlLmZy ZWVkZXNrdG9wX3Nka193aHkgfX0iPjwvdGQ+Ci0JICA8dGQgY2xhc3M9Int7cGFja2FnZS5nbm9t ZV9zZGtfaW5jbHVzaW9ufX0iIHRpdGxlPSJ7eyBwYWNrYWdlLmdub21lX3Nka193aHkgfX0iPjwv dGQ+Ci0JICA8dGQgY2xhc3M9Int7cGFja2FnZS5saXZlX2luY2x1c2lvbn19Ij48L3RkPgotCSAg PHRkIGNsYXNzPSJ7e3BhY2thZ2UucmYyNl9pbmNsdXNpb259fSI+PC90ZD4KLQkgIDx0ZD57eyBw YWNrYWdlLm5vdGUgfX08L3RkPgotCTwvdHI+Ci0JeyUgZW5kZm9yICV9Ci0JeyUgZW5kZm9yICV9 Ci0JeyUgZW5kZm9yICV9Ci0gICAgICA8L3Rib2R5PgotICA8L2JvZHk+Ci08L2h0bWw+CgpkaWZm IC0tZ2l0IGEvcmVwb3J0LmNzcyBiL3JlcG9ydC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGFlNTZjNTMuLjAwMDAwMDAKLS0tIGEvcmVwb3J0LmNzcworKysgL2Rldi9udWxsCkBA IC0xLDEyNCArMCwwIEBACi1ib2R5IHsKLSAgICBmb250LWZhbWlseTogY2FudGFyZWxsLCBzYW5z LXNlcmlmOwotICAgIGZvbnQtc2l6ZTogMTJweDsKLX0KLS5maWx0ZXIsIC5zdW1tYXJ5IHsKLSAg ICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci0gICAg YmFja2dyb3VuZDogI2VlZWVlZTsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIG1hcmdpbjogMTBw eDsKLSAgICBwb3NpdGlvbjogZml4ZWQ7Ci0gICAgYm94LXNoYWRvdzogNXB4IDVweCA1cHg7Ci19 Ci0uZmlsdGVyICB7Ci0gICAgcmlnaHQ6IDVweDsKLSAgICB0b3A6IDVweDsKLX0KLS5zdW1tYXJ5 ICB7Ci0gICAgcmlnaHQ6IDVweDsKLSAgICBib3R0b206IDVweDsKLX0KLS5zdW1tYXJ5IC5ub3Rl IHsKLSAgICBwYWRkaW5nLXRvcDogNXB4OwotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLS5m aWx0ZXIgLmJ1dHRvbiB7Ci0gICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKLSAgICBib3JkZXItcmFk aXVzOiA1cHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci0gICAgbWFyZ2luOiAzcHg7 Ci0gICAgcGFkZGluZzogM3B4OwotfQotLmZpbHRlciAuYnV0dG9uOmFjdGl2ZSB7Ci0gICAgYmFj a2dyb3VuZDogI2NjYmJiYjsKLX0KLS5maWx0ZXIgLmJ1dHRvbi1zZWxlY3RlZCB7Ci0gICAgYmFj a2dyb3VuZDogI2RkY2NjYzsKLX0KLXRhYmxlLnBhY2thZ2VzIHsKLSAgICBib3JkZXItY29sbGFw c2U6IGNvbGxhcHNlOwotfQotdGFibGUucGFja2FnZXMgdHIgdGQsIHRyIHRoLmxldHRlciB7Ci0g ICAgcGFkZGluZy1sZWZ0OiAxMHB4OwotICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7Ci19Ci10ci5s ZXR0ZXItaGVhZGVyLWFib3ZlIHsKLSAgICBib3JkZXItbGVmdDogbm9uZTsKLSAgICBib3JkZXIt cmlnaHQ6IG5vbmU7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhYTg4ODg7Ci0gICAg Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNhYTg4ODg7Ci0gICAgaGVpZ2h0OiAxMHB4OwotfQotdHIu bGV0dGVyLWhlYWRlci1hYm92ZTpmaXJzdC1jaGlsZCB7Ci0gICAgYm9yZGVyOiBub247Ci19Ci10 ci5sZXR0ZXItaGVhZGVyIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjYWE4ODg4OwotICAgIGJh Y2tncm91bmQ6ICNlZWVlZWU7Ci19Ci10ci5sZXR0ZXItaGVhZGVyIHRoLmxldHRlciB7Ci0gICAg dGV4dC1hbGlnbjogbGVmdDsKLSAgICBmb250LXNpemU6IDE2cHg7Ci19Ci10ciB7Ci0gICAgYm9y ZGVyLWxlZnQ6IDFweCBzb2xpZCAjYWE4ODg4OwotICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlk ICNhYTg4ODg7Ci19Ci10ci5zb3VyY2UtcGFja2FnZSB7Ci0gICAgYmFja2dyb3VuZDogI2VlZWVl ZTsKLX0KLXRyLmJ1aWxkLXNkaywgdGQuYnVpbGQtc2RrIHsKLSAgICBiYWNrZ3JvdW5kOiAjZWVm OGRkOwotfQotdHIuYnVpbGQtcGxhdGZvcm0sIHRkLmJ1aWxkLXBsYXRmb3JtIHsKLSAgICBiYWNr Z3JvdW5kOiAjZjhlZWRkOwotfQotdGQuYnVpbGQtc2RrLCB0ZC5idWlsZC1wbGF0Zm9ybSB7Ci0g ICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci19Ci10ZC5yb290IHsKLSAgICBiYWNrZ3JvdW5k OiAjODg4ODg4OwotICAgIGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7Ci0gICAgcGFkZGluZzog MHB4OwotfQotdGQuZXh0cmEgewotICAgIGJhY2tncm91bmQ6ICM4ODg4YmI7Ci0gICAgYm9yZGVy OiAxcHggc29saWQgIzY2NjY2NjsKLSAgICBwYWRkaW5nOiAwcHg7Ci19Ci10ZC5wcmVzZW50LCB0 ZC5maWxlcyB7Ci0gICAgYmFja2dyb3VuZDogI2FhYWFhYTsKLSAgICBib3JkZXI6IDFweCBzb2xp ZCAjNjY2NjY2OwotICAgIHBhZGRpbmc6IDBweDsKLX0KLXRkLmRlcCB7Ci0gICAgYmFja2dyb3Vu ZDogI2NjY2NjYzsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OwotICAgIHBhZGRpbmc6 IDBweDsKLX0KLS5zdW1tYXJ5IHRkLnJvb3QsIC5zdW1tYXJ5IHRkLmZpbGVzLCAuc3VtbWFyeSB0 ZC5kZXAgewotICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwotfQotdGQuYWJzZW50IHsKLSAg ICBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OwotICAgIHBhZGRpbmc6IDBweDsKLX0KLXRyLmZs YWdnZWQgewotICAgIGNvbG9yOiAjYWEwMDAwOwotfQotdHIucXVlc3Rpb25hYmxlIHsKLSAgICBj b2xvcjogI2NjNDQwMDsKLX0KLXRyLmZsYWdnZWQtZGVwIHsKLSAgICBjb2xvcjogI2RkYWE0NDsK LX0KLXRyLndhaXZlZCB7Ci0gICAgY29sb3I6ICMwMDY2MDA7Ci19Ci10ci5leHRyYSB7Ci0gICAg Y29sb3I6ICMwMDAwNjY7Ci19Ci0uaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQoKZGlm ZiAtLWdpdCBhL3JlcG9ydHMvYXBwbGljYXRpb25zLmh0bWwgYi9yZXBvcnRzL2FwcGxpY2F0aW9u cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDZhMTEKLS0tIC9k ZXYvbnVsbAorKysgYi9yZXBvcnRzL2FwcGxpY2F0aW9ucy5odG1sCkBAIC0wLDAgKzEsNDIgQEAK KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVU Ri04Ij4KKyAgICA8bGluayBocmVmPSJyZXBvcnQuY3NzIiByZWw9InN0eWxlc2hlZXQiPgorICAg IDxsaW5rIGhyZWY9ImpzbGliL2pxdWVyeS5kYXRhVGFibGVzLm1pbi5jc3MiIHJlbD0ic3R5bGVz aGVldCI+CisgICAgPHNjcmlwdCBzcmM9ImpzbGliL2pxdWVyeS0zLjMuMS5taW4uanMiPjwvc2Ny aXB0PgorICAgIDxzY3JpcHQgc3JjPSJqc2xpYi9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanMiPjwv c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXBvcnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp cHQ+CisgICAgICAkKGRvY3VtZW50KS5yZWFkeShzdGFydEFwcFJlcG9ydCk7CisgICAgPC9zY3Jp cHQ+CisgIDwvaGVhZD4KKyAgPGJvZHkgaWQ9ImFwcFJlcG9ydCI+CisgICAgPHVsIGNsYXNzPSJo ZWFkZXIiPgorICAgICAgPGxpPjxhIGhyZWY9InJ1bnRpbWUuaHRtbCI+UnVudGltZSBSZXBvcnQ8 L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0ic2VsZWN0ZWQiPkFwcGxpY2F0aW9uIFJlcG9ydDwv bGk+CisgICAgICA8bGk+PGEgaHJlZj0icnVudGltZS1wYWNrYWdlLWFwcC5odG1sIj5SdW50aW1l IFBhY2thZ2UgLT4gQXBwbGljYXRpb248L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJleHRy YS1wYWNrYWdlLWFwcC5odG1sIj5FeHRyYSBQYWNrYWdlIC0+IEFwcGxpY2F0aW9uPC9hPjwvbGk+ CisgICAgPC91bD4KKyAgICA8dGFibGUgaWQ9ImFwcFRhYmxlIj4KKyAgICAgIDx0aGVhZD4KKwk8 dGg+TmFtZTwvdGg+CisJPHRoPlBhY2thZ2U8L3RoPgorCTx0aD5GbGF0aHViPzwvdGg+CisJPHRo IHRpdGxlPSJOdW1iZXIgb2YgcmV2aWV3cyBpbiBPRFJTIj4jIFJldmlld3M8L3RoPgorCTx0aCB0 aXRsZT0iQXZlcmFnZSBudW1iZXIgb2Ygc3RhcnMgaW4gT0RSUyI+UmV2aWV3IEF2ZzwvdGg+CisJ PHRoIHRpdGxlPSJOdW1iZXIgb2YgcGFja2FnZXMgdGhhdCBuZWVkIHRvIGJlIGJ1bmRsZWQiPiMg RXh0cmE8L3RoPgorICAgICAgPC90aGVhZD4KKyAgICAgIDx0Ym9keT4KKyAgICAgIDwvdGJvZHk+ CisgICAgPC90YWJsZT4KKyAgICA8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KKyAgICAgIDx0YWJsZT4K Kwk8dHI+PHRkIGNsYXNzPSJzYW1wbGUgbm8tZmxhdGh1YiI+PC90ZD48dGQ+IC0gSW4gRmVkb3Jh LCBub3QgaW4gRmxhdGh1YjwvdGQ+PC90cj4KKwk8dHI+PHRkIGNsYXNzPSJzYW1wbGUgbm8tZmVk b3JhIj48L3RkPjx0ZD4gLSBJbiBGbGF0aHViLCBub3QgaW4gRmVkb3JhPC90ZD48L3RyPgorCTx0 cj48dGQgY2xhc3M9InNhbXBsZSBuby1mbGF0aHViLWZlZG9yYSI+PC90ZD48dGQ+IC0gTm90IGlu IEZsYXRodWIgb3IgRmVkb3JhPC90ZD48L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxkaXYg Y2xhc3M9Im5vdGUiPkNsaWNrIG9uIHJvd3MgZm9yIGRldGFpbHMuIENsaWNrIG9uIGhlYWRlcnMg dG8gc29ydC48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9ib2R5PgorPC9odG1sPgoKZGlmZiAtLWdp dCBhL3JlcG9ydHMvZXh0cmEtcGFja2FnZS1hcHAuaHRtbCBiL3JlcG9ydHMvZXh0cmEtcGFja2Fn ZS1hcHAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWVlNmExCi0t LSAvZGV2L251bGwKKysrIGIvcmVwb3J0cy9leHRyYS1wYWNrYWdlLWFwcC5odG1sCkBAIC0wLDAg KzEsNDEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGNo YXJzZXQ9IlVURi04Ij4KKyAgICA8bGluayBocmVmPSJqc2xpYi9qcXVlcnkuZGF0YVRhYmxlcy5t aW4uY3NzIiByZWw9InN0eWxlc2hlZXQiPgorICAgIDxsaW5rIGhyZWY9InJlcG9ydC5jc3MiIHJl bD0ic3R5bGVzaGVldCI+CisgICAgPHNjcmlwdCBzcmM9ImpzbGliL2pxdWVyeS0zLjMuMS5taW4u anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJqc2xpYi9qcXVlcnkuZGF0YVRhYmxlcy5t aW4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXBvcnQuanMiPjwvc2NyaXB0Pgor ICAgIDxzY3JpcHQ+CisgICAgICAkKGRvY3VtZW50KS5yZWFkeShzdGFydEFwcFBhY2thZ2VzKTsK KyAgICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9keSBpZD0iYXBwUGFja2FnZXNSZXBvcnQi PgorICAgIDx1bCBjbGFzcz0iaGVhZGVyIj4KKyAgICAgIDxsaT48YSBocmVmPSJydW50aW1lLmh0 bWwiPlJ1bnRpbWUgUmVwb3J0PC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iYXBwbGljYXRp b25zLmh0bWwiPkFwcGxpY2F0aW9uIFJlcG9ydDwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9 InJ1bnRpbWUtcGFja2FnZS1hcHAuaHRtbCI+UnVudGltZSBQYWNrYWdlIC0+IEFwcGxpY2F0aW9u PC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9InNlbGVjdGVkIj5FeHRyYSBQYWNrYWdlIC0+IEFw cGxpY2F0aW9uPC9saT4KKyAgICA8L3VsPgorICAgIDx0YWJsZSBpZD0iZXh0cmFUYWJsZSIgY2xh c3M9InBhY2thZ2VUYWJsZSI+CisgICAgICA8dGhlYWQ+CisJPHRoPlBhY2thZ2U8L3RoPgorCTx0 aCB0aXRsZT0iIyBvZiBhcHBsaWNhdGlvbnMgaW4gdG9wIDEwMCAoYnkgbW9zdCByZXZpZXdzKSI+ IyBUb3A8L3RoPgorCTx0aCB0aXRsZT0iIyBvZiBhcHBsaWNhdGlvbnMgdG90YWwgaW4gRmVkb3Jh Ij4jIEFsbDwvdGg+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5PgorICAgICAgPC90Ym9k eT4KKyAgICA8L3RhYmxlPgorICAgIDxkaXYgaWQ9ImRldGFpbHMiPgorICAgICAgPGgyIGNsYXNz PSJwa2ciPjwvaDI+CisgICAgICA8aDMgY2xhc3M9ImNhdGVnb3J5Ij48L2gzPgorICAgICAgPHVs IGNsYXNzPSJhcHBzIj48L3VsPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9InN1bW1hcnki PgorICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+CisJU2hvd3MgbnVtYmVyIG9mIGFwcGxpY2F0aW9u cyB1c2luZyBlYWNoIHBhY2thZ2UuIENsaWNrIG9uIGFwcGxpY2F0aW9uIGNvdW50cyBmb3IgZGV0 YWlscy4gQ2xpY2sgb24gaGVhZGVycyB0byBzb3J0LgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+ CisgIDwvYm9keT4KKzwvaHRtbD4KCmRpZmYgLS1naXQgYS9yZXBvcnRzL2pzbGliL2pxdWVyeS0z LjMuMS5taW4uanMgYi9yZXBvcnRzL2pzbGliL2pxdWVyeS0zLjMuMS5taW4uanMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5YjNhMgotLS0gL2Rldi9udWxsCisrKyBiL3Jl cG9ydHMvanNsaWIvanF1ZXJ5LTMuMy4xLm1pbi5qcwpAQCAtMCwwICsxLDIgQEAKKy8qISBqUXVl cnkgdjMuMy4xIHwgKGMpIEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpx dWVyeS5vcmcvbGljZW5zZSAqLworIWZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiOyJvYmplY3Qi PT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5l eHBvcnRzPWUuZG9jdW1lbnQ/dChlLCEwKTpmdW5jdGlvbihlKXtpZighZS5kb2N1bWVudCl0aHJv dyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTty ZXR1cm4gdChlKX06dChlKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMs ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49W10scj1lLmRvY3VtZW50LGk9T2JqZWN0 LmdldFByb3RvdHlwZU9mLG89bi5zbGljZSxhPW4uY29uY2F0LHM9bi5wdXNoLHU9bi5pbmRleE9m LGw9e30sYz1sLnRvU3RyaW5nLGY9bC5oYXNPd25Qcm9wZXJ0eSxwPWYudG9TdHJpbmcsZD1wLmNh bGwoT2JqZWN0KSxoPXt9LGc9ZnVuY3Rpb24gZSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg dCYmIm51bWJlciIhPXR5cGVvZiB0Lm5vZGVUeXBlfSx5PWZ1bmN0aW9uIGUodCl7cmV0dXJuIG51 bGwhPXQmJnQ9PT10LndpbmRvd30sdj17dHlwZTohMCxzcmM6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0 aW9uIG0oZSx0LG4pe3ZhciBpLG89KHQ9dHx8cikuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7aWYo by50ZXh0PWUsbilmb3IoaSBpbiB2KW5baV0mJihvW2ldPW5baV0pO3QuaGVhZC5hcHBlbmRDaGls ZChvKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIG51bGw9 PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP2xbYy5jYWxs KGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9dmFyIGI9IjMuMy4xIix3PWZ1bmN0aW9uKGUsdCl7cmV0 dXJuIG5ldyB3LmZuLmluaXQoZSx0KX0sVD0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEw XSskL2c7dy5mbj13LnByb3RvdHlwZT17anF1ZXJ5OiIzLjMuMSIsY29uc3RydWN0b3I6dyxsZW5n dGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9u KGUpe3JldHVybiBudWxsPT1lP28uY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0 aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5tZXJnZSh0aGlzLmNvbnN0cnVj dG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0 dXJuIHcuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNr KHcubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sc2xpY2U6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5hcHBseSh0aGlzLGFyZ3VtZW50cykp fSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhl PDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobj49MCYmbjx0P1t0aGlzW25dXTpbXSl9LGVu ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0s cHVzaDpzLHNvcnQ6bi5zb3J0LHNwbGljZTpuLnNwbGljZX0sdy5leHRlbmQ9dy5mbi5leHRlbmQ9 ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3Vt ZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50 c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fGcoYSl8fChhPXt9KSxzPT09dSYmKGE9 dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKW49 YVt0XSxhIT09KHI9ZVt0XSkmJihsJiZyJiYody5pc1BsYWluT2JqZWN0KHIpfHwoaT1BcnJheS5p c0FycmF5KHIpKSk/KGk/KGk9ITEsbz1uJiZBcnJheS5pc0FycmF5KG4pP246W10pOm89biYmdy5p c1BsYWluT2JqZWN0KG4pP246e30sYVt0XT13LmV4dGVuZChsLG8scikpOnZvaWQgMCE9PXImJihh W3RdPXIpKTtyZXR1cm4gYX0sdy5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKCIzLjMuMSIrTWF0 aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihl KXt0aHJvdyBuZXcgRXJyb3IoZSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzUGxhaW5PYmplY3Q6ZnVu Y3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4hKCFlfHwiW29iamVjdCBPYmplY3RdIiE9PWMuY2FsbChl KSkmJighKHQ9aShlKSl8fCJmdW5jdGlvbiI9PXR5cGVvZihuPWYuY2FsbCh0LCJjb25zdHJ1Y3Rv ciIpJiZ0LmNvbnN0cnVjdG9yKSYmcC5jYWxsKG4pPT09ZCl9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rp b24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZ2xvYmFsRXZhbDpmdW5j dGlvbihlKXttKGUpfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKEMoZSkpe2Zvcihu PWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2Ug Zm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LHRy aW06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UoVCwiIil9LG1h a2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYoQyhPYmpl Y3QoZSkpP3cubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnMuY2FsbChuLGUpKSxu fSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTp1LmNhbGwodCxlLG4p fSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7 cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUs dCxuKXtmb3IodmFyIHIsaT1bXSxvPTAsYT1lLmxlbmd0aCxzPSFuO288YTtvKyspKHI9IXQoZVtv XSxvKSkhPT1zJiZpLnB1c2goZVtvXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFy IHIsaSxvPTAscz1bXTtpZihDKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChl W29dLG8sbikpJiZzLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4p KSYmcy5wdXNoKGkpO3JldHVybiBhLmFwcGx5KFtdLHMpfSxndWlkOjEsc3VwcG9ydDpofSksImZ1 bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHcuZm5bU3ltYm9sLml0ZXJhdG9yXT1uW1N5bWJvbC5p dGVyYXRvcl0pLHcuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERh dGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXts WyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIEMoZSl7dmFyIHQ9 ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49eChlKTtyZXR1cm4hZyhlKSYmIXkoZSkmJigi YXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9dmFy IEU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsdSxsLGMsZixwLGQsaCxnLHksdixtLHgs Yj0ic2l6emxlIisxKm5ldyBEYXRlLHc9ZS5kb2N1bWVudCxUPTAsQz0wLEU9YWUoKSxrPWFlKCks Uz1hZSgpLEQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihmPSEwKSwwfSxOPXt9Lmhhc093 blByb3BlcnR5LEE9W10saj1BLnBvcCxxPUEucHVzaCxMPUEucHVzaCxIPUEuc2xpY2UsTz1mdW5j dGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1 cm4gbjtyZXR1cm4tMX0sUD0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3Bs YXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3Bl bnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLFI9Iig/ OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixJPSJcXFsiK00rIiooIitSKyIpKD86IitNKyIq KFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58 W15cXFxcXCJdKSopXCJ8KCIrUisiKSl8KSIrTSsiKlxcXSIsVz0iOigiK1IrIikoPzpcXCgoKCco KD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxc XC58W15cXFxcKClbXFxdXXwiK0krIikqKXwuKilcXCl8KSIsJD1uZXcgUmVnRXhwKE0rIisiLCJn IiksQj1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIisk IiwiZyIpLEY9bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSxfPW5ldyBSZWdFeHAoIl4iK00r IiooWz4rfl18IitNKyIpIitNKyIqIiksej1uZXcgUmVnRXhwKCI9IitNKyIqKFteXFxdJ1wiXSo/ KSIrTSsiKlxcXSIsImciKSxYPW5ldyBSZWdFeHAoVyksVT1uZXcgUmVnRXhwKCJeIitSKyIkIiks Vj17SUQ6bmV3IFJlZ0V4cCgiXiMoIitSKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK1Ir IikiKSxUQUc6bmV3IFJlZ0V4cCgiXigiK1IrInxbKl0pIiksQVRUUjpuZXcgUmVnRXhwKCJeIitJ KSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrVyksQ0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxmaXJz dHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIitNKyIqKGV2ZW58b2Rk fCgoWystXXwpKFxcZCopbnwpIitNKyIqKD86KFsrLV18KSIrTSsiKihcXGQrKXwpKSIrTSsiKlxc KXwpIiwiaSIpLGJvb2w6bmV3IFJlZ0V4cCgiXig/OiIrUCsiKSQiLCJpIiksbmVlZHNDb250ZXh0 Om5ldyBSZWdFeHAoIl4iK00rIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxs YXN0KSg/OlxcKCIrTSsiKigoPzotXFxkKT9cXGQqKSIrTSsiKlxcKXwpKD89W14tXXwkKSIsImki KX0sRz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFk9L15oXGQkL2ksUT0v Xltee10rXHtccypcW25hdGl2ZSBcdy8sSj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSsp KSQvLEs9L1srfl0vLFo9bmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitNKyI/fCgiK00r Iil8LikiLCJpZyIpLGVlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iMHgiK3QtNjU1MzY7cmV0dXJu IHIhPT1yfHxuP3Q6cjwwP1N0cmluZy5mcm9tQ2hhckNvZGUocis2NTUzNik6U3RyaW5nLmZyb21D aGFyQ29kZShyPj4xMHw1NTI5NiwxMDIzJnJ8NTYzMjApfSx0ZT0vKFtcMC1ceDFmXHg3Zl18Xi0/ XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxuZT1mdW5jdGlvbihlLHQpe3JldHVy biB0PyJcMCI9PT1lPyJcdWZmZmQiOmUuc2xpY2UoMCwtMSkrIlxcIitlLmNoYXJDb2RlQXQoZS5s ZW5ndGgtMSkudG9TdHJpbmcoMTYpKyIgIjoiXFwiK2V9LHJlPWZ1bmN0aW9uKCl7cCgpfSxpZT1t ZShmdW5jdGlvbihlKXtyZXR1cm4hMD09PWUuZGlzYWJsZWQmJigiZm9ybSJpbiBlfHwibGFiZWwi aW4gZSl9LHtkaXI6InBhcmVudE5vZGUiLG5leHQ6ImxlZ2VuZCJ9KTt0cnl7TC5hcHBseShBPUgu Y2FsbCh3LmNoaWxkTm9kZXMpLHcuY2hpbGROb2RlcyksQVt3LmNoaWxkTm9kZXMubGVuZ3RoXS5u b2RlVHlwZX1jYXRjaChlKXtMPXthcHBseTpBLmxlbmd0aD9mdW5jdGlvbihlLHQpe3EuYXBwbHko ZSxILmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24r K109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBvZShlLHQscixpKXt2YXIgbyxzLGws YyxmLGgsdixtPXQmJnQub3duZXJEb2N1bWVudCxUPXQ/dC5ub2RlVHlwZTo5O2lmKHI9cnx8W10s InN0cmluZyIhPXR5cGVvZiBlfHwhZXx8MSE9PVQmJjkhPT1UJiYxMSE9PVQpcmV0dXJuIHI7aWYo IWkmJigodD90Lm93bmVyRG9jdW1lbnR8fHQ6dykhPT1kJiZwKHQpLHQ9dHx8ZCxnKSl7aWYoMTEh PT1UJiYoZj1KLmV4ZWMoZSkpKWlmKG89ZlsxXSl7aWYoOT09PVQpe2lmKCEobD10LmdldEVsZW1l bnRCeUlkKG8pKSlyZXR1cm4gcjtpZihsLmlkPT09bylyZXR1cm4gci5wdXNoKGwpLHJ9ZWxzZSBp ZihtJiYobD1tLmdldEVsZW1lbnRCeUlkKG8pKSYmeCh0LGwpJiZsLmlkPT09bylyZXR1cm4gci5w dXNoKGwpLHJ9ZWxzZXtpZihmWzJdKXJldHVybiBMLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFn TmFtZShlKSkscjtpZigobz1mWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVs ZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEwuYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05h bWUobykpLHJ9aWYobi5xc2EmJiFTW2UrIiAiXSYmKCF5fHwheS50ZXN0KGUpKSl7aWYoMSE9PVQp bT10LHY9ZTtlbHNlIGlmKCJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoYz10 LmdldEF0dHJpYnV0ZSgiaWQiKSk/Yz1jLnJlcGxhY2UodGUsbmUpOnQuc2V0QXR0cmlidXRlKCJp ZCIsYz1iKSxzPShoPWEoZSkpLmxlbmd0aDt3aGlsZShzLS0paFtzXT0iIyIrYysiICIrdmUoaFtz XSk7dj1oLmpvaW4oIiwiKSxtPUsudGVzdChlKSYmZ2UodC5wYXJlbnROb2RlKXx8dH1pZih2KXRy eXtyZXR1cm4gTC5hcHBseShyLG0ucXVlcnlTZWxlY3RvckFsbCh2KSkscn1jYXRjaChlKXt9Zmlu YWxseXtjPT09YiYmdC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gdShlLnJlcGxhY2Uo QiwiJDEiKSx0LHIsaSl9ZnVuY3Rpb24gYWUoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4saSl7cmV0 dXJuIGUucHVzaChuKyIgIik+ci5jYWNoZUxlbmd0aCYmZGVsZXRlIHRbZS5zaGlmdCgpXSx0W24r IiAiXT1pfXJldHVybiB0fWZ1bmN0aW9uIHNlKGUpe3JldHVybiBlW2JdPSEwLGV9ZnVuY3Rpb24g dWUoZSl7dmFyIHQ9ZC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpO3RyeXtyZXR1cm4hIWUodCl9 Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1v dmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGxlKGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLGk9 bi5sZW5ndGg7d2hpbGUoaS0tKXIuYXR0ckhhbmRsZVtuW2ldXT10fWZ1bmN0aW9uIGNlKGUsdCl7 dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJ bmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxp bmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBmZShlKXtyZXR1cm4g ZnVuY3Rpb24odCl7cmV0dXJuImlucHV0Ij09PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmdC50 eXBlPT09ZX19ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5h bWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PW58fCJidXR0b24iPT09bikmJnQudHlw ZT09PWV9fWZ1bmN0aW9uIGRlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iZm9ybSJpbiB0 P3QucGFyZW50Tm9kZSYmITE9PT10LmRpc2FibGVkPyJsYWJlbCJpbiB0PyJsYWJlbCJpbiB0LnBh cmVudE5vZGU/dC5wYXJlbnROb2RlLmRpc2FibGVkPT09ZTp0LmRpc2FibGVkPT09ZTp0LmlzRGlz YWJsZWQ9PT1lfHx0LmlzRGlzYWJsZWQhPT0hZSYmaWUodCk9PT1lOnQuZGlzYWJsZWQ9PT1lOiJs YWJlbCJpbiB0JiZ0LmRpc2FibGVkPT09ZX19ZnVuY3Rpb24gaGUoZSl7cmV0dXJuIHNlKGZ1bmN0 aW9uKHQpe3JldHVybiB0PSt0LHNlKGZ1bmN0aW9uKG4scil7dmFyIGksbz1lKFtdLG4ubGVuZ3Ro LHQpLGE9by5sZW5ndGg7d2hpbGUoYS0tKW5baT1vW2FdXSYmKG5baV09IShyW2ldPW5baV0pKX0p fSl9ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVt ZW50c0J5VGFnTmFtZSYmZX1uPW9lLnN1cHBvcnQ9e30sbz1vZS5pc1hNTD1mdW5jdGlvbihlKXt2 YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuISF0JiYi SFRNTCIhPT10Lm5vZGVOYW1lfSxwPW9lLnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LGks YT1lP2Uub3duZXJEb2N1bWVudHx8ZTp3O3JldHVybiBhIT09ZCYmOT09PWEubm9kZVR5cGUmJmEu ZG9jdW1lbnRFbGVtZW50PyhkPWEsaD1kLmRvY3VtZW50RWxlbWVudCxnPSFvKGQpLHchPT1kJiYo aT1kLmRlZmF1bHRWaWV3KSYmaS50b3AhPT1pJiYoaS5hZGRFdmVudExpc3RlbmVyP2kuYWRkRXZl bnRMaXN0ZW5lcigidW5sb2FkIixyZSwhMSk6aS5hdHRhY2hFdmVudCYmaS5hdHRhY2hFdmVudCgi b251bmxvYWQiLHJlKSksbi5hdHRyaWJ1dGVzPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNz TmFtZT0iaSIsIWUuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLG4uZ2V0RWxlbWVudHNCeVRh Z05hbWU9dWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQoZC5jcmVhdGVDb21tZW50 KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxuLmdldEVsZW1lbnRz QnlDbGFzc05hbWU9US50ZXN0KGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksbi5nZXRCeUlkPXVl KGZ1bmN0aW9uKGUpe3JldHVybiBoLmFwcGVuZENoaWxkKGUpLmlkPWIsIWQuZ2V0RWxlbWVudHNC eU5hbWV8fCFkLmdldEVsZW1lbnRzQnlOYW1lKGIpLmxlbmd0aH0pLG4uZ2V0QnlJZD8oci5maWx0 ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFosZWUpO3JldHVybiBmdW5jdGlvbihl KXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sci5maW5kLklEPWZ1bmN0aW9uKGUs dCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZnKXt2YXIgbj10Lmdl dEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooci5maWx0ZXIuSUQ9ZnVuY3Rpb24o ZSl7dmFyIHQ9ZS5yZXBsYWNlKFosZWUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj0idW5kZWZp bmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIp O3JldHVybiBuJiZuLnZhbHVlPT09dH19LHIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRl ZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmZyl7dmFyIG4scixpLG89dC5nZXRFbGVt ZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVl PT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisr XSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119 cmV0dXJuW119fSksci5maW5kLlRBRz1uLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUs dCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoZSk6bi5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06 ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7 aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1 cm4gcn1yZXR1cm4gb30sci5maW5kLkNMQVNTPW4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVu Y3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZSYmZylyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSx2PVtdLHk9W10sKG4ucXNh PVEudGVzdChkLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHVlKGZ1bmN0aW9uKGUpe2guYXBwZW5kQ2hp bGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitiKyInPjwvYT48c2VsZWN0IGlkPSciK2IrIi1cclxc JyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0 PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmeS5w dXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVj dGVkXSIpLmxlbmd0aHx8eS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1ArIikiKSxlLnF1ZXJ5 U2VsZWN0b3JBbGwoIltpZH49IitiKyItXSIpLmxlbmd0aHx8eS5wdXNoKCJ+PSIpLGUucXVlcnlT ZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHkucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5 U2VsZWN0b3JBbGwoImEjIitiKyIrKiIpLmxlbmd0aHx8eS5wdXNoKCIuIy4rWyt+XSIpfSksdWUo ZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48 L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9 ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiks ZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9y QWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmeS5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIh PT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ5LnB1c2goIjplbmFibGVk IiwiOmRpc2FibGVkIiksaC5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNl bGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnkucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJs ZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx5LnB1c2goIiwuKjoiKX0pKSwobi5tYXRj aGVzU2VsZWN0b3I9US50ZXN0KG09aC5tYXRjaGVzfHxoLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8 aC5tb3pNYXRjaGVzU2VsZWN0b3J8fGgub01hdGNoZXNTZWxlY3Rvcnx8aC5tc01hdGNoZXNTZWxl Y3RvcikpJiZ1ZShmdW5jdGlvbihlKXtuLmRpc2Nvbm5lY3RlZE1hdGNoPW0uY2FsbChlLCIqIiks bS5jYWxsKGUsIltzIT0nJ106eCIpLHYucHVzaCgiIT0iLFcpfSkseT15Lmxlbmd0aCYmbmV3IFJl Z0V4cCh5LmpvaW4oInwiKSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSksdD1R LnRlc3QoaC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseD10fHxRLnRlc3QoaC5jb250YWlucyk/ ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9 dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5j b250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29t cGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5w YXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtp ZihlPT09dClyZXR1cm4gZj0hMCwwO3ZhciByPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0 LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiByfHwoMSYocj0oZS5vd25lckRvY3VtZW50 fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6 MSl8fCFuLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PXI/ZT09 PWR8fGUub3duZXJEb2N1bWVudD09PXcmJngodyxlKT8tMTp0PT09ZHx8dC5vd25lckRvY3VtZW50 PT09dyYmeCh3LHQpPzE6Yz9PKGMsZSktTyhjLHQpOjA6NCZyPy0xOjEpfTpmdW5jdGlvbihlLHQp e2lmKGU9PT10KXJldHVybiBmPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJl bnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PWQ/LTE6dD09PWQ/MTppPy0x Om8/MTpjP08oYyxlKS1PKGMsdCk6MDtpZihpPT09bylyZXR1cm4gY2UoZSx0KTtuPWU7d2hpbGUo bj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVu c2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP2NlKGFbcl0sc1tyXSk6YVty XT09PXc/LTE6c1tyXT09PXc/MTowfSxkKTpkfSxvZS5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0 dXJuIG9lKGUsbnVsbCxudWxsLHQpfSxvZS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtp ZigoZS5vd25lckRvY3VtZW50fHxlKSE9PWQmJnAoZSksdD10LnJlcGxhY2UoeiwiPSckMSddIiks bi5tYXRjaGVzU2VsZWN0b3ImJmcmJiFTW3QrIiAiXSYmKCF2fHwhdi50ZXN0KHQpKSYmKCF5fHwh eS50ZXN0KHQpKSl0cnl7dmFyIHI9bS5jYWxsKGUsdCk7aWYocnx8bi5kaXNjb25uZWN0ZWRNYXRj aHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGUp e31yZXR1cm4gb2UodCxkLG51bGwsW2VdKS5sZW5ndGg+MH0sb2UuY29udGFpbnM9ZnVuY3Rpb24o ZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PWQmJnAoZSkseChlLHQpfSxvZS5hdHRy PWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpO3ZhciBpPXIuYXR0 ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLG89aSYmTi5jYWxsKHIuYXR0ckhhbmRsZSx0LnRvTG93 ZXJDYXNlKCkpP2koZSx0LCFnKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PW8/bzpuLmF0dHJpYnV0 ZXN8fCFnP2UuZ2V0QXR0cmlidXRlKHQpOihvPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJm8uc3Bl Y2lmaWVkP28udmFsdWU6bnVsbH0sb2UuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5y ZXBsYWNlKHRlLG5lKX0sb2UuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJTeW50 YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2UpfSxvZS51bmlxdWVTb3J0PWZ1 bmN0aW9uKGUpe3ZhciB0LHI9W10saT0wLG89MDtpZihmPSFuLmRldGVjdER1cGxpY2F0ZXMsYz0h bi5zb3J0U3RhYmxlJiZlLnNsaWNlKDApLGUuc29ydChEKSxmKXt3aGlsZSh0PWVbbysrXSl0PT09 ZVtvXSYmKGk9ci5wdXNoKG8pKTt3aGlsZShpLS0pZS5zcGxpY2UocltpXSwxKX1yZXR1cm4gYz1u dWxsLGV9LGk9b2UuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxvPWUubm9kZVR5 cGU7aWYobyl7aWYoMT09PW98fDk9PT1vfHwxMT09PW8pe2lmKCJzdHJpbmciPT10eXBlb2YgZS50 ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUu bmV4dFNpYmxpbmcpbis9aShlKX1lbHNlIGlmKDM9PT1vfHw0PT09bylyZXR1cm4gZS5ub2RlVmFs dWV9ZWxzZSB3aGlsZSh0PWVbcisrXSluKz1pKHQpO3JldHVybiBufSwocj1vZS5zZWxlY3RvcnM9 e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpzZSxtYXRjaDpWLGF0dHJIYW5kbGU6e30sZmlu ZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2Rpcjoi cGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2Rp cjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4g ZVsxXT1lWzFdLnJlcGxhY2UoWixlZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxh Y2UoWixlZSksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxD SElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1l WzFdLnNsaWNlKDAsMyk/KGVbM118fG9lLmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVb Nl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18 fCJvZGQiPT09ZVszXSkpOmVbM10mJm9lLmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihl KXt2YXIgdCxuPSFlWzZdJiZlWzJdO3JldHVybiBWLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVsz XT9lWzJdPWVbNF18fGVbNV18fCIiOm4mJlgudGVzdChuKSYmKHQ9YShuLCEwKSkmJih0PW4uaW5k ZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsy XT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2 YXIgdD1lLnJlcGxhY2UoWixlZSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9u KCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRv TG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9RVtlKyIgIl07cmV0dXJu IHR8fCh0PW5ldyBSZWdFeHAoIihefCIrTSsiKSIrZSsiKCIrTSsifCQpIikpJiZFKGUsZnVuY3Rp b24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNz TmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUo ImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7 dmFyIGk9b2UuYXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OiF0fHwoaSs9IiIsIj0i PT09dD9pPT09bjoiIT0iPT09dD9pIT09bjoiXj0iPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOiIq PSI9PT10P24mJmkuaW5kZXhPZihuKT4tMToiJD0iPT09dD9uJiZpLnNsaWNlKC1uLmxlbmd0aCk9 PT1uOiJ+PSI9PT10PygiICIraS5yZXBsYWNlKCQsIiAiKSsiICIpLmluZGV4T2Yobik+LTE6Inw9 Ij09PXQmJihpPT09bnx8aS5zbGljZSgwLG4ubGVuZ3RoKzEpPT09bisiLSIpKX19LENISUxEOmZ1 bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Im50aCIhPT1lLnNsaWNlKDAsMyksYT0ibGFzdCIhPT1l LnNsaWNlKC00KSxzPSJvZi10eXBlIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihl KXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMsZixwLGQsaCxn PW8hPT1hPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIseT10LnBhcmVudE5vZGUsdj1z JiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbT0hdSYmIXMseD0hMTtpZih5KXtpZihvKXt3aGls ZShnKXtwPXQ7d2hpbGUocD1wW2ddKWlmKHM/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09djox PT09cC5ub2RlVHlwZSlyZXR1cm4hMTtoPWc9Im9ubHkiPT09ZSYmIWgmJiJuZXh0U2libGluZyJ9 cmV0dXJuITB9aWYoaD1bYT95LmZpcnN0Q2hpbGQ6eS5sYXN0Q2hpbGRdLGEmJm0pe3g9KGQ9KGw9 KGM9KGY9KHA9eSlbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9 KSlbZV18fFtdKVswXT09PVQmJmxbMV0pJiZsWzJdLHA9ZCYmeS5jaGlsZE5vZGVzW2RdO3doaWxl KHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKWlmKDE9PT1wLm5vZGVUeXBlJiYrK3gm JnA9PT10KXtjW2VdPVtULGQseF07YnJlYWt9fWVsc2UgaWYobSYmKHg9ZD0obD0oYz0oZj0ocD10 KVtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pKVtlXXx8W10p WzBdPT09VCYmbFsxXSksITE9PT14KXdoaWxlKHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBv cCgpKWlmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXY6MT09PXAubm9kZVR5cGUpJiYr K3gmJihtJiYoKGM9KGY9cFtiXXx8KHBbYl09e30pKVtwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJ RF09e30pKVtlXT1bVCx4XSkscD09PXQpKWJyZWFrO3JldHVybih4LT1pKT09PXJ8fHglcj09MCYm eC9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLGk9ci5wc2V1ZG9zW2VdfHxyLnNl dEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b2UuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzog IitlKTtyZXR1cm4gaVtiXT9pKHQpOmkubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxyLnNldEZpbHRl cnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9zZShmdW5jdGlvbihlLG4pe3ZhciBy LG89aShlLHQpLGE9by5sZW5ndGg7d2hpbGUoYS0tKWVbcj1PKGUsb1thXSldPSEobltyXT1vW2Fd KX0pOmZ1bmN0aW9uKGUpe3JldHVybiBpKGUsMCxuKX0pOml9fSxwc2V1ZG9zOntub3Q6c2UoZnVu Y3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPXMoZS5yZXBsYWNlKEIsIiQxIikpO3JldHVybiByW2Jd P3NlKGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLGE9cihlLG51bGwsaSxbXSkscz1lLmxlbmd0aDt3 aGlsZShzLS0pKG89YVtzXSkmJihlW3NdPSEodFtzXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0 dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLHRbMF09bnVsbCwhbi5wb3AoKX19KSxoYXM6c2UoZnVu Y3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvZShlLHQpLmxlbmd0aD4wfX0pLGNv bnRhaW5zOnNlKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZShaLGVlKSxmdW5jdGlvbih0 KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fGkodCkpLmluZGV4T2YoZSk+LTF9 fSksbGFuZzpzZShmdW5jdGlvbihlKXtyZXR1cm4gVS50ZXN0KGV8fCIiKXx8b2UuZXJyb3IoInVu c3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UoWixlZSkudG9Mb3dlckNhc2UoKSxmdW5j dGlvbih0KXt2YXIgbjtkb3tpZihuPWc/dC5sYW5nOnQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIp fHx0LmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybihuPW4udG9Mb3dlckNhc2UoKSk9PT1lfHww PT09bi5pbmRleE9mKGUrIi0iKX13aGlsZSgodD10LnBhcmVudE5vZGUpJiYxPT09dC5ub2RlVHlw ZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKHQpe3ZhciBuPWUubG9jYXRpb24mJmUubG9j YXRpb24uaGFzaDtyZXR1cm4gbiYmbi5zbGljZSgxKT09PXQuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7 cmV0dXJuIGU9PT1ofSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWQuYWN0aXZlRWxlbWVu dCYmKCFkLmhhc0ZvY3VzfHxkLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFi SW5kZXgpfSxlbmFibGVkOmRlKCExKSxkaXNhYmxlZDpkZSghMCksY2hlY2tlZDpmdW5jdGlvbihl KXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5j aGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7 cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNl bGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNp YmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24o ZSl7cmV0dXJuIXIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBZ LnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZS5ub2Rl TmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7 cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6 ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2Uo KSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0 ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OmhlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSks bGFzdDpoZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6aGUoZnVuY3Rpb24oZSx0LG4p e3JldHVybltuPDA/bit0Om5dfSksZXZlbjpoZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248 dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpoZShmdW5jdGlvbihlLHQpe2Zvcih2YXIg bj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OmhlKGZ1bmN0aW9uKGUsdCxuKXtm b3IodmFyIHI9bjwwP24rdDpuOy0tcj49MDspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6aGUoZnVu Y3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4g ZX0pfX0pLnBzZXVkb3MubnRoPXIucHNldWRvcy5lcTtmb3IodCBpbntyYWRpbzohMCxjaGVja2Jv eDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlyLnBzZXVkb3NbdF09ZmUodCk7Zm9y KHQgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlyLnBzZXVkb3NbdF09cGUodCk7ZnVuY3Rpb24geWUo KXt9eWUucHJvdG90eXBlPXIuZmlsdGVycz1yLnBzZXVkb3Msci5zZXRGaWx0ZXJzPW5ldyB5ZSxh PW9lLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4saSxvLGEscyx1LGwsYz1rW2UrIiAiXTtp ZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsdT1bXSxsPXIucHJlRmlsdGVyO3doaWxlKHMp e24mJiEoaT1GLmV4ZWMocykpfHwoaSYmKHM9cy5zbGljZShpWzBdLmxlbmd0aCl8fHMpLHUucHVz aChvPVtdKSksbj0hMSwoaT1fLmV4ZWMocykpJiYobj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpu LHR5cGU6aVswXS5yZXBsYWNlKEIsIiAiKX0pLHM9cy5zbGljZShuLmxlbmd0aCkpO2ZvcihhIGlu IHIuZmlsdGVyKSEoaT1WW2FdLmV4ZWMocykpfHxsW2FdJiYhKGk9bFthXShpKSl8fChuPWkuc2hp ZnQoKSxvLnB1c2goe3ZhbHVlOm4sdHlwZTphLG1hdGNoZXM6aX0pLHM9cy5zbGljZShuLmxlbmd0 aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P3MubGVuZ3RoOnM/b2UuZXJyb3IoZSk6ayhlLHUpLnNs aWNlKDApfTtmdW5jdGlvbiB2ZShlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoLHI9IiI7dDxuO3Qr KylyKz1lW3RdLnZhbHVlO3JldHVybiByfWZ1bmN0aW9uIG1lKGUsdCxuKXt2YXIgcj10LmRpcixp PXQubmV4dCxvPWl8fHIsYT1uJiYicGFyZW50Tm9kZSI9PT1vLHM9QysrO3JldHVybiB0LmZpcnN0 P2Z1bmN0aW9uKHQsbixpKXt3aGlsZSh0PXRbcl0paWYoMT09PXQubm9kZVR5cGV8fGEpcmV0dXJu IGUodCxuLGkpO3JldHVybiExfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxmLHA9W1Qsc107aWYo dSl7d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8YSkmJmUodCxuLHUpKXJldHVybiEw fWVsc2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxhKWlmKGY9dFtiXXx8KHRbYl09 e30pLGM9Zlt0LnVuaXF1ZUlEXXx8KGZbdC51bmlxdWVJRF09e30pLGkmJmk9PT10Lm5vZGVOYW1l LnRvTG93ZXJDYXNlKCkpdD10W3JdfHx0O2Vsc2V7aWYoKGw9Y1tvXSkmJmxbMF09PT1UJiZsWzFd PT09cylyZXR1cm4gcFsyXT1sWzJdO2lmKGNbb109cCxwWzJdPWUodCxuLHUpKXJldHVybiEwfXJl dHVybiExfX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7 dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4h MH06ZVswXX1mdW5jdGlvbiBiZShlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisr KW9lKGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiB3ZShlLHQsbixyLGkpe2Zvcih2YXIgbyxh PVtdLHM9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtzPHU7cysrKShvPWVbc10pJiYobiYmIW4obyxy LGkpfHwoYS5wdXNoKG8pLGwmJnQucHVzaChzKSkpO3JldHVybiBhfWZ1bmN0aW9uIFRlKGUsdCxu LHIsaSxvKXtyZXR1cm4gciYmIXJbYl0mJihyPVRlKHIpKSxpJiYhaVtiXSYmKGk9VGUoaSxvKSks c2UoZnVuY3Rpb24obyxhLHMsdSl7dmFyIGwsYyxmLHA9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8 YmUodHx8IioiLHMubm9kZVR5cGU/W3NdOnMsW10pLHk9IWV8fCFvJiZ0P2c6d2UoZyxwLGUscyx1 KSx2PW4/aXx8KG8/ZTpofHxyKT9bXTphOnk7aWYobiYmbih5LHYscyx1KSxyKXtsPXdlKHYsZCks cihsLFtdLHMsdSksYz1sLmxlbmd0aDt3aGlsZShjLS0pKGY9bFtjXSkmJih2W2RbY11dPSEoeVtk W2NdXT1mKSl9aWYobyl7aWYoaXx8ZSl7aWYoaSl7bD1bXSxjPXYubGVuZ3RoO3doaWxlKGMtLSko Zj12W2NdKSYmbC5wdXNoKHlbY109Zik7aShudWxsLHY9W10sbCx1KX1jPXYubGVuZ3RoO3doaWxl KGMtLSkoZj12W2NdKSYmKGw9aT9PKG8sZik6cFtjXSk+LTEmJihvW2xdPSEoYVtsXT1mKSl9fWVs c2Ugdj13ZSh2PT09YT92LnNwbGljZShoLHYubGVuZ3RoKTp2KSxpP2kobnVsbCxhLHYsdSk6TC5h cHBseShhLHYpfSl9ZnVuY3Rpb24gQ2UoZSl7Zm9yKHZhciB0LG4saSxvPWUubGVuZ3RoLGE9ci5y ZWxhdGl2ZVtlWzBdLnR5cGVdLHM9YXx8ci5yZWxhdGl2ZVsiICJdLHU9YT8xOjAsYz1tZShmdW5j dGlvbihlKXtyZXR1cm4gZT09PXR9LHMsITApLGY9bWUoZnVuY3Rpb24oZSl7cmV0dXJuIE8odCxl KT4tMX0scywhMCkscD1bZnVuY3Rpb24oZSxuLHIpe3ZhciBpPSFhJiYocnx8biE9PWwpfHwoKHQ9 bikubm9kZVR5cGU/YyhlLG4scik6ZihlLG4scikpO3JldHVybiB0PW51bGwsaX1dO3U8bzt1Kysp aWYobj1yLnJlbGF0aXZlW2VbdV0udHlwZV0pcD1bbWUoeGUocCksbildO2Vsc2V7aWYoKG49ci5m aWx0ZXJbZVt1XS50eXBlXS5hcHBseShudWxsLGVbdV0ubWF0Y2hlcykpW2JdKXtmb3IoaT0rK3U7 aTxvO2krKylpZihyLnJlbGF0aXZlW2VbaV0udHlwZV0pYnJlYWs7cmV0dXJuIFRlKHU+MSYmeGUo cCksdT4xJiZ2ZShlLnNsaWNlKDAsdS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWVbdS0yXS50eXBl PyIqIjoiIn0pKS5yZXBsYWNlKEIsIiQxIiksbix1PGkmJkNlKGUuc2xpY2UodSxpKSksaTxvJiZD ZShlPWUuc2xpY2UoaSkpLGk8byYmdmUoZSkpfXAucHVzaChuKX1yZXR1cm4geGUocCl9ZnVuY3Rp b24gRWUoZSx0KXt2YXIgbj10Lmxlbmd0aD4wLGk9ZS5sZW5ndGg+MCxvPWZ1bmN0aW9uKG8sYSxz LHUsYyl7dmFyIGYsaCx5LHY9MCxtPSIwIix4PW8mJltdLGI9W10sdz1sLEM9b3x8aSYmci5maW5k LlRBRygiKiIsYyksRT1UKz1udWxsPT13PzE6TWF0aC5yYW5kb20oKXx8LjEsaz1DLmxlbmd0aDtm b3IoYyYmKGw9YT09PWR8fGF8fGMpO20hPT1rJiZudWxsIT0oZj1DW21dKTttKyspe2lmKGkmJmYp e2g9MCxhfHxmLm93bmVyRG9jdW1lbnQ9PT1kfHwocChmKSxzPSFnKTt3aGlsZSh5PWVbaCsrXSlp Zih5KGYsYXx8ZCxzKSl7dS5wdXNoKGYpO2JyZWFrfWMmJihUPUUpfW4mJigoZj0heSYmZikmJnYt LSxvJiZ4LnB1c2goZikpfWlmKHYrPW0sbiYmbSE9PXYpe2g9MDt3aGlsZSh5PXRbaCsrXSl5KHgs YixhLHMpO2lmKG8pe2lmKHY+MCl3aGlsZShtLS0peFttXXx8YlttXXx8KGJbbV09ai5jYWxsKHUp KTtiPXdlKGIpfUwuYXBwbHkodSxiKSxjJiYhbyYmYi5sZW5ndGg+MCYmdit0Lmxlbmd0aD4xJiZv ZS51bmlxdWVTb3J0KHUpfXJldHVybiBjJiYoVD1FLGw9dykseH07cmV0dXJuIG4/c2Uobyk6b31y ZXR1cm4gcz1vZS5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLG89U1tlKyIg Il07aWYoIW8pe3R8fCh0PWEoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShvPUNlKHRbbl0pKVti XT9yLnB1c2gobyk6aS5wdXNoKG8pOyhvPVMoZSxFZShpLHIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4g b30sdT1vZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8sdSxsLGMsZixwPSJmdW5jdGlv biI9PXR5cGVvZiBlJiZlLGQ9IWkmJmEoZT1wLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1k Lmxlbmd0aCl7aWYoKHU9ZFswXT1kWzBdLnNsaWNlKDApKS5sZW5ndGg+MiYmIklEIj09PShsPXVb MF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZnJiZyLnJlbGF0aXZlW3VbMV0udHlwZV0pe2lmKCEo dD0oci5maW5kLklEKGwubWF0Y2hlc1swXS5yZXBsYWNlKFosZWUpLHQpfHxbXSlbMF0pKXJldHVy biBuO3AmJih0PXQucGFyZW50Tm9kZSksZT1lLnNsaWNlKHUuc2hpZnQoKS52YWx1ZS5sZW5ndGgp fW89Vi5uZWVkc0NvbnRleHQudGVzdChlKT8wOnUubGVuZ3RoO3doaWxlKG8tLSl7aWYobD11W29d LHIucmVsYXRpdmVbYz1sLnR5cGVdKWJyZWFrO2lmKChmPXIuZmluZFtjXSkmJihpPWYobC5tYXRj aGVzWzBdLnJlcGxhY2UoWixlZSksSy50ZXN0KHVbMF0udHlwZSkmJmdlKHQucGFyZW50Tm9kZSl8 fHQpKSl7aWYodS5zcGxpY2UobywxKSwhKGU9aS5sZW5ndGgmJnZlKHUpKSlyZXR1cm4gTC5hcHBs eShuLGkpLG47YnJlYWt9fX1yZXR1cm4ocHx8cyhlLGQpKShpLHQsIWcsbiwhdHx8Sy50ZXN0KGUp JiZnZSh0LnBhcmVudE5vZGUpfHx0KSxufSxuLnNvcnRTdGFibGU9Yi5zcGxpdCgiIikuc29ydChE KS5qb2luKCIiKT09PWIsbi5kZXRlY3REdXBsaWNhdGVzPSEhZixwKCksbi5zb3J0RGV0YWNoZWQ9 dWUoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkLmNyZWF0 ZUVsZW1lbnQoImZpZWxkc2V0IikpfSksdWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1M PSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVm Iil9KXx8bGUoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGUsdCxuKXtpZighbily ZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCwidHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/MToyKX0pLG4u YXR0cmlidXRlcyYmdWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8aW5wdXQvPiIs ZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWUuZmlyc3RDaGlsZC5n ZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8bGUoInZhbHVlIixmdW5jdGlvbihlLHQsbil7aWYoIW4m JiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGUuZGVmYXVsdFZhbHVl fSksdWUoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIp fSl8fGxlKFAsZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKCFuKXJldHVybiEwPT09ZVt0XT90LnRv TG93ZXJDYXNlKCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1 ZTpudWxsfSksb2V9KGUpO3cuZmluZD1FLHcuZXhwcj1FLnNlbGVjdG9ycyx3LmV4cHJbIjoiXT13 LmV4cHIucHNldWRvcyx3LnVuaXF1ZVNvcnQ9dy51bmlxdWU9RS51bmlxdWVTb3J0LHcudGV4dD1F LmdldFRleHQsdy5pc1hNTERvYz1FLmlzWE1MLHcuY29udGFpbnM9RS5jb250YWlucyx3LmVzY2Fw ZVNlbGVjdG9yPUUuZXNjYXBlO3ZhciBrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1bXSxpPXZvaWQg MCE9PW47d2hpbGUoKGU9ZVt0XSkmJjkhPT1lLm5vZGVUeXBlKWlmKDE9PT1lLm5vZGVUeXBlKXtp ZihpJiZ3KGUpLmlzKG4pKWJyZWFrO3IucHVzaChlKX1yZXR1cm4gcn0sUz1mdW5jdGlvbihlLHQp e2Zvcih2YXIgbj1bXTtlO2U9ZS5uZXh0U2libGluZykxPT09ZS5ub2RlVHlwZSYmZSE9PXQmJm4u cHVzaChlKTtyZXR1cm4gbn0sRD13LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O2Z1bmN0aW9uIE4o ZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xv d2VyQ2FzZSgpfXZhciBBPS9ePChbYS16XVteXC9cMD46XHgyMFx0XHJcblxmXSopW1x4MjBcdFxy XG5cZl0qXC8/Pig/OjxcL1wxPnwpJC9pO2Z1bmN0aW9uIGooZSx0LG4pe3JldHVybiBnKHQpP3cu Z3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pOnQubm9kZVR5 cGU/dy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10IT09bn0pOiJzdHJpbmciIT10eXBl b2YgdD93LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gdS5jYWxsKHQsZSk+LTEhPT1ufSk6dy5m aWx0ZXIodCxlLG4pfXcuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBu JiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3cuZmluZC5t YXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106dy5maW5kLm1hdGNoZXMoZSx3LmdyZXAodCxmdW5j dGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LHcuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0 aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBl KXJldHVybiB0aGlzLnB1c2hTdGFjayh3KGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxy O3QrKylpZih3LmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNo U3RhY2soW10pLHQ9MDt0PHI7dCsrKXcuZmluZChlLGlbdF0sbik7cmV0dXJuIHI+MT93LnVuaXF1 ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRo aXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRo aXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFqKHRoaXMsInN0cmluZyI9PXR5 cGVvZiBlJiZELnRlc3QoZSk/dyhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpc cyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsody5mbi5pbml0PWZ1bmN0aW9uKGUsdCxu KXt2YXIgaSxvO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8cSwic3RyaW5nIj09dHlwZW9mIGUp e2lmKCEoaT0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiZlLmxlbmd0aD49Mz9bbnVs bCxlLG51bGxdOkwuZXhlYyhlKSl8fCFpWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8biku ZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoaVsxXSl7aWYodD10IGluc3Rh bmNlb2Ygdz90WzBdOnQsdy5tZXJnZSh0aGlzLHcucGFyc2VIVE1MKGlbMV0sdCYmdC5ub2RlVHlw ZT90Lm93bmVyRG9jdW1lbnR8fHQ6ciwhMCkpLEEudGVzdChpWzFdKSYmdy5pc1BsYWluT2JqZWN0 KHQpKWZvcihpIGluIHQpZyh0aGlzW2ldKT90aGlzW2ldKHRbaV0pOnRoaXMuYXR0cihpLHRbaV0p O3JldHVybiB0aGlzfXJldHVybihvPXIuZ2V0RWxlbWVudEJ5SWQoaVsyXSkpJiYodGhpc1swXT1v LHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxl bmd0aD0xLHRoaXMpOmcoZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUodyk6dy5tYWtl QXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT13LmZuLHE9dyhyKTt2YXIgSD0vXig/OnBhcmVudHN8 cHJldig/OlVudGlsfEFsbCkpLyxPPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHBy ZXY6ITB9O3cuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dyhlLHRoaXMpLG49dC5s ZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylp Zih3LmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQp e3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJncoZSk7 aWYoIUQudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFy ZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT9hLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBl JiZ3LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRo aXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/dy51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlv bihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/dS5jYWxsKHcoZSksdGhpc1swXSk6dS5j YWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhp cy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0 aGlzLnB1c2hTdGFjayh3LnVuaXF1ZVNvcnQody5tZXJnZSh0aGlzLmdldCgpLHcoZSx0KSkpKX0s YWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmpl Y3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gUChlLHQpe3doaWxlKChl PWVbdF0pJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9dy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24o ZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxw YXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBrKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGls OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlv bihlKXtyZXR1cm4gUChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBQ KGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBrKGUsIm5l eHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGsoZSwicHJldmlvdXNTaWJs aW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsoZSwibmV4dFNpYmxpbmci LG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBrKGUsInByZXZpb3VzU2libGlu ZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5m aXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQp fSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gTihlLCJpZnJhbWUiKT9lLmNvbnRlbnREb2N1 bWVudDooTihlLCJ0ZW1wbGF0ZSIpJiYoZT1lLmNvbnRlbnR8fGUpLHcubWVyZ2UoW10sZS5jaGls ZE5vZGVzKSl9fSxmdW5jdGlvbihlLHQpe3cuZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT13Lm1h cCh0aGlzLHQsbik7cmV0dXJuIlVudGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5n Ij09dHlwZW9mIHImJihpPXcuZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihPW2VdfHx3LnVu aXF1ZVNvcnQoaSksSC50ZXN0KGUpJiZpLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soaSl9fSk7 dmFyIE09L1teXHgyMFx0XHJcblxmXSsvZztmdW5jdGlvbiBSKGUpe3ZhciB0PXt9O3JldHVybiB3 LmVhY2goZS5tYXRjaChNKXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH13LkNhbGxiYWNr cz1mdW5jdGlvbihlKXtlPSJzdHJpbmciPT10eXBlb2YgZT9SKGUpOncuZXh0ZW5kKHt9LGUpO3Zh ciB0LG4scixpLG89W10sYT1bXSxzPS0xLHU9ZnVuY3Rpb24oKXtmb3IoaT1pfHxlLm9uY2Uscj10 PSEwO2EubGVuZ3RoO3M9LTEpe249YS5zaGlmdCgpO3doaWxlKCsrczxvLmxlbmd0aCkhMT09PW9b c10uYXBwbHkoblswXSxuWzFdKSYmZS5zdG9wT25GYWxzZSYmKHM9by5sZW5ndGgsbj0hMSl9ZS5t ZW1vcnl8fChuPSExKSx0PSExLGkmJihvPW4/W106IiIpfSxsPXthZGQ6ZnVuY3Rpb24oKXtyZXR1 cm4gbyYmKG4mJiF0JiYocz1vLmxlbmd0aC0xLGEucHVzaChuKSksZnVuY3Rpb24gdChuKXt3LmVh Y2gobixmdW5jdGlvbihuLHIpe2cocik/ZS51bmlxdWUmJmwuaGFzKHIpfHxvLnB1c2gocik6ciYm ci5sZW5ndGgmJiJzdHJpbmciIT09eChyKSYmdChyKX0pfShhcmd1bWVudHMpLG4mJiF0JiZ1KCkp LHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB3LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9u KGUsdCl7dmFyIG47d2hpbGUoKG49dy5pbkFycmF5KHQsbyxuKSk+LTEpby5zcGxpY2UobiwxKSxu PD1zJiZzLS19KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dy5pbkFycmF5KGUsbyk+ LTE6by5sZW5ndGg+MH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbyYmKG89W10pLHRoaXN9LGRp c2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gaT1hPVtdLG89bj0iIix0aGlzfSxkaXNhYmxlZDpmdW5j dGlvbigpe3JldHVybiFvfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxufHx0fHwobz1u PSIiKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWl9LGZpcmVXaXRoOmZ1bmN0aW9u KGUsbil7cmV0dXJuIGl8fChuPVtlLChuPW58fFtdKS5zbGljZT9uLnNsaWNlKCk6bl0sYS5wdXNo KG4pLHR8fHUoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBsLmZpcmVXaXRoKHRoaXMs YXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhcn19O3JldHVybiBsfTtm dW5jdGlvbiBJKGUpe3JldHVybiBlfWZ1bmN0aW9uIFcoZSl7dGhyb3cgZX1mdW5jdGlvbiAkKGUs dCxuLHIpe3ZhciBpO3RyeXtlJiZnKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWls KG4pOmUmJmcoaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2VdLnNsaWNl KHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX13LmV4dGVuZCh7RGVmZXJyZWQ6ZnVu Y3Rpb24odCl7dmFyIG49W1sibm90aWZ5IiwicHJvZ3Jlc3MiLHcuQ2FsbGJhY2tzKCJtZW1vcnki KSx3LkNhbGxiYWNrcygibWVtb3J5IiksMl0sWyJyZXNvbHZlIiwiZG9uZSIsdy5DYWxsYmFja3Mo Im9uY2UgbWVtb3J5Iiksdy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMCwicmVzb2x2ZWQiXSxb InJlamVjdCIsImZhaWwiLHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHcuQ2FsbGJhY2tzKCJv bmNlIG1lbW9yeSIpLDEsInJlamVjdGVkIl1dLHI9InBlbmRpbmciLGk9e3N0YXRlOmZ1bmN0aW9u KCl7cmV0dXJuIHJ9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBvLmRvbmUoYXJndW1lbnRzKS5m YWlsKGFyZ3VtZW50cyksdGhpc30sImNhdGNoIjpmdW5jdGlvbihlKXtyZXR1cm4gaS50aGVuKG51 bGwsZSl9LHBpcGU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHcuRGVmZXJyZWQo ZnVuY3Rpb24odCl7dy5lYWNoKG4sZnVuY3Rpb24obixyKXt2YXIgaT1nKGVbcls0XV0pJiZlW3Jb NF1dO29bclsxXV0oZnVuY3Rpb24oKXt2YXIgZT1pJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtl JiZnKGUucHJvbWlzZSk/ZS5wcm9taXNlKCkucHJvZ3Jlc3ModC5ub3RpZnkpLmRvbmUodC5yZXNv bHZlKS5mYWlsKHQucmVqZWN0KTp0W3JbMF0rIldpdGgiXSh0aGlzLGk/W2VdOmFyZ3VtZW50cyl9 KX0pLGU9bnVsbH0pLnByb21pc2UoKX0sdGhlbjpmdW5jdGlvbih0LHIsaSl7dmFyIG89MDtmdW5j dGlvbiBhKHQsbixyLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMsdT1hcmd1bWVudHMs bD1mdW5jdGlvbigpe3ZhciBlLGw7aWYoISh0PG8pKXtpZigoZT1yLmFwcGx5KHMsdSkpPT09bi5w cm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uIik7 bD1lJiYoIm9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkmJmUudGhlbixn KGwpP2k/bC5jYWxsKGUsYShvLG4sSSxpKSxhKG8sbixXLGkpKToobysrLGwuY2FsbChlLGEobyxu LEksaSksYShvLG4sVyxpKSxhKG8sbixJLG4ubm90aWZ5V2l0aCkpKToociE9PUkmJihzPXZvaWQg MCx1PVtlXSksKGl8fG4ucmVzb2x2ZVdpdGgpKHMsdSkpfX0sYz1pP2w6ZnVuY3Rpb24oKXt0cnl7 bCgpfWNhdGNoKGUpe3cuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayYmdy5EZWZlcnJlZC5leGNlcHRp b25Ib29rKGUsYy5zdGFja1RyYWNlKSx0KzE+PW8mJihyIT09VyYmKHM9dm9pZCAwLHU9W2VdKSxu LnJlamVjdFdpdGgocyx1KSl9fTt0P2MoKToody5EZWZlcnJlZC5nZXRTdGFja0hvb2smJihjLnN0 YWNrVHJhY2U9dy5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksZS5zZXRUaW1lb3V0KGMpKX19cmV0 dXJuIHcuRGVmZXJyZWQoZnVuY3Rpb24oZSl7blswXVszXS5hZGQoYSgwLGUsZyhpKT9pOkksZS5u b3RpZnlXaXRoKSksblsxXVszXS5hZGQoYSgwLGUsZyh0KT90OkkpKSxuWzJdWzNdLmFkZChhKDAs ZSxnKHIpP3I6VykpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxs IT1lP3cuZXh0ZW5kKGUsaSk6aX19LG89e307cmV0dXJuIHcuZWFjaChuLGZ1bmN0aW9uKGUsdCl7 dmFyIGE9dFsyXSxzPXRbNV07aVt0WzFdXT1hLmFkZCxzJiZhLmFkZChmdW5jdGlvbigpe3I9c30s blszLWVdWzJdLmRpc2FibGUsblszLWVdWzNdLmRpc2FibGUsblswXVsyXS5sb2NrLG5bMF1bM10u bG9jayksYS5hZGQodFszXS5maXJlKSxvW3RbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIG9bdFswXSsi V2l0aCJdKHRoaXM9PT1vP3ZvaWQgMDp0aGlzLGFyZ3VtZW50cyksdGhpc30sb1t0WzBdKyJXaXRo Il09YS5maXJlV2l0aH0pLGkucHJvbWlzZShvKSx0JiZ0LmNhbGwobyxvKSxvfSx3aGVuOmZ1bmN0 aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj10LHI9QXJyYXkobiksaT1vLmNhbGwoYXJn dW1lbnRzKSxhPXcuRGVmZXJyZWQoKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihuKXty W2VdPXRoaXMsaVtlXT1hcmd1bWVudHMubGVuZ3RoPjE/by5jYWxsKGFyZ3VtZW50cyk6biwtLXR8 fGEucmVzb2x2ZVdpdGgocixpKX19O2lmKHQ8PTEmJigkKGUsYS5kb25lKHMobikpLnJlc29sdmUs YS5yZWplY3QsIXQpLCJwZW5kaW5nIj09PWEuc3RhdGUoKXx8ZyhpW25dJiZpW25dLnRoZW4pKSly ZXR1cm4gYS50aGVuKCk7d2hpbGUobi0tKSQoaVtuXSxzKG4pLGEucmVqZWN0KTtyZXR1cm4gYS5w cm9taXNlKCl9fSk7dmFyIEI9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4 fFR5cGV8VVJJKUVycm9yJC87dy5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKHQsbil7 ZS5jb25zb2xlJiZlLmNvbnNvbGUud2FybiYmdCYmQi50ZXN0KHQubmFtZSkmJmUuY29uc29sZS53 YXJuKCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiAiK3QubWVzc2FnZSx0LnN0YWNrLG4pfSx3 LnJlYWR5RXhjZXB0aW9uPWZ1bmN0aW9uKHQpe2Uuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93 IHR9KX07dmFyIEY9dy5EZWZlcnJlZCgpO3cuZm4ucmVhZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIEYu dGhlbihlKVsiY2F0Y2giXShmdW5jdGlvbihlKXt3LnJlYWR5RXhjZXB0aW9uKGUpfSksdGhpc30s dy5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEscmVhZHk6ZnVuY3Rpb24oZSl7KCEwPT09 ZT8tLXcucmVhZHlXYWl0OncuaXNSZWFkeSl8fCh3LmlzUmVhZHk9ITAsITAhPT1lJiYtLXcucmVh ZHlXYWl0PjB8fEYucmVzb2x2ZVdpdGgocixbd10pKX19KSx3LnJlYWR5LnRoZW49Ri50aGVuO2Z1 bmN0aW9uIF8oKXtyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLF8pLGUu cmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsXyksdy5yZWFkeSgpfSJjb21wbGV0ZSI9PT1yLnJl YWR5U3RhdGV8fCJsb2FkaW5nIiE9PXIucmVhZHlTdGF0ZSYmIXIuZG9jdW1lbnRFbGVtZW50LmRv U2Nyb2xsP2Uuc2V0VGltZW91dCh3LnJlYWR5KTooci5hZGRFdmVudExpc3RlbmVyKCJET01Db250 ZW50TG9hZGVkIixfKSxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLF8pKTt2YXIgej1mdW5jdGlv bihlLHQsbixyLGksbyxhKXt2YXIgcz0wLHU9ZS5sZW5ndGgsbD1udWxsPT1uO2lmKCJvYmplY3Qi PT09eChuKSl7aT0hMDtmb3IocyBpbiBuKXooZSx0LHMsbltzXSwhMCxvLGEpfWVsc2UgaWYodm9p ZCAwIT09ciYmKGk9ITAsZyhyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihs PXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbCh3KGUpLG4pfSkpLHQpKWZvcig7czx1 O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/ dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LFg9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9u IFYoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGUucmVw bGFjZShYLCJtcy0iKS5yZXBsYWNlKFUsVil9dmFyIFk9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1l Lm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBRKCl7dGhp cy5leHBhbmRvPXcuZXhwYW5kbytRLnVpZCsrfVEudWlkPTEsUS5wcm90b3R5cGU9e2NhY2hlOmZ1 bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sWShlKSYmKGUu bm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5l eHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxu KXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbRyh0KV09bjtl bHNlIGZvcihyIGluIHQpaVtHKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXty ZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4 cGFuZG9dW0codCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0 JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQo ZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3Ro aXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0Fy cmF5KHQpP3QubWFwKEcpOih0PUcodCkpaW4gcj9bdF06dC5tYXRjaChNKXx8W10pLmxlbmd0aDt3 aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fHcuaXNFbXB0eU9iamVjdChyKSkm JihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRv XSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9p ZCAwIT09dCYmIXcuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBKPW5ldyBRLEs9bmV3IFEsWj0vXig/ Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLGVlPS9bQS1aXS9nO2Z1bmN0aW9uIHRlKGUpe3Jl dHVybiJ0cnVlIj09PWV8fCJmYWxzZSIhPT1lJiYoIm51bGwiPT09ZT9udWxsOmU9PT0rZSsiIj8r ZTpaLnRlc3QoZSk/SlNPTi5wYXJzZShlKTplKX1mdW5jdGlvbiBuZShlLHQsbil7dmFyIHI7aWYo dm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShlZSwiLSQm IikudG9Mb3dlckNhc2UoKSwic3RyaW5nIj09dHlwZW9mKG49ZS5nZXRBdHRyaWJ1dGUocikpKXt0 cnl7bj10ZShuKX1jYXRjaChlKXt9Sy5zZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDA7cmV0dXJuIG59 dy5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIEsuaGFzRGF0YShlKXx8Si5oYXNE YXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSy5hY2Nlc3MoZSx0LG4pfSxyZW1v dmVEYXRhOmZ1bmN0aW9uKGUsdCl7Sy5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4p e3JldHVybiBKLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7Si5yZW1v dmUoZSx0KX19KSx3LmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRo aXNbMF0sYT1vJiZvLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09ZSl7aWYodGhpcy5sZW5ndGgmJihp PUsuZ2V0KG8pLDE9PT1vLm5vZGVUeXBlJiYhSi5nZXQobywiaGFzRGF0YUF0dHJzIikpKXtuPWEu bGVuZ3RoO3doaWxlKG4tLSlhW25dJiYwPT09KHI9YVtuXS5uYW1lKS5pbmRleE9mKCJkYXRhLSIp JiYocj1HKHIuc2xpY2UoNSkpLG5lKG8scixpW3JdKSk7Si5zZXQobywiaGFzRGF0YUF0dHJzIiwh MCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigp e0suc2V0KHRoaXMsZSl9KTp6KHRoaXMsZnVuY3Rpb24odCl7dmFyIG47aWYobyYmdm9pZCAwPT09 dCl7aWYodm9pZCAwIT09KG49Sy5nZXQobyxlKSkpcmV0dXJuIG47aWYodm9pZCAwIT09KG49bmUo byxlKSkpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXtLLnNldCh0aGlzLGUsdCl9 KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlv bihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5yZW1vdmUodGhpcyxlKX0pfX0pLHcu ZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0odHx8ImZ4 IikrInF1ZXVlIixyPUouZ2V0KGUsdCksbiYmKCFyfHxBcnJheS5pc0FycmF5KG4pP3I9Si5hY2Nl c3MoZSx0LHcubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9u KGUsdCl7dD10fHwiZngiO3ZhciBuPXcucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgp LG89dy5fcXVldWVIb29rcyhlLHQpLGE9ZnVuY3Rpb24oKXt3LmRlcXVldWUoZSx0KX07ImlucHJv Z3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlu cHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGEsbykpLCFyJiZvJiZvLmVtcHR5LmZp cmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1 cm4gSi5nZXQoZSxuKXx8Si5hY2Nlc3MoZSxuLHtlbXB0eTp3LkNhbGxiYWNrcygib25jZSBtZW1v cnkiKS5hZGQoZnVuY3Rpb24oKXtKLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSx3LmZu LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVybiJzdHJpbmciIT10eXBl b2YgZSYmKHQ9ZSxlPSJmeCIsbi0tKSxhcmd1bWVudHMubGVuZ3RoPG4/dy5xdWV1ZSh0aGlzWzBd LGUpOnZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj13LnF1ZXVlKHRo aXMsZSx0KTt3Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PW5b MF0mJncuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMu ZWFjaChmdW5jdGlvbigpe3cuZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24o ZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2 YXIgbixyPTEsaT13LkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigp ey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZv aWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1KLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkm Jm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0p O3ZhciByZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxpZT1u ZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrcmUrIikoW2EteiVdKikkIiwiaSIpLG9lPVsiVG9w IiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9 PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmdy5jb250YWlu cyhlLm93bmVyRG9jdW1lbnQsZSkmJiJub25lIj09PXcuY3NzKGUsImRpc3BsYXkiKX0sc2U9ZnVu Y3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUu c3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFb b107cmV0dXJuIGl9O2Z1bmN0aW9uIHVlKGUsdCxuLHIpe3ZhciBpLG8sYT0yMCxzPXI/ZnVuY3Rp b24oKXtyZXR1cm4gci5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gdy5jc3MoZSx0LCIiKX0sdT1z KCksbD1uJiZuWzNdfHwody5jc3NOdW1iZXJbdF0/IiI6InB4IiksYz0ody5jc3NOdW1iZXJbdF18 fCJweCIhPT1sJiYrdSkmJmllLmV4ZWMody5jc3MoZSx0KSk7aWYoYyYmY1szXSE9PWwpe3UvPTIs bD1sfHxjWzNdLGM9K3V8fDE7d2hpbGUoYS0tKXcuc3R5bGUoZSx0LGMrbCksKDEtbykqKDEtKG89 cygpL3V8fC41KSk8PTAmJihhPTApLGMvPW87Yyo9Mix3LnN0eWxlKGUsdCxjK2wpLG49bnx8W119 cmV0dXJuIG4mJihjPStjfHwrdXx8MCxpPW5bMV0/YysoblsxXSsxKSpuWzJdOituWzJdLHImJihy LnVuaXQ9bCxyLnN0YXJ0PWMsci5lbmQ9aSkpLGl9dmFyIGxlPXt9O2Z1bmN0aW9uIGNlKGUpe3Zh ciB0LG49ZS5vd25lckRvY3VtZW50LHI9ZS5ub2RlTmFtZSxpPWxlW3JdO3JldHVybiBpfHwodD1u LmJvZHkuYXBwZW5kQ2hpbGQobi5jcmVhdGVFbGVtZW50KHIpKSxpPXcuY3NzKHQsImRpc3BsYXki KSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksIm5vbmUiPT09aSYmKGk9ImJsb2NrIiksbGVb cl09aSxpKX1mdW5jdGlvbiBmZShlLHQpe2Zvcih2YXIgbixyLGk9W10sbz0wLGE9ZS5sZW5ndGg7 bzxhO28rKykocj1lW29dKS5zdHlsZSYmKG49ci5zdHlsZS5kaXNwbGF5LHQ/KCJub25lIj09PW4m JihpW29dPUouZ2V0KHIsImRpc3BsYXkiKXx8bnVsbCxpW29dfHwoci5zdHlsZS5kaXNwbGF5PSIi KSksIiI9PT1yLnN0eWxlLmRpc3BsYXkmJmFlKHIpJiYoaVtvXT1jZShyKSkpOiJub25lIiE9PW4m JihpW29dPSJub25lIixKLnNldChyLCJkaXNwbGF5IixuKSkpO2ZvcihvPTA7bzxhO28rKyludWxs IT1pW29dJiYoZVtvXS5zdHlsZS5kaXNwbGF5PWlbb10pO3JldHVybiBlfXcuZm4uZXh0ZW5kKHtz aG93OmZ1bmN0aW9uKCl7cmV0dXJuIGZlKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJu IGZlKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9l P3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2FlKHRoaXMpP3co dGhpcykuc2hvdygpOncodGhpcykuaGlkZSgpfSl9fSk7dmFyIHBlPS9eKD86Y2hlY2tib3h8cmFk aW8pJC9pLGRlPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0rKS9pLGhlPS9eJHxebW9kdWxl JHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxnZT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxl PSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJd LGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIs Ijx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5 Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2dlLm9w dGdyb3VwPWdlLm9wdGlvbixnZS50Ym9keT1nZS50Zm9vdD1nZS5jb2xncm91cD1nZS5jYXB0aW9u PWdlLnRoZWFkLGdlLnRoPWdlLnRkO2Z1bmN0aW9uIHllKGUsdCl7dmFyIG47cmV0dXJuIG49InVu ZGVmaW5lZCIhPXR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRh Z05hbWUodHx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbD9lLnF1 ZXJ5U2VsZWN0b3JBbGwodHx8IioiKTpbXSx2b2lkIDA9PT10fHx0JiZOKGUsdCk/dy5tZXJnZShb ZV0sbik6bn1mdW5jdGlvbiB2ZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylK LnNldChlW25dLCJnbG9iYWxFdmFsIiwhdHx8Si5nZXQodFtuXSwiZ2xvYmFsRXZhbCIpKX12YXIg bWU9Lzx8JiM/XHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxj LGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsr KWlmKChvPWVbZF0pfHwwPT09bylpZigib2JqZWN0Ij09PXgobykpdy5tZXJnZShwLG8ubm9kZVR5 cGU/W29dOm8pO2Vsc2UgaWYobWUudGVzdChvKSl7YT1hfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRl RWxlbWVudCgiZGl2IikpLHM9KGRlLmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCks dT1nZVtzXXx8Z2UuX2RlZmF1bHQsYS5pbm5lckhUTUw9dVsxXSt3Lmh0bWxQcmVmaWx0ZXIobykr dVsyXSxjPXVbMF07d2hpbGUoYy0tKWE9YS5sYXN0Q2hpbGQ7dy5tZXJnZShwLGEuY2hpbGROb2Rl cyksKGE9Zi5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIHAucHVzaCh0LmNyZWF0ZVRl eHROb2RlKG8pKTtmLnRleHRDb250ZW50PSIiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiZ3Lmlu QXJyYXkobyxyKT4tMSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPXcuY29udGFpbnMoby5vd25lckRv Y3VtZW50LG8pLGE9eWUoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksbCYmdmUoYSksbil7Yz0w O3doaWxlKG89YVtjKytdKWhlLnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gZn0h ZnVuY3Rpb24oKXt2YXIgZT1yLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5hcHBlbmRDaGlsZChy LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSx0PXIuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0 dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksdC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2Vk IiksdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksZS5hcHBlbmRDaGlsZCh0KSxoLmNoZWNrQ2xv bmU9ZS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsZS5pbm5l ckhUTUw9Ijx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLGgubm9DbG9uZUNoZWNrZWQ9ISFlLmNsb25l Tm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZX0oKTt2YXIgYmU9ci5kb2N1bWVudEVsZW1l bnQsd2U9L15rZXkvLFRlPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3Ap fGNsaWNrLyxDZT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24gRWUoKXtyZXR1cm4hMH1m dW5jdGlvbiBrZSgpe3JldHVybiExfWZ1bmN0aW9uIFNlKCl7dHJ5e3JldHVybiByLmFjdGl2ZUVs ZW1lbnR9Y2F0Y2goZSl7fX1mdW5jdGlvbiBEZShlLHQsbixyLGksbyl7dmFyIGEscztpZigib2Jq ZWN0Ij09dHlwZW9mIHQpeyJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCk7Zm9y KHMgaW4gdClEZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8o aT1uLHI9bj12b2lkIDApOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQg MCk6KGk9cixyPW4sbj12b2lkIDApKSwhMT09PWkpaT1rZTtlbHNlIGlmKCFpKXJldHVybiBlO3Jl dHVybiAxPT09byYmKGE9aSwoaT1mdW5jdGlvbihlKXtyZXR1cm4gdygpLm9mZihlKSxhLmFwcGx5 KHRoaXMsYXJndW1lbnRzKX0pLmd1aWQ9YS5ndWlkfHwoYS5ndWlkPXcuZ3VpZCsrKSksZS5lYWNo KGZ1bmN0aW9uKCl7dy5ldmVudC5hZGQodGhpcyx0LGkscixuKX0pfXcuZXZlbnQ9e2dsb2JhbDp7 fSxhZGQ6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHk9Si5n ZXQoZSk7aWYoeSl7bi5oYW5kbGVyJiYobj0obz1uKS5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYm dy5maW5kLm1hdGNoZXNTZWxlY3RvcihiZSxpKSxuLmd1aWR8fChuLmd1aWQ9dy5ndWlkKyspLCh1 PXkuZXZlbnRzKXx8KHU9eS5ldmVudHM9e30pLChhPXkuaGFuZGxlKXx8KGE9eS5oYW5kbGU9ZnVu Y3Rpb24odCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3JiZ3LmV2ZW50LnRyaWdnZXJlZCE9 PXQudHlwZT93LmV2ZW50LmRpc3BhdGNoLmFwcGx5KGUsYXJndW1lbnRzKTp2b2lkIDB9KSxsPSh0 PSh0fHwiIikubWF0Y2goTSl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0pZD1nPShzPUNlLmV4ZWMo dFtsXSl8fFtdKVsxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9dy5ldmVu dC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9dy5l dmVudC5zcGVjaWFsW2RdfHx7fSxjPXcuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIs aGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJncuZXhwci5t YXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKCIuIil9LG8pLChwPXVb ZF0pfHwoKHA9dVtkXT1bXSkuZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJiExIT09Zi5zZXR1cC5j YWxsKGUscixoLGEpfHxlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcihkLGEp KSxmLmFkZCYmKGYuYWRkLmNhbGwoZSxjKSxjLmhhbmRsZXIuZ3VpZHx8KGMuaGFuZGxlci5ndWlk PW4uZ3VpZCkpLGk/cC5zcGxpY2UocC5kZWxlZ2F0ZUNvdW50KyssMCxjKTpwLnB1c2goYyksdy5l dmVudC5nbG9iYWxbZF09ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxz LHUsbCxjLGYscCxkLGgsZyx5PUouaGFzRGF0YShlKSYmSi5nZXQoZSk7aWYoeSYmKHU9eS5ldmVu dHMpKXtsPSh0PSh0fHwiIikubWF0Y2goTSl8fFsiIl0pLmxlbmd0aDt3aGlsZShsLS0paWYocz1D ZS5leGVjKHRbbF0pfHxbXSxkPWc9c1sxXSxoPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCks ZCl7Zj13LmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9dVtkPShyP2YuZGVsZWdhdGVUeXBlOmYuYmlu ZFR5cGUpfHxkXXx8W10scz1zWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/ Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGE9bz1wLmxlbmd0aDt3aGlsZShvLS0pYz1wW29dLCFpJiZn IT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxzJiYhcy50ZXN0KGMubmFtZXNwYWNl KXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwocC5zcGxpY2Uo bywxKSxjLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxmLnJlbW92ZSYmZi5yZW1vdmUuY2Fs bChlLGMpKTthJiYhcC5sZW5ndGgmJihmLnRlYXJkb3duJiYhMSE9PWYudGVhcmRvd24uY2FsbChl LGgseS5oYW5kbGUpfHx3LnJlbW92ZUV2ZW50KGUsZCx5LmhhbmRsZSksZGVsZXRlIHVbZF0pfWVs c2UgZm9yKGQgaW4gdSl3LmV2ZW50LnJlbW92ZShlLGQrdFtsXSxuLHIsITApO3cuaXNFbXB0eU9i amVjdCh1KSYmSi5yZW1vdmUoZSwiaGFuZGxlIGV2ZW50cyIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24o ZSl7dmFyIHQ9dy5ldmVudC5maXgoZSksbixyLGksbyxhLHMsdT1uZXcgQXJyYXkoYXJndW1lbnRz Lmxlbmd0aCksbD0oSi5nZXQodGhpcywiZXZlbnRzIil8fHt9KVt0LnR5cGVdfHxbXSxjPXcuZXZl bnQuc3BlY2lhbFt0LnR5cGVdfHx7fTtmb3IodVswXT10LG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7 bisrKXVbbl09YXJndW1lbnRzW25dO2lmKHQuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNw YXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyx0KSl7cz13LmV2ZW50LmhhbmRsZXJz LmNhbGwodGhpcyx0LGwpLG49MDt3aGlsZSgobz1zW24rK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3Rv cHBlZCgpKXt0LmN1cnJlbnRUYXJnZXQ9by5lbGVtLHI9MDt3aGlsZSgoYT1vLmhhbmRsZXJzW3Ir K10pJiYhdC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKXQucm5hbWVzcGFjZSYmIXQu cm5hbWVzcGFjZS50ZXN0KGEubmFtZXNwYWNlKXx8KHQuaGFuZGxlT2JqPWEsdC5kYXRhPWEuZGF0 YSx2b2lkIDAhPT0oaT0oKHcuZXZlbnQuc3BlY2lhbFthLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8 YS5oYW5kbGVyKS5hcHBseShvLmVsZW0sdSkpJiYhMT09PSh0LnJlc3VsdD1pKSYmKHQucHJldmVu dERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZj LnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsdCksdC5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihl LHQpe3ZhciBuLHIsaSxvLGEscz1bXSx1PXQuZGVsZWdhdGVDb3VudCxsPWUudGFyZ2V0O2lmKHUm Jmwubm9kZVR5cGUmJiEoImNsaWNrIj09PWUudHlwZSYmZS5idXR0b24+PTEpKWZvcig7bCE9PXRo aXM7bD1sLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWwubm9kZVR5cGUmJigiY2xpY2siIT09ZS50 eXBlfHwhMCE9PWwuZGlzYWJsZWQpKXtmb3Iobz1bXSxhPXt9LG49MDtuPHU7bisrKXZvaWQgMD09 PWFbaT0ocj10W25dKS5zZWxlY3RvcisiICJdJiYoYVtpXT1yLm5lZWRzQ29udGV4dD93KGksdGhp cykuaW5kZXgobCk+LTE6dy5maW5kKGksdGhpcyxudWxsLFtsXSkubGVuZ3RoKSxhW2ldJiZvLnB1 c2gocik7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1cm4gbD10aGlz LHU8dC5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9KSxzfSxhZGRQ cm9wOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHcuRXZlbnQucHJvdG90eXBl LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpnKHQpP2Z1bmN0aW9uKCl7aWYo dGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9u KCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbZV19LHNl dDpmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxlOiEw LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fSl9LGZpeDpmdW5jdGlvbihl KXtyZXR1cm4gZVt3LmV4cGFuZG9dP2U6bmV3IHcuRXZlbnQoZSl9LHNwZWNpYWw6e2xvYWQ6e25v QnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1TZSgpJiZ0aGlz LmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJs dXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzPT09U2UoKSYmdGhpcy5ibHVyKXJldHVybiB0 aGlzLmJsdXIoKSwhMX0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1 bmN0aW9uKCl7aWYoImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmTih0aGlzLCJp bnB1dCIpKXJldHVybiB0aGlzLmNsaWNrKCksITF9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3JldHVy biBOKGUudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihl KXt2b2lkIDAhPT1lLnJlc3VsdCYmZS5vcmlnaW5hbEV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50LnJl dHVyblZhbHVlPWUucmVzdWx0KX19fX0sdy5yZW1vdmVFdmVudD1mdW5jdGlvbihlLHQsbil7ZS5y ZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuKX0sdy5FdmVudD1m dW5jdGlvbihlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHcuRXZlbnQpKXJldHVybiBuZXcgdy5F dmVudChlLHQpO2UmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlw ZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWUu ZGVmYXVsdFByZXZlbnRlZCYmITE9PT1lLnJldHVyblZhbHVlP0VlOmtlLHRoaXMudGFyZ2V0PWUu dGFyZ2V0JiYzPT09ZS50YXJnZXQubm9kZVR5cGU/ZS50YXJnZXQucGFyZW50Tm9kZTplLnRhcmdl dCx0aGlzLmN1cnJlbnRUYXJnZXQ9ZS5jdXJyZW50VGFyZ2V0LHRoaXMucmVsYXRlZFRhcmdldD1l LnJlbGF0ZWRUYXJnZXQpOnRoaXMudHlwZT1lLHQmJncuZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1l U3RhbXA9ZSYmZS50aW1lU3RhbXB8fERhdGUubm93KCksdGhpc1t3LmV4cGFuZG9dPSEwfSx3LkV2 ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dy5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6a2Us aXNQcm9wYWdhdGlvblN0b3BwZWQ6a2UsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6a2Us aXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdp bmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9RWUsZSYmIXRoaXMuaXNTaW11bGF0ZWQm JmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhp cy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9RWUsZSYmIXRoaXMuaXNT aW11bGF0ZWQmJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpm dW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFn YXRpb25TdG9wcGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BJbW1lZGlhdGVQcm9w YWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSx3LmVhY2goe2FsdEtleTohMCxidWJi bGVzOiEwLGNhbmNlbGFibGU6ITAsY2hhbmdlZFRvdWNoZXM6ITAsY3RybEtleTohMCxkZXRhaWw6 ITAsZXZlbnRQaGFzZTohMCxtZXRhS2V5OiEwLHBhZ2VYOiEwLHBhZ2VZOiEwLHNoaWZ0S2V5OiEw LHZpZXc6ITAsImNoYXIiOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjoh MCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAs cG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRU b3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKGUpe3ZhciB0 PWUuYnV0dG9uO3JldHVybiBudWxsPT1lLndoaWNoJiZ3ZS50ZXN0KGUudHlwZSk/bnVsbCE9ZS5j aGFyQ29kZT9lLmNoYXJDb2RlOmUua2V5Q29kZTohZS53aGljaCYmdm9pZCAwIT09dCYmVGUudGVz dChlLnR5cGUpPzEmdD8xOjImdD8zOjQmdD8yOjA6ZS53aGljaH19LHcuZXZlbnQuYWRkUHJvcCks dy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2lu dGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlv bihlLHQpe3cuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5k bGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVP Ymo7cmV0dXJuIGkmJihpPT09cnx8dy5jb250YWlucyhyLGkpKXx8KGUudHlwZT1vLm9yaWdUeXBl LG49by5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dCksbn19fSksdy5mbi5l eHRlbmQoe29uOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBEZSh0aGlzLGUsdCxuLHIpfSxvbmU6 ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIERlKHRoaXMsZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9u KGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVy biByPWUuaGFuZGxlT2JqLHcoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3Jp Z1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRo aXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTty ZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHwobj10LHQ9dm9p ZCAwKSwhMT09PW4mJihuPWtlKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt3LmV2ZW50LnJlbW92ZSh0 aGlzLGUsbix0KX0pfX0pO3ZhciBOZT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1 dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4v Z2ksQWU9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksamU9L2NoZWNrZWRccyooPzpbXj1dfD1ccyou Y2hlY2tlZC4pL2kscWU9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9n O2Z1bmN0aW9uIExlKGUsdCl7cmV0dXJuIE4oZSwidGFibGUiKSYmTigxMSE9PXQubm9kZVR5cGU/ dDp0LmZpcnN0Q2hpbGQsInRyIik/dyhlKS5jaGlsZHJlbigidGJvZHkiKVswXXx8ZTplfWZ1bmN0 aW9uIEhlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsi LyIrZS50eXBlLGV9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5z bGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUi KSxlfWZ1bmN0aW9uIFBlKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbDtpZigxPT09dC5ub2RlVHlw ZSl7aWYoSi5oYXNEYXRhKGUpJiYobz1KLmFjY2VzcyhlKSxhPUouc2V0KHQsbyksbD1vLmV2ZW50 cykpe2RlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fTtmb3IoaSBpbiBsKWZvcihuPTAscj1sW2ld Lmxlbmd0aDtuPHI7bisrKXcuZXZlbnQuYWRkKHQsaSxsW2ldW25dKX1LLmhhc0RhdGEoZSkmJihz PUsuYWNjZXNzKGUpLHU9dy5leHRlbmQoe30scyksSy5zZXQodCx1KSl9fWZ1bmN0aW9uIE1lKGUs dCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1uJiZwZS50ZXN0KGUu dHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDoiaW5wdXQiIT09biYmInRleHRhcmVhIiE9PW58fCh0 LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZSl9ZnVuY3Rpb24gUmUoZSx0LG4scil7dD1hLmFw cGx5KFtdLHQpO3ZhciBpLG8scyx1LGwsYyxmPTAscD1lLmxlbmd0aCxkPXAtMSx5PXRbMF0sdj1n KHkpO2lmKHZ8fHA+MSYmInN0cmluZyI9PXR5cGVvZiB5JiYhaC5jaGVja0Nsb25lJiZqZS50ZXN0 KHkpKXJldHVybiBlLmVhY2goZnVuY3Rpb24oaSl7dmFyIG89ZS5lcShpKTt2JiYodFswXT15LmNh bGwodGhpcyxpLG8uaHRtbCgpKSksUmUobyx0LG4scil9KTtpZihwJiYoaT14ZSh0LGVbMF0ub3du ZXJEb2N1bWVudCwhMSxlLHIpLG89aS5maXJzdENoaWxkLDE9PT1pLmNoaWxkTm9kZXMubGVuZ3Ro JiYoaT1vKSxvfHxyKSl7Zm9yKHU9KHM9dy5tYXAoeWUoaSwic2NyaXB0IiksSGUpKS5sZW5ndGg7 ZjxwO2YrKylsPWksZiE9PWQmJihsPXcuY2xvbmUobCwhMCwhMCksdSYmdy5tZXJnZShzLHllKGws InNjcmlwdCIpKSksbi5jYWxsKGVbZl0sbCxmKTtpZih1KWZvcihjPXNbcy5sZW5ndGgtMV0ub3du ZXJEb2N1bWVudCx3Lm1hcChzLE9lKSxmPTA7Zjx1O2YrKylsPXNbZl0saGUudGVzdChsLnR5cGV8 fCIiKSYmIUouYWNjZXNzKGwsImdsb2JhbEV2YWwiKSYmdy5jb250YWlucyhjLGwpJiYobC5zcmMm JiJtb2R1bGUiIT09KGwudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/dy5fZXZhbFVybCYmdy5fZXZh bFVybChsLnNyYyk6bShsLnRleHRDb250ZW50LnJlcGxhY2UocWUsIiIpLGMsbCkpfXJldHVybiBl fWZ1bmN0aW9uIEllKGUsdCxuKXtmb3IodmFyIHIsaT10P3cuZmlsdGVyKHQsZSk6ZSxvPTA7bnVs bCE9KHI9aVtvXSk7bysrKW58fDEhPT1yLm5vZGVUeXBlfHx3LmNsZWFuRGF0YSh5ZShyKSksci5w YXJlbnROb2RlJiYobiYmdy5jb250YWlucyhyLm93bmVyRG9jdW1lbnQscikmJnZlKHllKHIsInNj cmlwdCIpKSxyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpO3JldHVybiBlfXcuZXh0ZW5kKHto dG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoTmUsIjwkMT48LyQyPiIp fSxjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNsb25lTm9kZSghMCksdT13 LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZighKGgubm9DbG9uZUNoZWNrZWR8fDEhPT1l Lm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHcuaXNYTUxEb2MoZSkpKWZvcihhPXllKHMpLHI9 MCxpPShvPXllKGUpKS5sZW5ndGg7cjxpO3IrKylNZShvW3JdLGFbcl0pO2lmKHQpaWYobilmb3Io bz1vfHx5ZShlKSxhPWF8fHllKHMpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspUGUob1tyXSxhW3Jd KTtlbHNlIFBlKGUscyk7cmV0dXJuKGE9eWUocywic2NyaXB0IikpLmxlbmd0aD4wJiZ2ZShhLCF1 JiZ5ZShlLCJzY3JpcHQiKSksc30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIs aT13LmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihZKG4pKXtpZih0 PW5bSi5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT93LmV2ZW50 LnJlbW92ZShuLHIpOncucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW0ouZXhwYW5kb109dm9p ZCAwfW5bSy5leHBhbmRvXSYmKG5bSy5leHBhbmRvXT12b2lkIDApfX19KSx3LmZuLmV4dGVuZCh7 ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBJZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24o ZSl7cmV0dXJuIEllKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHoodGhpcyxmdW5j dGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT93LnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2go ZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhp cy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5n dGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24o ZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5 cGV8fExlKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVy biBSZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9 PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9TGUodGhpcyxlKTt0Lmlu c2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBS ZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50 Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBSZSh0 aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9k ZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zv cih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYody5jbGVh bkRhdGEoeWUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5j dGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5j dGlvbigpe3JldHVybiB3LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVy biB6KHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7 aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJp bmciPT10eXBlb2YgZSYmIUFlLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0u dG9Mb3dlckNhc2UoKV0pe2U9dy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09 PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKHQsITEpKSx0LmlubmVy SFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUs YXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJu IFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTt3Lmlu QXJyYXkodGhpcyxlKTwwJiYody5jbGVhbkRhdGEoeWUodGhpcykpLG4mJm4ucmVwbGFjZUNoaWxk KHQsdGhpcykpfSxlKX19KSx3LmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJl cGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFs bDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe3cuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZh ciBuLHI9W10saT13KGUpLG89aS5sZW5ndGgtMSxhPTA7YTw9bzthKyspbj1hPT09bz90aGlzOnRo aXMuY2xvbmUoITApLHcoaVthXSlbdF0obikscy5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlz LnB1c2hTdGFjayhyKX19KTt2YXIgV2U9bmV3IFJlZ0V4cCgiXigiK3JlKyIpKD8hcHgpW2EteiVd KyQiLCJpIiksJGU9ZnVuY3Rpb24odCl7dmFyIG49dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3 O3JldHVybiBuJiZuLm9wZW5lcnx8KG49ZSksbi5nZXRDb21wdXRlZFN0eWxlKHQpfSxCZT1uZXcg UmVnRXhwKG9lLmpvaW4oInwiKSwiaSIpOyFmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtpZihjKXts LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBw eDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGMuc3R5bGUuY3NzVGV4dD0icG9z aXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZs b3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3Rv cDoxJSIsYmUuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoYyk7dmFyIHQ9ZS5nZXRDb21wdXRl ZFN0eWxlKGMpO2k9IjElIiE9PXQudG9wLHU9MTI9PT1uKHQubWFyZ2luTGVmdCksYy5zdHlsZS5y aWdodD0iNjAlIixzPTM2PT09bih0LnJpZ2h0KSxvPTM2PT09bih0LndpZHRoKSxjLnN0eWxlLnBv c2l0aW9uPSJhYnNvbHV0ZSIsYT0zNj09PWMub2Zmc2V0V2lkdGh8fCJhYnNvbHV0ZSIsYmUucmVt b3ZlQ2hpbGQobCksYz1udWxsfX1mdW5jdGlvbiBuKGUpe3JldHVybiBNYXRoLnJvdW5kKHBhcnNl RmxvYXQoZSkpfXZhciBpLG8sYSxzLHUsbD1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGM9ci5jcmVh dGVFbGVtZW50KCJkaXYiKTtjLnN0eWxlJiYoYy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVu dC1ib3giLGMuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixoLmNsZWFyQ2xv bmVTdHlsZT0iY29udGVudC1ib3giPT09Yy5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx3LmV4dGVuZCho LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiB0KCksb30scGl4ZWxCb3hTdHls ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLHN9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1 cm4gdCgpLGl9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiB0KCksdX0sc2Ny b2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0KCksYX19KSl9KCk7ZnVuY3Rpb24gRmUoZSx0 LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHwkZShlKSkmJigiIiE9PShhPW4u Z2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSl8fHcuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUp fHwoYT13LnN0eWxlKGUsdCkpLCFoLnBpeGVsQm94U3R5bGVzKCkmJldlLnRlc3QoYSkmJkJlLnRl c3QodCkmJihyPXMud2lkdGgsaT1zLm1pbldpZHRoLG89cy5tYXhXaWR0aCxzLm1pbldpZHRoPXMu bWF4V2lkdGg9cy53aWR0aD1hLGE9bi53aWR0aCxzLndpZHRoPXIscy5taW5XaWR0aD1pLHMubWF4 V2lkdGg9bykpLHZvaWQgMCE9PWE/YSsiIjphfWZ1bmN0aW9uIF9lKGUsdCl7cmV0dXJue2dldDpm dW5jdGlvbigpe2lmKCFlKCkpcmV0dXJuKHRoaXMuZ2V0PXQpLmFwcGx5KHRoaXMsYXJndW1lbnRz KTtkZWxldGUgdGhpcy5nZXR9fX12YXIgemU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFhl PS9eLS0vLFVlPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxh eToiYmxvY2sifSxWZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn0sR2U9WyJX ZWJraXQiLCJNb3oiLCJtcyJdLFllPXIuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGU7ZnVuY3Rp b24gUWUoZSl7aWYoZSBpbiBZZSlyZXR1cm4gZTt2YXIgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5z bGljZSgxKSxuPUdlLmxlbmd0aDt3aGlsZShuLS0paWYoKGU9R2Vbbl0rdClpbiBZZSlyZXR1cm4g ZX1mdW5jdGlvbiBKZShlKXt2YXIgdD13LmNzc1Byb3BzW2VdO3JldHVybiB0fHwodD13LmNzc1By b3BzW2VdPVFlKGUpfHxlKSx0fWZ1bmN0aW9uIEtlKGUsdCxuKXt2YXIgcj1pZS5leGVjKHQpO3Jl dHVybiByP01hdGgubWF4KDAsclsyXS0obnx8MCkpKyhyWzNdfHwicHgiKTp0fWZ1bmN0aW9uIFpl KGUsdCxuLHIsaSxvKXt2YXIgYT0id2lkdGgiPT09dD8xOjAscz0wLHU9MDtpZihuPT09KHI/ImJv cmRlciI6ImNvbnRlbnQiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKSJtYXJnaW4iPT09biYmKHUr PXcuY3NzKGUsbitvZVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHUtPXcuY3NzKGUsInBh ZGRpbmciK29lW2FdLCEwLGkpKSwibWFyZ2luIiE9PW4mJih1LT13LmNzcyhlLCJib3JkZXIiK29l W2FdKyJXaWR0aCIsITAsaSkpKToodSs9dy5jc3MoZSwicGFkZGluZyIrb2VbYV0sITAsaSksInBh ZGRpbmciIT09bj91Kz13LmNzcyhlLCJib3JkZXIiK29lW2FdKyJXaWR0aCIsITAsaSk6cys9dy5j c3MoZSwiYm9yZGVyIitvZVthXSsiV2lkdGgiLCEwLGkpKTtyZXR1cm4hciYmbz49MCYmKHUrPU1h dGgubWF4KDAsTWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2Uo MSldLW8tdS1zLS41KSkpLHV9ZnVuY3Rpb24gZXQoZSx0LG4pe3ZhciByPSRlKGUpLGk9RmUoZSx0 LHIpLG89ImJvcmRlci1ib3giPT09dy5jc3MoZSwiYm94U2l6aW5nIiwhMSxyKSxhPW87aWYoV2Uu dGVzdChpKSl7aWYoIW4pcmV0dXJuIGk7aT0iYXV0byJ9cmV0dXJuIGE9YSYmKGguYm94U2l6aW5n UmVsaWFibGUoKXx8aT09PWUuc3R5bGVbdF0pLCgiYXV0byI9PT1pfHwhcGFyc2VGbG9hdChpKSYm ImlubGluZSI9PT13LmNzcyhlLCJkaXNwbGF5IiwhMSxyKSkmJihpPWVbIm9mZnNldCIrdFswXS50 b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLGE9ITApLChpPXBhcnNlRmxvYXQoaSl8fDApK1plKGUs dCxufHwobz8iYm9yZGVyIjoiY29udGVudCIpLGEscixpKSsicHgifXcuZXh0ZW5kKHtjc3NIb29r czp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49RmUoZSwib3BhY2l0eSIp O3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3Vu dDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5r OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhh bnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7fSxzdHlsZTpmdW5j dGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5 bGUpe3ZhciBpLG8sYSxzPUcodCksdT1YZS50ZXN0KHQpLGw9ZS5zdHlsZTtpZih1fHwodD1KZShz KSksYT13LmNzc0hvb2tzW3RdfHx3LmNzc0hvb2tzW3NdLHZvaWQgMD09PW4pcmV0dXJuIGEmJiJn ZXQiaW4gYSYmdm9pZCAwIT09KGk9YS5nZXQoZSwhMSxyKSk/aTpsW3RdOyJzdHJpbmciPT0obz10 eXBlb2YgbikmJihpPWllLmV4ZWMobikpJiZpWzFdJiYobj11ZShlLHQsaSksbz0ibnVtYmVyIiks bnVsbCE9biYmbj09PW4mJigibnVtYmVyIj09PW8mJihuKz1pJiZpWzNdfHwody5jc3NOdW1iZXJb c10/IiI6InB4IikpLGguY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJh Y2tncm91bmQiKXx8KGxbdF09ImluaGVyaXQiKSxhJiYic2V0ImluIGEmJnZvaWQgMD09PShuPWEu c2V0KGUsbixyKSl8fCh1P2wuc2V0UHJvcGVydHkodCxuKTpsW3RdPW4pKX19LGNzczpmdW5jdGlv bihlLHQsbixyKXt2YXIgaSxvLGEscz1HKHQpO3JldHVybiBYZS50ZXN0KHQpfHwodD1KZShzKSks KGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSkmJiJnZXQiaW4gYSYmKGk9YS5nZXQoZSwh MCxuKSksdm9pZCAwPT09aSYmKGk9RmUoZSx0LHIpKSwibm9ybWFsIj09PWkmJnQgaW4gVmUmJihp PVZlW3RdKSwiIj09PW58fG4/KG89cGFyc2VGbG9hdChpKSwhMD09PW58fGlzRmluaXRlKG8pP298 fDA6aSk6aX19KSx3LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdCl7dy5jc3NI b29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbixyKXtpZihuKXJldHVybiF6ZS50ZXN0KHcuY3NzKGUs ImRpc3BsYXkiKSl8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmUuZ2V0Qm91bmRpbmdDbGll bnRSZWN0KCkud2lkdGg/ZXQoZSx0LHIpOnNlKGUsVWUsZnVuY3Rpb24oKXtyZXR1cm4gZXQoZSx0 LHIpfSl9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGksbz0kZShlKSxhPSJib3JkZXItYm94Ij09 PXcuY3NzKGUsImJveFNpemluZyIsITEsbykscz1yJiZaZShlLHQscixhLG8pO3JldHVybiBhJiZo LnNjcm9sbGJveFNpemUoKT09PW8ucG9zaXRpb24mJihzLT1NYXRoLmNlaWwoZVsib2Zmc2V0Iit0 WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tcGFyc2VGbG9hdChvW3RdKS1aZShlLHQsImJv cmRlciIsITEsbyktLjUpKSxzJiYoaT1pZS5leGVjKG4pKSYmInB4IiE9PShpWzNdfHwicHgiKSYm KGUuc3R5bGVbdF09bixuPXcuY3NzKGUsdCkpLEtlKGUsbixzKX19fSksdy5jc3NIb29rcy5tYXJn aW5MZWZ0PV9lKGgucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4o cGFyc2VGbG9hdChGZShlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp LmxlZnQtc2UoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5n Q2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLHcuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIs Ym9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7dy5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVu Y3Rpb24obil7Zm9yKHZhciByPTAsaT17fSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uLnNwbGl0KCIg Iik6W25dO3I8NDtyKyspaVtlK29lW3JdK3RdPW9bcl18fG9bci0yXXx8b1swXTtyZXR1cm4gaX19 LCJtYXJnaW4iIT09ZSYmKHcuY3NzSG9va3NbZSt0XS5zZXQ9S2UpfSksdy5mbi5leHRlbmQoe2Nz czpmdW5jdGlvbihlLHQpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17 fSxhPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHI9JGUoZSksaT10Lmxlbmd0aDthPGk7YSsr KW9bdFthXV09dy5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP3cu c3R5bGUoZSx0LG4pOncuY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfX0pO2Z1bmN0 aW9uIHR0KGUsdCxuLHIsaSl7cmV0dXJuIG5ldyB0dC5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkp fXcuVHdlZW49dHQsdHQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0dCxpbml0OmZ1bmN0aW9uKGUs dCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHx3LmVhc2lu Zy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCks dGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHcuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVu Y3Rpb24oKXt2YXIgZT10dC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5n ZXQodGhpcyk6dHQucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUp e3ZhciB0LG49dHQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJh dGlvbj90aGlzLnBvcz10PXcuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJh dGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0o dGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlz Lm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNl dCh0aGlzKTp0dC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSx0dC5wcm90b3R5 cGUuaW5pdC5wcm90b3R5cGU9dHQucHJvdG90eXBlLHR0LnByb3BIb29rcz17X2RlZmF1bHQ6e2dl dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gMSE9PWUuZWxlbS5ub2RlVHlwZXx8bnVsbCE9ZS5l bGVtW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtlLnByb3BdP2UuZWxlbVtlLnByb3BdOih0 PXcuY3NzKGUuZWxlbSxlLnByb3AsIiIpKSYmImF1dG8iIT09dD90OjB9LHNldDpmdW5jdGlvbihl KXt3LmZ4LnN0ZXBbZS5wcm9wXT93LmZ4LnN0ZXBbZS5wcm9wXShlKToxIT09ZS5lbGVtLm5vZGVU eXBlfHxudWxsPT1lLmVsZW0uc3R5bGVbdy5jc3NQcm9wc1tlLnByb3BdXSYmIXcuY3NzSG9va3Nb ZS5wcm9wXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzp3LnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3cr ZS51bml0KX19fSx0dC5wcm9wSG9va3Muc2Nyb2xsVG9wPXR0LnByb3BIb29rcy5zY3JvbGxMZWZ0 PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUu ZWxlbVtlLnByb3BdPWUubm93KX19LHcuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJu IGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2Rl ZmF1bHQ6InN3aW5nIn0sdy5meD10dC5wcm90b3R5cGUuaW5pdCx3LmZ4LnN0ZXA9e307dmFyIG50 LHJ0LGl0PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxvdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9u IGF0KCl7cnQmJighMT09PXIuaGlkZGVuJiZlLnJlcXVlc3RBbmltYXRpb25GcmFtZT9lLnJlcXVl c3RBbmltYXRpb25GcmFtZShhdCk6ZS5zZXRUaW1lb3V0KGF0LHcuZnguaW50ZXJ2YWwpLHcuZngu dGljaygpKX1mdW5jdGlvbiBzdCgpe3JldHVybiBlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtudD12 b2lkIDB9KSxudD1EYXRlLm5vdygpfWZ1bmN0aW9uIHV0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdo dDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49b2Vbcl0pXT1pWyJwYWRk aW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBsdChl LHQsbil7Zm9yKHZhciByLGk9KHB0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KHB0LnR3ZWVuZXJz WyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVy biByfWZ1bmN0aW9uIGN0KGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8 fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx5 PUouZ2V0KGUsImZ4c2hvdyIpO24ucXVldWV8fChudWxsPT0oYT13Ll9xdWV1ZUhvb2tzKGUsImZ4 IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1m dW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlv bigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLHcucXVldWUoZSwiZngiKS5sZW5n dGh8fGEuZW1wdHkuZmlyZSgpfSl9KSk7Zm9yKHIgaW4gdClpZihpPXRbcl0saXQudGVzdChpKSl7 aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtp Zigic2hvdyIhPT1pfHwheXx8dm9pZCAwPT09eVtyXSljb250aW51ZTtnPSEwfWRbcl09eSYmeVty XXx8dy5zdHlsZShlLHIpfWlmKCh1PSF3LmlzRW1wdHlPYmplY3QodCkpfHwhdy5pc0VtcHR5T2Jq ZWN0KGQpKXtmJiYxPT09ZS5ub2RlVHlwZSYmKG4ub3ZlcmZsb3c9W2gub3ZlcmZsb3csaC5vdmVy Zmxvd1gsaC5vdmVyZmxvd1ldLG51bGw9PShsPXkmJnkuZGlzcGxheSkmJihsPUouZ2V0KGUsImRp c3BsYXkiKSksIm5vbmUiPT09KGM9dy5jc3MoZSwiZGlzcGxheSIpKSYmKGw/Yz1sOihmZShbZV0s ITApLGw9ZS5zdHlsZS5kaXNwbGF5fHxsLGM9dy5jc3MoZSwiZGlzcGxheSIpLGZlKFtlXSkpKSwo ImlubGluZSI9PT1jfHwiaW5saW5lLWJsb2NrIj09PWMmJm51bGwhPWwpJiYibm9uZSI9PT13LmNz cyhlLCJmbG9hdCIpJiYodXx8KHAuZG9uZShmdW5jdGlvbigpe2guZGlzcGxheT1sfSksbnVsbD09 bCYmKGM9aC5kaXNwbGF5LGw9Im5vbmUiPT09Yz8iIjpjKSksaC5kaXNwbGF5PSJpbmxpbmUtYmxv Y2siKSksbi5vdmVyZmxvdyYmKGgub3ZlcmZsb3c9ImhpZGRlbiIscC5hbHdheXMoZnVuY3Rpb24o KXtoLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0saC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxoLm92 ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpLHU9ITE7Zm9yKHIgaW4gZCl1fHwoeT8iaGlkZGVuImlu IHkmJihnPXkuaGlkZGVuKTp5PUouYWNjZXNzKGUsImZ4c2hvdyIse2Rpc3BsYXk6bH0pLG8mJih5 LmhpZGRlbj0hZyksZyYmZmUoW2VdLCEwKSxwLmRvbmUoZnVuY3Rpb24oKXtnfHxmZShbZV0pLEou cmVtb3ZlKGUsImZ4c2hvdyIpO2ZvcihyIGluIGQpdy5zdHlsZShlLHIsZFtyXSl9KSksdT1sdChn P3lbcl06MCxyLHApLHIgaW4geXx8KHlbcl09dS5zdGFydCxnJiYodS5lbmQ9dS5zdGFydCx1LnN0 YXJ0PTApKX19ZnVuY3Rpb24gZnQoZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYocj1H KG4pLGk9dFtyXSxvPWVbbl0sQXJyYXkuaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSks biE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLChhPXcuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImlu IGEpe289YS5leHBhbmQobyksZGVsZXRlIGVbcl07Zm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9b bl0sdFtuXT1pKX1lbHNlIHRbcl09aX1mdW5jdGlvbiBwdChlLHQsbil7dmFyIHIsaSxvPTAsYT1w dC5wcmVmaWx0ZXJzLmxlbmd0aCxzPXcuRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxl dGUgdS5lbGVtfSksdT1mdW5jdGlvbigpe2lmKGkpcmV0dXJuITE7Zm9yKHZhciB0PW50fHxzdCgp LG49TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLXQpLHI9MS0obi9sLmR1cmF0aW9u fHwwKSxvPTAsYT1sLnR3ZWVucy5sZW5ndGg7bzxhO28rKylsLnR3ZWVuc1tvXS5ydW4ocik7cmV0 dXJuIHMubm90aWZ5V2l0aChlLFtsLHIsbl0pLHI8MSYmYT9uOihhfHxzLm5vdGlmeVdpdGgoZSxb bCwxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2xdKSwhMSl9LGw9cy5wcm9taXNlKHtlbGVtOmUscHJv cHM6dy5leHRlbmQoe30sdCksb3B0czp3LmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fSxlYXNp bmc6dy5lYXNpbmcuX2RlZmF1bHR9LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0 aW9uczpuLHN0YXJ0VGltZTpudHx8c3QoKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxj cmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXcuVHdlZW4oZSxsLm9wdHMsdCxuLGwub3B0 cy5zcGVjaWFsRWFzaW5nW3RdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChy KSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowO2lmKGkp cmV0dXJuIHRoaXM7Zm9yKGk9ITA7bjxyO24rKylsLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/ KHMubm90aWZ5V2l0aChlLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgoZSxbbCx0XSkpOnMucmVqZWN0 V2l0aChlLFtsLHRdKSx0aGlzfX0pLGM9bC5wcm9wcztmb3IoZnQoYyxsLm9wdHMuc3BlY2lhbEVh c2luZyk7bzxhO28rKylpZihyPXB0LnByZWZpbHRlcnNbb10uY2FsbChsLGUsYyxsLm9wdHMpKXJl dHVybiBnKHIuc3RvcCkmJih3Ll9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9 ci5zdG9wLmJpbmQocikpLHI7cmV0dXJuIHcubWFwKGMsbHQsbCksZyhsLm9wdHMuc3RhcnQpJiZs Lm9wdHMuc3RhcnQuY2FsbChlLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwu b3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0 cy5hbHdheXMpLHcuZngudGltZXIody5leHRlbmQodSx7ZWxlbTplLGFuaW06bCxxdWV1ZTpsLm9w dHMucXVldWV9KSksbH13LkFuaW1hdGlvbj13LmV4dGVuZChwdCx7dHdlZW5lcnM6eyIqIjpbZnVu Y3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHVlKG4uZWxlbSxl LGllLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7ZyhlKT8odD1lLGU9WyIq Il0pOmU9ZS5tYXRjaChNKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0s cHQudHdlZW5lcnNbbl09cHQudHdlZW5lcnNbbl18fFtdLHB0LnR3ZWVuZXJzW25dLnVuc2hpZnQo dCl9LHByZWZpbHRlcnM6W2N0XSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P3B0LnByZWZpbHRl cnMudW5zaGlmdChlKTpwdC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksdy5zcGVlZD1mdW5jdGlvbihl LHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP3cuZXh0ZW5kKHt9LGUpOntjb21wbGV0 ZTpufHwhbiYmdHx8ZyhlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhZyh0KSYmdH07 cmV0dXJuIHcuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRpb24m JihyLmR1cmF0aW9uIGluIHcuZnguc3BlZWRzP3IuZHVyYXRpb249dy5meC5zcGVlZHNbci5kdXJh dGlvbl06ci5kdXJhdGlvbj13LmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAh PT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVu Y3Rpb24oKXtnKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ3LmRlcXVldWUodGhp cyxyLnF1ZXVlKX0scn0sdy5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1 cm4gdGhpcy5maWx0ZXIoYWUpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUo e29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXcuaXNF bXB0eU9iamVjdChlKSxvPXcuc3BlZWQodCxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgdD1wdCh0aGlz LHcuZXh0ZW5kKHt9LGUpLG8pOyhpfHxKLmdldCh0aGlzLCJmaW5pc2giKSkmJnQuc3RvcCghMCl9 O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1 ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIg dD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJihu PXQsdD1lLGU9dm9pZCAwKSx0JiYhMSE9PWUmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhpcy5l YWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsaT1udWxsIT1lJiZlKyJxdWV1ZUhvb2tzIixvPXcudGlt ZXJzLGE9Si5nZXQodGhpcyk7aWYoaSlhW2ldJiZhW2ldLnN0b3AmJnIoYVtpXSk7ZWxzZSBmb3Io aSBpbiBhKWFbaV0mJmFbaV0uc3RvcCYmb3QudGVzdChpKSYmcihhW2ldKTtmb3IoaT1vLmxlbmd0 aDtpLS07KW9baV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJm9baV0ucXVldWUhPT1lfHwob1tpXS5h bmltLnN0b3AobiksdD0hMSxvLnNwbGljZShpLDEpKTshdCYmbnx8dy5kZXF1ZXVlKHRoaXMsZSl9 KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiExIT09ZSYmKGU9ZXx8ImZ4IiksdGhpcy5lYWNo KGZ1bmN0aW9uKCl7dmFyIHQsbj1KLmdldCh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5bZSsicXVl dWVIb29rcyJdLG89dy50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHcucXVl dWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7 dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEw KSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO3Q8YTt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0u ZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSksdy5lYWNoKFsidG9nZ2xlIiwi c2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXcuZm5bdF07dy5mblt0XT1mdW5jdGlv bihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlz LGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKHV0KHQsITApLGUscixpKX19KSx3LmVhY2goe3NsaWRl RG93bjp1dCgic2hvdyIpLHNsaWRlVXA6dXQoImhpZGUiKSxzbGlkZVRvZ2dsZTp1dCgidG9nZ2xl IiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVU b2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3cuZm5bZV09ZnVuY3Rpb24o ZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSksdy50aW1lcnM9W10sdy5meC50 aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49dy50aW1lcnM7Zm9yKG50PURhdGUubm93KCk7dDxu Lmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0 aHx8dy5meC5zdG9wKCksbnQ9dm9pZCAwfSx3LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe3cudGltZXJz LnB1c2goZSksdy5meC5zdGFydCgpfSx3LmZ4LmludGVydmFsPTEzLHcuZnguc3RhcnQ9ZnVuY3Rp b24oKXtydHx8KHJ0PSEwLGF0KCkpfSx3LmZ4LnN0b3A9ZnVuY3Rpb24oKXtydD1udWxsfSx3LmZ4 LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSx3LmZuLmRlbGF5PWZ1bmN0 aW9uKHQsbil7cmV0dXJuIHQ9dy5meD93LmZ4LnNwZWVkc1t0XXx8dDp0LG49bnx8ImZ4Iix0aGlz LnF1ZXVlKG4sZnVuY3Rpb24obixyKXt2YXIgaT1lLnNldFRpbWVvdXQobix0KTtyLnN0b3A9ZnVu Y3Rpb24oKXtlLmNsZWFyVGltZW91dChpKX19KX0sZnVuY3Rpb24oKXt2YXIgZT1yLmNyZWF0ZUVs ZW1lbnQoImlucHV0IiksdD1yLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKHIu Y3JlYXRlRWxlbWVudCgib3B0aW9uIikpO2UudHlwZT0iY2hlY2tib3giLGguY2hlY2tPbj0iIiE9 PWUudmFsdWUsaC5vcHRTZWxlY3RlZD10LnNlbGVjdGVkLChlPXIuY3JlYXRlRWxlbWVudCgiaW5w dXQiKSkudmFsdWU9InQiLGUudHlwZT0icmFkaW8iLGgucmFkaW9WYWx1ZT0idCI9PT1lLnZhbHVl fSgpO3ZhciBkdCxodD13LmV4cHIuYXR0ckhhbmRsZTt3LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlv bihlLHQpe3JldHVybiB6KHRoaXMsdy5hdHRyLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1v dmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3LnJlbW92ZUF0 dHIodGhpcyxlKX0pfX0pLHcuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89 ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBl b2YgZS5nZXRBdHRyaWJ1dGU/dy5wcm9wKGUsdCxuKTooMT09PW8mJncuaXNYTUxEb2MoZSl8fChp PXcuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fCh3LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQp P2R0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCB3LnJlbW92ZUF0dHIoZSx0KTpp JiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUo dCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShy PXcuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rp b24oZSx0KXtpZighaC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmTihlLCJpbnB1dCIpKXt2YXIg bj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biks dH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goTSk7 aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9 fSksZHQ9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P3cucmVtb3ZlQXR0cihlLG4p OmUuc2V0QXR0cmlidXRlKG4sbiksbn19LHcuZWFjaCh3LmV4cHIubWF0Y2guYm9vbC5zb3VyY2Uu bWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBuPWh0W3RdfHx3LmZpbmQuYXR0cjtodFt0 XT1mdW5jdGlvbihlLHQscil7dmFyIGksbyxhPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gcnx8KG89 aHRbYV0saHRbYV09aSxpPW51bGwhPW4oZSx0LHIpP2E6bnVsbCxodFthXT1vKSxpfX0pO3ZhciBn dD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLHl0PS9eKD86YXxhcmVhKSQv aTt3LmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB6KHRoaXMsdy5wcm9wLGUs dCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlz LmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t3LnByb3BGaXhbZV18fGVdfSl9fSksdy5leHRl bmQoe3Byb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz1lLm5vZGVUeXBlO2lmKDMhPT1vJiY4 IT09byYmMiE9PW8pcmV0dXJuIDE9PT1vJiZ3LmlzWE1MRG9jKGUpfHwodD13LnByb3BGaXhbdF18 fHQsaT13LnByb3BIb29rc1t0XSksdm9pZCAwIT09bj9pJiYic2V0ImluIGkmJnZvaWQgMCE9PShy PWkuc2V0KGUsbix0KSk/cjplW3RdPW46aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0 KSk/cjplW3RdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5m aW5kLmF0dHIoZSwidGFiaW5kZXgiKTtyZXR1cm4gdD9wYXJzZUludCh0LDEwKTpndC50ZXN0KGUu bm9kZU5hbWUpfHx5dC50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDotMX19fSxwcm9wRml4Onsi Zm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSxoLm9wdFNlbGVjdGVkfHwody5w cm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0 dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0 OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTt0JiYodC5zZWxlY3RlZEluZGV4LHQucGFy ZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLHcuZWFjaChbInRhYkluZGV4 IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93 U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJd LGZ1bmN0aW9uKCl7dy5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pO2Z1bmN0aW9u IHZ0KGUpe3JldHVybihlLm1hdGNoKE0pfHxbXSkuam9pbigiICIpfWZ1bmN0aW9uIG10KGUpe3Jl dHVybiBlLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIifWZ1bmN0aW9u IHh0KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6InN0cmluZyI9PXR5cGVvZiBlP2UubWF0 Y2goTSl8fFtdOltdfXcuZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIs aSxvLGEscyx1PTA7aWYoZyhlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcyku YWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCxtdCh0aGlzKSkpfSk7aWYoKHQ9eHQoZSkpLmxlbmd0aCl3 aGlsZShuPXRoaXNbdSsrXSlpZihpPW10KG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIit2dChpKSsi ICIpe2E9MDt3aGlsZShvPXRbYSsrXSlyLmluZGV4T2YoIiAiK28rIiAiKTwwJiYocis9bysiICIp O2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHJl bW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLHU9MDtpZihnKGUpKXJldHVy biB0aGlzLmVhY2goZnVuY3Rpb24odCl7dyh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0 LG10KHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFz cyIsIiIpO2lmKCh0PXh0KGUpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1tdChuKSxy PTE9PT1uLm5vZGVUeXBlJiYiICIrdnQoaSkrIiAiKXthPTA7d2hpbGUobz10W2ErK10pd2hpbGUo ci5pbmRleE9mKCIgIitvKyIgIik+LTEpcj1yLnJlcGxhY2UoIiAiK28rIiAiLCIgIik7aSE9PShz PXZ0KHIpKSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixzKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xh c3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPSJzdHJpbmciPT09bnx8QXJyYXkuaXNB cnJheShlKTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiZyP3Q/dGhpcy5hZGRDbGFzcyhlKTp0 aGlzLnJlbW92ZUNsYXNzKGUpOmcoZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3codGhpcykudG9n Z2xlQ2xhc3MoZS5jYWxsKHRoaXMsbixtdCh0aGlzKSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlv bigpe3ZhciB0LGksbyxhO2lmKHIpe2k9MCxvPXcodGhpcyksYT14dChlKTt3aGlsZSh0PWFbaSsr XSlvLmhhc0NsYXNzKHQpP28ucmVtb3ZlQ2xhc3ModCk6by5hZGRDbGFzcyh0KX1lbHNlIHZvaWQg MCE9PWUmJiJib29sZWFuIiE9PW58fCgodD1tdCh0aGlzKSkmJkouc2V0KHRoaXMsIl9fY2xhc3NO YW1lX18iLHQpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHR8 fCExPT09ZT8iIjpKLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6 ZnVuY3Rpb24oZSl7dmFyIHQsbixyPTA7dD0iICIrZSsiICI7d2hpbGUobj10aGlzW3IrK10paWYo MT09PW4ubm9kZVR5cGUmJigiICIrdnQobXQobikpKyIgIikuaW5kZXhPZih0KT4tMSlyZXR1cm4h MDtyZXR1cm4hMX19KTt2YXIgYnQ9L1xyL2c7dy5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihlKXt2 YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPWcoZSksdGhp cy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBpOzE9PT10aGlzLm5vZGVUeXBlJiYobnVsbD09KGk9cj9l LmNhbGwodGhpcyxuLHcodGhpcykudmFsKCkpOmUpP2k9IiI6Im51bWJlciI9PXR5cGVvZiBpP2kr PSIiOkFycmF5LmlzQXJyYXkoaSkmJihpPXcubWFwKGksZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9 PWU/IiI6ZSsiIn0pKSwodD13LnZhbEhvb2tzW3RoaXMudHlwZV18fHcudmFsSG9va3NbdGhpcy5u b2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJzZXQiaW4gdCYmdm9pZCAwIT09dC5zZXQodGhpcyxp LCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1pKSl9KTtpZihpKXJldHVybih0PXcudmFsSG9va3NbaS50 eXBlXXx8dy52YWxIb29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiB0JiZ2 b2lkIDAhPT0obj10LmdldChpLCJ2YWx1ZSIpKT9uOiJzdHJpbmciPT10eXBlb2Yobj1pLnZhbHVl KT9uLnJlcGxhY2UoYnQsIiIpOm51bGw9PW4/IiI6bn19fSksdy5leHRlbmQoe3ZhbEhvb2tzOntv cHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD13LmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVy biBudWxsIT10P3Q6dnQody50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0 LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlw ZSxzPWE/bnVsbDpbXSx1PWE/bysxOmkubGVuZ3RoO2ZvcihyPW88MD91OmE/bzowO3I8dTtyKysp aWYoKChuPWlbcl0pLnNlbGVjdGVkfHxyPT09bykmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9k ZS5kaXNhYmxlZHx8IU4obi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD13KG4pLnZhbCgp LGEpcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixy LGk9ZS5vcHRpb25zLG89dy5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDt3aGlsZShhLS0pKChyPWlb YV0pLnNlbGVjdGVkPXcuaW5BcnJheSh3LnZhbEhvb2tzLm9wdGlvbi5nZXQociksbyk+LTEpJiYo bj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSx3LmVhY2goWyJyYWRp byIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt3LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24o ZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9dy5pbkFycmF5KHcoZSku dmFsKCksdCk+LTF9fSxoLmNoZWNrT258fCh3LnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihl KXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSks aC5mb2N1c2luPSJvbmZvY3VzaW4iaW4gZTt2YXIgd3Q9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNv dXRibHVyKSQvLFR0PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9O3cuZXh0ZW5kKHcu ZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24odCxuLGksbyl7dmFyIGEscyx1LGwsYyxwLGQsaCx2PVtp fHxyXSxtPWYuY2FsbCh0LCJ0eXBlIik/dC50eXBlOnQseD1mLmNhbGwodCwibmFtZXNwYWNlIik/ dC5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihzPWg9dT1pPWl8fHIsMyE9PWkubm9kZVR5cGUm JjghPT1pLm5vZGVUeXBlJiYhd3QudGVzdChtK3cuZXZlbnQudHJpZ2dlcmVkKSYmKG0uaW5kZXhP ZigiLiIpPi0xJiYobT0oeD1tLnNwbGl0KCIuIikpLnNoaWZ0KCkseC5zb3J0KCkpLGM9bS5pbmRl eE9mKCI6Iik8MCYmIm9uIittLHQ9dFt3LmV4cGFuZG9dP3Q6bmV3IHcuRXZlbnQobSwib2JqZWN0 Ij09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPW8/MjozLHQubmFtZXNwYWNlPXguam9pbigiLiIp LHQucm5hbWVzcGFjZT10Lm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIit4LmpvaW4oIlxc Lig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dm9pZCAwLHQudGFyZ2V0fHwo dC50YXJnZXQ9aSksbj1udWxsPT1uP1t0XTp3Lm1ha2VBcnJheShuLFt0XSksZD13LmV2ZW50LnNw ZWNpYWxbbV18fHt9LG98fCFkLnRyaWdnZXJ8fCExIT09ZC50cmlnZ2VyLmFwcGx5KGksbikpKXtp ZighbyYmIWQubm9CdWJibGUmJiF5KGkpKXtmb3IobD1kLmRlbGVnYXRlVHlwZXx8bSx3dC50ZXN0 KGwrbSl8fChzPXMucGFyZW50Tm9kZSk7cztzPXMucGFyZW50Tm9kZSl2LnB1c2gocyksdT1zO3U9 PT0oaS5vd25lckRvY3VtZW50fHxyKSYmdi5wdXNoKHUuZGVmYXVsdFZpZXd8fHUucGFyZW50V2lu ZG93fHxlKX1hPTA7d2hpbGUoKHM9dlthKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlo PXMsdC50eXBlPWE+MT9sOmQuYmluZFR5cGV8fG0sKHA9KEouZ2V0KHMsImV2ZW50cyIpfHx7fSlb dC50eXBlXSYmSi5nZXQocywiaGFuZGxlIikpJiZwLmFwcGx5KHMsbiksKHA9YyYmc1tjXSkmJnAu YXBwbHkmJlkocykmJih0LnJlc3VsdD1wLmFwcGx5KHMsbiksITE9PT10LnJlc3VsdCYmdC5wcmV2 ZW50RGVmYXVsdCgpKTtyZXR1cm4gdC50eXBlPW0sb3x8dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8 ZC5fZGVmYXVsdCYmITEhPT1kLl9kZWZhdWx0LmFwcGx5KHYucG9wKCksbil8fCFZKGkpfHxjJiZn KGlbbV0pJiYheShpKSYmKCh1PWlbY10pJiYoaVtjXT1udWxsKSx3LmV2ZW50LnRyaWdnZXJlZD1t LHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmaC5hZGRFdmVudExpc3RlbmVyKG0sVHQpLGlbbV0o KSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmgucmVtb3ZlRXZlbnRMaXN0ZW5lcihtLFR0KSx3 LmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsdSYmKGlbY109dSkpLHQucmVzdWx0fX0sc2ltdWxhdGU6 ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXcuZXh0ZW5kKG5ldyB3LkV2ZW50LG4se3R5cGU6ZSxpc1Np bXVsYXRlZDohMH0pO3cuZXZlbnQudHJpZ2dlcihyLG51bGwsdCl9fSksdy5mbi5leHRlbmQoe3Ry aWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5ldmVudC50 cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRo aXNbMF07aWYobilyZXR1cm4gdy5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKX19KSxoLmZvY3VzaW58 fHcuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXt2 YXIgbj1mdW5jdGlvbihlKXt3LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsdy5ldmVudC5maXgo ZSkpfTt3LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5vd25l ckRvY3VtZW50fHx0aGlzLGk9Si5hY2Nlc3Mocix0KTtpfHxyLmFkZEV2ZW50TGlzdGVuZXIoZSxu LCEwKSxKLmFjY2VzcyhyLHQsKGl8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciByPXRo aXMub3duZXJEb2N1bWVudHx8dGhpcyxpPUouYWNjZXNzKHIsdCktMTtpP0ouYWNjZXNzKHIsdCxp KTooci5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMCksSi5yZW1vdmUocix0KSl9fX0pO3ZhciBD dD1lLmxvY2F0aW9uLEV0PURhdGUubm93KCksa3Q9L1w/Lzt3LnBhcnNlWE1MPWZ1bmN0aW9uKHQp e3ZhciBuO2lmKCF0fHwic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIG51bGw7dHJ5e249KG5ldyBl LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQveG1sIil9Y2F0Y2goZSl7bj12b2lk IDB9cmV0dXJuIG4mJiFuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0 aHx8dy5lcnJvcigiSW52YWxpZCBYTUw6ICIrdCksbn07dmFyIFN0PS9cW1xdJC8sRHQ9L1xyP1xu L2csTnQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLEF0PS9eKD86aW5w dXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBqdChlLHQsbixyKXt2YXIgaTtp ZihBcnJheS5pc0FycmF5KHQpKXcuZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8U3QudGVzdChlKT9y KGUsaSk6anQoZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaSYmbnVsbCE9aT90OiIiKSsiXSIsaSxu LHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PXgodCkpcihlLHQpO2Vsc2UgZm9yKGkgaW4gdClq dChlKyJbIitpKyJdIix0W2ldLG4scil9dy5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10s aT1mdW5jdGlvbihlLHQpe3ZhciBuPWcodCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29t cG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj8iIjpuKX07aWYoQXJyYXku aXNBcnJheShlKXx8ZS5qcXVlcnkmJiF3LmlzUGxhaW5PYmplY3QoZSkpdy5lYWNoKGUsZnVuY3Rp b24oKXtpKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlqdChuLGVbbl0s dCxpKTtyZXR1cm4gci5qb2luKCImIil9LHcuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24o KXtyZXR1cm4gdy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpm dW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXcucHJvcCh0aGlzLCJl bGVtZW50cyIpO3JldHVybiBlP3cubWFrZUFycmF5KGUpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24o KXt2YXIgZT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIXcodGhpcykuaXMoIjpkaXNhYmxl ZCIpJiZBdC50ZXN0KHRoaXMubm9kZU5hbWUpJiYhTnQudGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8 IXBlLnRlc3QoZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49dyh0aGlzKS52YWwoKTtyZXR1 cm4gbnVsbD09bj9udWxsOkFycmF5LmlzQXJyYXkobik/dy5tYXAobixmdW5jdGlvbihlKXtyZXR1 cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKER0LCJcclxuIil9fSk6e25hbWU6dC5uYW1l LHZhbHVlOm4ucmVwbGFjZShEdCwiXHJcbiIpfX0pLmdldCgpfX0pO3ZhciBxdD0vJTIwL2csTHQ9 LyMuKiQvLEh0PS8oWz8mXSlfPVteJl0qLyxPdD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dt LFB0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRn ZXQpOiQvLE10PS9eKD86R0VUfEhFQUQpJC8sUnQ9L15cL1wvLyxJdD17fSxXdD17fSwkdD0iKi8i LmNvbmNhdCgiKiIpLEJ0PXIuY3JlYXRlRWxlbWVudCgiYSIpO0J0LmhyZWY9Q3QuaHJlZjtmdW5j dGlvbiBGdChlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQs dD0iKiIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaChNKXx8W107aWYoZyhuKSl3 aGlsZShyPW9baSsrXSkiKyI9PT1yWzBdPyhyPXIuc2xpY2UoMSl8fCIqIiwoZVtyXT1lW3JdfHxb XSkudW5zaGlmdChuKSk6KGVbcl09ZVtyXXx8W10pLnB1c2gobil9fWZ1bmN0aW9uIF90KGUsdCxu LHIpe3ZhciBpPXt9LG89ZT09PVd0O2Z1bmN0aW9uIGEocyl7dmFyIHU7cmV0dXJuIGlbc109ITAs dy5lYWNoKGVbc118fFtdLGZ1bmN0aW9uKGUscyl7dmFyIGw9cyh0LG4scik7cmV0dXJuInN0cmlu ZyIhPXR5cGVvZiBsfHxvfHxpW2xdP28/ISh1PWwpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlm dChsKSxhKGwpLCExKX0pLHV9cmV0dXJuIGEodC5kYXRhVHlwZXNbMF0pfHwhaVsiKiJdJiZhKCIq Iil9ZnVuY3Rpb24genQoZSx0KXt2YXIgbixyLGk9dy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8 fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25d KTtyZXR1cm4gciYmdy5leHRlbmQoITAsZSxyKSxlfWZ1bmN0aW9uIFh0KGUsdCxuKXt2YXIgcixp LG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQo KSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50 LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0 KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxl LmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobyly ZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfWZ1bmN0aW9uIFV0KGUsdCxuLHIpe3Zh ciBpLG8sYSxzLHUsbD17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IoYSBpbiBl LmNvbnZlcnRlcnMpbFthLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1thXTtvPWMuc2hpZnQo KTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11d PXQpLCF1JiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSx1 PW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPXU7ZWxzZSBpZigiKiIhPT11JiZ1IT09byl7aWYo IShhPWxbdSsiICIrb118fGxbIiogIitvXSkpZm9yKGkgaW4gbClpZigocz1pLnNwbGl0KCIgIikp WzFdPT09byYmKGE9bFt1KyIgIitzWzBdXXx8bFsiKiAiK3NbMF1dKSl7ITA9PT1hP2E9bFtpXToh MCE9PWxbaV0mJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZighMCE9PWEpaWYoYSYm ZVsidGhyb3dzIl0pdD1hKHQpO2Vsc2UgdHJ5e3Q9YSh0KX1jYXRjaChlKXtyZXR1cm57c3RhdGU6 InBhcnNlcmVycm9yIixlcnJvcjphP2U6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK3UrIiB0byAiK299 fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19dy5leHRlbmQoe2FjdGl2ZTowLGxhc3RN b2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOkN0LmhyZWYsdHlwZToiR0VUIixp c0xvY2FsOlB0LnRlc3QoQ3QucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3lu YzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFy c2V0PVVURi04IixhY2NlcHRzOnsiKiI6JHQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9o dG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pz b24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRt bC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4 dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0 IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwi OncucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpm dW5jdGlvbihlLHQpe3JldHVybiB0P3p0KHp0KGUsdy5hamF4U2V0dGluZ3MpLHQpOnp0KHcuYWph eFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOkZ0KEl0KSxhamF4VHJhbnNwb3J0OkZ0KFd0KSxh amF4OmZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiB0JiYobj10LHQ9dm9pZCAwKSxuPW58 fHt9O3ZhciBpLG8sYSxzLHUsbCxjLGYscCxkLGg9dy5hamF4U2V0dXAoe30sbiksZz1oLmNvbnRl eHR8fGgseT1oLmNvbnRleHQmJihnLm5vZGVUeXBlfHxnLmpxdWVyeSk/dyhnKTp3LmV2ZW50LHY9 dy5EZWZlcnJlZCgpLG09dy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikseD1oLnN0YXR1c0NvZGV8 fHt9LGI9e30sVD17fSxDPSJjYW5jZWxlZCIsRT17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVh ZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGMpe2lmKCFzKXtzPXt9O3doaWxlKHQ9T3QuZXhlYyhh KSlzW3RbMV0udG9Mb3dlckNhc2UoKV09dFsyXX10PXNbZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4g bnVsbD09dD9udWxsOnR9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBj P2E6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1jJiYo ZT1UW2UudG9Mb3dlckNhc2UoKV09VFtlLnRvTG93ZXJDYXNlKCldfHxlLGJbZV09dCksdGhpc30s b3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09YyYmKGgubWltZVR5cGU9 ZSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihlKXt2YXIgdDtpZihlKWlmKGMpRS5hbHdheXMo ZVtFLnN0YXR1c10pO2Vsc2UgZm9yKHQgaW4gZSl4W3RdPVt4W3RdLGVbdF1dO3JldHVybiB0aGlz fSxhYm9ydDpmdW5jdGlvbihlKXt2YXIgdD1lfHxDO3JldHVybiBpJiZpLmFib3J0KHQpLGsoMCx0 KSx0aGlzfX07aWYodi5wcm9taXNlKEUpLGgudXJsPSgodHx8aC51cmx8fEN0LmhyZWYpKyIiKS5y ZXBsYWNlKFJ0LEN0LnByb3RvY29sKyIvLyIpLGgudHlwZT1uLm1ldGhvZHx8bi50eXBlfHxoLm1l dGhvZHx8aC50eXBlLGguZGF0YVR5cGVzPShoLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCku bWF0Y2goTSl8fFsiIl0sbnVsbD09aC5jcm9zc0RvbWFpbil7bD1yLmNyZWF0ZUVsZW1lbnQoImEi KTt0cnl7bC5ocmVmPWgudXJsLGwuaHJlZj1sLmhyZWYsaC5jcm9zc0RvbWFpbj1CdC5wcm90b2Nv bCsiLy8iK0J0Lmhvc3QhPWwucHJvdG9jb2wrIi8vIitsLmhvc3R9Y2F0Y2goZSl7aC5jcm9zc0Rv bWFpbj0hMH19aWYoaC5kYXRhJiZoLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGguZGF0 YSYmKGguZGF0YT13LnBhcmFtKGguZGF0YSxoLnRyYWRpdGlvbmFsKSksX3QoSXQsaCxuLEUpLGMp cmV0dXJuIEU7KGY9dy5ldmVudCYmaC5nbG9iYWwpJiYwPT13LmFjdGl2ZSsrJiZ3LmV2ZW50LnRy aWdnZXIoImFqYXhTdGFydCIpLGgudHlwZT1oLnR5cGUudG9VcHBlckNhc2UoKSxoLmhhc0NvbnRl bnQ9IU10LnRlc3QoaC50eXBlKSxvPWgudXJsLnJlcGxhY2UoTHQsIiIpLGguaGFzQ29udGVudD9o LmRhdGEmJmgucHJvY2Vzc0RhdGEmJjA9PT0oaC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFw cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYoaC5kYXRhPWguZGF0YS5yZXBsYWNl KHF0LCIrIikpOihkPWgudXJsLnNsaWNlKG8ubGVuZ3RoKSxoLmRhdGEmJihoLnByb2Nlc3NEYXRh fHwic3RyaW5nIj09dHlwZW9mIGguZGF0YSkmJihvKz0oa3QudGVzdChvKT8iJiI6Ij8iKStoLmRh dGEsZGVsZXRlIGguZGF0YSksITE9PT1oLmNhY2hlJiYobz1vLnJlcGxhY2UoSHQsIiQxIiksZD0o a3QudGVzdChvKT8iJiI6Ij8iKSsiXz0iK0V0KysrZCksaC51cmw9bytkKSxoLmlmTW9kaWZpZWQm Jih3Lmxhc3RNb2RpZmllZFtvXSYmRS5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5j ZSIsdy5sYXN0TW9kaWZpZWRbb10pLHcuZXRhZ1tvXSYmRS5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1O b25lLU1hdGNoIix3LmV0YWdbb10pKSwoaC5kYXRhJiZoLmhhc0NvbnRlbnQmJiExIT09aC5jb250 ZW50VHlwZXx8bi5jb250ZW50VHlwZSkmJkUuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBl IixoLmNvbnRlbnRUeXBlKSxFLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsaC5kYXRhVHlwZXNb MF0mJmguYWNjZXB0c1toLmRhdGFUeXBlc1swXV0/aC5hY2NlcHRzW2guZGF0YVR5cGVzWzBdXSso IioiIT09aC5kYXRhVHlwZXNbMF0/IiwgIiskdCsiOyBxPTAuMDEiOiIiKTpoLmFjY2VwdHNbIioi XSk7Zm9yKHAgaW4gaC5oZWFkZXJzKUUuc2V0UmVxdWVzdEhlYWRlcihwLGguaGVhZGVyc1twXSk7 aWYoaC5iZWZvcmVTZW5kJiYoITE9PT1oLmJlZm9yZVNlbmQuY2FsbChnLEUsaCl8fGMpKXJldHVy biBFLmFib3J0KCk7aWYoQz0iYWJvcnQiLG0uYWRkKGguY29tcGxldGUpLEUuZG9uZShoLnN1Y2Nl c3MpLEUuZmFpbChoLmVycm9yKSxpPV90KFd0LGgsbixFKSl7aWYoRS5yZWFkeVN0YXRlPTEsZiYm eS50cmlnZ2VyKCJhamF4U2VuZCIsW0UsaF0pLGMpcmV0dXJuIEU7aC5hc3luYyYmaC50aW1lb3V0 PjAmJih1PWUuc2V0VGltZW91dChmdW5jdGlvbigpe0UuYWJvcnQoInRpbWVvdXQiKX0saC50aW1l b3V0KSk7dHJ5e2M9ITEsaS5zZW5kKGIsayl9Y2F0Y2goZSl7aWYoYyl0aHJvdyBlO2soLTEsZSl9 fWVsc2UgaygtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24gayh0LG4scixzKXt2YXIgbCxwLGQs YixULEM9bjtjfHwoYz0hMCx1JiZlLmNsZWFyVGltZW91dCh1KSxpPXZvaWQgMCxhPXN8fCIiLEUu cmVhZHlTdGF0ZT10PjA/NDowLGw9dD49MjAwJiZ0PDMwMHx8MzA0PT09dCxyJiYoYj1YdChoLEUs cikpLGI9VXQoaCxiLEUsbCksbD8oaC5pZk1vZGlmaWVkJiYoKFQ9RS5nZXRSZXNwb25zZUhlYWRl cigiTGFzdC1Nb2RpZmllZCIpKSYmKHcubGFzdE1vZGlmaWVkW29dPVQpLChUPUUuZ2V0UmVzcG9u c2VIZWFkZXIoImV0YWciKSkmJih3LmV0YWdbb109VCkpLDIwND09PXR8fCJIRUFEIj09PWgudHlw ZT9DPSJub2NvbnRlbnQiOjMwND09PXQ/Qz0ibm90bW9kaWZpZWQiOihDPWIuc3RhdGUscD1iLmRh dGEsbD0hKGQ9Yi5lcnJvcikpKTooZD1DLCF0JiZDfHwoQz0iZXJyb3IiLHQ8MCYmKHQ9MCkpKSxF LnN0YXR1cz10LEUuc3RhdHVzVGV4dD0obnx8QykrIiIsbD92LnJlc29sdmVXaXRoKGcsW3AsQyxF XSk6di5yZWplY3RXaXRoKGcsW0UsQyxkXSksRS5zdGF0dXNDb2RlKHgpLHg9dm9pZCAwLGYmJnku dHJpZ2dlcihsPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW0UsaCxsP3A6ZF0pLG0uZmlyZVdp dGgoZyxbRSxDXSksZiYmKHkudHJpZ2dlcigiYWpheENvbXBsZXRlIixbRSxoXSksLS13LmFjdGl2 ZXx8dy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIEV9LGdldEpTT046ZnVuY3Rp b24oZSx0LG4pe3JldHVybiB3LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24o ZSx0KXtyZXR1cm4gdy5nZXQoZSx2b2lkIDAsdCwic2NyaXB0Iil9fSksdy5lYWNoKFsiZ2V0Iiwi cG9zdCJdLGZ1bmN0aW9uKGUsdCl7d1t0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gZyhuKSYm KGk9aXx8cixyPW4sbj12b2lkIDApLHcuYWpheCh3LmV4dGVuZCh7dXJsOmUsdHlwZTp0LGRhdGFU eXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0sdy5pc1BsYWluT2JqZWN0KGUpJiZlKSl9fSksdy5fZXZh bFVybD1mdW5jdGlvbihlKXtyZXR1cm4gdy5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBl OiJzY3JpcHQiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfSx3LmZu LmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpc1swXSYmKGcoZSkm JihlPWUuY2FsbCh0aGlzWzBdKSksdD13KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5j bG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1h cChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmly c3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpm dW5jdGlvbihlKXtyZXR1cm4gZyhlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dyh0aGlzKS53cmFw SW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dyh0aGlz KSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3Jh cDpmdW5jdGlvbihlKXt2YXIgdD1nKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7dyh0 aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3Jl dHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNoKGZ1bmN0aW9uKCl7dyh0aGlzKS5y ZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSksdGhpc319KSx3LmV4cHIucHNldWRvcy5oaWRk ZW49ZnVuY3Rpb24oZSl7cmV0dXJuIXcuZXhwci5wc2V1ZG9zLnZpc2libGUoZSl9LHcuZXhwci5w c2V1ZG9zLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuISEoZS5vZmZzZXRXaWR0aHx8ZS5vZmZz ZXRIZWlnaHR8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfSx3LmFqYXhTZXR0aW5ncy54aHI9 ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBlLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3Zh ciBWdD17MDoyMDAsMTIyMzoyMDR9LEd0PXcuYWpheFNldHRpbmdzLnhocigpO2guY29ycz0hIUd0 JiYid2l0aENyZWRlbnRpYWxzImluIEd0LGguYWpheD1HdD0hIUd0LHcuYWpheFRyYW5zcG9ydChm dW5jdGlvbih0KXt2YXIgbixyO2lmKGguY29yc3x8R3QmJiF0LmNyb3NzRG9tYWluKXJldHVybntz ZW5kOmZ1bmN0aW9uKGksbyl7dmFyIGEscz10LnhocigpO2lmKHMub3Blbih0LnR5cGUsdC51cmws dC5hc3luYyx0LnVzZXJuYW1lLHQucGFzc3dvcmQpLHQueGhyRmllbGRzKWZvcihhIGluIHQueGhy RmllbGRzKXNbYV09dC54aHJGaWVsZHNbYV07dC5taW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBl JiZzLm92ZXJyaWRlTWltZVR5cGUodC5taW1lVHlwZSksdC5jcm9zc0RvbWFpbnx8aVsiWC1SZXF1 ZXN0ZWQtV2l0aCJdfHwoaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2Zv cihhIGluIGkpcy5zZXRSZXF1ZXN0SGVhZGVyKGEsaVthXSk7bj1mdW5jdGlvbihlKXtyZXR1cm4g ZnVuY3Rpb24oKXtuJiYobj1yPXMub25sb2FkPXMub25lcnJvcj1zLm9uYWJvcnQ9cy5vbnRpbWVv dXQ9cy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCwiYWJvcnQiPT09ZT9zLmFib3J0KCk6ImVycm9y Ij09PWU/Im51bWJlciIhPXR5cGVvZiBzLnN0YXR1cz9vKDAsImVycm9yIik6byhzLnN0YXR1cyxz LnN0YXR1c1RleHQpOm8oVnRbcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsInRleHQi IT09KHMucmVzcG9uc2VUeXBlfHwidGV4dCIpfHwic3RyaW5nIiE9dHlwZW9mIHMucmVzcG9uc2VU ZXh0P3tiaW5hcnk6cy5yZXNwb25zZX06e3RleHQ6cy5yZXNwb25zZVRleHR9LHMuZ2V0QWxsUmVz cG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPW4oKSxyPXMub25lcnJvcj1zLm9udGltZW91dD1u KCJlcnJvciIpLHZvaWQgMCE9PXMub25hYm9ydD9zLm9uYWJvcnQ9cjpzLm9ucmVhZHlzdGF0ZWNo YW5nZT1mdW5jdGlvbigpezQ9PT1zLnJlYWR5U3RhdGUmJmUuc2V0VGltZW91dChmdW5jdGlvbigp e24mJnIoKX0pfSxuPW4oImFib3J0Iik7dHJ5e3Muc2VuZCh0Lmhhc0NvbnRlbnQmJnQuZGF0YXx8 bnVsbCl9Y2F0Y2goZSl7aWYobil0aHJvdyBlfX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuKCl9fX0p LHcuYWpheFByZWZpbHRlcihmdW5jdGlvbihlKXtlLmNyb3NzRG9tYWluJiYoZS5jb250ZW50cy5z Y3JpcHQ9ITEpfSksdy5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0 LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNh dGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9cYig/OmphdmF8ZWNtYSlzY3Jp cHRcYi99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHcuZ2xv YmFsRXZhbChlKSxlfX19KSx3LmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7dm9p ZCAwPT09ZS5jYWNoZSYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIp fSksdy5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4p e3ZhciB0LG47cmV0dXJue3NlbmQ6ZnVuY3Rpb24oaSxvKXt0PXcoIjxzY3JpcHQ+IikucHJvcCh7 Y2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oImxvYWQgZXJyb3IiLG49ZnVu Y3Rpb24oZSl7dC5yZW1vdmUoKSxuPW51bGwsZSYmbygiZXJyb3IiPT09ZS50eXBlPzQwNDoyMDAs ZS50eXBlKX0pLHIuaGVhZC5hcHBlbmRDaGlsZCh0WzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZu KCl9fX19KTt2YXIgWXQ9W10sUXQ9Lyg9KVw/KD89JnwkKXxcP1w/Lzt3LmFqYXhTZXR1cCh7anNv bnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WXQucG9wKCl8fHcu ZXhwYW5kbysiXyIrRXQrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHcuYWpheFByZWZpbHRlcigi anNvbiBqc29ucCIsZnVuY3Rpb24odCxuLHIpe3ZhciBpLG8sYSxzPSExIT09dC5qc29ucCYmKFF0 LnRlc3QodC51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgdC5kYXRhJiYwPT09KHQuY29udGVu dFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYm UXQudGVzdCh0LmRhdGEpJiYiZGF0YSIpO2lmKHN8fCJqc29ucCI9PT10LmRhdGFUeXBlc1swXSly ZXR1cm4gaT10Lmpzb25wQ2FsbGJhY2s9Zyh0Lmpzb25wQ2FsbGJhY2spP3QuanNvbnBDYWxsYmFj aygpOnQuanNvbnBDYWxsYmFjayxzP3Rbc109dFtzXS5yZXBsYWNlKFF0LCIkMSIraSk6ITEhPT10 Lmpzb25wJiYodC51cmwrPShrdC50ZXN0KHQudXJsKT8iJiI6Ij8iKSt0Lmpzb25wKyI9IitpKSx0 LmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gYXx8dy5lcnJvcihp KyIgd2FzIG5vdCBjYWxsZWQiKSxhWzBdfSx0LmRhdGFUeXBlc1swXT0ianNvbiIsbz1lW2ldLGVb aV09ZnVuY3Rpb24oKXthPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1v P3coZSkucmVtb3ZlUHJvcChpKTplW2ldPW8sdFtpXSYmKHQuanNvbnBDYWxsYmFjaz1uLmpzb25w Q2FsbGJhY2ssWXQucHVzaChpKSksYSYmZyhvKSYmbyhhWzBdKSxhPW89dm9pZCAwfSksInNjcmlw dCJ9KSxoLmNyZWF0ZUhUTUxEb2N1bWVudD1mdW5jdGlvbigpe3ZhciBlPXIuaW1wbGVtZW50YXRp b24uY3JlYXRlSFRNTERvY3VtZW50KCIiKS5ib2R5O3JldHVybiBlLmlubmVySFRNTD0iPGZvcm0+ PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1lLmNoaWxkTm9kZXMubGVuZ3RofSgpLHcucGFyc2VI VE1MPWZ1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuW107ImJvb2xl YW4iPT10eXBlb2YgdCYmKG49dCx0PSExKTt2YXIgaSxvLGE7cmV0dXJuIHR8fChoLmNyZWF0ZUhU TUxEb2N1bWVudD8oKGk9KHQ9ci5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIp KS5jcmVhdGVFbGVtZW50KCJiYXNlIikpLmhyZWY9ci5sb2NhdGlvbi5ocmVmLHQuaGVhZC5hcHBl bmRDaGlsZChpKSk6dD1yKSxvPUEuZXhlYyhlKSxhPSFuJiZbXSxvP1t0LmNyZWF0ZUVsZW1lbnQo b1sxXSldOihvPXhlKFtlXSx0LGEpLGEmJmEubGVuZ3RoJiZ3KGEpLnJlbW92ZSgpLHcubWVyZ2Uo W10sby5jaGlsZE5vZGVzKSl9LHcuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9 dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybiBzPi0xJiYocj12dChlLnNsaWNlKHMpKSxlPWUu c2xpY2UoMCxzKSksZyh0KT8obj10LHQ9dm9pZCAwKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihp PSJQT1NUIiksYS5sZW5ndGg+MCYmdy5hamF4KHt1cmw6ZSx0eXBlOml8fCJHRVQiLGRhdGFUeXBl OiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP3co IjxkaXY+IikuYXBwZW5kKHcucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1 bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLG98fFtlLnJlc3BvbnNl VGV4dCx0LGVdKX0pfSksdGhpc30sdy5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4 Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24o ZSx0KXt3LmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSksdy5leHByLnBz ZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHcuZ3JlcCh3LnRpbWVycyxmdW5jdGlv bih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0sdy5vZmZzZXQ9e3NldE9mZnNldDpmdW5j dGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYz13LmNzcyhlLCJwb3NpdGlvbiIpLGY9dyhl KSxwPXt9OyJzdGF0aWMiPT09YyYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1mLm9m ZnNldCgpLG89dy5jc3MoZSwidG9wIiksdT13LmNzcyhlLCJsZWZ0IiksKGw9KCJhYnNvbHV0ZSI9 PT1jfHwiZml4ZWQiPT09YykmJihvK3UpLmluZGV4T2YoImF1dG8iKT4tMSk/KGE9KHI9Zi5wb3Np dGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUp fHwwKSxnKHQpJiYodD10LmNhbGwoZSxuLHcuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihw LnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihwLmxlZnQ9dC5sZWZ0LXMubGVmdCtp KSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxwKTpmLmNzcyhwKX19LHcuZm4uZXh0ZW5kKHtv ZmZzZXQ6ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09ZT90 aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXt3Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7 dmFyIHQsbixyPXRoaXNbMF07aWYocilyZXR1cm4gci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8o dD1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3 LHt0b3A6dC50b3Arbi5wYWdlWU9mZnNldCxsZWZ0OnQubGVmdCtuLnBhZ2VYT2Zmc2V0fSk6e3Rv cDowLGxlZnQ6MH19LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLHI9 dGhpc1swXSxpPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT13LmNzcyhyLCJwb3NpdGlvbiIp KXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3du ZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYo ZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmInN0YXRpYyI9PT13LmNzcyhlLCJw b3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPXco ZSkub2Zmc2V0KCkpLnRvcCs9dy5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxpLmxlZnQrPXcu Y3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLXcuY3Nz KHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC13LmNzcyhyLCJtYXJnaW5MZWZ0 IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9u KCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmInN0YXRpYyI9PT13LmNzcyhlLCJw b3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fGJlfSl9fSksdy5lYWNoKHtzY3Jv bGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGUs dCl7dmFyIG49InBhZ2VZT2Zmc2V0Ij09PXQ7dy5mbltlXT1mdW5jdGlvbihyKXtyZXR1cm4geih0 aGlzLGZ1bmN0aW9uKGUscixpKXt2YXIgbztpZih5KGUpP289ZTo5PT09ZS5ub2RlVHlwZSYmKG89 ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09aSlyZXR1cm4gbz9vW3RdOmVbcl07bz9vLnNjcm9sbFRv KG4/by5wYWdlWE9mZnNldDppLG4/aTpvLnBhZ2VZT2Zmc2V0KTplW3JdPWl9LGUscixhcmd1bWVu dHMubGVuZ3RoKX19KSx3LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXt3LmNzc0hv b2tzW3RdPV9lKGgucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLG4pe2lmKG4pcmV0dXJuIG49RmUo ZSx0KSxXZS50ZXN0KG4pP3coZSkucG9zaXRpb24oKVt0XSsicHgiOm59KX0pLHcuZWFjaCh7SGVp Z2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsdCl7dy5lYWNoKHtwYWRkaW5n OiJpbm5lciIrZSxjb250ZW50OnQsIiI6Im91dGVyIitlfSxmdW5jdGlvbihuLHIpe3cuZm5bcl09 ZnVuY3Rpb24oaSxvKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xlYW4iIT10eXBl b2YgaSkscz1ufHwoITA9PT1pfHwhMD09PW8/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB6KHRo aXMsZnVuY3Rpb24odCxuLGkpe3ZhciBvO3JldHVybiB5KHQpPzA9PT1yLmluZGV4T2YoIm91dGVy Iik/dFsiaW5uZXIiK2VdOnQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOjk9 PT10Lm5vZGVUeXBlPyhvPXQuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KHQuYm9keVsic2Nyb2xs IitlXSxvWyJzY3JvbGwiK2VdLHQuYm9keVsib2Zmc2V0IitlXSxvWyJvZmZzZXQiK2VdLG9bImNs aWVudCIrZV0pKTp2b2lkIDA9PT1pP3cuY3NzKHQsbixzKTp3LnN0eWxlKHQsbixpLHMpfSx0LGE/ aTp2b2lkIDAsYSl9fSl9KSx3LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNp emUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3Vz ZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0 IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24o ZSx0KXt3LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlz Lm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx3LmZuLmV4dGVuZCh7aG92ZXI6ZnVu Y3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9fSks dy5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0 LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxl Z2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0 ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUs IioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pLHcucHJveHk9ZnVuY3Rpb24oZSx0KXt2YXIg bixyLGk7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYobj1lW3RdLHQ9ZSxlPW4pLGcoZSkpcmV0dXJu IHI9by5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhp cyxyLmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSkpfSxpLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8dy5n dWlkKyssaX0sdy5ob2xkUmVhZHk9ZnVuY3Rpb24oZSl7ZT93LnJlYWR5V2FpdCsrOncucmVhZHko ITApfSx3LmlzQXJyYXk9QXJyYXkuaXNBcnJheSx3LnBhcnNlSlNPTj1KU09OLnBhcnNlLHcubm9k ZU5hbWU9Tix3LmlzRnVuY3Rpb249Zyx3LmlzV2luZG93PXksdy5jYW1lbENhc2U9Ryx3LnR5cGU9 eCx3Lm5vdz1EYXRlLm5vdyx3LmlzTnVtZXJpYz1mdW5jdGlvbihlKXt2YXIgdD13LnR5cGUoZSk7 cmV0dXJuKCJudW1iZXIiPT09dHx8InN0cmluZyI9PT10KSYmIWlzTmFOKGUtcGFyc2VGbG9hdChl KSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5 IixbXSxmdW5jdGlvbigpe3JldHVybiB3fSk7dmFyIEp0PWUualF1ZXJ5LEt0PWUuJDtyZXR1cm4g dy5ub0NvbmZsaWN0PWZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT13JiYoZS4kPUt0KSx0JiZlLmpR dWVyeT09PXcmJihlLmpRdWVyeT1KdCksd30sdHx8KGUualF1ZXJ5PWUuJD13KSx3fSk7CgpkaWZm IC0tZ2l0IGEvcmVwb3J0cy9qc2xpYi9qcXVlcnkuZGF0YVRhYmxlcy5taW4uY3NzIGIvcmVwb3J0 cy9qc2xpYi9qcXVlcnkuZGF0YVRhYmxlcy5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjY1NjViNDAKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBvcnRzL2pzbGliL2px dWVyeS5kYXRhVGFibGVzLm1pbi5jc3MKQEAgLTAsMCArMSBAQAordGFibGUuZGF0YVRhYmxle3dp ZHRoOjEwMCU7bWFyZ2luOjAgYXV0bztjbGVhcjpib3RoO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0 ZTtib3JkZXItc3BhY2luZzowfXRhYmxlLmRhdGFUYWJsZSB0aGVhZCB0aCx0YWJsZS5kYXRhVGFi bGUgdGZvb3QgdGh7Zm9udC13ZWlnaHQ6Ym9sZH10YWJsZS5kYXRhVGFibGUgdGhlYWQgdGgsdGFi bGUuZGF0YVRhYmxlIHRoZWFkIHRke3BhZGRpbmc6MTBweCAxOHB4O2JvcmRlci1ib3R0b206MXB4 IHNvbGlkICMxMTF9dGFibGUuZGF0YVRhYmxlIHRoZWFkIHRoOmFjdGl2ZSx0YWJsZS5kYXRhVGFi bGUgdGhlYWQgdGQ6YWN0aXZle291dGxpbmU6bm9uZX10YWJsZS5kYXRhVGFibGUgdGZvb3QgdGgs dGFibGUuZGF0YVRhYmxlIHRmb290IHRke3BhZGRpbmc6MTBweCAxOHB4IDZweCAxOHB4O2JvcmRl ci10b3A6MXB4IHNvbGlkICMxMTF9dGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nLHRhYmxl LmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19hc2MsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0 aW5nX2Rlc2MsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZCx0YWJs ZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzY19kaXNhYmxlZHtjdXJzb3I6cG9pbnRlcjsq Y3Vyc29yOmhhbmQ7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRp b246Y2VudGVyIHJpZ2h0fXRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ3tiYWNrZ3JvdW5k LWltYWdlOnVybCgiLi4vaW1hZ2VzL3NvcnRfYm90aC5wbmciKX10YWJsZS5kYXRhVGFibGUgdGhl YWQgLnNvcnRpbmdfYXNje2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWFnZXMvc29ydF9hc2Mu cG5nIil9dGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2N7YmFja2dyb3VuZC1pbWFn ZTp1cmwoIi4uL2ltYWdlcy9zb3J0X2Rlc2MucG5nIil9dGFibGUuZGF0YVRhYmxlIHRoZWFkIC5z b3J0aW5nX2FzY19kaXNhYmxlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLi4vaW1hZ2VzL3NvcnRf YXNjX2Rpc2FibGVkLnBuZyIpfXRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjX2Rp c2FibGVke2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWFnZXMvc29ydF9kZXNjX2Rpc2FibGVk LnBuZyIpfXRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0cntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZ9 dGFibGUuZGF0YVRhYmxlIHRib2R5IHRyLnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I0IwQkVE OX10YWJsZS5kYXRhVGFibGUgdGJvZHkgdGgsdGFibGUuZGF0YVRhYmxlIHRib2R5IHRke3BhZGRp bmc6OHB4IDEwcHh9dGFibGUuZGF0YVRhYmxlLnJvdy1ib3JkZXIgdGJvZHkgdGgsdGFibGUuZGF0 YVRhYmxlLnJvdy1ib3JkZXIgdGJvZHkgdGQsdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkg dGgsdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQg I2RkZH10YWJsZS5kYXRhVGFibGUucm93LWJvcmRlciB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCx0 YWJsZS5kYXRhVGFibGUucm93LWJvcmRlciB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCx0YWJsZS5k YXRhVGFibGUuZGlzcGxheSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCx0YWJsZS5kYXRhVGFibGUu ZGlzcGxheSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOm5vbmV9dGFibGUuZGF0 YVRhYmxlLmNlbGwtYm9yZGVyIHRib2R5IHRoLHRhYmxlLmRhdGFUYWJsZS5jZWxsLWJvcmRlciB0 Ym9keSB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yaWdodDoxcHggc29saWQg I2RkZH10YWJsZS5kYXRhVGFibGUuY2VsbC1ib3JkZXIgdGJvZHkgdHIgdGg6Zmlyc3QtY2hpbGQs dGFibGUuZGF0YVRhYmxlLmNlbGwtYm9yZGVyIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRl ci1sZWZ0OjFweCBzb2xpZCAjZGRkfXRhYmxlLmRhdGFUYWJsZS5jZWxsLWJvcmRlciB0Ym9keSB0 cjpmaXJzdC1jaGlsZCB0aCx0YWJsZS5kYXRhVGFibGUuY2VsbC1ib3JkZXIgdGJvZHkgdHI6Zmly c3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDpub25lfXRhYmxlLmRhdGFUYWJsZS5zdHJpcGUgdGJvZHkg dHIub2RkLHRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5IHRyLm9kZHtiYWNrZ3JvdW5kLWNv bG9yOiNmOWY5Zjl9dGFibGUuZGF0YVRhYmxlLnN0cmlwZSB0Ym9keSB0ci5vZGQuc2VsZWN0ZWQs dGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgdHIub2RkLnNlbGVjdGVke2JhY2tncm91bmQt Y29sb3I6I2FjYmFkNH10YWJsZS5kYXRhVGFibGUuaG92ZXIgdGJvZHkgdHI6aG92ZXIsdGFibGUu ZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjZmNmY2 fXRhYmxlLmRhdGFUYWJsZS5ob3ZlciB0Ym9keSB0cjpob3Zlci5zZWxlY3RlZCx0YWJsZS5kYXRh VGFibGUuZGlzcGxheSB0Ym9keSB0cjpob3Zlci5zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNh YWI3ZDF9dGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbiB0Ym9keSB0cj4uc29ydGluZ18xLHRh YmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4gdGJvZHkgdHI+LnNvcnRpbmdfMix0YWJsZS5kYXRh VGFibGUub3JkZXItY29sdW1uIHRib2R5IHRyPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLmRp c3BsYXkgdGJvZHkgdHI+LnNvcnRpbmdfMSx0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSB0 cj4uc29ydGluZ18yLHRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5IHRyPi5zb3J0aW5nXzN7 YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfXRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4gdGJv ZHkgdHIuc2VsZWN0ZWQ+LnNvcnRpbmdfMSx0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uIHRi b2R5IHRyLnNlbGVjdGVkPi5zb3J0aW5nXzIsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbiB0 Ym9keSB0ci5zZWxlY3RlZD4uc29ydGluZ18zLHRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5 IHRyLnNlbGVjdGVkPi5zb3J0aW5nXzEsdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgdHIu c2VsZWN0ZWQ+LnNvcnRpbmdfMix0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSB0ci5zZWxl Y3RlZD4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6I2FjYmFkNX10YWJsZS5kYXRhVGFibGUu ZGlzcGxheSB0Ym9keSB0ci5vZGQ+LnNvcnRpbmdfMSx0YWJsZS5kYXRhVGFibGUub3JkZXItY29s dW1uLnN0cmlwZSB0Ym9keSB0ci5vZGQ+LnNvcnRpbmdfMXtiYWNrZ3JvdW5kLWNvbG9yOiNmMWYx ZjF9dGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgdHIub2RkPi5zb3J0aW5nXzIsdGFibGUu ZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHkgdHIub2RkPi5zb3J0aW5nXzJ7YmFj a2dyb3VuZC1jb2xvcjojZjNmM2YzfXRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5IHRyLm9k ZD4uc29ydGluZ18zLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5IHRy Lm9kZD4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6d2hpdGVzbW9rZX10YWJsZS5kYXRhVGFi bGUuZGlzcGxheSB0Ym9keSB0ci5vZGQuc2VsZWN0ZWQ+LnNvcnRpbmdfMSx0YWJsZS5kYXRhVGFi bGUub3JkZXItY29sdW1uLnN0cmlwZSB0Ym9keSB0ci5vZGQuc2VsZWN0ZWQ+LnNvcnRpbmdfMXti YWNrZ3JvdW5kLWNvbG9yOiNhNmI0Y2R9dGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgdHIu b2RkLnNlbGVjdGVkPi5zb3J0aW5nXzIsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJp cGUgdGJvZHkgdHIub2RkLnNlbGVjdGVkPi5zb3J0aW5nXzJ7YmFja2dyb3VuZC1jb2xvcjojYThi NWNmfXRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5IHRyLm9kZC5zZWxlY3RlZD4uc29ydGlu Z18zLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5IHRyLm9kZC5zZWxl Y3RlZD4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6I2E5YjdkMX10YWJsZS5kYXRhVGFibGUu ZGlzcGxheSB0Ym9keSB0ci5ldmVuPi5zb3J0aW5nXzEsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNv bHVtbi5zdHJpcGUgdGJvZHkgdHIuZXZlbj4uc29ydGluZ18xe2JhY2tncm91bmQtY29sb3I6I2Zh ZmFmYX10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSB0ci5ldmVuPi5zb3J0aW5nXzIsdGFi bGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHkgdHIuZXZlbj4uc29ydGluZ18y e2JhY2tncm91bmQtY29sb3I6I2ZjZmNmY310YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSB0 ci5ldmVuPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJv ZHkgdHIuZXZlbj4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6I2ZlZmVmZX10YWJsZS5kYXRh VGFibGUuZGlzcGxheSB0Ym9keSB0ci5ldmVuLnNlbGVjdGVkPi5zb3J0aW5nXzEsdGFibGUuZGF0 YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHkgdHIuZXZlbi5zZWxlY3RlZD4uc29ydGlu Z18xe2JhY2tncm91bmQtY29sb3I6I2FjYmFkNX10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9k eSB0ci5ldmVuLnNlbGVjdGVkPi5zb3J0aW5nXzIsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVt bi5zdHJpcGUgdGJvZHkgdHIuZXZlbi5zZWxlY3RlZD4uc29ydGluZ18ye2JhY2tncm91bmQtY29s b3I6I2FlYmNkNn10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSB0ci5ldmVuLnNlbGVjdGVk Pi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHkgdHIu ZXZlbi5zZWxlY3RlZD4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6I2FmYmRkOH10YWJsZS5k YXRhVGFibGUuZGlzcGxheSB0Ym9keSB0cjpob3Zlcj4uc29ydGluZ18xLHRhYmxlLmRhdGFUYWJs ZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHkgdHI6aG92ZXI+LnNvcnRpbmdfMXtiYWNrZ3JvdW5k LWNvbG9yOiNlYWVhZWF9dGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgdHI6aG92ZXI+LnNv cnRpbmdfMix0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uLmhvdmVyIHRib2R5IHRyOmhvdmVy Pi5zb3J0aW5nXzJ7YmFja2dyb3VuZC1jb2xvcjojZWNlY2VjfXRhYmxlLmRhdGFUYWJsZS5kaXNw bGF5IHRib2R5IHRyOmhvdmVyPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVt bi5ob3ZlciB0Ym9keSB0cjpob3Zlcj4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6I2VmZWZl Zn10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSB0cjpob3Zlci5zZWxlY3RlZD4uc29ydGlu Z18xLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHkgdHI6aG92ZXIuc2Vs ZWN0ZWQ+LnNvcnRpbmdfMXtiYWNrZ3JvdW5kLWNvbG9yOiNhMmFlYzd9dGFibGUuZGF0YVRhYmxl LmRpc3BsYXkgdGJvZHkgdHI6aG92ZXIuc2VsZWN0ZWQ+LnNvcnRpbmdfMix0YWJsZS5kYXRhVGFi bGUub3JkZXItY29sdW1uLmhvdmVyIHRib2R5IHRyOmhvdmVyLnNlbGVjdGVkPi5zb3J0aW5nXzJ7 YmFja2dyb3VuZC1jb2xvcjojYTNiMGM5fXRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5IHRy OmhvdmVyLnNlbGVjdGVkPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5o b3ZlciB0Ym9keSB0cjpob3Zlci5zZWxlY3RlZD4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6 I2E1YjJjYn10YWJsZS5kYXRhVGFibGUubm8tZm9vdGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlk ICMxMTF9dGFibGUuZGF0YVRhYmxlLm5vd3JhcCB0aCx0YWJsZS5kYXRhVGFibGUubm93cmFwIHRk e3doaXRlLXNwYWNlOm5vd3JhcH10YWJsZS5kYXRhVGFibGUuY29tcGFjdCB0aGVhZCB0aCx0YWJs ZS5kYXRhVGFibGUuY29tcGFjdCB0aGVhZCB0ZHtwYWRkaW5nOjRweCAxN3B4IDRweCA0cHh9dGFi bGUuZGF0YVRhYmxlLmNvbXBhY3QgdGZvb3QgdGgsdGFibGUuZGF0YVRhYmxlLmNvbXBhY3QgdGZv b3QgdGR7cGFkZGluZzo0cHh9dGFibGUuZGF0YVRhYmxlLmNvbXBhY3QgdGJvZHkgdGgsdGFibGUu ZGF0YVRhYmxlLmNvbXBhY3QgdGJvZHkgdGR7cGFkZGluZzo0cHh9dGFibGUuZGF0YVRhYmxlIHRo LmR0LWxlZnQsdGFibGUuZGF0YVRhYmxlIHRkLmR0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fXRhYmxl LmRhdGFUYWJsZSB0aC5kdC1jZW50ZXIsdGFibGUuZGF0YVRhYmxlIHRkLmR0LWNlbnRlcix0YWJs ZS5kYXRhVGFibGUgdGQuZGF0YVRhYmxlc19lbXB0eXt0ZXh0LWFsaWduOmNlbnRlcn10YWJsZS5k YXRhVGFibGUgdGguZHQtcmlnaHQsdGFibGUuZGF0YVRhYmxlIHRkLmR0LXJpZ2h0e3RleHQtYWxp Z246cmlnaHR9dGFibGUuZGF0YVRhYmxlIHRoLmR0LWp1c3RpZnksdGFibGUuZGF0YVRhYmxlIHRk LmR0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5fXRhYmxlLmRhdGFUYWJsZSB0aC5kdC1ub3dy YXAsdGFibGUuZGF0YVRhYmxlIHRkLmR0LW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9dGFibGUu ZGF0YVRhYmxlIHRoZWFkIHRoLmR0LWhlYWQtbGVmdCx0YWJsZS5kYXRhVGFibGUgdGhlYWQgdGQu ZHQtaGVhZC1sZWZ0LHRhYmxlLmRhdGFUYWJsZSB0Zm9vdCB0aC5kdC1oZWFkLWxlZnQsdGFibGUu ZGF0YVRhYmxlIHRmb290IHRkLmR0LWhlYWQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9dGFibGUuZGF0 YVRhYmxlIHRoZWFkIHRoLmR0LWhlYWQtY2VudGVyLHRhYmxlLmRhdGFUYWJsZSB0aGVhZCB0ZC5k dC1oZWFkLWNlbnRlcix0YWJsZS5kYXRhVGFibGUgdGZvb3QgdGguZHQtaGVhZC1jZW50ZXIsdGFi bGUuZGF0YVRhYmxlIHRmb290IHRkLmR0LWhlYWQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfXRh YmxlLmRhdGFUYWJsZSB0aGVhZCB0aC5kdC1oZWFkLXJpZ2h0LHRhYmxlLmRhdGFUYWJsZSB0aGVh ZCB0ZC5kdC1oZWFkLXJpZ2h0LHRhYmxlLmRhdGFUYWJsZSB0Zm9vdCB0aC5kdC1oZWFkLXJpZ2h0 LHRhYmxlLmRhdGFUYWJsZSB0Zm9vdCB0ZC5kdC1oZWFkLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9 dGFibGUuZGF0YVRhYmxlIHRoZWFkIHRoLmR0LWhlYWQtanVzdGlmeSx0YWJsZS5kYXRhVGFibGUg dGhlYWQgdGQuZHQtaGVhZC1qdXN0aWZ5LHRhYmxlLmRhdGFUYWJsZSB0Zm9vdCB0aC5kdC1oZWFk LWp1c3RpZnksdGFibGUuZGF0YVRhYmxlIHRmb290IHRkLmR0LWhlYWQtanVzdGlmeXt0ZXh0LWFs aWduOmp1c3RpZnl9dGFibGUuZGF0YVRhYmxlIHRoZWFkIHRoLmR0LWhlYWQtbm93cmFwLHRhYmxl LmRhdGFUYWJsZSB0aGVhZCB0ZC5kdC1oZWFkLW5vd3JhcCx0YWJsZS5kYXRhVGFibGUgdGZvb3Qg dGguZHQtaGVhZC1ub3dyYXAsdGFibGUuZGF0YVRhYmxlIHRmb290IHRkLmR0LWhlYWQtbm93cmFw e3doaXRlLXNwYWNlOm5vd3JhcH10YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguZHQtYm9keS1sZWZ0 LHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5kdC1ib2R5LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fXRh YmxlLmRhdGFUYWJsZSB0Ym9keSB0aC5kdC1ib2R5LWNlbnRlcix0YWJsZS5kYXRhVGFibGUgdGJv ZHkgdGQuZHQtYm9keS1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9dGFibGUuZGF0YVRhYmxlIHRi b2R5IHRoLmR0LWJvZHktcmlnaHQsdGFibGUuZGF0YVRhYmxlIHRib2R5IHRkLmR0LWJvZHktcmln aHR7dGV4dC1hbGlnbjpyaWdodH10YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguZHQtYm9keS1qdXN0 aWZ5LHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5kdC1ib2R5LWp1c3RpZnl7dGV4dC1hbGlnbjpq dXN0aWZ5fXRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0aC5kdC1ib2R5LW5vd3JhcCx0YWJsZS5kYXRh VGFibGUgdGJvZHkgdGQuZHQtYm9keS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfXRhYmxlLmRh dGFUYWJsZSx0YWJsZS5kYXRhVGFibGUgdGgsdGFibGUuZGF0YVRhYmxlIHRke2JveC1zaXppbmc6 Y29udGVudC1ib3h9LmRhdGFUYWJsZXNfd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtjbGVhcjpi b3RoOyp6b29tOjE7em9vbToxfS5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfbGVuZ3Ro e2Zsb2F0OmxlZnR9LmRhdGFUYWJsZXNfd3JhcHBlciAuZGF0YVRhYmxlc19maWx0ZXJ7ZmxvYXQ6 cmlnaHQ7dGV4dC1hbGlnbjpyaWdodH0uZGF0YVRhYmxlc193cmFwcGVyIC5kYXRhVGFibGVzX2Zp bHRlciBpbnB1dHttYXJnaW4tbGVmdDowLjVlbX0uZGF0YVRhYmxlc193cmFwcGVyIC5kYXRhVGFi bGVzX2luZm97Y2xlYXI6Ym90aDtmbG9hdDpsZWZ0O3BhZGRpbmctdG9wOjAuNzU1ZW19LmRhdGFU YWJsZXNfd3JhcHBlciAuZGF0YVRhYmxlc19wYWdpbmF0ZXtmbG9hdDpyaWdodDt0ZXh0LWFsaWdu OnJpZ2h0O3BhZGRpbmctdG9wOjAuMjVlbX0uZGF0YVRhYmxlc193cmFwcGVyIC5kYXRhVGFibGVz X3BhZ2luYXRlIC5wYWdpbmF0ZV9idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6 aW5saW5lLWJsb2NrO21pbi13aWR0aDoxLjVlbTtwYWRkaW5nOjAuNWVtIDFlbTttYXJnaW4tbGVm dDoycHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmUgIWltcG9ydGFudDtj dXJzb3I6cG9pbnRlcjsqY3Vyc29yOmhhbmQ7Y29sb3I6IzMzMyAhaW1wb3J0YW50O2JvcmRlcjox cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoycHh9LmRhdGFUYWJsZXNfd3JhcHBl ciAuZGF0YVRhYmxlc19wYWdpbmF0ZSAucGFnaW5hdGVfYnV0dG9uLmN1cnJlbnQsLmRhdGFUYWJs ZXNfd3JhcHBlciAuZGF0YVRhYmxlc19wYWdpbmF0ZSAucGFnaW5hdGVfYnV0dG9uLmN1cnJlbnQ6 aG92ZXJ7Y29sb3I6IzMzMyAhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgIzk3OTc5NztiYWNr Z3JvdW5kLWNvbG9yOndoaXRlO2JhY2tncm91bmQ6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxl ZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgI2ZmZiksIGNvbG9yLXN0b3AoMTAw JSwgI2RjZGNkYykpO2JhY2tncm91bmQ6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZm IDAlLCAjZGNkY2RjIDEwMCUpO2JhY2tncm91bmQ6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAj ZmZmIDAlLCAjZGNkY2RjIDEwMCUpO2JhY2tncm91bmQ6LW1zLWxpbmVhci1ncmFkaWVudCh0b3As ICNmZmYgMCUsICNkY2RjZGMgMTAwJSk7YmFja2dyb3VuZDotby1saW5lYXItZ3JhZGllbnQodG9w LCAjZmZmIDAlLCAjZGNkY2RjIDEwMCUpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJv dHRvbSwgI2ZmZiAwJSwgI2RjZGNkYyAxMDAlKX0uZGF0YVRhYmxlc193cmFwcGVyIC5kYXRhVGFi bGVzX3BhZ2luYXRlIC5wYWdpbmF0ZV9idXR0b24uZGlzYWJsZWQsLmRhdGFUYWJsZXNfd3JhcHBl ciAuZGF0YVRhYmxlc19wYWdpbmF0ZSAucGFnaW5hdGVfYnV0dG9uLmRpc2FibGVkOmhvdmVyLC5k YXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfcGFnaW5hdGUgLnBhZ2luYXRlX2J1dHRvbi5k aXNhYmxlZDphY3RpdmV7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6IzY2NiAhaW1wb3J0YW50O2JvcmRl cjoxcHggc29saWQgdHJhbnNwYXJlbnQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93 Om5vbmV9LmRhdGFUYWJsZXNfd3JhcHBlciAuZGF0YVRhYmxlc19wYWdpbmF0ZSAucGFnaW5hdGVf YnV0dG9uOmhvdmVye2NvbG9yOndoaXRlICFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCAjMTEx O2JhY2tncm91bmQtY29sb3I6IzU4NTg1ODtiYWNrZ3JvdW5kOi13ZWJraXQtZ3JhZGllbnQobGlu ZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICM1ODU4NTgpLCBjb2xv ci1zdG9wKDEwMCUsICMxMTEpKTtiYWNrZ3JvdW5kOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRv cCwgIzU4NTg1OCAwJSwgIzExMSAxMDAlKTtiYWNrZ3JvdW5kOi1tb3otbGluZWFyLWdyYWRpZW50 KHRvcCwgIzU4NTg1OCAwJSwgIzExMSAxMDAlKTtiYWNrZ3JvdW5kOi1tcy1saW5lYXItZ3JhZGll bnQodG9wLCAjNTg1ODU4IDAlLCAjMTExIDEwMCUpO2JhY2tncm91bmQ6LW8tbGluZWFyLWdyYWRp ZW50KHRvcCwgIzU4NTg1OCAwJSwgIzExMSAxMDAlKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVu dCh0byBib3R0b20sICM1ODU4NTggMCUsICMxMTEgMTAwJSl9LmRhdGFUYWJsZXNfd3JhcHBlciAu ZGF0YVRhYmxlc19wYWdpbmF0ZSAucGFnaW5hdGVfYnV0dG9uOmFjdGl2ZXtvdXRsaW5lOm5vbmU7 YmFja2dyb3VuZC1jb2xvcjojMmIyYjJiO2JhY2tncm91bmQ6LXdlYmtpdC1ncmFkaWVudChsaW5l YXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgIzJiMmIyYiksIGNvbG9y LXN0b3AoMTAwJSwgIzBjMGMwYykpO2JhY2tncm91bmQ6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQo dG9wLCAjMmIyYjJiIDAlLCAjMGMwYzBjIDEwMCUpO2JhY2tncm91bmQ6LW1vei1saW5lYXItZ3Jh ZGllbnQodG9wLCAjMmIyYjJiIDAlLCAjMGMwYzBjIDEwMCUpO2JhY2tncm91bmQ6LW1zLWxpbmVh ci1ncmFkaWVudCh0b3AsICMyYjJiMmIgMCUsICMwYzBjMGMgMTAwJSk7YmFja2dyb3VuZDotby1s aW5lYXItZ3JhZGllbnQodG9wLCAjMmIyYjJiIDAlLCAjMGMwYzBjIDEwMCUpO2JhY2tncm91bmQ6 bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzJiMmIyYiAwJSwgIzBjMGMwYyAxMDAlKTtib3gt c2hhZG93Omluc2V0IDAgMCAzcHggIzExMX0uZGF0YVRhYmxlc193cmFwcGVyIC5kYXRhVGFibGVz X3BhZ2luYXRlIC5lbGxpcHNpc3twYWRkaW5nOjAgMWVtfS5kYXRhVGFibGVzX3dyYXBwZXIgLmRh dGFUYWJsZXNfcHJvY2Vzc2luZ3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3dp ZHRoOjEwMCU7aGVpZ2h0OjQwcHg7bWFyZ2luLWxlZnQ6LTUwJTttYXJnaW4tdG9wOi0yNXB4O3Bh ZGRpbmctdG9wOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEuMmVtO2JhY2tncm91 bmQtY29sb3I6d2hpdGU7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0 b3AsIHJpZ2h0IHRvcCwgY29sb3Itc3RvcCgwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSksIGNvbG9y LXN0b3AoMjUlLCByZ2JhKDI1NSwyNTUsMjU1LDAuOSkpLCBjb2xvci1zdG9wKDc1JSwgcmdiYSgy NTUsMjU1LDI1NSwwLjkpKSwgY29sb3Itc3RvcCgxMDAlLCByZ2JhKDI1NSwyNTUsMjU1LDApKSk7 YmFja2dyb3VuZDotd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDI1NSwyNTUsMjU1 LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuOSkgMjUlLCByZ2JhKDI1NSwyNTUsMjU1LDAuOSkg NzUlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpO2JhY2tncm91bmQ6LW1vei1saW5lYXItZ3Jh ZGllbnQobGVmdCwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjkp IDI1JSwgcmdiYSgyNTUsMjU1LDI1NSwwLjkpIDc1JSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAl KTtiYWNrZ3JvdW5kOi1tcy1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgyNTUsMjU1LDI1NSww KSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjkpIDI1JSwgcmdiYSgyNTUsMjU1LDI1NSwwLjkpIDc1 JSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKTtiYWNrZ3JvdW5kOi1vLWxpbmVhci1ncmFkaWVu dChsZWZ0LCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuOSkgMjUl LCByZ2JhKDI1NSwyNTUsMjU1LDAuOSkgNzUlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpO2Jh Y2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwyNTUsMjU1LDApIDAl LCByZ2JhKDI1NSwyNTUsMjU1LDAuOSkgMjUlLCByZ2JhKDI1NSwyNTUsMjU1LDAuOSkgNzUlLCBy Z2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpfS5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNf bGVuZ3RoLC5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfZmlsdGVyLC5kYXRhVGFibGVz X3dyYXBwZXIgLmRhdGFUYWJsZXNfaW5mbywuZGF0YVRhYmxlc193cmFwcGVyIC5kYXRhVGFibGVz X3Byb2Nlc3NpbmcsLmRhdGFUYWJsZXNfd3JhcHBlciAuZGF0YVRhYmxlc19wYWdpbmF0ZXtjb2xv cjojMzMzfS5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfc2Nyb2xse2NsZWFyOmJvdGh9 LmRhdGFUYWJsZXNfd3JhcHBlciAuZGF0YVRhYmxlc19zY3JvbGwgZGl2LmRhdGFUYWJsZXNfc2Ny b2xsQm9keXsqbWFyZ2luLXRvcDotMXB4Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNo fS5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfc2Nyb2xsIGRpdi5kYXRhVGFibGVzX3Nj cm9sbEJvZHk+dGFibGU+dGhlYWQ+dHI+dGgsLmRhdGFUYWJsZXNfd3JhcHBlciAuZGF0YVRhYmxl c19zY3JvbGwgZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keT50YWJsZT50aGVhZD50cj50ZCwuZGF0 YVRhYmxlc193cmFwcGVyIC5kYXRhVGFibGVzX3Njcm9sbCBkaXYuZGF0YVRhYmxlc19zY3JvbGxC b2R5PnRhYmxlPnRib2R5PnRyPnRoLC5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfc2Ny b2xsIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHk+dGFibGU+dGJvZHk+dHI+dGR7dmVydGljYWwt YWxpZ246bWlkZGxlfS5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfc2Nyb2xsIGRpdi5k YXRhVGFibGVzX3Njcm9sbEJvZHk+dGFibGU+dGhlYWQ+dHI+dGg+ZGl2LmRhdGFUYWJsZXNfc2l6 aW5nLC5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfc2Nyb2xsIGRpdi5kYXRhVGFibGVz X3Njcm9sbEJvZHk+dGFibGU+dGhlYWQ+dHI+dGQ+ZGl2LmRhdGFUYWJsZXNfc2l6aW5nLC5kYXRh VGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfc2Nyb2xsIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJv ZHk+dGFibGU+dGJvZHk+dHI+dGg+ZGl2LmRhdGFUYWJsZXNfc2l6aW5nLC5kYXRhVGFibGVzX3dy YXBwZXIgLmRhdGFUYWJsZXNfc2Nyb2xsIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHk+dGFibGU+ dGJvZHk+dHI+dGQ+ZGl2LmRhdGFUYWJsZXNfc2l6aW5ne2hlaWdodDowO292ZXJmbG93OmhpZGRl bjttYXJnaW46MCAhaW1wb3J0YW50O3BhZGRpbmc6MCAhaW1wb3J0YW50fS5kYXRhVGFibGVzX3dy YXBwZXIubm8tZm9vdGVyIC5kYXRhVGFibGVzX3Njcm9sbEJvZHl7Ym9yZGVyLWJvdHRvbToxcHgg c29saWQgIzExMX0uZGF0YVRhYmxlc193cmFwcGVyLm5vLWZvb3RlciBkaXYuZGF0YVRhYmxlc19z Y3JvbGxIZWFkIHRhYmxlLmRhdGFUYWJsZSwuZGF0YVRhYmxlc193cmFwcGVyLm5vLWZvb3RlciBk aXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5PnRhYmxle2JvcmRlci1ib3R0b206bm9uZX0uZGF0YVRh Ymxlc193cmFwcGVyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Y29udGVu dDoiIjtjbGVhcjpib3RoO2hlaWdodDowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2 N3B4KXsuZGF0YVRhYmxlc193cmFwcGVyIC5kYXRhVGFibGVzX2luZm8sLmRhdGFUYWJsZXNfd3Jh cHBlciAuZGF0YVRhYmxlc19wYWdpbmF0ZXtmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfS5k YXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfcGFnaW5hdGV7bWFyZ2luLXRvcDowLjVlbX19 QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjQwcHgpey5kYXRhVGFibGVzX3dyYXBwZXIg LmRhdGFUYWJsZXNfbGVuZ3RoLC5kYXRhVGFibGVzX3dyYXBwZXIgLmRhdGFUYWJsZXNfZmlsdGVy e2Zsb2F0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFUYWJsZXNfd3JhcHBlciAuZGF0YVRh Ymxlc19maWx0ZXJ7bWFyZ2luLXRvcDowLjVlbX19CgpkaWZmIC0tZ2l0IGEvcmVwb3J0cy9qc2xp Yi9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanMgYi9yZXBvcnRzL2pzbGliL2pxdWVyeS5kYXRhVGFi bGVzLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJkYTM0Ci0t LSAvZGV2L251bGwKKysrIGIvcmVwb3J0cy9qc2xpYi9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanMK QEAgLTAsMCArMSwxNjQgQEAKKy8qIQorIERhdGFUYWJsZXMgMS4xMC4xNgorIMKpMjAwOC0yMDE3 IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCisqLworKGZ1bmN0aW9uKGgp eyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSJd LGZ1bmN0aW9uKEUpe3JldHVybiBoKEUsd2luZG93LGRvY3VtZW50KX0pOiJvYmplY3QiPT09dHlw ZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oRSxHKXtFfHwoRT13aW5kb3cpO0d8 fChHPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz9yZXF1aXJlKCJqcXVlcnkiKTpyZXF1aXJl KCJqcXVlcnkiKShFKSk7cmV0dXJuIGgoRyxFLEUuZG9jdW1lbnQpfTpoKGpRdWVyeSx3aW5kb3cs ZG9jdW1lbnQpfSkoZnVuY3Rpb24oaCxFLEcsayl7ZnVuY3Rpb24gWChhKXt2YXIgYixjLGQ9e307 aC5lYWNoKGEsZnVuY3Rpb24oZSl7aWYoKGI9ZS5tYXRjaCgvXihbXkEtWl0rPykoW0EtWl0pLykp JiYtMSE9PSJhIGFhIGFpIGFvIGFzIGIgZm4gaSBtIG8gcyAiLmluZGV4T2YoYlsxXSsiICIpKWM9 ZS5yZXBsYWNlKGJbMF0sYlsyXS50b0xvd2VyQ2FzZSgpKSwKK2RbY109ZSwibyI9PT1iWzFdJiZY KGFbZV0pfSk7YS5faHVuZ2FyaWFuTWFwPWR9ZnVuY3Rpb24gSShhLGIsYyl7YS5faHVuZ2FyaWFu TWFwfHxYKGEpO3ZhciBkO2guZWFjaChiLGZ1bmN0aW9uKGUpe2Q9YS5faHVuZ2FyaWFuTWFwW2Vd O2lmKGQhPT1rJiYoY3x8YltkXT09PWspKSJvIj09PWQuY2hhckF0KDApPyhiW2RdfHwoYltkXT17 fSksaC5leHRlbmQoITAsYltkXSxiW2VdKSxJKGFbZF0sYltkXSxjKSk6YltkXT1iW2VdfSl9ZnVu Y3Rpb24gQ2EoYSl7dmFyIGI9bS5kZWZhdWx0cy5vTGFuZ3VhZ2UsYz1hLnNaZXJvUmVjb3Jkczsh YS5zRW1wdHlUYWJsZSYmKGMmJiJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSI9PT1iLnNFbXB0 eVRhYmxlKSYmRihhLGEsInNaZXJvUmVjb3JkcyIsInNFbXB0eVRhYmxlIik7IWEuc0xvYWRpbmdS ZWNvcmRzJiYoYyYmIkxvYWRpbmcuLi4iPT09Yi5zTG9hZGluZ1JlY29yZHMpJiZGKGEsYSwic1pl cm9SZWNvcmRzIiwic0xvYWRpbmdSZWNvcmRzIik7CithLnNJbmZvVGhvdXNhbmRzJiYoYS5zVGhv dXNhbmRzPWEuc0luZm9UaG91c2FuZHMpOyhhPWEuc0RlY2ltYWwpJiZjYihhKX1mdW5jdGlvbiBk YihhKXtBKGEsIm9yZGVyaW5nIiwiYlNvcnQiKTtBKGEsIm9yZGVyTXVsdGkiLCJiU29ydE11bHRp Iik7QShhLCJvcmRlckNsYXNzZXMiLCJiU29ydENsYXNzZXMiKTtBKGEsIm9yZGVyQ2VsbHNUb3Ai LCJiU29ydENlbGxzVG9wIik7QShhLCJvcmRlciIsImFhU29ydGluZyIpO0EoYSwib3JkZXJGaXhl ZCIsImFhU29ydGluZ0ZpeGVkIik7QShhLCJwYWdpbmciLCJiUGFnaW5hdGUiKTtBKGEsInBhZ2lu Z1R5cGUiLCJzUGFnaW5hdGlvblR5cGUiKTtBKGEsInBhZ2VMZW5ndGgiLCJpRGlzcGxheUxlbmd0 aCIpO0EoYSwic2VhcmNoaW5nIiwiYkZpbHRlciIpOyJib29sZWFuIj09PXR5cGVvZiBhLnNTY3Jv bGxYJiYoYS5zU2Nyb2xsWD1hLnNTY3JvbGxYPyIxMDAlIjoiIik7ImJvb2xlYW4iPT09dHlwZW9m IGEuc2Nyb2xsWCYmKGEuc2Nyb2xsWD0KK2Euc2Nyb2xsWD8iMTAwJSI6IiIpO2lmKGE9YS5hb1Nl YXJjaENvbHMpZm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKWFbYl0mJkkobS5tb2RlbHMu b1NlYXJjaCxhW2JdKX1mdW5jdGlvbiBlYihhKXtBKGEsIm9yZGVyYWJsZSIsImJTb3J0YWJsZSIp O0EoYSwib3JkZXJEYXRhIiwiYURhdGFTb3J0Iik7QShhLCJvcmRlclNlcXVlbmNlIiwiYXNTb3J0 aW5nIik7QShhLCJvcmRlckRhdGFUeXBlIiwic29ydERhdGFUeXBlIik7dmFyIGI9YS5hRGF0YVNv cnQ7Im51bWJlciI9PT10eXBlb2YgYiYmIWguaXNBcnJheShiKSYmKGEuYURhdGFTb3J0PVtiXSl9 ZnVuY3Rpb24gZmIoYSl7aWYoIW0uX19icm93c2VyKXt2YXIgYj17fTttLl9fYnJvd3Nlcj1iO3Zh ciBjPWgoIjxkaXYvPiIpLmNzcyh7cG9zaXRpb246ImZpeGVkIix0b3A6MCxsZWZ0Oi0xKmgoRSku c2Nyb2xsTGVmdCgpLGhlaWdodDoxLHdpZHRoOjEsb3ZlcmZsb3c6ImhpZGRlbiJ9KS5hcHBlbmQo aCgiPGRpdi8+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLAordG9wOjEsbGVmdDoxLHdpZHRo OjEwMCxvdmVyZmxvdzoic2Nyb2xsIn0pLmFwcGVuZChoKCI8ZGl2Lz4iKS5jc3Moe3dpZHRoOiIx MDAlIixoZWlnaHQ6MTB9KSkpLmFwcGVuZFRvKCJib2R5IiksZD1jLmNoaWxkcmVuKCksZT1kLmNo aWxkcmVuKCk7Yi5iYXJXaWR0aD1kWzBdLm9mZnNldFdpZHRoLWRbMF0uY2xpZW50V2lkdGg7Yi5i U2Nyb2xsT3ZlcnNpemU9MTAwPT09ZVswXS5vZmZzZXRXaWR0aCYmMTAwIT09ZFswXS5jbGllbnRX aWR0aDtiLmJTY3JvbGxiYXJMZWZ0PTEhPT1NYXRoLnJvdW5kKGUub2Zmc2V0KCkubGVmdCk7Yi5i Qm91bmRpbmc9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD8hMDohMTtjLnJlbW92 ZSgpfWguZXh0ZW5kKGEub0Jyb3dzZXIsbS5fX2Jyb3dzZXIpO2Eub1Njcm9sbC5pQmFyV2lkdGg9 bS5fX2Jyb3dzZXIuYmFyV2lkdGh9ZnVuY3Rpb24gZ2IoYSxiLGMsZCxlLGYpe3ZhciBnLGo9ITE7 YyE9PWsmJihnPWMsaj0hMCk7Zm9yKDtkIT09CitlOylhLmhhc093blByb3BlcnR5KGQpJiYoZz1q P2IoZyxhW2RdLGQsYSk6YVtkXSxqPSEwLGQrPWYpO3JldHVybiBnfWZ1bmN0aW9uIERhKGEsYil7 dmFyIGM9bS5kZWZhdWx0cy5jb2x1bW4sZD1hLmFvQ29sdW1ucy5sZW5ndGgsYz1oLmV4dGVuZCh7 fSxtLm1vZGVscy5vQ29sdW1uLGMse25UaDpiP2I6Ry5jcmVhdGVFbGVtZW50KCJ0aCIpLHNUaXRs ZTpjLnNUaXRsZT9jLnNUaXRsZTpiP2IuaW5uZXJIVE1MOiIiLGFEYXRhU29ydDpjLmFEYXRhU29y dD9jLmFEYXRhU29ydDpbZF0sbURhdGE6Yy5tRGF0YT9jLm1EYXRhOmQsaWR4OmR9KTthLmFvQ29s dW1ucy5wdXNoKGMpO2M9YS5hb1ByZVNlYXJjaENvbHM7Y1tkXT1oLmV4dGVuZCh7fSxtLm1vZGVs cy5vU2VhcmNoLGNbZF0pO2phKGEsZCxoKGIpLmRhdGEoKSl9ZnVuY3Rpb24gamEoYSxiLGMpe3Zh ciBiPWEuYW9Db2x1bW5zW2JdLGQ9YS5vQ2xhc3NlcyxlPWgoYi5uVGgpO2lmKCFiLnNXaWR0aE9y aWcpe2Iuc1dpZHRoT3JpZz0KK2UuYXR0cigid2lkdGgiKXx8bnVsbDt2YXIgZj0oZS5hdHRyKCJz dHlsZSIpfHwiIikubWF0Y2goL3dpZHRoOlxzKihcZCtbcHhlbSVdKykvKTtmJiYoYi5zV2lkdGhP cmlnPWZbMV0pfWMhPT1rJiZudWxsIT09YyYmKGViKGMpLEkobS5kZWZhdWx0cy5jb2x1bW4sYyks Yy5tRGF0YVByb3AhPT1rJiYhYy5tRGF0YSYmKGMubURhdGE9Yy5tRGF0YVByb3ApLGMuc1R5cGUm JihiLl9zTWFudWFsVHlwZT1jLnNUeXBlKSxjLmNsYXNzTmFtZSYmIWMuc0NsYXNzJiYoYy5zQ2xh c3M9Yy5jbGFzc05hbWUpLGMuc0NsYXNzJiZlLmFkZENsYXNzKGMuc0NsYXNzKSxoLmV4dGVuZChi LGMpLEYoYixjLCJzV2lkdGgiLCJzV2lkdGhPcmlnIiksYy5pRGF0YVNvcnQhPT1rJiYoYi5hRGF0 YVNvcnQ9W2MuaURhdGFTb3J0XSksRihiLGMsImFEYXRhU29ydCIpKTt2YXIgZz1iLm1EYXRhLGo9 UShnKSxpPWIubVJlbmRlcj9RKGIubVJlbmRlcik6bnVsbCxjPWZ1bmN0aW9uKGEpe3JldHVybiJz dHJpbmciPT09Cit0eXBlb2YgYSYmLTEhPT1hLmluZGV4T2YoIkAiKX07Yi5fYkF0dHJTcmM9aC5p c1BsYWluT2JqZWN0KGcpJiYoYyhnLnNvcnQpfHxjKGcudHlwZSl8fGMoZy5maWx0ZXIpKTtiLl9z ZXR0ZXI9bnVsbDtiLmZuR2V0RGF0YT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9aihhLGIsayxjKTty ZXR1cm4gaSYmYj9pKGQsYixhLGMpOmR9O2IuZm5TZXREYXRhPWZ1bmN0aW9uKGEsYixjKXtyZXR1 cm4gUihnKShhLGIsYyl9OyJudW1iZXIiIT09dHlwZW9mIGcmJihhLl9yb3dSZWFkT2JqZWN0PSEw KTthLm9GZWF0dXJlcy5iU29ydHx8KGIuYlNvcnRhYmxlPSExLGUuYWRkQ2xhc3MoZC5zU29ydGFi bGVOb25lKSk7YT0tMSE9PWguaW5BcnJheSgiYXNjIixiLmFzU29ydGluZyk7Yz0tMSE9PWguaW5B cnJheSgiZGVzYyIsYi5hc1NvcnRpbmcpOyFiLmJTb3J0YWJsZXx8IWEmJiFjPyhiLnNTb3J0aW5n Q2xhc3M9ZC5zU29ydGFibGVOb25lLGIuc1NvcnRpbmdDbGFzc0pVST0iIik6YSYmIWM/KGIuc1Nv cnRpbmdDbGFzcz0KK2Quc1NvcnRhYmxlQXNjLGIuc1NvcnRpbmdDbGFzc0pVST1kLnNTb3J0SlVJ QXNjQWxsb3dlZCk6IWEmJmM/KGIuc1NvcnRpbmdDbGFzcz1kLnNTb3J0YWJsZURlc2MsYi5zU29y dGluZ0NsYXNzSlVJPWQuc1NvcnRKVUlEZXNjQWxsb3dlZCk6KGIuc1NvcnRpbmdDbGFzcz1kLnNT b3J0YWJsZSxiLnNTb3J0aW5nQ2xhc3NKVUk9ZC5zU29ydEpVSSl9ZnVuY3Rpb24gWShhKXtpZigh MSE9PWEub0ZlYXR1cmVzLmJBdXRvV2lkdGgpe3ZhciBiPWEuYW9Db2x1bW5zO0VhKGEpO2Zvcih2 YXIgYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKyliW2NdLm5UaC5zdHlsZS53aWR0aD1iW2NdLnNXaWR0 aH1iPWEub1Njcm9sbDsoIiIhPT1iLnNZfHwiIiE9PWIuc1gpJiZrYShhKTtyKGEsbnVsbCwiY29s dW1uLXNpemluZyIsW2FdKX1mdW5jdGlvbiBaKGEsYil7dmFyIGM9bGEoYSwiYlZpc2libGUiKTty ZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBjW2JdP2NbYl06bnVsbH1mdW5jdGlvbiAkKGEsYil7dmFy IGM9CitsYShhLCJiVmlzaWJsZSIpLGM9aC5pbkFycmF5KGIsYyk7cmV0dXJuLTEhPT1jP2M6bnVs bH1mdW5jdGlvbiBhYShhKXt2YXIgYj0wO2guZWFjaChhLmFvQ29sdW1ucyxmdW5jdGlvbihhLGQp e2QuYlZpc2libGUmJiJub25lIiE9PWgoZC5uVGgpLmNzcygiZGlzcGxheSIpJiZiKyt9KTtyZXR1 cm4gYn1mdW5jdGlvbiBsYShhLGIpe3ZhciBjPVtdO2gubWFwKGEuYW9Db2x1bW5zLGZ1bmN0aW9u KGEsZSl7YVtiXSYmYy5wdXNoKGUpfSk7cmV0dXJuIGN9ZnVuY3Rpb24gRmEoYSl7dmFyIGI9YS5h b0NvbHVtbnMsYz1hLmFvRGF0YSxkPW0uZXh0LnR5cGUuZGV0ZWN0LGUsZixnLGosaSxoLGwscSx0 O2U9MDtmb3IoZj1iLmxlbmd0aDtlPGY7ZSsrKWlmKGw9YltlXSx0PVtdLCFsLnNUeXBlJiZsLl9z TWFudWFsVHlwZSlsLnNUeXBlPWwuX3NNYW51YWxUeXBlO2Vsc2UgaWYoIWwuc1R5cGUpe2c9MDtm b3Ioaj1kLmxlbmd0aDtnPGo7ZysrKXtpPTA7Zm9yKGg9Yy5sZW5ndGg7aTxoO2krKyl7dFtpXT09 PQorayYmKHRbaV09QihhLGksZSwidHlwZSIpKTtxPWRbZ10odFtpXSxhKTtpZighcSYmZyE9PWQu bGVuZ3RoLTEpYnJlYWs7aWYoImh0bWwiPT09cSlicmVha31pZihxKXtsLnNUeXBlPXE7YnJlYWt9 fWwuc1R5cGV8fChsLnNUeXBlPSJzdHJpbmciKX19ZnVuY3Rpb24gaGIoYSxiLGMsZCl7dmFyIGUs ZixnLGosaSxuLGw9YS5hb0NvbHVtbnM7aWYoYilmb3IoZT1iLmxlbmd0aC0xOzA8PWU7ZS0tKXtu PWJbZV07dmFyIHE9bi50YXJnZXRzIT09az9uLnRhcmdldHM6bi5hVGFyZ2V0cztoLmlzQXJyYXko cSl8fChxPVtxXSk7Zj0wO2ZvcihnPXEubGVuZ3RoO2Y8ZztmKyspaWYoIm51bWJlciI9PT10eXBl b2YgcVtmXSYmMDw9cVtmXSl7Zm9yKDtsLmxlbmd0aDw9cVtmXTspRGEoYSk7ZChxW2ZdLG4pfWVs c2UgaWYoIm51bWJlciI9PT10eXBlb2YgcVtmXSYmMD5xW2ZdKWQobC5sZW5ndGgrcVtmXSxuKTtl bHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIHFbZl0pe2o9MDtmb3IoaT1sLmxlbmd0aDtqPAoraTtq KyspKCJfYWxsIj09cVtmXXx8aChsW2pdLm5UaCkuaGFzQ2xhc3MocVtmXSkpJiZkKGosbil9fWlm KGMpe2U9MDtmb3IoYT1jLmxlbmd0aDtlPGE7ZSsrKWQoZSxjW2VdKX19ZnVuY3Rpb24gTShhLGIs YyxkKXt2YXIgZT1hLmFvRGF0YS5sZW5ndGgsZj1oLmV4dGVuZCghMCx7fSxtLm1vZGVscy5vUm93 LHtzcmM6Yz8iZG9tIjoiZGF0YSIsaWR4OmV9KTtmLl9hRGF0YT1iO2EuYW9EYXRhLnB1c2goZik7 Zm9yKHZhciBnPWEuYW9Db2x1bW5zLGo9MCxpPWcubGVuZ3RoO2o8aTtqKyspZ1tqXS5zVHlwZT1u dWxsO2EuYWlEaXNwbGF5TWFzdGVyLnB1c2goZSk7Yj1hLnJvd0lkRm4oYik7YiE9PWsmJihhLmFJ ZHNbYl09Zik7KGN8fCFhLm9GZWF0dXJlcy5iRGVmZXJSZW5kZXIpJiZHYShhLGUsYyxkKTtyZXR1 cm4gZX1mdW5jdGlvbiBtYShhLGIpe3ZhciBjO2IgaW5zdGFuY2VvZiBofHwoYj1oKGIpKTtyZXR1 cm4gYi5tYXAoZnVuY3Rpb24oYixlKXtjPUhhKGEsZSk7cmV0dXJuIE0oYSwKK2MuZGF0YSxlLGMu Y2VsbHMpfSl9ZnVuY3Rpb24gQihhLGIsYyxkKXt2YXIgZT1hLmlEcmF3LGY9YS5hb0NvbHVtbnNb Y10sZz1hLmFvRGF0YVtiXS5fYURhdGEsaj1mLnNEZWZhdWx0Q29udGVudCxpPWYuZm5HZXREYXRh KGcsZCx7c2V0dGluZ3M6YSxyb3c6Yixjb2w6Y30pO2lmKGk9PT1rKXJldHVybiBhLmlEcmF3RXJy b3IhPWUmJm51bGw9PT1qJiYoSihhLDAsIlJlcXVlc3RlZCB1bmtub3duIHBhcmFtZXRlciAiKygi ZnVuY3Rpb24iPT10eXBlb2YgZi5tRGF0YT8ie2Z1bmN0aW9ufSI6IiciK2YubURhdGErIiciKSsi IGZvciByb3cgIitiKyIsIGNvbHVtbiAiK2MsNCksYS5pRHJhd0Vycm9yPWUpLGo7aWYoKGk9PT1n fHxudWxsPT09aSkmJm51bGwhPT1qJiZkIT09aylpPWo7ZWxzZSBpZigiZnVuY3Rpb24iPT09dHlw ZW9mIGkpcmV0dXJuIGkuY2FsbChnKTtyZXR1cm4gbnVsbD09PWkmJiJkaXNwbGF5Ij09ZD8iIjpp fWZ1bmN0aW9uIGliKGEsYixjLGQpe2EuYW9Db2x1bW5zW2NdLmZuU2V0RGF0YShhLmFvRGF0YVti XS5fYURhdGEsCitkLHtzZXR0aW5nczphLHJvdzpiLGNvbDpjfSl9ZnVuY3Rpb24gSWEoYSl7cmV0 dXJuIGgubWFwKGEubWF0Y2goLyhcXC58W15cLl0pKy9nKXx8WyIiXSxmdW5jdGlvbihhKXtyZXR1 cm4gYS5yZXBsYWNlKC9cXFwuL2csIi4iKX0pfWZ1bmN0aW9uIFEoYSl7aWYoaC5pc1BsYWluT2Jq ZWN0KGEpKXt2YXIgYj17fTtoLmVhY2goYSxmdW5jdGlvbihhLGMpe2MmJihiW2FdPVEoYykpfSk7 cmV0dXJuIGZ1bmN0aW9uKGEsYyxmLGcpe3ZhciBqPWJbY118fGIuXztyZXR1cm4gaiE9PWs/aihh LGMsZixnKTphfX1pZihudWxsPT09YSlyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGF9O2lmKCJm dW5jdGlvbiI9PT10eXBlb2YgYSlyZXR1cm4gZnVuY3Rpb24oYixjLGYsZyl7cmV0dXJuIGEoYixj LGYsZyl9O2lmKCJzdHJpbmciPT09dHlwZW9mIGEmJigtMSE9PWEuaW5kZXhPZigiLiIpfHwtMSE9 PWEuaW5kZXhPZigiWyIpfHwtMSE9PWEuaW5kZXhPZigiKCIpKSl7dmFyIGM9ZnVuY3Rpb24oYSwK K2IsZil7dmFyIGcsajtpZigiIiE9PWYpe2o9SWEoZik7Zm9yKHZhciBpPTAsbj1qLmxlbmd0aDtp PG47aSsrKXtmPWpbaV0ubWF0Y2goYmEpO2c9altpXS5tYXRjaChVKTtpZihmKXtqW2ldPWpbaV0u cmVwbGFjZShiYSwiIik7IiIhPT1qW2ldJiYoYT1hW2pbaV1dKTtnPVtdO2ouc3BsaWNlKDAsaSsx KTtqPWouam9pbigiLiIpO2lmKGguaXNBcnJheShhKSl7aT0wO2ZvcihuPWEubGVuZ3RoO2k8bjtp KyspZy5wdXNoKGMoYVtpXSxiLGopKX1hPWZbMF0uc3Vic3RyaW5nKDEsZlswXS5sZW5ndGgtMSk7 YT0iIj09PWE/ZzpnLmpvaW4oYSk7YnJlYWt9ZWxzZSBpZihnKXtqW2ldPWpbaV0ucmVwbGFjZShV LCIiKTthPWFbaltpXV0oKTtjb250aW51ZX1pZihudWxsPT09YXx8YVtqW2ldXT09PWspcmV0dXJu IGs7YT1hW2pbaV1dfX1yZXR1cm4gYX07cmV0dXJuIGZ1bmN0aW9uKGIsZSl7cmV0dXJuIGMoYixl LGEpfX1yZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGJbYV19fWZ1bmN0aW9uIFIoYSl7aWYoaC5p c1BsYWluT2JqZWN0KGEpKXJldHVybiBSKGEuXyk7CitpZihudWxsPT09YSlyZXR1cm4gZnVuY3Rp b24oKXt9O2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSlyZXR1cm4gZnVuY3Rpb24oYixkLGUpe2Eo Yiwic2V0IixkLGUpfTtpZigic3RyaW5nIj09PXR5cGVvZiBhJiYoLTEhPT1hLmluZGV4T2YoIi4i KXx8LTEhPT1hLmluZGV4T2YoIlsiKXx8LTEhPT1hLmluZGV4T2YoIigiKSkpe3ZhciBiPWZ1bmN0 aW9uKGEsZCxlKXt2YXIgZT1JYShlKSxmO2Y9ZVtlLmxlbmd0aC0xXTtmb3IodmFyIGcsaixpPTAs bj1lLmxlbmd0aC0xO2k8bjtpKyspe2c9ZVtpXS5tYXRjaChiYSk7aj1lW2ldLm1hdGNoKFUpO2lm KGcpe2VbaV09ZVtpXS5yZXBsYWNlKGJhLCIiKTthW2VbaV1dPVtdO2Y9ZS5zbGljZSgpO2Yuc3Bs aWNlKDAsaSsxKTtnPWYuam9pbigiLiIpO2lmKGguaXNBcnJheShkKSl7aj0wO2ZvcihuPWQubGVu Z3RoO2o8bjtqKyspZj17fSxiKGYsZFtqXSxnKSxhW2VbaV1dLnB1c2goZil9ZWxzZSBhW2VbaV1d PWQ7cmV0dXJufWomJihlW2ldPWVbaV0ucmVwbGFjZShVLAorIiIpLGE9YVtlW2ldXShkKSk7aWYo bnVsbD09PWFbZVtpXV18fGFbZVtpXV09PT1rKWFbZVtpXV09e307YT1hW2VbaV1dfWlmKGYubWF0 Y2goVSkpYVtmLnJlcGxhY2UoVSwiIildKGQpO2Vsc2UgYVtmLnJlcGxhY2UoYmEsIiIpXT1kfTty ZXR1cm4gZnVuY3Rpb24oYyxkKXtyZXR1cm4gYihjLGQsYSl9fXJldHVybiBmdW5jdGlvbihiLGQp e2JbYV09ZH19ZnVuY3Rpb24gSmEoYSl7cmV0dXJuIEQoYS5hb0RhdGEsIl9hRGF0YSIpfWZ1bmN0 aW9uIG5hKGEpe2EuYW9EYXRhLmxlbmd0aD0wO2EuYWlEaXNwbGF5TWFzdGVyLmxlbmd0aD0wO2Eu YWlEaXNwbGF5Lmxlbmd0aD0wO2EuYUlkcz17fX1mdW5jdGlvbiBvYShhLGIsYyl7Zm9yKHZhciBk PS0xLGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspYVtlXT09Yj9kPWU6YVtlXT5iJiZhW2VdLS07IC0x IT1kJiZjPT09ayYmYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBjYShhLGIsYyxkKXt2YXIgZT1hLmFv RGF0YVtiXSxmLGc9ZnVuY3Rpb24oYyxkKXtmb3IoO2MuY2hpbGROb2Rlcy5sZW5ndGg7KWMucmVt b3ZlQ2hpbGQoYy5maXJzdENoaWxkKTsKK2MuaW5uZXJIVE1MPUIoYSxiLGQsImRpc3BsYXkiKX07 aWYoImRvbSI9PT1jfHwoIWN8fCJhdXRvIj09PWMpJiYiZG9tIj09PWUuc3JjKWUuX2FEYXRhPUhh KGEsZSxkLGQ9PT1rP2s6ZS5fYURhdGEpLmRhdGE7ZWxzZXt2YXIgaj1lLmFuQ2VsbHM7aWYoailp ZihkIT09aylnKGpbZF0sZCk7ZWxzZXtjPTA7Zm9yKGY9ai5sZW5ndGg7YzxmO2MrKylnKGpbY10s Yyl9fWUuX2FTb3J0RGF0YT1udWxsO2UuX2FGaWx0ZXJEYXRhPW51bGw7Zz1hLmFvQ29sdW1ucztp ZihkIT09aylnW2RdLnNUeXBlPW51bGw7ZWxzZXtjPTA7Zm9yKGY9Zy5sZW5ndGg7YzxmO2MrKyln W2NdLnNUeXBlPW51bGw7S2EoYSxlKX19ZnVuY3Rpb24gSGEoYSxiLGMsZCl7dmFyIGU9W10sZj1i LmZpcnN0Q2hpbGQsZyxqLGk9MCxuLGw9YS5hb0NvbHVtbnMscT1hLl9yb3dSZWFkT2JqZWN0LGQ9 ZCE9PWs/ZDpxP3t9OltdLHQ9ZnVuY3Rpb24oYSxiKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXt2 YXIgYz1hLmluZGV4T2YoIkAiKTsKKy0xIT09YyYmKGM9YS5zdWJzdHJpbmcoYysxKSxSKGEpKGQs Yi5nZXRBdHRyaWJ1dGUoYykpKX19LG09ZnVuY3Rpb24oYSl7aWYoYz09PWt8fGM9PT1pKWo9bFtp XSxuPWgudHJpbShhLmlubmVySFRNTCksaiYmai5fYkF0dHJTcmM/KFIoai5tRGF0YS5fKShkLG4p LHQoai5tRGF0YS5zb3J0LGEpLHQoai5tRGF0YS50eXBlLGEpLHQoai5tRGF0YS5maWx0ZXIsYSkp OnE/KGouX3NldHRlcnx8KGouX3NldHRlcj1SKGoubURhdGEpKSxqLl9zZXR0ZXIoZCxuKSk6ZFtp XT1uO2krK307aWYoZilmb3IoO2Y7KXtnPWYubm9kZU5hbWUudG9VcHBlckNhc2UoKTtpZigiVEQi PT1nfHwiVEgiPT1nKW0oZiksZS5wdXNoKGYpO2Y9Zi5uZXh0U2libGluZ31lbHNle2U9Yi5hbkNl bGxzO2Y9MDtmb3IoZz1lLmxlbmd0aDtmPGc7ZisrKW0oZVtmXSl9aWYoYj1iLmZpcnN0Q2hpbGQ/ YjpiLm5UcikoYj1iLmdldEF0dHJpYnV0ZSgiaWQiKSkmJlIoYS5yb3dJZCkoZCxiKTtyZXR1cm57 ZGF0YTpkLGNlbGxzOmV9fQorZnVuY3Rpb24gR2EoYSxiLGMsZCl7dmFyIGU9YS5hb0RhdGFbYl0s Zj1lLl9hRGF0YSxnPVtdLGosaSxuLGwscTtpZihudWxsPT09ZS5uVHIpe2o9Y3x8Ry5jcmVhdGVF bGVtZW50KCJ0ciIpO2UublRyPWo7ZS5hbkNlbGxzPWc7ai5fRFRfUm93SW5kZXg9YjtLYShhLGUp O2w9MDtmb3IocT1hLmFvQ29sdW1ucy5sZW5ndGg7bDxxO2wrKyl7bj1hLmFvQ29sdW1uc1tsXTtp PWM/ZFtsXTpHLmNyZWF0ZUVsZW1lbnQobi5zQ2VsbFR5cGUpO2kuX0RUX0NlbGxJbmRleD17cm93 OmIsY29sdW1uOmx9O2cucHVzaChpKTtpZigoIWN8fG4ubVJlbmRlcnx8bi5tRGF0YSE9PWwpJiYo IWguaXNQbGFpbk9iamVjdChuLm1EYXRhKXx8bi5tRGF0YS5fIT09bCsiLmRpc3BsYXkiKSlpLmlu bmVySFRNTD1CKGEsYixsLCJkaXNwbGF5Iik7bi5zQ2xhc3MmJihpLmNsYXNzTmFtZSs9IiAiK24u c0NsYXNzKTtuLmJWaXNpYmxlJiYhYz9qLmFwcGVuZENoaWxkKGkpOiFuLmJWaXNpYmxlJiZjJiZp LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSk7CituLmZuQ3JlYXRlZENlbGwmJm4uZm5DcmVhdGVk Q2VsbC5jYWxsKGEub0luc3RhbmNlLGksQihhLGIsbCksZixiLGwpfXIoYSwiYW9Sb3dDcmVhdGVk Q2FsbGJhY2siLG51bGwsW2osZixiXSl9ZS5uVHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93Iil9 ZnVuY3Rpb24gS2EoYSxiKXt2YXIgYz1iLm5UcixkPWIuX2FEYXRhO2lmKGMpe3ZhciBlPWEucm93 SWRGbihkKTtlJiYoYy5pZD1lKTtkLkRUX1Jvd0NsYXNzJiYoZT1kLkRUX1Jvd0NsYXNzLnNwbGl0 KCIgIiksYi5fX3Jvd2M9Yi5fX3Jvd2M/cWEoYi5fX3Jvd2MuY29uY2F0KGUpKTplLGgoYykucmVt b3ZlQ2xhc3MoYi5fX3Jvd2Muam9pbigiICIpKS5hZGRDbGFzcyhkLkRUX1Jvd0NsYXNzKSk7ZC5E VF9Sb3dBdHRyJiZoKGMpLmF0dHIoZC5EVF9Sb3dBdHRyKTtkLkRUX1Jvd0RhdGEmJmgoYykuZGF0 YShkLkRUX1Jvd0RhdGEpfX1mdW5jdGlvbiBqYihhKXt2YXIgYixjLGQsZSxmLGc9YS5uVEhlYWQs aj1hLm5URm9vdCxpPTA9PT0KK2goInRoLCB0ZCIsZykubGVuZ3RoLG49YS5vQ2xhc3NlcyxsPWEu YW9Db2x1bW5zO2kmJihlPWgoIjx0ci8+IikuYXBwZW5kVG8oZykpO2I9MDtmb3IoYz1sLmxlbmd0 aDtiPGM7YisrKWY9bFtiXSxkPWgoZi5uVGgpLmFkZENsYXNzKGYuc0NsYXNzKSxpJiZkLmFwcGVu ZFRvKGUpLGEub0ZlYXR1cmVzLmJTb3J0JiYoZC5hZGRDbGFzcyhmLnNTb3J0aW5nQ2xhc3MpLCEx IT09Zi5iU29ydGFibGUmJihkLmF0dHIoInRhYmluZGV4IixhLmlUYWJJbmRleCkuYXR0cigiYXJp YS1jb250cm9scyIsYS5zVGFibGVJZCksTGEoYSxmLm5UaCxiKSkpLGYuc1RpdGxlIT1kWzBdLmlu bmVySFRNTCYmZC5odG1sKGYuc1RpdGxlKSxNYShhLCJoZWFkZXIiKShhLGQsZixuKTtpJiZkYShh LmFvSGVhZGVyLGcpO2goZykuZmluZCgiPnRyIikuYXR0cigicm9sZSIsInJvdyIpO2goZykuZmlu ZCgiPnRyPnRoLCA+dHI+dGQiKS5hZGRDbGFzcyhuLnNIZWFkZXJUSCk7aChqKS5maW5kKCI+dHI+ dGgsID50cj50ZCIpLmFkZENsYXNzKG4uc0Zvb3RlclRIKTsKK2lmKG51bGwhPT1qKXthPWEuYW9G b290ZXJbMF07Yj0wO2ZvcihjPWEubGVuZ3RoO2I8YztiKyspZj1sW2JdLGYublRmPWFbYl0uY2Vs bCxmLnNDbGFzcyYmaChmLm5UZikuYWRkQ2xhc3MoZi5zQ2xhc3MpfX1mdW5jdGlvbiBlYShhLGIs Yyl7dmFyIGQsZSxmLGc9W10saj1bXSxpPWEuYW9Db2x1bW5zLmxlbmd0aCxuO2lmKGIpe2M9PT1r JiYoYz0hMSk7ZD0wO2ZvcihlPWIubGVuZ3RoO2Q8ZTtkKyspe2dbZF09YltkXS5zbGljZSgpO2db ZF0ublRyPWJbZF0ublRyO2ZvcihmPWktMTswPD1mO2YtLSkhYS5hb0NvbHVtbnNbZl0uYlZpc2li bGUmJiFjJiZnW2RdLnNwbGljZShmLDEpO2oucHVzaChbXSl9ZD0wO2ZvcihlPWcubGVuZ3RoO2Q8 ZTtkKyspe2lmKGE9Z1tkXS5uVHIpZm9yKDtmPWEuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChm KTtmPTA7Zm9yKGI9Z1tkXS5sZW5ndGg7ZjxiO2YrKylpZihuPWk9MSxqW2RdW2ZdPT09ayl7YS5h cHBlbmRDaGlsZChnW2RdW2ZdLmNlbGwpOworZm9yKGpbZF1bZl09MTtnW2QraV0hPT1rJiZnW2Rd W2ZdLmNlbGw9PWdbZCtpXVtmXS5jZWxsOylqW2QraV1bZl09MSxpKys7Zm9yKDtnW2RdW2Yrbl0h PT1rJiZnW2RdW2ZdLmNlbGw9PWdbZF1bZituXS5jZWxsOyl7Zm9yKGM9MDtjPGk7YysrKWpbZCtj XVtmK25dPTE7bisrfWgoZ1tkXVtmXS5jZWxsKS5hdHRyKCJyb3dzcGFuIixpKS5hdHRyKCJjb2xz cGFuIixuKX19fX1mdW5jdGlvbiBOKGEpe3ZhciBiPXIoYSwiYW9QcmVEcmF3Q2FsbGJhY2siLCJw cmVEcmF3IixbYV0pO2lmKC0xIT09aC5pbkFycmF5KCExLGIpKUMoYSwhMSk7ZWxzZXt2YXIgYj1b XSxjPTAsZD1hLmFzU3RyaXBlQ2xhc3NlcyxlPWQubGVuZ3RoLGY9YS5vTGFuZ3VhZ2UsZz1hLmlJ bml0RGlzcGxheVN0YXJ0LGo9InNzcCI9PXkoYSksaT1hLmFpRGlzcGxheTthLmJEcmF3aW5nPSEw O2chPT1rJiYtMSE9PWcmJihhLl9pRGlzcGxheVN0YXJ0PWo/ZzpnPj1hLmZuUmVjb3Jkc0Rpc3Bs YXkoKT8wOmcsYS5pSW5pdERpc3BsYXlTdGFydD0KKy0xKTt2YXIgZz1hLl9pRGlzcGxheVN0YXJ0 LG49YS5mbkRpc3BsYXlFbmQoKTtpZihhLmJEZWZlckxvYWRpbmcpYS5iRGVmZXJMb2FkaW5nPSEx LGEuaURyYXcrKyxDKGEsITEpO2Vsc2UgaWYoail7aWYoIWEuYkRlc3Ryb3lpbmcmJiFrYihhKSly ZXR1cm59ZWxzZSBhLmlEcmF3Kys7aWYoMCE9PWkubGVuZ3RoKXtmPWo/YS5hb0RhdGEubGVuZ3Ro Om47Zm9yKGo9aj8wOmc7ajxmO2orKyl7dmFyIGw9aVtqXSxxPWEuYW9EYXRhW2xdO251bGw9PT1x Lm5UciYmR2EoYSxsKTtsPXEublRyO2lmKDAhPT1lKXt2YXIgdD1kW2MlZV07cS5fc1Jvd1N0cmlw ZSE9dCYmKGgobCkucmVtb3ZlQ2xhc3MocS5fc1Jvd1N0cmlwZSkuYWRkQ2xhc3ModCkscS5fc1Jv d1N0cmlwZT10KX1yKGEsImFvUm93Q2FsbGJhY2siLG51bGwsW2wscS5fYURhdGEsYyxqXSk7Yi5w dXNoKGwpO2MrK319ZWxzZSBjPWYuc1plcm9SZWNvcmRzLDE9PWEuaURyYXcmJiJhamF4Ij09eShh KT9jPWYuc0xvYWRpbmdSZWNvcmRzOgorZi5zRW1wdHlUYWJsZSYmMD09PWEuZm5SZWNvcmRzVG90 YWwoKSYmKGM9Zi5zRW1wdHlUYWJsZSksYlswXT1oKCI8dHIvPiIseyJjbGFzcyI6ZT9kWzBdOiIi fSkuYXBwZW5kKGgoIjx0ZCAvPiIse3ZhbGlnbjoidG9wIixjb2xTcGFuOmFhKGEpLCJjbGFzcyI6 YS5vQ2xhc3Nlcy5zUm93RW1wdHl9KS5odG1sKGMpKVswXTtyKGEsImFvSGVhZGVyQ2FsbGJhY2si LCJoZWFkZXIiLFtoKGEublRIZWFkKS5jaGlsZHJlbigidHIiKVswXSxKYShhKSxnLG4saV0pO3Io YSwiYW9Gb290ZXJDYWxsYmFjayIsImZvb3RlciIsW2goYS5uVEZvb3QpLmNoaWxkcmVuKCJ0ciIp WzBdLEphKGEpLGcsbixpXSk7ZD1oKGEublRCb2R5KTtkLmNoaWxkcmVuKCkuZGV0YWNoKCk7ZC5h cHBlbmQoaChiKSk7cihhLCJhb0RyYXdDYWxsYmFjayIsImRyYXciLFthXSk7YS5iU29ydGVkPSEx O2EuYkZpbHRlcmVkPSExO2EuYkRyYXdpbmc9ITF9fWZ1bmN0aW9uIFMoYSxiKXt2YXIgYz1hLm9G ZWF0dXJlcyxkPWMuYkZpbHRlcjsKK2MuYlNvcnQmJmxiKGEpO2Q/ZmEoYSxhLm9QcmV2aW91c1Nl YXJjaCk6YS5haURpc3BsYXk9YS5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTshMCE9PWImJihhLl9p RGlzcGxheVN0YXJ0PTApO2EuX2RyYXdIb2xkPWI7TihhKTthLl9kcmF3SG9sZD0hMX1mdW5jdGlv biBtYihhKXt2YXIgYj1hLm9DbGFzc2VzLGM9aChhLm5UYWJsZSksYz1oKCI8ZGl2Lz4iKS5pbnNl cnRCZWZvcmUoYyksZD1hLm9GZWF0dXJlcyxlPWgoIjxkaXYvPiIse2lkOmEuc1RhYmxlSWQrIl93 cmFwcGVyIiwiY2xhc3MiOmIuc1dyYXBwZXIrKGEublRGb290PyIiOiIgIitiLnNOb0Zvb3Rlcil9 KTthLm5Ib2xkaW5nPWNbMF07YS5uVGFibGVXcmFwcGVyPWVbMF07YS5uVGFibGVSZWluc2VydEJl Zm9yZT1hLm5UYWJsZS5uZXh0U2libGluZztmb3IodmFyIGY9YS5zRG9tLnNwbGl0KCIiKSxnLGos aSxuLGwscSxrPTA7azxmLmxlbmd0aDtrKyspe2c9bnVsbDtqPWZba107aWYoIjwiPT1qKXtpPWgo IjxkaXYvPiIpWzBdOworbj1mW2srMV07aWYoIiciPT1ufHwnIic9PW4pe2w9IiI7Zm9yKHE9Mjtm W2srcV0hPW47KWwrPWZbaytxXSxxKys7IkgiPT1sP2w9Yi5zSlVJSGVhZGVyOiJGIj09bCYmKGw9 Yi5zSlVJRm9vdGVyKTstMSE9bC5pbmRleE9mKCIuIik/KG49bC5zcGxpdCgiLiIpLGkuaWQ9blsw XS5zdWJzdHIoMSxuWzBdLmxlbmd0aC0xKSxpLmNsYXNzTmFtZT1uWzFdKToiIyI9PWwuY2hhckF0 KDApP2kuaWQ9bC5zdWJzdHIoMSxsLmxlbmd0aC0xKTppLmNsYXNzTmFtZT1sO2srPXF9ZS5hcHBl bmQoaSk7ZT1oKGkpfWVsc2UgaWYoIj4iPT1qKWU9ZS5wYXJlbnQoKTtlbHNlIGlmKCJsIj09aiYm ZC5iUGFnaW5hdGUmJmQuYkxlbmd0aENoYW5nZSlnPW5iKGEpO2Vsc2UgaWYoImYiPT1qJiZkLmJG aWx0ZXIpZz1vYihhKTtlbHNlIGlmKCJyIj09aiYmZC5iUHJvY2Vzc2luZylnPXBiKGEpO2Vsc2Ug aWYoInQiPT1qKWc9cWIoYSk7ZWxzZSBpZigiaSI9PWomJmQuYkluZm8pZz1yYihhKTtlbHNlIGlm KCJwIj09CitqJiZkLmJQYWdpbmF0ZSlnPXNiKGEpO2Vsc2UgaWYoMCE9PW0uZXh0LmZlYXR1cmUu bGVuZ3RoKXtpPW0uZXh0LmZlYXR1cmU7cT0wO2ZvcihuPWkubGVuZ3RoO3E8bjtxKyspaWYoaj09 aVtxXS5jRmVhdHVyZSl7Zz1pW3FdLmZuSW5pdChhKTticmVha319ZyYmKGk9YS5hYW5GZWF0dXJl cyxpW2pdfHwoaVtqXT1bXSksaVtqXS5wdXNoKGcpLGUuYXBwZW5kKGcpKX1jLnJlcGxhY2VXaXRo KGUpO2EubkhvbGRpbmc9bnVsbH1mdW5jdGlvbiBkYShhLGIpe3ZhciBjPWgoYikuY2hpbGRyZW4o InRyIiksZCxlLGYsZyxqLGksbixsLHEsazthLnNwbGljZSgwLGEubGVuZ3RoKTtmPTA7Zm9yKGk9 Yy5sZW5ndGg7ZjxpO2YrKylhLnB1c2goW10pO2Y9MDtmb3IoaT1jLmxlbmd0aDtmPGk7ZisrKXtk PWNbZl07Zm9yKGU9ZC5maXJzdENoaWxkO2U7KXtpZigiVEQiPT1lLm5vZGVOYW1lLnRvVXBwZXJD YXNlKCl8fCJUSCI9PWUubm9kZU5hbWUudG9VcHBlckNhc2UoKSl7bD0xKmUuZ2V0QXR0cmlidXRl KCJjb2xzcGFuIik7CitxPTEqZS5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKTtsPSFsfHwwPT09bHx8 MT09PWw/MTpsO3E9IXF8fDA9PT1xfHwxPT09cT8xOnE7Zz0wO2ZvcihqPWFbZl07altnXTspZysr O249ZztrPTE9PT1sPyEwOiExO2ZvcihqPTA7ajxsO2orKylmb3IoZz0wO2c8cTtnKyspYVtmK2dd W24ral09e2NlbGw6ZSx1bmlxdWU6a30sYVtmK2ddLm5Ucj1kfWU9ZS5uZXh0U2libGluZ319fWZ1 bmN0aW9uIHJhKGEsYixjKXt2YXIgZD1bXTtjfHwoYz1hLmFvSGVhZGVyLGImJihjPVtdLGRhKGMs YikpKTtmb3IodmFyIGI9MCxlPWMubGVuZ3RoO2I8ZTtiKyspZm9yKHZhciBmPTAsZz1jW2JdLmxl bmd0aDtmPGc7ZisrKWlmKGNbYl1bZl0udW5pcXVlJiYoIWRbZl18fCFhLmJTb3J0Q2VsbHNUb3Ap KWRbZl09Y1tiXVtmXS5jZWxsO3JldHVybiBkfWZ1bmN0aW9uIHNhKGEsYixjKXtyKGEsImFvU2Vy dmVyUGFyYW1zIiwic2VydmVyUGFyYW1zIixbYl0pO2lmKGImJmguaXNBcnJheShiKSl7dmFyIGQ9 e30sCitlPS8oLio/KVxbXF0kLztoLmVhY2goYixmdW5jdGlvbihhLGIpe3ZhciBjPWIubmFtZS5t YXRjaChlKTtjPyhjPWNbMF0sZFtjXXx8KGRbY109W10pLGRbY10ucHVzaChiLnZhbHVlKSk6ZFti Lm5hbWVdPWIudmFsdWV9KTtiPWR9dmFyIGYsZz1hLmFqYXgsaj1hLm9JbnN0YW5jZSxpPWZ1bmN0 aW9uKGIpe3IoYSxudWxsLCJ4aHIiLFthLGIsYS5qcVhIUl0pO2MoYil9O2lmKGguaXNQbGFpbk9i amVjdChnKSYmZy5kYXRhKXtmPWcuZGF0YTt2YXIgbj1oLmlzRnVuY3Rpb24oZik/ZihiLGEpOmYs Yj1oLmlzRnVuY3Rpb24oZikmJm4/bjpoLmV4dGVuZCghMCxiLG4pO2RlbGV0ZSBnLmRhdGF9bj17 ZGF0YTpiLHN1Y2Nlc3M6ZnVuY3Rpb24oYil7dmFyIGM9Yi5lcnJvcnx8Yi5zRXJyb3I7YyYmSihh LDAsYyk7YS5qc29uPWI7aShiKX0sZGF0YVR5cGU6Impzb24iLGNhY2hlOiExLHR5cGU6YS5zU2Vy dmVyTWV0aG9kLGVycm9yOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9cihhLG51bGwsInhociIsCitbYSxu dWxsLGEuanFYSFJdKTstMT09PWguaW5BcnJheSghMCxkKSYmKCJwYXJzZXJlcnJvciI9PWM/Sihh LDAsIkludmFsaWQgSlNPTiByZXNwb25zZSIsMSk6ND09PWIucmVhZHlTdGF0ZSYmSihhLDAsIkFq YXggZXJyb3IiLDcpKTtDKGEsITEpfX07YS5vQWpheERhdGE9YjtyKGEsbnVsbCwicHJlWGhyIixb YSxiXSk7YS5mblNlcnZlckRhdGE/YS5mblNlcnZlckRhdGEuY2FsbChqLGEuc0FqYXhTb3VyY2Us aC5tYXAoYixmdW5jdGlvbihhLGIpe3JldHVybntuYW1lOmIsdmFsdWU6YX19KSxpLGEpOmEuc0Fq YXhTb3VyY2V8fCJzdHJpbmciPT09dHlwZW9mIGc/YS5qcVhIUj1oLmFqYXgoaC5leHRlbmQobix7 dXJsOmd8fGEuc0FqYXhTb3VyY2V9KSk6aC5pc0Z1bmN0aW9uKGcpP2EuanFYSFI9Zy5jYWxsKGos YixpLGEpOihhLmpxWEhSPWguYWpheChoLmV4dGVuZChuLGcpKSxnLmRhdGE9Zil9ZnVuY3Rpb24g a2IoYSl7cmV0dXJuIGEuYkFqYXhEYXRhR2V0PyhhLmlEcmF3KyssQyhhLAorITApLHNhKGEsdGIo YSksZnVuY3Rpb24oYil7dWIoYSxiKX0pLCExKTohMH1mdW5jdGlvbiB0YihhKXt2YXIgYj1hLmFv Q29sdW1ucyxjPWIubGVuZ3RoLGQ9YS5vRmVhdHVyZXMsZT1hLm9QcmV2aW91c1NlYXJjaCxmPWEu YW9QcmVTZWFyY2hDb2xzLGcsaj1bXSxpLG4sbCxrPVYoYSk7Zz1hLl9pRGlzcGxheVN0YXJ0O2k9 ITEhPT1kLmJQYWdpbmF0ZT9hLl9pRGlzcGxheUxlbmd0aDotMTt2YXIgdD1mdW5jdGlvbihhLGIp e2oucHVzaCh7bmFtZTphLHZhbHVlOmJ9KX07dCgic0VjaG8iLGEuaURyYXcpO3QoImlDb2x1bW5z IixjKTt0KCJzQ29sdW1ucyIsRChiLCJzTmFtZSIpLmpvaW4oIiwiKSk7dCgiaURpc3BsYXlTdGFy dCIsZyk7dCgiaURpc3BsYXlMZW5ndGgiLGkpO3ZhciBwYT17ZHJhdzphLmlEcmF3LGNvbHVtbnM6 W10sb3JkZXI6W10sc3RhcnQ6ZyxsZW5ndGg6aSxzZWFyY2g6e3ZhbHVlOmUuc1NlYXJjaCxyZWdl eDplLmJSZWdleH19O2ZvcihnPTA7ZzxjO2crKyluPWJbZ10sCitsPWZbZ10saT0iZnVuY3Rpb24i PT10eXBlb2Ygbi5tRGF0YT8iZnVuY3Rpb24iOm4ubURhdGEscGEuY29sdW1ucy5wdXNoKHtkYXRh OmksbmFtZTpuLnNOYW1lLHNlYXJjaGFibGU6bi5iU2VhcmNoYWJsZSxvcmRlcmFibGU6bi5iU29y dGFibGUsc2VhcmNoOnt2YWx1ZTpsLnNTZWFyY2gscmVnZXg6bC5iUmVnZXh9fSksdCgibURhdGFQ cm9wXyIrZyxpKSxkLmJGaWx0ZXImJih0KCJzU2VhcmNoXyIrZyxsLnNTZWFyY2gpLHQoImJSZWdl eF8iK2csbC5iUmVnZXgpLHQoImJTZWFyY2hhYmxlXyIrZyxuLmJTZWFyY2hhYmxlKSksZC5iU29y dCYmdCgiYlNvcnRhYmxlXyIrZyxuLmJTb3J0YWJsZSk7ZC5iRmlsdGVyJiYodCgic1NlYXJjaCIs ZS5zU2VhcmNoKSx0KCJiUmVnZXgiLGUuYlJlZ2V4KSk7ZC5iU29ydCYmKGguZWFjaChrLGZ1bmN0 aW9uKGEsYil7cGEub3JkZXIucHVzaCh7Y29sdW1uOmIuY29sLGRpcjpiLmRpcn0pO3QoImlTb3J0 Q29sXyIrYSxiLmNvbCk7dCgic1NvcnREaXJfIisKK2EsYi5kaXIpfSksdCgiaVNvcnRpbmdDb2xz IixrLmxlbmd0aCkpO2I9bS5leHQubGVnYWN5LmFqYXg7cmV0dXJuIG51bGw9PT1iP2Euc0FqYXhT b3VyY2U/ajpwYTpiP2o6cGF9ZnVuY3Rpb24gdWIoYSxiKXt2YXIgYz10YShhLGIpLGQ9Yi5zRWNo byE9PWs/Yi5zRWNobzpiLmRyYXcsZT1iLmlUb3RhbFJlY29yZHMhPT1rP2IuaVRvdGFsUmVjb3Jk czpiLnJlY29yZHNUb3RhbCxmPWIuaVRvdGFsRGlzcGxheVJlY29yZHMhPT1rP2IuaVRvdGFsRGlz cGxheVJlY29yZHM6Yi5yZWNvcmRzRmlsdGVyZWQ7aWYoZCl7aWYoMSpkPGEuaURyYXcpcmV0dXJu O2EuaURyYXc9MSpkfW5hKGEpO2EuX2lSZWNvcmRzVG90YWw9cGFyc2VJbnQoZSwxMCk7YS5faVJl Y29yZHNEaXNwbGF5PXBhcnNlSW50KGYsMTApO2Q9MDtmb3IoZT1jLmxlbmd0aDtkPGU7ZCsrKU0o YSxjW2RdKTthLmFpRGlzcGxheT1hLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpO2EuYkFqYXhEYXRh R2V0PSExO04oYSk7YS5fYkluaXRDb21wbGV0ZXx8Cit1YShhLGIpO2EuYkFqYXhEYXRhR2V0PSEw O0MoYSwhMSl9ZnVuY3Rpb24gdGEoYSxiKXt2YXIgYz1oLmlzUGxhaW5PYmplY3QoYS5hamF4KSYm YS5hamF4LmRhdGFTcmMhPT1rP2EuYWpheC5kYXRhU3JjOmEuc0FqYXhEYXRhUHJvcDtyZXR1cm4i ZGF0YSI9PT1jP2IuYWFEYXRhfHxiW2NdOiIiIT09Yz9RKGMpKGIpOmJ9ZnVuY3Rpb24gb2IoYSl7 dmFyIGI9YS5vQ2xhc3NlcyxjPWEuc1RhYmxlSWQsZD1hLm9MYW5ndWFnZSxlPWEub1ByZXZpb3Vz U2VhcmNoLGY9YS5hYW5GZWF0dXJlcyxnPSc8aW5wdXQgdHlwZT0ic2VhcmNoIiBjbGFzcz0iJyti LnNGaWx0ZXJJbnB1dCsnIi8+JyxqPWQuc1NlYXJjaCxqPWoubWF0Y2goL19JTlBVVF8vKT9qLnJl cGxhY2UoIl9JTlBVVF8iLGcpOmorZyxiPWgoIjxkaXYvPiIse2lkOiFmLmY/YysiX2ZpbHRlciI6 bnVsbCwiY2xhc3MiOmIuc0ZpbHRlcn0pLmFwcGVuZChoKCI8bGFiZWwvPiIpLmFwcGVuZChqKSks Zj1mdW5jdGlvbigpe3ZhciBiPSF0aGlzLnZhbHVlPworIiI6dGhpcy52YWx1ZTtiIT1lLnNTZWFy Y2gmJihmYShhLHtzU2VhcmNoOmIsYlJlZ2V4OmUuYlJlZ2V4LGJTbWFydDplLmJTbWFydCxiQ2Fz ZUluc2Vuc2l0aXZlOmUuYkNhc2VJbnNlbnNpdGl2ZX0pLGEuX2lEaXNwbGF5U3RhcnQ9MCxOKGEp KX0sZz1udWxsIT09YS5zZWFyY2hEZWxheT9hLnNlYXJjaERlbGF5OiJzc3AiPT09eShhKT80MDA6 MCxpPWgoImlucHV0IixiKS52YWwoZS5zU2VhcmNoKS5hdHRyKCJwbGFjZWhvbGRlciIsZC5zU2Vh cmNoUGxhY2Vob2xkZXIpLm9uKCJrZXl1cC5EVCBzZWFyY2guRFQgaW5wdXQuRFQgcGFzdGUuRFQg Y3V0LkRUIixnP05hKGYsZyk6Zikub24oImtleXByZXNzLkRUIixmdW5jdGlvbihhKXtpZigxMz09 YS5rZXlDb2RlKXJldHVybiExfSkuYXR0cigiYXJpYS1jb250cm9scyIsYyk7aChhLm5UYWJsZSku b24oInNlYXJjaC5kdC5EVCIsZnVuY3Rpb24oYixjKXtpZihhPT09Yyl0cnl7aVswXSE9PUcuYWN0 aXZlRWxlbWVudCYmaS52YWwoZS5zU2VhcmNoKX1jYXRjaChkKXt9fSk7CityZXR1cm4gYlswXX1m dW5jdGlvbiBmYShhLGIsYyl7dmFyIGQ9YS5vUHJldmlvdXNTZWFyY2gsZT1hLmFvUHJlU2VhcmNo Q29scyxmPWZ1bmN0aW9uKGEpe2Quc1NlYXJjaD1hLnNTZWFyY2g7ZC5iUmVnZXg9YS5iUmVnZXg7 ZC5iU21hcnQ9YS5iU21hcnQ7ZC5iQ2FzZUluc2Vuc2l0aXZlPWEuYkNhc2VJbnNlbnNpdGl2ZX07 RmEoYSk7aWYoInNzcCIhPXkoYSkpe3ZiKGEsYi5zU2VhcmNoLGMsYi5iRXNjYXBlUmVnZXghPT1r PyFiLmJFc2NhcGVSZWdleDpiLmJSZWdleCxiLmJTbWFydCxiLmJDYXNlSW5zZW5zaXRpdmUpO2Yo Yik7Zm9yKGI9MDtiPGUubGVuZ3RoO2IrKyl3YihhLGVbYl0uc1NlYXJjaCxiLGVbYl0uYkVzY2Fw ZVJlZ2V4IT09az8hZVtiXS5iRXNjYXBlUmVnZXg6ZVtiXS5iUmVnZXgsZVtiXS5iU21hcnQsZVti XS5iQ2FzZUluc2Vuc2l0aXZlKTt4YihhKX1lbHNlIGYoYik7YS5iRmlsdGVyZWQ9ITA7cihhLG51 bGwsInNlYXJjaCIsW2FdKX1mdW5jdGlvbiB4YihhKXtmb3IodmFyIGI9CittLmV4dC5zZWFyY2gs Yz1hLmFpRGlzcGxheSxkLGUsZj0wLGc9Yi5sZW5ndGg7ZjxnO2YrKyl7Zm9yKHZhciBqPVtdLGk9 MCxuPWMubGVuZ3RoO2k8bjtpKyspZT1jW2ldLGQ9YS5hb0RhdGFbZV0sYltmXShhLGQuX2FGaWx0 ZXJEYXRhLGUsZC5fYURhdGEsaSkmJmoucHVzaChlKTtjLmxlbmd0aD0wO2gubWVyZ2UoYyxqKX19 ZnVuY3Rpb24gd2IoYSxiLGMsZCxlLGYpe2lmKCIiIT09Yil7Zm9yKHZhciBnPVtdLGo9YS5haURp c3BsYXksZD1PYShiLGQsZSxmKSxlPTA7ZTxqLmxlbmd0aDtlKyspYj1hLmFvRGF0YVtqW2VdXS5f YUZpbHRlckRhdGFbY10sZC50ZXN0KGIpJiZnLnB1c2goaltlXSk7YS5haURpc3BsYXk9Z319ZnVu Y3Rpb24gdmIoYSxiLGMsZCxlLGYpe3ZhciBkPU9hKGIsZCxlLGYpLGY9YS5vUHJldmlvdXNTZWFy Y2guc1NlYXJjaCxnPWEuYWlEaXNwbGF5TWFzdGVyLGosZT1bXTswIT09bS5leHQuc2VhcmNoLmxl bmd0aCYmKGM9ITApO2o9eWIoYSk7aWYoMD49Yi5sZW5ndGgpYS5haURpc3BsYXk9CitnLnNsaWNl KCk7ZWxzZXtpZihqfHxjfHxmLmxlbmd0aD5iLmxlbmd0aHx8MCE9PWIuaW5kZXhPZihmKXx8YS5i U29ydGVkKWEuYWlEaXNwbGF5PWcuc2xpY2UoKTtiPWEuYWlEaXNwbGF5O2ZvcihjPTA7YzxiLmxl bmd0aDtjKyspZC50ZXN0KGEuYW9EYXRhW2JbY11dLl9zRmlsdGVyUm93KSYmZS5wdXNoKGJbY10p O2EuYWlEaXNwbGF5PWV9fWZ1bmN0aW9uIE9hKGEsYixjLGQpe2E9Yj9hOlBhKGEpO2MmJihhPSJe KD89Lio/IitoLm1hcChhLm1hdGNoKC8iW14iXSsifFteIF0rL2cpfHxbIiJdLGZ1bmN0aW9uKGEp e2lmKCciJz09PWEuY2hhckF0KDApKXZhciBiPWEubWF0Y2goL14iKC4qKSIkLyksYT1iP2JbMV06 YTtyZXR1cm4gYS5yZXBsYWNlKCciJywiIil9KS5qb2luKCIpKD89Lio/IikrIikuKiQiKTtyZXR1 cm4gUmVnRXhwKGEsZD8iaSI6IiIpfWZ1bmN0aW9uIHliKGEpe3ZhciBiPWEuYW9Db2x1bW5zLGMs ZCxlLGYsZyxqLGksaCxsPW0uZXh0LnR5cGUuc2VhcmNoO2M9ITE7CitkPTA7Zm9yKGY9YS5hb0Rh dGEubGVuZ3RoO2Q8ZjtkKyspaWYoaD1hLmFvRGF0YVtkXSwhaC5fYUZpbHRlckRhdGEpe2o9W107 ZT0wO2ZvcihnPWIubGVuZ3RoO2U8ZztlKyspYz1iW2VdLGMuYlNlYXJjaGFibGU/KGk9QihhLGQs ZSwiZmlsdGVyIiksbFtjLnNUeXBlXSYmKGk9bFtjLnNUeXBlXShpKSksbnVsbD09PWkmJihpPSIi KSwic3RyaW5nIiE9PXR5cGVvZiBpJiZpLnRvU3RyaW5nJiYoaT1pLnRvU3RyaW5nKCkpKTppPSIi LGkuaW5kZXhPZiYmLTEhPT1pLmluZGV4T2YoIiYiKSYmKHZhLmlubmVySFRNTD1pLGk9V2I/dmEu dGV4dENvbnRlbnQ6dmEuaW5uZXJUZXh0KSxpLnJlcGxhY2UmJihpPWkucmVwbGFjZSgvW1xyXG5d L2csIiIpKSxqLnB1c2goaSk7aC5fYUZpbHRlckRhdGE9ajtoLl9zRmlsdGVyUm93PWouam9pbigi ICAiKTtjPSEwfXJldHVybiBjfWZ1bmN0aW9uIHpiKGEpe3JldHVybntzZWFyY2g6YS5zU2VhcmNo LHNtYXJ0OmEuYlNtYXJ0LHJlZ2V4OmEuYlJlZ2V4LAorY2FzZUluc2Vuc2l0aXZlOmEuYkNhc2VJ bnNlbnNpdGl2ZX19ZnVuY3Rpb24gQWIoYSl7cmV0dXJue3NTZWFyY2g6YS5zZWFyY2gsYlNtYXJ0 OmEuc21hcnQsYlJlZ2V4OmEucmVnZXgsYkNhc2VJbnNlbnNpdGl2ZTphLmNhc2VJbnNlbnNpdGl2 ZX19ZnVuY3Rpb24gcmIoYSl7dmFyIGI9YS5zVGFibGVJZCxjPWEuYWFuRmVhdHVyZXMuaSxkPWgo IjxkaXYvPiIseyJjbGFzcyI6YS5vQ2xhc3Nlcy5zSW5mbyxpZDohYz9iKyJfaW5mbyI6bnVsbH0p O2N8fChhLmFvRHJhd0NhbGxiYWNrLnB1c2goe2ZuOkJiLHNOYW1lOiJpbmZvcm1hdGlvbiJ9KSxk LmF0dHIoInJvbGUiLCJzdGF0dXMiKS5hdHRyKCJhcmlhLWxpdmUiLCJwb2xpdGUiKSxoKGEublRh YmxlKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixiKyJfaW5mbyIpKTtyZXR1cm4gZFswXX1mdW5j dGlvbiBCYihhKXt2YXIgYj1hLmFhbkZlYXR1cmVzLmk7aWYoMCE9PWIubGVuZ3RoKXt2YXIgYz1h Lm9MYW5ndWFnZSxkPWEuX2lEaXNwbGF5U3RhcnQrCisxLGU9YS5mbkRpc3BsYXlFbmQoKSxmPWEu Zm5SZWNvcmRzVG90YWwoKSxnPWEuZm5SZWNvcmRzRGlzcGxheSgpLGo9Zz9jLnNJbmZvOmMuc0lu Zm9FbXB0eTtnIT09ZiYmKGorPSIgIitjLnNJbmZvRmlsdGVyZWQpO2orPWMuc0luZm9Qb3N0Rml4 O2o9Q2IoYSxqKTtjPWMuZm5JbmZvQ2FsbGJhY2s7bnVsbCE9PWMmJihqPWMuY2FsbChhLm9JbnN0 YW5jZSxhLGQsZSxmLGcsaikpO2goYikuaHRtbChqKX19ZnVuY3Rpb24gQ2IoYSxiKXt2YXIgYz1h LmZuRm9ybWF0TnVtYmVyLGQ9YS5faURpc3BsYXlTdGFydCsxLGU9YS5faURpc3BsYXlMZW5ndGgs Zj1hLmZuUmVjb3Jkc0Rpc3BsYXkoKSxnPS0xPT09ZTtyZXR1cm4gYi5yZXBsYWNlKC9fU1RBUlRf L2csYy5jYWxsKGEsZCkpLnJlcGxhY2UoL19FTkRfL2csYy5jYWxsKGEsYS5mbkRpc3BsYXlFbmQo KSkpLnJlcGxhY2UoL19NQVhfL2csYy5jYWxsKGEsYS5mblJlY29yZHNUb3RhbCgpKSkucmVwbGFj ZSgvX1RPVEFMXy9nLGMuY2FsbChhLAorZikpLnJlcGxhY2UoL19QQUdFXy9nLGMuY2FsbChhLGc/ MTpNYXRoLmNlaWwoZC9lKSkpLnJlcGxhY2UoL19QQUdFU18vZyxjLmNhbGwoYSxnPzE6TWF0aC5j ZWlsKGYvZSkpKX1mdW5jdGlvbiBnYShhKXt2YXIgYixjLGQ9YS5pSW5pdERpc3BsYXlTdGFydCxl PWEuYW9Db2x1bW5zLGY7Yz1hLm9GZWF0dXJlczt2YXIgZz1hLmJEZWZlckxvYWRpbmc7aWYoYS5i SW5pdGlhbGlzZWQpe21iKGEpO2piKGEpO2VhKGEsYS5hb0hlYWRlcik7ZWEoYSxhLmFvRm9vdGVy KTtDKGEsITApO2MuYkF1dG9XaWR0aCYmRWEoYSk7Yj0wO2ZvcihjPWUubGVuZ3RoO2I8YztiKysp Zj1lW2JdLGYuc1dpZHRoJiYoZi5uVGguc3R5bGUud2lkdGg9dihmLnNXaWR0aCkpO3IoYSxudWxs LCJwcmVJbml0IixbYV0pO1MoYSk7ZT15KGEpO2lmKCJzc3AiIT1lfHxnKSJhamF4Ij09ZT9zYShh LFtdLGZ1bmN0aW9uKGMpe3ZhciBmPXRhKGEsYyk7Zm9yKGI9MDtiPGYubGVuZ3RoO2IrKylNKGEs ZltiXSk7YS5pSW5pdERpc3BsYXlTdGFydD0KK2Q7UyhhKTtDKGEsITEpO3VhKGEsYyl9LGEpOihD KGEsITEpLHVhKGEpKX1lbHNlIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnYShhKX0sMjAwKX1mdW5j dGlvbiB1YShhLGIpe2EuX2JJbml0Q29tcGxldGU9ITA7KGJ8fGEub0luaXQuYWFEYXRhKSYmWShh KTtyKGEsbnVsbCwicGx1Z2luLWluaXQiLFthLGJdKTtyKGEsImFvSW5pdENvbXBsZXRlIiwiaW5p dCIsW2EsYl0pfWZ1bmN0aW9uIFFhKGEsYil7dmFyIGM9cGFyc2VJbnQoYiwxMCk7YS5faURpc3Bs YXlMZW5ndGg9YztSYShhKTtyKGEsbnVsbCwibGVuZ3RoIixbYSxjXSl9ZnVuY3Rpb24gbmIoYSl7 Zm9yKHZhciBiPWEub0NsYXNzZXMsYz1hLnNUYWJsZUlkLGQ9YS5hTGVuZ3RoTWVudSxlPWguaXNB cnJheShkWzBdKSxmPWU/ZFswXTpkLGQ9ZT9kWzFdOmQsZT1oKCI8c2VsZWN0Lz4iLHtuYW1lOmMr Il9sZW5ndGgiLCJhcmlhLWNvbnRyb2xzIjpjLCJjbGFzcyI6Yi5zTGVuZ3RoU2VsZWN0fSksZz0w LGo9Zi5sZW5ndGg7ZzxqO2crKyllWzBdW2ddPQorbmV3IE9wdGlvbigibnVtYmVyIj09PXR5cGVv ZiBkW2ddP2EuZm5Gb3JtYXROdW1iZXIoZFtnXSk6ZFtnXSxmW2ddKTt2YXIgaT1oKCI8ZGl2Pjxs YWJlbC8+PC9kaXY+IikuYWRkQ2xhc3MoYi5zTGVuZ3RoKTthLmFhbkZlYXR1cmVzLmx8fChpWzBd LmlkPWMrIl9sZW5ndGgiKTtpLmNoaWxkcmVuKCkuYXBwZW5kKGEub0xhbmd1YWdlLnNMZW5ndGhN ZW51LnJlcGxhY2UoIl9NRU5VXyIsZVswXS5vdXRlckhUTUwpKTtoKCJzZWxlY3QiLGkpLnZhbChh Ll9pRGlzcGxheUxlbmd0aCkub24oImNoYW5nZS5EVCIsZnVuY3Rpb24oKXtRYShhLGgodGhpcyku dmFsKCkpO04oYSl9KTtoKGEublRhYmxlKS5vbigibGVuZ3RoLmR0LkRUIixmdW5jdGlvbihiLGMs ZCl7YT09PWMmJmgoInNlbGVjdCIsaSkudmFsKGQpfSk7cmV0dXJuIGlbMF19ZnVuY3Rpb24gc2Io YSl7dmFyIGI9YS5zUGFnaW5hdGlvblR5cGUsYz1tLmV4dC5wYWdlcltiXSxkPSJmdW5jdGlvbiI9 PT10eXBlb2YgYyxlPWZ1bmN0aW9uKGEpe04oYSl9LAorYj1oKCI8ZGl2Lz4iKS5hZGRDbGFzcyhh Lm9DbGFzc2VzLnNQYWdpbmcrYilbMF0sZj1hLmFhbkZlYXR1cmVzO2R8fGMuZm5Jbml0KGEsYixl KTtmLnB8fChiLmlkPWEuc1RhYmxlSWQrIl9wYWdpbmF0ZSIsYS5hb0RyYXdDYWxsYmFjay5wdXNo KHtmbjpmdW5jdGlvbihhKXtpZihkKXt2YXIgYj1hLl9pRGlzcGxheVN0YXJ0LGk9YS5faURpc3Bs YXlMZW5ndGgsaD1hLmZuUmVjb3Jkc0Rpc3BsYXkoKSxsPS0xPT09aSxiPWw/MDpNYXRoLmNlaWwo Yi9pKSxpPWw/MTpNYXRoLmNlaWwoaC9pKSxoPWMoYixpKSxrLGw9MDtmb3Ioaz1mLnAubGVuZ3Ro O2w8aztsKyspTWEoYSwicGFnZUJ1dHRvbiIpKGEsZi5wW2xdLGwsaCxiLGkpfWVsc2UgYy5mblVw ZGF0ZShhLGUpfSxzTmFtZToicGFnaW5hdGlvbiJ9KSk7cmV0dXJuIGJ9ZnVuY3Rpb24gU2EoYSxi LGMpe3ZhciBkPWEuX2lEaXNwbGF5U3RhcnQsZT1hLl9pRGlzcGxheUxlbmd0aCxmPWEuZm5SZWNv cmRzRGlzcGxheSgpOzA9PT1mfHwtMT09PQorZT9kPTA6Im51bWJlciI9PT10eXBlb2YgYj8oZD1i KmUsZD5mJiYoZD0wKSk6ImZpcnN0Ij09Yj9kPTA6InByZXZpb3VzIj09Yj8oZD0wPD1lP2QtZTow LDA+ZCYmKGQ9MCkpOiJuZXh0Ij09Yj9kK2U8ZiYmKGQrPWUpOiJsYXN0Ij09Yj9kPU1hdGguZmxv b3IoKGYtMSkvZSkqZTpKKGEsMCwiVW5rbm93biBwYWdpbmcgYWN0aW9uOiAiK2IsNSk7Yj1hLl9p RGlzcGxheVN0YXJ0IT09ZDthLl9pRGlzcGxheVN0YXJ0PWQ7YiYmKHIoYSxudWxsLCJwYWdlIixb YV0pLGMmJk4oYSkpO3JldHVybiBifWZ1bmN0aW9uIHBiKGEpe3JldHVybiBoKCI8ZGl2Lz4iLHtp ZDohYS5hYW5GZWF0dXJlcy5yP2Euc1RhYmxlSWQrIl9wcm9jZXNzaW5nIjpudWxsLCJjbGFzcyI6 YS5vQ2xhc3Nlcy5zUHJvY2Vzc2luZ30pLmh0bWwoYS5vTGFuZ3VhZ2Uuc1Byb2Nlc3NpbmcpLmlu c2VydEJlZm9yZShhLm5UYWJsZSlbMF19ZnVuY3Rpb24gQyhhLGIpe2Eub0ZlYXR1cmVzLmJQcm9j ZXNzaW5nJiZoKGEuYWFuRmVhdHVyZXMucikuY3NzKCJkaXNwbGF5IiwKK2I/ImJsb2NrIjoibm9u ZSIpO3IoYSxudWxsLCJwcm9jZXNzaW5nIixbYSxiXSl9ZnVuY3Rpb24gcWIoYSl7dmFyIGI9aChh Lm5UYWJsZSk7Yi5hdHRyKCJyb2xlIiwiZ3JpZCIpO3ZhciBjPWEub1Njcm9sbDtpZigiIj09PWMu c1gmJiIiPT09Yy5zWSlyZXR1cm4gYS5uVGFibGU7dmFyIGQ9Yy5zWCxlPWMuc1ksZj1hLm9DbGFz c2VzLGc9Yi5jaGlsZHJlbigiY2FwdGlvbiIpLGo9Zy5sZW5ndGg/Z1swXS5fY2FwdGlvblNpZGU6 bnVsbCxpPWgoYlswXS5jbG9uZU5vZGUoITEpKSxuPWgoYlswXS5jbG9uZU5vZGUoITEpKSxsPWIu Y2hpbGRyZW4oInRmb290Iik7bC5sZW5ndGh8fChsPW51bGwpO2k9aCgiPGRpdi8+Iix7ImNsYXNz IjpmLnNTY3JvbGxXcmFwcGVyfSkuYXBwZW5kKGgoIjxkaXYvPiIseyJjbGFzcyI6Zi5zU2Nyb2xs SGVhZH0pLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiIscG9zaXRpb246InJlbGF0aXZlIixib3JkZXI6 MCx3aWR0aDpkPyFkP251bGw6dihkKToiMTAwJSJ9KS5hcHBlbmQoaCgiPGRpdi8+IiwKK3siY2xh c3MiOmYuc1Njcm9sbEhlYWRJbm5lcn0pLmNzcyh7ImJveC1zaXppbmciOiJjb250ZW50LWJveCIs d2lkdGg6Yy5zWElubmVyfHwiMTAwJSJ9KS5hcHBlbmQoaS5yZW1vdmVBdHRyKCJpZCIpLmNzcygi bWFyZ2luLWxlZnQiLDApLmFwcGVuZCgidG9wIj09PWo/ZzpudWxsKS5hcHBlbmQoYi5jaGlsZHJl bigidGhlYWQiKSkpKSkuYXBwZW5kKGgoIjxkaXYvPiIseyJjbGFzcyI6Zi5zU2Nyb2xsQm9keX0p LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoiYXV0byIsd2lkdGg6IWQ/bnVsbDp2 KGQpfSkuYXBwZW5kKGIpKTtsJiZpLmFwcGVuZChoKCI8ZGl2Lz4iLHsiY2xhc3MiOmYuc1Njcm9s bEZvb3R9KS5jc3Moe292ZXJmbG93OiJoaWRkZW4iLGJvcmRlcjowLHdpZHRoOmQ/IWQ/bnVsbDp2 KGQpOiIxMDAlIn0pLmFwcGVuZChoKCI8ZGl2Lz4iLHsiY2xhc3MiOmYuc1Njcm9sbEZvb3RJbm5l cn0pLmFwcGVuZChuLnJlbW92ZUF0dHIoImlkIikuY3NzKCJtYXJnaW4tbGVmdCIsCiswKS5hcHBl bmQoImJvdHRvbSI9PT1qP2c6bnVsbCkuYXBwZW5kKGIuY2hpbGRyZW4oInRmb290IikpKSkpO3Zh ciBiPWkuY2hpbGRyZW4oKSxrPWJbMF0sZj1iWzFdLHQ9bD9iWzJdOm51bGw7aWYoZCloKGYpLm9u KCJzY3JvbGwuRFQiLGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zY3JvbGxMZWZ0O2suc2Nyb2xsTGVm dD1hO2wmJih0LnNjcm9sbExlZnQ9YSl9KTtoKGYpLmNzcyhlJiZjLmJDb2xsYXBzZT8ibWF4LWhl aWdodCI6ImhlaWdodCIsZSk7YS5uU2Nyb2xsSGVhZD1rO2EublNjcm9sbEJvZHk9ZjthLm5TY3Jv bGxGb290PXQ7YS5hb0RyYXdDYWxsYmFjay5wdXNoKHtmbjprYSxzTmFtZToic2Nyb2xsaW5nIn0p O3JldHVybiBpWzBdfWZ1bmN0aW9uIGthKGEpe3ZhciBiPWEub1Njcm9sbCxjPWIuc1gsZD1iLnNY SW5uZXIsZT1iLnNZLGI9Yi5pQmFyV2lkdGgsZj1oKGEublNjcm9sbEhlYWQpLGc9ZlswXS5zdHls ZSxqPWYuY2hpbGRyZW4oImRpdiIpLGk9alswXS5zdHlsZSxuPWouY2hpbGRyZW4oInRhYmxlIiks CitqPWEublNjcm9sbEJvZHksbD1oKGopLHE9ai5zdHlsZSx0PWgoYS5uU2Nyb2xsRm9vdCkuY2hp bGRyZW4oImRpdiIpLG09dC5jaGlsZHJlbigidGFibGUiKSxvPWgoYS5uVEhlYWQpLHA9aChhLm5U YWJsZSkscz1wWzBdLHI9cy5zdHlsZSx1PWEublRGb290P2goYS5uVEZvb3QpOm51bGwseD1hLm9C cm93c2VyLFQ9eC5iU2Nyb2xsT3ZlcnNpemUsWGI9RChhLmFvQ29sdW1ucywiblRoIiksTyxLLFAs dyxUYT1bXSx5PVtdLHo9W10sQT1bXSxCLEM9ZnVuY3Rpb24oYSl7YT1hLnN0eWxlO2EucGFkZGlu Z1RvcD0iMCI7YS5wYWRkaW5nQm90dG9tPSIwIjthLmJvcmRlclRvcFdpZHRoPSIwIjthLmJvcmRl ckJvdHRvbVdpZHRoPSIwIjthLmhlaWdodD0wfTtLPWouc2Nyb2xsSGVpZ2h0PmouY2xpZW50SGVp Z2h0O2lmKGEuc2Nyb2xsQmFyVmlzIT09SyYmYS5zY3JvbGxCYXJWaXMhPT1rKWEuc2Nyb2xsQmFy VmlzPUssWShhKTtlbHNle2Euc2Nyb2xsQmFyVmlzPUs7cC5jaGlsZHJlbigidGhlYWQsIHRmb290 IikucmVtb3ZlKCk7Cit1JiYoUD11LmNsb25lKCkucHJlcGVuZFRvKHApLE89dS5maW5kKCJ0ciIp LFA9UC5maW5kKCJ0ciIpKTt3PW8uY2xvbmUoKS5wcmVwZW5kVG8ocCk7bz1vLmZpbmQoInRyIik7 Sz13LmZpbmQoInRyIik7dy5maW5kKCJ0aCwgdGQiKS5yZW1vdmVBdHRyKCJ0YWJpbmRleCIpO2N8 fChxLndpZHRoPSIxMDAlIixmWzBdLnN0eWxlLndpZHRoPSIxMDAlIik7aC5lYWNoKHJhKGEsdyks ZnVuY3Rpb24oYixjKXtCPVooYSxiKTtjLnN0eWxlLndpZHRoPWEuYW9Db2x1bW5zW0JdLnNXaWR0 aH0pO3UmJkgoZnVuY3Rpb24oYSl7YS5zdHlsZS53aWR0aD0iIn0sUCk7Zj1wLm91dGVyV2lkdGgo KTtpZigiIj09PWMpe3Iud2lkdGg9IjEwMCUiO2lmKFQmJihwLmZpbmQoInRib2R5IikuaGVpZ2h0 KCk+ai5vZmZzZXRIZWlnaHR8fCJzY3JvbGwiPT1sLmNzcygib3ZlcmZsb3cteSIpKSlyLndpZHRo PXYocC5vdXRlcldpZHRoKCktYik7Zj1wLm91dGVyV2lkdGgoKX1lbHNlIiIhPT1kJiYoci53aWR0 aD0KK3YoZCksZj1wLm91dGVyV2lkdGgoKSk7SChDLEspO0goZnVuY3Rpb24oYSl7ei5wdXNoKGEu aW5uZXJIVE1MKTtUYS5wdXNoKHYoaChhKS5jc3MoIndpZHRoIikpKX0sSyk7SChmdW5jdGlvbihh LGIpe2lmKGguaW5BcnJheShhLFhiKSE9PS0xKWEuc3R5bGUud2lkdGg9VGFbYl19LG8pO2goSyku aGVpZ2h0KDApO3UmJihIKEMsUCksSChmdW5jdGlvbihhKXtBLnB1c2goYS5pbm5lckhUTUwpO3ku cHVzaCh2KGgoYSkuY3NzKCJ3aWR0aCIpKSl9LFApLEgoZnVuY3Rpb24oYSxiKXthLnN0eWxlLndp ZHRoPXlbYl19LE8pLGgoUCkuaGVpZ2h0KDApKTtIKGZ1bmN0aW9uKGEsYil7YS5pbm5lckhUTUw9 JzxkaXYgY2xhc3M9ImRhdGFUYWJsZXNfc2l6aW5nIiBzdHlsZT0iaGVpZ2h0OjA7b3ZlcmZsb3c6 aGlkZGVuOyI+Jyt6W2JdKyI8L2Rpdj4iO2Euc3R5bGUud2lkdGg9VGFbYl19LEspO3UmJkgoZnVu Y3Rpb24oYSxiKXthLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZGF0YVRhYmxlc19zaXppbmciIHN0 eWxlPSJoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47Ij4nKworQVtiXSsiPC9kaXY+IjthLnN0eWxl LndpZHRoPXlbYl19LFApO2lmKHAub3V0ZXJXaWR0aCgpPGYpe089ai5zY3JvbGxIZWlnaHQ+ai5v ZmZzZXRIZWlnaHR8fCJzY3JvbGwiPT1sLmNzcygib3ZlcmZsb3cteSIpP2YrYjpmO2lmKFQmJihq LnNjcm9sbEhlaWdodD5qLm9mZnNldEhlaWdodHx8InNjcm9sbCI9PWwuY3NzKCJvdmVyZmxvdy15 IikpKXIud2lkdGg9dihPLWIpOygiIj09PWN8fCIiIT09ZCkmJkooYSwxLCJQb3NzaWJsZSBjb2x1 bW4gbWlzYWxpZ25tZW50Iiw2KX1lbHNlIE89IjEwMCUiO3Eud2lkdGg9dihPKTtnLndpZHRoPXYo Tyk7dSYmKGEublNjcm9sbEZvb3Quc3R5bGUud2lkdGg9dihPKSk7IWUmJlQmJihxLmhlaWdodD12 KHMub2Zmc2V0SGVpZ2h0K2IpKTtjPXAub3V0ZXJXaWR0aCgpO25bMF0uc3R5bGUud2lkdGg9dihj KTtpLndpZHRoPXYoYyk7ZD1wLmhlaWdodCgpPmouY2xpZW50SGVpZ2h0fHwic2Nyb2xsIj09bC5j c3MoIm92ZXJmbG93LXkiKTtlPSJwYWRkaW5nIisKKyh4LmJTY3JvbGxiYXJMZWZ0PyJMZWZ0Ijoi UmlnaHQiKTtpW2VdPWQ/YisicHgiOiIwcHgiO3UmJihtWzBdLnN0eWxlLndpZHRoPXYoYyksdFsw XS5zdHlsZS53aWR0aD12KGMpLHRbMF0uc3R5bGVbZV09ZD9iKyJweCI6IjBweCIpO3AuY2hpbGRy ZW4oImNvbGdyb3VwIikuaW5zZXJ0QmVmb3JlKHAuY2hpbGRyZW4oInRoZWFkIikpO2wuc2Nyb2xs KCk7aWYoKGEuYlNvcnRlZHx8YS5iRmlsdGVyZWQpJiYhYS5fZHJhd0hvbGQpai5zY3JvbGxUb3A9 MH19ZnVuY3Rpb24gSChhLGIsYyl7Zm9yKHZhciBkPTAsZT0wLGY9Yi5sZW5ndGgsZyxqO2U8Zjsp e2c9YltlXS5maXJzdENoaWxkO2ZvcihqPWM/Y1tlXS5maXJzdENoaWxkOm51bGw7ZzspMT09PWcu bm9kZVR5cGUmJihjP2EoZyxqLGQpOmEoZyxkKSxkKyspLGc9Zy5uZXh0U2libGluZyxqPWM/ai5u ZXh0U2libGluZzpudWxsO2UrK319ZnVuY3Rpb24gRWEoYSl7dmFyIGI9YS5uVGFibGUsYz1hLmFv Q29sdW1ucyxkPWEub1Njcm9sbCwKK2U9ZC5zWSxmPWQuc1gsZz1kLnNYSW5uZXIsaj1jLmxlbmd0 aCxpPWxhKGEsImJWaXNpYmxlIiksbj1oKCJ0aCIsYS5uVEhlYWQpLGw9Yi5nZXRBdHRyaWJ1dGUo IndpZHRoIiksaz1iLnBhcmVudE5vZGUsdD0hMSxtLG8scD1hLm9Ccm93c2VyLGQ9cC5iU2Nyb2xs T3ZlcnNpemU7KG09Yi5zdHlsZS53aWR0aCkmJi0xIT09bS5pbmRleE9mKCIlIikmJihsPW0pO2Zv cihtPTA7bTxpLmxlbmd0aDttKyspbz1jW2lbbV1dLG51bGwhPT1vLnNXaWR0aCYmKG8uc1dpZHRo PURiKG8uc1dpZHRoT3JpZyxrKSx0PSEwKTtpZihkfHwhdCYmIWYmJiFlJiZqPT1hYShhKSYmaj09 bi5sZW5ndGgpZm9yKG09MDttPGo7bSsrKWk9WihhLG0pLG51bGwhPT1pJiYoY1tpXS5zV2lkdGg9 dihuLmVxKG0pLndpZHRoKCkpKTtlbHNle2o9aChiKS5jbG9uZSgpLmNzcygidmlzaWJpbGl0eSIs ImhpZGRlbiIpLnJlbW92ZUF0dHIoImlkIik7ai5maW5kKCJ0Ym9keSB0ciIpLnJlbW92ZSgpO3Zh ciBzPWgoIjx0ci8+IikuYXBwZW5kVG8oai5maW5kKCJ0Ym9keSIpKTsKK2ouZmluZCgidGhlYWQs IHRmb290IikucmVtb3ZlKCk7ai5hcHBlbmQoaChhLm5USGVhZCkuY2xvbmUoKSkuYXBwZW5kKGgo YS5uVEZvb3QpLmNsb25lKCkpO2ouZmluZCgidGZvb3QgdGgsIHRmb290IHRkIikuY3NzKCJ3aWR0 aCIsIiIpO249cmEoYSxqLmZpbmQoInRoZWFkIilbMF0pO2ZvcihtPTA7bTxpLmxlbmd0aDttKysp bz1jW2lbbV1dLG5bbV0uc3R5bGUud2lkdGg9bnVsbCE9PW8uc1dpZHRoT3JpZyYmIiIhPT1vLnNX aWR0aE9yaWc/dihvLnNXaWR0aE9yaWcpOiIiLG8uc1dpZHRoT3JpZyYmZiYmaChuW21dKS5hcHBl bmQoaCgiPGRpdi8+IikuY3NzKHt3aWR0aDpvLnNXaWR0aE9yaWcsbWFyZ2luOjAscGFkZGluZzow LGJvcmRlcjowLGhlaWdodDoxfSkpO2lmKGEuYW9EYXRhLmxlbmd0aClmb3IobT0wO208aS5sZW5n dGg7bSsrKXQ9aVttXSxvPWNbdF0saChFYihhLHQpKS5jbG9uZSghMSkuYXBwZW5kKG8uc0NvbnRl bnRQYWRkaW5nKS5hcHBlbmRUbyhzKTtoKCJbbmFtZV0iLAoraikucmVtb3ZlQXR0cigibmFtZSIp O289aCgiPGRpdi8+IikuY3NzKGZ8fGU/e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDow LGhlaWdodDoxLHJpZ2h0OjAsb3ZlcmZsb3c6ImhpZGRlbiJ9Ont9KS5hcHBlbmQoaikuYXBwZW5k VG8oayk7ZiYmZz9qLndpZHRoKGcpOmY/KGouY3NzKCJ3aWR0aCIsImF1dG8iKSxqLnJlbW92ZUF0 dHIoIndpZHRoIiksai53aWR0aCgpPGsuY2xpZW50V2lkdGgmJmwmJmoud2lkdGgoay5jbGllbnRX aWR0aCkpOmU/ai53aWR0aChrLmNsaWVudFdpZHRoKTpsJiZqLndpZHRoKGwpO2ZvcihtPWU9MDtt PGkubGVuZ3RoO20rKylrPWgoblttXSksZz1rLm91dGVyV2lkdGgoKS1rLndpZHRoKCksaz1wLmJC b3VuZGluZz9NYXRoLmNlaWwoblttXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk6ay5v dXRlcldpZHRoKCksZSs9ayxjW2lbbV1dLnNXaWR0aD12KGstZyk7Yi5zdHlsZS53aWR0aD12KGUp O28ucmVtb3ZlKCl9bCYmKGIuc3R5bGUud2lkdGg9Cit2KGwpKTtpZigobHx8ZikmJiFhLl9yZXN6 RXZ0KWI9ZnVuY3Rpb24oKXtoKEUpLm9uKCJyZXNpemUuRFQtIithLnNJbnN0YW5jZSxOYShmdW5j dGlvbigpe1koYSl9KSl9LGQ/c2V0VGltZW91dChiLDFFMyk6YigpLGEuX3Jlc3pFdnQ9ITB9ZnVu Y3Rpb24gRGIoYSxiKXtpZighYSlyZXR1cm4gMDt2YXIgYz1oKCI8ZGl2Lz4iKS5jc3MoIndpZHRo Iix2KGEpKS5hcHBlbmRUbyhifHxHLmJvZHkpLGQ9Y1swXS5vZmZzZXRXaWR0aDtjLnJlbW92ZSgp O3JldHVybiBkfWZ1bmN0aW9uIEViKGEsYil7dmFyIGM9RmIoYSxiKTtpZigwPmMpcmV0dXJuIG51 bGw7dmFyIGQ9YS5hb0RhdGFbY107cmV0dXJuIWQublRyP2goIjx0ZC8+IikuaHRtbChCKGEsYyxi LCJkaXNwbGF5IikpWzBdOmQuYW5DZWxsc1tiXX1mdW5jdGlvbiBGYihhLGIpe2Zvcih2YXIgYyxk PS0xLGU9LTEsZj0wLGc9YS5hb0RhdGEubGVuZ3RoO2Y8ZztmKyspYz1CKGEsZixiLCJkaXNwbGF5 IikrIiIsYz1jLnJlcGxhY2UoWWIsCisiIiksYz1jLnJlcGxhY2UoLyZuYnNwOy9nLCIgIiksYy5s ZW5ndGg+ZCYmKGQ9Yy5sZW5ndGgsZT1mKTtyZXR1cm4gZX1mdW5jdGlvbiB2KGEpe3JldHVybiBu dWxsPT09YT8iMHB4IjoibnVtYmVyIj09dHlwZW9mIGE/MD5hPyIwcHgiOmErInB4IjphLm1hdGNo KC9cZCQvKT9hKyJweCI6YX1mdW5jdGlvbiBWKGEpe3ZhciBiLGMsZD1bXSxlPWEuYW9Db2x1bW5z LGYsZyxqLGk7Yj1hLmFhU29ydGluZ0ZpeGVkO2M9aC5pc1BsYWluT2JqZWN0KGIpO3ZhciBuPVtd O2Y9ZnVuY3Rpb24oYSl7YS5sZW5ndGgmJiFoLmlzQXJyYXkoYVswXSk/bi5wdXNoKGEpOmgubWVy Z2UobixhKX07aC5pc0FycmF5KGIpJiZmKGIpO2MmJmIucHJlJiZmKGIucHJlKTtmKGEuYWFTb3J0 aW5nKTtjJiZiLnBvc3QmJmYoYi5wb3N0KTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKXtpPW5bYV1b MF07Zj1lW2ldLmFEYXRhU29ydDtiPTA7Zm9yKGM9Zi5sZW5ndGg7YjxjO2IrKylnPWZbYl0saj1l W2ddLnNUeXBlfHwKKyJzdHJpbmciLG5bYV0uX2lkeD09PWsmJihuW2FdLl9pZHg9aC5pbkFycmF5 KG5bYV1bMV0sZVtnXS5hc1NvcnRpbmcpKSxkLnB1c2goe3NyYzppLGNvbDpnLGRpcjpuW2FdWzFd LGluZGV4Om5bYV0uX2lkeCx0eXBlOmosZm9ybWF0dGVyOm0uZXh0LnR5cGUub3JkZXJbaisiLXBy ZSJdfSl9cmV0dXJuIGR9ZnVuY3Rpb24gbGIoYSl7dmFyIGIsYyxkPVtdLGU9bS5leHQudHlwZS5v cmRlcixmPWEuYW9EYXRhLGc9MCxqLGk9YS5haURpc3BsYXlNYXN0ZXIsaDtGYShhKTtoPVYoYSk7 Yj0wO2ZvcihjPWgubGVuZ3RoO2I8YztiKyspaj1oW2JdLGouZm9ybWF0dGVyJiZnKyssR2IoYSxq LmNvbCk7aWYoInNzcCIhPXkoYSkmJjAhPT1oLmxlbmd0aCl7Yj0wO2ZvcihjPWkubGVuZ3RoO2I8 YztiKyspZFtpW2JdXT1iO2c9PT1oLmxlbmd0aD9pLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgYyxl LGcsaixpPWgubGVuZ3RoLGs9ZlthXS5fYVNvcnREYXRhLG09ZltiXS5fYVNvcnREYXRhO2Zvcihn PQorMDtnPGk7ZysrKWlmKGo9aFtnXSxjPWtbai5jb2xdLGU9bVtqLmNvbF0sYz1jPGU/LTE6Yz5l PzE6MCwwIT09YylyZXR1cm4iYXNjIj09PWouZGlyP2M6LWM7Yz1kW2FdO2U9ZFtiXTtyZXR1cm4g YzxlPy0xOmM+ZT8xOjB9KTppLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgYyxnLGosaSxrPWgubGVu Z3RoLG09ZlthXS5fYVNvcnREYXRhLG89ZltiXS5fYVNvcnREYXRhO2ZvcihqPTA7ajxrO2orKylp ZihpPWhbal0sYz1tW2kuY29sXSxnPW9baS5jb2xdLGk9ZVtpLnR5cGUrIi0iK2kuZGlyXXx8ZVsi c3RyaW5nLSIraS5kaXJdLGM9aShjLGcpLDAhPT1jKXJldHVybiBjO2M9ZFthXTtnPWRbYl07cmV0 dXJuIGM8Zz8tMTpjPmc/MTowfSl9YS5iU29ydGVkPSEwfWZ1bmN0aW9uIEhiKGEpe2Zvcih2YXIg YixjLGQ9YS5hb0NvbHVtbnMsZT1WKGEpLGE9YS5vTGFuZ3VhZ2Uub0FyaWEsZj0wLGc9ZC5sZW5n dGg7ZjxnO2YrKyl7Yz1kW2ZdO3ZhciBqPWMuYXNTb3J0aW5nO2I9Yy5zVGl0bGUucmVwbGFjZSgv PC4qPz4vZywKKyIiKTt2YXIgaT1jLm5UaDtpLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1zb3J0Iik7 Yy5iU29ydGFibGUmJigwPGUubGVuZ3RoJiZlWzBdLmNvbD09Zj8oaS5zZXRBdHRyaWJ1dGUoImFy aWEtc29ydCIsImFzYyI9PWVbMF0uZGlyPyJhc2NlbmRpbmciOiJkZXNjZW5kaW5nIiksYz1qW2Vb MF0uaW5kZXgrMV18fGpbMF0pOmM9alswXSxiKz0iYXNjIj09PWM/YS5zU29ydEFzY2VuZGluZzph LnNTb3J0RGVzY2VuZGluZyk7aS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGIpfX1mdW5jdGlv biBVYShhLGIsYyxkKXt2YXIgZT1hLmFhU29ydGluZyxmPWEuYW9Db2x1bW5zW2JdLmFzU29ydGlu ZyxnPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5faWR4O2M9PT1rJiYoYz1oLmluQXJyYXkoYVsxXSxm KSk7cmV0dXJuIGMrMTxmLmxlbmd0aD9jKzE6Yj9udWxsOjB9OyJudW1iZXIiPT09dHlwZW9mIGVb MF0mJihlPWEuYWFTb3J0aW5nPVtlXSk7YyYmYS5vRmVhdHVyZXMuYlNvcnRNdWx0aT8oYz1oLmlu QXJyYXkoYiwKK0QoZSwiMCIpKSwtMSE9PWM/KGI9ZyhlW2NdLCEwKSxudWxsPT09YiYmMT09PWUu bGVuZ3RoJiYoYj0wKSxudWxsPT09Yj9lLnNwbGljZShjLDEpOihlW2NdWzFdPWZbYl0sZVtjXS5f aWR4PWIpKTooZS5wdXNoKFtiLGZbMF0sMF0pLGVbZS5sZW5ndGgtMV0uX2lkeD0wKSk6ZS5sZW5n dGgmJmVbMF1bMF09PWI/KGI9ZyhlWzBdKSxlLmxlbmd0aD0xLGVbMF1bMV09ZltiXSxlWzBdLl9p ZHg9Yik6KGUubGVuZ3RoPTAsZS5wdXNoKFtiLGZbMF1dKSxlWzBdLl9pZHg9MCk7UyhhKTsiZnVu Y3Rpb24iPT10eXBlb2YgZCYmZChhKX1mdW5jdGlvbiBMYShhLGIsYyxkKXt2YXIgZT1hLmFvQ29s dW1uc1tjXTtWYShiLHt9LGZ1bmN0aW9uKGIpeyExIT09ZS5iU29ydGFibGUmJihhLm9GZWF0dXJl cy5iUHJvY2Vzc2luZz8oQyhhLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VWEoYSxjLGIuc2hp ZnRLZXksZCk7InNzcCIhPT15KGEpJiZDKGEsITEpfSwwKSk6VWEoYSxjLGIuc2hpZnRLZXksZCkp fSl9CitmdW5jdGlvbiB3YShhKXt2YXIgYj1hLmFMYXN0U29ydCxjPWEub0NsYXNzZXMuc1NvcnRD b2x1bW4sZD1WKGEpLGU9YS5vRmVhdHVyZXMsZixnO2lmKGUuYlNvcnQmJmUuYlNvcnRDbGFzc2Vz KXtlPTA7Zm9yKGY9Yi5sZW5ndGg7ZTxmO2UrKylnPWJbZV0uc3JjLGgoRChhLmFvRGF0YSwiYW5D ZWxscyIsZykpLnJlbW92ZUNsYXNzKGMrKDI+ZT9lKzE6MykpO2U9MDtmb3IoZj1kLmxlbmd0aDtl PGY7ZSsrKWc9ZFtlXS5zcmMsaChEKGEuYW9EYXRhLCJhbkNlbGxzIixnKSkuYWRkQ2xhc3MoYyso Mj5lP2UrMTozKSl9YS5hTGFzdFNvcnQ9ZH1mdW5jdGlvbiBHYihhLGIpe3ZhciBjPWEuYW9Db2x1 bW5zW2JdLGQ9bS5leHQub3JkZXJbYy5zU29ydERhdGFUeXBlXSxlO2QmJihlPWQuY2FsbChhLm9J bnN0YW5jZSxhLGIsJChhLGIpKSk7Zm9yKHZhciBmLGc9bS5leHQudHlwZS5vcmRlcltjLnNUeXBl KyItcHJlIl0saj0wLGk9YS5hb0RhdGEubGVuZ3RoO2o8aTtqKyspaWYoYz1hLmFvRGF0YVtqXSwK K2MuX2FTb3J0RGF0YXx8KGMuX2FTb3J0RGF0YT1bXSksIWMuX2FTb3J0RGF0YVtiXXx8ZClmPWQ/ ZVtqXTpCKGEsaixiLCJzb3J0IiksYy5fYVNvcnREYXRhW2JdPWc/ZyhmKTpmfWZ1bmN0aW9uIHhh KGEpe2lmKGEub0ZlYXR1cmVzLmJTdGF0ZVNhdmUmJiFhLmJEZXN0cm95aW5nKXt2YXIgYj17dGlt ZTorbmV3IERhdGUsc3RhcnQ6YS5faURpc3BsYXlTdGFydCxsZW5ndGg6YS5faURpc3BsYXlMZW5n dGgsb3JkZXI6aC5leHRlbmQoITAsW10sYS5hYVNvcnRpbmcpLHNlYXJjaDp6YihhLm9QcmV2aW91 c1NlYXJjaCksY29sdW1uczpoLm1hcChhLmFvQ29sdW1ucyxmdW5jdGlvbihiLGQpe3JldHVybnt2 aXNpYmxlOmIuYlZpc2libGUsc2VhcmNoOnpiKGEuYW9QcmVTZWFyY2hDb2xzW2RdKX19KX07cihh LCJhb1N0YXRlU2F2ZVBhcmFtcyIsInN0YXRlU2F2ZVBhcmFtcyIsW2EsYl0pO2Eub1NhdmVkU3Rh dGU9YjthLmZuU3RhdGVTYXZlQ2FsbGJhY2suY2FsbChhLm9JbnN0YW5jZSxhLAorYil9fWZ1bmN0 aW9uIEliKGEsYixjKXt2YXIgZCxlLGY9YS5hb0NvbHVtbnMsYj1mdW5jdGlvbihiKXtpZihiJiZi LnRpbWUpe3ZhciBnPXIoYSwiYW9TdGF0ZUxvYWRQYXJhbXMiLCJzdGF0ZUxvYWRQYXJhbXMiLFth LGJdKTtpZigtMT09PWguaW5BcnJheSghMSxnKSYmKGc9YS5pU3RhdGVEdXJhdGlvbiwhKDA8ZyYm Yi50aW1lPCtuZXcgRGF0ZS0xRTMqZykmJiEoYi5jb2x1bW5zJiZmLmxlbmd0aCE9PWIuY29sdW1u cy5sZW5ndGgpKSl7YS5vTG9hZGVkU3RhdGU9aC5leHRlbmQoITAse30sYik7Yi5zdGFydCE9PWsm JihhLl9pRGlzcGxheVN0YXJ0PWIuc3RhcnQsYS5pSW5pdERpc3BsYXlTdGFydD1iLnN0YXJ0KTti Lmxlbmd0aCE9PWsmJihhLl9pRGlzcGxheUxlbmd0aD1iLmxlbmd0aCk7Yi5vcmRlciE9PWsmJihh LmFhU29ydGluZz1bXSxoLmVhY2goYi5vcmRlcixmdW5jdGlvbihiLGMpe2EuYWFTb3J0aW5nLnB1 c2goY1swXT49Zi5sZW5ndGg/WzAsY1sxXV06Yyl9KSk7Yi5zZWFyY2ghPT0KK2smJmguZXh0ZW5k KGEub1ByZXZpb3VzU2VhcmNoLEFiKGIuc2VhcmNoKSk7aWYoYi5jb2x1bW5zKXtkPTA7Zm9yKGU9 Yi5jb2x1bW5zLmxlbmd0aDtkPGU7ZCsrKWc9Yi5jb2x1bW5zW2RdLGcudmlzaWJsZSE9PWsmJihm W2RdLmJWaXNpYmxlPWcudmlzaWJsZSksZy5zZWFyY2ghPT1rJiZoLmV4dGVuZChhLmFvUHJlU2Vh cmNoQ29sc1tkXSxBYihnLnNlYXJjaCkpfXIoYSwiYW9TdGF0ZUxvYWRlZCIsInN0YXRlTG9hZGVk IixbYSxiXSl9fWMoKX07aWYoYS5vRmVhdHVyZXMuYlN0YXRlU2F2ZSl7dmFyIGc9YS5mblN0YXRl TG9hZENhbGxiYWNrLmNhbGwoYS5vSW5zdGFuY2UsYSxiKTtnIT09ayYmYihnKX1lbHNlIGMoKX1m dW5jdGlvbiB5YShhKXt2YXIgYj1tLnNldHRpbmdzLGE9aC5pbkFycmF5KGEsRChiLCJuVGFibGUi KSk7cmV0dXJuLTEhPT1hP2JbYV06bnVsbH1mdW5jdGlvbiBKKGEsYixjLGQpe2M9IkRhdGFUYWJs ZXMgd2FybmluZzogIisoYT8idGFibGUgaWQ9IithLnNUYWJsZUlkKworIiAtICI6IiIpK2M7ZCYm KGMrPSIuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZXJyb3IsIHBsZWFzZSBzZWUg aHR0cDovL2RhdGF0YWJsZXMubmV0L3RuLyIrZCk7aWYoYilFLmNvbnNvbGUmJmNvbnNvbGUubG9n JiZjb25zb2xlLmxvZyhjKTtlbHNlIGlmKGI9bS5leHQsYj1iLnNFcnJNb2RlfHxiLmVyck1vZGUs YSYmcihhLG51bGwsImVycm9yIixbYSxkLGNdKSwiYWxlcnQiPT1iKWFsZXJ0KGMpO2Vsc2V7aWYo InRocm93Ij09Yil0aHJvdyBFcnJvcihjKTsiZnVuY3Rpb24iPT10eXBlb2YgYiYmYihhLGQsYyl9 fWZ1bmN0aW9uIEYoYSxiLGMsZCl7aC5pc0FycmF5KGMpP2guZWFjaChjLGZ1bmN0aW9uKGMsZCl7 aC5pc0FycmF5KGQpP0YoYSxiLGRbMF0sZFsxXSk6RihhLGIsZCl9KTooZD09PWsmJihkPWMpLGJb Y10hPT1rJiYoYVtkXT1iW2NdKSl9ZnVuY3Rpb24gSmIoYSxiLGMpe3ZhciBkLGU7Zm9yKGUgaW4g YiliLmhhc093blByb3BlcnR5KGUpJiYoZD1iW2VdLAoraC5pc1BsYWluT2JqZWN0KGQpPyhoLmlz UGxhaW5PYmplY3QoYVtlXSl8fChhW2VdPXt9KSxoLmV4dGVuZCghMCxhW2VdLGQpKTphW2VdPWMm JiJkYXRhIiE9PWUmJiJhYURhdGEiIT09ZSYmaC5pc0FycmF5KGQpP2Quc2xpY2UoKTpkKTtyZXR1 cm4gYX1mdW5jdGlvbiBWYShhLGIsYyl7aChhKS5vbigiY2xpY2suRFQiLGIsZnVuY3Rpb24oYil7 YS5ibHVyKCk7YyhiKX0pLm9uKCJrZXlwcmVzcy5EVCIsYixmdW5jdGlvbihhKXsxMz09PWEud2hp Y2gmJihhLnByZXZlbnREZWZhdWx0KCksYyhhKSl9KS5vbigic2VsZWN0c3RhcnQuRFQiLGZ1bmN0 aW9uKCl7cmV0dXJuITF9KX1mdW5jdGlvbiB6KGEsYixjLGQpe2MmJmFbYl0ucHVzaCh7Zm46Yyxz TmFtZTpkfSl9ZnVuY3Rpb24gcihhLGIsYyxkKXt2YXIgZT1bXTtiJiYoZT1oLm1hcChhW2JdLnNs aWNlKCkucmV2ZXJzZSgpLGZ1bmN0aW9uKGIpe3JldHVybiBiLmZuLmFwcGx5KGEub0luc3RhbmNl LGQpfSkpO251bGwhPT1jJiYoYj1oLkV2ZW50KGMrCisiLmR0IiksaChhLm5UYWJsZSkudHJpZ2dl cihiLGQpLGUucHVzaChiLnJlc3VsdCkpO3JldHVybiBlfWZ1bmN0aW9uIFJhKGEpe3ZhciBiPWEu X2lEaXNwbGF5U3RhcnQsYz1hLmZuRGlzcGxheUVuZCgpLGQ9YS5faURpc3BsYXlMZW5ndGg7Yj49 YyYmKGI9Yy1kKTtiLT1iJWQ7aWYoLTE9PT1kfHwwPmIpYj0wO2EuX2lEaXNwbGF5U3RhcnQ9Yn1m dW5jdGlvbiBNYShhLGIpe3ZhciBjPWEucmVuZGVyZXIsZD1tLmV4dC5yZW5kZXJlcltiXTtyZXR1 cm4gaC5pc1BsYWluT2JqZWN0KGMpJiZjW2JdP2RbY1tiXV18fGQuXzoic3RyaW5nIj09PXR5cGVv ZiBjP2RbY118fGQuXzpkLl99ZnVuY3Rpb24geShhKXtyZXR1cm4gYS5vRmVhdHVyZXMuYlNlcnZl clNpZGU/InNzcCI6YS5hamF4fHxhLnNBamF4U291cmNlPyJhamF4IjoiZG9tIn1mdW5jdGlvbiBo YShhLGIpe3ZhciBjPVtdLGM9S2IubnVtYmVyc19sZW5ndGgsZD1NYXRoLmZsb29yKGMvMik7Yjw9 Yz9jPVcoMCxiKTphPD1kPyhjPVcoMCwKK2MtMiksYy5wdXNoKCJlbGxpcHNpcyIpLGMucHVzaChi LTEpKTooYT49Yi0xLWQ/Yz1XKGItKGMtMiksYik6KGM9VyhhLWQrMixhK2QtMSksYy5wdXNoKCJl bGxpcHNpcyIpLGMucHVzaChiLTEpKSxjLnNwbGljZSgwLDAsImVsbGlwc2lzIiksYy5zcGxpY2Uo MCwwLDApKTtjLkRUX2VsPSJzcGFuIjtyZXR1cm4gY31mdW5jdGlvbiBjYihhKXtoLmVhY2goe251 bTpmdW5jdGlvbihiKXtyZXR1cm4gemEoYixhKX0sIm51bS1mbXQiOmZ1bmN0aW9uKGIpe3JldHVy biB6YShiLGEsV2EpfSwiaHRtbC1udW0iOmZ1bmN0aW9uKGIpe3JldHVybiB6YShiLGEsQWEpfSwi aHRtbC1udW0tZm10IjpmdW5jdGlvbihiKXtyZXR1cm4gemEoYixhLEFhLFdhKX19LGZ1bmN0aW9u KGIsYyl7eC50eXBlLm9yZGVyW2IrYSsiLXByZSJdPWM7Yi5tYXRjaCgvXmh0bWxcLS8pJiYoeC50 eXBlLnNlYXJjaFtiK2FdPXgudHlwZS5zZWFyY2guaHRtbCl9KX1mdW5jdGlvbiBMYihhKXtyZXR1 cm4gZnVuY3Rpb24oKXt2YXIgYj0KK1t5YSh0aGlzW20uZXh0LmlBcGlJbmRleF0pXS5jb25jYXQo QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIG0uZXh0LmludGVy bmFsW2FdLmFwcGx5KHRoaXMsYil9fXZhciBtPWZ1bmN0aW9uKGEpe3RoaXMuJD1mdW5jdGlvbihh LGIpe3JldHVybiB0aGlzLmFwaSghMCkuJChhLGIpfTt0aGlzLl89ZnVuY3Rpb24oYSxiKXtyZXR1 cm4gdGhpcy5hcGkoITApLnJvd3MoYSxiKS5kYXRhKCl9O3RoaXMuYXBpPWZ1bmN0aW9uKGEpe3Jl dHVybiBhP25ldyBzKHlhKHRoaXNbeC5pQXBpSW5kZXhdKSk6bmV3IHModGhpcyl9O3RoaXMuZm5B ZGREYXRhPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5hcGkoITApLGQ9aC5pc0FycmF5KGEpJiYo aC5pc0FycmF5KGFbMF0pfHxoLmlzUGxhaW5PYmplY3QoYVswXSkpP2Mucm93cy5hZGQoYSk6Yy5y b3cuYWRkKGEpOyhiPT09a3x8YikmJmMuZHJhdygpO3JldHVybiBkLmZsYXR0ZW4oKS50b0FycmF5 KCl9O3RoaXMuZm5BZGp1c3RDb2x1bW5TaXppbmc9CitmdW5jdGlvbihhKXt2YXIgYj10aGlzLmFw aSghMCkuY29sdW1ucy5hZGp1c3QoKSxjPWIuc2V0dGluZ3MoKVswXSxkPWMub1Njcm9sbDthPT09 a3x8YT9iLmRyYXcoITEpOigiIiE9PWQuc1h8fCIiIT09ZC5zWSkmJmthKGMpfTt0aGlzLmZuQ2xl YXJUYWJsZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmFwaSghMCkuY2xlYXIoKTsoYT09PWt8fGEp JiZiLmRyYXcoKX07dGhpcy5mbkNsb3NlPWZ1bmN0aW9uKGEpe3RoaXMuYXBpKCEwKS5yb3coYSku Y2hpbGQuaGlkZSgpfTt0aGlzLmZuRGVsZXRlUm93PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlz LmFwaSghMCksYT1kLnJvd3MoYSksZT1hLnNldHRpbmdzKClbMF0saD1lLmFvRGF0YVthWzBdWzBd XTthLnJlbW92ZSgpO2ImJmIuY2FsbCh0aGlzLGUsaCk7KGM9PT1rfHxjKSYmZC5kcmF3KCk7cmV0 dXJuIGh9O3RoaXMuZm5EZXN0cm95PWZ1bmN0aW9uKGEpe3RoaXMuYXBpKCEwKS5kZXN0cm95KGEp fTt0aGlzLmZuRHJhdz1mdW5jdGlvbihhKXt0aGlzLmFwaSghMCkuZHJhdyhhKX07Cit0aGlzLmZu RmlsdGVyPWZ1bmN0aW9uKGEsYixjLGQsZSxoKXtlPXRoaXMuYXBpKCEwKTtudWxsPT09Ynx8Yj09 PWs/ZS5zZWFyY2goYSxjLGQsaCk6ZS5jb2x1bW4oYikuc2VhcmNoKGEsYyxkLGgpO2UuZHJhdygp fTt0aGlzLmZuR2V0RGF0YT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuYXBpKCEwKTtpZihhIT09 ayl7dmFyIGQ9YS5ub2RlTmFtZT9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk6IiI7cmV0dXJuIGIh PT1rfHwidGQiPT1kfHwidGgiPT1kP2MuY2VsbChhLGIpLmRhdGEoKTpjLnJvdyhhKS5kYXRhKCl8 fG51bGx9cmV0dXJuIGMuZGF0YSgpLnRvQXJyYXkoKX07dGhpcy5mbkdldE5vZGVzPWZ1bmN0aW9u KGEpe3ZhciBiPXRoaXMuYXBpKCEwKTtyZXR1cm4gYSE9PWs/Yi5yb3coYSkubm9kZSgpOmIucm93 cygpLm5vZGVzKCkuZmxhdHRlbigpLnRvQXJyYXkoKX07dGhpcy5mbkdldFBvc2l0aW9uPWZ1bmN0 aW9uKGEpe3ZhciBiPXRoaXMuYXBpKCEwKSxjPWEubm9kZU5hbWUudG9VcHBlckNhc2UoKTsKK3Jl dHVybiJUUiI9PWM/Yi5yb3coYSkuaW5kZXgoKToiVEQiPT1jfHwiVEgiPT1jPyhhPWIuY2VsbChh KS5pbmRleCgpLFthLnJvdyxhLmNvbHVtblZpc2libGUsYS5jb2x1bW5dKTpudWxsfTt0aGlzLmZu SXNPcGVuPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFwaSghMCkucm93KGEpLmNoaWxkLmlzU2hv d24oKX07dGhpcy5mbk9wZW49ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLmFwaSghMCkucm93 KGEpLmNoaWxkKGIsYykuc2hvdygpLmNoaWxkKClbMF19O3RoaXMuZm5QYWdlQ2hhbmdlPWZ1bmN0 aW9uKGEsYil7dmFyIGM9dGhpcy5hcGkoITApLnBhZ2UoYSk7KGI9PT1rfHxiKSYmYy5kcmF3KCEx KX07dGhpcy5mblNldENvbHVtblZpcz1mdW5jdGlvbihhLGIsYyl7YT10aGlzLmFwaSghMCkuY29s dW1uKGEpLnZpc2libGUoYik7KGM9PT1rfHxjKSYmYS5jb2x1bW5zLmFkanVzdCgpLmRyYXcoKX07 dGhpcy5mblNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIHlhKHRoaXNbeC5pQXBpSW5kZXhdKX07 Cit0aGlzLmZuU29ydD1mdW5jdGlvbihhKXt0aGlzLmFwaSghMCkub3JkZXIoYSkuZHJhdygpfTt0 aGlzLmZuU29ydExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmFwaSghMCkub3JkZXIubGlz dGVuZXIoYSxiLGMpfTt0aGlzLmZuVXBkYXRlPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGg9dGhp cy5hcGkoITApO2M9PT1rfHxudWxsPT09Yz9oLnJvdyhiKS5kYXRhKGEpOmguY2VsbChiLGMpLmRh dGEoYSk7KGU9PT1rfHxlKSYmaC5jb2x1bW5zLmFkanVzdCgpOyhkPT09a3x8ZCkmJmguZHJhdygp O3JldHVybiAwfTt0aGlzLmZuVmVyc2lvbkNoZWNrPXguZm5WZXJzaW9uQ2hlY2s7dmFyIGI9dGhp cyxjPWE9PT1rLGQ9dGhpcy5sZW5ndGg7YyYmKGE9e30pO3RoaXMub0FwaT10aGlzLmludGVybmFs PXguaW50ZXJuYWw7Zm9yKHZhciBlIGluIG0uZXh0LmludGVybmFsKWUmJih0aGlzW2VdPUxiKGUp KTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT17fSxnPTE8ZD9KYihlLGEsITApOgorYSxqPTAs aSxlPXRoaXMuZ2V0QXR0cmlidXRlKCJpZCIpLG49ITEsbD1tLmRlZmF1bHRzLHE9aCh0aGlzKTtp ZigidGFibGUiIT10aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpSihudWxsLDAsIk5vbi10YWJs ZSBub2RlIGluaXRpYWxpc2F0aW9uICgiK3RoaXMubm9kZU5hbWUrIikiLDIpO2Vsc2V7ZGIobCk7 ZWIobC5jb2x1bW4pO0kobCxsLCEwKTtJKGwuY29sdW1uLGwuY29sdW1uLCEwKTtJKGwsaC5leHRl bmQoZyxxLmRhdGEoKSkpO3ZhciB0PW0uc2V0dGluZ3Msaj0wO2ZvcihpPXQubGVuZ3RoO2o8aTtq Kyspe3ZhciBvPXRbal07aWYoby5uVGFibGU9PXRoaXN8fG8ublRIZWFkLnBhcmVudE5vZGU9PXRo aXN8fG8ublRGb290JiZvLm5URm9vdC5wYXJlbnROb2RlPT10aGlzKXt2YXIgcz1nLmJSZXRyaWV2 ZSE9PWs/Zy5iUmV0cmlldmU6bC5iUmV0cmlldmU7aWYoY3x8cylyZXR1cm4gby5vSW5zdGFuY2U7 aWYoZy5iRGVzdHJveSE9PWs/Zy5iRGVzdHJveTpsLmJEZXN0cm95KXtvLm9JbnN0YW5jZS5mbkRl c3Ryb3koKTsKK2JyZWFrfWVsc2V7SihvLDAsIkNhbm5vdCByZWluaXRpYWxpc2UgRGF0YVRhYmxl IiwzKTtyZXR1cm59fWlmKG8uc1RhYmxlSWQ9PXRoaXMuaWQpe3Quc3BsaWNlKGosMSk7YnJlYWt9 fWlmKG51bGw9PT1lfHwiIj09PWUpdGhpcy5pZD1lPSJEYXRhVGFibGVzX1RhYmxlXyIrbS5leHQu X3VuaXF1ZSsrO3ZhciBwPWguZXh0ZW5kKCEwLHt9LG0ubW9kZWxzLm9TZXR0aW5ncyx7c0Rlc3Ry b3lXaWR0aDpxWzBdLnN0eWxlLndpZHRoLHNJbnN0YW5jZTplLHNUYWJsZUlkOmV9KTtwLm5UYWJs ZT10aGlzO3Aub0FwaT1iLmludGVybmFsO3Aub0luaXQ9Zzt0LnB1c2gocCk7cC5vSW5zdGFuY2U9 MT09PWIubGVuZ3RoP2I6cS5kYXRhVGFibGUoKTtkYihnKTtnLm9MYW5ndWFnZSYmQ2EoZy5vTGFu Z3VhZ2UpO2cuYUxlbmd0aE1lbnUmJiFnLmlEaXNwbGF5TGVuZ3RoJiYoZy5pRGlzcGxheUxlbmd0 aD1oLmlzQXJyYXkoZy5hTGVuZ3RoTWVudVswXSk/Zy5hTGVuZ3RoTWVudVswXVswXTpnLmFMZW5n dGhNZW51WzBdKTsKK2c9SmIoaC5leHRlbmQoITAse30sbCksZyk7RihwLm9GZWF0dXJlcyxnLCJi UGFnaW5hdGUgYkxlbmd0aENoYW5nZSBiRmlsdGVyIGJTb3J0IGJTb3J0TXVsdGkgYkluZm8gYlBy b2Nlc3NpbmcgYkF1dG9XaWR0aCBiU29ydENsYXNzZXMgYlNlcnZlclNpZGUgYkRlZmVyUmVuZGVy Ii5zcGxpdCgiICIpKTtGKHAsZyxbImFzU3RyaXBlQ2xhc3NlcyIsImFqYXgiLCJmblNlcnZlckRh dGEiLCJmbkZvcm1hdE51bWJlciIsInNTZXJ2ZXJNZXRob2QiLCJhYVNvcnRpbmciLCJhYVNvcnRp bmdGaXhlZCIsImFMZW5ndGhNZW51Iiwic1BhZ2luYXRpb25UeXBlIiwic0FqYXhTb3VyY2UiLCJz QWpheERhdGFQcm9wIiwiaVN0YXRlRHVyYXRpb24iLCJzRG9tIiwiYlNvcnRDZWxsc1RvcCIsImlU YWJJbmRleCIsImZuU3RhdGVMb2FkQ2FsbGJhY2siLCJmblN0YXRlU2F2ZUNhbGxiYWNrIiwicmVu ZGVyZXIiLCJzZWFyY2hEZWxheSIsInJvd0lkIixbImlDb29raWVEdXJhdGlvbiIsImlTdGF0ZUR1 cmF0aW9uIl0sCitbIm9TZWFyY2giLCJvUHJldmlvdXNTZWFyY2giXSxbImFvU2VhcmNoQ29scyIs ImFvUHJlU2VhcmNoQ29scyJdLFsiaURpc3BsYXlMZW5ndGgiLCJfaURpc3BsYXlMZW5ndGgiXV0p O0YocC5vU2Nyb2xsLGcsW1sic1Njcm9sbFgiLCJzWCJdLFsic1Njcm9sbFhJbm5lciIsInNYSW5u ZXIiXSxbInNTY3JvbGxZIiwic1kiXSxbImJTY3JvbGxDb2xsYXBzZSIsImJDb2xsYXBzZSJdXSk7 RihwLm9MYW5ndWFnZSxnLCJmbkluZm9DYWxsYmFjayIpO3oocCwiYW9EcmF3Q2FsbGJhY2siLGcu Zm5EcmF3Q2FsbGJhY2ssInVzZXIiKTt6KHAsImFvU2VydmVyUGFyYW1zIixnLmZuU2VydmVyUGFy YW1zLCJ1c2VyIik7eihwLCJhb1N0YXRlU2F2ZVBhcmFtcyIsZy5mblN0YXRlU2F2ZVBhcmFtcywi dXNlciIpO3oocCwiYW9TdGF0ZUxvYWRQYXJhbXMiLGcuZm5TdGF0ZUxvYWRQYXJhbXMsInVzZXIi KTt6KHAsImFvU3RhdGVMb2FkZWQiLGcuZm5TdGF0ZUxvYWRlZCwidXNlciIpO3oocCwiYW9Sb3dD YWxsYmFjayIsCitnLmZuUm93Q2FsbGJhY2ssInVzZXIiKTt6KHAsImFvUm93Q3JlYXRlZENhbGxi YWNrIixnLmZuQ3JlYXRlZFJvdywidXNlciIpO3oocCwiYW9IZWFkZXJDYWxsYmFjayIsZy5mbkhl YWRlckNhbGxiYWNrLCJ1c2VyIik7eihwLCJhb0Zvb3RlckNhbGxiYWNrIixnLmZuRm9vdGVyQ2Fs bGJhY2ssInVzZXIiKTt6KHAsImFvSW5pdENvbXBsZXRlIixnLmZuSW5pdENvbXBsZXRlLCJ1c2Vy Iik7eihwLCJhb1ByZURyYXdDYWxsYmFjayIsZy5mblByZURyYXdDYWxsYmFjaywidXNlciIpO3Au cm93SWRGbj1RKGcucm93SWQpO2ZiKHApO3ZhciB1PXAub0NsYXNzZXM7aC5leHRlbmQodSxtLmV4 dC5jbGFzc2VzLGcub0NsYXNzZXMpO3EuYWRkQ2xhc3ModS5zVGFibGUpO3AuaUluaXREaXNwbGF5 U3RhcnQ9PT1rJiYocC5pSW5pdERpc3BsYXlTdGFydD1nLmlEaXNwbGF5U3RhcnQscC5faURpc3Bs YXlTdGFydD1nLmlEaXNwbGF5U3RhcnQpO251bGwhPT1nLmlEZWZlckxvYWRpbmcmJihwLmJEZWZl ckxvYWRpbmc9CishMCxlPWguaXNBcnJheShnLmlEZWZlckxvYWRpbmcpLHAuX2lSZWNvcmRzRGlz cGxheT1lP2cuaURlZmVyTG9hZGluZ1swXTpnLmlEZWZlckxvYWRpbmcscC5faVJlY29yZHNUb3Rh bD1lP2cuaURlZmVyTG9hZGluZ1sxXTpnLmlEZWZlckxvYWRpbmcpO3ZhciB2PXAub0xhbmd1YWdl O2guZXh0ZW5kKCEwLHYsZy5vTGFuZ3VhZ2UpO3Yuc1VybCYmKGguYWpheCh7ZGF0YVR5cGU6Impz b24iLHVybDp2LnNVcmwsc3VjY2VzczpmdW5jdGlvbihhKXtDYShhKTtJKGwub0xhbmd1YWdlLGEp O2guZXh0ZW5kKHRydWUsdixhKTtnYShwKX0sZXJyb3I6ZnVuY3Rpb24oKXtnYShwKX19KSxuPSEw KTtudWxsPT09Zy5hc1N0cmlwZUNsYXNzZXMmJihwLmFzU3RyaXBlQ2xhc3Nlcz1bdS5zU3RyaXBl T2RkLHUuc1N0cmlwZUV2ZW5dKTt2YXIgZT1wLmFzU3RyaXBlQ2xhc3Nlcyx4PXEuY2hpbGRyZW4o InRib2R5IikuZmluZCgidHIiKS5lcSgwKTstMSE9PWguaW5BcnJheSghMCxoLm1hcChlLGZ1bmN0 aW9uKGEpe3JldHVybiB4Lmhhc0NsYXNzKGEpfSkpJiYKKyhoKCJ0Ym9keSB0ciIsdGhpcykucmVt b3ZlQ2xhc3MoZS5qb2luKCIgIikpLHAuYXNEZXN0cm95U3RyaXBlcz1lLnNsaWNlKCkpO2U9W107 dD10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aGVhZCIpOzAhPT10Lmxlbmd0aCYmKGRhKHAu YW9IZWFkZXIsdFswXSksZT1yYShwKSk7aWYobnVsbD09PWcuYW9Db2x1bW5zKXt0PVtdO2o9MDtm b3IoaT1lLmxlbmd0aDtqPGk7aisrKXQucHVzaChudWxsKX1lbHNlIHQ9Zy5hb0NvbHVtbnM7aj0w O2ZvcihpPXQubGVuZ3RoO2o8aTtqKyspRGEocCxlP2Vbal06bnVsbCk7aGIocCxnLmFvQ29sdW1u RGVmcyx0LGZ1bmN0aW9uKGEsYil7amEocCxhLGIpfSk7aWYoeC5sZW5ndGgpe3ZhciB3PWZ1bmN0 aW9uKGEsYil7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrYikhPT1udWxsP2I6bnVsbH07 aCh4WzBdKS5jaGlsZHJlbigidGgsIHRkIikuZWFjaChmdW5jdGlvbihhLGIpe3ZhciBjPXAuYW9D b2x1bW5zW2FdO2lmKGMubURhdGE9PT0KK2Epe3ZhciBkPXcoYiwic29ydCIpfHx3KGIsIm9yZGVy IiksZT13KGIsImZpbHRlciIpfHx3KGIsInNlYXJjaCIpO2lmKGQhPT1udWxsfHxlIT09bnVsbCl7 Yy5tRGF0YT17XzphKyIuZGlzcGxheSIsc29ydDpkIT09bnVsbD9hKyIuQGRhdGEtIitkOmssdHlw ZTpkIT09bnVsbD9hKyIuQGRhdGEtIitkOmssZmlsdGVyOmUhPT1udWxsP2ErIi5AZGF0YS0iK2U6 a307amEocCxhKX19fSl9dmFyIFQ9cC5vRmVhdHVyZXMsZT1mdW5jdGlvbigpe2lmKGcuYWFTb3J0 aW5nPT09ayl7dmFyIGE9cC5hYVNvcnRpbmc7aj0wO2ZvcihpPWEubGVuZ3RoO2o8aTtqKyspYVtq XVsxXT1wLmFvQ29sdW1uc1tqXS5hc1NvcnRpbmdbMF19d2EocCk7VC5iU29ydCYmeihwLCJhb0Ry YXdDYWxsYmFjayIsZnVuY3Rpb24oKXtpZihwLmJTb3J0ZWQpe3ZhciBhPVYocCksYj17fTtoLmVh Y2goYSxmdW5jdGlvbihhLGMpe2JbYy5zcmNdPWMuZGlyfSk7cihwLG51bGwsIm9yZGVyIixbcCxh LGJdKTtIYihwKX19KTsKK3oocCwiYW9EcmF3Q2FsbGJhY2siLGZ1bmN0aW9uKCl7KHAuYlNvcnRl ZHx8eShwKT09PSJzc3AifHxULmJEZWZlclJlbmRlcikmJndhKHApfSwic2MiKTt2YXIgYT1xLmNo aWxkcmVuKCJjYXB0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuX2NhcHRpb25TaWRlPWgodGhp cykuY3NzKCJjYXB0aW9uLXNpZGUiKX0pLGI9cS5jaGlsZHJlbigidGhlYWQiKTtiLmxlbmd0aD09 PTAmJihiPWgoIjx0aGVhZC8+IikuYXBwZW5kVG8ocSkpO3AublRIZWFkPWJbMF07Yj1xLmNoaWxk cmVuKCJ0Ym9keSIpO2IubGVuZ3RoPT09MCYmKGI9aCgiPHRib2R5Lz4iKS5hcHBlbmRUbyhxKSk7 cC5uVEJvZHk9YlswXTtiPXEuY2hpbGRyZW4oInRmb290Iik7aWYoYi5sZW5ndGg9PT0wJiZhLmxl bmd0aD4wJiYocC5vU2Nyb2xsLnNYIT09IiJ8fHAub1Njcm9sbC5zWSE9PSIiKSliPWgoIjx0Zm9v dC8+IikuYXBwZW5kVG8ocSk7aWYoYi5sZW5ndGg9PT0wfHxiLmNoaWxkcmVuKCkubGVuZ3RoPT09 MClxLmFkZENsYXNzKHUuc05vRm9vdGVyKTsKK2Vsc2UgaWYoYi5sZW5ndGg+MCl7cC5uVEZvb3Q9 YlswXTtkYShwLmFvRm9vdGVyLHAublRGb290KX1pZihnLmFhRGF0YSlmb3Ioaj0wO2o8Zy5hYURh dGEubGVuZ3RoO2orKylNKHAsZy5hYURhdGFbal0pO2Vsc2UocC5iRGVmZXJMb2FkaW5nfHx5KHAp PT0iZG9tIikmJm1hKHAsaChwLm5UQm9keSkuY2hpbGRyZW4oInRyIikpO3AuYWlEaXNwbGF5PXAu YWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7cC5iSW5pdGlhbGlzZWQ9dHJ1ZTtuPT09ZmFsc2UmJmdh KHApfTtnLmJTdGF0ZVNhdmU/KFQuYlN0YXRlU2F2ZT0hMCx6KHAsImFvRHJhd0NhbGxiYWNrIix4 YSwic3RhdGVfc2F2ZSIpLEliKHAsZyxlKSk6ZSgpfX0pO2I9bnVsbDtyZXR1cm4gdGhpc30seCxz LG8sdSxYYT17fSxNYj0vW1xyXG5dL2csQWE9LzwuKj8+L2csWmI9L15cZHsyLDR9W1wuXC9cLV1c ZHsxLDJ9W1wuXC9cLV1cZHsxLDJ9KFtUIF17MX1cZHsxLDJ9WzpcLl1cZHsyfShbXC46XVxkezJ9 KT8pPyQvLCRiPVJlZ0V4cCgiKFxcL3xcXC58XFwqfFxcK3xcXD98XFx8fFxcKHxcXCl8XFxbfFxc XXxcXHt8XFx9fFxcXFx8XFwkfFxcXnxcXC0pIiwKKyJnIiksV2E9L1snLCTCo+KCrMKlJVx1MjAw OVx1MjAyRlx1MjBCRFx1MjBhOVx1MjBCQXJma10vZ2ksTD1mdW5jdGlvbihhKXtyZXR1cm4hYXx8 ITA9PT1hfHwiLSI9PT1hPyEwOiExfSxOYj1mdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChhLDEw KTtyZXR1cm4haXNOYU4oYikmJmlzRmluaXRlKGEpP2I6bnVsbH0sT2I9ZnVuY3Rpb24oYSxiKXtY YVtiXXx8KFhhW2JdPVJlZ0V4cChQYShiKSwiZyIpKTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBh JiYiLiIhPT1iP2EucmVwbGFjZSgvXC4vZywiIikucmVwbGFjZShYYVtiXSwiLiIpOmF9LFlhPWZ1 bmN0aW9uKGEsYixjKXt2YXIgZD0ic3RyaW5nIj09PXR5cGVvZiBhO2lmKEwoYSkpcmV0dXJuITA7 YiYmZCYmKGE9T2IoYSxiKSk7YyYmZCYmKGE9YS5yZXBsYWNlKFdhLCIiKSk7cmV0dXJuIWlzTmFO KHBhcnNlRmxvYXQoYSkpJiZpc0Zpbml0ZShhKX0sUGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBM KGEpPyEwOiEoTChhKXx8InN0cmluZyI9PT0KK3R5cGVvZiBhKT9udWxsOllhKGEucmVwbGFjZShB YSwiIiksYixjKT8hMDpudWxsfSxEPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPTAsZj1hLmxl bmd0aDtpZihjIT09aylmb3IoO2U8ZjtlKyspYVtlXSYmYVtlXVtiXSYmZC5wdXNoKGFbZV1bYl1b Y10pO2Vsc2UgZm9yKDtlPGY7ZSsrKWFbZV0mJmQucHVzaChhW2VdW2JdKTtyZXR1cm4gZH0saWE9 ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9W10sZj0wLGc9Yi5sZW5ndGg7aWYoZCE9PWspZm9yKDtm PGc7ZisrKWFbYltmXV1bY10mJmUucHVzaChhW2JbZl1dW2NdW2RdKTtlbHNlIGZvcig7ZjxnO2Yr KyllLnB1c2goYVtiW2ZdXVtjXSk7cmV0dXJuIGV9LFc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxk O2I9PT1rPyhiPTAsZD1hKTooZD1iLGI9YSk7Zm9yKHZhciBlPWI7ZTxkO2UrKyljLnB1c2goZSk7 cmV0dXJuIGN9LFFiPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD1hLmxlbmd0aDtjPGQ7 YysrKWFbY10mJmIucHVzaChhW2NdKTsKK3JldHVybiBifSxxYT1mdW5jdGlvbihhKXt2YXIgYjth OntpZighKDI+YS5sZW5ndGgpKXtiPWEuc2xpY2UoKS5zb3J0KCk7Zm9yKHZhciBjPWJbMF0sZD0x LGU9Yi5sZW5ndGg7ZDxlO2QrKyl7aWYoYltkXT09PWMpe2I9ITE7YnJlYWsgYX1jPWJbZF19fWI9 ITB9aWYoYilyZXR1cm4gYS5zbGljZSgpO2I9W107dmFyIGU9YS5sZW5ndGgsZixnPTAsZD0wO2E6 Zm9yKDtkPGU7ZCsrKXtjPWFbZF07Zm9yKGY9MDtmPGc7ZisrKWlmKGJbZl09PT1jKWNvbnRpbnVl IGE7Yi5wdXNoKGMpO2crK31yZXR1cm4gYn07bS51dGlsPXt0aHJvdHRsZTpmdW5jdGlvbihhLGIp e3ZhciBjPWIhPT1rP2I6MjAwLGQsZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLGc9K25l dyBEYXRlLGo9YXJndW1lbnRzO2QmJmc8ZCtjPyhjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0 KGZ1bmN0aW9uKCl7ZD1rO2EuYXBwbHkoYixqKX0sYykpOihkPWcsYS5hcHBseShiLGopKX19LGVz Y2FwZVJlZ2V4OmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoJGIsCisiXFwkMSIpfX07dmFy IEE9ZnVuY3Rpb24oYSxiLGMpe2FbYl0hPT1rJiYoYVtjXT1hW2JdKX0sYmE9L1xbLio/XF0kLyxV PS9cKFwpJC8sUGE9bS51dGlsLmVzY2FwZVJlZ2V4LHZhPWgoIjxkaXY+IilbMF0sV2I9dmEudGV4 dENvbnRlbnQhPT1rLFliPS88Lio/Pi9nLE5hPW0udXRpbC50aHJvdHRsZSxSYj1bXSx3PUFycmF5 LnByb3RvdHlwZSxhYz1mdW5jdGlvbihhKXt2YXIgYixjLGQ9bS5zZXR0aW5ncyxlPWgubWFwKGQs ZnVuY3Rpb24oYSl7cmV0dXJuIGEublRhYmxlfSk7aWYoYSl7aWYoYS5uVGFibGUmJmEub0FwaSly ZXR1cm5bYV07aWYoYS5ub2RlTmFtZSYmInRhYmxlIj09PWEubm9kZU5hbWUudG9Mb3dlckNhc2Uo KSlyZXR1cm4gYj1oLmluQXJyYXkoYSxlKSwtMSE9PWI/W2RbYl1dOm51bGw7aWYoYSYmImZ1bmN0 aW9uIj09PXR5cGVvZiBhLnNldHRpbmdzKXJldHVybiBhLnNldHRpbmdzKCkudG9BcnJheSgpOyJz dHJpbmciPT09dHlwZW9mIGE/Yz1oKGEpOmEgaW5zdGFuY2VvZgoraCYmKGM9YSl9ZWxzZSByZXR1 cm5bXTtpZihjKXJldHVybiBjLm1hcChmdW5jdGlvbigpe2I9aC5pbkFycmF5KHRoaXMsZSk7cmV0 dXJuLTEhPT1iP2RbYl06bnVsbH0pLnRvQXJyYXkoKX07cz1mdW5jdGlvbihhLGIpe2lmKCEodGhp cyBpbnN0YW5jZW9mIHMpKXJldHVybiBuZXcgcyhhLGIpO3ZhciBjPVtdLGQ9ZnVuY3Rpb24oYSl7 KGE9YWMoYSkpJiYoYz1jLmNvbmNhdChhKSl9O2lmKGguaXNBcnJheShhKSlmb3IodmFyIGU9MCxm PWEubGVuZ3RoO2U8ZjtlKyspZChhW2VdKTtlbHNlIGQoYSk7dGhpcy5jb250ZXh0PXFhKGMpO2Im JmgubWVyZ2UodGhpcyxiKTt0aGlzLnNlbGVjdG9yPXtyb3dzOm51bGwsY29sczpudWxsLG9wdHM6 bnVsbH07cy5leHRlbmQodGhpcyx0aGlzLFJiKX07bS5BcGk9cztoLmV4dGVuZChzLnByb3RvdHlw ZSx7YW55OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNvdW50KCl9LGNvbmNhdDp3LmNvbmNh dCxjb250ZXh0OltdLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmxhdHRlbigpLmxlbmd0 aH0sCitlYWNoOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9dGhpcy5sZW5ndGg7YjxjO2IrKylh LmNhbGwodGhpcyx0aGlzW2JdLGIsdGhpcyk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe3Zh ciBiPXRoaXMuY29udGV4dDtyZXR1cm4gYi5sZW5ndGg+YT9uZXcgcyhiW2FdLHRoaXNbYV0pOm51 bGx9LGZpbHRlcjpmdW5jdGlvbihhKXt2YXIgYj1bXTtpZih3LmZpbHRlciliPXcuZmlsdGVyLmNh bGwodGhpcyxhLHRoaXMpO2Vsc2UgZm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWEu Y2FsbCh0aGlzLHRoaXNbY10sYyx0aGlzKSYmYi5wdXNoKHRoaXNbY10pO3JldHVybiBuZXcgcyh0 aGlzLmNvbnRleHQsYil9LGZsYXR0ZW46ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gbmV3IHMo dGhpcy5jb250ZXh0LGEuY29uY2F0LmFwcGx5KGEsdGhpcy50b0FycmF5KCkpKX0sam9pbjp3Lmpv aW4saW5kZXhPZjp3LmluZGV4T2Z8fGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPWJ8fDAsCitkPXRo aXMubGVuZ3RoO2M8ZDtjKyspaWYodGhpc1tjXT09PWEpcmV0dXJuIGM7cmV0dXJuLTF9LGl0ZXJh dG9yOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPVtdLGYsZyxqLGgsbixsPXRoaXMuY29udGV4dCxt LG8sdT10aGlzLnNlbGVjdG9yOyJzdHJpbmciPT09dHlwZW9mIGEmJihkPWMsYz1iLGI9YSxhPSEx KTtnPTA7Zm9yKGo9bC5sZW5ndGg7ZzxqO2crKyl7dmFyIHI9bmV3IHMobFtnXSk7aWYoInRhYmxl Ij09PWIpZj1jLmNhbGwocixsW2ddLGcpLGYhPT1rJiZlLnB1c2goZik7ZWxzZSBpZigiY29sdW1u cyI9PT1ifHwicm93cyI9PT1iKWY9Yy5jYWxsKHIsbFtnXSx0aGlzW2ddLGcpLGYhPT1rJiZlLnB1 c2goZik7ZWxzZSBpZigiY29sdW1uIj09PWJ8fCJjb2x1bW4tcm93cyI9PT1ifHwicm93Ij09PWJ8 fCJjZWxsIj09PWIpe289dGhpc1tnXTsiY29sdW1uLXJvd3MiPT09YiYmKG09QmEobFtnXSx1Lm9w dHMpKTtoPTA7Zm9yKG49by5sZW5ndGg7aDxuO2grKylmPW9baF0sZj0KKyJjZWxsIj09PWI/Yy5j YWxsKHIsbFtnXSxmLnJvdyxmLmNvbHVtbixnLGgpOmMuY2FsbChyLGxbZ10sZixnLGgsbSksZiE9 PWsmJmUucHVzaChmKX19cmV0dXJuIGUubGVuZ3RofHxkPyhhPW5ldyBzKGwsYT9lLmNvbmNhdC5h cHBseShbXSxlKTplKSxiPWEuc2VsZWN0b3IsYi5yb3dzPXUucm93cyxiLmNvbHM9dS5jb2xzLGIu b3B0cz11Lm9wdHMsYSk6dGhpc30sbGFzdEluZGV4T2Y6dy5sYXN0SW5kZXhPZnx8ZnVuY3Rpb24o YSxiKXtyZXR1cm4gdGhpcy5pbmRleE9mLmFwcGx5KHRoaXMudG9BcnJheS5yZXZlcnNlKCksYXJn dW1lbnRzKX0sbGVuZ3RoOjAsbWFwOmZ1bmN0aW9uKGEpe3ZhciBiPVtdO2lmKHcubWFwKWI9dy5t YXAuY2FsbCh0aGlzLGEsdGhpcyk7ZWxzZSBmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtj KyspYi5wdXNoKGEuY2FsbCh0aGlzLHRoaXNbY10sYykpO3JldHVybiBuZXcgcyh0aGlzLmNvbnRl eHQsYil9LHBsdWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihiKXtyZXR1 cm4gYlthXX0pfSwKK3BvcDp3LnBvcCxwdXNoOncucHVzaCxyZWR1Y2U6dy5yZWR1Y2V8fGZ1bmN0 aW9uKGEsYil7cmV0dXJuIGdiKHRoaXMsYSxiLDAsdGhpcy5sZW5ndGgsMSl9LHJlZHVjZVJpZ2h0 OncucmVkdWNlUmlnaHR8fGZ1bmN0aW9uKGEsYil7cmV0dXJuIGdiKHRoaXMsYSxiLHRoaXMubGVu Z3RoLTEsLTEsLTEpfSxyZXZlcnNlOncucmV2ZXJzZSxzZWxlY3RvcjpudWxsLHNoaWZ0Oncuc2hp ZnQsc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHModGhpcy5jb250ZXh0LHRoaXMpfSxzb3J0 Oncuc29ydCxzcGxpY2U6dy5zcGxpY2UsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiB3LnNsaWNl LmNhbGwodGhpcyl9LHRvJDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMpfSx0b0pRdWVyeTpmdW5j dGlvbigpe3JldHVybiBoKHRoaXMpfSx1bmlxdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHModGhp cy5jb250ZXh0LHFhKHRoaXMpKX0sdW5zaGlmdDp3LnVuc2hpZnR9KTtzLmV4dGVuZD1mdW5jdGlv bihhLAorYixjKXtpZihjLmxlbmd0aCYmYiYmKGIgaW5zdGFuY2VvZiBzfHxiLl9fZHRfd3JhcHBl cikpe3ZhciBkLGUsZixnPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1i LmFwcGx5KGEsYXJndW1lbnRzKTtzLmV4dGVuZChkLGQsYy5tZXRob2RFeHQpO3JldHVybiBkfX07 ZD0wO2ZvcihlPWMubGVuZ3RoO2Q8ZTtkKyspZj1jW2RdLGJbZi5uYW1lXT0iZnVuY3Rpb24iPT09 dHlwZW9mIGYudmFsP2coYSxmLnZhbCxmKTpoLmlzUGxhaW5PYmplY3QoZi52YWwpP3t9OmYudmFs LGJbZi5uYW1lXS5fX2R0X3dyYXBwZXI9ITAscy5leHRlbmQoYSxiW2YubmFtZV0sZi5wcm9wRXh0 KX19O3MucmVnaXN0ZXI9bz1mdW5jdGlvbihhLGIpe2lmKGguaXNBcnJheShhKSlmb3IodmFyIGM9 MCxkPWEubGVuZ3RoO2M8ZDtjKyspcy5yZWdpc3RlcihhW2NdLGIpO2Vsc2UgZm9yKHZhciBlPWEu c3BsaXQoIi4iKSxmPVJiLGcsaixjPTAsZD1lLmxlbmd0aDtjPGQ7YysrKXtnPShqPS0xIT09Citl W2NdLmluZGV4T2YoIigpIikpP2VbY10ucmVwbGFjZSgiKCkiLCIiKTplW2NdO3ZhciBpO2E6e2k9 MDtmb3IodmFyIG49Zi5sZW5ndGg7aTxuO2krKylpZihmW2ldLm5hbWU9PT1nKXtpPWZbaV07YnJl YWsgYX1pPW51bGx9aXx8KGk9e25hbWU6Zyx2YWw6e30sbWV0aG9kRXh0OltdLHByb3BFeHQ6W119 LGYucHVzaChpKSk7Yz09PWQtMT9pLnZhbD1iOmY9aj9pLm1ldGhvZEV4dDppLnByb3BFeHR9fTtz LnJlZ2lzdGVyUGx1cmFsPXU9ZnVuY3Rpb24oYSxiLGMpe3MucmVnaXN0ZXIoYSxjKTtzLnJlZ2lz dGVyKGIsZnVuY3Rpb24oKXt2YXIgYT1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYT09 PXRoaXM/dGhpczphIGluc3RhbmNlb2Ygcz9hLmxlbmd0aD9oLmlzQXJyYXkoYVswXSk/bmV3IHMo YS5jb250ZXh0LGFbMF0pOmFbMF06azphfSl9O28oInRhYmxlcygpIixmdW5jdGlvbihhKXt2YXIg YjtpZihhKXtiPXM7dmFyIGM9dGhpcy5jb250ZXh0O2lmKCJudW1iZXIiPT09Cit0eXBlb2YgYSlh PVtjW2FdXTtlbHNlIHZhciBkPWgubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRhYmxlfSks YT1oKGQpLmZpbHRlcihhKS5tYXAoZnVuY3Rpb24oKXt2YXIgYT1oLmluQXJyYXkodGhpcyxkKTty ZXR1cm4gY1thXX0pLnRvQXJyYXkoKTtiPW5ldyBiKGEpfWVsc2UgYj10aGlzO3JldHVybiBifSk7 bygidGFibGUoKSIsZnVuY3Rpb24oYSl7dmFyIGE9dGhpcy50YWJsZXMoYSksYj1hLmNvbnRleHQ7 cmV0dXJuIGIubGVuZ3RoP25ldyBzKGJbMF0pOmF9KTt1KCJ0YWJsZXMoKS5ub2RlcygpIiwidGFi bGUoKS5ub2RlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5j dGlvbihhKXtyZXR1cm4gYS5uVGFibGV9LDEpfSk7dSgidGFibGVzKCkuYm9keSgpIiwidGFibGUo KS5ib2R5KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlv bihhKXtyZXR1cm4gYS5uVEJvZHl9LDEpfSk7dSgidGFibGVzKCkuaGVhZGVyKCkiLAorInRhYmxl KCkuaGVhZGVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5j dGlvbihhKXtyZXR1cm4gYS5uVEhlYWR9LDEpfSk7dSgidGFibGVzKCkuZm9vdGVyKCkiLCJ0YWJs ZSgpLmZvb3RlcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVu Y3Rpb24oYSl7cmV0dXJuIGEublRGb290fSwxKX0pO3UoInRhYmxlcygpLmNvbnRhaW5lcnMoKSIs InRhYmxlKCkuY29udGFpbmVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRh YmxlIixmdW5jdGlvbihhKXtyZXR1cm4gYS5uVGFibGVXcmFwcGVyfSwxKX0pO28oImRyYXcoKSIs ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXsicGFn ZSI9PT1hP04oYik6KCJzdHJpbmciPT09dHlwZW9mIGEmJihhPSJmdWxsLWhvbGQiPT09YT8hMToh MCksUyhiLCExPT09YSkpfSl9KTtvKCJwYWdlKCkiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Citr P3RoaXMucGFnZS5pbmZvKCkucGFnZTp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7 U2EoYixhKX0pfSk7bygicGFnZS5pbmZvKCkiLGZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuY29udGV4 dC5sZW5ndGgpcmV0dXJuIGs7dmFyIGE9dGhpcy5jb250ZXh0WzBdLGI9YS5faURpc3BsYXlTdGFy dCxjPWEub0ZlYXR1cmVzLmJQYWdpbmF0ZT9hLl9pRGlzcGxheUxlbmd0aDotMSxkPWEuZm5SZWNv cmRzRGlzcGxheSgpLGU9LTE9PT1jO3JldHVybntwYWdlOmU/MDpNYXRoLmZsb29yKGIvYykscGFn ZXM6ZT8xOk1hdGguY2VpbChkL2MpLHN0YXJ0OmIsZW5kOmEuZm5EaXNwbGF5RW5kKCksbGVuZ3Ro OmMscmVjb3Jkc1RvdGFsOmEuZm5SZWNvcmRzVG90YWwoKSxyZWNvcmRzRGlzcGxheTpkLHNlcnZl clNpZGU6InNzcCI9PT15KGEpfX0pO28oInBhZ2UubGVuKCkiLGZ1bmN0aW9uKGEpe3JldHVybiBh PT09az8wIT09dGhpcy5jb250ZXh0Lmxlbmd0aD90aGlzLmNvbnRleHRbMF0uX2lEaXNwbGF5TGVu Z3RoOgorazp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7UWEoYixhKX0pfSk7dmFy IFNiPWZ1bmN0aW9uKGEsYixjKXtpZihjKXt2YXIgZD1uZXcgcyhhKTtkLm9uZSgiZHJhdyIsZnVu Y3Rpb24oKXtjKGQuYWpheC5qc29uKCkpfSl9aWYoInNzcCI9PXkoYSkpUyhhLGIpO2Vsc2V7Qyhh LCEwKTt2YXIgZT1hLmpxWEhSO2UmJjQhPT1lLnJlYWR5U3RhdGUmJmUuYWJvcnQoKTtzYShhLFtd LGZ1bmN0aW9uKGMpe25hKGEpO2Zvcih2YXIgYz10YShhLGMpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTtk KyspTShhLGNbZF0pO1MoYSxiKTtDKGEsITEpfSl9fTtvKCJhamF4Lmpzb24oKSIsZnVuY3Rpb24o KXt2YXIgYT10aGlzLmNvbnRleHQ7aWYoMDxhLmxlbmd0aClyZXR1cm4gYVswXS5qc29ufSk7bygi YWpheC5wYXJhbXMoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7aWYoMDxhLmxlbmd0 aClyZXR1cm4gYVswXS5vQWpheERhdGF9KTtvKCJhamF4LnJlbG9hZCgpIixmdW5jdGlvbihhLAor Yil7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihjKXtTYihjLCExPT09Yixh KX0pfSk7bygiYWpheC51cmwoKSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jb250ZXh0O2lmKGE9 PT1rKXtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIGs7Yj1iWzBdO3JldHVybiBiLmFqYXg/aC5pc1Bs YWluT2JqZWN0KGIuYWpheCk/Yi5hamF4LnVybDpiLmFqYXg6Yi5zQWpheFNvdXJjZX1yZXR1cm4g dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2guaXNQbGFpbk9iamVjdChiLmFqYXgp P2IuYWpheC51cmw9YTpiLmFqYXg9YX0pfSk7bygiYWpheC51cmwoKS5sb2FkKCkiLGZ1bmN0aW9u KGEsYil7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihjKXtTYihjLCExPT09 YixhKX0pfSk7dmFyIFphPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9W10sZyxqLGksbixsLG07 aT10eXBlb2YgYjtpZighYnx8InN0cmluZyI9PT1pfHwiZnVuY3Rpb24iPT09CitpfHxiLmxlbmd0 aD09PWspYj1bYl07aT0wO2ZvcihuPWIubGVuZ3RoO2k8bjtpKyspe2o9YltpXSYmYltpXS5zcGxp dCYmIWJbaV0ubWF0Y2goL1tcW1woOl0vKT9iW2ldLnNwbGl0KCIsIik6W2JbaV1dO2w9MDtmb3Io bT1qLmxlbmd0aDtsPG07bCsrKShnPWMoInN0cmluZyI9PT10eXBlb2YgaltsXT9oLnRyaW0oalts XSk6altsXSkpJiZnLmxlbmd0aCYmKGY9Zi5jb25jYXQoZykpfWE9eC5zZWxlY3RvclthXTtpZihh Lmxlbmd0aCl7aT0wO2ZvcihuPWEubGVuZ3RoO2k8bjtpKyspZj1hW2ldKGQsZSxmKX1yZXR1cm4g cWEoZil9LCRhPWZ1bmN0aW9uKGEpe2F8fChhPXt9KTthLmZpbHRlciYmYS5zZWFyY2g9PT1rJiYo YS5zZWFyY2g9YS5maWx0ZXIpO3JldHVybiBoLmV4dGVuZCh7c2VhcmNoOiJub25lIixvcmRlcjoi Y3VycmVudCIscGFnZToiYWxsIn0sYSl9LGFiPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5s ZW5ndGg7YjxjO2IrKylpZigwPGFbYl0ubGVuZ3RoKXJldHVybiBhWzBdPQorYVtiXSxhWzBdLmxl bmd0aD0xLGEubGVuZ3RoPTEsYS5jb250ZXh0PVthLmNvbnRleHRbYl1dLGE7YS5sZW5ndGg9MDty ZXR1cm4gYX0sQmE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1bXSxnPWEuYWlEaXNwbGF5O2M9 YS5haURpc3BsYXlNYXN0ZXI7dmFyIGo9Yi5zZWFyY2g7ZD1iLm9yZGVyO2U9Yi5wYWdlO2lmKCJz c3AiPT15KGEpKXJldHVybiJyZW1vdmVkIj09PWo/W106VygwLGMubGVuZ3RoKTtpZigiY3VycmVu dCI9PWUpe2M9YS5faURpc3BsYXlTdGFydDtmb3IoZD1hLmZuRGlzcGxheUVuZCgpO2M8ZDtjKysp Zi5wdXNoKGdbY10pfWVsc2UgaWYoImN1cnJlbnQiPT1kfHwiYXBwbGllZCI9PWQpZj0ibm9uZSI9 PWo/Yy5zbGljZSgpOiJhcHBsaWVkIj09aj9nLnNsaWNlKCk6aC5tYXAoYyxmdW5jdGlvbihhKXty ZXR1cm4tMT09PWguaW5BcnJheShhLGcpP2E6bnVsbH0pO2Vsc2UgaWYoImluZGV4Ij09ZHx8Im9y aWdpbmFsIj09ZCl7Yz0wO2ZvcihkPWEuYW9EYXRhLmxlbmd0aDtjPAorZDtjKyspIm5vbmUiPT1q P2YucHVzaChjKTooZT1oLmluQXJyYXkoYyxnKSwoLTE9PT1lJiYicmVtb3ZlZCI9PWp8fDA8PWUm JiJhcHBsaWVkIj09aikmJmYucHVzaChjKSl9cmV0dXJuIGZ9O28oInJvd3MoKSIsZnVuY3Rpb24o YSxiKXthPT09az9hPSIiOmguaXNQbGFpbk9iamVjdChhKSYmKGI9YSxhPSIiKTt2YXIgYj0kYShi KSxjPXRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihjKXt2YXIgZT1iLGY7cmV0dXJuIFph KCJyb3ciLGEsZnVuY3Rpb24oYSl7dmFyIGI9TmIoYSk7aWYoYiE9PW51bGwmJiFlKXJldHVyblti XTtmfHwoZj1CYShjLGUpKTtpZihiIT09bnVsbCYmaC5pbkFycmF5KGIsZikhPT0tMSlyZXR1cm5b Yl07aWYoYT09PW51bGx8fGE9PT1rfHxhPT09IiIpcmV0dXJuIGY7aWYodHlwZW9mIGE9PT0iZnVu Y3Rpb24iKXJldHVybiBoLm1hcChmLGZ1bmN0aW9uKGIpe3ZhciBlPWMuYW9EYXRhW2JdO3JldHVy biBhKGIsZS5fYURhdGEsZS5uVHIpP2I6bnVsbH0pOworYj1RYihpYShjLmFvRGF0YSxmLCJuVHIi KSk7aWYoYS5ub2RlTmFtZSl7aWYoYS5fRFRfUm93SW5kZXghPT1rKXJldHVyblthLl9EVF9Sb3dJ bmRleF07aWYoYS5fRFRfQ2VsbEluZGV4KXJldHVyblthLl9EVF9DZWxsSW5kZXgucm93XTtiPWgo YSkuY2xvc2VzdCgiKltkYXRhLWR0LXJvd10iKTtyZXR1cm4gYi5sZW5ndGg/W2IuZGF0YSgiZHQt cm93IildOltdfWlmKHR5cGVvZiBhPT09InN0cmluZyImJmEuY2hhckF0KDApPT09IiMiKXt2YXIg aT1jLmFJZHNbYS5yZXBsYWNlKC9eIy8sIiIpXTtpZihpIT09aylyZXR1cm5baS5pZHhdfXJldHVy biBoKGIpLmZpbHRlcihhKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fRFRfUm93SW5kZXh9 KS50b0FycmF5KCl9LGMsZSl9LDEpO2Muc2VsZWN0b3Iucm93cz1hO2Muc2VsZWN0b3Iub3B0cz1i O3JldHVybiBjfSk7bygicm93cygpLm5vZGVzKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRl cmF0b3IoInJvdyIsZnVuY3Rpb24oYSwKK2Ipe3JldHVybiBhLmFvRGF0YVtiXS5uVHJ8fGt9LDEp fSk7bygicm93cygpLmRhdGEoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcighMCwi cm93cyIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gaWEoYS5hb0RhdGEsYiwiX2FEYXRhIil9LDEpfSk7 dSgicm93cygpLmNhY2hlKCkiLCJyb3coKS5jYWNoZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhp cy5pdGVyYXRvcigicm93IixmdW5jdGlvbihiLGMpe3ZhciBkPWIuYW9EYXRhW2NdO3JldHVybiJz ZWFyY2giPT09YT9kLl9hRmlsdGVyRGF0YTpkLl9hU29ydERhdGF9LDEpfSk7dSgicm93cygpLmlu dmFsaWRhdGUoKSIsInJvdygpLmludmFsaWRhdGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu aXRlcmF0b3IoInJvdyIsZnVuY3Rpb24oYixjKXtjYShiLGMsYSl9KX0pO3UoInJvd3MoKS5pbmRl eGVzKCkiLCJyb3coKS5pbmRleCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJy b3ciLGZ1bmN0aW9uKGEsCitiKXtyZXR1cm4gYn0sMSl9KTt1KCJyb3dzKCkuaWRzKCkiLCJyb3co KS5pZCgpIixmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz10aGlzLmNvbnRleHQsZD0wLGU9Yy5s ZW5ndGg7ZDxlO2QrKylmb3IodmFyIGY9MCxnPXRoaXNbZF0ubGVuZ3RoO2Y8ZztmKyspe3ZhciBo PWNbZF0ucm93SWRGbihjW2RdLmFvRGF0YVt0aGlzW2RdW2ZdXS5fYURhdGEpO2IucHVzaCgoITA9 PT1hPyIjIjoiIikraCl9cmV0dXJuIG5ldyBzKGMsYil9KTt1KCJyb3dzKCkucmVtb3ZlKCkiLCJy b3coKS5yZW1vdmUoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuaXRlcmF0b3IoInJvdyIs ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuYW9EYXRhLGY9ZVtjXSxnLGgsaSxuLGw7ZS5zcGxpY2Uo YywxKTtnPTA7Zm9yKGg9ZS5sZW5ndGg7ZzxoO2crKylpZihpPWVbZ10sbD1pLmFuQ2VsbHMsbnVs bCE9PWkublRyJiYoaS5uVHIuX0RUX1Jvd0luZGV4PWcpLG51bGwhPT1sKXtpPTA7Zm9yKG49bC5s ZW5ndGg7aTwKK247aSsrKWxbaV0uX0RUX0NlbGxJbmRleC5yb3c9Z31vYShiLmFpRGlzcGxheU1h c3RlcixjKTtvYShiLmFpRGlzcGxheSxjKTtvYShhW2RdLGMsITEpOzA8Yi5faVJlY29yZHNEaXNw bGF5JiZiLl9pUmVjb3Jkc0Rpc3BsYXktLTtSYShiKTtjPWIucm93SWRGbihmLl9hRGF0YSk7YyE9 PWsmJmRlbGV0ZSBiLmFJZHNbY119KTt0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7 Zm9yKHZhciBjPTAsZD1hLmFvRGF0YS5sZW5ndGg7YzxkO2MrKylhLmFvRGF0YVtjXS5pZHg9Y30p O3JldHVybiB0aGlzfSk7bygicm93cy5hZGQoKSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pdGVy YXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe3ZhciBjLGYsZyxoPVtdO2Y9MDtmb3IoZz1hLmxlbmd0 aDtmPGc7ZisrKWM9YVtmXSxjLm5vZGVOYW1lJiYiVFIiPT09Yy5ub2RlTmFtZS50b1VwcGVyQ2Fz ZSgpP2gucHVzaChtYShiLGMpWzBdKTpoLnB1c2goTShiLGMpKTtyZXR1cm4gaH0sMSksYz10aGlz LnJvd3MoLTEpOworYy5wb3AoKTtoLm1lcmdlKGMsYik7cmV0dXJuIGN9KTtvKCJyb3coKSIsZnVu Y3Rpb24oYSxiKXtyZXR1cm4gYWIodGhpcy5yb3dzKGEsYikpfSk7bygicm93KCkuZGF0YSgpIixm dW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnRleHQ7aWYoYT09PWspcmV0dXJuIGIubGVuZ3RoJiZ0 aGlzLmxlbmd0aD9iWzBdLmFvRGF0YVt0aGlzWzBdXS5fYURhdGE6aztiWzBdLmFvRGF0YVt0aGlz WzBdXS5fYURhdGE9YTtjYShiWzBdLHRoaXNbMF0sImRhdGEiKTtyZXR1cm4gdGhpc30pO28oInJv dygpLm5vZGUoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7cmV0dXJuIGEubGVuZ3Ro JiZ0aGlzLmxlbmd0aD9hWzBdLmFvRGF0YVt0aGlzWzBdXS5uVHJ8fG51bGw6bnVsbH0pO28oInJv dy5hZGQoKSIsZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIGgmJmEubGVuZ3RoJiYoYT1hWzBdKTt2 YXIgYj10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7cmV0dXJuIGEubm9kZU5hbWUm JgorIlRSIj09PWEubm9kZU5hbWUudG9VcHBlckNhc2UoKT9tYShiLGEpWzBdOk0oYixhKX0pO3Jl dHVybiB0aGlzLnJvdyhiWzBdKX0pO3ZhciBiYj1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY29udGV4 dDtpZihjLmxlbmd0aCYmKGM9Y1swXS5hb0RhdGFbYiE9PWs/YjphWzBdXSkmJmMuX2RldGFpbHMp Yy5fZGV0YWlscy5yZW1vdmUoKSxjLl9kZXRhaWxzU2hvdz1rLGMuX2RldGFpbHM9a30sVGI9ZnVu Y3Rpb24oYSxiKXt2YXIgYz1hLmNvbnRleHQ7aWYoYy5sZW5ndGgmJmEubGVuZ3RoKXt2YXIgZD1j WzBdLmFvRGF0YVthWzBdXTtpZihkLl9kZXRhaWxzKXsoZC5fZGV0YWlsc1Nob3c9Yik/ZC5fZGV0 YWlscy5pbnNlcnRBZnRlcihkLm5Ucik6ZC5fZGV0YWlscy5kZXRhY2goKTt2YXIgZT1jWzBdLGY9 bmV3IHMoZSksZz1lLmFvRGF0YTtmLm9mZigiZHJhdy5kdC5EVF9kZXRhaWxzIGNvbHVtbi12aXNp YmlsaXR5LmR0LkRUX2RldGFpbHMgZGVzdHJveS5kdC5EVF9kZXRhaWxzIik7MDxEKGcsCisiX2Rl dGFpbHMiKS5sZW5ndGgmJihmLm9uKCJkcmF3LmR0LkRUX2RldGFpbHMiLGZ1bmN0aW9uKGEsYil7 ZT09PWImJmYucm93cyh7cGFnZToiY3VycmVudCJ9KS5lcSgwKS5lYWNoKGZ1bmN0aW9uKGEpe2E9 Z1thXTthLl9kZXRhaWxzU2hvdyYmYS5fZGV0YWlscy5pbnNlcnRBZnRlcihhLm5Ucil9KX0pLGYu b24oImNvbHVtbi12aXNpYmlsaXR5LmR0LkRUX2RldGFpbHMiLGZ1bmN0aW9uKGEsYil7aWYoZT09 PWIpZm9yKHZhciBjLGQ9YWEoYiksZj0wLGg9Zy5sZW5ndGg7ZjxoO2YrKyljPWdbZl0sYy5fZGV0 YWlscyYmYy5fZGV0YWlscy5jaGlsZHJlbigidGRbY29sc3Bhbl0iKS5hdHRyKCJjb2xzcGFuIixk KX0pLGYub24oImRlc3Ryb3kuZHQuRFRfZGV0YWlscyIsZnVuY3Rpb24oYSxiKXtpZihlPT09Yilm b3IodmFyIGM9MCxkPWcubGVuZ3RoO2M8ZDtjKyspZ1tjXS5fZGV0YWlscyYmYmIoZixjKX0pKX19 fTtvKCJyb3coKS5jaGlsZCgpIixmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29udGV4dDsKK2lm KGE9PT1rKXJldHVybiBjLmxlbmd0aCYmdGhpcy5sZW5ndGg/Y1swXS5hb0RhdGFbdGhpc1swXV0u X2RldGFpbHM6aztpZighMD09PWEpdGhpcy5jaGlsZC5zaG93KCk7ZWxzZSBpZighMT09PWEpYmIo dGhpcyk7ZWxzZSBpZihjLmxlbmd0aCYmdGhpcy5sZW5ndGgpe3ZhciBkPWNbMF0sYz1jWzBdLmFv RGF0YVt0aGlzWzBdXSxlPVtdLGY9ZnVuY3Rpb24oYSxiKXtpZihoLmlzQXJyYXkoYSl8fGEgaW5z dGFuY2VvZiBoKWZvcih2YXIgYz0wLGs9YS5sZW5ndGg7YzxrO2MrKylmKGFbY10sYik7ZWxzZSBh Lm5vZGVOYW1lJiYidHIiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2UucHVzaChhKTooYz1o KCI8dHI+PHRkLz48L3RyPiIpLmFkZENsYXNzKGIpLGgoInRkIixjKS5hZGRDbGFzcyhiKS5odG1s KGEpWzBdLmNvbFNwYW49YWEoZCksZS5wdXNoKGNbMF0pKX07ZihhLGIpO2MuX2RldGFpbHMmJmMu X2RldGFpbHMuZGV0YWNoKCk7Yy5fZGV0YWlscz1oKGUpO2MuX2RldGFpbHNTaG93JiYKK2MuX2Rl dGFpbHMuaW5zZXJ0QWZ0ZXIoYy5uVHIpfXJldHVybiB0aGlzfSk7byhbInJvdygpLmNoaWxkLnNo b3coKSIsInJvdygpLmNoaWxkKCkuc2hvdygpIl0sZnVuY3Rpb24oKXtUYih0aGlzLCEwKTtyZXR1 cm4gdGhpc30pO28oWyJyb3coKS5jaGlsZC5oaWRlKCkiLCJyb3coKS5jaGlsZCgpLmhpZGUoKSJd LGZ1bmN0aW9uKCl7VGIodGhpcywhMSk7cmV0dXJuIHRoaXN9KTtvKFsicm93KCkuY2hpbGQucmVt b3ZlKCkiLCJyb3coKS5jaGlsZCgpLnJlbW92ZSgpIl0sZnVuY3Rpb24oKXtiYih0aGlzKTtyZXR1 cm4gdGhpc30pO28oInJvdygpLmNoaWxkLmlzU2hvd24oKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlz LmNvbnRleHQ7cmV0dXJuIGEubGVuZ3RoJiZ0aGlzLmxlbmd0aD9hWzBdLmFvRGF0YVt0aGlzWzBd XS5fZGV0YWlsc1Nob3d8fCExOiExfSk7dmFyIGJjPS9eKFteOl0rKToobmFtZXx2aXNJZHh8dmlz aWJsZSkkLyxVYj1mdW5jdGlvbihhLGIsYyxkLGUpe2Zvcih2YXIgYz0KK1tdLGQ9MCxmPWUubGVu Z3RoO2Q8ZjtkKyspYy5wdXNoKEIoYSxlW2RdLGIpKTtyZXR1cm4gY307bygiY29sdW1ucygpIixm dW5jdGlvbihhLGIpe2E9PT1rP2E9IiI6aC5pc1BsYWluT2JqZWN0KGEpJiYoYj1hLGE9IiIpO3Zh ciBiPSRhKGIpLGM9dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGMpe3ZhciBlPWEsZj1i LGc9Yy5hb0NvbHVtbnMsaj1EKGcsInNOYW1lIiksaT1EKGcsIm5UaCIpO3JldHVybiBaYSgiY29s dW1uIixlLGZ1bmN0aW9uKGEpe3ZhciBiPU5iKGEpO2lmKGE9PT0iIilyZXR1cm4gVyhnLmxlbmd0 aCk7aWYoYiE9PW51bGwpcmV0dXJuW2I+PTA/YjpnLmxlbmd0aCtiXTtpZih0eXBlb2YgYT09PSJm dW5jdGlvbiIpe3ZhciBlPUJhKGMsZik7cmV0dXJuIGgubWFwKGcsZnVuY3Rpb24oYixmKXtyZXR1 cm4gYShmLFViKGMsZiwwLDAsZSksaVtmXSk/ZjpudWxsfSl9dmFyIGs9dHlwZW9mIGE9PT0ic3Ry aW5nIj9hLm1hdGNoKGJjKToiIjtpZihrKXN3aXRjaChrWzJdKXtjYXNlICJ2aXNJZHgiOmNhc2Ug InZpc2libGUiOmI9CitwYXJzZUludChrWzFdLDEwKTtpZihiPDApe3ZhciBtPWgubWFwKGcsZnVu Y3Rpb24oYSxiKXtyZXR1cm4gYS5iVmlzaWJsZT9iOm51bGx9KTtyZXR1cm5bbVttLmxlbmd0aCti XV19cmV0dXJuW1ooYyxiKV07Y2FzZSAibmFtZSI6cmV0dXJuIGgubWFwKGosZnVuY3Rpb24oYSxi KXtyZXR1cm4gYT09PWtbMV0/YjpudWxsfSk7ZGVmYXVsdDpyZXR1cm5bXX1pZihhLm5vZGVOYW1l JiZhLl9EVF9DZWxsSW5kZXgpcmV0dXJuW2EuX0RUX0NlbGxJbmRleC5jb2x1bW5dO2I9aChpKS5m aWx0ZXIoYSkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGguaW5BcnJheSh0aGlzLGkpfSkudG9BcnJh eSgpO2lmKGIubGVuZ3RofHwhYS5ub2RlTmFtZSlyZXR1cm4gYjtiPWgoYSkuY2xvc2VzdCgiKltk YXRhLWR0LWNvbHVtbl0iKTtyZXR1cm4gYi5sZW5ndGg/W2IuZGF0YSgiZHQtY29sdW1uIildOltd fSxjLGYpfSwxKTtjLnNlbGVjdG9yLmNvbHM9YTtjLnNlbGVjdG9yLm9wdHM9YjtyZXR1cm4gY30p O3UoImNvbHVtbnMoKS5oZWFkZXIoKSIsCisiY29sdW1uKCkuaGVhZGVyKCkiLGZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5hb0Nv bHVtbnNbYl0ublRofSwxKX0pO3UoImNvbHVtbnMoKS5mb290ZXIoKSIsImNvbHVtbigpLmZvb3Rl cigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGEs Yil7cmV0dXJuIGEuYW9Db2x1bW5zW2JdLm5UZn0sMSl9KTt1KCJjb2x1bW5zKCkuZGF0YSgpIiwi Y29sdW1uKCkuZGF0YSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4t cm93cyIsVWIsMSl9KTt1KCJjb2x1bW5zKCkuZGF0YVNyYygpIiwiY29sdW1uKCkuZGF0YVNyYygp IixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGEsYil7 cmV0dXJuIGEuYW9Db2x1bW5zW2JdLm1EYXRhfSwxKX0pO3UoImNvbHVtbnMoKS5jYWNoZSgpIiwi Y29sdW1uKCkuY2FjaGUoKSIsCitmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29s dW1uLXJvd3MiLGZ1bmN0aW9uKGIsYyxkLGUsZil7cmV0dXJuIGlhKGIuYW9EYXRhLGYsInNlYXJj aCI9PT1hPyJfYUZpbHRlckRhdGEiOiJfYVNvcnREYXRhIixjKX0sMSl9KTt1KCJjb2x1bW5zKCku bm9kZXMoKSIsImNvbHVtbigpLm5vZGVzKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0 b3IoImNvbHVtbi1yb3dzIixmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBpYShhLmFvRGF0YSxl LCJhbkNlbGxzIixiKX0sMSl9KTt1KCJjb2x1bW5zKCkudmlzaWJsZSgpIiwiY29sdW1uKCkudmlz aWJsZSgpIixmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rp b24oYixjKXtpZihhPT09aylyZXR1cm4gYi5hb0NvbHVtbnNbY10uYlZpc2libGU7dmFyIGY9Yi5h b0NvbHVtbnMsZz1mW2NdLGo9Yi5hb0RhdGEsaSxuLGw7aWYoYSE9PWsmJmcuYlZpc2libGUhPT1h KXtpZihhKXt2YXIgbT0KK2guaW5BcnJheSghMCxEKGYsImJWaXNpYmxlIiksYysxKTtpPTA7Zm9y KG49ai5sZW5ndGg7aTxuO2krKylsPWpbaV0ublRyLGY9altpXS5hbkNlbGxzLGwmJmwuaW5zZXJ0 QmVmb3JlKGZbY10sZlttXXx8bnVsbCl9ZWxzZSBoKEQoYi5hb0RhdGEsImFuQ2VsbHMiLGMpKS5k ZXRhY2goKTtnLmJWaXNpYmxlPWE7ZWEoYixiLmFvSGVhZGVyKTtlYShiLGIuYW9Gb290ZXIpO3hh KGIpfX0pO2EhPT1rJiYodGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbihjLGUpe3IoYyxu dWxsLCJjb2x1bW4tdmlzaWJpbGl0eSIsW2MsZSxhLGJdKX0pLChiPT09a3x8YikmJnRoaXMuY29s dW1ucy5hZGp1c3QoKSk7cmV0dXJuIGN9KTt1KCJjb2x1bW5zKCkuaW5kZXhlcygpIiwiY29sdW1u KCkuaW5kZXgoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVu Y3Rpb24oYixjKXtyZXR1cm4idmlzaWJsZSI9PT1hPyQoYixjKTpjfSwxKX0pO28oImNvbHVtbnMu YWRqdXN0KCkiLAorZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0 aW9uKGEpe1koYSl9LDEpfSk7bygiY29sdW1uLmluZGV4KCkiLGZ1bmN0aW9uKGEsYil7aWYoMCE9 PXRoaXMuY29udGV4dC5sZW5ndGgpe3ZhciBjPXRoaXMuY29udGV4dFswXTtpZigiZnJvbVZpc2li bGUiPT09YXx8InRvRGF0YSI9PT1hKXJldHVybiBaKGMsYik7aWYoImZyb21EYXRhIj09PWF8fCJ0 b1Zpc2libGUiPT09YSlyZXR1cm4gJChjLGIpfX0pO28oImNvbHVtbigpIixmdW5jdGlvbihhLGIp e3JldHVybiBhYih0aGlzLmNvbHVtbnMoYSxiKSl9KTtvKCJjZWxscygpIixmdW5jdGlvbihhLGIs Yyl7aC5pc1BsYWluT2JqZWN0KGEpJiYoYS5yb3c9PT1rPyhjPWEsYT1udWxsKTooYz1iLGI9bnVs bCkpO2guaXNQbGFpbk9iamVjdChiKSYmKGM9YixiPW51bGwpO2lmKG51bGw9PT1ifHxiPT09ayly ZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe3ZhciBkPWEsZT0kYShjKSxm PQorYi5hb0RhdGEsZz1CYShiLGUpLGo9UWIoaWEoZixnLCJhbkNlbGxzIikpLGk9aChbXS5jb25j YXQuYXBwbHkoW10saikpLGwsbj1iLmFvQ29sdW1ucy5sZW5ndGgsbSxvLHUscyxyLHY7cmV0dXJu IFphKCJjZWxsIixkLGZ1bmN0aW9uKGEpe3ZhciBjPXR5cGVvZiBhPT09ImZ1bmN0aW9uIjtpZihh PT09bnVsbHx8YT09PWt8fGMpe209W107bz0wO2Zvcih1PWcubGVuZ3RoO288dTtvKyspe2w9Z1tv XTtmb3Iocz0wO3M8bjtzKyspe3I9e3JvdzpsLGNvbHVtbjpzfTtpZihjKXt2PWZbbF07YShyLEIo YixsLHMpLHYuYW5DZWxscz92LmFuQ2VsbHNbc106bnVsbCkmJm0ucHVzaChyKX1lbHNlIG0ucHVz aChyKX19cmV0dXJuIG19aWYoaC5pc1BsYWluT2JqZWN0KGEpKXJldHVyblthXTtjPWkuZmlsdGVy KGEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybntyb3c6Yi5fRFRfQ2VsbEluZGV4LnJvdyxjb2x1 bW46Yi5fRFRfQ2VsbEluZGV4LmNvbHVtbn19KS50b0FycmF5KCk7aWYoYy5sZW5ndGh8fAorIWEu bm9kZU5hbWUpcmV0dXJuIGM7dj1oKGEpLmNsb3Nlc3QoIipbZGF0YS1kdC1yb3ddIik7cmV0dXJu IHYubGVuZ3RoP1t7cm93OnYuZGF0YSgiZHQtcm93IiksY29sdW1uOnYuZGF0YSgiZHQtY29sdW1u Iil9XTpbXX0sYixlKX0pO3ZhciBkPXRoaXMuY29sdW1ucyhiLGMpLGU9dGhpcy5yb3dzKGEsYyks ZixnLGosaSxuLGw9dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEsYil7Zj1bXTtnPTA7 Zm9yKGo9ZVtiXS5sZW5ndGg7ZzxqO2crKyl7aT0wO2ZvcihuPWRbYl0ubGVuZ3RoO2k8bjtpKysp Zi5wdXNoKHtyb3c6ZVtiXVtnXSxjb2x1bW46ZFtiXVtpXX0pfXJldHVybiBmfSwxKTtoLmV4dGVu ZChsLnNlbGVjdG9yLHtjb2xzOmIscm93czphLG9wdHM6Y30pO3JldHVybiBsfSk7dSgiY2VsbHMo KS5ub2RlcygpIiwiY2VsbCgpLm5vZGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRv cigiY2VsbCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybihhPWEuYW9EYXRhW2JdKSYmCithLmFuQ2Vs bHM/YS5hbkNlbGxzW2NdOmt9LDEpfSk7bygiY2VsbHMoKS5kYXRhKCkiLGZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gQihhLGIsYyl9 LDEpfSk7dSgiY2VsbHMoKS5jYWNoZSgpIiwiY2VsbCgpLmNhY2hlKCkiLGZ1bmN0aW9uKGEpe2E9 InNlYXJjaCI9PT1hPyJfYUZpbHRlckRhdGEiOiJfYVNvcnREYXRhIjtyZXR1cm4gdGhpcy5pdGVy YXRvcigiY2VsbCIsZnVuY3Rpb24oYixjLGQpe3JldHVybiBiLmFvRGF0YVtjXVthXVtkXX0sMSl9 KTt1KCJjZWxscygpLnJlbmRlcigpIiwiY2VsbCgpLnJlbmRlcigpIixmdW5jdGlvbihhKXtyZXR1 cm4gdGhpcy5pdGVyYXRvcigiY2VsbCIsZnVuY3Rpb24oYixjLGQpe3JldHVybiBCKGIsYyxkLGEp fSwxKX0pO3UoImNlbGxzKCkuaW5kZXhlcygpIiwiY2VsbCgpLmluZGV4KCkiLGZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGEsCitiLGMpe3JldHVybntyb3c6 Yixjb2x1bW46Yyxjb2x1bW5WaXNpYmxlOiQoYSxjKX19LDEpfSk7dSgiY2VsbHMoKS5pbnZhbGlk YXRlKCkiLCJjZWxsKCkuaW52YWxpZGF0ZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVy YXRvcigiY2VsbCIsZnVuY3Rpb24oYixjLGQpe2NhKGIsYyxhLGQpfSl9KTtvKCJjZWxsKCkiLGZ1 bmN0aW9uKGEsYixjKXtyZXR1cm4gYWIodGhpcy5jZWxscyhhLGIsYykpfSk7bygiY2VsbCgpLmRh dGEoKSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jb250ZXh0LGM9dGhpc1swXTtpZihhPT09ayly ZXR1cm4gYi5sZW5ndGgmJmMubGVuZ3RoP0IoYlswXSxjWzBdLnJvdyxjWzBdLmNvbHVtbik6aztp YihiWzBdLGNbMF0ucm93LGNbMF0uY29sdW1uLGEpO2NhKGJbMF0sY1swXS5yb3csImRhdGEiLGNb MF0uY29sdW1uKTtyZXR1cm4gdGhpc30pO28oIm9yZGVyKCkiLGZ1bmN0aW9uKGEsYil7dmFyIGM9 dGhpcy5jb250ZXh0O2lmKGE9PT1rKXJldHVybiAwIT09CitjLmxlbmd0aD9jWzBdLmFhU29ydGlu ZzprOyJudW1iZXIiPT09dHlwZW9mIGE/YT1bW2EsYl1dOmEubGVuZ3RoJiYhaC5pc0FycmF5KGFb MF0pJiYoYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhp cy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2IuYWFTb3J0aW5nPWEuc2xpY2UoKX0pfSk7 bygib3JkZXIubGlzdGVuZXIoKSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLml0ZXJhdG9y KCJ0YWJsZSIsZnVuY3Rpb24oZCl7TGEoZCxhLGIsYyl9KX0pO28oIm9yZGVyLmZpeGVkKCkiLGZ1 bmN0aW9uKGEpe2lmKCFhKXt2YXIgYj10aGlzLmNvbnRleHQsYj1iLmxlbmd0aD9iWzBdLmFhU29y dGluZ0ZpeGVkOms7cmV0dXJuIGguaXNBcnJheShiKT97cHJlOmJ9OmJ9cmV0dXJuIHRoaXMuaXRl cmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLmFhU29ydGluZ0ZpeGVkPWguZXh0ZW5kKCEwLHt9 LGEpfSl9KTtvKFsiY29sdW1ucygpLm9yZGVyKCkiLAorImNvbHVtbigpLm9yZGVyKCkiXSxmdW5j dGlvbihhKXt2YXIgYj10aGlzO3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24o YyxkKXt2YXIgZT1bXTtoLmVhY2goYltkXSxmdW5jdGlvbihiLGMpe2UucHVzaChbYyxhXSl9KTtj LmFhU29ydGluZz1lfSl9KTtvKCJzZWFyY2goKSIsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhp cy5jb250ZXh0O3JldHVybiBhPT09az8wIT09ZS5sZW5ndGg/ZVswXS5vUHJldmlvdXNTZWFyY2gu c1NlYXJjaDprOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihlKXtlLm9GZWF0dXJlcy5i RmlsdGVyJiZmYShlLGguZXh0ZW5kKHt9LGUub1ByZXZpb3VzU2VhcmNoLHtzU2VhcmNoOmErIiIs YlJlZ2V4Om51bGw9PT1iPyExOmIsYlNtYXJ0Om51bGw9PT1jPyEwOmMsYkNhc2VJbnNlbnNpdGl2 ZTpudWxsPT09ZD8hMDpkfSksMSl9KX0pO3UoImNvbHVtbnMoKS5zZWFyY2goKSIsImNvbHVtbigp LnNlYXJjaCgpIixmdW5jdGlvbihhLAorYixjLGQpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1 bW4iLGZ1bmN0aW9uKGUsZil7dmFyIGc9ZS5hb1ByZVNlYXJjaENvbHM7aWYoYT09PWspcmV0dXJu IGdbZl0uc1NlYXJjaDtlLm9GZWF0dXJlcy5iRmlsdGVyJiYoaC5leHRlbmQoZ1tmXSx7c1NlYXJj aDphKyIiLGJSZWdleDpudWxsPT09Yj8hMTpiLGJTbWFydDpudWxsPT09Yz8hMDpjLGJDYXNlSW5z ZW5zaXRpdmU6bnVsbD09PWQ/ITA6ZH0pLGZhKGUsZS5vUHJldmlvdXNTZWFyY2gsMSkpfSl9KTtv KCJzdGF0ZSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoP3RoaXMuY29u dGV4dFswXS5vU2F2ZWRTdGF0ZTpudWxsfSk7bygic3RhdGUuY2xlYXIoKSIsZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe2EuZm5TdGF0ZVNhdmVDYWxs YmFjay5jYWxsKGEub0luc3RhbmNlLGEse30pfSl9KTtvKCJzdGF0ZS5sb2FkZWQoKSIsZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aD8KK3RoaXMuY29udGV4dFswXS5vTG9hZGVk U3RhdGU6bnVsbH0pO28oInN0YXRlLnNhdmUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVy YXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3hhKGEpfSl9KTttLnZlcnNpb25DaGVjaz1tLmZuVmVy c2lvbkNoZWNrPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1tLnZlcnNpb24uc3BsaXQoIi4iKSxhPWEu c3BsaXQoIi4iKSxjLGQsZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKylpZihjPXBhcnNlSW50KGJbZV0s MTApfHwwLGQ9cGFyc2VJbnQoYVtlXSwxMCl8fDAsYyE9PWQpcmV0dXJuIGM+ZDtyZXR1cm4hMH07 bS5pc0RhdGFUYWJsZT1tLmZuSXNEYXRhVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGI9aChhKS5nZXQo MCksYz0hMTtpZihhIGluc3RhbmNlb2YgbS5BcGkpcmV0dXJuITA7aC5lYWNoKG0uc2V0dGluZ3Ms ZnVuY3Rpb24oYSxlKXt2YXIgZj1lLm5TY3JvbGxIZWFkP2goInRhYmxlIixlLm5TY3JvbGxIZWFk KVswXTpudWxsLGc9ZS5uU2Nyb2xsRm9vdD8KK2goInRhYmxlIixlLm5TY3JvbGxGb290KVswXTpu dWxsO2lmKGUublRhYmxlPT09Ynx8Zj09PWJ8fGc9PT1iKWM9ITB9KTtyZXR1cm4gY307bS50YWJs ZXM9bS5mblRhYmxlcz1mdW5jdGlvbihhKXt2YXIgYj0hMTtoLmlzUGxhaW5PYmplY3QoYSkmJihi PWEuYXBpLGE9YS52aXNpYmxlKTt2YXIgYz1oLm1hcChtLnNldHRpbmdzLGZ1bmN0aW9uKGIpe2lm KCFhfHxhJiZoKGIublRhYmxlKS5pcygiOnZpc2libGUiKSlyZXR1cm4gYi5uVGFibGV9KTtyZXR1 cm4gYj9uZXcgcyhjKTpjfTttLmNhbWVsVG9IdW5nYXJpYW49STtvKCIkKCkiLGZ1bmN0aW9uKGEs Yil7dmFyIGM9dGhpcy5yb3dzKGIpLm5vZGVzKCksYz1oKGMpO3JldHVybiBoKFtdLmNvbmNhdChj LmZpbHRlcihhKS50b0FycmF5KCksYy5maW5kKGEpLnRvQXJyYXkoKSkpfSk7aC5lYWNoKFsib24i LCJvbmUiLCJvZmYiXSxmdW5jdGlvbihhLGIpe28oYisiKCkiLGZ1bmN0aW9uKCl7dmFyIGE9QXJy YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKK2FbMF09aC5tYXAoYVswXS5zcGxp dCgvXHMvKSxmdW5jdGlvbihhKXtyZXR1cm4hYS5tYXRjaCgvXC5kdFxiLyk/YSsiLmR0IjphfSku am9pbigiICIpO3ZhciBkPWgodGhpcy50YWJsZXMoKS5ub2RlcygpKTtkW2JdLmFwcGx5KGQsYSk7 cmV0dXJuIHRoaXN9KX0pO28oImNsZWFyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0 b3IoInRhYmxlIixmdW5jdGlvbihhKXtuYShhKX0pfSk7bygic2V0dGluZ3MoKSIsZnVuY3Rpb24o KXtyZXR1cm4gbmV3IHModGhpcy5jb250ZXh0LHRoaXMuY29udGV4dCl9KTtvKCJpbml0KCkiLGZ1 bmN0aW9uKCl7dmFyIGE9dGhpcy5jb250ZXh0O3JldHVybiBhLmxlbmd0aD9hWzBdLm9Jbml0Om51 bGx9KTtvKCJkYXRhKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixm dW5jdGlvbihhKXtyZXR1cm4gRChhLmFvRGF0YSwiX2FEYXRhIil9KS5mbGF0dGVuKCl9KTtvKCJk ZXN0cm95KCkiLGZ1bmN0aW9uKGEpe2E9YXx8CishMTtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFi bGUiLGZ1bmN0aW9uKGIpe3ZhciBjPWIublRhYmxlV3JhcHBlci5wYXJlbnROb2RlLGQ9Yi5vQ2xh c3NlcyxlPWIublRhYmxlLGY9Yi5uVEJvZHksZz1iLm5USGVhZCxqPWIublRGb290LGk9aChlKSxm PWgoZiksaz1oKGIublRhYmxlV3JhcHBlciksbD1oLm1hcChiLmFvRGF0YSxmdW5jdGlvbihhKXty ZXR1cm4gYS5uVHJ9KSxvO2IuYkRlc3Ryb3lpbmc9ITA7cihiLCJhb0Rlc3Ryb3lDYWxsYmFjayIs ImRlc3Ryb3kiLFtiXSk7YXx8KG5ldyBzKGIpKS5jb2x1bW5zKCkudmlzaWJsZSghMCk7ay5vZmYo Ii5EVCIpLmZpbmQoIjpub3QodGJvZHkgKikiKS5vZmYoIi5EVCIpO2goRSkub2ZmKCIuRFQtIiti LnNJbnN0YW5jZSk7ZSE9Zy5wYXJlbnROb2RlJiYoaS5jaGlsZHJlbigidGhlYWQiKS5kZXRhY2go KSxpLmFwcGVuZChnKSk7aiYmZSE9ai5wYXJlbnROb2RlJiYoaS5jaGlsZHJlbigidGZvb3QiKS5k ZXRhY2goKSxpLmFwcGVuZChqKSk7CitiLmFhU29ydGluZz1bXTtiLmFhU29ydGluZ0ZpeGVkPVtd O3dhKGIpO2gobCkucmVtb3ZlQ2xhc3MoYi5hc1N0cmlwZUNsYXNzZXMuam9pbigiICIpKTtoKCJ0 aCwgdGQiLGcpLnJlbW92ZUNsYXNzKGQuc1NvcnRhYmxlKyIgIitkLnNTb3J0YWJsZUFzYysiICIr ZC5zU29ydGFibGVEZXNjKyIgIitkLnNTb3J0YWJsZU5vbmUpO2YuY2hpbGRyZW4oKS5kZXRhY2go KTtmLmFwcGVuZChsKTtnPWE/InJlbW92ZSI6ImRldGFjaCI7aVtnXSgpO2tbZ10oKTshYSYmYyYm KGMuaW5zZXJ0QmVmb3JlKGUsYi5uVGFibGVSZWluc2VydEJlZm9yZSksaS5jc3MoIndpZHRoIixi LnNEZXN0cm95V2lkdGgpLnJlbW92ZUNsYXNzKGQuc1RhYmxlKSwobz1iLmFzRGVzdHJveVN0cmlw ZXMubGVuZ3RoKSYmZi5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oYSl7aCh0aGlzKS5hZGRDbGFz cyhiLmFzRGVzdHJveVN0cmlwZXNbYSVvXSl9KSk7Yz1oLmluQXJyYXkoYixtLnNldHRpbmdzKTst MSE9PWMmJm0uc2V0dGluZ3Muc3BsaWNlKGMsCisxKX0pfSk7aC5lYWNoKFsiY29sdW1uIiwicm93 IiwiY2VsbCJdLGZ1bmN0aW9uKGEsYil7byhiKyJzKCkuZXZlcnkoKSIsZnVuY3Rpb24oYSl7dmFy IGQ9dGhpcy5zZWxlY3Rvci5vcHRzLGU9dGhpcztyZXR1cm4gdGhpcy5pdGVyYXRvcihiLGZ1bmN0 aW9uKGYsZyxoLGksbil7YS5jYWxsKGVbYl0oZywiY2VsbCI9PT1iP2g6ZCwiY2VsbCI9PT1iP2Q6 ayksZyxoLGksbil9KX0pfSk7bygiaTE4bigpIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5j b250ZXh0WzBdLGE9UShhKShkLm9MYW5ndWFnZSk7YT09PWsmJihhPWIpO2MhPT1rJiZoLmlzUGxh aW5PYmplY3QoYSkmJihhPWFbY10hPT1rP2FbY106YS5fKTtyZXR1cm4gYS5yZXBsYWNlKCIlZCIs Yyl9KTttLnZlcnNpb249IjEuMTAuMTYiO20uc2V0dGluZ3M9W107bS5tb2RlbHM9e307bS5tb2Rl bHMub1NlYXJjaD17YkNhc2VJbnNlbnNpdGl2ZTohMCxzU2VhcmNoOiIiLGJSZWdleDohMSxiU21h cnQ6ITB9O20ubW9kZWxzLm9Sb3c9Cit7blRyOm51bGwsYW5DZWxsczpudWxsLF9hRGF0YTpbXSxf YVNvcnREYXRhOm51bGwsX2FGaWx0ZXJEYXRhOm51bGwsX3NGaWx0ZXJSb3c6bnVsbCxfc1Jvd1N0 cmlwZToiIixzcmM6bnVsbCxpZHg6LTF9O20ubW9kZWxzLm9Db2x1bW49e2lkeDpudWxsLGFEYXRh U29ydDpudWxsLGFzU29ydGluZzpudWxsLGJTZWFyY2hhYmxlOm51bGwsYlNvcnRhYmxlOm51bGws YlZpc2libGU6bnVsbCxfc01hbnVhbFR5cGU6bnVsbCxfYkF0dHJTcmM6ITEsZm5DcmVhdGVkQ2Vs bDpudWxsLGZuR2V0RGF0YTpudWxsLGZuU2V0RGF0YTpudWxsLG1EYXRhOm51bGwsbVJlbmRlcjpu dWxsLG5UaDpudWxsLG5UZjpudWxsLHNDbGFzczpudWxsLHNDb250ZW50UGFkZGluZzpudWxsLHNE ZWZhdWx0Q29udGVudDpudWxsLHNOYW1lOm51bGwsc1NvcnREYXRhVHlwZToic3RkIixzU29ydGlu Z0NsYXNzOm51bGwsc1NvcnRpbmdDbGFzc0pVSTpudWxsLHNUaXRsZTpudWxsLHNUeXBlOm51bGws c1dpZHRoOm51bGwsCitzV2lkdGhPcmlnOm51bGx9O20uZGVmYXVsdHM9e2FhRGF0YTpudWxsLGFh U29ydGluZzpbWzAsImFzYyJdXSxhYVNvcnRpbmdGaXhlZDpbXSxhamF4Om51bGwsYUxlbmd0aE1l bnU6WzEwLDI1LDUwLDEwMF0sYW9Db2x1bW5zOm51bGwsYW9Db2x1bW5EZWZzOm51bGwsYW9TZWFy Y2hDb2xzOltdLGFzU3RyaXBlQ2xhc3NlczpudWxsLGJBdXRvV2lkdGg6ITAsYkRlZmVyUmVuZGVy OiExLGJEZXN0cm95OiExLGJGaWx0ZXI6ITAsYkluZm86ITAsYkxlbmd0aENoYW5nZTohMCxiUGFn aW5hdGU6ITAsYlByb2Nlc3Npbmc6ITEsYlJldHJpZXZlOiExLGJTY3JvbGxDb2xsYXBzZTohMSxi U2VydmVyU2lkZTohMSxiU29ydDohMCxiU29ydE11bHRpOiEwLGJTb3J0Q2VsbHNUb3A6ITEsYlNv cnRDbGFzc2VzOiEwLGJTdGF0ZVNhdmU6ITEsZm5DcmVhdGVkUm93Om51bGwsZm5EcmF3Q2FsbGJh Y2s6bnVsbCxmbkZvb3RlckNhbGxiYWNrOm51bGwsZm5Gb3JtYXROdW1iZXI6ZnVuY3Rpb24oYSl7 cmV0dXJuIGEudG9TdHJpbmcoKS5yZXBsYWNlKC9cQig/PShcZHszfSkrKD8hXGQpKS9nLAordGhp cy5vTGFuZ3VhZ2Uuc1Rob3VzYW5kcyl9LGZuSGVhZGVyQ2FsbGJhY2s6bnVsbCxmbkluZm9DYWxs YmFjazpudWxsLGZuSW5pdENvbXBsZXRlOm51bGwsZm5QcmVEcmF3Q2FsbGJhY2s6bnVsbCxmblJv d0NhbGxiYWNrOm51bGwsZm5TZXJ2ZXJEYXRhOm51bGwsZm5TZXJ2ZXJQYXJhbXM6bnVsbCxmblN0 YXRlTG9hZENhbGxiYWNrOmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZSgoLTE9PT1h LmlTdGF0ZUR1cmF0aW9uP3Nlc3Npb25TdG9yYWdlOmxvY2FsU3RvcmFnZSkuZ2V0SXRlbSgiRGF0 YVRhYmxlc18iK2Euc0luc3RhbmNlKyJfIitsb2NhdGlvbi5wYXRobmFtZSkpfWNhdGNoKGIpe319 LGZuU3RhdGVMb2FkUGFyYW1zOm51bGwsZm5TdGF0ZUxvYWRlZDpudWxsLGZuU3RhdGVTYXZlQ2Fs bGJhY2s6ZnVuY3Rpb24oYSxiKXt0cnl7KC0xPT09YS5pU3RhdGVEdXJhdGlvbj9zZXNzaW9uU3Rv cmFnZTpsb2NhbFN0b3JhZ2UpLnNldEl0ZW0oIkRhdGFUYWJsZXNfIithLnNJbnN0YW5jZSsKKyJf Iitsb2NhdGlvbi5wYXRobmFtZSxKU09OLnN0cmluZ2lmeShiKSl9Y2F0Y2goYyl7fX0sZm5TdGF0 ZVNhdmVQYXJhbXM6bnVsbCxpU3RhdGVEdXJhdGlvbjo3MjAwLGlEZWZlckxvYWRpbmc6bnVsbCxp RGlzcGxheUxlbmd0aDoxMCxpRGlzcGxheVN0YXJ0OjAsaVRhYkluZGV4OjAsb0NsYXNzZXM6e30s b0xhbmd1YWdlOntvQXJpYTp7c1NvcnRBc2NlbmRpbmc6IjogYWN0aXZhdGUgdG8gc29ydCBjb2x1 bW4gYXNjZW5kaW5nIixzU29ydERlc2NlbmRpbmc6IjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4g ZGVzY2VuZGluZyJ9LG9QYWdpbmF0ZTp7c0ZpcnN0OiJGaXJzdCIsc0xhc3Q6Ikxhc3QiLHNOZXh0 OiJOZXh0IixzUHJldmlvdXM6IlByZXZpb3VzIn0sc0VtcHR5VGFibGU6Ik5vIGRhdGEgYXZhaWxh YmxlIGluIHRhYmxlIixzSW5mbzoiU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8g ZW50cmllcyIsc0luZm9FbXB0eToiU2hvd2luZyAwIHRvIDAgb2YgMCBlbnRyaWVzIiwKK3NJbmZv RmlsdGVyZWQ6IihmaWx0ZXJlZCBmcm9tIF9NQVhfIHRvdGFsIGVudHJpZXMpIixzSW5mb1Bvc3RG aXg6IiIsc0RlY2ltYWw6IiIsc1Rob3VzYW5kczoiLCIsc0xlbmd0aE1lbnU6IlNob3cgX01FTlVf IGVudHJpZXMiLHNMb2FkaW5nUmVjb3JkczoiTG9hZGluZy4uLiIsc1Byb2Nlc3Npbmc6IlByb2Nl c3NpbmcuLi4iLHNTZWFyY2g6IlNlYXJjaDoiLHNTZWFyY2hQbGFjZWhvbGRlcjoiIixzVXJsOiIi LHNaZXJvUmVjb3JkczoiTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZCJ9LG9TZWFyY2g6aC5leHRl bmQoe30sbS5tb2RlbHMub1NlYXJjaCksc0FqYXhEYXRhUHJvcDoiZGF0YSIsc0FqYXhTb3VyY2U6 bnVsbCxzRG9tOiJsZnJ0aXAiLHNlYXJjaERlbGF5Om51bGwsc1BhZ2luYXRpb25UeXBlOiJzaW1w bGVfbnVtYmVycyIsc1Njcm9sbFg6IiIsc1Njcm9sbFhJbm5lcjoiIixzU2Nyb2xsWToiIixzU2Vy dmVyTWV0aG9kOiJHRVQiLHJlbmRlcmVyOm51bGwscm93SWQ6IkRUX1Jvd0lkIn07CitYKG0uZGVm YXVsdHMpO20uZGVmYXVsdHMuY29sdW1uPXthRGF0YVNvcnQ6bnVsbCxpRGF0YVNvcnQ6LTEsYXNT b3J0aW5nOlsiYXNjIiwiZGVzYyJdLGJTZWFyY2hhYmxlOiEwLGJTb3J0YWJsZTohMCxiVmlzaWJs ZTohMCxmbkNyZWF0ZWRDZWxsOm51bGwsbURhdGE6bnVsbCxtUmVuZGVyOm51bGwsc0NlbGxUeXBl OiJ0ZCIsc0NsYXNzOiIiLHNDb250ZW50UGFkZGluZzoiIixzRGVmYXVsdENvbnRlbnQ6bnVsbCxz TmFtZToiIixzU29ydERhdGFUeXBlOiJzdGQiLHNUaXRsZTpudWxsLHNUeXBlOm51bGwsc1dpZHRo Om51bGx9O1gobS5kZWZhdWx0cy5jb2x1bW4pO20ubW9kZWxzLm9TZXR0aW5ncz17b0ZlYXR1cmVz OntiQXV0b1dpZHRoOm51bGwsYkRlZmVyUmVuZGVyOm51bGwsYkZpbHRlcjpudWxsLGJJbmZvOm51 bGwsYkxlbmd0aENoYW5nZTpudWxsLGJQYWdpbmF0ZTpudWxsLGJQcm9jZXNzaW5nOm51bGwsYlNl cnZlclNpZGU6bnVsbCxiU29ydDpudWxsLGJTb3J0TXVsdGk6bnVsbCwKK2JTb3J0Q2xhc3Nlczpu dWxsLGJTdGF0ZVNhdmU6bnVsbH0sb1Njcm9sbDp7YkNvbGxhcHNlOm51bGwsaUJhcldpZHRoOjAs c1g6bnVsbCxzWElubmVyOm51bGwsc1k6bnVsbH0sb0xhbmd1YWdlOntmbkluZm9DYWxsYmFjazpu dWxsfSxvQnJvd3Nlcjp7YlNjcm9sbE92ZXJzaXplOiExLGJTY3JvbGxiYXJMZWZ0OiExLGJCb3Vu ZGluZzohMSxiYXJXaWR0aDowfSxhamF4Om51bGwsYWFuRmVhdHVyZXM6W10sYW9EYXRhOltdLGFp RGlzcGxheTpbXSxhaURpc3BsYXlNYXN0ZXI6W10sYUlkczp7fSxhb0NvbHVtbnM6W10sYW9IZWFk ZXI6W10sYW9Gb290ZXI6W10sb1ByZXZpb3VzU2VhcmNoOnt9LGFvUHJlU2VhcmNoQ29sczpbXSxh YVNvcnRpbmc6bnVsbCxhYVNvcnRpbmdGaXhlZDpbXSxhc1N0cmlwZUNsYXNzZXM6bnVsbCxhc0Rl c3Ryb3lTdHJpcGVzOltdLHNEZXN0cm95V2lkdGg6MCxhb1Jvd0NhbGxiYWNrOltdLGFvSGVhZGVy Q2FsbGJhY2s6W10sYW9Gb290ZXJDYWxsYmFjazpbXSwKK2FvRHJhd0NhbGxiYWNrOltdLGFvUm93 Q3JlYXRlZENhbGxiYWNrOltdLGFvUHJlRHJhd0NhbGxiYWNrOltdLGFvSW5pdENvbXBsZXRlOltd LGFvU3RhdGVTYXZlUGFyYW1zOltdLGFvU3RhdGVMb2FkUGFyYW1zOltdLGFvU3RhdGVMb2FkZWQ6 W10sc1RhYmxlSWQ6IiIsblRhYmxlOm51bGwsblRIZWFkOm51bGwsblRGb290Om51bGwsblRCb2R5 Om51bGwsblRhYmxlV3JhcHBlcjpudWxsLGJEZWZlckxvYWRpbmc6ITEsYkluaXRpYWxpc2VkOiEx LGFvT3BlblJvd3M6W10sc0RvbTpudWxsLHNlYXJjaERlbGF5Om51bGwsc1BhZ2luYXRpb25UeXBl OiJ0d29fYnV0dG9uIixpU3RhdGVEdXJhdGlvbjowLGFvU3RhdGVTYXZlOltdLGFvU3RhdGVMb2Fk OltdLG9TYXZlZFN0YXRlOm51bGwsb0xvYWRlZFN0YXRlOm51bGwsc0FqYXhTb3VyY2U6bnVsbCxz QWpheERhdGFQcm9wOm51bGwsYkFqYXhEYXRhR2V0OiEwLGpxWEhSOm51bGwsanNvbjprLG9BamF4 RGF0YTprLGZuU2VydmVyRGF0YTpudWxsLAorYW9TZXJ2ZXJQYXJhbXM6W10sc1NlcnZlck1ldGhv ZDpudWxsLGZuRm9ybWF0TnVtYmVyOm51bGwsYUxlbmd0aE1lbnU6bnVsbCxpRHJhdzowLGJEcmF3 aW5nOiExLGlEcmF3RXJyb3I6LTEsX2lEaXNwbGF5TGVuZ3RoOjEwLF9pRGlzcGxheVN0YXJ0OjAs X2lSZWNvcmRzVG90YWw6MCxfaVJlY29yZHNEaXNwbGF5OjAsb0NsYXNzZXM6e30sYkZpbHRlcmVk OiExLGJTb3J0ZWQ6ITEsYlNvcnRDZWxsc1RvcDpudWxsLG9Jbml0Om51bGwsYW9EZXN0cm95Q2Fs bGJhY2s6W10sZm5SZWNvcmRzVG90YWw6ZnVuY3Rpb24oKXtyZXR1cm4ic3NwIj09eSh0aGlzKT8x KnRoaXMuX2lSZWNvcmRzVG90YWw6dGhpcy5haURpc3BsYXlNYXN0ZXIubGVuZ3RofSxmblJlY29y ZHNEaXNwbGF5OmZ1bmN0aW9uKCl7cmV0dXJuInNzcCI9PXkodGhpcyk/MSp0aGlzLl9pUmVjb3Jk c0Rpc3BsYXk6dGhpcy5haURpc3BsYXkubGVuZ3RofSxmbkRpc3BsYXlFbmQ6ZnVuY3Rpb24oKXt2 YXIgYT10aGlzLl9pRGlzcGxheUxlbmd0aCwKK2I9dGhpcy5faURpc3BsYXlTdGFydCxjPWIrYSxk PXRoaXMuYWlEaXNwbGF5Lmxlbmd0aCxlPXRoaXMub0ZlYXR1cmVzLGY9ZS5iUGFnaW5hdGU7cmV0 dXJuIGUuYlNlcnZlclNpZGU/ITE9PT1mfHwtMT09PWE/YitkOk1hdGgubWluKGIrYSx0aGlzLl9p UmVjb3Jkc0Rpc3BsYXkpOiFmfHxjPmR8fC0xPT09YT9kOmN9LG9JbnN0YW5jZTpudWxsLHNJbnN0 YW5jZTpudWxsLGlUYWJJbmRleDowLG5TY3JvbGxIZWFkOm51bGwsblNjcm9sbEZvb3Q6bnVsbCxh TGFzdFNvcnQ6W10sb1BsdWdpbnM6e30scm93SWRGbjpudWxsLHJvd0lkOm51bGx9O20uZXh0PXg9 e2J1dHRvbnM6e30sY2xhc3Nlczp7fSxidWlsZGVyOiItc291cmNlLSIsZXJyTW9kZToiYWxlcnQi LGZlYXR1cmU6W10sc2VhcmNoOltdLHNlbGVjdG9yOntjZWxsOltdLGNvbHVtbjpbXSxyb3c6W119 LGludGVybmFsOnt9LGxlZ2FjeTp7YWpheDpudWxsfSxwYWdlcjp7fSxyZW5kZXJlcjp7cGFnZUJ1 dHRvbjp7fSxoZWFkZXI6e319LAorb3JkZXI6e30sdHlwZTp7ZGV0ZWN0OltdLHNlYXJjaDp7fSxv cmRlcjp7fX0sX3VuaXF1ZTowLGZuVmVyc2lvbkNoZWNrOm0uZm5WZXJzaW9uQ2hlY2ssaUFwaUlu ZGV4OjAsb0pVSUNsYXNzZXM6e30sc1ZlcnNpb246bS52ZXJzaW9ufTtoLmV4dGVuZCh4LHthZm5G aWx0ZXJpbmc6eC5zZWFyY2gsYVR5cGVzOngudHlwZS5kZXRlY3Qsb2ZuU2VhcmNoOngudHlwZS5z ZWFyY2gsb1NvcnQ6eC50eXBlLm9yZGVyLGFmblNvcnREYXRhOngub3JkZXIsYW9GZWF0dXJlczp4 LmZlYXR1cmUsb0FwaTp4LmludGVybmFsLG9TdGRDbGFzc2VzOnguY2xhc3NlcyxvUGFnaW5hdGlv bjp4LnBhZ2VyfSk7aC5leHRlbmQobS5leHQuY2xhc3Nlcyx7c1RhYmxlOiJkYXRhVGFibGUiLHNO b0Zvb3Rlcjoibm8tZm9vdGVyIixzUGFnZUJ1dHRvbjoicGFnaW5hdGVfYnV0dG9uIixzUGFnZUJ1 dHRvbkFjdGl2ZToiY3VycmVudCIsc1BhZ2VCdXR0b25EaXNhYmxlZDoiZGlzYWJsZWQiLHNTdHJp cGVPZGQ6Im9kZCIsCitzU3RyaXBlRXZlbjoiZXZlbiIsc1Jvd0VtcHR5OiJkYXRhVGFibGVzX2Vt cHR5IixzV3JhcHBlcjoiZGF0YVRhYmxlc193cmFwcGVyIixzRmlsdGVyOiJkYXRhVGFibGVzX2Zp bHRlciIsc0luZm86ImRhdGFUYWJsZXNfaW5mbyIsc1BhZ2luZzoiZGF0YVRhYmxlc19wYWdpbmF0 ZSBwYWdpbmdfIixzTGVuZ3RoOiJkYXRhVGFibGVzX2xlbmd0aCIsc1Byb2Nlc3Npbmc6ImRhdGFU YWJsZXNfcHJvY2Vzc2luZyIsc1NvcnRBc2M6InNvcnRpbmdfYXNjIixzU29ydERlc2M6InNvcnRp bmdfZGVzYyIsc1NvcnRhYmxlOiJzb3J0aW5nIixzU29ydGFibGVBc2M6InNvcnRpbmdfYXNjX2Rp c2FibGVkIixzU29ydGFibGVEZXNjOiJzb3J0aW5nX2Rlc2NfZGlzYWJsZWQiLHNTb3J0YWJsZU5v bmU6InNvcnRpbmdfZGlzYWJsZWQiLHNTb3J0Q29sdW1uOiJzb3J0aW5nXyIsc0ZpbHRlcklucHV0 OiIiLHNMZW5ndGhTZWxlY3Q6IiIsc1Njcm9sbFdyYXBwZXI6ImRhdGFUYWJsZXNfc2Nyb2xsIixz U2Nyb2xsSGVhZDoiZGF0YVRhYmxlc19zY3JvbGxIZWFkIiwKK3NTY3JvbGxIZWFkSW5uZXI6ImRh dGFUYWJsZXNfc2Nyb2xsSGVhZElubmVyIixzU2Nyb2xsQm9keToiZGF0YVRhYmxlc19zY3JvbGxC b2R5IixzU2Nyb2xsRm9vdDoiZGF0YVRhYmxlc19zY3JvbGxGb290IixzU2Nyb2xsRm9vdElubmVy OiJkYXRhVGFibGVzX3Njcm9sbEZvb3RJbm5lciIsc0hlYWRlclRIOiIiLHNGb290ZXJUSDoiIixz U29ydEpVSUFzYzoiIixzU29ydEpVSURlc2M6IiIsc1NvcnRKVUk6IiIsc1NvcnRKVUlBc2NBbGxv d2VkOiIiLHNTb3J0SlVJRGVzY0FsbG93ZWQ6IiIsc1NvcnRKVUlXcmFwcGVyOiIiLHNTb3J0SWNv bjoiIixzSlVJSGVhZGVyOiIiLHNKVUlGb290ZXI6IiJ9KTt2YXIgS2I9bS5leHQucGFnZXI7aC5l eHRlbmQoS2Ise3NpbXBsZTpmdW5jdGlvbigpe3JldHVyblsicHJldmlvdXMiLCJuZXh0Il19LGZ1 bGw6ZnVuY3Rpb24oKXtyZXR1cm5bImZpcnN0IiwicHJldmlvdXMiLCJuZXh0IiwibGFzdCJdfSxu dW1iZXJzOmZ1bmN0aW9uKGEsYil7cmV0dXJuW2hhKGEsCitiKV19LHNpbXBsZV9udW1iZXJzOmZ1 bmN0aW9uKGEsYil7cmV0dXJuWyJwcmV2aW91cyIsaGEoYSxiKSwibmV4dCJdfSxmdWxsX251bWJl cnM6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bImZpcnN0IiwicHJldmlvdXMiLGhhKGEsYiksIm5leHQi LCJsYXN0Il19LGZpcnN0X2xhc3RfbnVtYmVyczpmdW5jdGlvbihhLGIpe3JldHVyblsiZmlyc3Qi LGhhKGEsYiksImxhc3QiXX0sX251bWJlcnM6aGEsbnVtYmVyc19sZW5ndGg6N30pO2guZXh0ZW5k KCEwLG0uZXh0LnJlbmRlcmVyLHtwYWdlQnV0dG9uOntfOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2 YXIgZz1hLm9DbGFzc2VzLGo9YS5vTGFuZ3VhZ2Uub1BhZ2luYXRlLGk9YS5vTGFuZ3VhZ2Uub0Fy aWEucGFnaW5hdGV8fHt9LG4sbCxtPTAsbz1mdW5jdGlvbihiLGQpe3ZhciBrLHMsdSxyLHY9ZnVu Y3Rpb24oYil7U2EoYSxiLmRhdGEuYWN0aW9uLHRydWUpfTtrPTA7Zm9yKHM9ZC5sZW5ndGg7azxz O2srKyl7cj1kW2tdO2lmKGguaXNBcnJheShyKSl7dT0KK2goIjwiKyhyLkRUX2VsfHwiZGl2Iikr Ii8+IikuYXBwZW5kVG8oYik7byh1LHIpfWVsc2V7bj1udWxsO2w9IiI7c3dpdGNoKHIpe2Nhc2Ug ImVsbGlwc2lzIjpiLmFwcGVuZCgnPHNwYW4gY2xhc3M9ImVsbGlwc2lzIj4mI3gyMDI2Ozwvc3Bh bj4nKTticmVhaztjYXNlICJmaXJzdCI6bj1qLnNGaXJzdDtsPXIrKGU+MD8iIjoiICIrZy5zUGFn ZUJ1dHRvbkRpc2FibGVkKTticmVhaztjYXNlICJwcmV2aW91cyI6bj1qLnNQcmV2aW91cztsPXIr KGU+MD8iIjoiICIrZy5zUGFnZUJ1dHRvbkRpc2FibGVkKTticmVhaztjYXNlICJuZXh0IjpuPWou c05leHQ7bD1yKyhlPGYtMT8iIjoiICIrZy5zUGFnZUJ1dHRvbkRpc2FibGVkKTticmVhaztjYXNl ICJsYXN0IjpuPWouc0xhc3Q7bD1yKyhlPGYtMT8iIjoiICIrZy5zUGFnZUJ1dHRvbkRpc2FibGVk KTticmVhaztkZWZhdWx0Om49cisxO2w9ZT09PXI/Zy5zUGFnZUJ1dHRvbkFjdGl2ZToiIn1pZihu IT09bnVsbCl7dT1oKCI8YT4iLHsiY2xhc3MiOmcuc1BhZ2VCdXR0b24rCisiICIrbCwiYXJpYS1j b250cm9scyI6YS5zVGFibGVJZCwiYXJpYS1sYWJlbCI6aVtyXSwiZGF0YS1kdC1pZHgiOm0sdGFi aW5kZXg6YS5pVGFiSW5kZXgsaWQ6Yz09PTAmJnR5cGVvZiByPT09InN0cmluZyI/YS5zVGFibGVJ ZCsiXyIrcjpudWxsfSkuaHRtbChuKS5hcHBlbmRUbyhiKTtWYSh1LHthY3Rpb246cn0sdik7bSsr fX19fSxzO3RyeXtzPWgoYikuZmluZChHLmFjdGl2ZUVsZW1lbnQpLmRhdGEoImR0LWlkeCIpfWNh dGNoKHUpe31vKGgoYikuZW1wdHkoKSxkKTtzIT09ayYmaChiKS5maW5kKCJbZGF0YS1kdC1pZHg9 IitzKyJdIikuZm9jdXMoKX19fSk7aC5leHRlbmQobS5leHQudHlwZS5kZXRlY3QsW2Z1bmN0aW9u KGEsYil7dmFyIGM9Yi5vTGFuZ3VhZ2Uuc0RlY2ltYWw7cmV0dXJuIFlhKGEsYyk/Im51bSIrYzpu dWxsfSxmdW5jdGlvbihhKXtpZihhJiYhKGEgaW5zdGFuY2VvZiBEYXRlKSYmIVpiLnRlc3QoYSkp cmV0dXJuIG51bGw7dmFyIGI9RGF0ZS5wYXJzZShhKTsKK3JldHVybiBudWxsIT09YiYmIWlzTmFO KGIpfHxMKGEpPyJkYXRlIjpudWxsfSxmdW5jdGlvbihhLGIpe3ZhciBjPWIub0xhbmd1YWdlLnNE ZWNpbWFsO3JldHVybiBZYShhLGMsITApPyJudW0tZm10IitjOm51bGx9LGZ1bmN0aW9uKGEsYil7 dmFyIGM9Yi5vTGFuZ3VhZ2Uuc0RlY2ltYWw7cmV0dXJuIFBiKGEsYyk/Imh0bWwtbnVtIitjOm51 bGx9LGZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5vTGFuZ3VhZ2Uuc0RlY2ltYWw7cmV0dXJuIFBiKGEs YywhMCk/Imh0bWwtbnVtLWZtdCIrYzpudWxsfSxmdW5jdGlvbihhKXtyZXR1cm4gTChhKXx8InN0 cmluZyI9PT10eXBlb2YgYSYmLTEhPT1hLmluZGV4T2YoIjwiKT8iaHRtbCI6bnVsbH1dKTtoLmV4 dGVuZChtLmV4dC50eXBlLnNlYXJjaCx7aHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gTChhKT9hOiJz dHJpbmciPT09dHlwZW9mIGE/YS5yZXBsYWNlKE1iLCIgIikucmVwbGFjZShBYSwiIik6IiJ9LHN0 cmluZzpmdW5jdGlvbihhKXtyZXR1cm4gTChhKT8KK2E6InN0cmluZyI9PT10eXBlb2YgYT9hLnJl cGxhY2UoTWIsIiAiKTphfX0pO3ZhciB6YT1mdW5jdGlvbihhLGIsYyxkKXtpZigwIT09YSYmKCFh fHwiLSI9PT1hKSlyZXR1cm4tSW5maW5pdHk7YiYmKGE9T2IoYSxiKSk7YS5yZXBsYWNlJiYoYyYm KGE9YS5yZXBsYWNlKGMsIiIpKSxkJiYoYT1hLnJlcGxhY2UoZCwiIikpKTtyZXR1cm4gMSphfTto LmV4dGVuZCh4LnR5cGUub3JkZXIseyJkYXRlLXByZSI6ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUu cGFyc2UoYSl8fC1JbmZpbml0eX0sImh0bWwtcHJlIjpmdW5jdGlvbihhKXtyZXR1cm4gTChhKT8i IjphLnJlcGxhY2U/YS5yZXBsYWNlKC88Lio/Pi9nLCIiKS50b0xvd2VyQ2FzZSgpOmErIiJ9LCJz dHJpbmctcHJlIjpmdW5jdGlvbihhKXtyZXR1cm4gTChhKT8iIjoic3RyaW5nIj09PXR5cGVvZiBh P2EudG9Mb3dlckNhc2UoKTohYS50b1N0cmluZz8iIjphLnRvU3RyaW5nKCl9LCJzdHJpbmctYXNj IjpmdW5jdGlvbihhLGIpe3JldHVybiBhPAorYj8tMTphPmI/MTowfSwic3RyaW5nLWRlc2MiOmZ1 bmN0aW9uKGEsYil7cmV0dXJuIGE8Yj8xOmE+Yj8tMTowfX0pO2NiKCIiKTtoLmV4dGVuZCghMCxt LmV4dC5yZW5kZXJlcix7aGVhZGVyOntfOmZ1bmN0aW9uKGEsYixjLGQpe2goYS5uVGFibGUpLm9u KCJvcmRlci5kdC5EVCIsZnVuY3Rpb24oZSxmLGcsaCl7aWYoYT09PWYpe2U9Yy5pZHg7Yi5yZW1v dmVDbGFzcyhjLnNTb3J0aW5nQ2xhc3MrIiAiK2Quc1NvcnRBc2MrIiAiK2Quc1NvcnREZXNjKS5h ZGRDbGFzcyhoW2VdPT0iYXNjIj9kLnNTb3J0QXNjOmhbZV09PSJkZXNjIj9kLnNTb3J0RGVzYzpj LnNTb3J0aW5nQ2xhc3MpfX0pfSxqcXVlcnl1aTpmdW5jdGlvbihhLGIsYyxkKXtoKCI8ZGl2Lz4i KS5hZGRDbGFzcyhkLnNTb3J0SlVJV3JhcHBlcikuYXBwZW5kKGIuY29udGVudHMoKSkuYXBwZW5k KGgoIjxzcGFuLz4iKS5hZGRDbGFzcyhkLnNTb3J0SWNvbisiICIrYy5zU29ydGluZ0NsYXNzSlVJ KSkuYXBwZW5kVG8oYik7CitoKGEublRhYmxlKS5vbigib3JkZXIuZHQuRFQiLGZ1bmN0aW9uKGUs ZixnLGgpe2lmKGE9PT1mKXtlPWMuaWR4O2IucmVtb3ZlQ2xhc3MoZC5zU29ydEFzYysiICIrZC5z U29ydERlc2MpLmFkZENsYXNzKGhbZV09PSJhc2MiP2Quc1NvcnRBc2M6aFtlXT09ImRlc2MiP2Qu c1NvcnREZXNjOmMuc1NvcnRpbmdDbGFzcyk7Yi5maW5kKCJzcGFuLiIrZC5zU29ydEljb24pLnJl bW92ZUNsYXNzKGQuc1NvcnRKVUlBc2MrIiAiK2Quc1NvcnRKVUlEZXNjKyIgIitkLnNTb3J0SlVJ KyIgIitkLnNTb3J0SlVJQXNjQWxsb3dlZCsiICIrZC5zU29ydEpVSURlc2NBbGxvd2VkKS5hZGRD bGFzcyhoW2VdPT0iYXNjIj9kLnNTb3J0SlVJQXNjOmhbZV09PSJkZXNjIj9kLnNTb3J0SlVJRGVz YzpjLnNTb3J0aW5nQ2xhc3NKVUkpfX0pfX19KTt2YXIgVmI9ZnVuY3Rpb24oYSl7cmV0dXJuInN0 cmluZyI9PT10eXBlb2YgYT9hLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0 OyIpLnJlcGxhY2UoLyIvZywKKyImcXVvdDsiKTphfTttLnJlbmRlcj17bnVtYmVyOmZ1bmN0aW9u KGEsYixjLGQsZSl7cmV0dXJue2Rpc3BsYXk6ZnVuY3Rpb24oZil7aWYoIm51bWJlciIhPT10eXBl b2YgZiYmInN0cmluZyIhPT10eXBlb2YgZilyZXR1cm4gZjt2YXIgZz0wPmY/Ii0iOiIiLGg9cGFy c2VGbG9hdChmKTtpZihpc05hTihoKSlyZXR1cm4gVmIoZik7aD1oLnRvRml4ZWQoYyk7Zj1NYXRo LmFicyhoKTtoPXBhcnNlSW50KGYsMTApO2Y9Yz9iKyhmLWgpLnRvRml4ZWQoYykuc3Vic3RyaW5n KDIpOiIiO3JldHVybiBnKyhkfHwiIikraC50b1N0cmluZygpLnJlcGxhY2UoL1xCKD89KFxkezN9 KSsoPyFcZCkpL2csYSkrZisoZXx8IiIpfX19LHRleHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZGlzcGxh eTpWYn19fTtoLmV4dGVuZChtLmV4dC5pbnRlcm5hbCx7X2ZuRXh0ZXJuQXBpRnVuYzpMYixfZm5C dWlsZEFqYXg6c2EsX2ZuQWpheFVwZGF0ZTprYixfZm5BamF4UGFyYW1ldGVyczp0YixfZm5BamF4 VXBkYXRlRHJhdzp1YiwKK19mbkFqYXhEYXRhU3JjOnRhLF9mbkFkZENvbHVtbjpEYSxfZm5Db2x1 bW5PcHRpb25zOmphLF9mbkFkanVzdENvbHVtblNpemluZzpZLF9mblZpc2libGVUb0NvbHVtbklu ZGV4OlosX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGU6JCxfZm5WaXNibGVDb2x1bW5zOmFhLF9mbkdl dENvbHVtbnM6bGEsX2ZuQ29sdW1uVHlwZXM6RmEsX2ZuQXBwbHlDb2x1bW5EZWZzOmhiLF9mbkh1 bmdhcmlhbk1hcDpYLF9mbkNhbWVsVG9IdW5nYXJpYW46SSxfZm5MYW5ndWFnZUNvbXBhdDpDYSxf Zm5Ccm93c2VyRGV0ZWN0OmZiLF9mbkFkZERhdGE6TSxfZm5BZGRUcjptYSxfZm5Ob2RlVG9EYXRh SW5kZXg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5fRFRfUm93SW5kZXghPT1rP2IuX0RUX1Jvd0lu ZGV4Om51bGx9LF9mbk5vZGVUb0NvbHVtbkluZGV4OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gaC5p bkFycmF5KGMsYS5hb0RhdGFbYl0uYW5DZWxscyl9LF9mbkdldENlbGxEYXRhOkIsX2ZuU2V0Q2Vs bERhdGE6aWIsCitfZm5TcGxpdE9iak5vdGF0aW9uOklhLF9mbkdldE9iamVjdERhdGFGbjpRLF9m blNldE9iamVjdERhdGFGbjpSLF9mbkdldERhdGFNYXN0ZXI6SmEsX2ZuQ2xlYXJUYWJsZTpuYSxf Zm5EZWxldGVJbmRleDpvYSxfZm5JbnZhbGlkYXRlOmNhLF9mbkdldFJvd0VsZW1lbnRzOkhhLF9m bkNyZWF0ZVRyOkdhLF9mbkJ1aWxkSGVhZDpqYixfZm5EcmF3SGVhZDplYSxfZm5EcmF3Ok4sX2Zu UmVEcmF3OlMsX2ZuQWRkT3B0aW9uc0h0bWw6bWIsX2ZuRGV0ZWN0SGVhZGVyOmRhLF9mbkdldFVu aXF1ZVRoczpyYSxfZm5GZWF0dXJlSHRtbEZpbHRlcjpvYixfZm5GaWx0ZXJDb21wbGV0ZTpmYSxf Zm5GaWx0ZXJDdXN0b206eGIsX2ZuRmlsdGVyQ29sdW1uOndiLF9mbkZpbHRlcjp2YixfZm5GaWx0 ZXJDcmVhdGVTZWFyY2g6T2EsX2ZuRXNjYXBlUmVnZXg6UGEsX2ZuRmlsdGVyRGF0YTp5YixfZm5G ZWF0dXJlSHRtbEluZm86cmIsX2ZuVXBkYXRlSW5mbzpCYixfZm5JbmZvTWFjcm9zOkNiLF9mbklu aXRpYWxpc2U6Z2EsCitfZm5Jbml0Q29tcGxldGU6dWEsX2ZuTGVuZ3RoQ2hhbmdlOlFhLF9mbkZl YXR1cmVIdG1sTGVuZ3RoOm5iLF9mbkZlYXR1cmVIdG1sUGFnaW5hdGU6c2IsX2ZuUGFnZUNoYW5n ZTpTYSxfZm5GZWF0dXJlSHRtbFByb2Nlc3Npbmc6cGIsX2ZuUHJvY2Vzc2luZ0Rpc3BsYXk6Qyxf Zm5GZWF0dXJlSHRtbFRhYmxlOnFiLF9mblNjcm9sbERyYXc6a2EsX2ZuQXBwbHlUb0NoaWxkcmVu OkgsX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzOkVhLF9mblRocm90dGxlOk5hLF9mbkNvbnZlcnRU b1dpZHRoOkRiLF9mbkdldFdpZGVzdE5vZGU6RWIsX2ZuR2V0TWF4TGVuU3RyaW5nOkZiLF9mblN0 cmluZ1RvQ3NzOnYsX2ZuU29ydEZsYXR0ZW46VixfZm5Tb3J0OmxiLF9mblNvcnRBcmlhOkhiLF9m blNvcnRMaXN0ZW5lcjpVYSxfZm5Tb3J0QXR0YWNoTGlzdGVuZXI6TGEsX2ZuU29ydGluZ0NsYXNz ZXM6d2EsX2ZuU29ydERhdGE6R2IsX2ZuU2F2ZVN0YXRlOnhhLF9mbkxvYWRTdGF0ZTpJYixfZm5T ZXR0aW5nc0Zyb21Ob2RlOnlhLAorX2ZuTG9nOkosX2ZuTWFwOkYsX2ZuQmluZEFjdGlvbjpWYSxf Zm5DYWxsYmFja1JlZzp6LF9mbkNhbGxiYWNrRmlyZTpyLF9mbkxlbmd0aE92ZXJmbG93OlJhLF9m blJlbmRlcmVyOk1hLF9mbkRhdGFTb3VyY2U6eSxfZm5Sb3dBdHRyaWJ1dGVzOkthLF9mbkNhbGN1 bGF0ZUVuZDpmdW5jdGlvbigpe319KTtoLmZuLmRhdGFUYWJsZT1tO20uJD1oO2guZm4uZGF0YVRh YmxlU2V0dGluZ3M9bS5zZXR0aW5ncztoLmZuLmRhdGFUYWJsZUV4dD1tLmV4dDtoLmZuLkRhdGFU YWJsZT1mdW5jdGlvbihhKXtyZXR1cm4gaCh0aGlzKS5kYXRhVGFibGUoYSkuYXBpKCl9O2guZWFj aChtLGZ1bmN0aW9uKGEsYil7aC5mbi5EYXRhVGFibGVbYV09Yn0pO3JldHVybiBoLmZuLmRhdGFU YWJsZX0pOwoKZGlmZiAtLWdpdCBhL3JlcG9ydHMvcmVwb3J0LmNzcyBiL3JlcG9ydHMvcmVwb3J0 LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZlOWI4Ci0tLSAvZGV2 L251bGwKKysrIGIvcmVwb3J0cy9yZXBvcnQuY3NzCkBAIC0wLDAgKzEsMjQ5IEBACitib2R5IHsK KyAgICBmb250LWZhbWlseTogY2FudGFyZWxsLCBzYW5zLXNlcmlmOworICAgIGZvbnQtc2l6ZTog MTJweDsKK30KKwordWwuaGVhZGVyIHsKKyAgICBwYWRkaW5nOiA4cHggMHB4IDEycHggMHB4Owor ICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsKKyAgICBtYXJnaW46IDBweDsKK30K KwordWwuaGVhZGVyIGxpIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjODg4ODg4OworICAgIGJv cmRlci1yYWRpdXM6IDNweDsKKyAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwOworICAgIHBhZGRpbmc6 IDRweDsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKK3VsLmhlYWRlciBsaS5zZWxlY3RlZCB7 CisgICAgYmFja2dyb3VuZDogI2RkZGRkZDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsK K30KKwordWwuaGVhZGVyIGEgeworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xv cjogYmxhY2s7Cit9CisKKy8qIFJ1bnRpbWUgUmVwb3J0ICovCisKKy5zdW1tYXJ5IHsKKyAgICBi b3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFj a2dyb3VuZDogI2VlZWVlZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIG1hcmdpbjogMTBweDsK KyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgYm94LXNoYWRvdzogNXB4IDVweCA1cHg7CisgICAg cmlnaHQ6IDVweDsKKyAgICBib3R0b206IDVweDsKK30KKy5zdW1tYXJ5IC5ub3RlIHsKKyAgICBw YWRkaW5nLXRvcDogNXB4OworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KK3RhYmxlLnBhY2th Z2VzIHsKKyAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworfQordGFibGUucGFja2FnZXMg dHIgdGQsIHRyIHRoLmxldHRlciB7CisgICAgcGFkZGluZy1sZWZ0OiAxMHB4OworICAgIHBhZGRp bmctcmlnaHQ6IDEwcHg7Cit9Cit0ci5sZXR0ZXItaGVhZGVyLWFib3ZlIHsKKyAgICBib3JkZXIt bGVmdDogbm9uZTsKKyAgICBib3JkZXItcmlnaHQ6IG5vbmU7CisgICAgYm9yZGVyLWJvdHRvbTog MXB4IHNvbGlkICNhYTg4ODg7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhYTg4ODg7Cisg ICAgaGVpZ2h0OiAxMHB4OworfQordHIubGV0dGVyLWhlYWRlci1hYm92ZTpmaXJzdC1jaGlsZCB7 CisgICAgYm9yZGVyOiBub247Cit9Cit0ci5sZXR0ZXItaGVhZGVyIHsKKyAgICBib3JkZXI6IDFw eCBzb2xpZCAjYWE4ODg4OworICAgIGJhY2tncm91bmQ6ICNlZWVlZWU7Cit9Cit0ci5sZXR0ZXIt aGVhZGVyIHRoLmxldHRlciB7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICBmb250LXNpemU6 IDE2cHg7Cit9Cit0ciB7CisgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYWE4ODg4OworICAg IGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNhYTg4ODg7Cit9Cit0ci5zb3VyY2UtcGFja2FnZSB7 CisgICAgYmFja2dyb3VuZDogI2VlZWVlZTsKK30KK3RyLmJ1aWxkLXNkaywgdGQuYnVpbGQtc2Rr IHsKKyAgICBiYWNrZ3JvdW5kOiAjZWVmOGRkOworfQordHIuYnVpbGQtcGxhdGZvcm0sIHRkLmJ1 aWxkLXBsYXRmb3JtIHsKKyAgICBiYWNrZ3JvdW5kOiAjZjhlZWRkOworfQordGQuYnVpbGQtc2Rr LCB0ZC5idWlsZC1wbGF0Zm9ybSB7CisgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Cit9Cit0 ZC5yb290IHsKKyAgICBiYWNrZ3JvdW5kOiAjODg4ODg4OworICAgIGJvcmRlcjogMXB4IHNvbGlk ICM2NjY2NjY7CisgICAgcGFkZGluZzogMHB4OworfQordGQuZXh0cmEgeworICAgIGJhY2tncm91 bmQ6ICM4ODg4YmI7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsKKyAgICBwYWRkaW5n OiAwcHg7Cit9Cit0ZC5wcmVzZW50LCB0ZC5maWxlcyB7CisgICAgYmFja2dyb3VuZDogI2FhYWFh YTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OworICAgIHBhZGRpbmc6IDBweDsKK30K K3RkLmRlcCB7CisgICAgYmFja2dyb3VuZDogI2NjY2NjYzsKKyAgICBib3JkZXI6IDFweCBzb2xp ZCAjNjY2NjY2OworICAgIHBhZGRpbmc6IDBweDsKK30KKy5zdW1tYXJ5IHRkLnJvb3QsIC5zdW1t YXJ5IHRkLmZpbGVzLCAuc3VtbWFyeSB0ZC5kZXAgeworICAgIGJvcmRlcjogMXB4IHNvbGlkIGJs YWNrOworfQordGQuYWJzZW50IHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OworICAg IHBhZGRpbmc6IDBweDsKK30KK3RyLmZsYWdnZWQgeworICAgIGNvbG9yOiAjYWEwMDAwOworfQor dHIucXVlc3Rpb25hYmxlIHsKKyAgICBjb2xvcjogI2NjNDQwMDsKK30KK3RyLmZsYWdnZWQtZGVw IHsKKyAgICBjb2xvcjogI2RkYWE0NDsKK30KK3RyLndhaXZlZCB7CisgICAgY29sb3I6ICMwMDY2 MDA7Cit9Cit0ci5leHRyYSB7CisgICAgY29sb3I6ICMwMDAwNjY7Cit9CisuaGlkZGVuIHsKKyAg ICBkaXNwbGF5OiBub25lOworfQorCisvKiBHZW5lcmFsIERhdGFUYWJsZXMgc3R5bGluZyAqLwor CisuZGF0YVRhYmxlc193cmFwcGVyIHsKKyAgICBiYWNrZ3JvdW5kOiAjZWVlZWVlOworICAgIHBh ZGRpbmc6IDhweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjODg4ODg4OworICAgIGZvbnQtZmFt aWx5OiBzYW5zLXNlcmlmOworfQorCisudGV4dC1sZWZ0IHsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0 OworfQorCisudGV4dC1jZW50ZXIgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLyog QXBwbGljYXRpb24gUmVwb3J0ICovCisKK3RhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ci5uby1mZWRv cmEsIC5zdW1tYXJ5IHRkLm5vLWZlZG9yYSB7CisgICAgYmFja2dyb3VuZDogI2ZmZWVkZDsKK30K KwordGFibGUuZGF0YVRhYmxlIHRib2R5IHRyLm5vLWZsYXRodWIsIC5zdW1tYXJ5IHRkLm5vLWZs YXRodWIgIHsKKyAgICBiYWNrZ3JvdW5kOiAjZGRlZWZmOworfQorCit0YWJsZS5kYXRhVGFibGUg dGJvZHkgdHIubm8tZmxhdGh1Yi1mZWRvcmEsIC5zdW1tYXJ5IHRkLm5vLWZsYXRodWItZmVkb3Jh ICB7CisgICAgYmFja2dyb3VuZDogI2UwZTBlMDsKK30KKwordGFibGUuZGF0YVRhYmxlIHRib2R5 IHRyLnNob3duIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKK30KKwordGFibGUuc3RhcnMgewor ICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworfQorCit0YWJsZS5kYXRhVGFibGUgPiB0Ym9k eSB0ZFtjb2xzcGFuPSI2Il0geworICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworfQorCit0 YWJsZS5kYXRhVGFibGUgdGFibGUuc3RhcnMgeworICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFw c2U7Cit9CisKK3RhYmxlLmRhdGFUYWJsZSB0YWJsZS5zdGFycyB0ZCwgdGFibGUuZGF0YVRhYmxl IHRhYmxlLnN0YXJzIHRoIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICB3aWR0 aDogMjVweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgbWFyZ2luOiAwcHg7CisgICAg cGFkZGluZzogNHB4OworfQorCisucGFja2FnZSB7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsK K30KKwordGFibGUucGFja2FnZVRhYmxlIHRib2R5IHRkLCB0YWJsZS5wYWNrYWdlVGFibGUgdGhl YWQgdGggeworICAgIHBhZGRpbmc6IDRweCA0cHg7Cit9CisKKy5zdW1tYXJ5IHRkLnNhbXBsZSB7 CisgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgd2lkdGg6IDIwcHg7Cit9CisKKy8q IEFwcGxpY2F0aW9uIFBhY2thZ2VzIFJlcG9ydCAqLworCisjYXBwUGFja2FnZXNSZXBvcnQgLmhl YWRlciB7CisgICAgbWFyZ2luLXJpZ2h0OiAyMDBweDsKK30KKworI2FwcFBhY2thZ2VzUmVwb3J0 IC5kYXRhVGFibGVzX3dyYXBwZXIgeworICAgIG1hcmdpbi1yaWdodDogMjAwcHg7Cit9CisKKyNh cHBQYWNrYWdlc1JlcG9ydCAuc3VtbWFyeSB7CisgICAgd2lkdGg6IDIwMHB4OworfQorCisjZGV0 YWlscyB7CisgICAgcG9zaXRpb246IGZpeGVkOworICAgIHRvcDogMHB4OworICAgIGJvdHRvbTog MXB4OworICAgIHJpZ2h0OiAwcHg7CisgICAgd2lkdGg6IDIwMHB4OworICAgIGJvcmRlci1sZWZ0 OiAxcHggc29saWQgYmxhY2s7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBwYWRk aW5nOiA4cHg7Cit9CisKKyNkZXRhaWxzIHsKKyAgICBvdmVyZmxvdy15OiBhdXRvOworfQorCisj ZGV0YWlscyBoMiB7CisgICAgZm9udC1zaXplOiAxNTAlOworICAgIG1hcmdpbjogOHB4IDBweDsK K30KKworI2RldGFpbHMgaDMgeworICAgIGZvbnQtc2l6ZTogMTI1JTsKKyAgICBjb2xvcjogIzQ0 NDQ0NDsKKyAgICBtYXJnaW46IDhweCAwcHg7Cit9CisKKyNkZXRhaWxzIHVsIHsKKyAgICBwYWRk aW5nOiAwcHg7Cit9CisKKyNkZXRhaWxzIGxpIHsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7 Cit9CisKCmRpZmYgLS1naXQgYS9yZXBvcnRzL3JlcG9ydC5qcyBiL3JlcG9ydHMvcmVwb3J0Lmpz Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzRkNDMKLS0tIC9kZXYvbnVs bAorKysgYi9yZXBvcnRzL3JlcG9ydC5qcwpAQCAtMCwwICsxLDExNCBAQAorZnVuY3Rpb24gZm9y bWF0Q2hpbGQoZGF0YSkgeworICAgIGlmIChkYXRhLmV4dHJhX3BhY2thZ2VzICYmIGRhdGEuZXh0 cmFfcGFja2FnZXMubGVuZ3RoKSB7CisJZXh0cmFfcGFja2FnZXMgPSAnPGgyPkV4dHJhIFBhY2th Z2VzPC9oMj4nICsKKwkgICAgJzxzcGFuIGNsYXNzPSJwYWNrYWdlIj4nICsgZGF0YS5leHRyYV9w YWNrYWdlcy5qb2luKCc8L3NwYW4+LCA8c3BhbiBjbGFzcz0icGFja2FnZSI+JykgKyAnPC9zcGFu Pic7CisgICAgfSBlbHNlIHsKKwlleHRyYV9wYWNrYWdlcyA9ICcnCisgICAgfQorICAgIHJldHVy biAnJyArCisJJzx0YWJsZSBjbGFzcz0ic3RhcnMiPicgKworCSc8dGhlYWQ+PHRyPjx0aD4wPC90 aD48dGg+MTwvdGg+PHRoPjI8L3RoPjx0aD4zPC90aD48dGg+NDwvdGg+PHRoPjU8L3RoPjwvdHI+ PC90aGVhZD4nICsKKwknPHRib2R5Pjx0cj48dGQ+JyArIGRhdGEuc3RhcnNbMF0gKyAnPC90ZD48 dGQ+JyArIGRhdGEuc3RhcnNbMV0gKyAnPC90ZD48dGQ+JyArIGRhdGEuc3RhcnNbMl0gKyAnPC90 ZD48dGQ+JyArIGRhdGEuc3RhcnNbM10gKyAnPC90ZD48dGQ+JyArIGRhdGEuc3RhcnNbNF0gKyAn PC90ZD48dGQ+JyArIGRhdGEuc3RhcnNbNV0gKyAnPC90ZD48L3RyPjx0Ym9keT4nICsKKwknPC90 YWJsZT4nICsKKwknPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPicgKyBkYXRhLmRlc2NyaXB0aW9u ICsgJzxkaXY+JyArCisJZXh0cmFfcGFja2FnZXMKK30KKworZnVuY3Rpb24gc3RhcnRBcHBSZXBv cnQoKSB7CisgICAgdGFibGUgPSAkKCcjYXBwVGFibGUnKS5EYXRhVGFibGUoIHsKKwlhamF4OiB7 CisJICAgIHVybDogJ2FwcGxpY2F0aW9ucy5qc29uJywKKwkgICAgZGF0YVNyYzogJ2FwcGxpY2F0 aW9ucycsCisJfSwKKwljcmVhdGVkUm93OiBmdW5jdGlvbihyb3csIGRhdGEpIHsKKyAgICAgICAg ICAgIGlmIChkYXRhLnBhY2thZ2UgPT0gbnVsbCAmJiBkYXRhLmZsYXRodWIgIT0gbnVsbCkKKwkJ JChyb3cpLmFkZENsYXNzKCduby1mZWRvcmEnKQorICAgICAgICAgICAgaWYgKGRhdGEucGFja2Fn ZSAhPSBudWxsICYmIGRhdGEuZmxhdGh1YiA9PSBudWxsKQorCQkkKHJvdykuYWRkQ2xhc3MoJ25v LWZsYXRodWInKQorICAgICAgICAgICAgaWYgKGRhdGEuZmxhdGh1YiA9PSBudWxsICYmIGRhdGEu cGFja2FnZSA9PSBudWxsKQorCQkkKHJvdykuYWRkQ2xhc3MoJ25vLWZsYXRodWItZmVkb3JhJykK Kwl9LAorCWNvbHVtbnM6IFsKKwkgICAgeyBkYXRhOiAnbmFtZScsIGNsYXNzTmFtZTogJ3RleHQt bGVmdCcgfSwKKwkgICAgeyBkYXRhOiAncGFja2FnZScsIGRlZmF1bHRDb250ZW50OiAnJywgY2xh c3NOYW1lOiAndGV4dC1sZWZ0JyB9LAorCSAgICB7IGRhdGE6ICdmbGF0aHViJywgZGVmYXVsdENv bnRlbnQ6ICcnLCByZW5kZXI6IHsKKwkJZGlzcGxheTogZnVuY3Rpb24oZGF0YSkgeyByZXR1cm4g ZGF0YSAhPSBudWxsID8gJ3RydWUnIDogJycgfSwKKwkJc29ydDogZnVuY3Rpb24oZGF0YSkgeyBy ZXR1cm4gZGF0YSAhPSBudWxsID8gMCA6IDEgfSwKKyAgICAgICAJICAgIH0sCisJICAgICAgY2xh c3NOYW1lOiAndGV4dC1jZW50ZXInIH0sCisJICAgIHsgZGF0YTogJ3N0YXJfdG90YWwnLCBkZWZh dWx0Q29udGVudDogJycsIGNsYXNzTmFtZTogJ3RleHQtY2VudGVyJyB9LAorCSAgICB7IGRhdGE6 ICdzdGFyX2F2ZycsIGRlZmF1bHRDb250ZW50OiAnJywgcmVuZGVyOiB7CisJCWRpc3BsYXk6IGZ1 bmN0aW9uKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkgeyByZXR1cm4gZGF0YSA/IGRhdGEudG9GaXhl ZCgxKSA6ICcnIH0KKwkgICAgfSwgY2xhc3NOYW1lOiAndGV4dC1jZW50ZXInIH0sCisJICAgIHsg ZGF0YTogJ2V4dHJhX3BhY2thZ2VzJywgZGVmYXVsdENvbnRlbnQ6ICcnLCByZW5kZXI6IHsKKwkJ ZGlzcGxheTogZnVuY3Rpb24oZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7IHJldHVybiBkYXRhID8g ZGF0YS5sZW5ndGg6ICcnIH0sCisJCXNvcnQ6IGZ1bmN0aW9uKGRhdGEsIHR5cGUsIHJvdywgbWV0 YSkgeyByZXR1cm4gZGF0YSA/IGRhdGEubGVuZ3RoIDogMCB9LAorCSAgICB9LCBjbGFzc05hbWU6 ICd0ZXh0LWNlbnRlcicgfSwKKwldLAorCW9yZGVyOiBbWzMsICdkZXNjJ11dLAorCXBhZ2VMZW5n dGg6IDEwMCwKKwlsZW5ndGhNZW51OiBbWzI1LDEwMCwyNTAsLTFdLFsnMjUnLCAnMTAwJywgJzI1 MCcsICdBbGwnXV0sCisgICAgfSkKKyAgICAkKCcjYXBwVGFibGUnKS5vbignY2xpY2snLCAndGQn LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB0ciA9ICQodGhpcykuY2xvc2VzdCgndHInKTsK KyAgICAgICAgdmFyIHJvdyA9IHRhYmxlLnJvdyggdHIgKTsKKworICAgICAgICBpZiAoIHJvdy5j aGlsZC5pc1Nob3duKCkgKSB7CisgICAgICAgICAgICAvLyBUaGlzIHJvdyBpcyBhbHJlYWR5IG9w ZW4gLSBjbG9zZSBpdAorICAgICAgICAgICAgcm93LmNoaWxkLmhpZGUoKTsKKyAgICAgICAgICAg IHRyLnJlbW92ZUNsYXNzKCdzaG93bicpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgLy8gT3BlbiB0aGlzIHJvdworICAgICAgICAgICAgcm93LmNoaWxkKCBmb3JtYXRD aGlsZChyb3cuZGF0YSgpKSApLnNob3coKTsKKyAgICAgICAgICAgIHRyLmFkZENsYXNzKCdzaG93 bicpOworICAgICAgICB9CisgICAgfSApOworfQorCitmdW5jdGlvbiBmaWxsRGV0YWlscyhwa2cs IGNhdGVnb3J5LCBhcHBzKSB7CisgICAgJCgnI2RldGFpbHMgLnBrZycpLnRleHQocGtnKTsKKyAg ICAkKCcjZGV0YWlscyAuY2F0ZWdvcnknKS50ZXh0KGNhdGVnb3J5KTsKKyAgICAkKCcjZGV0YWls cyAuYXBwcycpLmVtcHR5KCk7CisKKyAgICBmb3IgKGxldCBhIG9mIGFwcHMpIHsKKwkkKCc8bGk+ PC9saT4nKS50ZXh0KGEpLmFwcGVuZFRvKCcjZGV0YWlscyAuYXBwcycpOworICAgIH0KK30KKwor ZnVuY3Rpb24gc3RhcnRQYWNrYWdlVGFibGUoaWQsIHNyYykgeworICAgIHZhciB0YWJsZSA9ICQo aWQpLkRhdGFUYWJsZSggeworCWFqYXg6IHsKKwkgICAgdXJsOiAnYXBwbGljYXRpb24tcGFja2Fn ZXMuanNvbicsCisJICAgIGRhdGFTcmM6IHNyYywKKwl9LAorCWNvbHVtbnM6IFsKKwkgICAgeyBk YXRhOiAncGFja2FnZScsIGNsYXNzTmFtZTogJ3RleHQtbGVmdCcgfSwKKwkgICAgeyBkYXRhOiAn dG9wX2NvdW50JywgZGVmYXVsdENvbnRlbnQ6ICcnLCBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlciB0 b3AnIH0sCisJICAgIHsgZGF0YTogJ2FsbF9jb3VudCcsIGRlZmF1bHRDb250ZW50OiAnJywgY2xh c3NOYW1lOiAndGV4dC1jZW50ZXIgYWxsJyB9LAorCV0sCisJb3JkZXI6IFtbMiwgJ2Rlc2MnXV0s CisJcGFnZUxlbmd0aDogMjUsCisgICAgfSk7CisKKyAgICAkKGlkKS5vbignY2xpY2snLCAndGQu dG9wJywgZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgdHIgPSAkKHRoaXMpLmNsb3Nlc3QoJ3Ry Jyk7CisgICAgICAgIHZhciByb3cgPSB0YWJsZS5yb3coIHRyICk7CisKKwlkYXRhID0gcm93LmRh dGEoKQorCWZpbGxEZXRhaWxzKGRhdGFbJ3BhY2thZ2UnXSwgJ1RvcCAxMDAnLCBkYXRhWyd0b3An XSkKKyAgICB9ICk7CisKKyAgICAkKGlkKS5vbignY2xpY2snLCAndGQuYWxsJywgZnVuY3Rpb24g KCkgeworICAgICAgICB2YXIgdHIgPSAkKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7CisgICAgICAgIHZh ciByb3cgPSB0YWJsZS5yb3coIHRyICk7CisKKwlkYXRhID0gcm93LmRhdGEoKQorCWZpbGxEZXRh aWxzKGRhdGFbJ3BhY2thZ2UnXSwgJyBBbGwnLCBkYXRhWydhbGwnXSkKKyAgICB9ICk7Cit9CisK K2Z1bmN0aW9uIHN0YXJ0QXBwUGFja2FnZXMoKSB7CisgICAgc3RhcnRQYWNrYWdlVGFibGUoJyNy dW50aW1lVGFibGUnLCAncnVudGltZScpCisgICAgc3RhcnRQYWNrYWdlVGFibGUoJyNleHRyYVRh YmxlJywgJ2V4dHJhJykKK30KCmRpZmYgLS1naXQgYS9yZXBvcnRzL3J1bnRpbWUtcGFja2FnZS1h cHAuaHRtbCBiL3JlcG9ydHMvcnVudGltZS1wYWNrYWdlLWFwcC5odG1sCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjY5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZXBvcnRz L3J1bnRpbWUtcGFja2FnZS1hcHAuaHRtbApAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgaHRt bD4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPGxp bmsgaHJlZj0ianNsaWIvanF1ZXJ5LmRhdGFUYWJsZXMubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0 Ij4KKyAgICA8bGluayBocmVmPSJyZXBvcnQuY3NzIiByZWw9InN0eWxlc2hlZXQiPgorICAgIDxz Y3JpcHQgc3JjPSJqc2xpYi9qcXVlcnktMy4zLjEubWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny aXB0IHNyYz0ianNsaWIvanF1ZXJ5LmRhdGFUYWJsZXMubWluLmpzIj48L3NjcmlwdD4KKyAgICA8 c2NyaXB0IHNyYz0icmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgJChk b2N1bWVudCkucmVhZHkoc3RhcnRBcHBQYWNrYWdlcyk7CisgICAgPC9zY3JpcHQ+CisgIDwvaGVh ZD4KKyAgPGJvZHkgaWQ9ImFwcFBhY2thZ2VzUmVwb3J0Ij4KKyAgICA8dWwgY2xhc3M9ImhlYWRl ciI+CisgICAgICA8bGk+PGEgaHJlZj0icnVudGltZS5odG1sIj5SdW50aW1lIFJlcG9ydDwvYT48 L2xpPgorICAgICAgPGxpPjxhIGhyZWY9ImFwcGxpY2F0aW9ucy5odG1sIj5BcHBsaWNhdGlvbiBS ZXBvcnQ8L2E+PC9saT4KKyAgICAgIDxsaSBjbGFzcz0ic2VsZWN0ZWQiPlJ1bnRpbWUgUGFja2Fn ZSAtPiBBcHBsaWNhdGlvbjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0iZXh0cmEtcGFja2FnZS1h cHAuaHRtbCI+RXh0cmEgUGFja2FnZSAtPiBBcHBsaWNhdGlvbjwvYT48L2xpPgorICAgIDwvdWw+ CisgICAgPHRhYmxlIGlkPSJydW50aW1lVGFibGUiIGNsYXNzPSJwYWNrYWdlVGFibGUiPgorICAg ICAgPHRoZWFkPgorCTx0aD5QYWNrYWdlPC90aD4KKwk8dGggdGl0bGU9IiMgb2YgYXBwbGljYXRp b25zIGluIHRvcCAxMDAgKGJ5IG1vc3QgcmV2aWV3cykiPiMgVG9wPC90aD4KKwk8dGggdGl0bGU9 IiMgb2YgYXBwbGljYXRpb25zIHRvdGFsIGluIEZlZG9yYSI+IyBBbGw8L3RoPgorICAgICAgPC90 aGVhZD4KKyAgICAgIDx0Ym9keT4KKyAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKyAgICA8 ZGl2IGlkPSJkZXRhaWxzIj4KKyAgICAgIDxoMiBjbGFzcz0icGtnIj48L2gyPgorICAgICAgPGgz IGNsYXNzPSJjYXRlZ29yeSI+PC9oMz4KKyAgICAgIDx1bCBjbGFzcz0iYXBwcyI+PC91bD4KKyAg ICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5v dGUiPgorCVNob3dzIG51bWJlciBvZiBhcHBsaWNhdGlvbnMgdXNpbmcgZWFjaCBwYWNrYWdlLiBD bGljayBvbiBhcHBsaWNhdGlvbiBjb3VudHMgZm9yIGRldGFpbHMuIENsaWNrIG9uIGhlYWRlcnMg dG8gc29ydC4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+Cgpk aWZmIC0tZ2l0IGEvcnVudGltZS10ZW1wbGF0ZS5odG1sIGIvcnVudGltZS10ZW1wbGF0ZS5odG1s Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWZkOTMKLS0tIC9kZXYvbnVs bAorKysgYi9ydW50aW1lLXRlbXBsYXRlLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBF IGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAg IDxsaW5rIGhyZWY9InJlcG9ydC5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CisgIDwvaGVhZD4KKyAg PGJvZHkgaWQ9InJ1bnRpbWVSZXBvcnQiPgorICAgIDx1bCBjbGFzcz0iaGVhZGVyIj4KKyAgICAg IDxsaSBjbGFzcz0ic2VsZWN0ZWQiPlJ1bnRpbWUgUmVwb3J0PC9saT4KKyAgICAgIDxsaT48YSBo cmVmPSJhcHBsaWNhdGlvbnMuaHRtbCI+QXBwbGljYXRpb24gUmVwb3J0PC9hPjwvbGk+CisgICAg ICA8bGk+PGEgaHJlZj0icnVudGltZS1wYWNrYWdlLWFwcC5odG1sIj5SdW50aW1lIFBhY2thZ2Ug LT4gQXBwbGljYXRpb248L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJleHRyYS1wYWNrYWdl LWFwcC5odG1sIj5FeHRyYSBQYWNrYWdlIC0+IEFwcGxpY2F0aW9uPC9hPjwvbGk+CisgICAgPC91 bD4KKyAgICA8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4KKyAgICAgIDx0YWJsZT4KKwk8dHI+PHRkPkZE L1A8L3RkPjx0ZD4gLSBvcmcuZnJlZWRlc2t0b3AuUGxhdGZvcm0KKwkgICAgeyVpZiB1bm1hdGNo ZWQuZnJlZWRlc2t0b3BfcGxhdGZvcm0gPiAwJX0KKwkgICAgKDxhIGhyZWY9Im91dC9mcmVlZGVz a3RvcC1QbGF0Zm9ybS51bm1hdGNoZWQiPnt7dW5tYXRjaGVkLmZyZWVkZXNrdG9wX3BsYXRmb3Jt fX0gdW5tYXRjaGVkPC9hPikKKwkgICAgeyVlbmRpZiV9CisJICA8L3RkPgorCTwvdHI+CisJPHRy Pjx0ZD5HTi9QPC90ZD48dGQ+IC0gb3JnLmdub21lLlBsYXRmb3JtCisJICAgIHslaWYgdW5tYXRj aGVkLmdub21lX3BsYXRmb3JtID4gMCV9CisJICAgICg8YSBocmVmPSJvdXQvZ25vbWUtUGxhdGZv cm0udW5tYXRjaGVkIj57e3VubWF0Y2hlZC5nbm9tZV9wbGF0Zm9ybX19IHVubWF0Y2hlZDwvYT4p CisJICAgIHslZW5kaWYlfQorCSAgPC90ZD4KKwk8L3RyPgorCTx0cj48dGQ+RkQvUzwvdGQ+PHRk PiAtIG9yZy5mcmVlZGVza3RvcC5TZGs8L3RkPjwvdHI+CisJPHRyPjx0ZD5HTi9TPC90ZD48dGQ+ IC0gb3JnLmdub21lLlNkazwvdGQ+PC90cj4KKwk8dHI+PHRkPkxJVkU8L3RkPjx0ZD4gLSBGMjcg bGl2ZSBpbWFnZTwvdGQ+PC90cj4KKwk8dHI+PHRkPlJGMjY8L3RkPjx0ZD4gLSBGMjYgb3JnLmZl ZG9yYS5QbGF0Zm9ybTwvdGQ+PC90cj4KKwk8dHI+PHRkIGNsYXNzPSJidWlsZC1wbGF0Zm9ybSI+ PC90ZD48dGQ+IC0gQnVpbGQgaW4gZGVza3RvcC1ydW50aW1lIG1vZHVsZTwvdGQ+PC90cj4KKwk8 dHI+PHRkIGNsYXNzPSJidWlsZC1zZGsiPjwvdGQ+PHRkPiAtIEJ1aWxkIGluIGZsYXRwYWstcnVu dGltZSBtb2R1bGU8L3RkPjwvdHI+CisJPHRyPjx0ZCBjbGFzcz0icm9vdCI+PC90ZD48dGQ+IC0g Um9vdCBwYWNrYWdlLCBvbmx5IGluY2x1ZGVkIGJlY2F1c2Ugb2YgZmlsZXMgaW4gcnVudGltZTwv dGQ+PC90cj4KKwk8dHI+PHRkIGNsYXNzPSJmaWxlcyI+PC90ZD48dGQ+IC0gSW5jbHVkZWQgYmVj YXVzZSBvZiBmaWxlcyBpbiBydW50aW1lLCBhbHNvIGRlcGVuZGVkIHVwb248L3RkPjwvdHI+CisJ PHRyPjx0ZCBjbGFzcz0iZGVwIj48L3RkPjx0ZD4gLSBJbmNsdWRlZCBiZWNhdXNlIG9mIGRlcGVu ZGVuY2llczwvdGQ+PC90cj4KKwk8dHI+PHRkIGNsYXNzPSJleHRyYSI+PC90ZD48dGQ+IC0gTGlz dGVkIGFzIGFuIGV4dHJhIHBhY2thZ2UgaW4gcGFja2FnZS1ub3Rlcy50eHQ8L3RkPjwvdHI+Cisg ICAgICA8L3RhYmxlPgorICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+TW91c2Ugb3ZlciBzaGFkZWQg c3F1YXJlcyBmb3IgZGV0YWlscy48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8dGFibGUgY2xhc3M9 InBhY2thZ2VzIj4KKyAgICAgIDx0Ym9keT4KKwl7JSBmb3IgbGV0dGVyIGluIGxldHRlcnMgJX0K Kwk8dHIgY2xhc3M9ImxldHRlci1oZWFkZXItYWJvdmUiPgorCTwvdHI+CisJPHRyIGNsYXNzPSJs ZXR0ZXItaGVhZGVyIj4KKwkgIDx0aCBjbGFzcz0ibGV0dGVyIj57eyBsZXR0ZXIubGV0dGVyIH19 PC90aD4KKwkgIDx0aCB0aXRsZT0ib3JnLmZyZWVkZXNrdG9wLlBsYXRmb3JtIj5GRC9QPC90aD4K KwkgIDx0aCB0aXRsZT0ib3JnLmdub21lLlBsYXRmb3JtIj5HTi9QPC90aD4KKwkgIDx0aCB0aXRs ZT0ib3JnLmZyZWVkZXNrdG9wLlNkayI+RkQvUzwvdGg+CisJICA8dGggdGl0bGU9Im9yZy5nbm9t ZS5TZGsiPkdOL1M8L3RoPgorCSAgPHRoPkxJVkU8L3RoPgorCSAgPHRoPlJGMjY8L3RoPgorCSAg PHRoPjwvdGg+CisJPC90cj4KKwl7JSBmb3Igc3BhY2thZ2UgaW4gbGV0dGVyLnBhY2thZ2VzICV9 CisJPHRyIGNsYXNzPSJzb3VyY2UtcGFja2FnZSB7eyBzcGFja2FnZS5rbGFzcyB9fSI+CisJICA8 dGQ+e3sgc3BhY2thZ2UubmFtZSB9fTwvdGQ+CisJICA8dGQ+PC90ZD4KKwkgIDx0ZD48L3RkPgor CSAgPHRkPjwvdGQ+CisJICA8dGQ+PC90ZD4KKwkgIDx0ZD48L3RkPgorCSAgPHRkPjwvdGQ+CisJ ICA8dGQ+e3sgc3BhY2thZ2UubW9kdWxlcyB9fTwvdGQ+CisJPC90cj4KKwl7JSBmb3IgcGFja2Fn ZSBpbiBzcGFja2FnZS5wYWNrYWdlcyAlfQorCTx0ciBjbGFzcz0icGFja2FnZSB7eyBwYWNrYWdl LmtsYXNzIH19Ij4KKwkgIDx0ZD57eyBwYWNrYWdlLm5hbWUgfX08L3RkPgorCSAgPHRkIGNsYXNz PSJ7e3BhY2thZ2UuZnJlZWRlc2t0b3BfcGxhdGZvcm1faW5jbHVzaW9ufX0iIHRpdGxlPSJ7eyBw YWNrYWdlLmZyZWVkZXNrdG9wX3BsYXRmb3JtX3doeSB9fSI+PC90ZD4KKwkgIDx0ZCBjbGFzcz0i e3twYWNrYWdlLmdub21lX3BsYXRmb3JtX2luY2x1c2lvbn19IiB0aXRsZT0ie3sgcGFja2FnZS5n bm9tZV9wbGF0Zm9ybV93aHkgfX0iPjwvdGQ+CisJICA8dGQgY2xhc3M9Int7cGFja2FnZS5mcmVl ZGVza3RvcF9zZGtfaW5jbHVzaW9ufX0iIHRpdGxlPSJ7eyBwYWNrYWdlLmZyZWVkZXNrdG9wX3Nk a193aHkgfX0iPjwvdGQ+CisJICA8dGQgY2xhc3M9Int7cGFja2FnZS5nbm9tZV9zZGtfaW5jbHVz aW9ufX0iIHRpdGxlPSJ7eyBwYWNrYWdlLmdub21lX3Nka193aHkgfX0iPjwvdGQ+CisJICA8dGQg Y2xhc3M9Int7cGFja2FnZS5saXZlX2luY2x1c2lvbn19Ij48L3RkPgorCSAgPHRkIGNsYXNzPSJ7 e3BhY2thZ2UucmYyNl9pbmNsdXNpb259fSI+PC90ZD4KKwkgIDx0ZD57eyBwYWNrYWdlLm5vdGUg fX08L3RkPgorCTwvdHI+CisJeyUgZW5kZm9yICV9CisJeyUgZW5kZm9yICV9CisJeyUgZW5kZm9y ICV9CisgICAgICA8L3Rib2R5PgorICA8L2JvZHk+Cis8L2h0bWw+CgpkaWZmIC0tZ2l0IGEvdG9v bHMvZG93bmxvYWQtZmVkb3JhLWFwcHN0cmVhbS5zaCBiL3Rvb2xzL2Rvd25sb2FkLWZlZG9yYS1h cHBzdHJlYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcxMjllYwot LS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Rvd25sb2FkLWZlZG9yYS1hcHBzdHJlYW0uc2gKQEAg LTAsMCArMSwyMiBAQAorIyEvYmluL2Jhc2gKK3NldCAtZQorCitudnI9JChrb2ppIGxpc3QtdGFn Z2VkIC0tcXVpZXQgLS1pbmhlcml0IC0tbGF0ZXN0IGYyOC1idWlsZCBhcHBzdHJlYW0tZGF0YXxh d2sgJ3twcmludCAkMX0nKQorcGF0aD0kKGtvamkgYnVpbGRpbmZvIGFwcHN0cmVhbS1kYXRhLTI4 LTIuZmMyOCB8IGdyZXAgbm9hcmNoLnJwbSkKK3VybD0kKGVjaG8gJHBhdGggfCBzZWQgc0AvbW50 L2tvamkvcGFja2FnZXMvQGh0dHBzOi8va29qaXBrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcGFja2Fn ZXMvQCkKKworcnBtPW91dC8kKGJhc2VuYW1lICRwYXRoKQorCitbIC1lICRycG0gXSB8fCBjdXJs ICR1cmwgPiAkcnBtCisKK3RtcGRpcj0kKG1rdGVtcCAtZCkKK2NsZWFudXAoKSB7CisgICAgcm0g LXJmICR0bXBkaXIKK30KK3RyYXAgY2xlYW51cCBFWElUCisKK3RtcHhtbGRpcj0kdG1wZGlyL3Vz ci9zaGFyZS9hcHAtaW5mby94bWxzLworbWtkaXIgLXAgJHRtcHhtbGRpcgorcnBtMmNwaW8gJHJw bSB8ICggY2QgJHRtcGRpciAmJiBjcGlvIC1pdiAgJy4vdXNyL3NoYXJlL2FwcC1pbmZvL3htbHMv ZmVkb3JhLnhtbC5neicgKQorY3AgJHRtcHhtbGRpci9mZWRvcmEueG1sLmd6IG91dC9mZWRvcmEt YXBwc3RyZWFtLnhtbC5negorCgpkaWZmIC0tZ2l0IGEvdG9vbHMvZG93bmxvYWQtZmxhdGh1Yi1h cHBzdHJlYW0uc2ggYi90b29scy9kb3dubG9hZC1mbGF0aHViLWFwcHN0cmVhbS5zaApuZXcgZmls ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MTc3YjUyCi0tLSAvZGV2L251bGwKKysrIGIv dG9vbHMvZG93bmxvYWQtZmxhdGh1Yi1hcHBzdHJlYW0uc2gKQEAgLTAsMCArMSwyMyBAQAorIyEv dXNyL2Jpbi9zaAorCitzZXQgLWUKKwordG1wZGlyPSQoVE1QRElSPS92YXIvdG1wIG1rdGVtcCAt ZCkKK2NsZWFudXAoKSB7CisgICAgcm0gLXJmICR0bXBkaXIKK30KK3RyYXAgY2xlYW51cCBFWElU CisKK09TVFJFRT0ib3N0cmVlIC0tcmVwbz0kdG1wZGlyL3JlcG8iCisKKyRPU1RSRUUgaW5pdCAt LW1vZGU9YmFyZS11c2VyCiskT1NUUkVFIHJlbW90ZSBhZGQgLS1uby1ncGctdmVyaWZ5IGZsYXRo dWIgaHR0cHM6Ly9mbGF0aHViLm9yZy9yZXBvCiskT1NUUkVFIHB1bGwgZmxhdGh1YiBhcHBzdHJl YW0veDg2XzY0CiskT1NUUkVFIGNoZWNrb3V0IC0tdXNlci1tb2RlIGZsYXRodWIvYXBwc3RyZWFt L3g4Nl82NCAkdG1wZGlyL2NoZWNrb3V0CisKK2NwICR0bXBkaXIvY2hlY2tvdXQvYXBwc3RyZWFt LnhtbC5neiBvdXQvZmxhdGh1Yi1hcHBzdHJlYW0ueG1sLmd6CisKKworCisKKwoKZGlmZiAtLWdp dCBhL3Rvb2xzL2Rvd25sb2FkLXJldmlld3Muc2ggYi90b29scy9kb3dubG9hZC1yZXZpZXdzLnNo Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwYTFlNDkKLS0tIC9kZXYvbnVs bAorKysgYi90b29scy9kb3dubG9hZC1yZXZpZXdzLnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvdXNy L2Jpbi9iYXNoCisKK2N1cmwgaHR0cHM6Ly9vZHJzLmdub21lLm9yZy8xLjAvcmV2aWV3cy9hcGkv cmF0aW5ncyA+IG91dC9yYXRpbmdzLmpzb24KCmRpZmYgLS1naXQgYS90b29scy9nZW5lcmF0ZS1h cHAtcmVwb3J0cy5weSBiL3Rvb2xzL2dlbmVyYXRlLWFwcC1yZXBvcnRzLnB5Cm5ldyBmaWxlIG1v ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlN2YyOWQKLS0tIC9kZXYvbnVsbAorKysgYi90b29s cy9nZW5lcmF0ZS1hcHAtcmVwb3J0cy5weQpAQCAtMCwwICsxLDM1NCBAQAorIyEvdXNyL2Jpbi9w eXRob24zCisKK2ltcG9ydCBnaQorZ2kucmVxdWlyZV92ZXJzaW9uKCdBcHBTdHJlYW1HbGliJywg JzEuMCcpCitmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEFwcFN0cmVhbUdsaWIgYXMgQVMKK2Zy b20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR2lvCitpbXBvcnQganNvbgoraW1wb3J0IGxvY2FsZQor aW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKK2lt cG9ydCB1dGlsCisKK2lkX21hcHBpbmdzID0geworICAgICdhbWFyb2suZGVza3RvcCc6ICdvcmcu a2RlLmFtYXJvay5kZXNrdG9wJywKKyAgICAnYW5kcm9pZC1zdHVkaW8uZGVza3RvcCc6ICdjb20u Z29vZ2xlLkFuZHJvaWRTdHVkaW8uZGVza3RvcCcsCisgICAgJ2FwcGVyLmRlc2t0b3AnOiAnb3Jn LmtkZS5hcHBlci5kZXNrdG9wJywKKyAgICAnYXJkdWluby1hcmR1aW5vaWRlLmRlc2t0b3AnOiAn YXJkdWluby5kZXNrdG9wJywKKyAgICAnYXN0cm9tZW5hY2UuZGVza3RvcCc6ICdjb20udmlld2l6 YXJkLkFzdHJvTWVuYWNlLmRlc2t0b3AnLAorICAgICdhdG9tLmRlc2t0b3AnOiAnaW8uYXRvbS5B dG9tLmRlc2t0b3AnLAorICAgICdCbG9ja091dElJLmRlc2t0b3AnOiAnbmV0LmJsb2Nrb3V0LkJs b2NrT3V0SUkuZGVza3RvcCcsCisgICAgJ2J0YW5rcy5kZXNrdG9wJzogJ25ldC5zb3VyY2Vmb3Jn ZS5idGFua3MuZGVza3RvcCcsCisgICAgJ2RlamEtZHVwLmRlc2t0b3AnOiAnb3JnLmdub21lLkRl amFEdXAuZGVza3RvcCcsCisgICAgJ2RpZ2lrYW0uZGVza3RvcCc6ICdvcmcua2RlLmRpZ2lrYW0u ZGVza3RvcCcsCisgICAgJ2Rpc2NvcmQuZGVza3RvcCc6ICdjb20uZGlzY29yZGFwcC5EaXNjb3Jk LmRlc2t0b3AnLAorICAgICdldm9sdXRpb24uZGVza3RvcCc6ICdvcmcuZ25vbWUuRXZvbHV0aW9u LmRlc2t0b3AnLAorICAgICdmZWVkcmVhZGVyLmRlc2t0b3AnOiAnb3JnLmdub21lLkZlZWRSZWFk ZXIuZGVza3RvcCcsCisgICAgJ2Zsb3dibGFkZS5kZXNrdG9wJzogJ2lvLmdpdGh1Yi5qbGlsamVi bC5GbG93YmxhZGUuZGVza3RvcCcsCisgICAgJ2dlYXJ5LmRlc2t0b3AnOiAnb3JnLmdub21lLkdl YXJ5LmRlc2t0b3AnLAorICAgICdnZW9nZWJyYS5kZXNrdG9wJzogJ29yZy5nZW9nZWJyYS5HZW9H ZWJyYS5kZXNrdG9wJywKKyAgICAnZ25vbWUtY2FsY3VsYXRvci5kZXNrdG9wJzogJ29yZy5nbm9t ZS5DYWxjdWxhdG9yLmRlc2t0b3AnLAorICAgICdnbm9tZS1tdXNpYy5kZXNrdG9wJzogJ29yZy5n bm9tZS5NdXNpYy5kZXNrdG9wJywKKyAgICAnZ3RodW1iLmRlc2t0b3AnOiAnb3JnLmdub21lLmdU aHVtYi5kZXNrdG9wJywKKyAgICAnbG9sbHlwb3AuZGVza3RvcCc6ICdvcmcuZ25vbWUuTG9sbHlw b3AuZGVza3RvcCcsCisgICAgJ2szYi5kZXNrdG9wJzogJ29yZy5rZGUuazNiLmRlc2t0b3AnLAor ICAgICdrbWluZXMuZGVza3RvcCc6ICdvcmcua2RlLmttaW5lcy5kZXNrdG9wJywKKyAgICAna3Jp dGEuZGVza3RvcCc6ICdvcmcua2RlLmtyaXRhLmRlc2t0b3AnLAorICAgICdsc2h3LmRlc2t0b3An OiAnbHNody1ndWkuZGVza3RvcCcsCisgICAgJ2xzaHctZ3RrLmRlc2t0b3AnOiAnbHNody1ndWku ZGVza3RvcCcsCisgICAgJ21lZ2FnbGVzdC5kZXNrdG9wJzogJ29yZy5tZWdhZ2xlc3QuTWVnYUds ZXN0LmRlc2t0b3AnLAorICAgICdtaW5ldGVzdC5kZXNrdG9wJzogJ25ldC5taW5ldGVzdC5NaW5l dGVzdC5kZXNrdG9wJywKKyAgICAnbWluaXR1YmUuZGVza3RvcCc6ICdvcmcudG9yZGluaS5mbGF2 aW8uTWluaXR1YmUuZGVza3RvcCcsCisgICAgJ29rdWxhci5kZXNrdG9wJzogJ29yZy5rZGUub2t1 bGFyLmRlc2t0b3AnLAorICAgICdvcGVubXcuZGVza3RvcCc6ICdvcmcub3Blbm13Lk9wZW5NVy5k ZXNrdG9wJywKKyAgICAncGFyb2xlLmRlc2t0b3AnOiAnb3JnLnhmY2UuUGFyb2xlLmRlc2t0b3An LAorICAgICdwaW5ndXMuZGVza3RvcCc6ICdvcmcuc2V1bC5waW5ndXMuZGVza3RvcCcsCisgICAg J3F0Y3JlYXRvci5kZXNrdG9wJzogJ29yZy5xdC1wcm9qZWN0LnF0Y3JlYXRvci5kZXNrdG9wJywK KyAgICAncXVwemlsbGEuZGVza3RvcCc6ICdvcmcucXVwemlsbGEuUXVwWmlsbGEuZGVza3RvcCcs CisgICAgJ25leHRjbG91ZC5kZXNrdG9wJzogJ29yZy5uZXh0Y2xvdWQuTmV4dGNsb3VkLmRlc2t0 b3AnLAorICAgICdxdWFzc2VsY2xpZW50LmRlc2t0b3AnOiAnb3JnLnF1YXNzZWxfaXJjLlF1YXNz ZWxDbGllbnQuZGVza3RvcCcsCisgICAgJ3FCaXR0b3JyZW50LmRlc2t0b3AnOiAncWJpdHRvcnJl bnQuZGVza3RvcCcsCisgICAgJ3NpcmlsLmRlc2t0b3AnOiAnb3JnLmZyZWUtYXN0cm8uc2lyaWwu ZGVza3RvcCcsCisgICAgJ3NsYWNrLmRlc2t0b3AnOiAnY29tLnNsYWNrLlNsYWNrLmRlc2t0b3An LAorICAgICdza3lwZS5kZXNrdG9wJzogJ2NvbS5za3lwZS5DbGllbnQuZGVza3RvcCcsCisgICAg J3NvdW5kLWp1aWNlci5kZXNrdG9wJzogJ29yZy5nbm9tZS5Tb3VuZEp1aWNlci5kZXNrdG9wJywK KyAgICAnc3BvdGlmeS5kZXNrdG9wJzogJ2NvbS5zcG90aWZ5LkNsaWVudC5kZXNrdG9wJywKKyAg ICAnc3RlYW0uZGVza3RvcCc6ICdjb20udmFsdmVzb2Z0d2FyZS5TdGVhbS5kZXNrdG9wJywKKyAg ICAnc21iNGsuZGVza3RvcCc6ICdvcmcua2RlLnNtYjRrLmRlc2t0b3AnLAorICAgICdzdXBlcnR1 eDIuZGVza3RvcCc6ICdvcmcuc3VwZXJ0dXhwcm9qZWN0LlN1cGVyVHV4LmRlc2t0b3AnLAorICAg ICd0ZWxlZ3JhbWRlc2t0b3AuZGVza3RvcCc6ICdvcmcudGVsZWdyYW0uZGVza3RvcC5kZXNrdG9w JywKKyAgICAndGVsZWdyYW0tZGVza3RvcC5kZXNrdG9wJzogJ29yZy50ZWxlZ3JhbS5kZXNrdG9w LmRlc2t0b3AnLAorICAgICd0aHVuZGVyYmlyZC5kZXNrdG9wJzogJ21vemlsbGEtdGh1bmRlcmJp cmQuZGVza3RvcCcsCisgICAgJ3RyZW11bG91cy5kZXNrdG9wJzogJ2NvbS5ncmFuZ2VyaHViLlRy ZW11bG91cy5kZXNrdG9wJywKKyAgICAndmliZXIuZGVza3RvcCc6ICdjb20udmliZXIuVmliZXIu ZGVza3RvcCcsCisgICAgJ3Zpc3VhbC1zdHVkaW8tY29kZS5kZXNrdG9wJzogJ2NvbS52aXN1YWxz dHVkaW8uY29kZS5kZXNrdG9wJywKKyAgICAndmxjLmRlc2t0b3AnOiAnb3JnLnZpZGVvbGFuLlZM Qy5kZXNrdG9wJywKKyAgICAnd3htYXhpbWEuZGVza3RvcCc6ICd3eE1heGltYS5kZXNrdG9wJywK KyAgICAnWm9vbS5kZXNrdG9wJzogJ3VzLnpvb20uWm9vbS5kZXNrdG9wJywKK30KKworZm9yIGss IHYgaW4geyBrOiB2IGZvciBrLCB2IGluIGlkX21hcHBpbmdzLml0ZW1zKCkgfS5pdGVtcygpOgor ICAgIGlkX21hcHBpbmdzW3ZdID0gaworCisKK2RlZiBtYWtlX2Rlc2t0b3BfbWFwKHJlcG9faW5m byk6CisgICAgZGVza3RvcF9tYXAgPSB7fQorCisgICAgZGVmIGNiKHBhY2thZ2VfaW5mbywgZik6 CisgICAgICAgIGlmIGYuc3RhcnRzd2l0aCgiL3Vzci9zaGFyZS9hcHBsaWNhdGlvbnMvIik6Cisg ICAgICAgICAgICBkZXNrdG9wX2lkID0gb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAg b2xkID0gZGVza3RvcF9tYXAuZ2V0KGRlc2t0b3BfaWQpCisgICAgICAgICAgICBpZiBvbGQgaXMg Tm9uZSBvciB1dGlsLnBhY2thZ2VfY21wKHBhY2thZ2VfaW5mbywgb2xkKSA8IDA6CisgICAgICAg ICAgICAgICAgZGVza3RvcF9tYXBbZGVza3RvcF9pZF0gPSBwYWNrYWdlX2luZm8KKworCisgICAg dXRpbC5mb3JlYWNoX2ZpbGUocmVwb19pbmZvLCBjYikKKworICAgIGZvciBrIGluIGRlc2t0b3Bf bWFwOgorICAgICAgICBkZXNrdG9wX21hcFtrXSA9IGRlc2t0b3BfbWFwW2tdWzBdCisKKyAgICBy ZXR1cm4gZGVza3RvcF9tYXAKKworZGVmIGdldF9kZXNrdG9wX21hcCgpOgorICAgIHJldHVybiB1 dGlsLmdldF9yZXBvX2NhY2hlYWJsZSgnZGVza3RvcC1tYXAnLCBtYWtlX2Rlc2t0b3BfbWFwKQor Cit1dGlsLnNldF9sb2dfbmFtZShvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSkKKworZGVz a3RvcF9tYXAgPSBnZXRfZGVza3RvcF9tYXAoKQorCitjbGFzcyBBcHBsaWNhdGlvbjoKKyAgICBk ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgc2Vs Zi5kZXNjcmlwdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5ob21lcGFnZSA9IE5vbmUKKyAgICAg ICAgc2VsZi5wYWNrYWdlID0gTm9uZQorICAgICAgICBzZWxmLmV4dHJhX3BhY2thZ2VzID0gTm9u ZQorICAgICAgICBzZWxmLmZsYXRodWIgPSBOb25lCisgICAgICAgIHNlbGYuZmVkb3JhX2lkID0g Tm9uZQorICAgICAgICBzZWxmLmZsYXRodWJfaWQgPSBOb25lCisgICAgICAgIHNlbGYub2Ryc19p ZCA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGFyX3RvdGFsID0gTm9uZQorICAgICAgICBzZWxmLnN0 YXJzID0gW05vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCisKKyAgICBAcHJvcGVy dHkKKyAgICBkZWYgY2Fub25faWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmxhdGh1Yl9pZCBp cyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZsYXRodWJfaWQKKyAgICAgICAg ZWxpZiBzZWxmLmZlZG9yYV9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxm LmZlZG9yYV9pZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYub2Ryc19p ZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRpc3BsYXlfbmFtZShzZWxmKToKKyAgICAgICAg aWYgc2VsZi5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQor ICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5vZHJzX2lkLmVuZHN3aXRoKCcuZGVz a3RvcCcpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9kcnNfaWRbMDotOF0KKyAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYub2Ryc19pZAorCitkZWYg aXRlcmF0ZV9hcHBzKHN0b3JlKToKKyAgICBmb3IgYXBwIGluIHN0b3JlLmdldF9hcHBzKCk6Cisg ICAgICAgIHRyeToKKyAgICAgICAgICAgIGlzX2Rlc2t0b3AgPSBhcHAuZ2V0X2lkX2tpbmQoKSA9 PSBBUy5JZEtpbmQuREVTS1RPUAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAg ICAgIGlzX2Rlc2t0b3AgPSBGYWxzZQorICAgICAgICBpZiBpc19kZXNrdG9wOgorICAgICAgICAg ICAgeWllbGQgYXBwCisKK2lkX3RvX2FwcGxpY2F0aW9uID0ge30KK25hbWVfdG9fYXBwbGljYXRp b24gPSB7fQoraG9tZXBhZ2VfdG9fYXBwbGljYXRpb24gPSB7fQorCitmZWRvcmFfc3RvcmUgPSBB Uy5TdG9yZSgpCitmZWRvcmFfc3RvcmUuZnJvbV9maWxlKEdpby5GaWxlLm5ld19mb3JfcGF0aCgn b3V0L2ZlZG9yYS1hcHBzdHJlYW0ueG1sLmd6JyksICIiLCBOb25lKQorZm9yIGFwcCBpbiBpdGVy YXRlX2FwcHMoZmVkb3JhX3N0b3JlKToKKyAgICBhID0gQXBwbGljYXRpb24oKQorICAgIGEuZmVk b3JhX2lkID0gYXBwLmdldF9pZCgpCisgICAgYS5uYW1lID0gYXBwLmdldF9uYW1lKCkKKyAgICBh LmRlc2NyaXB0aW9uID0gYXBwLmdldF9kZXNjcmlwdGlvbigpCisgICAgYS5ob21lcGFnZSA9IGFw cC5nZXRfdXJsX2l0ZW0oQVMuVXJsS2luZC5IT01FUEFHRSkKKyAgICBhLnBhY2thZ2UgPSBhcHAu Z2V0X3BrZ25hbWVzKClbMF0KKworICAgIGlkX3RvX2FwcGxpY2F0aW9uW2EuZmVkb3JhX2lkXSA9 IGEKKyAgICBuYW1lX3RvX2FwcGxpY2F0aW9uW2EubmFtZV0gPSBhCisgICAgaG9tZXBhZ2VfdG9f YXBwbGljYXRpb25bYS5ob21lcGFnZV0gPSBhCisKKworZmxhdGh1Yl9zdG9yZSA9IEFTLlN0b3Jl KCkKK2ZsYXRodWJfc3RvcmUuZnJvbV9maWxlKEdpby5GaWxlLm5ld19mb3JfcGF0aCgnb3V0L2Zs YXRodWItYXBwc3RyZWFtLnhtbC5neicpLCAiIiwgTm9uZSkKK2ZvciBhcHAgaW4gaXRlcmF0ZV9h cHBzKGZsYXRodWJfc3RvcmUpOgorICAgIGZsYXRodWJfaWQgPSBhcHAuZ2V0X2lkKCkKKyAgICBu YW1lID0gYXBwLmdldF9uYW1lKCkKKyAgICBkZXNjcmlwdGlvbiA9IGFwcC5nZXRfZGVzY3JpcHRp b24oKQorICAgIGhvbWVwYWdlID0gYXBwLmdldF91cmxfaXRlbShBUy5VcmxLaW5kLkhPTUVQQUdF KQorCisgICAgaWRfYXBwID0gaWRfdG9fYXBwbGljYXRpb24uZ2V0KGZsYXRodWJfaWQsIE5vbmUp CisgICAgaWYgaWRfYXBwIGlzIG5vdCBOb25lOgorICAgICAgICBpZF9hcHAuZmxhdGh1Yl9pZCA9 IGZsYXRodWJfaWQKKyAgICAgICAgY29udGludWUKKworICAgIG90aGVyX2lkID0gaWRfbWFwcGlu Z3MuZ2V0KGZsYXRodWJfaWQsIE5vbmUpCisgICAgaWYgb3RoZXJfaWQgaXMgbm90IE5vbmU6Cisg ICAgICAgIG90aGVyX2lkX2FwcCA9IGlkX3RvX2FwcGxpY2F0aW9uLmdldChvdGhlcl9pZCwgTm9u ZSkKKyAgICAgICAgaWYgb3RoZXJfaWRfYXBwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3Ro ZXJfaWRfYXBwLmZsYXRodWJfaWQgPSBmbGF0aHViX2lkCisgICAgICAgICAgICBpZF90b19hcHBs aWNhdGlvbltmbGF0aHViX2lkXSA9IG90aGVyX2lkX2FwcAorICAgICAgICAgICAgY29udGludWUK KworICAgIG5hbWVfYXBwID0gbmFtZV90b19hcHBsaWNhdGlvbi5nZXQobmFtZSwgTm9uZSkKKyAg ICBob21lcGFnZV9hcHAgPSBob21lcGFnZV90b19hcHBsaWNhdGlvbi5nZXQoaG9tZXBhZ2UsIE5v bmUpCisKKyAgICBpZiBuYW1lX2FwcCBpcyBub3QgTm9uZSBhbmQgaG9tZXBhZ2VfYXBwIGlzIG5v dCBOb25lOgorICAgICAgICBhc3NlcnQgbmFtZV9hcHAgaXMgaG9tZXBhZ2VfYXBwCisgICAgaWYg bmFtZV9hcHAgaXMgbm90IE5vbmU6CisgICAgICAgIGEgPSBuYW1lX2FwcAorICAgIGVsaWYgaG9t ZXBhZ2VfYXBwIGlzIG5vdCBOb25lOgorICAgICAgICBhID0gaG9tZXBhZ2VfYXBwCisgICAgZWxz ZToKKyAgICAgICAgYSA9IEFwcGxpY2F0aW9uKCkKKyAgICAgICAgYS5uYW1lID0gbmFtZQorICAg ICAgICBhLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgYS5ob21lcGFnZSA9IGhv bWVwYWdlCisKKyAgICBhLmZsYXRodWJfaWQgPSBmbGF0aHViX2lkCisgICAgaWRfdG9fYXBwbGlj YXRpb25bYS5mbGF0aHViX2lkXSA9IGEKKword2l0aCBvcGVuKCdvdXQvcmF0aW5ncy5qc29uJykg YXMgZjoKKyAgICByYXRpbmdzID0ganNvbi5sb2FkKGYpCisKK2ZvciBrLCB2IGluIHJhdGluZ3Mu aXRlbXMoKToKKyAgICBhID0gaWRfdG9fYXBwbGljYXRpb24uZ2V0KGssIE5vbmUpCisgICAgaWYg bm90IGE6CisgICAgICAgIG90aGVyX2lkID0gaWRfbWFwcGluZ3MuZ2V0KGssIE5vbmUpCisgICAg ICAgIGlmIG90aGVyX2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYSA9IGlkX3RvX2FwcGxp Y2F0aW9uLmdldChvdGhlcl9pZCwgTm9uZSkKKyAgICAgICAgaWYgYToKKyAgICAgICAgICAgIGlk X3RvX2FwcGxpY2F0aW9uW2tdID0gYQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYSA9IEFw cGxpY2F0aW9uKCkKKyAgICBpZiBhLnBhY2thZ2UgaXMgTm9uZToKKyAgICAgICAgcGFja2FnZSA9 IGRlc2t0b3BfbWFwLmdldChrKQorICAgICAgICBpZiBwYWNrYWdlOgorICAgICAgICAgICAgYS5w YWNrYWdlID0gcGFja2FnZQorICAgIGEub2Ryc19pZCA9IGsKKyAgICBpZF90b19hcHBsaWNhdGlv blthLm9kcnNfaWRdID0gYQorICAgIGZvciB4IGluIHJhbmdlKDAsIDYpOgorICAgICAgICBvbGQg PSBhLnN0YXJzW3hdCisgICAgICAgIGlmIG9sZCBpcyBOb25lOgorICAgICAgICAgICAgb2xkID0g MAorICAgICAgICBhLnN0YXJzW3hdID0gb2xkICsgdlsnc3RhcicgKyBzdHIoeCldCisgICAgb2xk ID0gYS5zdGFyX3RvdGFsCisgICAgaWYgb2xkIGlzIE5vbmU6CisgICAgICAgIG9sZCA9IDAKKyAg ICBhLnN0YXJfdG90YWwgPSBvbGQgKyB2Wyd0b3RhbCddCisKK2xvY2FsZS5zZXRsb2NhbGUobG9j YWxlLkxDX0FMTCwgJycpCisKK2ZlZG9yYV9hcHBzdHJlYW0gPSAwCitub19hcHBzdHJlYW0gPSAw CitmbGF0aHViID0gMAorcmV2aWV3X29ubHkgPSAwCisKK291dHB1dCA9IFtdCisKK2FwcHMgPSBz ZXQoaWRfdG9fYXBwbGljYXRpb24udmFsdWVzKCkpCisKK3BhY2thZ2VkX2FwcHMgPSB7YSBmb3Ig YSBpbiBhcHBzIGlmIGEucGFja2FnZSBpcyBub3QgTm9uZX0KK3RvcF9wYWNrYWdlZF9hcHBzID0g c29ydGVkKHBhY2thZ2VkX2FwcHMsIGtleT1sYW1iZGEgYTogLShhLnN0YXJfdG90YWwgb3IgMCkp WzA6MTAwXQorCitpbmZvX2pzb24gPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2ZlZG1vZCcs ICdmbGF0cGFrLXJlcG9ydCddICsgW2EucGFja2FnZSBmb3IgYSBpbiBwYWNrYWdlZF9hcHBzXSkK K2luZm8gPSBqc29uLmxvYWRzKGluZm9fanNvbikKK2ZvciBhIGluIHBhY2thZ2VkX2FwcHM6Cisg ICAgYS5leHRyYV9wYWNrYWdlcyA9IGluZm9bJ2ZsYXRwYWtzJ11bYS5wYWNrYWdlXVsnZXh0cmEn XQorCitydW50aW1lX3BhY2thZ2VzID0ge30KK2V4dHJhX3BhY2thZ2VzID0ge30KK2ZvciBwLCBp IGluIGluZm9bJ3BhY2thZ2VzJ10uaXRlbXMoKToKKyAgICBpZiBpWydydW50aW1lJ106CisgICAg ICAgIHJ1bnRpbWVfcGFja2FnZXNbcF0gPSB7ICdhbGwnOiBpWyd1c2VkX2J5J119CisgICAgZWxz ZToKKyAgICAgICAgZXh0cmFfcGFja2FnZXNbcF0gPSB7ICdhbGwnOiBpWyd1c2VkX2J5J119CisK K3RvcF9pbmZvX2pzb24gPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2ZlZG1vZCcsICdmbGF0 cGFrLXJlcG9ydCddICsgW2EucGFja2FnZSBmb3IgYSBpbiB0b3BfcGFja2FnZWRfYXBwc10pCit0 b3BfaW5mbyA9IGpzb24ubG9hZHModG9wX2luZm9fanNvbikKKworZm9yIHAsIGkgaW4gdG9wX2lu Zm9bJ3BhY2thZ2VzJ10uaXRlbXMoKToKKyAgICBpZiBpWydydW50aW1lJ106CisgICAgICAgIHJ1 bnRpbWVfcGFja2FnZXNbcF1bJ3RvcCddID0gaVsndXNlZF9ieSddCisgICAgZWxzZToKKyAgICAg ICAgZXh0cmFfcGFja2FnZXNbcF1bJ3RvcCddID0gaVsndXNlZF9ieSddCisKK2RlZiBkaWN0X3Rv X2xpc3QocGFja2FnZXMpOgorICAgIHJlc3VsdCA9IFtdCisgICAgZm9yIHAsIGkgaW4gcGFja2Fn ZXMuaXRlbXMoKToKKyAgICAgICAgeCA9IHsKKyAgICAgICAgICAgICdwYWNrYWdlJzogcCwKKyAg ICAgICAgICAgICdhbGwnOiBzb3J0ZWQoaVsnYWxsJ10pLAorICAgICAgICAgICAgJ2FsbF9jb3Vu dCc6IGxlbihpWydhbGwnXSksCisgICAgICAgIH0KKyAgICAgICAgaWYgJ3RvcCcgaW4gaToKKyAg ICAgICAgICAgIHhbJ3RvcCddID0gc29ydGVkKGlbJ3RvcCddKQorICAgICAgICAgICAgeFsndG9w X2NvdW50J10gPSBsZW4oaVsndG9wJ10pCisgICAgICAgIHJlc3VsdC5hcHBlbmQoeCkKKyAgICBy ZXN1bHQuc29ydChrZXk9bGFtYmRhIGk6IC1pWydhbGxfY291bnQnXSkKKworICAgIHJldHVybiBy ZXN1bHQKKword2l0aCBvcGVuKCdyZXBvcnRzL2FwcGxpY2F0aW9uLXBhY2thZ2VzLmpzb24nLCAn dycpIGFzIGY6CisgICAganNvbi5kdW1wKHsKKyAgICAgICAgJ3J1bnRpbWUnOiBkaWN0X3RvX2xp c3QocnVudGltZV9wYWNrYWdlcyksCisgICAgICAgICdleHRyYSc6IGRpY3RfdG9fbGlzdChleHRy YV9wYWNrYWdlcyksCisgICAgfSwgZikKKworZGVmIHNhbml0aXplX3BpZWNlKG0pOgorICAgIGlm IG0uZ3JvdXAoMSkgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAg ZWxpZiBtLmdyb3VwKDIpIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gJyZsdDsnCisgICAg ZWxpZiBtLmdyb3VwKDMpIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gJyZndDsnCisKK2Rl ZiBzYW5pdGl6ZV9kZXNjcmlwdGlvbihkZXNjcmlwdGlvbik6CisgICAgIyBUaGlzIGlzIHNwZWNp ZmljYWxseSBmb3IgYSBidWdneSBhcHBzdHJlYW0gZm9yIEdOT01FIFNjcmVlbnNob3QKKyAgICBk ZXNjcmlwdGlvbiA9IHJlLnN1YihyJzxwIHhtbDpsYW5nPSJbXiJdKiI+Lio8L3A+JywgJycsIGRl c2NyaXB0aW9uKQorICAgICMgTWFpbiBwYXJ0IG9mIHRoZSBzYW5pdGl6YXRpb24gLSBxdW90ZSBh bGwgPD4mCisgICAgZGVzY3JpcHRpb24gPSByZS5zdWIocicoPHA+fDwvcD58PHVsPnw8L3VsPnw8 bGk+fDwvbGk+fFtePD5dKyl8KDwpfCg+KScsIHNhbml0aXplX3BpZWNlLCBkZXNjcmlwdGlvbikK KyAgICByZXR1cm4gZGVzY3JpcHRpb24KKworZm9yIGEgaW4gc29ydGVkKGFwcHMsIGtleT1sYW1i ZGEgYTogKGxvY2FsZS5zdHJ4ZnJtKGEuZGlzcGxheV9uYW1lKSwgYS5jYW5vbl9pZCkpOgorICAg IGlmIGEuZmVkb3JhX2lkIGlzIG5vdCBOb25lOgorICAgICAgICBmZWRvcmFfYXBwc3RyZWFtICs9 IDEKKyAgICBlbGlmIGEucGFja2FnZSBpcyBub3QgTm9uZToKKyAgICAgICAgbm9fYXBwc3RyZWFt ICs9IDEKKyAgICBlbGlmIGEuZmxhdGh1Yl9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgZmxhdGh1 YiArPSAxCisgICAgZWxzZToKKyAgICAgICAgcmV2aWV3X29ubHkgKz0gMQorCisgICAgb3V0cHV0 X2l0ZW0gPSB7CisgICAgICAgICduYW1lJzogYS5kaXNwbGF5X25hbWUsCisgICAgfQorCisgICAg aWYgYS5wYWNrYWdlIGlzIG5vdCBOb25lOgorICAgICAgICBvdXRwdXRfaXRlbVsncGFja2FnZSdd ID0gYS5wYWNrYWdlCisKKyAgICBpZiBhLmRlc2NyaXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAg ICBvdXRwdXRfaXRlbVsnZGVzY3JpcHRpb24nXSA9IHNhbml0aXplX2Rlc2NyaXB0aW9uKGEuZGVz Y3JpcHRpb24pCisKKyAgICBpZiBhLmZsYXRodWJfaWQgaXMgbm90IE5vbmU6CisgICAgICAgIG91 dHB1dF9pdGVtWydmbGF0aHViJ10gPSBhLmZsYXRodWJfaWQKKworICAgIGlmIGEuZmVkb3JhX2lk IGlzIG5vdCBOb25lOgorICAgICAgICBvdXRwdXRfaXRlbVsnZmVkb3JhJ10gPSBhLmZlZG9yYV9p ZAorCisgICAgaWYgYS5vZHJzX2lkIGlzIG5vdCBOb25lOgorICAgICAgICBvdXRwdXRfaXRlbVsn b2RycyddID0gYS5vZHJzX2lkCisKKyAgICBpZiBhLmV4dHJhX3BhY2thZ2VzIGlzIG5vdCBOb25l OgorICAgICAgICBvdXRwdXRfaXRlbVsnZXh0cmFfcGFja2FnZXMnXSA9IGEuZXh0cmFfcGFja2Fn ZXMKKworICAgIGlmIGEuc3Rhcl90b3RhbCBpcyBub3QgTm9uZToKKyAgICAgICAgb3V0cHV0X2l0 ZW1bJ3N0YXJfYXZnJ10gPSBzdW0oKGkgKiBhLnN0YXJzW2ldKSBmb3IgaSBpbiByYW5nZSgwLCA2 KSkvc3VtKChhLnN0YXJzW2ldKSBmb3IgaSBpbiByYW5nZSgwLCA2KSkKKyAgICAgICAgb3V0cHV0 X2l0ZW1bJ3N0YXJfdG90YWwnXSA9IGEuc3Rhcl90b3RhbAorICAgICAgICBvdXRwdXRfaXRlbVsn c3RhcnMnXSA9IGEuc3RhcnMKKworICAgIG91dHB1dC5hcHBlbmQob3V0cHV0X2l0ZW0pCisjICAg IHByaW50KGEuZGlzcGxheV9uYW1lLCBhLnBhY2thZ2UsIGEuZmxhdGh1Yl9pZCwgYS5mZWRvcmFf aWQsIGEub2Ryc19pZCwgYS5ob21lcGFnZSwgYS5zdGFyX3RvdGFsKQorCit3aXRoIG9wZW4oJ3Jl cG9ydHMvYXBwbGljYXRpb25zLmpzb24nLCAndycpIGFzIGY6CisgICAganNvbi5kdW1wKHsKKyAg ICAgICAgJ2FwcGxpY2F0aW9ucyc6IG91dHB1dCwKKyAgICAgICAgJ3N1bW1hcnknOiBbCisgICAg ICAgICAgICBbJ0luIEZlZG9yYSBhcHBzdHJlYW0nLCBmZWRvcmFfYXBwc3RyZWFtXSwKKyAgICAg ICAgICAgIFsnSW4gRmVkb3JhLCBub3QgaW4gYXBwc3RyZWFtJywgbm9fYXBwc3RyZWFtXSwKKyAg ICAgICAgICAgIFsnSW4gRmxhdGh1Yiwgbm90IGluIEZlZG9yYScsIGZsYXRodWJdLAorICAgICAg ICAgICAgWydPRFJTIHJldmlldywgbm90IGluIEZsYXRodWIgb3IgRmxhdGh1YicsIHJldmlld19v bmx5XSwKKyAgICAgICAgICAgIFsnVG90YWwnLCBmZWRvcmFfYXBwc3RyZWFtICsgbm9fYXBwc3Ry ZWFtICsgZmxhdGh1YiArIHJldmlld19vbmx5XSwKKyAgICAgICAgXQorICAgIH0sIGYsIGluZGVu dD00KQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2dlbmVyYXRlLXJlcG9ydC5weSBiL3Rvb2xzL2dlbmVy YXRlLXJlcG9ydC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggN2YyNTM3NC4uMDAw MDAwMAotLS0gYS90b29scy9nZW5lcmF0ZS1yZXBvcnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0 MzggKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24zCi0KLWZyb20gamluamEyIGltcG9ydCBFbnZp cm9ubWVudCwgRmlsZVN5c3RlbUxvYWRlciwgc2VsZWN0X2F1dG9lc2NhcGUKLWltcG9ydCBqc29u Ci1pbXBvcnQgbG9jYWxlCi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN1YnByb2Nlc3MK LWltcG9ydCBzeXMKLQotZGVmIHN0YXJ0KG1zZyk6Ci0gICAgcHJpbnQoInt9OiBcMDMzWzkwbXt9 IC4uLiBcMDMzWzM5bSIuZm9ybWF0KG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pLCBtc2cp LCBmaWxlPXN5cy5zdGRlcnIsIGVuZD0iIikKLSAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLQotZGVm IGRvbmUoKToKLSAgICBwcmludCgiXDAzM1s5MG1kb25lXDAzM1szOW0iLCBmaWxlPXN5cy5zdGRl cnIpCi0KLWRlZiB3YXJuKG1zZyk6Ci0gICAgcHJpbnQoInt9OiBcMDMzWzMxbXt9XDAzM1szOW0i LmZvcm1hdChvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSwgbXNnKSwgZmlsZT1zeXMuc3Rk ZXJyKQotCi1kZWYgZmVkbW9kX291dHB1dChhcmdzKToKLSAgICByZXR1cm4gc3VicHJvY2Vzcy5j aGVja19vdXRwdXQoWydmZWRtb2QnXSArIGFyZ3MsIGVuY29kaW5nPSd1dGYtOCcpCi0KLV9udnJf dG9fbmFtZV9yZSA9IHJlLmNvbXBpbGUoJ14oLiopLVteLV0qLVteLV0qJykKLWRlZiBudnJfdG9f bmFtZShudnIpOgotICAgIHJldHVybiBfbnZyX3RvX25hbWVfcmUubWF0Y2gobnZyKS5ncm91cCgx KQotCi1jbGFzcyBQYWNrYWdlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUp OgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuZnJlZWRlc2t0b3BfcGxh dGZvcm0gPSAwCi0gICAgICAgIHNlbGYuZnJlZWRlc2t0b3BfcGxhdGZvcm1fZmlsZXMgPSBOb25l Ci0gICAgICAgIHNlbGYuZnJlZWRlc2t0b3BfcGxhdGZvcm1fcmVxdWlyZWRfYnkgPSBOb25lCi0g ICAgICAgIHNlbGYuZ25vbWVfcGxhdGZvcm0gPSAwCi0gICAgICAgIHNlbGYuZ25vbWVfcGxhdGZv cm1fZmlsZXMgPSBOb25lCi0gICAgICAgIHNlbGYuZ25vbWVfcGxhdGZvcm1fcmVxdWlyZWRfYnkg PSBOb25lCi0gICAgICAgIHNlbGYuZnJlZWRlc2t0b3Bfc2RrID0gMAotICAgICAgICBzZWxmLmZy ZWVkZXNrdG9wX3Nka19maWxlcyA9IE5vbmUKLSAgICAgICAgc2VsZi5mcmVlZGVza3RvcF9zZGtf cmVxdWlyZWRfYnkgPSBOb25lCi0gICAgICAgIHNlbGYuZ25vbWVfc2RrID0gMAotICAgICAgICBz ZWxmLmdub21lX3Nka19maWxlcyA9IE5vbmUKLSAgICAgICAgc2VsZi5nbm9tZV9zZGtfcmVxdWly ZWRfYnkgPSBOb25lCi0gICAgICAgIHNlbGYubGl2ZSA9IDAKLSAgICAgICAgc2VsZi5yZjI2ID0g MAotICAgICAgICBzZWxmLnNvdXJjZV9wYWNrYWdlID0gTm9uZQotICAgICAgICBzZWxmLmZsYWcg PSBOb25lCi0gICAgICAgIHNlbGYuX25vdGUgPSBOb25lCi0KLSAgICBAcHJvcGVydHkKLSAgICBk ZWYgcnVudGltZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmZyZWVkZXNrdG9wX3BsYXRm b3JtIG9yIHNlbGYuZ25vbWVfcGxhdGZvcm0gb3Igc2VsZi5mcmVlZGVza3RvcF9zZGsgb3Igc2Vs Zi5nbm9tZV9zZGsKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBrbGFzcyhzZWxmKToKLSAgICAg ICAgaWYgc2VsZi5mbGFnID09ICdGJzoKLSAgICAgICAgICAgIHJldHVybiAiZmxhZ2dlZCIKLSAg ICAgICAgZWxpZiBzZWxmLmZsYWcgPT0gJ0Y/JzoKLSAgICAgICAgICAgIHJldHVybiAicXVlc3Rp b25hYmxlIgotICAgICAgICBlbGlmIHNlbGYuZmxhZyA9PSAnRkQnOgotICAgICAgICAgICAgcmV0 dXJuICJmbGFnZ2VkLWRlcCIKLSAgICAgICAgZWxpZiBzZWxmLmZsYWcgPT0gJ1cnOgotICAgICAg ICAgICAgcmV0dXJuICJ3YWl2ZWQiCi0gICAgICAgIGVsaWYgc2VsZi5mbGFnIGlzIG5vdCBOb25l IGFuZCBzZWxmLmZsYWcuc3RhcnRzd2l0aCgnRScpOgotICAgICAgICAgICAgcmV0dXJuICJleHRy YSIKLSAgICAgICAgZWxpZiBzZWxmLmdub21lX3BsYXRmb3JtIGFuZCBub3Qgc2VsZi5saXZlOgot ICAgICAgICAgICAgcmV0dXJuICJxdWVzdGlvbmFibGUiCi0KLSAgICBAcHJvcGVydHkKLSAgICBk ZWYgbW9kdWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHBhY2thZ2VfdG9fbW9kdWxlLmdldChz ZWxmLm5hbWUsICIiKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG5vdGUoc2VsZik6Ci0gICAg ICAgIGlmIHNlbGYuX25vdGU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbm90ZQotICAgICAg ICBlbGlmIHNlbGYuZ25vbWVfcGxhdGZvcm0gYW5kIG5vdCBzZWxmLmxpdmU6Ci0gICAgICAgICAg ICByZXR1cm4gInBsYXRmb3JtIHBhY2thZ2Ugbm90IG9uIExpdmUgaW1hZ2UiCi0gICAgICAgIGVs c2U6Ci0gICAgICAgICAgICByZXR1cm4gIiIKLQotICAgIGRlZiB3aHkoc2VsZiwgd2hpY2gpOgot ICAgICAgICBmaWxlcyA9IGdldGF0dHIoc2VsZiwgd2hpY2ggKyAnX2ZpbGVzJykKLSAgICAgICAg aWYgZmlsZXMgaXMgTm9uZToKLSAgICAgICAgICAgIGZpbGVzX3N0ciA9ICcnCi0gICAgICAgIGVs aWYgbGVuKGZpbGVzKSA8PSAzOgotICAgICAgICAgICAgZmlsZXNfc3RyPSAgJ0ZpbGVzOiAnICsg JyAnLmpvaW4oZmlsZXMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmaWxlc19zdHIgPSAn RmlsZXM6ICcgKyAnICcuam9pbihmaWxlc1s6M10pICsgJyAuLi4nCi0KLSAgICAgICAgcmVxdWly ZWRfYnkgPSBnZXRhdHRyKHNlbGYsIHdoaWNoICsgJ19yZXF1aXJlZF9ieScpCi0gICAgICAgIGlm IHJlcXVpcmVkX2J5IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXF1aXJlZF9ieV9zdHIgPSAnJwot ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVxdWlyZWRfYnlfc3RyID0gJ1xuJy5qb2luKCd7 fSAoe30pJy5mb3JtYXQocmVxLCBwcm92aWRlcikgZm9yIHJlcSwgcHJvdmlkZXIgaW4gcmVxdWly ZWRfYnkpCi0KLSAgICAgICAgaWYgZmlsZXNfc3RyIGFuZCByZXF1aXJlZF9ieV9zdHI6Ci0gICAg ICAgICAgICByZXR1cm4gZmlsZXNfc3RyICsgJ1xuJyArIHJlcXVpcmVkX2J5X3N0cgotICAgICAg ICBlbGlmIGZpbGVzX3N0cjoKLSAgICAgICAgICAgIHJldHVybiBmaWxlc19zdHIKLSAgICAgICAg ZWxpZiByZXF1aXJlZF9ieV9zdHI6Ci0gICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRfYnlfc3Ry Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgIEBwcm9wZXJ0eQot ICAgIGRlZiBmcmVlZGVza3RvcF9wbGF0Zm9ybV93aHkoc2VsZik6Ci0gICAgICAgIHJldHVybiBz ZWxmLndoeSgnZnJlZWRlc2t0b3BfcGxhdGZvcm0nKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVm IGZyZWVkZXNrdG9wX3Nka193aHkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLndoeSgnZnJl ZWRlc2t0b3Bfc2RrJykKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBnbm9tZV9wbGF0Zm9ybV93 aHkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLndoeSgnZ25vbWVfcGxhdGZvcm0nKQotCi0g ICAgQHByb3BlcnR5Ci0gICAgZGVmIGdub21lX3Nka193aHkoc2VsZik6Ci0gICAgICAgIHJldHVy biBzZWxmLndoeSgnZ25vbWVfc2RrJykKLQotICAgIGRlZiBpbmNsdXNpb24oc2VsZiwgd2hpY2gp OgotICAgICAgICBsZXZlbCA9IGdldGF0dHIoc2VsZiwgd2hpY2gpCi0gICAgICAgIGlmIGxldmVs ID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ2Fic2VudCcKLSAgICAgICAgZWxpZiBsZXZlbCA9 PSAxOgotICAgICAgICAgICAgcmV0dXJuICdkZXAnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg ICByZXF1aXJlZF9ieSA9IGdldGF0dHIoc2VsZiwgd2hpY2ggKyAnX3JlcXVpcmVkX2J5JywgRmFs c2UpCi0gICAgICAgICAgICBpZiByZXF1aXJlZF9ieSBpcyBGYWxzZToKLSAgICAgICAgICAgICAg ICByZXR1cm4gJ3ByZXNlbnQnCi0gICAgICAgICAgICBlbGlmIHJlcXVpcmVkX2J5IGlzIG5vdCBO b25lIGFuZCBsZW4ocmVxdWlyZWRfYnkpID4gMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2Zp bGVzJwotICAgICAgICAgICAgZWxpZiBzZWxmLmZsYWcgaXMgbm90IE5vbmUgYW5kIHNlbGYuZmxh Zy5zdGFydHN3aXRoKCdFJyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdleHRyYScKLSAgICAg ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdyb290JwotCi0gICAgQHByb3Bl cnR5Ci0gICAgZGVmIGZyZWVkZXNrdG9wX3BsYXRmb3JtX2luY2x1c2lvbihzZWxmKToKLSAgICAg ICAgcmV0dXJuIHNlbGYuaW5jbHVzaW9uKCdmcmVlZGVza3RvcF9wbGF0Zm9ybScpCi0KLSAgICBA cHJvcGVydHkKLSAgICBkZWYgZnJlZWRlc2t0b3Bfc2RrX2luY2x1c2lvbihzZWxmKToKLSAgICAg ICAgcmV0dXJuIHNlbGYuaW5jbHVzaW9uKCdmcmVlZGVza3RvcF9zZGsnKQotCi0gICAgQHByb3Bl cnR5Ci0gICAgZGVmIGdub21lX3BsYXRmb3JtX2luY2x1c2lvbihzZWxmKToKLSAgICAgICAgcmV0 dXJuIHNlbGYuaW5jbHVzaW9uKCdnbm9tZV9wbGF0Zm9ybScpCi0KLSAgICBAcHJvcGVydHkKLSAg ICBkZWYgZ25vbWVfc2RrX2luY2x1c2lvbihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaW5j bHVzaW9uKCdnbm9tZV9zZGsnKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGxpdmVfaW5jbHVz aW9uKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5pbmNsdXNpb24oJ2xpdmUnKQotCi0gICAg QHByb3BlcnR5Ci0gICAgZGVmIHJmMjZfaW5jbHVzaW9uKHNlbGYpOgotICAgICAgICByZXR1cm4g c2VsZi5pbmNsdXNpb24oJ3JmMjYnKQotCi1jbGFzcyBTb3VyY2VQYWNrYWdlKG9iamVjdCk6Ci0g ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0g ICAgICAgIHNlbGYucGFja2FnZXMgPSBbXQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG1vZHVs ZXMoc2VsZik6Ci0gICAgICAgIG9sZF9tb2R1bGVzID0gc2VsZi5wYWNrYWdlc1swXS5tb2R1bGVz Ci0gICAgICAgIGtsYXNzID0gc2VsZi5rbGFzcwotICAgICAgICBpZiBrbGFzcyA9PSAiYnVpbGQt cGxhdGZvcm0iOgotICAgICAgICAgICAgbmV3X21vZHVsZSA9ICJkZXNrdG9wLXJ1bnRpbWUiCi0g ICAgICAgIGVsaWYga2xhc3MgPT0gImJ1aWxkLXNkayI6Ci0gICAgICAgICAgICBuZXdfbW9kdWxl ID0gImZsYXRwYWstcnVudGltZSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ld19tb2R1 bGUgPSBOb25lCi0KLSAgICAgICAgaWYgb2xkX21vZHVsZXMgYW5kIG5ld19tb2R1bGU6Ci0gICAg ICAgICAgICByZXR1cm4gb2xkX21vZHVsZXMgKyAiIOKHkiAiICsgbmV3X21vZHVsZQotICAgICAg ICBlbGlmIG9sZF9tb2R1bGVzOgotICAgICAgICAgICAgcmV0dXJuIG9sZF9tb2R1bGVzCi0gICAg ICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gbmV3X21vZHVsZQotCi0gICAgQHByb3BlcnR5 Ci0gICAgZGVmIHNka19vbmx5KHNlbGYpOgotICAgICAgICByZXR1cm4gc2RrX29ubHkKLQotICAg IEBwcm9wZXJ0eQotICAgIGRlZiBrbGFzcyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5wYWNrYWdl c1swXS5tb2R1bGVzIGluICgiIiwgImluc3RhbGxlciIpOgotICAgICAgICAgICAgc2RrX29ubHkg PSBUcnVlCi0gICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLnBhY2thZ2VzOgotICAgICAg ICAgICAgICAgIGlmIHBhY2thZ2UuZnJlZWRlc2t0b3BfcGxhdGZvcm0gb3IgcGFja2FnZS5nbm9t ZV9wbGF0Zm9ybToKLSAgICAgICAgICAgICAgICAgICAgc2RrX29ubHkgPSBGYWxzZQotICAgICAg ICAgICAgaWYgc2RrX29ubHk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJidWlsZC1zZGsiCi0g ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAiYnVpbGQtcGxhdGZvcm0i Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIiIKLQotY2xhc3MgTGV0dGVyKG9i amVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGxldHRlcik6Ci0gICAgICAgIHNlbGYubGV0 dGVyID0gbGV0dGVyCi0gICAgICAgIHNlbGYucGFja2FnZXMgPSBbXQotCi0jCi0jIEdldCBpbmZv cm1hdGlvbiBhYm91dCBwYWNrYWdlcwotIwotCi1wYWNrYWdlcyA9IGRpY3QoKQotZGVmIGFkZF9w YWNrYWdlKG5hbWUsIHdoaWNoLCBsZXZlbCwgb25seV9pZl9leGlzdHM9RmFsc2UsIHNvdXJjZV9w YWNrYWdlPU5vbmUpOgotICAgIHBrZyA9IHBhY2thZ2VzLmdldChuYW1lLCBOb25lKQotICAgIGlm IHBrZyBpcyBOb25lOgotICAgICAgICBpZiBvbmx5X2lmX2V4aXN0czoKLSAgICAgICAgICAgIHJl dHVybgotICAgICAgICBwa2cgPSBQYWNrYWdlKG5hbWUpCi0gICAgICAgIHBhY2thZ2VzW25hbWVd ID0gcGtnCi0gICAgaWYgZ2V0YXR0cihwa2csIHdoaWNoKSA8IGxldmVsOgotICAgICAgICBzZXRh dHRyKHBrZywgd2hpY2gsIGxldmVsKQotICAgIGlmIHNvdXJjZV9wYWNrYWdlIGlzIG5vdCBOb25l OgotICAgICAgICBwa2cuc291cmNlX3BhY2thZ2UgPSBzb3VyY2VfcGFja2FnZQotCi1kZWYgYWRk X3BhY2thZ2VzKHNvdXJjZSwgd2hpY2gsIHJlc29sdmVfZGVwcz1GYWxzZSwgb25seV9pZl9leGlz dHM9RmFsc2UpOgotICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBzdHIpOgotICAgICAgICBzdGFy dCgiQWRkaW5nIHBhY2thZ2VzIGZyb20ge30iLmZvcm1hdChzb3VyY2UpKQotICAgICAgICB3aXRo IG9wZW4oc291cmNlKSBhcyBmOgotICAgICAgICAgICAgcGtncyA9IHNldChsaW5lLnN0cmlwKCkg Zm9yIGxpbmUgaW4gZikKLSAgICBlbHNlOgotICAgICAgICBwa2dzID0gc291cmNlCi0KLSAgICBp ZiByZXNvbHZlX2RlcHM6Ci0gICAgICAgIHJlc29sdmVkX3BhY2thZ2VzID0ganNvbi5sb2Fkcyhm ZWRtb2Rfb3V0cHV0KFsncmVzb2x2ZS1kZXBzJywgJy0tanNvbiddICsgbGlzdChwa2dzKSkpCi0g ICAgICAgIGZvciBwYWNrYWdlIGluIHJlc29sdmVkX3BhY2thZ2VzOgotICAgICAgICAgICAgbmFt ZSA9IG52cl90b19uYW1lKHBhY2thZ2VbJ3JwbSddKQotICAgICAgICAgICAgc3JwbV9uYW1lID0g bnZyX3RvX25hbWUocGFja2FnZVsnc3JwbSddKQotICAgICAgICAgICAgYWRkX3BhY2thZ2UobmFt ZSwgd2hpY2gsIGxldmVsPSgyIGlmIG5hbWUgaW4gcGtncyBlbHNlIDEpLAotICAgICAgICAgICAg ICAgICAgICAgICAgc291cmNlX3BhY2thZ2U9c3JwbV9uYW1lLCBvbmx5X2lmX2V4aXN0cz1vbmx5 X2lmX2V4aXN0cykKLQotICAgICAgICBmb3IgcGFja2FnZSBpbiByZXNvbHZlZF9wYWNrYWdlczoK LSAgICAgICAgICAgIGZvciByZXEsIHByb3ZpZGVycyBpbiBwYWNrYWdlWydyZXF1aXJlcyddLml0 ZW1zKCk6Ci0gICAgICAgICAgICAgICAgcHJvdmlkZXIgPSBudnJfdG9fbmFtZShwcm92aWRlcnNb MF0pCi0gICAgICAgICAgICAgICAgcHJvdmlkZXJfcGFja2FnZSA9IHBhY2thZ2VzLmdldChwcm92 aWRlciwgTm9uZSkKLSAgICAgICAgICAgICAgICBpZiBwcm92aWRlcl9wYWNrYWdlIGlzIE5vbmU6 ICMgZmlsdGVyZWQgb3V0IG9mIHRoZSByZXNvbHZlLWRlcHMgb3V0cHV0IC0gZS5nLiwgZmVkb3Jh LXJlbGVhc2UKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBy ZXF1aXJlZF9ieSA9IGdldGF0dHIocHJvdmlkZXJfcGFja2FnZSwgd2hpY2ggKyAnX3JlcXVpcmVk X2J5JykKLSAgICAgICAgICAgICAgICBpZiByZXF1aXJlZF9ieSBpcyBOb25lOgotICAgICAgICAg ICAgICAgICAgICByZXF1aXJlZF9ieSA9IFtdCi0gICAgICAgICAgICAgICAgICAgIHNldGF0dHIo cHJvdmlkZXJfcGFja2FnZSwgd2hpY2ggKyAnX3JlcXVpcmVkX2J5JywgcmVxdWlyZWRfYnkpCi0g ICAgICAgICAgICAgICAgcmVxdWlyZWRfYnkuYXBwZW5kKChudnJfdG9fbmFtZShwYWNrYWdlWydy cG0nXSksIHJlcSkpCi0gICAgZWxzZToKLSAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGtnczoKLSAg ICAgICAgICAgIGFkZF9wYWNrYWdlKHBhY2thZ2UsIHdoaWNoLCBsZXZlbD0yLCBvbmx5X2lmX2V4 aXN0cz1vbmx5X2lmX2V4aXN0cykKLQotICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBzdHIpOgot ICAgICAgICBkb25lKCkKLQotZGVmIGFkZF9wYWNrYWdlX2ZpbGVzKGZpbGVuYW1lLCB3aGljaCk6 Ci0gICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmOgotICAgICAgICBmb3IgbGluZSBpbiBmOgot ICAgICAgICAgICAgZiwgcCA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCi0gICAgICAgICAgICBmID0g Zls6LTFdICMgc3RyaXAgdHJhaWxpbmcgOgotICAgICAgICAgICAgcGtnID0gcGFja2FnZXNbcF0K LSAgICAgICAgICAgIG9sZCA9IGdldGF0dHIocGtnLCB3aGljaCArICdfZmlsZXMnKQotICAgICAg ICAgICAgaWYgb2xkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIG9sZC5hcHBlbmQoZikK LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2V0YXR0cihwa2csIHdoaWNoICsg J19maWxlcycsIFtmXSkKLQotZGVmIHJlYWRfcGFja2FnZV9ub3RlcygpOgotICAgIGNvbW1lbnRf cmUgPSByZS5jb21waWxlKHInXHMqIy4qJykKLSAgICBmbGFnX3JlID0gcmUuY29tcGlsZShyJ1tB LVpfP10rJCcpCi0gICAgcGFja2FnZV9yZSA9IHJlLmNvbXBpbGUocidcUysnKQotCi0gICAgd2l0 aCBvcGVuKCJwYWNrYWdlLW5vdGVzLnR4dCIpIGFzIGY6Ci0gICAgICAgIGZvciBsaW5lIGluIGY6 Ci0gICAgICAgICAgICBsaW5lID0gY29tbWVudF9yZS5zdWIoJycsIGxpbmUpCi0gICAgICAgICAg ICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICBpZiBsaW5lID09ICcnOgotICAgICAg ICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoIjoiLCAy KQotICAgICAgICAgICAgbmFtZSA9IHBhcnRzWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIGlmIG5v dCByZS5tYXRjaChwYWNrYWdlX3JlLCBuYW1lKToKLSAgICAgICAgICAgICAgICB3YXJuKCJDYW4n dCBwYXJzZSBwYWNrYWdlIG5vdGU6IHt9Ii5mb3JtYXQobGluZSkpCi0gICAgICAgICAgICAgICAg Y29udGludWUKLSAgICAgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gMToKLSAgICAgICAgICAgICAg ICBmbGFnID0gbm90ZSA9IE5vbmUKLSAgICAgICAgICAgIGVsaWYgbGVuKHBhcnRzKSA9PSAyOgot ICAgICAgICAgICAgICAgIHggPSBwYXJ0c1sxXS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYg ZmxhZ19yZS5tYXRjaCh4KToKLSAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHgKLSAgICAgICAg ICAgICAgICAgICAgbm90ZSA9IE5vbmUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg ICAgICAgICAgICBub3RlID0geAotICAgICAgICAgICAgICAgICAgICBmbGFnID0gTm9uZQotICAg ICAgICAgICAgZWxpZiBsZW4ocGFydHMpID09IDM6Ci0gICAgICAgICAgICAgICAgeCA9IHBhcnRz WzFdLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBpZiBmbGFnX3JlLm1hdGNoKHgpOgotICAgICAg ICAgICAgICAgICAgICBmbGFnID0geAotICAgICAgICAgICAgICAgICAgICBub3RlID0gcGFydHNb Ml0uc3RyaXAoKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZs YWcgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIG5vdGUgPSBwYXJ0c1sxXSArICc6JyArIHBh cnRzWzJdCi0KLSAgICAgICAgICAgIHlpZWxkIG5hbWUsIG5vdGUsIGZsYWcKLQotYWRkX3BhY2th Z2VzKCdvdXQvZnJlZWRlc2t0b3AtUGxhdGZvcm0ucGFja2FnZXMnLCAnZnJlZWRlc2t0b3BfcGxh dGZvcm0nLCByZXNvbHZlX2RlcHM9VHJ1ZSkKLWFkZF9wYWNrYWdlcygnb3V0L2ZyZWVkZXNrdG9w LVNkay5wYWNrYWdlcycsICdmcmVlZGVza3RvcF9zZGsnLCByZXNvbHZlX2RlcHM9VHJ1ZSkKLWFk ZF9wYWNrYWdlcygnb3V0L2dub21lLVBsYXRmb3JtLnBhY2thZ2VzJywgJ2dub21lX3BsYXRmb3Jt JywgcmVzb2x2ZV9kZXBzPVRydWUpCi1hZGRfcGFja2FnZXMoJ291dC9nbm9tZS1TZGsucGFja2Fn ZXMnLCAnZ25vbWVfc2RrJywgcmVzb2x2ZV9kZXBzPVRydWUpCi1hZGRfcGFja2FnZXMoJ2RhdGEv ZjI3LWxpdmUucGFja2FnZXMnLCAnbGl2ZScsIG9ubHlfaWZfZXhpc3RzPVRydWUpCi1hZGRfcGFj a2FnZXMoJ2RhdGEvZjI2LWZsYXRwYWstcnVudGltZS5wYWNrYWdlcycsICdyZjI2Jywgb25seV9p Zl9leGlzdHM9VHJ1ZSkKLQotYWRkX3BhY2thZ2VfZmlsZXMoJ291dC9mcmVlZGVza3RvcC1QbGF0 Zm9ybS5tYXRjaGVkJywgJ2ZyZWVkZXNrdG9wX3BsYXRmb3JtJykKLWFkZF9wYWNrYWdlX2ZpbGVz KCdvdXQvZnJlZWRlc2t0b3AtU2RrLm1hdGNoZWQnLCAnZnJlZWRlc2t0b3Bfc2RrJykKLWFkZF9w YWNrYWdlX2ZpbGVzKCdvdXQvZ25vbWUtUGxhdGZvcm0ubWF0Y2hlZCcsICdnbm9tZV9wbGF0Zm9y bScpCi1hZGRfcGFja2FnZV9maWxlcygnb3V0L2dub21lLVNkay5tYXRjaGVkJywgJ2dub21lX3Nk aycpCi0KLSMgQWRkIGV4dHJhIHBhY2thZ2VzCi1leHRyYV9iYXNlID0gW10KLWV4dHJhX2Jhc2Vf c2RrID0gW10KLWV4dHJhID0gW10KLWV4dHJhX3NkayA9IFtdCi0KLWZvciBuYW1lLCBub3RlLCBm bGFnIGluIHJlYWRfcGFja2FnZV9ub3RlcygpOgotICAgIGlmIGZsYWcgPT0gJ0VCJzoKLSAgICAg ICAgZXh0cmFfYmFzZS5hcHBlbmQobmFtZSkKLSAgICAgICAgZXh0cmFfYmFzZV9zZGsuYXBwZW5k KG5hbWUpCi0gICAgICAgIGV4dHJhLmFwcGVuZChuYW1lKQotICAgICAgICBleHRyYV9zZGsuYXBw ZW5kKG5hbWUpCi0gICAgZWxpZiBmbGFnID09ICdFQl9TREsnOgotICAgICAgICBleHRyYV9iYXNl X3Nkay5hcHBlbmQobmFtZSkKLSAgICAgICAgZXh0cmFfc2RrLmFwcGVuZChuYW1lKQotICAgIGVs aWYgZmxhZyA9PSAnRSc6Ci0gICAgICAgIGV4dHJhLmFwcGVuZChuYW1lKQotICAgICAgICBleHRy YV9zZGsuYXBwZW5kKG5hbWUpCi0gICAgZWxpZiBmbGFnID09ICdFX1NESyc6Ci0gICAgICAgIGV4 dHJhX3Nkay5hcHBlbmQobmFtZSkKLQotYWRkX3BhY2thZ2VzKGV4dHJhX2Jhc2UsICdmcmVlZGVz a3RvcF9wbGF0Zm9ybScsIHJlc29sdmVfZGVwcz1UcnVlKQotYWRkX3BhY2thZ2VzKGV4dHJhX2Jh c2Vfc2RrLCAnZnJlZWRlc2t0b3Bfc2RrJywgcmVzb2x2ZV9kZXBzPVRydWUpCi1hZGRfcGFja2Fn ZXMoZXh0cmEsICdnbm9tZV9wbGF0Zm9ybScsIHJlc29sdmVfZGVwcz1UcnVlKQotYWRkX3BhY2th Z2VzKGV4dHJhX3NkaywgJ2dub21lX3NkaycsIHJlc29sdmVfZGVwcz1UcnVlKQotCi1zb3VyY2Vf cGFja2FnZXMgPSB7fQotZm9yIHBhY2thZ2UgaW4gcGFja2FnZXMudmFsdWVzKCk6Ci0gICAgc291 cmNlX3BhY2thZ2UgPSBzb3VyY2VfcGFja2FnZXMuZ2V0KHBhY2thZ2Uuc291cmNlX3BhY2thZ2Us IE5vbmUpCi0gICAgaWYgc291cmNlX3BhY2thZ2UgaXMgTm9uZToKLSAgICAgICAgc291cmNlX3Bh Y2thZ2UgPSBTb3VyY2VQYWNrYWdlKHBhY2thZ2Uuc291cmNlX3BhY2thZ2UpCi0gICAgICAgIHNv dXJjZV9wYWNrYWdlc1tzb3VyY2VfcGFja2FnZS5uYW1lXSA9IHNvdXJjZV9wYWNrYWdlCi0gICAg c291cmNlX3BhY2thZ2UucGFja2FnZXMuYXBwZW5kKHBhY2thZ2UpCi0KLWxldHRlcnNfbWFwID0g ZGljdCgpCi1mb3IgaywgdiBpbiBzb3VyY2VfcGFja2FnZXMuaXRlbXMoKToKLSAgICB2LnBhY2th Z2VzLnNvcnQoa2V5PWxhbWJkYSBwOiBsb2NhbGUuc3RyeGZybShwLm5hbWUpKQotICAgIGwgPSB2 Lm5hbWVbMF0udXBwZXIoKQotICAgIGxldHRlciA9IGxldHRlcnNfbWFwLmdldChsLCBOb25lKQot ICAgIGlmIGxldHRlciBpcyBOb25lOgotICAgICAgICBsZXR0ZXIgPSBMZXR0ZXIobCkKLSAgICAg ICAgbGV0dGVyc19tYXBbbF0gPSBsZXR0ZXIKLSAgICBsZXR0ZXIucGFja2FnZXMuYXBwZW5kKHYp Ci0KLWxldHRlcnMgPSBbXQotZm9yIGsgaW4gc29ydGVkKGxldHRlcnNfbWFwLmtleXMoKSk6Ci0g ICAgbGV0dGVyID0gbGV0dGVyc19tYXBba10KLSAgICBsZXR0ZXIucGFja2FnZXMuc29ydChrZXk9 bGFtYmRhIHA6IGxvY2FsZS5zdHJ4ZnJtKHAubmFtZSkpCi0gICAgbGV0dGVycy5hcHBlbmQobGV0 dGVyKQotCi1zdGFydCgiTG9hZGluZyBwYWNrYWdlIHRvIG1vZHVsZSBtYXAiKQotcGFja2FnZV90 b19tb2R1bGUgPSBkaWN0KCkKLQotb3V0cHV0ID0gZmVkbW9kX291dHB1dChbJ2xpc3QtcnBtcycs ICctLWxpc3QtbW9kdWxlcyddKQotZm9yIGwgaW4gb3V0cHV0LnNwbGl0KCdcbicpOgotICAgIGZp ZWxkcyA9IGwuc3RyaXAoKS5zcGxpdCgpCi0gICAgaWYgbGVuKGZpZWxkcykgIT0gMjoKLSAgICAg ICAgY29udGludWUKLSAgICBwYWNrYWdlX3RvX21vZHVsZVtmaWVsZHNbMF1dID0gZmllbGRzWzFd WzE6LTFdCi1kb25lKCkKLQotIyBBZGQgcGFja2FnZSBub3RlcyB0byBwYWNrYWdlcwotZm9yIG5h bWUsIG5vdGUsIGZsYWcgaW4gcmVhZF9wYWNrYWdlX25vdGVzKCk6Ci0gICAgcGtnID0gcGFja2Fn ZXMuZ2V0KG5hbWUsIE5vbmUpCi0gICAgaWYgcGtnIGlzIE5vbmU6Ci0gICAgICAgIHdhcm4oIlBh Y2thZ2Ugbm90ZSBmb3IgbWlzc2luZyBwYWNrYWdlOiB7fSIuZm9ybWF0KG5hbWUpKQotICAgICAg ICBjb250aW51ZQotCi0gICAgaWYgZmxhZyBpcyBub3QgTm9uZToKLSAgICAgICAgcGtnLmZsYWcg PSBmbGFnCi0gICAgaWYgbm90ZSBpcyBub3QgTm9uZToKLSAgICAgICAgcGtnLl9ub3RlID0gbm90 ZQotCi0jCi0jIEdldCBzdW1tYXJ5IGluZm9ybWF0aW9uIGZvciB1bm1hdGNoZWQgZmlsZXMKLSMK LQotZGVmIGNvdW50X2xpbmVzKGZuYW1lKToKLSAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGY6Ci0g ICAgICAgIHJldHVybiBsZW4obGlzdChmKSkKLQotdW5tYXRjaGVkX2NvdW50cyA9IHsKLSAgICAn ZnJlZWRlc2t0b3BfcGxhdGZvcm0nOiBjb3VudF9saW5lcygnb3V0L2ZyZWVkZXNrdG9wLVBsYXRm b3JtLnVubWF0Y2hlZCcpLAotICAgICdnbm9tZV9wbGF0Zm9ybSc6IGNvdW50X2xpbmVzKCdvdXQv Z25vbWUtUGxhdGZvcm0udW5tYXRjaGVkJyksCi0gICAgJ2ZyZWVkZXNrdG9wX3Nkayc6IGNvdW50 X2xpbmVzKCdvdXQvZnJlZWRlc2t0b3AtU2RrLnVubWF0Y2hlZCcpLAotICAgICdnbm9tZV9zZGsn OiBjb3VudF9saW5lcygnb3V0L2dub21lLVNkay51bm1hdGNoZWQnKSwKLX0KLQotIwotIyBHZW5l cmF0ZSB0aGUgcHJvZmlsZXMKLSMKLWRlZiBnZW5lcmF0ZV9wcm9maWxlKG91dGZpbGUsIHdoaWNo KToKLSAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgJ3cnKSBhcyBmOgotICAgICAgICBmb3IgbGV0dGVy IGluIGxldHRlcnM6Ci0gICAgICAgICAgICBmb3Igc3JjIGluIGxldHRlci5wYWNrYWdlczoKLSAg ICAgICAgICAgICAgICBmb3IgcGtnIGluIHNyYy5wYWNrYWdlczoKLSAgICAgICAgICAgICAgICAg ICAgaWYgZ2V0YXR0cihwa2csIHdoaWNoKSAhPSAwOgotICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnQocGtnLm5hbWUsIGZpbGU9ZikKLQotZ2VuZXJhdGVfcHJvZmlsZSgnb3V0L3J1bnRpbWUt YmFzZS5wcm9maWxlJywgJ2ZyZWVkZXNrdG9wX3BsYXRmb3JtJykKLWdlbmVyYXRlX3Byb2ZpbGUo J291dC9zZGstYmFzZS5wcm9maWxlJywgJ2ZyZWVkZXNrdG9wX3NkaycpCi1nZW5lcmF0ZV9wcm9m aWxlKCdvdXQvcnVudGltZS5wcm9maWxlJywgJ2dub21lX3BsYXRmb3JtJykKLWdlbmVyYXRlX3By b2ZpbGUoJ291dC9zZGsucHJvZmlsZScsICdnbm9tZV9zZGsnKQotCi0jCi0jIEdlbmVyYXRlIHRo ZSByZXBvcnQKLSMKLQotZW52ID0gRW52aXJvbm1lbnQoCi0gICAgbG9hZGVyPUZpbGVTeXN0ZW1M b2FkZXIoJy4nKSwKLSAgICBhdXRvZXNjYXBlPXNlbGVjdF9hdXRvZXNjYXBlKFsnaHRtbCcsICd4 bWwnXSksCi0gICAgdHJpbV9ibG9ja3M9VHJ1ZSwKLSAgICBsc3RyaXBfYmxvY2tzPVRydWUKLSkK LQotdGVtcGxhdGUgPSBlbnYuZ2V0X3RlbXBsYXRlKCdyZXBvcnQtdGVtcGxhdGUuaHRtbCcpCi0K LXdpdGggb3BlbigncmVwb3J0Lmh0bWwnLCAndycpIGFzIGY6Ci0gICAgZi53cml0ZSh0ZW1wbGF0 ZS5yZW5kZXIobGV0dGVycz1sZXR0ZXJzLCB1bm1hdGNoZWQ9dW5tYXRjaGVkX2NvdW50cywgcGFj a2FnZV90b19tb2R1bGU9cGFja2FnZV90b19tb2R1bGUpKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2dl bmVyYXRlLXJ1bnRpbWUtcmVwb3J0LnB5IGIvdG9vbHMvZ2VuZXJhdGUtcnVudGltZS1yZXBvcnQu cHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGUzNWJiMQotLS0gL2Rldi9u dWxsCisrKyBiL3Rvb2xzL2dlbmVyYXRlLXJ1bnRpbWUtcmVwb3J0LnB5CkBAIC0wLDAgKzEsNDM4 IEBACisjIS91c3IvYmluL3B5dGhvbjMKKworZnJvbSBqaW5qYTIgaW1wb3J0IEVudmlyb25tZW50 LCBGaWxlU3lzdGVtTG9hZGVyLCBzZWxlY3RfYXV0b2VzY2FwZQoraW1wb3J0IGpzb24KK2ltcG9y dCBsb2NhbGUKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0 IHN5cworCitkZWYgc3RhcnQobXNnKToKKyAgICBwcmludCgie306IFwwMzNbOTBte30gLi4uIFww MzNbMzltIi5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSksIG1zZyksIGZpbGU9 c3lzLnN0ZGVyciwgZW5kPSIiKQorICAgIHN5cy5zdGRlcnIuZmx1c2goKQorCitkZWYgZG9uZSgp OgorICAgIHByaW50KCJcMDMzWzkwbWRvbmVcMDMzWzM5bSIsIGZpbGU9c3lzLnN0ZGVycikKKwor ZGVmIHdhcm4obXNnKToKKyAgICBwcmludCgie306IFwwMzNbMzFte31cMDMzWzM5bSIuZm9ybWF0 KG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pLCBtc2cpLCBmaWxlPXN5cy5zdGRlcnIpCisK K2RlZiBmZWRtb2Rfb3V0cHV0KGFyZ3MpOgorICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291 dHB1dChbJ2ZlZG1vZCddICsgYXJncywgZW5jb2Rpbmc9J3V0Zi04JykKKworX252cl90b19uYW1l X3JlID0gcmUuY29tcGlsZSgnXiguKiktW14tXSotW14tXSonKQorZGVmIG52cl90b19uYW1lKG52 cik6CisgICAgcmV0dXJuIF9udnJfdG9fbmFtZV9yZS5tYXRjaChudnIpLmdyb3VwKDEpCisKK2Ns YXNzIFBhY2thZ2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAg ICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5mcmVlZGVza3RvcF9wbGF0Zm9ybSA9 IDAKKyAgICAgICAgc2VsZi5mcmVlZGVza3RvcF9wbGF0Zm9ybV9maWxlcyA9IE5vbmUKKyAgICAg ICAgc2VsZi5mcmVlZGVza3RvcF9wbGF0Zm9ybV9yZXF1aXJlZF9ieSA9IE5vbmUKKyAgICAgICAg c2VsZi5nbm9tZV9wbGF0Zm9ybSA9IDAKKyAgICAgICAgc2VsZi5nbm9tZV9wbGF0Zm9ybV9maWxl cyA9IE5vbmUKKyAgICAgICAgc2VsZi5nbm9tZV9wbGF0Zm9ybV9yZXF1aXJlZF9ieSA9IE5vbmUK KyAgICAgICAgc2VsZi5mcmVlZGVza3RvcF9zZGsgPSAwCisgICAgICAgIHNlbGYuZnJlZWRlc2t0 b3Bfc2RrX2ZpbGVzID0gTm9uZQorICAgICAgICBzZWxmLmZyZWVkZXNrdG9wX3Nka19yZXF1aXJl ZF9ieSA9IE5vbmUKKyAgICAgICAgc2VsZi5nbm9tZV9zZGsgPSAwCisgICAgICAgIHNlbGYuZ25v bWVfc2RrX2ZpbGVzID0gTm9uZQorICAgICAgICBzZWxmLmdub21lX3Nka19yZXF1aXJlZF9ieSA9 IE5vbmUKKyAgICAgICAgc2VsZi5saXZlID0gMAorICAgICAgICBzZWxmLnJmMjYgPSAwCisgICAg ICAgIHNlbGYuc291cmNlX3BhY2thZ2UgPSBOb25lCisgICAgICAgIHNlbGYuZmxhZyA9IE5vbmUK KyAgICAgICAgc2VsZi5fbm90ZSA9IE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBydW50 aW1lcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnJlZWRlc2t0b3BfcGxhdGZvcm0gb3Ig c2VsZi5nbm9tZV9wbGF0Zm9ybSBvciBzZWxmLmZyZWVkZXNrdG9wX3NkayBvciBzZWxmLmdub21l X3NkaworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGtsYXNzKHNlbGYpOgorICAgICAgICBpZiBz ZWxmLmZsYWcgPT0gJ0YnOgorICAgICAgICAgICAgcmV0dXJuICJmbGFnZ2VkIgorICAgICAgICBl bGlmIHNlbGYuZmxhZyA9PSAnRj8nOgorICAgICAgICAgICAgcmV0dXJuICJxdWVzdGlvbmFibGUi CisgICAgICAgIGVsaWYgc2VsZi5mbGFnID09ICdGRCc6CisgICAgICAgICAgICByZXR1cm4gImZs YWdnZWQtZGVwIgorICAgICAgICBlbGlmIHNlbGYuZmxhZyA9PSAnVyc6CisgICAgICAgICAgICBy ZXR1cm4gIndhaXZlZCIKKyAgICAgICAgZWxpZiBzZWxmLmZsYWcgaXMgbm90IE5vbmUgYW5kIHNl bGYuZmxhZy5zdGFydHN3aXRoKCdFJyk6CisgICAgICAgICAgICByZXR1cm4gImV4dHJhIgorICAg ICAgICBlbGlmIHNlbGYuZ25vbWVfcGxhdGZvcm0gYW5kIG5vdCBzZWxmLmxpdmU6CisgICAgICAg ICAgICByZXR1cm4gInF1ZXN0aW9uYWJsZSIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtb2R1 bGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gcGFja2FnZV90b19tb2R1bGUuZ2V0KHNlbGYubmFt ZSwgIiIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbm90ZShzZWxmKToKKyAgICAgICAgaWYg c2VsZi5fbm90ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ub3RlCisgICAgICAgIGVsaWYg c2VsZi5nbm9tZV9wbGF0Zm9ybSBhbmQgbm90IHNlbGYubGl2ZToKKyAgICAgICAgICAgIHJldHVy biAicGxhdGZvcm0gcGFja2FnZSBub3Qgb24gTGl2ZSBpbWFnZSIKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIHdoeShzZWxmLCB3aGljaCk6CisgICAgICAg IGZpbGVzID0gZ2V0YXR0cihzZWxmLCB3aGljaCArICdfZmlsZXMnKQorICAgICAgICBpZiBmaWxl cyBpcyBOb25lOgorICAgICAgICAgICAgZmlsZXNfc3RyID0gJycKKyAgICAgICAgZWxpZiBsZW4o ZmlsZXMpIDw9IDM6CisgICAgICAgICAgICBmaWxlc19zdHI9ICAnRmlsZXM6ICcgKyAnICcuam9p bihmaWxlcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVzX3N0ciA9ICdGaWxlczog JyArICcgJy5qb2luKGZpbGVzWzozXSkgKyAnIC4uLicKKworICAgICAgICByZXF1aXJlZF9ieSA9 IGdldGF0dHIoc2VsZiwgd2hpY2ggKyAnX3JlcXVpcmVkX2J5JykKKyAgICAgICAgaWYgcmVxdWly ZWRfYnkgaXMgTm9uZToKKyAgICAgICAgICAgIHJlcXVpcmVkX2J5X3N0ciA9ICcnCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICByZXF1aXJlZF9ieV9zdHIgPSAnXG4nLmpvaW4oJ3t9ICh7fSkn LmZvcm1hdChyZXEsIHByb3ZpZGVyKSBmb3IgcmVxLCBwcm92aWRlciBpbiByZXF1aXJlZF9ieSkK KworICAgICAgICBpZiBmaWxlc19zdHIgYW5kIHJlcXVpcmVkX2J5X3N0cjoKKyAgICAgICAgICAg IHJldHVybiBmaWxlc19zdHIgKyAnXG4nICsgcmVxdWlyZWRfYnlfc3RyCisgICAgICAgIGVsaWYg ZmlsZXNfc3RyOgorICAgICAgICAgICAgcmV0dXJuIGZpbGVzX3N0cgorICAgICAgICBlbGlmIHJl cXVpcmVkX2J5X3N0cjoKKyAgICAgICAgICAgIHJldHVybiByZXF1aXJlZF9ieV9zdHIKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgQHByb3BlcnR5CisgICAgZGVm IGZyZWVkZXNrdG9wX3BsYXRmb3JtX3doeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2h5 KCdmcmVlZGVza3RvcF9wbGF0Zm9ybScpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnJlZWRl c2t0b3Bfc2RrX3doeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2h5KCdmcmVlZGVza3Rv cF9zZGsnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGdub21lX3BsYXRmb3JtX3doeShzZWxm KToKKyAgICAgICAgcmV0dXJuIHNlbGYud2h5KCdnbm9tZV9wbGF0Zm9ybScpCisKKyAgICBAcHJv cGVydHkKKyAgICBkZWYgZ25vbWVfc2RrX3doeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu d2h5KCdnbm9tZV9zZGsnKQorCisgICAgZGVmIGluY2x1c2lvbihzZWxmLCB3aGljaCk6CisgICAg ICAgIGxldmVsID0gZ2V0YXR0cihzZWxmLCB3aGljaCkKKyAgICAgICAgaWYgbGV2ZWwgPT0gMDoK KyAgICAgICAgICAgIHJldHVybiAnYWJzZW50JworICAgICAgICBlbGlmIGxldmVsID09IDE6Cisg ICAgICAgICAgICByZXR1cm4gJ2RlcCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcXVp cmVkX2J5ID0gZ2V0YXR0cihzZWxmLCB3aGljaCArICdfcmVxdWlyZWRfYnknLCBGYWxzZSkKKyAg ICAgICAgICAgIGlmIHJlcXVpcmVkX2J5IGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHJldHVy biAncHJlc2VudCcKKyAgICAgICAgICAgIGVsaWYgcmVxdWlyZWRfYnkgaXMgbm90IE5vbmUgYW5k IGxlbihyZXF1aXJlZF9ieSkgPiAwOgorICAgICAgICAgICAgICAgIHJldHVybiAnZmlsZXMnCisg ICAgICAgICAgICBlbGlmIHNlbGYuZmxhZyBpcyBub3QgTm9uZSBhbmQgc2VsZi5mbGFnLnN0YXJ0 c3dpdGgoJ0UnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2V4dHJhJworICAgICAgICAgICAg ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3Jvb3QnCisKKyAgICBAcHJvcGVydHkKKyAg ICBkZWYgZnJlZWRlc2t0b3BfcGxhdGZvcm1faW5jbHVzaW9uKHNlbGYpOgorICAgICAgICByZXR1 cm4gc2VsZi5pbmNsdXNpb24oJ2ZyZWVkZXNrdG9wX3BsYXRmb3JtJykKKworICAgIEBwcm9wZXJ0 eQorICAgIGRlZiBmcmVlZGVza3RvcF9zZGtfaW5jbHVzaW9uKHNlbGYpOgorICAgICAgICByZXR1 cm4gc2VsZi5pbmNsdXNpb24oJ2ZyZWVkZXNrdG9wX3NkaycpCisKKyAgICBAcHJvcGVydHkKKyAg ICBkZWYgZ25vbWVfcGxhdGZvcm1faW5jbHVzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs Zi5pbmNsdXNpb24oJ2dub21lX3BsYXRmb3JtJykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBn bm9tZV9zZGtfaW5jbHVzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbmNsdXNpb24o J2dub21lX3NkaycpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGl2ZV9pbmNsdXNpb24oc2Vs Zik6CisgICAgICAgIHJldHVybiBzZWxmLmluY2x1c2lvbignbGl2ZScpCisKKyAgICBAcHJvcGVy dHkKKyAgICBkZWYgcmYyNl9pbmNsdXNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmlu Y2x1c2lvbigncmYyNicpCisKK2NsYXNzIFNvdXJjZVBhY2thZ2Uob2JqZWN0KToKKyAgICBkZWYg X19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAg c2VsZi5wYWNrYWdlcyA9IFtdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbW9kdWxlcyhzZWxm KToKKyAgICAgICAgb2xkX21vZHVsZXMgPSBzZWxmLnBhY2thZ2VzWzBdLm1vZHVsZXMKKyAgICAg ICAga2xhc3MgPSBzZWxmLmtsYXNzCisgICAgICAgIGlmIGtsYXNzID09ICJidWlsZC1wbGF0Zm9y bSI6CisgICAgICAgICAgICBuZXdfbW9kdWxlID0gImRlc2t0b3AtcnVudGltZSIKKyAgICAgICAg ZWxpZiBrbGFzcyA9PSAiYnVpbGQtc2RrIjoKKyAgICAgICAgICAgIG5ld19tb2R1bGUgPSAiZmxh dHBhay1ydW50aW1lIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3X21vZHVsZSA9IE5v bmUKKworICAgICAgICBpZiBvbGRfbW9kdWxlcyBhbmQgbmV3X21vZHVsZToKKyAgICAgICAgICAg IHJldHVybiBvbGRfbW9kdWxlcyArICIg4oeSICIgKyBuZXdfbW9kdWxlCisgICAgICAgIGVsaWYg b2xkX21vZHVsZXM6CisgICAgICAgICAgICByZXR1cm4gb2xkX21vZHVsZXMKKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIHJldHVybiBuZXdfbW9kdWxlCisKKyAgICBAcHJvcGVydHkKKyAgICBk ZWYgc2RrX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZGtfb25seQorCisgICAgQHByb3Bl cnR5CisgICAgZGVmIGtsYXNzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhY2thZ2VzWzBdLm1v ZHVsZXMgaW4gKCIiLCAiaW5zdGFsbGVyIik6CisgICAgICAgICAgICBzZGtfb25seSA9IFRydWUK KyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYucGFja2FnZXM6CisgICAgICAgICAgICAg ICAgaWYgcGFja2FnZS5mcmVlZGVza3RvcF9wbGF0Zm9ybSBvciBwYWNrYWdlLmdub21lX3BsYXRm b3JtOgorICAgICAgICAgICAgICAgICAgICBzZGtfb25seSA9IEZhbHNlCisgICAgICAgICAgICBp ZiBzZGtfb25seToKKyAgICAgICAgICAgICAgICByZXR1cm4gImJ1aWxkLXNkayIKKyAgICAgICAg ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICJidWlsZC1wbGF0Zm9ybSIKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCitjbGFzcyBMZXR0ZXIob2JqZWN0KToK KyAgICBkZWYgX19pbml0X18oc2VsZiwgbGV0dGVyKToKKyAgICAgICAgc2VsZi5sZXR0ZXIgPSBs ZXR0ZXIKKyAgICAgICAgc2VsZi5wYWNrYWdlcyA9IFtdCisKKyMKKyMgR2V0IGluZm9ybWF0aW9u IGFib3V0IHBhY2thZ2VzCisjCisKK3BhY2thZ2VzID0gZGljdCgpCitkZWYgYWRkX3BhY2thZ2Uo bmFtZSwgd2hpY2gsIGxldmVsLCBvbmx5X2lmX2V4aXN0cz1GYWxzZSwgc291cmNlX3BhY2thZ2U9 Tm9uZSk6CisgICAgcGtnID0gcGFja2FnZXMuZ2V0KG5hbWUsIE5vbmUpCisgICAgaWYgcGtnIGlz IE5vbmU6CisgICAgICAgIGlmIG9ubHlfaWZfZXhpc3RzOgorICAgICAgICAgICAgcmV0dXJuCisg ICAgICAgIHBrZyA9IFBhY2thZ2UobmFtZSkKKyAgICAgICAgcGFja2FnZXNbbmFtZV0gPSBwa2cK KyAgICBpZiBnZXRhdHRyKHBrZywgd2hpY2gpIDwgbGV2ZWw6CisgICAgICAgIHNldGF0dHIocGtn LCB3aGljaCwgbGV2ZWwpCisgICAgaWYgc291cmNlX3BhY2thZ2UgaXMgbm90IE5vbmU6CisgICAg ICAgIHBrZy5zb3VyY2VfcGFja2FnZSA9IHNvdXJjZV9wYWNrYWdlCisKK2RlZiBhZGRfcGFja2Fn ZXMoc291cmNlLCB3aGljaCwgcmVzb2x2ZV9kZXBzPUZhbHNlLCBvbmx5X2lmX2V4aXN0cz1GYWxz ZSk6CisgICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6CisgICAgICAgIHN0YXJ0KCJBZGRp bmcgcGFja2FnZXMgZnJvbSB7fSIuZm9ybWF0KHNvdXJjZSkpCisgICAgICAgIHdpdGggb3Blbihz b3VyY2UpIGFzIGY6CisgICAgICAgICAgICBwa2dzID0gc2V0KGxpbmUuc3RyaXAoKSBmb3IgbGlu ZSBpbiBmKQorICAgIGVsc2U6CisgICAgICAgIHBrZ3MgPSBzb3VyY2UKKworICAgIGlmIHJlc29s dmVfZGVwczoKKyAgICAgICAgcmVzb2x2ZWRfcGFja2FnZXMgPSBqc29uLmxvYWRzKGZlZG1vZF9v dXRwdXQoWydyZXNvbHZlLWRlcHMnLCAnLS1qc29uJ10gKyBsaXN0KHBrZ3MpKSkKKyAgICAgICAg Zm9yIHBhY2thZ2UgaW4gcmVzb2x2ZWRfcGFja2FnZXM6CisgICAgICAgICAgICBuYW1lID0gbnZy X3RvX25hbWUocGFja2FnZVsncnBtJ10pCisgICAgICAgICAgICBzcnBtX25hbWUgPSBudnJfdG9f bmFtZShwYWNrYWdlWydzcnBtJ10pCisgICAgICAgICAgICBhZGRfcGFja2FnZShuYW1lLCB3aGlj aCwgbGV2ZWw9KDIgaWYgbmFtZSBpbiBwa2dzIGVsc2UgMSksCisgICAgICAgICAgICAgICAgICAg ICAgICBzb3VyY2VfcGFja2FnZT1zcnBtX25hbWUsIG9ubHlfaWZfZXhpc3RzPW9ubHlfaWZfZXhp c3RzKQorCisgICAgICAgIGZvciBwYWNrYWdlIGluIHJlc29sdmVkX3BhY2thZ2VzOgorICAgICAg ICAgICAgZm9yIHJlcSwgcHJvdmlkZXJzIGluIHBhY2thZ2VbJ3JlcXVpcmVzJ10uaXRlbXMoKToK KyAgICAgICAgICAgICAgICBwcm92aWRlciA9IG52cl90b19uYW1lKHByb3ZpZGVyc1swXSkKKyAg ICAgICAgICAgICAgICBwcm92aWRlcl9wYWNrYWdlID0gcGFja2FnZXMuZ2V0KHByb3ZpZGVyLCBO b25lKQorICAgICAgICAgICAgICAgIGlmIHByb3ZpZGVyX3BhY2thZ2UgaXMgTm9uZTogIyBmaWx0 ZXJlZCBvdXQgb2YgdGhlIHJlc29sdmUtZGVwcyBvdXRwdXQgLSBlLmcuLCBmZWRvcmEtcmVsZWFz ZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJlcXVpcmVk X2J5ID0gZ2V0YXR0cihwcm92aWRlcl9wYWNrYWdlLCB3aGljaCArICdfcmVxdWlyZWRfYnknKQor ICAgICAgICAgICAgICAgIGlmIHJlcXVpcmVkX2J5IGlzIE5vbmU6CisgICAgICAgICAgICAgICAg ICAgIHJlcXVpcmVkX2J5ID0gW10KKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihwcm92aWRl cl9wYWNrYWdlLCB3aGljaCArICdfcmVxdWlyZWRfYnknLCByZXF1aXJlZF9ieSkKKyAgICAgICAg ICAgICAgICByZXF1aXJlZF9ieS5hcHBlbmQoKG52cl90b19uYW1lKHBhY2thZ2VbJ3JwbSddKSwg cmVxKSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBwa2dzOgorICAgICAgICAg ICAgYWRkX3BhY2thZ2UocGFja2FnZSwgd2hpY2gsIGxldmVsPTIsIG9ubHlfaWZfZXhpc3RzPW9u bHlfaWZfZXhpc3RzKQorCisgICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6CisgICAgICAg IGRvbmUoKQorCitkZWYgYWRkX3BhY2thZ2VfZmlsZXMoZmlsZW5hbWUsIHdoaWNoKToKKyAgICB3 aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAg ICAgICBmLCBwID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgIGYgPSBmWzotMV0g IyBzdHJpcCB0cmFpbGluZyA6CisgICAgICAgICAgICBwa2cgPSBwYWNrYWdlc1twXQorICAgICAg ICAgICAgb2xkID0gZ2V0YXR0cihwa2csIHdoaWNoICsgJ19maWxlcycpCisgICAgICAgICAgICBp ZiBvbGQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb2xkLmFwcGVuZChmKQorICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHBrZywgd2hpY2ggKyAnX2ZpbGVz JywgW2ZdKQorCitkZWYgcmVhZF9wYWNrYWdlX25vdGVzKCk6CisgICAgY29tbWVudF9yZSA9IHJl LmNvbXBpbGUocidccyojLionKQorICAgIGZsYWdfcmUgPSByZS5jb21waWxlKHInW0EtWl8/XSsk JykKKyAgICBwYWNrYWdlX3JlID0gcmUuY29tcGlsZShyJ1xTKycpCisKKyAgICB3aXRoIG9wZW4o InBhY2thZ2Utbm90ZXMudHh0IikgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAg ICAgICAgIGxpbmUgPSBjb21tZW50X3JlLnN1YignJywgbGluZSkKKyAgICAgICAgICAgIGxpbmUg PSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gJyc6CisgICAgICAgICAgICAg ICAgY29udGludWUKKyAgICAgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgiOiIsIDIpCisgICAg ICAgICAgICBuYW1lID0gcGFydHNbMF0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHJlLm1h dGNoKHBhY2thZ2VfcmUsIG5hbWUpOgorICAgICAgICAgICAgICAgIHdhcm4oIkNhbid0IHBhcnNl IHBhY2thZ2Ugbm90ZToge30iLmZvcm1hdChsaW5lKSkKKyAgICAgICAgICAgICAgICBjb250aW51 ZQorICAgICAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAxOgorICAgICAgICAgICAgICAgIGZsYWcg PSBub3RlID0gTm9uZQorICAgICAgICAgICAgZWxpZiBsZW4ocGFydHMpID09IDI6CisgICAgICAg ICAgICAgICAgeCA9IHBhcnRzWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBmbGFnX3Jl Lm1hdGNoKHgpOgorICAgICAgICAgICAgICAgICAgICBmbGFnID0geAorICAgICAgICAgICAgICAg ICAgICBub3RlID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg ICAgIG5vdGUgPSB4CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSBOb25lCisgICAgICAgICAg ICBlbGlmIGxlbihwYXJ0cykgPT0gMzoKKyAgICAgICAgICAgICAgICB4ID0gcGFydHNbMV0uc3Ry aXAoKQorICAgICAgICAgICAgICAgIGlmIGZsYWdfcmUubWF0Y2goeCk6CisgICAgICAgICAgICAg ICAgICAgIGZsYWcgPSB4CisgICAgICAgICAgICAgICAgICAgIG5vdGUgPSBwYXJ0c1syXS5zdHJp cCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IE5v bmUKKyAgICAgICAgICAgICAgICAgICAgbm90ZSA9IHBhcnRzWzFdICsgJzonICsgcGFydHNbMl0K KworICAgICAgICAgICAgeWllbGQgbmFtZSwgbm90ZSwgZmxhZworCithZGRfcGFja2FnZXMoJ291 dC9mcmVlZGVza3RvcC1QbGF0Zm9ybS5wYWNrYWdlcycsICdmcmVlZGVza3RvcF9wbGF0Zm9ybScs IHJlc29sdmVfZGVwcz1UcnVlKQorYWRkX3BhY2thZ2VzKCdvdXQvZnJlZWRlc2t0b3AtU2RrLnBh Y2thZ2VzJywgJ2ZyZWVkZXNrdG9wX3NkaycsIHJlc29sdmVfZGVwcz1UcnVlKQorYWRkX3BhY2th Z2VzKCdvdXQvZ25vbWUtUGxhdGZvcm0ucGFja2FnZXMnLCAnZ25vbWVfcGxhdGZvcm0nLCByZXNv bHZlX2RlcHM9VHJ1ZSkKK2FkZF9wYWNrYWdlcygnb3V0L2dub21lLVNkay5wYWNrYWdlcycsICdn bm9tZV9zZGsnLCByZXNvbHZlX2RlcHM9VHJ1ZSkKK2FkZF9wYWNrYWdlcygnZGF0YS9mMjctbGl2 ZS5wYWNrYWdlcycsICdsaXZlJywgb25seV9pZl9leGlzdHM9VHJ1ZSkKK2FkZF9wYWNrYWdlcygn ZGF0YS9mMjYtZmxhdHBhay1ydW50aW1lLnBhY2thZ2VzJywgJ3JmMjYnLCBvbmx5X2lmX2V4aXN0 cz1UcnVlKQorCithZGRfcGFja2FnZV9maWxlcygnb3V0L2ZyZWVkZXNrdG9wLVBsYXRmb3JtLm1h dGNoZWQnLCAnZnJlZWRlc2t0b3BfcGxhdGZvcm0nKQorYWRkX3BhY2thZ2VfZmlsZXMoJ291dC9m cmVlZGVza3RvcC1TZGsubWF0Y2hlZCcsICdmcmVlZGVza3RvcF9zZGsnKQorYWRkX3BhY2thZ2Vf ZmlsZXMoJ291dC9nbm9tZS1QbGF0Zm9ybS5tYXRjaGVkJywgJ2dub21lX3BsYXRmb3JtJykKK2Fk ZF9wYWNrYWdlX2ZpbGVzKCdvdXQvZ25vbWUtU2RrLm1hdGNoZWQnLCAnZ25vbWVfc2RrJykKKwor IyBBZGQgZXh0cmEgcGFja2FnZXMKK2V4dHJhX2Jhc2UgPSBbXQorZXh0cmFfYmFzZV9zZGsgPSBb XQorZXh0cmEgPSBbXQorZXh0cmFfc2RrID0gW10KKworZm9yIG5hbWUsIG5vdGUsIGZsYWcgaW4g cmVhZF9wYWNrYWdlX25vdGVzKCk6CisgICAgaWYgZmxhZyA9PSAnRUInOgorICAgICAgICBleHRy YV9iYXNlLmFwcGVuZChuYW1lKQorICAgICAgICBleHRyYV9iYXNlX3Nkay5hcHBlbmQobmFtZSkK KyAgICAgICAgZXh0cmEuYXBwZW5kKG5hbWUpCisgICAgICAgIGV4dHJhX3Nkay5hcHBlbmQobmFt ZSkKKyAgICBlbGlmIGZsYWcgPT0gJ0VCX1NESyc6CisgICAgICAgIGV4dHJhX2Jhc2Vfc2RrLmFw cGVuZChuYW1lKQorICAgICAgICBleHRyYV9zZGsuYXBwZW5kKG5hbWUpCisgICAgZWxpZiBmbGFn ID09ICdFJzoKKyAgICAgICAgZXh0cmEuYXBwZW5kKG5hbWUpCisgICAgICAgIGV4dHJhX3Nkay5h cHBlbmQobmFtZSkKKyAgICBlbGlmIGZsYWcgPT0gJ0VfU0RLJzoKKyAgICAgICAgZXh0cmFfc2Rr LmFwcGVuZChuYW1lKQorCithZGRfcGFja2FnZXMoZXh0cmFfYmFzZSwgJ2ZyZWVkZXNrdG9wX3Bs YXRmb3JtJywgcmVzb2x2ZV9kZXBzPVRydWUpCithZGRfcGFja2FnZXMoZXh0cmFfYmFzZV9zZGss ICdmcmVlZGVza3RvcF9zZGsnLCByZXNvbHZlX2RlcHM9VHJ1ZSkKK2FkZF9wYWNrYWdlcyhleHRy YSwgJ2dub21lX3BsYXRmb3JtJywgcmVzb2x2ZV9kZXBzPVRydWUpCithZGRfcGFja2FnZXMoZXh0 cmFfc2RrLCAnZ25vbWVfc2RrJywgcmVzb2x2ZV9kZXBzPVRydWUpCisKK3NvdXJjZV9wYWNrYWdl cyA9IHt9Citmb3IgcGFja2FnZSBpbiBwYWNrYWdlcy52YWx1ZXMoKToKKyAgICBzb3VyY2VfcGFj a2FnZSA9IHNvdXJjZV9wYWNrYWdlcy5nZXQocGFja2FnZS5zb3VyY2VfcGFja2FnZSwgTm9uZSkK KyAgICBpZiBzb3VyY2VfcGFja2FnZSBpcyBOb25lOgorICAgICAgICBzb3VyY2VfcGFja2FnZSA9 IFNvdXJjZVBhY2thZ2UocGFja2FnZS5zb3VyY2VfcGFja2FnZSkKKyAgICAgICAgc291cmNlX3Bh Y2thZ2VzW3NvdXJjZV9wYWNrYWdlLm5hbWVdID0gc291cmNlX3BhY2thZ2UKKyAgICBzb3VyY2Vf cGFja2FnZS5wYWNrYWdlcy5hcHBlbmQocGFja2FnZSkKKworbGV0dGVyc19tYXAgPSBkaWN0KCkK K2ZvciBrLCB2IGluIHNvdXJjZV9wYWNrYWdlcy5pdGVtcygpOgorICAgIHYucGFja2FnZXMuc29y dChrZXk9bGFtYmRhIHA6IGxvY2FsZS5zdHJ4ZnJtKHAubmFtZSkpCisgICAgbCA9IHYubmFtZVsw XS51cHBlcigpCisgICAgbGV0dGVyID0gbGV0dGVyc19tYXAuZ2V0KGwsIE5vbmUpCisgICAgaWYg bGV0dGVyIGlzIE5vbmU6CisgICAgICAgIGxldHRlciA9IExldHRlcihsKQorICAgICAgICBsZXR0 ZXJzX21hcFtsXSA9IGxldHRlcgorICAgIGxldHRlci5wYWNrYWdlcy5hcHBlbmQodikKKworbGV0 dGVycyA9IFtdCitmb3IgayBpbiBzb3J0ZWQobGV0dGVyc19tYXAua2V5cygpKToKKyAgICBsZXR0 ZXIgPSBsZXR0ZXJzX21hcFtrXQorICAgIGxldHRlci5wYWNrYWdlcy5zb3J0KGtleT1sYW1iZGEg cDogbG9jYWxlLnN0cnhmcm0ocC5uYW1lKSkKKyAgICBsZXR0ZXJzLmFwcGVuZChsZXR0ZXIpCisK K3N0YXJ0KCJMb2FkaW5nIHBhY2thZ2UgdG8gbW9kdWxlIG1hcCIpCitwYWNrYWdlX3RvX21vZHVs ZSA9IGRpY3QoKQorCitvdXRwdXQgPSBmZWRtb2Rfb3V0cHV0KFsnbGlzdC1ycG1zJywgJy0tbGlz dC1tb2R1bGVzJ10pCitmb3IgbCBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgZmllbGRzID0g bC5zdHJpcCgpLnNwbGl0KCkKKyAgICBpZiBsZW4oZmllbGRzKSAhPSAyOgorICAgICAgICBjb250 aW51ZQorICAgIHBhY2thZ2VfdG9fbW9kdWxlW2ZpZWxkc1swXV0gPSBmaWVsZHNbMV1bMTotMV0K K2RvbmUoKQorCisjIEFkZCBwYWNrYWdlIG5vdGVzIHRvIHBhY2thZ2VzCitmb3IgbmFtZSwgbm90 ZSwgZmxhZyBpbiByZWFkX3BhY2thZ2Vfbm90ZXMoKToKKyAgICBwa2cgPSBwYWNrYWdlcy5nZXQo bmFtZSwgTm9uZSkKKyAgICBpZiBwa2cgaXMgTm9uZToKKyAgICAgICAgd2FybigiUGFja2FnZSBu b3RlIGZvciBtaXNzaW5nIHBhY2thZ2U6IHt9Ii5mb3JtYXQobmFtZSkpCisgICAgICAgIGNvbnRp bnVlCisKKyAgICBpZiBmbGFnIGlzIG5vdCBOb25lOgorICAgICAgICBwa2cuZmxhZyA9IGZsYWcK KyAgICBpZiBub3RlIGlzIG5vdCBOb25lOgorICAgICAgICBwa2cuX25vdGUgPSBub3RlCisKKyMK KyMgR2V0IHN1bW1hcnkgaW5mb3JtYXRpb24gZm9yIHVubWF0Y2hlZCBmaWxlcworIworCitkZWYg Y291bnRfbGluZXMoZm5hbWUpOgorICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZjoKKyAgICAgICAg cmV0dXJuIGxlbihsaXN0KGYpKQorCit1bm1hdGNoZWRfY291bnRzID0geworICAgICdmcmVlZGVz a3RvcF9wbGF0Zm9ybSc6IGNvdW50X2xpbmVzKCdvdXQvZnJlZWRlc2t0b3AtUGxhdGZvcm0udW5t YXRjaGVkJyksCisgICAgJ2dub21lX3BsYXRmb3JtJzogY291bnRfbGluZXMoJ291dC9nbm9tZS1Q bGF0Zm9ybS51bm1hdGNoZWQnKSwKKyAgICAnZnJlZWRlc2t0b3Bfc2RrJzogY291bnRfbGluZXMo J291dC9mcmVlZGVza3RvcC1TZGsudW5tYXRjaGVkJyksCisgICAgJ2dub21lX3Nkayc6IGNvdW50 X2xpbmVzKCdvdXQvZ25vbWUtU2RrLnVubWF0Y2hlZCcpLAorfQorCisjCisjIEdlbmVyYXRlIHRo ZSBwcm9maWxlcworIworZGVmIGdlbmVyYXRlX3Byb2ZpbGUob3V0ZmlsZSwgd2hpY2gpOgorICAg IHdpdGggb3BlbihvdXRmaWxlLCAndycpIGFzIGY6CisgICAgICAgIGZvciBsZXR0ZXIgaW4gbGV0 dGVyczoKKyAgICAgICAgICAgIGZvciBzcmMgaW4gbGV0dGVyLnBhY2thZ2VzOgorICAgICAgICAg ICAgICAgIGZvciBwa2cgaW4gc3JjLnBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICBpZiBn ZXRhdHRyKHBrZywgd2hpY2gpICE9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChw a2cubmFtZSwgZmlsZT1mKQorCitnZW5lcmF0ZV9wcm9maWxlKCdvdXQvcnVudGltZS1iYXNlLnBy b2ZpbGUnLCAnZnJlZWRlc2t0b3BfcGxhdGZvcm0nKQorZ2VuZXJhdGVfcHJvZmlsZSgnb3V0L3Nk ay1iYXNlLnByb2ZpbGUnLCAnZnJlZWRlc2t0b3Bfc2RrJykKK2dlbmVyYXRlX3Byb2ZpbGUoJ291 dC9ydW50aW1lLnByb2ZpbGUnLCAnZ25vbWVfcGxhdGZvcm0nKQorZ2VuZXJhdGVfcHJvZmlsZSgn b3V0L3Nkay5wcm9maWxlJywgJ2dub21lX3NkaycpCisKKyMKKyMgR2VuZXJhdGUgdGhlIHJlcG9y dAorIworCitlbnYgPSBFbnZpcm9ubWVudCgKKyAgICBsb2FkZXI9RmlsZVN5c3RlbUxvYWRlcign LicpLAorICAgIGF1dG9lc2NhcGU9c2VsZWN0X2F1dG9lc2NhcGUoWydodG1sJywgJ3htbCddKSwK KyAgICB0cmltX2Jsb2Nrcz1UcnVlLAorICAgIGxzdHJpcF9ibG9ja3M9VHJ1ZQorKQorCit0ZW1w bGF0ZSA9IGVudi5nZXRfdGVtcGxhdGUoJ3JlcG9ydC10ZW1wbGF0ZS5odG1sJykKKword2l0aCBv cGVuKCdyZXBvcnRzL3J1bnRpbWUuaHRtbCcsICd3JykgYXMgZjoKKyAgICBmLndyaXRlKHRlbXBs YXRlLnJlbmRlcihsZXR0ZXJzPWxldHRlcnMsIHVubWF0Y2hlZD11bm1hdGNoZWRfY291bnRzLCBw YWNrYWdlX3RvX21vZHVsZT1wYWNrYWdlX3RvX21vZHVsZSkpCgpkaWZmIC0tZ2l0IGEvdG9vbHMv cmVzb2x2ZS1maWxlcy5weSBiL3Rvb2xzL3Jlc29sdmUtZmlsZXMucHkKaW5kZXggYWE3OWMyYS4u ODBhNGZkMSAxMDA3NTUKLS0tIGEvdG9vbHMvcmVzb2x2ZS1maWxlcy5weQorKysgYi90b29scy9y ZXNvbHZlLWZpbGVzLnB5CkBAIC0xLDIyICsxLDExIEBACiAjIS91c3IvYmluL3B5dGhvbjMKIAot ZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGNtcF90b19rZXkKLWltcG9ydCBnemlwCi1pbXBvcnQgaGFz aGxpYgogaW1wb3J0IG9zCi1pbXBvcnQgcGlja2xlCiBpbXBvcnQgcmUKLWltcG9ydCBycG0KIGlt cG9ydCBzeXMKLWltcG9ydCB4bWwuZXRyZWUuRWxlbWVudFRyZWUgYXMgRVQKLWltcG9ydCB4bWwu c2F4CiAKLVhER19DQUNIRV9IT01FID0gb3MuZW52aXJvbi5nZXQoIlhER19DQUNIRV9IT01FIikg b3Igb3MucGF0aC5leHBhbmR1c2VyKCJ+Ly5jYWNoZSIpCi0KLSMgVGhpcyBuZWVkcyB0byBiZSBp biBzeW5jIHdpdGggZmVkbW9kCi1SRVBPUyA9IFsKLSAgICAiZjI4LXBhY2thZ2VzIgotXQoraW1w b3J0IHV0aWwKK2Zyb20gdXRpbCBpbXBvcnQgc3RhcnQsIGRvbmUsIHdhcm4KIAogaWdub3JlID0g c2V0KCkKIHJlbmFtZSA9IGRpY3QoKQpAQCAtMjk4LDkzICsyODcsMTUgQEAgcGxhdGZvcm1fcGFj a2FnZV9pZ25vcmVfY29tcGlsZWQgPSBbcmUuY29tcGlsZShwKSBmb3IgcCBpbiBwbGF0Zm9ybV9w YWNrYWdlX2lnbm8KICMgcmVjcmVhdGUgaXQgd2hlbiB0aGUgRE5GIG1ldGFkYXRhIGNoYW5nZXMu IFdlIGd6aXAgdGhlIHBpY2tsZSB0byBzYXZlIHNwYWNlCiAjICg3ME0gaW5zdGVhZCBvZiA3MDBN KSwgdGhpcyBzbG93cyB0aGluZ3MgZG93biBieSBhYm91dCAyIHNlY29uZHMuCiAjCi0KLWRlZiBw YWNrYWdlX2NtcChwMSwgcDIpOgotICAgIG4xLCBlMSwgdjEsIHIxLCBhMSA9IHAxCi0gICAgbjIs IGUyLCB2MiwgcjIsIGEyID0gcDIKLQotICAgIGlmIGExID09ICdpNjg2JyBhbmQgYTIgIT0gJ2k2 ODYnOgotICAgICAgICByZXR1cm4gMQotICAgIGlmIGExICE9ICdpNjg2JyBhbmQgYTIgPT0gJ2k2 ODYnOgotICAgICAgICByZXR1cm4gLTEKLQotICAgIGlmIG4xLnN0YXJ0c3dpdGgoJ2NvbXBhdC0n KSBhbmQgbm90IG4yLnN0YXJ0c3dpdGgoJ2NvbXBhdC0nKToKLSAgICAgICAgcmV0dXJuIDEKLSAg ICBlbGlmIG4yLnN0YXJ0c3dpdGgoJ2NvbXBhdC0nKSBhbmQgbm90IG4xLnN0YXJ0c3dpdGgoJ2Nv bXBhdC0nKToKLSAgICAgICAgcmV0dXJuIC0xCi0KLSAgICBpZiBuMSA8IG4yOgotICAgICAgICBy ZXR1cm4gLTEKLSAgICBlbGlmIG4xID4gbjI6Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICBpZiBl MSBpcyBOb25lOgotICAgICAgICBlMSA9ICcwJwotICAgIGlmIGUyIGlzIE5vbmU6Ci0gICAgICAg IGUyID0gJzAnCi0KLSAgICByZXR1cm4gLSBycG0ubGFiZWxDb21wYXJlKChlMSwgdjEsIHIxKSwg KGUyLCB2MiwgcjIpKQotCi1jbGFzcyBGaWxlc01hcEhhbmRsZXIoeG1sLnNheC5oYW5kbGVyLkNv bnRlbnRIYW5kbGVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXNfbWFwKToKLSAgICAg ICAgc2VsZi5maWxlc19tYXAgPSBmaWxlc19tYXAKLSAgICAgICAgc2VsZi5uYW1lID0gTm9uZQot ICAgICAgICBzZWxmLmFyY2ggPSBOb25lCi0gICAgICAgIHNlbGYuZXBvY2ggPSBOb25lCi0gICAg ICAgIHNlbGYudmVyc2lvbiA9IE5vbmUKLSAgICAgICAgc2VsZi5yZWxlYXNlID0gTm9uZQotICAg ICAgICBzZWxmLmZpbGUgPSBOb25lCi0KLSAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIG5hbWUs IGF0dHJzKToKLSAgICAgICAgaWYgbmFtZSA9PSAncGFja2FnZSc6Ci0gICAgICAgICAgICBzZWxm Lm5hbWUgPSBhdHRyc1snbmFtZSddCi0gICAgICAgICAgICBzZWxmLmFyY2ggPSBhdHRyc1snYXJj aCddCi0gICAgICAgIGVsaWYgbmFtZSA9PSAndmVyc2lvbic6Ci0gICAgICAgICAgICBpZiBzZWxm Lm5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5lcG9jaCA9IGF0dHJzWydl cG9jaCddCi0gICAgICAgICAgICAgICAgc2VsZi52ZXJzaW9uID0gYXR0cnNbJ3ZlciddCi0gICAg ICAgICAgICAgICAgc2VsZi5yZWxlYXNlID0gYXR0cnNbJ3JlbCddCi0gICAgICAgIGVsaWYgbmFt ZSA9PSAnZmlsZSc6Ci0gICAgICAgICAgICBzZWxmLmZpbGUgPSAnJwotCi0gICAgZGVmIGVuZEVs ZW1lbnQoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG5hbWUgPT0gJ3BhY2thZ2UnOgotICAgICAg ICAgICAgc2VsZi5uYW1lID0gTm9uZQotICAgICAgICBlbGlmIG5hbWUgPT0gJ2ZpbGUnOgotICAg ICAgICAgICAgcGFja2FnZSA9IChzZWxmLm5hbWUsIHNlbGYuZXBvY2gsIHNlbGYudmVyc2lvbiwg c2VsZi5yZWxlYXNlLCBzZWxmLmFyY2gpCi0gICAgICAgICAgICBvbGQgPSBzZWxmLmZpbGVzX21h cC5nZXQoc2VsZi5maWxlKQotICAgICAgICAgICAgaWYgb2xkIGlzIE5vbmUgb3IgcGFja2FnZV9j bXAocGFja2FnZSwgb2xkKSA8IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5maWxlc19tYXBbc2Vs Zi5maWxlXSA9IHBhY2thZ2UKLQotICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQotCi0gICAg ZGVmIGNoYXJhY3RlcnMoc2VsZiwgY29udGVudCk6Ci0gICAgICAgIGlmIHNlbGYuZmlsZSBpcyBu b3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZmlsZSArPSBjb250ZW50Ci0KLWRlZiBzY2FuX2Zp bGVsaXN0cyhmaWxlbGlzdHNfcGF0aCwgZmlsZXNfbWFwKToKLSAgICBoYW5kbGVyID0gRmlsZXNN YXBIYW5kbGVyKGZpbGVzX21hcCkKLSAgICB3aXRoIGd6aXAub3BlbihmaWxlbGlzdHNfcGF0aCwg J3JiJykgYXMgZjoKLSAgICAgICAgeG1sLnNheC5wYXJzZShmLCBoYW5kbGVyKQotCi0KIGRlZiBt YWtlX2ZpbGVzX21hcChyZXBvX2luZm8pOgogICAgIGZpbGVzX21hcCA9IHt9CiAKLSAgICBmb3Ig cmVwbyBpbiBSRVBPUzoKLSAgICAgICAgc3RhcnQoIlNjYW5uaW5nIGZpbGVzIGZvciB7fSIuZm9y bWF0KHJlcG8pKQotICAgICAgICByZXBvX2RpciwgcmVwb21kX2NvbnRlbnRzID0gcmVwb19pbmZv W3JlcG9dCi0gICAgICAgIHJvb3QgPSBFVC5mcm9tc3RyaW5nKHJlcG9tZF9jb250ZW50cykKLQot ICAgICAgICBucyA9IHsncmVwbyc6ICdodHRwOi8vbGludXguZHVrZS5lZHUvbWV0YWRhdGEvcmVw byd9Ci0gICAgICAgIGZpbGVsaXN0c19sb2NhdGlvbiA9IHJvb3QuZmluZCgiLi9yZXBvOmRhdGFb QHR5cGU9J2ZpbGVsaXN0cyddL3JlcG86bG9jYXRpb24iLCBucykuYXR0cmliWydocmVmJ10KLSAg ICAgICAgZmlsZWxpc3RzX3BhdGggPSBvcy5wYXRoLmpvaW4ocmVwb19kaXIsIGZpbGVsaXN0c19s b2NhdGlvbikKLSAgICAgICAgaWYgb3MucGF0aC5jb21tb25wcmVmaXgoW2ZpbGVsaXN0c19wYXRo LCByZXBvX2Rpcl0pICE9IHJlcG9fZGlyOgotICAgICAgICAgICAgZG9uZSgpCi0gICAgICAgICAg ICBlcnJvcigie306IGZpbGVsaXN0cyBkaXJlY3RvcnkgaXMgb3V0c2lkZSBvZiByZXBvc2l0b3J5 Ii5mb3JtYXQocmVwb19kaXIpKQorICAgIGRlZiBjYihwYWNrYWdlX2luZm8sIGYpOgorICAgICAg ICBvbGQgPSBmaWxlc19tYXAuZ2V0KGYpCisgICAgICAgIGlmIG9sZCBpcyBOb25lIG9yIHV0aWwu cGFja2FnZV9jbXAocGFja2FnZV9pbmZvLCBvbGQpIDwgMDoKKyAgICAgICAgICAgIGZpbGVzX21h cFtmXSA9IHBhY2thZ2VfaW5mbwogCi0gICAgICAgIHNjYW5fZmlsZWxpc3RzKGZpbGVsaXN0c19w YXRoLCBmaWxlc19tYXApCi0gICAgICAgIGRvbmUoKQorICAgIHV0aWwuZm9yZWFjaF9maWxlKHJl cG9faW5mbywgY2IpCiAKICAgICBzdGFydCgiRmluYWxpemluZyBmaWxlcyBtYXAiKQogICAgIGZv ciBrIGluIGZpbGVzX21hcDoKQEAgLTM5Myw0OSArMzA0LDggQEAgZGVmIG1ha2VfZmlsZXNfbWFw KHJlcG9faW5mbyk6CiAKICAgICByZXR1cm4gZmlsZXNfbWFwCiAKLQogZGVmIGdldF9maWxlc19t YXAoKToKLSAgICBoYXNoX3RleHQgPSAnJwotICAgIHJlcG9zX2RpciA9IG9zLnBhdGguam9pbihY REdfQ0FDSEVfSE9NRSwgImZlZG1vZC9yZXBvcyIpCi0gICAgcmVwb19pbmZvID0ge30KLSAgICBm b3IgcmVwbyBpbiBSRVBPUzoKLSAgICAgICAgcmVwb19kaXIgPSBvcy5wYXRoLmpvaW4ocmVwb3Nf ZGlyLCByZXBvLCAneDg2XzY0JykKLSAgICAgICAgcmVwb21kX3BhdGggPSBvcy5wYXRoLmpvaW4o cmVwb19kaXIsICdyZXBvZGF0YS9yZXBvbWQueG1sJykKLSAgICAgICAgdHJ5OgotICAgICAgICAg ICAgd2l0aCBvcGVuKHJlcG9tZF9wYXRoLCAncmInKSBhcyBmOgotICAgICAgICAgICAgICAgIHJl cG9tZF9jb250ZW50cyA9IGYucmVhZCgpCi0gICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJv cik6Ci0gICAgICAgICAgICBwcmludCgiQ2Fubm90IHJlYWQge30sIHRyeSAnZmVkbW9kIGZldGNo LW1ldGFkYXRhJyIuZm9ybWF0KHJlcG9tZF9wYXRoKSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAg ICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICByZXBvX2luZm9bcmVwb10gPSAocmVwb19kaXIs IHJlcG9tZF9jb250ZW50cykKLSAgICAgICAgaGFzaF90ZXh0ICs9ICd7fXx7fVxuJy5mb3JtYXQo cmVwbywgaGFzaGxpYi5zaGEyNTYocmVwb21kX2NvbnRlbnRzKS5oZXhkaWdlc3QoKSkKLQotICAg IHJlcG9faGFzaCA9IGhhc2hsaWIuc2hhMjU2KGhhc2hfdGV4dC5lbmNvZGUoIlVURi04IikpLmhl eGRpZ2VzdCgpCi0KLSAgICBmaWxlc19tYXBfcGF0aCA9IG9zLnBhdGguam9pbihYREdfQ0FDSEVf SE9NRSwgImZlZG1vZC9mbGF0cGFrLXJ1bnRpbWUtZmlsZXMtbWFwLmd6IikKLQotICAgIHRyeToK LSAgICAgICAgd2l0aCBnemlwLm9wZW4oZmlsZXNfbWFwX3BhdGgsICdyYicpIGFzIGY6Ci0gICAg ICAgICAgICBvbGRfcmVwb19oYXNoID0gZi5yZWFkKDY0KS5kZWNvZGUoJ3V0Zi04JykKLSAgICAg ICAgICAgIGlmIG9sZF9yZXBvX2hhc2ggPT0gcmVwb19oYXNoOgotICAgICAgICAgICAgICAgIHN0 YXJ0KCJSZWFkaW5nIGNhY2hlZCBmaWxlIG1hcCIpCi0gICAgICAgICAgICAgICAgZmlsZXNfbWFw ID0gcGlja2xlLmxvYWQoZikKLSAgICAgICAgICAgICAgICBkb25lKCkKLQotICAgICAgICAgICAg ICAgIHJldHVybiBmaWxlc19tYXAKLSAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6Ci0gICAg ICAgIHBhc3MKLQotICAgIGZpbGVzX21hcCA9IG1ha2VfZmlsZXNfbWFwKHJlcG9faW5mbykKLQot ICAgIHN0YXJ0KCJXcml0aW5nIGZpbGUgbWFwIHRvIGNhY2hlIikKLSAgICB3aXRoIGd6aXAub3Bl bihmaWxlc19tYXBfcGF0aCwgJ3diJykgYXMgZjoKLSAgICAgICAgZi53cml0ZShyZXBvX2hhc2gu ZW5jb2RlKCd1dGYtOCcpKQotICAgICAgICBwaWNrbGUuZHVtcChmaWxlc19tYXAsIGYpCi0gICAg ZG9uZSgpCi0KLSAgICByZXR1cm4gZmlsZXNfbWFwCisgICAgcmV0dXJuIHV0aWwuZ2V0X3JlcG9f Y2FjaGVhYmxlKCdmaWxlcy1tYXAnLCBtYWtlX2ZpbGVzX21hcCkKIAogaWYgbGVuKHN5cy5hcmd2 KSAhPSAyOgogICAgIHByaW50KCJVc2FnZTogcmVzb2x2ZS1maWxlcy5weSBJTkZJTEUiLCBmaWxl PXN5cy5zdGRlcnIpCkBAIC00NDYsMjQgKzMxNiwxMiBAQCBpZiBub3QgaW5wYXRoLmVuZHN3aXRo KCcuZmlsZXMnKToKICAgICBwcmludCgiSU5GSUxFIG11c3QgaGF2ZSAuZmlsZXMgc3VmZml4Iiwg ZmlsZT1zeXMuc3RkZXJyKQogICAgIHN5cy5leGl0KDEpCiAKK3V0aWwuc2V0X2xvZ19uYW1lKGlu cGF0aCkKKwogYmFzZV9wYXRoID0gaW5wYXRoWzotbGVuKCcuZmlsZXMnKV0KIGlzX3BsYXRmb3Jt ID0gIi1QbGF0Zm9ybSIgaW4gYmFzZV9wYXRoCiBpc19zZGsgPSAiLVNkayIgaW4gYmFzZV9wYXRo CiAKLWRlZiB3YXJuKG1zZyk6Ci0gICAgcHJpbnQoInt9OiBcMDMzWzMxbXt9XDAzM1szOW0iLmZv cm1hdChpbnBhdGgsIG1zZyksIGZpbGU9c3lzLnN0ZGVycikKLQotZGVmIGVycm9yKG1zZyk6Ci0g ICAgcHJpbnQoInt9OiBcMDMzWzMxbXt9XDAzM1szOW0iLmZvcm1hdChpbnBhdGgsIG1zZyksIGZp bGU9c3lzLnN0ZGVycikKLSAgICBzeXMuZXhpdCgxKQotCi1kZWYgc3RhcnQobXNnKToKLSAgICBw cmludCgie306IFwwMzNbOTBte30gLi4uIFwwMzNbMzltIi5mb3JtYXQoaW5wYXRoLCBtc2cpLCBm aWxlPXN5cy5zdGRlcnIsIGVuZD0iIikKLSAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLQotZGVmIGRv bmUoKToKLSAgICBwcmludCgiXDAzM1s5MG1kb25lXDAzM1szOW0iLCBmaWxlPXN5cy5zdGRlcnIp Ci0KIHN0YXJ0KCJSZWFkaW5nIGZpbGUgbGlzdCIpCiAKIHRvX3Jlc29sdmUgPSBbXQoKZGlmZiAt LWdpdCBhL3Rvb2xzL3V0aWwucHkgYi90b29scy91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjAwNjJlN2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy91dGlsLnB5 CkBAIC0wLDAgKzEsMTYxIEBACitpbXBvcnQgZ3ppcAoraW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBw aWNrbGUKK2ltcG9ydCBycG0KK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHhtbC5ldHJl ZS5FbGVtZW50VHJlZSBhcyBFVAoraW1wb3J0IHhtbC5zYXgKKworWERHX0NBQ0hFX0hPTUUgPSBv cy5lbnZpcm9uLmdldCgiWERHX0NBQ0hFX0hPTUUiKSBvciBvcy5wYXRoLmV4cGFuZHVzZXIoIn4v LmNhY2hlIikKKworIyBUaGlzIG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCBmZWRtb2QKK1JFUE9T ID0gWworICAgICJmMjgtcGFja2FnZXMiCitdCisKK19sb2dfbmFtZSA9IE5vbmUKKworZGVmIHNl dF9sb2dfbmFtZShuYW1lKToKKyAgICBnbG9iYWwgX2xvZ19uYW1lCisgICAgX2xvZ19uYW1lID0g bmFtZQorCitkZWYgd2Fybihtc2cpOgorICAgIHByaW50KCJ7fTogXDAzM1szMW17fVwwMzNbMzlt Ii5mb3JtYXQoX2xvZ19uYW1lLCBtc2cpLCBmaWxlPXN5cy5zdGRlcnIpCisKK2RlZiBlcnJvciht c2cpOgorICAgIHByaW50KCJ7fTogXDAzM1szMW17fVwwMzNbMzltIi5mb3JtYXQoX2xvZ19uYW1l LCBtc2cpLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgc3lzLmV4aXQoMSkKKworZGVmIHN0YXJ0KG1z Zyk6CisgICAgcHJpbnQoInt9OiBcMDMzWzkwbXt9IC4uLiBcMDMzWzM5bSIuZm9ybWF0KF9sb2df bmFtZSwgbXNnKSwgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIpCisgICAgc3lzLnN0ZGVyci5mbHVz aCgpCisKK2RlZiBkb25lKCk6CisgICAgcHJpbnQoIlwwMzNbOTBtZG9uZVwwMzNbMzltIiwgZmls ZT1zeXMuc3RkZXJyKQorCitkZWYgcGFja2FnZV9jbXAocDEsIHAyKToKKyAgICBuMSwgZTEsIHYx LCByMSwgYTEgPSBwMQorICAgIG4yLCBlMiwgdjIsIHIyLCBhMiA9IHAyCisKKyAgICBpZiBhMSA9 PSAnaTY4NicgYW5kIGEyICE9ICdpNjg2JzoKKyAgICAgICAgcmV0dXJuIDEKKyAgICBpZiBhMSAh PSAnaTY4NicgYW5kIGEyID09ICdpNjg2JzoKKyAgICAgICAgcmV0dXJuIC0xCisKKyAgICBpZiBu MS5zdGFydHN3aXRoKCdjb21wYXQtJykgYW5kIG5vdCBuMi5zdGFydHN3aXRoKCdjb21wYXQtJyk6 CisgICAgICAgIHJldHVybiAxCisgICAgZWxpZiBuMi5zdGFydHN3aXRoKCdjb21wYXQtJykgYW5k IG5vdCBuMS5zdGFydHN3aXRoKCdjb21wYXQtJyk6CisgICAgICAgIHJldHVybiAtMQorCisgICAg aWYgbjEgPCBuMjoKKyAgICAgICAgcmV0dXJuIC0xCisgICAgZWxpZiBuMSA+IG4yOgorICAgICAg ICByZXR1cm4gMQorCisgICAgaWYgZTEgaXMgTm9uZToKKyAgICAgICAgZTEgPSAnMCcKKyAgICBp ZiBlMiBpcyBOb25lOgorICAgICAgICBlMiA9ICcwJworCisgICAgcmV0dXJuIC0gcnBtLmxhYmVs Q29tcGFyZSgoZTEsIHYxLCByMSksIChlMiwgdjIsIHIyKSkKKworY2xhc3MgRmlsZXNNYXBIYW5k bGVyKHhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNl bGYsIGNiKToKKyAgICAgICAgc2VsZi5jYiA9IGNiCisgICAgICAgIHNlbGYucGFja2FnZV9pbmZv ID0gTm9uZQorICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuYXJjaCA9IE5v bmUKKyAgICAgICAgc2VsZi5lcG9jaCA9IE5vbmUKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gTm9u ZQorICAgICAgICBzZWxmLnJlbGVhc2UgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUK KyAgICAgICAgc2VsZi5wYWNrYWdlX2luZm8gPSBOb25lCisKKyAgICBkZWYgc3RhcnRFbGVtZW50 KHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgaWYgbmFtZSA9PSAncGFja2FnZSc6CisgICAg ICAgICAgICBzZWxmLm5hbWUgPSBhdHRyc1snbmFtZSddCisgICAgICAgICAgICBzZWxmLmFyY2gg PSBhdHRyc1snYXJjaCddCisgICAgICAgIGVsaWYgbmFtZSA9PSAndmVyc2lvbic6CisgICAgICAg ICAgICBpZiBzZWxmLm5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5lcG9j aCA9IGF0dHJzWydlcG9jaCddCisgICAgICAgICAgICAgICAgc2VsZi52ZXJzaW9uID0gYXR0cnNb J3ZlciddCisgICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlID0gYXR0cnNbJ3JlbCddCisgICAg ICAgIGVsaWYgbmFtZSA9PSAnZmlsZSc6CisgICAgICAgICAgICBzZWxmLmZpbGUgPSAnJworCisg ICAgZGVmIGVuZEVsZW1lbnQoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgPT0gJ3BhY2th Z2UnOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2luZm8gPSBOb25lCisgICAgICAgIGVsaWYg bmFtZSA9PSAnZmlsZSc6CisgICAgICAgICAgICBpZiBzZWxmLnBhY2thZ2VfaW5mbyBpcyBOb25l OgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9pbmZvID0gKHNlbGYubmFtZSwgc2VsZi5l cG9jaCwgc2VsZi52ZXJzaW9uLCBzZWxmLnJlbGVhc2UsIHNlbGYuYXJjaCkKKyAgICAgICAgICAg IHNlbGYuY2Ioc2VsZi5wYWNrYWdlX2luZm8sIHNlbGYuZmlsZSkKKyAgICAgICAgICAgIHNlbGYu ZmlsZSA9IE5vbmUKKworICAgIGRlZiBjaGFyYWN0ZXJzKHNlbGYsIGNvbnRlbnQpOgorICAgICAg ICBpZiBzZWxmLmZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmZpbGUgKz0gY29u dGVudAorCitkZWYgZm9yZWFjaF9maWxlKHJlcG9faW5mbywgY2IpOgorICAgIGZvciByZXBvIGlu IFJFUE9TOgorICAgICAgICBzdGFydCgiU2Nhbm5pbmcgZmlsZXMgZm9yIHt9Ii5mb3JtYXQocmVw bykpCisgICAgICAgIHJlcG9fZGlyLCByZXBvbWRfY29udGVudHMgPSByZXBvX2luZm9bcmVwb10K KyAgICAgICAgcm9vdCA9IEVULmZyb21zdHJpbmcocmVwb21kX2NvbnRlbnRzKQorCisgICAgICAg IG5zID0geydyZXBvJzogJ2h0dHA6Ly9saW51eC5kdWtlLmVkdS9tZXRhZGF0YS9yZXBvJ30KKyAg ICAgICAgZmlsZWxpc3RzX2xvY2F0aW9uID0gcm9vdC5maW5kKCIuL3JlcG86ZGF0YVtAdHlwZT0n ZmlsZWxpc3RzJ10vcmVwbzpsb2NhdGlvbiIsIG5zKS5hdHRyaWJbJ2hyZWYnXQorICAgICAgICBm aWxlbGlzdHNfcGF0aCA9IG9zLnBhdGguam9pbihyZXBvX2RpciwgZmlsZWxpc3RzX2xvY2F0aW9u KQorICAgICAgICBpZiBvcy5wYXRoLmNvbW1vbnByZWZpeChbZmlsZWxpc3RzX3BhdGgsIHJlcG9f ZGlyXSkgIT0gcmVwb19kaXI6CisgICAgICAgICAgICBkb25lKCkKKyAgICAgICAgICAgIGVycm9y KCJ7fTogZmlsZWxpc3RzIGRpcmVjdG9yeSBpcyBvdXRzaWRlIG9mIHJlcG9zaXRvcnkiLmZvcm1h dChyZXBvX2RpcikpCisKKyAgICAgICAgaGFuZGxlciA9IEZpbGVzTWFwSGFuZGxlcihjYikKKyAg ICAgICAgd2l0aCBnemlwLm9wZW4oZmlsZWxpc3RzX3BhdGgsICdyYicpIGFzIGY6CisgICAgICAg ICAgICB4bWwuc2F4LnBhcnNlKGYsIGhhbmRsZXIpCisKKyAgICAgICAgZG9uZSgpCisKK2RlZiBn ZXRfcmVwb19jYWNoZWFibGUobmFtZSwgZ2VuZXJhdGUpOgorICAgIGhhc2hfdGV4dCA9ICcnCisg ICAgcmVwb3NfZGlyID0gb3MucGF0aC5qb2luKFhER19DQUNIRV9IT01FLCAiZmVkbW9kL3JlcG9z IikKKyAgICByZXBvX2luZm8gPSB7fQorICAgIGZvciByZXBvIGluIFJFUE9TOgorICAgICAgICBy ZXBvX2RpciA9IG9zLnBhdGguam9pbihyZXBvc19kaXIsIHJlcG8sICd4ODZfNjQnKQorICAgICAg ICByZXBvbWRfcGF0aCA9IG9zLnBhdGguam9pbihyZXBvX2RpciwgJ3JlcG9kYXRhL3JlcG9tZC54 bWwnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ocmVwb21kX3BhdGgsICdy YicpIGFzIGY6CisgICAgICAgICAgICAgICAgcmVwb21kX2NvbnRlbnRzID0gZi5yZWFkKCkKKyAg ICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIHByaW50KCJDYW5u b3QgcmVhZCB7fSwgdHJ5ICdmZWRtb2QgZmV0Y2gtbWV0YWRhdGEnIi5mb3JtYXQocmVwb21kX3Bh dGgpLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAg IHJlcG9faW5mb1tyZXBvXSA9IChyZXBvX2RpciwgcmVwb21kX2NvbnRlbnRzKQorICAgICAgICBo YXNoX3RleHQgKz0gJ3t9fHt9XG4nLmZvcm1hdChyZXBvLCBoYXNobGliLnNoYTI1NihyZXBvbWRf Y29udGVudHMpLmhleGRpZ2VzdCgpKQorCisgICAgcmVwb19oYXNoID0gaGFzaGxpYi5zaGEyNTYo aGFzaF90ZXh0LmVuY29kZSgiVVRGLTgiKSkuaGV4ZGlnZXN0KCkKKworICAgIGNhY2hlX3BhdGgg PSBvcy5wYXRoLmpvaW4oJ291dCcsIG5hbWUgKyAiLmd6IikKKworICAgIHRyeToKKyAgICAgICAg d2l0aCBnemlwLm9wZW4oY2FjaGVfcGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIG9sZF9y ZXBvX2hhc2ggPSBmLnJlYWQoNjQpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgaWYgb2xk X3JlcG9faGFzaCA9PSByZXBvX2hhc2g6CisgICAgICAgICAgICAgICAgc3RhcnQoIlJlYWRpbmcg IiArIG5hbWUpCisgICAgICAgICAgICAgICAgZGF0YSA9IHBpY2tsZS5sb2FkKGYpCisgICAgICAg ICAgICAgICAgZG9uZSgpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgIGV4Y2Vw dCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgZGF0YSA9IGdlbmVyYXRl KHJlcG9faW5mbykKKworICAgIHN0YXJ0KCJXcml0aW5nICIgKyBuYW1lKQorICAgIHdpdGggZ3pp cC5vcGVuKGNhY2hlX3BhdGgsICd3YicpIGFzIGY6CisgICAgICAgIGYud3JpdGUocmVwb19oYXNo LmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgcGlja2xlLmR1bXAoZGF0YSwgZikKKyAgICBkb25l KCkKKworICAgIHJldHVybiBkYXRhCisK