From 5e3fac22f0b85ed37fa0d9fa742edfad113a04bf Mon Sep 17 00:00:00 2001 From: Gitea Action Date: Sun, 21 Jun 2026 18:52:03 +0000 Subject: [PATCH] VI3DGL: v1.4.3 (2026-06-21T18:52) --- VI3DGL/sync-bundle-01.txt | 322 +-- VI3DGL/sync-bundle-03.txt | 5305 +++++++++++++++++++------------------ 2 files changed, 2823 insertions(+), 2804 deletions(-) diff --git a/VI3DGL/sync-bundle-01.txt b/VI3DGL/sync-bundle-01.txt index ef72373..8312436 100644 --- a/VI3DGL/sync-bundle-01.txt +++ b/VI3DGL/sync-bundle-01.txt @@ -3513,7 +3513,7 @@ ICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoxNDBweCI+V2llZGVyaGVyc3RlbGxlbjwvdGg+CiAg ICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAg ICAgICAgICA8dGJvZHkgaWQ9ImxvZy10Ym9keSI+PC90Ym9keT4KICAgICAgICAgICAgPC90YWJs ZT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K -### FILE: dgl.bat | 22587 +### FILE: dgl.bat | 22595 QGVjaG8gb2ZmDQpzZXRsb2NhbCBlbmFibGVkZWxheWVkZXhwYW5zaW9uDQpjaGNwIDY1MDAxID5u dWwgMj4mMQ0KdGl0bGUgVkkzIEtyw6RmdGVwbGFudW5nDQoNCjo6ID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KOjogIFZJMyBLcsOk @@ -3751,166 +3751,166 @@ RGF0ZW4gYmlzIHp1ciBlcnN0ZW4NCjo6IFBsYW51bmdzYWVuZGVydW5nLg0Kcm9ib2NvcHkgIiVB UFBfUk9PVCUiICIhQVNTRVRfRElSISIgYXBwLmpzIGluZGV4Lmh0bWwgc3R5bGUuY3NzIGhlYXJ0 YmVhdC13b3JrZXIuanMgc3luYy13b3JrZXIuanMgeGxzeC5mdWxsLm1pbi5qcyBmYXZpY29uLmlj byBpbmZvLmh0bWwgZGlhZ25vc2UuaHRtbCBkaWFnbm9zZS5qcyBzeW5jLWNoZWNrLmh0bWwgc3lu -Yy1jaGVjay5qcyBXb2NoZW5wbGFuLnRlbXBsYXRlLmh0bWwgc3luYy1tYW5pZmVzdC5qc29uICFS -Q19PUFQhID5udWwgMj4mMQ0KOjogeGxzeC1DaGVjayBzZXBhcmF0IOKAlCByb2JvY29weSBzY2hs -dWNrdCBmZWhsZW5kZSBGaWxlcyBzdHVtbSwgd2lyDQo6OiB3b2xsZW4gYWJlciBkZW4gV2Fybmhp -bndlaXMgaW0gVUkuDQpzZXQgIlhMU1hfRkVITFQ9Ig0KaWYgbm90IGV4aXN0ICIlQVBQX1JPT1Ql -XHhsc3guZnVsbC5taW4uanMiIHNldCAiWExTWF9GRUhMVD0xIg0KOjogU3ViZGlyZWN0b3JpZXMg -cmVrdXJzaXYgKyBtdWx0aS10aHJlYWRlZC4NCmlmIGV4aXN0ICIlQVBQX1JPT1QlXGljb25zIiBy -b2JvY29weSAiJUFQUF9ST09UJVxpY29ucyIgIiFBU1NFVF9ESVIhXGljb25zIiAvRSAvTVQ6OCAh -UkNfT1BUISA+bnVsIDI+JjENCmlmIGV4aXN0ICIlQVBQX1JPT1QlXGpzIiAgICByb2JvY29weSAi -JUFQUF9ST09UJVxqcyIgICAgIiFBU1NFVF9ESVIhXGpzIiAgICAvRSAvTVQ6OCAhUkNfT1BUISA+ -bnVsIDI+JjENCjo6IFRhcm4tTWFya3VwcyB1bnRlciBkYXRhLyDigJQgd2VyZGVuIHZvbSBTZXJ2 -ZXIgbnVyIGFuIEJlcmVjaHRpZ3RlDQo6OiBhdXNnZWxpZWZlcnQgKFRlc3QtRGFyZkJlcmVpY2gt -RmlsdGVyKS4gSGllciBleHBsaXppdCBudXIgZGllIGJlaWRlbg0KOjogSFRNTC1GaWxlcywgbmlj -aHQgZGFzIGdhbnplIGRhdGEvLVZlcnplaWNobmlzIChhZG1pbi5qc29uLCBwbGFudW5nLmpzb24N -Cjo6IGV0Yy4gd2VyZGVuIGRpcmVrdCBhdXMgRGF0YVBhdGggdm9tIFNoYXJlIGdlbGVzZW4sIE5J -Q0hUIGF1cyBkZW0NCjo6IGxva2FsZW4gQXNzZXQtQ2FjaGUpLg0KaWYgZXhpc3QgIiVBUFBfUk9P -VCVcZGF0YSIgcm9ib2NvcHkgIiVBUFBfUk9PVCVcZGF0YSIgIiFBU1NFVF9ESVIhXGRhdGEiIG1h -aW5mcmFtZS5odG1sIHNhbml0aXplci5odG1sICFSQ19PUFQhID5udWwgMj4mMQ0KOjogVW5ibG9j -ay1GaWxlIG51ciBlaW5tYWwgcmVrdXJzaXYgdWViZXIgYWxsZSBmcmlzY2gga29waWVydGVuIERh -dGVpZW4uDQo6OiBCZWkgQmVob2VyZGVuLVNoYXJlcyBzdGFtbXQgZGVyIE1hcmstb2YtdGhlLVdl -YiBtZWlzdCB2b24gZGVyIFNoYXJlLQ0KOjogUXVlbGxlLCByb2JvY29weSB1ZWJlcm5pbW10IGRl -biBTdHJlYW0g4oCUIHdpciBtdWVzc2VuIGV4cGxpeml0IHVuYmxvY2tlbi4NCnBvd2Vyc2hlbGwg -LU5vUHJvZmlsZSAtQ29tbWFuZCAiR2V0LUNoaWxkSXRlbSAtTGl0ZXJhbFBhdGggJyFBU1NFVF9E -SVIhJyAtUmVjdXJzZSAtRmlsZSB8IEZvckVhY2gtT2JqZWN0IHsgVW5ibG9jay1GaWxlIC1MaXRl -cmFsUGF0aCAkXy5GdWxsTmFtZSB9IiA+bnVsIDI+JjENCmlmIG5vdCBkZWZpbmVkIERFQlVHIGVj -aG8gICAgICAgIUNfT0sh4pyTIUNfUkVTRVQhICFDX0RJTSFGcmlzY2hlIFNlcnZlci1WZXJzaW9u -ICsgV2ViLUFzc2V0cyBlaW5nZXNwaWVsdCFDX1JFU0VUIQ0KaWYgZGVmaW5lZCBYTFNYX0ZFSExU -ICgNCiAgICBpZiBkZWZpbmVkIERFQlVHICgNCiAgICAgICAgZWNobyAgIFdBUk5VTkc6IHhsc3gu -ZnVsbC5taW4uanMgZmVobHQgaW0gU2hhcmUtUXVlbGxvcmRuZXIuDQogICAgICAgIGVjaG8gICAg -ICAgICAgICBFeGNlbC1JbXBvcnQgd2lyZCBuaWNodCBmdW5rdGlvbmllcmVuLg0KICAgICAgICBl -Y2hvICAgICAgICAgICAgRGF0ZWkgYXVzIGRlbSBHaXRlYS1SZXBvIG5hY2ggJUFQUF9ST09UJSBr -b3BpZXJlbiBeKH44OTAgS0JeKS4NCiAgICApIGVsc2UgKA0KICAgICAgICBlY2hvICAgICAgICFD -X1dBUk4hISEhQ19SRVNFVCEgIUNfRElNIXhsc3guZnVsbC5taW4uanMgZmVobHQgaW0gU2hhcmUg -4oCUIEV4Y2VsLUltcG9ydCBkZWFrdGl2aWVydCFDX1JFU0VUIQ0KICAgICkNCikNCg0KOjogLS0t -IFByZWZsaWdodDogRGF0ZW5vcmRuZXIgcHJ1ZWZlbiAtLS0NCjo6IERlciBTZXJ2ZXIgZmluZGV0 -IHNlaW5lIEpTT04gcm9idXN0IHVlYmVyIG1laHJlcmUgRmFsbGJhY2tzIChzaWVoZQ0KOjogc2Vy -dmVyLnBzMTogLURhdGFQYXRoIC0+IEFzc2V0RmFsbGJhY2tcZGF0YSAtPiBSb290XGRhdGEgLT4g -U2NyaXB0XGRhdGEpLg0KOjogV2VubiBhYmVyIHNjaG9uIGhpZXIga2VpbiBkYXRhXGFkbWluLmpz -b24gbmViZW4gZGVyIGRnbC5iYXQgbGllZ3QsIHd1cmRlDQo6OiBiZWltIFZlcnNjaGllYmVuIGRl -cyBPcmRuZXJzIHZlcm11dGxpY2ggZGVyIGRhdGFcLVVudGVyb3JkbmVyIHZlcmdlc3Nlbi4NCnNl -dCAiREFUQV9XQVJOPSINCmlmIG5vdCBleGlzdCAiJUFQUF9ST09UJVxkYXRhXGFkbWluLmpzb24i -IHNldCAiREFUQV9XQVJOPTEiDQppZiBkZWZpbmVkIERBVEFfV0FSTiAoDQogICAgaWYgZGVmaW5l -ZCBERUJVRyAoDQogICAgICAgIGVjaG8gICBXQVJOVU5HOiAlQVBQX1JPT1QlXGRhdGFcYWRtaW4u -anNvbiBmZWhsdC4NCiAgICAgICAgZWNobyAgICAgICAgICAgIFd1cmRlIGJlaW0gVmVyc2NoaWVi -ZW4gZGVyIGRhdGFcLU9yZG5lciB2ZXJnZXNzZW4/DQogICAgKSBlbHNlICgNCiAgICAgICAgZWNo -byAgICAgICAhQ19XQVJOISEhIUNfUkVTRVQhICFDX0RJTSFLZWluIGRhdGFcYWRtaW4uanNvbiBu -ZWJlbiBkZ2wuYmF0IOKAlCBkYXRhXC1PcmRuZXIgbWl0bmVobWVuISFDX1JFU0VUIQ0KICAgICkN -CikNCg0KaWYgZGVmaW5lZCBERUJVRyAoDQogICAgZWNobyAgIFN0YXJ0ZSBhdWYgaHR0cDovL2xv -Y2FsaG9zdDolUE9SVCUgLi4uDQogICAgZWNobyAgIExvZzogICAgICAhU0VSVkVSX0xPRyENCiAg -ICBlY2hvICAgTW9kdXM6ICAgIERFQlVHIF4oUFMtRmVuc3RlciBibGVpYnQgb2ZmZW5eKQ0KICAg -IGVjaG8uDQogICAgc3RhcnQgIlZJMyBLcmFlZnRlcGxhbnVuZyAoRGVidWcpIiBwb3dlcnNoZWxs -IC1Ob1Byb2ZpbGUgLU5vRXhpdCAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAiIUxPQ0FM -X1NFUlZFUiEiIC1Qb3J0ICVQT1JUJSAtUm9vdFBhdGggIiFBU1NFVF9ESVIhIiAtRGF0YVBhdGgg -IiVBUFBfUk9PVCVcZGF0YSIgLUFzc2V0RmFsbGJhY2sgIiVBUFBfUk9PVCUiDQopIGVsc2UgKA0K -ICAgIHN0YXJ0ICIiIC9iIGNtZCAvYyAicG93ZXJzaGVsbCAtTm9Qcm9maWxlIC1XaW5kb3dTdHls -ZSBIaWRkZW4gLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLUZpbGUgIiIhTE9DQUxfU0VSVkVSISIi -IC1Qb3J0ICVQT1JUJSAtUm9vdFBhdGggIiIhQVNTRVRfRElSISIiIC1EYXRhUGF0aCAiIiVBUFBf -Uk9PVCVcZGF0YSIiIC1Bc3NldEZhbGxiYWNrICIiJUFQUF9ST09UJSIiID4gIiIhU0VSVkVSX0xP -RyEiIiAyPiYxIg0KKQ0KDQo6OiAtLS0gU2Nocml0dCA1OiBXYXJ0ZW4gYmlzIGRlciBTZXJ2ZXIg -dGF0c2FlY2hsaWNoIGFudHdvcnRldCAtLS0NCjo6IFdlbGxlbi1Qb2xsaW5nIHN0YXR0IDEyIHNl -cGFyYXRlciBQb3dlclNoZWxsLUF1ZnJ1ZmUgw6AgMXMuIEVpbmUNCjo6IFdlbGxlID0gMSBQb3dl -clNoZWxsLCBkaWUgaW50ZXJuIDZ4IG1pdCA0MDAgbXMgUGF1c2UgcHJ1ZWZ0ICh+Miw1IHMpLg0K -OjogUG93ZXJTaGVsbC1Db2xkLVN0YXJ0ICgyMDAtMzAwIG1zKSBmYWVsbHQgbnVyIDF4IHBybyBX -ZWxsZSBhbiBzdGF0dA0KOjogMXggcHJvIFNla3VuZGUg4oCUIGJlaSBTZXJ2ZXItU3RhcnQgaW4g -MS0yIHMgc3BhcnQgZGFzIHNwdWVyYmFyIFplaXQuDQo6OiA0IFdlbGxlbiA9IG1heCB+MTAgcyBU -aW1lb3V0ICh2b3JoZXIgMTIgcykuDQppZiBkZWZpbmVkIERFQlVHIGVjaG8gICBXYXJ0ZSBiaXMg -U2VydmVyIGF1ZiBQb3J0ICVQT1JUJSBob2VydC4uLg0KaWYgbm90IGRlZmluZWQgREVCVUcgZWNo -byAgICAgICAhQ19ESU0hLi4uIUNfUkVTRVQhICFDX0RJTSFTZXJ2ZXIgd2FlY2h0IGF1ZiFDX1JF -U0VUIQ0Kc2V0ICJTRVJWRVJfVVA9Ig0KZm9yIC9sICUldyBpbiAoMSwxLDQpIGRvICgNCiAgICBp -ZiBub3QgZGVmaW5lZCBTRVJWRVJfVVAgKA0KICAgICAgICBpZiBub3QgZGVmaW5lZCBERUJVRyAo -DQogICAgICAgICAgICBpZiAiJSV3Ij09IjIiIGNhbGwgOnplaWdlU3BydWNoDQogICAgICAgICAg -ICBpZiAiJSV3Ij09IjMiIGNhbGwgOnplaWdlU3BydWNoDQogICAgICAgICAgICBpZiAiJSV3Ij09 -IjQiIGNhbGwgOnplaWdlU3BydWNoDQogICAgICAgICkNCiAgICAgICAgcG93ZXJzaGVsbCAtTm9Q -cm9maWxlIC1Db21tYW5kICIkcD0lUE9SVCU7IGZvciAoJGk9MDsgJGkgLWx0IDY7ICRpKyspIHsg -dHJ5IHsgJGM9TmV3LU9iamVjdCBTeXN0ZW0uTmV0LlNvY2tldHMuVGNwQ2xpZW50OyAkYy5Db25u -ZWN0KCcxMjcuMC4wLjEnLCRwKTsgJGMuQ2xvc2UoKTsgZXhpdCAwIH0gY2F0Y2ggeyBTdGFydC1T -bGVlcCAtTWlsbGlzZWNvbmRzIDQwMCB9IH07IGV4aXQgMSIgPm51bCAyPiYxDQogICAgICAgIGlm -ICFlcnJvcmxldmVsISBlcXUgMCBzZXQgIlNFUlZFUl9VUD0xIg0KICAgICkNCikNCg0KaWYgbm90 -IGRlZmluZWQgU0VSVkVSX1VQICgNCiAgICBpZiBub3QgZGVmaW5lZCBERUJVRyBlY2hvLg0KICAg -IGVjaG8uDQogICAgZWNobyAgIEZFSExFUjogU2VydmVyIGlzdCBuYWNoIDEwIFNla3VuZGVuIG5p -Y2h0IGVycmVpY2hiYXIuDQogICAgaWYgZGVmaW5lZCBERUJVRyAoDQogICAgICAgIGVjaG8gICAg -ICAgICAgIEltIERFQlVHLUZlbnN0ZXIgc3RlaHQgZGllIFBvd2VyU2hlbGwtRmVobGVybWVsZHVu -Zy4NCiAgICAgICAgcGF1c2UNCiAgICApIGVsc2UgKA0KICAgICAgICBpZiBleGlzdCAiJVVTRVJQ -Uk9GSUxFJVxEZXNrdG9wIiAoDQogICAgICAgICAgICBjb3B5IC9ZICIhU0VSVkVSX0xPRyEiICIl -VVNFUlBST0ZJTEUlXERlc2t0b3BcVkkzX0RHTF9GRUhMRVIubG9nIiA+bnVsIDI+JjENCiAgICAg -ICAgICAgIGVjaG8gICAgICAgICAgIEZlaGxlci1Mb2cgd3VyZGUgYXVmIGRlbiBEZXNrdG9wIGtv -cGllcnQ6IFZJM19ER0xfRkVITEVSLmxvZw0KICAgICAgICApDQogICAgICAgIHBhdXNlDQogICAg -KQ0KICAgIGV4aXQgL2IgMQ0KKQ0KDQo6OiAtLS0gU2Nocml0dCA2OiBCcm93c2VyIG9lZmZuZW4g -KyBBYnNjaGx1c3MgLS0tDQppZiBub3QgZGVmaW5lZCBERUJVRyAoDQogICAgZWNobyAgICAgICAh -Q19PSyHinJMhQ19SRVNFVCEgIUNfRElNIVNlcnZlciBhbnR3b3J0ZXQhQ19SRVNFVCENCiAgICBl -Y2hvLg0KICAgIGVjaG8gICAgICAgIUNfT0sh4pyTIEJlcmVpdCFDX1JFU0VUISDigJQgZGllIFBs -YW51bmcgb2VmZm5ldCBzaWNoIGltIEJyb3dzZXIuDQogICAgZWNoby4NCiAgICBlY2hvICAgICAg -ICFDX0RJTSFUaXBwOiBUYWIgc2NobGllc3NlbiA9IFNlcnZlciBiZWVuZGV0IHNpY2ggYXV0b21h -dGlzY2ggXigzMHNeKSFDX1JFU0VUIQ0KICAgIGVjaG8uDQopDQoNCjo6IEJyb3dzZXItU3VjaHJl -aWhlbmZvbGdlOg0KOjogICBFZGdlIChTdGFuZGFyZCBhdWYgZGVuIFBvbGl6ZWktUENzLCB2b3Jo -ZXJzYWdiYXJlcyBDYWNoZS1WZXJoYWx0ZW4pDQo6OiAgICAgLT4gSFAgU3VyZSBDbGljayAtPiBD -aHJvbWl1bSAtPiBHb29nbGUgQ2hyb21lIC0+IFN5c3RlbS1EZWZhdWx0Lg0KOjogJVByb2dyYW1G -aWxlcyh4ODYpJSB3aXJkIHdlZ2VuIGRlciBLbGFtbWVybiBpbiBlaW5lIEhpbGZzdmFyaWFibGUg -a29waWVydC4NCnNldCAiX1BGODY9JVByb2dyYW1GaWxlcyh4ODYpJSINCnNldCAiQlJPV1NFUl9F -WEU9Ig0KY2FsbCA6ZmluZEJyb3dzZXIgIiVQcm9ncmFtRmlsZXMlXE1pY3Jvc29mdFxFZGdlXEFw -cGxpY2F0aW9uXG1zZWRnZS5leGUiDQpjYWxsIDpmaW5kQnJvd3NlciAiIV9QRjg2IVxNaWNyb3Nv -ZnRcRWRnZVxBcHBsaWNhdGlvblxtc2VkZ2UuZXhlIg0KY2FsbCA6ZmluZEJyb3dzZXIgIiVQcm9n -cmFtRmlsZXMlXEhQXFN1cmUgQ2xpY2tcU2VydmVyc1xjaHJvbWUuZXhlIg0KY2FsbCA6ZmluZEJy -b3dzZXIgIiFfUEY4NiFcSFBcU3VyZSBDbGlja1xTZXJ2ZXJzXGNocm9tZS5leGUiDQpjYWxsIDpm -aW5kQnJvd3NlciAiJUxvY2FsQXBwRGF0YSVcQ2hyb21pdW1cQXBwbGljYXRpb25cY2hyb21lLmV4 -ZSINCmNhbGwgOmZpbmRCcm93c2VyICIlUHJvZ3JhbUZpbGVzJVxDaHJvbWl1bVxBcHBsaWNhdGlv -blxjaHJvbWUuZXhlIg0KY2FsbCA6ZmluZEJyb3dzZXIgIiFfUEY4NiFcQ2hyb21pdW1cQXBwbGlj -YXRpb25cY2hyb21lLmV4ZSINCmNhbGwgOmZpbmRCcm93c2VyICIlTG9jYWxBcHBEYXRhJVxHb29n -bGVcQ2hyb21lXEFwcGxpY2F0aW9uXGNocm9tZS5leGUiDQpjYWxsIDpmaW5kQnJvd3NlciAiJVBy -b2dyYW1GaWxlcyVcR29vZ2xlXENocm9tZVxBcHBsaWNhdGlvblxjaHJvbWUuZXhlIg0KY2FsbCA6 -ZmluZEJyb3dzZXIgIiFfUEY4NiFcR29vZ2xlXENocm9tZVxBcHBsaWNhdGlvblxjaHJvbWUuZXhl -Ig0KDQppZiBkZWZpbmVkIEJST1dTRVJfRVhFICgNCiAgICBpZiBkZWZpbmVkIERFQlVHIGVjaG8g -ICBCcm93c2VyOiAhQlJPV1NFUl9FWEUhDQogICAgOjogLS1uZXctd2luZG93ICsgLS1zdGFydC1t -YXhpbWl6ZWQ6IGVpZ2VuZXMsIG1heGltaWVydGVzIEZlbnN0ZXINCiAgICA6OiAoVGFiLS9BZHJl -c3NsZWlzdGUgYmxlaWJ0IHNpY2h0YmFyLCBkYW1pdCBkZXIgVXNlciBkZW4gVGFiIHNjaGxpZXNz -ZW4NCiAgICA6OiBrYW5uIOKAlCBUYWIgc2NobGllc3NlbiB0cmlnZ2VydCBTZXJ2ZXItU2h1dGRv -d24gbmFjaCAzMCBzKS4NCiAgICBzdGFydCAiIiAiIUJST1dTRVJfRVhFISIgLS1uZXctd2luZG93 -IC0tc3RhcnQtbWF4aW1pemVkICJodHRwOi8vbG9jYWxob3N0OiVQT1JUJSINCikgZWxzZSAoDQog -ICAgaWYgZGVmaW5lZCBERUJVRyBlY2hvICAgS2VpbiBDaHJvbWl1bS9DaHJvbWUgZ2VmdW5kZW4g -LSBvZWZmbmUgU3RhbmRhcmQtQnJvd3Nlcg0KICAgIHN0YXJ0ICIiIC9NQVggImh0dHA6Ly9sb2Nh -bGhvc3Q6JVBPUlQlIg0KKQ0KDQo6OiAtLS0gRmVuc3RlciBpbiBkZW4gVm9yZGVyZ3J1bmQgaG9s -ZW4gLS0tDQo6OiBCcm93c2VyLVN0YXJ0IGlzdCBhc3luY2hyb24gdW5kIGRhcyBGZW5zdGVyIGVy -c2NoZWludCBtYW5jaG1hbCBoaW50ZXINCjo6IGFuZGVyZW4gQW53ZW5kdW5nZW4sIHZvciBhbGxl -bSB3ZW5uIGRlciBVc2VyIHdhZWhyZW5kIGRlcyBTdGFydHMgbWl0DQo6OiB3YXMgYW5kZXJlbSBh -cmJlaXRldC4gV2lyIHdhcnRlbiBrdXJ6LCBkYW5uIHp3aW5nZW4gd2lyIGRhcyBGZW5zdGVyDQo6 -OiBtaXQgVGl0bGUtTWF0Y2ggIlZJMyBER0wtUGxhbnVuZyIgdmlhIFdpbjMyIFNldEZvcmVncm91 -bmRXaW5kb3cgbmFjaA0KOjogdm9ybmUuIEFwcEFjdGl2YXRlIGFsbGVpbmUgcmVpY2h0IG5pY2h0 -IHp1dmVybGFlc3NpZy4NCnBvd2Vyc2hlbGwgLU5vUHJvZmlsZSAtQ29tbWFuZCAiU3RhcnQtU2xl -ZXAgLU1pbGxpc2Vjb25kcyAxMjAwOyBBZGQtVHlwZSAtTmFtZXNwYWNlIFcgLU5hbWUgRiAtTWVt -YmVyRGVmaW5pdGlvbiAnW0RsbEltcG9ydChcInVzZXIzMi5kbGxcIildIHB1YmxpYyBzdGF0aWMg -ZXh0ZXJuIGJvb2wgU2V0Rm9yZWdyb3VuZFdpbmRvdyhTeXN0ZW0uSW50UHRyIGhXbmQpOyBbRGxs -SW1wb3J0KFwidXNlcjMyLmRsbFwiKV0gcHVibGljIHN0YXRpYyBleHRlcm4gYm9vbCBTaG93V2lu -ZG93KFN5c3RlbS5JbnRQdHIgaFduZCwgaW50IG5DbWRTaG93KTsnIC1FcnJvckFjdGlvbiBTaWxl -bnRseUNvbnRpbnVlOyAkcCA9IEdldC1Qcm9jZXNzIHwgV2hlcmUtT2JqZWN0IHsgJF8uTWFpbldp -bmRvd1RpdGxlIC1saWtlICcqVkkzIERHTC1QbGFudW5nKicgLW9yICRfLk1haW5XaW5kb3dUaXRs -ZSAtbGlrZSAnKmxvY2FsaG9zdDolUE9SVCUqJyB9IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMTsg -aWYgKCRwKSB7IFtXLkZdOjpTaG93V2luZG93KCRwLk1haW5XaW5kb3dIYW5kbGUsIDMpIHwgT3V0 -LU51bGw7IFtXLkZdOjpTZXRGb3JlZ3JvdW5kV2luZG93KCRwLk1haW5XaW5kb3dIYW5kbGUpIHwg -T3V0LU51bGwgfSIgPm51bCAyPiYxDQoNCmlmIGRlZmluZWQgREVCVUcgKA0KICAgIGVjaG8uDQog -ICAgZWNobyAgIFNlcnZlciBsYWV1ZnQgYXVmIGh0dHA6Ly9sb2NhbGhvc3Q6JVBPUlQlDQogICAg -ZWNobyAgIERhcyBEZWJ1Zy1GZW5zdGVyIGJsZWlidCBvZmZlbiwgZGllc2VyIExhdW5jaGVyIGJl -ZW5kZXQgc2ljaCBqZXR6dC4NCiAgICBlY2hvLg0KICAgIHRpbWVvdXQgL3QgMyAvbm9icmVhayA+ -bnVsDQopIGVsc2UgKA0KICAgIHRpbWVvdXQgL3QgMyAvbm9icmVhayA+bnVsDQopDQpleGl0IC9i -IDANCg0KDQo6OiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT0NCjo6IFVudGVycm91dGluZW4NCjo6ID09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQo6ZG90DQo6OiBHZWZ1 -ZWxsdGVyIEJsb2NrIGltIE5vcm1hbC1Nb2RlIChtb2Rlcm4pLCBsZWlzZSBpbSBEZWJ1Zw0KaWYg -bm90IGRlZmluZWQgREVCVUcgPG51bCBzZXQgL3A9IiFDX0FDQ0VOVDIh4pawIUNfUkVTRVQhIg0K -Z290byA6ZW9mDQoNCjp6ZWlnZVNwcnVjaA0KOjogWmllaHQgZWluZW4genVmYWVsbGlnZW4gU3By -dWNoIGF1cyBTUFJVQ0hbMC4uU1BSVUNIX0FOWi0xXSB1bmQgZ2lidA0KOjogaWhuIGFscyBnZWRp -bW10ZSBaZWlsZSBhdXMuIFdpcmQgaW0gU2VydmVyLVBvbGxpbmcgYWxsZSAzIFNla3VuZGVuDQo6 -OiBhdWZnZXJ1ZmVuLCBkYW1pdCBXYXJ0ZXplaXRlbiBuaWNodCBzdHVtbSBzaW5kLiBBdWZydWYg -bnVyIGltDQo6OiBOb24tRGVidWctTW9kZSAoRGVidWctRmVuc3RlciBzb2xsIGxlaXNlIHNlaW4p -Lg0Kc2V0IC9hICJfU1BSX0lEWD0hUkFORE9NISAlJSAhU1BSVUNIX0FOWiEiDQpjYWxsIHNldCAi -X1NQUl9NU0c9JSVTUFJVQ0hbIV9TUFJfSURYIV0lJSINCmVjaG8gICAgICAgIUNfRElNIeKUgiFD -X1JFU0VUISAhQ19ESU0hIV9TUFJfTVNHISFDX1JFU0VUIQ0KZ290byA6ZW9mDQoNCjpmaW5kQnJv -d3Nlcg0KOjogU2V0enQgQlJPV1NFUl9FWEUsIHNvYmFsZCBkZXIgZXJzdGUgZGVyIHVlYmVyZ2Vi -ZW5lbiBQZmFkZSBleGlzdGllcnQuDQo6OiBTcGFldGVyZSBBdWZydWZlIHdlcmRlbiBpZ25vcmll -cnQsIGRhbWl0IGRpZSBTdWNocmVpaGVuZm9sZ2Ugc3RhYmlsIGJsZWlidC4NCmlmIGRlZmluZWQg -QlJPV1NFUl9FWEUgZ290byA6ZW9mDQppZiBleGlzdCAiJX4xIiBzZXQgIkJST1dTRVJfRVhFPSV+ -MSINCmdvdG8gOmVvZg0K +Yy1jaGVjay5qcyBXb2NoZW5wbGFuLnRlbXBsYXRlLmh0bWwgc3luYy1tYW5pZmVzdC5qc29uIFZF +UlNJT04gIVJDX09QVCEgPm51bCAyPiYxDQo6OiB4bHN4LUNoZWNrIHNlcGFyYXQg4oCUIHJvYm9j +b3B5IHNjaGx1Y2t0IGZlaGxlbmRlIEZpbGVzIHN0dW1tLCB3aXINCjo6IHdvbGxlbiBhYmVyIGRl +biBXYXJuaGlud2VpcyBpbSBVSS4NCnNldCAiWExTWF9GRUhMVD0iDQppZiBub3QgZXhpc3QgIiVB +UFBfUk9PVCVceGxzeC5mdWxsLm1pbi5qcyIgc2V0ICJYTFNYX0ZFSExUPTEiDQo6OiBTdWJkaXJl +Y3RvcmllcyByZWt1cnNpdiArIG11bHRpLXRocmVhZGVkLg0KaWYgZXhpc3QgIiVBUFBfUk9PVCVc +aWNvbnMiIHJvYm9jb3B5ICIlQVBQX1JPT1QlXGljb25zIiAiIUFTU0VUX0RJUiFcaWNvbnMiIC9F +IC9NVDo4ICFSQ19PUFQhID5udWwgMj4mMQ0KaWYgZXhpc3QgIiVBUFBfUk9PVCVcanMiICAgIHJv +Ym9jb3B5ICIlQVBQX1JPT1QlXGpzIiAgICAiIUFTU0VUX0RJUiFcanMiICAgIC9FIC9NVDo4ICFS +Q19PUFQhID5udWwgMj4mMQ0KOjogVGFybi1NYXJrdXBzIHVudGVyIGRhdGEvIOKAlCB3ZXJkZW4g +dm9tIFNlcnZlciBudXIgYW4gQmVyZWNodGlndGUNCjo6IGF1c2dlbGllZmVydCAoVGVzdC1EYXJm +QmVyZWljaC1GaWx0ZXIpLiBIaWVyIGV4cGxpeml0IG51ciBkaWUgYmVpZGVuDQo6OiBIVE1MLUZp +bGVzLCBuaWNodCBkYXMgZ2FuemUgZGF0YS8tVmVyemVpY2huaXMgKGFkbWluLmpzb24sIHBsYW51 +bmcuanNvbg0KOjogZXRjLiB3ZXJkZW4gZGlyZWt0IGF1cyBEYXRhUGF0aCB2b20gU2hhcmUgZ2Vs +ZXNlbiwgTklDSFQgYXVzIGRlbQ0KOjogbG9rYWxlbiBBc3NldC1DYWNoZSkuDQppZiBleGlzdCAi +JUFQUF9ST09UJVxkYXRhIiByb2JvY29weSAiJUFQUF9ST09UJVxkYXRhIiAiIUFTU0VUX0RJUiFc +ZGF0YSIgbWFpbmZyYW1lLmh0bWwgc2FuaXRpemVyLmh0bWwgIVJDX09QVCEgPm51bCAyPiYxDQo6 +OiBVbmJsb2NrLUZpbGUgbnVyIGVpbm1hbCByZWt1cnNpdiB1ZWJlciBhbGxlIGZyaXNjaCBrb3Bp +ZXJ0ZW4gRGF0ZWllbi4NCjo6IEJlaSBCZWhvZXJkZW4tU2hhcmVzIHN0YW1tdCBkZXIgTWFyay1v +Zi10aGUtV2ViIG1laXN0IHZvbiBkZXIgU2hhcmUtDQo6OiBRdWVsbGUsIHJvYm9jb3B5IHVlYmVy +bmltbXQgZGVuIFN0cmVhbSDigJQgd2lyIG11ZXNzZW4gZXhwbGl6aXQgdW5ibG9ja2VuLg0KcG93 +ZXJzaGVsbCAtTm9Qcm9maWxlIC1Db21tYW5kICJHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAn +IUFTU0VUX0RJUiEnIC1SZWN1cnNlIC1GaWxlIHwgRm9yRWFjaC1PYmplY3QgeyBVbmJsb2NrLUZp +bGUgLUxpdGVyYWxQYXRoICRfLkZ1bGxOYW1lIH0iID5udWwgMj4mMQ0KaWYgbm90IGRlZmluZWQg +REVCVUcgZWNobyAgICAgICAhQ19PSyHinJMhQ19SRVNFVCEgIUNfRElNIUZyaXNjaGUgU2VydmVy +LVZlcnNpb24gKyBXZWItQXNzZXRzIGVpbmdlc3BpZWx0IUNfUkVTRVQhDQppZiBkZWZpbmVkIFhM +U1hfRkVITFQgKA0KICAgIGlmIGRlZmluZWQgREVCVUcgKA0KICAgICAgICBlY2hvICAgV0FSTlVO +RzogeGxzeC5mdWxsLm1pbi5qcyBmZWhsdCBpbSBTaGFyZS1RdWVsbG9yZG5lci4NCiAgICAgICAg +ZWNobyAgICAgICAgICAgIEV4Y2VsLUltcG9ydCB3aXJkIG5pY2h0IGZ1bmt0aW9uaWVyZW4uDQog +ICAgICAgIGVjaG8gICAgICAgICAgICBEYXRlaSBhdXMgZGVtIEdpdGVhLVJlcG8gbmFjaCAlQVBQ +X1JPT1QlIGtvcGllcmVuIF4ofjg5MCBLQl4pLg0KICAgICkgZWxzZSAoDQogICAgICAgIGVjaG8g +ICAgICAgIUNfV0FSTiEhISFDX1JFU0VUISAhQ19ESU0heGxzeC5mdWxsLm1pbi5qcyBmZWhsdCBp +bSBTaGFyZSDigJQgRXhjZWwtSW1wb3J0IGRlYWt0aXZpZXJ0IUNfUkVTRVQhDQogICAgKQ0KKQ0K +DQo6OiAtLS0gUHJlZmxpZ2h0OiBEYXRlbm9yZG5lciBwcnVlZmVuIC0tLQ0KOjogRGVyIFNlcnZl +ciBmaW5kZXQgc2VpbmUgSlNPTiByb2J1c3QgdWViZXIgbWVocmVyZSBGYWxsYmFja3MgKHNpZWhl +DQo6OiBzZXJ2ZXIucHMxOiAtRGF0YVBhdGggLT4gQXNzZXRGYWxsYmFja1xkYXRhIC0+IFJvb3Rc +ZGF0YSAtPiBTY3JpcHRcZGF0YSkuDQo6OiBXZW5uIGFiZXIgc2Nob24gaGllciBrZWluIGRhdGFc +YWRtaW4uanNvbiBuZWJlbiBkZXIgZGdsLmJhdCBsaWVndCwgd3VyZGUNCjo6IGJlaW0gVmVyc2No +aWViZW4gZGVzIE9yZG5lcnMgdmVybXV0bGljaCBkZXIgZGF0YVwtVW50ZXJvcmRuZXIgdmVyZ2Vz +c2VuLg0Kc2V0ICJEQVRBX1dBUk49Ig0KaWYgbm90IGV4aXN0ICIlQVBQX1JPT1QlXGRhdGFcYWRt +aW4uanNvbiIgc2V0ICJEQVRBX1dBUk49MSINCmlmIGRlZmluZWQgREFUQV9XQVJOICgNCiAgICBp +ZiBkZWZpbmVkIERFQlVHICgNCiAgICAgICAgZWNobyAgIFdBUk5VTkc6ICVBUFBfUk9PVCVcZGF0 +YVxhZG1pbi5qc29uIGZlaGx0Lg0KICAgICAgICBlY2hvICAgICAgICAgICAgV3VyZGUgYmVpbSBW +ZXJzY2hpZWJlbiBkZXIgZGF0YVwtT3JkbmVyIHZlcmdlc3Nlbj8NCiAgICApIGVsc2UgKA0KICAg +ICAgICBlY2hvICAgICAgICFDX1dBUk4hISEhQ19SRVNFVCEgIUNfRElNIUtlaW4gZGF0YVxhZG1p +bi5qc29uIG5lYmVuIGRnbC5iYXQg4oCUIGRhdGFcLU9yZG5lciBtaXRuZWhtZW4hIUNfUkVTRVQh +DQogICAgKQ0KKQ0KDQppZiBkZWZpbmVkIERFQlVHICgNCiAgICBlY2hvICAgU3RhcnRlIGF1ZiBo +dHRwOi8vbG9jYWxob3N0OiVQT1JUJSAuLi4NCiAgICBlY2hvICAgTG9nOiAgICAgICFTRVJWRVJf +TE9HIQ0KICAgIGVjaG8gICBNb2R1czogICAgREVCVUcgXihQUy1GZW5zdGVyIGJsZWlidCBvZmZl +bl4pDQogICAgZWNoby4NCiAgICBzdGFydCAiVkkzIEtyYWVmdGVwbGFudW5nIChEZWJ1ZykiIHBv +d2Vyc2hlbGwgLU5vUHJvZmlsZSAtTm9FeGl0IC1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1GaWxl +ICIhTE9DQUxfU0VSVkVSISIgLVBvcnQgJVBPUlQlIC1Sb290UGF0aCAiIUFTU0VUX0RJUiEiIC1E +YXRhUGF0aCAiJUFQUF9ST09UJVxkYXRhIiAtQXNzZXRGYWxsYmFjayAiJUFQUF9ST09UJSINCikg +ZWxzZSAoDQogICAgc3RhcnQgIiIgL2IgY21kIC9jICJwb3dlcnNoZWxsIC1Ob1Byb2ZpbGUgLVdp +bmRvd1N0eWxlIEhpZGRlbiAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtRmlsZSAiIiFMT0NBTF9T +RVJWRVIhIiIgLVBvcnQgJVBPUlQlIC1Sb290UGF0aCAiIiFBU1NFVF9ESVIhIiIgLURhdGFQYXRo +ICIiJUFQUF9ST09UJVxkYXRhIiIgLUFzc2V0RmFsbGJhY2sgIiIlQVBQX1JPT1QlIiIgPiAiIiFT +RVJWRVJfTE9HISIiIDI+JjEiDQopDQoNCjo6IC0tLSBTY2hyaXR0IDU6IFdhcnRlbiBiaXMgZGVy +IFNlcnZlciB0YXRzYWVjaGxpY2ggYW50d29ydGV0IC0tLQ0KOjogV2VsbGVuLVBvbGxpbmcgc3Rh +dHQgMTIgc2VwYXJhdGVyIFBvd2VyU2hlbGwtQXVmcnVmZSDDoCAxcy4gRWluZQ0KOjogV2VsbGUg +PSAxIFBvd2VyU2hlbGwsIGRpZSBpbnRlcm4gNnggbWl0IDQwMCBtcyBQYXVzZSBwcnVlZnQgKH4y +LDUgcykuDQo6OiBQb3dlclNoZWxsLUNvbGQtU3RhcnQgKDIwMC0zMDAgbXMpIGZhZWxsdCBudXIg +MXggcHJvIFdlbGxlIGFuIHN0YXR0DQo6OiAxeCBwcm8gU2VrdW5kZSDigJQgYmVpIFNlcnZlci1T +dGFydCBpbiAxLTIgcyBzcGFydCBkYXMgc3B1ZXJiYXIgWmVpdC4NCjo6IDQgV2VsbGVuID0gbWF4 +IH4xMCBzIFRpbWVvdXQgKHZvcmhlciAxMiBzKS4NCmlmIGRlZmluZWQgREVCVUcgZWNobyAgIFdh +cnRlIGJpcyBTZXJ2ZXIgYXVmIFBvcnQgJVBPUlQlIGhvZXJ0Li4uDQppZiBub3QgZGVmaW5lZCBE +RUJVRyBlY2hvICAgICAgICFDX0RJTSEuLi4hQ19SRVNFVCEgIUNfRElNIVNlcnZlciB3YWVjaHQg +YXVmIUNfUkVTRVQhDQpzZXQgIlNFUlZFUl9VUD0iDQpmb3IgL2wgJSV3IGluICgxLDEsNCkgZG8g +KA0KICAgIGlmIG5vdCBkZWZpbmVkIFNFUlZFUl9VUCAoDQogICAgICAgIGlmIG5vdCBkZWZpbmVk +IERFQlVHICgNCiAgICAgICAgICAgIGlmICIlJXciPT0iMiIgY2FsbCA6emVpZ2VTcHJ1Y2gNCiAg +ICAgICAgICAgIGlmICIlJXciPT0iMyIgY2FsbCA6emVpZ2VTcHJ1Y2gNCiAgICAgICAgICAgIGlm +ICIlJXciPT0iNCIgY2FsbCA6emVpZ2VTcHJ1Y2gNCiAgICAgICAgKQ0KICAgICAgICBwb3dlcnNo +ZWxsIC1Ob1Byb2ZpbGUgLUNvbW1hbmQgIiRwPSVQT1JUJTsgZm9yICgkaT0wOyAkaSAtbHQgNjsg +JGkrKykgeyB0cnkgeyAkYz1OZXctT2JqZWN0IFN5c3RlbS5OZXQuU29ja2V0cy5UY3BDbGllbnQ7 +ICRjLkNvbm5lY3QoJzEyNy4wLjAuMScsJHApOyAkYy5DbG9zZSgpOyBleGl0IDAgfSBjYXRjaCB7 +IFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgNDAwIH0gfTsgZXhpdCAxIiA+bnVsIDI+JjENCiAg +ICAgICAgaWYgIWVycm9ybGV2ZWwhIGVxdSAwIHNldCAiU0VSVkVSX1VQPTEiDQogICAgKQ0KKQ0K +DQppZiBub3QgZGVmaW5lZCBTRVJWRVJfVVAgKA0KICAgIGlmIG5vdCBkZWZpbmVkIERFQlVHIGVj +aG8uDQogICAgZWNoby4NCiAgICBlY2hvICAgRkVITEVSOiBTZXJ2ZXIgaXN0IG5hY2ggMTAgU2Vr +dW5kZW4gbmljaHQgZXJyZWljaGJhci4NCiAgICBpZiBkZWZpbmVkIERFQlVHICgNCiAgICAgICAg +ZWNobyAgICAgICAgICAgSW0gREVCVUctRmVuc3RlciBzdGVodCBkaWUgUG93ZXJTaGVsbC1GZWhs +ZXJtZWxkdW5nLg0KICAgICAgICBwYXVzZQ0KICAgICkgZWxzZSAoDQogICAgICAgIGlmIGV4aXN0 +ICIlVVNFUlBST0ZJTEUlXERlc2t0b3AiICgNCiAgICAgICAgICAgIGNvcHkgL1kgIiFTRVJWRVJf +TE9HISIgIiVVU0VSUFJPRklMRSVcRGVza3RvcFxWSTNfREdMX0ZFSExFUi5sb2ciID5udWwgMj4m +MQ0KICAgICAgICAgICAgZWNobyAgICAgICAgICAgRmVobGVyLUxvZyB3dXJkZSBhdWYgZGVuIERl +c2t0b3Aga29waWVydDogVkkzX0RHTF9GRUhMRVIubG9nDQogICAgICAgICkNCiAgICAgICAgcGF1 +c2UNCiAgICApDQogICAgZXhpdCAvYiAxDQopDQoNCjo6IC0tLSBTY2hyaXR0IDY6IEJyb3dzZXIg +b2VmZm5lbiArIEFic2NobHVzcyAtLS0NCmlmIG5vdCBkZWZpbmVkIERFQlVHICgNCiAgICBlY2hv +ICAgICAgICFDX09LIeKckyFDX1JFU0VUISAhQ19ESU0hU2VydmVyIGFudHdvcnRldCFDX1JFU0VU +IQ0KICAgIGVjaG8uDQogICAgZWNobyAgICAgICAhQ19PSyHinJMgQmVyZWl0IUNfUkVTRVQhIOKA +lCBkaWUgUGxhbnVuZyBvZWZmbmV0IHNpY2ggaW0gQnJvd3Nlci4NCiAgICBlY2hvLg0KICAgIGVj +aG8gICAgICAgIUNfRElNIVRpcHA6IFRhYiBzY2hsaWVzc2VuID0gU2VydmVyIGJlZW5kZXQgc2lj +aCBhdXRvbWF0aXNjaCBeKDMwc14pIUNfUkVTRVQhDQogICAgZWNoby4NCikNCg0KOjogQnJvd3Nl +ci1TdWNocmVpaGVuZm9sZ2U6DQo6OiAgIEVkZ2UgKFN0YW5kYXJkIGF1ZiBkZW4gUG9saXplaS1Q +Q3MsIHZvcmhlcnNhZ2JhcmVzIENhY2hlLVZlcmhhbHRlbikNCjo6ICAgICAtPiBIUCBTdXJlIENs +aWNrIC0+IENocm9taXVtIC0+IEdvb2dsZSBDaHJvbWUgLT4gU3lzdGVtLURlZmF1bHQuDQo6OiAl +UHJvZ3JhbUZpbGVzKHg4NiklIHdpcmQgd2VnZW4gZGVyIEtsYW1tZXJuIGluIGVpbmUgSGlsZnN2 +YXJpYWJsZSBrb3BpZXJ0Lg0Kc2V0ICJfUEY4Nj0lUHJvZ3JhbUZpbGVzKHg4NiklIg0Kc2V0ICJC +Uk9XU0VSX0VYRT0iDQpjYWxsIDpmaW5kQnJvd3NlciAiJVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0 +XEVkZ2VcQXBwbGljYXRpb25cbXNlZGdlLmV4ZSINCmNhbGwgOmZpbmRCcm93c2VyICIhX1BGODYh +XE1pY3Jvc29mdFxFZGdlXEFwcGxpY2F0aW9uXG1zZWRnZS5leGUiDQpjYWxsIDpmaW5kQnJvd3Nl +ciAiJVByb2dyYW1GaWxlcyVcSFBcU3VyZSBDbGlja1xTZXJ2ZXJzXGNocm9tZS5leGUiDQpjYWxs +IDpmaW5kQnJvd3NlciAiIV9QRjg2IVxIUFxTdXJlIENsaWNrXFNlcnZlcnNcY2hyb21lLmV4ZSIN +CmNhbGwgOmZpbmRCcm93c2VyICIlTG9jYWxBcHBEYXRhJVxDaHJvbWl1bVxBcHBsaWNhdGlvblxj +aHJvbWUuZXhlIg0KY2FsbCA6ZmluZEJyb3dzZXIgIiVQcm9ncmFtRmlsZXMlXENocm9taXVtXEFw +cGxpY2F0aW9uXGNocm9tZS5leGUiDQpjYWxsIDpmaW5kQnJvd3NlciAiIV9QRjg2IVxDaHJvbWl1 +bVxBcHBsaWNhdGlvblxjaHJvbWUuZXhlIg0KY2FsbCA6ZmluZEJyb3dzZXIgIiVMb2NhbEFwcERh +dGElXEdvb2dsZVxDaHJvbWVcQXBwbGljYXRpb25cY2hyb21lLmV4ZSINCmNhbGwgOmZpbmRCcm93 +c2VyICIlUHJvZ3JhbUZpbGVzJVxHb29nbGVcQ2hyb21lXEFwcGxpY2F0aW9uXGNocm9tZS5leGUi +DQpjYWxsIDpmaW5kQnJvd3NlciAiIV9QRjg2IVxHb29nbGVcQ2hyb21lXEFwcGxpY2F0aW9uXGNo +cm9tZS5leGUiDQoNCmlmIGRlZmluZWQgQlJPV1NFUl9FWEUgKA0KICAgIGlmIGRlZmluZWQgREVC +VUcgZWNobyAgIEJyb3dzZXI6ICFCUk9XU0VSX0VYRSENCiAgICA6OiAtLW5ldy13aW5kb3cgKyAt +LXN0YXJ0LW1heGltaXplZDogZWlnZW5lcywgbWF4aW1pZXJ0ZXMgRmVuc3Rlcg0KICAgIDo6IChU +YWItL0FkcmVzc2xlaXN0ZSBibGVpYnQgc2ljaHRiYXIsIGRhbWl0IGRlciBVc2VyIGRlbiBUYWIg +c2NobGllc3Nlbg0KICAgIDo6IGthbm4g4oCUIFRhYiBzY2hsaWVzc2VuIHRyaWdnZXJ0IFNlcnZl +ci1TaHV0ZG93biBuYWNoIDMwIHMpLg0KICAgIHN0YXJ0ICIiICIhQlJPV1NFUl9FWEUhIiAtLW5l +dy13aW5kb3cgLS1zdGFydC1tYXhpbWl6ZWQgImh0dHA6Ly9sb2NhbGhvc3Q6JVBPUlQlIg0KKSBl +bHNlICgNCiAgICBpZiBkZWZpbmVkIERFQlVHIGVjaG8gICBLZWluIENocm9taXVtL0Nocm9tZSBn +ZWZ1bmRlbiAtIG9lZmZuZSBTdGFuZGFyZC1Ccm93c2VyDQogICAgc3RhcnQgIiIgL01BWCAiaHR0 +cDovL2xvY2FsaG9zdDolUE9SVCUiDQopDQoNCjo6IC0tLSBGZW5zdGVyIGluIGRlbiBWb3JkZXJn +cnVuZCBob2xlbiAtLS0NCjo6IEJyb3dzZXItU3RhcnQgaXN0IGFzeW5jaHJvbiB1bmQgZGFzIEZl +bnN0ZXIgZXJzY2hlaW50IG1hbmNobWFsIGhpbnRlcg0KOjogYW5kZXJlbiBBbndlbmR1bmdlbiwg +dm9yIGFsbGVtIHdlbm4gZGVyIFVzZXIgd2FlaHJlbmQgZGVzIFN0YXJ0cyBtaXQNCjo6IHdhcyBh +bmRlcmVtIGFyYmVpdGV0LiBXaXIgd2FydGVuIGt1cnosIGRhbm4gendpbmdlbiB3aXIgZGFzIEZl +bnN0ZXINCjo6IG1pdCBUaXRsZS1NYXRjaCAiVkkzIERHTC1QbGFudW5nIiB2aWEgV2luMzIgU2V0 +Rm9yZWdyb3VuZFdpbmRvdyBuYWNoDQo6OiB2b3JuZS4gQXBwQWN0aXZhdGUgYWxsZWluZSByZWlj +aHQgbmljaHQgenV2ZXJsYWVzc2lnLg0KcG93ZXJzaGVsbCAtTm9Qcm9maWxlIC1Db21tYW5kICJT +dGFydC1TbGVlcCAtTWlsbGlzZWNvbmRzIDEyMDA7IEFkZC1UeXBlIC1OYW1lc3BhY2UgVyAtTmFt +ZSBGIC1NZW1iZXJEZWZpbml0aW9uICdbRGxsSW1wb3J0KFwidXNlcjMyLmRsbFwiKV0gcHVibGlj +IHN0YXRpYyBleHRlcm4gYm9vbCBTZXRGb3JlZ3JvdW5kV2luZG93KFN5c3RlbS5JbnRQdHIgaFdu +ZCk7IFtEbGxJbXBvcnQoXCJ1c2VyMzIuZGxsXCIpXSBwdWJsaWMgc3RhdGljIGV4dGVybiBib29s +IFNob3dXaW5kb3coU3lzdGVtLkludFB0ciBoV25kLCBpbnQgbkNtZFNob3cpOycgLUVycm9yQWN0 +aW9uIFNpbGVudGx5Q29udGludWU7ICRwID0gR2V0LVByb2Nlc3MgfCBXaGVyZS1PYmplY3QgeyAk +Xy5NYWluV2luZG93VGl0bGUgLWxpa2UgJypWSTMgREdMLVBsYW51bmcqJyAtb3IgJF8uTWFpbldp +bmRvd1RpdGxlIC1saWtlICcqbG9jYWxob3N0OiVQT1JUJSonIH0gfCBTZWxlY3QtT2JqZWN0IC1G +aXJzdCAxOyBpZiAoJHApIHsgW1cuRl06OlNob3dXaW5kb3coJHAuTWFpbldpbmRvd0hhbmRsZSwg +MykgfCBPdXQtTnVsbDsgW1cuRl06OlNldEZvcmVncm91bmRXaW5kb3coJHAuTWFpbldpbmRvd0hh +bmRsZSkgfCBPdXQtTnVsbCB9IiA+bnVsIDI+JjENCg0KaWYgZGVmaW5lZCBERUJVRyAoDQogICAg +ZWNoby4NCiAgICBlY2hvICAgU2VydmVyIGxhZXVmdCBhdWYgaHR0cDovL2xvY2FsaG9zdDolUE9S +VCUNCiAgICBlY2hvICAgRGFzIERlYnVnLUZlbnN0ZXIgYmxlaWJ0IG9mZmVuLCBkaWVzZXIgTGF1 +bmNoZXIgYmVlbmRldCBzaWNoIGpldHp0Lg0KICAgIGVjaG8uDQogICAgdGltZW91dCAvdCAzIC9u +b2JyZWFrID5udWwNCikgZWxzZSAoDQogICAgdGltZW91dCAvdCAzIC9ub2JyZWFrID5udWwNCikN +CmV4aXQgL2IgMA0KDQoNCjo6ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PQ0KOjogVW50ZXJyb3V0aW5lbg0KOjogPT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCjpkb3QN +Cjo6IEdlZnVlbGx0ZXIgQmxvY2sgaW0gTm9ybWFsLU1vZGUgKG1vZGVybiksIGxlaXNlIGltIERl +YnVnDQppZiBub3QgZGVmaW5lZCBERUJVRyA8bnVsIHNldCAvcD0iIUNfQUNDRU5UMiHilrAhQ19S +RVNFVCEiDQpnb3RvIDplb2YNCg0KOnplaWdlU3BydWNoDQo6OiBaaWVodCBlaW5lbiB6dWZhZWxs +aWdlbiBTcHJ1Y2ggYXVzIFNQUlVDSFswLi5TUFJVQ0hfQU5aLTFdIHVuZCBnaWJ0DQo6OiBpaG4g +YWxzIGdlZGltbXRlIFplaWxlIGF1cy4gV2lyZCBpbSBTZXJ2ZXItUG9sbGluZyBhbGxlIDMgU2Vr +dW5kZW4NCjo6IGF1ZmdlcnVmZW4sIGRhbWl0IFdhcnRlemVpdGVuIG5pY2h0IHN0dW1tIHNpbmQu +IEF1ZnJ1ZiBudXIgaW0NCjo6IE5vbi1EZWJ1Zy1Nb2RlIChEZWJ1Zy1GZW5zdGVyIHNvbGwgbGVp +c2Ugc2VpbikuDQpzZXQgL2EgIl9TUFJfSURYPSFSQU5ET00hICUlICFTUFJVQ0hfQU5aISINCmNh +bGwgc2V0ICJfU1BSX01TRz0lJVNQUlVDSFshX1NQUl9JRFghXSUlIg0KZWNobyAgICAgICAhQ19E +SU0h4pSCIUNfUkVTRVQhICFDX0RJTSEhX1NQUl9NU0chIUNfUkVTRVQhDQpnb3RvIDplb2YNCg0K +OmZpbmRCcm93c2VyDQo6OiBTZXR6dCBCUk9XU0VSX0VYRSwgc29iYWxkIGRlciBlcnN0ZSBkZXIg +dWViZXJnZWJlbmVuIFBmYWRlIGV4aXN0aWVydC4NCjo6IFNwYWV0ZXJlIEF1ZnJ1ZmUgd2VyZGVu +IGlnbm9yaWVydCwgZGFtaXQgZGllIFN1Y2hyZWloZW5mb2xnZSBzdGFiaWwgYmxlaWJ0Lg0KaWYg +ZGVmaW5lZCBCUk9XU0VSX0VYRSBnb3RvIDplb2YNCmlmIGV4aXN0ICIlfjEiIHNldCAiQlJPV1NF +Ul9FWEU9JX4xIg0KZ290byA6ZW9mDQo= ### FILE: diagnose.html | 2538 PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVU Ri04Ij4KPHRpdGxlPlZJMyBER0wtUGxhbnVuZyDigJQgRGlhZ25vc2U8L3RpdGxlPgo8c3R5bGU+ diff --git a/VI3DGL/sync-bundle-03.txt b/VI3DGL/sync-bundle-03.txt index b6a37e9..7dbaa35 100644 --- a/VI3DGL/sync-bundle-03.txt +++ b/VI3DGL/sync-bundle-03.txt @@ -6676,7 +6676,7 @@ U2VydmVyIG1hbnVlbGwgc3RhcnRlbi4iIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93Cn0KCldyaXRl LUhvc3QgIiIKV3JpdGUtSG9zdCAiPT09IFJvbGxiYWNrIGFiZ2VzY2hsb3NzZW4gPT09IiAtRm9y ZWdyb3VuZENvbG9yIEdyZWVuCldyaXRlLUhvc3QgIiAgICBXaWVkZXJoZXJnZXN0ZWxsdDogJCgk Y2hvc2VuLk5hbWUpIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4K -### FILE: server.ps1 | 249949 +### FILE: server.ps1 | 251041 IyBTdGFuZDogMjAyNi0wNS0xNA0KcGFyYW0oDQogICAgW2ludF0kUG9ydCA9IDgwODAsDQogICAg W3N0cmluZ10kUm9vdFBhdGggPSAnJywNCiAgICAjIE9wdGlvbmFsZXMgendlaXRlcyBSb290IGZ1 ZXIgZ2VtZWluc2FtZSBEYXRlbiAoYWRtaW4uanNvbiBldGMuKS4gV2Vubg0KICAgICMgZ2VzZXR6 @@ -8388,2681 +8388,2700 @@ ICAgICAgICAgICAgIHRleHQgPSAoJ1ZlcnNpb24gezB9IC0+IHsxfSAtIHsyfSBEYXRlaWVuIHdl cmRlbiBha3R1YWxpc2llcnQuJyAtZiAkbG9jYWxWLCAkcmVtb3RlViwgJGZpbGVzLkNvdW50KSB9 DQogICAgfSBjYXRjaCB7DQogICAgICAgIHJldHVybiBAeyBmb3JtYXQgPSAndGV4dCc7IHRleHQg PSAoJ1ZlcnNpb24gezB9IC0+IHsxfScgLWYgJGxvY2FsViwgJHJlbW90ZVYpIH0NCiAgICB9DQp9 -DQoNCiMgS2Fub25pc2NoZSBDb2RlLVF1ZWxsZSAod28gdXBkYXRlLmJhdCBsaWVndCB1bmQgcGVy -c2lzdGVudCBha3R1YWxpc2llcnQgd2lyZCk6DQojIEFzc2V0RmFsbGJhY2sgKFNoYXJlKSB3ZW5u -IGdlc2V0enQsIHNvbnN0IFJvb3QuIERlciBsYXVmZW5kZSBTZXJ2ZXItQ29kZSBpbQ0KIyBsb2th -bGVuIENhY2hlICgkUm9vdCkgaXN0IE5JQ0hUIGRpZSByaWNodGlnZSBTdGVsbGUgLT4gd3VlcmRl -IGJlaW0gbmFlY2hzdGVuDQojIGRnbC5iYXQtU3RhcnQgdWViZXJzY2hyaWViZW4uDQpmdW5jdGlv -biBHZXQtVXBkYXRlUXVlbGxlIHsNCiAgICBpZiAoJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7IHJl -dHVybiAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgfQ0KICAgIHJldHVybiAkUm9vdA0KfQ0KDQojIElu -aXRpYWwtU25hcHNob3QgZGVyIE9mZmxpbmUtV29jaGVucGxhbi5odG1sIGJlaW0gU3RhcnQgcmVn -ZW5lcmllcmVuDQojIChhdWNoIHdlbm4gc2VpdCBkZW0gbGV0enRlbiBMYXVmIG5pY2h0cyBnZWFl -bmRlcnQgd3VyZGUsIGhhdCBzaWNoIHouQi4NCiMgZGFzIERhdHVtIHZlcnNjaG9iZW4gdW5kIGRl -ciBIZXV0ZS1NYXJrZXIgemVpZ3Qgc29uc3QgZGllIGFsdGUgV29jaGUpLg0KdHJ5IHsgR2VuZXJh -dGUtV29jaGVucGxhblNuYXBzaG90IHwgT3V0LU51bGwgfSBjYXRjaCB7IExvZy1BcGkgKCdTTkFQ -U0hPVCAoaW5pdGlhbCkgRkVITEVSOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSB9DQoN -CiMgLS0tIFNlcnZlciBzdGFydGVuIC0tLQ0KJExpc3RlbmVyID0gTmV3LU9iamVjdCBTeXN0ZW0u -TmV0Lkh0dHBMaXN0ZW5lcg0KJExpc3RlbmVyLlByZWZpeGVzLkFkZCgiaHR0cDovL2xvY2FsaG9z -dDokUG9ydC8iKQ0KdHJ5IHsNCiAgICAkTGlzdGVuZXIuU3RhcnQoKQ0KfSBjYXRjaCB7DQogICAg -V3JpdGUtSG9zdCAoJ0ZFSExFUjogTGlzdGVuZXIgYXVmIFBvcnQgezB9IGthbm4gbmljaHQgc3Rh -cnRlbi4nIC1mICRQb3J0KSAtRm9yZWdyb3VuZENvbG9yIFJlZA0KICAgIFdyaXRlLUhvc3QgJF8N -CiAgICBMb2ctQXBpICgnTElTVEVORVIgRkVITEVSOiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNz -YWdlKQ0KICAgIFN0YXJ0LVNsZWVwIC1TZWNvbmRzIDUNCiAgICBleGl0IDENCn0NCg0KV3JpdGUt -SG9zdCAoJ1ZJMyBER0wtUGxhbnVuZyBhdWYgaHR0cDovL2xvY2FsaG9zdDp7MH0nIC1mICRQb3J0 -KQ0KV3JpdGUtSG9zdCAoJ1Jvb3Q6ICAgIHswfScgLWYgJFJvb3QpDQpXcml0ZS1Ib3N0ICgnRGF0 -YURpcjogezB9JyAtZiAkRGF0YURpcikNCldyaXRlLUhvc3QgKCdMb2c6ICAgICB7MH0nIC1mICRz -Y3JpcHQ6QXBpTG9nKQ0KDQojIC0tLSBIZWFydGJlYXQtV2F0Y2hkb2cgLS0tDQokV2F0Y2hkb2dU -aW1lciA9IE5ldy1PYmplY3QgU3lzdGVtLlRpbWVycy5UaW1lcg0KJFdhdGNoZG9nVGltZXIuSW50 -ZXJ2YWwgPSA1MDAwDQokV2F0Y2hkb2dUaW1lci5BdXRvUmVzZXQgPSAkdHJ1ZQ0KUmVnaXN0ZXIt -T2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRXYXRjaGRvZ1RpbWVyIC1FdmVudE5hbWUgRWxhcHNl -ZCAtQWN0aW9uIHsNCiAgICAkZWxhcHNlZCA9IChHZXQtRGF0ZSkgLSAkc2NyaXB0Okxhc3RIZWFy -dGJlYXQNCiAgICBpZiAoJGVsYXBzZWQuVG90YWxTZWNvbmRzIC1ndCAzMCkgew0KICAgICAgICBp -ZiAoLW5vdCAkc2NyaXB0OlNodXRkb3duUGVuZGluZykgew0KICAgICAgICAgICAgJHNjcmlwdDpT -aHV0ZG93blBlbmRpbmcgPSAkdHJ1ZQ0KICAgICAgICB9IGVsc2VpZiAoJGVsYXBzZWQuVG90YWxT -ZWNvbmRzIC1ndCAzNSkgew0KICAgICAgICAgICAgJExpc3RlbmVyLlN0b3AoKQ0KICAgICAgICAg -ICAgW0Vudmlyb25tZW50XTo6RXhpdCgwKQ0KICAgICAgICB9DQogICAgfQ0KfSB8IE91dC1OdWxs -DQokV2F0Y2hkb2dUaW1lci5TdGFydCgpDQoNCiMgLS0tIFJlcXVlc3QtTG9vcCAtLS0NCnRyeSB7 -DQogICAgd2hpbGUgKCRMaXN0ZW5lci5Jc0xpc3RlbmluZykgew0KICAgICAgICAkQXN5bmNSZXN1 -bHQgPSAkTGlzdGVuZXIuQmVnaW5HZXRDb250ZXh0KCRudWxsLCAkbnVsbCkNCiAgICAgICAgd2hp -bGUgKC1ub3QgJEFzeW5jUmVzdWx0LkFzeW5jV2FpdEhhbmRsZS5XYWl0T25lKDEwMDApKSB7IH0N -CiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVuZXIuRW5kR2V0Q29udGV4dCgkQXN5bmNSZXN1bHQp -DQogICAgICAgICRSZXF1ZXN0ID0gJENvbnRleHQuUmVxdWVzdA0KICAgICAgICAkUmVzcG9uc2Ug -PSAkQ29udGV4dC5SZXNwb25zZQ0KICAgICAgICAkTWV0aG9kID0gJFJlcXVlc3QuSHR0cE1ldGhv -ZA0KICAgICAgICAkUGF0aCA9ICRSZXF1ZXN0LlVybC5BYnNvbHV0ZVBhdGgNCiAgICAgICAgTG9n -LUFwaSAoJ1JFUSB7MH0gezF9JyAtZiAkTWV0aG9kLCAkUGF0aCkNCg0KICAgICAgICB0cnkgew0K -ICAgICAgICAgICAgIyA9PT09PSBDT1JTIFByZWZsaWdodCA9PT09PQ0KICAgICAgICAgICAgaWYg -KCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0 -dXNDb2RlID0gMjA0DQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9u -c2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAg -ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09 -IFNZU1RFTSA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9oZWFydGJlYXQn -IC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgIyBPcmlnaW4tQ2hl -Y2sgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2UgMjAyNi0wNS0yOCk6DQogICAg -ICAgICAgICAgICAgIyBIZWFydGJlYXQgYWt6ZXB0aWVydCBudXIgUmVxdWVzdHMgdm9uIGRlciBl -aWdlbmVuIEFwcC4gQW5kZXJlDQogICAgICAgICAgICAgICAgIyBsb2thbGUgUHJvemVzc2Uga29l -bm50ZW4gc29uc3QgcGVyIExvb3AgZGllIEF1dG8tU2h1dGRvd24tTG9naWsNCiAgICAgICAgICAg -ICAgICAjIHVtZ2VoZW4gb2RlciBkZW4gU2VydmVyIGJld3Vzc3QgYW0gTGViZW4gaGFsdGVuLiBC -cm93c2VyIHNlbmRldA0KICAgICAgICAgICAgICAgICMgT3JpZ2luIGF1dG9tYXRpc2NoOyBmZWhs -ZW5kZXIgSGVhZGVyIHdpcmQgdG9sZXJpZXJlbiAoc2VuZEJlYWNvbg0KICAgICAgICAgICAgICAg -ICMgaW4gbWFuY2hlbiBCcm93c2VybiksIGFiZXIgRkFMU0NIRVIgT3JpZ2luIHdpcmQgYWJnZWxl -aG50Lg0KICAgICAgICAgICAgICAgICRvcmlnaW4gPSAkUmVxdWVzdC5IZWFkZXJzWydPcmlnaW4n -XQ0KICAgICAgICAgICAgICAgIGlmICgkb3JpZ2luIC1hbmQgJG9yaWdpbiAtbmUgJHNjcmlwdDpD -b3JzT3JpZ2luKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdP -cmlnaW4gbmljaHQgZXJsYXVidCcgNDAzDQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdI -RUFSVEJFQVQgNDAzIE9yaWdpbj17MH0nIC1mICRvcmlnaW4pDQogICAgICAgICAgICAgICAgICAg -IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6TGFz -dEhlYXJ0YmVhdCA9IEdldC1EYXRlDQogICAgICAgICAgICAgICAgJHNjcmlwdDpTaHV0ZG93blBl -bmRpbmcgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAjIGFkbWluVmVyc2lvbiAvIHBsYW51bmdW -ZXJzaW9uOiBtdGltZSBhbHMgVGlja3MuIEVybGF1YnQgZGVtDQogICAgICAgICAgICAgICAgIyBD -bGllbnQsIFJlY2h0ZS0gYnp3LiBQZXJzb25lbi1BZW5kZXJ1bmdlbiBpbSBIaW50ZXJncnVuZCB6 -dQ0KICAgICAgICAgICAgICAgICMgZXJrZW5uZW4gdW5kIFoucmVjaHRlL1oucGxhbnVuZyBuZXUg -enUgbGFkZW4sIG9obmUgZGFzcyBkZXINCiAgICAgICAgICAgICAgICAjIFVzZXIgRjUgZHJ1ZWNr -ZW4gbXVzcy4gcGxhbnVuZ1ZlcnNpb24gZGVja3QgaW5zYmVzb25kZXJlDQogICAgICAgICAgICAg -ICAgIyBlZGl0UmVjaHRlL3NlaGVuLVVwZGF0ZXMgYWIsIGRpZSBkZXIgTGl2ZS1TeW5jLURlbHRh -IG5pY2h0DQogICAgICAgICAgICAgICAgIyBsaWVmZXJ0IChDaGVycnktUGljayAxYWVmZTI2IEJ1 -ZyAjMykuDQogICAgICAgICAgICAgICAgJGFkbWluVmVyICAgPSAwDQogICAgICAgICAgICAgICAg -JHBsYW51bmdWZXIgPSAwDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg -ICAgJGFkbWluRmlsZSA9IEpvaW4tUGF0aCAkRGF0YURpciAnYWRtaW4uanNvbicNCiAgICAgICAg -ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFkbWluRmlsZSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGFkbWluVmVyID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAk -YWRtaW5GaWxlKS5MYXN0V3JpdGVUaW1lVXRjLlRpY2tzDQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdGaWxlID0gSm9pbi1QYXRoICREYXRhRGlyICdw -bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQ -YXRoICRwbGFudW5nRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdWZXIg -PSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkuTGFzdFdyaXRlVGltZVV0Yy5U -aWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0K -ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29r -JzsgYWRtaW5WZXJzaW9uID0gJGFkbWluVmVyOyBwbGFudW5nVmVyc2lvbiA9ICRwbGFudW5nVmVy -IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -aWYgKCRQYXRoIC1lcSAnL2FwaS9zaHV0ZG93bicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsN -CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdz -aHV0ZG93bicgfQ0KICAgICAgICAgICAgICAgIFN0YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMzAw -DQogICAgICAgICAgICAgICAgJExpc3RlbmVyLlN0b3AoKQ0KICAgICAgICAgICAgICAgIFtFbnZp -cm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAt -ZXEgJy9hcGkvaW5mbycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAg -IFJlZnJlc2gtVXBkYXRlQ2hlY2sNCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAg -ICAgICAgICAgICAgICAkaW5mb09iaiA9IEB7DQogICAgICAgICAgICAgICAgICAgIGJlbnV0emVy -ICAgICAgICAgICAgICAgID0gIiREb21haW5cJFVzZXJuYW1lIg0KICAgICAgICAgICAgICAgICAg -ICByb2xsZSAgICAgICAgICAgICAgICAgICA9ICRyLnJvbGxlDQogICAgICAgICAgICAgICAgICAg -IGlzdFN1cGVyVXNlciAgICAgICAgICAgID0gJHIuaXN0U3VwZXJVc2VyDQogICAgICAgICAgICAg -ICAgICAgIGlzdEZhY2hhdWZzaWNodCAgICAgICAgID0gJHIuaXN0RmFjaGF1ZnNpY2h0DQogICAg -ICAgICAgICAgICAgICAgIGlzdEdlc2FtdHZlcmFudHdvcnRsaWNoID0gJHIuaXN0R2VzYW10dmVy -YW50d29ydGxpY2gNCiAgICAgICAgICAgICAgICAgICAgc2VoZW4gICAgICAgICAgICAgICAgICAg -PSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAgICBhZG1pblN1YnRhYnMgICAgICAgICAgICA9 -ICRyLmFkbWluU3VidGFicw0KICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWtCZXJlaWNoZSAg -ICAgICA9ICRyLnN0YXRpc3Rpa0JlcmVpY2hlDQogICAgICAgICAgICAgICAgICAgIGVkaXRpZXJl -biAgICAgICAgICAgICAgID0gJHIuZWRpdGllcmVuICAgIyBudWxsIGJlaSBTdXBlclVzZXIgPSAi -YWxsZXMgZXJsYXVidCINCiAgICAgICAgICAgICAgICAgICAgbWVpbmVQZXJzb25JZCAgICAgICAg -ICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIHNlcnZlciAgICAgICAg -ICAgICAgICAgID0gJHNjcmlwdDpDb3JzT3JpZ2luDQogICAgICAgICAgICAgICAgICAgIHVwZGF0 -ZUF2YWlsYWJsZSAgICAgICAgID0gJHNjcmlwdDpVcGRhdGVBdmFpbGFibGUNCiAgICAgICAgICAg -ICAgICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICAgICAgPSAkc2NyaXB0OlJlbW90ZVZlcnNpb24N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNw -b25zZSAkaW5mb09iag0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBVUERBVEU6IFNUQVRVUyAobnVyIFN1 -cGVyVXNlcikgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjIEJlaGVidCBkZW4g -NDA0IGF1ZiAvYXBpL3VwZGF0ZS9zdGF0dXMuIExpZXN0IFZlcnNpb24gKyBDaGFuZ2Vsb2cNCiAg -ICAgICAgICAgICMgdWViZXIgZGVuIChqZXR6dCBwcm94eS1hdXRoZW50aWZpemllcnRlbikgRGlz -dC1SZXBvLVp1Z2FuZy4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvdXBkYXRlL3N0 -YXR1cycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 +DQoNCiMgS2Fub25pc2NoZSBDb2RlLVF1ZWxsZSA9IGRlciBPcmRuZXIsIGluIGRlbSB1cGRhdGUu +YmF0IGxpZWd0IHVuZCBkZXIgcGVyc2lzdGVudA0KIyBha3R1YWxpc2llcnQgd2lyZC4gRGVyIGxh +dWZlbmRlIFNlcnZlci1Db2RlIGltIGxva2FsZW4gQ2FjaGUgKCRSb290ID0NCiMgYXNzZXRzXzx0 +cz4pIGlzdCBOSUNIVCBkaWUgcmljaHRpZ2UgU3RlbGxlIChhKSBlciB3aXJkIGJlaW0gbmFlY2hz +dGVuIGRnbC5iYXQtDQojIFN0YXJ0IHVlYmVyc2NocmllYmVuIHVuZCAoYikgZGdsLmJhdCBrb3Bp +ZXJ0IHVwZGF0ZS5iYXQgZ2FyIG5pY2h0IGRvcnRoaW4uDQojIEthbmRpZGF0ZW4gaW4gUHJpb3Jp +dGFldDsgZ2Vub21tZW4gd2lyZCBkZXIgRVJTVEUsIGRlciB3aXJrbGljaCBlaW5lIHVwZGF0ZS5i +YXQNCiMgZW50aGFlbHQ6DQojICAgMS4gQXNzZXRGYWxsYmFjayAodm9tIExhdW5jaGVyIGdlc2V0 +enQgPSBTaGFyZS1RdWVsbGUpIC0gb2Z0IGFiZXIgbGVlcg0KIyAgIDIuIEVsdGVybm9yZG5lciB2 +b24gRGF0YURpciAtIFN0YW5kYXJkLUluc3RhbGw6IERhdGFEaXI9PFF1ZWxsZT5cZGF0YSwNCiMg +ICAgICBhbHNvIFF1ZWxsZSA9IFBhcmVudCAoZG9ydCBsaWVnZW4gZGdsLmJhdC9zZXJ2ZXIucHMx +L3VwZGF0ZS5iYXQpDQojICAgMy4gUm9vdCAoZXBoZW1lcmVyIENhY2hlIC0gbGV0enRlIFJldHR1 +bmcpDQpmdW5jdGlvbiBHZXQtVXBkYXRlUXVlbGxlIHsNCiAgICAka2FuZGlkYXRlbiA9IEAoKQ0K +ICAgIGlmICgkc2NyaXB0OkFzc2V0RmFsbGJhY2spIHsgJGthbmRpZGF0ZW4gKz0gJHNjcmlwdDpB +c3NldEZhbGxiYWNrIH0NCiAgICBpZiAoJERhdGFEaXIpIHsNCiAgICAgICAgJGRwID0gU3BsaXQt +UGF0aCAtUGFyZW50ICREYXRhRGlyDQogICAgICAgIGlmICgkZHApIHsgJGthbmRpZGF0ZW4gKz0g +JGRwIH0NCiAgICB9DQogICAgJGthbmRpZGF0ZW4gKz0gJFJvb3QNCiAgICBmb3JlYWNoICgkayBp +biAka2FuZGlkYXRlbikgew0KICAgICAgICBpZiAoJGsgLWFuZCAoVGVzdC1QYXRoIC1MaXRlcmFs +UGF0aCAoSm9pbi1QYXRoICRrICd1cGRhdGUuYmF0JykpKSB7IHJldHVybiAkayB9DQogICAgfQ0K +ICAgIHJldHVybiAkUm9vdA0KfQ0KDQojIEluaXRpYWwtU25hcHNob3QgZGVyIE9mZmxpbmUtV29j +aGVucGxhbi5odG1sIGJlaW0gU3RhcnQgcmVnZW5lcmllcmVuDQojIChhdWNoIHdlbm4gc2VpdCBk +ZW0gbGV0enRlbiBMYXVmIG5pY2h0cyBnZWFlbmRlcnQgd3VyZGUsIGhhdCBzaWNoIHouQi4NCiMg +ZGFzIERhdHVtIHZlcnNjaG9iZW4gdW5kIGRlciBIZXV0ZS1NYXJrZXIgemVpZ3Qgc29uc3QgZGll +IGFsdGUgV29jaGUpLg0KdHJ5IHsgR2VuZXJhdGUtV29jaGVucGxhblNuYXBzaG90IHwgT3V0LU51 +bGwgfSBjYXRjaCB7IExvZy1BcGkgKCdTTkFQU0hPVCAoaW5pdGlhbCkgRkVITEVSOiB7MH0nIC1m +ICRfLkV4Y2VwdGlvbi5NZXNzYWdlKSB9DQoNCiMgLS0tIFNlcnZlciBzdGFydGVuIC0tLQ0KJExp +c3RlbmVyID0gTmV3LU9iamVjdCBTeXN0ZW0uTmV0Lkh0dHBMaXN0ZW5lcg0KJExpc3RlbmVyLlBy +ZWZpeGVzLkFkZCgiaHR0cDovL2xvY2FsaG9zdDokUG9ydC8iKQ0KdHJ5IHsNCiAgICAkTGlzdGVu +ZXIuU3RhcnQoKQ0KfSBjYXRjaCB7DQogICAgV3JpdGUtSG9zdCAoJ0ZFSExFUjogTGlzdGVuZXIg +YXVmIFBvcnQgezB9IGthbm4gbmljaHQgc3RhcnRlbi4nIC1mICRQb3J0KSAtRm9yZWdyb3VuZENv +bG9yIFJlZA0KICAgIFdyaXRlLUhvc3QgJF8NCiAgICBMb2ctQXBpICgnTElTVEVORVIgRkVITEVS +OiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgIFN0YXJ0LVNsZWVwIC1TZWNvbmRz +IDUNCiAgICBleGl0IDENCn0NCg0KV3JpdGUtSG9zdCAoJ1ZJMyBER0wtUGxhbnVuZyBhdWYgaHR0 +cDovL2xvY2FsaG9zdDp7MH0nIC1mICRQb3J0KQ0KV3JpdGUtSG9zdCAoJ1Jvb3Q6ICAgIHswfScg +LWYgJFJvb3QpDQpXcml0ZS1Ib3N0ICgnRGF0YURpcjogezB9JyAtZiAkRGF0YURpcikNCldyaXRl +LUhvc3QgKCdMb2c6ICAgICB7MH0nIC1mICRzY3JpcHQ6QXBpTG9nKQ0KDQojIC0tLSBIZWFydGJl +YXQtV2F0Y2hkb2cgLS0tDQokV2F0Y2hkb2dUaW1lciA9IE5ldy1PYmplY3QgU3lzdGVtLlRpbWVy +cy5UaW1lcg0KJFdhdGNoZG9nVGltZXIuSW50ZXJ2YWwgPSA1MDAwDQokV2F0Y2hkb2dUaW1lci5B +dXRvUmVzZXQgPSAkdHJ1ZQ0KUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRXYXRj +aGRvZ1RpbWVyIC1FdmVudE5hbWUgRWxhcHNlZCAtQWN0aW9uIHsNCiAgICAkZWxhcHNlZCA9IChH +ZXQtRGF0ZSkgLSAkc2NyaXB0Okxhc3RIZWFydGJlYXQNCiAgICBpZiAoJGVsYXBzZWQuVG90YWxT +ZWNvbmRzIC1ndCAzMCkgew0KICAgICAgICBpZiAoLW5vdCAkc2NyaXB0OlNodXRkb3duUGVuZGlu +Zykgew0KICAgICAgICAgICAgJHNjcmlwdDpTaHV0ZG93blBlbmRpbmcgPSAkdHJ1ZQ0KICAgICAg +ICB9IGVsc2VpZiAoJGVsYXBzZWQuVG90YWxTZWNvbmRzIC1ndCAzNSkgew0KICAgICAgICAgICAg +JExpc3RlbmVyLlN0b3AoKQ0KICAgICAgICAgICAgW0Vudmlyb25tZW50XTo6RXhpdCgwKQ0KICAg +ICAgICB9DQogICAgfQ0KfSB8IE91dC1OdWxsDQokV2F0Y2hkb2dUaW1lci5TdGFydCgpDQoNCiMg +LS0tIFJlcXVlc3QtTG9vcCAtLS0NCnRyeSB7DQogICAgd2hpbGUgKCRMaXN0ZW5lci5Jc0xpc3Rl +bmluZykgew0KICAgICAgICAkQXN5bmNSZXN1bHQgPSAkTGlzdGVuZXIuQmVnaW5HZXRDb250ZXh0 +KCRudWxsLCAkbnVsbCkNCiAgICAgICAgd2hpbGUgKC1ub3QgJEFzeW5jUmVzdWx0LkFzeW5jV2Fp +dEhhbmRsZS5XYWl0T25lKDEwMDApKSB7IH0NCiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVuZXIu +RW5kR2V0Q29udGV4dCgkQXN5bmNSZXN1bHQpDQogICAgICAgICRSZXF1ZXN0ID0gJENvbnRleHQu +UmVxdWVzdA0KICAgICAgICAkUmVzcG9uc2UgPSAkQ29udGV4dC5SZXNwb25zZQ0KICAgICAgICAk +TWV0aG9kID0gJFJlcXVlc3QuSHR0cE1ldGhvZA0KICAgICAgICAkUGF0aCA9ICRSZXF1ZXN0LlVy +bC5BYnNvbHV0ZVBhdGgNCiAgICAgICAgTG9nLUFwaSAoJ1JFUSB7MH0gezF9JyAtZiAkTWV0aG9k +LCAkUGF0aCkNCg0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgIyA9PT09PSBDT1JTIFByZWZs +aWdodCA9PT09PQ0KICAgICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAg +ICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjA0DQogICAgICAgICAgICAgICAg +QWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2Uu +T3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg +ICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFNZU1RFTSA9PT09PQ0KICAgICAgICAgICAgaWYg +KCRQYXRoIC1lcSAnL2FwaS9oZWFydGJlYXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQog +ICAgICAgICAgICAgICAgIyBPcmlnaW4tQ2hlY2sgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1O +b3RicmVtc2UgMjAyNi0wNS0yOCk6DQogICAgICAgICAgICAgICAgIyBIZWFydGJlYXQgYWt6ZXB0 +aWVydCBudXIgUmVxdWVzdHMgdm9uIGRlciBlaWdlbmVuIEFwcC4gQW5kZXJlDQogICAgICAgICAg +ICAgICAgIyBsb2thbGUgUHJvemVzc2Uga29lbm50ZW4gc29uc3QgcGVyIExvb3AgZGllIEF1dG8t +U2h1dGRvd24tTG9naWsNCiAgICAgICAgICAgICAgICAjIHVtZ2VoZW4gb2RlciBkZW4gU2VydmVy +IGJld3Vzc3QgYW0gTGViZW4gaGFsdGVuLiBCcm93c2VyIHNlbmRldA0KICAgICAgICAgICAgICAg +ICMgT3JpZ2luIGF1dG9tYXRpc2NoOyBmZWhsZW5kZXIgSGVhZGVyIHdpcmQgdG9sZXJpZXJlbiAo +c2VuZEJlYWNvbg0KICAgICAgICAgICAgICAgICMgaW4gbWFuY2hlbiBCcm93c2VybiksIGFiZXIg +RkFMU0NIRVIgT3JpZ2luIHdpcmQgYWJnZWxlaG50Lg0KICAgICAgICAgICAgICAgICRvcmlnaW4g +PSAkUmVxdWVzdC5IZWFkZXJzWydPcmlnaW4nXQ0KICAgICAgICAgICAgICAgIGlmICgkb3JpZ2lu +IC1hbmQgJG9yaWdpbiAtbmUgJHNjcmlwdDpDb3JzT3JpZ2luKSB7DQogICAgICAgICAgICAgICAg +ICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdPcmlnaW4gbmljaHQgZXJsYXVidCcgNDAzDQogICAg +ICAgICAgICAgICAgICAgIExvZy1BcGkgKCdIRUFSVEJFQVQgNDAzIE9yaWdpbj17MH0nIC1mICRv +cmlnaW4pDQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICRzY3JpcHQ6TGFzdEhlYXJ0YmVhdCA9IEdldC1EYXRlDQogICAgICAg +ICAgICAgICAgJHNjcmlwdDpTaHV0ZG93blBlbmRpbmcgPSAkZmFsc2UNCiAgICAgICAgICAgICAg +ICAjIGFkbWluVmVyc2lvbiAvIHBsYW51bmdWZXJzaW9uOiBtdGltZSBhbHMgVGlja3MuIEVybGF1 +YnQgZGVtDQogICAgICAgICAgICAgICAgIyBDbGllbnQsIFJlY2h0ZS0gYnp3LiBQZXJzb25lbi1B +ZW5kZXJ1bmdlbiBpbSBIaW50ZXJncnVuZCB6dQ0KICAgICAgICAgICAgICAgICMgZXJrZW5uZW4g +dW5kIFoucmVjaHRlL1oucGxhbnVuZyBuZXUgenUgbGFkZW4sIG9obmUgZGFzcyBkZXINCiAgICAg +ICAgICAgICAgICAjIFVzZXIgRjUgZHJ1ZWNrZW4gbXVzcy4gcGxhbnVuZ1ZlcnNpb24gZGVja3Qg +aW5zYmVzb25kZXJlDQogICAgICAgICAgICAgICAgIyBlZGl0UmVjaHRlL3NlaGVuLVVwZGF0ZXMg +YWIsIGRpZSBkZXIgTGl2ZS1TeW5jLURlbHRhIG5pY2h0DQogICAgICAgICAgICAgICAgIyBsaWVm +ZXJ0IChDaGVycnktUGljayAxYWVmZTI2IEJ1ZyAjMykuDQogICAgICAgICAgICAgICAgJGFkbWlu +VmVyICAgPSAwDQogICAgICAgICAgICAgICAgJHBsYW51bmdWZXIgPSAwDQogICAgICAgICAgICAg +ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGFkbWluRmlsZSA9IEpvaW4tUGF0aCAkRGF0 +YURpciAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0 +ZXJhbFBhdGggJGFkbWluRmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluVmVy +ID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkYWRtaW5GaWxlKS5MYXN0V3JpdGVUaW1lVXRjLlRp +Y2tzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHBsYW51bmdG +aWxlID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAg +ICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nRmlsZSkgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgJHBsYW51bmdWZXIgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRwbGFu +dW5nRmlsZSkuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcw0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj +dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgYWRtaW5WZXJzaW9uID0gJGFkbWluVmVyOyBw +bGFudW5nVmVyc2lvbiA9ICRwbGFudW5nVmVyIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zaHV0ZG93bicg +LWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdzaHV0ZG93bicgfQ0KICAgICAgICAgICAgICAgIFN0 +YXJ0LVNsZWVwIC1NaWxsaXNlY29uZHMgMzAwDQogICAgICAgICAgICAgICAgJExpc3RlbmVyLlN0 +b3AoKQ0KICAgICAgICAgICAgICAgIFtFbnZpcm9ubWVudF06OkV4aXQoMCkNCiAgICAgICAgICAg +IH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW5mbycgLWFuZCAkTWV0aG9kIC1l +cSAnR0VUJykgew0KICAgICAgICAgICAgICAgIFJlZnJlc2gtVXBkYXRlQ2hlY2sNCiAgICAgICAg +ICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICAkaW5mb09iaiA9IEB7DQog +ICAgICAgICAgICAgICAgICAgIGJlbnV0emVyICAgICAgICAgICAgICAgID0gIiREb21haW5cJFVz +ZXJuYW1lIg0KICAgICAgICAgICAgICAgICAgICByb2xsZSAgICAgICAgICAgICAgICAgICA9ICRy +LnJvbGxlDQogICAgICAgICAgICAgICAgICAgIGlzdFN1cGVyVXNlciAgICAgICAgICAgID0gJHIu +aXN0U3VwZXJVc2VyDQogICAgICAgICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCAgICAgICAg +ID0gJHIuaXN0RmFjaGF1ZnNpY2h0DQogICAgICAgICAgICAgICAgICAgIGlzdEdlc2FtdHZlcmFu +dHdvcnRsaWNoID0gJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gNCiAgICAgICAgICAgICAgICAg +ICAgc2VoZW4gICAgICAgICAgICAgICAgICAgPSAkci5zZWhlbg0KICAgICAgICAgICAgICAgICAg +ICBhZG1pblN1YnRhYnMgICAgICAgICAgICA9ICRyLmFkbWluU3VidGFicw0KICAgICAgICAgICAg +ICAgICAgICBzdGF0aXN0aWtCZXJlaWNoZSAgICAgICA9ICRyLnN0YXRpc3Rpa0JlcmVpY2hlDQog +ICAgICAgICAgICAgICAgICAgIGVkaXRpZXJlbiAgICAgICAgICAgICAgID0gJHIuZWRpdGllcmVu +ICAgIyBudWxsIGJlaSBTdXBlclVzZXIgPSAiYWxsZXMgZXJsYXVidCINCiAgICAgICAgICAgICAg +ICAgICAgbWVpbmVQZXJzb25JZCAgICAgICAgICAgPSAkci5tZWluZVBlcnNvbklkDQogICAgICAg +ICAgICAgICAgICAgIHNlcnZlciAgICAgICAgICAgICAgICAgID0gJHNjcmlwdDpDb3JzT3JpZ2lu +DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF2YWlsYWJsZSAgICAgICAgID0gJHNjcmlwdDpV +cGRhdGVBdmFpbGFibGUNCiAgICAgICAgICAgICAgICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICAg +ICAgPSAkc2NyaXB0OlJlbW90ZVZlcnNpb24NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkaW5mb09iag0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09 +PT09PSBVUERBVEU6IFNUQVRVUyAobnVyIFN1cGVyVXNlcikgPT09PT09PT09PT09PT09PT09PT09 +DQogICAgICAgICAgICAjIEJlaGVidCBkZW4gNDA0IGF1ZiAvYXBpL3VwZGF0ZS9zdGF0dXMuIExp +ZXN0IFZlcnNpb24gKyBDaGFuZ2Vsb2cNCiAgICAgICAgICAgICMgdWViZXIgZGVuIChqZXR6dCBw +cm94eS1hdXRoZW50aWZpemllcnRlbikgRGlzdC1SZXBvLVp1Z2FuZy4NCiAgICAgICAgICAgIGlm +ICgkUGF0aCAtZXEgJy9hcGkvdXBkYXRlL3N0YXR1cycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykg +ew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAkc2NyaXB0OlVwZGF0ZUxhc3RDaGVja1V0YyA9IFtkYXRldGltZV06Ok1pblZhbHVl +ICAjIEZvcmNlLVJlZnJlc2gNCiAgICAgICAgICAgICAgICBSZWZyZXNoLVVwZGF0ZUNoZWNrDQog +ICAgICAgICAgICAgICAgJGx2ID0gR2V0LUxva2FsZVZlcnNpb24NCiAgICAgICAgICAgICAgICBT +ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF2 +YWlsYWJsZSA9ICRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgIGxv +Y2FsVmVyc2lvbiAgICA9ICRsdg0KICAgICAgICAgICAgICAgICAgICByZW1vdGVWZXJzaW9uICAg +PSAkc2NyaXB0OlJlbW90ZVZlcnNpb24NCiAgICAgICAgICAgICAgICAgICAgY2hhbmdlbG9nICAg +ICAgID0gKEdldC1VcGRhdGVDaGFuZ2Vsb2cgJGx2ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbikNCiAg +ICAgICAgICAgICAgICAgICAgbWFpbnRlbmFuY2UgICAgID0gQHsgbG9ja2VkID0gJGZhbHNlOyBy +ZWFzb24gPSAnJyB9DQogICAgICAgICAgICAgICAgICAgIGpvYiAgICAgICAgICAgICA9IEB7DQog +ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICRzY3JpcHQ6VXBkYXRlSm9iLnN0YXRlOyBw +ZXJjZW50ID0gJHNjcmlwdDpVcGRhdGVKb2IucGVyY2VudA0KICAgICAgICAgICAgICAgICAgICAg +ICAgc3RlcCA9ICRzY3JpcHQ6VXBkYXRlSm9iLnN0ZXA7IG1lc3NhZ2UgPSAkc2NyaXB0OlVwZGF0 +ZUpvYi5tZXNzYWdlDQogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBk +YXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9u +DQogICAgICAgICAgICAgICAgICAgICAgICB0b1ZlcnNpb24gPSAkc2NyaXB0OlVwZGF0ZUpvYi50 +b1ZlcnNpb24NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyA9PT09PT09 +PT09PT09PT09PT09PT0gVVBEQVRFOiBQUk9HUkVTUyAobnVyIFN1cGVyVXNlcikgPT09PT09PT09 +PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3VwZGF0ZS9wcm9n +cmVzcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVz -ZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUxhc3RD -aGVja1V0YyA9IFtkYXRldGltZV06Ok1pblZhbHVlICAjIEZvcmNlLVJlZnJlc2gNCiAgICAgICAg -ICAgICAgICBSZWZyZXNoLVVwZGF0ZUNoZWNrDQogICAgICAgICAgICAgICAgJGx2ID0gR2V0LUxv -a2FsZVZlcnNpb24NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 -DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF2YWlsYWJsZSA9ICRzY3JpcHQ6VXBkYXRlQXZh -aWxhYmxlDQogICAgICAgICAgICAgICAgICAgIGxvY2FsVmVyc2lvbiAgICA9ICRsdg0KICAgICAg -ICAgICAgICAgICAgICByZW1vdGVWZXJzaW9uICAgPSAkc2NyaXB0OlJlbW90ZVZlcnNpb24NCiAg -ICAgICAgICAgICAgICAgICAgY2hhbmdlbG9nICAgICAgID0gKEdldC1VcGRhdGVDaGFuZ2Vsb2cg -JGx2ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbikNCiAgICAgICAgICAgICAgICAgICAgbWFpbnRlbmFu -Y2UgICAgID0gQHsgbG9ja2VkID0gJGZhbHNlOyByZWFzb24gPSAnJyB9DQogICAgICAgICAgICAg -ICAgICAgIGpvYiAgICAgICAgICAgICA9IEB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0 -ZSA9ICRzY3JpcHQ6VXBkYXRlSm9iLnN0YXRlOyBwZXJjZW50ID0gJHNjcmlwdDpVcGRhdGVKb2Iu -cGVyY2VudA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCA9ICRzY3JpcHQ6VXBkYXRlSm9i -LnN0ZXA7IG1lc3NhZ2UgPSAkc2NyaXB0OlVwZGF0ZUpvYi5tZXNzYWdlDQogICAgICAgICAgICAg -ICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBkYXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9 -ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9uDQogICAgICAgICAgICAgICAgICAgICAgICB0 -b1ZlcnNpb24gPSAkc2NyaXB0OlVwZGF0ZUpvYi50b1ZlcnNpb24NCiAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gVVBEQVRFOiBQUk9H -UkVTUyAobnVyIFN1cGVyVXNlcikgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBp -ZiAoJFBhdGggLWVxICcvYXBpL3VwZGF0ZS9wcm9ncmVzcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VU -Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAg -ICAgIHN0YXRlID0gJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGU7IHBlcmNlbnQgPSAkc2NyaXB0OlVw -ZGF0ZUpvYi5wZXJjZW50DQogICAgICAgICAgICAgICAgICAgIHN0ZXAgPSAkc2NyaXB0OlVwZGF0 -ZUpvYi5zdGVwOyBtZXNzYWdlID0gJHNjcmlwdDpVcGRhdGVKb2IubWVzc2FnZQ0KICAgICAgICAg -ICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBkYXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9 -ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9uDQogICAgICAgICAgICAgICAgICAgIHRvVmVy -c2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVyc2lvbjsgc2VsZnRlc3QgPSBAKCRzY3JpcHQ6 -VXBkYXRlSm9iLnNlbGZ0ZXN0KQ0KICAgICAgICAgICAgICAgICAgICBsb2cgPSBAKCRzY3JpcHQ6 -VXBkYXRlSm9iLmxvZyB8IFNlbGVjdC1PYmplY3QgLUxhc3QgNjApDQogICAgICAgICAgICAgICAg -ICAgIG1haW50ZW5hbmNlID0gQHsgbG9ja2VkID0gJGZhbHNlOyByZWFzb24gPSAnJyB9DQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBVUERBVEU6IFNUQVJUIChudXIgU3Vw -ZXJVc2VyKSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICMgSHlicmlkOiBzdGFy -dGV0IGRpZSBnZXRlc3RldGUsIHNoYXJlLXppZWxlbmRlIHVwZGF0ZS5iYXQgYWxzIGVpZ2VuZW4N -CiAgICAgICAgICAgICMgUHJvemVzcyBhdXMgZGVyIEtBTk9OSVNDSEVOIFF1ZWxsZS4gdXBkYXRl -LmJhdCBzdG9wcHQrc3RhcnRldCBkZW4NCiAgICAgICAgICAgICMgU2VydmVyIHNlbGJzdCAoc3Rv -cC5iYXQvZGdsLmJhdCkuIFdpciBrb2VubmVuIGRlbiBleHRlcm5lbiBMYXVmIG5pY2h0DQogICAg -ICAgICAgICAjIGluIEVjaHR6ZWl0IHZlcmZvbGdlbiAtPiBKb2IgbWVsZGV0ICdleHRlcm4gZ2Vz -dGFydGV0JywgZGVyIENsaWVudA0KICAgICAgICAgICAgIyB6ZWlndCBkZW4gSGlud2VpcyB1bmQg -bGFlZHQgbmFjaCBkZW0gTmV1c3RhcnQgbmV1Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn -L2FwaS91cGRhdGUvc3RhcnQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnTnVyIFN1cGVyVXNlciBkYXJmIFVwZGF0ZXMgc3RhcnRlbi4nIDQwMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICRxdWVsbGUgPSBHZXQtVXBkYXRlUXVlbGxlDQogICAgICAgICAgICAg -ICAgJGJhdCA9IEpvaW4tUGF0aCAkcXVlbGxlICd1cGRhdGUuYmF0Jw0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRiYXQpKSB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgndXBkYXRlLmJhdCBuaWNodCBnZWZ1bmRlbiBp -biBkZXIgUXVlbGxlOiAnICsgJHF1ZWxsZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIGNvbnRp -bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg -ICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkVEhIOm1tOnNzJykN -CiAgICAgICAgICAgICAgICAgICAgIyBzdGRpbiBhdXMgbnVsIChlaW4gQXJndW1lbnRMaXN0LVN0 -cmluZywgdm9uIFN0YXJ0LVByb2Nlc3MNCiAgICAgICAgICAgICAgICAgICAgIyB2ZXJiYXRpbSBh -biBjbWQpIC0+IGRhcyBhYnNjaGxpZXNzZW5kZSAncGF1c2UnIGluIHVwZGF0ZS5iYXQNCiAgICAg -ICAgICAgICAgICAgICAgIyBsaWVzdCBFT0YgdW5kIGtlaHJ0IHNvZm9ydCB6dXJ1ZWNrLCBrZWlu -IGhhZW5nZW5kZXIgUHJvemVzcy4NCiAgICAgICAgICAgICAgICAgICAgU3RhcnQtUHJvY2VzcyAt -RmlsZVBhdGggJ2NtZC5leGUnIC1Bcmd1bWVudExpc3QgKCcvYyAiJyArICRiYXQgKyAnIiA8bnVs -JykgYA0KICAgICAgICAgICAgICAgICAgICAgICAgLVdvcmtpbmdEaXJlY3RvcnkgJHF1ZWxsZSAt -V2luZG93U3R5bGUgSGlkZGVuDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9i -LnN0YXRlICAgICAgID0gJ3J1bm5pbmcnDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBk -YXRlSm9iLnN0ZXAgICAgICAgID0gJ2V4dGVybicNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlw -dDpVcGRhdGVKb2IucGVyY2VudCAgICAgPSA1DQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6 -VXBkYXRlSm9iLmVycm9yICAgICAgID0gJycNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpV -cGRhdGVKb2IuZnJvbVZlcnNpb24gPSAoR2V0LUxva2FsZVZlcnNpb24pDQogICAgICAgICAgICAg -ICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVyc2lvbiAgID0gJHNjcmlwdDpSZW1vdGVWZXJz -aW9uDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnNlbGZ0ZXN0ICAgID0g -QCgpDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLm1lc3NhZ2UgICAgID0g -J0V4dGVybmVyIFVwZGF0ZXIgKHVwZGF0ZS5iYXQpIGdlc3RhcnRldC4gRGVyIFNlcnZlciB3aXJk -IGdsZWljaCBnZXN0b3BwdCB1bmQgbmV1IGdlc3RhcnRldCAtIGJpdHRlIGRhbmFjaCBkaWUgU2Vp -dGUgbmV1IGxhZGVuLicNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2IubG9n -ICAgICAgICAgPSBAKEB7IHQgPSAkdHM7IG1zZyA9ICd1cGRhdGUuYmF0IGF1cyAnICsgJHF1ZWxs -ZSArICcgZ2VzdGFydGV0LicgfSkNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ1VQREFU -RS1TVEFSVDogdXBkYXRlLmJhdCBhdXMgezB9IGdlc3RhcnRldCAoU3VwZXJVc2VyKS4nIC1mICRx -dWVsbGUpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg -c3RhcnRlZCA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAg -ICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGUgPSAnZmFpbGVkJw0KICAgICAgICAgICAg -ICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlDQog -ICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdVUERBVEUtU1RBUlQgRkVITEVSOiB7MH0nIC1m -ICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAoJ1VwZGF0ZS1TdGFydCBmZWhsZ2VzY2hsYWdlbjogJyArICRfLkV4Y2VwdGlvbi5N -ZXNzYWdlKSA1MDANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvZGVidWcnIC1h -bmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkZGF0ID0gQHsgUm9vdCA9 -ICRSb290OyBEYXRhRGlyID0gJERhdGFEaXI7IEZpbGVzID0gQHt9IH0NCiAgICAgICAgICAgICAg -ICBmb3JlYWNoICgkZiBpbiAnYWRtaW4uanNvbicsJ3BsYW51bmcuanNvbicsJ2xvZ2J1Y2guanNv -bicpIHsNCiAgICAgICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICRmDQog -ICAgICAgICAgICAgICAgICAgICRpbmZvID0gQHsgZXhpc3RzID0gKFRlc3QtUGF0aCAtTGl0ZXJh -bFBhdGggJGZwKSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkaW5mby5leGlzdHMpIHsgJGlu -Zm8uc2l6ZSA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZwKS5MZW5ndGggfQ0KICAgICAgICAg -ICAgICAgICAgICAkZGF0LkZpbGVzWyRmXSA9ICRpbmZvDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICMgUmVjaHRlLUluZm8gKHdpY2h0aWcgZnVlciBBZG1pbi1UYWItU2ljaHRi -YXJrZWl0KQ0KICAgICAgICAgICAgICAgICRkYXQuQmVudXR6ZXIgPSAiJERvbWFpblwkVXNlcm5h -bWUiDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJHIgPSBHZXQt -UmVjaHRlDQogICAgICAgICAgICAgICAgICAgICRkYXQuUmVjaHRlID0gQHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgIHJvbGxlICAgICAgICAgICA9ICRyLnJvbGxlDQogICAgICAgICAgICAgICAg -ICAgICAgICBpc3RTdXBlclVzZXIgICAgPSAkci5pc3RTdXBlclVzZXINCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCA9ICRyLmlzdEZhY2hhdWZzaWNodA0KICAgICAgICAg -ICAgICAgICAgICAgICAgc2VoZW4gICAgICAgICAgID0gJHIuc2VoZW4NCiAgICAgICAgICAgICAg -ICAgICAgICAgIG1laW5lUGVyc29uSWQgICA9ICRyLm1laW5lUGVyc29uSWQNCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAg -ICAkZGF0LlJlY2h0ZSA9IEB7IGZlaGxlciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdlIH0NCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBBZG1pbi5qc29uIEt1cnpjaGVjaw0KICAg -ICAgICAgICAgICAgICRhZG1pbk9iaiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAg -ICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbk9iaikgew0KICAgICAgICAgICAgICAg -ICAgICAkZGF0LkFkbWluSnNvbkxlc2JhciA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgIH0gZWxz -ZSB7DQogICAgICAgICAgICAgICAgICAgICRhbnpTVSA9IDANCiAgICAgICAgICAgICAgICAgICAg -aWYgKCRhZG1pbk9iai5zdXBlclVzZXIpIHsgJGFuelNVID0gQCgkYWRtaW5PYmouc3VwZXJVc2Vy -KS5Db3VudCB9DQogICAgICAgICAgICAgICAgICAgICRzdUtlbm51bmdlbiA9IEAoKQ0KICAgICAg -ICAgICAgICAgICAgICBpZiAoJGFkbWluT2JqLnN1cGVyVXNlcikgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgZm9yZWFjaCAoJHMgaW4gQCgkYWRtaW5PYmouc3VwZXJVc2VyKSkgeyAkc3VLZW5u -dW5nZW4gKz0gW3N0cmluZ10kcy5ud0tlbm51bmcgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICRkYXQuQWRtaW5Kc29uTGVzYmFyID0gJHRydWUNCiAgICAgICAg -ICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJBbnphaGwgPSAkYW56U1UNCiAgICAgICAgICAgICAg -ICAgICAgJGRhdC5TdXBlclVzZXJLZW5udW5nZW4gPSAkc3VLZW5udW5nZW4NCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkZGF0DQog -ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9 -PT09PSBTWU5DLUNIRUNLID09PT09DQogICAgICAgICAgICAjIFZlcmdsZWljaHQgcHJvIFdlYi1B -c3NldCBkaWUgRGF0ZWktR3JvZXNzZSBpbiBkZXIgU291cmNlIChnZXB1bGx0ZXMNCiAgICAgICAg -ICAgICMgUmVwbywgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSBnZWdlbiBkaWUgRGF0ZWktR3JvZXNz -ZSBpbSBBc3NldC1DYWNoZQ0KICAgICAgICAgICAgIyAoJFJvb3QsIFJvYm9jb3B5LVppZWwpLiBF -cmtlbm50IHVudm9sbHN0YWVuZGlnZSBSb2JvY29weS1VZWJlci0NCiAgICAgICAgICAgICMgdHJh -Z3VuZ2VuLCB2ZXJhbHRldGUgQXNzZXQtQ2FjaGVzIHVuZCBmZWhsZW5kZSBEYXRlaWVuLg0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zeW5jLWNoZWNrL2RhdGVpZW4nIC1hbmQgJE1l -dGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1p -bikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7 -DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgIG9rID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICBm -ZWhsZXIgPSAnQXNzZXRGYWxsYmFjayBuaWNodCBrb25maWd1cmllcnQg4oCUIFNvdXJjZS1QZmFk -IHVuYmVrYW5udCwgVmVyZ2xlaWNoIG5pY2h0IG1vZWdsaWNoLiAoU2VydmVyIHd1cmRlIG9obmUg -LUFzc2V0RmFsbGJhY2sgZ2VzdGFydGV0LiknDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgJHdlYkV4dCA9ICcuanMnLCcuY3NzJywnLmh0bWwnLCcuaWNvJywnLnBuZycsJy5qcGcnLCcu -anBlZycsJy5zdmcnDQogICAgICAgICAgICAgICAgJGlnbm9yaWVyZVRvcCA9IEAoJy5naXQnLCdk -b2NzJywnZGV2JywndGVzdHMnLCdkYXRhJywnY2FjaGUnKQ0KICAgICAgICAgICAgICAgICRkYXRl -aWVuID0gQCgpDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGFs -bGUgPSBHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFzc2V0RmFsbGJhY2sgLVJl -Y3Vyc2UgLUZpbGUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCiAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJGYgaW4gJGFsbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRy -ZWwgPSAkZi5GdWxsTmFtZS5TdWJzdHJpbmcoJHNjcmlwdDpBc3NldEZhbGxiYWNrLkxlbmd0aCAr -IDEpIC1yZXBsYWNlICdcXCcsICcvJw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRvcCA9ICgk -cmVsIC1zcGxpdCAnLycpWzBdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlnbm9yaWVy -ZVRvcCAtY29udGFpbnMgJHRvcCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAkZXh0ID0gJGYuRXh0ZW5zaW9uLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCR3ZWJFeHQgLW5vdGNvbnRhaW5zICRleHQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgJGRhdGVpZW4gKz0gJHJlbA0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICMgZGF0YS8tU29uZGVyZmFlbGxlOiBudXIgZGllIHp3ZWkgVGFybi1N -YXJrdXBzLCBhbGxlcyBhbmRlcmUNCiAgICAgICAgICAgICAgICAgICAgIyBsaWVndCBpbSBEYXRh -RGlyIChhZG1pbi5qc29uL3BsYW51bmcuanNvbi8uLi4pIHVuZCB3aXJkIG5pY2h0DQogICAgICAg -ICAgICAgICAgICAgICMgaW4gZGVuIEFzc2V0LUNhY2hlIGtvcGllcnQuDQogICAgICAgICAgICAg -ICAgICAgIGZvcmVhY2ggKCRleHRyYSBpbiAnZGF0YS9tYWluZnJhbWUuaHRtbCcsJ2RhdGEvc2Fu -aXRpemVyLmh0bWwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3JjRXh0cmEgPSBKb2lu -LVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRleHRyYQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyY0V4dHJhKSB7ICRkYXRlaWVuICs9ICRl -eHRyYSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBvayA9ICRm -YWxzZTsgZmVobGVyID0gKCdTb3VyY2UtVmVyemVpY2huaXMgbmljaHQgbGVzYmFyOiAnICsgJF8u -RXhjZXB0aW9uLk1lc3NhZ2UpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRhdGVpZW4gPSAkZGF0ZWllbiB8IFNvcnQt -T2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgpDQogICAgICAg -ICAgICAgICAgJGFuek9rID0gMDsgJGFuekRpZmYgPSAwOyAkYW56RmVobHRBc3NldCA9IDA7ICRh -bnpGZWhsdFNvdXJjZSA9IDANCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmVsIGluICRkYXRl -aWVuKSB7DQogICAgICAgICAgICAgICAgICAgICRhc3NldFBmYWQgID0gSm9pbi1QYXRoICRSb290 -ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZVBmYWQgPSBKb2luLVBhdGggJHNjcmlw -dDpBc3NldEZhbGxiYWNrICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJGFzc2V0Qnl0ZXMgID0g -JG51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZUJ5dGVzID0gJG51bGwNCiAgICAgICAg -ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFzc2V0UGZhZCkgIHsgJGFz -c2V0Qnl0ZXMgID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkYXNzZXRQZmFkKS5MZW5ndGggfQ0K -ICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc291cmNlUGZh -ZCkgeyAkc291cmNlQnl0ZXMgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzb3VyY2VQZmFkKS5M -ZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICAkc3RhdHVzID0gJ3VuYmVrYW5udCcNCiAgICAg -ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkc291cmNlQnl0ZXMgLWFuZCAkbnVsbCAtZXEg -JGFzc2V0Qnl0ZXMpIHsgJHN0YXR1cyA9ICdiZWlkZV9mZWhsZW4nIH0NCiAgICAgICAgICAgICAg -ICAgICAgZWxzZWlmICgkbnVsbCAtZXEgJGFzc2V0Qnl0ZXMpICB7ICRzdGF0dXMgPSAnYXNzZXRf -ZmVobHQnOyAgJGFuekZlaGx0QXNzZXQrKyB9DQogICAgICAgICAgICAgICAgICAgIGVsc2VpZiAo -JG51bGwgLWVxICRzb3VyY2VCeXRlcykgeyAkc3RhdHVzID0gJ3NvdXJjZV9mZWhsdCc7ICRhbnpG -ZWhsdFNvdXJjZSsrIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkYXNzZXRCeXRlcyAt -ZXEgJHNvdXJjZUJ5dGVzKSB7ICRzdGF0dXMgPSAnb2snOyAkYW56T2srKyB9DQogICAgICAgICAg -ICAgICAgICAgIGVsc2UgeyAkc3RhdHVzID0gJ2dyb2Vzc2VfZGlmZic7ICRhbnpEaWZmKysgfQ0K -ICAgICAgICAgICAgICAgICAgICAkZWludHJhZWdlICs9IFtvcmRlcmVkXUB7DQogICAgICAgICAg -ICAgICAgICAgICAgICBwZmFkICAgICAgICA9ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgICAg -IHNvdXJjZUJ5dGVzID0gJHNvdXJjZUJ5dGVzDQogICAgICAgICAgICAgICAgICAgICAgICBhc3Nl -dEJ5dGVzICA9ICRhc3NldEJ5dGVzDQogICAgICAgICAgICAgICAgICAgICAgICBkaWZmQnl0ZXMg -ICA9IGlmICgkbnVsbCAtbmUgJHNvdXJjZUJ5dGVzIC1hbmQgJG51bGwgLW5lICRhc3NldEJ5dGVz -KSB7ICRhc3NldEJ5dGVzIC0gJHNvdXJjZUJ5dGVzIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgID0gJHN0YXR1cw0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk -UmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgb2sgICAgICAgICAgPSAkdHJ1ZQ0KICAg -ICAgICAgICAgICAgICAgICBzb3VyY2VSb290ICA9ICRzY3JpcHQ6QXNzZXRGYWxsYmFjaw0KICAg -ICAgICAgICAgICAgICAgICBhc3NldFJvb3QgICA9ICRSb290DQogICAgICAgICAgICAgICAgICAg -IGFuemFobCAgICAgID0gJGVpbnRyYWVnZS5Db3VudA0KICAgICAgICAgICAgICAgICAgICBhbnpP -ayAgICAgICA9ICRhbnpPaw0KICAgICAgICAgICAgICAgICAgICBhbnpEaWZmICAgICA9ICRhbnpE -aWZmDQogICAgICAgICAgICAgICAgICAgIGFuekZlaGx0QXNzZXQgID0gJGFuekZlaGx0QXNzZXQN -CiAgICAgICAgICAgICAgICAgICAgYW56RmVobHRTb3VyY2UgPSAkYW56RmVobHRTb3VyY2UNCiAg -ICAgICAgICAgICAgICAgICAgZGF0ZWllbiAgICAgPSAkZWludHJhZWdlDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg -ICAgICMgPT09PT0gQURNSU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -YWRtaW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkdHh0ID0g -UmVhZC1UZXh0RmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICR0eHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ2FkbWluLmpzb24gbmljaHQgZ2VmdW5kZW4n -IDQwNCB9DQogICAgICAgICAgICAgICAgZWxzZSB7IFNlbmQtSnNvblRleHQgJFJlc3BvbnNlICR0 -eHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAg -ICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2FkbWluaXN0cmF0aW9u -JykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn -ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJv -ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVj -dC5Qcm9wZXJ0aWVzWydhZG1pbktlbm51bmdlbiddKSB7ICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzLlJlbW92ZSgnYWRtaW5LZW5udW5nZW4nKSB9DQogICAgICAgICAgICAgICAgIyBQUy01LjEt -VW53cmFwLVNjaHV0ejogYWxsZSBMaXN0ZW4tRmVsZGVyLCBkaWUgZGVyIENsaWVudCB1bnRlcg0K -ICAgICAgICAgICAgICAgICMgQURNSU5fTElTVF9GRUxERVIgZnVlaHJ0LCBzZXJ2ZXItc2VpdGln -IGFscyBBcnJheXMgZXJ6d2luZ2VuLg0KICAgICAgICAgICAgICAgICMgU29uc3Qgd2VyZGVuIExp -c3RlbiBtaXQgbnVyIGVpbmVtIEVsZW1lbnQgdm9tIFBvd2VyU2hlbGwtSlNPTi0NCiAgICAgICAg -ICAgICAgICAjIFJvdW5kdHJpcCB6dW0gRWluemVsLU9iamVrdCBlbnRwYWNrdCB1bmQgY2xpZW50 -LXNlaXRpZyBrb21tdA0KICAgICAgICAgICAgICAgICMgYWRtaW5MaXN0ZW5Ob3JtYWxpc2llcmVu -IGdnZi4genUgc3BhZXQgKHouQi4gbmFjaCBIb3QtUmVsb2FkKS4NCiAgICAgICAgICAgICAgICBO -b3JtYWxpc2llcmUtQWRtaW5MaXN0ZW4gJGRhdGVuDQogICAgICAgICAgICAgICAgIyBTZXJ2ZXIt -c2VpdGlnZSBSaWNoLVRleHQtU2FuaXRpc2llcnVuZyAoU3RvcmVkLVhTUy1TY2h1dHopLg0KICAg -ICAgICAgICAgICAgIEludm9rZS1BZG1pblJpY2h0ZXh0U2FuaXRpemUgJGRhdGVuDQogICAgICAg -ICAgICAgICAgJGlzdFNVID0gVGVzdC1Jc3RTdXBlclVzZXINCiAgICAgICAgICAgICAgICAkbG9j -a0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg -ICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgIyBOdXIgU3VwZXJVc2VyIGRhcmYgZGllIFJvbGxlbi1M -aXN0ZW4gc3VwZXJVc2VyL2ZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgIyB1 -ZWJlciAvYXBpL2FkbWluIGFlbmRlcm4g4oCUIHNvbnN0IGtvZW5udGUgamVtYW5kIHNpY2ggc2Vs -YnN0DQogICAgICAgICAgICAgICAgICAgICAgICAjIHp1bSBTdXBlclVzZXIgYmVmb2VyZGVybiB1 -bmQgZGFtaXQgZGllIHNlcGFyYXRlbiBHdWFyZHMgYXVmDQogICAgICAgICAgICAgICAgICAgICAg -ICAjIC9hcGkvYWRtaW4vc3VwZXJ1c2VyIGJ6dy4gL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQgdW1n -ZWhlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWRtaW5LZW5udW5nZW4gaXN0IGdlbmVy -ZWxsIGFiZ2VzY2hhZmZ0IHVuZCB3aXJkIGVudGZlcm50Lg0KICAgICAgICAgICAgICAgICAgICAg -ICAgIyBSZWFkIGRlciBhbHRlbiBXZXJ0ZSBtdXNzIElOTkVSSEFMQiBkZXMgTG9ja3MgcGFzc2ll -cmVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBkYW1pdCBkaWUgU1UvRmFjaGF1ZnNpY2h0 -LUxpc3RlbiBhdG9tYXIgZXJoYWx0ZW4gYmxlaWJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAg -ICRhbHQgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkaXN0U1UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jl -YWNoICgkZmVsZCBpbiAnc3VwZXJVc2VyJywnZmFjaGF1ZnNpY2h0JywnZGlyZWt0aW9uc2xlaXR1 -bmcnLCdmdWVocnVuZ3NzdGVsbGUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgkYWx0IC1hbmQgJGFsdC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyRmZWxkXSkgeyAkZGF0ZW4uJGZlbGQgPSAkYWx0LiRmZWxkIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkZGF0ZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv -cGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkYWx0LiRmZWxkIC1Gb3JjZSB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkZGF0ZW4uUFNPYmplY3Qu -UHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZmVsZCkNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgS2V5LVVuaW9u -OiBuaWNodCBtaXRnZXNlbmRldGUgVG9wLUxldmVsLUtleXMgZXJoYWx0ZW4uDQogICAgICAgICAg -ICAgICAgICAgICAgICBbdm9pZF0oTWVyZ2UtQWRtaW5LZXlzICRhbHQgJGRhdGVuKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicgJGRhdGVuIHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlIH0N -CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAg -ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUw -MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg -JGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1z -ZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRl -LUxvZ0VpbnRyYWcgJ2FkbWluLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFN1cGVyLVVz -ZXItTGlzdGU6IG51ciBTdXBlclVzZXIgZGFyZiBTdXBlclVzZXIgdmVyd2FsdGVuDQogICAgICAg -ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N1cGVydXNlcicgLWFuZCAkTWV0aG9kIC1l -cSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikp -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBTdXBlclVzZXIg -dmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQt -Qm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAjIEAoLi4uKSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQgKFBTIDUu -MSBlbnRwYWNrdCBzb25zdCB6dSBFaW56ZWwtT2JqZWt0LA0KICAgICAgICAgICAgICAgICMgZGFu -biB3aXJkIGRpZSBMaXN0ZSBpbiBhZG1pbi5qc29uIHp1bSBPYmpla3QgZGVnZW5lcmllcnQgLT4g -Q2xpZW50LUZlaGxlcikuDQogICAgICAgICAgICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZl -cnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9i -aikNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAg -ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhG -aWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0g -UmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7 -IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAnc3VwZXJVc2VyJyAkZGF0ZW4gJGFkbWlu -ICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cp -IHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0g -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlIExpc3RlIHZvciBkZW0gT3ZlcndyaXRl -IHNuYXBzaG90dGVuIOKAlCB3aXIgYnJhdWNoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICMg -c2llIG5hY2ggZGVtIExvY2sgZnVlciBkaWUgRGlmZi1CZXJlY2hudW5nIChtYWlsdG8gYmVpDQog -ICAgICAgICAgICAgICAgICAgICAgICAjIFNVIHJlaW4vcmF1cykuDQogICAgICAgICAgICAgICAg -ICAgICAgICAkYWx0U1UgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4u -UFNPYmplY3QuUHJvcGVydGllc1snc3VwZXJVc2VyJ10pIHsgJGFsdFNVID0gW29iamVjdFtdXUAo -JGFkbWluLnN1cGVyVXNlcikgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJhY2t1 -cC1BZG1pbkpzb24gJ3N1cGVyVXNlcicpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFk -bWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7ICRhZG1pbi5zdXBlclVzZXIg -PSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1N -ZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N1cGVyVXNlcicgLU5vdGVQcm9wZXJ0eVZhbHVlICRk -YXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn -YWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJl -dHVybiBAeyBvayA9ICR0cnVlOyBhbHQgPSAkYWx0U1UgfQ0KICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNl -bmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVz -OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBEaWZmIGFsdC9uZXUgbmFjaCBud0tlbm51 -bmcuIFNVLVJlaW4vUmF1cyBsb2VzdCBtYWlsdG8gdmlhIENsaWVudCBhdXMNCiAgICAgICAgICAg -ICAgICAjIChWZXJhbnR3b3J0dW5ncy1VZWJlcmdhbmcgVm9ybGFnZSAncm9sbGVfdmVyYW50d29y -dHVuZycpLg0KICAgICAgICAgICAgICAgICRtYWlsdG9EaWZmcyA9IEdldC1Sb2xsZURpZmZzICRs -b2NrRXJnZWJuaXMuYWx0ICRkYXRlbiAnU3VwZXJVc2VyJyAkZmFsc2UNCiAgICAgICAgICAgICAg -ICAjIGFuemFobCBtaXRnZWJlbiDigJQgZGVyIExvZ2J1Y2gtQ2xpZW50IGxpZXN0IGUuYW56YWhs -OyBvaG5lIGRhcw0KICAgICAgICAgICAgICAgICMgRmVsZCBibGllYiBkaWUgRGV0YWlsLVNwYWx0 -ZSBiZWkgU1UtTGlzdGVuYWVuZGVydW5nZW4gbGVlcg0KICAgICAgICAgICAgICAgICMgKGZhY2hh -dWZzaWNodC5nZWFlbmRlcnQgdW50ZW4gbWFjaHQgZXMgZ2VuYXVzbykuDQogICAgICAgICAgICAg -ICAgV3JpdGUtTG9nRWludHJhZyAnc3VwZXJVc2VyLmdlYWVuZGVydCcgQHsgYW56YWhsID0gJGRh -dGVuLkNvdW50OyBkaWZmcyA9ICRtYWlsdG9EaWZmcy5Db3VudCB9DQogICAgICAgICAgICAgICAg -JHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBpZiAo -JG1haWx0b0RpZmZzLkNvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICMgUFMtNS4x -LVVud3JhcC1TY2h1dHo6IEAoJHgpIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEgRWxlbWVudC4N -CiAgICAgICAgICAgICAgICAgICAgJHJlc3BbJ19icmF1Y2h0X21haWx0byddID0gW29yZGVyZWRd -QHsgdHJpZ2dlciA9ICdyb2xsZV92ZXJhbnR3b3J0dW5nJzsgZGlmZnMgPSBbb2JqZWN0W11dQCgk -bWFpbHRvRGlmZnMpIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K -c29uT2JqZWN0ICRSZXNwb25zZSAkcmVzcA0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LUxpc3RlOiBudXIgU3VwZXJV -c2VyIGRhcmYgRmFjaGF1ZnNpY2h0IHZlcndhbHRlbg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l -cSAnL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRmFjaGF1ZnNpY2h0IHZlcndhbHRlbicg +ZXIuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl +c3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJHNjcmlwdDpVcGRhdGVKb2Iu +c3RhdGU7IHBlcmNlbnQgPSAkc2NyaXB0OlVwZGF0ZUpvYi5wZXJjZW50DQogICAgICAgICAgICAg +ICAgICAgIHN0ZXAgPSAkc2NyaXB0OlVwZGF0ZUpvYi5zdGVwOyBtZXNzYWdlID0gJHNjcmlwdDpV +cGRhdGVKb2IubWVzc2FnZQ0KICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICRzY3JpcHQ6VXBk +YXRlSm9iLmVycm9yOyBmcm9tVmVyc2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLmZyb21WZXJzaW9u +DQogICAgICAgICAgICAgICAgICAgIHRvVmVyc2lvbiA9ICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVy +c2lvbjsgc2VsZnRlc3QgPSBAKCRzY3JpcHQ6VXBkYXRlSm9iLnNlbGZ0ZXN0KQ0KICAgICAgICAg +ICAgICAgICAgICBsb2cgPSBAKCRzY3JpcHQ6VXBkYXRlSm9iLmxvZyB8IFNlbGVjdC1PYmplY3Qg +LUxhc3QgNjApDQogICAgICAgICAgICAgICAgICAgIG1haW50ZW5hbmNlID0gQHsgbG9ja2VkID0g +JGZhbHNlOyByZWFzb24gPSAnJyB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09 +PT09PSBVUERBVEU6IFNUQVJUIChudXIgU3VwZXJVc2VyKSA9PT09PT09PT09PT09PT09PT09PT0N +CiAgICAgICAgICAgICMgSHlicmlkOiBzdGFydGV0IGRpZSBnZXRlc3RldGUsIHNoYXJlLXppZWxl +bmRlIHVwZGF0ZS5iYXQgYWxzIGVpZ2VuZW4NCiAgICAgICAgICAgICMgUHJvemVzcyBhdXMgZGVy +IEtBTk9OSVNDSEVOIFF1ZWxsZS4gdXBkYXRlLmJhdCBzdG9wcHQrc3RhcnRldCBkZW4NCiAgICAg +ICAgICAgICMgU2VydmVyIHNlbGJzdCAoc3RvcC5iYXQvZGdsLmJhdCkuIFdpciBrb2VubmVuIGRl +biBleHRlcm5lbiBMYXVmIG5pY2h0DQogICAgICAgICAgICAjIGluIEVjaHR6ZWl0IHZlcmZvbGdl +biAtPiBKb2IgbWVsZGV0ICdleHRlcm4gZ2VzdGFydGV0JywgZGVyIENsaWVudA0KICAgICAgICAg +ICAgIyB6ZWlndCBkZW4gSGlud2VpcyB1bmQgbGFlZHQgbmFjaCBkZW0gTmV1c3RhcnQgbmV1Lg0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS91cGRhdGUvc3RhcnQnIC1hbmQgJE1ldGhv +ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJV +c2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkYXJmIFVwZGF0ZXMg +c3RhcnRlbi4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRxdWVsbGUgPSBHZXQt +VXBkYXRlUXVlbGxlDQogICAgICAgICAgICAgICAgJGJhdCA9IEpvaW4tUGF0aCAkcXVlbGxlICd1 +cGRhdGUuYmF0Jw0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQ +YXRoICRiYXQpKSB7DQogICAgICAgICAgICAgICAgICAgICRtc2cgPSAndXBkYXRlLmJhdCBuaWNo +dCBnZWZ1bmRlbiAoUXVlbGxlOiAnICsgJHF1ZWxsZSArICcpLiBVcGRhdGUgYml0dGUgdWViZXIg +dXBkYXRlLmJhdCBpbiBkZXIgUG9ydGFsLVd1cnplbCBhdXNmdWVocmVuLicNCiAgICAgICAgICAg +ICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGUgICA9ICdmYWlsZWQnDQogICAgICAgICAg +ICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnN0ZXAgICAgPSAnZmFpbGVkJw0KICAgICAgICAg +ICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvciAgID0gJG1zZw0KICAgICAgICAgICAg +ICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5tZXNzYWdlID0gJG1zZw0KICAgICAgICAgICAgICAg +ICAgICBMb2ctQXBpICgnVVBEQVRFLVNUQVJUIEZFSExFUjogJyArICRtc2cpDQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICRtc2cgNTAwDQogICAgICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQog +ICAgICAgICAgICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkVEhI +Om1tOnNzJykNCiAgICAgICAgICAgICAgICAgICAgIyBzdGRpbiBhdXMgbnVsIChlaW4gQXJndW1l +bnRMaXN0LVN0cmluZywgdm9uIFN0YXJ0LVByb2Nlc3MNCiAgICAgICAgICAgICAgICAgICAgIyB2 +ZXJiYXRpbSBhbiBjbWQpIC0+IGRhcyBhYnNjaGxpZXNzZW5kZSAncGF1c2UnIGluIHVwZGF0ZS5i +YXQNCiAgICAgICAgICAgICAgICAgICAgIyBsaWVzdCBFT0YgdW5kIGtlaHJ0IHNvZm9ydCB6dXJ1 +ZWNrLCBrZWluIGhhZW5nZW5kZXIgUHJvemVzcy4NCiAgICAgICAgICAgICAgICAgICAgU3RhcnQt +UHJvY2VzcyAtRmlsZVBhdGggJ2NtZC5leGUnIC1Bcmd1bWVudExpc3QgKCcvYyAiJyArICRiYXQg +KyAnIiA8bnVsJykgYA0KICAgICAgICAgICAgICAgICAgICAgICAgLVdvcmtpbmdEaXJlY3Rvcnkg +JHF1ZWxsZSAtV2luZG93U3R5bGUgSGlkZGVuDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6 +VXBkYXRlSm9iLnN0YXRlICAgICAgID0gJ3J1bm5pbmcnDQogICAgICAgICAgICAgICAgICAgICRz +Y3JpcHQ6VXBkYXRlSm9iLnN0ZXAgICAgICAgID0gJ2V4dGVybicNCiAgICAgICAgICAgICAgICAg +ICAgJHNjcmlwdDpVcGRhdGVKb2IucGVyY2VudCAgICAgPSA1DQogICAgICAgICAgICAgICAgICAg +ICRzY3JpcHQ6VXBkYXRlSm9iLmVycm9yICAgICAgID0gJycNCiAgICAgICAgICAgICAgICAgICAg +JHNjcmlwdDpVcGRhdGVKb2IuZnJvbVZlcnNpb24gPSAoR2V0LUxva2FsZVZlcnNpb24pDQogICAg +ICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnRvVmVyc2lvbiAgID0gJHNjcmlwdDpS +ZW1vdGVWZXJzaW9uDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLnNlbGZ0 +ZXN0ICAgID0gQCgpDQogICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRlSm9iLm1lc3Nh +Z2UgICAgID0gJ0V4dGVybmVyIFVwZGF0ZXIgKHVwZGF0ZS5iYXQpIGdlc3RhcnRldC4gRGVyIFNl +cnZlciB3aXJkIGdsZWljaCBnZXN0b3BwdCB1bmQgbmV1IGdlc3RhcnRldCAtIGJpdHRlIGRhbmFj +aCBkaWUgU2VpdGUgbmV1IGxhZGVuLicNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRh +dGVKb2IubG9nICAgICAgICAgPSBAKEB7IHQgPSAkdHM7IG1zZyA9ICd1cGRhdGUuYmF0IGF1cyAn +ICsgJHF1ZWxsZSArICcgZ2VzdGFydGV0LicgfSkNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFw +aSAoJ1VQREFURS1TVEFSVDogdXBkYXRlLmJhdCBhdXMgezB9IGdlc3RhcnRldCAoU3VwZXJVc2Vy +KS4nIC1mICRxdWVsbGUpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz +cG9uc2UgQHsgc3RhcnRlZCA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg +ICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVKb2Iuc3RhdGUgPSAnZmFpbGVkJw0KICAg +ICAgICAgICAgICAgICAgICAkc2NyaXB0OlVwZGF0ZUpvYi5lcnJvciA9ICRfLkV4Y2VwdGlvbi5N +ZXNzYWdlDQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdVUERBVEUtU1RBUlQgRkVITEVS +OiB7MH0nIC1mICRfLkV4Y2VwdGlvbi5NZXNzYWdlKQ0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXNwb25zZSAoJ1VwZGF0ZS1TdGFydCBmZWhsZ2VzY2hsYWdlbjogJyArICRfLkV4 +Y2VwdGlvbi5NZXNzYWdlKSA1MDANCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +Y29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +ZGVidWcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkZGF0ID0g +QHsgUm9vdCA9ICRSb290OyBEYXRhRGlyID0gJERhdGFEaXI7IEZpbGVzID0gQHt9IH0NCiAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkZiBpbiAnYWRtaW4uanNvbicsJ3BsYW51bmcuanNvbicsJ2xv +Z2J1Y2guanNvbicpIHsNCiAgICAgICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRh +RGlyICRmDQogICAgICAgICAgICAgICAgICAgICRpbmZvID0gQHsgZXhpc3RzID0gKFRlc3QtUGF0 +aCAtTGl0ZXJhbFBhdGggJGZwKSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkaW5mby5leGlz +dHMpIHsgJGluZm8uc2l6ZSA9IChHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJGZwKS5MZW5ndGggfQ0K +ICAgICAgICAgICAgICAgICAgICAkZGF0LkZpbGVzWyRmXSA9ICRpbmZvDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICMgUmVjaHRlLUluZm8gKHdpY2h0aWcgZnVlciBBZG1pbi1U +YWItU2ljaHRiYXJrZWl0KQ0KICAgICAgICAgICAgICAgICRkYXQuQmVudXR6ZXIgPSAiJERvbWFp +blwkVXNlcm5hbWUiDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg +JHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgICAgICRkYXQuUmVjaHRlID0gQHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgIHJvbGxlICAgICAgICAgICA9ICRyLnJvbGxlDQogICAgICAg +ICAgICAgICAgICAgICAgICBpc3RTdXBlclVzZXIgICAgPSAkci5pc3RTdXBlclVzZXINCiAgICAg +ICAgICAgICAgICAgICAgICAgIGlzdEZhY2hhdWZzaWNodCA9ICRyLmlzdEZhY2hhdWZzaWNodA0K +ICAgICAgICAgICAgICAgICAgICAgICAgc2VoZW4gICAgICAgICAgID0gJHIuc2VoZW4NCiAgICAg +ICAgICAgICAgICAgICAgICAgIG1laW5lUGVyc29uSWQgICA9ICRyLm1laW5lUGVyc29uSWQNCiAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAg +ICAgICAgICAgICAkZGF0LlJlY2h0ZSA9IEB7IGZlaGxlciA9ICRfLkV4Y2VwdGlvbi5NZXNzYWdl +IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBBZG1pbi5qc29uIEt1cnpj +aGVjaw0KICAgICAgICAgICAgICAgICRhZG1pbk9iaiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4u +anNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbk9iaikgew0KICAgICAg +ICAgICAgICAgICAgICAkZGF0LkFkbWluSnNvbkxlc2JhciA9ICRmYWxzZQ0KICAgICAgICAgICAg +ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRhbnpTVSA9IDANCiAgICAgICAgICAg +ICAgICAgICAgaWYgKCRhZG1pbk9iai5zdXBlclVzZXIpIHsgJGFuelNVID0gQCgkYWRtaW5PYmou +c3VwZXJVc2VyKS5Db3VudCB9DQogICAgICAgICAgICAgICAgICAgICRzdUtlbm51bmdlbiA9IEAo +KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluT2JqLnN1cGVyVXNlcikgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHMgaW4gQCgkYWRtaW5PYmouc3VwZXJVc2VyKSkg +eyAkc3VLZW5udW5nZW4gKz0gW3N0cmluZ10kcy5ud0tlbm51bmcgfQ0KICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICRkYXQuQWRtaW5Kc29uTGVzYmFyID0gJHRydWUN +CiAgICAgICAgICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJBbnphaGwgPSAkYW56U1UNCiAgICAg +ICAgICAgICAgICAgICAgJGRhdC5TdXBlclVzZXJLZW5udW5nZW4gPSAkc3VLZW5udW5nZW4NCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z +ZSAkZGF0DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAg +ICAgICAgIyA9PT09PSBTWU5DLUNIRUNLID09PT09DQogICAgICAgICAgICAjIFZlcmdsZWljaHQg +cHJvIFdlYi1Bc3NldCBkaWUgRGF0ZWktR3JvZXNzZSBpbiBkZXIgU291cmNlIChnZXB1bGx0ZXMN +CiAgICAgICAgICAgICMgUmVwbywgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSBnZWdlbiBkaWUgRGF0 +ZWktR3JvZXNzZSBpbSBBc3NldC1DYWNoZQ0KICAgICAgICAgICAgIyAoJFJvb3QsIFJvYm9jb3B5 +LVppZWwpLiBFcmtlbm50IHVudm9sbHN0YWVuZGlnZSBSb2JvY29weS1VZWJlci0NCiAgICAgICAg +ICAgICMgdHJhZ3VuZ2VuLCB2ZXJhbHRldGUgQXNzZXQtQ2FjaGVzIHVuZCBmZWhsZW5kZSBEYXRl +aWVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zeW5jLWNoZWNrL2RhdGVpZW4n +IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVz +dC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScg +NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlwdDpBc3NldEZh +bGxiYWNrKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug +QHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gJGZhbHNlDQogICAgICAgICAgICAgICAg +ICAgICAgICBmZWhsZXIgPSAnQXNzZXRGYWxsYmFjayBuaWNodCBrb25maWd1cmllcnQg4oCUIFNv +dXJjZS1QZmFkIHVuYmVrYW5udCwgVmVyZ2xlaWNoIG5pY2h0IG1vZWdsaWNoLiAoU2VydmVyIHd1 +cmRlIG9obmUgLUFzc2V0RmFsbGJhY2sgZ2VzdGFydGV0LiknDQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgJHdlYkV4dCA9ICcuanMnLCcuY3NzJywnLmh0bWwnLCcuaWNvJywnLnBuZycs +Jy5qcGcnLCcuanBlZycsJy5zdmcnDQogICAgICAgICAgICAgICAgJGlnbm9yaWVyZVRvcCA9IEAo +Jy5naXQnLCdkb2NzJywnZGV2JywndGVzdHMnLCdkYXRhJywnY2FjaGUnKQ0KICAgICAgICAgICAg +ICAgICRkYXRlaWVuID0gQCgpDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg +ICAgICAgJGFsbGUgPSBHZXQtQ2hpbGRJdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFzc2V0RmFs +bGJhY2sgLVJlY3Vyc2UgLUZpbGUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCiAgICAg +ICAgICAgICAgICAgICAgZm9yZWFjaCAoJGYgaW4gJGFsbGUpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICRyZWwgPSAkZi5GdWxsTmFtZS5TdWJzdHJpbmcoJHNjcmlwdDpBc3NldEZhbGxiYWNr +Lkxlbmd0aCArIDEpIC1yZXBsYWNlICdcXCcsICcvJw0KICAgICAgICAgICAgICAgICAgICAgICAg +JHRvcCA9ICgkcmVsIC1zcGxpdCAnLycpWzBdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JGlnbm9yaWVyZVRvcCAtY29udGFpbnMgJHRvcCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAkZXh0ID0gJGYuRXh0ZW5zaW9uLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCR3ZWJFeHQgLW5vdGNvbnRhaW5zICRleHQpIHsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGRhdGVpZW4gKz0gJHJlbA0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICMgZGF0YS8tU29uZGVyZmFlbGxlOiBudXIgZGllIHp3 +ZWkgVGFybi1NYXJrdXBzLCBhbGxlcyBhbmRlcmUNCiAgICAgICAgICAgICAgICAgICAgIyBsaWVn +dCBpbSBEYXRhRGlyIChhZG1pbi5qc29uL3BsYW51bmcuanNvbi8uLi4pIHVuZCB3aXJkIG5pY2h0 +DQogICAgICAgICAgICAgICAgICAgICMgaW4gZGVuIEFzc2V0LUNhY2hlIGtvcGllcnQuDQogICAg +ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRleHRyYSBpbiAnZGF0YS9tYWluZnJhbWUuaHRtbCcs +J2RhdGEvc2FuaXRpemVyLmh0bWwnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3JjRXh0 +cmEgPSBKb2luLVBhdGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRleHRyYQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHNyY0V4dHJhKSB7ICRkYXRl +aWVuICs9ICRleHRyYSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 +IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA +eyBvayA9ICRmYWxzZTsgZmVobGVyID0gKCdTb3VyY2UtVmVyemVpY2huaXMgbmljaHQgbGVzYmFy +OiAnICsgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGlu +dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRhdGVpZW4gPSAkZGF0ZWll +biB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgp +DQogICAgICAgICAgICAgICAgJGFuek9rID0gMDsgJGFuekRpZmYgPSAwOyAkYW56RmVobHRBc3Nl +dCA9IDA7ICRhbnpGZWhsdFNvdXJjZSA9IDANCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmVs +IGluICRkYXRlaWVuKSB7DQogICAgICAgICAgICAgICAgICAgICRhc3NldFBmYWQgID0gSm9pbi1Q +YXRoICRSb290ICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZVBmYWQgPSBKb2luLVBh +dGggJHNjcmlwdDpBc3NldEZhbGxiYWNrICRyZWwNCiAgICAgICAgICAgICAgICAgICAgJGFzc2V0 +Qnl0ZXMgID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZUJ5dGVzID0gJG51bGwN +CiAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGFzc2V0UGZh +ZCkgIHsgJGFzc2V0Qnl0ZXMgID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkYXNzZXRQZmFkKS5M +ZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAk +c291cmNlUGZhZCkgeyAkc291cmNlQnl0ZXMgPSAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICRzb3Vy +Y2VQZmFkKS5MZW5ndGggfQ0KICAgICAgICAgICAgICAgICAgICAkc3RhdHVzID0gJ3VuYmVrYW5u +dCcNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkc291cmNlQnl0ZXMgLWFuZCAk +bnVsbCAtZXEgJGFzc2V0Qnl0ZXMpIHsgJHN0YXR1cyA9ICdiZWlkZV9mZWhsZW4nIH0NCiAgICAg +ICAgICAgICAgICAgICAgZWxzZWlmICgkbnVsbCAtZXEgJGFzc2V0Qnl0ZXMpICB7ICRzdGF0dXMg +PSAnYXNzZXRfZmVobHQnOyAgJGFuekZlaGx0QXNzZXQrKyB9DQogICAgICAgICAgICAgICAgICAg +IGVsc2VpZiAoJG51bGwgLWVxICRzb3VyY2VCeXRlcykgeyAkc3RhdHVzID0gJ3NvdXJjZV9mZWhs +dCc7ICRhbnpGZWhsdFNvdXJjZSsrIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkYXNz +ZXRCeXRlcyAtZXEgJHNvdXJjZUJ5dGVzKSB7ICRzdGF0dXMgPSAnb2snOyAkYW56T2srKyB9DQog +ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkc3RhdHVzID0gJ2dyb2Vzc2VfZGlmZic7ICRhbnpE +aWZmKysgfQ0KICAgICAgICAgICAgICAgICAgICAkZWludHJhZWdlICs9IFtvcmRlcmVkXUB7DQog +ICAgICAgICAgICAgICAgICAgICAgICBwZmFkICAgICAgICA9ICRyZWwNCiAgICAgICAgICAgICAg +ICAgICAgICAgIHNvdXJjZUJ5dGVzID0gJHNvdXJjZUJ5dGVzDQogICAgICAgICAgICAgICAgICAg +ICAgICBhc3NldEJ5dGVzICA9ICRhc3NldEJ5dGVzDQogICAgICAgICAgICAgICAgICAgICAgICBk +aWZmQnl0ZXMgICA9IGlmICgkbnVsbCAtbmUgJHNvdXJjZUJ5dGVzIC1hbmQgJG51bGwgLW5lICRh +c3NldEJ5dGVzKSB7ICRhc3NldEJ5dGVzIC0gJHNvdXJjZUJ5dGVzIH0gZWxzZSB7ICRudWxsIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgID0gJHN0YXR1cw0KICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +bk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgb2sgICAgICAgICAgPSAk +dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICBzb3VyY2VSb290ICA9ICRzY3JpcHQ6QXNzZXRGYWxs +YmFjaw0KICAgICAgICAgICAgICAgICAgICBhc3NldFJvb3QgICA9ICRSb290DQogICAgICAgICAg +ICAgICAgICAgIGFuemFobCAgICAgID0gJGVpbnRyYWVnZS5Db3VudA0KICAgICAgICAgICAgICAg +ICAgICBhbnpPayAgICAgICA9ICRhbnpPaw0KICAgICAgICAgICAgICAgICAgICBhbnpEaWZmICAg +ICA9ICRhbnpEaWZmDQogICAgICAgICAgICAgICAgICAgIGFuekZlaGx0QXNzZXQgID0gJGFuekZl +aGx0QXNzZXQNCiAgICAgICAgICAgICAgICAgICAgYW56RmVobHRTb3VyY2UgPSAkYW56RmVobHRT +b3VyY2UNCiAgICAgICAgICAgICAgICAgICAgZGF0ZWllbiAgICAgPSAkZWludHJhZWdlDQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN +CiAgICAgICAgICAgICMgPT09PT0gQURNSU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAt +ZXEgJy9hcGkvYWRtaW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAg +ICAkdHh0ID0gUmVhZC1UZXh0RmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAo +JG51bGwgLWVxICR0eHQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ2FkbWluLmpzb24gbmljaHQg +Z2VmdW5kZW4nIDQwNCB9DQogICAgICAgICAgICAgICAgZWxzZSB7IFNlbmQtSnNvblRleHQgJFJl +c3BvbnNlICR0eHQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog +ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluJyAtYW5kICRNZXRob2QgLWVxICdQ +VVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2FkbWlu +aXN0cmF0aW9uJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScg NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z -ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv -ZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0ZW4g -PSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0g -JG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0Vy -Z2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0g -JGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAnZmFj -aGF1ZnNpY2h0JyAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMg -PSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdEZB -ID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ2ZhY2hhdWZzaWNodCddKSB7ICRhbHRGQSA9IFtvYmplY3RbXV1AKCRhZG1pbi5mYWNo -YXVmc2ljaHQpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNrdXAtQWRtaW5K -c29uICdmYWNoYXVmc2ljaHQnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydmYWNoYXVmc2ljaHQnXSkgeyAkYWRtaW4uZmFjaGF1ZnNpY2h0 -ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQt -TWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdmYWNoYXVmc2ljaHQnIC1Ob3RlUHJvcGVydHlWYWx1 -ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmpl -Y3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg -ICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdEZBIH0NCiAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0 -YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LURpZmY6IHRy -ZW5udCBtYWlsdG8td3VlcmRpZ2UgVmVyYW50d29ydHVuZ3MtDQogICAgICAgICAgICAgICAgIyBV -ZWJlcmdhZW5nZSAoR2VzYW10dmVyYW50d29ydGxpY2ggcmVpbi9yYXVzKSB2b20gcmVzdGxpY2hl -bg0KICAgICAgICAgICAgICAgICMgUm9sbGVuLVVwZGF0ZXMgKEZBIGhpbnp1L3JhdXMgb2huZSBH -ZXNhbXQsIG9kZXIgU2VoZW4tRmxhZy0NCiAgICAgICAgICAgICAgICAjIFdlY2hzZWwpLiBFcnN0 -ZSBmbGllw59lbiBpbiBkZW4gbWFpbHRvLVRyaWdnZXIsIGRlciBSZXN0IHdpcmQNCiAgICAgICAg -ICAgICAgICAjIHp1IEluLUFwcC1IaW53ZWlzZW4uDQogICAgICAgICAgICAgICAgJGZhQXVzd2Vy -dHVuZyA9IEdldC1GYWNoYXVmc2ljaHREaWZmcyAkbG9ja0VyZ2VibmlzLmFsdCAkZGF0ZW4NCiAg -ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdmYWNoYXVmc2ljaHQuZ2VhZW5kZXJ0JyBA -eyBhbnphaGwgPSAkZGF0ZW4uQ291bnQ7IG1haWx0byA9ICRmYUF1c3dlcnR1bmcubWFpbHRvRGlm -ZnMuQ291bnQ7IGhpbndlaXNlID0gJGZhQXVzd2VydHVuZy5oaW53ZWlzRGlmZnMuQ291bnQgfQ0K -ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRoIGluICRmYUF1c3dlcnR1bmcuaGlud2Vpc0RpZmZz -KSB7DQogICAgICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdyb2xsZV9nZWFlbmRlcnQnICRo -IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAg -ICAgICAgICAgICBpZiAoJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcy5Db3VudCAtZ3QgMCkgew0K -ICAgICAgICAgICAgICAgICAgICAjIFBTLTUuMS1VbndyYXAtU2NodXR6OiBAKCR4KSBlcnp3aW5n -dCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQuDQogICAgICAgICAgICAgICAgICAgICRyZXNwWydf -YnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVkXUB7IHRyaWdnZXIgPSAncm9sbGVfdmVyYW50d29y -dHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAoJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcykgfQ0K -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv -bnNlICRyZXNwDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg -ICAgICAgICAgIyBEaXJla3Rpb25zbGVpdHVuZyArIEZ1ZWhydW5nc3N0ZWxsZSAoZ2xlaWNoZXMg -U2NoZW1hIHdpZQ0KICAgICAgICAgICAgIyBGYWNoYXVmc2ljaHQsIG51ciBzZXBhcmF0ZSBMaXN0 -ZW4pLiBCZWlkZSBSb3V0ZW4gdGVpbGVuIGRpZQ0KICAgICAgICAgICAgIyBnbGVpY2hlIExvZ2lr -OiBTVS1vbmx5IFBVVCwgQmFja3VwLCBTY2hyZWliZW4sIERpZmZzIHp1DQogICAgICAgICAgICAj -IEluLUFwcC1IaW53ZWlzZW4gdW1zZXR6ZW4uDQogICAgICAgICAgICBpZiAoKCRQYXRoIC1lcSAn -L2FwaS9hZG1pbi9kaXJla3Rpb25zbGVpdHVuZycgLW9yICRQYXRoIC1lcSAnL2FwaS9hZG1pbi9m -dWVocnVuZ3NzdGVsbGUnKSAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -TnVyIFN1cGVyVXNlciBkdWVyZmVuIFJvbGxlbiB2ZXJ3YWx0ZW4nIDQwMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICRmZWxkTmFtZSA9IGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZGly -ZWt0aW9uc2xlaXR1bmcnKSB7ICdkaXJla3Rpb25zbGVpdHVuZycgfSBlbHNlIHsgJ2Z1ZWhydW5n -c3N0ZWxsZScgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Fu -ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5T2Jq -ID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29i -amVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxs -DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5p -cyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxz -ZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkTmFtZV0pIHsgJGFsdCA9IFtvYmpl -Y3RbXV1AKCRhZG1pbi4kZmVsZE5hbWUpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lk -XShCYWNrdXAtQWRtaW5Kc29uICRmZWxkTmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZE5hbWVdKSB7ICRhZG1pbi4kZmVsZE5h -bWUgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFk -ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGZlbGROYW1lIC1Ob3RlUHJvcGVydHlWYWx1ZSAk -ZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg -J2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICBy -ZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdCB9DQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv -ciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICgkZmVsZE5hbWUg -KyAnLmdlYWVuZGVydCcpIEB7IGFuemFobCA9ICRkYXRlbi5Db3VudCB9DQogICAgICAgICAgICAg +ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRh +dGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgaWYgKCRkYXRl +bi5QU09iamVjdC5Qcm9wZXJ0aWVzWydhZG1pbktlbm51bmdlbiddKSB7ICRkYXRlbi5QU09iamVj +dC5Qcm9wZXJ0aWVzLlJlbW92ZSgnYWRtaW5LZW5udW5nZW4nKSB9DQogICAgICAgICAgICAgICAg +IyBQUy01LjEtVW53cmFwLVNjaHV0ejogYWxsZSBMaXN0ZW4tRmVsZGVyLCBkaWUgZGVyIENsaWVu +dCB1bnRlcg0KICAgICAgICAgICAgICAgICMgQURNSU5fTElTVF9GRUxERVIgZnVlaHJ0LCBzZXJ2 +ZXItc2VpdGlnIGFscyBBcnJheXMgZXJ6d2luZ2VuLg0KICAgICAgICAgICAgICAgICMgU29uc3Qg +d2VyZGVuIExpc3RlbiBtaXQgbnVyIGVpbmVtIEVsZW1lbnQgdm9tIFBvd2VyU2hlbGwtSlNPTi0N +CiAgICAgICAgICAgICAgICAjIFJvdW5kdHJpcCB6dW0gRWluemVsLU9iamVrdCBlbnRwYWNrdCB1 +bmQgY2xpZW50LXNlaXRpZyBrb21tdA0KICAgICAgICAgICAgICAgICMgYWRtaW5MaXN0ZW5Ob3Jt +YWxpc2llcmVuIGdnZi4genUgc3BhZXQgKHouQi4gbmFjaCBIb3QtUmVsb2FkKS4NCiAgICAgICAg +ICAgICAgICBOb3JtYWxpc2llcmUtQWRtaW5MaXN0ZW4gJGRhdGVuDQogICAgICAgICAgICAgICAg +IyBTZXJ2ZXItc2VpdGlnZSBSaWNoLVRleHQtU2FuaXRpc2llcnVuZyAoU3RvcmVkLVhTUy1TY2h1 +dHopLg0KICAgICAgICAgICAgICAgIEludm9rZS1BZG1pblJpY2h0ZXh0U2FuaXRpemUgJGRhdGVu +DQogICAgICAgICAgICAgICAgJGlzdFNVID0gVGVzdC1Jc3RTdXBlclVzZXINCiAgICAgICAgICAg +ICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAg +ICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4u +anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBOdXIgU3VwZXJVc2VyIGRhcmYgZGll +IFJvbGxlbi1MaXN0ZW4gc3VwZXJVc2VyL2ZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAg +ICAgICAgIyB1ZWJlciAvYXBpL2FkbWluIGFlbmRlcm4g4oCUIHNvbnN0IGtvZW5udGUgamVtYW5k +IHNpY2ggc2VsYnN0DQogICAgICAgICAgICAgICAgICAgICAgICAjIHp1bSBTdXBlclVzZXIgYmVm +b2VyZGVybiB1bmQgZGFtaXQgZGllIHNlcGFyYXRlbiBHdWFyZHMgYXVmDQogICAgICAgICAgICAg +ICAgICAgICAgICAjIC9hcGkvYWRtaW4vc3VwZXJ1c2VyIGJ6dy4gL2FwaS9hZG1pbi9mYWNoYXVm +c2ljaHQgdW1nZWhlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWRtaW5LZW5udW5nZW4g +aXN0IGdlbmVyZWxsIGFiZ2VzY2hhZmZ0IHVuZCB3aXJkIGVudGZlcm50Lg0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBSZWFkIGRlciBhbHRlbiBXZXJ0ZSBtdXNzIElOTkVSSEFMQiBkZXMgTG9j +a3MgcGFzc2llcmVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBkYW1pdCBkaWUgU1UvRmFj +aGF1ZnNpY2h0LUxpc3RlbiBhdG9tYXIgZXJoYWx0ZW4gYmxlaWJlbi4NCiAgICAgICAgICAgICAg +ICAgICAgICAgICRhbHQgPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0U1UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkZmVsZCBpbiAnc3VwZXJVc2VyJywnZmFjaGF1ZnNpY2h0JywnZGlyZWt0 +aW9uc2xlaXR1bmcnLCdmdWVocnVuZ3NzdGVsbGUnKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkYWx0IC1hbmQgJGFsdC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVj +dC5Qcm9wZXJ0aWVzWyRmZWxkXSkgeyAkZGF0ZW4uJGZlbGQgPSAkYWx0LiRmZWxkIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkZGF0ZW4gfCBBZGQtTWVtYmVy +IC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVydHlWYWx1ZSAkYWx0LiRmZWxkIC1G +b3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkZGF0ZW4u +UFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZmVsZCkNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMg +S2V5LVVuaW9uOiBuaWNodCBtaXRnZXNlbmRldGUgVG9wLUxldmVsLUtleXMgZXJoYWx0ZW4uDQog +ICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0oTWVyZ2UtQWRtaW5LZXlzICRhbHQgJGRhdGVu +KQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRtaW4uanNvbicg +JGRhdGVuIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyBvayA9 +ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg +ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy +OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgJGxvY2tFcmdlYm5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0Vy +Z2VibmlzLm1zZyAkbG9ja0VyZ2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2FkbWluLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAg ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0N CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj -IEJlemVpY2hudW5nZW46IE9iamVrdCAoTWFwIGtleS0+bGFiZWwpLiBMZWVyZXMgT2JqZWt0ID0g -UmVzZXQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2JlemVpY2hudW5n -ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0 -ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJl -cXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNw -b25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg -JGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGxvY2tF -cmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAg -ICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNv -bicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVy -biBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBs -ZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Q -cm9wZXJ0aWVzWydiZXplaWNobnVuZ2VuJ10pIHsgJGFkbWluLmJlemVpY2hudW5nZW4gPSAkZGF0 -ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIg -LU5vdGVQcm9wZXJ0eU5hbWUgJ2JlemVpY2hudW5nZW4nIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0 -ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2Fk -bWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1 -cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJM -b2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAg -ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiZXplaWNobnVuZ2VuLmdlYWVuZGVydCcg -QHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg -PSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KDQogICAgICAgICAgICAjIFN0YXRpc3Rpay1CYXVrYXN0ZW4gKHNlbGJzdGdlYmF1dGUgS2Fj -aGVsbikgKyBTdXBlclVzZXItTGF5b3V0LVJhc3Rlci4NCiAgICAgICAgICAgICMgR2F0ZSBiZXd1 -c3N0IFNVIE9ERVIgR2VzYW10dmVyYW50d29ydGxpY2ggKG5pY2h0IFRlc3QtSXN0QWRtaW4pIOKA -lCBkZXINCiAgICAgICAgICAgICMgQnVpbGRlciBsZWJ0IGltIFN0YXRpc3Rpay1UYWIgdW5kIG11 -c3MgYXVjaCBmdWVyIEdlc2FtdHZlcmFudHdvcnRsaWNoZQ0KICAgICAgICAgICAgIyBvaG5lIGFk -bWluaXN0cmF0aW9uLVp1Z2FuZyBzcGVpY2hlcmJhciBzZWluLiBQYXJ0aWFsLU1lcmdlIG51ciBk -ZXINCiAgICAgICAgICAgICMgYmVpZGVuIGJla2FubnRlbiBLZXlzOyBiZWlkZSBhbHMgW29iamVj -dFtdXSB6d2luZ2VuIChQUy01LjEtVW53cmFwKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvYWRtaW4vc3RhdGlzdGlrJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAg -ICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKChUZXN0 -LUlzdEFkbWluKSAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgQWRtaW5zIHVuZCBHZXNhbXR2ZXJh -bnR3b3J0bGljaGUgZHVlcmZlbiBTdGF0aXN0aWstS2FjaGVsbiBhZW5kZXJuJyA0MDM7IGNvbnRp -bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5 -ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRo -YXRLYWNoZWxuID0gKCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVy -dGllc1snc3RhdGlzdGlrS2FjaGVsbiddKQ0KICAgICAgICAgICAgICAgICRoYXRMYXlvdXQgID0g -KCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhdGlz -dGlrTGF5b3V0J10pDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAg -ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IElu -dm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3Rh -dHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRoYXRLYWNoZWxuKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJGsgPSBbb2JqZWN0W11dQCgkZGF0ZW4uc3RhdGlzdGlrS2FjaGVsbikNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRp -c3Rpa0thY2hlbG4nXSkgeyAkYWRtaW4uc3RhdGlzdGlrS2FjaGVsbiA9ICRrIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3Bl -cnR5TmFtZSAnc3RhdGlzdGlrS2FjaGVsbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRrIC1Gb3JjZSB9 -DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JGhhdExheW91dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsID0gW29iamVjdFtd -XUAoJGRhdGVuLnN0YXRpc3Rpa0xheW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rpa0xheW91dCddKSB7ICRhZG1p -bi5zdGF0aXN0aWtMYXlvdXQgPSAkbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz -ZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YXRpc3Rpa0xheW91 -dCcgLU5vdGVQcm9wZXJ0eVZhbHVlICRsIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29u +IFN1cGVyLVVzZXItTGlzdGU6IG51ciBTdXBlclVzZXIgZGFyZiBTdXBlclVzZXIgdmVyd2FsdGVu +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N1cGVydXNlcicgLWFuZCAk +TWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1 +cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBT +dXBlclVzZXIgdmVyd2FsdGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYm9k +eSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7 +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICAjIEAoLi4uKSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1l +bnQgKFBTIDUuMSBlbnRwYWNrdCBzb25zdCB6dSBFaW56ZWwtT2JqZWt0LA0KICAgICAgICAgICAg +ICAgICMgZGFubiB3aXJkIGRpZSBMaXN0ZSBpbiBhZG1pbi5qc29uIHp1bSBPYmpla3QgZGVnZW5l +cmllcnQgLT4gQ2xpZW50LUZlaGxlcikuDQogICAgICAgICAgICAgICAgJGJvZHlPYmogPSAkYm9k +eSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0ZW4gPSBbb2JqZWN0W11d +QCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gJG51bGwNCiAgICAg +ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkbG9ja0VyZ2VibmlzID0gSW52 +b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAg +JGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0 +dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxlc2JhcicgfSB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNjaHV0eiAnc3VwZXJVc2VyJyAkZGF0 +ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3 +aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlIExpc3RlIHZvciBkZW0g +T3ZlcndyaXRlIHNuYXBzaG90dGVuIOKAlCB3aXIgYnJhdWNoZW4NCiAgICAgICAgICAgICAgICAg +ICAgICAgICMgc2llIG5hY2ggZGVtIExvY2sgZnVlciBkaWUgRGlmZi1CZXJlY2hudW5nIChtYWls +dG8gYmVpDQogICAgICAgICAgICAgICAgICAgICAgICAjIFNVIHJlaW4vcmF1cykuDQogICAgICAg +ICAgICAgICAgICAgICAgICAkYWx0U1UgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3VwZXJVc2VyJ10pIHsgJGFsdFNVID0gW29i +amVjdFtdXUAoJGFkbWluLnN1cGVyVXNlcikgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3Zv +aWRdKEJhY2t1cC1BZG1pbkpzb24gJ3N1cGVyVXNlcicpDQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7ICRhZG1pbi5z +dXBlclVzZXIgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p +biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N1cGVyVXNlcicgLU5vdGVQcm9wZXJ0 +eVZhbHVlICRkYXRlbiAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNv +bk9iamVjdCAnYWRtaW4uanNvbicgJGFkbWluIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg +ICAgICAgIHJldHVybiBAeyBvayA9ICR0cnVlOyBhbHQgPSAkYWx0U1UgfQ0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAg +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0K +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2Vibmlz +Lm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJu +aXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBEaWZmIGFsdC9uZXUgbmFj +aCBud0tlbm51bmcuIFNVLVJlaW4vUmF1cyBsb2VzdCBtYWlsdG8gdmlhIENsaWVudCBhdXMNCiAg +ICAgICAgICAgICAgICAjIChWZXJhbnR3b3J0dW5ncy1VZWJlcmdhbmcgVm9ybGFnZSAncm9sbGVf +dmVyYW50d29ydHVuZycpLg0KICAgICAgICAgICAgICAgICRtYWlsdG9EaWZmcyA9IEdldC1Sb2xs +ZURpZmZzICRsb2NrRXJnZWJuaXMuYWx0ICRkYXRlbiAnU3VwZXJVc2VyJyAkZmFsc2UNCiAgICAg +ICAgICAgICAgICAjIGFuemFobCBtaXRnZWJlbiDigJQgZGVyIExvZ2J1Y2gtQ2xpZW50IGxpZXN0 +IGUuYW56YWhsOyBvaG5lIGRhcw0KICAgICAgICAgICAgICAgICMgRmVsZCBibGllYiBkaWUgRGV0 +YWlsLVNwYWx0ZSBiZWkgU1UtTGlzdGVuYWVuZGVydW5nZW4gbGVlcg0KICAgICAgICAgICAgICAg +ICMgKGZhY2hhdWZzaWNodC5nZWFlbmRlcnQgdW50ZW4gbWFjaHQgZXMgZ2VuYXVzbykuDQogICAg +ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3VwZXJVc2VyLmdlYWVuZGVydCcgQHsgYW56 +YWhsID0gJGRhdGVuLkNvdW50OyBkaWZmcyA9ICRtYWlsdG9EaWZmcy5Db3VudCB9DQogICAgICAg +ICAgICAgICAgJHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAg +ICAgICBpZiAoJG1haWx0b0RpZmZzLkNvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAg +ICMgUFMtNS4xLVVud3JhcC1TY2h1dHo6IEAoJHgpIGVyendpbmd0IEFycmF5IGF1Y2ggYmVpIDEg +RWxlbWVudC4NCiAgICAgICAgICAgICAgICAgICAgJHJlc3BbJ19icmF1Y2h0X21haWx0byddID0g +W29yZGVyZWRdQHsgdHJpZ2dlciA9ICdyb2xsZV92ZXJhbnR3b3J0dW5nJzsgZGlmZnMgPSBbb2Jq +ZWN0W11dQCgkbWFpbHRvRGlmZnMpIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkcmVzcA0KICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0LUxpc3RlOiBu +dXIgU3VwZXJVc2VyIGRhcmYgRmFjaGF1ZnNpY2h0IHZlcndhbHRlbg0KICAgICAgICAgICAgaWYg +KCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9mYWNoYXVmc2ljaHQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BV +VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRmFjaGF1ZnNpY2h0IHZl +cndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJv +ZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9y +ICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJGJvZHlPYmogPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg +ICAkZGF0ZW4gPSBbb2JqZWN0W11dQCgkYm9keU9iaikNCiAgICAgICAgICAgICAgICAkbG9ja0Vy +Z2VibmlzID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAg +ICAkbG9ja0VyZ2VibmlzID0gSW52b2tlLVdpdGhGaWxlTG9jayAnYWRtaW4uanNvbicgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGFkbWluID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29u +Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkYWRtaW4pIHsgcmV0dXJu +IEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA1MDA7IG1zZyA9ICdhZG1pbi5qc29uIG5pY2h0IGxl +c2JhcicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkd2lwZU1zZyA9IFRlc3QtV2lwZVNj +aHV0eiAnZmFjaGF1ZnNpY2h0JyAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNl +OyBzdGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgJGFsdEZBID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2ZhY2hhdWZzaWNodCddKSB7ICRhbHRGQSA9IFtvYmplY3RbXV1AKCRh +ZG1pbi5mYWNoYXVmc2ljaHQpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXShCYWNr +dXAtQWRtaW5Kc29uICdmYWNoYXVmc2ljaHQnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydmYWNoYXVmc2ljaHQnXSkgeyAkYWRtaW4uZmFj +aGF1ZnNpY2h0ID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRt +aW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdmYWNoYXVmc2ljaHQnIC1Ob3RlUHJv +cGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl +LUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAg +ICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdEZBIH0NCiAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAg +ICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGlu +dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGxvY2tFcmdl +Ym5pcy5vaykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkbG9ja0VyZ2VibmlzLm1zZyAkbG9ja0Vy +Z2VibmlzLnN0YXR1czsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgRmFjaGF1ZnNpY2h0 +LURpZmY6IHRyZW5udCBtYWlsdG8td3VlcmRpZ2UgVmVyYW50d29ydHVuZ3MtDQogICAgICAgICAg +ICAgICAgIyBVZWJlcmdhZW5nZSAoR2VzYW10dmVyYW50d29ydGxpY2ggcmVpbi9yYXVzKSB2b20g +cmVzdGxpY2hlbg0KICAgICAgICAgICAgICAgICMgUm9sbGVuLVVwZGF0ZXMgKEZBIGhpbnp1L3Jh +dXMgb2huZSBHZXNhbXQsIG9kZXIgU2VoZW4tRmxhZy0NCiAgICAgICAgICAgICAgICAjIFdlY2hz +ZWwpLiBFcnN0ZSBmbGllw59lbiBpbiBkZW4gbWFpbHRvLVRyaWdnZXIsIGRlciBSZXN0IHdpcmQN +CiAgICAgICAgICAgICAgICAjIHp1IEluLUFwcC1IaW53ZWlzZW4uDQogICAgICAgICAgICAgICAg +JGZhQXVzd2VydHVuZyA9IEdldC1GYWNoYXVmc2ljaHREaWZmcyAkbG9ja0VyZ2VibmlzLmFsdCAk +ZGF0ZW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdmYWNoYXVmc2ljaHQuZ2Vh +ZW5kZXJ0JyBAeyBhbnphaGwgPSAkZGF0ZW4uQ291bnQ7IG1haWx0byA9ICRmYUF1c3dlcnR1bmcu +bWFpbHRvRGlmZnMuQ291bnQ7IGhpbndlaXNlID0gJGZhQXVzd2VydHVuZy5oaW53ZWlzRGlmZnMu +Q291bnQgfQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRoIGluICRmYUF1c3dlcnR1bmcuaGlu +d2Vpc0RpZmZzKSB7DQogICAgICAgICAgICAgICAgICAgIE5ldy1IaW53ZWlzICdyb2xsZV9nZWFl +bmRlcnQnICRoIChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgJHJlc3AgPSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQn +IH0NCiAgICAgICAgICAgICAgICBpZiAoJGZhQXVzd2VydHVuZy5tYWlsdG9EaWZmcy5Db3VudCAt +Z3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAjIFBTLTUuMS1VbndyYXAtU2NodXR6OiBAKCR4 +KSBlcnp3aW5ndCBBcnJheSBhdWNoIGJlaSAxIEVsZW1lbnQuDQogICAgICAgICAgICAgICAgICAg +ICRyZXNwWydfYnJhdWNodF9tYWlsdG8nXSA9IFtvcmRlcmVkXUB7IHRyaWdnZXIgPSAncm9sbGVf +dmVyYW50d29ydHVuZyc7IGRpZmZzID0gW29iamVjdFtdXUAoJGZhQXVzd2VydHVuZy5tYWlsdG9E +aWZmcykgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl +Y3QgJFJlc3BvbnNlICRyZXNwDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgIyBEaXJla3Rpb25zbGVpdHVuZyArIEZ1ZWhydW5nc3N0ZWxsZSAo +Z2xlaWNoZXMgU2NoZW1hIHdpZQ0KICAgICAgICAgICAgIyBGYWNoYXVmc2ljaHQsIG51ciBzZXBh +cmF0ZSBMaXN0ZW4pLiBCZWlkZSBSb3V0ZW4gdGVpbGVuIGRpZQ0KICAgICAgICAgICAgIyBnbGVp +Y2hlIExvZ2lrOiBTVS1vbmx5IFBVVCwgQmFja3VwLCBTY2hyZWliZW4sIERpZmZzIHp1DQogICAg +ICAgICAgICAjIEluLUFwcC1IaW53ZWlzZW4gdW1zZXR6ZW4uDQogICAgICAgICAgICBpZiAoKCRQ +YXRoIC1lcSAnL2FwaS9hZG1pbi9kaXJla3Rpb25zbGVpdHVuZycgLW9yICRQYXRoIC1lcSAnL2Fw +aS9hZG1pbi9mdWVocnVuZ3NzdGVsbGUnKSAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRS +ZXNwb25zZSAnTnVyIFN1cGVyVXNlciBkdWVyZmVuIFJvbGxlbiB2ZXJ3YWx0ZW4nIDQwMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICRmZWxkTmFtZSA9IGlmICgkUGF0aCAtZXEgJy9hcGkv +YWRtaW4vZGlyZWt0aW9uc2xlaXR1bmcnKSB7ICdkaXJla3Rpb25zbGVpdHVuZycgfSBlbHNlIHsg +J2Z1ZWhydW5nc3N0ZWxsZScgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRS +ZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRh +dGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmopDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5p +cyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxv +Y2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBv +ayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXIn +IH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IEAoKQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkTmFtZV0pIHsgJGFs +dCA9IFtvYmplY3RbXV1AKCRhZG1pbi4kZmVsZE5hbWUpIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIFt2b2lkXShCYWNrdXAtQWRtaW5Kc29uICRmZWxkTmFtZSkNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1skZmVsZE5hbWVdKSB7ICRhZG1p +bi4kZmVsZE5hbWUgPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRh +ZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGZlbGROYW1lIC1Ob3RlUHJvcGVy +dHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpz +b25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg +ICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZTsgYWx0ID0gJGFsdCB9DQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAg +U2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQog +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMu +b2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5p +cy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICgk +ZmVsZE5hbWUgKyAnLmdlYWVuZGVydCcpIEB7IGFuemFobCA9ICRkYXRlbi5Db3VudCB9DQogICAg +ICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVp +Y2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAg +ICAgICAgICAjIEJlemVpY2hudW5nZW46IE9iamVrdCAoTWFwIGtleS0+bGFiZWwpLiBMZWVyZXMg +T2JqZWt0ID0gUmVzZXQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2Jl +emVpY2hudW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFk +bWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFk +LUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVy +cm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg +ICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAg +ICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAg +ICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpz +b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAn +YWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWlu +KSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNv +biBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhZG1pbi5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydiZXplaWNobnVuZ2VuJ10pIHsgJGFkbWluLmJlemVpY2hudW5n +ZW4gPSAkZGF0ZW4gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFk +ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ2JlemVpY2hudW5nZW4nIC1Ob3RlUHJvcGVydHlW +YWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25P +YmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAg +ICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +cG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiZXplaWNobnVuZ2VuLmdl +YWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA +eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFN0YXRpc3Rpay1CYXVrYXN0ZW4gKHNlbGJzdGdl +YmF1dGUgS2FjaGVsbikgKyBTdXBlclVzZXItTGF5b3V0LVJhc3Rlci4NCiAgICAgICAgICAgICMg +R2F0ZSBiZXd1c3N0IFNVIE9ERVIgR2VzYW10dmVyYW50d29ydGxpY2ggKG5pY2h0IFRlc3QtSXN0 +QWRtaW4pIOKAlCBkZXINCiAgICAgICAgICAgICMgQnVpbGRlciBsZWJ0IGltIFN0YXRpc3Rpay1U +YWIgdW5kIG11c3MgYXVjaCBmdWVyIEdlc2FtdHZlcmFudHdvcnRsaWNoZQ0KICAgICAgICAgICAg +IyBvaG5lIGFkbWluaXN0cmF0aW9uLVp1Z2FuZyBzcGVpY2hlcmJhciBzZWluLiBQYXJ0aWFsLU1l +cmdlIG51ciBkZXINCiAgICAgICAgICAgICMgYmVpZGVuIGJla2FubnRlbiBLZXlzOyBiZWlkZSBh +bHMgW29iamVjdFtdXSB6d2luZ2VuIChQUy01LjEtVW53cmFwKS4NCiAgICAgICAgICAgIGlmICgk +UGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhdGlzdGlrJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7 +DQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgKChUZXN0LUlzdEFkbWluKSAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQog +ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgQWRtaW5zIHVuZCBH +ZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVlcmZlbiBTdGF0aXN0aWstS2FjaGVsbiBhZW5kZXJuJyA0 +MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0g +UmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAg +ICAgICAgICRoYXRLYWNoZWxuID0gKCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmpl +Y3QuUHJvcGVydGllc1snc3RhdGlzdGlrS2FjaGVsbiddKQ0KICAgICAgICAgICAgICAgICRoYXRM +YXlvdXQgID0gKCRudWxsIC1uZSAkZGF0ZW4gLWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll +c1snc3RhdGlzdGlrTGF5b3V0J10pDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRu +dWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdl +Ym5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRm +YWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRLYWNoZWxuKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJGsgPSBbb2JqZWN0W11dQCgkZGF0ZW4uc3RhdGlzdGlrS2FjaGVsbikN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ3N0YXRpc3Rpa0thY2hlbG4nXSkgeyAkYWRtaW4uc3RhdGlzdGlrS2FjaGVsbiA9ICRrIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAt +Tm90ZVByb3BlcnR5TmFtZSAnc3RhdGlzdGlrS2FjaGVsbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRr +IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJGhhdExheW91dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsID0g +W29iamVjdFtdXUAoJGRhdGVuLnN0YXRpc3Rpa0xheW91dCkNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXRpc3Rpa0xheW91dCdd +KSB7ICRhZG1pbi5zdGF0aXN0aWtMYXlvdXQgPSAkbCB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YXRp +c3Rpa0xheW91dCcgLU5vdGVQcm9wZXJ0eVZhbHVlICRsIC1Gb3JjZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdh +ZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0 +dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgi +TG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhdGlzdGlrLmNvbmZpZy5nZWFlbmRl +cnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3Rh +dHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCg0KICAgICAgICAgICAgIyBTdGFuZGFyZHJlY2h0ZSAocmVndWxhZXJlIFVzZXIpOiBn +ZWdlbnNlaXRpZ2UgUGxhbnVuZyBqZSBEaWVuc3RncnVwcGUvDQogICAgICAgICAgICAjIFN0YW5k +b3J0LiBTVS1vbmx5LiBXaXJkIGluIEdldC1SZWNodGUgYWRkaXRpdiBpbiBlZGl0aWVyZW4gZWlu +Z2V3b2Jlbi4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhbmRhcmRy +ZWNodGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJV +c2VyIGR1ZXJmZW4gU3RhbmRhcmRyZWNodGUgYWVuZGVybicgNDAzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycg +NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0 +RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGdnID0gQCgpOyBpZiAoJGRhdGVuIC1hbmQgJGRh +dGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlZ2Vuc2VpdGlnR3J1cHBlbiddKSAgIHsgJGdnID0g +W3N0cmluZ1tdXUAoJGRhdGVuLmdlZ2Vuc2VpdGlnR3J1cHBlbiAgIHwgRm9yRWFjaC1PYmplY3Qg +eyBbc3RyaW5nXSRfIH0pIH0NCiAgICAgICAgICAgICAgICAkZ3MgPSBAKCk7IGlmICgkZGF0ZW4g +LWFuZCAkZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZ2VnZW5zZWl0aWdTdGFuZG9ydGUnXSkg +eyAkZ3MgPSBbc3RyaW5nW11dQCgkZGF0ZW4uZ2VnZW5zZWl0aWdTdGFuZG9ydGUgfCBGb3JFYWNo +LU9iamVjdCB7IFtzdHJpbmddJF8gfSkgfQ0KICAgICAgICAgICAgICAgICRzciA9IEB7IGdlZ2Vu +c2VpdGlnR3J1cHBlbiA9ICRnZzsgZ2VnZW5zZWl0aWdTdGFuZG9ydGUgPSAkZ3MgfQ0KICAgICAg +ICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQog +ICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdh +ZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25P +YmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx +ICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2Fk +bWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +YWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhbmRhcmRSZWNodGUnXSkgeyAkYWRtaW4uc3Rh +bmRhcmRSZWNodGUgPSAkc3IgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1p +biB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YW5kYXJkUmVjaHRlJyAtTm90ZVBy +b3BlcnR5VmFsdWUgJHNyIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1K +c29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAg +ICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQt +RXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhbmRhcmRyZWNo +dGUuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3Bv +bnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl +DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgRS1NYWlsLVZvcmxhZ2VuOiBPYmpla3Qg +KG5pY2h0IEFycmF5KSDigJQgZWlnZW5lciBIYW5kbGVyLg0KICAgICAgICAgICAgaWYgKCRQYXRo +IC1lcSAnL2FwaS9hZG1pbi9lbWFpbHZvcmxhZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsg +Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20t +SnNvbg0KICAgICAgICAgICAgICAgICMgUmljaC1UZXh0LUJvZHkgamUgVm9ybGFnZSBzZXJ2ZXJz +ZWl0aWcgYmVyZWluaWdlbiAoU3RvcmVkLVhTUykuDQogICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1uZSAkZGF0ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGRhdGVu +LlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR2ID0gJHAu +VmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHYgLWFuZCAkdi5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10gLWFuZCAoJHYudGV4dCAtaXMgW3N0cmluZ10pKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHYudGV4dCA9IENvbnZlcnRUby1TYWZlUmlj +aEh0bWwgJHYudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg +PSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2Nr +RXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sg +PSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9 +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGll +c1snZW1haWxWb3JsYWdlbiddKSB7ICRhZG1pbi5lbWFpbFZvcmxhZ2VuID0gJGRhdGVuIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv +cGVydHlOYW1lICdlbWFpbFZvcmxhZ2VuJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3Jj +ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29u JyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9r ID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRj aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhs ZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2Nr RXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhdGlzdGlrLmNvbmZpZy5nZWFlbmRlcnQnIEB7fQ0K -ICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dl -c3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K -ICAgICAgICAgICAgIyBTdGFuZGFyZHJlY2h0ZSAocmVndWxhZXJlIFVzZXIpOiBnZWdlbnNlaXRp -Z2UgUGxhbnVuZyBqZSBEaWVuc3RncnVwcGUvDQogICAgICAgICAgICAjIFN0YW5kb3J0LiBTVS1v -bmx5LiBXaXJkIGluIEdldC1SZWNodGUgYWRkaXRpdiBpbiBlZGl0aWVyZW4gZWluZ2V3b2Jlbi4N -CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhbmRhcmRyZWNodGUnIC1h -bmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1J -c3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJm -ZW4gU3RhbmRhcmRyZWNodGUgYWVuZGVybicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u -DQogICAgICAgICAgICAgICAgJGdnID0gQCgpOyBpZiAoJGRhdGVuIC1hbmQgJGRhdGVuLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ2dlZ2Vuc2VpdGlnR3J1cHBlbiddKSAgIHsgJGdnID0gW3N0cmluZ1td -XUAoJGRhdGVuLmdlZ2Vuc2VpdGlnR3J1cHBlbiAgIHwgRm9yRWFjaC1PYmplY3QgeyBbc3RyaW5n -XSRfIH0pIH0NCiAgICAgICAgICAgICAgICAkZ3MgPSBAKCk7IGlmICgkZGF0ZW4gLWFuZCAkZGF0 -ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZ2VnZW5zZWl0aWdTdGFuZG9ydGUnXSkgeyAkZ3MgPSBb -c3RyaW5nW11dQCgkZGF0ZW4uZ2VnZW5zZWl0aWdTdGFuZG9ydGUgfCBGb3JFYWNoLU9iamVjdCB7 -IFtzdHJpbmddJF8gfSkgfQ0KICAgICAgICAgICAgICAgICRzciA9IEB7IGdlZ2Vuc2VpdGlnR3J1 -cHBlbiA9ICRnZzsgZ2VnZW5zZWl0aWdTdGFuZG9ydGUgPSAkZ3MgfQ0KICAgICAgICAgICAgICAg -ICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg -ICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29u -JyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2Fk -bWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikg -eyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24g -bmljaHQgbGVzYmFyJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNP -YmplY3QuUHJvcGVydGllc1snc3RhbmRhcmRSZWNodGUnXSkgeyAkYWRtaW4uc3RhbmRhcmRSZWNo -dGUgPSAkc3IgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRhZG1pbiB8IEFkZC1N -ZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJ3N0YW5kYXJkUmVjaHRlJyAtTm90ZVByb3BlcnR5VmFs -dWUgJHNyIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0 -ICdhZG1pbi5qc29uJyAkYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg -cmV0dXJuIEB7IG9rID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJl -c3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhbmRhcmRyZWNodGUuZ2VhZW5k -ZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0 -YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICMgRS1NYWlsLVZvcmxhZ2VuOiBPYmpla3QgKG5pY2h0IEFy -cmF5KSDigJQgZWlnZW5lciBIYW5kbGVyLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw -aS9hZG1pbi9lbWFpbHZvcmxhZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRi -b2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkp -IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg -ICAgICAgICAgICAgICMgUmljaC1UZXh0LUJvZHkgamUgVm9ybGFnZSBzZXJ2ZXJzZWl0aWcgYmVy -ZWluaWdlbiAoU3RvcmVkLVhTUykuDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkZGF0 -ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJGRhdGVuLlBTT2JqZWN0 -LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR2ID0gJHAuVmFsdWUNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHYgLWFuZCAkdi5QU09iamVjdC5Q -cm9wZXJ0aWVzWyd0ZXh0J10gLWFuZCAoJHYudGV4dCAtaXMgW3N0cmluZ10pKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJHYudGV4dCA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwgJHYu -dGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0K -ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg -PSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 -IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZW1haWxW -b3JsYWdlbiddKSB7ICRhZG1pbi5lbWFpbFZvcmxhZ2VuID0gJGRhdGVuIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l -ICdlbWFpbFZvcmxhZ2VuJyAtTm90ZVByb3BlcnR5VmFsdWUgJGRhdGVuIC1Gb3JjZSB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJyAkYWRtaW4g -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IG9rID0gJHRydWUg -fQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikg -NTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkbG9ja0VyZ2VibmlzLm9rKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMu -bXNnICRsb2NrRXJnZWJuaXMuc3RhdHVzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3Jp -dGUtTG9nRWludHJhZyAnZW1haWx2b3JsYWdlbi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAg -ICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9 -DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg -IyBFLU1haWwtVHJpZ2dlci1Lb25maWcgKHBybyBUcmlnZ2VyOiBha3RpdiArIEVtcGZhZW5nZXIt -VGFncykg4oCUDQogICAgICAgICAgICAjIGF1c3NjaGxpZXNzbGljaCBTdGV1ZXJ1bmcgZnVlciBk -ZW4gRnJvbnRlbmQtbWFpbHRvOi1EaXNwYXRjaGVyLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l -cSAnL2FwaS9hZG1pbi9lbWFpbHRyaWdnZXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVz -cG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u -DQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAg -dHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmls -ZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJl -YWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -bnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBt -c2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbWFpbFRyaWdnZXInXSkgeyAkYWRt -aW4uZW1haWxUcmlnZ2VyID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug -eyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlbWFpbFRyaWdnZXInIC1O -b3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgV3JpdGUtTG9nRWludHJhZyAnZW1haWx2b3JsYWdlbi5nZWFlbmRlcnQnIEB7fQ0KICAg +ICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlc3Bl +aWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg +ICAgICAgICAgIyBFLU1haWwtVHJpZ2dlci1Lb25maWcgKHBybyBUcmlnZ2VyOiBha3RpdiArIEVt +cGZhZW5nZXItVGFncykg4oCUDQogICAgICAgICAgICAjIGF1c3NjaGxpZXNzbGljaCBTdGV1ZXJ1 +bmcgZnVlciBkZW4gRnJvbnRlbmQtbWFpbHRvOi1EaXNwYXRjaGVyLg0KICAgICAgICAgICAgaWYg +KCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9lbWFpbHRyaWdnZXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BV +VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1F +cnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycg +NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0 +RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAg +ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9r +ZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRh +ZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVz +ID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKCRhZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydlbWFpbFRyaWdnZXIn +XSkgeyAkYWRtaW4uZW1haWxUcmlnZ2VyID0gJGRhdGVuIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlbWFpbFRy +aWdnZXInIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxs +DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAg +ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRp +bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJn +ZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tF +cmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYW56ID0gaWYgKCRk +YXRlbikgeyAoJGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMgfCBNZWFzdXJlLU9iamVjdCkuQ291 +bnQgfSBlbHNlIHsgMCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZW1haWx0 +cmlnZ2VyLmdlYWVuZGVydCcgQHsgYW56YWhsX3RyaWdnZXIgPSAkYW56IH0NCiAgICAgICAgICAg +ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcg +fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICRhZG1pbktleXMgPSBAew0KICAgICAgICAgICAgICAgICcvYXBpL2FkbWluL2ZlaWVydGFnZScg +ICAgICA9ICdmZWllcnRhZ2UnDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vZmVyaWVuJyAg +ICAgICAgID0gJ2ZlcmllbicNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zb25kZXJ0ZXJt +aW5lJyAgPSAnc29uZGVydGVybWluZScNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zdGFu +ZG9ydGUnICAgICAgPSAnc3RhbmRvcnRlJw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYg +KCRhZG1pbktleXMuQ29udGFpbnNLZXkoJFBhdGgpIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsN +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgJGtleSA9ICRhZG1pbktleXNbJFBhdGhdDQogICAg +ICAgICAgICAgICAgIyBAKC4uLikgZXJ6d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50IChQ +UyA1LjEgZW50cGFja3Qgc29uc3QpLg0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkg +fCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAo +JGJvZHlPYmopDQogICAgICAgICAgICAgICAgIyBzb25kZXJ0ZXJtaW5lIHRyYWdlbiBSaWNoLVRl +eHQgKHRleHQpIOKAlCBzZXJ2ZXJzZWl0aWcgYmVyZWluaWdlbi4NCiAgICAgICAgICAgICAgICBp +ZiAoJGtleSAtZXEgJ3NvbmRlcnRlcm1pbmUnKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVh +Y2ggKCRlIGluICRkYXRlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1u +ZSAkZSAtYW5kICRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSAtYW5kICgkZS50ZXh0IC1p +cyBbc3RyaW5nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZS50ZXh0ID0gQ29u +dmVydFRvLVNhZmVSaWNoSHRtbCAkZS50ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +JGxvY2tFcmdlYm5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg +ICAgICAgICAgJGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24n +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRt +aW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7 +IHJldHVybiBAeyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBu +aWNodCBsZXNiYXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHdpcGVNc2cgPSBUZXN0 +LVdpcGVTY2h1dHogJGtleSAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBz +dGF0dXMgPSA0MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +W3ZvaWRdKEJhY2t1cC1BZG1pbkpzb24gJGtleSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1ska2V5XSkgeyAkYWRtaW4uJGtleSA9ICRkYXRl +biB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAt +Tm90ZVByb3BlcnR5TmFtZSAka2V5IC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRh +ZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAk +dHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjog +JF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdl +Ym5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICBXcml0ZS1Mb2dFaW50cmFnICIka2V5LmdlYWVuZGVydCIgQHt9DQogICAgICAgICAgICAgICAg +U2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQ +YXRoIC1lcSAnL2FwaS9hZG1pbi9laW5zdGVsbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQn +KSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQx +MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZy +b20tSnNvbg0KICAgICAgICAgICAgICAgICMgUmljaC1UZXh0IHNlcnZlcnNlaXRpZyBzYW5pdGlz +aWVyZW4g4oCUIGRpZXNlciBQZmFkIHNwZWljaGVydA0KICAgICAgICAgICAgICAgICMgaW5mb3Rl +eHQvaGlsZmV0ZXh0L2JlZGllbnVuZ3N0ZXh0ZS9pbXByZXNzdW0vc3VwcG9ydGluZm8vDQogICAg +ICAgICAgICAgICAgIyBzY2hsaWVzc2luZm8sIHdhciBhYmVyIGJpc2hlciBhbSBTZXJ2ZXItU2Fu +aXRpemVyIHZvcmJlaSAoZGVyDQogICAgICAgICAgICAgICAgIyBudXIgYW0gVm9sbC1QVVQgL2Fw +aS9hZG1pbiBoaW5nKS4gU2NodXR6IGdlZ2VuIG1hbmlwdWxpZXJ0ZW4NCiAgICAgICAgICAgICAg +ICAjIENsaWVudCAvIERpcmVrdC1BUEktQ2FsbC4NCiAgICAgICAgICAgICAgICBJbnZva2UtQWRt +aW5SaWNodGV4dFNhbml0aXplICRkYXRlbg0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg +PSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2Nr +RXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sg +PSAkZmFsc2U7IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9 +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrIGluICdqYWhyJywnaW5mb3Rl +eHQnLCdzdXBwb3J0aW5mbycsJ3NjaGxpZXNzaW5mbycsJ2hpbGZldGV4dCcsJ2JlZGllbnVuZ3N0 +ZXh0ZScsJ3BhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJywnZW1haWxBdXRvRG9tYWluJywnYXZh +dGFyR3JvZXNzZScsJ2ltcHJlc3N1bScsJ3N1cHBvcnRNYWlsVGV4dCcsJ2VkaXRvclRyaWdnZXIn +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9w +ZXJ0aWVzWyRrXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWlu +LlBTT2JqZWN0LlByb3BlcnRpZXNbJGtdKSB7ICRhZG1pbi4kayA9ICRkYXRlbi4kayB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1O +b3RlUHJvcGVydHlOYW1lICRrIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4uJGsgLUZvcmNlIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAjIGVkaXRvclRyaWdnZXIgaXN0IGVpbiBFbnVtIOKA +lCBmcmVtZGUgV2VydGUgKERpcmVrdC1BUEkpIGF1Zg0KICAgICAgICAgICAgICAgICAgICAgICAg +IyBkZW4gRGVmYXVsdCBrbGVtbWVuLCBkYW1pdCBuaWUgTXVlbGwgaW4gYWRtaW4uanNvbiBsYW5k +ZXQuDQogICAgICAgICAgICAgICAgICAgICAgICAkZXRWYWwgPSBpZiAoJGFkbWluLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJ2VkaXRvclRyaWdnZXInXSkgeyBbc3RyaW5nXSRhZG1pbi5lZGl0b3JUcmln +Z2VyIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAKCdyZWNodHMn +LCdsaW5rcycsJ21pdHRlJywnZG9wcGVsJykgLW5vdGNvbnRhaW5zICRldFZhbCkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZWRp +dG9yVHJpZ2dlciddKSB7ICRhZG1pbi5lZGl0b3JUcmlnZ2VyID0gJ3JlY2h0cycgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv +cGVydHlOYW1lICdlZGl0b3JUcmlnZ2VyJyAtTm90ZVByb3BlcnR5VmFsdWUgJ3JlY2h0cycgLUZv +cmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg IFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu ZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2sp IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5z -dGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYW56ID0gaWYgKCRkYXRlbikgeyAo -JGRhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMgfCBNZWFzdXJlLU9iamVjdCkuQ291bnQgfSBlbHNl -IHsgMCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZW1haWx0cmlnZ2VyLmdl -YWVuZGVydCcgQHsgYW56YWhsX3RyaWdnZXIgPSAkYW56IH0NCiAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfQ0KICAgICAg -ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRhZG1pbktl -eXMgPSBAew0KICAgICAgICAgICAgICAgICcvYXBpL2FkbWluL2ZlaWVydGFnZScgICAgICA9ICdm -ZWllcnRhZ2UnDQogICAgICAgICAgICAgICAgJy9hcGkvYWRtaW4vZmVyaWVuJyAgICAgICAgID0g -J2ZlcmllbicNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zb25kZXJ0ZXJtaW5lJyAgPSAn -c29uZGVydGVybWluZScNCiAgICAgICAgICAgICAgICAnL2FwaS9hZG1pbi9zdGFuZG9ydGUnICAg -ICAgPSAnc3RhbmRvcnRlJw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRhZG1pbktl -eXMuQ29udGFpbnNLZXkoJFBhdGgpIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -J0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv -ZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg -eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJGtleSA9ICRhZG1pbktleXNbJFBhdGhdDQogICAgICAgICAgICAg -ICAgIyBAKC4uLikgZXJ6d2luZ3QgQXJyYXkgYXVjaCBiZWkgMSBFbGVtZW50IChQUyA1LjEgZW50 -cGFja3Qgc29uc3QpLg0KICAgICAgICAgICAgICAgICRib2R5T2JqID0gJGJvZHkgfCBDb252ZXJ0 -RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdGVuID0gW29iamVjdFtdXUAoJGJvZHlPYmop -DQogICAgICAgICAgICAgICAgIyBzb25kZXJ0ZXJtaW5lIHRyYWdlbiBSaWNoLVRleHQgKHRleHQp -IOKAlCBzZXJ2ZXJzZWl0aWcgYmVyZWluaWdlbi4NCiAgICAgICAgICAgICAgICBpZiAoJGtleSAt -ZXEgJ3NvbmRlcnRlcm1pbmUnKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlIGlu -ICRkYXRlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkZSAtYW5k -ICRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSAtYW5kICgkZS50ZXh0IC1pcyBbc3RyaW5n -XSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZS50ZXh0ID0gQ29udmVydFRvLVNh -ZmVSaWNoSHRtbCAkZS50ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGxvY2tFcmdl -Ym5pcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg -JGxvY2tFcmdlYm5pcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ2FkbWluLmpzb24nIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRhZG1pbiA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluKSB7IHJldHVybiBA -eyBvayA9ICRmYWxzZTsgc3RhdHVzID0gNTAwOyBtc2cgPSAnYWRtaW4uanNvbiBuaWNodCBsZXNi -YXInIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHdpcGVNc2cgPSBUZXN0LVdpcGVTY2h1 -dHogJGtleSAkZGF0ZW4gJGFkbWluICRSZXF1ZXN0ICRib2R5T2JqDQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJHdpcGVNc2cpIHsgcmV0dXJuIEB7IG9rID0gJGZhbHNlOyBzdGF0dXMgPSA0 -MDk7IG1zZyA9ICR3aXBlTXNnIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdKEJh -Y2t1cC1BZG1pbkpzb24gJGtleSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWRtaW4u -UFNPYmplY3QuUHJvcGVydGllc1ska2V5XSkgeyAkYWRtaW4uJGtleSA9ICRkYXRlbiB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGFkbWluIHwgQWRkLU1lbWJlciAtTm90ZVByb3Bl -cnR5TmFtZSAka2V5IC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4gLUZvcmNlIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91 -dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQog -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7 -IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRs -b2NrRXJnZWJuaXMub2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cg -JGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M -b2dFaW50cmFnICIka2V5LmdlYWVuZGVydCIgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29u -T2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn -L2FwaS9hZG1pbi9laW5zdGVsbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdLZWluZSBBZG1pbi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg -ICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJv -ZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRkYXRlbiA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0K -ICAgICAgICAgICAgICAgICMgUmljaC1UZXh0IHNlcnZlcnNlaXRpZyBzYW5pdGlzaWVyZW4g4oCU -IGRpZXNlciBQZmFkIHNwZWljaGVydA0KICAgICAgICAgICAgICAgICMgaW5mb3RleHQvaGlsZmV0 -ZXh0L2JlZGllbnVuZ3N0ZXh0ZS9pbXByZXNzdW0vc3VwcG9ydGluZm8vDQogICAgICAgICAgICAg -ICAgIyBzY2hsaWVzc2luZm8sIHdhciBhYmVyIGJpc2hlciBhbSBTZXJ2ZXItU2FuaXRpemVyIHZv -cmJlaSAoZGVyDQogICAgICAgICAgICAgICAgIyBudXIgYW0gVm9sbC1QVVQgL2FwaS9hZG1pbiBo -aW5nKS4gU2NodXR6IGdlZ2VuIG1hbmlwdWxpZXJ0ZW4NCiAgICAgICAgICAgICAgICAjIENsaWVu -dCAvIERpcmVrdC1BUEktQ2FsbC4NCiAgICAgICAgICAgICAgICBJbnZva2UtQWRtaW5SaWNodGV4 -dFNhbml0aXplICRkYXRlbg0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0K -ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMg -PSBJbnZva2UtV2l0aEZpbGVMb2NrICdhZG1pbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAkYWRtaW4gPSBSZWFkLUpzb25PYmplY3QgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRhZG1pbikgeyByZXR1cm4gQHsgb2sgPSAkZmFsc2U7 -IHN0YXR1cyA9IDUwMDsgbXNnID0gJ2FkbWluLmpzb24gbmljaHQgbGVzYmFyJyB9IH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrIGluICdqYWhyJywnaW5mb3RleHQnLCdzdXBw -b3J0aW5mbycsJ3NjaGxpZXNzaW5mbycsJ2hpbGZldGV4dCcsJ2JlZGllbnVuZ3N0ZXh0ZScsJ3Bh -cGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJywnZW1haWxBdXRvRG9tYWluJywnYXZhdGFyR3JvZXNz -ZScsJ2ltcHJlc3N1bScsJ3N1cHBvcnRNYWlsVGV4dCcsJ2VkaXRvclRyaWdnZXInKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRr -XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGFkbWluLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJGtdKSB7ICRhZG1pbi4kayA9ICRkYXRlbi4kayB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVy -dHlOYW1lICRrIC1Ob3RlUHJvcGVydHlWYWx1ZSAkZGF0ZW4uJGsgLUZvcmNlIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAjIGVkaXRvclRyaWdnZXIgaXN0IGVpbiBFbnVtIOKAlCBmcmVtZGUg -V2VydGUgKERpcmVrdC1BUEkpIGF1Zg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBkZW4gRGVm -YXVsdCBrbGVtbWVuLCBkYW1pdCBuaWUgTXVlbGwgaW4gYWRtaW4uanNvbiBsYW5kZXQuDQogICAg -ICAgICAgICAgICAgICAgICAgICAkZXRWYWwgPSBpZiAoJGFkbWluLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ2VkaXRvclRyaWdnZXInXSkgeyBbc3RyaW5nXSRhZG1pbi5lZGl0b3JUcmlnZ2VyIH0gZWxz -ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAKCdyZWNodHMnLCdsaW5rcycs -J21pdHRlJywnZG9wcGVsJykgLW5vdGNvbnRhaW5zICRldFZhbCkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkYWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snZWRpdG9yVHJpZ2dl -ciddKSB7ICRhZG1pbi5lZGl0b3JUcmlnZ2VyID0gJ3JlY2h0cycgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGVsc2UgeyAkYWRtaW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l -ICdlZGl0b3JUcmlnZ2VyJyAtTm90ZVByb3BlcnR5VmFsdWUgJ3JlY2h0cycgLUZvcmNlIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpz -b25PYmplY3QgJ2FkbWluLmpzb24nICRhZG1pbiB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAg -ICAgICAgICByZXR1cm4gQHsgb2sgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAg +dGF0dXM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdlaW5z +dGVsbHVuZ2VuLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFBMQU5VTkcgPT09 +PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZycgLWFuZCAkTWV0aG9k +IC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICR0eHQgPSBSZWFkLVRleHRGaWxlICdwbGFu +dW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkdHh0KSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNCB9DQogICAgICAg +ICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgVmVyc2lvbnMtU3RlbXBlbCAo +bXRpbWUtVGlja3MpIGZ1ZXIgb3B0aW1pc3Rpc2NoZSBTcGVycmUgZGVzDQogICAgICAgICAgICAg +ICAgICAgICMgRXhjZWwtSW1wb3J0cy4gRGVyIENsaWVudCBzY2hpY2t0IGlobiBiZWltIFBVVCB6 +dXJ1ZWNrLg0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgJHBwViA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBwVikgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5IZWFkZXJzLkFkZCgnWC1QbGFudW5nLVZlcnNp +b24nLCBbc3RyaW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0 +Yy5UaWNrcykNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +fSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAk +dHh0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1l +dGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1p +bikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn +ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlm +eS1Xcml0ZSBhdG9tYXIgaW4gZGVyIGdsZWljaGVuIFNwZXJyZSB3aWUgZGllIEVpbnplbC0NCiAg +ICAgICAgICAgICAgICAjIHplbGwtRW5kcG9pbnRzLCBkYW1pdCBkZXIgVm9sbC1JbXBvcnQgbmlj +aHQgbWl0IHBhcmFsbGVsZW4NCiAgICAgICAgICAgICAgICAjIFplbGwtU2NocmVpYnZvcmdhZW5n +ZW4gdmVyemFobnQuIE9wdGlvbmFsZXIgVmVyc2lvbnMtQ2hlY2sNCiAgICAgICAgICAgICAgICAj +IChvcHRpbWlzdGlzY2hlIE5lYmVubGFldWZpZ2tlaXQpOiBoYXQgZGVyIENsaWVudCBlaW5lbg0K +ICAgICAgICAgICAgICAgICMgSWYtUGxhbnVuZy1WZXJzaW9uLUhlYWRlciBnZXNjaGlja3QgdW5k +IHN0aW1tdCBkZXIgbmljaHQgbWVocg0KICAgICAgICAgICAgICAgICMgbWl0IGRlbSBha3R1ZWxs +ZW4gU3RhbmQgdWViZXJlaW4sIHd1cmRlIHp3aXNjaGVuemVpdGxpY2gNCiAgICAgICAgICAgICAg +ICAjIGdlc2NocmllYmVuIC0+IDQwOSwgTklDSFRTIHdpcmQgdWViZXJzY2hyaWViZW4uDQogICAg +ICAgICAgICAgICAgJGVyd2FydGV0ZVZlcnNpb24gPSAkUmVxdWVzdC5IZWFkZXJzWydJZi1QbGFu +dW5nLVZlcnNpb24nXQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAg +ICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJ +bnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkZXJ3YXJ0ZXRlVmVyc2lvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICRwcFYgPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkYWt0dWVsbGVWZXJzaW9uID0gJycNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcHBWKSB7ICRha3R1ZWxsZVZlcnNp +b24gPSBbc3RyaW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0 +Yy5UaWNrcyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRha3R1ZWxsZVZlcnNp +b24gLW5lICRlcndhcnRldGVWZXJzaW9uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIHJldHVybiBAeyB0eXAgPSAna29uZmxpa3QnOyBha3R1ZWxsID0gJGFrdHVlbGxlVmVyc2lv +biB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtVGV4dEZpbGUgJ3BsYW51bmcuanNv +bicgJGJvZHkgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5 +cCA9ICdvaycgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRj +aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhs +ZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICBpZiAoJGxvY2tFcmdlYm5pcy50eXAgLWVxICdrb25mbGlrdCcpIHsNCiAgICAgICAgICAgICAg +ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAg +ICAgZmVobGVyICAgICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAg +bWVsZHVuZyAgICAgICAgID0gJ0RpZSBQbGFudW5nIHd1cmRlIHp3aXNjaGVuemVpdGxpY2ggdm9u +IGVpbmVyIGFuZGVyZW4gUGVyc29uIGdlYWVuZGVydC4nDQogICAgICAgICAgICAgICAgICAgICAg +ICBha3R1ZWxsZVZlcnNpb24gPSAkbG9ja0VyZ2VibmlzLmFrdHVlbGwNCiAgICAgICAgICAgICAg +ICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg +PSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlJyAtYW5kICRN +ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRS +ZXF1ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRhID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdHVtID0g +JGEuZGF0dW0NCiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBlcnNvbklk +DQogICAgICAgICAgICAgICAgJHdlcnQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snd2Vy +dCddKSB7ICRhLndlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICMgT3B0aW1pc3Rp +Yy1Db25jdXJyZW5jeTogV2VubiBkZXIgQ2xpZW50IHNlaW5lbiB6dWxldHp0IGdlc2VoZW5lbg0K +ICAgICAgICAgICAgICAgICMgV2VydCBtaXRsaWVmZXJ0LCBwcnVlZmVuIHdpciB2b3IgZGVtIFNj +aHJlaWJlbiBvYiBkZXIgU2VydmVyDQogICAgICAgICAgICAgICAgIyBub2NoIGRlbnNlbGJlbiBT +dGFuZCBoYXQuIE1pc21hdGNoIC0+IDQwOSBtaXQgYWt0dWVsbGVyV2VydC4NCiAgICAgICAgICAg +ICAgICAkaGF0RXJ3YXJ0ZXQgPSAkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldGVyQWx0 +ZXJXZXJ0J10NCiAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXQgPSBpZiAoJGhhdEVyd2FydGV0KSB7 +IFtzdHJpbmddJGEuZXJ3YXJ0ZXRlckFsdGVyV2VydCB9IGVsc2UgeyAkbnVsbCB9DQoNCiAgICAg +ICAgICAgICAgICAjIEVkaXQtUmVjaHQgZ2VnZW4gYWt0dWVsbGVuIFN0YW5kIHBydWVmZW4gKG5v +Y2ggb2huZSBMb2NrIOKAlCBudXIgTG9va3VwKQ0KICAgICAgICAgICAgICAgICRwbGFudW5nQ2hl +Y2sgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAo +JG51bGwgLWVxICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BsYW51bmcu +anNvbiBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHpp +ZWxQZXJzb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZ0NoZWNrLnBlcnNv +bmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiBAKCRwbGFudW5nQ2hl +Y2sucGVyc29uZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcHAu +aWQgLWVxICRwZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRwcDsgYnJlYWsgfQ0KICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 +IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAgICAgICAgICAgICAg +ICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyBmdWVyIGRpZXNl +IFplbGxlJyA0MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg +ICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gTG9jazoNCiAgICAgICAgICAgICAgICAk +Y2xpZW50UXVpdHRpZXJ0ID0gKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3VudGVyYmVzZXR6dW5n +U2NoaWNodCddIC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KQ0KICAgICAgICAgICAgICAg +ICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg +ICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpz +b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0 +ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRw +bGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxh +bnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVy +dHlOYW1lICdlaW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVj +dCkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkcGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0 +dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlIHwg +QWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChO +ZXctT2JqZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICRhbHRlciA9ICcnDQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJz +b25JZF0pIHsgJGFsdGVyID0gW3N0cmluZ10kcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJz +b25JZCB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJyZW5j +eS1DaGVjaw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRFcndhcnRldCAtYW5kICRl +cndhcnRldCAtbmUgJGFsdGVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu +IEB7IHR5cCA9ICdrb25mbGlrdCc7IGFrdHVlbGwgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIEZ1ZWhydW5ncy1VbnRlcmJl +c2V0enVuZyAoVmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIpIC0gZ2xlaWNoZXMgUHJpbnppcCB3aWUg +dm9yaGVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBqZXR6dCBhYmVyIGdlZ2VuIGRlbiBn +ZWxvY2t0ZW4gU3RhbmQuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkY2xpZW50 +UXVpdHRpZXJ0IC1hbmQgKFRlc3QtSW5WZXJiaW5kbGljaGtlaXQgJGRhdHVtKSkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRhbHRlU2NoaWNodCA9IEdldC1GdWVocnVuZ3NTY2hpY2h0 +TGV0dGVyICRhbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlU2NoaWNodCA9 +IEdldC1GdWVocnVuZ3NTY2hpY2h0TGV0dGVyICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRhbHRlU2NoaWNodCAtYW5kICRhbHRlU2NoaWNodCAtbmUgJG5ldWVTY2hpY2h0 +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRha3R1ZWxsQ291bnQgPSBHZXQt +RnVlaHJ1bmdzQ291bnQgJHBsYW51bmcgJGRhdHVtICRhbHRlU2NoaWNodA0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoKCRha3R1ZWxsQ291bnQgLSAxKSAtbHQgMikgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICd1bnRlcmJl +c2V0enVuZyc7IHNjaGljaHQgPSAkYWx0ZVNjaGljaHQ7IGFrdHVlbGxDb3VudCA9ICRha3R1ZWxs +Q291bnQ7IGFsdGVyID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHdlcnQgLW9yIFtzdHJpbmdd +OjpJc051bGxPcldoaXRlU3BhY2UoJHdlcnQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVy +c29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRy +YWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0 +dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7ICRwbGFudW5nLmVpbnRyYWVnZS4k +ZGF0dW0uJHBlcnNvbklkID0gJHdlcnQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs +c2UgeyAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5 +TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2Jq +ZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAg +ICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBhbHRlciA9ICRhbHRlciB9DQogICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAg +ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVl +DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCRsb2NrRXJnZWJuaXMu +dHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNn +ICRsb2NrRXJnZWJuaXMuY29kZTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9j +a0VyZ2VibmlzLnR5cCAtZXEgJ2tvbmZsaWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIg +ICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAg +ICA9ICdEaWVzZSBaZWxsZSB3dXJkZSBpbnp3aXNjaGVuIGdlYWVuZGVydC4nDQogICAgICAgICAg +ICAgICAgICAgICAgICBha3R1ZWxsZXJXZXJ0ID0gJGxvY2tFcmdlYm5pcy5ha3R1ZWxsDQogICAg +ICAgICAgICAgICAgICAgIH0gNDA5DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEg +J3VudGVyYmVzZXR6dW5nJykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg +JFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgICA9ICdG +dWVocnVuZ3MtVW50ZXJiZXNldHp1bmcnDQogICAgICAgICAgICAgICAgICAgICAgICBrb25mbGlr +dFR5cCAgICA9ICd1bnRlcmJlc2V0enVuZycNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGlj +aHQgICAgICAgID0gJGxvY2tFcmdlYm5pcy5zY2hpY2h0DQogICAgICAgICAgICAgICAgICAgICAg +ICBha3R1ZWxsQ291bnQgICA9ICRsb2NrRXJnZWJuaXMuYWt0dWVsbENvdW50DQogICAgICAgICAg +ICAgICAgICAgICAgICBhbHRlcldlcnQgICAgICA9ICRsb2NrRXJnZWJuaXMuYWx0ZXINCiAgICAg +ICAgICAgICAgICAgICAgICAgIG5ldWVyV2VydCAgICAgID0gJHdlcnQNCiAgICAgICAgICAgICAg +ICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQoNCiAgICAgICAgICAgICAgICAkYWx0ZXIgPSAkbG9ja0VyZ2VibmlzLmFsdGVyDQogICAg +ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGUuZ2VhZW5kZXJ0JyBAeyBkYXR1bSA9 +ICRkYXR1bTsgcGVyc29uSWQgPSAkcGVyc29uSWQ7IGFsdGVyV2VydCA9ICIkYWx0ZXIiOyBuZXVl +cldlcnQgPSAiJHdlcnQiIH0NCiAgICAgICAgICAgICAgICAjIExpdmUtU3luYzogQ2hhbmdlLUxv +ZyBmdWVyIGRlbiBzeW5jLXdvcmtlci4NCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWlu +dHJhZyAnemVsbGUnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQog +ICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg +ICAgIGFsdCAgICAgID0gIiRhbHRlciINCiAgICAgICAgICAgICAgICAgICAgbmV1ICAgICAgPSAi +JHdlcnQiDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBVbnRlcmJlc2V0 +enVuZ3MtUXVpdHR1bmc6IGV4dHJhIExvZ2J1Y2gtRWludHJhZywgZGVuIEZhY2hhdWZzaWNodC9X +TCBzZWhlbiBzb2xsDQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNb +J3VudGVyYmVzZXR6dW5nU2NoaWNodCddIC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KSB7 +DQogICAgICAgICAgICAgICAgICAgICRzY2hpY2h0TGV0dGVyID0gW3N0cmluZ10kYS51bnRlcmJl +c2V0enVuZ1NjaGljaHQNCiAgICAgICAgICAgICAgICAgICAgJHNjaGljaHRUZXh0ID0gc3dpdGNo +ICgkc2NoaWNodExldHRlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJ0YnIHsgJ0ZydWVo +c2NoaWNodCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJ1MnIHsgJ1NwYWV0c2NoaWNodCcg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgJ04nIHsgJ05hY2h0c2NoaWNodCcgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgZGVmYXVsdCB7ICRzY2hpY2h0TGV0dGVyIH0NCiAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkb2VUeHQgPSAnJw0KICAgICAgICAgICAg +ICAgICAgICBpZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzWydvZSddKSB7ICRvZVR4dCA9IFtzdHJpbmddJHppZWxQZXJzb24ub2UgfQ0KICAgICAgICAg +ICAgICAgICAgICAkbmFtZVR4dCA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgkemllbFBl +cnNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHZuID0gJyc7IGlmICgkemllbFBlcnNv +bi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJHZuID0gW3N0cmluZ10kemllbFBl +cnNvbi52b3JuYW1lIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lVHh0ID0gKCIkdm4g +JCgkemllbFBlcnNvbi5uYW1lKSIpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3VudGVyYmVzZXR6dW5nLnF1aXR0aWVy +dCcgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICA9ICRkYXR1bQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg +ICAgICAgICBwZXJzb24gICAgPSAkbmFtZVR4dA0KICAgICAgICAgICAgICAgICAgICAgICAgb2Ug +ICAgICAgID0gJG9lVHh0DQogICAgICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgPSAkc2No +aWNodFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICIkYWx0ZXIiDQog +ICAgICAgICAgICAgICAgICAgICAgICBuZXVlcldlcnQgPSAiJHdlcnQiDQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBQaGFzZSBELjMg +KDIwMjYtMDUtMjEpOiB3ZW5uIGRpZSBLcmFua21lbGR1bmcgenVydWVja2dlbm9tbWVuDQogICAg +ICAgICAgICAgICAgIyB3aXJkIChhbHRlciBXZXJ0IHdhciBrci9LdXIsIG5ldWVyIFdlcnQgaXN0 +IGVzIG5pY2h0IG1laHIpLA0KICAgICAgICAgICAgICAgICMgZW50ZmVybmVuIHdpciBkZW4gb2Zm +ZW5lbiBIaW53ZWlzIOKAlCBzb25zdCBpc3QgZXIgYmlzIHp1DQogICAgICAgICAgICAgICAgIyAz +MCBUYWdlIHByYWVzZW50LCBvYndvaGwgZGFzIEVyZWlnbmlzIGVybGVkaWd0IGlzdC4NCiAgICAg +ICAgICAgICAgICBpZiAoKCRhbHRlciAtZXEgJ2tyJyAtb3IgJGFsdGVyIC1lcSAnS3VyJykgLWFu +ZCAoJHdlcnQgLW5lICdrcicgLWFuZCAkd2VydCAtbmUgJ0t1cicpKSB7DQogICAgICAgICAgICAg +ICAgICAgIFJlbW92ZS1PZmZlbmVLcmFua21lbGR1bmdzSGlud2Vpc2UgJHBlcnNvbklkICRkYXR1 +bQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIEhpbndlaXMtVHJpZ2dlcjog +S3JhbmttZWxkdW5nIGVyemV1Z3QgZWluZW4gSW4tQXBwLUhpbndlaXMNCiAgICAgICAgICAgICAg +ICAjIGZ1ZXIgU1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgKFNjaGljaHRsb2NoIGltIE1vZGFs +IGRpcmVrdA0KICAgICAgICAgICAgICAgICMgYWRyZXNzaWVyYmFyIHZpYSAiS2FuZGlkYXRlbiBh +bnNjaHJlaWJlbiItQnV0dG9uKS4NCiAgICAgICAgICAgICAgICBpZiAoJHdlcnQgLWVxICdrcicg +LW9yICR3ZXJ0IC1lcSAnS3VyJykgew0KICAgICAgICAgICAgICAgICAgICAka21OYW1lID0gJycN +CiAgICAgICAgICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAka3ZuID0gJyc7IGlmICgkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2 +b3JuYW1lJ10pIHsgJGt2biA9IFtzdHJpbmddJHppZWxQZXJzb24udm9ybmFtZSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAka21OYW1lID0gKCIka3ZuICQoJHppZWxQZXJzb24ubmFtZSkiKS5U +cmltKCkNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAka21HcnVw +cGUgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBl +cnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydncnVwcGUnXSkgeyAka21HcnVwcGUgPSBbc3RyaW5n +XSR6aWVsUGVyc29uLmdydXBwZSB9DQogICAgICAgICAgICAgICAgICAgICRrbVNjaGljaHRMZXR0 +ZXIgPSAnJw0KICAgICAgICAgICAgICAgICAgICBpZiAoIiRhbHRlciIgLW1hdGNoICdeKFtGU05d +KS0nKSB7ICRrbVNjaGljaHRMZXR0ZXIgPSAkTWF0Y2hlc1sxXSB9DQogICAgICAgICAgICAgICAg +ICAgIE5ldy1IaW53ZWlzICdrcmFua21lbGR1bmcnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAg +ICAgICAgICAgICAgcGVyc29uX2lkICAgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAg +ICAgICBwZXJzb25fbmFtZSAgPSAka21OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBncnVw +cGUgICAgICAgPSAka21HcnVwcGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAg +ICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNodENvZGUgID0gIiRhbHRl +ciINCiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGljaHRLdXJ6ICA9ICRrbVNjaGljaHRMZXR0 +ZXINCiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICA9ICIkd2VydCINCiAgICAg +ICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl +IEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGFsdGVyV2VydCA9ICRhbHRlciB9DQogICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgQnVsay1TY2hy +ZWliZW4gbWVocmVyZXIgWmVsbGVuIGluIGVpbmVtIFNjaHJpdHQg4oCUIGF1ZmdlcnVmZW4NCiAg +ICAgICAgICAgICMgdm9tIEV4Y2VsLUZ1ZWxsLUdyaWZmLiBTcGFydCBwcm8gRHJhZyBiaXMgenUg +MTAwKyBIVFRQLVJvdW5kdHJpcHMNCiAgICAgICAgICAgICMgdW5kIERhdGVpLVNjaHJlaWJ2b3Jn +YWVuZ2UuIFBlcm1pc3Npb24tQ2hlY2sgcHJvIFplbGxlLCBlaW4NCiAgICAgICAgICAgICMgZWlu +emlnZXIgTG9nYnVjaC1FaW50cmFnIGZhc3N0IGRpZSBBa3Rpb24genVzYW1tZW4uDQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvemVsbGVuLWJ1bGsnIC1hbmQgJE1ldGhv +ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVl +c3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEg +PSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0g +QCgkYS5laW50cmFlZ2UpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGVpbnRyYWVnZSAtb3Ig +JGVpbnRyYWVnZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25P +YmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IG9rID0gMDsgYWJnZWxlaG50ID0gQCgp +IH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gZGVyIERhdGVpLVNwZXJy +ZSDigJQgd2llIGRlciBFaW56ZWwtDQogICAgICAgICAgICAgICAgIyB6ZWxsLUVuZHBvaW50LiBP +aG5lIExvY2sga2FubiBlaW4gcGFyYWxsZWxlciBFZGl0L0J1bGsgKGF1Y2gNCiAgICAgICAgICAg +ICAgICAjIGF1cyBlaW5lbSBhbmRlcmVuIFNlcnZlci1Qcm96ZXNzIGF1ZiBkZW1zZWxiZW4gU2hh +cmUpIGRlbg0KICAgICAgICAgICAgICAgICMgZ2VyYWRlIGdlbGVzZW5lbiBHZXNhbXRzdGFuZCB1 +ZWJlcnNjaHJlaWJlbiAoTG9zdCBVcGRhdGUgdWViZXINCiAgICAgICAgICAgICAgICAjIGRpZSBH +QU5aRSBEYXRlaSkuIExvZ2J1Y2ggKyBMaXZlLVN5bmMgbGF1ZmVuIE5BQ0ggZGVyIFNwZXJyZSwN +CiAgICAgICAgICAgICAgICAjIHVtIGdlc2NoYWNodGVsdGUgTG9ja3MgKGxvZ2J1Y2gvY2hhbmdl +cykgenUgdmVybWVpZGVuLg0KICAgICAgICAgICAgICAgICRyZXMgPSAkbnVsbA0KICAgICAgICAg +ICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMgPSBJbnZva2UtV2l0aEZpbGVM +b2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0g +UmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJG51bGwgLWVxICRwbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0g +NDA0OyBtc2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRy +YWVnZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVt +YmVyIC1Ob3RlUHJvcGVydHlOYW1lICdlaW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BT +Q3VzdG9tT2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAjIFBlcnNvbmVuLU1hcCBlaW5tYWwgYXVmYmF1ZW4g4oCUIFBl +cm1pc3Npb24tQ2hlY2sgcHJvDQogICAgICAgICAgICAgICAgICAgICAgICAjIEVpbnRyYWcgb2hu +ZSBSZXNjYW4gZGVyIFBlcnNvbmVubGlzdGUuDQogICAgICAgICAgICAgICAgICAgICAgICAkcGVy +c29uTWFwID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcucGVyc29u +ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgkcGxh +bnVuZy5wZXJzb25lbikpIHsgJHBlcnNvbk1hcFtbc3RyaW5nXSRwcC5pZF0gPSAkcHAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJG9rQ291bnQg +PSAwDQogICAgICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ID0gQCgpDQogICAgICAgICAg +ICAgICAgICAgICAgICAkZXJzdGVzUGlkID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAg +ICRlcnN0ZXNXZXJ0ID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNEYXR1 +bSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkbGV0enRlc0RhdHVtID0gJG51bGwN +CiAgICAgICAgICAgICAgICAgICAgICAgICMgYWx0ZVdlcnRlLU1hcCBmdWVyIExvZ2J1Y2gtUmVz +dG9yZTogS2V5ID0gIjxkYXR1bT58PHBlcnNvbklkPiIuDQogICAgICAgICAgICAgICAgICAgICAg +ICAkYWx0ZVdlcnRlID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICAjIHN5bmNFaW50cmFl +Z2U6IHBybyBnZW11dGllcnRlciBaZWxsZSBlaW4gRWludHJhZyBmdWVyDQogICAgICAgICAgICAg +ICAgICAgICAgICAjIGRlbiBMaXZlLVN5bmMtQ2hhbmdlLUxvZyAoRm9ybWF0IHdpZSBTaW5nbGUt +Q2VsbCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkc3luY0VpbnRyYWVnZSA9IE5ldy1PYmpl +Y3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAg +Zm9yZWFjaCAoJGUgaW4gJGVpbnRyYWVnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICRkYXR1bSA9IFtzdHJpbmddJGUuZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +cGVyc29uSWQgPSBbc3RyaW5nXSRlLnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJHdlcnQgPSBpZiAoJGUuUFNPYmplY3QuUHJvcGVydGllc1snd2VydCddIC1hbmQgJG51bGwg +LW5lICRlLndlcnQpIHsgW3N0cmluZ10kZS53ZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkKSB7ICRh +YmdlbGVobnQgKz0gQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNvbklkOyBncnVu +ZCA9ICd1bnZvbGxzdGFlbmRpZycgfTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICR6aWVsUGVyc29uID0gJHBlcnNvbk1hcFskcGVyc29uSWRdDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlplbGxlRWRpdGllcmVuICR6aWVsUGVy +c29uKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ICs9IEB7 +IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgZ3J1bmQgPSAna2Vpbi1yZWNo +dCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkcGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1i +ZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BTQ3VzdG9t +T2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZW4gV2VydCBtZXJrZW4gQkVWT1Igd2lyIGRpZSBa +ZWxsZSB1ZWJlcnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZXJX +ZXJ0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJh +ZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJGFsdGVyV2VydCA9IFtzdHJpbmddJHBsYW51bmcuZWludHJh +ZWdlLiRkYXR1bS4kcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZVsoInswfXx7MX0iIC1mICRkYXR1bSwg +JHBlcnNvbklkKV0gPSAkYWx0ZXJXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KFtzdHJpbmddOjpJc051bGxPckVtcHR5KCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRw +bGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNv +bklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRd +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFl +Z2UuJGRhdHVtLiRwZXJzb25JZCA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVu +Zy5laW50cmFlZ2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29u +SWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRva0NvdW50KysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJG51bGwgLWVxICRlcnN0ZXNQaWQpIHsgJGVyc3Rlc1BpZCA9ICRwZXJzb25JZDsgJGVyc3Rl +c1dlcnQgPSAkd2VydDsgJGVyc3Rlc0RhdHVtID0gJGRhdHVtIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkbGV0enRlc0RhdHVtID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgW3ZvaWRdJHN5bmNFaW50cmFlZ2UuQWRkKEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25J +ZCA9ICRwZXJzb25JZDsgYWx0ID0gIiRhbHRlcldlcnQiOyBuZXUgPSAiJHdlcnQiIH0pDQogICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIERhdGVpIG51 +ciBzY2hyZWliZW4sIHdlbm4gdGF0c2FlY2hsaWNoIHdhcyBnZWFlbmRlcnQgd3VyZGUuDQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJG9rQ291bnQgLWd0IDApIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwg +T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBva0NvdW50ID0gJG9rQ291bnQ7IGFiZ2VsZWhudCA9 +ICRhYmdlbGVobnQ7IGVyc3Rlc1BpZCA9ICRlcnN0ZXNQaWQ7IGVyc3Rlc1dlcnQgPSAkZXJzdGVz +V2VydDsgZXJzdGVzRGF0dW0gPSAkZXJzdGVzRGF0dW07IGxldHp0ZXNEYXR1bSA9ICRsZXR6dGVz +RGF0dW07IGFsdGVXZXJ0ZSA9ICRhbHRlV2VydGU7IHN5bmNFaW50cmFlZ2UgPSAkc3luY0VpbnRy +YWVnZSB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsN +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjog +JF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm +ICgkcmVzLnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkcmVzLm1zZyAk +cmVzLmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIExvZ2J1Y2ggKyBMaXZlLVN5 +bmMgTkFDSCBkZW0gTG9jayAoa2VpbiBnZXNjaGFjaHRlbHRlcyBMb2NrKS4NCiAgICAgICAgICAg +ICAgICBpZiAoJHJlcy5va0NvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgIFdyaXRl +LUxvZ0VpbnRyYWcgJ3plbGxlbi5idWxrLmdlYWVuZGVydCcgQHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgIHBlcnNvbklkICAgID0gJHJlcy5lcnN0ZXNQaWQNCiAgICAgICAgICAgICAgICAgICAg +ICAgIHdlcnQgICAgICAgID0gJHJlcy5lcnN0ZXNXZXJ0DQogICAgICAgICAgICAgICAgICAgICAg +ICBhbnphaGwgICAgICA9ICRyZXMub2tDb3VudA0KICAgICAgICAgICAgICAgICAgICAgICAgZXJz +dGVyVGFnICAgPSAkcmVzLmVyc3Rlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBsZXR6 +dGVyVGFnICA9ICRyZXMubGV0enRlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBhYmdl +bGVobnQgICA9ICRyZXMuYWJnZWxlaG50LkNvdW50DQogICAgICAgICAgICAgICAgICAgICAgICAj +IFJlc3RvcmUtUGF5bG9hZDogcHJvIFplbGxlIGRlciBXZXJ0IHZvciBkZXIgQWVuZGVydW5nLg0K +ICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZVdlcnRlICAgPSAkcmVzLmFsdGVXZXJ0ZQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jOiBwcm8g +WmVsbGUgZWluICd6ZWxsZSctRWludHJhZyBpbnMgY2hhbmdlcy5qc29uLg0KICAgICAgICAgICAg +ICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZWdlICd6ZWxsZScgJHJlcy5zeW5jRWludHJhZWdl +DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz +cG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgb2sgPSAkcmVzLm9rQ291bnQ7IGFiZ2VsZWhudCA9IEAo +JHJlcy5hYmdlbGVobnQpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvcGxhbnVuZy9rb21tZW50YXINCiAgICAgICAgICAg +ICMgSGFlbmd0IGVpbmVuIG5ldWVuIEtvbW1lbnRhciBhbiBkaWUgTGlzdGUgZnVlciAoZGF0dW0s +cGVyc29uSWQpIGFuLg0KICAgICAgICAgICAgIyBTY2hlbWEtTWlncmF0aW9uIChsYXp5KTogdm9y +aGFuZGVuZXIgU3RyaW5nIG9kZXIgT2JqZWt0LUVpbnRyYWcgd2lyZA0KICAgICAgICAgICAgIyBi +ZWltIGVyc3RlbiBTY2hyZWliZW4gaW4gZWluZSBMaXN0ZSBrb252ZXJ0aWVydC4gTGVlcmVyIFRl +eHQgd2lyZA0KICAgICAgICAgICAgIyBhYmdlbGVobnQg4oCUIExvZXNjaGVuIGVpbnplbG5lciBL +b21tZW50YXJlIGxhZXVmdCB1ZWJlciBkZW4gREVMRVRFLQ0KICAgICAgICAgICAgIyBFbmRwdW5r +dCAobWl0IEtvbW1lbnRhci1JRCksIGRhcyBMb2VzY2hlbiBnYW56ZXIgTGlzdGVuIGlzdCB1ZWJl +cg0KICAgICAgICAgICAgIyBkaWUgQVBJIG5pY2h0IG1laHIgbW9lZ2xpY2ggKHZlcnNlaGVudGxp +Y2hlciBWZXJsdXN0IGF1c2dlc2NobG9zc2VuKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAg +ICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycg +NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9t +LUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAg +ICRwZXJzb25JZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAkdGV4dCA9 +IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgKCIkKCRhLnRleHQpIikuVHJp +bSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkgew0KICAg +ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTGVlcmVyIEtvbW1lbnRhciDi +gJQgYml0dGUgREVMRVRFIC9hcGkvcGxhbnVuZy9rb21tZW50YXIgZnVlciBMb2VzY2hlbiB2ZXJ3 +ZW5kZW4nIDQwMA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAjIEVkaXQtUmVjaHQgdm9yIExvY2sgcHJ1ZWZlbg0KICAgICAg +ICAgICAgICAgICRwbGFudW5nQ2hlY2sgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicN +CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgJHppZWxQZXJzb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlm +ICgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg +KCRwcCBpbiBAKCRwbGFudW5nQ2hlY2sucGVyc29uZW4pKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoW3N0cmluZ10kcHAuaWQgLWVxICRwZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRw +cDsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNv +bikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJl +cmVjaHRpZ3VuZyBmdWVyIGRpZXNlbiBLb21tZW50YXInIDQwMzsgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygn +bycpICAjIElTTyA4NjAxIG1pdCBaZWl0em9uZQ0KICAgICAgICAgICAgICAgICRiZW51dHplciA9 +ICIkRG9tYWluXCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gJ2tfJyArIChb +RGF0ZVRpbWVPZmZzZXRdOjpOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKSArICdfJyArIChH +ZXQtUmFuZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAg +ICAgICAgICAgICAgICRudWxsID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxh +bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVu +ZykgeyByZXR1cm4gJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBs +YW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdr +b21tZW50YXJlJyAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3Jj +ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KC1ub3QgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlIHwgQWRkLU1l +bWJlciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2Jq +ZWN0IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICMgQWt0dWVsbGUgTGlzdGUgaGVyYXVzemllaGVuICsgZ2dmLiBhdXMg +QWx0c2NoZW1hIG1pZ3JpZXJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgTGlzdGUgaXN0 +IGNocm9ub2xvZ2lzY2ggKGFlbHRlc3RlIHp1ZXJzdCksIGRlciBuZXVlDQogICAgICAgICAgICAg +ICAgICAgICAgICAjIEVpbnRyYWcgd2lyZCBoaW50ZW4gYW5nZWhhZW5ndC4NCiAgICAgICAgICAg +ICAgICAgICAgICAgICRsaXN0ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVy +aWMuTGlzdFtvYmplY3RdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcua29t +bWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJHZvcmggPSAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4k +cGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFtzdHJp +bmddIC1hbmQgJHZvcmgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRl +ciBTdHJpbmctRWludHJhZyDigJQgZWluIEVsZW1lbnQgb2huZSBNZXRhDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAna19sZWdhY3lfJyAr +IChHZXQtUmFuZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgdGV4dCAgICAgICAgID0gJHZvcmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl +aWYgKCR2b3JoIC1pcyBbYXJyYXldIC1vciAoJHZvcmggLWlzIFtTeXN0ZW0uQ29sbGVjdGlvbnMu +SUVudW1lcmFibGVdIC1hbmQgLW5vdCAoJHZvcmggLWlzIFtzdHJpbmddKSkpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIyBTY2hvbiBlaW4gQXJyYXkgKG5ldWVzIFNjaGVtYSkN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gQCgkdm9yaCkp +IHsgJGxpc3RlLkFkZCgkZSkgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgfSBlbHNlaWYgKCR2b3JoIC1hbmQgJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1sndGV4dCdd +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZXMgT2JqZWt0LVNjaGVt +YSB7IHRleHQsIGdlYWVuZGVydEFtLCBnZWFlbmRlcnRWb24gfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkbWlnSWQgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1snaWQn +XSkgeyBbc3RyaW5nXSR2b3JoLmlkIH0gZWxzZSB7ICdrX2xlZ2FjeV8nICsgKEdldC1SYW5kb20g +LU1heGltdW0gOTk5OTkpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3Rl +LkFkZChbUFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlkICAgICAgICAgICA9ICRtaWdJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgdGV4dCAgICAgICAgID0gW3N0cmluZ10kdm9yaC50ZXh0DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJv +cGVydGllc1snZ2VhZW5kZXJ0QW0nXSkgIHsgJHZvcmguZ2VhZW5kZXJ0QW0gfSAgZWxzZSB7ICRu +dWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9 +IGlmICgkdm9yaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWFlbmRlcnRWb24nXSkgeyAkdm9yaC5n +ZWFlbmRlcnRWb24gfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChb +UFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAg +ICAgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0g +JHRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSAkamV0enQN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkYmVudXR6ZXINCiAg +ICAgICAgICAgICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAg +ICAgICMgWnVydWVjayBhbHMgQXJyYXkgKFBTLVNlcmlhbGlzaWVydW5nKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgJGFyciA9IEAoJGxpc3RlLlRvQXJyYXkoKSkNCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVz +WyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21t +ZW50YXJlLiRkYXR1bS4kcGVyc29uSWQgPSAkYXJyDQogICAgICAgICAgICAgICAgICAgICAgICB9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUu +JGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9w +ZXJ0eVZhbHVlICRhcnIgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5n +IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkbnVsbA0KICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlZGFjdGlvbiB3aWUg +YmVpIGtvbW1lbnRhci5nZWxvZXNjaHQgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy0NCiAgICAg +ICAgICAgICAgICAjIE5vdGJyZW1zZSAyMDI2LTA1LTI4KTogVm9sbHRleHQgYmxlaWJ0IGluIHBs +YW51bmcuanNvbiAoZG9ydA0KICAgICAgICAgICAgICAgICMgZWRpdGllcmJhci9sb2VzY2hiYXIp +LCBkYXMgTG9nYnVjaCBiZWtvbW10IG51ciBWb3JzY2hhdSArIExhZW5nZS4NCiAgICAgICAgICAg +ICAgICAjIFZlcm1laWRldCBQSUktRWNobywgd2VubiBlaW4gS29tbWVudGFyIHNwYWV0ZXIgZ2Vs +b2VzY2h0IHdpcmQNCiAgICAgICAgICAgICAgICAjIGFiZXIgaW0gTG9nIGltbWVyIG5vY2gga29t +cGxldHQgbGllc3Qgc3RlaHQuDQogICAgICAgICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICR0ZXh0 +DQogICAgICAgICAgICAgICAgaWYgKCR0ZXh0Vm9yc2NoYXUuTGVuZ3RoIC1ndCA0MCkgeyAkdGV4 +dFZvcnNjaGF1ID0gJHRleHRWb3JzY2hhdS5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0KICAg +ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2tvbW1lbnRhci5oaW56dWdlZnVlZ3QnIEB7 +DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICAgPSAkZGF0dW0NCiAgICAgICAgICAg +ICAgICAgICAgcGVyc29uSWQgICAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBr +b21tZW50YXJJZCAgID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUg +ID0gJHRleHRWb3JzY2hhdQ0KICAgICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRl +eHQuTGVuZ3RoDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VM +b2dFaW50cmFnICdrb21tZW50YXInIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0g +JGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAg +ICAgICAgICAgICAgIGtvbW1lbnRhcklkID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICAj +IExpdmUtU3luYyBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBuYWVjaHN0ZXIgUmVuZGVyIGxh +ZWR0DQogICAgICAgICAgICAgICAgICAgICMgaWhuIGF1cyBwbGFudW5nLmpzb24uIE51ciBNZXRh +ZGF0ZW4gZnVlciBBa3Rpdml0YWV0cy1BbnplaWdlLg0KICAgICAgICAgICAgICAgICAgICB6ZWl0 +c3RlbXBlbCA9ICRqZXR6dA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAg +ICA9ICdoaW56dWdlZnVlZ3QnDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICA9ICRu +ZXVlSWQNCiAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJGpldHp0DQogICAgICAg +ICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9ICRiZW51dHplcg0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj +IERFTEVURSAvYXBpL3BsYW51bmcva29tbWVudGFyDQogICAgICAgICAgICAjIEJvZHk6IHsgZGF0 +dW0sIHBlcnNvbklkLCBrb21tZW50YXJJZCB9DQogICAgICAgICAgICAjIEJlcmVjaHRpZ3VuZzog +U3VwZXJVc2VyIG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2hlLiBBbmRlcmUgUm9sbGVuDQogICAg +ICAgICAgICAjIGJla29tbWVuIDQwMyDigJQgYXVjaCBkZXIgVmVyZmFzc2VyIHNlbGJzdCBkYXJm +IG5pY2h0IGxvZXNjaGVuDQogICAgICAgICAgICAjIChiZXd1c3N0ZSBEZXNpZ25lbnRzY2hlaWR1 +bmc6IEtvbW1lbnRhci1WZXJsYXVmIGlzdCBDaHJvbmlrKS4NCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtZXEgJy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScp +IHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg +ICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1 +IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29u +dmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRhLmRhdHVtDQogICAgICAg +ICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAg +ICRrb21tZW50YXJJZCA9IFtzdHJpbmddJGEua29tbWVudGFySWQNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkIC1vciAtbm90ICRrb21tZW50YXJJZCkg +ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnZGF0dW0sIHBlcnNv +bklkIHVuZCBrb21tZW50YXJJZCBzaW5kIFBmbGljaHQnIDQwMDsgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAg +ICAgaWYgKC1ub3QgKCRyLmlzdFN1cGVyVXNlciAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxp +Y2gpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3Vw +ZXJVc2VyIHVuZCBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVlcmZlbiBLb21tZW50YXJlIGxvZXNj +aGVuJyA0MDMNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9ICRudWxsDQogICAgICAgICAgICAg +ICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJGVyZyA9IEludm9rZS1XaXRoRmlsZUxvY2sg +J3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFk +LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +bnVsbCAtZXEgJHBsYW51bmcgLW9yIC1ub3QgJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sn +a29tbWVudGFyZSddKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRp +ZXNbJGRhdHVtXSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJv +cGVydGllc1skcGVyc29uSWRdKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAkdm9yaCA9ICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJz +b25JZA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBDb21wYXQgZnVlciBBbHQtRm9ybWF0ZSAo +U3ByaW50IDMg4oCUIERyaWZ0L1JvYnVzdGhlaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICMg +MjAyNi0wNS0yOCk6IENsaWVudCBrZW5uemVpY2huZXQgU3RyaW5nLSBvZGVyIFNpbmdsZS0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICMgT2JqZWN0LW9obmUtSUQgRWludHJhZWdlIGluIGtvbW1l +bnRhckxpc3RlKCkgbWl0DQogICAgICAgICAgICAgICAgICAgICAgICAjIFNlbnRpbmVsLUlEICdr +X2xlZ2FjeScuIERFTEVURSBtaXQgZGllc2VyIElEIGdlZ2VuDQogICAgICAgICAgICAgICAgICAg +ICAgICAjIGVpbmVuIEFsdC1FaW50cmFnID0ga29tcGxldHRlciBFaW50cmFnIHdpcmQgZW50ZmVy +bnQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgKE1pZ3JhdGlvbiArIExvZXNjaHVuZyBpbiBl +aW5lbSBTY2hyaXR0KS4NCiAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJG51bGwN +CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlTGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5D +b2xsZWN0aW9ucy5HZW5lcmljLkxpc3Rbb2JqZWN0XQ0KICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCR2b3JoIC1pcyBbc3RyaW5nXSAtYW5kICR2b3JoKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVnYWN5Jykgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkdHJlZmZlciA9IFtQU0N1c3RvbU9iamVjdF1AeyB0ZXh0ID0g +JHZvcmggfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9ICdr +b21tZW50YXJOaWNodEdlZnVuZGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkbGlzdGUgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmgg +LWlzIFthcnJheV0gLW9yICgkdm9yaCAtaXMgW1N5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJs +ZV0gLWFuZCAtbm90ICgkdm9yaCAtaXMgW3N0cmluZ10pKSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkbGlzdGUgPSBAKCR2b3JoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIH0gZWxzZWlmICgkdm9yaCAtYW5kICR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQn +XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0SWQgPSBpZiAoJHZvcmgu +UFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSR2b3JoLmlkIH0gZWxzZSB7ICcn +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGFsdElkKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGtvbW1lbnRhcklkIC1lcSAn +a19sZWdhY3knKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRy +ZWZmZXIgPSAkdm9yaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdGV4 +dCA9ICRudWxsOyBmZWhsZXIgPSAna29tbWVudGFyTmljaHRHZWZ1bmRlbicgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3Rl +ID0gQCgkdm9yaCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkdHJlZmZlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgk +ZSBpbiAkbGlzdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaWQg +PSBpZiAoJGUgLWFuZCAkZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJpbmddJGUu +aWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KCRlaWQgLWVxICRrb21tZW50YXJJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICR0cmVmZmVyID0gJGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5l +dWVMaXN0ZS5BZGQoJGUpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgtbm90ICR0cmVmZmVyKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGw7 +IGZlaGxlciA9ICdrb21tZW50YXJOaWNodEdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkbmV1ZUxpc3RlLkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIyBMZXR6dGVyIEtvbW1lbnRhciBlbnRmZXJudCAtPiBQcm9wZXJ0eSBrb21wbGV0 +dCByYXVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4k +ZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICMgTGVlcmVyIFRhZ2VzLUJ1Y2tldCBhdWZyYWV1bWVuDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJHRhZ1Byb3BzID0gQCgkcGxhbnVuZy5rb21tZW50YXJlLiRk +YXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkdGFnUHJvcHMuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJHBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZGF0dW0p +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJl +LiRkYXR1bS4kcGVyc29uSWQgPSBAKCRuZXVlTGlzdGUuVG9BcnJheSgpKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn +cGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg +ICAkZW50ZmVybnRUZXh0ID0gaWYgKCR0cmVmZmVyLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQn +XSkgeyBbc3RyaW5nXSR0cmVmZmVyLnRleHQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgcmV0dXJuIEB7IHRleHQgPSAkZW50ZmVybnRUZXh0IH0NCiAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGVyZy5mZWhsZXIpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgkZXJnLmZlaGxlciAtZXEgJ2tvbW1lbnRhck5pY2h0R2VmdW5k +ZW4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +J0tvbW1lbnRhciBtaXQgZGllc2VyIElEIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlDQog +ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9ICRlcmcudGV4dA0KICAgICAgICAgICAgICAg +IH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxv +Y2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgIyBSZWRhY3Rpb24gKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2Ug +MjAyNi0wNS0yOCk6DQogICAgICAgICAgICAgICAgIyBQSUktU2NodXR6LiBGcnVlaGVyIGxhbmRl +dGUgZGVyIHZvbGxzdGFlbmRpZ2UgS29tbWVudGFyLVRleHQgaW0NCiAgICAgICAgICAgICAgICAj +IExvZ2J1Y2gg4oCUIHdlbm4gZGVyIEtvbW1lbnRhciBLcmFua2hlaXRzLS9EaXN6aXBsaW5hci1J +bmZvIGVudGhpZWx0LA0KICAgICAgICAgICAgICAgICMgbGVidGUgc2llIG5hY2ggJ0xvZXNjaGVu +JyB3ZWl0ZXIgaW0gTG9nLiBKZXR6dCBudXIgTGFlbmdlICsga3VyemVyDQogICAgICAgICAgICAg +ICAgIyBBdXN6dWcgKDQwIFplaWNoZW4pLCBnZW51ZyBmdWVyIE5hY2h2b2xsemllaGJhcmtlaXQg +b2huZSBWb2xsdGV4dC4NCiAgICAgICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJycNCiAgICAg +ICAgICAgICAgICBpZiAoJGdlbG9lc2NodGVyVGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAk +a3VyeiA9ICRnZWxvZXNjaHRlclRleHQNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRrdXJ6Lkxl +bmd0aCAtZ3QgNDApIHsgJGt1cnogPSAka3Vyei5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0K +ICAgICAgICAgICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJGt1cnoNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgJHRleHRMYWVuZ2UgPSBpZiAoJGdlbG9lc2NodGVyVGV4dCkg +eyAkZ2Vsb2VzY2h0ZXJUZXh0Lkxlbmd0aCB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICBX +cml0ZS1Mb2dFaW50cmFnICdrb21tZW50YXIuZ2Vsb2VzY2h0JyBAew0KICAgICAgICAgICAgICAg +ICAgICBkYXR1bSAgICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklk +ICAgICAgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgICA9ICRr +b21tZW50YXJJZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUgID0gJHRleHRWb3Jz +Y2hhdQ0KICAgICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRleHRMYWVuZ2UNCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ2tv +bW1lbnRhcicgQHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAg +ICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAg +a29tbWVudGFySWQgPSAka29tbWVudGFySWQNCiAgICAgICAgICAgICAgICAgICAgIyBMaXZlLVN5 +bmMtQ2hhbm5lbCBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBCcm93c2VyIGxhZWR0DQogICAg +ICAgICAgICAgICAgICAgICMgYmVpIG5hZWNoc3RlbSBSZW5kZXIgZWggYXVzIHBsYW51bmcuanNv +biAod28gZGVyIEVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAgIyB3ZWcgaXN0KS4gSGllciBu +dXIgTWV0YWRhdGVuIGZ1ZXIgQWt0aXZpdGFldHMtQW56ZWlnZS4NCiAgICAgICAgICAgICAgICAg +ICAgbmV1ICAgICAgPSAnJw0KICAgICAgICAgICAgICAgICAgICB6ZWl0c3RlbXBlbCA9IChHZXQt +RGF0ZSkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBT +ZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnOyBrb21tZW50 +YXJJZCA9ICRrb21tZW50YXJJZCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQRVJTT05FTiA9PT09PQ0KICAgICAgICAgICAg +aWYgKCRQYXRoIC1lcSAnL2FwaS9wZXJzb25lbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsN +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk +UmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgJG5ldSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNv +bg0KICAgICAgICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFyIGluIGRlciBEYXRl +aS1TcGVycmUuIFdpY2h0aWcgbmljaHQgbnVyDQogICAgICAgICAgICAgICAgIyBnZWdlbiBMb3N0 +IFVwZGF0ZXMsIHNvbmRlcm4gZ2VnZW4gZGllIG1heElkLVJhY2U6IHp3ZWkgcGFyYWxsZWxlDQog +ICAgICAgICAgICAgICAgIyBQZXJzb25lbi1BbmxhZ2VuIHd1ZXJkZW4gc29uc3QgZGllc2VsYmUg +bWF4SWQgbGVzZW4gdW5kIElERU5USVNDSEUNCiAgICAgICAgICAgICAgICAjIElEcyB2ZXJnZWJl +biAoZG9wcGVsdGUgUGVyc29uZW4tSURzID0ga29ycnVwdGVyIFN0YXRlKS4NCiAgICAgICAgICAg +ICAgICAkcGVyc1JlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg +ICAgICAkcGVyc1JlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAg +ICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQog +ICAgICAgICAgICAgICAgJG1heElkID0gMA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGlu +ICRwbGFudW5nLnBlcnNvbmVuKSB7IGlmICgkcC5pZCAtZ3QgJG1heElkKSB7ICRtYXhJZCA9ICRw +LmlkIH0gfQ0KICAgICAgICAgICAgICAgICRuZXVlSWQgPSAkbWF4SWQgKyAxDQoNCiAgICAgICAg +ICAgICAgICAjIEVpbnJlaWh1bmdzLUxvZ2lrOiAidW50ZW4iIChEZWZhdWx0KSwgInZvciIgb2Rl +ciAibmFjaCIgZWluZXIgUmVmZXJlbnpwZXJzb24NCiAgICAgICAgICAgICAgICAkZWlucmVpaGVu +ID0gJ3VudGVuJw0KICAgICAgICAgICAgICAgIGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNb +J2VpbnJlaWhlbiddIC1hbmQgJG5ldS5laW5yZWloZW4pIHsgJGVpbnJlaWhlbiA9IChbc3RyaW5n +XSRuZXUuZWlucmVpaGVuKS5Ub0xvd2VyKCkgfQ0KICAgICAgICAgICAgICAgICRyZWZJZCA9ICRu +dWxsDQogICAgICAgICAgICAgICAgaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sncmVmZXJl +bnpJZCddIC1hbmQgJG51bGwgLW5lICRuZXUucmVmZXJlbnpJZCkgeyAkcmVmSWQgPSBbaW50XSRu +ZXUucmVmZXJlbnpJZCB9DQoNCiAgICAgICAgICAgICAgICAkemllbFBvcyA9ICRudWxsDQogICAg +ICAgICAgICAgICAgaWYgKCgkZWlucmVpaGVuIC1lcSAndm9yJyAtb3IgJGVpbnJlaWhlbiAtZXEg +J25hY2gnKSAtYW5kICRudWxsIC1uZSAkcmVmSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHJl +ZlBvcyA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5n +LnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kcC5pZCAtZXEg +JHJlZklkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZlBvcyA9IGlmICgkcC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQgJHAucG9zaXRpb24pIHsgW2ludF0k +cC5wb3NpdGlvbiB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh +aw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHJlZlBvcykgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgJHppZWxQb3MgPSBpZiAoJGVpbnJlaWhlbiAtZXEgJ3ZvcicpIHsgJHJlZlBvcyB9 +IGVsc2UgeyAkcmVmUG9zICsgMSB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBvc2l0aW9u +ZW4gYWIgemllbFBvcyB1bSAxIG5hY2ggaGludGVuIHNjaGllYmVuDQogICAgICAgICAgICAgICAg +ICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRwcCA9IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlv +biddIC1hbmQgJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBwIC1nZSAkemllbFBvcykgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9z +aXRpb24nXSkgeyAkcC5wb3NpdGlvbiA9ICRwcCArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdwb3Np +dGlvbicgLU5vdGVQcm9wZXJ0eVZhbHVlICgkcHAgKyAxKSAtRm9yY2UgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG51bGwg +LWVxICR6aWVsUG9zKSB7DQogICAgICAgICAgICAgICAgICAgICRtYXhQb3MgPSAwDQogICAgICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7ICRwb3MgPSBp +ZiAoJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH07IGlmICgkcG9z +IC1ndCAkbWF4UG9zKSB7ICRtYXhQb3MgPSAkcG9zIH0gfQ0KICAgICAgICAgICAgICAgICAgICAk +emllbFBvcyA9ICRtYXhQb3MgKyAxDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg +ICAgJHBlcnNvbiA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGlkID0gJG5ldWVJ +ZA0KICAgICAgICAgICAgICAgICAgICBha3RpdiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ2FrdGl2J10pIHsgJG5ldS5ha3RpdiB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAg +ICAgICAgIG5hbWUgPSAkbmV1Lm5hbWUNCiAgICAgICAgICAgICAgICAgICAgdm9ybmFtZSA9IGlm +ICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAkbmV1LnZvcm5hbWUgfSBl +bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBkaWVuc3RncmFkID0gaWYgKCRuZXUuUFNP +YmplY3QuUHJvcGVydGllc1snZGllbnN0Z3JhZCddKSB7ICRuZXUuZGllbnN0Z3JhZCB9IGVsc2Ug +eyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9uID0gaWYgKCRuZXUuUFNPYmplY3Qu +UHJvcGVydGllc1snZnVua3Rpb24nXSkgeyAkbmV1LmZ1bmt0aW9uIH0gZWxzZSB7ICcnIH0NCiAg +ICAgICAgICAgICAgICAgICAgZ3J1cHBlID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sn +Z3J1cHBlJ10pIHsgJG5ldS5ncnVwcGUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAg +ICBvZSA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ29lJ10pIHsgJG5ldS5vZSB9IGVs +c2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRpZW5zdG51bW1lciA9IGlmICgkbmV1LlBT +T2JqZWN0LlByb3BlcnRpZXNbJ2RpZW5zdG51bW1lciddKSB7ICRuZXUuZGllbnN0bnVtbWVyIH0g +ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgdGVsZWZvbiA9IGlmICgkbmV1LlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ3RlbGVmb24nXSkgeyAkbmV1LnRlbGVmb24gfSBlbHNlIHsgJycgfQ0K +ICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICR6aWVsUG9zDQogICAgICAgICAgICAgICAg +ICAgIGVtYWlsID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZW1haWwnXSkgeyAkbmV1 +LmVtYWlsIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgbndLZW5udW5nID0gaWYg +KCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snbndLZW5udW5nJ10pIHsgJG5ldS5ud0tlbm51bmcg +fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBnZWJ1cnRzZGF0dW0gPSBpZiAoJG5l +dS5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWJ1cnRzZGF0dW0nXSkgeyAkbmV1LmdlYnVydHNkYXR1 +bSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGVsRGdsUXVhbGlmaXppZXJ0ID0g +aWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZWxEZ2xRdWFsaWZpemllcnQnXSkgeyBbYm9v +bF0kbmV1LmVsRGdsUXVhbGlmaXppZXJ0IH0gZWxzZSB7ICRmYWxzZSB9DQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICMgTWFya2VyIGZ1ZXIgUGVyc29uZW4sIGRpZSBwZXIgRXhj +ZWwtSW1wb3J0IGZyaXNjaCBhbmdlbGVndA0KICAgICAgICAgICAgICAgICMgd3VyZGVuLiBQZXJz +b25hbHZlcndhbHR1bmcgYmxlbmRldCBzaWUgaW0gTmV1aW1wb3J0LUJsb2NrDQogICAgICAgICAg +ICAgICAgIyBvYmVuIGVpbiwgYmlzIGRhcyBGbGFnIG1hbnVlbGwgd2VnZ2VzZXR6dCB3aXJkIChF +cmxlZGlndC0NCiAgICAgICAgICAgICAgICAjIEJ1dHRvbikgb2RlciBkYXMgbGV0enRlIFBmbGlj +aHRmZWxkIChEaWVuc3RncnVwcGUpIGdlcGZsZWd0DQogICAgICAgICAgICAgICAgIyBpc3QgdW5k +IGRlciBVc2VyIGF1ZiAiQmxvY2sgbGVlcmVuIiBrbGlja3QuDQogICAgICAgICAgICAgICAgaWYg +KCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snaW1wb3J0TmV1QW0nXSAtYW5kICRuZXUuaW1wb3J0 +TmV1QW0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHBlcnNvblsnaW1wb3J0TmV1QW0nXSA9IFtz +dHJpbmddJG5ldS5pbXBvcnROZXVBbQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAkcGxhbnVuZy5wZXJzb25lbiArPSBbUFNDdXN0b21PYmplY3RdJHBlcnNvbg0KICAgICAgICAg +ICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVs +bA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBuZXVlSWQgPSAkbmV1ZUlkOyB6aWVsUG9zID0g +JHppZWxQb3M7IGVpbnJlaWhlbiA9ICRlaW5yZWloZW4gfQ0KICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk UmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRsb2NrRXJnZWJuaXMub2spIHsgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJGxvY2tFcmdlYm5pcy5tc2cgJGxvY2tFcmdlYm5pcy5zdGF0dXM7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdlaW5zdGVsbHVuZ2Vu -LmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z -ZSBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K -ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IFBMQU5VTkcgPT09PT0NCiAgICAg -ICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZycgLWFuZCAkTWV0aG9kIC1lcSAnR0VU -Jykgew0KICAgICAgICAgICAgICAgICR0eHQgPSBSZWFkLVRleHRGaWxlICdwbGFudW5nLmpzb24n -DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkdHh0KSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIDQwNCB9DQogICAgICAgICAgICAgICAg -ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgVmVyc2lvbnMtU3RlbXBlbCAobXRpbWUtVGlj -a3MpIGZ1ZXIgb3B0aW1pc3Rpc2NoZSBTcGVycmUgZGVzDQogICAgICAgICAgICAgICAgICAgICMg -RXhjZWwtSW1wb3J0cy4gRGVyIENsaWVudCBzY2hpY2t0IGlobiBiZWltIFBVVCB6dXJ1ZWNrLg0K -ICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBwViA9 -IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJHBwVikgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRSZXNwb25zZS5IZWFkZXJzLkFkZCgnWC1QbGFudW5nLVZlcnNpb24nLCBbc3Ry -aW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcykN -CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7 -fQ0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAkdHh0DQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQog -ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEg -J1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9z -cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBh -dG9tYXIgaW4gZGVyIGdsZWljaGVuIFNwZXJyZSB3aWUgZGllIEVpbnplbC0NCiAgICAgICAgICAg -ICAgICAjIHplbGwtRW5kcG9pbnRzLCBkYW1pdCBkZXIgVm9sbC1JbXBvcnQgbmljaHQgbWl0IHBh -cmFsbGVsZW4NCiAgICAgICAgICAgICAgICAjIFplbGwtU2NocmVpYnZvcmdhZW5nZW4gdmVyemFo -bnQuIE9wdGlvbmFsZXIgVmVyc2lvbnMtQ2hlY2sNCiAgICAgICAgICAgICAgICAjIChvcHRpbWlz -dGlzY2hlIE5lYmVubGFldWZpZ2tlaXQpOiBoYXQgZGVyIENsaWVudCBlaW5lbg0KICAgICAgICAg -ICAgICAgICMgSWYtUGxhbnVuZy1WZXJzaW9uLUhlYWRlciBnZXNjaGlja3QgdW5kIHN0aW1tdCBk -ZXIgbmljaHQgbWVocg0KICAgICAgICAgICAgICAgICMgbWl0IGRlbSBha3R1ZWxsZW4gU3RhbmQg -dWViZXJlaW4sIHd1cmRlIHp3aXNjaGVuemVpdGxpY2gNCiAgICAgICAgICAgICAgICAjIGdlc2No -cmllYmVuIC0+IDQwOSwgTklDSFRTIHdpcmQgdWViZXJzY2hyaWViZW4uDQogICAgICAgICAgICAg -ICAgJGVyd2FydGV0ZVZlcnNpb24gPSAkUmVxdWVzdC5IZWFkZXJzWydJZi1QbGFudW5nLVZlcnNp -b24nXQ0KICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAg -ICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0 -aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -ZXJ3YXJ0ZXRlVmVyc2lvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcFYgPSBK -b2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkYWt0dWVsbGVWZXJzaW9uID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp -ZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcHBWKSB7ICRha3R1ZWxsZVZlcnNpb24gPSBbc3Ry -aW5nXShHZXQtSXRlbSAtTGl0ZXJhbFBhdGggJHBwVikuTGFzdFdyaXRlVGltZVV0Yy5UaWNrcyB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRha3R1ZWxsZVZlcnNpb24gLW5lICRl -cndhcnRldGVWZXJzaW9uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy -biBAeyB0eXAgPSAna29uZmxpa3QnOyBha3R1ZWxsID0gJGFrdHVlbGxlVmVyc2lvbiB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgV3JpdGUtVGV4dEZpbGUgJ3BsYW51bmcuanNvbicgJGJvZHkg -fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdvaycg -fQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikg -NTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJGxv -Y2tFcmdlYm5pcy50eXAgLWVxICdrb25mbGlrdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVy -ICAgICAgICAgID0gJ2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAg -ICAgICAgID0gJ0RpZSBQbGFudW5nIHd1cmRlIHp3aXNjaGVuemVpdGxpY2ggdm9uIGVpbmVyIGFu -ZGVyZW4gUGVyc29uIGdlYWVuZGVydC4nDQogICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxs -ZVZlcnNpb24gPSAkbG9ja0VyZ2VibmlzLmFrdHVlbGwNCiAgICAgICAgICAgICAgICAgICAgfSA0 -MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2VzcGVp -Y2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlJyAtYW5kICRNZXRob2QgLWVx -ICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQog -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGJvZHkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Fu -ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhID0gJGJv -ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJGRhdHVtID0gJGEuZGF0dW0N -CiAgICAgICAgICAgICAgICAkcGVyc29uSWQgPSBbc3RyaW5nXSRhLnBlcnNvbklkDQogICAgICAg -ICAgICAgICAgJHdlcnQgPSBpZiAoJGEuUFNPYmplY3QuUHJvcGVydGllc1snd2VydCddKSB7ICRh -LndlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJy -ZW5jeTogV2VubiBkZXIgQ2xpZW50IHNlaW5lbiB6dWxldHp0IGdlc2VoZW5lbg0KICAgICAgICAg -ICAgICAgICMgV2VydCBtaXRsaWVmZXJ0LCBwcnVlZmVuIHdpciB2b3IgZGVtIFNjaHJlaWJlbiBv -YiBkZXIgU2VydmVyDQogICAgICAgICAgICAgICAgIyBub2NoIGRlbnNlbGJlbiBTdGFuZCBoYXQu -IE1pc21hdGNoIC0+IDQwOSBtaXQgYWt0dWVsbGVyV2VydC4NCiAgICAgICAgICAgICAgICAkaGF0 -RXJ3YXJ0ZXQgPSAkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldGVyQWx0ZXJXZXJ0J10N -CiAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXQgPSBpZiAoJGhhdEVyd2FydGV0KSB7IFtzdHJpbmdd -JGEuZXJ3YXJ0ZXRlckFsdGVyV2VydCB9IGVsc2UgeyAkbnVsbCB9DQoNCiAgICAgICAgICAgICAg -ICAjIEVkaXQtUmVjaHQgZ2VnZW4gYWt0dWVsbGVuIFN0YW5kIHBydWVmZW4gKG5vY2ggb2huZSBM -b2NrIOKAlCBudXIgTG9va3VwKQ0KICAgICAgICAgICAgICAgICRwbGFudW5nQ2hlY2sgPSBSZWFk -LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ3BsYW51bmcuanNvbiBuaWNo -dCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHppZWxQZXJzb24g -PSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZ0NoZWNrLnBlcnNvbmVuKSB7DQog -ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiBAKCRwbGFudW5nQ2hlY2sucGVyc29u -ZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcHAuaWQgLWVxICRw -ZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRwcDsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURh -cmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyBmdWVyIGRpZXNlIFplbGxlJyA0 -MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBSZWFk -LU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gTG9jazoNCiAgICAgICAgICAgICAgICAkY2xpZW50UXVp -dHRpZXJ0ID0gKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3VudGVyYmVzZXR6dW5nU2NoaWNodCdd -IC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KQ0KICAgICAgICAgICAgICAgICRsb2NrRXJn -ZWJuaXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAg -ICRsb2NrRXJnZWJuaXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5n -Lmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nKSB7 -IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxhbnVuZy5qc29u -IG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRw -bGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdl -aW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkgLUZvcmNl -DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -LW5vdCAkcGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcuZWludHJhZWdlIHwgQWRkLU1lbWJl -ciAtTm90ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0 -IFBTT2JqZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICRhbHRlciA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBs -YW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsg -JGFsdGVyID0gW3N0cmluZ10kcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVtLiRwZXJzb25JZCB9DQoN -CiAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJyZW5jeS1DaGVjaw0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoYXRFcndhcnRldCAtYW5kICRlcndhcnRldCAt -bmUgJGFsdGVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9 -ICdrb25mbGlrdCc7IGFrdHVlbGwgPSAkYWx0ZXIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIEZ1ZWhydW5ncy1VbnRlcmJlc2V0enVuZyAo -VmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIpIC0gZ2xlaWNoZXMgUHJpbnppcCB3aWUgdm9yaGVyLA0K -ICAgICAgICAgICAgICAgICAgICAgICAgIyBqZXR6dCBhYmVyIGdlZ2VuIGRlbiBnZWxvY2t0ZW4g -U3RhbmQuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkY2xpZW50UXVpdHRpZXJ0 -IC1hbmQgKFRlc3QtSW5WZXJiaW5kbGljaGtlaXQgJGRhdHVtKSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRhbHRlU2NoaWNodCA9IEdldC1GdWVocnVuZ3NTY2hpY2h0TGV0dGVyICRh -bHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXVlU2NoaWNodCA9IEdldC1GdWVo -cnVuZ3NTY2hpY2h0TGV0dGVyICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRhbHRlU2NoaWNodCAtYW5kICRhbHRlU2NoaWNodCAtbmUgJG5ldWVTY2hpY2h0KSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRha3R1ZWxsQ291bnQgPSBHZXQtRnVlaHJ1bmdz -Q291bnQgJHBsYW51bmcgJGRhdHVtICRhbHRlU2NoaWNodA0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoKCRha3R1ZWxsQ291bnQgLSAxKSAtbHQgMikgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICd1bnRlcmJlc2V0enVuZyc7 -IHNjaGljaHQgPSAkYWx0ZVNjaGljaHQ7IGFrdHVlbGxDb3VudCA9ICRha3R1ZWxsQ291bnQ7IGFs -dGVyID0gJGFsdGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHdlcnQgLW9yIFtzdHJpbmddOjpJc051bGxP -cldoaXRlU3BhY2UoJHdlcnQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRw -bGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0 -dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uUFNPYmpl -Y3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7ICRwbGFudW5nLmVpbnRyYWVnZS4kZGF0dW0uJHBl -cnNvbklkID0gJHdlcnQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcGxh -bnVuZy5laW50cmFlZ2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVy -c29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZSB9DQogICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFu -dW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJl -dHVybiBAeyB0eXAgPSAnb2snOyBhbHRlciA9ICRhbHRlciB9DQogICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F -cnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAg -ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCRsb2NrRXJnZWJuaXMudHlwIC1lcSAn -ZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRsb2NrRXJnZWJuaXMubXNnICRsb2NrRXJn -ZWJuaXMuY29kZTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2Vibmlz -LnR5cCAtZXEgJ2tvbmZsaWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgID0g -J2tvbmZsaWt0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAgICA9ICdEaWVz -ZSBaZWxsZSB3dXJkZSBpbnp3aXNjaGVuIGdlYWVuZGVydC4nDQogICAgICAgICAgICAgICAgICAg -ICAgICBha3R1ZWxsZXJXZXJ0ID0gJGxvY2tFcmdlYm5pcy5ha3R1ZWxsDQogICAgICAgICAgICAg -ICAgICAgIH0gNDA5DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbG9ja0VyZ2VibmlzLnR5cCAtZXEgJ3VudGVyYmVz -ZXR6dW5nJykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNl -IEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgICA9ICdGdWVocnVuZ3Mt -VW50ZXJiZXNldHp1bmcnDQogICAgICAgICAgICAgICAgICAgICAgICBrb25mbGlrdFR5cCAgICA9 -ICd1bnRlcmJlc2V0enVuZycNCiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGljaHQgICAgICAg -ID0gJGxvY2tFcmdlYm5pcy5zY2hpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxs -Q291bnQgICA9ICRsb2NrRXJnZWJuaXMuYWt0dWVsbENvdW50DQogICAgICAgICAgICAgICAgICAg -ICAgICBhbHRlcldlcnQgICAgICA9ICRsb2NrRXJnZWJuaXMuYWx0ZXINCiAgICAgICAgICAgICAg -ICAgICAgICAgIG5ldWVyV2VydCAgICAgID0gJHdlcnQNCiAgICAgICAgICAgICAgICAgICAgfSA0 -MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAg -ICAgICAgICAgICAgICAkYWx0ZXIgPSAkbG9ja0VyZ2VibmlzLmFsdGVyDQogICAgICAgICAgICAg -ICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGUuZ2VhZW5kZXJ0JyBAeyBkYXR1bSA9ICRkYXR1bTsg -cGVyc29uSWQgPSAkcGVyc29uSWQ7IGFsdGVyV2VydCA9ICIkYWx0ZXIiOyBuZXVlcldlcnQgPSAi -JHdlcnQiIH0NCiAgICAgICAgICAgICAgICAjIExpdmUtU3luYzogQ2hhbmdlLUxvZyBmdWVyIGRl -biBzeW5jLXdvcmtlci4NCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRWludHJhZyAnemVs -bGUnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQogICAgICAgICAg -ICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIGFsdCAg -ICAgID0gIiRhbHRlciINCiAgICAgICAgICAgICAgICAgICAgbmV1ICAgICAgPSAiJHdlcnQiDQog -ICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBVbnRlcmJlc2V0enVuZ3MtUXVp -dHR1bmc6IGV4dHJhIExvZ2J1Y2gtRWludHJhZywgZGVuIEZhY2hhdWZzaWNodC9XTCBzZWhlbiBz -b2xsDQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3VudGVyYmVz -ZXR6dW5nU2NoaWNodCddIC1hbmQgJGEudW50ZXJiZXNldHp1bmdTY2hpY2h0KSB7DQogICAgICAg -ICAgICAgICAgICAgICRzY2hpY2h0TGV0dGVyID0gW3N0cmluZ10kYS51bnRlcmJlc2V0enVuZ1Nj -aGljaHQNCiAgICAgICAgICAgICAgICAgICAgJHNjaGljaHRUZXh0ID0gc3dpdGNoICgkc2NoaWNo -dExldHRlcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgJ0YnIHsgJ0ZydWVoc2NoaWNodCcg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgJ1MnIHsgJ1NwYWV0c2NoaWNodCcgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgJ04nIHsgJ05hY2h0c2NoaWNodCcgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgZGVmYXVsdCB7ICRzY2hpY2h0TGV0dGVyIH0NCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAkb2VUeHQgPSAnJw0KICAgICAgICAgICAgICAgICAgICBp -ZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydvZSdd -KSB7ICRvZVR4dCA9IFtzdHJpbmddJHppZWxQZXJzb24ub2UgfQ0KICAgICAgICAgICAgICAgICAg -ICAkbmFtZVR4dCA9ICcnDQogICAgICAgICAgICAgICAgICAgIGlmICgkemllbFBlcnNvbikgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgJHZuID0gJyc7IGlmICgkemllbFBlcnNvbi5QU09iamVj -dC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJHZuID0gW3N0cmluZ10kemllbFBlcnNvbi52b3Ju -YW1lIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lVHh0ID0gKCIkdm4gJCgkemllbFBl -cnNvbi5uYW1lKSIpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3VudGVyYmVzZXR6dW5nLnF1aXR0aWVydCcgQHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICBw -ZXJzb24gICAgPSAkbmFtZVR4dA0KICAgICAgICAgICAgICAgICAgICAgICAgb2UgICAgICAgID0g -JG9lVHh0DQogICAgICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgPSAkc2NoaWNodFRleHQN -CiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICIkYWx0ZXIiDQogICAgICAgICAg -ICAgICAgICAgICAgICBuZXVlcldlcnQgPSAiJHdlcnQiDQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBQaGFzZSBELjMgKDIwMjYtMDUt -MjEpOiB3ZW5uIGRpZSBLcmFua21lbGR1bmcgenVydWVja2dlbm9tbWVuDQogICAgICAgICAgICAg -ICAgIyB3aXJkIChhbHRlciBXZXJ0IHdhciBrci9LdXIsIG5ldWVyIFdlcnQgaXN0IGVzIG5pY2h0 -IG1laHIpLA0KICAgICAgICAgICAgICAgICMgZW50ZmVybmVuIHdpciBkZW4gb2ZmZW5lbiBIaW53 -ZWlzIOKAlCBzb25zdCBpc3QgZXIgYmlzIHp1DQogICAgICAgICAgICAgICAgIyAzMCBUYWdlIHBy -YWVzZW50LCBvYndvaGwgZGFzIEVyZWlnbmlzIGVybGVkaWd0IGlzdC4NCiAgICAgICAgICAgICAg -ICBpZiAoKCRhbHRlciAtZXEgJ2tyJyAtb3IgJGFsdGVyIC1lcSAnS3VyJykgLWFuZCAoJHdlcnQg -LW5lICdrcicgLWFuZCAkd2VydCAtbmUgJ0t1cicpKSB7DQogICAgICAgICAgICAgICAgICAgIFJl -bW92ZS1PZmZlbmVLcmFua21lbGR1bmdzSGlud2Vpc2UgJHBlcnNvbklkICRkYXR1bQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIEhpbndlaXMtVHJpZ2dlcjogS3JhbmttZWxk -dW5nIGVyemV1Z3QgZWluZW4gSW4tQXBwLUhpbndlaXMNCiAgICAgICAgICAgICAgICAjIGZ1ZXIg -U1UgKyBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgKFNjaGljaHRsb2NoIGltIE1vZGFsIGRpcmVrdA0K -ICAgICAgICAgICAgICAgICMgYWRyZXNzaWVyYmFyIHZpYSAiS2FuZGlkYXRlbiBhbnNjaHJlaWJl -biItQnV0dG9uKS4NCiAgICAgICAgICAgICAgICBpZiAoJHdlcnQgLWVxICdrcicgLW9yICR3ZXJ0 -IC1lcSAnS3VyJykgew0KICAgICAgICAgICAgICAgICAgICAka21OYW1lID0gJycNCiAgICAgICAg -ICAgICAgICAgICAgaWYgKCR6aWVsUGVyc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAk -a3ZuID0gJyc7IGlmICgkemllbFBlcnNvbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10p -IHsgJGt2biA9IFtzdHJpbmddJHppZWxQZXJzb24udm9ybmFtZSB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAka21OYW1lID0gKCIka3ZuICQoJHppZWxQZXJzb24ubmFtZSkiKS5UcmltKCkNCiAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAka21HcnVwcGUgPSAnJw0K -ICAgICAgICAgICAgICAgICAgICBpZiAoJHppZWxQZXJzb24gLWFuZCAkemllbFBlcnNvbi5QU09i -amVjdC5Qcm9wZXJ0aWVzWydncnVwcGUnXSkgeyAka21HcnVwcGUgPSBbc3RyaW5nXSR6aWVsUGVy -c29uLmdydXBwZSB9DQogICAgICAgICAgICAgICAgICAgICRrbVNjaGljaHRMZXR0ZXIgPSAnJw0K -ICAgICAgICAgICAgICAgICAgICBpZiAoIiRhbHRlciIgLW1hdGNoICdeKFtGU05dKS0nKSB7ICRr -bVNjaGljaHRMZXR0ZXIgPSAkTWF0Y2hlc1sxXSB9DQogICAgICAgICAgICAgICAgICAgIE5ldy1I -aW53ZWlzICdrcmFua21lbGR1bmcnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAg -ICAgcGVyc29uX2lkICAgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICBwZXJz -b25fbmFtZSAgPSAka21OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBncnVwcGUgICAgICAg -PSAka21HcnVwcGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICA9ICRkYXR1 -bQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2NoaWNodENvZGUgID0gIiRhbHRlciINCiAgICAg -ICAgICAgICAgICAgICAgICAgIHNjaGljaHRLdXJ6ICA9ICRrbVNjaGljaHRMZXR0ZXINCiAgICAg -ICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICA9ICIkd2VydCINCiAgICAgICAgICAgICAg -ICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1 -cyA9ICdnZXNwZWljaGVydCc7IGFsdGVyV2VydCA9ICRhbHRlciB9DQogICAgICAgICAgICAgICAg -Y29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgQnVsay1TY2hyZWliZW4gbWVo -cmVyZXIgWmVsbGVuIGluIGVpbmVtIFNjaHJpdHQg4oCUIGF1ZmdlcnVmZW4NCiAgICAgICAgICAg -ICMgdm9tIEV4Y2VsLUZ1ZWxsLUdyaWZmLiBTcGFydCBwcm8gRHJhZyBiaXMgenUgMTAwKyBIVFRQ -LVJvdW5kdHJpcHMNCiAgICAgICAgICAgICMgdW5kIERhdGVpLVNjaHJlaWJ2b3JnYWVuZ2UuIFBl -cm1pc3Npb24tQ2hlY2sgcHJvIFplbGxlLCBlaW4NCiAgICAgICAgICAgICMgZWluemlnZXIgTG9n -YnVjaC1FaW50cmFnIGZhc3N0IGRpZSBBa3Rpb24genVzYW1tZW4uDQogICAgICAgICAgICBpZiAo -JFBhdGggLWVxICcvYXBpL3BsYW51bmcvemVsbGVuLWJ1bGsnIC1hbmQgJE1ldGhvZCAtZXEgJ1BP -U1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn -ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8 -IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgkYS5laW50 -cmFlZ2UpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGVpbnRyYWVnZSAtb3IgJGVpbnRyYWVn -ZS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJl -c3BvbnNlIEB7IHN0YXR1cyA9ICdvayc7IG9rID0gMDsgYWJnZWxlaG50ID0gQCgpIH0NCiAgICAg -ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgIyBSZWFkLU1vZGlmeS1Xcml0ZSBhdG9tYXIgaW4gZGVyIERhdGVpLVNwZXJyZSDigJQgd2ll -IGRlciBFaW56ZWwtDQogICAgICAgICAgICAgICAgIyB6ZWxsLUVuZHBvaW50LiBPaG5lIExvY2sg -a2FubiBlaW4gcGFyYWxsZWxlciBFZGl0L0J1bGsgKGF1Y2gNCiAgICAgICAgICAgICAgICAjIGF1 -cyBlaW5lbSBhbmRlcmVuIFNlcnZlci1Qcm96ZXNzIGF1ZiBkZW1zZWxiZW4gU2hhcmUpIGRlbg0K -ICAgICAgICAgICAgICAgICMgZ2VyYWRlIGdlbGVzZW5lbiBHZXNhbXRzdGFuZCB1ZWJlcnNjaHJl -aWJlbiAoTG9zdCBVcGRhdGUgdWViZXINCiAgICAgICAgICAgICAgICAjIGRpZSBHQU5aRSBEYXRl -aSkuIExvZ2J1Y2ggKyBMaXZlLVN5bmMgbGF1ZmVuIE5BQ0ggZGVyIFNwZXJyZSwNCiAgICAgICAg -ICAgICAgICAjIHVtIGdlc2NoYWNodGVsdGUgTG9ja3MgKGxvZ2J1Y2gvY2hhbmdlcykgenUgdmVy -bWVpZGVuLg0KICAgICAgICAgICAgICAgICRyZXMgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRy -eSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFu -dW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29u -T2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg -LWVxICRwbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cg -PSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgtbm90ICRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVnZSddKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3Rl -UHJvcGVydHlOYW1lICdlaW50cmFlZ2UnIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BTQ3VzdG9tT2Jq -ZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAjIFBlcnNvbmVuLU1hcCBlaW5tYWwgYXVmYmF1ZW4g4oCUIFBlcm1pc3Npb24t -Q2hlY2sgcHJvDQogICAgICAgICAgICAgICAgICAgICAgICAjIEVpbnRyYWcgb2huZSBSZXNjYW4g -ZGVyIFBlcnNvbmVubGlzdGUuDQogICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uTWFwID0g -QHt9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcucGVyc29uZW4pIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gQCgkcGxhbnVuZy5wZXJz -b25lbikpIHsgJHBlcnNvbk1hcFtbc3RyaW5nXSRwcC5pZF0gPSAkcHAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJG9rQ291bnQgPSAwDQogICAg -ICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ID0gQCgpDQogICAgICAgICAgICAgICAgICAg -ICAgICAkZXJzdGVzUGlkID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNX -ZXJ0ID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZXNEYXR1bSA9ICRudWxs -DQogICAgICAgICAgICAgICAgICAgICAgICAkbGV0enRlc0RhdHVtID0gJG51bGwNCiAgICAgICAg -ICAgICAgICAgICAgICAgICMgYWx0ZVdlcnRlLU1hcCBmdWVyIExvZ2J1Y2gtUmVzdG9yZTogS2V5 -ID0gIjxkYXR1bT58PHBlcnNvbklkPiIuDQogICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVdl -cnRlID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICAjIHN5bmNFaW50cmFlZ2U6IHBybyBn -ZW11dGllcnRlciBaZWxsZSBlaW4gRWludHJhZyBmdWVyDQogICAgICAgICAgICAgICAgICAgICAg -ICAjIGRlbiBMaXZlLVN5bmMtQ2hhbmdlLUxvZyAoRm9ybWF0IHdpZSBTaW5nbGUtQ2VsbCkuDQog -ICAgICAgICAgICAgICAgICAgICAgICAkc3luY0VpbnRyYWVnZSA9IE5ldy1PYmplY3QgU3lzdGVt -LkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo -JGUgaW4gJGVpbnRyYWVnZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXR1bSA9 -IFtzdHJpbmddJGUuZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGVyc29uSWQg -PSBbc3RyaW5nXSRlLnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQg -PSBpZiAoJGUuUFNPYmplY3QuUHJvcGVydGllc1snd2VydCddIC1hbmQgJG51bGwgLW5lICRlLndl -cnQpIHsgW3N0cmluZ10kZS53ZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkKSB7ICRhYmdlbGVobnQg -Kz0gQHsgZGF0dW0gPSAkZGF0dW07IHBlcnNvbklkID0gJHBlcnNvbklkOyBncnVuZCA9ICd1bnZv -bGxzdGFlbmRpZycgfTsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6 -aWVsUGVyc29uID0gJHBlcnNvbk1hcFskcGVyc29uSWRdDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlplbGxlRWRpdGllcmVuICR6aWVsUGVyc29uKSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWJnZWxlaG50ICs9IEB7IGRhdHVtID0g -JGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgZ3J1bmQgPSAna2Vpbi1yZWNodCcgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcGxhbnVu -Zy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGllc1skZGF0dW1dKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIgLU5vdGVQ -cm9wZXJ0eU5hbWUgJGRhdHVtIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW1BTQ3VzdG9tT2JqZWN0XUB7 -fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICMgQWx0ZW4gV2VydCBtZXJrZW4gQkVWT1Igd2lyIGRpZSBaZWxsZSB1ZWJl -cnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZXJXZXJ0ID0gJycN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1 -bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJGFsdGVyV2VydCA9IFtzdHJpbmddJHBsYW51bmcuZWludHJhZWdlLiRkYXR1 -bS4kcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGFsdGVXZXJ0ZVsoInswfXx7MX0iIC1mICRkYXR1bSwgJHBlcnNvbklk -KV0gPSAkYWx0ZXJXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmdd -OjpJc051bGxPckVtcHR5KCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJHBsYW51bmcuZWludHJhZWdlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJz -b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmVp -bnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5n -LmVpbnRyYWVnZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFlZ2UuJGRhdHVt -LiRwZXJzb25JZCA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz -ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5laW50cmFl -Z2UuJGRhdHVtIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQ -cm9wZXJ0eVZhbHVlICR3ZXJ0IC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRva0NvdW50KysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwg -LWVxICRlcnN0ZXNQaWQpIHsgJGVyc3Rlc1BpZCA9ICRwZXJzb25JZDsgJGVyc3Rlc1dlcnQgPSAk -d2VydDsgJGVyc3Rlc0RhdHVtID0gJGRhdHVtIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkbGV0enRlc0RhdHVtID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Zv -aWRdJHN5bmNFaW50cmFlZ2UuQWRkKEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJz -b25JZDsgYWx0ID0gIiRhbHRlcldlcnQiOyBuZXUgPSAiJHdlcnQiIH0pDQogICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIERhdGVpIG51ciBzY2hyZWli -ZW4sIHdlbm4gdGF0c2FlY2hsaWNoIHdhcyBnZWFlbmRlcnQgd3VyZGUuDQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoJG9rQ291bnQgLWd0IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy -biBAeyB0eXAgPSAnb2snOyBva0NvdW50ID0gJG9rQ291bnQ7IGFiZ2VsZWhudCA9ICRhYmdlbGVo -bnQ7IGVyc3Rlc1BpZCA9ICRlcnN0ZXNQaWQ7IGVyc3Rlc1dlcnQgPSAkZXJzdGVzV2VydDsgZXJz -dGVzRGF0dW0gPSAkZXJzdGVzRGF0dW07IGxldHp0ZXNEYXR1bSA9ICRsZXR6dGVzRGF0dW07IGFs -dGVXZXJ0ZSA9ICRhbHRlV2VydGU7IHN5bmNFaW50cmFlZ2UgPSAkc3luY0VpbnRyYWVnZSB9DQog -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7 -IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkcmVzLnR5 -cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAkcmVzLm1zZyAkcmVzLmNvZGU7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIExvZ2J1Y2ggKyBMaXZlLVN5bmMgTkFDSCBk -ZW0gTG9jayAoa2VpbiBnZXNjaGFjaHRlbHRlcyBMb2NrKS4NCiAgICAgICAgICAgICAgICBpZiAo -JHJlcy5va0NvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRy -YWcgJ3plbGxlbi5idWxrLmdlYWVuZGVydCcgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBl -cnNvbklkICAgID0gJHJlcy5lcnN0ZXNQaWQNCiAgICAgICAgICAgICAgICAgICAgICAgIHdlcnQg -ICAgICAgID0gJHJlcy5lcnN0ZXNXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICBhbnphaGwg -ICAgICA9ICRyZXMub2tDb3VudA0KICAgICAgICAgICAgICAgICAgICAgICAgZXJzdGVyVGFnICAg -PSAkcmVzLmVyc3Rlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBsZXR6dGVyVGFnICA9 -ICRyZXMubGV0enRlc0RhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICBhYmdlbGVobnQgICA9 -ICRyZXMuYWJnZWxlaG50LkNvdW50DQogICAgICAgICAgICAgICAgICAgICAgICAjIFJlc3RvcmUt -UGF5bG9hZDogcHJvIFplbGxlIGRlciBXZXJ0IHZvciBkZXIgQWVuZGVydW5nLg0KICAgICAgICAg -ICAgICAgICAgICAgICAgYWx0ZVdlcnRlICAgPSAkcmVzLmFsdGVXZXJ0ZQ0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICMgTGl2ZS1TeW5jOiBwcm8gWmVsbGUgZWlu -ICd6ZWxsZSctRWludHJhZyBpbnMgY2hhbmdlcy5qc29uLg0KICAgICAgICAgICAgICAgICAgICBB -ZGQtQ2hhbmdlTG9nRWludHJhZWdlICd6ZWxsZScgJHJlcy5zeW5jRWludHJhZWdlDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg -c3RhdHVzID0gJ29rJzsgb2sgPSAkcmVzLm9rQ291bnQ7IGFiZ2VsZWhudCA9IEAoJHJlcy5hYmdl -bGVobnQpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgIyBQT1NUIC9hcGkvcGxhbnVuZy9rb21tZW50YXINCiAgICAgICAgICAgICMgSGFlbmd0 -IGVpbmVuIG5ldWVuIEtvbW1lbnRhciBhbiBkaWUgTGlzdGUgZnVlciAoZGF0dW0scGVyc29uSWQp -IGFuLg0KICAgICAgICAgICAgIyBTY2hlbWEtTWlncmF0aW9uIChsYXp5KTogdm9yaGFuZGVuZXIg -U3RyaW5nIG9kZXIgT2JqZWt0LUVpbnRyYWcgd2lyZA0KICAgICAgICAgICAgIyBiZWltIGVyc3Rl -biBTY2hyZWliZW4gaW4gZWluZSBMaXN0ZSBrb252ZXJ0aWVydC4gTGVlcmVyIFRleHQgd2lyZA0K -ICAgICAgICAgICAgIyBhYmdlbGVobnQg4oCUIExvZXNjaGVuIGVpbnplbG5lciBLb21tZW50YXJl -IGxhZXVmdCB1ZWJlciBkZW4gREVMRVRFLQ0KICAgICAgICAgICAgIyBFbmRwdW5rdCAobWl0IEtv -bW1lbnRhci1JRCksIGRhcyBMb2VzY2hlbiBnYW56ZXIgTGlzdGVuIGlzdCB1ZWJlcg0KICAgICAg -ICAgICAgIyBkaWUgQVBJIG5pY2h0IG1laHIgbW9lZ2xpY2ggKHZlcnNlaGVudGxpY2hlciBWZXJs -dXN0IGF1c2dlc2NobG9zc2VuKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxh -bnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg -ICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -Ym9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAg -ICAgICAgICAgICAgICAkZGF0dW0gPSAkYS5kYXR1bQ0KICAgICAgICAgICAgICAgICRwZXJzb25J -ZCA9IFtzdHJpbmddJGEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAkdGV4dCA9IGlmICgkYS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgKCIkKCRhLnRleHQpIikuVHJpbSgpIH0gZWxz -ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkgew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnTGVlcmVyIEtvbW1lbnRhciDigJQgYml0dGUg -REVMRVRFIC9hcGkvcGxhbnVuZy9rb21tZW50YXIgZnVlciBMb2VzY2hlbiB2ZXJ3ZW5kZW4nIDQw -MA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAjIEVkaXQtUmVjaHQgdm9yIExvY2sgcHJ1ZWZlbg0KICAgICAgICAgICAgICAg -ICRwbGFudW5nQ2hlY2sgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAg -ICAgICAgICBpZiAoJG51bGwgLWVxICRwbGFudW5nQ2hlY2spIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJHppZWxQZXJzb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkcGxhbnVu -Z0NoZWNrLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcCBpbiBA -KCRwbGFudW5nQ2hlY2sucGVyc29uZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo -W3N0cmluZ10kcHAuaWQgLWVxICRwZXJzb25JZCkgeyAkemllbFBlcnNvbiA9ICRwcDsgYnJlYWsg -fQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIGlmICgtbm90IChUZXN0LURhcmZaZWxsZUVkaXRpZXJlbiAkemllbFBlcnNvbikpIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3Vu -ZyBmdWVyIGRpZXNlbiBLb21tZW50YXInIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygnbycpICAjIElT -TyA4NjAxIG1pdCBaZWl0em9uZQ0KICAgICAgICAgICAgICAgICRiZW51dHplciA9ICIkRG9tYWlu -XCRVc2VybmFtZSINCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gJ2tfJyArIChbRGF0ZVRpbWVP -ZmZzZXRdOjpOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKSArICdfJyArIChHZXQtUmFuZG9t -IC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAg -ICAgICRudWxsID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u -Jw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkcGxhbnVuZykgeyByZXR1 -cm4gJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBsYW51bmcuUFNP -YmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJHBsYW51bmcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdrb21tZW50YXJl -JyAtTm90ZVByb3BlcnR5VmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIC1Gb3JjZQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHBs -YW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bV0pIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlIHwgQWRkLU1lbWJlciAtTm90 -ZVByb3BlcnR5TmFtZSAkZGF0dW0gLU5vdGVQcm9wZXJ0eVZhbHVlIChOZXctT2JqZWN0IFBTT2Jq -ZWN0KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICMgQWt0dWVsbGUgTGlzdGUgaGVyYXVzemllaGVuICsgZ2dmLiBhdXMgQWx0c2NoZW1h -IG1pZ3JpZXJlbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICMgTGlzdGUgaXN0IGNocm9ub2xv -Z2lzY2ggKGFlbHRlc3RlIHp1ZXJzdCksIGRlciBuZXVlDQogICAgICAgICAgICAgICAgICAgICAg -ICAjIEVpbnRyYWcgd2lyZCBoaW50ZW4gYW5nZWhhZW5ndC4NCiAgICAgICAgICAgICAgICAgICAg -ICAgICRsaXN0ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdFtv -YmplY3RdDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBsYW51bmcua29tbWVudGFyZS4k -ZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJHZvcmggPSAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4kcGVyc29uSWQN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFtzdHJpbmddIC1hbmQg -JHZvcmgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlciBTdHJpbmct -RWludHJhZyDigJQgZWluIEVsZW1lbnQgb2huZSBNZXRhDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRsaXN0ZS5BZGQoW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAna19sZWdhY3lfJyArIChHZXQtUmFu -ZG9tIC1NYXhpbXVtIDk5OTk5KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -dGV4dCAgICAgICAgID0gJHZvcmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBnZWFlbmRlcnRWb24gPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -KSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2b3Jo -IC1pcyBbYXJyYXldIC1vciAoJHZvcmggLWlzIFtTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFi -bGVdIC1hbmQgLW5vdCAoJHZvcmggLWlzIFtzdHJpbmddKSkpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIyBTY2hvbiBlaW4gQXJyYXkgKG5ldWVzIFNjaGVtYSkNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGUgaW4gQCgkdm9yaCkpIHsgJGxpc3Rl -LkFkZCgkZSkgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl -aWYgKCR2b3JoIC1hbmQgJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWx0ZXMgT2JqZWt0LVNjaGVtYSB7IHRleHQs -IGdlYWVuZGVydEFtLCBnZWFlbmRlcnRWb24gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkbWlnSWQgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3Ry -aW5nXSR2b3JoLmlkIH0gZWxzZSB7ICdrX2xlZ2FjeV8nICsgKEdldC1SYW5kb20gLU1heGltdW0g -OTk5OTkpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChbUFND -dXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICAg -ICAgICAgICA9ICRtaWdJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4 -dCAgICAgICAgID0gW3N0cmluZ10kdm9yaC50ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSBpZiAoJHZvcmguUFNPYmplY3QuUHJvcGVydGllc1sn -Z2VhZW5kZXJ0QW0nXSkgIHsgJHZvcmguZ2VhZW5kZXJ0QW0gfSAgZWxzZSB7ICRudWxsIH0NCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9IGlmICgkdm9y -aC5QU09iamVjdC5Qcm9wZXJ0aWVzWydnZWFlbmRlcnRWb24nXSkgeyAkdm9yaC5nZWFlbmRlcnRW -b24gfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8 -IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlLkFkZChbUFNDdXN0b21P -YmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAgPSAkbmV1 -ZUlkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0gJHRleHQNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRBbSAgPSAkamV0enQNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRWb24gPSAkYmVudXR6ZXINCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0pIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICMgWnVy -dWVjayBhbHMgQXJyYXkgKFBTLVNlcmlhbGlzaWVydW5nKQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgJGFyciA9IEAoJGxpc3RlLlRvQXJyYXkoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwZXJzb25J -ZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRk -YXR1bS4kcGVyc29uSWQgPSAkYXJyDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtIHwg -QWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkcGVyc29uSWQgLU5vdGVQcm9wZXJ0eVZhbHVl -ICRhcnIgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -ICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51 -bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkbnVsbA0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtRXJyb3IgJFJlc3BvbnNlICgiTG9jay1GZWhsZXI6ICRfIikgNTAzOyBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIFJlZGFjdGlvbiB3aWUgYmVpIGtvbW1l -bnRhci5nZWxvZXNjaHQgKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy0NCiAgICAgICAgICAgICAg -ICAjIE5vdGJyZW1zZSAyMDI2LTA1LTI4KTogVm9sbHRleHQgYmxlaWJ0IGluIHBsYW51bmcuanNv -biAoZG9ydA0KICAgICAgICAgICAgICAgICMgZWRpdGllcmJhci9sb2VzY2hiYXIpLCBkYXMgTG9n -YnVjaCBiZWtvbW10IG51ciBWb3JzY2hhdSArIExhZW5nZS4NCiAgICAgICAgICAgICAgICAjIFZl -cm1laWRldCBQSUktRWNobywgd2VubiBlaW4gS29tbWVudGFyIHNwYWV0ZXIgZ2Vsb2VzY2h0IHdp -cmQNCiAgICAgICAgICAgICAgICAjIGFiZXIgaW0gTG9nIGltbWVyIG5vY2gga29tcGxldHQgbGll -c3Qgc3RlaHQuDQogICAgICAgICAgICAgICAgJHRleHRWb3JzY2hhdSA9ICR0ZXh0DQogICAgICAg -ICAgICAgICAgaWYgKCR0ZXh0Vm9yc2NoYXUuTGVuZ3RoIC1ndCA0MCkgeyAkdGV4dFZvcnNjaGF1 -ID0gJHRleHRWb3JzY2hhdS5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0KICAgICAgICAgICAg -ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2tvbW1lbnRhci5oaW56dWdlZnVlZ3QnIEB7DQogICAgICAg -ICAgICAgICAgICAgIGRhdHVtICAgICAgICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAg -cGVyc29uSWQgICAgICA9ICRwZXJzb25JZA0KICAgICAgICAgICAgICAgICAgICBrb21tZW50YXJJ -ZCAgID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUgID0gJHRleHRW -b3JzY2hhdQ0KICAgICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRleHQuTGVuZ3Ro -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFaW50cmFn -ICdrb21tZW50YXInIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJGRhdHVtDQog -ICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg -ICAgIGtvbW1lbnRhcklkID0gJG5ldWVJZA0KICAgICAgICAgICAgICAgICAgICAjIExpdmUtU3lu -YyBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBuYWVjaHN0ZXIgUmVuZGVyIGxhZWR0DQogICAg -ICAgICAgICAgICAgICAgICMgaWhuIGF1cyBwbGFudW5nLmpzb24uIE51ciBNZXRhZGF0ZW4gZnVl -ciBBa3Rpdml0YWV0cy1BbnplaWdlLg0KICAgICAgICAgICAgICAgICAgICB6ZWl0c3RlbXBlbCA9 -ICRqZXR6dA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICA9ICdoaW56 -dWdlZnVlZ3QnDQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcklkICA9ICRuZXVlSWQNCiAg -ICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gJGpldHp0DQogICAgICAgICAgICAgICAg -ICAgIGdlYWVuZGVydFZvbiA9ICRiZW51dHplcg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIERFTEVURSAv -YXBpL3BsYW51bmcva29tbWVudGFyDQogICAgICAgICAgICAjIEJvZHk6IHsgZGF0dW0sIHBlcnNv -bklkLCBrb21tZW50YXJJZCB9DQogICAgICAgICAgICAjIEJlcmVjaHRpZ3VuZzogU3VwZXJVc2Vy -IG9kZXIgR2VzYW10dmVyYW50d29ydGxpY2hlLiBBbmRlcmUgUm9sbGVuDQogICAgICAgICAgICAj -IGJla29tbWVuIDQwMyDigJQgYXVjaCBkZXIgVmVyZmFzc2VyIHNlbGJzdCBkYXJmIG5pY2h0IGxv -ZXNjaGVuDQogICAgICAgICAgICAjIChiZXd1c3N0ZSBEZXNpZ25lbnRzY2hlaWR1bmc6IEtvbW1l -bnRhci1WZXJsYXVmIGlzdCBDaHJvbmlrKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h -cGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAg -ICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlm -ICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0 -MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20t -SnNvbg0KICAgICAgICAgICAgICAgICRkYXR1bSA9ICRhLmRhdHVtDQogICAgICAgICAgICAgICAg -JHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgICRrb21tZW50 -YXJJZCA9IFtzdHJpbmddJGEua29tbWVudGFySWQNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -ZGF0dW0gLW9yIC1ub3QgJHBlcnNvbklkIC1vciAtbm90ICRrb21tZW50YXJJZCkgew0KICAgICAg -ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnZGF0dW0sIHBlcnNvbklkIHVuZCBr -b21tZW50YXJJZCBzaW5kIFBmbGljaHQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQogICAgICAgICAgICAgICAgaWYgKC1u -b3QgKCRyLmlzdFN1cGVyVXNlciAtb3IgJHIuaXN0R2VzYW10dmVyYW50d29ydGxpY2gpKSB7DQog -ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIHVu -ZCBHZXNhbXR2ZXJhbnR3b3J0bGljaGUgZHVlcmZlbiBLb21tZW50YXJlIGxvZXNjaGVuJyA0MDMN -CiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgJGdlbG9lc2NodGVyVGV4dCA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsN -CiAgICAgICAgICAgICAgICAgICAgJGVyZyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcu -anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmpl -Y3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg -JHBsYW51bmcgLW9yIC1ub3QgJHBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFy -ZSddKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkcGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRhdHVt -XSkgeyByZXR1cm4gQHsgdGV4dCA9ICRudWxsIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKC1ub3QgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1sk -cGVyc29uSWRdKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGwgfSB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAkdm9yaCA9ICRwbGFudW5nLmtvbW1lbnRhcmUuJGRhdHVtLiRwZXJzb25JZA0KICAg -ICAgICAgICAgICAgICAgICAgICAgIyBDb21wYXQgZnVlciBBbHQtRm9ybWF0ZSAoU3ByaW50IDMg -4oCUIERyaWZ0L1JvYnVzdGhlaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICMgMjAyNi0wNS0y -OCk6IENsaWVudCBrZW5uemVpY2huZXQgU3RyaW5nLSBvZGVyIFNpbmdsZS0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICMgT2JqZWN0LW9obmUtSUQgRWludHJhZWdlIGluIGtvbW1lbnRhckxpc3Rl -KCkgbWl0DQogICAgICAgICAgICAgICAgICAgICAgICAjIFNlbnRpbmVsLUlEICdrX2xlZ2FjeScu -IERFTEVURSBtaXQgZGllc2VyIElEIGdlZ2VuDQogICAgICAgICAgICAgICAgICAgICAgICAjIGVp -bmVuIEFsdC1FaW50cmFnID0ga29tcGxldHRlciBFaW50cmFnIHdpcmQgZW50ZmVybnQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICMgKE1pZ3JhdGlvbiArIExvZXNjaHVuZyBpbiBlaW5lbSBTY2hy -aXR0KS4NCiAgICAgICAgICAgICAgICAgICAgICAgICR0cmVmZmVyID0gJG51bGwNCiAgICAgICAg -ICAgICAgICAgICAgICAgICRuZXVlTGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9u -cy5HZW5lcmljLkxpc3Rbb2JqZWN0XQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3Jo -IC1pcyBbc3RyaW5nXSAtYW5kICR2b3JoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRrb21tZW50YXJJZCAtZXEgJ2tfbGVnYWN5Jykgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkdHJlZmZlciA9IFtQU0N1c3RvbU9iamVjdF1AeyB0ZXh0ID0gJHZvcmggfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9ICdrb21tZW50YXJO -aWNodEdlZnVuZGVuJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGlz -dGUgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZvcmggLWlzIFthcnJh -eV0gLW9yICgkdm9yaCAtaXMgW1N5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJsZV0gLWFuZCAt -bm90ICgkdm9yaCAtaXMgW3N0cmluZ10pKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkbGlzdGUgPSBAKCR2b3JoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz -ZWlmICgkdm9yaCAtYW5kICR2b3JoLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0SWQgPSBpZiAoJHZvcmguUFNPYmplY3Qu -UHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSR2b3JoLmlkIH0gZWxzZSB7ICcnIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGFsdElkKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGtvbW1lbnRhcklkIC1lcSAna19sZWdhY3kn -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyZWZmZXIgPSAk -dm9yaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdGV4dCA9ICRudWxs -OyBmZWhsZXIgPSAna29tbWVudGFyTmljaHRHZWZ1bmRlbicgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs -c2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkdm9y -aCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdHJlZmZl -cikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZSBpbiAkbGlz -dGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlaWQgPSBpZiAoJGUg -LWFuZCAkZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7IFtzdHJpbmddJGUuaWQgfSBlbHNl -IHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlaWQgLWVx -ICRrb21tZW50YXJJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICR0cmVmZmVyID0gJGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz -ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVMaXN0ZS5B -ZGQoJGUpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgtbm90ICR0cmVmZmVyKSB7IHJldHVybiBAeyB0ZXh0ID0gJG51bGw7IGZlaGxlciA9 -ICdrb21tZW50YXJOaWNodEdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkbmV1ZUxpc3RlLkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -IyBMZXR6dGVyIEtvbW1lbnRhciBlbnRmZXJudCAtPiBQcm9wZXJ0eSBrb21wbGV0dCByYXVzDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51bmcua29tbWVudGFyZS4kZGF0dW0uUFNP -YmplY3QuUHJvcGVydGllcy5SZW1vdmUoJHBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICMgTGVlcmVyIFRhZ2VzLUJ1Y2tldCBhdWZyYWV1bWVuDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJHRhZ1Byb3BzID0gQCgkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS5QU09i -amVjdC5Qcm9wZXJ0aWVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGFnUHJv -cHMuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBsYW51 -bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkZGF0dW0pDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZy5rb21tZW50YXJlLiRkYXR1bS4k -cGVyc29uSWQgPSBAKCRuZXVlTGlzdGUuVG9BcnJheSgpKQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5q -c29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAgICAkZW50ZmVy -bnRUZXh0ID0gaWYgKCR0cmVmZmVyLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgeyBbc3Ry -aW5nXSR0cmVmZmVyLnRleHQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -cmV0dXJuIEB7IHRleHQgPSAkZW50ZmVybnRUZXh0IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICBpZiAoJGVyZy5mZWhsZXIpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkZXJnLmZlaGxlciAtZXEgJ2tvbW1lbnRhck5pY2h0R2VmdW5kZW4nKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tvbW1lbnRh -ciBtaXQgZGllc2VyIElEIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgJGdlbG9lc2NodGVyVGV4dCA9ICRlcmcudGV4dA0KICAgICAgICAgICAgICAgIH0gY2F0Y2gg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVy -OiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -IyBSZWRhY3Rpb24gKFNwcmludCAxIOKAlCBTaWNoZXJoZWl0cy1Ob3RicmVtc2UgMjAyNi0wNS0y -OCk6DQogICAgICAgICAgICAgICAgIyBQSUktU2NodXR6LiBGcnVlaGVyIGxhbmRldGUgZGVyIHZv -bGxzdGFlbmRpZ2UgS29tbWVudGFyLVRleHQgaW0NCiAgICAgICAgICAgICAgICAjIExvZ2J1Y2gg -4oCUIHdlbm4gZGVyIEtvbW1lbnRhciBLcmFua2hlaXRzLS9EaXN6aXBsaW5hci1JbmZvIGVudGhp -ZWx0LA0KICAgICAgICAgICAgICAgICMgbGVidGUgc2llIG5hY2ggJ0xvZXNjaGVuJyB3ZWl0ZXIg -aW0gTG9nLiBKZXR6dCBudXIgTGFlbmdlICsga3VyemVyDQogICAgICAgICAgICAgICAgIyBBdXN6 -dWcgKDQwIFplaWNoZW4pLCBnZW51ZyBmdWVyIE5hY2h2b2xsemllaGJhcmtlaXQgb2huZSBWb2xs -dGV4dC4NCiAgICAgICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJycNCiAgICAgICAgICAgICAg -ICBpZiAoJGdlbG9lc2NodGVyVGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAka3VyeiA9ICRn -ZWxvZXNjaHRlclRleHQNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRrdXJ6Lkxlbmd0aCAtZ3Qg -NDApIHsgJGt1cnogPSAka3Vyei5TdWJzdHJpbmcoMCwgNDApICsgJ+KApicgfQ0KICAgICAgICAg -ICAgICAgICAgICAkdGV4dFZvcnNjaGF1ID0gJGt1cnoNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgJHRleHRMYWVuZ2UgPSBpZiAoJGdlbG9lc2NodGVyVGV4dCkgeyAkZ2Vsb2Vz -Y2h0ZXJUZXh0Lkxlbmd0aCB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dF -aW50cmFnICdrb21tZW50YXIuZ2Vsb2VzY2h0JyBAew0KICAgICAgICAgICAgICAgICAgICBkYXR1 -bSAgICAgICAgID0gJGRhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkICAgICAgPSAk -cGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFySWQgICA9ICRrb21tZW50YXJJ -ZA0KICAgICAgICAgICAgICAgICAgICB0ZXh0Vm9yc2NoYXUgID0gJHRleHRWb3JzY2hhdQ0KICAg -ICAgICAgICAgICAgICAgICB0ZXh0TGFlbmdlICAgID0gJHRleHRMYWVuZ2UNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VpbnRyYWcgJ2tvbW1lbnRhcicg -QHsNCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAg -ICAgICAgcGVyc29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAga29tbWVudGFy -SWQgPSAka29tbWVudGFySWQNCiAgICAgICAgICAgICAgICAgICAgIyBMaXZlLVN5bmMtQ2hhbm5l -bCBicmF1Y2h0IGRlbiBUZXh0IG5pY2h0IOKAlCBCcm93c2VyIGxhZWR0DQogICAgICAgICAgICAg -ICAgICAgICMgYmVpIG5hZWNoc3RlbSBSZW5kZXIgZWggYXVzIHBsYW51bmcuanNvbiAod28gZGVy -IEVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAgIyB3ZWcgaXN0KS4gSGllciBudXIgTWV0YWRh -dGVuIGZ1ZXIgQWt0aXZpdGFldHMtQW56ZWlnZS4NCiAgICAgICAgICAgICAgICAgICAgbmV1ICAg -ICAgPSAnJw0KICAgICAgICAgICAgICAgICAgICB6ZWl0c3RlbXBlbCA9IChHZXQtRGF0ZSkuVG9T -dHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25P -YmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnOyBrb21tZW50YXJJZCA9ICRr -b21tZW50YXJJZCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K -ICAgICAgICAgICAgIyA9PT09PSBQRVJTT05FTiA9PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRo -IC1lcSAnL2FwaS9wZXJzb25lbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5hbmdlbGVndCcg +QHsgcGVyc29uSWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IG5hbWUgPSAiJCgkbmV1LnZvcm5hbWUpICQo +JG5ldS5uYW1lKSIuVHJpbSgpOyBlaW5yZWloZW4gPSAkcGVyc1Jlcy5laW5yZWloZW47IHBvc2l0 +aW9uID0gJHBlcnNSZXMuemllbFBvcyB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 +ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBpZCA9ICRwZXJzUmVzLm5ldWVJZDsg +cG9zaXRpb24gPSAkcGVyc1Jlcy56aWVsUG9zIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0K +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29u +ZW4vKFxkKykkJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1p +bi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtp +bnRdJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVz +dA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdXBk +YXRlID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBBdWRpdC1Q +aGFzZSBBLjMgKDIwMjYtMDUtMjEpOiBQcml2aWxlZ2llbi1TY2h1dHouIFJlaW5lDQogICAgICAg +ICAgICAgICAgIyBGYWNoYXVmc2ljaHQtQWRtaW5zIChzZWhlbi5hZG1pbmlzdHJhdGlvbj10cnVl +LCBhYmVyIGtlaW4gU1UpDQogICAgICAgICAgICAgICAgIyBkdWVyZmVuIFN0YW1tZGF0ZW4gZWRp +dGllcmVuLCBhYmVyIEtFSU5FIFNpY2h0YmFya2VpdHMtDQogICAgICAgICAgICAgICAgIyBPdmVy +cmlkZXMgKGBzZWhlbmApIG9kZXIgZWRpdGllci1SZWNodGUgKGBlZGl0UmVjaHRlYCkgc2V0emVu +DQogICAgICAgICAgICAgICAgIyDigJQgc29uc3Qga29lbm50ZW4gc2llIHNpY2ggTG9nYnVjaC0v +U3RhdGlzdGlrLVNpY2h0IHNlbGJzdA0KICAgICAgICAgICAgICAgICMgZnJlaXNjaGFsdGVuLiBQ +ZXIgRGV2VG9vbHMtbWFuaXB1bGllcnRlcyBQYXlsb2FkIGFiZmFuZ2VuLg0KICAgICAgICAgICAg +ICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsNCiAgICAgICAgICAgICAgICAgICAg +aWYgKCR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllc1snc2VoZW4nXSkgICAgICB7ICR1cGRhdGUu +UFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ3NlaGVuJykgfQ0KICAgICAgICAgICAgICAgICAg +ICBpZiAoJHVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlZGl0UmVjaHRlJ10pIHsgJHVwZGF0 +ZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgnZWRpdFJlY2h0ZScpIH0NCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgJHB1dFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAg +dHJ5IHsNCiAgICAgICAgICAgICAgICAkcHV0UmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxh +bnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3Qg +J3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gICA9ICRmYWxzZQ0KICAg +ICAgICAgICAgICAgICRhbHRlV2VydGUgID0gQHt9DQogICAgICAgICAgICAgICAgJHBlcnNvbk5h +bWUgPSAnJw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVu +KSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcC5pZCAtZXEgJHBlcnNvbklkKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgoIiQoJHAudm9ybmFtZSkgJCgkcC5u +YW1lKSIpLlRyaW0oKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9wIGlu +ICR1cGRhdGUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkcHJvcC5OYW1lIC1uZSAnaWQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRhbHRlV2VydGVbJHByb3AuTmFtZV0gPSBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGll +c1skcHJvcC5OYW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1skcHJv +cC5OYW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgPSAkcHJvcC5WYWx1ZSB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5h +bWUgJHByb3AuTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHByb3AuVmFsdWUgLUZvcmNlIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZ2VmdW5kZW4pIHsgcmV0dXJuIEB7IGdlZnVuZGVu +ID0gJGZhbHNlIH0gfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcu +anNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBnZWZ1 +bmRlbiA9ICR0cnVlOyBhbHRlV2VydGUgPSAkYWx0ZVdlcnRlOyBwZXJzb25OYW1lID0gJHBlcnNv +bk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg +ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8i +KSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgt +bm90ICRwdXRSZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgIlBlcnNvbiAkcGVy +c29uSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRh +bHRlV2VydGUgID0gJHB1dFJlcy5hbHRlV2VydGUNCiAgICAgICAgICAgICAgICAkcGVyc29uTmFt +ZSA9ICRwdXRSZXMucGVyc29uTmFtZQ0KDQogICAgICAgICAgICAgICAgIyBEaWZmLURpY3Qg4oCU +IG51ciBGZWxkZXIsIGluIGRlbmVuIHNpY2ggZGVyIFdlcnQgdGF0c2FlY2hsaWNoDQogICAgICAg +ICAgICAgICAgIyBnZWFlbmRlcnQgaGF0LiBKU09OLXN0YWJpbGUgVmVyZ2xlaWNoc2Jhc2lzLg0K +ICAgICAgICAgICAgICAgICRnZWFlbmRlcnQgPSBbb3JkZXJlZF1Ae30NCiAgICAgICAgICAgICAg +ICBmb3JlYWNoICgkcHJvcCBpbiAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAg +ICAgICAgICAgICAgICAgaWYgKCRwcm9wLk5hbWUgLWVxICdpZCcpIHsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICAgICAkYWx0VmFsICA9ICRhbHRlV2VydGVbJHByb3AuTmFtZV0NCiAgICAg +ICAgICAgICAgICAgICAgJG5ldVZhbCAgPSAkcHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAg +ICAkYWx0SnNvbiA9ICgkYWx0VmFsIHwgQ29udmVydFRvLUpzb24gLUNvbXByZXNzIC1EZXB0aCA4 +KQ0KICAgICAgICAgICAgICAgICAgICAkbmV1SnNvbiA9ICgkbmV1VmFsIHwgQ29udmVydFRvLUpz +b24gLUNvbXByZXNzIC1EZXB0aCA4KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFsdEpzb24g +LW5lICRuZXVKc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0WyRwcm9w +Lk5hbWVdID0gW29yZGVyZWRdQHsgYWx0ID0gJGFsdFZhbDsgbmV1ID0gJG5ldVZhbCB9DQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBX +cml0ZS1Mb2dFaW50cmFnICdwZXJzb24uZ2VhZW5kZXJ0JyAoW29yZGVyZWRdQHsNCiAgICAgICAg +ICAgICAgICAgICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIG5h +bWUgICAgICA9ICRwZXJzb25OYW1lDQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydCA9ICRn +ZWFlbmRlcnQNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICMgSGlud2Vpcy1U +cmlnZ2VyOiBJZGVudGl0YWV0cy1BZW5kZXJ1bmcgKG53S2VubnVuZyAvIGVtYWlsKSBiZWtvbW10 +DQogICAgICAgICAgICAgICAgIyBlaW5lbiBJbi1BcHAtSGlud2VpcyBmdWVyIFNVICsgR2VzYW10 +dmVyYW50d29ydGxpY2hlLiBQcm8gRmVsZCBlaW4NCiAgICAgICAgICAgICAgICAjIGVpZ2VuZXIg +RWludHJhZywgZGFtaXQgZGFzIE1vZGFsIGxlc2JhciBibGVpYnQuDQogICAgICAgICAgICAgICAg +Zm9yZWFjaCAoJGZlbGQgaW4gQCgnbndLZW5udW5nJywgJ2VtYWlsJykpIHsNCiAgICAgICAgICAg +ICAgICAgICAgaWYgKCRnZWFlbmRlcnQuQ29udGFpbnMoJGZlbGQpKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAkZGlmZiA9ICRnZWFlbmRlcnRbJGZlbGRdDQogICAgICAgICAgICAgICAgICAg +ICAgICBOZXctSGlud2VpcyAnaWRlbnRpdGFldF9nZWFlbmRlcnQnIChbb3JkZXJlZF1Aew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbl9pZCAgID0gJHBlcnNvbklkDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgcGVyc29uX25hbWUgPSAkcGVyc29uTmFtZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGZlbGQgICAgICAgID0gJGZlbGQNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBhbHRlcl93ZXJ0ICA9ICIkKCRkaWZmLmFsdCkiDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgbmV1ZXJfd2VydCAgPSAiJCgkZGlmZi5uZXUpIg0KICAgICAgICAgICAgICAg +ICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNv +bk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FrdHVhbGlzaWVydCcgfQ0KICAgICAgICAg +ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIERFTEVURSAvYXBp +L3BlcnNvbmVuL3tpZH0gICAgICAgICAgICAtPiBTb2Z0LURlbGV0ZSAoZ2Vsb2VzY2h0QW0gZ2Vz +ZXR6dCwgUGVyc29uIGJsZWlidCBpbSBEYXRlbnNhdHogZnVlciBQYXBpZXJrb3JiLVJ1ZWNraG9s +dW5nKQ0KICAgICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJzb25lbi97aWR9P2VuZGd1ZWx0aWc9 +MSAtPiBIYXJkLURlbGV0ZSAoUGVyc29uIGtvbXBsZXR0IGVudGZlcm5lbiwgRWludHJhZWdlL0tv +bW1lbnRhcmUgdmVyd2Fpc2VuKQ0KICAgICAgICAgICAgIyBWb3IgZGVtIFNvZnQtRGVsZXRlIHdl +cmRlbiBpbSBzZWxiZW4gWnVnIGJlcmVpdHMgUGFwaWVya29yYi1FaW50cmFlZ2UgYXVmZ2VyYWV1 +bXQsIGRpZSBhZWx0ZXIgYWxzDQogICAgICAgICAgICAjIGFkbWluLnBhcGllcmtvcmJUYWdlQXVm +YmV3YWhydW5nIChEZWZhdWx0IDMwIFRhZ2UpIHNpbmQuIFNvIGJsZWlidCBkZXIgRGF0ZW5zYXR6 +IHNjaGxhbmssIG9obmUNCiAgICAgICAgICAgICMgZWluZW4gc2VwYXJhdGVuIENyb24tSm9iIHp1 +IGJyYXVjaGVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4v +KFxkKykkJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgaWYg +KC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1p +bi1SZWNodGUnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtp +bnRdJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9ICRmYWxzZQ0KICAg +ICAgICAgICAgICAgIGlmICgkUmVxdWVzdC5VcmwuUXVlcnkpIHsNCiAgICAgICAgICAgICAgICAg +ICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVl +c3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9IChbc3RyaW5n +XSRxWydlbmRndWVsdGlnJ10pIC1lcSAnMScNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgJGRlbFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg +ICAgICAkZGVsUmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAg +ICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAg +ICAgICAgICAgICAgICAkYWRtaW4gICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAg +ICAgICAgICAgICAgICAkYXVmYmV3YWhydW5nID0gMzANCiAgICAgICAgICAgICAgICBpZiAoJGFk +bWluIC1hbmQgJGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BhcGllcmtvcmJUYWdlQXVmYmV3 +YWhydW5nJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJGF1ZmJld2FocnVuZyA9IFtp +bnRdJGFkbWluLnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nIH0gY2F0Y2gge30NCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygn +bycpDQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAnJw0KICAgICAgICAgICAgICAgICRn +ZWZ1bmRlbiA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRuZXVlUGVyc29uZW4gPSBAKCkNCiAg +ICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAg +ICAgICAgICAgICAgICBpZiAoJHAuaWQgLWVxICRwZXJzb25JZCkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgJGdlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICRwZXJz +b25OYW1lID0gKCgiJCgkcC52b3JuYW1lKSAkKCRwLm5hbWUpIikuVHJpbSgpKQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRlbmRndWVsdGlnKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIyBIYXJkLURlbGV0ZTogdWViZXJzcHJpbmdlbiwgUGVyc29uIGZsaWVndCByYXVzDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAg +ICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0 +LlByb3BlcnRpZXNbJ2dlbG9lc2NodEFtJ10pIHsgJHAuZ2Vsb2VzY2h0QW0gPSAkamV0enQgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQ +cm9wZXJ0eU5hbWUgJ2dlbG9lc2NodEFtJyAtTm90ZVByb3BlcnR5VmFsdWUgJGpldHp0IC1Gb3Jj +ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVQZXJzb25lbiArPSAkcA0KICAg +ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyBBdXRvLVB1cmdlOiBTb2Z0LURlbGV0ZWQtUGVyc29uZW4s +IGRlcmVuIGdlbG9lc2NodEFtIGFlbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHMg +JGF1ZmJld2FocnVuZyBUYWdlIGlzdCwgd2VyZGVuIGhpZXIgZW5kZ3VlbHRpZyBlbnRmZXJudC4N +CiAgICAgICAgICAgICAgICAgICAgICAgICRwdXJnZSA9ICRmYWxzZQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbG9lc2NodEFtJ10gLWFuZCAk +cC5nZWxvZXNjaHRBbSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHRlciA9IFtkYXRldGltZV0kcC5nZWxvZXNj +aHRBbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKE5ldy1UaW1lU3BhbiAt +U3RhcnQgJGFsdGVyIC1FbmQgKEdldC1EYXRlKSkuVG90YWxEYXlzIC1ndCAkYXVmYmV3YWhydW5n +KSB7ICRwdXJnZSA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNo +IHt9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkcHVyZ2UpIHsgJG5ldWVQZXJzb25lbiArPSAkcCB9DQogICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGdlZnVu +ZGVuKSB7IHJldHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9IH0NCiAgICAgICAgICAgICAgICAk +cGxhbnVuZy5wZXJzb25lbiA9IFtvYmplY3RbXV1AKCRuZXVlUGVyc29uZW4pDQogICAgICAgICAg +ICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxs +DQogICAgICAgICAgICAgICAgcmV0dXJuIEB7IGdlZnVuZGVuID0gJHRydWU7IHBlcnNvbk5hbWUg +PSAkcGVyc29uTmFtZTsgamV0enQgPSAkamV0enQgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +cG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRkZWxSZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgIlBlcnNvbiAkcGVyc29uSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJGRlbFJlcy5wZXJzb25OYW1lDQog +ICAgICAgICAgICAgICAgJGpldHp0ID0gJGRlbFJlcy5qZXR6dA0KICAgICAgICAgICAgICAgIGlm +ICgkZW5kZ3VlbHRpZykgew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdw +ZXJzb24uZW5kZ3VlbHRpZy5nZWxvZXNjaHQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBuYW1l +ID0gJHBlcnNvbk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5pbi5wYXBpZXJrb3JiJyBAeyBwZXJzb25J +ZCA9ICRwZXJzb25JZDsgbmFtZSA9ICRwZXJzb25OYW1lOyBnZWxvZXNjaHRBbSA9ICRqZXR6dCB9 +DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVz +cG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCc7IG1vZHVzID0gaWYgKCRlbmRndWVsdGlnKSB7 +ICdlbmRndWVsdGlnJyB9IGVsc2UgeyAncGFwaWVya29yYicgfSB9DQogICAgICAgICAgICAgICAg +Y29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +cGVyc29uZW4vcmVpaGVuZm9sZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2Ug J0tlaW5lIEFkbWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJv ZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkg eyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJG5ldSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAg -ICAgICAgICAgICMgUmVhZC1Nb2RpZnktV3JpdGUgYXRvbWFyIGluIGRlciBEYXRlaS1TcGVycmUu -IFdpY2h0aWcgbmljaHQgbnVyDQogICAgICAgICAgICAgICAgIyBnZWdlbiBMb3N0IFVwZGF0ZXMs -IHNvbmRlcm4gZ2VnZW4gZGllIG1heElkLVJhY2U6IHp3ZWkgcGFyYWxsZWxlDQogICAgICAgICAg -ICAgICAgIyBQZXJzb25lbi1BbmxhZ2VuIHd1ZXJkZW4gc29uc3QgZGllc2VsYmUgbWF4SWQgbGVz -ZW4gdW5kIElERU5USVNDSEUNCiAgICAgICAgICAgICAgICAjIElEcyB2ZXJnZWJlbiAoZG9wcGVs -dGUgUGVyc29uZW4tSURzID0ga29ycnVwdGVyIFN0YXRlKS4NCiAgICAgICAgICAgICAgICAkcGVy -c1JlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkcGVy -c1JlcyA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAg -ICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAg -ICAgICAgJG1heElkID0gMA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5n -LnBlcnNvbmVuKSB7IGlmICgkcC5pZCAtZ3QgJG1heElkKSB7ICRtYXhJZCA9ICRwLmlkIH0gfQ0K -ICAgICAgICAgICAgICAgICRuZXVlSWQgPSAkbWF4SWQgKyAxDQoNCiAgICAgICAgICAgICAgICAj -IEVpbnJlaWh1bmdzLUxvZ2lrOiAidW50ZW4iIChEZWZhdWx0KSwgInZvciIgb2RlciAibmFjaCIg -ZWluZXIgUmVmZXJlbnpwZXJzb24NCiAgICAgICAgICAgICAgICAkZWlucmVpaGVuID0gJ3VudGVu -Jw0KICAgICAgICAgICAgICAgIGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnJlaWhl -biddIC1hbmQgJG5ldS5laW5yZWloZW4pIHsgJGVpbnJlaWhlbiA9IChbc3RyaW5nXSRuZXUuZWlu -cmVpaGVuKS5Ub0xvd2VyKCkgfQ0KICAgICAgICAgICAgICAgICRyZWZJZCA9ICRudWxsDQogICAg -ICAgICAgICAgICAgaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1sncmVmZXJlbnpJZCddIC1h -bmQgJG51bGwgLW5lICRuZXUucmVmZXJlbnpJZCkgeyAkcmVmSWQgPSBbaW50XSRuZXUucmVmZXJl -bnpJZCB9DQoNCiAgICAgICAgICAgICAgICAkemllbFBvcyA9ICRudWxsDQogICAgICAgICAgICAg -ICAgaWYgKCgkZWlucmVpaGVuIC1lcSAndm9yJyAtb3IgJGVpbnJlaWhlbiAtZXEgJ25hY2gnKSAt -YW5kICRudWxsIC1uZSAkcmVmSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlZlBvcyA9ICRu -dWxsDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVu -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kcC5pZCAtZXEgJHJlZklkKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZlBvcyA9IGlmICgkcC5QU09iamVjdC5Q -cm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQgJHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlv -biB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAg +DQogICAgICAgICAgICAgICAgJHJlaWhlbmZvbGdlID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u +DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhG +aWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVu +ZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg +ICAgZm9yZWFjaCAoJHIgaW4gJHJlaWhlbmZvbGdlKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgZm9yZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCRwLmlkIC1lcSAkci5pZCkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9u +J10pIHsgJHAucG9zaXRpb24gPSAkci5wb3NpdGlvbiB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdw +b3NpdGlvbicgLU5vdGVQcm9wZXJ0eVZhbHVlICRyLnBvc2l0aW9uIC1Gb3JjZSB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAn +cGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgIH0g +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAg +ICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUN +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVy +c29uZW4ucmVpaGVuZm9sZ2UuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpz +b25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQnIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IEhJ +TldFSVNFIChJbi1BcHAtQmFubmVyL01vZGFsLVN5c3RlbSkgPT09PT0NCiAgICAgICAgICAgICMg +R0VUICAvYXBpL2hpbndlaXNlICAgICAgICAgICAgLT4gb2ZmZW5lIEhpbndlaXNlIGZ1ZXIgZGVu +IGVpbmdlbG9nZ3RlbiBVc2VyDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9oaW53ZWlzZS97aWR9 +L2tlbm50bmlzIC0+IEtlbm50bmlzbmFobWUgc2V0emVuDQogICAgICAgICAgICAjIEdFVCAgL2Fw +aS9oaW53ZWlzZS91ZWJlcnNpY2h0IC0+IFNVLW9ubHksIHZvbGxzdGFlbmRpZ2UgU2ljaHQgaW5r +bC4gTGVzZS1TdGF0dXMNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGlud2Vpc2Un +IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAjIEdhdGVkOiBudXIg +RW1wZmFlbmdlciAoU1Ugb2RlciBHZXNhbXR2ZXJhbnR3b3J0bGljaCkgZHVlcmZlbiB1ZWJlcmhh +dXB0IGZyYWdlbg0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAg +ICAgIGlmICgtbm90ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRs +aWNoKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7 +IGhpbndlaXNlID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgSW52b2tlLUhpbndlaXNQcnVuaW5nDQogICAgICAg +ICAgICAgICAgJGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydo +aW53ZWlzZSddKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u +c2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkb2ZmZW4gPSBAKCkNCiAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndlaXNlKSkgew0KICAgICAgICAgICAg +ICAgICAgICAkaXN0RW1wZmFlbmdlciA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAkaXN0 +R2VsZXNlbiAgICA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAk +ZWludHJhZy5rZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICBpZiAoVGVzdC1NYXRjaEtlbm51bmcgKFtzdHJpbmddJHAuTmFtZSkpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXN0RW1wZmFlbmdlciA9ICR0cnVlDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcC5WYWx1ZSkgeyAkaXN0R2Vs +ZXNlbiA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgIGlmICgkbnVsbCAtbmUgJHJlZlBvcykgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JHppZWxQb3MgPSBpZiAoJGVpbnJlaWhlbiAtZXEgJ3ZvcicpIHsgJHJlZlBvcyB9IGVsc2UgeyAk -cmVmUG9zICsgMSB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBvc2l0aW9uZW4gYWIgemll -bFBvcyB1bSAxIG5hY2ggaGludGVuIHNjaGllYmVuDQogICAgICAgICAgICAgICAgICAgICAgICBm -b3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRwcCA9IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQg -JHAucG9zaXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJHBwIC1nZSAkemllbFBvcykgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSkg -eyAkcC5wb3NpdGlvbiA9ICRwcCArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdwb3NpdGlvbicgLU5v -dGVQcm9wZXJ0eVZhbHVlICgkcHAgKyAxKSAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICR6aWVs -UG9zKSB7DQogICAgICAgICAgICAgICAgICAgICRtYXhQb3MgPSAwDQogICAgICAgICAgICAgICAg -ICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7ICRwb3MgPSBpZiAoJHAucG9z -aXRpb24pIHsgW2ludF0kcC5wb3NpdGlvbiB9IGVsc2UgeyAwIH07IGlmICgkcG9zIC1ndCAkbWF4 -UG9zKSB7ICRtYXhQb3MgPSAkcG9zIH0gfQ0KICAgICAgICAgICAgICAgICAgICAkemllbFBvcyA9 -ICRtYXhQb3MgKyAxDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJHBlcnNv -biA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGlkID0gJG5ldWVJZA0KICAgICAg -ICAgICAgICAgICAgICBha3RpdiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2 -J10pIHsgJG5ldS5ha3RpdiB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIG5h -bWUgPSAkbmV1Lm5hbWUNCiAgICAgICAgICAgICAgICAgICAgdm9ybmFtZSA9IGlmICgkbmV1LlBT -T2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAkbmV1LnZvcm5hbWUgfSBlbHNlIHsgJycg -fQ0KICAgICAgICAgICAgICAgICAgICBkaWVuc3RncmFkID0gaWYgKCRuZXUuUFNPYmplY3QuUHJv -cGVydGllc1snZGllbnN0Z3JhZCddKSB7ICRuZXUuZGllbnN0Z3JhZCB9IGVsc2UgeyAnJyB9DQog -ICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9uID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGll -c1snZnVua3Rpb24nXSkgeyAkbmV1LmZ1bmt0aW9uIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg -ICAgICAgICAgZ3J1cHBlID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZ3J1cHBlJ10p -IHsgJG5ldS5ncnVwcGUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBvZSA9IGlm -ICgkbmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ29lJ10pIHsgJG5ldS5vZSB9IGVsc2UgeyAnJyB9 -DQogICAgICAgICAgICAgICAgICAgIGRpZW5zdG51bW1lciA9IGlmICgkbmV1LlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ2RpZW5zdG51bW1lciddKSB7ICRuZXUuZGllbnN0bnVtbWVyIH0gZWxzZSB7ICcn -IH0NCiAgICAgICAgICAgICAgICAgICAgdGVsZWZvbiA9IGlmICgkbmV1LlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ3RlbGVmb24nXSkgeyAkbmV1LnRlbGVmb24gfSBlbHNlIHsgJycgfQ0KICAgICAgICAg -ICAgICAgICAgICBwb3NpdGlvbiA9ICR6aWVsUG9zDQogICAgICAgICAgICAgICAgICAgIGVtYWls -ID0gaWYgKCRuZXUuUFNPYmplY3QuUHJvcGVydGllc1snZW1haWwnXSkgeyAkbmV1LmVtYWlsIH0g -ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgbndLZW5udW5nID0gaWYgKCRuZXUuUFNP -YmplY3QuUHJvcGVydGllc1snbndLZW5udW5nJ10pIHsgJG5ldS5ud0tlbm51bmcgfSBlbHNlIHsg -JycgfQ0KICAgICAgICAgICAgICAgICAgICBnZWJ1cnRzZGF0dW0gPSBpZiAoJG5ldS5QU09iamVj -dC5Qcm9wZXJ0aWVzWydnZWJ1cnRzZGF0dW0nXSkgeyAkbmV1LmdlYnVydHNkYXR1bSB9IGVsc2Ug -eyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGVsRGdsUXVhbGlmaXppZXJ0ID0gaWYgKCRuZXUu -UFNPYmplY3QuUHJvcGVydGllc1snZWxEZ2xRdWFsaWZpemllcnQnXSkgeyBbYm9vbF0kbmV1LmVs -RGdsUXVhbGlmaXppZXJ0IH0gZWxzZSB7ICRmYWxzZSB9DQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICMgTWFya2VyIGZ1ZXIgUGVyc29uZW4sIGRpZSBwZXIgRXhjZWwtSW1wb3J0 -IGZyaXNjaCBhbmdlbGVndA0KICAgICAgICAgICAgICAgICMgd3VyZGVuLiBQZXJzb25hbHZlcndh -bHR1bmcgYmxlbmRldCBzaWUgaW0gTmV1aW1wb3J0LUJsb2NrDQogICAgICAgICAgICAgICAgIyBv -YmVuIGVpbiwgYmlzIGRhcyBGbGFnIG1hbnVlbGwgd2VnZ2VzZXR6dCB3aXJkIChFcmxlZGlndC0N -CiAgICAgICAgICAgICAgICAjIEJ1dHRvbikgb2RlciBkYXMgbGV0enRlIFBmbGljaHRmZWxkIChE -aWVuc3RncnVwcGUpIGdlcGZsZWd0DQogICAgICAgICAgICAgICAgIyBpc3QgdW5kIGRlciBVc2Vy -IGF1ZiAiQmxvY2sgbGVlcmVuIiBrbGlja3QuDQogICAgICAgICAgICAgICAgaWYgKCRuZXUuUFNP -YmplY3QuUHJvcGVydGllc1snaW1wb3J0TmV1QW0nXSAtYW5kICRuZXUuaW1wb3J0TmV1QW0pIHsN -CiAgICAgICAgICAgICAgICAgICAgJHBlcnNvblsnaW1wb3J0TmV1QW0nXSA9IFtzdHJpbmddJG5l -dS5pbXBvcnROZXVBbQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVu -Zy5wZXJzb25lbiArPSBbUFNDdXN0b21PYmplY3RdJHBlcnNvbg0KICAgICAgICAgICAgICAgIFdy -aXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAg -ICAgICAgICAgIHJldHVybiBAeyBuZXVlSWQgPSAkbmV1ZUlkOyB6aWVsUG9zID0gJHppZWxQb3M7 -IGVpbnJlaWhlbiA9ICRlaW5yZWloZW4gfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug -KCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5hbmdlbGVndCcgQHsgcGVyc29u -SWQgPSAkcGVyc1Jlcy5uZXVlSWQ7IG5hbWUgPSAiJCgkbmV1LnZvcm5hbWUpICQoJG5ldS5uYW1l -KSIuVHJpbSgpOyBlaW5yZWloZW4gPSAkcGVyc1Jlcy5laW5yZWloZW47IHBvc2l0aW9uID0gJHBl -cnNSZXMuemllbFBvcyB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25z -ZSBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBpZCA9ICRwZXJzUmVzLm5ldWVJZDsgcG9zaXRpb24g -PSAkcGVyc1Jlcy56aWVsUG9zIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykk -JyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn -IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtpbnRdJE1hdGNo -ZXNbMV0NCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdBbmZyYWdl -IHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkdXBkYXRlID0gJGJv -ZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgIyBBdWRpdC1QaGFzZSBBLjMg -KDIwMjYtMDUtMjEpOiBQcml2aWxlZ2llbi1TY2h1dHouIFJlaW5lDQogICAgICAgICAgICAgICAg -IyBGYWNoYXVmc2ljaHQtQWRtaW5zIChzZWhlbi5hZG1pbmlzdHJhdGlvbj10cnVlLCBhYmVyIGtl -aW4gU1UpDQogICAgICAgICAgICAgICAgIyBkdWVyZmVuIFN0YW1tZGF0ZW4gZWRpdGllcmVuLCBh -YmVyIEtFSU5FIFNpY2h0YmFya2VpdHMtDQogICAgICAgICAgICAgICAgIyBPdmVycmlkZXMgKGBz -ZWhlbmApIG9kZXIgZWRpdGllci1SZWNodGUgKGBlZGl0UmVjaHRlYCkgc2V0emVuDQogICAgICAg -ICAgICAgICAgIyDigJQgc29uc3Qga29lbm50ZW4gc2llIHNpY2ggTG9nYnVjaC0vU3RhdGlzdGlr -LVNpY2h0IHNlbGJzdA0KICAgICAgICAgICAgICAgICMgZnJlaXNjaGFsdGVuLiBQZXIgRGV2VG9v -bHMtbWFuaXB1bGllcnRlcyBQYXlsb2FkIGFiZmFuZ2VuLg0KICAgICAgICAgICAgICAgIGlmICgt -bm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1cGRh -dGUuUFNPYmplY3QuUHJvcGVydGllc1snc2VoZW4nXSkgICAgICB7ICR1cGRhdGUuUFNPYmplY3Qu -UHJvcGVydGllcy5SZW1vdmUoJ3NlaGVuJykgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHVw -ZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlZGl0UmVjaHRlJ10pIHsgJHVwZGF0ZS5QU09iamVj -dC5Qcm9wZXJ0aWVzLlJlbW92ZSgnZWRpdFJlY2h0ZScpIH0NCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJHB1dFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAg -ICAgICAgICAgICAgICAkcHV0UmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29u -JyB7DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcu -anNvbicNCiAgICAgICAgICAgICAgICAkZ2VmdW5kZW4gICA9ICRmYWxzZQ0KICAgICAgICAgICAg -ICAgICRhbHRlV2VydGUgID0gQHt9DQogICAgICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAnJw0K -ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAg -ICAgICAgICAgICAgICAgIGlmICgkcC5pZCAtZXEgJHBlcnNvbklkKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAkcGVyc29uTmFtZSA9ICgoIiQoJHAudm9ybmFtZSkgJCgkcC5uYW1lKSIpLlRy -aW0oKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9wIGluICR1cGRhdGUu -UFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -cHJvcC5OYW1lIC1uZSAnaWQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRh -bHRlV2VydGVbJHByb3AuTmFtZV0gPSBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1skcHJvcC5O -YW1lXSkgeyAkcC4oJHByb3AuTmFtZSkgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1skcHJvcC5OYW1lXSkg -eyAkcC4oJHByb3AuTmFtZSkgPSAkcHJvcC5WYWx1ZSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJHByb3Au -TmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHByb3AuVmFsdWUgLUZvcmNlIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAkZ2VmdW5kZW4gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAg -YnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAkZ2VmdW5kZW4pIHsgcmV0dXJuIEB7IGdlZnVuZGVuID0gJGZhbHNl -IH0gfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBs -YW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIHJldHVybiBAeyBnZWZ1bmRlbiA9ICR0 -cnVlOyBhbHRlV2VydGUgPSAkYWx0ZVdlcnRlOyBwZXJzb25OYW1lID0gJHBlcnNvbk5hbWUgfQ0K -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAg -ICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJMb2NrLUZlaGxlcjogJF8iKSA1MDM7IGNv -bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRwdXRS -ZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgIlBlcnNvbiAkcGVyc29uSWQgbmlj -aHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRhbHRlV2VydGUg -ID0gJHB1dFJlcy5hbHRlV2VydGUNCiAgICAgICAgICAgICAgICAkcGVyc29uTmFtZSA9ICRwdXRS -ZXMucGVyc29uTmFtZQ0KDQogICAgICAgICAgICAgICAgIyBEaWZmLURpY3Qg4oCUIG51ciBGZWxk -ZXIsIGluIGRlbmVuIHNpY2ggZGVyIFdlcnQgdGF0c2FlY2hsaWNoDQogICAgICAgICAgICAgICAg -IyBnZWFlbmRlcnQgaGF0LiBKU09OLXN0YWJpbGUgVmVyZ2xlaWNoc2Jhc2lzLg0KICAgICAgICAg -ICAgICAgICRnZWFlbmRlcnQgPSBbb3JkZXJlZF1Ae30NCiAgICAgICAgICAgICAgICBmb3JlYWNo -ICgkcHJvcCBpbiAkdXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAg -ICAgICAgaWYgKCRwcm9wLk5hbWUgLWVxICdpZCcpIHsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgICAgICAkYWx0VmFsICA9ICRhbHRlV2VydGVbJHByb3AuTmFtZV0NCiAgICAgICAgICAgICAg -ICAgICAgJG5ldVZhbCAgPSAkcHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAkYWx0SnNv -biA9ICgkYWx0VmFsIHwgQ29udmVydFRvLUpzb24gLUNvbXByZXNzIC1EZXB0aCA4KQ0KICAgICAg -ICAgICAgICAgICAgICAkbmV1SnNvbiA9ICgkbmV1VmFsIHwgQ29udmVydFRvLUpzb24gLUNvbXBy -ZXNzIC1EZXB0aCA4KQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGFsdEpzb24gLW5lICRuZXVK -c29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0WyRwcm9wLk5hbWVdID0g -W29yZGVyZWRdQHsgYWx0ID0gJGFsdFZhbDsgbmV1ID0gJG5ldVZhbCB9DQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dF -aW50cmFnICdwZXJzb24uZ2VhZW5kZXJ0JyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAg -ICAgcGVyc29uSWQgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICA9 -ICRwZXJzb25OYW1lDQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydCA9ICRnZWFlbmRlcnQN -CiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICMgSGlud2Vpcy1UcmlnZ2VyOiBJ -ZGVudGl0YWV0cy1BZW5kZXJ1bmcgKG53S2VubnVuZyAvIGVtYWlsKSBiZWtvbW10DQogICAgICAg -ICAgICAgICAgIyBlaW5lbiBJbi1BcHAtSGlud2VpcyBmdWVyIFNVICsgR2VzYW10dmVyYW50d29y -dGxpY2hlLiBQcm8gRmVsZCBlaW4NCiAgICAgICAgICAgICAgICAjIGVpZ2VuZXIgRWludHJhZywg -ZGFtaXQgZGFzIE1vZGFsIGxlc2JhciBibGVpYnQuDQogICAgICAgICAgICAgICAgZm9yZWFjaCAo -JGZlbGQgaW4gQCgnbndLZW5udW5nJywgJ2VtYWlsJykpIHsNCiAgICAgICAgICAgICAgICAgICAg -aWYgKCRnZWFlbmRlcnQuQ29udGFpbnMoJGZlbGQpKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAkZGlmZiA9ICRnZWFlbmRlcnRbJGZlbGRdDQogICAgICAgICAgICAgICAgICAgICAgICBOZXct -SGlud2VpcyAnaWRlbnRpdGFldF9nZWFlbmRlcnQnIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIHBlcnNvbl9pZCAgID0gJHBlcnNvbklkDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgcGVyc29uX25hbWUgPSAkcGVyc29uTmFtZQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGZlbGQgICAgICAgID0gJGZlbGQNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBhbHRlcl93ZXJ0ICA9ICIkKCRkaWZmLmFsdCkiDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgbmV1ZXJfd2VydCAgPSAiJCgkZGlmZi5uZXUpIg0KICAgICAgICAgICAgICAgICAgICAgICAg -fSkgKEdldC1Ba3R1ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk -UmVzcG9uc2UgQHsgc3RhdHVzID0gJ2FrdHVhbGlzaWVydCcgfQ0KICAgICAgICAgICAgICAgIGNv -bnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICAjIERFTEVURSAvYXBpL3BlcnNvbmVu -L3tpZH0gICAgICAgICAgICAtPiBTb2Z0LURlbGV0ZSAoZ2Vsb2VzY2h0QW0gZ2VzZXR6dCwgUGVy -c29uIGJsZWlidCBpbSBEYXRlbnNhdHogZnVlciBQYXBpZXJrb3JiLVJ1ZWNraG9sdW5nKQ0KICAg -ICAgICAgICAgIyBERUxFVEUgL2FwaS9wZXJzb25lbi97aWR9P2VuZGd1ZWx0aWc9MSAtPiBIYXJk -LURlbGV0ZSAoUGVyc29uIGtvbXBsZXR0IGVudGZlcm5lbiwgRWludHJhZWdlL0tvbW1lbnRhcmUg -dmVyd2Fpc2VuKQ0KICAgICAgICAgICAgIyBWb3IgZGVtIFNvZnQtRGVsZXRlIHdlcmRlbiBpbSBz -ZWxiZW4gWnVnIGJlcmVpdHMgUGFwaWVya29yYi1FaW50cmFlZ2UgYXVmZ2VyYWV1bXQsIGRpZSBh -ZWx0ZXIgYWxzDQogICAgICAgICAgICAjIGFkbWluLnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5n -IChEZWZhdWx0IDMwIFRhZ2UpIHNpbmQuIFNvIGJsZWlidCBkZXIgRGF0ZW5zYXR6IHNjaGxhbmss -IG9obmUNCiAgICAgICAgICAgICMgZWluZW4gc2VwYXJhdGVuIENyb24tSm9iIHp1IGJyYXVjaGVu -Lg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1tYXRjaCAnXi9hcGkvcGVyc29uZW4vKFxkKykkJyAt -YW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl -c3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBBZG1pbi1SZWNodGUn -IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRwZXJzb25JZCA9IFtpbnRdJE1hdGNo -ZXNbMV0NCiAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9ICRmYWxzZQ0KICAgICAgICAgICAg -ICAgIGlmICgkUmVxdWVzdC5VcmwuUXVlcnkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHEgPSBb -U3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1 -ZXJ5KQ0KICAgICAgICAgICAgICAgICAgICAkZW5kZ3VlbHRpZyA9IChbc3RyaW5nXSRxWydlbmRn -dWVsdGlnJ10pIC1lcSAnMScNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGRl -bFJlcyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkZGVs -UmVzID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAg -ICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg -ICAgICAkYWRtaW4gICA9IFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicNCiAgICAgICAgICAg -ICAgICAkYXVmYmV3YWhydW5nID0gMzANCiAgICAgICAgICAgICAgICBpZiAoJGFkbWluIC1hbmQg -JGFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nJ10p -IHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJGF1ZmJld2FocnVuZyA9IFtpbnRdJGFkbWlu -LnBhcGllcmtvcmJUYWdlQXVmYmV3YWhydW5nIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgJGpldHp0ID0gKEdldC1EYXRlKS5Ub1N0cmluZygnbycpDQogICAg -ICAgICAgICAgICAgJHBlcnNvbk5hbWUgPSAnJw0KICAgICAgICAgICAgICAgICRnZWZ1bmRlbiA9 -ICRmYWxzZQ0KICAgICAgICAgICAgICAgICRuZXVlUGVyc29uZW4gPSBAKCkNCiAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAg -ICAgICBpZiAoJHAuaWQgLWVxICRwZXJzb25JZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JGdlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICRwZXJzb25OYW1lID0g -KCgiJCgkcC52b3JuYW1lKSAkKCRwLm5hbWUpIikuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRlbmRndWVsdGlnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBI -YXJkLURlbGV0ZTogdWViZXJzcHJpbmdlbiwgUGVyc29uIGZsaWVndCByYXVzDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz -ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ2dlbG9lc2NodEFtJ10pIHsgJHAuZ2Vsb2VzY2h0QW0gPSAkamV0enQgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5h -bWUgJ2dlbG9lc2NodEFtJyAtTm90ZVByb3BlcnR5VmFsdWUgJGpldHp0IC1Gb3JjZSB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJG5ldWVQZXJzb25lbiArPSAkcA0KICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg -ICAgICAgICAgICAgIyBBdXRvLVB1cmdlOiBTb2Z0LURlbGV0ZWQtUGVyc29uZW4sIGRlcmVuIGdl -bG9lc2NodEFtIGFlbHRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHMgJGF1ZmJld2Fo -cnVuZyBUYWdlIGlzdCwgd2VyZGVuIGhpZXIgZW5kZ3VlbHRpZyBlbnRmZXJudC4NCiAgICAgICAg -ICAgICAgICAgICAgICAgICRwdXJnZSA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2dlbG9lc2NodEFtJ10gLWFuZCAkcC5nZWxvZXNj -aHRBbSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICRhbHRlciA9IFtkYXRldGltZV0kcC5nZWxvZXNjaHRBbQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKE5ldy1UaW1lU3BhbiAtU3RhcnQgJGFs -dGVyIC1FbmQgKEdldC1EYXRlKSkuVG90YWxEYXlzIC1ndCAkYXVmYmV3YWhydW5nKSB7ICRwdXJn -ZSA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -cHVyZ2UpIHsgJG5ldWVQZXJzb25lbiArPSAkcCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJGdlZnVuZGVuKSB7IHJl -dHVybiBAeyBnZWZ1bmRlbiA9ICRmYWxzZSB9IH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZy5w -ZXJzb25lbiA9IFtvYmplY3RbXV1AKCRuZXVlUGVyc29uZW4pDQogICAgICAgICAgICAgICAgV3Jp -dGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAg -ICAgICAgICAgcmV0dXJuIEB7IGdlZnVuZGVuID0gJHRydWU7IHBlcnNvbk5hbWUgPSAkcGVyc29u -TmFtZTsgamV0enQgPSAkamV0enQgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJM -b2NrLUZlaGxlcjogJF8iKSA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRkZWxSZXMuZ2VmdW5kZW4pIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgIlBlcnNvbiAkcGVyc29uSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRwZXJzb25OYW1lID0gJGRlbFJlcy5wZXJzb25OYW1lDQogICAgICAgICAg -ICAgICAgJGpldHp0ID0gJGRlbFJlcy5qZXR6dA0KICAgICAgICAgICAgICAgIGlmICgkZW5kZ3Vl -bHRpZykgew0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb24uZW5k -Z3VlbHRpZy5nZWxvZXNjaHQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBuYW1lID0gJHBlcnNv -bk5hbWUgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIFdy -aXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5pbi5wYXBpZXJrb3JiJyBAeyBwZXJzb25JZCA9ICRwZXJz -b25JZDsgbmFtZSA9ICRwZXJzb25OYW1lOyBnZWxvZXNjaHRBbSA9ICRqZXR6dCB9DQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsg -c3RhdHVzID0gJ2dlbG9lc2NodCc7IG1vZHVzID0gaWYgKCRlbmRndWVsdGlnKSB7ICdlbmRndWVs -dGlnJyB9IGVsc2UgeyAncGFwaWVya29yYicgfSB9DQogICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGVyc29uZW4v -cmVpaGVuZm9sZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEFk -bWluLVJlY2h0ZScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFk -LUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJHJlaWhlbmZvbGdlID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAg -ICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAn -cGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQt -SnNvbk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj -aCAoJHIgaW4gJHJlaWhlbmZvbGdlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y -ZWFjaCAoJHAgaW4gJHBsYW51bmcucGVyc29uZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRwLmlkIC1lcSAkci5pZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsgJHAu -cG9zaXRpb24gPSAkci5wb3NpdGlvbiB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBlbHNlIHsgJHAgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICdwb3NpdGlvbicg -LU5vdGVQcm9wZXJ0eVZhbHVlICRyLnBvc2l0aW9uIC1Gb3JjZSB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5q -c29uJyAkcGxhbnVuZyB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVs -bA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVy -cm9yICRSZXNwb25zZSAoIkxvY2stRmVobGVyOiAkXyIpIDUwMzsgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uZW4ucmVp -aGVuZm9sZ2UuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg -JFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09IEhJTldFSVNFIChJ -bi1BcHAtQmFubmVyL01vZGFsLVN5c3RlbSkgPT09PT0NCiAgICAgICAgICAgICMgR0VUICAvYXBp -L2hpbndlaXNlICAgICAgICAgICAgLT4gb2ZmZW5lIEhpbndlaXNlIGZ1ZXIgZGVuIGVpbmdlbG9n -Z3RlbiBVc2VyDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9oaW53ZWlzZS97aWR9L2tlbm50bmlz -IC0+IEtlbm50bmlzbmFobWUgc2V0emVuDQogICAgICAgICAgICAjIEdFVCAgL2FwaS9oaW53ZWlz -ZS91ZWJlcnNpY2h0IC0+IFNVLW9ubHksIHZvbGxzdGFlbmRpZ2UgU2ljaHQgaW5rbC4gTGVzZS1T -dGF0dXMNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGlud2Vpc2UnIC1hbmQgJE1l -dGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAjIEdhdGVkOiBudXIgRW1wZmFlbmdl -ciAoU1Ugb2RlciBHZXNhbXR2ZXJhbnR3b3J0bGljaCkgZHVlcmZlbiB1ZWJlcmhhdXB0IGZyYWdl -bg0KICAgICAgICAgICAgICAgICRyID0gR2V0LVJlY2h0ZQ0KICAgICAgICAgICAgICAgIGlmICgt -bm90ICgkci5pc3RTdXBlclVzZXIgLW9yICRyLmlzdEdlc2FtdHZlcmFudHdvcnRsaWNoKSkgew0K -ICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNl -ID0gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgSW52b2tlLUhpbndlaXNQcnVuaW5nDQogICAgICAgICAgICAgICAg -JGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAgICAgICAgaWYg +ICAgICAgIGlmICgkaXN0RW1wZmFlbmdlciAtYW5kIC1ub3QgJGlzdEdlbGVzZW4pIHsgJG9mZmVu +ICs9ICRlaW50cmFnIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IFtvYmplY3RbXV0kb2ZmZW4gfQ0KICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBh +dGggLW1hdGNoICdeL2FwaS9oaW53ZWlzZS8oXGQrKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAt +ZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGhpbndlaXNJZCA9IFtpbnRdJE1hdGNoZXNb +MV0NCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAo +LW5vdCAoJHIuaXN0U3VwZXJVc2VyIC1vciAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsN +CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRp +Z3VuZycgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAk +c2NyaXB0OmhpbndlaXNLZW5udG5pc0dlc2V0enQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAk +c2NyaXB0OmhpbndlaXNLZW5udG5pc1R5cCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tl +LVdpdGhGaWxlTG9jayAnaGlud2Vpc2UuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkaCA9 +IFJlYWQtSnNvbk9iamVjdCAnaGlud2Vpc2UuanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYg KCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSdd -KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlu -d2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAkb2ZmZW4gPSBAKCkNCiAgICAgICAgICAgICAgICBmb3Jl -YWNoICgkZWludHJhZyBpbiBAKCRoLmhpbndlaXNlKSkgew0KICAgICAgICAgICAgICAgICAgICAk -aXN0RW1wZmFlbmdlciA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAkaXN0R2VsZXNlbiAg -ICA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkZWludHJhZy5r -ZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoVGVzdC1NYXRjaEtlbm51bmcgKFtzdHJpbmddJHAuTmFtZSkpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkaXN0RW1wZmFlbmdlciA9ICR0cnVlDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkcC5WYWx1ZSkgeyAkaXN0R2VsZXNlbiA9ICR0 -cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlm -ICgkaXN0RW1wZmFlbmdlciAtYW5kIC1ub3QgJGlzdEdlbGVzZW4pIHsgJG9mZmVuICs9ICRlaW50 -cmFnIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAeyBoaW53ZWlzZSA9IFtvYmplY3RbXV0kb2ZmZW4gfQ0KICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNo -ICdeL2FwaS9oaW53ZWlzZS8oXGQrKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1Qn -KSB7DQogICAgICAgICAgICAgICAgJGhpbndlaXNJZCA9IFtpbnRdJE1hdGNoZXNbMV0NCiAgICAg -ICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJHIu -aXN0U3VwZXJVc2VyIC1vciAkci5pc3RHZXNhbXR2ZXJhbnR3b3J0bGljaCkpIHsNCiAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAz -OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Omhp -bndlaXNLZW5udG5pc0dlc2V0enQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAkc2NyaXB0Omhp -bndlaXNLZW5udG5pc1R5cCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxl -TG9jayAnaGlud2Vpc2UuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAkaCA9IFJlYWQtSnNv -bk9iamVjdCAnaGlud2Vpc2UuanNvbicNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l -cSAkaCAtb3IgLW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7IHJldHVy -biB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAoJGguaGlud2Vp -c2UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kZWludHJhZy5pZCAtbmUg -JGhpbndlaXNJZCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIEVyc3Qg -ZGVuIE1hdGNoLVNsb3QgZXJtaXR0ZWxuLCBkYW5uIGF1c3NlcmhhbGIgZGVyDQogICAgICAgICAg -ICAgICAgICAgICAgICAjIFByb3BlcnR5LUVudW1lcmF0aW9uIGluLXBsYWNlIHNldHplbiAoUFMg -NS4xIG1hZyBkYXMNCiAgICAgICAgICAgICAgICAgICAgICAgICMgTW9kaWZpemllcmVuIHdhZWhy -ZW5kIGZvcmVhY2ggbmljaHQgaW1tZXIpLg0KICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNo -TmFtZSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkZWlu -dHJhZy5rZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKFRlc3QtTWF0Y2hLZW5udW5nIChbc3RyaW5nXSRwLk5hbWUpKSB7 -ICRtYXRjaE5hbWUgPSAkcC5OYW1lOyBicmVhayB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG1hdGNoTmFtZSkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJp -bmcoJ3l5eXktTU0tZGRUSEg6bW06c3NaJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -ZWludHJhZy5rZW5udG5pc25haG1lbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgJG1h -dGNoTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHRzIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICR0cnVlDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKCRlaW50cmFnLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3R5 -cCddKSB7ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gW3N0cmluZ10kZWludHJhZy50eXAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJl -YWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHNjcmlw -dDpoaW53ZWlzS2VubnRuaXNHZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0 -ZS1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJyAkaCB8IE91dC1OdWxsDQogICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAk -Z2VzZXR6dCA9IFtib29sXSRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dA0KICAgICAgICAg -ICAgICAgICRrZW5udG5pc1R5cCA9ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwDQogICAgICAg -ICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0ID0gJGZhbHNlDQogICAgICAg -ICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNUeXAgPSAkbnVsbA0KICAgICAgICAgICAg -ICAgIGlmICgtbm90ICRnZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICJIaW53ZWlzICRoaW53ZWlzSWQgbmljaHQgZ2VmdW5kZW4gb2RlciBuaWNodCBm -dWVyIFNpZSBiZXN0aW1tdCIgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAkbG9nRmVsZGVyID0gQHsgaGlud2Vpc0lkID0gJGhpbndlaXNJZCB9DQogICAg -ICAgICAgICAgICAgaWYgKCRrZW5udG5pc1R5cCkgeyAkbG9nRmVsZGVyWyd0eXAnXSA9ICRrZW5u -dG5pc1R5cCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnaGlud2Vpcy5rZW5u -dG5pcycgJGxvZ0ZlbGRlcg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u -c2UgQHsgc3RhdHVzID0gJ2tlbm50bmlzX2dlc2V0enQnIH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9oaW53 -ZWlzZS91ZWJlcnNpY2h0JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -TnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgSW52b2tlLUhp -bndlaXNQcnVuaW5nDQogICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25PYmplY3QgJ2hpbndl -aXNlLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3IgLW5vdCAkaC5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAgICAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gW29iamVjdFtdXUAoJGguaGlud2Vp -c2UpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAg -ICAgICAjID09PT09IE1JVFRFSUxVTkdFTiAoU3ByaW50IEQtM2IsIDIwMjYtMDUtMjkpID09PT09 -DQogICAgICAgICAgICAjIFZvbSBTVSBtYW51ZWxsIGdlcGZsZWd0ZXMgSGlud2Vpcy1Nb2RhbC1T -eXN0ZW0gKHNlcGFyYXQgdm9uDQogICAgICAgICAgICAjIC9hcGkvaGlud2Vpc2UsIGRhcyBpc3Qg -bnVyIGZ1ZXIgU3lzdGVtLUVyZWlnbmlzc2UgU1UvR1YpLg0KICAgICAgICAgICAgIyBTY2hlbWEg -KyBGaWx0ZXJ1bmctTG9naWsgZ2VzcGllZ2VsdCBhdXMgZGV2L3NlcnZlci5weToNCiAgICAgICAg -ICAgICMgICBfbWl0dGVpbHVuZ2VuX2Z1ZXJfYWt0dWVsbGVuX3VzZXIoKSBiencuIF9wZXJzb25f -YXVzX3BpZCgpLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4n -IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmpl -Y3QgJFJlc3BvbnNlIEB7IG1pdHRlaWx1bmdlbiA9IChHZXQtTWl0dGVpbHVuZ2VuRnVlckFrdHVl -bGxlblVzZXIpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4vYWxsZScgLWFuZCAkTWV0 -aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVy -VXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQwMzsgY29udGlu -dWUgfQ0KICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4u -anNvbicNCiAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCkNCiAgICAgICAgICAgICAgICBpZiAo -JG51bGwgLW5lICRtIC1hbmQgJG0uUFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10p -IHsNCiAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkbS5taXR0ZWlsdW5nZW4pDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsgbWl0dGVpbHVuZ2VuID0gW29iamVjdFtdXSRsaXN0ZSB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0 -dGVpbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBT -dXBlclVzZXIgZHVlcmZlbiBNaXR0ZWlsdW5nZW4gYW5sZWdlbicgNDAzOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAg -IGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JvZHkgZmVobHQnIDQwMDsg -Y29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8IENvbnZlcnRG -cm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09O -JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIFNlcnZlci1zZWl0aWdlIFNhbml0 -aXNpZXJ1bmcgKFN0b3JlZC1YU1MpOiB0aXRlbCArIHRleHQgd2VyZGVuDQogICAgICAgICAgICAg -ICAgIyBpbSBDbGllbnQgdmlhIGlubmVySFRNTCBnZXJlbmRlcnQuDQogICAgICAgICAgICAgICAg -JHRpdGVsID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAoKFtzdHJpbmddKCRib2R5LnRpdGVsKSku -VHJpbSgpKQ0KICAgICAgICAgICAgICAgICR0ZXh0ICA9IENvbnZlcnRUby1TYWZlUmljaEh0bWwg -KChbc3RyaW5nXSgkYm9keS50ZXh0KSkuVHJpbSgpKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 -ICR0aXRlbCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVGl0ZWwgaXN0IFBmbGljaHRmZWxkJyA0 -MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkgIHsgU2VuZC1F -cnJvciAkUmVzcG9uc2UgJ1RleHQgaXN0IFBmbGljaHRmZWxkJyAgNDAwOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgJHJhbmQgPSAtam9pbiAoKDQ4Li41NykgKyAoOTcuLjEyMikgfCBHZXQt -UmFuZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1PYmplY3QgeyBbY2hhcl0kXyB9KQ0KICAgICAgICAg -ICAgICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVN -aWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gIm1fJHttc31fJHtyYW5k -fSINCiAgICAgICAgICAgICAgICAkZW1wZkRlZmF1bHQgPSBbcHNjdXN0b21vYmplY3RdQHsNCiAg -ICAgICAgICAgICAgICAgICAgYWxsZSA9ICR0cnVlOyBwZXJzb25lbiA9IEAoKTsgZ3J1cHBlbiA9 -IEAoKTsgcm9sbGVuID0gQCgpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRl -bXBmID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtcGZhZW5nZXInXSkgeyAkYm9k -eS5lbXBmYWVuZ2VyIH0gZWxzZSB7ICRlbXBmRGVmYXVsdCB9DQogICAgICAgICAgICAgICAgJG5l -dSA9IFtwc2N1c3RvbW9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICBpZCAgICAgICAgICAg -PSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIHRpdGVsICAgICAgICA9ICR0aXRlbA0KICAg -ICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSAkdGV4dA0KICAgICAgICAgICAgICAgICAg -ICB0aHVtYm5haWwgICAgPSBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sndGh1bWJuYWls -J10pIHsgJGJvZHkudGh1bWJuYWlsIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAg -ICAgcGRmICAgICAgICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BkZiddKSAg -ICAgICB7ICRib2R5LnBkZiB9ICAgICAgIGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAg -ICAgIHRyaWdnZXIgICAgICA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0cmlnZ2Vy -J10gLWFuZCAkYm9keS50cmlnZ2VyKSB7IFtzdHJpbmddJGJvZHkudHJpZ2dlciB9IGVsc2UgeyAn -ZWlubWFsJyB9DQogICAgICAgICAgICAgICAgICAgIGJpc0RhdHVtICAgICA9IGlmICgkYm9keS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWydiaXNEYXR1bSddKSAgeyAkYm9keS5iaXNEYXR1bSB9ICBlbHNl -IHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICBlbXBmYWVuZ2VyICAgPSAkZW1wZg0KICAg -ICAgICAgICAgICAgICAgICBlcnN0ZWxsdEFtICAgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGlt -ZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpDQogICAgICAgICAgICAgICAgICAg -IGVyc3RlbGx0Vm9uICA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAgICAgICAgICAg -ICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZv -biA9ICRudWxsDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEludm9rZS1XaXRo -RmlsZUxvY2sgJ21pdHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICRtID0g -UmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAgICAg -aWYgKCRudWxsIC1lcSAkbSkgeyAkbSA9IFtwc2N1c3RvbW9iamVjdF1AeyBtaXR0ZWlsdW5nZW4g -PSBAKCk7IGdlbGVzZW4gPSBbcHNjdXN0b21vYmplY3RdQHt9IH0gfQ0KICAgICAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5nZW4nXSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1l -IG1pdHRlaWx1bmdlbiAtTm90ZVByb3BlcnR5VmFsdWUgQCgpIC1Gb3JjZQ0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVt -YmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlbGVzZW4gLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0 -b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAjIG5ldWVzdGUgb2Jlbg0KICAgICAgICAgICAgICAgICAgICAkbS5taXR0ZWlsdW5n -ZW4gPSBAKCRuZXUpICsgQCgkbS5taXR0ZWlsdW5nZW4pDQogICAgICAgICAgICAgICAgICAgIFdy -aXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAg -ICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAn -bWl0dGVpbHVuZy5hbmdlbGVndCcgQHsgaWQgPSAkbmV1ZUlkOyB0aXRlbCA9ICR0aXRlbCB9DQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnYW5n -ZWxlZ3QnOyBtaXR0ZWlsdW5nID0gJG5ldSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1 -bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdO -dXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbWlkID0gJE1h -dGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkcmF3ID0gUmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQm9keSBm -ZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3 -IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3Vl -bHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6bWl0 -dGVpbHVuZ0dlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWls -dW5nWmllbCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWl0 -dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFkLUpzb25PYmpl -Y3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdlbiddKSB7IHJl -dHVybiB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAoJG0ubWl0 -dGVpbHVuZ2VuKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJGVpbnRy -YWcuaWQgLW5lICRtaWQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9y -ZWFjaCAoJGZlbGQgaW4gJ3RpdGVsJywndGV4dCcsJ3RodW1ibmFpbCcsJ3BkZicsJ3RyaWdnZXIn -LCdiaXNEYXR1bScsJ2VtcGZhZW5nZXInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICR3ZXJ0ID0gJGJvZHkuJGZlbGQNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKCgkZmVsZCAtZXEgJ3RpdGVsJyAtb3IgJGZlbGQgLWVxICd0ZXh0Jykg -LWFuZCAoJHdlcnQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJHdlcnQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICR3ZXJ0DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JGVpbnRyYWcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkIC1Ob3RlUHJvcGVy -dHlWYWx1ZSAkd2VydCAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZyB8 -IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0QW0gIC1Ob3RlUHJvcGVydHlW -YWx1ZSAoKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygneXl5eS1NTS1kZFRI -SDptbTpzc1onKSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAkZWludHJhZyB8IEFk -ZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0Vm9uIC1Ob3RlUHJvcGVydHlWYWx1 -ZSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAg -ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICRzY3JpcHQ6bWl0dGVpbHVuZ1ppZWwgPSAkZWludHJhZw0KICAgICAgICAgICAgICAgICAg +KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGluIEAo +JGguaGlud2Vpc2UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kZWludHJh +Zy5pZCAtbmUgJGhpbndlaXNJZCkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAjIEVyc3QgZGVuIE1hdGNoLVNsb3QgZXJtaXR0ZWxuLCBkYW5uIGF1c3NlcmhhbGIgZGVyDQog +ICAgICAgICAgICAgICAgICAgICAgICAjIFByb3BlcnR5LUVudW1lcmF0aW9uIGluLXBsYWNlIHNl +dHplbiAoUFMgNS4xIG1hZyBkYXMNCiAgICAgICAgICAgICAgICAgICAgICAgICMgTW9kaWZpemll +cmVuIHdhZWhyZW5kIGZvcmVhY2ggbmljaHQgaW1tZXIpLg0KICAgICAgICAgICAgICAgICAgICAg +ICAgJG1hdGNoTmFtZSA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgk +cCBpbiAkZWludHJhZy5rZW5udG5pc25haG1lbi5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtTWF0Y2hLZW5udW5nIChbc3RyaW5nXSRw +Lk5hbWUpKSB7ICRtYXRjaE5hbWUgPSAkcC5OYW1lOyBicmVhayB9DQogICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG1hdGNoTmFtZSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICR0cyA9IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1l +KCkuVG9TdHJpbmcoJ3l5eXktTU0tZGRUSEg6bW06c3NaJykNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkZWludHJhZy5rZW5udG5pc25haG1lbiB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0 +eU5hbWUgJG1hdGNoTmFtZSAtTm90ZVByb3BlcnR5VmFsdWUgJHRzIC1Gb3JjZQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dCA9ICR0cnVl +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlaW50cmFnLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ3R5cCddKSB7ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlwID0gW3N0cmluZ10kZWlu +dHJhZy50eXAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBp -ZiAoJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4pIHsgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVp -bHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVs -bA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuKSB7 -DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0ZWlsdW5nICRt -aWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgJHppZWwgPSAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsDQogICAgICAgICAgICAg -ICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4gPSAkZmFsc2U7ICRzY3JpcHQ6bWl0dGVpbHVu -Z1ppZWwgPSAkbnVsbA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21pdHRlaWx1 -bmcuZ2VhZW5kZXJ0JyBAeyBpZCA9ICRtaWQgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9i -amVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlYWVuZGVydCc7IG1pdHRlaWx1bmcgPSAkemll -bCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1l -dGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RT -dXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbWlkID0gJE1hdGNoZXNbMV0NCiAgICAgICAgICAg -ICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAg -ICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAgICAgICAgICAg -ICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nDQogICAgICAg -ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0uUFNPYmplY3QuUHJvcGVy -dGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAgICAgICAgJHZv -cmhlciA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgICAgICAkbmFjaGhlciA9 -IEAoJHZvcmhlciB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLW5lICRtaWQgfSkNCiAg -ICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoZXIuQ291bnQgLWVxICRuYWNoaGVyLkNvdW50KSB7 -IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRtLm1pdHRlaWx1bmdlbiA9ICRuYWNoaGVy -DQogICAgICAgICAgICAgICAgICAgICMgZ2VsZXNlbi1FaW50cmFlZ2UgZnVlciBkaWVzZSBNaXR0 -ZWlsdW5nIGF1ZnJhZXVtZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRtLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo -JHAgaW4gQCgkbS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXMpKSB7DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRwLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXNbJG1pZF0pIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHAuVmFsdWUuUFNPYmplY3QuUHJvcGVy -dGllcy5SZW1vdmUoJG1pZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwN -CiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0ID0gJHRydWUN -CiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -c2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F -cnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1 -bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdt -aXR0ZWlsdW5nLmdlbG9lc2NodCcgQHsgaWQgPSAkbWlkIH0NCiAgICAgICAgICAgICAgICBTZW5k -LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0NCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkv -bWl0dGVpbHVuZ2VuL3VwbG9hZCDigJQgU1Utb25seSwgQmlsZCAoMiBNQikgb2RlciBQREYgKDEw -IE1CKQ0KICAgICAgICAgICAgIyBCb2R5OiB7ImFydCI6ICJiaWxkInwicGRmIiwgImRhdGVpbmFt -ZSI6ICJ4LnBuZyIsICJkYXRhVXJsIjogImRhdGE6Li4uIn0NCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL3VwbG9hZCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcp -IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQt -RXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gTWl0dGVpbHVuZ3MtQW5oYWVu -Z2UgaG9jaGxhZGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIDE0IE1CIE1h -eFNpemUsIHdlaWwgMTBNQiBQREYgYmFzZTY0LWNvZGllcnQgfjEzLjQgTUIgUGF5bG9hZCB3aXJk -DQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdCAtTWF4U2l6ZSAxNE1C -DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRSZXNwb25zZSAn -QW5mcmFnZSB6dSBncm9zcyAobWF4IDE0IE1CKScgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgICRhcnQgPSAoW3N0cmluZ10kYm9keS5hcnQpLlRvTG93ZXIoKQ0KICAgICAg -ICAgICAgICAgICRkYXRhVXJsID0gW3N0cmluZ10kYm9keS5kYXRhVXJsDQogICAgICAgICAgICAg -ICAgaWYgKCRhcnQgLW5lICdiaWxkJyAtYW5kICRhcnQgLW5lICdwZGYnKSB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdhcnQgbXVzcyAiYmlsZCIgb2RlciAicGRm -IiBzZWluJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICRleHQgPSAkbnVsbDsgJG1heEJ5dGVzID0gMA0KICAgICAgICAgICAgICAgIGlmICgkYXJ0IC1l -cSAnYmlsZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhVXJsIC1tYXRjaCAnXmRh -dGE6aW1hZ2UvKGpwZWd8anBnfHBuZ3x3ZWJwKTtiYXNlNjQsJykgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgJGV4dCA9ICgkTWF0Y2hlc1sxXSAtcmVwbGFjZSAnanBlZycsJ2pwZycpDQogICAg -ICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMgPSAyICogMTAyNCAqIDEwMjQNCiAgICAgICAg -ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig -JFJlc3BvbnNlICdCaWxkOiBlcndhcnRldCBkYXRhOmltYWdlLyhqcGVnfHBuZ3x3ZWJwKTtiYXNl -NjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFVcmwgLWxpa2UgJ2Rh -dGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwqJykgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JGV4dCA9ICdwZGYnDQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMgPSAxMCAqIDEw -MjQgKiAxMDI0DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnUERGOiBlcndhcnRldCBkYXRhOmFwcGxpY2F0 -aW9uL3BkZjtiYXNlNjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGJhc2U2NCA9ICRkYXRhVXJsIC1y -ZXBsYWNlICdeZGF0YTpbXjtdKztiYXNlNjQsJywgJycNCiAgICAgICAgICAgICAgICB0cnkgeyAk -Ynl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCRiYXNlNjQpIH0NCiAg -ICAgICAgICAgICAgICBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlIGJh -c2U2NC1EYXRlbicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKCRieXRlcy5M -ZW5ndGggLWd0ICRtYXhCeXRlcykgew0KICAgICAgICAgICAgICAgICAgICAkbGltaXRLYiA9IFtp -bnRdKCRtYXhCeXRlcyAvIDEwMjQpDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl -c3BvbnNlICIkYXJ0IHp1IGdyb3NzIChtYXggJGxpbWl0S2IgS0IpIiA0MTM7IGNvbnRpbnVlDQog -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR1cGxvYWREaXIgPSBKb2luLVBhdGgg -JERhdGFEaXIgJ3VwbG9hZHMnIHwgSm9pbi1QYXRoIC1DaGlsZFBhdGggJ21pdHRlaWx1bmdlbicN -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkdXBsb2Fk -RGlyKSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGly -ZWN0b3J5IC1QYXRoICR1cGxvYWREaXIgLUZvcmNlIHwgT3V0LU51bGwgfSBjYXRjaCB7fQ0KICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcmFuZCA9IC1qb2luICgoNDguLjU3KSAr -ICg5Ny4uMTIyKSB8IEdldC1SYW5kb20gLUNvdW50IDYgfCBGb3JFYWNoLU9iamVjdCB7IFtjaGFy -XSRfIH0pDQogICAgICAgICAgICAgICAgJG1zID0gW2ludDY0XShbRGF0ZVRpbWVPZmZzZXRdOjpV -dGNOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAgICAgICAgICRmaWxlbmFt -ZSA9ICJtXyR7bXN9XyR7cmFuZH0uJGV4dCINCiAgICAgICAgICAgICAgICAkemllbFBmYWQgPSBK -b2luLVBhdGggJHVwbG9hZERpciAkZmlsZW5hbWUNCiAgICAgICAgICAgICAgICBbU3lzdGVtLklP -LkZpbGVdOjpXcml0ZUFsbEJ5dGVzKCR6aWVsUGZhZCwgJGJ5dGVzKQ0KICAgICAgICAgICAgICAg -ICMgS2VpbmUgQUNMLVJlc3RyaWN0aW9uOiBVcGxvYWRzIHNpbmQgZnVlciBkaWUgRW1wZmFlbmdl -ci0NCiAgICAgICAgICAgICAgICAjIEdydXBwZSAobWFudWVsbCB2b20gU1UgdmVydGVpbHQpIGdl -ZGFjaHQsIG5pY2h0IGdlaGVpbS4NCiAgICAgICAgICAgICAgICAkcmVsUGZhZCA9ICIvZGF0YS91 -cGxvYWRzL21pdHRlaWx1bmdlbi8kZmlsZW5hbWUiDQogICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAnbWl0dGVpbHVuZy51cGxvYWQnIEB7IGFydCA9ICRhcnQ7IGRhdGVpID0gJGZpbGVu -YW1lOyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9i -amVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgcGZhZCA9ICRyZWxQZmFkOyBieXRlcyA9 -ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 -DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3 -LV0rKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAg -ICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHIgPSBHZXQtUmVjaHRlDQog -ICAgICAgICAgICAgICAgJHBpZCA9ICRyLm1laW5lUGVyc29uSWQNCiAgICAgICAgICAgICAgICBp -ZiAoJG51bGwgLWVxICRwaWQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIFBlcnNvbiB6 -dWdlb3JkbmV0JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRl -aWx1bmdLZW5udG5pc09LID0gJGZhbHNlDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxl +ZiAoJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICBXcml0ZS1Kc29uT2JqZWN0ICdoaW53ZWlzZS5qc29uJyAkaCB8IE91dC1OdWxsDQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAg +ICAgICAgICAkZ2VzZXR6dCA9IFtib29sXSRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzR2VzZXR6dA0K +ICAgICAgICAgICAgICAgICRrZW5udG5pc1R5cCA9ICRzY3JpcHQ6aGlud2Vpc0tlbm50bmlzVHlw +DQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNHZXNldHp0ID0gJGZhbHNl +DQogICAgICAgICAgICAgICAgJHNjcmlwdDpoaW53ZWlzS2VubnRuaXNUeXAgPSAkbnVsbA0KICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRnZXNldHp0KSB7DQogICAgICAgICAgICAgICAgICAgIFNl +bmQtRXJyb3IgJFJlc3BvbnNlICJIaW53ZWlzICRoaW53ZWlzSWQgbmljaHQgZ2VmdW5kZW4gb2Rl +ciBuaWNodCBmdWVyIFNpZSBiZXN0aW1tdCIgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAkbG9nRmVsZGVyID0gQHsgaGlud2Vpc0lkID0gJGhpbndlaXNJ +ZCB9DQogICAgICAgICAgICAgICAgaWYgKCRrZW5udG5pc1R5cCkgeyAkbG9nRmVsZGVyWyd0eXAn +XSA9ICRrZW5udG5pc1R5cCB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnaGlu +d2Vpcy5rZW5udG5pcycgJGxvZ0ZlbGRlcg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj +dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2tlbm50bmlzX2dlc2V0enQnIH0NCiAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS9oaW53ZWlzZS91ZWJlcnNpY2h0JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAg +ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRS +ZXNwb25zZSAnTnVyIFN1cGVyVXNlcicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg +SW52b2tlLUhpbndlaXNQcnVuaW5nDQogICAgICAgICAgICAgICAgJGggPSBSZWFkLUpzb25PYmpl +Y3QgJ2hpbndlaXNlLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkaCAtb3Ig +LW5vdCAkaC5QU09iamVjdC5Qcm9wZXJ0aWVzWydoaW53ZWlzZSddKSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgaGlud2Vpc2UgPSBAKCkgfQ0KICAg +ICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IGhpbndlaXNlID0gW29iamVjdFtdXUAo +JGguaGlud2Vpc2UpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K +DQogICAgICAgICAgICAjID09PT09IE1JVFRFSUxVTkdFTiAoU3ByaW50IEQtM2IsIDIwMjYtMDUt +MjkpID09PT09DQogICAgICAgICAgICAjIFZvbSBTVSBtYW51ZWxsIGdlcGZsZWd0ZXMgSGlud2Vp +cy1Nb2RhbC1TeXN0ZW0gKHNlcGFyYXQgdm9uDQogICAgICAgICAgICAjIC9hcGkvaGlud2Vpc2Us +IGRhcyBpc3QgbnVyIGZ1ZXIgU3lzdGVtLUVyZWlnbmlzc2UgU1UvR1YpLg0KICAgICAgICAgICAg +IyBTY2hlbWEgKyBGaWx0ZXJ1bmctTG9naWsgZ2VzcGllZ2VsdCBhdXMgZGV2L3NlcnZlci5weToN +CiAgICAgICAgICAgICMgICBfbWl0dGVpbHVuZ2VuX2Z1ZXJfYWt0dWVsbGVuX3VzZXIoKSBiencu +IF9wZXJzb25fYXVzX3BpZCgpLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0 +ZWlsdW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBTZW5k +LUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IG1pdHRlaWx1bmdlbiA9IChHZXQtTWl0dGVpbHVuZ2Vu +RnVlckFrdHVlbGxlblVzZXIpIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9taXR0ZWlsdW5nZW4vYWxsZScg +LWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0 +LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ051ciBTdXBlclVzZXInIDQw +MzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0 +ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAgICAgICAkbGlzdGUgPSBAKCkNCiAgICAgICAgICAg +ICAgICBpZiAoJG51bGwgLW5lICRtIC1hbmQgJG0uUFNPYmplY3QuUHJvcGVydGllc1snbWl0dGVp +bHVuZ2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJGxpc3RlID0gQCgkbS5taXR0ZWlsdW5n +ZW4pDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +UmVzcG9uc2UgQHsgbWl0dGVpbHVuZ2VuID0gW29iamVjdFtdXSRsaXN0ZSB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvbWl0dGVpbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAg +ICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBNaXR0ZWlsdW5nZW4gYW5sZWdlbicgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAg +ICAgICAgICAgIGlmICgtbm90ICRyYXcpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JvZHkgZmVo +bHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRib2R5ID0gJHJhdyB8 +IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0 +aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAjIFNlcnZlci1zZWl0 +aWdlIFNhbml0aXNpZXJ1bmcgKFN0b3JlZC1YU1MpOiB0aXRlbCArIHRleHQgd2VyZGVuDQogICAg +ICAgICAgICAgICAgIyBpbSBDbGllbnQgdmlhIGlubmVySFRNTCBnZXJlbmRlcnQuDQogICAgICAg +ICAgICAgICAgJHRpdGVsID0gQ29udmVydFRvLVNhZmVSaWNoSHRtbCAoKFtzdHJpbmddKCRib2R5 +LnRpdGVsKSkuVHJpbSgpKQ0KICAgICAgICAgICAgICAgICR0ZXh0ICA9IENvbnZlcnRUby1TYWZl +UmljaEh0bWwgKChbc3RyaW5nXSgkYm9keS50ZXh0KSkuVHJpbSgpKQ0KICAgICAgICAgICAgICAg +IGlmICgtbm90ICR0aXRlbCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVGl0ZWwgaXN0IFBmbGlj +aHRmZWxkJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGV4dCkg +IHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1RleHQgaXN0IFBmbGljaHRmZWxkJyAgNDAwOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJHJhbmQgPSAtam9pbiAoKDQ4Li41NykgKyAoOTcuLjEy +MikgfCBHZXQtUmFuZG9tIC1Db3VudCA2IHwgRm9yRWFjaC1PYmplY3QgeyBbY2hhcl0kXyB9KQ0K +ICAgICAgICAgICAgICAgICRtcyA9IFtpbnQ2NF0oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRv +VW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAgICAgICAgICAgICAkbmV1ZUlkID0gIm1fJHtt +c31fJHtyYW5kfSINCiAgICAgICAgICAgICAgICAkZW1wZkRlZmF1bHQgPSBbcHNjdXN0b21vYmpl +Y3RdQHsNCiAgICAgICAgICAgICAgICAgICAgYWxsZSA9ICR0cnVlOyBwZXJzb25lbiA9IEAoKTsg +Z3J1cHBlbiA9IEAoKTsgcm9sbGVuID0gQCgpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICRlbXBmID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VtcGZhZW5nZXIn +XSkgeyAkYm9keS5lbXBmYWVuZ2VyIH0gZWxzZSB7ICRlbXBmRGVmYXVsdCB9DQogICAgICAgICAg +ICAgICAgJG5ldSA9IFtwc2N1c3RvbW9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICBpZCAg +ICAgICAgICAgPSAkbmV1ZUlkDQogICAgICAgICAgICAgICAgICAgIHRpdGVsICAgICAgICA9ICR0 +aXRlbA0KICAgICAgICAgICAgICAgICAgICB0ZXh0ICAgICAgICAgPSAkdGV4dA0KICAgICAgICAg +ICAgICAgICAgICB0aHVtYm5haWwgICAgPSBpZiAoJGJvZHkuUFNPYmplY3QuUHJvcGVydGllc1sn +dGh1bWJuYWlsJ10pIHsgJGJvZHkudGh1bWJuYWlsIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAg +ICAgICAgICAgICAgcGRmICAgICAgICAgID0gaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNb +J3BkZiddKSAgICAgICB7ICRib2R5LnBkZiB9ICAgICAgIGVsc2UgeyAkbnVsbCB9DQogICAgICAg +ICAgICAgICAgICAgIHRyaWdnZXIgICAgICA9IGlmICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVz +Wyd0cmlnZ2VyJ10gLWFuZCAkYm9keS50cmlnZ2VyKSB7IFtzdHJpbmddJGJvZHkudHJpZ2dlciB9 +IGVsc2UgeyAnZWlubWFsJyB9DQogICAgICAgICAgICAgICAgICAgIGJpc0RhdHVtICAgICA9IGlm +ICgkYm9keS5QU09iamVjdC5Qcm9wZXJ0aWVzWydiaXNEYXR1bSddKSAgeyAkYm9keS5iaXNEYXR1 +bSB9ICBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICAgICBlbXBmYWVuZ2VyICAgPSAk +ZW1wZg0KICAgICAgICAgICAgICAgICAgICBlcnN0ZWxsdEFtICAgPSAoR2V0LURhdGUpLlRvVW5p +dmVyc2FsVGltZSgpLlRvU3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzWicpDQogICAgICAgICAg +ICAgICAgICAgIGVyc3RlbGx0Vm9uICA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAg +ICAgICAgICAgICAgIGdlYWVuZGVydEFtICA9ICRudWxsDQogICAgICAgICAgICAgICAgICAgIGdl +YWVuZGVydFZvbiA9ICRudWxsDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIElu +dm9rZS1XaXRoRmlsZUxvY2sgJ21pdHRlaWx1bmdlbi5qc29uJyB7DQogICAgICAgICAgICAgICAg +ICAgICRtID0gUmVhZC1Kc29uT2JqZWN0ICdtaXR0ZWlsdW5nZW4uanNvbicNCiAgICAgICAgICAg +ICAgICAgICAgaWYgKCRudWxsIC1lcSAkbSkgeyAkbSA9IFtwc2N1c3RvbW9iamVjdF1AeyBtaXR0 +ZWlsdW5nZW4gPSBAKCk7IGdlbGVzZW4gPSBbcHNjdXN0b21vYmplY3RdQHt9IH0gfQ0KICAgICAg +ICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydtaXR0ZWlsdW5n +ZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0gfCBBZGQtTWVtYmVyIC1Ob3RlUHJv +cGVydHlOYW1lIG1pdHRlaWx1bmdlbiAtTm90ZVByb3BlcnR5VmFsdWUgQCgpIC1Gb3JjZQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRtLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG0g +fCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lIGdlbGVzZW4gLU5vdGVQcm9wZXJ0eVZhbHVl +IChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAjIG5ldWVzdGUgb2Jlbg0KICAgICAgICAgICAgICAgICAgICAkbS5t +aXR0ZWlsdW5nZW4gPSBAKCRuZXUpICsgQCgkbS5taXR0ZWlsdW5nZW4pDQogICAgICAgICAgICAg +ICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxs +DQogICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgV3JpdGUtTG9n +RWludHJhZyAnbWl0dGVpbHVuZy5hbmdlbGVndCcgQHsgaWQgPSAkbmV1ZUlkOyB0aXRlbCA9ICR0 +aXRlbCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0 +dXMgPSAnYW5nZWxlZ3QnOyBtaXR0ZWlsdW5nID0gJG5ldSB9DQogICAgICAgICAgICAgICAgY29u +dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBp +L21pdHRlaWx1bmdlbi8oW1x3LV0rKSQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJl +c3BvbnNlICdOdXIgU3VwZXJVc2VyJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk +bWlkID0gJE1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkcmF3ID0gUmVhZC1Cb2R5ICRSZXF1 +ZXN0DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnQm9keSBmZWhsdCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJGJv +ZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRz +Y3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAgJHNjcmlw +dDptaXR0ZWlsdW5nWmllbCA9ICRudWxsDQogICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxl TG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgJG0gPSBSZWFk LUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAo JG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pdHRlaWx1bmdl -biddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRleGlzdGllcnQgPSBAKCRtLm1p -dHRlaWx1bmdlbiB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLWVxICRtaWQgfSkuQ291 -bnQgLWd0IDANCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGV4aXN0aWVydCkgeyByZXR1 -cm4gfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Qcm9wZXJ0aWVz -WydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRkLU1lbWJlciAt -Tm90ZVByb3BlcnR5TmFtZSBnZWxlc2VuIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3BzY3VzdG9tb2Jq -ZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgJHBpZFN0ciA9IFtzdHJpbmddJHBpZA0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -bS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBpZFN0cl0pIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICRtLmdlbGVzZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRwaWRT -dHIgLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9yY2UNCiAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkaGV1dGUgPSAoR2V0LURhdGUp -LlRvU3RyaW5nKCd5eXl5LU1NLWRkJykNCiAgICAgICAgICAgICAgICAgICAgJG0uZ2VsZXNlbi4k -cGlkU3RyIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkbWlkIC1Ob3RlUHJvcGVydHlW -YWx1ZSAkaGV1dGUgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg -J21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICRz -Y3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0gfCBP -dXQtTnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50 -bmlzT0spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRl -aWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJGZhbHNl -DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAn -a2VubnRuaXNfZ2VzZXR6dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gQkFDS1VQUyA9PT09PQ0KICAgICAgICAgICAgIyBC -YWNrdXAtTmFtaW5nIChnZXRhcm50LCBpbiBkYXRhL2NhY2hlLyk6DQogICAgICAgICAgICAjIC0g -c25hcF88dHM+LmJhayAgPSBCdW5kbGUgKHBsYW51bmcrYWRtaW4pIC0tIG1hbnVlbGxlIEJhY2t1 -cHMgKyBTaWNoZXJ1bmdlbg0KICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgdm9yIFdp -ZWRlcmhlcnN0ZWxsdW5nDQogICAgICAgICAgICAjIC0gbGVnXzx0cz4uYmFrICAgPSBOdXIgUGxh -bnVuZyAtLSBMZWdhY3ktQmFja3VwcyArIEF1dG8tU2ljaGVydW5nZW4NCiAgICAgICAgICAgICMg -ICAgICAgICAgICAgICAgICAgIHZvciBSZXNldC9EdW1teWRhdGVuDQogICAgICAgICAgICAjIC0g -Y2ZnXzx0cz5fPGhpbndlaXM+LmJhayA9IGFkbWluLmpzb24tQXV0by1CYWNrdXBzIChCYWNrdXAt -QWRtaW5Kc29uKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1 -cCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo -VGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWlu -ZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg -ICAkcGxhbnVuZ1BhdGggPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxhbnVuZ1BhdGgp -KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdQbGFudW5nIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ09iaiA9IFJlYWQtSnNvbk9iamVjdCAn -cGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbk9iaiAgID0gUmVhZC1Kc29uT2Jq -ZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJGFkbWluT2Jq -KSB7ICRhZG1pbk9iaiA9IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAgICAgICAgICR0 -cyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAk -Ym5hbWUgPSAic25hcF8kdHMuYmFrIg0KICAgICAgICAgICAgICAgICRidW5kbGUgPSBbb3JkZXJl -ZF1Aew0KICAgICAgICAgICAgICAgICAgICBmb3JtYXQgID0gJ3ZpMy1iYWNrdXAtdjEnDQogICAg -ICAgICAgICAgICAgICAgIHRzICAgICAgPSAkdHMNCiAgICAgICAgICAgICAgICAgICAgcGxhbnVu -ZyA9ICRwbGFudW5nT2JqDQogICAgICAgICAgICAgICAgICAgIGFkbWluICAgPSAkYWRtaW5PYmoN -CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpzb24gPSAkYnVuZGxlIHwgQ29u -dmVydFRvLUpzb24gLURlcHRoIDMwDQogICAgICAgICAgICAgICAgJGNhY2hlRGlyID0gSm9pbi1Q -YXRoICREYXRhRGlyICdjYWNoZScNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRo -IC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpKSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3Rvcnkg -LVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICBXcml0 -ZS1CYWNrdXBCeXRlcyAoSm9pbi1QYXRoICRjYWNoZURpciAkYm5hbWUpICRqc29uDQogICAgICAg -ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmVyc3RlbGx0JyBAeyBkYXRlaW5hbWUg -PSAkYm5hbWU7IGluaGFsdCA9ICdwbGFudW5nK2FkbWluJyB9DQogICAgICAgICAgICAgICAgU2Vu -ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZXJzdGVsbHQnOyBkYXRlaW5hbWUg -PSAkYm5hbWUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAg -ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwcycgLWFuZCAkTWV0aG9k -IC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNo -ICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAo -QmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRlaW50cmFlZ2UgPSBA -KCkNCiAgICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFEaXIgJ2NhY2hl -Jw0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURpcikg -ew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbXVzdGVyIGluICdzbmFwXyouYmFrJywn -bGVnXyouYmFrJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgR2V0LUNoaWxkSXRlbSAtTGl0 -ZXJhbFBhdGggJGNhY2hlRGlyIC1GaWx0ZXIgJG11c3RlciAtRmlsZSAtRXJyb3JBY3Rpb24gU2ls -ZW50bHlDb250aW51ZSB8IEZvckVhY2gtT2JqZWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkbmFtZSA9ICRfLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwID0g -aWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl9kdW1teV8nKSB7ICd2b3IgRHVtbXlkYXRlbicgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbmFtZSAtbWF0Y2ggJ192b3Jf -cmVzZXRfJykgeyAndm9yIFJlc2V0JyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBlbHNlaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl93aWVkZXJoZXJzdGVsbHVuZ18nKSB7ICd2b3Ig -V2llZGVyaGVyc3RlbGx1bmcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs -c2UgeyAnbWFudWVsbCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGUgPSAk -bmFtZS5TdGFydHNXaXRoKCdzbmFwXycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVp -bnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk -YXRlaW5hbWUgICA9ICRuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vz -c2UgICAgID0gJF8uTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyc3Rl -bGx0QW0gID0gJF8uTGFzdFdyaXRlVGltZS5Ub1N0cmluZygncycpDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIHR5cCAgICAgICAgID0gJHR5cA0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpbmhhbHQgICAgICA9IGlmICgkYnVuZGxlKSB7ICdLb21wbGV0dCAoUGxhbnVu -ZyArIEFkbWluKScgfSBlbHNlIHsgJ051ciBQbGFudW5nJyB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlzdEJ1bmRsZSAgID0gJGJ1bmRsZQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZWludHJhZWdlID0gQCgkZWlu -dHJhZWdlIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IGVyc3RlbGx0QW0gLURlc2NlbmRpbmcpDQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkZWludHJhZWdlDQogICAg -ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtbWF0Y2ggJ14vYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLyguKykkJyAtYW5kICRNZXRo -b2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVp -Y2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5n -IChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG5hbWUgPSAkTWF0 -Y2hlc1sxXQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98 -bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3Vl -bHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGZwID0g -Sm9pbi1QYXRoICREYXRhRGlyICgnY2FjaGUvJyArICRuYW1lKQ0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRmcCkpIHsgU2VuZC1FcnJvciAkUmVzcG9u -c2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgJGtsYXJ0ZXh0ID0gUmVhZC1CYWNrdXBUZXh0ICRmcA0KICAgICAgICAgICAgICAgIGlmICgk -bnVsbCAtZXEgJGtsYXJ0ZXh0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAtRGF0ZWkg -a29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg -ICAgICAkYnl0ZXMgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4LkdldEJ5dGVzKCRrbGFy -dGV4dCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAg -ICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFy -c2V0PXV0Zi04Jw0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlc3BvbnNl -DQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkhlYWRlcnMuQWRkKCdDb250ZW50LURpc3Bvc2l0 -aW9uJywgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPWAiJG5hbWVgIiIpDQogICAgICAgICAgICAgICAg -JFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRieXRlcy5MZW5ndGgNCiAgICAgICAgICAgICAg -ICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRieXRlcywgMCwgJGJ5dGVzLkxlbmd0aCkN -CiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkNCiAgICAgICAg -ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l -cSAnL2FwaS9wbGFudW5nL2JhY2t1cC93aWVkZXJoZXJzdGVsbGVuJyAtYW5kICRNZXRob2QgLWVx -ICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZCZXJlaWNoICdi -YWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRpZ3VuZyAoQmFj -a3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0gUmVhZC1Cb2R5 -ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1K -c29uDQogICAgICAgICAgICAgICAgJG5hbWUgPSAiJCgkZGF0ZW4uZGF0ZWluYW1lKSINCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNuYXBffGxlZ18pWzAtOV9hLXpB -LVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlciBEYXRlaW5h -bWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0 -aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAt -TGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0b3J5IC1Q -YXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAgICAgJHF1ZWxs -ID0gSm9pbi1QYXRoICRjYWNoZURpciAkbmFtZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU -ZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxdWVsbCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0Jh -Y2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHRz -ID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRz -aWNoZXIgPSAic25hcF92b3Jfd2llZGVyaGVyc3RlbGx1bmdfJHRzLmJhayINCiAgICAgICAgICAg -ICAgICAjIFNpY2hlcmhlaXRzLUJ1bmRsZSBkZXIgYWt0dWVsbGVuIERhdGVuIHZvciBVZWJlcnNj -aHJlaWJlbi4NCiAgICAgICAgICAgICAgICAkc2ljaGVyQnVuZGxlID0gW29yZGVyZWRdQHsNCiAg -ICAgICAgICAgICAgICAgICAgZm9ybWF0ICA9ICd2aTMtYmFja3VwLXYxJw0KICAgICAgICAgICAg -ICAgICAgICB0cyAgICAgID0gJHRzDQogICAgICAgICAgICAgICAgICAgIHBsYW51bmcgPSAoUmVh -ZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nKQ0KICAgICAgICAgICAgICAgICAgICBhZG1pbiAg -ID0gKFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicpDQogICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgIFdyaXRlLUJhY2t1cEJ5dGVzIChKb2luLVBhdGggJGNhY2hlRGlyICRzaWNo -ZXIpICgkc2ljaGVyQnVuZGxlIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDMwKQ0KDQogICAgICAg -ICAgICAgICAgJHF1ZWxsSW5oYWx0ID0gUmVhZC1CYWNrdXBUZXh0ICRxdWVsbA0KICAgICAgICAg -ICAgICAgIGlmICgkbnVsbCAtZXEgJHF1ZWxsSW5oYWx0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICdCYWNrdXAtRGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkcXVlbGxEYXRlbiA9ICRxdWVsbEluaGFsdCB8IENv -bnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNrdXAtRGF0 -ZWkgbmljaHQgcGFyc2llcmJhcicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJHdp -ZWRlcmhlcmdlc3RlbGx0ID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuIC1h -bmQgJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZm9ybWF0J10gLWFuZCAiJCgkcXVl -bGxEYXRlbi5mb3JtYXQpIi5TdGFydHNXaXRoKCd2aTMtYmFja3VwJykpIHsNCiAgICAgICAgICAg -ICAgICAgICAgaWYgKCRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BsYW51bmcnXSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u -JyAkcXVlbGxEYXRlbi5wbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAg -ICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxhbnVuZycNCiAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1sn -YWRtaW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnYWRt -aW4uanNvbicgJHF1ZWxsRGF0ZW4uYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAg -ICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdhZG1pbicNCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgTGVnYWN5 -LUZvcm1hdCAobnVyIHBsYW51bmcuanNvbi1JbmhhbHQpLg0KICAgICAgICAgICAgICAgICAgICBX -cml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRxdWVsbERhdGVuIHwgT3V0LU51bGwNCiAg -ICAgICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdwbGFudW5nJw0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAud2ll -ZGVyaGVyZ2VzdGVsbHQnIEB7IHF1ZWxsZSA9ICRuYW1lOyBzaWNoZXJ1bmcgPSAkc2ljaGVyOyBp -bmhhbHQgPSAoJHdpZWRlcmhlcmdlc3RlbGx0IC1qb2luICcrJykgfQ0KICAgICAgICAgICAgICAg -IE5ldy1IaW53ZWlzICdiYWNrdXBfd2llZGVyaGVyZ2VzdGVsbHQnIChbb3JkZXJlZF1Aew0KICAg -ICAgICAgICAgICAgICAgICBiYWNrdXAgICAgPSAkbmFtZQ0KICAgICAgICAgICAgICAgICAgICBz -aWNoZXJ1bmcgPSAkc2ljaGVyDQogICAgICAgICAgICAgICAgICAgIGluaGFsdCAgICA9ICgkd2ll -ZGVyaGVyZ2VzdGVsbHQgLWpvaW4gJysnKQ0KICAgICAgICAgICAgICAgIH0pIChHZXQtQWt0dWVs -bGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg -JFJlc3BvbnNlIEB7IHN0YXR1cyA9ICd3aWVkZXJoZXJnZXN0ZWxsdCc7IHNpY2hlcnVuZyA9ICRz -aWNoZXI7IGluaGFsdCA9ICR3aWVkZXJoZXJnZXN0ZWxsdCB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxh -bnVuZy9iYWNrdXAvbG9lc2NoZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVy -cm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAg -ICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg -ICAkbmFtZSA9ICIkKCRkYXRlbi5kYXRlaW5hbWUpIg0KICAgICAgICAgICAgICAgIGlmICgtbm90 -ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2Vu -ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICgnY2FjaGUvJyArICRu -YW1lKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRm -cCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBj -b250aW51ZSB9DQogICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRmcCAt -Rm9yY2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAuZ2Vsb2VzY2h0 -JyBAeyBkYXRlaW5hbWUgPSAkbmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0 -ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBSRVNFVCAvIERVTU1Z -REFURU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9yZXNl -dCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +biddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlaW50cmFnIGlu +IEAoJG0ubWl0dGVpbHVuZ2VuKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJp +bmddJGVpbnRyYWcuaWQgLW5lICRtaWQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgZm9yZWFjaCAoJGZlbGQgaW4gJ3RpdGVsJywndGV4dCcsJ3RodW1ibmFpbCcsJ3BkZics +J3RyaWdnZXInLCdiaXNEYXR1bScsJ2VtcGZhZW5nZXInKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRib2R5LlBTT2JqZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICR3ZXJ0ID0gJGJvZHkuJGZlbGQNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZmVsZCAtZXEgJ3RpdGVsJyAtb3IgJGZlbGQgLWVx +ICd0ZXh0JykgLWFuZCAoJHdlcnQgLWlzIFtzdHJpbmddKSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJHdlcnQgPSBDb252ZXJ0VG8tU2FmZVJpY2hIdG1sICR3ZXJ0DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJGVpbnRyYWcgfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlOYW1lICRmZWxkIC1O +b3RlUHJvcGVydHlWYWx1ZSAkd2VydCAtRm9yY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAk +ZWludHJhZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0QW0gIC1Ob3Rl +UHJvcGVydHlWYWx1ZSAoKEdldC1EYXRlKS5Ub1VuaXZlcnNhbFRpbWUoKS5Ub1N0cmluZygneXl5 +eS1NTS1kZFRISDptbTpzc1onKSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgICAgICAkZWlu +dHJhZyB8IEFkZC1NZW1iZXIgLU5vdGVQcm9wZXJ0eU5hbWUgZ2VhZW5kZXJ0Vm9uIC1Ob3RlUHJv +cGVydHlWYWx1ZSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKSAtRm9yY2UNCiAgICAgICAgICAgICAg +ICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0dlZnVuZGVuID0gJHRydWUNCiAgICAgICAgICAg +ICAgICAgICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ1ppZWwgPSAkZWludHJhZw0KICAgICAgICAg +ICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICBpZiAoJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4pIHsgV3JpdGUtSnNvbk9iamVj +dCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgIH0g +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVpbHVuZ0dl +ZnVuZGVuKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICJNaXR0 +ZWlsdW5nICRtaWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgJHppZWwgPSAkc2NyaXB0Om1pdHRlaWx1bmdaaWVsDQogICAg +ICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2VmdW5kZW4gPSAkZmFsc2U7ICRzY3JpcHQ6 +bWl0dGVpbHVuZ1ppZWwgPSAkbnVsbA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcg +J21pdHRlaWx1bmcuZ2VhZW5kZXJ0JyBAeyBpZCA9ICRtaWQgfQ0KICAgICAgICAgICAgICAgIFNl +bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlYWVuZGVydCc7IG1pdHRlaWx1 +bmcgPSAkemllbCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1bmdlbi8oW1x3LV0rKSQn +IC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo VGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2Vy -IGR1ZXJmZW4gZGllIFBsYW51bmcgenVydWVja3NldHplbicgNDAzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJHBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpz -b24nDQogICAgICAgICAgICAgICAgJGJhY2t1cE5hbWUgPSAkbnVsbA0KICAgICAgICAgICAgICAg -IGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCkgew0KICAgICAgICAgICAg -ICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAg -ICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAg -ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRjYWNoZURp -cikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkY2FjaGVEaXIgLUZvcmNl -IHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAjIFJlc3RhdXJpZXJiYXJlciBOYW1l -IChwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfKi5qc29uKSBzdGF0dA0KICAgICAgICAgICAgICAg -ICAgICAjIC5iYWsgLT4gd2lyZCB2b20gQmFja3Vwcy1UYWIgZ2VsaXN0ZXQgdW5kIGthbm4gd2ll -ZGVyaGVyZ2VzdGVsbHQNCiAgICAgICAgICAgICAgICAgICAgIyB3ZXJkZW4uIEZydWVoZXIgenVk -ZW0gbmljaHQgYW4gZGVuIENsaWVudCB6dXJ1ZWNrZ2VnZWJlbg0KICAgICAgICAgICAgICAgICAg -ICAjIC0+ICJCYWNrdXA6IHVuZGVmaW5lZCIgaW4gZGVyIFVJLg0KICAgICAgICAgICAgICAgICAg -ICAkYmFja3VwTmFtZSA9ICJwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfJHRzLmpzb24iDQogICAg -ICAgICAgICAgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJHBsYW51bmdQYXRoIC1EZXN0 -aW5hdGlvbiAoSm9pbi1QYXRoICRjYWNoZURpciAkYmFja3VwTmFtZSkNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3QgJ3BsYW51bmcu -anNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFudW5nKSB7DQogICAgICAg -ICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2Un -XSkgeyAkcGxhbnVuZy5laW50cmFlZ2UgPSBOZXctT2JqZWN0IFBTT2JqZWN0IH0NCiAgICAgICAg -ICAgICAgICAgICAgaWYgKCRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRhcmUn -XSkgeyAkcGxhbnVuZy5rb21tZW50YXJlID0gTmV3LU9iamVjdCBQU09iamVjdCB9DQogICAgICAg -ICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBP -dXQtTnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 -cmFnICdwbGFudW5nLnJlc2V0JyBAe30NCiAgICAgICAgICAgICAgICBOZXctSGlud2VpcyAncGxh -bnVuZ19yZXNldCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGhpbndlaXMgPSAn -RWludHJhZWdlIHVuZCBLb21tZW50YXJlIHd1cmRlbiBnZWxvZXNjaHQ7IFNpY2hlcnVuZyBsaWVn -dCBpbiBkYXRhL2NhY2hlLy4nDQogICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1ZWxsZXJCZW51 -dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u -c2UgQHsgc3RhdHVzID0gJ3p1cnVlY2tnZXNldHp0JzsgYmFja3VwID0gJGJhY2t1cE5hbWUgfQ0K -ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAo -JFBhdGggLWVxICcvYXBpL3BsYW51bmcvZHVtbXlkYXRlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9T -VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNl -bmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRHVtbXlkYXRlbiBlaW5z -cGllbGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw -b25zZSAnRHVtbXlkYXRlbiBudXIgaW0gRGVidWctU2VydmVyIChkZXYvc2VydmVyLnB5KSBpbXBs -ZW1lbnRpZXJ0LicgNTAxDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvYWRtaW4vcHJvdG9rb2xsLWxvZXNjaGVuDQogICAg -ICAgICAgICAjIEVpbm1hbC1SZXNldCBmdWVyIExvZ2J1Y2ggKyBBUEktTG9nLiBTZXR6dCBsb2di -dWNoLmpzb24gYXVmIFtdLA0KICAgICAgICAgICAgIyBsb2VzY2h0IGRpZSBBUEktTG9nLURhdGVp -IGF1cyAlVEVNUCUsIHVuZCBzY2hyZWlidCBlaW5lbiBlaW56aWdlbg0KICAgICAgICAgICAgIyBu -ZXVlbiBMb2didWNoLUVpbnRyYWcgKHByb3Rva29sbC5nZWxvZXNjaHQpLCBkYW1pdCBkYXMgRXJl -aWduaXMNCiAgICAgICAgICAgICMgc2VsYnN0IG5hY2h2b2xsemllaGJhciBibGVpYnQuDQogICAg -ICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3Byb3Rva29sbC1sb2VzY2hlbicgLWFu -ZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1J -c3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJm -ZW4gZGFzIFByb3Rva29sbCBsb2VzY2hlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgJHZvcmhlciA9IFJlYWQtSnNvbk9iamVjdCAnbG9nYnVjaC5qc29uJw0KICAgICAgICAgICAg -ICAgICRhbnphaGxWb3JoZXIgPSAwDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkdm9y -aGVyKSB7DQogICAgICAgICAgICAgICAgICAgICRhbnphaGxWb3JoZXIgPSBAKCR2b3JoZXIpLkNv -dW50DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3Qg -J2xvZ2J1Y2guanNvbicgQCgpIHwgT3V0LU51bGwNCg0KICAgICAgICAgICAgICAgICRhcGlMb2dC -eXRlcyA9IDANCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkc2Ny -aXB0OkFwaUxvZykgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgJGFwaUxvZ0J5dGVzID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAkc2NyaXB0OkFw -aUxvZykuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJh -bFBhdGggJHNjcmlwdDpBcGlMb2cgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wDQogICAgICAgICAg -ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBEYXRlaSBldnRs -LiBub2NoIG9mZmVuOyBpZ25vcmllcmVuLCBMb2didWNoIGlzdCBkaWUgd2ljaHRpZ2VyZSBTcHVy -DQogICAgICAgICAgICAgICAgICAgICAgICAkYXBpTG9nQnl0ZXMgPSAtMQ0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAncHJvdG9rb2xsLmdlbG9lc2NodCcgQHsNCiAgICAgICAgICAgICAgICAgICAgbG9n -YnVjaEVpbnRyYWVnZVZvcmhlciA9ICRhbnphaGxWb3JoZXINCiAgICAgICAgICAgICAgICAgICAg -YXBpTG9nQnl0ZXMgICAgICAgICAgICA9ICRhcGlMb2dCeXRlcw0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAg -ICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgPSAnZ2Vsb2VzY2h0Jw0KICAgICAgICAg -ICAgICAgICAgICBsb2didWNoRWludHJhZWdlVm9yaGVyID0gJGFuemFobFZvcmhlcg0KICAgICAg -ICAgICAgICAgICAgICBhcGlMb2dCeXRlcyAgICAgICAgICAgID0gJGFwaUxvZ0J5dGVzDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN -CiAgICAgICAgICAgICMgPT09PT0gU1RBVElTVElLIC8gTE9HQlVDSCA9PT09PQ0KICAgICAgICAg -ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zdGF0aXN0aWsnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcp -IHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnc3RhdGlzdGlr -JykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJl -cmVjaHRpZ3VuZyAoU3RhdGlzdGlrKScgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxhbnVuZy5qc29u -Jw0KICAgICAgICAgICAgICAgICRhZG1pbiAgID0gUmVhZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29u -Jw0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgKEdldC1TdGF0aXN0 -aWtEYXRhICRwbGFudW5nICRhZG1pbikNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2didWNoJyAtYW5kICRN -ZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJl -cmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNw -b25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChMb2didWNoKScgNDAzOyBjb250aW51ZQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNwb25zZSAoR2V0 -LUxvZ2J1Y2hUZXh0KQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoN -CiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFpFTEwtTE9DSyArIENIQU5HRVMg -KExpdmUtU3luYykgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjIFBPU1QgL2Fw -aS9sb2NrL3plbGxlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHsgb2ssIHRva2VuLCAuLi4gfSBv -ZGVyIDQyMyB7IHNwZXJyZXIsIC4uLiB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBp -L2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAg -JGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9k -eSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg -ICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRhdHVtDQogICAgICAgICAgICAgICAgJHBl -cnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgtbm90IChU -ZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5vdCAoVGVzdC1Mb2NrU2FmZUlkICRwZXJz -b25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3Vl -bHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVsbGVyQmVudXR6ZXINCiAgICAgICAgICAg -ICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUNCiAgICAgICAgICAgICAgICAkcmVzID0g -QWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklkICR1c2VyICRyb2xsZSAkZmFsc2UNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxl -ciAgICA9ICdnZXNwZXJydCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICA9ICJX -aXJkIGJlYXJiZWl0ZXQgdm9uICQoJHJlcy5leGlzdGluZy51c2VybmFtZSkiDQogICAgICAgICAg -ICAgICAgICAgICAgICBzcGVycmVyICAgPSAkcmVzLmV4aXN0aW5nLnVzZXJuYW1lDQogICAgICAg -ICAgICAgICAgICAgICAgICByb2xsZSAgICAgPSAkcmVzLmV4aXN0aW5nLnJvbGxlDQogICAgICAg -ICAgICAgICAgICAgICAgICBzZWl0ICAgICAgPSAkcmVzLmV4aXN0aW5nLmxvY2tlZEF0DQogICAg -ICAgICAgICAgICAgICAgICAgICBrYW5uRm9yY2UgPSAoVGVzdC1EYXJmTG9ja1VlYmVyc2NocmVp -YmVuKQ0KICAgICAgICAgICAgICAgICAgICB9IDQyMw0KICAgICAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3Qg -JFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAg -ICAgICAgICAgICAgICAgdG9rZW4gICAgPSAkcmVzLmxvY2sudG9rZW4NCiAgICAgICAgICAgICAg -ICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAk -cGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgPSAkcm9sbGUNCiAgICAgICAg -ICAgICAgICAgICAgbG9ja2VkQXQgPSAkcmVzLmxvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg -ICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZS9mb3JjZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAtPiB1 -ZWJlcnNjaHJlaWJ0IGZyZW1kZW4gTG9jaw0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2Fw -aS9sb2NrL3plbGxlL2ZvcmNlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAg -ICAgICAgIGlmICgtbm90IChUZXN0LURhcmZMb2NrVWViZXJzY2hyZWliZW4pKSB7DQogICAgICAg -ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdGb3JjZS1Mb2NrIG51ciBmdWVyIEZh -Y2hhdWZzaWNodC9TdXBlclVzZXInIDQwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAg -ICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9z -cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRG -cm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRhdHVtDQogICAg -ICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAg -ICAgIGlmICgtbm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5vdCAoVGVzdC1M -b2NrU2FmZUlkICRwZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAk -UmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVsbGVyQmVudXR6 -ZXINCiAgICAgICAgICAgICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUNCiAgICAgICAg -ICAgICAgICAkcmVzID0gQWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklkICR1c2VyICRy -b2xsZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2xvY2suZm9yY2Un -IEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgcm9sbGUgPSAkcm9sbGUg -fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAg -ICAgICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB0b2tlbiAg -ICA9ICRyZXMubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICRkYXR1 -bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAgICAgICAgICAg -ICAgICAgICByb2xsZSAgICA9ICRyb2xsZQ0KICAgICAgICAgICAgICAgICAgICBsb2NrZWRBdCA9 -ICRyZXMubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9sb2NrL3pl -bGxlL2hlYXJ0YmVhdCAgeyB0b2tlbiB9IC0+IGFrdHVhbGlzaWVydCBsYXN0QmVhdA0KICAgICAg -ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlL2hlYXJ0YmVhdCcgLWFuZCAkTWV0 -aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVx -dWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJyb3IgJFJlc3Bv -bnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -YSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICR0b2tlbiA9IGlm -ICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7IFtzdHJpbmddJGEudG9rZW4gfSBl -bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNw -YWNlKCR0b2tlbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1Rva2VuIGZlaGx0JyA0MDA7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmVzID0gUmVmcmVzaC1DZWxsTG9jayAkdG9rZW4N -CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAgICAgICAgICAg -IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgZmVobGVyID0gJ3VuYmVrYW5udGVyX2xvY2sn -OyBtZWxkdW5nID0gJ0xvY2sgZXhpc3RpZXJ0IG5pY2h0IChtZWhyKS4nIH0gNDA0DQogICAgICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkdHJ1ZTsgbGFzdEJlYXQgPSAkcmVz -LmxvY2subGFzdEJlYXQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9 -DQoNCiAgICAgICAgICAgICMgREVMRVRFIC9hcGkvbG9jay96ZWxsZSAgeyB0b2tlbiB9IC0+IExv -Y2sgZnJlaWdlYmVuIChhdWNoIHZpYSBRdWVyeS1TdHJpbmcgZnVlciBzZW5kQmVhY29uKQ0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlJyAtYW5kICRNZXRob2QgLWVx -ICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QN -CiAgICAgICAgICAgICAgICAkdG9rZW4gPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkYm9k -eSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyAkYSA9ICRib2R5IHwgQ29udmVydEZyb20t -SnNvbjsgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Rva2VuJ10pIHsgJHRva2VuID0gW3N0 -cmluZ10kYS50b2tlbiB9IH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRva2VuKSAtYW5kICRSZXF1 -ZXN0LlVybC5RdWVyeSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9IFtTeXN0ZW0uV2ViLkh0 -dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVlcnkpDQogICAgICAg -ICAgICAgICAgICAgICR0b2tlbiA9IFtzdHJpbmddJHFbJ3Rva2VuJ10NCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRv -a2VuKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVG9rZW4gZmVobHQnIDQwMDsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRyZXMgPSBSZWxlYXNlLUNlbGxMb2NrICR0b2tlbg0KICAgICAg -ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkcmVzLm9rIH0NCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEdF -VCAvYXBpL2xvY2svemVsbGVuIC0+IExpc3RlIGFsbGVyIGFrdGl2ZW4gTG9ja3MgKGZ1ZXIgTGl2 -ZS1JbmRpY2F0b3IpDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGVu -JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2Jq -ZWN0ICRSZXNwb25zZSBAeyBsb2NrcyA9IChHZXQtQWxsQWN0aXZlQ2VsbExvY2tzKSB9DQogICAg -ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NU -IC9hcGkvdmVyYW50d29ydHVuZy9hdWZnZXJ1ZWNrdCDigJQgU3RhdGlzdGlrLUNhcHR1cmUgZnVl -ciBkZW4NCiAgICAgICAgICAgICMgIkVpbmdlc3BydW5nZW4iLUJhbGtlbiBpbiBkZXIgU2NoaWNo -dHZlcnRlaWx1bmcuIFdpcmQgdm9tIENsaWVudA0KICAgICAgICAgICAgIyBnZWZldWVydCwgc29i -YWxkIGplbWFuZCBpbm5lcmhhbGIgZGVyIDE0LVRhZ2UtVmVyYmluZGxpY2hrZWl0IG5ldQ0KICAg -ICAgICAgICAgIyBpbiBkaWUgVG9wLTIgKDEuLzIuIFZJMy1ER0wpIGVpbmVyIFNjaGljaHQgYXVm -cnVlY2t0IOKAlCBhbHNvDQogICAgICAgICAgICAjIGF1c3NlcnBsYW5tYWVzc2lnIFZlcmFudHdv -cnR1bmcgdWViZXJuaW1tdC4NCiAgICAgICAgICAgICMgQm9keTogeyBwZXJzb25JZCwgZGF0dW0s -IHNjaGljaHQsIHN0dWZlLCB2b3JoZXJXZXJ0LCBhdXNsb2VzZXJQZXJzb25JZCB9DQogICAgICAg -ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3ZlcmFudHdvcnR1bmcvYXVmZ2VydWVja3QnIC1hbmQg -JE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkg -JFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRS -ZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAg -ICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJy -b3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkcGlkID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BlcnNvbklkJ10pIHsg -W3N0cmluZ10kYS5wZXJzb25JZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgJGRhdCA9 -IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydkYXR1bSddKSB7IFtzdHJpbmddJGEuZGF0dW0g -fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRwaWQgLW9yIC1ub3QgJGRh -dCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAncGVyc29uSWQvZGF0dW0gZmVobHQnIDQwMDsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgICRmZWxkZXIgPSBbb3JkZXJlZF1Aew0KICAgICAgICAg -ICAgICAgICAgICBwZXJzb25JZCAgID0gJHBpZA0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAg -ICAgID0gJGRhdA0KICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgID0gaWYgKCRhLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3NjaGljaHQnXSkgeyBbc3RyaW5nXSRhLnNjaGljaHQgfSBlbHNlIHsg -JycgfQ0KICAgICAgICAgICAgICAgICAgICBzdHVmZSAgICAgID0gaWYgKCRhLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ3N0dWZlJ10pIHsgW2ludF0kYS5zdHVmZSB9IGVsc2UgeyAwIH0NCiAgICAgICAg -ICAgICAgICAgICAgdm9yaGVyV2VydCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3Jo -ZXJXZXJ0J10pIHsgW3N0cmluZ10kYS52b3JoZXJXZXJ0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2F1 -c2xvZXNlclBlcnNvbklkJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJGZlbGRlclsnYXVzbG9l -c2VyUGVyc29uSWQnXSA9IFtzdHJpbmddJGEuYXVzbG9lc2VyUGVyc29uSWQNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAndmVyYW50d29ydHVuZy5l -aW5nZXNwcnVuZ2VuJyAkZmVsZGVyDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRS -ZXNwb25zZSBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg -ICAgICAgfQ0KDQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvcGxhbnVuZy9jaGFuZ2VzP3NlaXQ9 -PGlzby10cz4gLT4gRGVsdGEtTGlzdGUgZnVlciBMaXZlLVN5bmMNCiAgICAgICAgICAgIGlmICgk -UGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9jaGFuZ2VzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 -DQogICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVl -cnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICRsb2cgPSBSZWFk -LUpzb25PYmplY3QgJ2NoYW5nZXMuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRsb2cgLW9yIC1ub3QgKCRsb2cgLWlzIFthcnJheV0pKSB7ICRsb2cgPSBAKCkgfQ0KICAgICAg -ICAgICAgICAgICRtYXhTZXEgPSBHZXQtTWF4Q2hhbmdlU2VxICRsb2cNCiAgICAgICAgICAgICAg -ICBpZiAoJHEuQWxsS2V5cyAtY29udGFpbnMgJ3NlaXRfc2VxJykgew0KICAgICAgICAgICAgICAg -ICAgICAjIE5ldWVyIHJhY2UtZnJlaWVyIHNlcS1DdXJzb3IgKENoYW5nZXMgKyBzZXJ2ZXJTZXEg -YXVzDQogICAgICAgICAgICAgICAgICAgICMgREVNU0VMQkVOIFJlYWQpLiBMZWVyZXIgc2VpdF9z -ZXEgPSBFcnN0LVN5bmMgLT4gbnVyIEN1cnNvci4NCiAgICAgICAgICAgICAgICAgICAgJHJhdyA9 -IFtzdHJpbmddJHFbJ3NlaXRfc2VxJ10NCiAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmdd -OjpJc051bGxPckVtcHR5KCRyYXcpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2hhbmdl -cyA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg -ICAgICAgJHNxID0gMDsgW3ZvaWRdW2ludF06OlRyeVBhcnNlKCRyYXcsIFtyZWZdJHNxKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXMgPSBAKCRsb2cgfCBXaGVyZS1PYmplY3QgeyAk -bnVsbCAtbmUgJF8uc2VxIC1hbmQgW2ludF0kXy5zZXEgLWd0ICRzcSB9KQ0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2Ug -QHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclRzICA9IChHZXQtRGF0ZSkuVG9Vbml2 -ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVy -U2VxID0gJG1heFNlcQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyAgID0gW29iamVj -dFtdXSRjaGFuZ2VzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVs -c2Ugew0KICAgICAgICAgICAgICAgICAgICAjIEJhY2t3YXJkLWNvbXBhdDogYWx0ZXIgV2FsbC1D -bG9jay1DdXJzb3IgKGFsdGUgQ2xpZW50cykuDQogICAgICAgICAgICAgICAgICAgICRzZWl0ID0g -W3N0cmluZ10kcVsnc2VpdCddDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk +JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkbWlkID0gJE1hdGNoZXNbMV0NCiAg +ICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAg +ICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtaXR0ZWlsdW5nZW4uanNvbicgew0KICAg +ICAgICAgICAgICAgICAgICAkbSA9IFJlYWQtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24n +DQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJG0gLW9yIC1ub3QgJG0uUFNPYmpl +Y3QuUHJvcGVydGllc1snbWl0dGVpbHVuZ2VuJ10pIHsgcmV0dXJuIH0NCiAgICAgICAgICAgICAg +ICAgICAgJHZvcmhlciA9IEAoJG0ubWl0dGVpbHVuZ2VuKQ0KICAgICAgICAgICAgICAgICAgICAk +bmFjaGhlciA9IEAoJHZvcmhlciB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLW5lICRt +aWQgfSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCR2b3JoZXIuQ291bnQgLWVxICRuYWNoaGVy +LkNvdW50KSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRtLm1pdHRlaWx1bmdlbiA9 +ICRuYWNoaGVyDQogICAgICAgICAgICAgICAgICAgICMgZ2VsZXNlbi1FaW50cmFlZ2UgZnVlciBk +aWVzZSBNaXR0ZWlsdW5nIGF1ZnJhZXVtZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRtLlBT +T2JqZWN0LlByb3BlcnRpZXNbJ2dlbGVzZW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg +Zm9yZWFjaCAoJHAgaW4gQCgkbS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXMpKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXNb +JG1pZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHAuVmFsdWUuUFNPYmpl +Y3QuUHJvcGVydGllcy5SZW1vdmUoJG1pZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAnbWl0dGVpbHVuZ2VuLmpzb24nICRtIHwg +T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDptaXR0ZWlsdW5nR2Vsb2VzY2h0 +ID0gJHRydWUNCiAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkc2NyaXB0Om1pdHRlaWx1bmdHZWxvZXNjaHQpIHsNCiAgICAgICAgICAgICAgICAg +ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIg +NDA0OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0 +Om1pdHRlaWx1bmdHZWxvZXNjaHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dF +aW50cmFnICdtaXR0ZWlsdW5nLmdlbG9lc2NodCcgQHsgaWQgPSAkbWlkIH0NCiAgICAgICAgICAg +ICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0N +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBQ +T1NUIC9hcGkvbWl0dGVpbHVuZ2VuL3VwbG9hZCDigJQgU1Utb25seSwgQmlsZCAoMiBNQikgb2Rl +ciBQREYgKDEwIE1CKQ0KICAgICAgICAgICAgIyBCb2R5OiB7ImFydCI6ICJiaWxkInwicGRmIiwg +ImRhdGVpbmFtZSI6ICJ4LnBuZyIsICJkYXRhVXJsIjogImRhdGE6Li4uIn0NCiAgICAgICAgICAg +IGlmICgkUGF0aCAtZXEgJy9hcGkvbWl0dGVpbHVuZ2VuL3VwbG9hZCcgLWFuZCAkTWV0aG9kIC1l +cSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIp +KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gTWl0dGVpbHVu +Z3MtQW5oYWVuZ2UgaG9jaGxhZGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAj +IDE0IE1CIE1heFNpemUsIHdlaWwgMTBNQiBQREYgYmFzZTY0LWNvZGllcnQgfjEzLjQgTUIgUGF5 +bG9hZCB3aXJkDQogICAgICAgICAgICAgICAgJHJhdyA9IFJlYWQtQm9keSAkUmVxdWVzdCAtTWF4 +U2l6ZSAxNE1CDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHJhdykgeyBTZW5kLUVycm9yICRS +ZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcyAobWF4IDE0IE1CKScgNDEzOyBjb250aW51ZSB9DQog +ICAgICAgICAgICAgICAgdHJ5IHsgJGJvZHkgPSAkcmF3IHwgQ29udmVydEZyb20tSnNvbiB9IGNh +dGNoIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgICRhcnQgPSAoW3N0cmluZ10kYm9keS5hcnQpLlRvTG93ZXIo +KQ0KICAgICAgICAgICAgICAgICRkYXRhVXJsID0gW3N0cmluZ10kYm9keS5kYXRhVXJsDQogICAg +ICAgICAgICAgICAgaWYgKCRhcnQgLW5lICdiaWxkJyAtYW5kICRhcnQgLW5lICdwZGYnKSB7DQog +ICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdhcnQgbXVzcyAiYmlsZCIg +b2RlciAicGRmIiBzZWluJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICRleHQgPSAkbnVsbDsgJG1heEJ5dGVzID0gMA0KICAgICAgICAgICAgICAgIGlm +ICgkYXJ0IC1lcSAnYmlsZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhVXJsIC1t +YXRjaCAnXmRhdGE6aW1hZ2UvKGpwZWd8anBnfHBuZ3x3ZWJwKTtiYXNlNjQsJykgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgJGV4dCA9ICgkTWF0Y2hlc1sxXSAtcmVwbGFjZSAnanBlZycsJ2pw +ZycpDQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMgPSAyICogMTAyNCAqIDEwMjQN +CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNl +bmQtRXJyb3IgJFJlc3BvbnNlICdCaWxkOiBlcndhcnRldCBkYXRhOmltYWdlLyhqcGVnfHBuZ3x3 +ZWJwKTtiYXNlNjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFVcmwg +LWxpa2UgJ2RhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwqJykgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgJGV4dCA9ICdwZGYnDQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4Qnl0ZXMg +PSAxMCAqIDEwMjQgKiAxMDI0DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAnUERGOiBlcndhcnRldCBkYXRh +OmFwcGxpY2F0aW9uL3BkZjtiYXNlNjQsLi4uJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGJhc2U2NCA9ICRk +YXRhVXJsIC1yZXBsYWNlICdeZGF0YTpbXjtdKztiYXNlNjQsJywgJycNCiAgICAgICAgICAgICAg +ICB0cnkgeyAkYnl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCRiYXNl +NjQpIH0NCiAgICAgICAgICAgICAgICBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1 +ZWx0aWdlIGJhc2U2NC1EYXRlbicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYg +KCRieXRlcy5MZW5ndGggLWd0ICRtYXhCeXRlcykgew0KICAgICAgICAgICAgICAgICAgICAkbGlt +aXRLYiA9IFtpbnRdKCRtYXhCeXRlcyAvIDEwMjQpDQogICAgICAgICAgICAgICAgICAgIFNlbmQt +RXJyb3IgJFJlc3BvbnNlICIkYXJ0IHp1IGdyb3NzIChtYXggJGxpbWl0S2IgS0IpIiA0MTM7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR1cGxvYWREaXIgPSBK +b2luLVBhdGggJERhdGFEaXIgJ3VwbG9hZHMnIHwgSm9pbi1QYXRoIC1DaGlsZFBhdGggJ21pdHRl +aWx1bmdlbicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0 +aCAkdXBsb2FkRGlyKSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyBOZXctSXRlbSAtSXRl +bVR5cGUgRGlyZWN0b3J5IC1QYXRoICR1cGxvYWREaXIgLUZvcmNlIHwgT3V0LU51bGwgfSBjYXRj +aCB7fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcmFuZCA9IC1qb2luICgo +NDguLjU3KSArICg5Ny4uMTIyKSB8IEdldC1SYW5kb20gLUNvdW50IDYgfCBGb3JFYWNoLU9iamVj +dCB7IFtjaGFyXSRfIH0pDQogICAgICAgICAgICAgICAgJG1zID0gW2ludDY0XShbRGF0ZVRpbWVP +ZmZzZXRdOjpVdGNOb3cuVG9Vbml4VGltZU1pbGxpc2Vjb25kcygpKQ0KICAgICAgICAgICAgICAg +ICRmaWxlbmFtZSA9ICJtXyR7bXN9XyR7cmFuZH0uJGV4dCINCiAgICAgICAgICAgICAgICAkemll +bFBmYWQgPSBKb2luLVBhdGggJHVwbG9hZERpciAkZmlsZW5hbWUNCiAgICAgICAgICAgICAgICBb +U3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbEJ5dGVzKCR6aWVsUGZhZCwgJGJ5dGVzKQ0KICAgICAg +ICAgICAgICAgICMgS2VpbmUgQUNMLVJlc3RyaWN0aW9uOiBVcGxvYWRzIHNpbmQgZnVlciBkaWUg +RW1wZmFlbmdlci0NCiAgICAgICAgICAgICAgICAjIEdydXBwZSAobWFudWVsbCB2b20gU1UgdmVy +dGVpbHQpIGdlZGFjaHQsIG5pY2h0IGdlaGVpbS4NCiAgICAgICAgICAgICAgICAkcmVsUGZhZCA9 +ICIvZGF0YS91cGxvYWRzL21pdHRlaWx1bmdlbi8kZmlsZW5hbWUiDQogICAgICAgICAgICAgICAg +V3JpdGUtTG9nRWludHJhZyAnbWl0dGVpbHVuZy51cGxvYWQnIEB7IGFydCA9ICRhcnQ7IGRhdGVp +ID0gJGZpbGVuYW1lOyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIFNl +bmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ29rJzsgcGZhZCA9ICRyZWxQZmFk +OyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL21pdHRlaWx1 +bmdlbi8oW1x3LV0rKS9rZW5udG5pcyQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAg +ICAgICAgICAgICAgJG1pZCA9ICRNYXRjaGVzWzFdDQogICAgICAgICAgICAgICAgJHIgPSBHZXQt +UmVjaHRlDQogICAgICAgICAgICAgICAgJHBpZCA9ICRyLm1laW5lUGVyc29uSWQNCiAgICAgICAg +ICAgICAgICBpZiAoJG51bGwgLWVxICRwaWQpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5l +IFBlcnNvbiB6dWdlb3JkbmV0JyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkc2Ny +aXB0Om1pdHRlaWx1bmdLZW5udG5pc09LID0gJGZhbHNlDQogICAgICAgICAgICAgICAgSW52b2tl +LVdpdGhGaWxlTG9jayAnbWl0dGVpbHVuZ2VuLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAg +JG0gPSBSZWFkLUpzb25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJw0KICAgICAgICAgICAgICAg +ICAgICBpZiAoJG51bGwgLWVxICRtIC1vciAtbm90ICRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21p +dHRlaWx1bmdlbiddKSB7IHJldHVybiB9DQogICAgICAgICAgICAgICAgICAgICRleGlzdGllcnQg +PSBAKCRtLm1pdHRlaWx1bmdlbiB8IFdoZXJlLU9iamVjdCB7IFtzdHJpbmddJF8uaWQgLWVxICRt +aWQgfSkuQ291bnQgLWd0IDANCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJGV4aXN0aWVy +dCkgeyByZXR1cm4gfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkbS5QU09iamVjdC5Q +cm9wZXJ0aWVzWydnZWxlc2VuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRtIHwgQWRk +LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSBnZWxlc2VuIC1Ob3RlUHJvcGVydHlWYWx1ZSAoW3Bz +Y3VzdG9tb2JqZWN0XUB7fSkgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgJHBpZFN0ciA9IFtzdHJpbmddJHBpZA0KICAgICAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkbS5nZWxlc2VuLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBpZFN0cl0pIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICRtLmdlbGVzZW4gfCBBZGQtTWVtYmVyIC1Ob3RlUHJvcGVydHlO +YW1lICRwaWRTdHIgLU5vdGVQcm9wZXJ0eVZhbHVlIChbcHNjdXN0b21vYmplY3RdQHt9KSAtRm9y +Y2UNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkaGV1dGUgPSAo +R2V0LURhdGUpLlRvU3RyaW5nKCd5eXl5LU1NLWRkJykNCiAgICAgICAgICAgICAgICAgICAgJG0u +Z2VsZXNlbi4kcGlkU3RyIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAkbWlkIC1Ob3Rl +UHJvcGVydHlWYWx1ZSAkaGV1dGUgLUZvcmNlDQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpz +b25PYmplY3QgJ21pdHRlaWx1bmdlbi5qc29uJyAkbSB8IE91dC1OdWxsDQogICAgICAgICAgICAg +ICAgICAgICRzY3JpcHQ6bWl0dGVpbHVuZ0tlbm50bmlzT0sgPSAkdHJ1ZQ0KICAgICAgICAgICAg +ICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6bWl0dGVp +bHVuZ0tlbm50bmlzT0spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u +c2UgIk1pdHRlaWx1bmcgJG1pZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0Om1pdHRlaWx1bmdLZW5udG5pc09L +ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBz +dGF0dXMgPSAna2VubnRuaXNfZ2VzZXR6dCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gQkFDS1VQUyA9PT09PQ0KICAgICAg +ICAgICAgIyBCYWNrdXAtTmFtaW5nIChnZXRhcm50LCBpbiBkYXRhL2NhY2hlLyk6DQogICAgICAg +ICAgICAjIC0gc25hcF88dHM+LmJhayAgPSBCdW5kbGUgKHBsYW51bmcrYWRtaW4pIC0tIG1hbnVl +bGxlIEJhY2t1cHMgKyBTaWNoZXJ1bmdlbg0KICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAg +ICAgdm9yIFdpZWRlcmhlcnN0ZWxsdW5nDQogICAgICAgICAgICAjIC0gbGVnXzx0cz4uYmFrICAg +PSBOdXIgUGxhbnVuZyAtLSBMZWdhY3ktQmFja3VwcyArIEF1dG8tU2ljaGVydW5nZW4NCiAgICAg +ICAgICAgICMgICAgICAgICAgICAgICAgICAgIHZvciBSZXNldC9EdW1teWRhdGVuDQogICAgICAg +ICAgICAjIC0gY2ZnXzx0cz5fPGhpbndlaXM+LmJhayA9IGFkbWluLmpzb24tQXV0by1CYWNrdXBz +IChCYWNrdXAtQWRtaW5Kc29uKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFu +dW5nL2JhY2t1cCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAnYmFja3VwcycpKSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICdLZWluZSBCZXJlY2h0aWd1bmcgKEJhY2t1cHMpJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICAkcGxhbnVuZ1BhdGggPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNv +bicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkcGxh +bnVuZ1BhdGgpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdQbGFudW5nIG5pY2h0IGdlZnVuZGVu +JyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZ09iaiA9IFJlYWQtSnNv +bk9iamVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbk9iaiAgID0gUmVh +ZC1Kc29uT2JqZWN0ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEg +JGFkbWluT2JqKSB7ICRhZG1pbk9iaiA9IE5ldy1PYmplY3QgUFNPYmplY3QgfQ0KICAgICAgICAg +ICAgICAgICR0cyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAg +ICAgICAgICAkYm5hbWUgPSAic25hcF8kdHMuYmFrIg0KICAgICAgICAgICAgICAgICRidW5kbGUg +PSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBmb3JtYXQgID0gJ3ZpMy1iYWNrdXAt +djEnDQogICAgICAgICAgICAgICAgICAgIHRzICAgICAgPSAkdHMNCiAgICAgICAgICAgICAgICAg +ICAgcGxhbnVuZyA9ICRwbGFudW5nT2JqDQogICAgICAgICAgICAgICAgICAgIGFkbWluICAgPSAk +YWRtaW5PYmoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGpzb24gPSAkYnVu +ZGxlIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDMwDQogICAgICAgICAgICAgICAgJGNhY2hlRGly +ID0gSm9pbi1QYXRoICREYXRhRGlyICdjYWNoZScNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkY2FjaGVEaXIpKSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBE +aXJlY3RvcnkgLVBhdGggJGNhY2hlRGlyIC1Gb3JjZSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAg +ICAgICBXcml0ZS1CYWNrdXBCeXRlcyAoSm9pbi1QYXRoICRjYWNoZURpciAkYm5hbWUpICRqc29u +DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLmVyc3RlbGx0JyBAeyBk +YXRlaW5hbWUgPSAkYm5hbWU7IGluaGFsdCA9ICdwbGFudW5nK2FkbWluJyB9DQogICAgICAgICAg +ICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZXJzdGVsbHQnOyBk +YXRlaW5hbWUgPSAkYm5hbWUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwcycgLWFu +ZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURh +cmZCZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVj +aHRpZ3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRlaW50 +cmFlZ2UgPSBAKCkNCiAgICAgICAgICAgICAgICAkY2FjaGVEaXIgPSBKb2luLVBhdGggJERhdGFE +aXIgJ2NhY2hlJw0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRj +YWNoZURpcikgew0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbXVzdGVyIGluICdzbmFw +XyouYmFrJywnbGVnXyouYmFrJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgR2V0LUNoaWxk +SXRlbSAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyIC1GaWx0ZXIgJG11c3RlciAtRmlsZSAtRXJyb3JB +Y3Rpb24gU2lsZW50bHlDb250aW51ZSB8IEZvckVhY2gtT2JqZWN0IHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkbmFtZSA9ICRfLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkdHlwID0gaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl9kdW1teV8nKSB7ICd2b3IgRHVtbXlkYXRl +bicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkbmFtZSAtbWF0 +Y2ggJ192b3JfcmVzZXRfJykgeyAndm9yIFJlc2V0JyB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBlbHNlaWYgKCRuYW1lIC1tYXRjaCAnX3Zvcl93aWVkZXJoZXJzdGVsbHVuZ18n +KSB7ICd2b3IgV2llZGVyaGVyc3RlbGx1bmcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIGVsc2UgeyAnbWFudWVsbCcgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRi +dW5kbGUgPSAkbmFtZS5TdGFydHNXaXRoKCdzbmFwXycpDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJGVpbnRyYWVnZSArPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBkYXRlaW5hbWUgICA9ICRuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGdyb2Vzc2UgICAgID0gJF8uTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGVyc3RlbGx0QW0gID0gJF8uTGFzdFdyaXRlVGltZS5Ub1N0cmluZygncycpDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cCAgICAgICAgID0gJHR5cA0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpbmhhbHQgICAgICA9IGlmICgkYnVuZGxlKSB7ICdLb21wbGV0 +dCAoUGxhbnVuZyArIEFkbWluKScgfSBlbHNlIHsgJ051ciBQbGFudW5nJyB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlzdEJ1bmRsZSAgID0gJGJ1bmRsZQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkZWludHJhZWdl +ID0gQCgkZWludHJhZWdlIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IGVyc3RlbGx0QW0gLURlc2Nl +bmRpbmcpDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSAkZWludHJh +ZWdlDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg +IGlmICgkUGF0aCAtbWF0Y2ggJ14vYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLyguKykkJyAt +YW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt +RGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVy +ZWNodGlndW5nIChCYWNrdXBzKScgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJG5h +bWUgPSAkTWF0Y2hlc1sxXQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkbmFtZSAtbWF0Y2gg +J14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWskJykpIHsgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAg +ICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICgnY2FjaGUvJyArICRuYW1lKQ0KICAgICAgICAg +ICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRmcCkpIHsgU2VuZC1FcnJv +ciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJGtsYXJ0ZXh0ID0gUmVhZC1CYWNrdXBUZXh0ICRmcA0KICAgICAgICAgICAg +ICAgIGlmICgkbnVsbCAtZXEgJGtsYXJ0ZXh0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdCYWNr +dXAtRGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAkYnl0ZXMgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4LkdldEJ5 +dGVzKCRrbGFydGV4dCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIw +MA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9q +c29uOyBjaGFyc2V0PXV0Zi04Jw0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMg +JFJlc3BvbnNlDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLkhlYWRlcnMuQWRkKCdDb250ZW50 +LURpc3Bvc2l0aW9uJywgImF0dGFjaG1lbnQ7IGZpbGVuYW1lPWAiJG5hbWVgIiIpDQogICAgICAg +ICAgICAgICAgJFJlc3BvbnNlLkNvbnRlbnRMZW5ndGg2NCA9ICRieXRlcy5MZW5ndGgNCiAgICAg +ICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLldyaXRlKCRieXRlcywgMCwgJGJ5dGVz +Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuT3V0cHV0U3RyZWFtLkNsb3NlKCkN +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYg +KCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cC93aWVkZXJoZXJzdGVsbGVuJyAtYW5kICRN +ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZC +ZXJlaWNoICdiYWNrdXBzJykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0tlaW5lIEJlcmVjaHRp +Z3VuZyAoQmFja3VwcyknIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRib2R5ID0g +UmVhZC1Cb2R5ICRSZXF1ZXN0DQogICAgICAgICAgICAgICAgJGRhdGVuID0gJGJvZHkgfCBDb252 +ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJG5hbWUgPSAiJCgkZGF0ZW4uZGF0ZWluYW1l +KSINCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJG5hbWUgLW1hdGNoICdeKHNuYXBffGxlZ18p +WzAtOV9hLXpBLVpdK1wuYmFrJCcpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdl +ciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRjYWNoZURpciA9 +IEpvaW4tUGF0aCAkRGF0YURpciAnY2FjaGUnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtUGF0aCAtTGl0ZXJhbFBhdGggJGNhY2hlRGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGly +ZWN0b3J5IC1QYXRoICRjYWNoZURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAg +ICAgJHF1ZWxsID0gSm9pbi1QYXRoICRjYWNoZURpciAkbmFtZQ0KICAgICAgICAgICAgICAgIGlm +ICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRxdWVsbCkpIHsgU2VuZC1FcnJvciAkUmVz +cG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJHRzID0gR2V0LURhdGUgLUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAg +ICAgICAgICRzaWNoZXIgPSAic25hcF92b3Jfd2llZGVyaGVyc3RlbGx1bmdfJHRzLmJhayINCiAg +ICAgICAgICAgICAgICAjIFNpY2hlcmhlaXRzLUJ1bmRsZSBkZXIgYWt0dWVsbGVuIERhdGVuIHZv +ciBVZWJlcnNjaHJlaWJlbi4NCiAgICAgICAgICAgICAgICAkc2ljaGVyQnVuZGxlID0gW29yZGVy +ZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ICA9ICd2aTMtYmFja3VwLXYxJw0KICAg +ICAgICAgICAgICAgICAgICB0cyAgICAgID0gJHRzDQogICAgICAgICAgICAgICAgICAgIHBsYW51 +bmcgPSAoUmVhZC1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nKQ0KICAgICAgICAgICAgICAgICAg +ICBhZG1pbiAgID0gKFJlYWQtSnNvbk9iamVjdCAnYWRtaW4uanNvbicpDQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUJhY2t1cEJ5dGVzIChKb2luLVBhdGggJGNhY2hl +RGlyICRzaWNoZXIpICgkc2ljaGVyQnVuZGxlIHwgQ29udmVydFRvLUpzb24gLURlcHRoIDMwKQ0K +DQogICAgICAgICAgICAgICAgJHF1ZWxsSW5oYWx0ID0gUmVhZC1CYWNrdXBUZXh0ICRxdWVsbA0K +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJHF1ZWxsSW5oYWx0KSB7IFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICdCYWNrdXAtRGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuJyA1MDA7 +IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkcXVlbGxEYXRlbiA9ICRxdWVsbElu +aGFsdCB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdC +YWNrdXAtRGF0ZWkgbmljaHQgcGFyc2llcmJhcicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRxdWVs +bERhdGVuIC1hbmQgJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1snZm9ybWF0J10gLWFu +ZCAiJCgkcXVlbGxEYXRlbi5mb3JtYXQpIi5TdGFydHNXaXRoKCd2aTMtYmFja3VwJykpIHsNCiAg +ICAgICAgICAgICAgICAgICAgaWYgKCRxdWVsbERhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bs +YW51bmcnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9iamVjdCAncGxh +bnVuZy5qc29uJyAkcXVlbGxEYXRlbi5wbGFudW5nIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAg +ICAgICAgICAgICR3aWVkZXJoZXJnZXN0ZWxsdCArPSAncGxhbnVuZycNCiAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJHF1ZWxsRGF0ZW4uUFNPYmplY3QuUHJv +cGVydGllc1snYWRtaW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbk9i +amVjdCAnYWRtaW4uanNvbicgJHF1ZWxsRGF0ZW4uYWRtaW4gfCBPdXQtTnVsbA0KICAgICAgICAg +ICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdhZG1pbicNCiAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg +ICMgTGVnYWN5LUZvcm1hdCAobnVyIHBsYW51bmcuanNvbi1JbmhhbHQpLg0KICAgICAgICAgICAg +ICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRxdWVsbERhdGVuIHwgT3V0 +LU51bGwNCiAgICAgICAgICAgICAgICAgICAgJHdpZWRlcmhlcmdlc3RlbGx0ICs9ICdwbGFudW5n +Jw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdi +YWNrdXAud2llZGVyaGVyZ2VzdGVsbHQnIEB7IHF1ZWxsZSA9ICRuYW1lOyBzaWNoZXJ1bmcgPSAk +c2ljaGVyOyBpbmhhbHQgPSAoJHdpZWRlcmhlcmdlc3RlbGx0IC1qb2luICcrJykgfQ0KICAgICAg +ICAgICAgICAgIE5ldy1IaW53ZWlzICdiYWNrdXBfd2llZGVyaGVyZ2VzdGVsbHQnIChbb3JkZXJl +ZF1Aew0KICAgICAgICAgICAgICAgICAgICBiYWNrdXAgICAgPSAkbmFtZQ0KICAgICAgICAgICAg +ICAgICAgICBzaWNoZXJ1bmcgPSAkc2ljaGVyDQogICAgICAgICAgICAgICAgICAgIGluaGFsdCAg +ICA9ICgkd2llZGVyaGVyZ2VzdGVsbHQgLWpvaW4gJysnKQ0KICAgICAgICAgICAgICAgIH0pIChH +ZXQtQWt0dWVsbGVyQmVudXR6ZXIpIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICBTZW5kLUpz +b25PYmplY3QgJFJlc3BvbnNlIEB7IHN0YXR1cyA9ICd3aWVkZXJoZXJnZXN0ZWxsdCc7IHNpY2hl +cnVuZyA9ICRzaWNoZXI7IGluaGFsdCA9ICR3aWVkZXJoZXJnZXN0ZWxsdCB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvcGxhbnVuZy9iYWNrdXAvbG9lc2NoZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2JhY2t1cHMnKSkg +eyBTZW5kLUVycm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChCYWNrdXBzKScgNDAz +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QN +CiAgICAgICAgICAgICAgICAkZGF0ZW4gPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg +ICAgICAgICAgICAkbmFtZSA9ICIkKCRkYXRlbi5kYXRlaW5hbWUpIg0KICAgICAgICAgICAgICAg +IGlmICgtbm90ICgkbmFtZSAtbWF0Y2ggJ14oc25hcF98bGVnXylbMC05X2EtekEtWl0rXC5iYWsk +JykpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBj +b250aW51ZSB9DQogICAgICAgICAgICAgICAgJGZwID0gSm9pbi1QYXRoICREYXRhRGlyICgnY2Fj +aGUvJyArICRuYW1lKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVy +YWxQYXRoICRmcCkpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ0JhY2t1cCBuaWNodCBnZWZ1bmRl +bicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQ +YXRoICRmcCAtRm9yY2UNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAu +Z2Vsb2VzY2h0JyBAeyBkYXRlaW5hbWUgPSAkbmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMgPSAnZ2Vsb2VzY2h0JyB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBSRVNF +VCAvIERVTU1ZREFURU4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxh +bnVuZy9yZXNldCcgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIg +U3VwZXJVc2VyIGR1ZXJmZW4gZGllIFBsYW51bmcgenVydWVja3NldHplbicgNDAzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJHBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdw +bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJGJhY2t1cE5hbWUgPSAkbnVsbA0KICAgICAg +ICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRwbGFudW5nUGF0aCkgew0KICAg +ICAgICAgICAgICAgICAgICAkdHMgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3Mn +DQogICAgICAgICAgICAgICAgICAgICRjYWNoZURpciA9IEpvaW4tUGF0aCAkRGF0YURpciAnY2Fj +aGUnDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRo +ICRjYWNoZURpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkY2FjaGVE +aXIgLUZvcmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAjIFJlc3RhdXJpZXJi +YXJlciBOYW1lIChwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfKi5qc29uKSBzdGF0dA0KICAgICAg +ICAgICAgICAgICAgICAjIC5iYWsgLT4gd2lyZCB2b20gQmFja3Vwcy1UYWIgZ2VsaXN0ZXQgdW5k +IGthbm4gd2llZGVyaGVyZ2VzdGVsbHQNCiAgICAgICAgICAgICAgICAgICAgIyB3ZXJkZW4uIEZy +dWVoZXIgenVkZW0gbmljaHQgYW4gZGVuIENsaWVudCB6dXJ1ZWNrZ2VnZWJlbg0KICAgICAgICAg +ICAgICAgICAgICAjIC0+ICJCYWNrdXA6IHVuZGVmaW5lZCIgaW4gZGVyIFVJLg0KICAgICAgICAg +ICAgICAgICAgICAkYmFja3VwTmFtZSA9ICJwbGFudW5nX2JhY2t1cF92b3JfcmVzZXRfJHRzLmpz +b24iDQogICAgICAgICAgICAgICAgICAgIENvcHktSXRlbSAtTGl0ZXJhbFBhdGggJHBsYW51bmdQ +YXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICRjYWNoZURpciAkYmFja3VwTmFtZSkNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHBsYW51bmcgPSBSZWFkLUpzb25PYmplY3Qg +J3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRwbGFudW5nKSB7 +DQogICAgICAgICAgICAgICAgICAgIGlmICgkcGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydl +aW50cmFlZ2UnXSkgeyAkcGxhbnVuZy5laW50cmFlZ2UgPSBOZXctT2JqZWN0IFBTT2JqZWN0IH0N +CiAgICAgICAgICAgICAgICAgICAgaWYgKCRwbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tv +bW1lbnRhcmUnXSkgeyAkcGxhbnVuZy5rb21tZW50YXJlID0gTmV3LU9iamVjdCBQU09iamVjdCB9 +DQogICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBs +YW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0 +ZS1Mb2dFaW50cmFnICdwbGFudW5nLnJlc2V0JyBAe30NCiAgICAgICAgICAgICAgICBOZXctSGlu +d2VpcyAncGxhbnVuZ19yZXNldCcgKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgIGhp +bndlaXMgPSAnRWludHJhZWdlIHVuZCBLb21tZW50YXJlIHd1cmRlbiBnZWxvZXNjaHQ7IFNpY2hl +cnVuZyBsaWVndCBpbiBkYXRhL2NhY2hlLy4nDQogICAgICAgICAgICAgICAgfSkgKEdldC1Ba3R1 +ZWxsZXJCZW51dHplcikgfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj +dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ3p1cnVlY2tnZXNldHp0JzsgYmFja3VwID0gJGJhY2t1 +cE5hbWUgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvZHVtbXlkYXRlbicgLWFuZCAkTWV0aG9k +IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz +ZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gRHVtbXlk +YXRlbiBlaW5zcGllbGVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUVy +cm9yICRSZXNwb25zZSAnRHVtbXlkYXRlbiBudXIgaW0gRGVidWctU2VydmVyIChkZXYvc2VydmVy +LnB5KSBpbXBsZW1lbnRpZXJ0LicgNTAxDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAg +ICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvYWRtaW4vcHJvdG9rb2xsLWxvZXNj +aGVuDQogICAgICAgICAgICAjIEVpbm1hbC1SZXNldCBmdWVyIExvZ2J1Y2ggKyBBUEktTG9nLiBT +ZXR6dCBsb2didWNoLmpzb24gYXVmIFtdLA0KICAgICAgICAgICAgIyBsb2VzY2h0IGRpZSBBUEkt +TG9nLURhdGVpIGF1cyAlVEVNUCUsIHVuZCBzY2hyZWlidCBlaW5lbiBlaW56aWdlbg0KICAgICAg +ICAgICAgIyBuZXVlbiBMb2didWNoLUVpbnRyYWcgKHByb3Rva29sbC5nZWxvZXNjaHQpLCBkYW1p +dCBkYXMgRXJlaWduaXMNCiAgICAgICAgICAgICMgc2VsYnN0IG5hY2h2b2xsemllaGJhciBibGVp +YnQuDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3Byb3Rva29sbC1sb2Vz +Y2hlbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdOdXIgU3VwZXJV +c2VyIGR1ZXJmZW4gZGFzIFByb3Rva29sbCBsb2VzY2hlbicgNDAzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgJHZvcmhlciA9IFJlYWQtSnNvbk9iamVjdCAnbG9nYnVjaC5qc29uJw0KICAg +ICAgICAgICAgICAgICRhbnphaGxWb3JoZXIgPSAwDQogICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1uZSAkdm9yaGVyKSB7DQogICAgICAgICAgICAgICAgICAgICRhbnphaGxWb3JoZXIgPSBAKCR2 +b3JoZXIpLkNvdW50DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpz +b25PYmplY3QgJ2xvZ2J1Y2guanNvbicgQCgpIHwgT3V0LU51bGwNCg0KICAgICAgICAgICAgICAg +ICRhcGlMb2dCeXRlcyA9IDANCiAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFs +UGF0aCAkc2NyaXB0OkFwaUxvZykgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgJGFwaUxvZ0J5dGVzID0gKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAk +c2NyaXB0OkFwaUxvZykuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRl +bSAtTGl0ZXJhbFBhdGggJHNjcmlwdDpBcGlMb2cgLUZvcmNlIC1FcnJvckFjdGlvbiBTdG9wDQog +ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICAgICAgIyBE +YXRlaSBldnRsLiBub2NoIG9mZmVuOyBpZ25vcmllcmVuLCBMb2didWNoIGlzdCBkaWUgd2ljaHRp +Z2VyZSBTcHVyDQogICAgICAgICAgICAgICAgICAgICAgICAkYXBpTG9nQnl0ZXMgPSAtMQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg +V3JpdGUtTG9nRWludHJhZyAncHJvdG9rb2xsLmdlbG9lc2NodCcgQHsNCiAgICAgICAgICAgICAg +ICAgICAgbG9nYnVjaEVpbnRyYWVnZVZvcmhlciA9ICRhbnphaGxWb3JoZXINCiAgICAgICAgICAg +ICAgICAgICAgYXBpTG9nQnl0ZXMgICAgICAgICAgICA9ICRhcGlMb2dCeXRlcw0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25PYmplY3QgJFJlc3BvbnNlIEB7DQog +ICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgPSAnZ2Vsb2VzY2h0Jw0K +ICAgICAgICAgICAgICAgICAgICBsb2didWNoRWludHJhZWdlVm9yaGVyID0gJGFuemFobFZvcmhl +cg0KICAgICAgICAgICAgICAgICAgICBhcGlMb2dCeXRlcyAgICAgICAgICAgID0gJGFwaUxvZ0J5 +dGVzDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU1RBVElTVElLIC8gTE9HQlVDSCA9PT09PQ0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9zdGF0aXN0aWsnIC1hbmQgJE1ldGhvZCAt +ZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAn +c3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +J0tlaW5lIEJlcmVjaHRpZ3VuZyAoU3RhdGlzdGlrKScgNDAzOyBjb250aW51ZQ0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxh +bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRhZG1pbiAgID0gUmVhZC1Kc29uT2JqZWN0ICdh +ZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgKEdl +dC1TdGF0aXN0aWtEYXRhICRwbGFudW5nICRhZG1pbikNCiAgICAgICAgICAgICAgICBjb250aW51 +ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2didWNo +JyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRl +c3QtRGFyZkJlcmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVy +cm9yICRSZXNwb25zZSAnS2VpbmUgQmVyZWNodGlndW5nIChMb2didWNoKScgNDAzOyBjb250aW51 +ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb25UZXh0ICRSZXNw +b25zZSAoR2V0LUxvZ2J1Y2hUZXh0KQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFpFTEwtTE9DSyAr +IENIQU5HRVMgKExpdmUtU3luYykgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAj +IFBPU1QgL2FwaS9sb2NrL3plbGxlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHsgb2ssIHRva2Vu +LCAuLi4gfSBvZGVyIDQyMyB7IHNwZXJyZXIsIC4uLiB9DQogICAgICAgICAgICBpZiAoJFBhdGgg +LWVxICcvYXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAg +ICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAo +LW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEz +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpz +b24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRhdHVtDQogICAgICAgICAg +ICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAgICAgICAgICAgICAgIGlm +ICgtbm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5vdCAoVGVzdC1Mb2NrU2Fm +ZUlkICRwZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9u +c2UgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVsbGVyQmVudXR6ZXINCiAg +ICAgICAgICAgICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUNCiAgICAgICAgICAgICAg +ICAkcmVzID0gQWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklkICR1c2VyICRyb2xsZSAk +ZmFsc2UNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGZlaGxlciAgICA9ICdnZXNwZXJydCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1 +bmcgICA9ICJXaXJkIGJlYXJiZWl0ZXQgdm9uICQoJHJlcy5leGlzdGluZy51c2VybmFtZSkiDQog +ICAgICAgICAgICAgICAgICAgICAgICBzcGVycmVyICAgPSAkcmVzLmV4aXN0aW5nLnVzZXJuYW1l +DQogICAgICAgICAgICAgICAgICAgICAgICByb2xsZSAgICAgPSAkcmVzLmV4aXN0aW5nLnJvbGxl +DQogICAgICAgICAgICAgICAgICAgICAgICBzZWl0ICAgICAgPSAkcmVzLmV4aXN0aW5nLmxvY2tl +ZEF0DQogICAgICAgICAgICAgICAgICAgICAgICBrYW5uRm9yY2UgPSAoVGVzdC1EYXJmTG9ja1Vl +YmVyc2NocmVpYmVuKQ0KICAgICAgICAgICAgICAgICAgICB9IDQyMw0KICAgICAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpz +b25PYmplY3QgJFJlc3BvbnNlIEB7DQogICAgICAgICAgICAgICAgICAgIG9rICAgICAgID0gJHRy +dWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gICAgPSAkcmVzLmxvY2sudG9rZW4NCiAgICAg +ICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkZGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVy +c29uSWQgPSAkcGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgPSAkcm9sbGUN +CiAgICAgICAgICAgICAgICAgICAgbG9ja2VkQXQgPSAkcmVzLmxvY2subG9ja2VkQXQNCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K +ICAgICAgICAgICAgIyBQT1NUIC9hcGkvbG9jay96ZWxsZS9mb3JjZSAgeyBkYXR1bSwgcGVyc29u +SWQgfSAtPiB1ZWJlcnNjaHJlaWJ0IGZyZW1kZW4gTG9jaw0KICAgICAgICAgICAgaWYgKCRQYXRo +IC1lcSAnL2FwaS9sb2NrL3plbGxlL2ZvcmNlJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0K +ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURhcmZMb2NrVWViZXJzY2hyZWliZW4pKSB7 +DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICdGb3JjZS1Mb2NrIG51 +ciBmdWVyIEZhY2hhdWZzaWNodC9TdXBlclVzZXInIDQwMzsgY29udGludWUNCiAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn +ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJGEgPSAkYm9keSB8 +IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkZGF0dW0gPSBbc3RyaW5nXSRhLmRh +dHVtDQogICAgICAgICAgICAgICAgJHBlcnNvbklkID0gW3N0cmluZ10kYS5wZXJzb25JZA0KICAg +ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUxvY2tTYWZlRGF0dW0gJGRhdHVtKSAtb3IgLW5v +dCAoVGVzdC1Mb2NrU2FmZUlkICRwZXJzb25JZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGlu +dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHVzZXIgPSBHZXQtQWt0dWVs +bGVyQmVudXR6ZXINCiAgICAgICAgICAgICAgICAkcm9sbGUgPSAoR2V0LVJlY2h0ZSkucm9sbGUN +CiAgICAgICAgICAgICAgICAkcmVzID0gQWNxdWlyZS1DZWxsTG9jayAkZGF0dW0gJHBlcnNvbklk +ICR1c2VyICRyb2xsZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2xv +Y2suZm9yY2UnIEB7IGRhdHVtID0gJGRhdHVtOyBwZXJzb25JZCA9ICRwZXJzb25JZDsgcm9sbGUg +PSAkcm9sbGUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsN +CiAgICAgICAgICAgICAgICAgICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAg +ICB0b2tlbiAgICA9ICRyZXMubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAg +ICA9ICRkYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRwZXJzb25JZA0KICAg +ICAgICAgICAgICAgICAgICByb2xsZSAgICA9ICRyb2xsZQ0KICAgICAgICAgICAgICAgICAgICBs +b2NrZWRBdCA9ICRyZXMubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2Fw +aS9sb2NrL3plbGxlL2hlYXJ0YmVhdCAgeyB0b2tlbiB9IC0+IGFrdHVhbGlzaWVydCBsYXN0QmVh +dA0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlL2hlYXJ0YmVhdCcg +LWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQt +Qm9keSAkUmVxdWVzdA0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRib2R5KSB7IFNlbmQtRXJy +b3IgJFJlc3BvbnNlICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAkYSA9ICRib2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICR0 +b2tlbiA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7IFtzdHJpbmddJGEu +dG9rZW4gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxs +T3JXaGl0ZVNwYWNlKCR0b2tlbikpIHsgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1Rva2VuIGZlaGx0 +JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkcmVzID0gUmVmcmVzaC1DZWxsTG9j +ayAkdG9rZW4NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcmVzLm9rKSB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgZmVobGVyID0gJ3VuYmVrYW5u +dGVyX2xvY2snOyBtZWxkdW5nID0gJ0xvY2sgZXhpc3RpZXJ0IG5pY2h0IChtZWhyKS4nIH0gNDA0 +DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkdHJ1ZTsgbGFzdEJl +YXQgPSAkcmVzLmxvY2subGFzdEJlYXQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgREVMRVRFIC9hcGkvbG9jay96ZWxsZSAgeyB0b2tl +biB9IC0+IExvY2sgZnJlaWdlYmVuIChhdWNoIHZpYSBRdWVyeS1TdHJpbmcgZnVlciBzZW5kQmVh +Y29uKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxlJyAtYW5kICRN +ZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBSZWFkLUJvZHkg +JFJlcXVlc3QNCiAgICAgICAgICAgICAgICAkdG9rZW4gPSAkbnVsbA0KICAgICAgICAgICAgICAg +IGlmICgkYm9keSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgeyAkYSA9ICRib2R5IHwgQ29u +dmVydEZyb20tSnNvbjsgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Rva2VuJ10pIHsgJHRv +a2VuID0gW3N0cmluZ10kYS50b2tlbiB9IH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHRva2VuKSAt +YW5kICRSZXF1ZXN0LlVybC5RdWVyeSkgew0KICAgICAgICAgICAgICAgICAgICAkcSA9IFtTeXN0 +ZW0uV2ViLkh0dHBVdGlsaXR5XTo6UGFyc2VRdWVyeVN0cmluZygkUmVxdWVzdC5VcmwuUXVlcnkp +DQogICAgICAgICAgICAgICAgICAgICR0b2tlbiA9IFtzdHJpbmddJHFbJ3Rva2VuJ10NCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRl +U3BhY2UoJHRva2VuKSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnVG9rZW4gZmVobHQnIDQwMDsg +Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICRyZXMgPSBSZWxlYXNlLUNlbGxMb2NrICR0b2tl +bg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9uc2UgQHsgb2sgPSAkcmVz +Lm9rIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAg +ICAgICAjIEdFVCAvYXBpL2xvY2svemVsbGVuIC0+IExpc3RlIGFsbGVyIGFrdGl2ZW4gTG9ja3Mg +KGZ1ZXIgTGl2ZS1JbmRpY2F0b3IpDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xv +Y2svemVsbGVuJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgU2Vu +ZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBsb2NrcyA9IChHZXQtQWxsQWN0aXZlQ2VsbExvY2tz +KSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg +ICAgIyBQT1NUIC9hcGkvdmVyYW50d29ydHVuZy9hdWZnZXJ1ZWNrdCDigJQgU3RhdGlzdGlrLUNh +cHR1cmUgZnVlciBkZW4NCiAgICAgICAgICAgICMgIkVpbmdlc3BydW5nZW4iLUJhbGtlbiBpbiBk +ZXIgU2NoaWNodHZlcnRlaWx1bmcuIFdpcmQgdm9tIENsaWVudA0KICAgICAgICAgICAgIyBnZWZl +dWVydCwgc29iYWxkIGplbWFuZCBpbm5lcmhhbGIgZGVyIDE0LVRhZ2UtVmVyYmluZGxpY2hrZWl0 +IG5ldQ0KICAgICAgICAgICAgIyBpbiBkaWUgVG9wLTIgKDEuLzIuIFZJMy1ER0wpIGVpbmVyIFNj +aGljaHQgYXVmcnVlY2t0IOKAlCBhbHNvDQogICAgICAgICAgICAjIGF1c3NlcnBsYW5tYWVzc2ln +IFZlcmFudHdvcnR1bmcgdWViZXJuaW1tdC4NCiAgICAgICAgICAgICMgQm9keTogeyBwZXJzb25J +ZCwgZGF0dW0sIHNjaGljaHQsIHN0dWZlLCB2b3JoZXJXZXJ0LCBhdXNsb2VzZXJQZXJzb25JZCB9 +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3ZlcmFudHdvcnR1bmcvYXVmZ2VydWVj +a3QnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJGJvZHkgPSBS +ZWFkLUJvZHkgJFJlcXVlc3QNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5k +LUVycm9yICRSZXNwb25zZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgdHJ5IHsgJGEgPSAkYm9keSB8IENvbnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7 +IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICAkcGlkID0gaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BlcnNv +bklkJ10pIHsgW3N0cmluZ10kYS5wZXJzb25JZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg +ICAgJGRhdCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydkYXR1bSddKSB7IFtzdHJpbmdd +JGEuZGF0dW0gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRwaWQgLW9y +IC1ub3QgJGRhdCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAncGVyc29uSWQvZGF0dW0gZmVobHQn +IDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRmZWxkZXIgPSBbb3JkZXJlZF1Aew0K +ICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgID0gJHBpZA0KICAgICAgICAgICAgICAgICAg +ICBkYXR1bSAgICAgID0gJGRhdA0KICAgICAgICAgICAgICAgICAgICBzY2hpY2h0ICAgID0gaWYg +KCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHQnXSkgeyBbc3RyaW5nXSRhLnNjaGljaHQg +fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBzdHVmZSAgICAgID0gaWYgKCRhLlBT +T2JqZWN0LlByb3BlcnRpZXNbJ3N0dWZlJ10pIHsgW2ludF0kYS5zdHVmZSB9IGVsc2UgeyAwIH0N +CiAgICAgICAgICAgICAgICAgICAgdm9yaGVyV2VydCA9IGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyd2b3JoZXJXZXJ0J10pIHsgW3N0cmluZ10kYS52b3JoZXJXZXJ0IH0gZWxzZSB7ICcnIH0N +CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ2F1c2xvZXNlclBlcnNvbklkJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJGZlbGRl +clsnYXVzbG9lc2VyUGVyc29uSWQnXSA9IFtzdHJpbmddJGEuYXVzbG9lc2VyUGVyc29uSWQNCiAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAndmVyYW50 +d29ydHVuZy5laW5nZXNwcnVuZ2VuJyAkZmVsZGVyDQogICAgICAgICAgICAgICAgU2VuZC1Kc29u +T2JqZWN0ICRSZXNwb25zZSBAeyBvayA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICBjb250aW51 +ZQ0KICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvcGxhbnVuZy9jaGFu +Z2VzP3NlaXQ9PGlzby10cz4gLT4gRGVsdGEtTGlzdGUgZnVlciBMaXZlLVN5bmMNCiAgICAgICAg +ICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9jaGFuZ2VzJyAtYW5kICRNZXRob2QgLWVx +ICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJHEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06 +OlBhcnNlUXVlcnlTdHJpbmcoJFJlcXVlc3QuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICRs +b2cgPSBSZWFkLUpzb25PYmplY3QgJ2NoYW5nZXMuanNvbicNCiAgICAgICAgICAgICAgICBpZiAo +JG51bGwgLWVxICRsb2cgLW9yIC1ub3QgKCRsb2cgLWlzIFthcnJheV0pKSB7ICRsb2cgPSBAKCkg +fQ0KICAgICAgICAgICAgICAgICRtYXhTZXEgPSBHZXQtTWF4Q2hhbmdlU2VxICRsb2cNCiAgICAg +ICAgICAgICAgICBpZiAoJHEuQWxsS2V5cyAtY29udGFpbnMgJ3NlaXRfc2VxJykgew0KICAgICAg +ICAgICAgICAgICAgICAjIE5ldWVyIHJhY2UtZnJlaWVyIHNlcS1DdXJzb3IgKENoYW5nZXMgKyBz +ZXJ2ZXJTZXEgYXVzDQogICAgICAgICAgICAgICAgICAgICMgREVNU0VMQkVOIFJlYWQpLiBMZWVy +ZXIgc2VpdF9zZXEgPSBFcnN0LVN5bmMgLT4gbnVyIEN1cnNvci4NCiAgICAgICAgICAgICAgICAg +ICAgJHJhdyA9IFtzdHJpbmddJHFbJ3NlaXRfc2VxJ10NCiAgICAgICAgICAgICAgICAgICAgaWYg +KFtzdHJpbmddOjpJc051bGxPckVtcHR5KCRyYXcpKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAkY2hhbmdlcyA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg +ICAgICAgICAgICAgICAgJHNxID0gMDsgW3ZvaWRdW2ludF06OlRyeVBhcnNlKCRyYXcsIFtyZWZd +JHNxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXMgPSBAKCRsb2cgfCBXaGVyZS1P +YmplY3QgeyAkbnVsbCAtbmUgJF8uc2VxIC1hbmQgW2ludF0kXy5zZXEgLWd0ICRzcSB9KQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAk UmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclRzICA9IChHZXQtRGF0 ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICAg ICAgc2VydmVyU2VxID0gJG1heFNlcQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyAg -ID0gKEdldC1DaGFuZ2VzU2luY2UgJHNlaXQpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K -ICAgICAgICAgICAgIyA9PT09PSBQcm9maWxiaWxkZXIgKEF2YXRhcmUpID09PT09DQogICAgICAg -ICAgICAjIERhdGVpOiAkRGF0YURpci9hdmF0YXJzLzxpZD4uanBnICAgKEpQRUcsIHZvbSBDbGll -bnQgYXVmIDIwMHgyMDANCiAgICAgICAgICAgICMgaGVydW50ZXJnZXJlY2huZXQsIHVlYmxpY2gg -NS0yNSBLQikuDQogICAgICAgICAgICAjDQogICAgICAgICAgICAjIEJlcmVjaHRpZ3VuZzoNCiAg -ICAgICAgICAgICMgICBQT1NUL0RFTEVURTogU1UvRkEgT0RFUiBlaWdlbmUgUGVyc29uSWQgKFNl -bGYtU2VydmljZSkuDQogICAgICAgICAgICAjICAgR0VUOiAgICAgICAgIGFsbGUgZWluZ2Vsb2dn -dGVuIFVzZXIgKGltIEdyaWQgc2ljaHRiYXIpLg0KICAgICAgICAgICAgIw0KICAgICAgICAgICAg -IyBQT1NULUJvZHk6IHsgImRhdGFVcmwiOiAiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCw8Li4uPiIg -fQ0KICAgICAgICAgICAgIyAyNTAgS0IgaGFydGVyIENhcCAoZGVmZW5zaXYg4oCUIENsaWVudCBz -Y2hpY2t0IHR5cGlzY2ggPDMwIEtCKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtbWF0Y2ggJ14v -YXBpL3BlcnNvbmVuLyhcZCspL2F2YXRhciQnKSB7DQogICAgICAgICAgICAgICAgJHBlcnNvbklk -ID0gJG1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUNCiAgICAgICAg -ICAgICAgICAkaXN0RWlnZW4gPSAoJG51bGwgLW5lICRyLm1laW5lUGVyc29uSWQgLWFuZCBbaW50 -XSRwZXJzb25JZCAtZXEgW2ludF0kci5tZWluZVBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICRp -c3RCZXJlY2h0aWd0ID0gKFRlc3QtSXN0QWRtaW4pIC1vciAkaXN0RWlnZW4NCiAgICAgICAgICAg -ICAgICAkYXZhdGFyRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdhdmF0YXJzJw0KICAgICAgICAg -ICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0YXJEaXIpKSB7DQog -ICAgICAgICAgICAgICAgICAgIHRyeSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBh -dGggJGF2YXRhckRpciAtRm9yY2UgfCBPdXQtTnVsbCB9IGNhdGNoIHt9DQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoICRhdmF0YXJEaXIg -KCRwZXJzb25JZCArICcuanBnJykNCiAgICAgICAgICAgICAgICBpZiAoJE1ldGhvZCAtZXEgJ1BP -U1QnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RCZXJlY2h0aWd0KSB7IFNl -bmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0K -ICAgICAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0KICAgICAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQW5mcmFn -ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgIHRyeSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAkb2JqID0gJGJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQog -ICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVVybCA9IFtzdHJpbmddJG9iai5kYXRhVXJsDQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0YVVybCAtb3IgLW5vdCAkZGF0YVVy -bC5TdGFydHNXaXRoKCdkYXRhOmltYWdlLycpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEJpbGRmb3JtYXQgKGVyd2FydGUg -ZGF0YTppbWFnZS8uLi47YmFzZTY0LC4uLiknIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRiYXNlNjQgPSAkZGF0YVVybCAt -cmVwbGFjZSAnXmRhdGE6aW1hZ2UvW2EtekEtWl0rO2Jhc2U2NCwnLCAnJw0KICAgICAgICAgICAg -ICAgICAgICAgICAgJGJ5dGVzID0gW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygk -YmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRieXRlcy5MZW5ndGggLWd0IDI2 -MjE0NCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmlsZCB6dSBncm9zcyAobWF4IDI1MCBLQikn -IDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxl -XTo6V3JpdGVBbGxCeXRlcygkYXZhdGFyRmlsZSwgJGJ5dGVzKQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgIyBhdmF0YXJUcyBpbiBwbGFudW5nLmpzb24gc2V0emVuLCBkYW1pdCBkZXIgQ2FjaGUt -QnVzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAjIG5hY2ggUmVsb2FkIGJla2FubnQgaXN0 -IChDbGllbnQgaGFlbmd0ID90cz08YXZhdGFyVHM+DQogICAgICAgICAgICAgICAgICAgICAgICAj -IGFuIGRpZSBCaWxkLVVSTCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkdHMgPSBbbG9uZ10o -W0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSkNCiAgICAg -ICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29uT2JqZWN0ICdw -bGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAk -cGxhbnVuZyAtYW5kICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcC5pZCAtZXEgW3N0cmluZ10k -cGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkgeyAkcC5hdmF0YXJUcyA9ICR0cyB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRk -LU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnYXZhdGFyVHMnIC1Ob3RlUHJvcGVydHlWYWx1ZSAk -dHMgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh -aw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl -LUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gfCBPdXQtTnVs -bA0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZhdGFyLmdlc2V0 -enQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBieXRlcyA9ICRieXRlcy5MZW5ndGggfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBAeyBzdGF0dXMg -PSAnZ2VzcGVpY2hlcnQnOyBieXRlcyA9ICRieXRlcy5MZW5ndGg7IGF2YXRhclRzID0gJHRzIH0N -CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgICAgICBT -ZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRhci1VcGxvYWQgZmVobGdlc2NobGFnZW46ICIgKyAk -Xy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -aWYgKCRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRpc3RCZXJlY2h0aWd0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1 -bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJGF2 -YXRhckZpbGUgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZhdGFyLmVudGZlcm50JyBAeyBw -ZXJzb25JZCA9ICRwZXJzb25JZCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9iamVjdCAncGxh -bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJHBs -YW51bmcgLWFuZCAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHAuaWQgLWVxIFtzdHJpbmddJHBl -cnNvbklkIC1hbmQgJHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwLlBTT2JqZWN0LlByb3BlcnRpZXMu -UmVtb3ZlKCdhdmF0YXJUcycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0LU51bGwNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IHwg -T3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVjdCAkUmVzcG9u -c2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNo -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNlICgiQXZhdGFy -LUxvZXNjaGVuIGZlaGxnZXNjaGxhZ2VuOiAiICsgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpIDUwMA0K -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBBdmF0YXItU3RhdGlj -LVNlcnZpbmc6IC9kYXRhL2F2YXRhcnMvPGlkPi5qcGcgbGllc3QgZGlyZWt0IGF1cw0KICAgICAg -ICAgICAgIyAkRGF0YURpci9hdmF0YXJzLy4gQmV3dXNzdCBlaWdlbmVyIFBmYWQgc3RhdHQgdWVi -ZXIgUmVzb2x2ZS0NCiAgICAgICAgICAgICMgU2FmZVBhdGgsIHdlaWwgZG9ydCBkZXIgQXNzZXQt -Q2FjaGUtUm9vdCBnZW51dHp0IHdpcmQgKEF2YXRhcmUNCiAgICAgICAgICAgICMgbGllZ2VuIGFi -ZXIgdW50ZXIgRGF0YURpcikuDQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNoICdeL2RhdGEv -YXZhdGFycy8oXGQrKVwuanBnJCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAg -ICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoIChKb2luLVBhdGggJERhdGFEaXIgJ2F2YXRh -cnMnKSAoJG1hdGNoZXNbMV0gKyAnLmpwZycpDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0 -aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUgLVBhdGhUeXBlIExlYWYpIHsNCiAgICAgICAgICAg -ICAgICAgICAgJGNvbnRlbnQgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsQnl0ZXMoJGF2YXRh -ckZpbGUpDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2RlID0gMjAwDQog -ICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdpbWFnZS9qcGVnJw0K -ICAgICAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25zZQ0KICAgICAg -ICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNvbnRlbnQuTGVuZ3Ro -DQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3JpdGUoJGNvbnRl -bnQsIDAsICRjb250ZW50Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91 -dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg -ICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXIgbmljaHQgZ2VmdW5kZW46ICIg -KyAkUGF0aCkgNDA0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVl -DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU3RhdGlzY2hlIERhdGVpZW4g -PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy8nIC1vciAkUGF0aCAtZXEgJycpIHsg -JFBhdGggPSAnL2luZGV4Lmh0bWwnIH0NCiAgICAgICAgICAgICRSZWxQYXRoID0gJFBhdGguVHJp -bVN0YXJ0KCcvJykNCiAgICAgICAgICAgICMgZGF0YS8tRGlyZWt0enVncmlmZi1HYXRlIChTcHJp -bnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAgICAgICAgICAg -IyBHRVQgL2RhdGEvYWRtaW4uanNvbiAodW5kIHBsYW51bmcuanNvbiwgbG9nYnVjaC5qc29uLCBo -aW53ZWlzZS5qc29uLA0KICAgICAgICAgICAgIyBjaGFuZ2VzLmpzb24sIHNvd2llIGFsbGUgQmFj -a3VwLURhdGVpZW4pIGxpZWZlcnRlIHZvcmhlciBSb2gtSlNPTiBPSE5FDQogICAgICAgICAgICAj -IEF1dGgtQ2hlY2suIEF2YXRhci1TdWJwZmFkIHdpcmQgb2JlbiBzZXBhcmF0IGdlcm91dGV0LiBB -bGxlcyBhbmRlcmUNCiAgICAgICAgICAgICMgdW50ZXIgL2RhdGEvIGRhcmYgTlVSIGR1cmNoIGVp -bmUgZXhwbGl6aXRlIFdoaXRlbGlzdCAoU3RhdGlzdGlrLSB1bmQNCiAgICAgICAgICAgICMgTG9n -YnVjaC1UYXJuLU1hcmt1cHMsIHdlaXRlciB1bnRlbiBnZWdhdGVkKS4gU29uc3QgNDA0Lg0KICAg -ICAgICAgICAgIyBNaXR0ZWlsdW5ncy1VcGxvYWRzIChTcHJpbnQgRC0zYiwgMjAyNi0wNS0yOSk6 -IHZvbSBTVSBob2NoZ2VsYWRlbmUNCiAgICAgICAgICAgICMgQmlsZGVyICsgUERGcyB1bnRlciBk -YXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fPHRzPl88cmFuZD4uPGV4dD4uDQogICAgICAgICAg -ICAjIEVuZHVuZ3MtV2hpdGVsaXN0IHZlcmhpbmRlcnQgQ29kZS1TbXVnZ2xpbmcgdWViZXIgZGVu -IFBmYWQuDQogICAgICAgICAgICAkaXN0TWl0dGVpbHVuZ1VwbG9hZCA9ICgkUmVsUGF0aCAtbWF0 -Y2ggJ15kYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fXGQrX1thLXowLTldK1wuKGpwZ3xwbmd8 -d2VicHxwZGYpJCcpDQogICAgICAgICAgICBpZiAoJFJlbFBhdGggLWxpa2UgJ2RhdGEvKicgLWFu -ZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9tYWluZnJhbWUuaHRtbCcgLWFu -ZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9zYW5pdGl6ZXIuaHRtbCcgLWFu -ZA0KICAgICAgICAgICAgICAgIC1ub3QgJGlzdE1pdHRlaWx1bmdVcGxvYWQpIHsNCiAgICAgICAg -ICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChkYXRhLy1EaXJla3R6dWdyaWZmIGJsb2Nr -aWVydCknIC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNl -ICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAgICAgICAgICAg -ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBWZXJzY2hsZWllcnVu -Z3MtRmlsdGVyOiBkYXMgU3RhdGlzdGlrLSB1bmQgTG9nYnVjaC1Nb2R1bCBzYW10DQogICAgICAg -ICAgICAjIE1hcmt1cC1GcmFnbWVudCB3ZXJkZW4gbnVyIGFuIEJlcmVjaHRpZ3RlIGF1c2dlbGll -ZmVydC4NCiAgICAgICAgICAgICMgRGlyZWt0ZXIgWnVncmlmZiBkdXJjaCBVbmJlcmVjaHRpZ3Rl -IChCcm93c2VyLVVSTC1FaW5nYWJlLA0KICAgICAgICAgICAgIyBTb3VyY2UtU3RvZWJlcm4pIGJl -a29tbXQgNDA0IOKAlCB3aWUgYmVpIGplZGVtIG5pY2h0IGV4aXN0aWVyZW5kZW4NCiAgICAgICAg -ICAgICMgUGZhZCwga2VpbiBTdGF0dXNjb2RlLVZlcnJhdC4NCiAgICAgICAgICAgIGlmICgkUmVs -UGF0aCAtZXEgJ2pzL3N0YXRpc3Rpay5qcycgLW9yICRSZWxQYXRoIC1lcSAnZGF0YS9tYWluZnJh -bWUuaHRtbCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmQmVyZWljaCAn -c3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0dBVEUgNDA0IHsw -fSAoa2VpbiBTdGF0aXN0aWstUmVjaHQpJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICAg -ICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAk -UGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgIH0gZWxzZWlmICgkUmVsUGF0aCAtZXEgJ2pzL2xvZ2J1Y2guanMnIC1v -ciAkUmVsUGF0aCAtZXEgJ2RhdGEvc2FuaXRpemVyLmh0bWwnKSB7DQogICAgICAgICAgICAgICAg -aWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAgICAgICAgICAg -ICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChrZWluIExvZ2J1Y2gtUmVjaHQpJyAtZiAkUmVs -UGF0aCkNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2Fu -bnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRG -aWxlUGF0aCA9IFJlc29sdmUtU2FmZVBhdGggJFJlbFBhdGgNCiAgICAgICAgICAgICR2b25GYWxs -YmFjayA9ICRmYWxzZQ0KICAgICAgICAgICAgIyBTaGFyZS1GYWxsYmFjazogd2VubiBkaWUgRGF0 -ZWkgbG9rYWwgZmVobHQgKHouQi4geGxzeC5mdWxsLm1pbi5qcw0KICAgICAgICAgICAgIyB3aXJk -IGJld3Vzc3QgbmljaHQgaW4gZGVuIENsaWVudC1DYWNoZSBrb3BpZXJ0KSwgdmVyc3VjaGUgc2ll -DQogICAgICAgICAgICAjIHZvbSBrb25maWd1cmllcnRlbiBBc3NldEZhbGxiYWNrLVBmYWQgbmFj -aHp1bGFkZW4uDQogICAgICAgICAgICBpZiAoKC1ub3QgJEZpbGVQYXRoIC1vciAtbm90IChUZXN0 -LVBhdGggLUxpdGVyYWxQYXRoICRGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZikpIC1hbmQgJHNjcmlw -dDpBc3NldEZhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg -ICAgICAgJGZhbGxiYWNrVHJ5ID0gSm9pbi1QYXRoICRzY3JpcHQ6QXNzZXRGYWxsYmFjayAkUmVs -UGF0aA0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2tOb3JtID0gW1N5c3RlbS5JTy5QYXRo -XTo6R2V0RnVsbFBhdGgoJGZhbGxiYWNrVHJ5KQ0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJh -Y2tSb290Tm9ybSA9IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRzY3JpcHQ6QXNzZXRG -YWxsYmFjaykNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmYWxsYmFja05vcm0uU3RhcnRzV2l0 -aCgkZmFsbGJhY2tSb290Tm9ybSwgW1N5c3RlbS5TdHJpbmdDb21wYXJpc29uXTo6T3JkaW5hbEln -bm9yZUNhc2UpIC1hbmQNCiAgICAgICAgICAgICAgICAgICAgICAgIChUZXN0LVBhdGggLUxpdGVy -YWxQYXRoICRmYWxsYmFja05vcm0gLVBhdGhUeXBlIExlYWYpKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAkRmlsZVBhdGggPSAkZmFsbGJhY2tOb3JtDQogICAgICAgICAgICAgICAgICAgICAg -ICAkdm9uRmFsbGJhY2sgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdGQUxMQkFDSy1G -RUhMRVIgezB9OiB7MX0nIC1mICRSZWxQYXRoLCAkXy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJEZpbGVQYXRoIC1h -bmQgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJEZpbGVQYXRoIC1QYXRoVHlwZSBMZWFmKSkgew0K -ICAgICAgICAgICAgICAgICRleHQgPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRFeHRlbnNpb24oJEZp -bGVQYXRoKS5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAkbWltZSA9IGlmICgkTWltZVR5cGVz -LkNvbnRhaW5zS2V5KCRleHQpKSB7ICRNaW1lVHlwZXNbJGV4dF0gfSBlbHNlIHsgJ2FwcGxpY2F0 -aW9uL29jdGV0LXN0cmVhbScgfQ0KICAgICAgICAgICAgICAgICRjb250ZW50ID0gW1N5c3RlbS5J -Ty5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRGaWxlUGF0aCkNCiAgICAgICAgICAgICAgICAkUmVzcG9u -c2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlw -ZSA9ICRtaW1lDQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzcG9uc2UN -CiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNvbnRlbnQuTGVu -Z3RoDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0ZSgkY29udGVu -dCwgMCwgJGNvbnRlbnQuTGVuZ3RoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRT -dHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGlmICgkdm9uRmFsbGJhY2spIHsgTG9nLUFw -aSAoJ0ZJTEUgMjAwIHswfSAoRmFsbGJhY2ssIHsxfSBCeXRlcyknIC1mICRSZWxQYXRoLCAkY29u -dGVudC5MZW5ndGgpIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgTG9n -LUFwaSAoJ0ZJTEUgNDA0IHswfSAod2VkZXIgaW0gUm9vdCBub2NoIHVlYmVyIEFzc2V0RmFsbGJh -Y2sgZ2VmdW5kZW4pJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQYXRoIikgNDA0DQogICAg -ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggew0KICAgICAgICAgICAgTG9nLUFw -aSAoJ0VYQ0VQVElPTiB7MH0gezF9OiB7Mn0nIC1mICRNZXRob2QsICRQYXRoLCAkXy5FeGNlcHRp -b24uTWVzc2FnZSkNCiAgICAgICAgICAgIHRyeSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICRfLkV4 -Y2VwdGlvbi5NZXNzYWdlIDUwMCB9IGNhdGNoIHt9DQogICAgICAgIH0NCiAgICB9DQp9DQpjYXRj -aCB7DQogICAgV3JpdGUtSG9zdCAoJ1NlcnZlci1GZWhsZXI6IHswfScgLWYgJF8uRXhjZXB0aW9u -Lk1lc3NhZ2UpDQogICAgTG9nLUFwaSAoJ01BSU4tTE9PUCBFWENFUFRJT046IHswfScgLWYgJF8u -RXhjZXB0aW9uLk1lc3NhZ2UpDQp9DQpmaW5hbGx5IHsNCiAgICAkV2F0Y2hkb2dUaW1lci5TdG9w -KCkNCiAgICBpZiAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7ICRMaXN0ZW5lci5TdG9wKCkgfQ0K -ICAgIExvZy1BcGkgJ1NIVVRET1dOJw0KICAgIFdyaXRlLUhvc3QgJ1NlcnZlciBiZWVuZGV0LicN -Cn0NCg== +ID0gW29iamVjdFtdXSRjaGFuZ2VzDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIEJhY2t3YXJkLWNvbXBhdDogYWx0 +ZXIgV2FsbC1DbG9jay1DdXJzb3IgKGFsdGUgQ2xpZW50cykuDQogICAgICAgICAgICAgICAgICAg +ICRzZWl0ID0gW3N0cmluZ10kcVsnc2VpdCddDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNv +bk9iamVjdCAkUmVzcG9uc2UgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclRzICA9 +IChHZXQtRGF0ZSkuVG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgc2VydmVyU2VxID0gJG1heFNlcQ0KICAgICAgICAgICAgICAgICAgICAgICAg +Y2hhbmdlcyAgID0gKEdldC1DaGFuZ2VzU2luY2UgJHNlaXQpDQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PSBQcm9maWxiaWxkZXIgKEF2YXRhcmUpID09PT09 +DQogICAgICAgICAgICAjIERhdGVpOiAkRGF0YURpci9hdmF0YXJzLzxpZD4uanBnICAgKEpQRUcs +IHZvbSBDbGllbnQgYXVmIDIwMHgyMDANCiAgICAgICAgICAgICMgaGVydW50ZXJnZXJlY2huZXQs +IHVlYmxpY2ggNS0yNSBLQikuDQogICAgICAgICAgICAjDQogICAgICAgICAgICAjIEJlcmVjaHRp +Z3VuZzoNCiAgICAgICAgICAgICMgICBQT1NUL0RFTEVURTogU1UvRkEgT0RFUiBlaWdlbmUgUGVy +c29uSWQgKFNlbGYtU2VydmljZSkuDQogICAgICAgICAgICAjICAgR0VUOiAgICAgICAgIGFsbGUg +ZWluZ2Vsb2dndGVuIFVzZXIgKGltIEdyaWQgc2ljaHRiYXIpLg0KICAgICAgICAgICAgIw0KICAg +ICAgICAgICAgIyBQT1NULUJvZHk6IHsgImRhdGFVcmwiOiAiZGF0YTppbWFnZS9qcGVnO2Jhc2U2 +NCw8Li4uPiIgfQ0KICAgICAgICAgICAgIyAyNTAgS0IgaGFydGVyIENhcCAoZGVmZW5zaXYg4oCU +IENsaWVudCBzY2hpY2t0IHR5cGlzY2ggPDMwIEtCKS4NCiAgICAgICAgICAgIGlmICgkUGF0aCAt +bWF0Y2ggJ14vYXBpL3BlcnNvbmVuLyhcZCspL2F2YXRhciQnKSB7DQogICAgICAgICAgICAgICAg +JHBlcnNvbklkID0gJG1hdGNoZXNbMV0NCiAgICAgICAgICAgICAgICAkciA9IEdldC1SZWNodGUN +CiAgICAgICAgICAgICAgICAkaXN0RWlnZW4gPSAoJG51bGwgLW5lICRyLm1laW5lUGVyc29uSWQg +LWFuZCBbaW50XSRwZXJzb25JZCAtZXEgW2ludF0kci5tZWluZVBlcnNvbklkKQ0KICAgICAgICAg +ICAgICAgICRpc3RCZXJlY2h0aWd0ID0gKFRlc3QtSXN0QWRtaW4pIC1vciAkaXN0RWlnZW4NCiAg +ICAgICAgICAgICAgICAkYXZhdGFyRGlyID0gSm9pbi1QYXRoICREYXRhRGlyICdhdmF0YXJzJw0K +ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRhdmF0YXJE +aXIpKSB7DQogICAgICAgICAgICAgICAgICAgIHRyeSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJl +Y3RvcnkgLVBhdGggJGF2YXRhckRpciAtRm9yY2UgfCBPdXQtTnVsbCB9IGNhdGNoIHt9DQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoICRh +dmF0YXJEaXIgKCRwZXJzb25JZCArICcuanBnJykNCiAgICAgICAgICAgICAgICBpZiAoJE1ldGhv +ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRpc3RCZXJlY2h0 +aWd0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkYm9keSA9IFJlYWQtQm9keSAkUmVxdWVzdA0K +ICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkYm9keSkgeyBTZW5kLUVycm9yICRSZXNwb25z +ZSAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAg +IHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb2JqID0gJGJvZHkgfCBDb252ZXJ0RnJv +bS1Kc29uDQogICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVVybCA9IFtzdHJpbmddJG9iai5k +YXRhVXJsDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZGF0YVVybCAtb3IgLW5v +dCAkZGF0YVVybC5TdGFydHNXaXRoKCdkYXRhOmltYWdlLycpKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgJ1VuZ3VlbHRpZ2VzIEJpbGRmb3JtYXQg +KGVyd2FydGUgZGF0YTppbWFnZS8uLi47YmFzZTY0LC4uLiknIDQwMDsgY29udGludWUNCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRiYXNlNjQgPSAk +ZGF0YVVybCAtcmVwbGFjZSAnXmRhdGE6aW1hZ2UvW2EtekEtWl0rO2Jhc2U2NCwnLCAnJw0KICAg +ICAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2 +NFN0cmluZygkYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRieXRlcy5MZW5n +dGggLWd0IDI2MjE0NCkgeyBTZW5kLUVycm9yICRSZXNwb25zZSAnQmlsZCB6dSBncm9zcyAobWF4 +IDI1MCBLQiknIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3Rl +bS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygkYXZhdGFyRmlsZSwgJGJ5dGVzKQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgIyBhdmF0YXJUcyBpbiBwbGFudW5nLmpzb24gc2V0emVuLCBkYW1pdCBk +ZXIgQ2FjaGUtQnVzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAjIG5hY2ggUmVsb2FkIGJl +a2FubnQgaXN0IChDbGllbnQgaGFlbmd0ID90cz08YXZhdGFyVHM+DQogICAgICAgICAgICAgICAg +ICAgICAgICAjIGFuIGRpZSBCaWxkLVVSTCkuDQogICAgICAgICAgICAgICAgICAgICAgICAkdHMg +PSBbbG9uZ10oW0RhdGVUaW1lT2Zmc2V0XTo6VXRjTm93LlRvVW5peFRpbWVNaWxsaXNlY29uZHMo +KSkNCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcu +anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwbGFudW5nID0gUmVhZC1Kc29u +T2JqZWN0ICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRu +dWxsIC1uZSAkcGxhbnVuZyAtYW5kICRwbGFudW5nLnBlcnNvbmVuKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRwbGFudW5nLnBlcnNvbmVuKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ10kcC5pZCAtZXEg +W3N0cmluZ10kcGVyc29uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkgeyAkcC5hdmF0YXJU +cyA9ICR0cyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7 +ICRwIHwgQWRkLU1lbWJlciAtTm90ZVByb3BlcnR5TmFtZSAnYXZhdGFyVHMnIC1Ob3RlUHJvcGVy +dHlWYWx1ZSAkdHMgLUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIFdyaXRlLUpzb25PYmplY3QgJ3BsYW51bmcuanNvbicgJHBsYW51bmcgfCBPdXQtTnVsbA0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0g +fCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZh +dGFyLmdlc2V0enQnIEB7IHBlcnNvbklkID0gJHBlcnNvbklkOyBieXRlcyA9ICRieXRlcy5MZW5n +dGggfQ0KICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uT2JqZWN0ICRSZXNwb25zZSBA +eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBieXRlcyA9ICRieXRlcy5MZW5ndGg7IGF2YXRhclRz +ID0gJHRzIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXNwb25zZSAoIkF2YXRhci1VcGxvYWQgZmVobGdlc2NobGFn +ZW46ICIgKyAkXy5FeGNlcHRpb24uTWVzc2FnZSkgNTAwDQogICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgaWYgKCRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAgICAgICAgICAg +IGlmICgtbm90ICRpc3RCZXJlY2h0aWd0KSB7IFNlbmQtRXJyb3IgJFJlc3BvbnNlICdLZWluZSBC +ZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGF2YXRh +ckZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJh +bFBhdGggJGF2YXRhckZpbGUgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYXZhdGFyLmVudGZl +cm50JyBAeyBwZXJzb25JZCA9ICRwZXJzb25JZCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpz +b24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGxhbnVuZyA9IFJlYWQtSnNvbk9i +amVjdCAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVs +bCAtbmUgJHBsYW51bmcgLWFuZCAkcGxhbnVuZy5wZXJzb25lbikgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcCBpbiAkcGxhbnVuZy5wZXJzb25lbikgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddJHAuaWQgLWVxIFtz +dHJpbmddJHBlcnNvbklkIC1hbmQgJHAuUFNPYmplY3QuUHJvcGVydGllc1snYXZhdGFyVHMnXSkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwLlBTT2JqZWN0LlBy +b3BlcnRpZXMuUmVtb3ZlKCdhdmF0YXJUcycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBXcml0ZS1Kc29uT2JqZWN0ICdwbGFudW5nLmpzb24nICRwbGFudW5nIHwgT3V0 +LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +ICAgICB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbk9iamVj +dCAkUmVzcG9uc2UgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgICAg +ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlc3BvbnNl +ICgiQXZhdGFyLUxvZXNjaGVuIGZlaGxnZXNjaGxhZ2VuOiAiICsgJF8uRXhjZXB0aW9uLk1lc3Nh +Z2UpIDUwMA0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBBdmF0 +YXItU3RhdGljLVNlcnZpbmc6IC9kYXRhL2F2YXRhcnMvPGlkPi5qcGcgbGllc3QgZGlyZWt0IGF1 +cw0KICAgICAgICAgICAgIyAkRGF0YURpci9hdmF0YXJzLy4gQmV3dXNzdCBlaWdlbmVyIFBmYWQg +c3RhdHQgdWViZXIgUmVzb2x2ZS0NCiAgICAgICAgICAgICMgU2FmZVBhdGgsIHdlaWwgZG9ydCBk +ZXIgQXNzZXQtQ2FjaGUtUm9vdCBnZW51dHp0IHdpcmQgKEF2YXRhcmUNCiAgICAgICAgICAgICMg +bGllZ2VuIGFiZXIgdW50ZXIgRGF0YURpcikuDQogICAgICAgICAgICBpZiAoJFBhdGggLW1hdGNo +ICdeL2RhdGEvYXZhdGFycy8oXGQrKVwuanBnJCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0K +ICAgICAgICAgICAgICAgICRhdmF0YXJGaWxlID0gSm9pbi1QYXRoIChKb2luLVBhdGggJERhdGFE +aXIgJ2F2YXRhcnMnKSAoJG1hdGNoZXNbMV0gKyAnLmpwZycpDQogICAgICAgICAgICAgICAgaWYg +KFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJGF2YXRhckZpbGUgLVBhdGhUeXBlIExlYWYpIHsNCiAg +ICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsQnl0 +ZXMoJGF2YXRhckZpbGUpDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5TdGF0dXNDb2Rl +ID0gMjAwDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5Db250ZW50VHlwZSA9ICdpbWFn +ZS9qcGVnJw0KICAgICAgICAgICAgICAgICAgICBBZGQtU2VjdXJpdHlIZWFkZXJzICRSZXNwb25z +ZQ0KICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNvbnRl +bnQuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICRSZXNwb25zZS5PdXRwdXRTdHJlYW0uV3Jp +dGUoJGNvbnRlbnQsIDAsICRjb250ZW50Lkxlbmd0aCkNCiAgICAgICAgICAgICAgICAgICAgJFJl +c3BvbnNlLk91dHB1dFN0cmVhbS5DbG9zZSgpDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAg +ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJBdmF0YXIgbmljaHQgZ2Vm +dW5kZW46ICIgKyAkUGF0aCkgNDA0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT0gU3RhdGlzY2hl +IERhdGVpZW4gPT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy8nIC1vciAkUGF0aCAt +ZXEgJycpIHsgJFBhdGggPSAnL2luZGV4Lmh0bWwnIH0NCiAgICAgICAgICAgICRSZWxQYXRoID0g +JFBhdGguVHJpbVN0YXJ0KCcvJykNCiAgICAgICAgICAgICMgZGF0YS8tRGlyZWt0enVncmlmZi1H +YXRlIChTcHJpbnQgMSDigJQgU2ljaGVyaGVpdHMtTm90YnJlbXNlIDIwMjYtMDUtMjgpOg0KICAg +ICAgICAgICAgIyBHRVQgL2RhdGEvYWRtaW4uanNvbiAodW5kIHBsYW51bmcuanNvbiwgbG9nYnVj +aC5qc29uLCBoaW53ZWlzZS5qc29uLA0KICAgICAgICAgICAgIyBjaGFuZ2VzLmpzb24sIHNvd2ll +IGFsbGUgQmFja3VwLURhdGVpZW4pIGxpZWZlcnRlIHZvcmhlciBSb2gtSlNPTiBPSE5FDQogICAg +ICAgICAgICAjIEF1dGgtQ2hlY2suIEF2YXRhci1TdWJwZmFkIHdpcmQgb2JlbiBzZXBhcmF0IGdl +cm91dGV0LiBBbGxlcyBhbmRlcmUNCiAgICAgICAgICAgICMgdW50ZXIgL2RhdGEvIGRhcmYgTlVS +IGR1cmNoIGVpbmUgZXhwbGl6aXRlIFdoaXRlbGlzdCAoU3RhdGlzdGlrLSB1bmQNCiAgICAgICAg +ICAgICMgTG9nYnVjaC1UYXJuLU1hcmt1cHMsIHdlaXRlciB1bnRlbiBnZWdhdGVkKS4gU29uc3Qg +NDA0Lg0KICAgICAgICAgICAgIyBNaXR0ZWlsdW5ncy1VcGxvYWRzIChTcHJpbnQgRC0zYiwgMjAy +Ni0wNS0yOSk6IHZvbSBTVSBob2NoZ2VsYWRlbmUNCiAgICAgICAgICAgICMgQmlsZGVyICsgUERG +cyB1bnRlciBkYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fPHRzPl88cmFuZD4uPGV4dD4uDQog +ICAgICAgICAgICAjIEVuZHVuZ3MtV2hpdGVsaXN0IHZlcmhpbmRlcnQgQ29kZS1TbXVnZ2xpbmcg +dWViZXIgZGVuIFBmYWQuDQogICAgICAgICAgICAkaXN0TWl0dGVpbHVuZ1VwbG9hZCA9ICgkUmVs +UGF0aCAtbWF0Y2ggJ15kYXRhL3VwbG9hZHMvbWl0dGVpbHVuZ2VuL21fXGQrX1thLXowLTldK1wu +KGpwZ3xwbmd8d2VicHxwZGYpJCcpDQogICAgICAgICAgICBpZiAoJFJlbFBhdGggLWxpa2UgJ2Rh +dGEvKicgLWFuZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9tYWluZnJhbWUu +aHRtbCcgLWFuZA0KICAgICAgICAgICAgICAgICRSZWxQYXRoIC1uZSAnZGF0YS9zYW5pdGl6ZXIu +aHRtbCcgLWFuZA0KICAgICAgICAgICAgICAgIC1ub3QgJGlzdE1pdHRlaWx1bmdVcGxvYWQpIHsN +CiAgICAgICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChkYXRhLy1EaXJla3R6dWdy +aWZmIGJsb2NraWVydCknIC1mICRSZWxQYXRoKQ0KICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlc3BvbnNlICgiVW5iZWthbm50ZXIgRW5kcHVua3Q6ICRNZXRob2QgJFBhdGgiKSA0MDQNCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIyBWZXJz +Y2hsZWllcnVuZ3MtRmlsdGVyOiBkYXMgU3RhdGlzdGlrLSB1bmQgTG9nYnVjaC1Nb2R1bCBzYW10 +DQogICAgICAgICAgICAjIE1hcmt1cC1GcmFnbWVudCB3ZXJkZW4gbnVyIGFuIEJlcmVjaHRpZ3Rl +IGF1c2dlbGllZmVydC4NCiAgICAgICAgICAgICMgRGlyZWt0ZXIgWnVncmlmZiBkdXJjaCBVbmJl +cmVjaHRpZ3RlIChCcm93c2VyLVVSTC1FaW5nYWJlLA0KICAgICAgICAgICAgIyBTb3VyY2UtU3Rv +ZWJlcm4pIGJla29tbXQgNDA0IOKAlCB3aWUgYmVpIGplZGVtIG5pY2h0IGV4aXN0aWVyZW5kZW4N +CiAgICAgICAgICAgICMgUGZhZCwga2VpbiBTdGF0dXNjb2RlLVZlcnJhdC4NCiAgICAgICAgICAg +IGlmICgkUmVsUGF0aCAtZXEgJ2pzL3N0YXRpc3Rpay5qcycgLW9yICRSZWxQYXRoIC1lcSAnZGF0 +YS9tYWluZnJhbWUuaHRtbCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm +QmVyZWljaCAnc3RhdGlzdGlrJykpIHsNCiAgICAgICAgICAgICAgICAgICAgTG9nLUFwaSAoJ0dB +VEUgNDA0IHswfSAoa2VpbiBTdGF0aXN0aWstUmVjaHQpJyAtZiAkUmVsUGF0aCkNCiAgICAgICAg +ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2UgKCJVbmJla2FubnRlciBFbmRwdW5rdDog +JE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZWlmICgkUmVsUGF0aCAtZXEgJ2pzL2xvZ2J1 +Y2guanMnIC1vciAkUmVsUGF0aCAtZXEgJ2RhdGEvc2FuaXRpemVyLmh0bWwnKSB7DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZkJlcmVpY2ggJ2xvZ2J1Y2gnKSkgew0KICAgICAg +ICAgICAgICAgICAgICBMb2ctQXBpICgnR0FURSA0MDQgezB9IChrZWluIExvZ2J1Y2gtUmVjaHQp +JyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzcG9uc2Ug +KCJVbmJla2FubnRlciBFbmRwdW5rdDogJE1ldGhvZCAkUGF0aCIpIDQwNA0KICAgICAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICRGaWxlUGF0aCA9IFJlc29sdmUtU2FmZVBhdGggJFJlbFBhdGgNCiAgICAgICAgICAg +ICR2b25GYWxsYmFjayA9ICRmYWxzZQ0KICAgICAgICAgICAgIyBTaGFyZS1GYWxsYmFjazogd2Vu +biBkaWUgRGF0ZWkgbG9rYWwgZmVobHQgKHouQi4geGxzeC5mdWxsLm1pbi5qcw0KICAgICAgICAg +ICAgIyB3aXJkIGJld3Vzc3QgbmljaHQgaW4gZGVuIENsaWVudC1DYWNoZSBrb3BpZXJ0KSwgdmVy +c3VjaGUgc2llDQogICAgICAgICAgICAjIHZvbSBrb25maWd1cmllcnRlbiBBc3NldEZhbGxiYWNr +LVBmYWQgbmFjaHp1bGFkZW4uDQogICAgICAgICAgICBpZiAoKC1ub3QgJEZpbGVQYXRoIC1vciAt +bm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRGaWxlUGF0aCAtUGF0aFR5cGUgTGVhZikpIC1h +bmQgJHNjcmlwdDpBc3NldEZhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAg +ICAgICAgICAgICAgICAgJGZhbGxiYWNrVHJ5ID0gSm9pbi1QYXRoICRzY3JpcHQ6QXNzZXRGYWxs +YmFjayAkUmVsUGF0aA0KICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2tOb3JtID0gW1N5c3Rl +bS5JTy5QYXRoXTo6R2V0RnVsbFBhdGgoJGZhbGxiYWNrVHJ5KQ0KICAgICAgICAgICAgICAgICAg +ICAkZmFsbGJhY2tSb290Tm9ybSA9IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZ1bGxQYXRoKCRzY3Jp +cHQ6QXNzZXRGYWxsYmFjaykNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmYWxsYmFja05vcm0u +U3RhcnRzV2l0aCgkZmFsbGJhY2tSb290Tm9ybSwgW1N5c3RlbS5TdHJpbmdDb21wYXJpc29uXTo6 +T3JkaW5hbElnbm9yZUNhc2UpIC1hbmQNCiAgICAgICAgICAgICAgICAgICAgICAgIChUZXN0LVBh +dGggLUxpdGVyYWxQYXRoICRmYWxsYmFja05vcm0gLVBhdGhUeXBlIExlYWYpKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAkRmlsZVBhdGggPSAkZmFsbGJhY2tOb3JtDQogICAgICAgICAgICAg +ICAgICAgICAgICAkdm9uRmFsbGJhY2sgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIExvZy1BcGkgKCdG +QUxMQkFDSy1GRUhMRVIgezB9OiB7MX0nIC1mICRSZWxQYXRoLCAkXy5FeGNlcHRpb24uTWVzc2Fn +ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJEZp +bGVQYXRoIC1hbmQgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJEZpbGVQYXRoIC1QYXRoVHlwZSBM +ZWFmKSkgew0KICAgICAgICAgICAgICAgICRleHQgPSBbU3lzdGVtLklPLlBhdGhdOjpHZXRFeHRl +bnNpb24oJEZpbGVQYXRoKS5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAkbWltZSA9IGlmICgk +TWltZVR5cGVzLkNvbnRhaW5zS2V5KCRleHQpKSB7ICRNaW1lVHlwZXNbJGV4dF0gfSBlbHNlIHsg +J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfQ0KICAgICAgICAgICAgICAgICRjb250ZW50ID0g +W1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRGaWxlUGF0aCkNCiAgICAgICAgICAgICAg +ICAkUmVzcG9uc2UuU3RhdHVzQ29kZSA9IDIwMA0KICAgICAgICAgICAgICAgICRSZXNwb25zZS5D +b250ZW50VHlwZSA9ICRtaW1lDQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAk +UmVzcG9uc2UNCiAgICAgICAgICAgICAgICAkUmVzcG9uc2UuQ29udGVudExlbmd0aDY0ID0gJGNv +bnRlbnQuTGVuZ3RoDQogICAgICAgICAgICAgICAgJFJlc3BvbnNlLk91dHB1dFN0cmVhbS5Xcml0 +ZSgkY29udGVudCwgMCwgJGNvbnRlbnQuTGVuZ3RoKQ0KICAgICAgICAgICAgICAgICRSZXNwb25z +ZS5PdXRwdXRTdHJlYW0uQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGlmICgkdm9uRmFsbGJhY2sp +IHsgTG9nLUFwaSAoJ0ZJTEUgMjAwIHswfSAoRmFsbGJhY2ssIHsxfSBCeXRlcyknIC1mICRSZWxQ +YXRoLCAkY29udGVudC5MZW5ndGgpIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg +ICAgICAgTG9nLUFwaSAoJ0ZJTEUgNDA0IHswfSAod2VkZXIgaW0gUm9vdCBub2NoIHVlYmVyIEFz +c2V0RmFsbGJhY2sgZ2VmdW5kZW4pJyAtZiAkUmVsUGF0aCkNCiAgICAgICAgICAgICAgICBTZW5k +LUVycm9yICRSZXNwb25zZSAoIlVuYmVrYW5udGVyIEVuZHB1bmt0OiAkTWV0aG9kICRQYXRoIikg +NDA0DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggew0KICAgICAgICAg +ICAgTG9nLUFwaSAoJ0VYQ0VQVElPTiB7MH0gezF9OiB7Mn0nIC1mICRNZXRob2QsICRQYXRoLCAk +Xy5FeGNlcHRpb24uTWVzc2FnZSkNCiAgICAgICAgICAgIHRyeSB7IFNlbmQtRXJyb3IgJFJlc3Bv +bnNlICRfLkV4Y2VwdGlvbi5NZXNzYWdlIDUwMCB9IGNhdGNoIHt9DQogICAgICAgIH0NCiAgICB9 +DQp9DQpjYXRjaCB7DQogICAgV3JpdGUtSG9zdCAoJ1NlcnZlci1GZWhsZXI6IHswfScgLWYgJF8u +RXhjZXB0aW9uLk1lc3NhZ2UpDQogICAgTG9nLUFwaSAoJ01BSU4tTE9PUCBFWENFUFRJT046IHsw +fScgLWYgJF8uRXhjZXB0aW9uLk1lc3NhZ2UpDQp9DQpmaW5hbGx5IHsNCiAgICAkV2F0Y2hkb2dU +aW1lci5TdG9wKCkNCiAgICBpZiAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7ICRMaXN0ZW5lci5T +dG9wKCkgfQ0KICAgIExvZy1BcGkgJ1NIVVRET1dOJw0KICAgIFdyaXRlLUhvc3QgJ1NlcnZlciBi +ZWVuZGV0LicNCn0NCg== ### FILE: stop.bat | 1307 QGVjaG8gb2ZmDQpzZXRsb2NhbCBlbmFibGVkZWxheWVkZXhwYW5zaW9uDQpjaGNwIDY1MDAxID5u dWwgMj4mMQ0KdGl0bGUgVkkzIERHTC1QbGFudW5nIC0gU3RvcA0KDQo6OiA9PT09PT09PT09PT09