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: Germano Massullo (Thetra) To: git-commits@fedoraproject.org Subject: [rpms/darktable] f45: fixed lua-5.5 patches Date: Tue, 01 Sep 2026 14:35:02 GMT Message-ID: <178827330272.1.168153048795647411.rpms-darktable-a7914949dd2e@fedoraproject.org> List-ID: X-Git-Repo: rpms/darktable X-Git-Branch: f45 X-Git-Rev: a7914949dd2ec041baaead2cf78b163b1056d938 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZGFya3RhYmxlCkJy YW5jaCA6IGY0NQpDb21taXQgOiBhNzkxNDk0OWRkMmVjMDQxYmFhZWFkMmNmNzhiMTYzYjEwNTZk OTM4CkF1dGhvciA6IEdlcm1hbm8gTWFzc3VsbG8gKFRoZXRyYSkgPGdlcm1hbm8ubWFzc3VsbG9A dGhldHJhLmV1PgpEYXRlICAgOiAyMDI2LTA5LTAxVDE2OjMxOjA4KzAyOjAwClN0YXRzICA6ICsx ODIvLTMwNzAgaW4gNCBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qu b3JnL3JwbXMvZGFya3RhYmxlL2MvYTc5MTQ5NDlkZDJlYzA0MWJhYWVhZDJjZjc4YjE2M2IxMDU2 ZDkzOD9icmFuY2g9ZjQ1CgpMb2c6CmZpeGVkIGx1YS01LjUgcGF0Y2hlcwoKLS0tCmRpZmYgLS1n aXQgYS9kYXJrdGFibGUtNS42LjEtbHVhLTUuNS1zY3JpcHRzLnBhdGNoIGIvZGFya3RhYmxlLTUu Ni4xLWx1YS01LjUtc2NyaXB0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4xMjUxNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZGFya3RhYmxlLTUuNi4xLWx1YS01LjUt c2NyaXB0cy5wYXRjaApAQCAtMCwwICsxLDE1MiBAQAorZGlmZiAtLWdpdCBhL3NyYy9leHRlcm5h bC9sdWEtc2NyaXB0cy9jb250cmliL0hEUk1lcmdlLmx1YSBiL3NyYy9leHRlcm5hbC9sdWEtc2Ny aXB0cy9jb250cmliL0hEUk1lcmdlLmx1YQoraW5kZXggOWQ3YTk1MS4uMThlMDQ5OSAxMDA2NDQK Ky0tLSBhL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL0hEUk1lcmdlLmx1YQorKysr IGIvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvSERSTWVyZ2UubHVhCitAQCAtMjc3 LDkgKzI3Nyw5IEBAIGxvY2FsIGZ1bmN0aW9uIG1haW4oKQorICAgICBsb2NhbCBzZXRfdGFnID0g R1VJLlRhcmdldC5hZGRfdGFncy50ZXh0CisgICAgIGlmIHNldF90YWcgfj0gbmlsIHRoZW4gLS0g YWRkIGFkZGl0aW9uYWwgdXNlci1zcGVjaWZpZWQgdGFncworICAgICAgIGZvciB0YWcgaW4gc3Ry aW5nLmdtYXRjaChzZXRfdGFnLCAnW14sXSsnKSBkbworLSAgICAgICAgdGFnID0gQ2xlYW5TcGFj ZXModGFnKQorLSAgICAgICAgdGFnID0gZHQudGFncy5jcmVhdGUodGFnKQorLSAgICAgICAgZHQu dGFncy5hdHRhY2godGFnLCBpbXBvcnRlZCkgCisrICAgICAgICBsb2NhbCBjbGVhbmVkX3RhZyA9 IENsZWFuU3BhY2VzKHRhZykKKysgICAgICAgIGNsZWFuZWRfdGFnID0gZHQudGFncy5jcmVhdGUo Y2xlYW5lZF90YWcpCisrICAgICAgICBkdC50YWdzLmF0dGFjaChjbGVhbmVkX3RhZywgaW1wb3J0 ZWQpCisgICAgICAgZW5kCisgICAgIGVuZAorICAgICBkdC5wcmludChfKCdIRFJNZXJnZSBjb21w bGV0ZWQgc3VjY2Vzc2Z1bGx5JykpCitkaWZmIC0tZ2l0IGEvc3JjL2V4dGVybmFsL2x1YS1zY3Jp cHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQubHVhIGIvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRz L2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQubHVhCitpbmRleCA5OTM3NTBmLi41NWEwYzMwIDEwMDY0 NAorLS0tIGEvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQu bHVhCisrKysgYi9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9lbmZ1c2VBZHZhbmNl ZC5sdWEKK0BAIC01MjcsOSArNTI3LDkgQEAgbG9jYWwgZnVuY3Rpb24gbWFpbihzdG9yYWdlLCBp bWFnZV90YWJsZSwgZXh0cmFfZGF0YSkKKyAgICAgICAgICAgICBsb2NhbCBzZXRfdGFnID0gR1VJ LlRhcmdldC5hZGRfdGFncy50ZXh0CisgICAgICAgICAgICAgaWYgc2V0X3RhZyB+PSBuaWwgdGhl biAtLWFkZCBhZGRpdGlvbmFsIHVzZXItc3BlY2lmaWVkIHRhZ3MKKyAgICAgICAgICAgICAgICAg Zm9yIHRhZyBpbiBzdHJpbmcuZ21hdGNoKHNldF90YWcsICdbXixdKycpIGRvCistICAgICAgICAg ICAgICAgICAgICB0YWcgPSBDbGVhblNwYWNlcyh0YWcpCistICAgICAgICAgICAgICAgICAgICB0 YWcgPSBkdC50YWdzLmNyZWF0ZSh0YWcpCistICAgICAgICAgICAgICAgICAgICBkdC50YWdzLmF0 dGFjaCh0YWcsIGltcG9ydGVkKSAKKysgICAgICAgICAgICAgICAgICAgIGxvY2FsIGNsZWFuZWRf dGFnID0gQ2xlYW5TcGFjZXModGFnKQorKyAgICAgICAgICAgICAgICAgICAgY2xlYW5lZF90YWcg PSBkdC50YWdzLmNyZWF0ZShjbGVhbmVkX3RhZykKKysgICAgICAgICAgICAgICAgICAgIGR0LnRh Z3MuYXR0YWNoKGNsZWFuZWRfdGFnLCBpbXBvcnRlZCkKKyAgICAgICAgICAgICAgICAgZW5kCisg ICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKK2RpZmYgLS1naXQgYS9zcmMvZXh0ZXJuYWwv bHVhLXNjcmlwdHMvY29udHJpYi9mYWNlX3JlY29nbml0aW9uLmx1YSBiL3NyYy9leHRlcm5hbC9s dWEtc2NyaXB0cy9jb250cmliL2ZhY2VfcmVjb2duaXRpb24ubHVhCitpbmRleCAwYzYwYTVjLi45 MTQwMDJkIDEwMDY0NAorLS0tIGEvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZmFj ZV9yZWNvZ25pdGlvbi5sdWEKKysrKyBiL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmli L2ZhY2VfcmVjb2duaXRpb24ubHVhCitAQCAtMzExLDI1ICszMTEsMjYgQEAgbG9jYWwgZnVuY3Rp b24gZmFjZV9yZWNvZ25pdGlvbiAoKQorICAgICAgICAgICAgIGlmIGlnbm9yZUJ5VGFnIChpbWcs IGlnbm9yZVRhZ3MpIHRoZW4KKyAgICAgICAgICAgICAgIGR0LnByaW50X2xvZygiRmFjZSByZWNv Z25pdGlvbjogSWdub3JpbmcgaW1hZ2Ugd2l0aCBJRCAiIC4uIGltZy5pZCkKKyAgICAgICAgICAg ICBlbHNlCisrICAgICAgICAgICAgICBsb2NhbCB0YWdfbmFtZSA9IHQKKyAgICAgICAgICAgICAg IC0tIENoZWNrIG9mIHVucmVjb2duaXplZCB1bmtub3duX3BlcnNvbgorLSAgICAgICAgICAgICAg aWYgdCA9PSAidW5rbm93bl9wZXJzb24iIHRoZW4KKy0gICAgICAgICAgICAgICAgdCA9IHVua25v d25UYWcKKysgICAgICAgICAgICAgIGlmIHRhZ19uYW1lID09ICJ1bmtub3duX3BlcnNvbiIgdGhl bgorKyAgICAgICAgICAgICAgICB0YWdfbmFtZSA9IHVua25vd25UYWcKKyAgICAgICAgICAgICAg IGVuZAorICAgICAgICAgICAgICAgLS0gQ2hlY2sgb2YgdW5yZWNvZ25pemVkIG5vX3BlcnNvbnNf Zm91bmQKKy0gICAgICAgICAgICAgIGlmIHQgPT0gIm5vX3BlcnNvbnNfZm91bmQiIHRoZW4KKy0g ICAgICAgICAgICAgICAgdCA9IG5vbnBlcnNvbnNmb3VuZFRhZworKyAgICAgICAgICAgICAgaWYg dGFnX25hbWUgPT0gIm5vX3BlcnNvbnNfZm91bmQiIHRoZW4KKysgICAgICAgICAgICAgICAgdGFn X25hbWUgPSBub25wZXJzb25zZm91bmRUYWcKKyAgICAgICAgICAgICAgIGVuZAorLSAgICAgICAg ICAgICAgaWYgdCB+PSAiIiBhbmQgdCB+PSBuaWwgdGhlbgorLSAgICAgICAgICAgICAgICBpZiBj YXRlZ29yeVRhZ1N0cmluZyB+PSAiIiBhbmQgdCB+PSBub25wZXJzb25zZm91bmRUYWcgdGhlbgor LSAgICAgICAgICAgICAgICAgIHQgPSBjYXRlZ29yeVRhZ1N0cmluZyAuLiAifCIgLi4gdAorKyAg ICAgICAgICAgICAgaWYgdGFnX25hbWUgfj0gIiIgYW5kIHRhZ19uYW1lIH49IG5pbCB0aGVuCisr ICAgICAgICAgICAgICAgIGlmIGNhdGVnb3J5VGFnU3RyaW5nIH49ICIiIGFuZCB0YWdfbmFtZSB+ PSBub25wZXJzb25zZm91bmRUYWcgdGhlbgorKyAgICAgICAgICAgICAgICAgIHRhZ19uYW1lID0g Y2F0ZWdvcnlUYWdTdHJpbmcgLi4gInwiIC4uIHRhZ19uYW1lCisgICAgICAgICAgICAgICAgIGVu ZCAgICAgICAgICAgICAgICAgIAorLSAgICAgICAgICAgICAgICBkdC5wcmludF9sb2cgKCJJbWdJ ZDoiIC4uIGltZy5pZCAuLiAiIFRhZzoiLi4gdCkKKysgICAgICAgICAgICAgICAgZHQucHJpbnRf bG9nICgiSW1nSWQ6IiAuLiBpbWcuaWQgLi4gIiBUYWc6Ii4uIHRhZ19uYW1lKQorICAgICAgICAg ICAgICAgICAtLSBDcmVhdGUgdGFnIGlmIGl0IGRvZXMgbm90IGV4aXN0CistICAgICAgICAgICAg ICAgIGlmIHRhZ3NfbGlzdFt0XSA9PSBuaWwgdGhlbgorLSAgICAgICAgICAgICAgICAgIHRhZyA9 IGR0LnRhZ3MuY3JlYXRlICh0KQorLSAgICAgICAgICAgICAgICAgIHRhZ3NfbGlzdFt0XSA9IHRh ZworKyAgICAgICAgICAgICAgICBpZiB0YWdzX2xpc3RbdGFnX25hbWVdID09IG5pbCB0aGVuCisr ICAgICAgICAgICAgICAgICAgdGFnID0gZHQudGFncy5jcmVhdGUgKHRhZ19uYW1lKQorKyAgICAg ICAgICAgICAgICAgIHRhZ3NfbGlzdFt0YWdfbmFtZV0gPSB0YWcKKyAgICAgICAgICAgICAgICAg ZWxzZQorLSAgICAgICAgICAgICAgICAgIHRhZyA9IHRhZ3NfbGlzdFt0XQorKyAgICAgICAgICAg ICAgICAgIHRhZyA9IHRhZ3NfbGlzdFt0YWdfbmFtZV0KKyAgICAgICAgICAgICAgICAgZW5kCisg ICAgICAgICAgICAgICAgIGltZzphdHRhY2hfdGFnICh0YWcpCisgICAgICAgICAgICAgICBlbmQK K2RpZmYgLS1naXQgYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9naW1wLmx1YSBi L3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2dpbXAubHVhCitpbmRleCA5MmM2ZDBj Li5hY2M3MzgxIDEwMDY0NAorLS0tIGEvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIv Z2ltcC5sdWEKKysrKyBiL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2dpbXAubHVh CitAQCAtMTQyLDggKzE0Miw4IEBAIGxvY2FsIGZ1bmN0aW9uIGdpbXBfZWRpdChzdG9yYWdlLCBp bWFnZV90YWJsZSwgZXh0cmFfZGF0YSkgLS1maW5hbGl6ZQorICAgaW1nX2xpc3QgPSAiIgorIAor ICAgZm9yIF8sZXhwX2ltZyBpbiBwYWlycyhpbWFnZV90YWJsZSkgZG8KKy0gICAgZXhwX2ltZyA9 IGRmLnNhbml0aXplX2ZpbGVuYW1lKGV4cF9pbWcpCistICAgIGltZ19saXN0ID0gaW1nX2xpc3Qg Li5leHBfaW1nLi4gIiAiCisrICAgIGxvY2FsIHNhbml0aXplZCA9IGRmLnNhbml0aXplX2ZpbGVu YW1lKGV4cF9pbWcpCisrICAgIGltZ19saXN0ID0gaW1nX2xpc3QgLi5zYW5pdGl6ZWQuLiAiICIK KyAgIGVuZAorIAorICAgZHQucHJpbnQoXygibGF1bmNoaW5nIEdJTVAuLi4iKSkKK2RpZmYgLS1n aXQgYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9pbWFnZV9zdGFjay5sdWEgYi9z cmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9pbWFnZV9zdGFjay5sdWEKK2luZGV4IDY2 MWIyOGQuLmE2ZDE5NzggMTAwNjQ0CistLS0gYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29u dHJpYi9pbWFnZV9zdGFjay5sdWEKKysrKyBiL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250 cmliL2ltYWdlX3N0YWNrLmx1YQorQEAgLTMyMyw4ICszMjMsOCBAQCBsb2NhbCBmdW5jdGlvbiBj bGVhbnVwKGltZ19saXN0KQorICAgZHQucHJpbnRfbG9nKCJpbWFnZSBsaXN0IGlzICIgLi4gaW1n X2xpc3QpCisgICBmaWxlcyA9IGR1LnNwbGl0KGltZ19saXN0LCAiICIpCisgICBmb3IgXyxmIGlu IGlwYWlycyhmaWxlcykgZG8KKy0gICAgZiA9IHN0cmluZy5nc3ViKGYsICdbXCdcIl0nLCAiIikK Ky0gICAgb3MucmVtb3ZlKGYpCisrICAgIGxvY2FsIGNsZWFuZWQgPSBzdHJpbmcuZ3N1YihmLCAn W1wnXCJdJywgIiIpCisrICAgIG9zLnJlbW92ZShjbGVhbmVkKQorICAgZW5kCisgZW5kCisgCitk aWZmIC0tZ2l0IGEvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL2dldF9saWJfbWFucGFn ZXMubHVhIGIvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL2dldF9saWJfbWFucGFnZXMu bHVhCitpbmRleCAwZTY0MTEwLi5kZDViNmFjIDEwMDY0NAorLS0tIGEvc3JjL2V4dGVybmFsL2x1 YS1zY3JpcHRzL3Rvb2xzL2dldF9saWJfbWFucGFnZXMubHVhCisrKysgYi9zcmMvZXh0ZXJuYWwv bHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYl9tYW5wYWdlcy5sdWEKK0BAIC02Myw4ICs2Myw4IEBA IGxvY2FsIG91dHB1dCA9IGlvLnBvcGVuKCJjZCAiLi5kdC5jb25maWd1cmF0aW9uLmNvbmZpZ19k aXIuLiIvbHVhL2xpYiA7ZmluZCAuIC1uCisgLS0gbG9vcCB0aHJvdWdoIHRoZSBsaWJyYXJpZXMK KyAKKyBmb3IgbGluZSBpbiBvdXRwdXQ6bGluZXMoKSBkbworLSAgbGluZSA9IHN0cmluZy5nc3Vi KGxpbmUsICIvIiwgIi4iKQorLSAgbG9jYWwgbGliX25hbWUgPSBsaW5lOnN1YigzLC01KQorKyAg bG9jYWwgY2xlYW5lZF9saW5lID0gc3RyaW5nLmdzdWIobGluZSwgIi8iLCAiLiIpCisrICBsb2Nh bCBsaWJfbmFtZSA9IGNsZWFuZWRfbGluZTpzdWIoMywtNSkKKyAgIGlmIGxpYl9uYW1lOmxlbigp ID4gMiB0aGVuCisgICAgIGxpYl9uYW1lID0gImxpYi8iIC4uIGxpYl9uYW1lCisgICAgIGxvY2Fs IGxpYiA9IHJlcXVpcmUobGliX25hbWUpCitkaWZmIC0tZ2l0IGEvc3JjL2V4dGVybmFsL2x1YS1z Y3JpcHRzL3Rvb2xzL2dldF9saWJkb2MubHVhIGIvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rv b2xzL2dldF9saWJkb2MubHVhCitpbmRleCAyYzQ0NThkLi5mZmJjMzc5IDEwMDY0NAorLS0tIGEv c3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL2dldF9saWJkb2MubHVhCisrKysgYi9zcmMv ZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYmRvYy5sdWEKK0BAIC00MCw4ICs0MCw4 IEBAIGxvY2FsIG91dHB1dCA9IGlvLnBvcGVuKCJjZCAiLi5kdC5jb25maWd1cmF0aW9uLmNvbmZp Z19kaXIuLiIvbHVhL2xpYiA7ZmluZCAuIC1uCisgLS0gbG9vcCB0aHJvdWdoIHRoZSBsaWJyYXJp ZXMKKyAKKyBmb3IgbGluZSBpbiBvdXRwdXQ6bGluZXMoKSBkbworLSAgbGluZSA9IHN0cmluZy5n c3ViKGxpbmUsICIvIiwgIi4iKQorLSAgbG9jYWwgbGliX25hbWUgPSBsaW5lOnN1YigzLC01KQor KyAgbG9jYWwgY2xlYW5lZF9saW5lID0gc3RyaW5nLmdzdWIobGluZSwgIi8iLCAiLiIpCisrICBs b2NhbCBsaWJfbmFtZSA9IGNsZWFuZWRfbGluZTpzdWIoMywtNSkKKyAgIGlmIGxpYl9uYW1lOmxl bigpID4gMiB0aGVuCisgICAgIGxpYl9uYW1lID0gImxpYi8iIC4uIGxpYl9uYW1lCisgICAgIGxv Y2FsIGxpYiA9IHJlcXVpcmUobGliX25hbWUpCitkaWZmIC0tZ2l0IGEvc3JjL2V4dGVybmFsL2x1 YS1zY3JpcHRzL3Rvb2xzL3NjcmlwdF9tYW5hZ2VyLmx1YSBiL3NyYy9leHRlcm5hbC9sdWEtc2Ny aXB0cy90b29scy9zY3JpcHRfbWFuYWdlci5sdWEKK2luZGV4IDAzOGE2NzkuLjZkNWI5ZTEgMTAw NjQ0CistLS0gYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvc2NyaXB0X21hbmFnZXIu bHVhCisrKysgYi9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvc2NyaXB0X21hbmFnZXIu bHVhCitAQCAtOTU2LDcgKzk1Niw5IEBAIGxvY2FsIGZ1bmN0aW9uIGluc3RhbGxfc2NyaXB0cygp CisgICAgICAgICAgIHNtLndpZGdldHMuZm9sZGVyX3NlbGVjdG9yLnNlbGVjdGVkID0gaQorICAg ICAgICAgICBicmVhaworICAgICAgICAgZW5kCistICAgICAgICBpID0gaSArIDEKKysgICAgICAg IC0tIEx1YSA1LjU6IGZvciBsb29wIGNvbnRyb2wgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuIFRo aXMgaW5jcmVtZW50CisrICAgICAgICAtLSB3YXMgYWx3YXlzIGEgbm8tb3Agc2luY2UgbnVtZXJp YyBmb3IgbG9vcHMgdXNlIGFuIGludGVybmFsIGNvdW50ZXIuCisrICAgICAgICAtLSBpID0gaSAr IDEKKyAgICAgICBlbmQKKyAKKyAgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImNsZWFyaW5nIHRl eHQgZmllbGRzIikKCmRpZmYgLS1naXQgYS9kYXJrdGFibGUtNS42LjEtbHVhLTUuNS5wYXRjaCBi L2Rhcmt0YWJsZS01LjYuMS1sdWEtNS41LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjgxNTgzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJrdGFibGUtNS42LjEtbHVh LTUuNS5wYXRjaApAQCAtMCwwICsxLDI1IEBACitkaWZmIC0tZ2l0IGEvY21ha2UvbW9kdWxlcy9G aW5kTHVhNTQuY21ha2UgYi9jbWFrZS9tb2R1bGVzL0ZpbmRMdWE1NC5jbWFrZQoraW5kZXggZjQz MTc3ZC4uZGZiNzU2YiAxMDA2NDQKKy0tLSBhL2NtYWtlL21vZHVsZXMvRmluZEx1YTU0LmNtYWtl CisrKysgYi9jbWFrZS9tb2R1bGVzL0ZpbmRMdWE1NC5jbWFrZQorQEAgLTEsOSArMSw5IEBACist U0VUKEx1YV9WRVJTSU9OX1RPT19ISUdIIDUuNSkKKytTRVQoTHVhX1ZFUlNJT05fVE9PX0hJR0gg NS42KQorIAorIGluY2x1ZGUoUHJlYnVpbHQpCisgaW5jbHVkZShMaWJGaW5kTWFjcm9zKQorIAor LWxpYmZpbmRfcGtnX3NlYXJjaF9tb2R1bGUoTHVhNTQgbHVhNTQgbHVhNS40IGx1YS01LjQgbHVh KQorK2xpYmZpbmRfcGtnX3NlYXJjaF9tb2R1bGUoTHVhNTQgbHVhNTUgbHVhNS41IGx1YS01LjUg bHVhNTQgbHVhNS40IGx1YS01LjQgbHVhKQorIAorIGlmKEx1YTU0X0ZJTkRfVkVSU0lPTikKKyAg IGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEwLjApCitAQCAtMzYsNyArMzYsNyBA QCBpZihMdWE1NF9GSU5EX1ZFUlNJT04pCisgZW5kaWYoTHVhNTRfRklORF9WRVJTSU9OKQorIAor IGlmKEx1YTU0X0ZPVU5EKQorLSAgc2V0KEx1YTU0IE9OIENBQ0hFIEJPT0wgIkJ1aWxkIHdpdGgg bHVhNS40IHN1cHBvcnQuIikKKysgIHNldChMdWE1NCBPTiBDQUNIRSBCT09MICJCdWlsZCB3aXRo IGx1YTUuNCBvciBsdWE1LjUgc3VwcG9ydC4iKQorICAgaWYoQVBQTEUpCisgICAgIGZvcmVhY2go aSAke0x1YTU0X0xJQlJBUklFU30pCisgICAgICAgZmluZF9saWJyYXJ5KF9sdWE1NF9MSUJSQVJZ IE5BTUVTICR7aX0gSElOVFMgJHtMdWE1NF9MSUJSQVJZX0RJUlN9KQoKZGlmZiAtLWdpdCBhL2Rh cmt0YWJsZS5zcGVjIGIvZGFya3RhYmxlLnNwZWMKaW5kZXggNzhiNDZhZS4uMWMzMTU5ZiAxMDA2 NDQKLS0tIGEvZGFya3RhYmxlLnNwZWMKKysrIGIvZGFya3RhYmxlLnNwZWMKQEAgLTE4LDggKzE4 LDEyIEBAIFNvdXJjZTA6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJrdGFibGUtb3JnL2Rhcmt0YWJs ZS9yZWxlYXNlcy9kb3dubG9hZC9yZWxlYXNlLSV7CiAjU291cmNlMTogaHR0cHM6Ly9naXRodWIu Y29tL2Rhcmt0YWJsZS1vcmcvZGFya3RhYmxlL3JlbGVhc2VzL2Rvd25sb2FkL3JlbGVhc2UtJSV7 dmVyc2lvbn0vJSV7bmFtZX0tJSV7dmVyc2lvbn0udGFyLnh6LmFzYwogI1NvdXJjZTI6IGh0dHBz Oi8va2V5c2VydmVyLnVidW50dS5jb20vcGtzL2xvb2t1cD9vcD1nZXQmc2VhcmNoPTB4ZjEwZjk2 ODY2NTJiMGU5NDlmY2Q5NGMzMThkY2ExMjNmOTQ5YmQzYgogCisKKyMgTHVhIDUuNSBidWlsZCBz dXBwb3J0CitQYXRjaDA6IGRhcmt0YWJsZS01LjYuMS1sdWEtNS41LnBhdGNoCisKICMgaHR0cHM6 Ly9naXRodWIuY29tL2Rhcmt0YWJsZS1vcmcvbHVhLXNjcmlwdHMvcHVsbC82NzgKLVBhdGNoMDog bHVhLnBhdGNoCitQYXRjaDE6IGRhcmt0YWJsZS01LjYuMS1sdWEtNS41LXNjcmlwdHMucGF0Y2gK IAogQnVpbGRSZXF1aXJlczogY2Fpcm8tZGV2ZWwKICMgY2xhbmcgaXMgb3B0aW9uYWwgKE9wZW5D TCBrZXJuZWwgYnVpbGQgdGVzdCkKCmRpZmYgLS1naXQgYS9sdWEucGF0Y2ggYi9sdWEucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0Y2QzMjMuLjAwMDAwMDAKLS0tIGEvbHVh LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzA2OSArMCwwIEBACi1kaWZmIC11ck5yIGRhcmt0 YWJsZS01LjYuMC1vcmlnL2NtYWtlL21vZHVsZXMvRmluZEx1YTU1LmNtYWtlIGRhcmt0YWJsZS01 LjYuMC9jbWFrZS9tb2R1bGVzL0ZpbmRMdWE1NS5jbWFrZQotLS0tIGRhcmt0YWJsZS01LjYuMC1v cmlnL2NtYWtlL21vZHVsZXMvRmluZEx1YTU1LmNtYWtlCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCi0rKysgZGFya3RhYmxlLTUuNi4wL2NtYWtlL21vZHVsZXMvRmluZEx1YTU1 LmNtYWtlCTIwMjYtMDktMDEgMDk6Mzk6NTQuOTkxMTM0NDc4ICswMjAwCi1AQCAtMCwwICsxLDQ5 IEBACi0rU0VUKEx1YV9WRVJTSU9OX1RPT19ISUdIIDUuNikKLSsKLStpbmNsdWRlKFByZWJ1aWx0 KQotK2luY2x1ZGUoTGliRmluZE1hY3JvcykKLSsKLStsaWJmaW5kX3BrZ19zZWFyY2hfbW9kdWxl KEx1YTU1IGx1YTU1IGx1YTUuNSBsdWEtNS41IGx1YSkKLSsKLStpZihMdWE1NV9GSU5EX1ZFUlNJ T04pCi0rICBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4xMC4wKQotKyAgc2V0KEx1 YTU1X0ZBSUxFRF9WRVJTSU9OX0NIRUNLIHRydWUpCi0rCi0rICBpZihMdWE1NV9GSU5EX1ZFUlNJ T05fRVhBQ1QpCi0rICAgIGlmKEx1YTU1X1ZFUlNJT04gVkVSU0lPTl9FUVVBTCBMdWE1NV9GSU5E X1ZFUlNJT04pCi0rICAgICAgc2V0KEx1YTU1X0ZBSUxFRF9WRVJTSU9OX0NIRUNLIGZhbHNlKQot KyAgICBlbmRpZigpCi0rICBlbHNlKCkKLSsgICAgaWYoTHVhNTVfVkVSU0lPTiBWRVJTSU9OX0VR VUFMICAgTHVhNTVfRklORF9WRVJTSU9OIE9SCi0rICAgICAgIEx1YTU1X1ZFUlNJT04gVkVSU0lP Tl9HUkVBVEVSIEx1YTU1X0ZJTkRfVkVSU0lPTiBBTkQKLSsgICAgICAgTHVhNTVfVkVSU0lPTiBW RVJTSU9OX0xFU1MgTHVhX1ZFUlNJT05fVE9PX0hJR0gpCi0rICAgICAgc2V0KEx1YTU1X0ZBSUxF RF9WRVJTSU9OX0NIRUNLIGZhbHNlKQotKyAgICBlbmRpZigpCi0rICBlbmRpZigpCi0rCi0rICBp ZihMdWE1NV9GQUlMRURfVkVSU0lPTl9DSEVDSykKLSsgICAgaWYoTHVhNTVfRklORF9SRVFVSVJF RCBBTkQgTk9UIEx1YTU1X0ZJTkRfUVVJRVRMWSkKLSsgICAgICAgIGlmKEx1YTU1X0ZJTkRfVkVS U0lPTl9FWEFDVCkKLSsgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJMdWE1LjUgdmVy c2lvbiBjaGVjayBmYWlsZWQuICBWZXJzaW9uICR7THVhNTVfVkVSU0lPTn0gd2FzIGZvdW5kLCB2 ZXJzaW9uICR7THVhNTVfRklORF9WRVJTSU9OfSBpcyBuZWVkZWQgZXhhY3RseS4iKQotKyAgICAg ICAgZWxzZShMdWE1NV9GSU5EX1ZFUlNJT05fRVhBQ1QpCi0rICAgICAgICAgICAgbWVzc2FnZShG QVRBTF9FUlJPUiAiTHVhNS41IHZlcnNpb24gY2hlY2sgZmFpbGVkLiAgVmVyc2lvbiAke0x1YTU1 X1ZFUlNJT059IHdhcyBmb3VuZCwgYXQgbGVhc3QgdmVyc2lvbiAke0x1YTU1X0ZJTkRfVkVSU0lP Tn0gaXMgcmVxdWlyZWQiKQotKyAgICAgICAgZW5kaWYoTHVhNTVfRklORF9WRVJTSU9OX0VYQUNU KQotKyAgICBlbmRpZihMdWE1NV9GSU5EX1JFUVVJUkVEIEFORCBOT1QgTHVhNTVfRklORF9RVUlF VExZKQotKwotKyAgICBzZXQoTHVhNTVfRk9VTkQgZmFsc2UpCi0rICBlbmRpZihMdWE1NV9GQUlM RURfVkVSU0lPTl9DSEVDSykKLSsKLStlbmRpZihMdWE1NV9GSU5EX1ZFUlNJT04pCi0rCi0raWYo THVhNTVfRk9VTkQpCi0rICBzZXQoTHVhNTUgT04gQ0FDSEUgQk9PTCAiQnVpbGQgd2l0aCBsdWE1 LjUgc3VwcG9ydC4iKQotKyAgaWYoQVBQTEUpCi0rICAgIGZvcmVhY2goaSAke0x1YTU1X0xJQlJB UklFU30pCi0rICAgICAgZmluZF9saWJyYXJ5KF9sdWE1NV9MSUJSQVJZIE5BTUVTICR7aX0gSElO VFMgJHtMdWE1NV9MSUJSQVJZX0RJUlN9KQotKyAgICAgIGxpc3QoQVBQRU5EIEx1YTU1X0xJQlJB UklFU19GVUxMICR7X2x1YTU1X0xJQlJBUll9KQotKyAgICAgIHVuc2V0KF9sdWE1NV9MSUJSQVJZ IENBQ0hFKQotKyAgICBlbmRmb3JlYWNoKGkpCi0rICAgIHNldChMdWE1NV9MSUJSQVJJRVMgJHtM dWE1NV9MSUJSQVJJRVNfRlVMTH0pCi0rICAgIHVuc2V0KEx1YTU1X0xJQlJBUklFU19GVUxMIENB Q0hFKQotKyAgZW5kaWYoKQotK2VuZGlmKEx1YTU1X0ZPVU5EKQotZGlmZiAtdXJOciBkYXJrdGFi bGUtNS42LjAtb3JpZy9zcmMvQ01ha2VMaXN0cy50eHQgZGFya3RhYmxlLTUuNi4wL3NyYy9DTWFr ZUxpc3RzLnR4dAotLS0tIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9DTWFrZUxpc3RzLnR4dAky MDI2LTA2LTIxIDEwOjIwOjIzLjAwMDAwMDAwMCArMDIwMAotKysrIGRhcmt0YWJsZS01LjYuMC9z cmMvQ01ha2VMaXN0cy50eHQJMjAyNi0wOS0wMSAwOTo1MDozOS4zMzUzODg3NTIgKzAyMDAKLUBA IC03NjAsMTQgKzc2MCwxNCBAQAotICMgQnVpbGQgZXh0ZXJuYWwgZGVwcwotICMKLSBpZihVU0Vf TFVBKQotLSAgZmluZF9wYWNrYWdlKEx1YTU0IDUuNCkKLS0gIGlmKEx1YTU0X0ZPVU5EKQotKyAg ZmluZF9wYWNrYWdlKEx1YTU1IDUuNSkKLSsgIGlmKEx1YTU1X0ZPVU5EKQotICAgICBtZXNzYWdl KFNUQVRVUyAiTHVhIHN1cHBvcnQ6IEVuYWJsZWQiKQotLSAgICBpbmNsdWRlX2RpcmVjdG9yaWVz KFNZU1RFTSAke0x1YTU0X0lOQ0xVREVfRElSU30pCi0tICAgIGxpc3QoQVBQRU5EIExJQlMgJHtM dWE1NF9MREZMQUdTfSkKLSsgICAgaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0gJHtMdWE1NV9J TkNMVURFX0RJUlN9KQotKyAgICBsaXN0KEFQUEVORCBMSUJTICR7THVhNTVfTERGTEFHU30pCi0g ICBlbHNlKCkKLSAgICAgaWYoRE9OVF9VU0VfSU5URVJOQUxfTFVBKQotLSAgICAgIG1lc3NhZ2Uo RkFUQUxfRVJST1IgIkx1YSBzdXBwb3J0OiBTeXN0ZW0gbGlicmFyeSBmb3IgTHVhIDUuNCBub3Qg Zm91bmQgKHRvIHVzZSBkYXJrdGFibGUncyB2ZXJzaW9uIGFkZCAtRERPTlRfVVNFX0lOVEVSTkFM X0xVQT1PZmYpIikKLSsgICAgICBtZXNzYWdlKFNUQVRVUyAiTHVhIHN1cHBvcnQ6IFN5c3RlbSBs aWJyYXJ5IGZvciBsdWEgNS41IG5vdCBmb3VuZCAodG8gdXNlIGRhcmt0YWJsZSdzIHZlcnNpb24g dXNlIC1ERE9OVF9VU0VfSU5URVJOQUxfTFVBPU9mZikiKQotICAgICBlbHNlKERPTlRfVVNFX0lO VEVSTkFMX0xVQSkKLSAgICAgICBtZXNzYWdlKFNUQVRVUyAiTHVhIHN1cHBvcnQ6IFN5c3RlbSBs aWJyYXJ5IG5vdCBmb3VuZCAodXNpbmcgZGFya3RhYmxlJ3MgdmVyc2lvbikiKQotICAgICAgIGlu Y2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2V4dGVybmFsL2x1 YS9zcmMpCi1AQCAtODMwLDkgKzgzMCw5IEBACi0gZW5kaWYoVVNFX0xVQSkKLSAKLSBpZihVU0Vf TFVBKQotLSAgaWYoTk9UIEx1YTU0X0ZPVU5EKQotKyAgaWYoTk9UIEx1YTU1X0ZPVU5EKQotICAg ICBsaXN0KEFQUEVORCBMSUJfREVQUyBsdWEpICMgMm5kIGhhbGYgb2YgdGhlIHVnbGluZXNzIDov Ci0tICBlbmRpZihOT1QgTHVhNTRfRk9VTkQpCi0rICBlbmRpZihOT1QgTHVhNTVfRk9VTkQpCi0g ICAjIGxpYmxhdXRvYyBmb3IgbHVhIGF1dG9tYXRlZCBpbnRlcmZhY2UgZ2VuZXJhdGlvbgotICAg YWRkX2xpYnJhcnkobGF1dG9jX3N0YXRpYyBTVEFUSUMgSU1QT1JURUQpCi0gICBzZXRfdGFyZ2V0 X3Byb3BlcnRpZXMobGF1dG9jX3N0YXRpYyBQUk9QRVJUSUVTIElNUE9SVEVEX0xPQ0FUSU9OICR7 Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9leHRlcm5hbC9MdWFBdXRvQy9saWJsYXV0b2MuYSBQ T1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIFRydWUpCi1kaWZmIC11ck5yIGRhcmt0YWJsZS01LjYu MC1vcmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2VuZnVzZUFkdmFuY2VkLmx1 YSBkYXJrdGFibGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZW5mdXNl QWR2YW5jZWQubHVhCi0tLS0gZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1z Y3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQubHVhCTIwMjYtMDYtMTIgMDU6MDY6MzguMDAw MDAwMDAwICswMjAwCi0rKysgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0 cy9jb250cmliL2VuZnVzZUFkdmFuY2VkLmx1YQkyMDI2LTA5LTAxIDA5OjQyOjA0LjM3MDkyODkx OCArMDIwMAotQEAgLTUyNyw5ICs1MjcsOSBAQAotICAgICAgICAgICAgIGxvY2FsIHNldF90YWcg PSBHVUkuVGFyZ2V0LmFkZF90YWdzLnRleHQKLSAgICAgICAgICAgICBpZiBzZXRfdGFnIH49IG5p bCB0aGVuIC0tYWRkIGFkZGl0aW9uYWwgdXNlci1zcGVjaWZpZWQgdGFncwotICAgICAgICAgICAg ICAgICBmb3IgdGFnIGluIHN0cmluZy5nbWF0Y2goc2V0X3RhZywgJ1teLF0rJykgZG8KLS0gICAg ICAgICAgICAgICAgICAgIHRhZyA9IENsZWFuU3BhY2VzKHRhZykKLS0gICAgICAgICAgICAgICAg ICAgIHRhZyA9IGR0LnRhZ3MuY3JlYXRlKHRhZykKLS0gICAgICAgICAgICAgICAgICAgIGR0LnRh Z3MuYXR0YWNoKHRhZywgaW1wb3J0ZWQpIAotKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgY2xl YW5lZF90YWcgPSBDbGVhblNwYWNlcyh0YWcpCi0rICAgICAgICAgICAgICAgICAgICBjbGVhbmVk X3RhZyA9IGR0LnRhZ3MuY3JlYXRlKGNsZWFuZWRfdGFnKQotKyAgICAgICAgICAgICAgICAgICAg ZHQudGFncy5hdHRhY2goY2xlYW5lZF90YWcsIGltcG9ydGVkKSAKLSAgICAgICAgICAgICAgICAg ZW5kCi0gICAgICAgICAgICAgZW5kCi0gICAgICAgICBlbmQKLWRpZmYgLXVyTnIgZGFya3RhYmxl LTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5j ZWQubHVhLm9yaWcgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250 cmliL2VuZnVzZUFkdmFuY2VkLmx1YS5vcmlnCi0tLS0gZGFya3RhYmxlLTUuNi4wLW9yaWcvc3Jj L2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQubHVhLm9yaWcJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBkYXJrdGFibGUtNS42LjAvc3Jj L2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQubHVhLm9yaWcJMjAy Ni0wNi0xMiAwNTowNjozOC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTE3NSBAQAotKy0t W1tFbmZ1c2UgQWR2YW5jZWQgcGx1Z2luIGZvciBkYXJrdGFibGUgMi4yLlggYW5kIDIuNC5YCi0r Ci0rICBjb3B5cmlnaHQgKGMpIDIwMTcsIDIwMTggIEhvbGdlciBLbGVtbSAoT3JpZ2luYWwgTGlu dXgtb25seSB2ZXJzaW9uKQotKyAgTW9kaWZpZWQgYnk6IEtldmluIEVydGVsCi0rICAKLSsgIGRh cmt0YWJsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0rICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCi0rICAKLSsgIGRhcmt0YWJsZSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rICAKLSsgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCi0rICBhbG9uZyB3aXRoIGRhcmt0YWJsZS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KLStdXQotKwotKy0tW1tBYm91dCB0aGlzIHBsdWdpbgotK1RoaXMg cGx1Z2luIHdpbGwgYWRkIHRoZSBuZXcgZXhwb3J0IG1vZHVsZSAnZnVzaW9uIHRvIERSSSBvciBE RkYgaW1hZ2UnLgotKyAgIAotKy0tLS1SRVFVSVJFRCBTT0ZUV0FSRS0tLS0KLSthbGlnbl9pbWFn ZV9zdGFjawotK2VuZnVzZSB2ZXIuIDQuMiBvciBncmVhdGVyCi0rZXhpZnRvb2wKLSsKLSstLS0t VVNBR0UtLS0tCi0rSW5zdGFsbDoKLSsgMSkgR2V0IHRoZSBMdWEgc2NyaXB0czogaHR0cHM6Ly9n aXRodWIuY29tL2Rhcmt0YWJsZS1vcmcvbHVhLXNjcmlwdHMjZG93bmxvYWQtYW5kLWluc3RhbGwK LSsgMikgUmVxdWlyZSB0aGlzIGZpbGUgaW4geW91ciBsdWFyYyBmaWxlLCBhcyB3aXRoIGFueSBv dGhlciBkdCBwbHVnLWluOiByZXF1aXJlICJjb250cmliL2VuZnVzZUFkdmFuY2VkIgotKyAzKSBU aGVuIHNlbGVjdCAiRFJJIG9yIERGRiBpbWFnZSIgYXMgc3RvcmFnZSBvcHRpb24KLSsgNCkgT24g dGhlIGluaXRpYWwgc3RhcnR1cCBzZXQgeW91ciBleGVjdXRhYmxlIHBhdGhzIAotKwotK0RSSSA9 IER5bmFtaWMgUmFuZ2UgSW5jcmVhc2UgKEJsZW5kIG11bHRpcGxlIGJyYWNrZXQgaW1hZ2VzIGlu dG8gYSBzaW5nbGUgTERSIGZpbGUpCi0rREZGID0gRGVwdGggRnJvbSBGb2N1cyAoJ0ZvY3VzIFN0 YWNraW5nJyAtIEJsZW5kIG11bHRpcGxlIGltYWdlcyB3aXRoIGRpZmZlcmVudCBmb2N1cyBpbnRv IGEgc2luZ2xlIGltYWdlKQotK1NlbGVjdCBtdWx0aXBsZSBpbWFnZXMgdGhhdCBhcmUgZWl0aGVy IGJyYWNrZXRlZCwgb3IgZm9jdXMtc2hpZnRlZCwgc2V0IHlvdXIgZGVzaXJlZCBvcGVyYXRpbmcg cGFyYW1ldGVycywgYW5kIHByZXNzIHRoZSBleHBvcnQgYnV0dG9uLiBBIG5ldyBpbWFnZSB3aWxs IGJlIGNyZWF0ZWQuIFRoZSBpbWFnZSB3aWxsCi0rYmUgYXV0byBpbXBvcnRlZCBpbnRvIGRhcmt0 YWJsZSBpZiB5b3UgaGF2ZSB0aGF0IG9wdGlvbiBlbmFibGVkLiBBZGRpdGlvbmFsIHRhZ3Mgb3Ig c3R5bGUgY2FuIGJlIGFwcGxpZWQgb24gYXV0byBpbXBvcnQgYXMgd2VsbCwgaWYgeW91IGRlc2ly ZS4KLSsKLStpbWFnZSBhbGlnbiBvcHRpb25zOgotK1NlZSBhbGlnbl9pbWFnZV9zdGFjayBkb2N1 bWVudGF0aW9uIGZvciBmdXJ0aGVyIGV4cGxhbmF0aW9uIG9mIGhvdyBpdCBzcGVjaWZpY2FsbHkg d29ya3MgYW5kIHRoZSBvcHRpb25zIHByb3ZpZGVkIChodHRwOi8vaHVnaW4uc291cmNlZm9yZ2Uu bmV0L2RvY3MvbWFudWFsL0FsaWduX2ltYWdlX3N0YWNrLmh0bWwpCi0rCi0raW1hZ2UgZnVzdGlv biBvcHRpb25zOgotK1NlZSBlbmZ1c2UgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBleHBsYW5h dGlvbiBvZiBob3cgaXQgc3BlY2lmaWNhbGx5IHdvcmtzIGFuZCB0aGUgb3B0aW9ucyBwcm92aWRl ZCAoaHR0cHM6Ly93aWtpLnBhbm90b29scy5vcmcvRW5mdXNlKQotK0lmIHlvdSBoYXZlIGEgc3Bl Y2lmaWMgc2V0IG9mIHBhcmFtZXRlcnMgeW91IGZyZXF1ZW50bHkgbGlrZSB0byB1c2UsIHlvdSBj YW4gc2F2ZSB0aGVtIHRvIGEgcHJlc2V0LiBUaGVyZSBhcmUgMyBwcmVzZXRzIGF2YWlsYWJsZSBm b3IgRFJJLCBhbmQgMyBmb3IgREZGLgotKwotK3RhcmdldCBmaWxlOgotK1NlbGVjdCB5b3VyIGZp bGUgZGVzdGluYXRpb24gcGF0aCwgb3IgY2hlY2sgdGhlICdzYXZlIHRvIHNvdXJjZSBpbWFnZSBs b2NhdGlvbicgb3B0aW9uLgotKydDcmVhdGUgVW5pcXVlIEZpbGVuYW1lJyBpcyBlbmFibGVkIGJ5 IGRlZmF1bHQgYXQgc3RhcnR1cCwgdGhlIHVzZXIgY2FuIGNob29zZSB0byBvdmVyd3JpdGUgZXhp c3RpbmcKLStTZXQgYW55IHRhZ3Mgb3Igc3R5bGUgeW91IGRlc2lyZSB0byBiZSBhZGRlZCB0byB0 aGUgbmV3IGltYWdlIChvbmx5IGF2YWlsYWJsZSBpZiB0aGUgYXV0by1pbXBvcnQgb3B0aW9uIGlz IGVuYWJsZWQpLiBZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBkZWZhdWx0cyBmb3IgdGhpcyB1bmRl ciBzZXR0aW5ncyA+IGx1YSBvcHRpb25zCi0rCi0rZm9ybWF0IG9wdGlvbnM6Ci0rU2FtZSBhcyBv dGhlciBleHBvcnQgbW9kdWxlcwotKwotK2dsb2JhbCBvcHRpb25zOgotK1NhbWUgYXMgb3RoZXIg ZXhwb3J0IG1vZHVsZXMKLSsKLStdXQotKwotK2xvY2FsIGR0ID0gcmVxdWlyZSAnZGFya3RhYmxl JwotK2xvY2FsIGRmID0gcmVxdWlyZSAnbGliL2R0dXRpbHMuZmlsZScKLStsb2NhbCBkc3lzID0g cmVxdWlyZSAnbGliL2R0dXRpbHMuc3lzdGVtJwotK2xvY2FsIGR1ID0gcmVxdWlyZSAnbGliL2R0 dXRpbHMnCi0rbG9jYWwgbW9kID0gJ21vZHVsZV9lbmZ1c2VBZHZhbmNlZCcKLStsb2NhbCBvc19w YXRoX3NlcGVyYXRvciA9ICcvJwotK2lmIGR0LmNvbmZpZ3VyYXRpb24ucnVubmluZ19vcyA9PSAn d2luZG93cycgdGhlbiBvc19wYXRoX3NlcGVyYXRvciA9ICdcXCcgZW5kCi0rCi0rZHUuY2hlY2tf bWluX2FwaV92ZXJzaW9uKCI3LjAuMCIsICJlbmZ1c2VBZHZhbmNlZCIpIAotKwotKy0tIFRlbGwg Z2V0dGV4dCB3aGVyZSB0byBmaW5kIHRoZSAubW8gZmlsZSB0cmFuc2xhdGluZyBtZXNzYWdlcyBm b3IgYSBwYXJ0aWN1bGFyIGRvbWFpbgotK2xvY2FsIGdldHRleHQgPSBkdC5nZXR0ZXh0LmdldHRl eHQKLSsKLStsb2NhbCBmdW5jdGlvbiBfKG1zZ2lkKQotKyAgICByZXR1cm4gZ2V0dGV4dChtc2dp ZCkKLStlbmQKLSsKLSstLSByZXR1cm4gZGF0YSBzdHJ1Y3R1cmUgZm9yIHNjcmlwdF9tYW5hZ2Vy Ci0rCi0rbG9jYWwgc2NyaXB0X2RhdGEgPSB7fQotKwotK3NjcmlwdF9kYXRhLm1ldGFkYXRhID0g ewotKyAgbmFtZSA9IF8oImVuZnVzZSBhZHZhbmNlZCIpLAotKyAgcHVycG9zZSA9IF8oImZvY3Vz IHN0YWNrIG9yIGV4cG9zdXJlIGJsZW5kIGltYWdlcyIpLAotKyAgYXV0aG9yID0gIktldmluIEVy dGVsIiwKLSsgIGhlbHAgPSAiaHR0cHM6Ly9kb2NzLmRhcmt0YWJsZS5vcmcvbHVhL3N0YWJsZS9s dWEuc2NyaXB0cy5tYW51YWwvc2NyaXB0cy9jb250cmliL2VuZnVzZUFkdmFuY2VkIgotK30KLSsK LStzY3JpcHRfZGF0YS5kZXN0cm95ID0gbmlsIC0tIGZ1bmN0aW9uIHRvIGRlc3RvcnkgdGhlIHNj cmlwdAotK3NjcmlwdF9kYXRhLmRlc3Ryb3lfbWV0aG9kID0gbmlsIC0tIHNldCB0byBoaWRlIGZv ciBsaWJzIHNpbmNlIHdlIGNhbid0IGRlc3Ryb3kgdGhlbSBjb21tcGxldGVseSB5ZXQsIG90aGVy d2lzZSBsZWF2ZSBhcyBuaWwKLStzY3JpcHRfZGF0YS5yZXN0YXJ0ID0gbmlsIC0tIGhvdyB0byBy ZXN0YXJ0IHRoZSAobGliKSBzY3JpcHQgYWZ0ZXIgaXQncyBiZWVuIGhpZGRlbiAtIGkuZS4gbWFr ZSBpdCB2aXNpYmxlIGFnYWluCi0rc2NyaXB0X2RhdGEuc2hvdyA9IG5pbCAtLSBvbmx5IHJlcXVp cmVkIGZvciBsaWJzIHNpbmNlIHRoZSBkZXN0cm95X21ldGhvZCBvbmx5IGhpZGVzIHRoZW0KLSsK LSstLSBJTklUUyAtLQotK2xvY2FsIEFJUyA9IHsKLSsgICAgbmFtZSA9ICdhbGlnbl9pbWFnZV9z dGFjaycsCi0rICAgIGJpbiA9ICcnLAotKyAgICBmaXJzdF9ydW4gPSB0cnVlLAotKyAgICBpbnN0 YWxsX2Vycm9yID0gZmFsc2UsCi0rICAgIGFyZ19zdHJpbmcgPSAnJywKLSsgICAgaW1hZ2VzX3N0 cmluZyA9ICcnLAotKyAgICBhcmdzID0gewotKyAgICAgICAgcmFkaWFsX2Rpc3RvcnRpb24gICAg ICAgPSB7dGV4dCA9ICctZCcsICAgICAgICAgICAgIHN0eWxlID0gJ2Jvb2wnfSwKLSsgICAgICAg IG9wdGltaXplX2ZpZWxkICAgICAgICAgID0ge3RleHQgPSAnLW0nLCAgICAgICAgICAgICBzdHls ZSA9ICdib29sJ30sCi0rICAgICAgICBvcHRpbWl6ZV9pbWFnZV9jZW50ZXIgICA9IHt0ZXh0ID0g Jy1pJywgICAgICAgICAgICAgc3R5bGUgPSAnYm9vbCd9LAotKyAgICAgICAgYXV0b19jcm9wICAg ICAgICAgICAgICAgPSB7dGV4dCA9ICctQycsICAgICAgICAgICAgIHN0eWxlID0gJ2Jvb2wnfSwK LSsgICAgICAgIGRpc3RvcnRpb24gICAgICAgICAgICAgID0ge3RleHQgPSAnLS1kaXN0b3J0aW9u JywgICBzdHlsZSA9ICdib29sJ30sCi0rICAgICAgICBncHUgICAgICAgICAgICAgICAgICAgICA9 IHt0ZXh0ID0gJy0tZ3B1JywgICAgICAgICAgc3R5bGUgPSAnYm9vbCd9LAotKyAgICAgICAgZ3Jp ZF9zaXplICAgICAgICAgICAgICAgPSB7dGV4dCA9ICctZyAnLCAgICAgICAgICAgIHN0eWxlID0g J2ludGVnZXInfSwKLSsgICAgICAgIGNvbnRyb2xfcG9pbnRzICAgICAgICAgID0ge3RleHQgPSAn LWMgJywgICAgICAgICAgICBzdHlsZSA9ICdpbnRlZ2VyJ30sCi0rICAgICAgICBjb250cm9sX3Bv aW50c19yZW1vdmUgICA9IHt0ZXh0ID0gJy10ICcsICAgICAgICAgICAgc3R5bGUgPSAnaW50ZWdl cid9LAotKyAgICAgICAgY29ycmVsYXRpb24gICAgICAgICAgICAgPSB7dGV4dCA9ICctLWNvcnI9 JywgICAgICAgIHN0eWxlID0gJ2Zsb2F0J30KLSsgICAgfQotK30KLStsb2NhbCBFTkYgPSB7Ci0r ICAgIG5hbWUgPSAnZW5mdXNlJywKLSsgICAgYmluID0gJycsCi0rICAgIGZpcnN0X3J1biA9IHRy dWUsCi0rICAgIGluc3RhbGxfZXJyb3IgPSBmYWxzZSwKLSsgICAgYXJnX3N0cmluZyA9ICcnLAot KyAgICBpbWFnZV9zdHJpbmcgPSAnJywKLSsgICAgYXJncyA9IHsKLSsgICAgICAgIGV4cG9zdXJl X3dlaWdodCAgICAgICAgID0ge3RleHQgPSAnLS1leHBvc3VyZS13ZWlnaHQ9JywgICAgICAgICBz dHlsZSA9ICdmbG9hdCd9LAotKyAgICAgICAgc2F0dXJhdGlvbl93ZWlnaHQgICAgICAgPSB7dGV4 dCA9ICctLXNhdHVyYXRpb24td2VpZ2h0PScsICAgICAgIHN0eWxlID0gJ2Zsb2F0J30sCi0rICAg ICAgICBjb250cmFzdF93ZWlnaHQgICAgICAgICA9IHt0ZXh0ID0gJy0tY29udHJhc3Qtd2VpZ2h0 PScsICAgICAgICAgc3R5bGUgPSAnZmxvYXQnfSwKLSsgICAgICAgIGV4cG9zdXJlX29wdGltdW0g ICAgICAgID0ge3RleHQgPSAnLS1leHBvc3VyZS1vcHRpbXVtPScsICAgICAgICBzdHlsZSA9ICdm bG9hdCd9LAotKyAgICAgICAgZXhwb3N1cmVfd2lkdGggICAgICAgICAgPSB7dGV4dCA9ICctLWV4 cG9zdXJlLXdpZHRoPScsICAgICAgICAgIHN0eWxlID0gJ2Zsb2F0J30sCi0rICAgICAgICBoYXJk X21hc2tzICAgICAgICAgICAgICA9IHt0ZXh0ID0gJy0taGFyZC1tYXNrJywgICAgICAgICAgICAg ICAgc3R5bGUgPSAnYm9vbCd9LAotKyAgICAgICAgc2F2ZV9tYXNrcyAgICAgICAgICAgICAgPSB7 dGV4dCA9ICctLXNhdmUtbWFza3MnLCAgICAgICAgICAgICAgIHN0eWxlID0gJ2Jvb2wnfSwKLSsg ICAgICAgIGNvbnRyYXN0X3dpbmRvd19zaXplICAgID0ge3RleHQgPSAnLS1jb250cmFzdC13aW5k b3ctc2l6ZT0nLCAgICBzdHlsZSA9ICdpbnRlZ2VyJ30sCi0rICAgICAgICBjb250cmFzdF9lZGdl X3NjYWxlICAgICA9IHt0ZXh0ID0gJy0tY29udHJhc3QtZWRnZS1zY2FsZT0nLCAgICAgc3R5bGUg PSAnZmxvYXQnfSwKLSsgICAgICAgIGNvbnRyYXN0X21pbl9jdXJ2YXR1cmUgID0ge3RleHQgPSAn LS1jb250cmFzdC1taW4tY3VydmF0dXJlPScsIHN0eWxlID0gJ3N0cmluZyd9Ci0rICAgIH0KLSt9 Ci0rbG9jYWwgRVhGID0gewotKyAgICBuYW1lID0gJ2V4aWZ0b29sJywKLSsgICAgYmluID0gJycs Ci0rICAgIGZpcnN0X3J1biA9IHRydWUsCi0rICAgIGluc3RhbGxfZXJyb3IgPSBmYWxzZQotK30K LStsb2NhbCBHVUkgPSB7Ci0rICAgIEFJUyA9IHsKLSsgICAgICAgIHJhZGlhbF9kaXN0b3J0aW9u ICAgICAgID0ge30sCi0rICAgICAgICBvcHRpbWl6ZV9maWVsZCAgICAgICAgICA9IHt9LAotKyAg ICAgICAgb3B0aW1pemVfaW1hZ2VfY2VudGVyICAgPSB7fSwKLSsgICAgICAgIGF1dG9fY3JvcCAg ICAgICAgICAgICAgID0ge30sCi0rICAgICAgICBkaXN0b3J0aW9uICAgICAgICAgICAgICA9IHt9 LAotKyAgICAgICAgZ3JpZF9zaXplICAgICAgICAgICAgICAgPSB7fSwKLSsgICAgICAgIGNvbnRy b2xfcG9pbnRzICAgICAgICAgID0ge30sCi0rICAgICAgICBjb250cm9sX3BvaW50c19yZW1vdmUg ICA9IHt9LAotKyAgICAgICAgY29ycmVsYXRpb24gICAgICAgICAgICAgPSB7fX0sCi0rICAgIEVO RiA9IHsKLSsgICAgICAgIGV4cG9zdXJlX3dlaWdodCAgICAgICAgID0ge30sCi0rICAgICAgICBz YXR1cmF0aW9uX3dlaWdodCAgICAgICA9IHt9LAotKyAgICAgICAgY29udHJhc3Rfd2VpZ2h0ICAg ICAgICAgPSB7fSwKLSsgICAgICAgIGV4cG9zdXJlX29wdGltdW0gICAgICAgID0ge30sCi0rICAg ICAgICBleHBvc3VyZV93aWR0aCAgICAgICAgICA9IHt9LAotKyAgICAgICAgaGFyZF9tYXNrcyAg ICAgICAgICAgICAgPSB7fSwKLSsgICAgICAgIHNhdmVfbWFza3MgICAgICAgICAgICAgID0ge30s Ci0rICAgICAgICBjb250cmFzdF93aW5kb3dfc2l6ZSAgICA9IHt9LAotKyAgICAgICAgY29udHJh c3RfZWRnZV9zY2FsZSAgICAgPSB7fSwKLSsgICAgICAgIGNvbnRyYXN0X21pbl9jdXJ2YXR1cmUg ID0ge319LAotKyAgICBUYXJnZXQgPSB7Ci0rICAgICAgICBmb3JtYXQgICAgICAgICAgICAgICAg ICA9IHt9LAotKyAgICAgICAgZGVwdGggICAgICAgICAgICAgICAgICAgPSB7fSwgICAKLSsgICAg ICAgIGNvbXByZXNzaW9uX2xldmVsX3RpZiAgID0ge30sCi0rICAgICAgICBjb21wcmVzc2lvbl9s ZXZlbF9qcGcgICA9IHt9LAotKyAgICAgICAgb3V0cHV0X2NvbXByZXNzICAgICAgICAgPSB7fSwK LSsgICAgICAgIG91dHB1dF9kaXJlY3RvcnkgICAgICAgID0ge30sCi0rICAgICAgICBzb3VyY2Vf bG9jYXRpb24gICAgICAgICA9IHt9LAotKyAgICAgICAgb25fY29uZmxpY3QgICAgICAgICAgICAg PSB7fSwKLSsgICAgICAgIGF1dG9faW1wb3J0ICAgICAgICAgICAgID0ge30sCi0rICAgICAgICBh cHBseV9zdHlsZSAgICAgICAgICAgICA9IHt9LAotKyAgICAgICAgY29weV90YWdzICAgICAgICAg ICAgICAgPSB7fSwKLSsgICAgICAgIGFkZF90YWdzICAgICAgICAgICAgICAgID0ge319LAotKyAg ICBQcmVzZXRzID0gewotKyAgICAgICAgY3VycmVudF9wcmVzZXQgICAgICA9e307Ci0rICAgICAg ICBsb2FkICAgICAgICAgICAgICAgID17fTsKLSsgICAgICAgIHNhdmUgICAgICAgICAgICAgICAg PXt9OwotKyAgICAgICAgdmFyaWFudHMgICAgICAgICAgICA9e307Ci0rICAgICAgICB2YXJpYW50 c190eXBlICAgICAgID17fX0sCi0rICAgIGV4ZXMgPSB7Ci0rICAgICAgICBhbGlnbl9pbWFnZV9z dGFjayA9IHt9LAotKyAgICAgICAgZW5mdXNlID0ge30sCi0rICAgICAgICBleGlmdG9vbCA9IHt9 LAotKyAgICAgICAgdXBkYXRlID0ge30KLSsgICAgfSwKLSsgICAgYWxpZ24gICAgICAgICAgICAg ICAgICAgPSB7fSwKLSsgICAgb3B0aW9uc19jb250YWluICAgICAgICAgPSB7fSwKLSsgICAgc2hv d19vcHRpb25zICAgICAgICAgICAgPSB7fQotK30KLSsKLStsb2NhbCBzdHlsZXMgPSBkdC5zdHls ZXMKLStsb2NhbCBzdHlsZXNfY291bnQgPSAxIC0tICdub25lJyA9IDEKLStmb3IgXyxpIGluIHBh aXJzKGR0LnN0eWxlcykgZG8KLSsgICAgaWYgdHlwZShpKSA9PSAndXNlcmRhdGEnIHRoZW4gc3R5 bGVzX2NvdW50ID0gc3R5bGVzX2NvdW50ICsgMSBlbmQKLStlbmQKLSsKLSstLSBGVU5DVElPTiAt LQotKwotK2xvY2FsIGZ1bmN0aW9uIHNhbml0aXplX2RlY2ltYWxzKGNtZCkgLS0gbWFrZSBzdXJl IGRlY2ltYWwgc2VwYXJhdG9yIGlzIGEgJy4nCi0rICAgIHJldHVybiBzdHJpbmcuZ3N1YihjbWQs ICcoJWQpLCglZCknLCAiJTEuJTIiKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIEluUmFuZ2Uo dGVzdCwgbG93LCBoaWdoKSAtLSB0ZXN0cyBpZiB0ZXN0IHZhbHVlIGlzIHdpdGhpbiByYW5nZSBv ZiBsb3cgYW5kIGhpZ2ggKGluY2x1c2l2ZSkKLSsgICAgaWYgdGVzdCA+PSBsb3cgYW5kIHRlc3Qg PD0gaGlnaCB0aGVuCi0rICAgICAgICByZXR1cm4gdHJ1ZQotKyAgICBlbHNlCi0rICAgICAgICBy ZXR1cm4gZmFsc2UKLSsgICAgZW5kCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gR2V0RmlsZU5h bWUoZnVsbF9wYXRoKSAtLSBQYXJzZXMgYSBmdWxsIHBhdGggKHBhdGgvZmlsZW5hbWVfaWRlbnRp Zmllci5leHRlbnNpb24pIGludG8gaW5kaXZpZHVhbCBwYXJ0cwotKy0tW1tJbnB1dDogRm9sZGVy MS9Gb2xkZXIyL0ZvbGRlcjMvSW1nXzAwMDEuQ1IyCi0rICAgIAotKyAgICBSZXR1cm5zOgotKyAg ICBwYXRoOiBGb2xkZXIxL0ZvbGRlcjIvRm9sZGVyMy8KLSsgICAgZmlsZW5hbWU6IEltZ18wMDAx Ci0rICAgIGlkZW50aWZpZXI6IDAwMDEKLSsgICAgZXh0ZW5zaW9uOiAuQ1IyCi0rICAgIAotKyAg ICBFWDoKLSsgICAgcGF0aF8xLCBmaWxlXzEsIGlkXzEsIGV4dF8xID0gR2V0RmlsZU5hbWUoZnVs bF9wYXRoXzEpCi0rICAgIF1dCi0rICAgIGxvY2FsIHBhdGggPSBzdHJpbmcubWF0Y2goZnVsbF9w YXRoLCAnLipbXFwvXScpCi0rICAgIGxvY2FsIGZpbGVuYW1lID0gc3RyaW5nLmdzdWIoc3RyaW5n Lm1hdGNoKGZ1bGxfcGF0aCwgJ1sldy1fXSolLicpICwgJyUuJyAsICcnICkgCi0rICAgIGxvY2Fs IGlkZW50aWZpZXIgPSBzdHJpbmcubWF0Y2goZmlsZW5hbWUsICclZCokJykKLSsgICAgbG9jYWwg ZXh0ZW5zaW9uID0gc3RyaW5nLm1hdGNoKGZ1bGxfcGF0aCwgJyUuJXcqJykKLSsgICAgcmV0dXJu IHBhdGgsIGZpbGVuYW1lLCBpZGVudGlmaWVyLCBleHRlbnNpb24KLStlbmQKLSsKLStsb2NhbCBm dW5jdGlvbiBDbGVhblNwYWNlcyh0ZXh0KSAtLXJlbW92ZXMgc3BhY2VzIGZyb20gdGhlIGZyb250 IGFuZCBiYWNrIG9mIHBhc3NlZCBpbiB0ZXh0Ci0rICAgIHRleHQgPSBzdHJpbmcuZ3N1Yih0ZXh0 LCdeJXMqJywnJykKLSsgICAgdGV4dCA9IHN0cmluZy5nc3ViKHRleHQsJyVzKiQnLCcnKQotKyAg ICByZXR1cm4gdGV4dAotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIEJ1aWxkRXhlY3V0ZUNtZChw cm9nX3RhYmxlKSAtLWNyZWF0ZXMgYSBwcm9ncmFtIGNvbW1hbmQgdXNpbmcgZWxlbWVudHMgb2Yg dGhlIHBhc3NlZCBpbiBwcm9ncmFtIHRhYmxlCi0rICAgIGxvY2FsIHJlc3VsdCA9IENsZWFuU3Bh Y2VzKHByb2dfdGFibGUuYmluKS4uJyAnLi5DbGVhblNwYWNlcyhwcm9nX3RhYmxlLmFyZ19zdHJp bmcpLi4nICcuLkNsZWFuU3BhY2VzKHByb2dfdGFibGUuaW1hZ2VzX3N0cmluZykKLSsgICAgcmV0 dXJuIHJlc3VsdAotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIFByZUNhbGwocHJvZ190YmxzKSAt LWxvb2tzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBpZiBzbyBjaGVja3MgdG8g c2VlIGlmIHByb2dyYW0gaXMgaW5zdGFsbGVkIHByb3Blcmx5Ci0rICAgIGZvciBfLHByb2cgaW4g cGFpcnMocHJvZ190YmxzKSBkbwotKyAgICAgICAgaWYgcHJvZy5maXJzdF9ydW4gdGhlbgotKyAg ICAgICAgICAgIHByb2cuYmluID0gZGYuY2hlY2tfaWZfYmluX2V4aXN0cyhwcm9nLm5hbWUpCi0r ICAgICAgICAgICAgaWYgbm90IHByb2cuYmluIHRoZW4gCi0rICAgICAgICAgICAgICAgIHByb2cu aW5zdGFsbF9lcnJvciA9IHRydWUKLSsgICAgICAgICAgICAgICAgZHQucHJlZmVyZW5jZXMud3Jp dGUobW9kLCAnYmluX2V4aXN0cycsICdib29sJywgZmFsc2UpCi0rICAgICAgICAgICAgZWxzZQot KyAgICAgICAgICAgICAgICBwcm9nLmJpbiA9IENsZWFuU3BhY2VzKHByb2cuYmluKQotKyAgICAg ICAgICAgIGVuZAotKyAgICAgICAgICAgIHByb2cuZmlyc3RfcnVuID0gZmFsc2UKLSsgICAgICAg IGVuZAotKyAgICBlbmQKLSsgICAgaWYgbm90IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYmlu X2V4aXN0cycsICdib29sJykgdGhlbgotKyAgICAgICAgR1VJLm9wdGlvbnNfY29udGFpbi5hY3Rp dmUgPSA0Ci0rICAgICAgICBHVUkuc2hvd19vcHRpb25zLnNlbnNpdGl2ZSA9IGZhbHNlCi0rICAg ICAgICBkdC5wcmludChfKCdwbGVhc2UgdXBkYXRlIHlvdXIgYmluYXJ5IGxvY2F0aW9ucycpKQot KyAgICBlbmQKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBFeGVVcGRhdGUocHJvZ190YmwpIC0t dXBkYXRlcyBleGVjdXRhYmxlIHBhdGhzIGFuZCB2ZXJpZmllcyB0aGVtCi0rICAgIGR0LnByZWZl cmVuY2VzLndyaXRlKG1vZCwgJ2Jpbl9leGlzdHMnLCAnYm9vbCcsIHRydWUpCi0rICAgIGZvciB4 LHByb2cgaW4gcGFpcnMocHJvZ190YmwpIGRvCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0 ZSgnZXhlY3V0YWJsZV9wYXRocycsIHByb2cubmFtZSwgJ3N0cmluZycsIEdVSS5leGVzW3Byb2cu bmFtZV0udmFsdWUpCi0rICAgICAgICBwcm9nLmJpbiA9IGRmLmNoZWNrX2lmX2Jpbl9leGlzdHMo cHJvZy5uYW1lKQotKyAgICAgICAgaWYgbm90IHByb2cuYmluIHRoZW4gCi0rICAgICAgICAgICAg cHJvZy5pbnN0YWxsX2Vycm9yID0gdHJ1ZQotKyAgICAgICAgICAgIGR0LnByZWZlcmVuY2VzLndy aXRlKG1vZCwgJ2Jpbl9leGlzdHMnLCAnYm9vbCcsIGZhbHNlKQotKyAgICAgICAgICAgIGR0LnBy aW50KHN0cmluZy5mb3JtYXQoXygiaXNzdWUgd2l0aCAlcyBleGVjdXRhYmxlIiksIHByb2cubmFt ZSkpCi0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAgcHJvZy5iaW4gPSBDbGVhblNwYWNlcyhw cm9nLmJpbikKLSsgICAgICAgIGVuZAotKyAgICAgICAgcHJvZy5maXJzdF9ydW4gPSBmYWxzZQot KyAgICBlbmQKLSsgICAgaWYgZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdiaW5fZXhpc3RzJywg J2Jvb2wnKSB0aGVuCi0rICAgICAgICBHVUkub3B0aW9uc19jb250YWluLmFjdGl2ZSA9IDIKLSsg ICAgICAgIEdVSS5zaG93X29wdGlvbnMuc2Vuc2l0aXZlID0gdHJ1ZQotKyAgICAgICAgZHQucHJp bnQoXygndXBkYXRlIHN1Y2Nlc3NmdWwnKSkKLSsgICAgZWxzZQotKyAgICAgICAgZHQucHJpbnQo XygndXBkYXRlIHVuc3VjY2Vzc2Z1bCwgcGxlYXNlIHRyeSBhZ2FpbicpKQotKyAgICBlbmQKLStl bmQKLSsKLStsb2NhbCBmdW5jdGlvbiBHZXRBcmdzRnJvbVByZWZlcmVuY2UocHJvZ190YWJsZSwg cHJlZml4KSAtLWZvciBlYWNoIGFyZyBpbiBhIHByb2dyYW0gdGFibGUgcmVhZHMgaW4gdGhlIGFz c29jaWF0ZWQgdmFsdWUgaW4gdGhlIGFjdGl2ZSBwcmVmZXJlbmNlICh3aGljaCBpcyBjb250aW51 YWxseSB1cGRhdGVkIHZpYSBjbGlja2VkL2NoYW5nZWQgY2FsbGJhY2sgaW4gR1VJIGVsZW1lbnRz Ci0rICAgIHByb2dfdGFibGUuYXJnX3N0cmluZyA9ICcnCi0rICAgIGZvciBhcmd1bWVudCwgYXJn X2RhdGEgaW4gcGFpcnMocHJvZ190YWJsZS5hcmdzKSBkbwotKyAgICAgICAgbG9jYWwgdGVtcCA9 IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCBwcmVmaXguLmFyZ3VtZW50LCBhcmdfZGF0YS5zdHls ZSkKLSsgICAgICAgIGlmIGFyZ19kYXRhLnN0eWxlID09ICdib29sJyBhbmQgdGVtcCB0aGVuCi0r ICAgICAgICAgICAgcHJvZ190YWJsZS5hcmdfc3RyaW5nID0gcHJvZ190YWJsZS5hcmdfc3RyaW5n Li5hcmdfZGF0YS50ZXh0Li4nICcKLSsgICAgICAgIGVsc2VpZiBhcmdfZGF0YS5zdHlsZSA9PSAn aW50ZWdlcicgdGhlbgotKyAgICAgICAgICAgIHByb2dfdGFibGUuYXJnX3N0cmluZyA9IHByb2df dGFibGUuYXJnX3N0cmluZy4uYXJnX2RhdGEudGV4dC4udGVtcC4uJyAnCi0rICAgICAgICBlbHNl aWYgYXJnX2RhdGEuc3R5bGUgPT0gJ3N0cmluZycgdGhlbgotKyAgICAgICAgICAgIGlmIGR0LmNv bmZpZ3VyYXRpb24ucnVubmluZ19vcyA9PSAid2luZG93cyIgdGhlbgotKyAgICAgICAgICAgICAg ICAtLWVzY2FwZSAlIHdpdGggJSUgYXMgJSBtZWFucyBlbnYgdmFyIG9uIHdpbmRvd3MgYW5kIGNh bGwgd2lsbCBmYWlsIG90aGVyd2lzZQotKyAgICAgICAgICAgICAgICB0ZW1wID0gc3RyaW5nLmdz dWIodGVtcCwgIiUlIiwgIiUlJSUiKQotKyAgICAgICAgICAgIGVuZAotKyAgICAgICAgICAgIHBy b2dfdGFibGUuYXJnX3N0cmluZyA9IHByb2dfdGFibGUuYXJnX3N0cmluZy4uYXJnX2RhdGEudGV4 dC4udGVtcC4uJyAnCi0rICAgICAgICBlbHNlaWYgYXJnX2RhdGEuc3R5bGUgPT0gJ2Zsb2F0JyB0 aGVuCi0rICAgICAgICAgICAgdGVtcCA9IHN0cmluZy5zdWIodG9zdHJpbmcodGVtcCksMSwzKQot KyAgICAgICAgICAgIHByb2dfdGFibGUuYXJnX3N0cmluZyA9IHByb2dfdGFibGUuYXJnX3N0cmlu Zy4uYXJnX2RhdGEudGV4dC4udGVtcC4uJyAnCi0rICAgICAgICBlbmQKLSsgICAgZW5kCi0rICAg IHByb2dfdGFibGUuYXJnX3N0cmluZyA9IENsZWFuU3BhY2VzKHByb2dfdGFibGUuYXJnX3N0cmlu ZykKLSsgICAgcmV0dXJuIHByb2dfdGFibGUuYXJnX3N0cmluZwotK2VuZAotKwotK2xvY2FsIGZ1 bmN0aW9uIFVwZGF0ZUFJU2FyZ3MoaW1hZ2VfdGFibGUsIGltYWdlc190b19yZW1vdmUpIC0tdXBk YXRlcyB0aGUgQUlTIGFyZ3VtZW50cywgYnVpbGRzIHRoZSBpbnB1dCBpbWFnZSBzdHJpbmcsIHJl dHVybnMgYSBtb2RpZmllZCBpbWFnZSB0YWJsZSB3aGljaCBjb250YWlucyB0aGUgYWxpZ25lZCBp bWFnZSBuYW1lcyBpbiBwbGFjZSBvZiB0aGUgZXhwb3J0ZWQgaW1hZ2UgbmFtZXMgYWxzbyB1cGRh dGVzIHRoZSBpbWFnZXMgdG8gcmVtb3ZlIHN0cmluZyB3aXRoIG5ldyBhbGlnbmVkIGltYWdlcyBh bmQgYSBzdHJpbmcgb2YgdGhlIGltYWdlcyB0byBhbGlnbgotKyAgICBHZXRBcmdzRnJvbVByZWZl cmVuY2UoQUlTLCAnYWN0aXZlXycpCi0rICAgIGxvY2FsIHNvdXJjZV9wYXRoID0gJycKLSsgICAg bG9jYWwgaW1hZ2VzX3RvX2FsaWduID0gJycKLSsgICAgbG9jYWwgaW5kZXggPSAwCi0rICAgIGZv ciByYXcsIHRlbXBfaW1hZ2UgaW4gcGFpcnMoaW1hZ2VfdGFibGUpIGRvCi0rICAgICAgICBsb2Nh bCBpbmRleF9zdHIgPSAnJwotKyAgICAgICAgc291cmNlX3BhdGggPSBHZXRGaWxlTmFtZSh0ZW1w X2ltYWdlKQotKyAgICAgICAgaW1hZ2VzX3RvX2FsaWduID0gaW1hZ2VzX3RvX2FsaWduLi5kZi5z YW5pdGl6ZV9maWxlbmFtZSh0ZW1wX2ltYWdlKS4uJyAnCi0rICAgICAgICBpZiBJblJhbmdlKGlu ZGV4LDAsOSkgdGhlbiBpbmRleF9zdHIgPSAnMDAwJy4udG9zdHJpbmcoaW5kZXgpCi0rICAgICAg ICBlbHNlaWYgSW5SYW5nZShpbmRleCwxMCw5OSkgdGhlbiBpbmRleF9zdHIgPSAnMDAnLi50b3N0 cmluZyhpbmRleCkKLSsgICAgICAgIGVuZAotKyAgICAgICAgaW1hZ2VfdGFibGVbcmF3XSA9IHNv dXJjZV9wYXRoLi4nYWxpZ25lZF8nLi5pbmRleF9zdHIuLicudGlmJwotKyAgICAgICAgaW1hZ2Vz X3RvX3JlbW92ZSA9IGltYWdlc190b19yZW1vdmUuLmRmLnNhbml0aXplX2ZpbGVuYW1lKGltYWdl X3RhYmxlW3Jhd10pLi4nICcKLSsgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0rICAgIGVuZAot KyAgICBzb3VyY2VfcGF0aCA9IGRmLnNhbml0aXplX2ZpbGVuYW1lKHNvdXJjZV9wYXRoLi4nYWxp Z25lZF8nKQotKyAgICBBSVMuYXJnX3N0cmluZyA9IEFJUy5hcmdfc3RyaW5nLi4nIC1hICcuLnNv dXJjZV9wYXRoCi0rICAgIGltYWdlc190b19hbGlnbiA9IENsZWFuU3BhY2VzKGltYWdlc190b19h bGlnbikKLSsgICAgCi0rICAgIHJldHVybiBpbWFnZV90YWJsZSwgaW1hZ2VzX3RvX3JlbW92ZSwg aW1hZ2VzX3RvX2FsaWduCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gVXBkYXRlRU5GYXJncyhp bWFnZV90YWJsZSwgcHJlZml4KSAtLXVwZGF0ZXMgdGhlIEVuZnVzZSBhcmd1bWVudHMsIGJ1aWxk cyB0aGUgaW5wdXQgaW1hZ2Ugc3RyaW5nLCBnZW5lcmF0ZXMgb3V0cHV0IGZpbGVuYW1lLCByZXR1 cm5zIHN0cmluZyBvZiBpbWFnZXMgdG8gYmxlbmQsIHRoZSBuYW1lIG9mIHRoZSBvdXRvdXQgaW1h Z2UsIGFuZCB0aGUgZmlyc3QgcmF3IGltYWdlIG9iamVjdAotKyAgICBHZXRBcmdzRnJvbVByZWZl cmVuY2UoRU5GLCBwcmVmaXgpCi0rICAgIGxvY2FsIGltYWdlc190b19ibGVuZCA9ICcnCi0rICAg IGxvY2FsIG91dF9wYXRoID0gJycKLSsgICAgbG9jYWwgb3V0X25hbWUgPSAnJwotKyAgICBsb2Nh bCBzbWFsbGVzdF9uYW1lID0gJycKLSsgICAgbG9jYWwgc21hbGxlc3RfaWQgPSBtYXRoLmh1Z2UK LSsgICAgbG9jYWwgbGFyZ2VzdF9pZCA9IDAKLSsgICAgbG9jYWwgZmlyc3RfcmF3ID0ge30KLSsg ICAgZm9yIHJhdywgdGVtcF9pbWFnZSBpbiBwYWlycyhpbWFnZV90YWJsZSkgZG8KLSsgICAgICAg IGxvY2FsIF8sIHNvdXJjZV9uYW1lLCBzb3VyY2VfaWQgPSBHZXRGaWxlTmFtZShyYXcuZmlsZW5h bWUpCi0rICAgICAgICBzb3VyY2VfaWQgPSB0b251bWJlcihzb3VyY2VfaWQpCi0rICAgICAgICBp ZiBzb3VyY2VfaWQgPCBzbWFsbGVzdF9pZCB0aGVuIAotKyAgICAgICAgICAgIHNtYWxsZXN0X2lk ID0gc291cmNlX2lkCi0rICAgICAgICAgICAgc21hbGxlc3RfbmFtZSA9IHNvdXJjZV9uYW1lCi0r ICAgICAgICAgICAgZmlyc3RfcmF3ID0gcmF3Ci0rICAgICAgICBlbmQKLSsgICAgICAgIGlmIHNv dXJjZV9pZCA+IGxhcmdlc3RfaWQgdGhlbiBsYXJnZXN0X2lkID0gc291cmNlX2lkIGVuZAotKyAg ICAgICAgb3V0X3BhdGggPSByYXcucGF0aAotKyAgICAgICAgaW1hZ2VzX3RvX2JsZW5kID0gaW1h Z2VzX3RvX2JsZW5kLi5kZi5zYW5pdGl6ZV9maWxlbmFtZSh0ZW1wX2ltYWdlKS4uJyAnCi0rICAg IGVuZAotKyAgICBFTkYuYXJnX3N0cmluZyA9IEVORi5hcmdfc3RyaW5nLi4nIC0tZGVwdGg9Jy4u R1VJLlRhcmdldC5kZXB0aC52YWx1ZS4uJyAnCi0rICAgIGlmIEdVSS5UYXJnZXQuZm9ybWF0LnZh bHVlID09ICd0aWYnIHRoZW4gRU5GLmFyZ19zdHJpbmcgPSBFTkYuYXJnX3N0cmluZy4uJy0tY29t cHJlc3Npb249Jy4uR1VJLlRhcmdldC5jb21wcmVzc2lvbl9sZXZlbF90aWYudmFsdWUuLicgJwot KyAgICBlbHNlaWYgR1VJLlRhcmdldC5mb3JtYXQudmFsdWUgPT0gJ2pwZycgdGhlbiBFTkYuYXJn X3N0cmluZyA9IEVORi5hcmdfc3RyaW5nLi4nLS1jb21wcmVzc2lvbj0nLi50b3N0cmluZyhtYXRo LmZsb29yKEdVSS5UYXJnZXQuY29tcHJlc3Npb25fbGV2ZWxfanBnLnZhbHVlKSkuLicgJwotKyAg ICBlbmQKLSsgICAgaWYgbm90IEdVSS5UYXJnZXQuc291cmNlX2xvY2F0aW9uLnZhbHVlIHRoZW4g b3V0X3BhdGggPSBHVUkuVGFyZ2V0Lm91dHB1dF9kaXJlY3RvcnkudmFsdWUgZW5kCi0rICAgIG91 dF9uYW1lID0gc21hbGxlc3RfbmFtZS4uJy0nLi5sYXJnZXN0X2lkCi0rICAgIG91dF9wYXRoID0g b3V0X3BhdGguLm9zX3BhdGhfc2VwZXJhdG9yLi5vdXRfbmFtZS4uJy4nLi5HVUkuVGFyZ2V0LmZv cm1hdC52YWx1ZQotKyAgICBpZiBHVUkuVGFyZ2V0Lm9uX2NvbmZsaWN0LnZhbHVlID09ICdjcmVh dGUgdW5pcXVlIGZpbGVuYW1lJyB0aGVuIG91dF9wYXRoID0gZGYuY3JlYXRlX3VuaXF1ZV9maWxl bmFtZShvdXRfcGF0aCkgZW5kCi0rICAgIEVORi5hcmdfc3RyaW5nID0gRU5GLmFyZ19zdHJpbmcu LictLW91dHB1dD0nLi5kZi5zYW5pdGl6ZV9maWxlbmFtZShvdXRfcGF0aCkKLSsgICAgaW1hZ2Vz X3RvX2JsZW5kID0gQ2xlYW5TcGFjZXMoaW1hZ2VzX3RvX2JsZW5kKQotKyAgICAKLSsgICAgcmV0 dXJuIGltYWdlc190b19ibGVuZCwgb3V0X3BhdGgsIGZpcnN0X3JhdwotK2VuZAotKwotK2xvY2Fs IGZ1bmN0aW9uIFVwZGF0ZUFjdGl2ZVByZWZlcmVuY2UoKSAtLXNsaWRlcnMgJiBlbnRyeSBib3hl cyBkbyBub3QgaGF2ZSBhIGNsaWNrL2NoYW5nZWQgY2FsbGJhY2ssIHNvIHRoZWlyIHZhbHVlcyBt dXN0IGJlIHNhdmVkIHRvIHRoZSBhY3RpdmUgcHJlZmVyZW5jZSAnbWFudWFsbHknCi0rICAgIGxv Y2FsIGVuZiA9IHsnZXhwb3N1cmVfd2VpZ2h0Jywnc2F0dXJhdGlvbl93ZWlnaHQnLCdjb250cmFz dF93ZWlnaHQnLCdleHBvc3VyZV9vcHRpbXVtJywnZXhwb3N1cmVfd2lkdGgnfQotKyAgICBmb3Ig XyxkZXNjcmlwdG9yIGluIHBhaXJzKGVuZikgZG8KLSsgICAgICAgIHRlbXAgPSBHVUkuRU5GW2Rl c2NyaXB0b3JdLnZhbHVlCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3Rp dmVfJy4uZGVzY3JpcHRvciwgJ2Zsb2F0JywgdGVtcCkKLSsgICAgZW5kCi0rICAgIHRlbXAgPSBH VUkuVGFyZ2V0LmNvbXByZXNzaW9uX2xldmVsX2pwZy52YWx1ZQotKyAgICB0ZW1wID0gbWF0aC5m bG9vcih0ZW1wKQotKyAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29tcHJl c3Npb25fbGV2ZWxfanBnJywgJ2ludGVnZXInLCB0ZW1wKQotKyAgICB0ZW1wID0gR1VJLlRhcmdl dC5hZGRfdGFncy50ZXh0Ci0rICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9h ZGRfdGFncycsICdzdHJpbmcnLCB0ZW1wKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIFNhdmVU b1ByZWZlcmVuY2UocHJlc2V0KSAtLXNhdmUgdGhlIHByZXNlbnQgdmFsdWVzIG9mIGVuZnVzZSBH VUkgZWxlbWVudHMgdG8gdGhlIHNwZWNpZmllZCAncHJlc2V0JwotKyAgICBVcGRhdGVBY3RpdmVQ cmVmZXJlbmNlKCkKLSsgICAgZm9yIGFyZ3VtZW50LCBhcmdfZGF0YSBpbiBwYWlycyhFTkYuYXJn cykgZG8KLSsgICAgICAgIGxvY2FsIHRlbXAKLSsgICAgICAgIGlmIGFyZ3VtZW50ID09ICdjb250 cmFzdF93aW5kb3dfc2l6ZScgb3IgYXJndW1lbnQgPT0gJ2NvbnRyYXN0X2VkZ2Vfc2NhbGUnIG9y IGFyZ3VtZW50ID09ICdjb250cmFzdF9taW5fY3VydmF0dXJlJyB0aGVuIC0tY29tYm9ib3hlcyBt dXN0IGJlIGhhbmRsZWQgc3BlY2lhbGx5IHZpYSBhbiBpbmRleCB2YWx1ZQotKyAgICAgICAgICAg IHRlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV8nLi5hcmd1bWVudC4uJ19p bmQnLCAnaW50ZWdlcicpCi0rICAgICAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCBw cmVzZXQuLmFyZ3VtZW50Li4nX2luZCcsICdpbnRlZ2VyJywgdGVtcCkKLSsgICAgICAgICAgICB0 ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfJy4uYXJndW1lbnQsIGFyZ19k YXRhLnN0eWxlKQotKyAgICAgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgcHJlc2V0 Li5hcmd1bWVudCwgYXJnX2RhdGEuc3R5bGUsIHRlbXApCi0rICAgICAgICBlbHNlCi0rICAgICAg ICAgICAgdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlXycuLmFyZ3VtZW50 LCBhcmdfZGF0YS5zdHlsZSkKLSsgICAgICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2Qs IHByZXNldC4uYXJndW1lbnQsIGFyZ19kYXRhLnN0eWxlLCB0ZW1wKQotKyAgICAgICAgZW5kCi0r ICAgIGVuZAotKyAgICBkdC5wcmludChzdHJpbmcuZm9ybWF0KF8oInNhdmVkIHRvICVzIiksIHBy ZXNldCkpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gTG9hZEZyb21QcmVmZXJlbmNlKHByZXNl dCkgLS1sb2FkIHZhbHVlcyBmcm9tIHRoZSBzcGVjaWZpZWQgJ3ByZXNldCcgaW50byB0aGUgR1VJ IGVsZW1lbnRzCi0rICAgIGZvciBhcmd1bWVudCwgYXJnX2RhdGEgaW4gcGFpcnMoRU5GLmFyZ3Mp IGRvCi0rICAgIGxvY2FsIHRlbXAKLSsgICAgICAgIGlmIGFyZ3VtZW50ID09ICdjb250cmFzdF93 aW5kb3dfc2l6ZScgb3IgYXJndW1lbnQgPT0gJ2NvbnRyYXN0X2VkZ2Vfc2NhbGUnIG9yIGFyZ3Vt ZW50ID09ICdjb250cmFzdF9taW5fY3VydmF0dXJlJyB0aGVuICAtLWNvbWJvYm94ZXMgbXVzdCBi ZSBoYW5kbGVkIHNwZWNpYWxseSB2aWEgYW4gaW5kZXggdmFsdWUKLSsgICAgICAgICAgICB0ZW1w ID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsIHByZXNldC4uYXJndW1lbnQuLidfaW5kJywgJ2lu dGVnZXInKQotKyAgICAgICAgICAgIEdVSS5FTkZbYXJndW1lbnRdLnNlbGVjdGVkID0gdGVtcAot KyAgICAgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV8nLi5hcmd1bWVu dC4uJ19pbmQnLCAnaW50ZWdlcicsIHRlbXApCi0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAg dGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCBwcmVzZXQuLmFyZ3VtZW50LCBhcmdfZGF0 YS5zdHlsZSkKLSsgICAgICAgICAgICBHVUkuRU5GW2FyZ3VtZW50XS52YWx1ZSA9IHRlbXAKLSsg ICAgICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfJy4uYXJndW1lbnQs IGFyZ19kYXRhLnN0eWxlLCB0ZW1wKQotKyAgICAgICAgZW5kICAgICAKLSsgICAgZW5kCi0rICAg IGR0LnByaW50KHN0cmluZy5mb3JtYXQoXygibG9hZGVkIGZyb20gJXMiKSwgcHJlc2V0KSkKLStl bmQKLSsKLStsb2NhbCBmdW5jdGlvbiByZW1vdmVfdGVtcF9maWxlcyhpbWFnZXNfdG9fcmVtb3Zl KSAtLWRlbGV0ZXMgYWxsIGZpbGVzIHNwZWNpZmllZCBieSB0aGUgaW5wdXQgc3RyaW5nCi0rICAg IGlmIGR0LmNvbmZpZ3VyYXRpb24ucnVubmluZ19vcyA9PSAnd2luZG93cycgdGhlbgotKyAgICAg ICAgZHQuY29udHJvbC5leGVjdXRlKCdkZWwgJy4uaW1hZ2VzX3RvX3JlbW92ZSkKLSsgICAgZWxz ZQotKyAgICAgICAgZHQuY29udHJvbC5leGVjdXRlKCdybSAnLi5pbWFnZXNfdG9fcmVtb3ZlKQot KyAgICBlbmQKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBpbml0aWFsKHN0b3JhZ2UsIGZvcm1h dCwgaW1hZ2VzLCBoaWdoX3F1YWxpdHksIGV4dHJhX2RhdGEpIC0tY2FsbGVkIGJlZm9yZSBleHBv cnQgaGFwcGVucywgZW5zdXJlIGVub3VnaCBpbWFnZXMgc2VsZWN0ZWQgYW5kIGFsbCBuZWNlc2Fy eSBwcm9ncmFtcyBpbnN0YWxsZWQgY29ycmVjdGx5LCBpZiBlcnJvciB0aGVuIGl0IHNldHMgYSBi aXQgaW4gZXh0cmFfZGF0YSBmb3IgdXNlIGJ5IG1haW4gYW5kIGNhbmNlbHMgZXhwb3J0Ci0rICAg IGlmICNpbWFnZXMgPDIgdGhlbgotKyAgICAgICAgdGFibGUuaW5zZXJ0KGV4dHJhX2RhdGEsIDEs IDEpCi0rICAgICAgICByZXR1cm4ge30KLSsgICAgZWxzZQotKyAgICAgICAgUHJlQ2FsbCh7RU5G LEFJUyxFWEZ9KQotKyAgICAgICAgaWYgQUlTLmluc3RhbGxfZXJyb3Igb3IgRU5GLmluc3RhbGxf ZXJyb3Igb3IgRVhGLmluc3RhbGxfZXJyb3IgdGhlbgotKyAgICAgICAgICAgIHRhYmxlLmluc2Vy dChleHRyYV9kYXRhLCAxLCAyKQotKyAgICAgICAgICAgIHJldHVybiB7fQotKyAgICAgICAgZWxz ZQotKyAgICAgICAgICAgIHRhYmxlLmluc2VydChleHRyYV9kYXRhLCAxLCAwKQotKyAgICAgICAg ICAgIHJldHVybiBpbWFnZXMKLSsgICAgICAgIGVuZAotKyAgICBlbmQKLStlbmQKLSsKLStsb2Nh bCBmdW5jdGlvbiBzdXBwb3J0X2Zvcm1hdChzdG9yYWdlLCBmb3JtYXQpIC0tdGVsbHMgZHQgd2Ug b25seSBzdXBwb3J0IFRJRkYgZXhwb3J0IHR5cGUKLSsgICAgbG9jYWwgcmV0ID0gZmFsc2UKLSsg ICAgbG9jYWwgdGVtcCA9IHN0cmluZy5maW5kKGZvcm1hdC5uYW1lLCAnVElGRicpCi0rICAgIGlm IHRlbXAgfj0gbmlsIHRoZW4gcmV0ID0gdHJ1ZSBlbmQKLSsgICAgcmV0dXJuIHJldAotK2VuZAot KwotK2xvY2FsIGZ1bmN0aW9uIHNob3dfc3RhdHVzKHN0b3JhZ2UsIGltYWdlLCBmb3JtYXQsIGZp bGVuYW1lLCBudW1iZXIsIHRvdGFsLCBoaWdoX3F1YWxpdHksIGV4dHJhX2RhdGEpIC0tb3V0cHV0 cyBtZXNzYWdlIHRvIHVzZXIgc2hvd2luZyBzY3JpcHQgZXhwb3J0IHN0YXR1cwotKyAgICBkdC5w cmludChzdHJpbmcuZm9ybWF0KF8oImV4cG9ydCBmb3IgaW1hZ2UgZnVzaW9uICVkIC8gJWQiKSwg bWF0aC5mbG9vcihudW1iZXIpLCBtYXRoLmZsb29yKHRvdGFsKSkpCi0rZW5kCi0rCi0rbG9jYWwg ZnVuY3Rpb24gbWFpbihzdG9yYWdlLCBpbWFnZV90YWJsZSwgZXh0cmFfZGF0YSkKLSsgICAgaWYg ZXh0cmFfZGF0YVsxXSA9PSAxIHRoZW4KLSsgICAgICAgIGR0LnByaW50KF8oJ3RvbyBmZXcgaW1h Z2VzIHNlbGVjdGVkLCBwbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IDIgaW1hZ2VzJykpCi0rICAgICAg ICByZXR1cm4KLSsgICAgZWxzZWlmIGV4dHJhX2RhdGFbMV0gPT0gMiB0aGVuCi0rICAgICAgICBk dC5wcmludChfKCdpbnN0YWxsYXRpb24gZXJyb3IsIHBsZWFzZSB2ZXJpZnkgYmluYXJ5IHBhdGhz IGFyZSBjb3JyZWN0JykpCi0rICAgICAgICByZXR1cm4KLSsgICAgZW5kCi0rICAgIGxvY2FsIGlt YWdlc190b19yZW1vdmUgPSAnJwotKyAgICBsb2NhbCBmaW5hbF9pbWFnZSA9IG5pbAotKyAgICBs b2NhbCBzb3VyY2VfcmF3ID0gbmlsCi0rICAgIGZvciByYXcsZXhwb3J0ZWQgaW4gcGFpcnMoaW1h Z2VfdGFibGUpIGRvIC0tYWRkIHRoZSBleHBvcnRlZCBmaWxlcyB0byBsaXN0IG9mIGltYWdlcyB0 byByZW1vdmUgd2hlbiBjb21wbGV0ZVxmYWlsCi0rICAgICAgICBpbWFnZXNfdG9fcmVtb3ZlID0g aW1hZ2VzX3RvX3JlbW92ZS4uZGYuc2FuaXRpemVfZmlsZW5hbWUoZXhwb3J0ZWQpLi4nICcKLSsg ICAgZW5kCi0rICAgIGlmIEdVSS5hbGlnbi52YWx1ZSB0aGVuIC0taWYgdXNlciBzZWxlY3RlZCB0 byBhbGlnbiBpbWFnZXMgdGhlbiB1cGRhdGUgQUlTIGFyZ3VtZW50cyBhbmQgZXhlY3V0ZSBBSVMg Y29tbWFuZAotKyAgICAgICAgbG9jYWwgam9iID0gZHQuZ3VpLmNyZWF0ZV9qb2IoJ2FsaWduaW5n IGltYWdlcycpCi0rICAgICAgICBpbWFnZV90YWJsZSwgaW1hZ2VzX3RvX3JlbW92ZSwgQUlTLmlt YWdlc19zdHJpbmcgPSBVcGRhdGVBSVNhcmdzKGltYWdlX3RhYmxlLCBpbWFnZXNfdG9fcmVtb3Zl KQotKyAgICAgICAgbG9jYWwgcnVuX2NtZCA9IEJ1aWxkRXhlY3V0ZUNtZChBSVMpCi0rICAgICAg ICBkdC5wcmludF9sb2coIkFJUyBydW4gY29tbWFuZCBpcyAiIC4uIHJ1bl9jbWQpCi0rICAgICAg ICBydW5fY21kID0gc2FuaXRpemVfZGVjaW1hbHMocnVuX2NtZCkKLSsgICAgICAgIGR0LnByaW50 X2xvZygiQUlTIGRlY2ltYWFsIHNhbml0aXplZCBjb21tYW5kIGlzICIgLi4gcnVuX2NtZCkKLSsg ICAgICAgIGxvY2FsIHJlc3AgPSBkc3lzLmV4dGVybmFsX2NvbW1hbmQocnVuX2NtZCkKLSsgICAg ICAgIGpvYi52YWxpZCA9IGZhbHNlCi0rICAgICAgICBpZiByZXNwIH49IDAgdGhlbgotKyAgICAg ICAgICAgIHJlbW92ZV90ZW1wX2ZpbGVzKGltYWdlc190b19yZW1vdmUpCi0rICAgICAgICAgICAg ZHQucHJpbnQoc3RyaW5nLmZvcm1hdChfKCIlcyBmYWlsZWQiKSwgQUlTLm5hbWUpKQotKyAgICAg ICAgICAgIGR0LnByaW50X2Vycm9yKEFJUy5uYW1lIC4uICcgZmFpbGVkJykKLSsgICAgICAgICAg ICByZXR1cm4KLSsgICAgICAgIGVuZAotKyAgICBlbmQKLSsgICAgdmFyaWFudHMgPSB7J2FjdGl2 ZV8nfSAtLWRlZmF1bHQgdG8gJ2FjdGl2ZScgc2V0dGluZ3MgdW5sZXNzIHVzZXIgc2VsZWN0ZWQg dG8gY3JlYXRlIG11bHRpcGxlIGltYWdlIHZhcmlhbnRzIGZyb20gdGhlIHNwZWNpZmllZCBwcmVz ZXQgdHlwZXMKLSsgICAgaWYgR1VJLlByZXNldHMudmFyaWFudHMudmFsdWUgdGhlbgotKyAgICAg ICAgaWYgR1VJLlByZXNldHMudmFyaWFudHNfdHlwZS52YWx1ZSA9PSAnZHJpJyB0aGVuCi0rICAg ICAgICAgICAgdmFyaWFudHMgPSB7J2RyaV8xJywgJ2RyaV8yJywgJ2RyaV8zJ30KLSsgICAgICAg IGVsc2UKLSsgICAgICAgICAgICB2YXJpYW50cyA9IHsnZGZmXzInLCAnZGZmXzInLCAnZGZmXzMn fQotKyAgICAgICAgZW5kCi0rICAgIGVuZAotKyAgICBsb2NhbCBpbWFnZV9udW0gPSAwCi0rICAg IGxvY2FsIGpvYiA9IGR0Lmd1aS5jcmVhdGVfam9iKCdibGVuZGluZyAnLi4jdmFyaWFudHMuLicg aW1hZ2UocyknLCB0cnVlKSAtLWNyZWF0ZSBhIEdVSSBqb2IgYmFyIHRvIGRpc3BsYXkgZW5mdXNl IHByb2dyZXNzCi0rICAgIFVwZGF0ZUFjdGl2ZVByZWZlcmVuY2UoKSAtLWxvYWQgY3VycmVudCBH VUkgdmFsdWVzIGludG8gYWN0aXZlIHByZWZlcmVuY2UgKG9ubHkgYXBwbGllcyB0byBlbGVtZW50 cyB3aXRob3V0IGEgY2xpY2tlZC9jaGFuZ2VkIGNhbGxiYWNrKQotKyAgICBmb3IgeCxwcmVmaXgg aW4gcGFpcnModmFyaWFudHMpIGRvIC0tZm9yIGVhY2ggaW1hZ2UgdG8gYmUgY3JlYXRlZCBsb2Fk IGluIHRoZSBwcmVmZXJlbmNlIHZhbHVlcywgYnVpbGQgYXJndW1lbnRzIHN0cmluZywgb3V0cHV0 IGltYWdlLCBhbmQgcnVuIGNvbW1hbmQgdGhlbiBleGVjdXRlLgotKyAgICAgICAgam9iLnBlcmNl bnQgPSBpbWFnZV9udW0gLygjdmFyaWFudHMpCi0rICAgICAgICBpbWFnZV9udW0gPSBpbWFnZV9u dW0rMQotKyAgICAgICAgRU5GLmltYWdlc19zdHJpbmcsIGZpbmFsX2ltYWdlLCBzb3VyY2VfcmF3 ID0gVXBkYXRlRU5GYXJncyhpbWFnZV90YWJsZSwgcHJlZml4KQotKyAgICAgICAgbG9jYWwgcnVu X2NtZCA9IEJ1aWxkRXhlY3V0ZUNtZChFTkYpCi0rICAgICAgICBkdC5wcmludF9sb2coIkVORiBy dW4gY29tbWFuZCBpcyAiIC4uIHJ1bl9jbWQpCi0rICAgICAgICBydW5fY21kID0gc2FuaXRpemVf ZGVjaW1hbHMocnVuX2NtZCkKLSsgICAgICAgIGR0LnByaW50X2xvZygiRU5GIGRlY2ltYWFsIHNh bml0aXplZCBjb21tYW5kIGlzICIgLi4gcnVuX2NtZCkKLSsgICAgICAgIGxvY2FsIHJlc3AgPSBk c3lzLmV4dGVybmFsX2NvbW1hbmQocnVuX2NtZCkKLSsgICAgICAgIGlmIHJlc3Agfj0gMCB0aGVu Ci0rICAgICAgICAgICAgcmVtb3ZlX3RlbXBfZmlsZXMoaW1hZ2VzX3RvX3JlbW92ZSkKLSsgICAg ICAgICAgICBkdC5wcmludF9lcnJvcihFTkYubmFtZS4uJyBmYWlsZWQnKQotKyAgICAgICAgICAg IGR0LnByaW50KHN0cmluZy5mb3JtYXQoXygiJXMgZmFpbGVkIiksIEVORi5uYW1lKSkKLSsgICAg ICAgICAgICBqb2IudmFsaWQgPSBmYWxzZQotKyAgICAgICAgICAgIHJldHVybgotKyAgICAgICAg ZW5kCi0rICAgICAgICAKLSsgICAgICAgIC0tY29weSBleGlmIGRhdGEgZnJvbSBvcmlnaW5hbCBm aWxlCi0rICAgICAgICBydW5fY21kID0gRVhGLmJpbi4uJyAtVGFnc0Zyb21GaWxlICcuLmRmLnNh bml0aXplX2ZpbGVuYW1lKHNvdXJjZV9yYXcucGF0aC4ub3NfcGF0aF9zZXBlcmF0b3IuLnNvdXJj ZV9yYXcuZmlsZW5hbWUpLi4nIC1leGlmOmFsbCAtLXN1YmlmZDphbGwgLW92ZXJ3cml0ZV9vcmln aW5hbCAnLi5kZi5zYW5pdGl6ZV9maWxlbmFtZShmaW5hbF9pbWFnZSkKLSsgICAgICAgIC0tIHJl cGxhY2UgY29tbWEgZGVjaW1hbCBzZXBhcmF0b3Igd2l0aCBwZXJpb2QKLSsgICAgICAgIGR0LnBy aW50X2xvZygiRVhGIHJ1biBjb21tYW5kIGlzICIgLi4gcnVuX2NtZCkKLSsgICAgICAgIHJ1bl9j bWQgPSBzYW5pdGl6ZV9kZWNpbWFscyhydW5fY21kKQotKyAgICAgICAgZHQucHJpbnRfbG9nKCJF WEYgZGVjaW1hYWwgc2FuaXRpemVkIGNvbW1hbmQgaXMgIiAuLiBydW5fY21kKQotKyAgICAgICAg cmVzcCA9IGRzeXMuZXh0ZXJuYWxfY29tbWFuZChydW5fY21kKQotKyAgICAgICAgCi0rICAgICAg ICAKLSsgICAgICAgIGlmIEdVSS5UYXJnZXQuYXV0b19pbXBvcnQudmFsdWUgdGhlbiAtLWltcG9y dCBpbWFnZSBpbnRvIGR0IGlmIHNwZWNpZmllZAotKyAgICAgICAgICAgIGxvY2FsIGltcG9ydGVk ID0gZHQuZGF0YWJhc2UuaW1wb3J0KGZpbmFsX2ltYWdlKQotKyAgICAgICAgICAgIGR0LnByaW50 X2xvZygiaW1hZ2UgaW1wb3J0ZWQiKQotKyAgICAgICAgICAgIGlmIEdVSS5UYXJnZXQuYXBwbHlf c3R5bGUuc2VsZWN0ZWQgPiAxIHRoZW4gLS1hcHBseSBzcGVjaWZpZWQgc3R5bGUgdG8gaW1wb3J0 ZWQgaW1hZ2UKLSsgICAgICAgICAgICAgICAgbG9jYWwgc2V0X3N0eWxlID0gc3R5bGVzW0dVSS5U YXJnZXQuYXBwbHlfc3R5bGUuc2VsZWN0ZWQgLSAxXQotKyAgICAgICAgICAgICAgICBkdC5zdHls ZXMuYXBwbHkoc2V0X3N0eWxlICwgaW1wb3J0ZWQpCi0rICAgICAgICAgICAgZW5kCi0rICAgICAg ICAgICAgaWYgR1VJLlRhcmdldC5jb3B5X3RhZ3MudmFsdWUgdGhlbiAtLWNvcHkgdGFncyBmcm9t IHNvdXJjZSBpbWFnZQotKyAgICAgICAgICAgICAgICBsb2NhbCBhbGxfdGFncyA9IGR0LnRhZ3Mu Z2V0X3RhZ3Moc291cmNlX3JhdykgCi0rICAgICAgICAgICAgICAgIGZvciBfLHRhZyBpbiBwYWly cyhhbGxfdGFncykgZG8KLSsgICAgICAgICAgICAgICAgICAgIGlmIHN0cmluZy5tYXRjaCh0YWcu bmFtZSwgJ2Rhcmt0YWJsZXwnKSA9PSBuaWwgdGhlbiBkdC50YWdzLmF0dGFjaCh0YWcsIGltcG9y dGVkKSBlbmQKLSsgICAgICAgICAgICAgICAgZW5kCi0rICAgICAgICAgICAgZW5kCi0rICAgICAg ICAgICAgbG9jYWwgc2V0X3RhZyA9IEdVSS5UYXJnZXQuYWRkX3RhZ3MudGV4dAotKyAgICAgICAg ICAgIGlmIHNldF90YWcgfj0gbmlsIHRoZW4gLS1hZGQgYWRkaXRpb25hbCB1c2VyLXNwZWNpZmll ZCB0YWdzCi0rICAgICAgICAgICAgICAgIGZvciB0YWcgaW4gc3RyaW5nLmdtYXRjaChzZXRfdGFn LCAnW14sXSsnKSBkbwotKyAgICAgICAgICAgICAgICAgICAgdGFnID0gQ2xlYW5TcGFjZXModGFn KQotKyAgICAgICAgICAgICAgICAgICAgdGFnID0gZHQudGFncy5jcmVhdGUodGFnKQotKyAgICAg ICAgICAgICAgICAgICAgZHQudGFncy5hdHRhY2godGFnLCBpbXBvcnRlZCkgCi0rICAgICAgICAg ICAgICAgIGVuZAotKyAgICAgICAgICAgIGVuZAotKyAgICAgICAgZW5kCi0rICAgIGVuZAotKyAg ICByZW1vdmVfdGVtcF9maWxlcyhpbWFnZXNfdG9fcmVtb3ZlKQotKyAgICBqb2IudmFsaWQgPSBm YWxzZQotKyAgICBkdC5wcmludCgnaW1hZ2UgZnVzaW9uIHByb2Nlc3MgY29tcGxldGUnKQotK2Vu ZAotKwotK2xvY2FsIGZ1bmN0aW9uIGRlc3Ryb3koKQotKyAgICBkdC5kZXN0cm95X3N0b3JhZ2Uo J21vZHVsZV9lbmZ1c2VBZHZhbmNlZCcpCi0rZW5kCi0rCi0rLS1HVUktLQotK3N0YWNrX2NvbXBy ZXNzaW9uID0gZHQubmV3X3dpZGdldCgnc3RhY2snKXt9Ci0rbG9jYWwgbGFiZWxfQUlTX29wdGlv bnM9IGR0Lm5ld193aWRnZXQoJ3NlY3Rpb25fbGFiZWwnKXsKLSsgICAgbGFiZWwgPSBfKCdpbWFn ZSBhbGlnbiBvcHRpb25zJykKLSt9Ci0rR1VJLmFsaWduID0gZHQubmV3X3dpZGdldCgnY2hlY2tf YnV0dG9uJyl7Ci0rICAgIGxhYmVsID0gXygnYWxpZ24gaW1hZ2VzJyksCi0rICAgIHZhbHVlID0g ZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfYWxpZ24nLCAnYm9vbCcpLAotKyAgICB0 b29sdGlwID0gXygnYXV0b21hdGljYWxseSBhbGlnbiBpbWFnZXMgcHJpb3IgdG8gZW5mdXNlJyks Ci0rICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIGR0LnBy ZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9hbGlnbicsICdib29sJywgc2VsZi52YWx1ZSkg Ci0rICAgICAgICBmb3IgXyx3aWRnZXQgaW4gcGFpcnMoR1VJLkFJUykgZG8KLSsgICAgICAgICAg ICB3aWRnZXQuc2Vuc2l0aXZlID0gc2VsZi52YWx1ZQotKyAgICAgICAgZW5kCi0rICAgIGVuZCwK LSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVlID0gdHJ1ZSBl bmQKLSt9Ci0rR1VJLkFJUy5yYWRpYWxfZGlzdG9ydGlvbiA9IGR0Lm5ld193aWRnZXQoJ2NoZWNr X2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8oJ29wdGltaXplIHJhZGlhbCBkaXN0b3J0aW9uJyks Ci0rICAgIHZhbHVlID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfcmFkaWFsX2Rp c3RvcnRpb24nLCAnYm9vbCcpLAotKyAgICB0b29sdGlwID0gXygnb3B0aW1pemUgcmFkaWFsIGRp c3RvcnRpb24gZm9yIGFsbCBpbWFnZXMsIFxuZXhjZXB0IGZvciBmaXJzdCcpLAotKyAgICBjbGlj a2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAn YWN0aXZlX3JhZGlhbF9kaXN0b3J0aW9uJywgJ2Jvb2wnLCBzZWxmLnZhbHVlKSBlbmQsCi0rICAg IHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi52YWx1ZSA9IHRydWUgZW5kCi0r fQotK0dVSS5BSVMub3B0aW1pemVfZmllbGQgPSBkdC5uZXdfd2lkZ2V0KCdjaGVja19idXR0b24n KXsKLSsgICAgbGFiZWwgPSBfKCdvcHRpbWl6ZSBmaWVsZCBvZiB2aWV3JyksIAotKyAgICB2YWx1 ZSA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX29wdGltaXplX2ZpZWxkJywgJ2Jv b2wnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ29wdGltaXplIGZpZWxkIG9mIHZpZXcgZm9yIGFsbCBp bWFnZXMsIGV4Y2VwdCBmb3IgZmlyc3QuIFxuVXNlZnVsIGZvciBhbGlnbmluZyBmb2N1cyBzdGFj a3MgKERGRikgd2l0aCBzbGlnaHRseSBcbmRpZmZlcmVudCBtYWduaWZpY2F0aW9uLicpLAotKyAg ICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgZHQucHJlZmVyZW5jZXMud3JpdGUo bW9kLCAnYWN0aXZlX29wdGltaXplX2ZpZWxkJywgJ2Jvb2wnLCBzZWxmLnZhbHVlKSBlbmQsCi0r ICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi52YWx1ZSA9IHRydWUgZW5k Ci0rfQotK0dVSS5BSVMub3B0aW1pemVfaW1hZ2VfY2VudGVyID0gZHQubmV3X3dpZGdldCgnY2hl Y2tfYnV0dG9uJyl7Ci0rICAgIGxhYmVsID0gXygnb3B0aW1pemUgaW1hZ2UgY2VudGVyIHNoaWZ0 JyksIAotKyAgICB2YWx1ZSA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX29wdGlt aXplX2ltYWdlX2NlbnRlcicsICdib29sJyksCi0rICAgIHRvb2x0aXAgPSBfKCdvcHRpbWl6ZSBp bWFnZSBjZW50ZXIgc2hpZnQgZm9yIGFsbCBpbWFnZXMsIFxuZXhjZXB0IGZvciBmaXJzdC4nKSwK LSsgICAgY2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIGR0LnByZWZlcmVuY2VzLndy aXRlKG1vZCwgJ2FjdGl2ZV9vcHRpbWl6ZV9pbWFnZV9jZW50ZXInLCAnYm9vbCcsIHNlbGYudmFs dWUpIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVl ID0gdHJ1ZSBlbmQKLSt9Ci0rR1VJLkFJUy5hdXRvX2Nyb3AgPSBkdC5uZXdfd2lkZ2V0KCdjaGVj a19idXR0b24nKXsKLSsgICAgbGFiZWwgPSBfKCdhdXRvIGNyb3AnKSwgCi0rICAgIHZhbHVlID0g ZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfYXV0b19jcm9wJywgJ2Jvb2wnKSwKLSsg ICAgdG9vbHRpcCA9IF8oJ2F1dG8gY3JvcCB0aGUgaW1hZ2UgdG8gdGhlIGFyZWEgY292ZXJlZCBi eSBhbGwgaW1hZ2VzLicpLAotKyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikg ZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2F1dG9fY3JvcCcsICdib29sJywgc2Vs Zi52YWx1ZSkgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIHNlbGYu dmFsdWUgPSB0cnVlIGVuZAotK30KLStHVUkuQUlTLmRpc3RvcnRpb24gPSBkdC5uZXdfd2lkZ2V0 KCdjaGVja19idXR0b24nKXsKLSsgICAgbGFiZWwgPSBfKCdsb2FkIGRpc3RvcnRpb24gZnJvbSBs ZW5zIGRhdGFiYXNlJyksIAotKyAgICB2YWx1ZSA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAn YWN0aXZlX2Rpc3RvcnRpb24nLCAnYm9vbCcpLAotKyAgICB0b29sdGlwID0gXygndHJ5IHRvIGxv YWQgZGlzdG9ydGlvbiBpbmZvcm1hdGlvbiBmcm9tIGxlbnMgZGF0YWJhc2UnKSwKLSsgICAgY2xp Y2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwg J2FjdGl2ZV9kaXN0b3J0aW9uJywgJ2Jvb2wnLCBzZWxmLnZhbHVlKSBlbmQsCi0rICAgIHJlc2V0 X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi52YWx1ZSA9IHRydWUgZW5kCi0rfQotK0dV SS5BSVMuZ3B1ID0gZHQubmV3X3dpZGdldCgnY2hlY2tfYnV0dG9uJyl7Ci0rICAgIGxhYmVsID0g XygndXNlIGdwdScpLCAKLSsgICAgdmFsdWUgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2Fj dGl2ZV9ncHUnLCAnYm9vbCcpLAotKyAgICB0b29sdGlwID0gXygndXNlIGdwdSBkdXJpbmcgYWxp Z25tZW50JyksCi0rICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBkdC5wcmVm ZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfZ3B1JywgJ2Jvb2wnLCBzZWxmLnZhbHVlKSBlbmQs Ci0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi52YWx1ZSA9IHRydWUg ZW5kCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9ncmlkX3Np emVfaW5kJywgJ2ludGVnZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIDkpIHRoZW4gdGVt cCA9IDUgZW5kIAotK0dVSS5BSVMuZ3JpZF9zaXplID0gZHQubmV3X3dpZGdldCgnY29tYm9ib3gn KXsKLSsgICAgbGFiZWwgPSBfKCdpbWFnZSBncmlkIHNpemUnKSwgCi0rICAgIHRvb2x0aXAgPSBf KCdicmVhayBpbWFnZSBpbnRvIGEgcmVjdGFuZ3VsYXIgZ3JpZCBcbmFuZCBhdHRlbXB0IHRvIGZp bmQgbnVtIGNvbnRyb2wgcG9pbnRzIGluIGVhY2ggc2VjdGlvbi5cbmRlZmF1bHQ6ICg1eDUpJyks Ci0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcn LCc4JywnOScsCi0rICAgIGNoYW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICAg ICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2dyaWRfc2l6ZScsICdpbnRlZ2Vy Jywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3Rp dmVfZ3JpZF9zaXplX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kLAot KyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2VsZi5zZWxl Y3RlZCA9IDUKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9ncmlk X3NpemUnLCAnaW50ZWdlcicsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMu d3JpdGUobW9kLCAnYWN0aXZlX2dyaWRfc2l6ZV9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0 ZWQpCi0rICAgIGVuZAotK30gCi0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0 aXZlX2NvbnRyb2xfcG9pbnRzX2luZCcsICdpbnRlZ2VyJykKLStpZiBub3QgSW5SYW5nZSh0ZW1w LCAxLCA5KSB0aGVuIHRlbXAgPSA4IGVuZCAKLStHVUkuQUlTLmNvbnRyb2xfcG9pbnRzID0gZHQu bmV3X3dpZGdldCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdjb250cm9sIHBvaW50cy9n cmlkJyksIAotKyAgICB0b29sdGlwID0gXygnbnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzIChwZXIg Z3JpZCwgc2VlIG9wdGlvbiAtZykgXG50byBjcmVhdGUgYmV0d2VlbiBhZGphY2VudCBpbWFnZXMg XG5kZWZhdWx0OiAoOCkuJyksCi0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJzEnLCcyJywn MycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsICAgICAgICAgICAgIAotKyAgICBjaGFuZ2VkX2Nh bGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1v ZCwgJ2FjdGl2ZV9jb250cm9sX3BvaW50cycsICdpbnRlZ2VyJywgc2VsZi52YWx1ZSkgCi0rICAg ICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29udHJvbF9wb2ludHNfaW5k JywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQsCi0rICAgIHJlc2V0X2NhbGxi YWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVkID0gOAotKyAgICAg ICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyb2xfcG9pbnRzJywgJ2lu dGVnZXInLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwg J2FjdGl2ZV9jb250cm9sX3BvaW50c19pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0r ICAgIGVuZAotK30gCi0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2Nv bnRyb2xfcG9pbnRzX3JlbW92ZV9pbmQnLCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVt cCwgMSwgOSkgdGhlbiB0ZW1wID0gMyBlbmQgCi0rR1VJLkFJUy5jb250cm9sX3BvaW50c19yZW1v dmUgPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2JveCcpewotKyAgICBsYWJlbCA9IF8oJ3JlbW92ZSBj b250cm9sIHBvaW50cyB3aXRoIGVycm9yJyksIAotKyAgICB0b29sdGlwID0gXygncmVtb3ZlIGFs bCBjb250cm9sIHBvaW50cyB3aXRoIGFuIGVycm9yIGhpZ2hlciBcbnRoYW4gbnVtIHBpeGVscyBc bmRlZmF1bHQ6ICgzKScpLAotKyAgICBzZWxlY3RlZCA9IHRlbXAsCi0rICAgICcxJywnMicsJzMn LCc0JywnNScsJzYnLCc3JywnOCcsJzknLCAgICAgICAgICAgICAKLSsgICAgY2hhbmdlZF9jYWxs YmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2Qs ICdhY3RpdmVfY29udHJvbF9wb2ludHNfcmVtb3ZlJywgJ2ludGVnZXInLCBzZWxmLnZhbHVlKSAK LSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cm9sX3BvaW50 c19yZW1vdmVfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQsCi0rICAg IHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVk ID0gMwotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyb2xf cG9pbnRzX3JlbW92ZScsICdpbnRlZ2VyJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVm ZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29udHJvbF9wb2ludHNfcmVtb3ZlX2luZCcsICdp bnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJl bmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9jb3JyZWxhdGlvbl9pbmQnLCAnaW50ZWdlcicpCi0raWYg bm90IEluUmFuZ2UodGVtcCwgMSwgMTApIHRoZW4gdGVtcCA9IDkgZW5kIAotK0dVSS5BSVMuY29y cmVsYXRpb24gID0gZHQubmV3X3dpZGdldCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdj b3JyZWxhdGlvbiB0aHJlc2hvbGQgZm9yIGNvbnRyb2wgcG9pbnRzJyksIAotKyAgICB0b29sdGlw ID0gXygnY29ycmVsYXRpb24gdGhyZXNob2xkIGZvciBpZGVudGlmeWluZyBcbmNvbnRyb2wgcG9p bnRzIFxuZGVmYXVsdDogKDAuOSkuJyksCi0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJzAu MScsJzAuMicsJzAuMycsJzAuNCcsJzAuNScsJzAuNicsJzAuNycsJzAuOCcsJzAuOScsJzEuMCcs ICAgICAKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBk dC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29ycmVsYXRpb24nLCAnZmxvYXQnLCBz ZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9j b3JyZWxhdGlvbl9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZCwKLSsg ICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIHNlbGYuc2VsZWN0 ZWQgPSA5Ci0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29ycmVs YXRpb24nLCAnZmxvYXQnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndy aXRlKG1vZCwgJ2FjdGl2ZV9jb3JyZWxhdGlvbl9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0 ZWQpCi0rICAgIGVuZAotK30gCi0rbG9jYWwgbGFiZWxfRU5GX29wdGlvbnM9IGR0Lm5ld193aWRn ZXQoJ3NlY3Rpb25fbGFiZWwnKXsKLSsgICAgbGFiZWwgPSBfKCdpbWFnZSBmdXNpb24gb3B0aW9u cycpCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9leHBvc3Vy ZV93ZWlnaHQnLCAnZmxvYXQnKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDAsIDEpIHRoZW4gdGVt cCA9IDEgZW5kCi0rR1VJLkVORi5leHBvc3VyZV93ZWlnaHQgPSBkdC5uZXdfd2lkZ2V0KCdzbGlk ZXInKXsKLSsgICAgbGFiZWwgPSBfKCdleHBvc3VyZSB3ZWlnaHQnKSwKLSsgICAgdG9vbHRpcCA9 IF8oJ3NldCB0aGUgcmVsYXRpdmUgd2VpZ2h0IG9mIHRoZSB3ZWxsLWV4cG9zZWRuZXNzIGNyaXRl cmlvbiBcbmFzIGRlZmluZWQgYnkgdGhlIGNob3NlbiBleHBvc3VyZSB3ZWlnaHQgZnVuY3Rpb24u IFxuaW5jcmVhc2luZyB0aGlzIHdlaWdodCByZWxhdGl2ZSB0byB0aGUgb3RoZXJzIHdpbGxcbiBt YWtlIHdlbGwtZXhwb3NlZCBwaXhlbHMgY29udHJpYnV0ZSBtb3JlIHRvXG4gdGhlIGZpbmFsIG91 dHB1dC4gXG5kZWZhdWx0OiAoMS4wKScpLAotKyAgICBoYXJkX21pbiA9IDAsCi0rICAgIGhhcmRf bWF4ID0gMSwKLSsgICAgdmFsdWUgPSB0ZW1wLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0 aW9uKHNlbGYpIAotKyAgICAgICAgc2VsZi52YWx1ZSA9IDEKLSsgICAgZW5kCi0rfQotK3RlbXAg PSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9zYXR1cmF0aW9uX3dlaWdodCcsICdm bG9hdCcpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMCwgMSkgdGhlbiB0ZW1wID0gLjIgZW5kCi0r R1VJLkVORi5zYXR1cmF0aW9uX3dlaWdodCA9IGR0Lm5ld193aWRnZXQoJ3NsaWRlcicpewotKyAg ICBsYWJlbCA9IF8oJ3NhdHVyYXRpb24gd2VpZ2h0JyksCi0rICAgIHRvb2x0aXAgPSBfKCdzZXQg dGhlIHJlbGF0aXZlIHdlaWdodCBvZiBoaWdoLXNhdHVyYXRpb24gcGl4ZWxzLiBcbmluY3JlYXNp bmcgdGhpcyB3ZWlnaHQgbWFrZXMgcGl4ZWxzIHdpdGggaGlnaCBcbnNhdHVyYXRpb24gY29udHJp YnV0ZSBtb3JlIHRvIHRoZSBmaW5hbCBvdXRwdXQuIFxuZGVmYXVsdDogKDAuMiknKSwKLSsgICAg aGFyZF9taW4gPSAwLAotKyAgICBoYXJkX21heCA9IDEsCi0rICAgIHZhbHVlID0gdGVtcCwKLSsg ICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIHNlbGYudmFsdWUg PSAwLjIKLSsgICAgZW5kCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2Fj dGl2ZV9jb250cmFzdF93ZWlnaHQnLCAnZmxvYXQnKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDAs IDEpIHRoZW4gdGVtcCA9IDAgZW5kCi0rR1VJLkVORi5jb250cmFzdF93ZWlnaHQgPSBkdC5uZXdf d2lkZ2V0KCdzbGlkZXInKXsKLSsgICAgbGFiZWwgPSBfKCdjb250cmFzdCB3ZWlnaHQnKSwKLSsg ICAgdG9vbHRpcCA9IF8oJ3NldHMgdGhlIHJlbGF0aXZlIHdlaWdodCBvZiBoaWdoIGxvY2FsLWNv bnRyYXN0IHBpeGVscy4gXG5kZWZhdWx0OiAoMC4wKS4nKSwKLSsgICAgaGFyZF9taW4gPSAwLAot KyAgICBoYXJkX21heCA9IDEsCi0rICAgIHZhbHVlID0gdGVtcCwKLSsgICAgcmVzZXRfY2FsbGJh Y2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIHNlbGYudmFsdWUgPSAwCi0rICAgIGVuZAot K30KLSt0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfZXhwb3N1cmVfb3B0 aW11bScsICdmbG9hdCcpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMCwgMSkgdGhlbiB0ZW1wID0g MC41IGVuZAotK0dVSS5FTkYuZXhwb3N1cmVfb3B0aW11bSA9IGR0Lm5ld193aWRnZXQoJ3NsaWRl cicpewotKyAgICBsYWJlbCA9IF8oJ2V4cG9zdXJlIG9wdGltdW0nKSwKLSsgICAgdG9vbHRpcCA9 IF8oJ2RldGVybWluZSBhdCB3aGF0IG5vcm1hbGl6ZWQgZXhwb3N1cmUgdmFsdWVcbiB0aGUgb3B0 aW11bSBleHBvc3VyZSBvZiB0aGUgaW5wdXQgaW1hZ2VzXG4gaXMuIHRoaXMgaXMsIHNldCB0aGUg cG9zaXRpb24gb2YgdGhlIG1heGltdW1cbiBvZiB0aGUgZXhwb3N1cmUgd2VpZ2h0IGN1cnZlLiB1 c2UgdGhpcyBcbm9wdGlvbiB0byBmaW5lLXR1bmUgZXhwb3N1cmUgd2VpZ2h0aW5nLiBcbmRlZmF1 bHQ6ICgwLjUpJyksCi0rICAgIGhhcmRfbWluID0gMCwKLSsgICAgaGFyZF9tYXggPSAxLAotKyAg ICB2YWx1ZSA9IHRlbXAsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0r ICAgICAgICBzZWxmLnZhbHVlID0gMC41Ci0rICAgIGVuZAotK30KLSt0ZW1wID0gZHQucHJlZmVy ZW5jZXMucmVhZChtb2QsICdhY3RpdmVfZXhwb3N1cmVfd2lkdGgnLCAnZmxvYXQnKQotK2lmIG5v dCBJblJhbmdlKHRlbXAsIDAsIDEpIHRoZW4gdGVtcCA9IDAuMiBlbmQKLStHVUkuRU5GLmV4cG9z dXJlX3dpZHRoID0gZHQubmV3X3dpZGdldCgnc2xpZGVyJyl7Ci0rICAgIGxhYmVsID0gXygnZXhw b3N1cmUgd2lkdGgnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ3NldCB0aGUgY2hhcmFjdGVyaXN0aWMg d2lkdGggKEZXSE0pIG9mIHRoZSBleHBvc3VyZSBcbndlaWdodCBmdW5jdGlvbi4gbG93IG51bWJl cnMgZ2l2ZSBsZXNzIHdlaWdodCB0byBcbnBpeGVscyB0aGF0IGFyZSBmYXIgZnJvbSB0aGUgdXNl ci1kZWZpbmVkIFxub3B0aW11bSBhbmQgdmljZSB2ZXJzYS4gdXNlIHRoaXMgb3B0aW9uIHRvIFxu ZmluZS10dW5lIGV4cG9zdXJlIHdlaWdodGluZy4gXG5kZWZhdWx0OiAoMC4yKScpLAotKyAgICBo YXJkX21pbiA9IDAsCi0rICAgIGhhcmRfbWF4ID0gMSwKLSsgICAgdmFsdWUgPSB0ZW1wLAotKyAg ICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2VsZi52YWx1ZSA9 IDAuMgotKyAgICBlbmQKLSt9Ci0rR1VJLkVORi5oYXJkX21hc2tzID0gZHQubmV3X3dpZGdldCgn Y2hlY2tfYnV0dG9uJyl7Ci0rICAgIGxhYmVsID0gXygnaGFyZCBtYXNrJyksIAotKyAgICB2YWx1 ZSA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2hhcmRfbWFza3MnLCAnYm9vbCcp LAotKyAgICB0b29sdGlwID0gXygnZm9yY2UgaGFyZCBibGVuZCBtYXNrcyBvbiB0aGUgZmluZXN0 IHNjYWxlLiB0aGlzIGF2b2lkcyBcbmF2ZXJhZ2luZyBvZiBmaW5lIGRldGFpbHMgKG9ubHkpLCBh dCB0aGUgZXhwZW5zZSBcbm9mIGluY3JlYXNpbmcgdGhlIG5vaXNlLiB0aGlzIGltcHJvdmVzIHRo ZSBcbnNoYXJwbmVzcyBvZiBmb2N1cyBzdGFja3MgY29uc2lkZXJhYmx5LlxuZGVmYXVsdCAoc29m dCBtYXNrKScpLCAgIAotKyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgZHQu cHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2hhcmRfbWFza3MnLCAnYm9vbCcsIHNlbGYu dmFsdWUpIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZh bHVlID0gZmFsc2UgZW5kCi0rfQotK0dVSS5FTkYuc2F2ZV9tYXNrcyA9IGR0Lm5ld193aWRnZXQo J2NoZWNrX2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8oJ3NhdmUgbWFza3MnKSwgCi0rICAgIHZh bHVlID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfc2F2ZV9tYXNrcycsICdib29s JyksCi0rICAgIHRvb2x0aXAgPSBfKCdzYXZlIHRoZSBnZW5lcmF0ZWQgd2VpZ2h0IG1hc2tzIHRv IHlvdXIgaG9tZSBkaXJlY3RvcnksXG5lbmJsZW5kIHNhdmVzIG1hc2tzIGFzIDggYml0IGdyYXlz Y2FsZSwgXG5pLmUuIHNpbmdsZSBjaGFubmVsIGltYWdlcy4gXG5mb3IgYWNjdXJhY3kgd2UgcmVj b21tZW5kIHRvIGNob29zZSBhIGxvc3NsZXNzIGZvcm1hdC4nKSwgIAotKyAgICBjbGlja2VkX2Nh bGxiYWNrID0gZnVuY3Rpb24oc2VsZikgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZl X3NhdmVfbWFza3MnLCAnYm9vbCcsIHNlbGYudmFsdWUpIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJh Y2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVlID0gZmFsc2UgZW5kCi0rfQotK3RlbXAgPSBk dC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF93aW5kb3dfc2l6ZV9pbmQn LCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgOCkgdGhlbiB0ZW1wID0gMyBl bmQgCi0rR1VJLkVORi5jb250cmFzdF93aW5kb3dfc2l6ZSA9IGR0Lm5ld193aWRnZXQoJ2NvbWJv Ym94Jyl7Ci0rICAgIGxhYmVsID0gXygnY29udHJhc3Qgd2luZG93IHNpemUnKSwgCi0rICAgIHRv b2x0aXAgPSBfKCdzZXQgdGhlIHdpbmRvdyBzaXplIGZvciBsb2NhbCBjb250cmFzdCBhbmFseXNp cy4gXG50aGUgd2luZG93IHdpbGwgYmUgYSBzcXVhcmUgb2Ygc2l6ZSDDlyBzaXplIHBpeGVscy4g XG5pZiBnaXZlbiBhbiBldmVuIHNpemUsIEVuZnVzZSB3aWxsIFxuYXV0b21hdGljYWxseSB1c2Ug dGhlIG5leHQgb2RkIG51bWJlci5cbmZvciBjb250cmFzdCBhbmFseXNpcyBzaXplIHZhbHVlcyBs YXJnZXIgXG50aGFuIDUgcGl4ZWxzIG1pZ2h0IHJlc3VsdCBpbiBhIFxuYmx1cnJ5IGNvbXBvc2l0 ZSBpbWFnZS4gdmFsdWVzIG9mIDMgYW5kIFxuNSBwaXhlbHMgaGF2ZSBnaXZlbiBnb29kIHJlc3Vs dHMgb24gXG5mb2N1cyBzdGFja3MuIFxuZGVmYXVsdDogKDUpIHBpeGVscycpLAotKyAgICBzZWxl Y3RlZCA9IHRlbXAsCi0rICAgICczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnMTAnLAotKyAg ICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAgICAgIGR0LnByZWZlcmVu Y2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF93aW5kb3dfc2l6ZScsICdpbnRlZ2VyJywg c2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVf Y29udHJhc3Rfd2luZG93X3NpemVfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAg ICBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBz ZWxmLnNlbGVjdGVkID0gMwotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0 aXZlX2NvbnRyYXN0X3dpbmRvd19zaXplJywgJ2ludGVnZXInLCBzZWxmLnZhbHVlKSAKLSsgICAg ICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF93aW5kb3dfc2l6 ZV9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZAotK30gCi0rdGVtcCA9 IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2NvbnRyYXN0X2VkZ2Vfc2NhbGVfaW5k JywgJ2ludGVnZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIDYpIHRoZW4gdGVtcCA9IDEg ZW5kIAotK0dVSS5FTkYuY29udHJhc3RfZWRnZV9zY2FsZSA9IGR0Lm5ld193aWRnZXQoJ2NvbWJv Ym94Jyl7Ci0rICAgIGxhYmVsID0gXygnY29udHJhc3QgZWRnZSBzY2FsZScpLCAKLSsgICAgdG9v bHRpcCA9IF8oJ2Egbm9uLXplcm8gdmFsdWUgZm9yIEVER0UtU0NBTEUgc3dpdGNoZXMgb24gdGhl IFxuTGFwbGFjaWFuLW9mLUdhdXNzaWFuIChMb0cpIGVkZ2UgZGV0ZWN0aW9uIGFsZ29yaXRobS5c biBlZGFnZS1zY2FsZSBpcyB0aGUgcmFkaXVzIG9mIHRoZSBHYXVzc2lhbiB1c2VkIFxuaW4gdGhl IHNlYXJjaCBmb3IgZWRnZXMuIGEgcG9zaXRpdmUgTENFLVNDQUxFIFxudHVybnMgb24gbG9jYWwg Y29udHJhc3QgZW5oYW5jZW1lbnQgKExDRSkgXG5iZWZvcmUgdGhlIExvRyBlZGdlIGRldGVjdGlv bi4gXG5EZWZhdWx0OiAoMC4wKSBwaXhlbHMuJyksCi0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsg ICAgJzAuMCcsJzAuMScsJzAuMicsJzAuMycsJzAuNCcsJzAuNScsCi0rICAgIGNoYW5nZWRfY2Fs bGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9k LCAnYWN0aXZlX2NvbnRyYXN0X2VkZ2Vfc2NhbGUnLCAnZmxvYXQnLCBzZWxmLnZhbHVlKSAKLSsg ICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF9lZGdlX3Nj YWxlX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kLAotKyAgICByZXNl dF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2VsZi5zZWxlY3RlZCA9IDEK LSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF9lZGdl X3NjYWxlJywgJ2Zsb2F0Jywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53 cml0ZShtb2QsICdhY3RpdmVfY29udHJhc3RfZWRnZV9zY2FsZV9pbmQnLCAnaW50ZWdlcicsIHNl bGYuc2VsZWN0ZWQpCi0rICAgIGVuZAotK30KLSt0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZCht b2QsICdhY3RpdmVfY29udHJhc3RfbWluX2N1cnZhdHVyZV9pbmQnLCAnaW50ZWdlcicpCi0raWYg bm90IEluUmFuZ2UodGVtcCwgMSwgMTEpIHRoZW4gdGVtcCA9IDEgZW5kIAotK0dVSS5FTkYuY29u dHJhc3RfbWluX2N1cnZhdHVyZSA9IGR0Lm5ld193aWRnZXQoJ2NvbWJvYm94Jyl7Ci0rICAgIGxh YmVsID0gXygnY29udHJhc3QgbWluIGN1cnZhdHVyZSBbJV0nKSwKLSsgICAgdG9vbHRpcCA9IF8o J2RlZmluZSB0aGUgbWluaW11bSBjdXJ2YXR1cmUgZm9yIHRoZSBMb0cgZWRnZSBkZXRlY3Rpb24u IEFwcGVuZCBhIOKAmCXigJkgdG8gc3BlY2lmeSB0aGUgbWluaW11bSBjdXJ2YXR1cmUgcmVsYXRp dmUgdG8gbWF4aW11bSBwaXhlbCB2YWx1ZSBpbiB0aGUgc291cmNlIGltYWdlLiBEZWZhdWx0OiAo MC4wJSknKSwKLSsgICAgc2VsZWN0ZWQgPSB0ZW1wLCAKLSsgICAgJzAuMCUnLCcwLjElJywnMC4y JScsJzAuMyUnLCcwLjQlJywnMC41JScsJzAuNiUnLCcwLjclJywnMC44JScsJzAuOSUnLCcxLjAl JywKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5w cmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29udHJhc3RfbWluX2N1cnZhdHVyZScsICdz dHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwg J2FjdGl2ZV9jb250cmFzdF9taW5fY3VydmF0dXJlX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxl Y3RlZCkKLSsgICAgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAot KyAgICAgICAgc2VsZi5zZWxlY3RlZCA9IDEKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRl KG1vZCwgJ2FjdGl2ZV9jb250cmFzdF9taW5fY3VydmF0dXJlJywgJ3N0cmluZycsIHNlbGYudmFs dWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyYXN0 X21pbl9jdXJ2YXR1cmVfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQK LSt9IAotK2xvY2FsIGxhYmVsX3RhcmdldF9vcHRpb25zPSBkdC5uZXdfd2lkZ2V0KCdzZWN0aW9u X2xhYmVsJyl7Ci0rICAgIGxhYmVsID0gXygndGFyZ2V0IGZpbGUnKQotK30KLSt0ZW1wID0gZHQu cHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfY29tcHJlc3Npb25fbGV2ZWxfdGlmX2luZCcs ICdpbnRlZ2VyJykKLStpZiBub3QgSW5SYW5nZSh0ZW1wLCAxLCA0KSB0aGVuIHRlbXAgPSAxIGVu ZCAKLStHVUkuVGFyZ2V0LmNvbXByZXNzaW9uX2xldmVsX3RpZiA9IGR0Lm5ld193aWRnZXQoJ2Nv bWJvYm94Jyl7Ci0rICAgIGxhYmVsID0gXygndGlmZiBjb21wcmVzc2lvbicpLCAKLSsgICAgdG9v bHRpcCA9IF8oJ2NvbXByZXNzaW9uIG1ldGhvZCBmb3IgdGlmZiBmaWxlcycpLAotKyAgICBzZWxl Y3RlZCA9IHRlbXAsCi0rICAgICdub25lJywnZGVmbGF0ZScsJ2x6dycsJ3BhY2tiaXRzJywKLSsg ICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5wcmVmZXJl bmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29tcHJlc3Npb25fbGV2ZWxfdGlmJywgJ3N0cmluZycs IHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZl X2NvbXByZXNzaW9uX2xldmVsX3RpZl9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0r ICAgIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAg IHNlbGYuc2VsZWN0ZWQgPSAxCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdh Y3RpdmVfY29tcHJlc3Npb25fbGV2ZWxfdGlmJywgJ3N0cmluZycsIHNlbGYudmFsdWUpIAotKyAg ICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbXByZXNzaW9uX2xldmVs X3RpZl9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZCAKLSt9Ci0rdGVt cCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2NvbXByZXNzaW9uX2xldmVsX2pw ZycsICdpbnRlZ2VyJykKLStpZiBub3QgSW5SYW5nZSh0ZW1wLCAwLCAxMDApIHRoZW4gdGVtcCA9 IDAgZW5kCi0rR1VJLlRhcmdldC5jb21wcmVzc2lvbl9sZXZlbF9qcGcgPSBkdC5uZXdfd2lkZ2V0 KCdzbGlkZXInKXsKLSsgICAgbGFiZWwgPSBfKCdqcGVnIGNvbXByZXNzaW9uJyksCi0rICAgIHRv b2x0aXAgPSBfKCdqcGVnIGNvbXByZXNzaW9uIGxldmVsJyksCi0rICAgIHNvZnRfbWluID0gMCwK LSsgICAgc29mdF9tYXggPSAxMDAsCi0rICAgIGhhcmRfbWluID0gMCwKLSsgICAgaGFyZF9tYXgg PSAxMDAsCi0rICAgIHN0ZXAgPSA1LAotKyAgICBkaWdpdHMgPSAwLAotKyAgICB2YWx1ZSA9IHRl bXAsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxm LnZhbHVlID0gMAotKyAgICBlbmQKLSt9Ci0rbG9jYWwgYmxhbmsgPSBkdC5uZXdfd2lkZ2V0KCdi b3gnKXt9Ci0rc3RhY2tfY29tcHJlc3Npb24gPSBkdC5uZXdfd2lkZ2V0KCdzdGFjaycpewotKyAg ICBHVUkuVGFyZ2V0LmNvbXByZXNzaW9uX2xldmVsX3RpZiwKLSsgICAgR1VJLlRhcmdldC5jb21w cmVzc2lvbl9sZXZlbF9qcGcsCi0rICAgIGJsYW5rLAotKyAgICBhY3RpdmUgPSAxCi0rfQotK3Rl bXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9mb3JtYXRfaW5kJywgJ2ludGVn ZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIDYpIHRoZW4gdGVtcCA9IDEgZW5kIAotK0dV SS5UYXJnZXQuZm9ybWF0ID0gZHQubmV3X3dpZGdldCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwg PSBfKCdmaWxlIGZvcm1hdCcpLCAKLSsgICAgdG9vbHRpcCA9IF8oJ2ZpbGUgZm9ybWF0IG9mIHRo ZSBlbmZ1c2VkIGZpbmFsIGltYWdlJyksCi0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJ3Rp ZicsJ2pwZycsJ3BuZycsJ3BubScsJ3BibScsJ3BwbScsCi0rICAgIGNoYW5nZWRfY2FsbGJhY2sg PSBmdW5jdGlvbihzZWxmKQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0 aXZlX2Zvcm1hdCcsICdzdHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVu Y2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9mb3JtYXRfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVj dGVkKQotKyAgICAgICAgaWYgc2VsZi52YWx1ZSA9PSAndGlmJyB0aGVuIHN0YWNrX2NvbXByZXNz aW9uLmFjdGl2ZSA9IDEKLSsgICAgICAgIGVsc2VpZiBzZWxmLnZhbHVlID09ICdqcGcnIHRoZW4g c3RhY2tfY29tcHJlc3Npb24uYWN0aXZlID0gMgotKyAgICAgICAgZWxzZSBzdGFja19jb21wcmVz c2lvbi5hY3RpdmUgPSAzCi0rICAgICAgICBlbmQKLSsgICAgZW5kLAotKyAgICByZXNldF9jYWxs YmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2VsZi5zZWxlY3RlZCA9IDEKLSsgICAg ICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9mb3JtYXQnLCAnc3RyaW5nJywg c2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVf Zm9ybWF0X2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kIAotK30KLSt0 ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfZGVwdGhfaW5kJywgJ2ludGVn ZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIDUpIHRoZW4gdGVtcCA9IDMgZW5kIAotK0dV SS5UYXJnZXQuZGVwdGggPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2JveCcpewotKyAgICBsYWJlbCA9 IF8oJ2JpdCBkZXB0aCcpLCAKLSsgICAgdG9vbHRpcCA9IF8oJ2JpdCBkZXB0aCBvZiB0aGUgZW5m dXNlZCBmaWxlJyksCi0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJzgnLCcxNicsJzMyJywn cjMyJywncjY0JywKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAg ICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfZGVwdGgnLCAnc3RyaW5nJywg c2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVf ZGVwdGhfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQsCi0rICAgIHJl c2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVkID0g MgotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2RlcHRoJywgJ3N0 cmluZycsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAn YWN0aXZlX2RlcHRoX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kIAot K30KLStsb2NhbCBsYWJlbF9kaXJlY3RvcnkgPSBkdC5uZXdfd2lkZ2V0KCdsYWJlbCcpewotKyAg ICBsYWJlbCA9IF8oJ2RpcmVjdG9yeScpLAotKyAgICBlbGxpcHNpemUgPSAnc3RhcnQnLAotKyAg ICBoYWxpZ24gPSAnc3RhcnQnCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwg J2FjdGl2ZV9vdXRwdXRfZGlyZWN0b3J5JywgJ3N0cmluZycpCi0raWYgdGVtcCA9PSAnJyBvciB0 ZW1wID09IG5pbCB0aGVuIHRlbXAgPSBkdC5jb2xsZWN0aW9uWzFdLnBhdGggZW5kCi0rR1VJLlRh cmdldC5vdXRwdXRfZGlyZWN0b3J5ID0gZHQubmV3X3dpZGdldCgnZmlsZV9jaG9vc2VyX2J1dHRv bicpewotKyAgICB0aXRsZSA9ICdTZWxlY3QgZXhwb3J0IHBhdGgnLCAKLSsgICAgaXNfZGlyZWN0 b3J5ID0gdHJ1ZSwKLSsgICAgdG9vbHRpcCA9IF8oJ3NlbGVjdCB0aGUgdGFyZ2V0IGRpcmVjdG9y eSBmb3IgdGhlIGZ1c2VkIGltYWdlLiBcbnRoZSBmaWxlbmFtZSBpcyBjcmVhdGVkIGF1dG9tYXRp Y2FsbHkuJyksCi0rICAgIHZhbHVlID0gdGVtcCwKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1 bmN0aW9uKHNlbGYpIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9vdXRwdXRfZGly ZWN0b3J5JywgJ3N0cmluZycsIHNlbGYudmFsdWUpIGVuZAotK30KLStHVUkuVGFyZ2V0LnNvdXJj ZV9sb2NhdGlvbiA9IGR0Lm5ld193aWRnZXQoJ2NoZWNrX2J1dHRvbicpewotKyAgICBsYWJlbCA9 IF8oJ3NhdmUgdG8gc291cmNlIGltYWdlIGxvY2F0aW9uJyksIAotKyAgICB2YWx1ZSA9IGR0LnBy ZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX3NvdXJjZV9sb2NhdGlvbicsICdib29sJyksCi0r ICAgIHRvb2x0aXAgPSBfKCdpZiBjaGVja2VkIGlnbm9yZXMgdGhlIGxvY2F0aW9uIGFib3ZlIGFu ZCBzYXZlcyBvdXRwdXQgaW1hZ2UocykgdG8gdGhlIHNhbWUgbG9jYXRpb24gYXMgdGhlIHNvdXJj ZSBpbWFnZXMuJyksICAKLSsgICAgY2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIGR0 LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9zb3VyY2VfbG9jYXRpb24nLCAnYm9vbCcs IHNlbGYudmFsdWUpIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBz ZWxmLnZhbHVlID0gdHJ1ZSBlbmQKLSt9Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9k LCAnYWN0aXZlX29uX2NvbmZsaWN0X2luZCcsICdpbnRlZ2VyJykKLStpZiBub3QgSW5SYW5nZSh0 ZW1wLCAxLCAyKSB0aGVuIHRlbXAgPSAxIGVuZCAKLStHVUkuVGFyZ2V0Lm9uX2NvbmZsaWN0ID0g ZHQubmV3X3dpZGdldCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdvbiBjb25mbGljdCcp LCAKLSsgICAgc2VsZWN0ZWQgPSAxLCAgCi0rICAgICdjcmVhdGUgdW5pcXVlIGZpbGVuYW1lJywn b3ZlcndyaXRlJywgICAgICAgICAgIAotKyAgICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24o c2VsZikKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9vbl9jb25m bGljdCcsICdzdHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndy aXRlKG1vZCwgJ2FjdGl2ZV9vbl9jb25mbGljdF9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0 ZWQpCi0rICAgIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsg ICAgICAgIHNlbGYuc2VsZWN0ZWQgPSAxCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZSht b2QsICdhY3RpdmVfb25fY29uZmxpY3QnLCAnc3RyaW5nJywgc2VsZi52YWx1ZSkgCi0rICAgICAg ICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfb25fY29uZmxpY3RfaW5kJywgJ2lu dGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQgCi0rfSAgCi0rR1VJLlRhcmdldC5hdXRv X2ltcG9ydCA9IGR0Lm5ld193aWRnZXQoJ2NoZWNrX2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8o J2F1dG8gaW1wb3J0JyksIAotKyAgICB2YWx1ZSA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAn YWN0aXZlX2F1dG9faW1wb3J0JywgJ2Jvb2wnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ2ltcG9ydCB0 aGUgaW1hZ2UgaW50byBkYXJrdGFibGUgZGF0YWJhc2Ugd2hlbiBlbmZ1c2UgY29tcGxldGVzJyks ICAKLSsgICAgY2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5w cmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfYXV0b19pbXBvcnQnLCAnYm9vbCcsIHNlbGYu dmFsdWUpCi0rICAgICAgICBHVUkuVGFyZ2V0LmFwcGx5X3N0eWxlLnNlbnNpdGl2ZSA9IHNlbGYu dmFsdWUKLSsgICAgICAgIEdVSS5UYXJnZXQuY29weV90YWdzLnNlbnNpdGl2ZSA9IHNlbGYudmFs dWUKLSsgICAgICAgIEdVSS5UYXJnZXQuYWRkX3RhZ3Muc2Vuc2l0aXZlID0gc2VsZi52YWx1ZQot KyAgICBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi52YWx1 ZSA9IHRydWUgZW5kCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2 ZV9hcHBseV9zdHlsZV9pbmQnLCAnaW50ZWdlcicpCi0rR1VJLlRhcmdldC5hcHBseV9zdHlsZSA9 IGR0Lm5ld193aWRnZXQoJ2NvbWJvYm94Jyl7Ci0rICAgIGxhYmVsID0gXygnYXBwbHkgc3R5bGUg b24gSW1wb3J0JyksCi0rICAgIHRvb2x0aXAgPSBfKCdhcHBseSBzZWxlY3RlZCBzdHlsZSBvbiBh dXRvLWltcG9ydCB0byBuZXdseSBjcmVhdGVkIGJsZW5kZWQgaW1hZ2UnKSwKLSsgICAgc2VsZWN0 ZWQgPSAxLAotKyAgICAnbm9uZScsCi0rICAgIGNoYW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihz ZWxmKQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2FwcGx5X3N0 eWxlJywgJ3N0cmluZycsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3Jp dGUobW9kLCAnYWN0aXZlX2FwcGx5X3N0eWxlX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3Rl ZCkKLSsgICAgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAg ICAgICAgc2VsZi5zZWxlY3RlZCA9IDEKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1v ZCwgJ2FjdGl2ZV9hcHBseV9zdHlsZScsICdzdHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAg IGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9hcHBseV9zdHlsZV9pbmQnLCAnaW50 ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZCAKLSt9Ci0rZm9yIGs9MSwgKHN0eWxlc19j b3VudC0xKSBkbwotKyAgICBHVUkuVGFyZ2V0LmFwcGx5X3N0eWxlW2srMV0gPSBzdHlsZXNba10u bmFtZQotK2VuZAotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIHN0eWxlc19jb3VudCkgdGhlbiB0 ZW1wID0gMSBlbmQKLStHVUkuVGFyZ2V0LmFwcGx5X3N0eWxlLnNlbGVjdGVkID0gdGVtcAotK0dV SS5UYXJnZXQuY29weV90YWdzID0gZHQubmV3X3dpZGdldCgnY2hlY2tfYnV0dG9uJyl7Ci0rICAg IGxhYmVsID0gXygnY29weSB0YWdzJyksIAotKyAgICB2YWx1ZSA9IGR0LnByZWZlcmVuY2VzLnJl YWQobW9kLCAnYWN0aXZlX2NvcHlfdGFncycsICdib29sJyksCi0rICAgIHRvb2x0aXAgPSBfKCdj b3B5IHRhZ3MgZnJvbSBmaXJzdCBpbWFnZS4nKSwgCi0rICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBm dW5jdGlvbihzZWxmKSBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29weV90YWdz JywgJ2Jvb2wnLCBzZWxmLnZhbHVlKSBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rp b24oc2VsZikgc2VsZi52YWx1ZSA9IHRydWUgZW5kCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNl cy5yZWFkKG1vZCwgJ2FjdGl2ZV9hZGRfdGFncycsICdzdHJpbmcnKQotK2lmIHRlbXAgPT0gJycg dGhlbiB0ZW1wID0gbmlsIGVuZCAKLStHVUkuVGFyZ2V0LmFkZF90YWdzID0gZHQubmV3X3dpZGdl dCgnZW50cnknKXsKLSsgICAgdG9vbHRpcCA9IF8oJ2FkZGl0aW9uYWwgdGFncyB0byBiZSBhZGRl ZCBvbiBpbXBvcnQsIHNlcGVyYXRlIHdpdGggY29tbWFzLCBhbGwgc3BhY2VzIHdpbGwgYmUgcmVt b3ZlZCcpLAotKyAgICB0ZXh0ID0gdGVtcCwKLSsgICAgcGxhY2Vob2xkZXIgPSBfKCdlbnRlciB0 YWdzLCBzZXBhcmF0ZWQgYnkgY29tbWFzJyksCi0rICAgIGVkaXRhYmxlID0gdHJ1ZQotK30KLSt0 ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfY3VycmVudF9wcmVzZXRfaW5k JywgJ2ludGVnZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIDYpIHRoZW4gdGVtcCA9IDEg ZW5kCi0rR1VJLlByZXNldHMuY3VycmVudF9wcmVzZXQgPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2Jv eCcpewotKyAgICBsYWJlbCA9IF8oJ2FjdGl2ZSBwcmVzZXQnKSwKLSsgICAgdG9vbHRpcCA9IF8o J3ByZXNldCB0byBiZSBsb2FkZWQgZnJvbSBvciBzYXZlZCB0bycpLAotKyAgICB2YWx1ZSA9IHRl bXAsCi0rICAgICdkcmlfMScsICdkcmlfMicsICdkcmlfMycsICdkZmZfMScsICdkZmZfMicsICdk ZmZfMycsCi0rICAgIGNoYW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICAgICAg ZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2N1cnJlbnRfcHJlc2V0JywgJ3N0cmlu ZycsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0 aXZlX2N1cnJlbnRfcHJlc2V0X2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAg ZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2Vs Zi5zZWxlY3RlZCA9IDEKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2 ZV9jdXJyZW50X3ByZXNldCcsICdzdHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnBy ZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jdXJyZW50X3ByZXNldF9pbmQnLCAnaW50ZWdl cicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZCAKLSt9Ci0rR1VJLlByZXNldHMubG9hZCA9IGR0 Lm5ld193aWRnZXQoJ2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8oJ2xvYWQgZnVzaW9uIHByZXNl dCcpLAotKyAgICB0b29sdGlwID0gXygnbG9hZCBjdXJyZW50IGZ1c2lvbiBwYXJhbWV0ZXJzIGZy b20gc2VsZWN0ZWQgcHJlc2V0JyksCi0rICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbigp IExvYWRGcm9tUHJlZmVyZW5jZShHVUkuUHJlc2V0cy5jdXJyZW50X3ByZXNldC52YWx1ZSkgZW5k Ci0rfQotK0dVSS5QcmVzZXRzLnNhdmUgPSBkdC5uZXdfd2lkZ2V0KCdidXR0b24nKXsKLSsgICAg bGFiZWwgPSBfKCdzYXZlIHRvIGZ1c2lvbiBwcmVzZXQnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ3Nh dmUgY3VycmVudCBmdXNpb24gcGFyYW1ldGVycyB0byBzZWxlY3RlZCBwcmVzZXQnKSwKLSsgICAg Y2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKCkgU2F2ZVRvUHJlZmVyZW5jZShHVUkuUHJlc2V0 cy5jdXJyZW50X3ByZXNldC52YWx1ZSkgZW5kCi0rfQotK0dVSS5QcmVzZXRzLnZhcmlhbnRzID0g ZHQubmV3X3dpZGdldCgnY2hlY2tfYnV0dG9uJyl7Ci0rICAgIGxhYmVsID0gXygnY3JlYXRlIGlt YWdlIHZhcmlhbnRzIGZyb20gcHJlc2V0cycpLCAKLSsgICAgdmFsdWUgPSBkdC5wcmVmZXJlbmNl cy5yZWFkKG1vZCwgJ2FjdGl2ZV92YXJpYW50cycsICdib29sJyksCi0rICAgIHRvb2x0aXAgPSBf KCdjcmVhdGUgbXVsdGlwbGUgaW1hZ2UgdmFyaWFudHMgYmFzZWQgb24gdGhlIHRocmVlIGRpZmZl cmVudCBwcmVzZXRzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZScpLCAgIAotKyAgICBjbGlja2VkX2Nh bGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZSht b2QsICdhY3RpdmVfdmFyaWFudHMnLCAnYm9vbCcsIHNlbGYudmFsdWUpCi0rICAgICAgICBpZiBz ZWxmLnZhbHVlIHRoZW4KLSsgICAgICAgICAgICBHVUkuVGFyZ2V0Lm9uX2NvbmZsaWN0LnNlbGVj dGVkID0gMQotKyAgICAgICAgICAgIEdVSS5UYXJnZXQub25fY29uZmxpY3Quc2Vuc2l0aXZlID0g ZmFsc2UKLSsgICAgICAgICAgICBHVUkuUHJlc2V0cy52YXJpYW50c190eXBlLnNlbnNpdGl2ZSA9 IHRydWUKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgICBHVUkuVGFyZ2V0Lm9uX2NvbmZsaWN0 LnNlbnNpdGl2ZSA9IHRydWUKLSsgICAgICAgICAgICBHVUkuUHJlc2V0cy52YXJpYW50c190eXBl LnNlbnNpdGl2ZSA9IGZhbHNlCi0rICAgICAgICBlbmQKLSsgICAgZW5kLAotKyAgICByZXNldF9j YWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIHNlbGYudmFsdWUgPSBmYWxzZSBlbmQKLSt9Ci0rdGVt cCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX3ZhcmlhbnRzX3R5cGVfaW5kJywg J2ludGVnZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIDIpIHRoZW4gdGVtcCA9IDEgZW5k Ci0rR1VJLlByZXNldHMudmFyaWFudHNfdHlwZSA9IGR0Lm5ld193aWRnZXQoJ2NvbWJvYm94Jyl7 Ci0rICAgIGxhYmVsID0gXygnY3JlYXRlIHZhcmlhbnRzIHR5cGUnKSwKLSsgICAgdG9vbHRpcCA9 IF8oJ3ByZXNldCB0eXBlIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBpbWFnZSB2YXJpYW50cycp LAotKyAgICBzZWxlY3RlZCA9IHRlbXAsCi0rICAgICdkcmknLCAnZGZmJywKLSsgICAgY2hhbmdl ZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0 ZShtb2QsICdhY3RpdmVfdmFyaWFudHNfdHlwZScsICdzdHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsg ICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV92YXJpYW50c190eXBlX2lu ZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kLAotKyAgICByZXNldF9jYWxs YmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2VsZi5zZWxlY3RlZCA9IDEKLSsgICAg ICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV92YXJpYW50c190eXBlJywgJ3N0 cmluZycsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAn YWN0aXZlX3ZhcmlhbnRzX3R5cGVfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAg ICBlbmQgCi0rfQotK0dVSS5QcmVzZXRzLnZhcmlhbnRzX3R5cGUuc2Vuc2l0aXZlID0gR1VJLlBy ZXNldHMudmFyaWFudHMudmFsdWUKLSt0ZW1wID0gZGYuZ2V0X2V4ZWN1dGFibGVfcGF0aF9wcmVm ZXJlbmNlKEFJUy5uYW1lKQotK0dVSS5leGVzLmFsaWduX2ltYWdlX3N0YWNrID0gZHQubmV3X3dp ZGdldCgnZmlsZV9jaG9vc2VyX2J1dHRvbicpewotKyAgICB0aXRsZSA9ICdhbGlnbl9pbWFnZV9z dGFjayAnIC4uIF8oJ2JpbmFyeSBwYXRoJyksCi0rICAgIHZhbHVlID0gdGVtcCwKLSsgICAgdG9v bHRpcCA9IHRlbXAsCi0rICAgIGlzX2RpcmVjdG9yeSA9IGZhbHNlLAotKyAgICBjaGFuZ2VkX2Nh bGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi50b29sdGlwID0gc2VsZi52YWx1ZSBlbmQKLSt9 Ci0rdGVtcCA9IGRmLmdldF9leGVjdXRhYmxlX3BhdGhfcHJlZmVyZW5jZShFTkYubmFtZSkKLStH VUkuZXhlcy5lbmZ1c2UgPSBkdC5uZXdfd2lkZ2V0KCdmaWxlX2Nob29zZXJfYnV0dG9uJyl7Ci0r ICAgIHRpdGxlID0gJ2VuZnVzZSAnIC4uIF8oJ2JpbmFyeSBwYXRoJyksCi0rICAgIHZhbHVlID0g dGVtcCwKLSsgICAgdG9vbHRpcCA9IHRlbXAsCi0rICAgIGlzX2RpcmVjdG9yeSA9IGZhbHNlLAot KyAgICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi50b29sdGlwID0gc2Vs Zi52YWx1ZSBlbmQKLSt9Ci0rdGVtcCA9IGRmLmdldF9leGVjdXRhYmxlX3BhdGhfcHJlZmVyZW5j ZShFWEYubmFtZSkKLStHVUkuZXhlcy5leGlmdG9vbCA9IGR0Lm5ld193aWRnZXQoJ2ZpbGVfY2hv b3Nlcl9idXR0b24nKXsKLSsgICAgdGl0bGUgPSAnZXhpZnRvb2wgJyAuLiBfKCdiaW5hcnkgcGF0 aCcpLAotKyAgICB2YWx1ZSA9IHRlbXAsCi0rICAgIHRvb2x0aXAgPSB0ZW1wLAotKyAgICBpc19k aXJlY3RvcnkgPSBmYWxzZSwKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYp IHNlbGYudG9vbHRpcCA9IHNlbGYudmFsdWUgZW5kCi0rfSAKLStHVUkuZXhlcy51cGRhdGUgPSBk dC5uZXdfd2lkZ2V0KCdidXR0b24nKXsKLSsgICAgbGFiZWwgPSBfKCd1cGRhdGUnKSwKLSsgICAg dG9vbHRpcCA9IF8oJ3VwZGF0ZSB0aGUgYmluYXJ5IHBhdGhzIHdpdGggY3VycmVudCB2YWx1ZXMn KSwKLSsgICAgY2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKCkgRXhlVXBkYXRlKHtBSVMsRU5G LEVYRn0pIGVuZAotK30KLSt0ZW1wID0gR1VJLlRhcmdldC5mb3JtYXQudmFsdWUKLStpZiB0ZW1w ID09ICd0aWYnIHRoZW4gdGVtcCA9IDEKLStlbHNlaWYgdGVtcCA9PSAnanBnJyB0aGVuIHRlbXAg PSAyCi0rZWxzZSB0ZW1wID0gMwotK2VuZAotK3N0YWNrX2NvbXByZXNzaW9uLmFjdGl2ZSA9IHRl bXAKLStmb3IgXyx3aWRnZXQgaW4gcGFpcnMoR1VJLkFJUykgZG8KLSsgICAgd2lkZ2V0LnNlbnNp dGl2ZSA9IEdVSS5hbGlnbi52YWx1ZQotK2VuZAotK0dVSS5UYXJnZXQuYXBwbHlfc3R5bGUuc2Vu c2l0aXZlID0gR1VJLlRhcmdldC5hdXRvX2ltcG9ydC52YWx1ZQotK0dVSS5UYXJnZXQuY29weV90 YWdzLnNlbnNpdGl2ZSA9IEdVSS5UYXJnZXQuYXV0b19pbXBvcnQudmFsdWUKLStHVUkuVGFyZ2V0 LmFkZF90YWdzLnNlbnNpdGl2ZSA9IEdVSS5UYXJnZXQuYXV0b19pbXBvcnQudmFsdWUKLSsKLSts b2NhbCBib3hfQUlTID0gZHQubmV3X3dpZGdldCgnYm94Jyl7Ci0rICAgIG9yaWVudGF0aW9uID0g J3ZlcnRpY2FsJywKLSsgICAgbGFiZWxfQUlTX29wdGlvbnMsCi0rICAgIEdVSS5hbGlnbiwKLSsg ICAgR1VJLkFJUy5yYWRpYWxfZGlzdG9ydGlvbiwKLSsgICAgR1VJLkFJUy5vcHRpbWl6ZV9maWVs ZCwKLSsgICAgR1VJLkFJUy5vcHRpbWl6ZV9pbWFnZV9jZW50ZXIsCi0rICAgIEdVSS5BSVMuYXV0 b19jcm9wLAotKyAgICBHVUkuQUlTLmRpc3RvcnRpb24sCi0rICAgIEdVSS5BSVMuZ3B1LAotKyAg ICBHVUkuQUlTLmdyaWRfc2l6ZSwKLSsgICAgR1VJLkFJUy5jb250cm9sX3BvaW50cywKLSsgICAg R1VJLkFJUy5jb250cm9sX3BvaW50c19yZW1vdmUsCi0rICAgIEdVSS5BSVMuY29ycmVsYXRpb24K LSt9Ci0rbG9jYWwgYm94X0VORiA9IGR0Lm5ld193aWRnZXQoJ2JveCcpewotKyAgICBvcmllbnRh dGlvbiA9ICd2ZXJ0aWNhbCcsCi0rICAgIGxhYmVsX0VORl9vcHRpb25zLAotKyAgICBHVUkuRU5G LmV4cG9zdXJlX3dlaWdodCwKLSsgICAgR1VJLkVORi5zYXR1cmF0aW9uX3dlaWdodCwKLSsgICAg R1VJLkVORi5jb250cmFzdF93ZWlnaHQsCi0rICAgIEdVSS5FTkYuZXhwb3N1cmVfb3B0aW11bSwK LSsgICAgR1VJLkVORi5leHBvc3VyZV93aWR0aCwKLSsgICAgR1VJLkVORi5oYXJkX21hc2tzLAot KyAgICBHVUkuRU5GLnNhdmVfbWFza3MsCi0rICAgIEdVSS5FTkYuY29udHJhc3Rfd2luZG93X3Np emUsCi0rICAgIEdVSS5FTkYuY29udHJhc3RfZWRnZV9zY2FsZSwKLSsgICAgR1VJLkVORi5jb250 cmFzdF9taW5fY3VydmF0dXJlLAotKyAgICBHVUkuUHJlc2V0cy5jdXJyZW50X3ByZXNldCwKLSsg ICAgR1VJLlByZXNldHMubG9hZCwKLSsgICAgR1VJLlByZXNldHMuc2F2ZQotK30KLStsb2NhbCBi b3hfVGFyZ2V0ID0gZHQubmV3X3dpZGdldCgnYm94Jyl7Ci0rICAgIG9yaWVudGF0aW9uID0gJ3Zl cnRpY2FsJywKLSsgICAgbGFiZWxfdGFyZ2V0X29wdGlvbnMsCi0rICAgIEdVSS5UYXJnZXQuZm9y bWF0LAotKyAgICBHVUkuVGFyZ2V0LmRlcHRoLAotKyAgICBzdGFja19jb21wcmVzc2lvbiwKLSsg ICAgbGFiZWxfZGlyZWN0b3J5LAotKyAgICBHVUkuVGFyZ2V0Lm91dHB1dF9kaXJlY3RvcnksCi0r ICAgIEdVSS5UYXJnZXQuc291cmNlX2xvY2F0aW9uLAotKyAgICBHVUkuVGFyZ2V0Lm9uX2NvbmZs aWN0LAotKyAgICBHVUkuUHJlc2V0cy52YXJpYW50cywKLSsgICAgR1VJLlByZXNldHMudmFyaWFu dHNfdHlwZSwKLSsgICAgR1VJLlRhcmdldC5hdXRvX2ltcG9ydCwKLSsgICAgR1VJLlRhcmdldC5h cHBseV9zdHlsZSwKLSsgICAgR1VJLlRhcmdldC5jb3B5X3RhZ3MsCi0rICAgIEdVSS5UYXJnZXQu YWRkX3RhZ3MKLSt9Ci0rbG9jYWwgYm94X2V4ZXMgPSBkdC5uZXdfd2lkZ2V0KCdib3gnKXsKLSsg ICAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLAotKyAgICBHVUkuZXhlcy5hbGlnbl9pbWFnZV9z dGFjaywKLSsgICAgR1VJLmV4ZXMuZW5mdXNlLAotKyAgICBHVUkuZXhlcy5leGlmdG9vbCwKLSsg ICAgR1VJLmV4ZXMudXBkYXRlCi0rfQotK0dVSS5vcHRpb25zX2NvbnRhaW4gPSBkdC5uZXdfd2lk Z2V0KCdzdGFjaycpewotKyAgICBib3hfQUlTLAotKyAgICBib3hfRU5GLAotKyAgICBib3hfVGFy Z2V0LAotKyAgICBib3hfZXhlcywKLSsgICAgYWN0aXZlID0gMgotK30KLStHVUkuc2hvd19vcHRp b25zID0gZHQubmV3X3dpZGdldCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdzaG93IG9w dGlvbnMnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ3Nob3cgb3B0aW9ucyBmb3Igc3BlY2lmaWVkIGFz cGVjdCBvZiBvdXRwdXQnKSwKLSsgICAgc2VsZWN0ZWQgPSAyLAotKyAgICAnYWxpZ24gaW1hZ2Ug c3RhY2snLCAnZW5mdXNlL2VuYmxlbmQnLCAndGFyZ2V0IGZpbGUnLAotKyAgICBjaGFuZ2VkX2Nh bGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAgICAgIEdVSS5vcHRpb25zX2NvbnRhaW4uYWN0 aXZlID0gc2VsZi5zZWxlY3RlZAotKyAgICBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVu Y3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVkID0gMQotKyAgICAgICAgZHQucHJl ZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2N1cnJlbnRfcHJlc2V0JywgJ3N0cmluZycsIHNl bGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2N1 cnJlbnRfcHJlc2V0X2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kIAot K30KLStsb2NhbCBzdG9yYWdlX3dpZGdldCA9IGR0Lm5ld193aWRnZXQoJ2JveCcpIHsKLSsgICAg b3JpZW50YXRpb24gPSAndmVydGljYWwnLAotKyAgICBHVUkuc2hvd19vcHRpb25zLAotKyAgICBH VUkub3B0aW9uc19jb250YWluCi0rfSAKLSsKLSstLSBSZWdpc3RlciBuZXcgc3RvcmFnZSAtLQot K2R0LnJlZ2lzdGVyX3N0b3JhZ2UoCi0rICAgICdtb2R1bGVfZW5mdXNlQWR2YW5jZWQnLCAtLU1v ZHVsZSBuYW1lCi0rICAgIF8oJ0RSSSBvciBERkYgaW1hZ2UnKSwgLS1OYW1lCi0rICAgIHNob3df c3RhdHVzLCAtLXN0b3JlOiBjYWxsZWQgb25jZSBwZXIgZXhwb3J0ZWQgaW1hZ2UKLSsgICAgbWFp biwgLS1maW5hbGl6ZTogY2FsbGVkIG9uY2Ugd2hlbiBhbGwgaW1hZ2VzIGhhdmUgZmluaXNoZWQg ZXhwb3J0aW5nCi0rICAgIHN1cHBvcnRfZm9ybWF0LCAtLXN1cHBvcnRlZAotKyAgICBpbml0aWFs LCAtLWluaXRpYWxpemUKLSsgICAgc3RvcmFnZV93aWRnZXQKLSspCi0rCi0raWYgZHQucHJlZmVy ZW5jZXMucmVhZChtb2QsICdiaW5fZXhpc3RzJywgJ2Jvb2wnKSB0aGVuIAotKyAgICBHVUkub3B0 aW9uc19jb250YWluLmFjdGl2ZSA9IDIKLSsgICAgR1VJLnNob3dfb3B0aW9ucy5zZW5zaXRpdmUg PSB0cnVlCi0rZWxzZQotKyAgICBHVUkub3B0aW9uc19jb250YWluLmFjdGl2ZSA9IDQKLSsgICAg R1VJLnNob3dfb3B0aW9ucy5zZW5zaXRpdmUgPSBmYWxzZQotK2VuZAotKwotK3NjcmlwdF9kYXRh LmRlc3Ryb3kgPSBkZXN0cm95Ci0rCi0rcmV0dXJuIHNjcmlwdF9kYXRhCi1kaWZmIC11ck5yIGRh cmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2ZhY2Vf cmVjb2duaXRpb24ubHVhIGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMv Y29udHJpYi9mYWNlX3JlY29nbml0aW9uLmx1YQotLS0tIGRhcmt0YWJsZS01LjYuMC1vcmlnL3Ny Yy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2ZhY2VfcmVjb2duaXRpb24ubHVhCTIwMjYt MDYtMTIgMDU6MDY6MzguMDAwMDAwMDAwICswMjAwCi0rKysgZGFya3RhYmxlLTUuNi4wL3NyYy9l eHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2ZhY2VfcmVjb2duaXRpb24ubHVhCTIwMjYtMDkt MDEgMDk6NDI6MDQuMzcxNTUyNjgxICswMjAwCi1AQCAtMzExLDI1ICszMTEsMjYgQEAKLSAgICAg ICAgICAgICBpZiBpZ25vcmVCeVRhZyAoaW1nLCBpZ25vcmVUYWdzKSB0aGVuCi0gICAgICAgICAg ICAgICBkdC5wcmludF9sb2coIkZhY2UgcmVjb2duaXRpb246IElnbm9yaW5nIGltYWdlIHdpdGgg SUQgIiAuLiBpbWcuaWQpCi0gICAgICAgICAgICAgZWxzZQotKyAgICAgICAgICAgICAgbG9jYWwg dGFnX25hbWUgPSB0Ci0gICAgICAgICAgICAgICAtLSBDaGVjayBvZiB1bnJlY29nbml6ZWQgdW5r bm93bl9wZXJzb24KLS0gICAgICAgICAgICAgIGlmIHQgPT0gInVua25vd25fcGVyc29uIiB0aGVu Ci0tICAgICAgICAgICAgICAgIHQgPSB1bmtub3duVGFnCi0rICAgICAgICAgICAgICBpZiB0YWdf bmFtZSA9PSAidW5rbm93bl9wZXJzb24iIHRoZW4KLSsgICAgICAgICAgICAgICAgdGFnX25hbWUg PSB1bmtub3duVGFnCi0gICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgIC0tIENoZWNr IG9mIHVucmVjb2duaXplZCBub19wZXJzb25zX2ZvdW5kCi0tICAgICAgICAgICAgICBpZiB0ID09 ICJub19wZXJzb25zX2ZvdW5kIiB0aGVuCi0tICAgICAgICAgICAgICAgIHQgPSBub25wZXJzb25z Zm91bmRUYWcKLSsgICAgICAgICAgICAgIGlmIHRhZ19uYW1lID09ICJub19wZXJzb25zX2ZvdW5k IiB0aGVuCi0rICAgICAgICAgICAgICAgIHRhZ19uYW1lID0gbm9ucGVyc29uc2ZvdW5kVGFnCi0g ICAgICAgICAgICAgICBlbmQKLS0gICAgICAgICAgICAgIGlmIHQgfj0gIiIgYW5kIHQgfj0gbmls IHRoZW4KLS0gICAgICAgICAgICAgICAgaWYgY2F0ZWdvcnlUYWdTdHJpbmcgfj0gIiIgYW5kIHQg fj0gbm9ucGVyc29uc2ZvdW5kVGFnIHRoZW4KLS0gICAgICAgICAgICAgICAgICB0ID0gY2F0ZWdv cnlUYWdTdHJpbmcgLi4gInwiIC4uIHQKLSsgICAgICAgICAgICAgIGlmIHRhZ19uYW1lIH49ICIi IGFuZCB0YWdfbmFtZSB+PSBuaWwgdGhlbgotKyAgICAgICAgICAgICAgICBpZiBjYXRlZ29yeVRh Z1N0cmluZyB+PSAiIiBhbmQgdGFnX25hbWUgfj0gbm9ucGVyc29uc2ZvdW5kVGFnIHRoZW4KLSsg ICAgICAgICAgICAgICAgICB0YWdfbmFtZSA9IGNhdGVnb3J5VGFnU3RyaW5nIC4uICJ8IiAuLiB0 YWdfbmFtZQotICAgICAgICAgICAgICAgICBlbmQgICAgICAgICAgICAgICAgICAKLS0gICAgICAg ICAgICAgICAgZHQucHJpbnRfbG9nICgiSW1nSWQ6IiAuLiBpbWcuaWQgLi4gIiBUYWc6Ii4uIHQp Ci0rICAgICAgICAgICAgICAgIGR0LnByaW50X2xvZyAoIkltZ0lkOiIgLi4gaW1nLmlkIC4uICIg VGFnOiIuLiB0YWdfbmFtZSkKLSAgICAgICAgICAgICAgICAgLS0gQ3JlYXRlIHRhZyBpZiBpdCBk b2VzIG5vdCBleGlzdAotLSAgICAgICAgICAgICAgICBpZiB0YWdzX2xpc3RbdF0gPT0gbmlsIHRo ZW4KLS0gICAgICAgICAgICAgICAgICB0YWcgPSBkdC50YWdzLmNyZWF0ZSAodCkKLS0gICAgICAg ICAgICAgICAgICB0YWdzX2xpc3RbdF0gPSB0YWcKLSsgICAgICAgICAgICAgICAgaWYgdGFnc19s aXN0W3RhZ19uYW1lXSA9PSBuaWwgdGhlbgotKyAgICAgICAgICAgICAgICAgIHRhZyA9IGR0LnRh Z3MuY3JlYXRlICh0YWdfbmFtZSkKLSsgICAgICAgICAgICAgICAgICB0YWdzX2xpc3RbdGFnX25h bWVdID0gdGFnCi0gICAgICAgICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICAgICAgICB0YWcg PSB0YWdzX2xpc3RbdF0KLSsgICAgICAgICAgICAgICAgICB0YWcgPSB0YWdzX2xpc3RbdGFnX25h bWVdCi0gICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICBpbWc6YXR0YWNoX3Rh ZyAodGFnKQotICAgICAgICAgICAgICAgZW5kCi1kaWZmIC11ck5yIGRhcmt0YWJsZS01LjYuMC1v cmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2dpbXAubHVhIGRhcmt0YWJsZS01 LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9naW1wLmx1YQotLS0tIGRhcmt0 YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2dpbXAubHVh CTIwMjYtMDYtMTIgMDU6MDY6MzguMDAwMDAwMDAwICswMjAwCi0rKysgZGFya3RhYmxlLTUuNi4w L3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2dpbXAubHVhCTIwMjYtMDktMDEgMDk6 NDI6MDQuMzcxOTI0MzU5ICswMjAwCi1AQCAtMTQyLDggKzE0Miw4IEBACi0gICBpbWdfbGlzdCA9 ICIiCi0gCi0gICBmb3IgXyxleHBfaW1nIGluIHBhaXJzKGltYWdlX3RhYmxlKSBkbwotLSAgICBl eHBfaW1nID0gZGYuc2FuaXRpemVfZmlsZW5hbWUoZXhwX2ltZykKLS0gICAgaW1nX2xpc3QgPSBp bWdfbGlzdCAuLmV4cF9pbWcuLiAiICIKLSsgICAgbG9jYWwgc2FuaXRpemVkID0gZGYuc2FuaXRp emVfZmlsZW5hbWUoZXhwX2ltZykKLSsgICAgaW1nX2xpc3QgPSBpbWdfbGlzdCAuLnNhbml0aXpl ZC4uICIgIgotICAgZW5kCi0gCi0gICBkdC5wcmludChfKCJsYXVuY2hpbmcgR0lNUC4uLiIpKQot ZGlmZiAtdXJOciBkYXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMv Y29udHJpYi9IRFJNZXJnZS5sdWEgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2Ny aXB0cy9jb250cmliL0hEUk1lcmdlLmx1YQotLS0tIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9l eHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL0hEUk1lcmdlLmx1YQkyMDI2LTA2LTEyIDA1OjA2 OjM4LjAwMDAwMDAwMCArMDIwMAotKysrIGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVh LXNjcmlwdHMvY29udHJpYi9IRFJNZXJnZS5sdWEJMjAyNi0wOS0wMSAwOTo0MjowNC4zNjkyODkw MjggKzAyMDAKLUBAIC0yNzcsOSArMjc3LDkgQEAKLSAgICAgbG9jYWwgc2V0X3RhZyA9IEdVSS5U YXJnZXQuYWRkX3RhZ3MudGV4dAotICAgICBpZiBzZXRfdGFnIH49IG5pbCB0aGVuIC0tIGFkZCBh ZGRpdGlvbmFsIHVzZXItc3BlY2lmaWVkIHRhZ3MKLSAgICAgICBmb3IgdGFnIGluIHN0cmluZy5n bWF0Y2goc2V0X3RhZywgJ1teLF0rJykgZG8KLS0gICAgICAgIHRhZyA9IENsZWFuU3BhY2VzKHRh ZykKLS0gICAgICAgIHRhZyA9IGR0LnRhZ3MuY3JlYXRlKHRhZykKLS0gICAgICAgIGR0LnRhZ3Mu YXR0YWNoKHRhZywgaW1wb3J0ZWQpIAotKyAgICAgICAgbG9jYWwgY2xlYW5lZF90YWcgPSBDbGVh blNwYWNlcyh0YWcpCi0rICAgICAgICBjbGVhbmVkX3RhZyA9IGR0LnRhZ3MuY3JlYXRlKGNsZWFu ZWRfdGFnKQotKyAgICAgICAgZHQudGFncy5hdHRhY2goY2xlYW5lZF90YWcsIGltcG9ydGVkKSAK LSAgICAgICBlbmQKLSAgICAgZW5kCi0gICAgIGR0LnByaW50KF8oJ0hEUk1lcmdlIGNvbXBsZXRl ZCBzdWNjZXNzZnVsbHknKSkKLWRpZmYgLXVyTnIgZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4 dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvaW1hZ2Vfc3RhY2subHVhIGRhcmt0YWJsZS01LjYu MC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9pbWFnZV9zdGFjay5sdWEKLS0tLSBk YXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9pbWFn ZV9zdGFjay5sdWEJMjAyNi0wNi0xMiAwNTowNjozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBkYXJr dGFibGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvaW1hZ2Vfc3RhY2su bHVhCTIwMjYtMDktMDEgMDk6NDI6MDQuMzcyMjQ2NTg1ICswMjAwCi1AQCAtMzIzLDggKzMyMyw4 IEBACi0gICBkdC5wcmludF9sb2coImltYWdlIGxpc3QgaXMgIiAuLiBpbWdfbGlzdCkKLSAgIGZp bGVzID0gZHUuc3BsaXQoaW1nX2xpc3QsICIgIikKLSAgIGZvciBfLGYgaW4gaXBhaXJzKGZpbGVz KSBkbwotLSAgICBmID0gc3RyaW5nLmdzdWIoZiwgJ1tcJ1wiXScsICIiKQotLSAgICBvcy5yZW1v dmUoZikKLSsgICAgbG9jYWwgY2xlYW5lZCA9IHN0cmluZy5nc3ViKGYsICdbXCdcIl0nLCAiIikK LSsgICAgb3MucmVtb3ZlKGNsZWFuZWQpCi0gICBlbmQKLSBlbmQKLSAKLWRpZmYgLXVyTnIgZGFy a3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL2dldF9saWJk b2MubHVhIGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0 X2xpYmRvYy5sdWEKLS0tLSBkYXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJuYWwvbHVhLXNj cmlwdHMvdG9vbHMvZ2V0X2xpYmRvYy5sdWEJMjAyNi0wNi0xMiAwNTowNjozOC4wMDAwMDAwMDAg KzAyMDAKLSsrKyBkYXJrdGFibGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xz L2dldF9saWJkb2MubHVhCTIwMjYtMDktMDEgMDk6NDI6MDQuMzcyNjk2MjMwICswMjAwCi1AQCAt NDAsOCArNDAsOCBAQAotIC0tIGxvb3AgdGhyb3VnaCB0aGUgbGlicmFyaWVzCi0gCi0gZm9yIGxp bmUgaW4gb3V0cHV0OmxpbmVzKCkgZG8KLS0gIGxpbmUgPSBzdHJpbmcuZ3N1YihsaW5lLCAiLyIs ICIuIikKLS0gIGxvY2FsIGxpYl9uYW1lID0gbGluZTpzdWIoMywtNSkKLSsgIGxvY2FsIGNsZWFu ZWRfbGluZSA9IHN0cmluZy5nc3ViKGxpbmUsICIvIiwgIi4iKQotKyAgbG9jYWwgbGliX25hbWUg PSBjbGVhbmVkX2xpbmU6c3ViKDMsLTUpCi0gICBpZiBsaWJfbmFtZTpsZW4oKSA+IDIgdGhlbgot ICAgICBsaWJfbmFtZSA9ICJsaWIvIiAuLiBsaWJfbmFtZQotICAgICBsb2NhbCBsaWIgPSByZXF1 aXJlKGxpYl9uYW1lKQotZGlmZiAtdXJOciBkYXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJu YWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYl9tYW5wYWdlcy5sdWEgZGFya3RhYmxlLTUuNi4w L3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9nZXRfbGliX21hbnBhZ2VzLmx1YQotLS0t IGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9nZXRf bGliX21hbnBhZ2VzLmx1YQkyMDI2LTA2LTEyIDA1OjA2OjM4LjAwMDAwMDAwMCArMDIwMAotKysr IGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYl9t YW5wYWdlcy5sdWEJMjAyNi0wOS0wMSAwOTo0MjowNC4zNzI1MzA0MzkgKzAyMDAKLUBAIC02Myw4 ICs2Myw4IEBACi0gLS0gbG9vcCB0aHJvdWdoIHRoZSBsaWJyYXJpZXMKLSAKLSBmb3IgbGluZSBp biBvdXRwdXQ6bGluZXMoKSBkbwotLSAgbGluZSA9IHN0cmluZy5nc3ViKGxpbmUsICIvIiwgIi4i KQotLSAgbG9jYWwgbGliX25hbWUgPSBsaW5lOnN1YigzLC01KQotKyAgbG9jYWwgY2xlYW5lZF9s aW5lID0gc3RyaW5nLmdzdWIobGluZSwgIi8iLCAiLiIpCi0rICBsb2NhbCBsaWJfbmFtZSA9IGNs ZWFuZWRfbGluZTpzdWIoMywtNSkKLSAgIGlmIGxpYl9uYW1lOmxlbigpID4gMiB0aGVuCi0gICAg IGxpYl9uYW1lID0gImxpYi8iIC4uIGxpYl9uYW1lCi0gICAgIGxvY2FsIGxpYiA9IHJlcXVpcmUo bGliX25hbWUpCi1kaWZmIC11ck5yIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9s dWEtc2NyaXB0cy90b29scy9zY3JpcHRfbWFuYWdlci5sdWEgZGFya3RhYmxlLTUuNi4wL3NyYy9l eHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9zY3JpcHRfbWFuYWdlci5sdWEKLS0tLSBkYXJrdGFi bGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvc2NyaXB0X21hbmFn ZXIubHVhCTIwMjYtMDYtMTIgMDU6MDY6MzguMDAwMDAwMDAwICswMjAwCi0rKysgZGFya3RhYmxl LTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9zY3JpcHRfbWFuYWdlci5sdWEJ MjAyNi0wOS0wMSAwOTo0MjowNC4zNzI4OTc2NzkgKzAyMDAKLUBAIC05NDYsNyArOTQ2LDkgQEAK LSAgICAgICAgICAgc20ud2lkZ2V0cy5mb2xkZXJfc2VsZWN0b3Iuc2VsZWN0ZWQgPSBpCi0gICAg ICAgICAgIGJyZWFrCi0gICAgICAgICBlbmQKLS0gICAgICAgIGkgPSBpICsgMQotKyAgICAgICAg LS0gTHVhIDUuNTogZm9yIGxvb3AgY29udHJvbCB2YXJpYWJsZXMgYXJlIHJlYWQtb25seS4gVGhp cyBpbmNyZW1lbnQKLSsgICAgICAgIC0tIHdhcyBhbHdheXMgYSBuby1vcCBzaW5jZSBudW1lcmlj IGZvciBsb29wcyB1c2UgYW4gaW50ZXJuYWwgY291bnRlci4KLSsgICAgICAgIC0tIGkgPSBpICsg MQotICAgICAgIGVuZAotIAotICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiY2xlYXJpbmcgdGV4 dCBmaWVsZHMiKQotZGlmZiAtdXJOciBkYXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJuYWwv bHVhLXNjcmlwdHMvdG9vbHMvc2NyaXB0X21hbmFnZXIubHVhLm9yaWcgZGFya3RhYmxlLTUuNi4w L3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9zY3JpcHRfbWFuYWdlci5sdWEub3JpZwot LS0tIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9z Y3JpcHRfbWFuYWdlci5sdWEub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAotKysrIGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvc2Ny aXB0X21hbmFnZXIubHVhLm9yaWcJMjAyNi0wNi0xMiAwNTowNjozOC4wMDAwMDAwMDAgKzAyMDAK LUBAIC0wLDAgKzEsMTY1NCBAQAotKy0tW1sKLSsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGRhcmt0 YWJsZSwKLSsgIGNvcHlyaWdodCAoYykgMjAxOCwgMjAyMCwgMjAyMywgMjAyNCBCaWxsIEZlcmd1 c29uIDx3cGZlcmd1c29uQGdtYWlsLmNvbT4KLSsgIAotKyAgZGFya3RhYmxlIGlzIGZyZWUgc29m dHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5Ci0rICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgotKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K LSsgIAotKyAgZGFya3RhYmxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0rICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgIAotKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgIGFsb25nIHdpdGgg ZGFya3RhYmxlLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgot K11dCi0rLS1bWwotKyAgICBzY3JpcHRfbWFuYWdlci5sdWEgLSBhIHRvb2wgZm9yIG1hbmFnaW5n IHRoZSBkYXJrdGFibGUgbHVhIHNjcmlwdHMKLSsKLSsgICAgc2NyaXB0X21hbmFnZXIgaXMgZGVz aWduZWQgdG8gYmUgY2FsbGVkIGZyb20gdGhlIHVzZXJzIGx1YXJjIGZpbGUgYW5kIHVzZWQgdG8K LSsgICAgbWFuYWdlIHRoZSBsdWEgc2NyaXB0cy4KLSsKLSsgICAgT24gc3RhcnR1cCBzY3JpcHRf bWFuYWdlciBzY2FucyB0aGUgbHVhIHNjcmlwdHMgZGlyZWN0b3J5IHRvIHNlZSB3aGF0IHNjcmlw dHMgYXJlIHByZXNlbnQuCi0rICAgIFNjcmlwdHMgYXJlIHNvcnRlZCBieSAnZm9sZGVyJyBiYXNl ZCBvbiB3aGF0IHN1Yi1kaXJlY3RvcnkgdGhleSBhcmUgaW4uICBXaXRoIG5vIAotKyAgICBhZGRp dGlvbmFsIHNjcmlwdCByZXBvc2l0b3JpZXMgaWluc3RhbGxlZCwgdGhlIGZvbGRlcnMgYXJlIGNv bnRyaWIsIGV4YW1wbGVzLCBvZmZpY2lhbAotKyAgICBhbmQgdG9vbHMuICBXaGVuIGEgZm9sZGVy IGlzIHNlbGVjdGVkIHRoZSBidXR0b25zIHNob3cgdGhlIHNjcmlwdCBuYW1lIGFuZCB3aGV0aGVy IHRoZQotKyAgICBzY3JpcHQgaXMgc3RhcnRlZCBvciBzdG9wcGVkLiAgVGhlIGJ1dHRvbiBpcyBh IHRvZ2dsZSwgc28gaWYgdGhlIHNjcmlwdCBpcyBzdG9wcGVkIGNsaWNrIAotKyAgICB0aGUgYnV0 dG9uIHRvIHN0YXJ0IGl0IGFuZCB2aWNlIHZlcnNhLgotKwotKyAgICBGZWF0dXJlcwotKwotKyAg ICAqIHRoZSBudW1iZXIgb2Ygc2NyaXB0IGJ1dHRvbnMgc2hvd24gY2FuIGJlIGNoYW5nZWQgdG8g YW55IG51bWJlciBiZXR3ZWVuIDUgYW5kIDIwLiAgVGhlIAotKyAgICAgIGRlZmF1bHQgaXMgMTAg YnV0dG9ucy4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYWN0aW9u LgotKwotKyAgICAqIGFkZGl0aW9uYWwgcmVwb3NpdG9yaWVzIG9mIHNjcmlwdHMgbWF5IGJlIGlu c3RhbGxlZCB1c2luZyBmcm9tIHRoZSBpbnN0YWxsL3VwZGF0ZSBhY3Rpb24uCi0rCi0rICAgICog aW5zdGFsbGVkIHNjcmlwdHMgY2FuIGJlIHVwZGF0ZWQgZnJvbSB0aGUgaW5zdGFsbC91cGRhdGUg YWN0aW9uLiAgVGhpcyBpbmNsdWRlcyBleHRyYQotKyAgICAgIHJlcG9zaXRvcmllcyB0aGF0IGhh dmUgYmVlbiBpbnN0YWxsZWQuCi0rCi0rICAgICogdGhlIHNjcmlwdHMgY2FuIGJlIGRpc2FibGVk IGlmIGRlc2lyZWQgZnJvbSB0aGUgaW5zdGFsbC91cGRhdGUgYWN0aW9uLiAgVGhpcyBjYW4gb25s eQotKyAgICAgIGJlIHJldmVyc2VkIG1hbnVhbGx5LiAgVG8gZW5hYmxlIHRoZSAiRGlzYWJsZSBT Y3JpcHRzIiBidXR0b24sIGNoZWNrIHRoZSBjaGVja2JveCB0bwotKyAgICAgIGVuZGFibGUgaXQu ICBUaGlzIGlzIHRvIHByZXZlbnQgYWNjaWRlbnRhbGx5IGRpc2FibGluZyB0aGUgc2NyaXB0cy4g IENsaWNrIHRoZSAKLSsgICAgICAiRGlzYWJsZSBTY3JpcHRzIiBidXR0b24gYW5kIHRoZSBsdWFy YyBmaWxlIGlzIHJlbmFtZWQgdG8gbHVhcmMuZGlzYWJsZS4gIElmIGF0Ci0rICAgICAgYSBsYXRl ciB0aW1lIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgc2NyaXB0cyBhZ2Fpbiwgc2ltcGx5IHJlbmFt ZSB0aGUgbHVhcmMuZGlzYWJsZWQgCi0rICAgICAgZmlsZSB0byBsdWFyYyBhbmQgdGhlIHNjcmlw dHMgd2lsbCBydW4uCi0rCi0rXV0KLSsKLSsKLStsb2NhbCBkdCA9IHJlcXVpcmUgImRhcmt0YWJs ZSIKLStsb2NhbCBkdSA9IHJlcXVpcmUgImxpYi9kdHV0aWxzIgotK2xvY2FsIGRmID0gcmVxdWly ZSAibGliL2R0dXRpbHMuZmlsZSIKLStsb2NhbCBkcyA9IHJlcXVpcmUgImxpYi9kdHV0aWxzLnN0 cmluZyIKLStsb2NhbCBkdHN5cyA9IHJlcXVpcmUgImxpYi9kdHV0aWxzLnN5c3RlbSIKLStsb2Nh bCBsb2cgPSByZXF1aXJlICJsaWIvZHR1dGlscy5sb2ciCi0rbG9jYWwgZHRkZWJ1ZyA9IHJlcXVp cmUgImRhcmt0YWJsZS5kZWJ1ZyIKLSsKLStsb2NhbCBnZXR0ZXh0ID0gZHQuZ2V0dGV4dC5nZXR0 ZXh0Ci0rCi0rbG9jYWwgZnVuY3Rpb24gXyhtc2dpZCkKLSsgICAgcmV0dXJuIGdldHRleHQobXNn aWQpCi0rZW5kCi0rCi0rLS0gZmlndXJlIG91dCB3aGVyZSB3ZSBhcmUgcnVubmluZyBmcm9tCi0r Ci0rbG9jYWwgaW5mbyA9IGRlYnVnLmdldGluZm8oMSwgIlMiKQotK2xvY2FsIHNjcmlwdHNfcGF0 aCA9IGluZm8uc291cmNlOnN1YigyKQotKwotKy0tIGFzc3VtZSB1c2VyIGJhc2VkCi0rbG9jYWwg c3lzdGVtX2Jhc2VkID0gZmFsc2UKLSsKLStpZiBzdHJpbmcubWF0Y2goc2NyaXB0c19wYXRoLCBk cy5zYW5pdGl6ZV9sdWEoZHQuY29uZmlndXJhdGlvbi5kYXRhX2RpcikpIHRoZW4KLSsgIGxvZy5t c2cobG9nLmluZm8sICJzY3JpcHRfbWFuYWdlciB1c2luZyBzeXN0ZW0gYmFzZWQgc2NyaXB0cyIp Ci0rICBzeXN0ZW1fYmFzZWQgPSB0cnVlCi0rZW5kCi0rCi0rLS0gYXBpIGNoZWNrCi0rCi0rLS0g ZHUuY2hlY2tfbWluX2FwaV92ZXJzaW9uKCI5LjMuMCIsICJzY3JpcHRfbWFuYWdlciIpCi0rCi0r LS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKy0tIEMg TyBOIFMgVCBBIE4gVCBTCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIAotKwotKy0tIHNjcmlwdF9tYW5hZ2VyIHJlcXVpcmVkIEFQSSB2ZXJzaW9uCi0r bG9jYWwgU01fQVBJX1ZFUl9SRVFEIDxjb25zdD4gPSAiOS43LjAiCi0rCi0rLS0gcGF0aCBzZXBh cmF0b3IKLStsb2NhbCBQUyA8Y29uc3Q+ID0gZHQuY29uZmlndXJhdGlvbi5ydW5uaW5nX29zID09 ICJ3aW5kb3dzIiBhbmQgIlxcIiBvciAiLyIKLSsKLSstLSBjb21tYW5kIHNlcGFyYXRvcgotK2xv Y2FsIENTIDxjb25zdD4gPSBkdC5jb25maWd1cmF0aW9uLnJ1bm5pbmdfb3MgPT0gIndpbmRvd3Mi IGFuZCAiJiIgb3IgIjsiCi0rCi0rbG9jYWwgTU9EVUxFIDxjb25zdD4gPSAic2NyaXB0X21hbmFn ZXIiCi0rCi0rbG9jYWwgTUlOX0JVVFRPTlNfUEVSX1BBR0UgPGNvbnN0PiA9IDUKLStsb2NhbCBN QVhfQlVUVE9OU19QRVJfUEFHRSA8Y29uc3Q+ID0gMjAKLStsb2NhbCBERUZBVUxUX0JVVFRPTlNf UEVSX1BBR0UgPGNvbnN0PiA9IDEwCi0rCi0rbG9jYWwgREVGQVVMVF9MT0dfTEVWRUwgPGNvbnN0 PiA9IGxvZy5pbmZvCi0rCi0rbG9jYWwgVVNFUl9MVUFfRElSIDxjb25zdD4gPSBkdC5jb25maWd1 cmF0aW9uLmNvbmZpZ19kaXIgLi4gUFMgLi4gImx1YSIKLStsb2NhbCBTWVNURU1fTFVBX0RJUiA8 Y29uc3Q+ID0gZHQuY29uZmlndXJhdGlvbi5kYXRhX2RpciAuLiBQUyAuLiAibHVhLXNjcmlwdHMi Ci0rCi0rbG9jYWwgTFVBX1NDUklQVF9SRVBPIDxjb25zdD4gPSAiaHR0cHM6Ly9naXRodWIuY29t L2Rhcmt0YWJsZS1vcmcvbHVhLXNjcmlwdHMuZ2l0IgotKwotK2xvY2FsIExVQV9BUElfVkVSIDxj b25zdD4gPSAiQVBJLSIgLi4gZHQuY29uZmlndXJhdGlvbi5hcGlfdmVyc2lvbl9zdHJpbmcKLSsK LSstLSBsb2NhbCBQT1dFUl9JQ09OID0gZHQuY29uZmlndXJhdGlvbi5jb25maWdfZGlyIC4uICIv bHVhL2RhdGEvZGF0YS9pY29ucy9wb3dlci5wbmciCi0rbG9jYWwgVVNFUl9QT1dFUl9JQ09OIDxj b25zdD4gPSBkdC5jb25maWd1cmF0aW9uLmNvbmZpZ19kaXIgLi4gIi9sdWEvZGF0YS9pY29ucy9w YXRoMjAucG5nIgotK2xvY2FsIFVTRVJfQkxBTktfSUNPTiA8Y29uc3Q+ID0gZHQuY29uZmlndXJh dGlvbi5jb25maWdfZGlyIC4uICIvbHVhL2RhdGEvaWNvbnMvYmxhbmsyMC5wbmciCi0rCi0rbG9j YWwgU1lTVEVNX1BPV0VSX0lDT04gPGNvbnN0PiA9IGR0LmNvbmZpZ3VyYXRpb24uZGF0YV9kaXIg Li4gIi9sdWEtc2NyaXB0cy9kYXRhL2ljb25zL3BhdGgyMC5wbmciCi0rbG9jYWwgU1lTVEVNX0JM QU5LX0lDT04gPGNvbnN0PiA9IGR0LmNvbmZpZ3VyYXRpb24uZGF0YV9kaXIgLi4gIi9sdWEtc2Ny aXB0cy9kYXRhL2ljb25zL2JsYW5rMjAucG5nIgotKwotK2xvY2FsIExVQV9ESVIgPSBVU0VSX0xV QV9ESVIKLStsb2NhbCBQT1dFUl9JQ09OID0gVVNFUl9QT1dFUl9JQ09OCi0rbG9jYWwgQkxBTktf SUNPTiA9IFVTRVJfQkxBTktfSUNPTgotKwotK2lmIHN5c3RlbV9iYXNlZCB0aGVuCi0rICBMVUFf RElSID0gU1lTVEVNX0xVQV9ESVIKLSsgIFBPV0VSX0lDT04gPSBTWVNURU1fUE9XRVJfSUNPTgot KyAgQkxBTktfSUNPTiA9IFNZU1RFTV9CTEFOS19JQ09OCi0rZW5kCi0rLS0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKy0tIFAgUiBFIEYgRSBSIEUgTiBD IEUgUwotKy0tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAK LSsKLStkdC5wcmVmZXJlbmNlcy5yZWdpc3RlcihNT0RVTEUsICJkaXNhYmxlX3NjcmlwdHMiLCAi Ym9vbCIsCi0rICBfKCJkaXNhYmxlIEx1YSBzY3JpcHRzIiksCi0rICBfKCJkbyBub3QgcnVuIHRo ZSBMdWEgc2NyaXB0cyIpLAotKyAgICBmYWxzZSkKLSsKLSsgIGlmIGR0LnByZWZlcmVuY2VzLnJl YWQoTU9EVUxFLCAiZGlzYWJsZV9zY3JpcHRzIiwgImJvb2wiKSB0aGVuCi0rICAgIHJldHVybgot KyAgZW5kCi0rCi0rZHQucHJlZmVyZW5jZXMucmVnaXN0ZXIoTU9EVUxFLCAiY2hlY2tfdXBkYXRl IiwgImJvb2wiLAotKyAgXygiY2hlY2sgZm9yIHVwZGF0ZWQgc2NyaXB0cyBvbiBzdGFydCB1cCIp LCAKLSsgIF8oImF1dG9tYXRpY2FsbHkgdXBkYXRlIHNjcmlwdHMgdG8gY29ycmVjdCB2ZXJzaW9u IiksIAotKyAgdHJ1ZSkKLSsKLStsb2NhbCBjaGVja19mb3JfdXBkYXRlcyA9IGR0LnByZWZlcmVu Y2VzLnJlYWQoTU9EVUxFLCAiY2hlY2tfdXBkYXRlIiwgImJvb2wiKQotKwotKy0tIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSstLSBMIE8gRyAgTCBFIFYg RSBMCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAot KwotK2xvY2FsIG9sZF9sb2dfbGV2ZWwgPSBsb2cubG9nX2xldmVsKCkKLSsKLStsb2cubG9nX2xl dmVsKERFRkFVTFRfTE9HX0xFVkVMKQotKwotKy0tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAKLSstLSBOIEEgTSBFICBTIFAgQSBDIEUKLSstLSAtIC0gLSAt IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gCi0rCi0rbG9jYWwgc2NyaXB0 X21hbmFnZXIgPSB7fQotK2xvY2FsIHNtID0gc2NyaXB0X21hbmFnZXIKLSsKLStzbS5leGVjdXRh YmxlcyA9IHt9Ci0rc20uZXhlY3V0YWJsZXMuZ2l0ID0gZGYuY2hlY2tfaWZfYmluX2V4aXN0cygi Z2l0IikKLSsKLStzbS5tb2R1bGVfaW5zdGFsbGVkID0gZmFsc2UKLStzbS5ldmVudF9yZWdpc3Rl cmVkID0gZmFsc2UKLSsKLSstLSBzZXQgdXAgdGFibGVzIHRvIGNvbnRhaW4gYWxsIHRoZSB3aWRn ZXRzIGFuZCBjaG9pY2VzCi0rCi0rc20ud2lkZ2V0cyA9IHt9Ci0rc20uZm9sZGVycyA9IHt9Ci0r c20udHJhbnNsYXRlZF9mb2xkZXJzID0ge30KLSsKLSstLSBzZXQgbG9nIGxldmVsIGZvciBmdW5j dGlvbnMKLSsKLStzbS5sb2dfbGV2ZWwgPSBERUZBVUxUX0xPR19MRVZFTAotKwotKy0tW1sKLSsK LSsgIHNtLnNjcmlwdHMgaXMgYSB0YWJsZSBvZiB0YWJsZXMgZm9yIGNvbnRhaW5pbmcgdGhlIHNj cmlwdHMKLSsgIEl0IGlzIG9yZ2FuaXplZCBhcyBpbnRvIGZvbGRlciAoZm9sZGVyKSBzdWJ0YWJs ZXMgY29udGFpbmluZwotKyAgZWFjaCBzY3JpcHQgZGVmaW5pdGlvbiwgd2hpY2ggaXMgYSB0YWJs ZQotKwotKyAgc20uc2NyaXB0cy0KLSsgICAgICAgICAgICB8Ci0rICAgICAgICAgICAgLSBmb2xk ZXItLS0tLS0tLS0tLS18Ci0rICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIC0gc2Ny aXB0Ci0rICAgICAgICAgICAgLSBmb2xkZXItLS0tfCAgICAgICB8Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgICAtIHNjcmlwdHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg LSBzY3JpcHQKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2NyaXB0fAotKwotKyAgYW5k IGEgc2NyaXB0IHRhYmxlIGxvb2tzIGxpa2UKLSsKLSsgIG5hbWUgICAgICAgICAgdGhlIG5hbWUg b2YgdGhlIHNjcmlwdCBmaWxlIHdpdGhvdXQgdGhlIGx1YSBleHRlbnNpb24KLSsgIHBhdGggICAg ICAgICAgZm9sZGVyIChmb2xkZXIpLCBwYXRoIHNlcGFyYXRvciwgcGF0aCwgbmFtZSB3aXRob3V0 IHRoZSBsdWEgZXh0ZW5zaW9uCi0rICBkb2MgICAgICAgICAgIHRoZSBoZWFkZXIgY29tbWVudHMg ZnJvbSB0aGUgc2NyaXB0IHRvIGJlIHVzZWQgYXMgYSB0b29sdGlwCi0rICBzY3JpcHRfbmFtZSAg IHRoZSBmb2xkZXIsIHBhdGggc2VwYXJhdG9yLCBhbmQgbmFtZSB3aXRob3V0IHRoZSBsdWEgZXh0 ZW5zaW9uCi0rICBydW5uaW5nICAgICAgIHRydWUgaWYgcnVubmluZywgZmFsc2UgaWYgbm90LCBo aWRkZW4gaWYgcnVubmluZyBidXQgdGhlIAotKyAgICAgICAgICAgICAgICBsaWIvc3RvcmFnZS9h Y3Rpb24gZm9yIHRoZSBzY3JpcHQgaXMgaGlkZGVuCi0rICBoYXNfbGliICAgICAgIHRydWUgaWYg aXQgY3JlYXRlcyBhIG1vZHVsZQotKyAgbGliX25hbWUgICAgICBuYW1lIG9mIHRoZSBjcmVhdGVk IGxpYgotKyAgaGFzX3N0b3JhZ2UgICB0cnVlIGlmIGl0IGNyZWF0ZXMgYSBzdG9yYWdlIChleHBv cnRlcikKLSsgIHN0b3JhZ2VfbmFtZSAgbmFtZSBvZiB0aGUgZXhwb3J0ZXIgKGluIHRoZSBleHBv cnRlciBzdG9yYWdlIG1lbnUpCi0rICBoYXNfYWN0aW9uICAgIHRydWUgaWYgaXQgY3JlYXRlcyBh biBhY3Rpb24KLSsgIGFjdGlvbl9uYW1lICAgbmFtZSBvbiB0aGUgYnV0dG9uCi0rICBoYXNfc2Vs ZWN0ICAgIHRydWUgaWYgaXQgY3JlYXRlcyBhIHNlbGVjdAotKyAgc2VsZWN0X25hbWUgICBuYW1l IG9uIHRoZSBidXR0b24KLSsgIGhhc19ldmVudCAgICAgdHJ1ZSBpZiBpdCBjcmVhdGVzIGFuIGV2 ZW50IGhhbmRsZXIKLSsgIGV2ZW50X3R5cGUgICAgdHlwZSBvZiBldmVudCwgc2hvcnRjdXQsIHBv c3QteHh4LCBwcmUteHh4Ci0rICBjYWxsYmFjayAgICAgIG5hbWUgb2YgdGhlIGNhbGxiYWNrIHJv dXRpbmUKLSsgIGluaXRpYWxpemVkICAgYWxsIG9mIHRoZSBhYm92ZSBkYXRhIGhhcyBiZWVuIHJl dHJlaXZlZCBhbmQgc2V0LiAgSWYgdGhlIAotKyAgICAgICAgICAgICAgICBzY3JpcHQgaXMgdW5s b2FkZWQgYW5kIHJlbG9hZGVkIHdlIGRvbid0IGhhdmUgdG8gcmVwYXJzZSB0aGUgZmlsZQotKwot K11dCi0rCi0rc20uc2NyaXB0cyA9IHt9Ci0rc20uc3RhcnRfcXVldWUgPSB7fQotK3NtLnBhZ2Vf c3RhdHVzID0ge30KLStzbS5wYWdlX3N0YXR1cy5udW1fYnV0dG9ucyA9IERFRkFVTFRfQlVUVE9O U19QRVJfUEFHRQotK3NtLnBhZ2Vfc3RhdHVzLmJ1dHRvbnNfY3JlYXRlZCA9IDAKLStzbS5wYWdl X3N0YXR1cy5jdXJyZW50X3BhZ2UgPSAwCi0rc20ucGFnZV9zdGF0dXMuZm9sZGVyID0gIiIKLSsK LSstLSBpbnN0YWxsZWQgc2NyaXB0IHJlcG9zaXRvcmllcwotK3NtLmluc3RhbGxlZF9yZXBvc2l0 b3JpZXMgPSB7Ci0rICB7bmFtZSA9ICJsdWEtc2NyaXB0cyIsIGRpcmVjdG9yeSA9IExVQV9ESVJ9 LAotK30KLSsKLSsKLSstLSBkb24ndCBsZXQgaXQgcnVuIHVudGlsIGV2ZXJ5dGhpbmcgaXMgaW4g cGxhY2UKLStzbS5ydW4gPSBmYWxzZQotKwotKy0tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAKLSstLSBGIFUgTiBDIFQgSSBPIE4gUwotKy0tIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSsKLSstLS0tLS0tLS0tLS0t LS0tLS0tCi0rLS0gaGVscGVyIGZ1bmN0aW9ucwotKy0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSts b2NhbCBmdW5jdGlvbiBzZXRfbG9nX2xldmVsKGxldmVsKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZl bCA9IGxvZy5sb2dfbGV2ZWwoKQotKyAgbG9nLmxvZ19sZXZlbChsZXZlbCkKLSsgIHJldHVybiBv bGRfbG9nX2xldmVsCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gcmVzdG9yZV9sb2dfbGV2ZWwo bGV2ZWwpCi0rICBsb2cubG9nX2xldmVsKGxldmVsKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9u IHByZWZfcmVhZChuYW1lLCBwcmVmX3R5cGUpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0 X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgIm5hbWUg aXMgIiAuLiBuYW1lIC4uICIgYW5kIHR5cGUgaXMgIiAuLiBwcmVmX3R5cGUpCi0rCi0rICBsb2Nh bCB2YWwgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKE1PRFVMRSwgbmFtZSwgcHJlZl90eXBlKQotKwot KyAgbG9nLm1zZyhsb2cuZGVidWcsICJyZWFkIHZhbHVlICIgLi4gdG9zdHJpbmcodmFsKSkKLSsK LSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rICByZXR1cm4gdmFsCi0rZW5k Ci0rCi0rbG9jYWwgZnVuY3Rpb24gcHJlZl93cml0ZShuYW1lLCBwcmVmX3R5cGUsIHZhbHVlKQot KyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwot KyAgbG9nLm1zZyhsb2cuZGVidWcsICJ3cml0aW5nIHZhbHVlICIgLi4gdG9zdHJpbmcodmFsdWUp IC4uICIgZm9yIG5hbWUgIiAuLiBuYW1lKQotKwotKyAgZHQucHJlZmVyZW5jZXMud3JpdGUoTU9E VUxFLCBuYW1lLCBwcmVmX3R5cGUsIHZhbHVlKQotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xk X2xvZ19sZXZlbCkKLStlbmQKLSsKLSstLS0tLS0tLS0tLS0tLS0tCi0rLS0gZ2l0IGludGVyZmFj ZQotKy0tLS0tLS0tLS0tLS0tLS0KLSsKLStsb2NhbCBmdW5jdGlvbiBnZXRfcmVwb19zdGF0dXMo cmVwbykKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZl bCkKLSsKLSsgIGxvY2FsIHAgPSBpby5wb3BlbigiY2QgIiAuLiByZXBvIC4uIENTIC4uICJnaXQg c3RhdHVzIikKLSsKLSsgIGlmIHAgdGhlbgotKyAgICBsb2NhbCBkYXRhID0gcDpyZWFkKCIqYSIp Ci0rICAgIHA6Y2xvc2UoKQotKyAgICByZXR1cm4gZGF0YQotKyAgZW5kCi0rCi0rICBsb2cubXNn KGxvZy5lcnJvciwgInVuYWJsZSB0byBnZXQgc3RhdHVzIG9mICIgLi4gcmVwbykKLSsgIHJlc3Rv cmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rICByZXR1cm4gbmlsCi0rZW5kCi0rCi0rbG9j YWwgZnVuY3Rpb24gZ2V0X2N1cnJlbnRfcmVwb19icmFuY2gocmVwbykKLSsgIGxvY2FsIG9sZF9s b2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGxvY2FsIGJyYW5j aCA9IG5pbAotKwotKyAgbG9jYWwgcCA9IGlvLnBvcGVuKCJjZCAiIC4uIHJlcG8gLi4gQ1MgLi4g ImdpdCBicmFuY2ggLS1hbGwiKQotKwotKyAgaWYgcCB0aGVuCi0rICAgIGxvY2FsIGRhdGEgPSBw OnJlYWQoIiphIikKLSsgICAgcDpjbG9zZSgpCi0rICAgIGxvY2FsIGJyYW5jaGVzID0gZHUuc3Bs aXQoZGF0YSwgIlxuIikKLSsgICAgZm9yIF8sIGIgaW4gaXBhaXJzKGJyYW5jaGVzKSBkbwotKyAg ICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiYnJhbmNoIGZvciB0ZXN0aW5nIGlzICIgLi4gYikKLSsg ICAgICBicmFuY2ggPSBzdHJpbmcubWF0Y2goYiwgIl4lKiAoLi0pJCIpCi0rCi0rICAgICAgaWYg YnJhbmNoIHRoZW4KLSsgICAgICAgIGxvZy5tc2cobG9nLmluZm8sICJjdXJyZW50IHJlcG8gYnJh bmNoIGlzICIgLi4gYnJhbmNoKQotKyAgICAgICAgcmV0dXJuIGJyYW5jaAotKyAgICAgIGVuZAot KwotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgaWYgbm90IGJyYW5jaCB0aGVuCi0rICAgIGxvZy5t c2cobG9nLmVycm9yLCAibm8gY3VycmVudCBicmFuY2ggZGV0ZWN0ZWQgaW4gcmVwb19kYXRhIikK LSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLSsgIHJldHVy biBuaWwKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBnZXRfcmVwb19icmFuY2hlcyhyZXBvKQot KyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwot KyAgbG9jYWwgYnJhbmNoZXMgPSB7fQotKyAgbG9jYWwgcCA9IGlvLnBvcGVuKCJjZCAiIC4uIHJl cG8gLi4gQ1MgLi4gImdpdCBwdWxsIC0tYWxsIiAuLiBDUyAuLiAiZ2l0IGJyYW5jaCAtLWFsbCIp Ci0rCi0rICBpZiBwIHRoZW4KLSsgICAgbG9jYWwgZGF0YSA9IHA6cmVhZCgiKmEiKQotKyAgICBw OmNsb3NlKCkKLSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJkYXRhIGlzIFxuIiAuLiBkYXRhKQot KyAgICBsb2NhbCBicmFuY2hfZGF0YSA9IGR1LnNwbGl0KGRhdGEsICJcbiIpCi0rICAgIGZvciBf LCBsaW5lIGluIGlwYWlycyhicmFuY2hfZGF0YSkgZG8KLSsgICAgICBsb2cubXNnKGxvZy5kZWJ1 ZywgImxpbmUgaXMgICIgLi4gbGluZSkKLSsgICAgICBsb2NhbCBicmFuY2ggPSBzdHJpbmcuZ3N1 YihsaW5lLCAiJXMrcmVtb3Rlcy8lYSsvIiwgIiIpCi0rICAgICAgaWYgc3RyaW5nLm1hdGNoKGJy YW5jaCwgIkFQSSIpIHRoZW4KLSsgICAgICAgIGxvZy5tc2cobG9nLmluZm8sICJmb3VuZCBicmFu Y2ggLSAiIC4uIGJyYW5jaCkKLSsgICAgICAgIHRhYmxlLmluc2VydChicmFuY2hlcywgYnJhbmNo KQotKyAgICAgIGVuZAotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwo b2xkX2xvZ19sZXZlbCkKLSsgIHJldHVybiBicmFuY2hlcyAKLStlbmQKLSsKLStsb2NhbCBmdW5j dGlvbiBpc19yZXBvX2NsZWFuKHJlcG9fZGF0YSkKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBz ZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGlmIHN0cmluZy5tYXRjaChyZXBvX2Rh dGEsICJcbiVzLSVhLi0lYTolcy0lYSVnLVxuIikgdGhlbgotKyAgICBsb2cubXNnKGxvZy5pbmZv LCAicmVwbyBpcyBkaXJ0eSIpCi0rICAgIHJldHVybiBmYWxzZQotKyAgZWxzZQotKyAgICBsb2cu bXNnKGxvZy5pbmZvLCAicmVwbyBpcyBjbGVhbiIpCi0rICAgIHJldHVybiB0cnVlCi0rICBlbmQK LSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rbG9jYWwg ZnVuY3Rpb24gY2hlY2tvdXRfcmVwb19icmFuY2gocmVwbywgYnJhbmNoKQotKyAgbG9jYWwgb2xk X2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgbG9nLm1zZyhs b2cuaW5mbywgImNoZWNrb3V0IG91dCBicmFuY2ggIiAuLiBicmFuY2ggLi4gIiBmcm9tIHJlcG9z aXRvcnkgIiAuLiByZXBvKQotKwotKyAgb3MuZXhlY3V0ZSgiY2QgIiAuLiByZXBvIC4uIENTIC4u ICJnaXQgY2hlY2tvdXQgIiAuLiBicmFuY2gpCi0rCi0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRf bG9nX2xldmVsKQotK2VuZAotKwotKy0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLS0gdXRpbGl0eSBm dW5jdGlvbnMKLSstLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotK2xvY2FsIGZ1bmN0aW9uIHVwZGF0 ZV9jb21ib2JveF9jaG9pY2VzKGNvbWJvYm94LCBjaG9pY2VfdGFibGUsIHNlbGVjdGVkKQotKyAg bG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAg bG9jYWwgaXRlbXMgPSAjY29tYm9ib3gKLSsgIGxvY2FsIGNob2ljZXMgPSAjY2hvaWNlX3RhYmxl Ci0rCi0rICBmb3IgaSwgbmFtZSBpbiBpcGFpcnMoY2hvaWNlX3RhYmxlKSBkbyAKLSsgICAgY29t Ym9ib3hbaV0gPSBuYW1lCi0rICBlbmQKLSsKLSsgIGlmIGNob2ljZXMgPCBpdGVtcyB0aGVuCi0r ICAgIGZvciBqID0gaXRlbXMsIGNob2ljZXMgKyAxLCAtMSBkbwotKyAgICAgIGNvbWJvYm94W2pd ID0gbmlsCi0rICAgIGVuZAotKyAgZW5kCi0rCi0rICBpZiBub3Qgc2VsZWN0ZWQgdGhlbgotKyAg ICBzZWxlY3RlZCA9IDEKLSsgIGVuZAotKwotKyAgY29tYm9ib3gudmFsdWUgPSBzZWxlY3RlZAot KyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStlbmQKLSsKLStsb2NhbCBmdW5j dGlvbiBzdHJpbmdfdHJpbShzdHIpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19s ZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICBsb2NhbCByZXN1bHQgPSBzdHJpbmcuZ3N1YihzdHIs ICJeJXMrIiwgIiIpIC0tIHRyaW0gbGVhZGluZyBzcGFjZXMKLSsgIHJlc3VsdCA9IHN0cmluZy5n c3ViKHJlc3VsdCwgIiVzKyQiLCAiIikgICAgLS0gdHJpbSB0cmFpbGluZyBzcGFjZXMKLSsgIHJl c3VsdCA9IHN0cmluZy5nc3ViKHJlc3VsdCwgIiw/JXMrJS0lLS4rJCIsICIiKSAtLSB0cmltIHRy YWlsaW5nIGNvbW1hIGFuZCBjb21tZW50cwotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xv Z19sZXZlbCkKLSsgIHJldHVybiByZXN1bHQKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBzdHJp bmdfZGVxdW90ZShzdHIpCi0rICByZXR1cm4gc3RyaW5nLmdzdWIoc3RyLCAiWydcIl0iLCAiIikK LStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBzdHJpbmdfZGVpMThuKHN0cikKLSsgIHJldHVybiBz dHJpbmcubWF0Y2goc3RyLCAiJV8lKCguKyklKSIpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24g c3RyaW5nX2Nob3Aoc3RyKQotKyAgcmV0dXJuIHN0cjpzdWIoMSwgLTIpCi0rZW5kCi0rCi0rLS0t LS0tLS0tLS0tLS0tLS0tCi0rLS0gc2NyaXB0IGhhbmRsaW5nCi0rLS0tLS0tLS0tLS0tLS0tLS0t Ci0rCi0rbG9jYWwgZnVuY3Rpb24gaXNfZm9sZGVyX2tub3duKGZvbGRlcl90YWJsZSwgbmFtZSkK LSsgIGxvY2FsIG1hdGNoID0gZmFsc2UKLSsKLSsgIGZvciBfLCBmb2xkZXJfbmFtZSBpbiBpcGFp cnMoZm9sZGVyX3RhYmxlKSBkbwotKyAgICBpZiBuYW1lID09IGZvbGRlcl9uYW1lIHRoZW4KLSsg ICAgICBtYXRjaCA9IHRydWUKLSsgICAgZW5kCi0rICBlbmQKLSsKLSsgIHJldHVybiBtYXRjaAot K2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIGZpbmRfdHJhbnNsYXRlZF9uYW1lKGZvbGRlcikKLSsg IGxvY2FsIHRyYW5zbGF0ZWRfbmFtZSA9IG5pbAotKwotKyAgaWYgZm9sZGVyID09ICJjb250cmli IiB0aGVuCi0rICAgIHRyYW5zbGF0ZWRfbmFtZSA9IF8oImNvbnRyaWJ1dGVkIikKLSsgIGVsc2Vp ZiBmb2xkZXIgPT0gImV4YW1wbGVzIiB0aGVuCi0rICAgIHRyYW5zbGF0ZWRfbmFtZSA9IF8oImV4 YW1wbGVzIikKLSsgIGVsc2VpZiBmb2xkZXIgPT0gIm9mZmljaWFsIiB0aGVuCi0rICAgIHRyYW5z bGF0ZWRfbmFtZSA9IF8oIm9mZmljaWFsIikKLSsgIGVsc2VpZiBmb2xkZXIgPT0gInRvb2xzIiB0 aGVuCi0rICAgIHRyYW5zbGF0ZWRfbmFtZSA9IF8oInRvb2xzIikKLSsgIGVsc2UKLSsgICAgdHJh bnNsYXRlZF9uYW1lID0gXyhmb2xkZXIpIC0tIGluIGNhc2Ugd2UgZ2V0IGx1Y2t5IGFuZCB0aGUg c3RyaW5nIGdvdCB0cmFuc2xhdGVkIGVsc2V3aGVyZQotKyAgZW5kCi0rCi0rICByZXR1cm4gdHJh bnNsYXRlZF9uYW1lCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gYWRkX3NjcmlwdF9mb2xkZXIo Zm9sZGVyKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xl dmVsKQotKwotKyAgaWYgI3NtLmZvbGRlcnMgPT0gMCBvciBub3QgaXNfZm9sZGVyX2tub3duKHNt LmZvbGRlcnMsIGZvbGRlcikgdGhlbgotKyAgICB0YWJsZS5pbnNlcnQoc20uZm9sZGVycywgZm9s ZGVyKQotKyAgICB0YWJsZS5pbnNlcnQoc20udHJhbnNsYXRlZF9mb2xkZXJzLCBmaW5kX3RyYW5z bGF0ZWRfbmFtZShmb2xkZXIpKQotKyAgICBzbS5zY3JpcHRzW2ZvbGRlcl0gPSB7fQotKyAgICBs b2cubXNnKGxvZy5kZWJ1ZywgImNyZWF0ZWQgZm9sZGVyICIgLi4gZm9sZGVyKQotKyAgZW5kCi0r Ci0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotK2xvY2FsIGZ1 bmN0aW9uIGdldF9zY3JpcHRfbWV0YWRhdGEoc2NyaXB0KQotKyAgbG9jYWwgb2xkX2xvZ19sZXZl bCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKyAgLS0gc2V0X2xvZ19sZXZlbChsb2cu ZGVidWcpCi0rCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgInByb2Nlc3NpbmcgbWV0YXRkYXRhIGZv ciAiIC4uIHNjcmlwdCkKLSsKLSsgIGxvY2FsIG1ldGFkYXRhX2Jsb2NrID0gbmlsCi0rICBsb2Nh bCBtZXRhZGF0YSA9IHt9Ci0rCi0rICBmID0gaW8ub3BlbihMVUFfRElSIC4uIFBTIC4uIHNjcmlw dCAuLiAiLmx1YSIpCi0rICBpZiBmIHRoZW4KLSsgICAgLS0gc2x1cnAgdGhlIGZpbGUKLSsgICAg bG9jYWwgY29udGVudCA9IGY6cmVhZCgiKmFsbCIpCi0rICAgIGY6Y2xvc2UoKQotKyAgICAtLSBn cmFiIHRoZSBzY3JpcHRfZGF0YS5tZXRhZGF0YSB0YWJsZQotKyAgICBtZXRhZGF0YV9ibG9jayA9 IHN0cmluZy5tYXRjaChjb250ZW50LCAic2NyaXB0X2RhdGElLm1ldGFkYXRhID0gJXtccj9cbigu LSlccj9cbiV9IikKLSsgIGVsc2UKLSsgICAgbG9nLm1zZyhsb2cuZXJyb3IsICJjYW50IHJlYWQg ZnJvbSAiIC4uIHNjcmlwdCkKLSsgIGVuZAotKwotKyAgaWYgbWV0YWRhdGFfYmxvY2sgdGhlbgot KyAgICAtLSBicmVhayB1cCB0aGUgbGluZXMgaW50byBrZXkgdmFsdWUgcGFpcnMKLSsgICAgbG9j YWwgbGluZXMgPSBkdS5zcGxpdChtZXRhZGF0YV9ibG9jaywgIlxuIikKLSsgICAgbG9nLm1zZyhs b2cuZGVidWcsICJnb3QgIiAuLiAjbGluZXMgLi4gIiBsaW5lcyIpCi0rICAgIGZvciBpID0gMSwg I2xpbmVzIGRvCi0rICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJzcGxpdHRpbmcgbGluZSAiIC4u IGxpbmVzW2ldKQotKyAgICAgIGxvY2FsIHBhcnRzID0gZHUuc3BsaXQobGluZXNbaV0sICIgPSAi KQotKyAgICAgIHBhcnRzWzFdID0gc3RyaW5nX3RyaW0ocGFydHNbMV0pCi0rICAgICAgcGFydHNb Ml0gPSBzdHJpbmdfdHJpbShwYXJ0c1syXSkKLSsgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImdv dCB2YWx1ZSAiIC4uIHBhcnRzWzFdIC4uICIgYW5kIGRhdGEgIiAuLiBwYXJ0c1syXSkKLSsgICAg ICBpZiBzdHJpbmcubWF0Y2gocGFydHNbMl0sICIlXyUoIikgdGhlbgotKyAgICAgICAgcGFydHNb Ml0gPSBfKHN0cmluZ19kZXF1b3RlKHN0cmluZ19kZWkxOG4ocGFydHNbMl0pKSkKLSsgICAgICBl bHNlCi0rICAgICAgICBwYXJ0c1syXSA9IHN0cmluZ19kZXF1b3RlKHBhcnRzWzJdKQotKyAgICAg IGVuZAotKyAgICAgIGlmIHN0cmluZy5tYXRjaChwYXJ0c1syXSwgIiwkIikgdGhlbgotKyAgICAg ICAgcGFydHNbMl0gPSBzdHJpbmdfY2hvcChwYXJ0c1syXSkKLSsgICAgICBlbmQKLSsgICAgICBs b2cubXNnKGxvZy5kZWJ1ZywgInBhcnRzIDEgaXMgIiAuLiBwYXJ0c1sxXSAuLiAiIGFuZCBwYXJ0 cyAyIGlzICIgLi4gcGFydHNbMl0pCi0rICAgICAgbWV0YWRhdGFbcGFydHNbMV1dID0gcGFydHNb Ml0KLSsgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgIm1ldGFkYXRhICIgLi4gcGFydHNbMV0gLi4g IiBpcyAiIC4uIG1ldGFkYXRhW3BhcnRzWzFdXSkKLSsgICAgZW5kCi0rICAgIGxvZy5tc2cobG9n LmRlYnVnLCAic2NyaXB0IGRhdGEgZm91bmQgZm9yICIgLi4gbWV0YWRhdGFbIm5hbWUiXSkKLSsg IGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLSsgIHJldHVybiBt ZXRhZGF0YV9ibG9jayBhbmQgbWV0YWRhdGEgb3IgbmlsCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rp b24gZ2V0X3NjcmlwdF9kb2Moc2NyaXB0KQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9s b2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKyAgbG9jYWwgZGVzY3JpcHRpb24gPSBuaWwKLSsgIGYg PSBpby5vcGVuKExVQV9ESVIgLi4gUFMgLi4gc2NyaXB0IC4uICIubHVhIikKLSsgIGlmIGYgdGhl bgotKyAgICAtLSBzbHVycCB0aGUgZmlsZQotKyAgICBsb2NhbCBjb250ZW50ID0gZjpyZWFkKCIq YWxsIikKLSsgICAgZjpjbG9zZSgpCi0rICAgIC0tIGFzc3VtZSB0aGF0IHRoZSBzZWNvbmQgYmxv Y2sgY29tbWVudCBpcyB0aGUgZG9jdW1lbnRhdGlvbgotKyAgICBkZXNjcmlwdGlvbiA9IHN0cmlu Zy5tYXRjaChjb250ZW50LCAiJS0lLSVbJVsuLSVdJV0uLSUtJS0lWyVbKC4tKSVdJV0iKQotKyAg ZWxzZQotKyAgICBsb2cubXNnKGxvZy5lcnJvciwgImNhbid0IHJlYWQgZnJvbSAiIC4uIHNjcmlw dCkKLSsgIGVuZAotKyAgaWYgZGVzY3JpcHRpb24gdGhlbgotKyAgICByZXN0b3JlX2xvZ19sZXZl bChvbGRfbG9nX2xldmVsKQotKyAgICByZXR1cm4gZGVzY3JpcHRpb24KLSsgIGVsc2UKLSsgICAg cmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLSsgICAgcmV0dXJuIF8oIm5vIGRvY3Vt ZW50YXRpb24gYXZhaWxhYmxlIikKLSsgIGVuZAotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIGFj dGl2YXRlKHNjcmlwdCkKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNt LmxvZ19sZXZlbCkKLSsKLSsgIGxvY2FsIHN0YXR1cyA9IG5pbCAtLSBzdGF0dXMgb2Ygc3RhcnQg ZnVuY3Rpb24KLSsgIGxvY2FsIGVyciA9IG5pbCAgICAtLSBlcnJvciBtZXNzYWdlIHJldHVybmVk IGlmIG1vZHVsZSBkb2Vzbid0IHN0YXJ0Ci0rCi0rICBsb2cubXNnKGxvZy5pbmZvLCAiYWN0aXZh dGluZyAiIC4uIHNjcmlwdC5uYW1lKQotKwotKyAgaWYgc2NyaXB0LnJ1bm5pbmcgPT0gZmFsc2Ug dGhlbgotKwotKyAgICBzY3JpcHRfbWFuYWdlcl9ydW5uaW5nX3NjcmlwdCA9IHNjcmlwdC5uYW1l Ci0rCi0rICAgIHN0YXR1cywgZXJyID0gZHUucHJlcXVpcmUoc2NyaXB0LnBhdGgpCi0rICAgIGxv Zy5tc2cobG9nLmRlYnVnLCAicHJlcXVpcmUgcmV0dXJuZWQgIiAuLiB0b3N0cmluZyhzdGF0dXMp IC4uICIgYW5kIGZvciBlcnIgIiAuLiB0b3N0cmluZyhlcnIpKQotKwotKyAgICBzY3JpcHRfbWFu YWdlcl9ydW5uaW5nX3NjcmlwdCA9IG5pbAotKwotKyAgICBpZiBzdGF0dXMgdGhlbgotKyAgICAg IHByZWZfd3JpdGUoc2NyaXB0LnNjcmlwdF9uYW1lLCAiYm9vbCIsIHRydWUpCi0rICAgICAgbG9n Lm1zZyhsb2cuc2NyZWVuLCBfKHN0cmluZy5mb3JtYXQoImxvYWRlZCAlcyIsIHNjcmlwdC5zY3Jp cHRfbmFtZSkpKQotKyAgICAgIHNjcmlwdC5ydW5uaW5nID0gdHJ1ZQotKwotKyAgICAgIGlmIGVy ciB+PSB0cnVlIHRoZW4KLSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiZ290IGxpYiBkYXRh IikKLSsgICAgICAgIHNjcmlwdC5kYXRhID0gZXJyCi0rICAgICAgICBpZiBzY3JpcHQuZGF0YS5k ZXN0cm95X21ldGhvZCBhbmQgc2NyaXB0LmRhdGEuZGVzdHJveV9tZXRob2QgPT0gImhpZGUiIGFu ZCBzY3JpcHQuZGF0YS5zaG93IGFuZCBkdC5ndWkuY3VycmVudF92aWV3KCkuaWQgPT0gImxpZ2h0 dGFibGUiIHRoZW4KLSsgICAgICAgICAgc2NyaXB0LmRhdGEuc2hvdygpCi0rICAgICAgICBlbmQK LSsgICAgICBlbHNlCi0rICAgICAgICBzY3JpcHQuZGF0YSA9IG5pbAotKyAgICAgIGVuZAotKwot KyAgICAgZWxzZQotKyAgICAgIGxvZy5tc2cobG9nLnNjcmVlbiwgXyhzdHJpbmcuZm9ybWF0KCIl cyBmYWlsZWQgdG8gbG9hZCIsIHNjcmlwdC5zY3JpcHRfbmFtZSkpKQotKyAgICAgIGxvZy5tc2co bG9nLmVycm9yLCAiZXJyb3IgbG9hZGluZyAiIC4uIHNjcmlwdC5zY3JpcHRfbmFtZSkKLSsgICAg ICBsb2cubXNnKGxvZy5lcnJvciwgImVycm9yIG1lc3NhZ2U6ICIgLi4gZXJyKQotKyAgICBlbmQK LSsKLSsgIGVsc2UgLS0gc2NyaXB0IGlzIGEgbGliIGFuZCBsb2FkZWQgYnV0IGhpZGRlbiBhbmQg dGhlIHVzZXIgd2FudHMgdG8gcmVsb2FkCi0rICAgIHNjcmlwdC5kYXRhLnJlc3RhcnQoKQotKyAg ICBzY3JpcHQucnVubmluZyA9IHRydWUKLSsgICAgc3RhdHVzID0gdHJ1ZQotKyAgICBwcmVmX3dy aXRlKHNjcmlwdC5zY3JpcHRfbmFtZSwgImJvb2wiLCB0cnVlKQotKyAgZW5kCi0rICBzY3JpcHRf bWFuYWdlcl9ydW5uaW5nX3NjcmlwdCA9ICJzY3JpcHRfbWFuYWdlciIKLSsKLSsgIHJlc3RvcmVf bG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rICByZXR1cm4gc3RhdHVzCi0rZW5kCi0rCi0rbG9j YWwgZnVuY3Rpb24gZGVhY3RpdmF0ZShzY3JpcHQpCi0rICAtLSBwcmVzZW50bHkgdGhlIGx1YSBh cGkgZG9lc24ndCBzdXBwb3J0IHVubG9hZGluZyBsaWIgZWxlbWVudHMgaG93ZXZlciwgd2UKLSsg IC0tICAgY2FuIGhpZGUgbGlicywgc28gd2UganVzdCBtYXJrIHRob3NlIGFzIGhpZGRlbiBhbmQg aGlkZSB0aGUgZ3VpCi0rICAtLSAgIGNhbiBkZWxldGUgc3RvcmFnZXMKLSsgIC0tICAgY2FuIGRl bGV0ZSBhY3Rpb25zCi0rICAtLSAgIGNhbiBkZWxldGUgc2VsZWN0cwotKyAgLS0gICBhbmQgbWFy ayB0aGVtIGluYWN0aXZlIGZvciB0aGUgbmV4dCB0aW1lIGRhcmt0YWJsZSBzdGFydHMKLSsKLSsg IC0tIGRlYWN0aXZhdGUgaXQuLi4uCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19s ZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICBwcmVmX3dyaXRlKHNjcmlwdC5zY3JpcHRfbmFtZSwg ImJvb2wiLCBmYWxzZSkKLSsKLSsgIGlmIHNjcmlwdC5kYXRhIHRoZW4KLSsKLSsgICAgc2NyaXB0 LmRhdGEuZGVzdHJveSgpCi0rCi0rICAgIGlmIHNjcmlwdC5kYXRhLmRlc3Ryb3lfbWV0aG9kIHRo ZW4KLSsgICAgICBpZiBzdHJpbmcubWF0Y2goc2NyaXB0LmRhdGEuZGVzdHJveV9tZXRob2QsICJo aWRlIikgdGhlbgotKyAgICAgICAgc2NyaXB0LnJ1bm5pbmcgPSAiaGlkZGVuIgotKyAgICAgIGVs c2UKLSsgICAgICAgIHBhY2thZ2UubG9hZGVkW3NjcmlwdC5zY3JpcHRfbmFtZV0gPSBuaWwKLSsg ICAgICAgIHNjcmlwdC5ydW5uaW5nID0gZmFsc2UKLSsgICAgICBlbmQKLSsgICAgZWxzZQotKyAg ICAgIHBhY2thZ2UubG9hZGVkW3NjcmlwdC5zY3JpcHRfbmFtZV0gPSBuaWwKLSsgICAgICBzY3Jp cHQucnVubmluZyA9IGZhbHNlCi0rICAgIGVuZAotKwotKyAgICBsb2cubXNnKGxvZy5pbmZvLCAi dHVybmVkIG9mZiAiIC4uIHNjcmlwdC5zY3JpcHRfbmFtZSkKLSsgICAgbG9nLm1zZyhsb2cuc2Ny ZWVuLCBfKHN0cmluZy5mb3JtYXQoIiVzIHN0b3BwZWQiLCBzY3JpcHQubmFtZSkpKQotKwotKyAg ZWxzZQotKyAgICBzY3JpcHQucnVubmluZyA9IGZhbHNlCi0rCi0rICAgIGxvZy5tc2cobG9nLmlu Zm8sICJzZXR0aW5nICIgLi4gc2NyaXB0LnNjcmlwdF9uYW1lIC4uICIgdG8gbm90IHN0YXJ0IikK LSsgICAgbG9nLm1zZyhsb2cuc2NyZWVuLCBfKHN0cmluZy5mb3JtYXQoIiVzIHdpbGwgbm90IHN0 YXJ0IHdoZW4gZGFya3RhYmxlIGlzIHJlc3RhcnRlZCIsIHNjcmlwdC5uYW1lKSkpCi0rICBlbmQK LSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rbG9jYWwg ZnVuY3Rpb24gc3RhcnRfc2NyaXB0cygpCi0rICBmb3IgXywgc2NyaXB0IGluIGlwYWlycyhzbS5z dGFydF9xdWV1ZSkgZG8KLSsgICAgYWN0aXZhdGUoc2NyaXB0KQotKyAgICBmb3IgaSA9IDEsIHNt LnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zIGRvCi0rICAgICAgbG9jYWwgbmFtZSA9IHNjcmlwdC5t ZXRhZGF0YSBhbmQgc2NyaXB0Lm1ldGFkYXRhLm5hbWUgb3Igc2NyaXB0Lm5hbWUKLSsgICAgICBp ZiBzbS53aWRnZXRzLmxhYmVsc1tpXS5sYWJlbCA9PSBuYW1lIHRoZW4KLSsgICAgICAgIHNtLndp ZGdldHMuYnV0dG9uc1tpXS5uYW1lID0gInBiX29uIgotKyAgICAgICAgYnJlYWsKLSsgICAgICBl bmQKLSsgICAgZW5kCi0rICBlbmQKLSsgIHNtLnN0YXJ0X3F1ZXVlID0ge30KLStlbmQKLSsKLSts b2NhbCBmdW5jdGlvbiBxdWV1ZV9zY3JpcHRfdG9fc3RhcnQoc2NyaXB0KQotKyAgdGFibGUuaW5z ZXJ0KHNtLnN0YXJ0X3F1ZXVlLCBzY3JpcHQpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gYWRk X3NjcmlwdF9uYW1lKG5hbWUsIHBhdGgsIGZvbGRlcikKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwg PSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGxvZy5tc2cobG9nLmRlYnVnLCAi Zm9sZGVyIGlzICIgLi4gZm9sZGVyKQotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJuYW1lIGlzICIg Li4gbmFtZSkKLSsKLSsgIGxvY2FsIHNjcmlwdCA9IHsgCi0rICAgIG5hbWUgPSBuYW1lLCAKLSsg ICAgcGF0aCA9IGZvbGRlciAuLiAiLyIgLi4gcGF0aCAuLiBuYW1lLAotKyAgICBydW5uaW5nID0g ZmFsc2UsCi0rICAgIGRvYyA9IGdldF9zY3JpcHRfZG9jKGZvbGRlciAuLiAiLyIgLi4gcGF0aCAu LiBuYW1lKSwKLSsgICAgbWV0YWRhdGEgPSBnZXRfc2NyaXB0X21ldGFkYXRhKGZvbGRlciAuLiAi LyIgLi4gcGF0aCAuLiBuYW1lKSwKLSsgICAgc2NyaXB0X25hbWUgPSBmb2xkZXIgLi4gIi8iIC4u IG5hbWUsCi0rICAgIGRhdGEgPSBuaWwKLSsgIH0KLSsKLSsgIHRhYmxlLmluc2VydChzbS5zY3Jp cHRzW2ZvbGRlcl0sIHNjcmlwdCkKLSsKLSsgIGlmIHByZWZfcmVhZChzY3JpcHQuc2NyaXB0X25h bWUsICJib29sIikgdGhlbgotKyAgICBxdWV1ZV9zY3JpcHRfdG9fc3RhcnQoc2NyaXB0KQotKyAg ZWxzZQotKyAgICBwcmVmX3dyaXRlKHNjcmlwdC5zY3JpcHRfbmFtZSwgImJvb2wiLCBmYWxzZSkK LSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStlbmQKLSsK LStsb2NhbCBmdW5jdGlvbiBwcm9jZXNzX3NjcmlwdF9kYXRhKHNjcmlwdF9maWxlKQotKyAgbG9j YWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgLS0g dGhlIHNjcmlwdCBmaWxlIHN1cHBsaWVkIGlzIGZvbGRlci9maWxlbmFtZS5maWxldHlwZQotKyAg LS0gdGhlIGZvbGxvd2luZyBwYXR0ZXJuIHNwbGl0cyB0aGUgc3RyaW5nIGludG8gZm9sZGVyLCBw YXRoLCBuYW1lLCBmaWxlZW5hbWUsIGFuZCBmaWxldHlwZQotKyAgLS0gZm9yIGV4YW1wbGUgY29u dHJpYi9naW1wLmx1YSBiZWNvbWVzCi0rICAtLSBmb2xkZXIgLSBjb250cmliCi0rICAtLSBwYXRo IC0gCi0rICAtLSBuYW1lIC0gZ2ltcC5sdWEKLSsgIC0tIGZpbGVuYW1lIC0gZ2ltcAotKyAgLS0g ZmlsZXR5cGUgLSBsdWEKLSsKLSsgIC0tIFRoYW5rcyBUb2JpYXMgSmFrb2JzIGZvciB0aGUgYXdl c29tZSByZWd1bGFyeSBleHByZXNzaW9uCi0rCi0rICBsb2NhbCBwYXR0ZXJuID0gIiguLSkvKC4t KSgoW15cXC9dLSklLj8oW14lLlxcL10qKSkkIgotKyAgaWYgZHQuY29uZmlndXJhdGlvbi5ydW5u aW5nX29zID09ICJ3aW5kb3dzIiB0aGVuCi0rICAgIC0tIGNoYW5nZSB0aGUgcGF0aCBzZXBhcmF0 b3IgZnJvbSAvIHRvIFwgZm9yIHdpbmRvd3MKLSsgICAgcGF0dGVybiA9ICIoLi0pXFwoLi0pKChb XlxcXS0pJS4/KFteJS5cXF0qKSkkIgotKyAgZW5kCi0rCi0rICBsb2cubXNnKGxvZy5pbmZvLCAi cHJvY2Vzc2luZyAiIC4uIHNjcmlwdF9maWxlKQotKwotKyAgLS0gYWRkIHRoZSBzY3JpcHQgZGF0 YQotKyAgbG9jYWwgZm9sZGVyLHBhdGgsbmFtZSxmaWxlbmFtZSxmaWxldHlwZSA9IHN0cmluZy5t YXRjaChzY3JpcHRfZmlsZSwgcGF0dGVybikKLSsKLSsgIGlmIGZvbGRlciBhbmQgbmFtZSBhbmQg cGF0aCB0aGVuCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiZm9sZGVyIGlzICIgLi4gZm9sZGVy KQotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgIm5hbWUgaXMgIiAuLiBuYW1lKQotKwotKyAgICBh ZGRfc2NyaXB0X2ZvbGRlcihmb2xkZXIpCi0rICAgIGFkZF9zY3JpcHRfbmFtZShuYW1lLCBwYXRo LCBmb2xkZXIpCi0rICBlbmQKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwp Ci0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gZW5zdXJlX2xpYl9pbl9zZWFyY2hfcGF0aChsaW5l KQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQot KwotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJsaW5lIGlzICIgLi4gbGluZSkKLSsKLSsgIGlmIHN0 cmluZy5tYXRjaChsaW5lLCBkcy5zYW5pdGl6ZV9sdWEoZHQuY29uZmlndXJhdGlvbi5jb25maWdf ZGlyIC4uIFBTIC4uICJsdWEvbGliIikpIHRoZW4KLSsgICAgbG9nLm1zZyhsb2cuZGVidWcsIGxp bmUgLi4gIiBpcyBhbHJlYWR5IGluIHNlYXJjaCBwYXRoLCByZXR1cm5pbmcuLi4iKQotKyAgICBy ZXR1cm4KLSsgIGVuZAotKwotKyAgbG9jYWwgcGF0dGVybiA9ICBkdC5jb25maWd1cmF0aW9uLnJ1 bm5pbmdfb3MgPT0gIndpbmRvd3MiIGFuZCAgIiguKylcXGxpYlxcLitsdWEiIG9yICAiKC4rKS9s aWIvLitsdWEiCi0rICBsb2NhbCBwYXRoID0gc3RyaW5nLm1hdGNoKGxpbmUsIHBhdHRlcm4pCi0r Ci0rICBsb2cubXNnKGxvZy5kZWJ1ZywgImV4dHJhY3RlZCBwYXRoIGlzICIgLi4gcGF0aCkKLSsg IGxvZy5tc2cobG9nLmRlYnVnLCAicGFja2FnZS5wYXRoIGlzICIgLi4gcGFja2FnZS5wYXRoKQot KwotKyAgaWYgbm90IHN0cmluZy5tYXRjaChwYWNrYWdlLnBhdGgsIGRzLnNhbml0aXplX2x1YShw YXRoKSkgdGhlbgotKwotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgInBhdGggaXNuJ3QgaW4gcGFj a2FnZS5wYXRoLCBhZGRpbmcuLi4iKQotKwotKyAgICBwYWNrYWdlLnBhdGggPSBwYWNrYWdlLnBh dGggLi4gIjsiIC4uIHBhdGggLi4gIi8/Lmx1YSIKLSsKLSsgICAgbG9nLm1zZyhsb2cuZGVidWcs ICJuZXcgcGFja2FnZS5wYXRoIGlzICIgLi4gcGFja2FnZS5wYXRoKQotKyAgZW5kCi0rCi0rICBy ZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9u IHNjYW5fc2NyaXB0cyhzY3JpcHRfZGlyKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9s b2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgbG9jYWwgc2NyaXB0X2NvdW50ID0gMAotKyAg bG9jYWwgZmluZF9jbWQgPSAiZmluZCAtTCAiIC4uIHNjcmlwdF9kaXIgLi4gIiAtbmFtZSBcXCou bHVhIC1wcmludCB8IHNvcnQiCi0rCi0rICBpZiBkdC5jb25maWd1cmF0aW9uLnJ1bm5pbmdfb3Mg PT0gIndpbmRvd3MiIHRoZW4KLSsgICAgZmluZF9jbWQgPSAiZGlyIC9iL3MgXCIiIC4uIHNjcmlw dF9kaXIgLi4gIlxcKi5sdWFcIiAyPm51bCB8IHNvcnQiCi0rICBlbmQKLSsKLSsgIGxvZy5tc2co bG9nLmRlYnVnLCAiZmluZCBjb21tYW5kIGlzICIgLi4gZmluZF9jbWQpCi0rCi0rICAtLSBzY2Fu IHRoZSBzY3JpcHRzCi0rICBsb2NhbCBvdXRwdXQgPSBpby5wb3BlbihmaW5kX2NtZCkKLSsgIGZv ciBsaW5lIGluIG91dHB1dDpsaW5lcygpIGRvCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibGlu ZSBpcyAiIC4uIGxpbmUpCi0rICAgIGxvY2FsIHNjcmlwdF9kaXIgPSBTWVNURU1fTFVBX0RJUgot KyAgICBpZiBzdHJpbmcubWF0Y2gobGluZSwgZHMuc2FuaXRpemVfbHVhKFVTRVJfTFVBX0RJUikp IHRoZW4KLSsgICAgICBzY3JpcHRfZGlyID0gVVNFUl9MVUFfRElSCi0rICAgIGVuZAotKyAgICAt LSBhZGQgYSBzdHJpbmcubWF0Y2ggdG8gZmlndXJlIG91dCB3aGljaCBsdWEgZGlyIHRvIHVzZQot KyAgICBsb2NhbCBsID0gc3RyaW5nLmdzdWIobGluZSwgZHMuc2FuaXRpemVfbHVhKHNjcmlwdF9k aXIpIC4uIFBTLCAiIikgICAtLSBzdHJpcCB0aGUgbHVhIGRpciBvZmYKLSsgICAgbG9jYWwgc2Ny aXB0X2ZpbGUgPSBsOnN1YigxLC01KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LS0gc3RyaXAgb2ZmIC5sdWFcbgotKyAgICBpZiBub3Qgc3RyaW5nLm1hdGNoKHNjcmlwdF9maWxl LCAic2NyaXB0X21hbmFnZXIiKSB0aGVuICAgICAgICAgICAtLSBsZXQncyBub3QgaW5jbHVkZSBv dXJzZWxmCi0rICAgICAgaWYgbm90IHN0cmluZy5tYXRjaChzY3JpcHRfZmlsZSwgInBsdWdpbnMi KSB0aGVuICAgICAgICAgICAgICAgIC0tIHNraXAgcGx1Z2lucwotKyAgICAgICAgaWYgbm90IHN0 cmluZy5tYXRjaChzY3JpcHRfZmlsZSwgImxpYiIgLi4gUFMpIHRoZW4gICAgICAgICAgICAtLSBs ZXQncyBub3QgdHJ5IGFuZCBydW4gbGlicmFyaWVzCi0rICAgICAgICAgIGlmIG5vdCBzdHJpbmcu bWF0Y2goc2NyaXB0X2ZpbGUsICIlLmdpdCIpIHRoZW4gICAgICAgICAgICAgIC0tIGRvbid0IG1h dGNoIGZpbGVzIGluIHRoZSAuZ2l0IGRpcmVjdG9yeQotKyAgICAgICAgICAgIHByb2Nlc3Nfc2Ny aXB0X2RhdGEoc2NyaXB0X2ZpbGUpCi0rICAgICAgICAgICAgc2NyaXB0X2NvdW50ID0gc2NyaXB0 X2NvdW50ICsgMQotKyAgICAgICAgICBlbmQKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgZW5z dXJlX2xpYl9pbl9zZWFyY2hfcGF0aChsaW5lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LS0gYnV0IGxldCdzIG1ha2Ugc3VyZSBsaWJyYXJpZXMgY2FuIGJlIGZvdW5kCi0rICAgICAgICBl bmQKLSsgICAgICBlbmQKLSsgICAgZW5kCi0rICBlbmQKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVs KG9sZF9sb2dfbGV2ZWwpCi0rICByZXR1cm4gc2NyaXB0X2NvdW50Ci0rZW5kCi0rCi0rbG9jYWwg ZnVuY3Rpb24gdXBkYXRlX3NjcmlwdHMoKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9s b2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKyAgbG9jYWwgcmVzdWx0ID0gZmFsc2UKLSsKLSsgIGxv Y2FsIGdpdCA9IHNtLmV4ZWN1dGFibGVzLmdpdAotKwotKyAgaWYgbm90IGdpdCB0aGVuCi0rICAg IGxvZy5tc2cobG9nLnNjcmVlbiwgXygiRVJST1I6IGdpdCBub3QgZm91bmQuICBJbnN0YWxsIG9y IHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBnaXQgZXhlY3V0YWJsZS4iKSkKLSsgICAgcmV0 dXJuCi0rICBlbmQKLSsKLSsgIGxvY2FsIGdpdF9jb21tYW5kID0gImNkICIgLi4gTFVBX0RJUiAu LiAiICIgLi4gQ1MgLi4gIiAiIC4uIGdpdCAuLiAiIHB1bGwiCi0rICBsb2cubXNnKGxvZy5kZWJ1 ZywgInVwZGF0ZSBnaXQgY29tbWFuZCBpcyAiIC4uIGdpdF9jb21tYW5kKQotKwotKyAgaWYgZHQu Y29uZmlndXJhdGlvbi5ydW5uaW5nX29zID09ICJ3aW5kb3dzIiB0aGVuCi0rICAgIHJlc3VsdCA9 IGR0c3lzLndpbmRvd3NfY29tbWFuZChnaXRfY29tbWFuZCkKLSsgIGVsc2UKLSsgICAgcmVzdWx0 ID0gb3MuZXhlY3V0ZShnaXRfY29tbWFuZCkKLSsgIGVuZAotKwotKyAgaWYgcmVzdWx0ID09IDAg dGhlbgotKyAgICBsb2cubXNnKGxvZy5zY3JlZW4sIF8oImx1YSBzY3JpcHRzIHN1Y2Nlc3NmdWxs eSB1cGRhdGVkIikpCi0rICBlbmQKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2 ZWwpCi0rICByZXR1cm4gcmVzdWx0Ci0rZW5kCi0rCi0rLS0tLS0tLS0tLS0tLS0KLSstLSBVSSBo YW5kbGluZwotKy0tLS0tLS0tLS0tLS0tCi0rCi0rbG9jYWwgZnVuY3Rpb24gdXBkYXRlX3Njcmlw dF91cGRhdGVfY2hvaWNlcygpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZl bChzbS5sb2dfbGV2ZWwpCi0rCi0rICBsb2NhbCBpbnN0YWxscyA9IHt9Ci0rICBsb2NhbCBwcmVm X3N0cmluZyA9ICIiCi0rCi0rICBmb3IgaSwgcmVwbyBpbiBpcGFpcnMoc20uaW5zdGFsbGVkX3Jl cG9zaXRvcmllcykgZG8KLSsgICAgdGFibGUuaW5zZXJ0KGluc3RhbGxzLCByZXBvLm5hbWUpCi0r ICAgIGlmIG5vdCBzdHJpbmcubWF0Y2gocHJlZl9zdHJpbmcsIGRzLnNhbml0aXplX2x1YShyZXBv Lm5hbWUpKSB0aGVuCi0rICAgICAgcHJlZl9zdHJpbmcgPSBwcmVmX3N0cmluZyAuLiBpIC4uICIs IiAuLiByZXBvLm5hbWUgLi4gIiwiIC4uIHJlcG8uZGlyZWN0b3J5IC4uICIsIgotKyAgICBlbmQK LSsgIGVuZAotKwotKyAgdXBkYXRlX2NvbWJvYm94X2Nob2ljZXMoc20ud2lkZ2V0cy51cGRhdGVf c2NyaXB0X2Nob2ljZXMsIGluc3RhbGxzLCAxKQotKwotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJy ZXBvIHByZWYgc3RyaW5nIGlzICIgLi4gcHJlZl9zdHJpbmcpCi0rICBwcmVmX3dyaXRlKCJpbnN0 YWxsZWRfcmVwb3MiLCAic3RyaW5nIiwgcHJlZl9zdHJpbmcpCi0rCi0rICByZXN0b3JlX2xvZ19s ZXZlbChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIHNjYW5fcmVwb3Np dG9yaWVzKCkKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19s ZXZlbCkKLSsKLSsgIGxvY2FsIHNjcmlwdF9jb3VudCA9IDAKLSsgIGxvY2FsIGZpbmRfY21kID0g ImZpbmQgLUwgIiAuLiBMVUFfRElSIC4uICIgLW5hbWUgXFwqLmdpdCAtcHJpbnQgfCBzb3J0Igot KwotKyAgaWYgZHQuY29uZmlndXJhdGlvbi5ydW5uaW5nX29zID09ICJ3aW5kb3dzIiB0aGVuCi0r ICAgIGZpbmRfY21kID0gImRpciAvYi9zIC9hOmQgIiAuLiBMVUFfRElSIC4uIFBTIC4uICIqLmdp dCAyPm51bCB8IHNvcnQiCi0rICBlbmQKLSsKLSsgIGxvZy5tc2cobG9nLmRlYnVnLCAiZmluZCBj b21tYW5kIGlzICIgLi4gZmluZF9jbWQpCi0rCi0rICBsb2NhbCBvdXRwdXQgPSBpby5wb3Blbihm aW5kX2NtZCkKLSsKLSsgIGZvciBsaW5lIGluIG91dHB1dDpsaW5lcygpIGRvCi0rICAgIGxvY2Fs IGwgPSBzdHJpbmcuZ3N1YihsaW5lLCBkcy5zYW5pdGl6ZV9sdWEoTFVBX0RJUikgLi4gUFMsICIi KSAgIC0tIHN0cmlwIHRoZSBsdWEgZGlyIG9mZgotKyAgICBsb2NhbCBmb2xkZXIgPSBzdHJpbmcu bWF0Y2gobCwgIiguLSkiIC4uIFBTKSAgICAgICAgICAgICAgICAgICAgICAgIC0tIGdldCBldmVy eXRoaW5nIHRvIHRoZSBmaXJzdCAvCi0rCi0rICAgIGlmIGZvbGRlciB0aGVuICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGlmIHdlIGhhdmUgYSBmb2xk ZXIgKC5naXQgZG9lc24ndCkKLSsKLSsgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImZvdW5kIGZv bGRlciAiIC4uIGZvbGRlcikKLSsKLSsgICAgICBpZiBub3Qgc3RyaW5nLm1hdGNoKGZvbGRlciwg InBsdWdpbnMiKSBhbmQgbm90IHN0cmluZy5tYXRjaChmb2xkZXIsICIlLmdpdCIpIHRoZW4gLS0g c2tpcCBwbHVnaW5zCi0rCi0rICAgICAgICBpZiAjc20uaW5zdGFsbGVkX3JlcG9zaXRvcmllcyA9 PSAxIHRoZW4KLSsgICAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJvbmx5IDEgcmVwbywgYWRk aW5nICIgLi4gZm9sZGVyKQotKyAgICAgICAgICB0YWJsZS5pbnNlcnQoc20uaW5zdGFsbGVkX3Jl cG9zaXRvcmllcywge25hbWUgPSBmb2xkZXIsIGRpcmVjdG9yeSA9IExVQV9ESVIgLi4gUFMgLi4g Zm9sZGVyfSkKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJt b3JlIHRoYW4gMSByZXBvLCB3ZSBoYXZlIHRvIHNlYXJjaCB0aGUgcmVwb3MgdG8gbWFrZSBzdXJl IGl0J3Mgbm90IHRoZXJlIikKLSsgICAgICAgICAgbG9jYWwgZm91bmQgPSBuaWwKLSsKLSsgICAg ICAgICAgZm9yIF8sIHJlcG8gaW4gaXBhaXJzKHNtLmluc3RhbGxlZF9yZXBvc2l0b3JpZXMpIGRv Ci0rICAgICAgICAgICAgaWYgc3RyaW5nLm1hdGNoKHJlcG8ubmFtZSwgZHMuc2FuaXRpemVfbHVh KGZvbGRlcikpIHRoZW4KLSsgICAgICAgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibWF0Y2hl ZCAiIC4uIHJlcG8ubmFtZSkKLSsgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZQotKyAgICAgICAg ICAgICAgYnJlYWsKLSsgICAgICAgICAgICBlbmQKLSsgICAgICAgICAgZW5kCi0rCi0rICAgICAg ICAgIGlmIG5vdCBmb3VuZCB0aGVuCi0rICAgICAgICAgICAgdGFibGUuaW5zZXJ0KHNtLmluc3Rh bGxlZF9yZXBvc2l0b3JpZXMsIHtuYW1lID0gZm9sZGVyLCBkaXJlY3RvcnkgPSBMVUFfRElSIC4u IFBTIC4uIGZvbGRlcn0pCi0rICAgICAgICAgIGVuZAotKwotKyAgICAgICAgZW5kCi0rICAgICAg ZW5kCi0rICAgIGVuZAotKyAgZW5kCi0rCi0rICB1cGRhdGVfc2NyaXB0X3VwZGF0ZV9jaG9pY2Vz KCkKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rbG9j YWwgZnVuY3Rpb24gaW5zdGFsbF9zY3JpcHRzKCkKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBz ZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGxvY2FsIHVybCA9IHNtLndpZGdldHMu c2NyaXB0X3VybC50ZXh0Ci0rICBsb2NhbCBmb2xkZXIgPSBzbS53aWRnZXRzLm5ld19mb2xkZXIu dGV4dAotKwotKyAgaWYgbm90IGRmLnRlc3RfZmlsZShVU0VSX0xVQV9ESVIsICJkIikgdGhlbgot KyAgICBkZi5ta2RpcihVU0VSX0xVQV9ESVIpCi0rICAgIGlmIG5vdCBkZi50ZXN0X2ZpbGUoVVNF Ul9MVUFfRElSLCAiZCIpIHRoZW4KLSsgICAgICBsb2cubXNnKGxvZy5lcnJvciwgInVuYWJsZSB0 byBjcmVhdGUgdXNlciBsdWEgZGlyZWN0b3J5IikKLSsgICAgICBsb2cubXNnKGxvZy5zY3JlZW4s IF8oInVuYWJsZSB0byBjcmVhdGUgdXNlciBsdWEgZGlyZWN0b3J5LCBpbnN0YWxsaW5nIGFkZGl0 aW9uYWwgc2NyaXB0cyBmYWlsZWQiKSkKLSsgICAgICByZXR1cm4KLSsgICAgZW5kCi0rICBlbmQK LSsKLSsgIGlmIHN0cmluZy5tYXRjaChkdS5qb2luKHNtLmZvbGRlcnMsICIgIiksIGRzLnNhbml0 aXplX2x1YShmb2xkZXIpKSB0aGVuCi0rICAgIGxvZy5tc2cobG9nLnNjcmVlbiwgc3RyaW5nLmZv cm1hdChfKCJmb2xkZXIgJXMgaXMgYWxyZWFkeSBpbiB1c2UuIFBsZWFzZSBzcGVjaWZ5IGEgZGlm ZmVyZW50IGZvbGRlciBuYW1lLiIpLCBmb2xkZXIpKQotKyAgICBsb2cubXNnKGxvZy5lcnJvciwg ImZvbGRlciAiIC4uIGZvbGRlciAuLiAiIGFscmVhZHkgZXhpc3RzLCByZXR1cm5pbmcuLi4iKQot KyAgICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotKyAgICByZXR1cm4KLSsgIGVu ZAotKwotKyAgbG9jYWwgcmVzdWx0ID0gZmFsc2UKLSsKLSsgIGxvY2FsIGdpdCA9IHNtLmV4ZWN1 dGFibGVzLmdpdAotKwotKyAgaWYgbm90IGdpdCB0aGVuCi0rICAgIGxvZy5tc2cobG9nLnNjcmVl biwgXygiRVJST1I6IGdpdCBub3QgZm91bmQuICBJbnN0YWxsIG9yIHNwZWNpZnkgdGhlIGxvY2F0 aW9uIG9mIHRoZSBnaXQgZXhlY3V0YWJsZS4iKSkKLSsgICAgcmVzdG9yZV9sb2dfbGV2ZWwob2xk X2xvZ19sZXZlbCkKLSsgICAgcmV0dXJuCi0rICBlbmQKLSsKLSsgIGxvY2FsIGdpdF9jb21tYW5k ID0gImNkICIgLi4gVVNFUl9MVUFfRElSIC4uICIgIiAuLiBDUyAuLiAiICIgLi4gZ2l0IC4uICIg Y2xvbmUgIiAuLiB1cmwgLi4gIiAiIC4uIGZvbGRlcgotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJ1 cGRhdGUgZ2l0IGNvbW1hbmQgaXMgIiAuLiBnaXRfY29tbWFuZCkKLSsKLSsgIGlmIGR0LmNvbmZp Z3VyYXRpb24ucnVubmluZ19vcyA9PSAid2luZG93cyIgdGhlbgotKyAgICByZXN1bHQgPSBkdHN5 cy53aW5kb3dzX2NvbW1hbmQoZ2l0X2NvbW1hbmQpCi0rICBlbHNlCi0rICAgIHJlc3VsdCA9IGR0 c3lzLmV4dGVybmFsX2NvbW1hbmQoZ2l0X2NvbW1hbmQpCi0rICBlbmQKLSsKLSsgIGxvZy5tc2co bG9nLmluZm8sICJyZXN1bHQgZnJvbSBpbXBvcnQgaXMgIiAuLiByZXN1bHQpCi0rCi0rICBpZiBy ZXN1bHQgPT0gMCB0aGVuCi0rICAgIGxvY2FsIGNvdW50ID0gc2Nhbl9zY3JpcHRzKFVTRVJfTFVB X0RJUikKLSsKLSsgICAgaWYgY291bnQgPiAwIHRoZW4KLSsgICAgICB1cGRhdGVfY29tYm9ib3hf Y2hvaWNlcyhzbS53aWRnZXRzLmZvbGRlcl9zZWxlY3Rvciwgc20uZm9sZGVycywgc20ud2lkZ2V0 cy5mb2xkZXJfc2VsZWN0b3Iuc2VsZWN0ZWQpCi0rICAgICAgZHQucHJpbnQoc3RyaW5nLmZvcm1h dChfKCJzY3JpcHRzIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgaW50byBmb2xkZXIgJXMiKSwgZm9s ZGVyKSkKLSsgICAgICB0YWJsZS5pbnNlcnQoc20uaW5zdGFsbGVkX3JlcG9zaXRvcmllcywge25h bWUgPSBmb2xkZXIsIGRpcmVjdG9yeSA9IFVTRVJfTFVBX0RJUiAuLiBQUyAuLiBmb2xkZXJ9KQot KyAgICAgIHVwZGF0ZV9zY3JpcHRfdXBkYXRlX2Nob2ljZXMoKQotKwotKyAgICAgIGZvciBpID0g MSwgI3NtLndpZGdldHMuZm9sZGVyX3NlbGVjdG9yIGRvCi0rICAgICAgICBpZiBzdHJpbmcubWF0 Y2goc20ud2lkZ2V0cy5mb2xkZXJfc2VsZWN0b3JbaV0sIGRzLnNhbml0aXplX2x1YShmb2xkZXIp KSB0aGVuCi0rICAgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAic2V0dGluZyBmb2xkZXIgc2Vs ZWN0b3IgdG8gIiAuLiBpKQotKyAgICAgICAgICBzbS53aWRnZXRzLmZvbGRlcl9zZWxlY3Rvci5z ZWxlY3RlZCA9IGkKLSsgICAgICAgICAgYnJlYWsKLSsgICAgICAgIGVuZAotKyAgICAgICAgaSA9 IGkgKyAxCi0rICAgICAgZW5kCi0rCi0rICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJjbGVhcmlu ZyB0ZXh0IGZpZWxkcyIpCi0rICAgICAgc20ud2lkZ2V0cy5zY3JpcHRfdXJsLnRleHQgPSAiIgot KyAgICAgIHNtLndpZGdldHMubmV3X2ZvbGRlci50ZXh0ID0gIiIKLSsgICAgICBzbS53aWRnZXRz Lm1haW5fbWVudS5zZWxlY3RlZCA9IDMKLSsgICAgZWxzZQotKyAgICAgIGxvZy5tc2cobG9nLnNj cmVlbiwgXygibm8gc2NyaXB0cyBmb3VuZCB0byBpbnN0YWxsIikpCi0rICAgICAgbG9nLm1zZyhs b2cuZXJyb3IsICJzY2FuX3NjcmlwdHMgcmV0dXJuZWQgIiAuLiBjb3VudCAuLiAiIHNjcmlwdHMg Zm91bmQuICBOb3QgYWRkaW5nIHRvIGZvbGRlcl9zZWxlY3RvciIpCi0rICAgIGVuZAotKwotKyAg ZWxzZQotKyAgICBsb2cubXNnKGxvZy5zY3JlZW4sIF8oImZhaWxlZCB0byBkb3dubG9hZCBzY3Jp cHRzIikpCi0rICBlbmQKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0r ICByZXR1cm4gcmVzdWx0Ci0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gY2xlYXJfYnV0dG9uKG51 bWJlcikKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZl bCkKLSsKLSsgIGxvY2FsIGJ1dHRvbiA9IHNtLndpZGdldHMuYnV0dG9uc1tudW1iZXJdCi0rICBs b2NhbCBsYWJlbCA9IHNtLndpZGdldHMubGFiZWxzW251bWJlcl0KLSsKLSsgIGJ1dHRvbi5pbWFn ZSA9IEJMQU5LX0lDT04KLSsgIGJ1dHRvbi50b29sdGlwID0gIiIKLSsgIGJ1dHRvbi5zZW5zaXRp dmUgPSBmYWxzZQotKyAgbGFiZWwubGFiZWwgPSAiIgotKyAgYnV0dG9uLm5hbWUgPSAiIgotKwot KyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStlbmQKLSsKLStsb2NhbCBmdW5j dGlvbiBmaW5kX3NjcmlwdChmb2xkZXIsIG5hbWUpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0g c2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgImxv b2tpbmcgZm9yIHNjcmlwdCAiIC4uIG5hbWUgLi4gIiBpbiBmb2xkZXIgIiAuLiBmb2xkZXIpCi0r Ci0rICBmb3IgXywgc2NyaXB0IGluIGlwYWlycyhzbS5zY3JpcHRzW2ZvbGRlcl0pIGRvCi0rICAg IGlmIHN0cmluZy5tYXRjaChzY3JpcHQubmFtZSwgIl4iIC4uIGRzLnNhbml0aXplX2x1YShuYW1l KSAuLiAiJCIpIHRoZW4KLSsgICAgICByZXR1cm4gc2NyaXB0Ci0rICAgIGVuZAotKyAgZW5kCi0r Ci0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotKyAgcmV0dXJuIG5pbAotK2Vu ZAotKwotK2xvY2FsIGZ1bmN0aW9uIHBvcHVsYXRlX2J1dHRvbnMoZm9sZGVyLCBmaXJzdCwgbGFz dCkKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkK LSsKLSsgIGxvZy5tc2cobG9nLmRlYnVnLCAiZm9sZGVyIGlzICIgLi4gZm9sZGVyIC4uICIgYW5k IGZpcnN0IGlzICIgLi4gZmlyc3QgLi4gIiBhbmQgbGFzdCBpcyAiIC4uIGxhc3QpCi0rCi0rICBs b2NhbCBidXR0b25fbnVtID0gMQotKwotKyAgZm9yIGkgPSBmaXJzdCwgbGFzdCBkbwotKyAgICBs b2NhbCBzY3JpcHQgPSBzbS5zY3JpcHRzW2ZvbGRlcl1baV0KLSsgICAgbG9jYWwgYnV0dG9uID0g c20ud2lkZ2V0cy5idXR0b25zW2J1dHRvbl9udW1dCi0rICAgIGxvY2FsIGxhYmVsID0gc20ud2lk Z2V0cy5sYWJlbHNbYnV0dG9uX251bV0KLSsKLSsgICAgaWYgc2NyaXB0LnJ1bm5pbmcgPT0gdHJ1 ZSB0aGVuCi0rICAgICAgYnV0dG9uLm5hbWUgPSAicGJfb24iCi0rICAgIGVsc2UKLSsgICAgICBi dXR0b24ubmFtZSA9ICJwYl9vZmYiCi0rICAgIGVuZAotKwotKyAgICBidXR0b24uaW1hZ2UgPSBQ T1dFUl9JQ09OCi0rICAgIGxhYmVsLmxhYmVsID0gc2NyaXB0Lm1ldGFkYXRhIGFuZCBzY3JpcHQu bWV0YWRhdGEubmFtZSBvciBzY3JpcHQubmFtZQotKyAgICBsYWJlbC5uYW1lID0gInBiX2xhYmVs IgotKyAgICBidXR0b24uZWxsaXBzaXplID0gImVuZCIKLSsgICAgYnV0dG9uLnNlbnNpdGl2ZSA9 IHRydWUKLSsgICAgbGFiZWwudG9vbHRpcCA9IHNjcmlwdC5tZXRhZGF0YSBhbmQgc2NyaXB0Lm1l dGFkYXRhLnB1cnBvc2Ugb3Igc2NyaXB0LmRvYwotKwotKyAgICBidXR0b24uY2xpY2tlZF9jYWxs YmFjayA9IGZ1bmN0aW9uICh0aGlzKQotKyAgICAgIGxvY2FsIGNiX3NjcmlwdCA9IHNjcmlwdAot KyAgICAgIGxvY2FsIHN0YXRlID0gbmlsCi0rICAgICAgaWYgY2Jfc2NyaXB0IHRoZW4gCi0rICAg ICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImZvdW5kIHNjcmlwdCAiIC4uIGNiX3NjcmlwdC5uYW1l IC4uICIgd2l0aCBwYXRoICIgLi4gY2Jfc2NyaXB0LnBhdGgpCi0rICAgICAgICBpZiBjYl9zY3Jp cHQucnVubmluZyA9PSB0cnVlIHRoZW4KLSsgICAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJk ZWFjdGl2YXRpbmcgIiAuLiBjYl9zY3JpcHQubmFtZSAuLiAiIG9uICIgLi4gY2Jfc2NyaXB0LnBh dGgpCi0rICAgICAgICAgIGRlYWN0aXZhdGUoY2Jfc2NyaXB0KQotKyAgICAgICAgICB0aGlzLm5h bWUgPSAicGJfb2ZmIgotKyAgICAgICAgZWxzZQotKyAgICAgICAgICBsb2cubXNnKGxvZy5kZWJ1 ZywgImFjdGl2YXRpbmcgIiAuLiBjYl9zY3JpcHQubmFtZSAuLiAiIG9uICIgLi4gc2NyaXB0LnBh dGgpCi0rICAgICAgICAgIGxvY2FsIHJlc3VsdCA9IGFjdGl2YXRlKGNiX3NjcmlwdCkKLSsgICAg ICAgICAgaWYgcmVzdWx0IHRoZW4KLSsgICAgICAgICAgICB0aGlzLm5hbWUgPSAicGJfb24iCi0r ICAgICAgICAgIGVuZAotKyAgICAgICAgZW5kCi0rICAgICAgZW5kCi0rICAgIGVuZAotKwotKyAg ICBidXR0b25fbnVtID0gYnV0dG9uX251bSArIDEKLSsgIGVuZAotKwotKyAgbG9nLm1zZyhsb2cu ZGVidWcsICJidXR0b24gbnVtIGlzICIgLi4gYnV0dG9uX251bSAuLiAiIGFuZCBudW1fYnV0dG9u cyBpcyAiIC4uIHNtLnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zKQotKyAgaWYgYnV0dG9uX251bSA8 PSBzbS5wYWdlX3N0YXR1cy5udW1fYnV0dG9ucyB0aGVuCi0rICAgIGZvciBpID0gYnV0dG9uX251 bSwgc20ucGFnZV9zdGF0dXMubnVtX2J1dHRvbnMgZG8KLSsgICAgICBjbGVhcl9idXR0b24oaSkK LSsgICAgZW5kCi0rICBlbmQKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwp Ci0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gcGFnaW5hdGUoZGlyZWN0aW9uKQotKyAgbG9jYWwg b2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgbG9jYWwg Zm9sZGVyID0gc20ucGFnZV9zdGF0dXMuZm9sZGVyCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgImZv bGRlciBpcyAiIC4uIGZvbGRlcikKLSsKLSsgIGxvY2FsIG51bV9zY3JpcHRzID0gI3NtLnNjcmlw dHNbZm9sZGVyXQotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJudW1fc2NyaXB0cyBpcyAiIC4uIG51 bV9zY3JpcHRzKQotKwotKyAgbG9jYWwgbWF4X3BhZ2VzID0gbWF0aC5jZWlsKG51bV9zY3JpcHRz IC8gc20ucGFnZV9zdGF0dXMubnVtX2J1dHRvbnMpCi0rCi0rICBsb2NhbCBjdXJfcGFnZSA9IHNt LnBhZ2Vfc3RhdHVzLmN1cnJlbnRfcGFnZQotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJtYXggcGFn ZXMgaXMgIiAuLiBtYXhfcGFnZXMpCi0rCi0rICBsb2NhbCBidXR0b25zX25lZWRlZCA9IG5pbAot KyAgbG9jYWwgZmlyc3QgPSBuaWwKLSsgIGxvY2FsIGxhc3QgPSBuaWwKLSsKLSsgIGlmIGRpcmVj dGlvbiA9PSAwIHRoZW4KLSsgICAgY3VyX3BhZ2UgPSBjdXJfcGFnZSAtIDEKLSsgICAgaWYgY3Vy X3BhZ2UgPCAxIHRoZW4KLSsgICAgICBjdXJfcGFnZSA9IDEKLSsgICAgZW5kCi0rICBlbHNlaWYg ZGlyZWN0aW9uID09IDEgdGhlbgotKyAgICBjdXJfcGFnZSA9IGN1cl9wYWdlICsgMQotKyAgICBp ZiBjdXJfcGFnZSA+IG1heF9wYWdlcyB0aGVuCi0rICAgICAgY3VyX3BhZ2UgPSBtYXhfcGFnZXMK LSsgICAgZW5kCi0rICBlbHNlCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAidG9vayBwYXRoIDIi KQotKyAgICBjdXJfcGFnZSA9IDEKLSsgIGVuZAotKwotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJj dXJfcGFnZSBpcyAiIC4uIGN1cl9wYWdlIC4uICIgYW5kIG1heF9wYWdlcyBpcyAiIC4uIG1heF9w YWdlcykKLSsKLSsgIGlmIGN1cl9wYWdlID09IG1heF9wYWdlcyBhbmQgY3VyX3BhZ2UgPT0gMSB0 aGVuCi0rICAgIHNtLndpZGdldHMucGFnZV9mb3J3YXJkLnNlbnNpdGl2ZSA9IGZhbHNlCi0rICAg IHNtLndpZGdldHMucGFnZV9iYWNrLnNlbnNpdGl2ZSA9IGZhbHNlCi0rICBlbHNlaWYgY3VyX3Bh Z2UgPT0gbWF4X3BhZ2VzIHRoZW4KLSsgICAgc20ud2lkZ2V0cy5wYWdlX2ZvcndhcmQuc2Vuc2l0 aXZlID0gZmFsc2UKLSsgICAgc20ud2lkZ2V0cy5wYWdlX2JhY2suc2Vuc2l0aXZlID0gdHJ1ZQot KyAgZWxzZWlmIGN1cl9wYWdlID09IDEgdGhlbgotKyAgICBzbS53aWRnZXRzLnBhZ2VfZm9yd2Fy ZC5zZW5zaXRpdmUgPSB0cnVlCi0rICAgIHNtLndpZGdldHMucGFnZV9iYWNrLnNlbnNpdGl2ZSA9 IGZhbHNlCi0rICBlbHNlCi0rICAgIHNtLndpZGdldHMucGFnZV9mb3J3YXJkLnNlbnNpdGl2ZSA9 IHRydWUKLSsgICAgc20ud2lkZ2V0cy5wYWdlX2JhY2suc2Vuc2l0aXZlID0gdHJ1ZQotKyAgZW5k Ci0rCi0rICBzbS5wYWdlX3N0YXR1cy5jdXJyZW50X3BhZ2UgPSBjdXJfcGFnZQotKwotKyAgZmly c3QgPSAoY3VyX3BhZ2UgKiBzbS5wYWdlX3N0YXR1cy5udW1fYnV0dG9ucykgLSAoc20ucGFnZV9z dGF0dXMubnVtX2J1dHRvbnMgLSAxKQotKwotKyAgaWYgZmlyc3QgKyBzbS5wYWdlX3N0YXR1cy5u dW1fYnV0dG9ucyA+IG51bV9zY3JpcHRzIHRoZW4KLSsgICAgbGFzdCA9IG51bV9zY3JpcHRzCi0r ICBlbHNlCi0rICAgIGxhc3QgPSBmaXJzdCArIHNtLnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zIC0g MQotKyAgZW5kCi0rCi0rICBzbS53aWRnZXRzLnBhZ2Vfc3RhdHVzLmxhYmVsID0gc3RyaW5nLmZv cm1hdChfKCJwYWdlICVkIG9mICVkIiksIGN1cl9wYWdlLCBtYXhfcGFnZXMpCi0rCi0rICBwb3B1 bGF0ZV9idXR0b25zKGZvbGRlciwgZmlyc3QsIGxhc3QpCi0rCi0rICByZXN0b3JlX2xvZ19sZXZl bChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIGNoYW5nZV9mb2xkZXIo Zm9sZGVyKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xl dmVsKQotKwotKyAgaWYgbm90IGZvbGRlciB0aGVuCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnICJz ZXR0aW5nIGZvbGRlciB0byBzZWxlY3RvciB2YWx1ZSAiIC4uICBzbS53aWRnZXRzLmZvbGRlcl9z ZWxlY3Rvci52YWx1ZSkKLSsgICAgc20ucGFnZV9zdGF0dXMuZm9sZGVyID0gc20ud2lkZ2V0cy5m b2xkZXJfc2VsZWN0b3IudmFsdWUKLSsgIGVsc2UKLSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJz ZXR0aW5nIGNhdGdvcnkgdG8gYXJndW1lbnQgIiAuLiBmb2xkZXIpCi0rICAgIHNtLnBhZ2Vfc3Rh dHVzLmZvbGRlciA9IGZvbGRlcgotKyAgZW5kCi0rCi0rICBwYWdpbmF0ZSgyKQotKwotKyAgcmVz dG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBj aGFuZ2VfbnVtX2J1dHRvbnMoKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2 ZWwoc20ubG9nX2xldmVsKQotKwotKyAgY3VyX2J1dHRvbnMgPSBzbS5wYWdlX3N0YXR1cy5udW1f YnV0dG9ucwotKyAgbmV3X2J1dHRvbnMgPSBzbS53aWRnZXRzLm51bV9idXR0b25zLnZhbHVlCi0r Ci0rICBwcmVmX3dyaXRlKCJudW1fYnV0dG9ucyIsICJpbnRlZ2VyIiwgbmV3X2J1dHRvbnMpCi0r Ci0rICBpZiBuZXdfYnV0dG9ucyA8IGN1cl9idXR0b25zIHRoZW4KLSsgICAgbG9nLm1zZyhsb2cu ZGVidWcsICJ0b29rIG5ldyBpcyBsZXNzIHRoYW4gY3VycmVudCBicmFuY2giKQotKwotKyAgICBm b3IgaSA9IDEsIGN1cl9idXR0b25zIC0gbmV3X2J1dHRvbnMgZG8KLSsgICAgICB0YWJsZS5yZW1v dmUoc20ud2lkZ2V0cy5zY3JpcHRzKQotKyAgICBlbmQKLSsKLSsgICAgbG9nLm1zZyhsb2cuZGVi dWcsICJmaW5pc2hlZCByZW1vdmluZyB3aWRnZXRzLCBub3cgdGhlcmUgYXJlICIgLi4gI3NtLndp ZGdldHMuYnV0dG9ucykKLSsgIGVsc2VpZiBuZXdfYnV0dG9ucyA+IGN1cl9idXR0b25zIHRoZW4K LSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJ0b29rIG5ldyBpcyBncmVhdGVyIHRoYW4gY3VycmVu dCBicmFuY2giKQotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgIm51bWJlciBvZiBzY3JpcHRzIGlz ICIgLi4gI3NtLndpZGdldHMuc2NyaXB0cykKLSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJudW1i ZXIgb2YgYnV0dG9ucyBpcyAiIC4uICNzbS53aWRnZXRzLmJ1dHRvbnMpCi0rICAgIGxvZy5tc2co bG9nLmRlYnVnLCAibnVtYmVyIG9mIGxhYmVscyBpcyAiIC4uICNzbS53aWRnZXRzLmxhYmVscykK LSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJudW1iZXIgb2YgYm94ZXMgaXMgIiAuLiAjc20ud2lk Z2V0cy5ib3hlcykKLSsKLSsgICAgaWYgbmV3X2J1dHRvbnMgPiBzbS5wYWdlX3N0YXR1cy5idXR0 b25zX2NyZWF0ZWQgdGhlbgotKwotKyAgICAgIGZvciBpID0gc20ucGFnZV9zdGF0dXMuYnV0dG9u c19jcmVhdGVkICsgMSwgbmV3X2J1dHRvbnMgZG8KLSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVn LCAiaSBpcyAiIC4uIGkpCi0rICAgICAgICB0YWJsZS5pbnNlcnQoc20ud2lkZ2V0cy5idXR0b25z LCBkdC5uZXdfd2lkZ2V0KCJidXR0b24iKXt9KQotKyAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcs ICJpbnNlcnRlZCBuZXcgYnV0dG9uIikKLSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibnVt YmVyIG9mIGJ1dHRvbnMgaXMgIiAuLiAjc20ud2lkZ2V0cy5idXR0b25zKQotKyAgICAgICAgdGFi bGUuaW5zZXJ0KHNtLndpZGdldHMubGFiZWxzLCBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe30pCi0r ICAgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImluc2VydGVkIG5ldyBsYWJlbCIpCi0rICAgICAg ICBsb2cubXNnKGxvZy5kZWJ1ZywgIm51bWJlciBvZiBsYWJlbHMgaXMgIiAuLiAjc20ud2lkZ2V0 cy5sYWJlbHMpCi0rICAgICAgICB0YWJsZS5pbnNlcnQoc20ud2lkZ2V0cy5ib3hlcywgZHQubmV3 X3dpZGdldCgiYm94Iil7IG9yaWVudGF0aW9uID0gImhvcml6b250YWwiLCBleHBhbmQgPSBmYWxz ZSwgZmlsbCA9IGZhbHNlLCAKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc20ud2lkZ2V0cy5idXR0b25zW2ldLCBzbS53aWRnZXRzLmxhYmVs c1tpXX0pCi0rICAgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImluc2VydGVkIG5ldyBib3giKQot KyAgICAgICAgc20ucGFnZV9zdGF0dXMuYnV0dG9uc19jcmVhdGVkID0gc20ucGFnZV9zdGF0dXMu YnV0dG9uc19jcmVhdGVkICsgMQotKyAgICAgIGVuZAotKwotKyAgICBlbmQKLSsKLSsgICAgbG9n Lm1zZyhsb2cuZGVidWcsICJjdXJfYnV0dG9ucyBpcyAiIC4uIGN1cl9idXR0b25zIC4uICIgYW5k IG5ld19idXR0b25zIGlzICIgLi4gbmV3X2J1dHRvbnMpCi0rICAgIGxvZy5tc2cobG9nLmRlYnVn LCAjc20ud2lkZ2V0cy5idXR0b25zIC4uICIgYnV0dG9ucyBhcmUgYXZhaWxhYmxlIikKLSsKLSsg ICAgZm9yIGkgPSBjdXJfYnV0dG9ucyArIDEsIG5ld19idXR0b25zIGRvCi0rICAgICAgbG9nLm1z Zyhsb2cuZGVidWcsICJpbnNlcnRpbmcgYnV0dG9uICIgLi4gaSAuLiAiIGludG8gc2NyaXB0cyB3 aWRnZXQiKQotKyAgICAgIHRhYmxlLmluc2VydChzbS53aWRnZXRzLnNjcmlwdHMsIHNtLndpZGdl dHMuYm94ZXNbaV0pCi0rICAgIGVuZAotKwotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImZpbmlz aGVkIGFkZGluZyB3aWRnZXRzLCBub3cgdGhlcmUgYXJlICIgLi4gI3NtLndpZGdldHMuYnV0dG9u cykKLSsgIGVsc2UgLS0gbm8gY2hhbmdlCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibm8gY2hh bmdlLCBqdXN0IHJldHVybmluZyIpCi0rICAgIHJldHVybgotKyAgZW5kCi0rCi0rICBzbS5wYWdl X3N0YXR1cy5udW1fYnV0dG9ucyA9IG5ld19idXR0b25zCi0rICBsb2cubXNnKGxvZy5kZWJ1Zywg Im51bV9idXR0b25zIHNldCB0byAiIC4uIHNtLnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zKQotKyAg cGFnaW5hdGUoMikgLS0gZm9yY2UgdGhlIGJ1dHRvbnMgdG8gcmVwb3B1bGF0ZQotKyAgc20ud2lk Z2V0cy5tYWluX21lbnUuc2VsZWN0ZWQgPSAzIC0tIGp1bXAgYmFjayB0byBzdGFydC9zdG9wIHNj cmlwdHMKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0r bG9jYWwgZnVuY3Rpb24gbG9hZF9wcmVmZXJlbmNlcygpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVs ID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICAtLSBsb2FkIHRoZSBwcmVmcyBh bmQgdXBkYXRlIHNldHRpbmdzCi0rICAtLSB1cGRhdGVfc2NyaXB0X2Nob2ljZXMKLSsKLSsgIGxv Y2FsIHByZWZfc3RyaW5nID0gcHJlZl9yZWFkKCJpbnN0YWxsZWRfcmVwb3MiLCAic3RyaW5nIikK LSsgIGxvY2FsIGVudHJpZXMgPSBkdS5zcGxpdChwcmVmX3N0cmluZywgIiwiKQotKwotKyAgd2hp bGUgICNlbnRyaWVzID4gMiBkbwotKyAgICBsb2NhbCBudW0gPSB0YWJsZS5yZW1vdmUoZW50cmll cywgMSkKLSsgICAgbG9jYWwgbmFtZSA9IHRhYmxlLnJlbW92ZShlbnRyaWVzLCAxKQotKyAgICBs b2NhbCBkaXJlY3RvcnkgPSB0YWJsZS5yZW1vdmUoZW50cmllcywgMSkKLSsKLSsgICAgaWYgbm90 IHN0cmluZy5tYXRjaChzbS5pbnN0YWxsZWRfcmVwb3NpdG9yaWVzWzFdLm5hbWUsICJeIiAuLiBk cy5zYW5pdGl6ZV9sdWEobmFtZSkgLi4gIiQiKSB0aGVuCi0rICAgICAgdGFibGUuaW5zZXJ0KHNt Lmluc3RhbGxlZF9yZXBvc2l0b3JpZXMsIHtuYW1lID0gbmFtZSwgZGlyZWN0b3J5ID0gZGlyZWN0 b3J5fSkKLSsgICAgZW5kCi0rCi0rICBlbmQKLSsKLSsgIHVwZGF0ZV9zY3JpcHRfdXBkYXRlX2No b2ljZXMoKQotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJ1cGRhdGVkIGluc3RhbGxlZCBzY3JpcHRz IikKLSsKLSsgIC0tIGZvbGRlciBzZWxlY3RvcgotKyAgbG9jYWwgdmFsID0gcHJlZl9yZWFkKCJm b2xkZXJfc2VsZWN0b3IiLCAiaW50ZWdlciIpCi0rCi0rICBpZiB2YWwgPT0gMCB0aGVuCi0rICAg IHZhbCA9IDEKLSsgIGVuZAotKwotKyAgc20ud2lkZ2V0cy5mb2xkZXJfc2VsZWN0b3Iuc2VsZWN0 ZWQgPSB2YWwKLSsgIHNtLnBhZ2Vfc3RhdHVzLmZvbGRlciA9IHNtLndpZGdldHMuZm9sZGVyX3Nl bGVjdG9yLnZhbHVlCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgInVwZGF0ZWQgZm9sZGVyIHNlbGVj dG9yIGFuZCBzZXQgaXQgdG8gIiAuLiBzbS53aWRnZXRzLmZvbGRlcl9zZWxlY3Rvci52YWx1ZSkK LSsKLSsgIC0tIG51bV9idXR0b25zCi0rICBsb2NhbCB2YWwgPSBwcmVmX3JlYWQoIm51bV9idXR0 b25zIiwgImludGVnZXIiKQotKwotKyAgaWYgdmFsID09IDAgdGhlbgotKyAgICB2YWwgPSBERUZB VUxUX0JVVFRPTlNfUEVSX1BBR0UKLSsgIGVuZAotKwotKyAgc20ud2lkZ2V0cy5udW1fYnV0dG9u cy52YWx1ZSA9IHZhbAotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJzZXQgcGFnZSBidXR0b25zIHRv ICIgLi4gdmFsKQotKwotKyAgY2hhbmdlX251bV9idXR0b25zKCkKLSsgIGxvZy5tc2cobG9nLmRl YnVnLCAicGFnaW5hdGVkIikKLSsKLSsgIC0tIG1haW4gbWVudQotKyAgbG9jYWwgdmFsID0gcHJl Zl9yZWFkKCJtYWluX21lbnVfYWN0aW9uIiwgImludGVnZXIiKQotKyAgbG9nLm1zZyhsb2cuZGVi dWcsICJyZWFkICIgLi4gdmFsIC4uICIgZm9yIG1haW4gbWVudSIpCi0rCi0rICBpZiB2YWwgPT0g MCB0aGVuCi0rICAgIHZhbCA9IDMKLSsgIGVuZAotKwotKyAgc20ud2lkZ2V0cy5tYWluX21lbnUu c2VsZWN0ZWQgPSB2YWwKLSsgIGxvZy5tc2cobG9nLmRlYnVnLCAic2V0IG1haW4gbWVudSB0byB2 YWwgIiAuLiB2YWwgLi4gIiB3aGljaCBpcyAiIC4uIHNtLndpZGdldHMubWFpbl9tZW51LnZhbHVl KQotKwotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJzZXQgbWFpbiBtZW51IHRvICIgLi4gc20ud2lk Z2V0cy5tYWluX21lbnUudmFsdWUpCi0rCi0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xl dmVsKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIGluc3RhbGxfbW9kdWxlKCkKLSsgIGxvY2Fs IG9sZF9sb2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGlmIG5v dCBzbS5tb2R1bGVfaW5zdGFsbGVkIHRoZW4KLSsgICAgZHQucmVnaXN0ZXJfbGliKAotKyAgICAg ICJzY3JpcHRfbWFuYWdlciIsICAgICAtLSBNb2R1bGUgbmFtZQotKyAgICAgIF8oInNjcmlwdHMi KSwgICAgIC0tIFZpc2libGUgbmFtZQotKyAgICAgIHRydWUsICAgICAgICAgICAgICAgIC0tIGV4 cGFuZGFibGUKLSsgICAgICBmYWxzZSwgICAgICAgICAgICAgICAtLSByZXNldGFibGUKLSsgICAg ICB7W2R0Lmd1aS52aWV3cy5saWdodHRhYmxlXSA9IHsiRFRfVUlfQ09OVEFJTkVSX1BBTkVMX0xF RlRfQk9UVE9NIiwgMTAwfX0sICAgLS0gY29udGFpbmVycwotKyAgICAgIHNtLndpZGdldHMubWFp bl9ib3gsCi0rICAgICAgbmlsLC0tIHZpZXdfZW50ZXIKLSsgICAgICBuaWwgLS0gdmlld19sZWF2 ZQotKyAgICApCi0rICAgIHNtLm1vZHVsZV9pbnN0YWxsZWQgPSB0cnVlCi0rICBlbmQKLSsKLSsg IHNtLnJ1biA9IHRydWUKLSsgIHNtLnVzZV9jb2xvciA9IHByZWZfcmVhZCgidXNlX2NvbG9yIiwg ImJvb2wiKQotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJzZXQgcnVuIHRvIHRydWUsIGxvYWRpbmcg cHJlZmVyZW5jZXMiKQotKyAgbG9hZF9wcmVmZXJlbmNlcygpCi0rICBzY2FuX3JlcG9zaXRvcmll cygpCi0rICBzdGFydF9zY3JpcHRzKCkKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2df bGV2ZWwpCi0rZW5kCi0rCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIAotKy0tIE0gQSBJIE4gIFAgUiBPIEcgUiBBIE0KLSstLSAtIC0gLSAtIC0gLSAt IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gCi0rCi0rLS0gZW5zdXJlIHNob3J0Y3V0 cyBtb2R1bGUga25vd3Mgd2lkZ2V0cyBiZWxvbmcgdG8gc2NyaXB0X21hbmFnZXIKLSsKLStzY3Jp cHRfbWFuYWdlcl9ydW5uaW5nX3NjcmlwdCA9ICJzY3JpcHRfbWFuYWdlciIKLSsKLStpZiAoY2hl Y2tfZm9yX3VwZGF0ZXMgb3IgU01fQVBJX1ZFUl9SRVFEID4gZHQuY29uZmlndXJhdGlvbi5hcGlf dmVyc2lvbl9zdHJpbmcpIGFuZCBub3Qgc3lzdGVtX2Jhc2VkIHRoZW4KLSsgIGxvY2FsIHJlcG9f ZGF0YSA9IGdldF9yZXBvX3N0YXR1cyhMVUFfRElSKQotKyAgbG9jYWwgY3VycmVudF9icmFuY2gg PSBnZXRfY3VycmVudF9yZXBvX2JyYW5jaChMVUFfRElSKQotKyAgbG9jYWwgY2xlYW4gPSBpc19y ZXBvX2NsZWFuKHJlcG9fZGF0YSkKLSsgIGxvY2FsIHJlcG8gPSBMVUFfRElSCi0rCi0rICBpZiBj dXJyZW50X2JyYW5jaCB0aGVuCi0rCi0rICAgIGlmIHNtLmV4ZWN1dGFibGVzLmdpdCBhbmQgY2xl YW4gYW5kIAotKwotKyAgICAgIChjdXJyZW50X2JyYW5jaCA9PSAibWFzdGVyIiBvciBzdHJpbmcu bWF0Y2goY3VycmVudF9icmFuY2gsICJeQVBJJS0iKSkgdGhlbiAtLSBvbmx5IG1ha2UgY2hhbmdl cyB0byBjbGVhbiBicmFuY2hlcwotKyAgICAgIGxvY2FsIGJyYW5jaGVzID0gZ2V0X3JlcG9fYnJh bmNoZXMoTFVBX0RJUikKLSsKLSsgICAgICBpZiBjdXJyZW50X2JyYW5jaCB+PSBMVUFfQVBJX1ZF UiBhbmQgY3VycmVudF9icmFuY2ggfj0gIm1hc3RlciIgdGhlbgotKyAgICAgICAgLS0gcHJvYmFi bHkgdXBncmFkZWQgZnJvbSBhbiBlYXJsaWVyIGFwaSB2ZXJzaW9uIHNvIGdldCBiYWNrIHRvIG1h c3RlcgotKyAgICAgICAgLS0gdG8gdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBzY3JpcHRfbWFu YWdlciB0byBnZXQgdGhlIHByb3BlciBBUEkKLSsgICAgICAgIGNoZWNrb3V0X3JlcG9fYnJhbmNo KHJlcG8sICJtYXN0ZXIiKQotKyAgICAgICAgbG9nLm1zZyhsb2cuc2NyZWVuLCBfKCJsdWEgQVBJ IHZlcnNpb24gcmVzZXQsIHBsZWFzZSByZXN0YXJ0IGRhcmt0YWJsZSIpKQotKwotKyAgICAgIGVs c2VpZiBMVUFfQVBJX1ZFUiA9PSBjdXJyZW50X2JyYW5jaCB0aGVuCi0rICAgICAgICAtLSBkbyBu b3RoaW5nLCB3ZSBhcmUgZmluZQotKyAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJ0b29rIGVx dWFsIGJyYW5jaCwgZG9pbmcgbm90aGluZyIpCi0rCi0rICAgICAgZWxzZWlmIHN0cmluZy5tYXRj aChMVUFfQVBJX1ZFUiwgImRldiIpIHRoZW4KLSsgICAgICAgIC0tIHdlIGFyZSBvbiBhIGRldiBB UEkgdmVyc2lvbiwgc28gY2hlY2tvdXQgdGhlIGRldgotKyAgICAgICAgLS0gYXBpIHZlcnNpb24g b3IgY2hlY2tvdXQvc3RheSBvbiBtYXN0ZXIKLSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAi dG9vayB0aGUgZGV2IGJyYW5jaCIpCi0rICAgICAgICBsb2NhbCBtYXRjaCA9IGZhbHNlCi0rCi0r ICAgICAgICBmb3IgXywgYnJhbmNoIGluIGlwYWlycyhicmFuY2hlcykgZG8KLSsgICAgICAgICAg bG9nLm1zZyhsb2cuZGVidWcsICJjaGVja2luZyBicmFuY2ggIiAuLiBicmFuY2ggLi4gIiBhZ2Fp bnN0IEFQSSAiIC4uIExVQV9BUElfVkVSKQotKyAgICAgICAgICBpZiBMVUFfQVBJX1ZFUiA9PSBi cmFuY2ggdGhlbgotKyAgICAgICAgICAgIG1hdGNoID0gdHJ1ZQotKyAgICAgICAgICAgIGxvZy5t c2cobG9nLmluZm8sICJjaGVja2luZyBvdXQgcmVwbyBkZXZlbG9wbWVudCBicmFuY2ggIiAuLiBi cmFuY2gpCi0rICAgICAgICAgICAgY2hlY2tvdXRfcmVwb19icmFuY2gocmVwbywgYnJhbmNoKQot KyAgICAgICAgICBlbmQKLSsgICAgICAgIGVuZAotKwotKyAgICAgICAgaWYgbm90IG1hdGNoIHRo ZW4KLSsgICAgICAgICAgaWYgY3VycmVudF9icmFuY2ggPT0gIm1hc3RlciIgdGhlbgotKyAgICAg ICAgICAgIGxvZy5tc2cobG9nLmluZm8sICJzdGF5aW5nIG9uIG1hc3Rlciwgbm8gZGV2IGJyYW5j aCB5ZXQiKQotKyAgICAgICAgICBlbHNlCi0rICAgICAgICAgICAgbG9nLm1zZyhsb2cuaW5mbywg Im5vIGRldiBicmFuY2ggYXZhaWxhYmxlLCBjaGVja2luZyBvdXQgbWFzdGVyIikKLSsgICAgICAg ICAgICBjaGVja291dF9yZXBvX2JyYW5jaChyZXBvLCAibWFzdGVyIikKLSsgICAgICAgICAgZW5k Ci0rICAgICAgICBlbmQKLSsKLSsgICAgICBlbHNlaWYgI2JyYW5jaGVzID4gMCBhbmQgTFVBX0FQ SV9WRVIgPiBicmFuY2hlc1sjYnJhbmNoZXNdIHRoZW4KLSsgICAgICAgIGxvZy5tc2cobG9nLmlu Zm8sICJubyBuZXdlciBicmFuY2hlcywgc3RheWluZyBvbiBtYXN0ZXIiKQotKyAgICAgICAgLS0g c3RheSBvbiBtYXN0ZXIKLSsKLSsgICAgICBlbHNlCi0rICAgICAgICAtLSBjaGVja291dCB0aGUg YXBwcm9wcmlhdGUgYnJhbmNoIGZvciBBUEkgdmVyc2lvbiBpZiBpdCBleGlzdHMKLSsgICAgICAg IGxvZy5tc2cobG9nLmluZm8sICJjaGVja2luZyBvdXQgdGhlIGFwcHJvcHJpYXRlIEFQSSBicmFu Y2giKQotKwotKyAgICAgICAgbG9jYWwgbWF0Y2ggPSBmYWxzZQotKwotKyAgICAgICAgZm9yIF94 LCBicmFuY2ggaW4gaXBhaXJzKGJyYW5jaGVzKSBkbwotKyAgICAgICAgICBsb2cubXNnKGxvZy5k ZWJ1ZywgImNoZWNraW5nIGJyYW5jaCAiIC4uIGJyYW5jaCAuLiAiIGFnYWluc3QgQVBJICIgLi4g TFVBX0FQSV9WRVIpCi0rCi0rICAgICAgICAgIGlmIExVQV9BUElfVkVSID09IGJyYW5jaCB0aGVu Ci0rICAgICAgICAgICAgbWF0Y2ggPSB0cnVlCi0rICAgICAgICAgICAgbG9nLm1zZyhsb2cuaW5m bywgImNoZWNraW5nIG91dCByZXBvIGJyYW5jaCAiIC4uIGJyYW5jaCkKLSsgICAgICAgICAgICBj aGVja291dF9yZXBvX2JyYW5jaChyZXBvLCBicmFuY2gpCi0rICAgICAgICAgICAgbG9nLm1zZyhs b2cuc2NyZWVuLCBfKCJ5b3UgbXVzdCByZXN0YXJ0IGRhcmt0YWJsZSB0byB1c2UgdGhlIGNvcnJl Y3QgdmVyc2lvbiBvZiB0aGUgbHVhIHNjcmlwdHMiKSkKLSsgICAgICAgICAgICByZXR1cm4KLSsg ICAgICAgICAgZW5kCi0rCi0rICAgICAgICBlbmQKLSsKLSsgICAgICAgIGlmIG5vdCBtYXRjaCB0 aGVuCi0rICAgICAgICAgIGxvZy5tc2cobG9nLndhcm4sICJubyBtYXRjaGluZyBicmFuY2ggZm91 bmQgZm9yICIgLi4gTFVBX0FQSV9WRVIpCi0rICAgICAgICBlbmQKLSsKLSsgICAgICBlbmQKLSsg ICAgZW5kCi0rICBlbmQKLStlbmQKLSsKLStzY2FuX3NjcmlwdHMoTFVBX0RJUikKLStsb2cubXNn KGxvZy5pbmZvLCAiZmluaXNoZWQgcHJvY2Vzc2luZyBzY3JpcHRzIikKLSsKLStpZiBzeXN0ZW1f YmFzZWQgdGhlbgotKyAgLS0gZXhlYyB1c2VyIGx1YXJjIGZpbGUgaWYgaXQgZXhpc3RzCi0rICBs b2NhbCBsdWFyYyA9IGxvYWRmaWxlKFVTRVJfTFVBX0RJUiAuLiAicmMiKQotKyAgaWYgbHVhcmMg dGhlbgotKyAgICBsdWFyYygpCi0rICBlbmQKLSsKLSsgIGlmIGRmLnRlc3RfZmlsZShVU0VSX0xV QV9ESVIsICJkIikgdGhlbgotKyAgICBMVUFfRElSID0gVVNFUl9MVUFfRElSCi0rICAgIHNjYW5f c2NyaXB0cyhMVUFfRElSKQotKyAgICBMVUFfRElSID0gU1lTVEVNX0xVQV9ESVIKLSsgIGVuZAot KwotKyAgZHQuY29uZmlndXJhdGlvblsibHVhX2RpciJdID0gTFVBX0RJUgotKwotKyAgZHQucHJp bnRfbG9nKCJsdWEgZGlyIGlzICIgLi4gZHQuY29uZmlndXJhdGlvbi5sdWFfZGlyKQotKyAgLS0g c2Nhbl9zY3JpcHQoVVNFUl9MVUFfRElSKQotK2VuZAotKwotKwotKy0tIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSstLSBVIFMgRSBSICBJIE4gVCBFIFIg RiBBIEMgRQotKy0tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAKLSsKLSstLSB1cGRhdGUgdGhlIHNjcmlwdHMKLSsKLStzbS53aWRnZXRzLnVwZGF0ZV9zY3Jp cHRfY2hvaWNlcyA9IGR0Lm5ld193aWRnZXQoImNvbWJvYm94Iil7Ci0rICBsYWJlbCA9IF8oInNj cmlwdHMgdG8gdXBkYXRlIiksCi0rICB0b29sdGlwID0gXygic2VsZWN0IHRoZSBzY3JpcHRzIGlu c3RhbGxhdGlvbiB0byB1cGRhdGUiKSwKLSsgIHNlbGVjdGVkID0gMSwKLSsgIGNoYW5nZWRfY2Fs bGJhY2sgPSBmdW5jdGlvbih0aGlzKQotKyAgICBwcmVmX3dyaXRlKCJ1cGRhdGVfc2NyaXB0X2No b2ljZXMiLCAiaW50ZWdlciIsIHRoaXMuc2VsZWN0ZWQpCi0rICBlbmQsCi0rICAicGxhY2Vob2xk ZXIiLAotK30KLSsKLStzbS53aWRnZXRzLnVwZGF0ZSA9IGR0Lm5ld193aWRnZXQoImJ1dHRvbiIp ewotKyAgbGFiZWwgPSBfKCJ1cGRhdGUgc2NyaXB0cyIpLAotKyAgdG9vbHRpcCA9IF8oInVwZGF0 ZSB0aGUgbHVhIHNjcmlwdHMgZnJvbSB0aGUgcmVwb3NpdG9yeSIpLAotKyAgY2xpY2tlZF9jYWxs YmFjayA9IGZ1bmN0aW9uKHRoaXMpCi0rICAgIHVwZGF0ZV9zY3JpcHRzKCkKLSsgIGVuZAotK30K LSsKLSstLSBhZGQgYWRkaXRpb25hbCBzY3JpcHRzCi0rCi0rc20ud2lkZ2V0cy5zY3JpcHRfdXJs ID0gZHQubmV3X3dpZGdldCgiZW50cnkiKXsKLSsgIHRleHQgPSAiIiwKLSsgIHBsYWNlaG9sZGVy ID0gImh0dHBzOi8vPHJlcG9zaXRvcnkgdXJsPiIsCi0rICB0b29sdGlwID0gXygiZW50ZXIgdGhl IFVSTCBvZiB0aGUgZ2l0IHJlcG9zaXRvcnkgY29udGFpbmluZyB0aGUgc2NyaXB0cyB5b3Ugd2lz aCB0byBhZGQiKQotK30KLSsKLStzbS53aWRnZXRzLm5ld19mb2xkZXIgPSBkdC5uZXdfd2lkZ2V0 KCJlbnRyeSIpewotKyAgdGV4dCA9ICIiLAotKyAgcGxhY2Vob2xkZXIgPSBfKCJuYW1lIG9mIG5l dyBmb2xkZXIiKSwKLSsgIHRvb2x0aXAgPSBfKCJlbnRlciBhIGZvbGRlciBuYW1lIGZvciB0aGUg YWRkaXRpb25hbCBzY3JpcHRzIikKLSt9Ci0rCi0rc20ud2lkZ2V0cy5hZGRfc2NyaXB0cyA9IGR0 Lm5ld193aWRnZXQoImJveCIpewotKyAgb3JpZW50YXRpb24gPSB2ZXJ0aWNhbCwKLSsgIGR0Lm5l d193aWRnZXQoImxhYmVsIil7bGFiZWwgPSBfKCJVUkwgdG8gZG93bmxvYWQgYWRkaXRpb25hbCBz Y3JpcHRzIGZyb20iKX0sCi0rICBzbS53aWRnZXRzLnNjcmlwdF91cmwsCi0rICBkdC5uZXdfd2lk Z2V0KCJsYWJlbCIpe2xhYmVsID0gXygibmV3IGZvbGRlciB0byBwbGFjZSBzY3JpcHRzIGluIil9 LAotKyAgc20ud2lkZ2V0cy5uZXdfZm9sZGVyLAotKyAgZHQubmV3X3dpZGdldCgiYnV0dG9uIil7 Ci0rICAgIGxhYmVsID0gXygiaW5zdGFsbCBhZGRpdGlvbmFsIHNjcmlwdHMiKSwKLSsgICAgY2xp Y2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHRoaXMpCi0rICAgICAgaW5zdGFsbF9zY3JpcHRzKCkK LSsgICAgZW5kCi0rICB9Ci0rfQotKwotK3NtLndpZGdldHMuYWxsb3dfZGlzYWJsZSA9IGR0Lm5l d193aWRnZXQoImNoZWNrX2J1dHRvbiIpewotKyAgbGFiZWwgPSBfKCdlbmFibGUgImRpc2FibGUg c2NyaXB0cyIgYnV0dG9uJyksCi0rICB2YWx1ZSA9IGZhbHNlLAotKyAgY2xpY2tlZF9jYWxsYmFj ayA9IGZ1bmN0aW9uKHRoaXMpCi0rICAgIGlmIHRoaXMudmFsdWUgPT0gdHJ1ZSB0aGVuCi0rICAg ICAgc20ud2lkZ2V0cy5kaXNhYmxlX3NjcmlwdHMuc2Vuc2l0aXZlID0gdHJ1ZQotKyAgICBlbHNl Ci0rICAgICAgc20ud2lkZ2V0cy5kaXNhYmxlX3NjcmlwdHMuc2Vuc2l0aXZlID0gZmFsc2UKLSsg ICAgZW5kCi0rICBlbmQsCi0rfQotKwotK3NtLndpZGdldHMuZGlzYWJsZV9zY3JpcHRzID0gZHQu bmV3X3dpZGdldCgiYnV0dG9uIil7Ci0rICBsYWJlbCA9IF8oImRpc2FibGUgc2NyaXB0cyIpLAot KyAgc2Vuc2l0aXZlID0gZmFsc2UsCi0rICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24odGhp cykKLSsgICAgbG9jYWwgTFVBUkMgPSBkdC5jb25maWd1cmF0aW9uLmNvbmZpZ19kaXIgLi4gUFMg Li4gImx1YXJjIgotKyAgICBkZi5maWxlX21vdmUoTFVBUkMsIExVQVJDIC4uICIuZGlzYWJsZWQi KQotKyAgICBsb2cubXNnKGxvZy5pbmZvLCAibHVhIHNjcmlwdHMgZGlzYWJsZWQiKQotKyAgICBs b2cubXNnKGxvZy5zY3JlZW4sIF8oImx1YSBzY3JpcHRzIHdpbGwgbm90IHJ1biB0aGUgbmV4dCB0 aW1lIGRhcmt0YWJsZSBpcyBzdGFydGVkIikpCi0rICBlbmQKLSt9Ci0rCi0rc20ud2lkZ2V0cy5p bnN0YWxsX3VwZGF0ZSA9IGR0Lm5ld193aWRnZXQoImJveCIpewotKyAgb3JpZW50YXRpb24gPSAi dmVydGljYWwiLAotKyAgZHQubmV3X3dpZGdldCgic2VjdGlvbl9sYWJlbCIpe2xhYmVsID0gIiAi fSwKLSsgIGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSAiICJ9LAotKyAgZHQubmV3X3dp ZGdldCgibGFiZWwiKXtsYWJlbCA9IF8oInVwZGF0ZSBzY3JpcHRzIil9LAotKyAgZHQubmV3X3dp ZGdldCgibGFiZWwiKXtsYWJlbCA9ICIgIn0sCi0rICBzbS53aWRnZXRzLnVwZGF0ZV9zY3JpcHRf Y2hvaWNlcywKLSsgIHNtLndpZGdldHMudXBkYXRlLAotKyAgZHQubmV3X3dpZGdldCgic2VjdGlv bl9sYWJlbCIpe2xhYmVsID0gIiAgIn0sCi0rICBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVs ID0gIiAifSwKLSsgIGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSBfKCJhZGQgbW9yZSBz Y3JpcHRzIil9LAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9ICIgIn0sCi0rICBz bS53aWRnZXRzLmFkZF9zY3JpcHRzLAotKyAgZHQubmV3X3dpZGdldCgic2VjdGlvbl9sYWJlbCIp e2xhYmVsID0gIiAifSwKLSsgIGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSAiICJ9LAot KyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9IF8oImRpc2FibGUgc2NyaXB0cyIpfSwK LSsgIGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSAiICJ9LAotKyAgc20ud2lkZ2V0cy5h bGxvd19kaXNhYmxlLAotKyAgc20ud2lkZ2V0cy5kaXNhYmxlX3NjcmlwdHMsCi0rICBkdC5uZXdf d2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gIiAifSwKLSt9Ci0rCi0rLS0gbWFuYWdlIHRoZSBzY3Jp cHRzCi0rCi0rc20ud2lkZ2V0cy5mb2xkZXJfc2VsZWN0b3IgPSBkdC5uZXdfd2lkZ2V0KCJjb21i b2JveCIpewotKyAgbGFiZWwgPSBfKCJmb2xkZXIiKSwKLSsgIHRvb2x0aXAgPSBfKCAic2VsZWN0 IHRoZSBzY3JpcHQgZm9sZGVyIiksCi0rICBzZWxlY3RlZCA9IDEsCi0rICBjaGFuZ2VkX2NhbGxi YWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAgaWYgc20ucnVuIHRoZW4KLSsgICAgICBwcmVmX3dy aXRlKCJmb2xkZXJfc2VsZWN0b3IiLCAiaW50ZWdlciIsIHNlbGYuc2VsZWN0ZWQpCi0rICAgICAg Y2hhbmdlX2ZvbGRlcihzbS5mb2xkZXJzW3NlbGYuc2VsZWN0ZWRdKQotKyAgICBlbmQKLSsgIGVu ZCwKLSsgIHRhYmxlLnVucGFjayhzbS50cmFuc2xhdGVkX2ZvbGRlcnMpLAotK30KLSsKLSstLSBh IHNjcmlwdCAiYnV0dG9uIiBjb25zaXN0cyBvZjoKLSstLSAgICAgIGEgYnV0dG9uIHRvIHN0YXJ0 IGFuZCBzdG9wIHRoZSBzY3JpcHQKLSstLSAgICAgIGEgbGFiZWwgdGhhdCBjb250YWlucyB0aGUg bmFtZSBvZiB0aGUgc2NyaXB0Ci0rLS0gICAgICBhIGhvcml6b250YWwgYm94IHRoYXQgY29udGFp bnMgdGhlIGJ1dHRvbiBhbmQgdGhlIGxhYmVsCi0rCi0rc20ud2lkZ2V0cy5idXR0b25zID17fQot K3NtLndpZGdldHMubGFiZWxzID0ge30KLStzbS53aWRnZXRzLmJveGVzID0ge30KLSsKLStmb3Ig aSA9MSwgREVGQVVMVF9CVVRUT05TX1BFUl9QQUdFIGRvIAotKyAgdGFibGUuaW5zZXJ0KHNtLndp ZGdldHMuYnV0dG9ucywgZHQubmV3X3dpZGdldCgiYnV0dG9uIil7fSkKLSsgIHRhYmxlLmluc2Vy dChzbS53aWRnZXRzLmxhYmVscywgZHQubmV3X3dpZGdldCgibGFiZWwiKXt9KQotKyAgdGFibGUu aW5zZXJ0KHNtLndpZGdldHMuYm94ZXMsIGR0Lm5ld193aWRnZXQoImJveCIpeyBvcmllbnRhdGlv biA9ICJob3Jpem9udGFsIiwgZXhwYW5kID0gZmFsc2UsIGZpbGwgPSBmYWxzZSwgCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtLndpZGdl dHMuYnV0dG9uc1tpXSwgc20ud2lkZ2V0cy5sYWJlbHNbaV19KQotKyAgc20ucGFnZV9zdGF0dXMu YnV0dG9uc19jcmVhdGVkID0gc20ucGFnZV9zdGF0dXMuYnV0dG9uc19jcmVhdGVkICsgMQotK2Vu ZAotKwotK2xvY2FsIHBhZ2VfYmFjayA9ICI8IgotK2xvY2FsIHBhZ2VfZm9yd2FyZCA9ICI+Igot KwotK3NtLndpZGdldHMucGFnZV9zdGF0dXMgPSBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVs ID0gXygicGFnZSIpIC4uICI6In0KLSsKLStzbS53aWRnZXRzLnBhZ2VfYmFjayA9IGR0Lm5ld193 aWRnZXQoImJ1dHRvbiIpewotKyAgbGFiZWwgPSBwYWdlX2JhY2ssCi0rICBjbGlja2VkX2NhbGxi YWNrID0gZnVuY3Rpb24odGhpcykKLSsgICAgaWYgc20ucnVuIHRoZW4gCi0rICAgICAgcGFnaW5h dGUoMCkKLSsgICAgZW5kCi0rICBlbmQKLSt9Ci0rCi0rc20ud2lkZ2V0cy5wYWdlX2ZvcndhcmQg PSBkdC5uZXdfd2lkZ2V0KCJidXR0b24iKXsKLSsgIGxhYmVsID0gcGFnZV9mb3J3YXJkLAotKyAg Y2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHRoaXMpCi0rICAgIGlmIHNtLnJ1biB0aGVuCi0r ICAgICAgcGFnaW5hdGUoMSkKLSsgICAgZW5kCi0rICBlbmQKLSt9Ci0rCi0rc20ud2lkZ2V0cy5w YWdlX2NvbnRyb2wgPSBkdC5uZXdfd2lkZ2V0KCJib3giKXsKLSsgIG9yaWVudGF0aW9uID0gImhv cml6b250YWwiLAotKyAgc20ud2lkZ2V0cy5wYWdlX2JhY2ssCi0rICBzbS53aWRnZXRzLnBhZ2Vf c3RhdHVzLAotKyAgc20ud2lkZ2V0cy5wYWdlX2ZvcndhcmQsCi0rfQotKwotK3NtLndpZGdldHMu c2NyaXB0cyA9IGR0Lm5ld193aWRnZXQoImJveCIpewotKyAgb3JpZW50YXRpb24gPSB2ZXJ0aWNh bCwKLSsgIGR0Lm5ld193aWRnZXQoInNlY3Rpb25fbGFiZWwiKXtsYWJlbCA9ICIgIn0sCi0rICBk dC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gIiAifSwKLSsgIGR0Lm5ld193aWRnZXQoImxh YmVsIil7bGFiZWwgPSBfKCJzY3JpcHRzIil9LAotKyAgc20ud2lkZ2V0cy5mb2xkZXJfc2VsZWN0 b3IsCi0rICBzbS53aWRnZXRzLnBhZ2VfY29udHJvbCwKLSsgIHRhYmxlLnVucGFjayhzbS53aWRn ZXRzLmJveGVzKSwKLSt9Ci0rCi0rLS0gY29uZmlndXJlIG9wdGlvbnMKLSsKLStzbS53aWRnZXRz Lm51bV9idXR0b25zID0gZHQubmV3X3dpZGdldCgic2xpZGVyIil7Ci0rICBsYWJlbCA9IF8oInNj cmlwdHMgcGVyIHBhZ2UiKSwKLSsgIHRvb2x0aXAgPSBfKCJzZWxlY3QgbnVtYmVyIG9mIHN0YXJ0 L3N0b3AgYnV0dG9ucyB0byBkaXNwbGF5IiksCi0rICBzb2Z0X21pbiA9IE1JTl9CVVRUT05TX1BF Ul9QQUdFLAotKyAgaGFyZF9taW4gPSBNSU5fQlVUVE9OU19QRVJfUEFHRSwKLSsgIHNvZnRfbWF4 ID0gTUFYX0JVVFRPTlNfUEVSX1BBR0UsCi0rICBoYXJkX21heCA9IE1BWF9CVVRUT05TX1BFUl9Q QUdFLAotKyAgc3RlcCA9IDEsCi0rICBkaWdpdHMgPSAwLAotKyAgdmFsdWUgPSAxMAotK30KLSsK LStzbS53aWRnZXRzLmNoYW5nZV9idXR0b25zID0gZHQubmV3X3dpZGdldCgiYnV0dG9uIil7Ci0r ICBsYWJlbCA9IF8oImNoYW5nZSBudW1iZXIgb2YgYnV0dG9ucyIpLAotKyAgY2xpY2tlZF9jYWxs YmFjayA9IGZ1bmN0aW9uKHRoaXMpCi0rICAgIGNoYW5nZV9udW1fYnV0dG9ucygpCi0rICBlbmQK LSt9Ci0rCi0rc20ud2lkZ2V0cy5jb25maWd1cmUgPSBkdC5uZXdfd2lkZ2V0KCJib3giKXsKLSsg IG9yaWVudGF0aW9uID0gInZlcnRpY2FsIiwKLSsgIGR0Lm5ld193aWRnZXQoInNlY3Rpb25fbGFi ZWwiKXtsYWJlbCA9ICIgIn0sCi0rICBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gIiAi fSwKLSsgIGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSBfKCJjb25maWd1cmF0aW9uIil9 LAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9ICIgIn0sCi0rICBzbS53aWRnZXRz Lm51bV9idXR0b25zLAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9ICIgIn0sCi0r ICBzbS53aWRnZXRzLmNoYW5nZV9idXR0b25zLAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXts YWJlbCA9ICIgIn0sCi0rfQotKwotKy0tIHN0YWNrIGZvciB0aGUgb3B0aW9ucwotKwotK3NtLndp ZGdldHMubWFpbl9zdGFjayA9IGR0Lm5ld193aWRnZXQoInN0YWNrIil7Ci0rICBzbS53aWRnZXRz Lmluc3RhbGxfdXBkYXRlLAotKyAgc20ud2lkZ2V0cy5jb25maWd1cmUsCi0rICBzbS53aWRnZXRz LnNjcmlwdHMsCi0rfQotKwotK3NtLndpZGdldHMubWFpbl9zdGFjay5oX3NpemVfZml4ZWQgPSBm YWxzZQotK3NtLndpZGdldHMubWFpbl9zdGFjay52X3NpemVfZml4ZWQgPSBmYWxzZQotKwotKy0t IG1haW4gbWVudQotKwotK3NtLndpZGdldHMubWFpbl9tZW51ID0gZHQubmV3X3dpZGdldCgiY29t Ym9ib3giKXsKLSsgIGxhYmVsID0gXygiYWN0aW9uIiksCi0rICBjaGFuZ2VkX2NhbGxiYWNrID0g ZnVuY3Rpb24oc2VsZikKLSsgICAgc20ud2lkZ2V0cy5tYWluX3N0YWNrLmFjdGl2ZSA9IHNlbGYu c2VsZWN0ZWQKLSsgICAgcHJlZl93cml0ZSgibWFpbl9tZW51X2FjdGlvbiIsICJpbnRlZ2VyIiwg c2VsZi5zZWxlY3RlZCkKLSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJzYXZlZCAiIC4uIHNlbGYu c2VsZWN0ZWQgLi4gIiBmb3IgbWFpbiBtZW51IikKLSsgIGVuZCwKLSsgICBfKCJpbnN0YWxsL3Vw ZGF0ZSBzY3JpcHRzIiksIF8oImNvbmZpZ3VyZSIpLCBfKCJzdGFydC9zdG9wIHNjcmlwdHMiKQot K30KLSsKLSstLSB3aWRnZXQgZm9yIG1vZHVsZSAKLSsKLStzbS53aWRnZXRzLm1haW5fYm94ID0g ZHQubmV3X3dpZGdldCgiYm94Iil7Ci0rICBzbS53aWRnZXRzLm1haW5fbWVudSwKLSsgIHNtLndp ZGdldHMubWFpbl9zdGFjawotK30KLSsKLStzY3JpcHRfbWFuYWdlcl9ydW5uaW5nX3NjcmlwdCA9 IG5pbAotKwotKy0tIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAKLSstLSBEIEEgUiBLIFQgQSBCIEwgRSAgSSBOIFQgRSBHIFIgQSBUIEkgTyBOIAotKy0tIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSsKLStpZiAoZHQu Z3VpLmN1cnJlbnRfdmlldygpLmlkID09ICJsaWdodHRhYmxlIikgYW5kIGRhcmt0YWJsZV9ndWlf c2FmZSB0aGVuCi0rICBpbnN0YWxsX21vZHVsZSgpCi0rZWxzZQotKyAgaWYgbm90IHNtLmV2ZW50 X3JlZ2lzdGVyZWQgdGhlbgotKyAgICBkdC5yZWdpc3Rlcl9ldmVudCgKLSsgICAgICAic2NyaXB0 X21hbmFnZXIiLCAidmlldy1jaGFuZ2VkIiwKLSsgICAgICBmdW5jdGlvbihldmVudCwgb2xkX3Zp ZXcsIG5ld192aWV3KQotKyAgICAgICAgaWYgbmV3X3ZpZXcubmFtZSA9PSAibGlnaHR0YWJsZSIg YW5kIG9sZF92aWV3Lm5hbWUgPT0gImRhcmtyb29tIiB0aGVuCi0rICAgICAgICAgIGluc3RhbGxf bW9kdWxlKCkKLSsgICAgICAgIGVuZAotKyAgICAgIGVuZAotKyAgICApCi0rICAgIHNtLmV2ZW50 X3JlZ2lzdGVyZWQgPSB0cnVlCi0rICBlbmQKLStlbmQKLSsK