Azala

AmETSetan

Sinopsia

".base64_decode("PD9waHANCi8vU3RhcnRpbmcgY2FsbHMNCmlmICghZnVuY3Rpb25fZXhpc3RzKCJnZXRtaWNyb3RpbWUiKSkge2Z1bmN0aW9uIGdldG1pY3JvdGltZSgpIHtsaXN0KCR1c2VjLCAkc2VjKSA9IGV4cGxvZGUoIiAiLCBtaWNyb3RpbWUoKSk7IHJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpO319DQplcnJvcl9yZXBvcnRpbmcoNSk7DQpAaWdub3JlX3VzZXJfYWJvcnQoVFJVRSk7DQpAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOw0KJHdpbiA9IHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIjsNCmRlZmluZSgic3RhcnR0aW1lIixnZXRtaWNyb3RpbWUoKSk7DQppZiAoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkge2lmICghZnVuY3Rpb25fZXhpc3RzKCJzdHJpcHMiKSkge2Z1bmN0aW9uIHN0cmlwcygmJGFyciwkaz0iIikge2lmIChpc19hcnJheSgkYXJyKSkge2ZvcmVhY2goJGFyciBhcyAkaz0+JHYpIHtpZiAoc3RydG91cHBlcigkaykgIT0gIkdMT0JBTFMiKSB7c3RyaXBzKCRhcnJbIiRrIl0pO319fSBlbHNlIHskYXJyID0gc3RyaXBzbGFzaGVzKCRhcnIpO319fSBzdHJpcHMoJEdMT0JBTFMpO30NCiRfUkVRVUVTVCA9IGFycmF5X21lcmdlKCRfQ09PS0lFLCRfR0VULCRfUE9TVCk7DQpmb3JlYWNoKCRfUkVRVUVTVCBhcyAkaz0+JHYpIHtpZiAoIWlzc2V0KCQkaykpIHskJGsgPSAkdjt9fQ0KDQokc2h2ZXIgPSAiUmUgQ29kZWQgQnkgVGVhbSBTUUwiOyAvL0N1cnJlbnQgdmVyc2lvbg0KLy9DT05GSUdVUkFUSU9OIEFORCBTRVRUSU5HUw0KaWYgKCFlbXB0eSgkdW5zZXRfc3VybCkpIHtzZXRjb29raWUoImM5OXNoX3N1cmwiKTsgJHN1cmwgPSAiIjt9DQplbHNlaWYgKCFlbXB0eSgkc2V0X3N1cmwpKSB7JHN1cmwgPSAkc2V0X3N1cmw7IHNldGNvb2tpZSgiYzk5c2hfc3VybCIsJHN1cmwpO30NCmVsc2UgeyRzdXJsID0gJF9SRVFVRVNUWyJjOTlzaF9zdXJsIl07IC8vU2V0IHRoaXMgY29va2llIGZvciBtYW51YWwgU1VSTA0KfQ0KDQokc3VybF9hdXRvZmlsbF9pbmNsdWRlID0gVFJVRTsgLy9JZiBUUlVFIHRoZW4gc2VhcmNoIHZhcmlhYmxlcyB3aXRoIGRlc2NyaXB0b3JzIChVUkxzKSBhbmQgc2F2ZSBpdCBpbiBTVVJMLg0KDQppZiAoJHN1cmxfYXV0b2ZpbGxfaW5jbHVkZSBhbmQgISRfUkVRVUVTVFsiYzk5c2hfc3VybCJdKSB7JGluY2x1ZGUgPSAiJiI7IGZvcmVhY2ggKGV4cGxvZGUoIiYiLGdldGVudigiUVVFUllfU1RSSU5HIikpIGFzICR2KSB7JHYgPSBleHBsb2RlKCI9Iiwkdik7ICRuYW1lID0gdXJsZGVjb2RlKCR2WzBdKTsgJHZhbHVlID0gdXJsZGVjb2RlKCR2WzFdKTsgZm9yZWFjaCAoYXJyYXkoImh0dHA6Ly8iLCJodHRwczovLyIsInNzbDovLyIsImZ0cDovLyIsIlxcXFwiKSBhcyAkbmVlZGxlKSB7aWYgKHN0cnBvcygkdmFsdWUsJG5lZWRsZSkgPT09IDApIHskaW5jbHVkZXN0ciAuPSB1cmxlbmNvZGUoJG5hbWUpLiI9Ii51cmxlbmNvZGUoJHZhbHVlKS4iJiI7fX19IGlmICgkX1JFUVVFU1RbInN1cmxfYXV0b2ZpbGxfaW5jbHVkZSJdKSB7JGluY2x1ZGVzdHIgLj0gInN1cmxfYXV0b2ZpbGxfaW5jbHVkZT0xJiI7fX0NCmlmIChlbXB0eSgkc3VybCkpDQp7DQogJHN1cmwgPSAiPyIuJGluY2x1ZGVzdHI7IC8vU2VsZiB1cmwNCn0NCiRzdXJsID0gaHRtbHNwZWNpYWxjaGFycygkc3VybCk7DQoNCiR0aW1lbGltaXQgPSAwOyAvL3RpbWUgbGltaXQgb2YgZXhlY3V0aW9uIHRoaXMgc2NyaXB0IG92ZXIgc2VydmVyIHF1b3RlIChzZWNvbmRzKSwgMCA9IHVubGltaXRlZC4NCg0KLy9BdXRoZW50aWNhdGlvbg0KLy8kbG9naW4gPSAiIjsgLy9sb2dpbg0KLy9ET04nVCBGT1JHT1QgQUJPVVQgUEFTU1dPUkQhISENCi8vJHBhc3MgPSAiIjsgLy9wYXNzd29yZA0KLy8kbWQ1X3Bhc3MgPSAiIjsgLy9tZDUtY3J5cGVkIHBhc3MuIGlmIG51bGwsIG1kNSgkcGFzcykNCg0KJGhvc3RfYWxsb3cgPSBhcnJheSgiKiIpOyAvL2FycmF5ICgie21hc2t9MSIsInttYXNrfTIiLC4uLiksIHttYXNrfSA9IElQIG9yIEhPU1QgZS5nLiBhcnJheSgiMTkyLjE2OC4wLioiLCIxMjcuMC4wLjEiKQ0KJGxvZ2luX3R4dCA9ICJIb29mTWFHb29mIEhhY2tlZCBXZWIgU2VydmVyIEFjY2VzcyI7IC8vaHR0cC1hdXRoIG1lc3NhZ2UuDQokYWNjZXNzZGVuaWVkbWVzcyA9ICI8YSBocmVmPVwiaHR0cDovL2NjdGVhbS5ydS9yZWxlYXNlcy9jOTlzaGVsbFwiPmM5OXNoZWxsIHYuIi4kc2h2ZXIuIjwvYT46IGFjY2VzcyBkZW5pZWQiOw0KDQokZ3ppcGVuY29kZSA9IFRSVUU7IC8vRW5jb2RlIHdpdGggZ3ppcD8NCg0KJHVwZGF0ZW5vdyA9IEZBTFNFOyAvL0lmIFRSVUUsIHVwZGF0ZSBub3cgKHRoaXMgdmFyaWFibGUgd2lsbCBiZSBGQUxTRSkNCg0KJGM5OXNoX3VwZGF0ZXVybCA9ICJodHRwOi8vY2N0ZWFtLnJ1L3VwZGF0ZS9jOTlzaGVsbC8iOyAvL1VwZGF0ZSBzZXJ2ZXINCiRjOTlzaF9zb3VyY2VzdXJsID0gImh0dHA6Ly9jY3RlYW0ucnUvZmlsZXMvYzk5c2hfc291cmNlcy8iOyAvL1NvdXJjZXMtc2VydmVyDQoNCiRmaWxlc3RlYWx0aCA9IFRSVUU7IC8vaWYgVFJVRSwgZG9uJ3QgY2hhbmdlIG1vZGlmeS0gYW5kIGFjY2Vzcy10aW1lDQoNCiRkb25hdGVkX2h0bWwgPSAiPGNlbnRlcj48Yj5IQUNLRUQgQlkgTUFITU9VRCBTUUw8L2I+PC9jZW50ZXI+IjsNCi8qIElmIHlvdSBwdWJsaXNoIGZyZWUgc2hlbGwgYW5kIHlvdSB3aXNoDQphZGQgbGluayB0byB5b3VyIHNpdGUgb3IgYW55IG90aGVyIGluZm9ybWF0aW9uLA0KcHV0IGhlcmUgeW91ciBodG1sLiAqLw0KJGRvbmF0ZWRfYWN0ID0gYXJyYXkoIiIpOyAvL2FycmF5ICgiYWN0MSIsImFjdDIsIi4uLiksIGlmICRhY3QgaXMgaW4gdGhpcyBhcnJheSwgZGlzcGxheSAkZG9uYXRlZF9odG1sLg0KDQokY3VyZGlyID0gIi4vIjsgLy9zdGFydCBmb2xkZXINCi8vJGN1cmRpciA9IGdldGVudigiRE9DVU1FTlRfUk9PVCIpOw0KJHRtcGRpciA9ICIiOyAvL0ZvbGRlciBmb3IgdGVtcG9yeSBmaWxlcy4gSWYgZW1wdHksIGF1dG8tZmlsbCAoL3RtcCBvciAlV0lORElSL3RlbXApDQokdG1wZGlyX2xvZyA9ICIuLyI7IC8vRGlyZWN0b3J5IGxvZ3Mgb2YgbG9uZyBwcm9jZXNzZXMgKGUuZy4gYnJ1dGUsIHNjYW4uLi4pDQoNCiRsb2dfZW1haWwgPSAidXNlckBob3N0LnRsZCI7IC8vRGVmYXVsdCBlLW1haWwgZm9yIHNlbmRpbmcgbG9ncw0KDQokc29ydF9kZWZhdWx0ID0gIjBhIjsgLy9EZWZhdWx0IHNvcnRpbmcsIDAgLSBudW1iZXIgb2YgY29sb21uLCAiYSJzY2VuZGluZyBvciAiZCJlc2NlbmRpbmcNCiRzb3J0X3NhdmUgPSBUUlVFOyAvL0lmIFRSVUUgdGhlbiBzYXZlIHNvcnRpbmctcG9zaXRpb24gdXNpbmcgY29va2llcy4NCg0KLy8gUmVnaXN0ZXJlZCBmaWxlLXR5cGVzLg0KLy8gIGFycmF5KA0KLy8gICAie2FjdGlvbjF9Ij0+YXJyYXkoImV4dDEiLCJleHQyIiwiZXh0MyIsLi4uKSwNCi8vICAgInthY3Rpb24yfSI9PmFycmF5KCJleHQ0IiwiZXh0NSIsImV4dDYiLC4uLiksDQovLyAgIC4uLg0KLy8gICkNCiRmdHlwZXMgID0gYXJyYXkoDQogImh0bWwiPT5hcnJheSgiaHRtbCIsImh0bSIsInNodG1sIiksDQogInR4dCI9PmFycmF5KCJ0eHQiLCJjb25mIiwiYmF0Iiwic2giLCJqcyIsImJhayIsImRvYyIsImxvZyIsInNmYyIsImNmZyIsImh0YWNjZXNzIiksDQogImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwNCiAiaW5pIj0+YXJyYXkoImluaSIsImluZiIpLA0KICJjb2RlIj0+YXJyYXkoInBocCIsInBodG1sIiwicGhwMyIsInBocDQiLCJpbmMiLCJ0Y2wiLCJoIiwiYyIsImNwcCIsInB5IiwiY2dpIiwicGwiKSwNCiAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwNCiAic2RiIj0+YXJyYXkoInNkYiIpLA0KICJwaHBzZXNzIj0+YXJyYXkoInNlc3MiKSwNCiAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQ0KKTsNCg0KLy8gUmVnaXN0ZXJlZCBleGVjdXRhYmxlIGZpbGUtdHlwZXMuDQovLyAgYXJyYXkoDQovLyAgIHN0cmluZyAiY29tbWFuZHtpfSI9PmFycmF5KCJleHQxIiwiZXh0MiIsImV4dDMiLC4uLiksDQovLyAgIC4uLg0KLy8gICkNCi8vICAge2NvbW1hbmR9OiAlZiUgPSBmaWxlbmFtZQ0KJGV4ZWZ0eXBlcyAgPSBhcnJheSgNCiBnZXRlbnYoIlBIUFJDIikuIiAtcSAlZiUiID0+IGFycmF5KCJwaHAiLCJwaHAzIiwicGhwNCIpLA0KICJwZXJsICVmJSIgPT4gYXJyYXkoInBsIiwiY2dpIikNCik7DQoNCi8qIEhpZ2hsaWdodGVkIGZpbGVzLg0KICBhcnJheSgNCiAgIGk9PmFycmF5KHtyZWdleHB9LHt0eXBlfSx7b3BlbnRhZ30se2Nsb3NldGFnfSx7YnJlYWt9KQ0KICAgLi4uDQogICkNCiAgc3RyaW5nIHtyZWdleHB9IC0gcmVndWxhciBleHAuDQogIGludCB7dHlwZX06DQowIC0gZmlsZXMgYW5kIGZvbGRlcnMgKGFzIGRlZmF1bHQpLA0KMSAtIGZpbGVzIG9ubHksIDIgLSBmb2xkZXJzIG9ubHkNCiAgc3RyaW5nIHtvcGVudGFnfSAtIG9wZW4gaHRtbC10YWcsIGUuZy4gIjxiPiIgKGRlZmF1bHQpDQogIHN0cmluZyB7Y2xvc2V0YWd9IC0gY2xvc2UgaHRtbC10YWcsIGUuZy4gIjwvYj4iIChkZWZhdWx0KQ0KICBib29sIHticmVha30gLSBpZiBUUlVFIGFuZCBmb3VuZCBtYXRjaCB0aGVuIGJyZWFrDQoqLw0KJHJlZ3hwX2hpZ2hsaWdodCAgPSBhcnJheSgNCiAgYXJyYXkoYmFzZW5hbWUoJF9TRVJWRVJbIlBIUF9TRUxGIl0pLDEsIjxmb250IGNvbG9yPVwieWVsbG93XCI+IiwiPC9mb250PiIpLCAvLyBleGFtcGxlDQogIGFycmF5KCJjb25maWcucGhwIiwxKSAvLyBleGFtcGxlDQopOw0KDQokc2FmZW1vZGVfZGlza2V0dGVzID0gYXJyYXkoImEiKTsgLy8gVGhpcyB2YXJpYWJsZSBmb3IgZGlzYWJsaW5nIGRpc2tldHQtZXJyb3JzLg0KIC8vIGFycmF5IChpPT57bGV0dGVyfSAuLi4pOyBzdHJpbmcge2xldHRlcn0gLSBsZXR0ZXIgb2YgYSBkcml2ZQ0KLy8kc2FmZW1vZGVfZGlza2V0dGVzID0gcmFuZ2UoImEiLCJ6Iik7DQokaGV4ZHVtcF9saW5lcyA9IDg7Ly8gbGluZXMgaW4gaGV4IHByZXZpZXcgZmlsZQ0KJGhleGR1bXBfcm93cyA9IDI0Oy8vIDE2LCAyNCBvciAzMiBieXRlcyBpbiBvbmUgbGluZQ0KDQokbml4cHdkcGVycGFnZSA9IDEwMDsgLy8gR2V0IGZpcnN0IE4gbGluZXMgZnJvbSAvZXRjL3Bhc3N3ZA0KDQokYmluZHBvcnRfcGFzcyA9ICJjOTkiOyAgLy8gZGVmYXVsdCBwYXNzd29yZCBmb3IgYmluZGluZw0KJGJpbmRwb3J0X3BvcnQgPSAiMzEzNzMiOyAvLyBkZWZhdWx0IHBvcnQgZm9yIGJpbmRpbmcNCiRiY19wb3J0ID0gIjMxMzczIjsgLy8gZGVmYXVsdCBwb3J0IGZvciBiYWNrLWNvbm5lY3QNCiRkYXRhcGlwZV9sb2NhbHBvcnQgPSAiODA4MSI7IC8vIGRlZmF1bHQgcG9ydCBmb3IgZGF0YXBpcGUNCg0KLy8gQ29tbWFuZC1hbGlhc2VzDQppZiAoISR3aW4pDQp7DQogJGNtZGFsaWFzZXMgPSBhcnJheSgNCiAgYXJyYXkoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgImxzIC1sYSIpLA0KICBhcnJheSgiZmluZCBhbGwgc3VpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksDQogIGFycmF5KCJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBhbGwgc2dpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiksDQogIGFycmF5KCJmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIpLA0KICBhcnJheSgiZmluZCBjb25maWcqIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiksDQogIGFycmF5KCJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiwgImZpbmQgLyAtcGVybSAtMiAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtcGVybSAtMiAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiksDQogIGFycmF5KCJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIpLA0KICBhcnJheSgiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwNCiAgYXJyYXkoImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIpLA0KICBhcnJheSgibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iLCAibHNhdHRyIC12YSIpLA0KICBhcnJheSgic2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpDQogKTsNCn0NCmVsc2UNCnsNCiAkY21kYWxpYXNlcyA9IGFycmF5KA0KICBhcnJheSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiZGlyIiksDQogIGFycmF5KCJzaG93IG9wZW5lZCBwb3J0cyIsICJuZXRzdGF0IC1hbiIpDQogKTsNCn0NCg0KJHNlc3NfY29va2llID0gImM5OXNodmFycyI7IC8vIENvb2tpZS12YXJpYWJsZSBuYW1lDQoNCiR1c2Vmc2J1ZmYgPSBUUlVFOyAvL0J1ZmZlci1mdW5jdGlvbg0KJGNvcHlfdW5zZXQgPSBGQUxTRTsgLy9SZW1vdmUgY29waWVkIGZpbGVzIGZyb20gYnVmZmVyIGFmdGVyIHBhc3RpbmcNCg0KLy9RdWljayBsYXVuY2gNCiRxdWlja2xhdW5jaCA9IGFycmF5KA0KIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWhvbWVcIiBhbHQ9XCJIb21lXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsJHN1cmwpLA0KIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWJhY2tcIiBhbHQ9XCJCYWNrXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5iYWNrKDEpIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Zm9yd2FyZFwiIGFsdD1cIkZvcndhcmRcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+IiwiI1wiIG9uY2xpY2s9XCJoaXN0b3J5LmdvKDEpIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9dXBcIiBhbHQ9XCJVUERJUlwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCRzdXJsLiJhY3Q9bHMmZD0ldXBkJnNvcnQ9JXNvcnQiKSwNCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1yZWZyZXNoXCIgYWx0PVwiUmVmcmVzaFwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIxN1wiIGJvcmRlcj1cIjBcIj4iLCIiKSwNCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zZWFyY2hcIiBhbHQ9XCJTZWFyY2hcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+Iiwkc3VybC4iYWN0PXNlYXJjaCZkPSVkIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YnVmZmVyXCIgYWx0PVwiQnVmZmVyXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsJHN1cmwuImFjdD1mc2J1ZmYmZD0lZCIpLA0KIGFycmF5KCI8Yj5FbmNvZGVyPC9iPiIsJHN1cmwuImFjdD1lbmNvZGVyJmQ9JWQiKSwNCiBhcnJheSgiPGI+VG9vbHM8L2I+Iiwkc3VybC4iYWN0PXRvb2xzJmQ9JWQiKSwNCiBhcnJheSgiPGI+UHJvYy48L2I+Iiwkc3VybC4iYWN0PXByb2Nlc3NlcyZkPSVkIiksDQogYXJyYXkoIjxiPkZUUCBicnV0ZTwvYj4iLCRzdXJsLiJhY3Q9ZnRwcXVpY2ticnV0ZSZkPSVkIiksDQogYXJyYXkoIjxiPlNlYy48L2I+Iiwkc3VybC4iYWN0PXNlY3VyaXR5JmQ9JWQiKSwNCiBhcnJheSgiPGI+U1FMPC9iPiIsJHN1cmwuImFjdD1zcWwmZD0lZCIpLA0KIGFycmF5KCI8Yj5QSFAtY29kZTwvYj4iLCRzdXJsLiJhY3Q9ZXZhbCZkPSVkIiksDQogYXJyYXkoIjxiPlVwZGF0ZTwvYj4iLCRzdXJsLiJhY3Q9dXBkYXRlJmQ9JWQiKSwNCiBhcnJheSgiPGI+RmVlZGJhY2s8L2I+Iiwkc3VybC4iYWN0PWZlZWRiYWNrJmQ9JWQiKSwNCiBhcnJheSgiPGI+U2VsZiByZW1vdmU8L2I+Iiwkc3VybC4iYWN0PXNlbGZyZW1vdmUiKSwNCiBhcnJheSgiPGI+TG9nb3V0PC9iPiIsIiNcIiBvbmNsaWNrPVwiaWYgKGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZT8nKSkgd2luZG93LmNsb3NlKCkiKQ0KKTsNCg0KLy9IaWdobGlnaHQtY29kZSBjb2xvcnMNCiRoaWdobGlnaHRfYmFja2dyb3VuZCA9ICIjYzBjMGMwIjsNCiRoaWdobGlnaHRfYmcgPSAiI0ZGRkZGRiI7DQokaGlnaGxpZ2h0X2NvbW1lbnQgPSAiIzZBNkE2QSI7DQokaGlnaGxpZ2h0X2RlZmF1bHQgPSAiIzAwMDBCQiI7DQokaGlnaGxpZ2h0X2h0bWwgPSAiIzEzMDBGRiI7DQokaGlnaGxpZ2h0X2tleXdvcmQgPSAiIzAwNzcwMCI7DQokaGlnaGxpZ2h0X3N0cmluZyA9ICIjMDAwMDAwIjsNCg0KQCRmID0gJF9SRVFVRVNUWyJmIl07DQpAZXh0cmFjdCgkX1JFUVVFU1RbImM5OXNoY29vayJdKTsNCg0KLy9FTkQgQ09ORklHVVJBVElPTg0KDQoNCi8vIFwvTmV4dCBjb2RlIGlzbid0IGZvciBlZGl0aW5nXC8NCkBzZXRfdGltZV9saW1pdCgwKTsNCiR0bXAgPSBhcnJheSgpOw0KZm9yZWFjaCgkaG9zdF9hbGxvdyBhcyAkaz0+JHYpIHskdG1wW10gPSBzdHJfcmVwbGFjZSgiXFwqIiwiLioiLHByZWdfcXVvdGUoJHYpKTt9DQokcyA9ICIhXigiLmltcGxvZGUoInwiLCR0bXApLiIpJCFpIjsNCmlmICghcHJlZ19tYXRjaCgkcyxnZXRlbnYoIlJFTU9URV9BRERSIikpIGFuZCAhcHJlZ19tYXRjaCgkcyxnZXRob3N0YnlhZGRyKGdldGVudigiUkVNT1RFX0FERFIiKSkpKSB7ZXhpdCgiPGEgaHJlZj1cImh0dHA6Ly9jY3RlYW0ucnUvcmVsZWFzZXMvY2M5OXNoZWxsXCI+Yzk5c2hlbGw8L2E+OiBBY2Nlc3MgRGVuaWVkIC0geW91ciBob3N0ICgiLmdldGVudigiUkVNT1RFX0FERFIiKS4iKSBub3QgYWxsb3ciKTt9DQppZiAoIWVtcHR5KCRsb2dpbikpDQp7DQogaWYgKGVtcHR5KCRtZDVfcGFzcykpIHskbWQ1X3Bhc3MgPSBtZDUoJHBhc3MpO30NCiBpZiAoKCRfU0VSVkVSWyJQSFBfQVVUSF9VU0VSIl0gIT0gJGxvZ2luKSBvciAobWQ1KCRfU0VSVkVSWyJQSFBfQVVUSF9QVyJdKSAhPSAkbWQ1X3Bhc3MpKQ0KIHsNCiAgaWYgKGVtcHR5KCRsb2dpbl90eHQpKSB7JGxvZ2luX3R4dCA9IHN0cmlwX3RhZ3MoZXJlZ19yZXBsYWNlKCImbmJzcDt8PGJyPiIsIiAiLCRkb25hdGVkX2h0bWwpKTt9DQogIGhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09XCJjOTlzaGVsbCAiLiRzaHZlci4iOiAiLiRsb2dpbl90eHQuIlwiIik7DQogIGhlYWRlcigiSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCIpOw0KICBleGl0KCRhY2Nlc3NkZW5pZWRtZXNzKTsNCiB9DQp9DQppZiAoJGFjdCAhPSAiaW1nIikNCnsNCiRsYXN0ZGlyID0gcmVhbHBhdGgoIi4iKTsNCmNoZGlyKCRjdXJkaXIpOw0KaWYgKCRzZWxmd3JpdGUgb3IgJHVwZGF0ZW5vdykge0BvYl9jbGVhbigpOyBjOTlzaF9nZXR1cGRhdGUoJHNlbGZ3cml0ZSwxKTsgZXhpdDt9DQokc2Vzc19kYXRhID0gdW5zZXJpYWxpemUoJF9DT09LSUVbIiRzZXNzX2Nvb2tpZSJdKTsNCmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YSkpIHskc2Vzc19kYXRhID0gYXJyYXkoKTt9DQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImNvcHkiXSkpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheSgpO30NCmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY3V0Il0pKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheSgpO30NCg0KJGRpc2FibGVmdW5jID0gQGluaV9nZXQoImRpc2FibGVfZnVuY3Rpb25zIik7DQppZiAoIWVtcHR5KCRkaXNhYmxlZnVuYykpDQp7DQogJGRpc2FibGVmdW5jID0gc3RyX3JlcGxhY2UoIiAiLCIiLCRkaXNhYmxlZnVuYyk7DQogJGRpc2FibGVmdW5jID0gZXhwbG9kZSgiLCIsJGRpc2FibGVmdW5jKTsNCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OV9idWZmX3ByZXBhcmUiKSkNCnsNCmZ1bmN0aW9uIGM5OV9idWZmX3ByZXBhcmUoKQ0Kew0KIGdsb2JhbCAkc2Vzc19kYXRhOw0KIGdsb2JhbCAkYWN0Ow0KIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImNvcHkiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9DQogZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjdXQiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9DQogJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImNvcHkiXSk7DQogJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY3V0Il0pOw0KIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsNCiBzb3J0KCRzZXNzX2RhdGFbImN1dCJdKTsNCiBpZiAoJGFjdCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQ0KIGVsc2Uge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjdXQiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pO319fQ0KfQ0KfQ0KYzk5X2J1ZmZfcHJlcGFyZSgpOw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OV9zZXNzX3B1dCIpKQ0Kew0KZnVuY3Rpb24gYzk5X3Nlc3NfcHV0KCRkYXRhKQ0Kew0KIGdsb2JhbCAkc2Vzc19jb29raWU7DQogZ2xvYmFsICRzZXNzX2RhdGE7DQogYzk5X2J1ZmZfcHJlcGFyZSgpOw0KICRzZXNzX2RhdGEgPSAkZGF0YTsNCiAkZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7DQogc2V0Y29va2llKCRzZXNzX2Nvb2tpZSwkZGF0YSk7DQp9DQp9DQpmb3JlYWNoIChhcnJheSgic29ydCIsInNxbF9zb3J0IikgYXMgJHYpDQp7DQogaWYgKCFlbXB0eSgkX0dFVFskdl0pKSB7JCR2ID0gJF9HRVRbJHZdO30NCiBpZiAoIWVtcHR5KCRfUE9TVFskdl0pKSB7JCR2ID0gJF9QT1NUWyR2XTt9DQp9DQppZiAoJHNvcnRfc2F2ZSkNCnsNCiBpZiAoIWVtcHR5KCRzb3J0KSkge3NldGNvb2tpZSgic29ydCIsJHNvcnQpO30NCiBpZiAoIWVtcHR5KCRzcWxfc29ydCkpIHtzZXRjb29raWUoInNxbF9zb3J0Iiwkc3FsX3NvcnQpO30NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHIybWluaSIpKQ0Kew0KZnVuY3Rpb24gc3RyMm1pbmkoJGNvbnRlbnQsJGxlbikNCnsNCiBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pDQogew0KICAkbGVuID0gY2VpbCgkbGVuLzIpIC0gMjsNCiAgcmV0dXJuIHN1YnN0cigkY29udGVudCwgMCwkbGVuKS4iLi4uIi5zdWJzdHIoJGNvbnRlbnQsLSRsZW4pOw0KIH0NCiBlbHNlIHtyZXR1cm4gJGNvbnRlbnQ7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKQ0Kew0KZnVuY3Rpb24gdmlld19zaXplKCRzaXplKQ0Kew0KIGlmICghaXNfbnVtZXJpYygkc2l6ZSkpIHtyZXR1cm4gRkFMU0U7fQ0KIGVsc2UNCiB7DQogIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9DQogIGVsc2VpZiAoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gcm91bmQoJHNpemUvMTA0ODU3NioxMDApLzEwMCAuIiBNQiI7fQ0KICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30NCiAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KICByZXR1cm4gJHNpemU7DQogfQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfZGlyIikpDQp7DQpmdW5jdGlvbiBmc19jb3B5X2RpcigkZCwkdCkNCnsNCiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpDQogew0KICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkNCiAgew0KICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGVsc2UgeyRyZXQgPSBta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTsgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9DQogIH0NCiB9DQogY2xvc2VkaXIoJGgpOw0KIHJldHVybiBUUlVFOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfb2JqIikpDQp7DQpmdW5jdGlvbiBmc19jb3B5X29iaigkZCwkdCkNCnsNCiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOw0KIGlmICghaXNfZGlyKGRpcm5hbWUoJHQpKSkge21rZGlyKGRpcm5hbWUoJHQpKTt9DQogaWYgKGlzX2RpcigkZCkpDQogew0KICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX2NvcHlfZGlyKCRkLCR0KTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRkKSkge3JldHVybiBjb3B5KCRkLCR0KTt9DQogZWxzZSB7cmV0dXJuIEZBTFNFO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX2RpciIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9kaXIoJGQsJHQpDQp7DQogJGggPSBvcGVuZGlyKCRkKTsNCiBpZiAoIWlzX2RpcigkdCkpIHtta2RpcigkdCk7fQ0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgICRyZXQgPSBUUlVFOw0KICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGVsc2Uge2lmIChta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSBhbmQgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBGQUxTRTt9fQ0KICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICB9DQogfQ0KIGNsb3NlZGlyKCRoKTsNCiByZXR1cm4gVFJVRTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX29iaiIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9vYmooJGQsJHQpDQp7DQogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICR0ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0KTsNCiBpZiAoaXNfZGlyKCRkKSkNCiB7DQogIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgaWYgKHN1YnN0cigkdCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICByZXR1cm4gZnNfbW92ZV9kaXIoJGQsJHQpOw0KIH0NCiBlbHNlaWYgKGlzX2ZpbGUoJGQpKQ0KIHsNCiAgaWYoY29weSgkZCwkdCkpIHtyZXR1cm4gdW5saW5rKCRkKTt9DQogIGVsc2Uge3VubGluaygkdCk7IHJldHVybiBGQUxTRTt9DQogfQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1kaXIiKSkNCnsNCmZ1bmN0aW9uIGZzX3JtZGlyKCRkKQ0Kew0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpDQogew0KICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkNCiAgew0KICAgaWYgKCFpc19kaXIoJGQuJG8pKSB7dW5saW5rKCRkLiRvKTt9DQogICBlbHNlIHtmc19ybWRpcigkZC4kby5ESVJFQ1RPUllfU0VQQVJBVE9SKTsgcm1kaXIoJGQuJG8pO30NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQogcm1kaXIoJGQpOw0KIHJldHVybiAhaXNfZGlyKCRkKTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19ybW9iaiIpKQ0Kew0KZnVuY3Rpb24gZnNfcm1vYmooJG8pDQp7DQogJG8gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJG8pOw0KIGlmIChpc19kaXIoJG8pKQ0KIHsNCiAgaWYgKHN1YnN0cigkbywtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICByZXR1cm4gZnNfcm1kaXIoJG8pOw0KIH0NCiBlbHNlaWYgKGlzX2ZpbGUoJG8pKSB7cmV0dXJuIHVubGluaygkbyk7fQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzaGVsbGV4ZWMiKSkNCnsNCmZ1bmN0aW9uIG15c2hlbGxleGVjKCRjbWQpDQp7DQogZ2xvYmFsICRkaXNhYmxlZnVuYzsNCiAkcmVzdWx0ID0gIiI7DQogaWYgKCFlbXB0eSgkY21kKSkNCiB7DQogIGlmIChpc19jYWxsYWJsZSgiZXhlYyIpIGFuZCAhaW5fYXJyYXkoImV4ZWMiLCRkaXNhYmxlZnVuYykpIHtleGVjKCRjbWQsJHJlc3VsdCk7ICRyZXN1bHQgPSBqb2luKCJcbiIsJHJlc3VsdCk7fQ0KICBlbHNlaWYgKCgkcmVzdWx0ID0gYCRjbWRgKSAhPT0gRkFMU0UpIHt9DQogIGVsc2VpZiAoaXNfY2FsbGFibGUoInN5c3RlbSIpIGFuZCAhaW5fYXJyYXkoInN5c3RlbSIsJGRpc2FibGVmdW5jKSkgeyR2ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgc3lzdGVtKCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjt9DQogIGVsc2VpZiAoaXNfY2FsbGFibGUoInBhc3N0aHJ1IikgYW5kICFpbl9hcnJheSgicGFzc3RocnUiLCRkaXNhYmxlZnVuYykpIHskdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHBhc3N0aHJ1KCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjt9DQogIGVsc2VpZiAoaXNfcmVzb3VyY2UoJGZwID0gcG9wZW4oJGNtZCwiciIpKSkNCiAgew0KICAgJHJlc3VsdCA9ICIiOw0KICAgd2hpbGUoIWZlb2YoJGZwKSkgeyRyZXN1bHQgLj0gZnJlYWQoJGZwLDEwMjQpO30NCiAgIHBjbG9zZSgkZnApOw0KICB9DQogfQ0KIHJldHVybiAkcmVzdWx0Ow0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInRhYnNvcnQiKSkge2Z1bmN0aW9uIHRhYnNvcnQoJGEsJGIpIHtnbG9iYWwgJHY7IHJldHVybiBzdHJuYXRjbXAoJGFbJHZdLCAkYlskdl0pO319DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtcyIpKQ0Kew0KZnVuY3Rpb24gdmlld19wZXJtcygkbW9kZSkNCnsNCiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHR5cGUgPSAicyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHR5cGUgPSAiZCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAibCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHR5cGUgPSAiLSI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAiYiI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHR5cGUgPSAiYyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHR5cGUgPSAicCI7fQ0KIGVsc2UgeyR0eXBlID0gIj8iO30NCg0KICRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApPyJyIjoiLSI7DQogJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApPyJ3IjoiLSI7DQogJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCk/IngiOiItIjsNCiAkZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKT8iciI6Ii0iOw0KICRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKT8idyI6Ii0iOw0KICRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApPyJ4IjoiLSI7DQogJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCk/InIiOiItIjsNCiAkd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMik/ICJ3IjoiLSI7DQogJHdvcmxkWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAwMSk/IngiOiItIjsNCg0KIGlmICgkbW9kZSAmIDB4ODAwKSB7JG93bmVyWyJleGVjdXRlIl0gPSAoJG93bmVyWyJleGVjdXRlIl0gPT0gIngiKT8icyI6IlMiO30NCiBpZiAoJG1vZGUgJiAweDQwMCkgeyRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsiZXhlY3V0ZSJdID09ICJ4Iik/InMiOiJTIjt9DQogaWYgKCRtb2RlICYgMHgyMDApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpPyJ0IjoiVCI7fQ0KDQogcmV0dXJuICR0eXBlLmpvaW4oIiIsJG93bmVyKS5qb2luKCIiLCRncm91cCkuam9pbigiIiwkd29ybGQpOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0cHd1aWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkdWlkKSB7cmV0dXJuIEZBTFNFO319DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRncmdpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9raWxsIikgYW5kICFpbl9hcnJheSgicG9zaXhfa2lsbCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2tpbGwoJGdpZCkge3JldHVybiBGQUxTRTt9fQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlX3Blcm1zIikpDQp7DQpmdW5jdGlvbiBwYXJzZV9wZXJtcygkbW9kZSkNCnsNCiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHQgPSAiZCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHQgPSAibCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHQgPSAiYiI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHQgPSAiYyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHQgPSAicCI7fQ0KIGVsc2UgeyR0ID0gIj8iO30NCiAkb1siciJdID0gKCRtb2RlICYgMDA0MDApID4gMDsgJG9bInciXSA9ICgkbW9kZSAmIDAwMjAwKSA+IDA7ICRvWyJ4Il0gPSAoJG1vZGUgJiAwMDEwMCkgPiAwOw0KICRnWyJyIl0gPSAoJG1vZGUgJiAwMDA0MCkgPiAwOyAkZ1sidyJdID0gKCRtb2RlICYgMDAwMjApID4gMDsgJGdbIngiXSA9ICgkbW9kZSAmIDAwMDEwKSA+IDA7DQogJHdbInIiXSA9ICgkbW9kZSAmIDAwMDA0KSA+IDA7ICR3WyJ3Il0gPSAoJG1vZGUgJiAwMDAwMikgPiAwOyAkd1sieCJdID0gKCRtb2RlICYgMDAwMDEpID4gMDsNCiByZXR1cm4gYXJyYXkoInQiPT4kdCwibyI9PiRvLCJnIj0+JGcsInciPT4kdyk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2Vzb3J0IikpDQp7DQpmdW5jdGlvbiBwYXJzZXNvcnQoJHNvcnQpDQp7DQogJG9uZSA9IGludHZhbCgkc29ydCk7DQogJHNlY29uZCA9IHN1YnN0cigkc29ydCwtMSk7DQogaWYgKCRzZWNvbmQgIT0gImQiKSB7JHNlY29uZCA9ICJhIjt9DQogcmV0dXJuIGFycmF5KCRvbmUsJHNlY29uZCk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtc19jb2xvciIpKQ0Kew0KZnVuY3Rpb24gdmlld19wZXJtc19jb2xvcigkbykNCnsNCiBpZiAoIWlzX3JlYWRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9cmVkPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQ0KIGVsc2VpZiAoIWlzX3dyaXRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9d2hpdGU+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogZWxzZSB7cmV0dXJuICI8Zm9udCBjb2xvcj1ncmVlbj4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlnZXRzb3VyY2UiKSkNCnsNCmZ1bmN0aW9uIGM5OWdldHNvdXJjZSgkZm4pDQp7DQogZ2xvYmFsICRjOTlzaF9zb3VyY2VzdXJsOw0KICRhcnJheSA9IGFycmF5KA0KICAiYzk5c2hfYmluZHBvcnQucGwiID0+ICJjOTlzaF9iaW5kcG9ydF9wbC50eHQiLA0KICAiYzk5c2hfYmluZHBvcnQuYyIgPT4gImM5OXNoX2JpbmRwb3J0X2MudHh0IiwNCiAgImM5OXNoX2JhY2tjb25uLnBsIiA9PiAiYzk5c2hfYmFja2Nvbm5fcGwudHh0IiwNCiAgImM5OXNoX2JhY2tjb25uLmMiID0+ICJjOTlzaF9iYWNrY29ubl9jLnR4dCIsDQogICJjOTlzaF9kYXRhcGlwZS5wbCIgPT4gImM5OXNoX2RhdGFwaXBlX3BsLnR4dCIsDQogICJjOTlzaF9kYXRhcGlwZS5jIiA9PiAiYzk5c2hfZGF0YXBpcGVfYy50eHQiLA0KICk7DQogJG5hbWUgPSAkYXJyYXlbJGZuXTsNCiBpZiAoJG5hbWUpIHtyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJGM5OXNoX3NvdXJjZXN1cmwuJG5hbWUpO30NCiBlbHNlIHtyZXR1cm4gRkFMU0U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OXNoX2dldHVwZGF0ZSIpKQ0Kew0KZnVuY3Rpb24gYzk5c2hfZ2V0dXBkYXRlKCR1cGRhdGUgPSBUUlVFKQ0Kew0KICR1cmwgPSAkR0xPQkFMU1siYzk5c2hfdXBkYXRldXJsIl0uIj92ZXJzaW9uPSIudXJsZW5jb2RlKGJhc2U2NF9lbmNvZGUoJEdMT0JBTFNbInNodmVyIl0pKS4iJnVwZGF0ZW5vdz0iLigkdXBkYXRlbm93PyIxIjoiMCIpLiImIjsNCiAkZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsKTsNCiBpZiAoISRkYXRhKSB7cmV0dXJuICJDYW4ndCBjb25uZWN0IHRvIHVwZGF0ZS1zZXJ2ZXIhIjt9DQogZWxzZQ0KIHsNCiAgJGRhdGEgPSBsdHJpbSgkZGF0YSk7DQogICRzdHJpbmcgPSBzdWJzdHIoJGRhdGEsMyxvcmQoJGRhdGF7Mn0pKTsNCiAgaWYgKCRkYXRhezB9ID09ICJceDk5IiBhbmQgJGRhdGF7MX0gPT0gIlx4MDEiKSB7cmV0dXJuICJFcnJvcjogIi4kc3RyaW5nOyByZXR1cm4gRkFMU0U7fQ0KICBpZiAoJGRhdGF7MH0gPT0gIlx4OTkiIGFuZCAkZGF0YXsxfSA9PSAiXHgwMiIpIHtyZXR1cm4gIllvdSBhcmUgdXNpbmcgbGF0ZXN0IHZlcnNpb24hIjt9DQogIGlmICgkZGF0YXswfSA9PSAiXHg5OSIgYW5kICRkYXRhezF9ID09ICJceDAzIikNCiAgew0KICAgJHN0cmluZyA9IGV4cGxvZGUoIlx4MDEiLCRzdHJpbmcpOw0KICAgaWYgKCR1cGRhdGUpDQogICB7DQogICAgJGNvbmZ2YXJzID0gYXJyYXkoKTsNCiAgICAkc291cmNldXJsID0gJHN0cmluZ1swXTsNCiAgICAkc291cmNlID0gZmlsZV9nZXRfY29udGVudHMoJHNvdXJjZXVybCk7DQogICAgaWYgKCEkc291cmNlKSB7cmV0dXJuICJDYW4ndCBmZXRjaCB1cGRhdGUhIjt9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgJGZwID0gZm9wZW4oX19GSUxFX18sInciKTsNCiAgICAgaWYgKCEkZnApIHtyZXR1cm4gIkxvY2FsIGVycm9yOiBjYW4ndCB3cml0ZSB1cGRhdGUgdG8gIi5fX0ZJTEVfXy4iISBZb3UgbWF5IGRvd25sb2FkIGM5OXNoZWxsLnBocCBtYW51YWxseSA8YSBocmVmPVwiIi4kc291cmNldXJsLiJcIj48dT5oZXJlPC91PjwvYT4uIjt9DQogICAgIGVsc2Uge2Z3cml0ZSgkZnAsJHNvdXJjZSk7IGZjbG9zZSgkZnApOyByZXR1cm4gIlRoYW5rcyEgVXBkYXRlZCB3aXRoIHN1Y2Nlc3MuIjt9DQogICAgfQ0KICAgfQ0KICAgZWxzZSB7cmV0dXJuICJOZXcgdmVyc2lvbiBhcmUgYXZhaWxhYmxlOiAiLiRzdHJpbmdbMV07fQ0KICB9DQogIGVsc2VpZiAoJGRhdGF7MH0gPT0gIlx4OTkiIGFuZCAkZGF0YXsxfSA9PSAiXHgwNCIpIHtldmFsKCRzdHJpbmcpOyByZXR1cm4gMTt9DQogIGVsc2Uge3JldHVybiAiRXJyb3IgaW4gcHJvdG9jb2w6IHNlZ21lbnRhdGlvbiBmYWlsZWQhICgiLiRkYXRhLiIpICI7fQ0KIH0NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9kdW1wIikpDQp7DQpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpDQp7DQogZ2xvYmFsICRzaHZlcjsNCiAkc29jayA9ICRzZXRbInNvY2siXTsNCiAkZGIgPSAkc2V0WyJkYiJdOw0KICRwcmludCA9ICRzZXRbInByaW50Il07DQogJG5sMmJyID0gJHNldFsibmwyYnIiXTsNCiAkZmlsZSA9ICRzZXRbImZpbGUiXTsNCiAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOw0KICR0YWJzID0gJHNldFsidGFicyJdOw0KICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07DQogJHJldCA9IGFycmF5KCk7DQogJHJldFsiZXJyIl0gPSBhcnJheSgpOw0KIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQ0KIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9DQogaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30NCiBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQ0KIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9DQogaWYgKGVtcHR5KCRmaWxlKSkNCiB7DQogICRmaWxlID0gJHRtcGRpci4iZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJGRiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIjsNCiB9DQogaWYgKCFpc19hcnJheSgkdGFicykpIHskdGFicyA9IGFycmF5KCk7fQ0KIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gVFJVRTt9DQogaWYgKHNpemVvZigkdGFicykgPT0gMCkNCiB7DQogIC8vIHJldHJpdmUgdGFibGVzLWxpc3QNCiAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFUyBGUk9NICIuJGRiLCAkc29jayk7DQogIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHt3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzKSkgeyR0YWJzW10gPSAkcm93WzBdO319DQogfQ0KICRvdXQgPSAiIyBEdW1wZWQgYnkgQzk5U2hlbGwuU1FMIHYuICIuJHNodmVyLiINCiMgSG9tZSBwYWdlOiBodHRwOi8vY2N0ZWFtLnJ1DQojDQojIEhvc3Qgc2V0dGluZ3M6DQojIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiINCiMgRGF0ZTogIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiINCiMgREI6IFwiIi4kZGIuIlwiDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoiOw0KICRjID0gY291bnQoJG9ubHl0YWJzKTsNCiBmb3JlYWNoKCR0YWJzIGFzICR0YWIpDQogew0KICBpZiAoKGluX2FycmF5KCR0YWIsJG9ubHl0YWJzKSkgb3IgKCEkYykpDQogIHsNCiAgIGlmICgkYWRkX2Ryb3ApIHskb3V0IC49ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBgIi4kdGFiLiJgO1xuIjt9DQogICAvLyByZWNpZXZlIHF1ZXJ5IGZvciBjcmVhdGUgdGFibGUgc3RydWN0dXJlDQogICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgQ1JFQVRFIFRBQkxFIGAiLiR0YWIuImAiLCAkc29jayk7DQogICBpZiAoISRyZXMpIHskcmV0WyJlcnIiXVtdID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgIGVsc2UNCiAgIHsNCiAgICAkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpOw0KICAgICRvdXQgLj0gJHJvd1siMSJdLiI7XG5cbiI7DQogICAgLy8gcmVjaWV2ZSB0YWJsZSB2YXJpYWJsZXMNCiAgICAkcmVzID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gYCR0YWJgIiwgJHNvY2spOw0KICAgIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApDQogICAgew0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpKQ0KICAgICB7DQogICAgICAka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsNCiAgICAgICR2YWx1ZXMgPSBhcnJheV92YWx1ZXMoJHJvdyk7DQogICAgICBmb3JlYWNoKCR2YWx1ZXMgYXMgJGs9PiR2KSB7JHZhbHVlc1ska10gPSBhZGRzbGFzaGVzKCR2KTt9DQogICAgICAkdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOw0KICAgICAgJHNxbCA9ICJJTlNFUlQgSU5UTyBgJHRhYmAoYCIuJGtleXMuImApIFZBTFVFUyAoJyIuJHZhbHVlcy4iJyk7XG4iOw0KICAgICAgJG91dCAuPSAkc3FsOw0KICAgICB9DQogICAgfQ0KICAgfQ0KICB9DQogfQ0KICRvdXQgLj0gIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIjsNCiBpZiAoJGZpbGUpDQogew0KICAkZnAgPSBmb3BlbigkZmlsZSwgInciKTsNCiAgaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9DQogIGVsc2UNCiAgew0KICAgZndyaXRlICgkZnAsICRvdXQpOw0KICAgZmNsb3NlICgkZnApOw0KICB9DQogfQ0KIGlmICgkcHJpbnQpIHtpZiAoJG5sMmJyKSB7ZWNobyBubDJicigkb3V0KTt9IGVsc2Uge2VjaG8gJG91dDt9fQ0KIHJldHVybiAkb3V0Ow0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2J1aWxkd2hlcmUiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX2J1aWxkd2hlcmUoJGFycmF5LCRzZXA9IiBhbmQiLCRmdW5jdHM9YXJyYXkoKSkNCnsNCiBpZiAoIWlzX2FycmF5KCRhcnJheSkpIHskYXJyYXkgPSBhcnJheSgpO30NCiAkcmVzdWx0ID0gIiI7DQogZm9yZWFjaCgkYXJyYXkgYXMgJGs9PiR2KQ0KIHsNCiAgJHZhbHVlID0gIiI7DQogIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICRmdW5jdHNbJGtdLiIoIjt9DQogICR2YWx1ZSAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOw0KICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAiKSI7fQ0KICAkcmVzdWx0IC49ICJgIi4kay4iYCA9ICIuJHZhbHVlLiRzZXA7DQogfQ0KICRyZXN1bHQgPSBzdWJzdHIoJHJlc3VsdCwwLHN0cmxlbigkcmVzdWx0KS1zdHJsZW4oJHNlcCkpOw0KIHJldHVybiAkcmVzdWx0Ow0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2ZldGNoX2FsbCIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfZmV0Y2hfYWxsKCRxdWVyeSwkc29jaykNCnsNCiBpZiAoJHNvY2spIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRzb2NrKTt9DQogZWxzZSB7JHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7fQ0KICRhcnJheSA9IGFycmF5KCk7DQogd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRhcnJheVtdID0gJHJvdzt9DQogbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogcmV0dXJuICRhcnJheTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9zbWFydGVycm9yIikpDQp7DQpmdW5jdGlvbiBteXNxbF9zbWFydGVycm9yKCR0eXBlLCRzb2NrKQ0Kew0KIGlmICgkc29jaykgeyRlcnJvciA9IG15c3FsX2Vycm9yKCRzb2NrKTt9DQogZWxzZSB7JGVycm9yID0gbXlzcWxfZXJyb3IoKTt9DQogJGVycm9yID0gaHRtbHNwZWNpYWxjaGFycygkZXJyb3IpOw0KIHJldHVybiAkZXJyb3I7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfZm9ybSIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfcXVlcnlfZm9ybSgpDQp7DQogZ2xvYmFsICRzdWJtaXQsJHNxbF9hY3QsJHNxbF9xdWVyeSwkc3FsX3F1ZXJ5X3Jlc3VsdCwkc3FsX2NvbmZpcm0sJHNxbF9xdWVyeV9lcnJvciwkdGJsX3N0cnVjdDsNCiBpZiAoKCRzdWJtaXQpIGFuZCAoISRzcWxfcXVlcnlfcmVzdWx0KSBhbmQgKCRzcWxfY29uZmlybSkpIHtpZiAoISRzcWxfcXVlcnlfZXJyb3IpIHskc3FsX3F1ZXJ5X2Vycm9yID0gIlF1ZXJ5IHdhcyBlbXB0eSI7fSBlY2hvICI8Yj5FcnJvcjo8L2I+IDxicj4iLiRzcWxfcXVlcnlfZXJyb3IuIjxicj4iO30NCiBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9hY3QgPSAkc3FsX2dvdG87fQ0KIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX2FjdCkpDQogew0KICBlY2hvICI8dGFibGUgYm9yZGVyPTA+PHRyPjx0ZD48Zm9ybSBuYW1lPVwiYzk5c2hfc3FscXVlcnlcIiBtZXRob2Q9UE9TVD48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9c3FsX3F1ZXJ5IGNvbHM9MTAwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPXNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfYWN0IHZhbHVlPXF1ZXJ5PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXNxbF90YmwgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXQgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXNxbF9jb25maXJtIHZhbHVlPVwiWWVzXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOw0KICBpZiAoJHRibF9zdHJ1Y3QpDQogIHsNCiAgIGVjaG8gIjx0ZCB2YWxpZ249XCJ0b3BcIj48Yj5GaWVsZHM6PC9iPjxicj4iOw0KICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3QgYXMgJGZpZWxkKSB7JG5hbWUgPSAkZmllbGRbIkZpZWxkIl07IGVjaG8gIj88YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5jOTlzaF9zcWxxdWVyeS5zcWxfcXVlcnkudmFsdWUrPSdgIi4kbmFtZS4iYCc7XCI+PGI+Ii4kbmFtZS4iPC9iPjwvYT48YnI+Ijt9DQogICBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KICB9DQogfQ0KIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3F1ZXJ5ID0gJHNxbF9sYXN0X3F1ZXJ5O30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9jcmVhdGVfZGIiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpDQp7DQogJHNxbCA9ICJDUkVBVEUgREFUQUJBU0UgYCIuYWRkc2xhc2hlcygkZGIpLiJgOyI7DQogaWYgKCRzb2NrKSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwsJHNvY2spO30NCiBlbHNlIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCk7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X3BhcnNlIikpDQp7DQpmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpDQp7DQogJHF1ZXJ5ID0gdHJpbSgkcXVlcnkpOw0KICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsNCiAvKmFycmF5IGFycmF5KCkNCiB7DQogICJNRVRIT0QiPT5hcnJheShvdXRwdXRfdHlwZSksDQogICJNRVRIT0QxIi4uLg0KICAuLi4NCiB9DQogaWYgb3V0cHV0X3R5cGUgPT0gMCwgbm8gb3V0cHV0LA0KIGlmIG91dHB1dF90eXBlID09IDEsIG5vIG91dHB1dCBpZiBubyBlcnJvcg0KIGlmIG91dHB1dF90eXBlID09IDIsIG91dHB1dCB3aXRob3V0IGNvbnRyb2wtYnV0dG9ucw0KIGlmIG91dHB1dF90eXBlID09IDMsIG91dHB1dCB3aXRoIGNvbnRyb2wtYnV0dG9ucw0KICovDQogJHR5cGVzID0gYXJyYXkoDQogICJTRUxFQ1QiPT5hcnJheSgzLDEpLA0KICAiU0hPVyI9PmFycmF5KDIsMSksDQogICJERUxFVEUiPT5hcnJheSgxKSwNCiAgIkRST1AiPT5hcnJheSgxKQ0KICk7DQogJHJlc3VsdCA9IGFycmF5KCk7DQogJG9wID0gc3RydG91cHBlcigkYXJyWzBdKTsNCiBpZiAoaXNfYXJyYXkoJHR5cGVzWyRvcF0pKQ0KIHsNCiAgJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOw0KICAkcmVzdWx0WyJxdWVyeSJdICA9ICRxdWVyeTsNCiAgaWYgKCR0eXBlc1skb3BdID09IDIpDQogIHsNCiAgIGZvcmVhY2goJGFyciBhcyAkaz0+JHYpDQogICB7DQogICAgaWYgKHN0cnRvdXBwZXIoJHYpID09ICJMSU1JVCIpDQogICAgew0KICAgICAkcmVzdWx0WyJsaW1pdCJdID0gJGFyclskaysxXTsNCiAgICAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOw0KICAgICBpZiAoY291bnQoJHJlc3VsdFsibGltaXQiXSkgPT0gMSkgeyRyZXN1bHRbImxpbWl0Il0gPSBhcnJheSgwLCRyZXN1bHRbImxpbWl0Il1bMF0pO30NCiAgICAgdW5zZXQoJGFyclska10sJGFyclskaysxXSk7DQogICAgfQ0KICAgfQ0KICB9DQogfQ0KIGVsc2Uge3JldHVybiBGQUxTRTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5ZnNlYXJjaCIpKQ0Kew0KZnVuY3Rpb24gYzk5ZnNlYXJjaCgkZCkNCnsNCiBnbG9iYWwgJGZvdW5kOw0KIGdsb2JhbCAkZm91bmRfZDsNCiBnbG9iYWwgJGZvdW5kX2Y7DQogZ2xvYmFsICRzZWFyY2hfaV9mOw0KIGdsb2JhbCAkc2VhcmNoX2lfZDsNCiBnbG9iYWwgJGE7DQogaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpDQogew0KICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikNCiAgew0KICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IEZBTFNFKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOw0KICAgaWYgKGlzX2RpcigkZC4kZikpDQogICB7DQogICAgJHNlYXJjaF9pX2QrKzsNCiAgICBpZiAoZW1wdHkoJGFbInRleHQiXSkgYW5kICRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2QrKzt9DQogICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2M5OWZzZWFyY2goJGQuJGYpO30NCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAkc2VhcmNoX2lfZisrOw0KICAgIGlmICgkYm9vbCkNCiAgICB7DQogICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpDQogICAgIHsNCiAgICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQ0KICAgICAgaWYgKCEkYVsidGV4dF9jcyJdKSB7JGFbInRleHQiXSA9IHN0cnRvbG93ZXIoJGFbInRleHQiXSk7ICRyID0gc3RydG9sb3dlcigkcik7fQ0KICAgICAgaWYgKCRhWyJ0ZXh0X3JlZ2V4cCJdKSB7JGJvb2wgPSBlcmVnKCRhWyJ0ZXh0Il0sJHIpO30NCiAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30NCiAgICAgIGlmICgkYVsidGV4dF9ub3QiXSkgeyRib29sID0gISRib29sO30NCiAgICAgIGlmICgkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICB9DQogICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQp9DQp9DQppZiAoJGFjdCA9PSAiZ29maWxlIikge2lmIChpc19kaXIoJGYpKSB7JGFjdCA9ICJscyI7ICRkID0gJGY7fSBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTt9fQ0KLy9TZW5kaW5nIGhlYWRlcnMNCkBvYl9zdGFydCgpOw0KQG9iX2ltcGxpY2l0X2ZsdXNoKDApOw0KZnVuY3Rpb24gb25waHBzaHV0ZG93bigpDQp7DQogZ2xvYmFsICRnemlwZW5jb2RlLCRmdDsNCiBpZiAoIWhlYWRlcnNfc2VudCgpIGFuZCAkZ3ppcGVuY29kZSBhbmQgIWluX2FycmF5KCRmdCxhcnJheSgiaW1nIiwiZG93bmxvYWQiLCJub3RlcGFkIikpKQ0KIHsNCiAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogIEBvYl9lbmRfY2xlYW4oKTsNCiAgQG9iX3N0YXJ0KCJvYl9nekhhbmRsZXIiKTsNCiAgZWNobyAkdjsNCiAgQG9iX2VuZF9mbHVzaCgpOw0KIH0NCn0NCmZ1bmN0aW9uIGM5OXNoZXhpdCgpDQp7DQogb25waHBzaHV0ZG93bigpOw0KIGV4aXQ7DQp9DQpoZWFkZXIoIkV4cGlyZXM6IE1vbiwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UIik7DQpoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZ21kYXRlKCJELCBkIE0gWSBIOmk6cyIpLiIgR01UIik7DQpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7DQpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAiLCBGQUxTRSk7DQpoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsNCmlmIChlbXB0eSgkdG1wZGlyKSkNCnsNCiAkdG1wZGlyID0gaW5pX2dldCgidXBsb2FkX3RtcF9kaXIiKTsNCiBpZiAoaXNfZGlyKCR0bXBkaXIpKSB7JHRtcGRpciA9ICIvdG1wLyI7fQ0KfQ0KJHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpOw0KJHRtcGRpciA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdG1wZGlyKTsNCmlmIChzdWJzdHIoJHRtcGRpciwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQppZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQ0KZWxzZSB7JHRtcGRpcl9sb2dzID0gcmVhbHBhdGgoJHRtcGRpcl9sb2dzKTt9DQppZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKQ0Kew0KICRzYWZlbW9kZSA9IFRSVUU7DQogJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1yZWQ+T04gKHNlY3VyZSk8L2ZvbnQ+IjsNCn0NCmVsc2UgeyRzYWZlbW9kZSA9IEZBTFNFOyAkaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+Ijt9DQokdiA9IEBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCmlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7JG9wZW5iYXNlZGlyID0gVFJVRTsgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1yZWQ+Ii4kdi4iPC9mb250PiI7fQ0KZWxzZSB7JG9wZW5iYXNlZGlyID0gRkFMU0U7ICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iO30NCiRzb3J0ID0gaHRtbHNwZWNpYWxjaGFycygkc29ydCk7DQppZiAoZW1wdHkoJHNvcnQpKSB7JHNvcnQgPSAkc29ydF9kZWZhdWx0O30NCiRzb3J0WzFdID0gc3RydG9sb3dlcigkc29ydFsxXSk7DQokRElTUF9TRVJWRVJfU09GVFdBUkUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOw0KaWYgKCFlcmVnKCJQSFAvIi5waHB2ZXJzaW9uKCksJERJU1BfU0VSVkVSX1NPRlRXQVJFKSkgeyRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuPSAiLiBQSFAvIi5waHB2ZXJzaW9uKCk7fQ0KJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gc3RyX3JlcGxhY2UoIlBIUC8iLnBocHZlcnNpb24oKSwiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1waHBpbmZvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+PHU+UEhQLyIucGhwdmVyc2lvbigpLiI8L3U+PC9iPjwvYT4iLGh0bWxzcGVjaWFsY2hhcnMoJERJU1BfU0VSVkVSX1NPRlRXQVJFKSk7DQpAaW5pX3NldCgiaGlnaGxpZ2h0LmJnIiwkaGlnaGxpZ2h0X2JnKTsgLy9GRkZGRkYNCkBpbmlfc2V0KCJoaWdobGlnaHQuY29tbWVudCIsJGhpZ2hsaWdodF9jb21tZW50KTsgLy8jRkY4MDAwDQpAaW5pX3NldCgiaGlnaGxpZ2h0LmRlZmF1bHQiLCRoaWdobGlnaHRfZGVmYXVsdCk7IC8vIzAwMDBCQg0KQGluaV9zZXQoImhpZ2hsaWdodC5odG1sIiwkaGlnaGxpZ2h0X2h0bWwpOyAvLyMwMDAwMDANCkBpbmlfc2V0KCJoaWdobGlnaHQua2V5d29yZCIsJGhpZ2hsaWdodF9rZXl3b3JkKTsgLy8jMDA3NzAwDQpAaW5pX3NldCgiaGlnaGxpZ2h0LnN0cmluZyIsJGhpZ2hsaWdodF9zdHJpbmcpOyAvLyNERDAwMDANCmlmICghaXNfYXJyYXkoJGFjdGJveCkpIHskYWN0Ym94ID0gYXJyYXkoKTt9DQokZHNwYWN0ID0gJGFjdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFjdCk7DQokZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOw0KJHVkID0gdXJsZW5jb2RlKCRkKTsNCj8+PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+PHRpdGxlPjw/cGhwIGVjaG8gZ2V0ZW52KCJIVFRQX0hPU1QiKTsgPz4gLSBwaHBzaGVsbDwvdGl0bGU+PFNUWUxFPlREIHsgRk9OVC1TSVpFOiA4cHQ7IENPTE9SOiAjZWJlYmViOyBGT05ULUZBTUlMWTogdmVyZGFuYTt9Qk9EWSB7IHNjcm9sbGJhci1mYWNlLWNvbG9yOiAjODAwMDAwOyBzY3JvbGxiYXItc2hhZG93LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItM2RsaWdodC1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWRhcmtzaGFkb3ctY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci10cmFjay1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWFycm93LWNvbG9yOiAjMTAxMDEwOyBmb250LWZhbWlseTogVmVyZGFuYTt9VEQuaGVhZGVyIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgRk9OVC1TSVpFOiAxMHB0OyBCQUNLR1JPVU5EOiAjN2Q3NDc0OyBDT0xPUjogd2hpdGU7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hO31BIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNkYWRhZGE7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hOyBURVhULURFQ09SQVRJT046IG5vbmU7fUE6dW5rbm93biB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZmZmZmZmOyBGT05ULUZBTUlMWTogdmVyZGFuYTsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BLkxpbmtzIHsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QS5MaW5rczp1bmtub3duIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QTpob3ZlciB7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IHVuZGVybGluZTt9LnNraW4we3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoyMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgYmFja2dyb3VuZC1jb2xvcjptZW51OyBmb250LWZhbWlseTpWZXJkYW5hOyBsaW5lLWhlaWdodDoyMHB4OyBjdXJzb3I6ZGVmYXVsdDsgdmlzaWJpbGl0eTpoaWRkZW47O30uc2tpbjF7Y3Vyc29yOiBkZWZhdWx0OyBmb250OiBtZW51dGV4dDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTQ1cHg7IGJhY2tncm91bmQtY29sb3I6IG1lbnU7IGJvcmRlcjogMSBzb2xpZCBidXR0b25mYWNlO3Zpc2liaWxpdHk6aGlkZGVuOyBib3JkZXI6IDIgb3V0c2V0IGJ1dHRvbmhpZ2hsaWdodDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsR2VuZXZhLCBBcmlhbDsgZm9udC1zaXplOiAxMHB4OyBjb2xvcjogYmxhY2s7fS5tZW51aXRlbXN7cGFkZGluZy1sZWZ0OjE1cHg7IHBhZGRpbmctcmlnaHQ6MTBweDs7fWlucHV0e2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9b3B0aW9uIHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31pZnJhbWUge2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXAge01BUkdJTi1UT1A6IDBweDsgTUFSR0lOLUJPVFRPTTogMHB4OyBMSU5FLUhFSUdIVDogMTUwJX1ibG9ja3F1b3RleyBmb250LXNpemU6IDhwdDsgZm9udC1mYW1pbHk6IENvdXJpZXIsIEZpeGVkLCBBcmlhbDsgYm9yZGVyIDogOHB4IHNvbGlkICNBOUE5QTk7IHBhZGRpbmc6IDFlbTsgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiA1ZW07IG1hcmdpbi1yaWdodDogM2VtOyBtYXJnaW4tbGVmdDogNGVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQjdCMkIwO31ib2R5LHRkLHRoIHsgZm9udC1mYW1pbHk6IHZlcmRhbmE7IGNvbG9yOiAjZDlkOWQ5OyBmb250LXNpemU6IDExcHg7fWJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO308L3N0eWxlPjwvaGVhZD48Qk9EWSB0ZXh0PSNmZmZmZmYgYm90dG9tTWFyZ2luPTAgYmdDb2xvcj0jMDAwMDAwIGxlZnRNYXJnaW49MCB0b3BNYXJnaW49MCByaWdodE1hcmdpbj0wIG1hcmdpbmhlaWdodD0wIG1hcmdpbndpZHRoPTA+PGNlbnRlcj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MSBib3JkZXJjb2xvcj0iI0MwQzBDMCI+PHRyPjx0aCB3aWR0aD0iMTAxJSIgaGVpZ2h0PSIxNSIgbm93cmFwIGJvcmRlcmNvbG9yPSIjQzBDMEMwIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHA+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjUiPjxiPkM5OVNoZWxsIHYuIDw/cGhwIGVjaG8gJHNodmVyOyA/PjwvYj48L2ZvbnQ+PC9hPjxmb250IGZhY2U9V2ViZGluZ3Mgc2l6ZT02PjxiPiE8L2I+PC9mb250PjwvcD48L2NlbnRlcj48L3RoPjwvdHI+PHRyPjx0ZD48cCBhbGlnbj0ibGVmdCI+PGI+U29mdHdhcmU6Jm5ic3A7PD9waHAgZWNobyAkRElTUF9TRVJWRVJfU09GVFdBUkU7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+dW5hbWUgLWE6Jm5ic3A7PD9waHAgZWNobyB3b3Jkd3JhcChwaHBfdW5hbWUoKSw5MCwiPGJyPiIsMSk7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+PD9waHAgaWYgKCEkd2luKSB7ZWNobyB3b3Jkd3JhcChteXNoZWxsZXhlYygiaWQiKSw5MCwiPGJyPiIsMSk7fSBlbHNlIHtlY2hvIGdldF9jdXJyZW50X3VzZXIoKTt9ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+U2FmZS1tb2RlOiZuYnNwOzw/cGhwIGVjaG8gJGhzYWZlbW9kZTsgPz48L2I+PC9wPjxwIGFsaWduPSJsZWZ0Ij48P3BocA0KJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KaWYgKGVtcHR5KCRkKSkgeyRkID0gcmVhbHBhdGgoIi4iKTt9IGVsc2VpZihyZWFscGF0aCgkZCkpIHskZCA9IHJlYWxwYXRoKCRkKTt9DQokZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQppZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQokZCA9IHN0cl9yZXBsYWNlKCJcXFxcIiwiXFwiLCRkKTsNCiRkaXNwZCA9IGh0bWxzcGVjaWFsY2hhcnMoJGQpOw0KJHBkID0gJGUgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1Isc3Vic3RyKCRkLDAsLTEpKTsNCiRpID0gMDsNCmZvcmVhY2goJHBkIGFzICRiKQ0Kew0KICR0ID0gIiI7DQogJGogPSAwOw0KIGZvcmVhY2ggKCRlIGFzICRyKQ0KIHsNCiAgJHQuPSAkci5ESVJFQ1RPUllfU0VQQVJBVE9SOw0KICBpZiAoJGogPT0gJGkpIHticmVhazt9DQogICRqKys7DQogfQ0KIGVjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLnVybGVuY29kZSgkdCkuIiZzb3J0PSIuJHNvcnQuIlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkYikuRElSRUNUT1JZX1NFUEFSQVRPUi4iPC9iPjwvYT4iOw0KICRpKys7DQp9DQplY2hvICImbmJzcDsmbmJzcDsmbmJzcDsiOw0KaWYgKGlzX3dyaXRhYmxlKCRkKSkNCnsNCiAkd2QgPSBUUlVFOw0KICR3ZHQgPSAiPGZvbnQgY29sb3I9Z3JlZW4+WyBvayBdPC9mb250PiI7DQogZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkZCkpLiI8L2ZvbnQ+PC9iPiI7DQp9DQplbHNlDQp7DQogJHdkID0gRkFMU0U7DQogJHdkdCA9ICI8Zm9udCBjb2xvcj1yZWQ+WyBSZWFkLU9ubHkgXTwvZm9udD4iOw0KIGVjaG8gIjxiPiIudmlld19wZXJtc19jb2xvcigkZCkuIjwvYj4iOw0KfQ0KaWYgKGlzX2NhbGxhYmxlKCJkaXNrX2ZyZWVfc3BhY2UiKSkNCnsNCiAkZnJlZSA9IGRpc2tfZnJlZV9zcGFjZSgkZCk7DQogJHRvdGFsID0gZGlza190b3RhbF9zcGFjZSgkZCk7DQogaWYgKCRmcmVlID09PSBGQUxTRSkgeyRmcmVlID0gMDt9DQogaWYgKCR0b3RhbCA9PT0gRkFMU0UpIHskdG90YWwgPSAwO30NCiBpZiAoJGZyZWUgPCAwKSB7JGZyZWUgPSAwO30NCiBpZiAoJHRvdGFsIDwgMCkgeyR0b3RhbCA9IDA7fQ0KICR1c2VkID0gJHRvdGFsLSRmcmVlOw0KICRmcmVlX3BlcmNlbnQgPSByb3VuZCgxMDAvKCR0b3RhbC8kZnJlZSksMik7DQogZWNobyAiPGJyPjxiPkZyZWUgIi52aWV3X3NpemUoJGZyZWUpLiIgb2YgIi52aWV3X3NpemUoJHRvdGFsKS4iICgiLiRmcmVlX3BlcmNlbnQuIiUpPC9iPiI7DQp9DQplY2hvICI8YnI+IjsNCiRsZXR0ZXJzID0gIiI7DQppZiAoJHdpbikNCnsNCiAkdiA9IGV4cGxvZGUoIlxcIiwkZCk7DQogJHYgPSAkdlswXTsNCiBmb3JlYWNoIChyYW5nZSgiYSIsInoiKSBhcyAkbGV0dGVyKQ0KIHsNCiAgJGJvb2wgPSAkaXNkaXNrZXR0ZSA9IGluX2FycmF5KCRsZXR0ZXIsJHNhZmVtb2RlX2Rpc2tldHRlcyk7DQogIGlmICghJGJvb2wpIHskYm9vbCA9IGlzX2RpcigkbGV0dGVyLiI6XFwiKTt9DQogIGlmICgkYm9vbCkNCiAgew0KICAgJGxldHRlcnMgLj0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLnVybGVuY29kZSgkbGV0dGVyLiI6XFwiKS4iXCIiLigkaXNkaXNrZXR0ZT8iIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnTWFrZSBzdXJlIHRoYXQgdGhlIGRpc2tldHRlIGlzIGluc2VydGVkIHByb3Blcmx5LCBvdGhlcndpc2UgYW4gZXJyb3IgbWF5IG9jY3VyLicpXCIiOiIiKS4iPlsgIjsNCiAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fQ0KICAgZWxzZSB7JGxldHRlcnMgLj0gIjxmb250IGNvbG9yPWdyZWVuPiIuJGxldHRlci4iPC9mb250PiI7fQ0KICAgJGxldHRlcnMgLj0gIiBdPC9hPiAiOw0KICB9DQogfQ0KIGlmICghZW1wdHkoJGxldHRlcnMpKSB7ZWNobyAiPGI+RGV0ZWN0ZWQgZHJpdmVzPC9iPjogIi4kbGV0dGVycy4iPGJyPiI7fQ0KfQ0KaWYgKGNvdW50KCRxdWlja2xhdW5jaCkgPiAwKQ0Kew0KIGZvcmVhY2goJHF1aWNrbGF1bmNoIGFzICRpdGVtKQ0KIHsNCiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlc29ydCIsJHNvcnQsJGl0ZW1bMV0pOw0KICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOw0KICBpZiAoZW1wdHkoJHYpKSB7JGEgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOyB1bnNldCgkYVtjb3VudCgkYSktMl0pOyAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7fQ0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCiAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOw0KIH0NCn0NCmVjaG8gIjwvcD48L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCmlmICgoIWVtcHR5KCRkb25hdGVkX2h0bWwpKSBhbmQgKGluX2FycmF5KCRhY3QsJGRvbmF0ZWRfYWN0KSkpIHtlY2hvICI8VEFCTEUgc3R5bGU9XCJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlXCIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD1cIjEwMCVcIiB2YWxpZ249XCJ0b3BcIj4iLiRkb25hdGVkX2h0bWwuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iO30NCmVjaG8gIjxUQUJMRSBzdHlsZT1cIkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2VcIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPVwiMTAwJVwiIHZhbGlnbj1cInRvcFwiPiI7DQppZiAoJGFjdCA9PSAiIikgeyRhY3QgPSAkZHNwYWN0ID0gImxzIjt9DQppZiAoJGFjdCA9PSAic3FsIikNCnsNCiAkc3FsX3N1cmwgPSAkc3VybC4iYWN0PXNxbCI7DQogaWYgKCRzcWxfbG9naW4pICB7JHNxbF9zdXJsIC49ICImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTt9DQogaWYgKCRzcWxfcGFzc3dkKSB7JHNxbF9zdXJsIC49ICImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpO30NCiBpZiAoJHNxbF9zZXJ2ZXIpIHskc3FsX3N1cmwgLj0gIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7fQ0KIGlmICgkc3FsX3BvcnQpICAgeyRzcWxfc3VybCAuPSAiJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpO30NCiBpZiAoJHNxbF9kYikgICAgIHskc3FsX3N1cmwgLj0gIiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpO30NCiAkc3FsX3N1cmwgLj0gIiYiOw0KID8+PGgzPkF0dGVudGlvbiEgU1FMLU1hbmFnZXIgaXMgPHU+Tk9UPC91PiByZWFkeSBtb2R1bGUhIERvbid0IHJlcG9ydHMgYnVncy48L2gzPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSIjQzBDMEMwIj48dHI+PHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIj48Y2VudGVyPjw/cGhwDQogaWYgKCRzcWxfc2VydmVyKQ0KIHsNCiAgJHNxbF9zb2NrID0gbXlzcWxfY29ubmVjdCgkc3FsX3NlcnZlci4iOiIuJHNxbF9wb3J0LCAkc3FsX2xvZ2luLCAkc3FsX3Bhc3N3ZCk7DQogICRlcnIgPSBteXNxbF9zbWFydGVycm9yKCk7DQogIEBteXNxbF9zZWxlY3RfZGIoJHNxbF9kYiwkc3FsX3NvY2spOw0KICBpZiAoJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgeyRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOyAkc3FsX3F1ZXJ5X2Vycm9yID0gbXlzcWxfc21hcnRlcnJvcigpO30NCiB9DQogZWxzZSB7JHNxbF9zb2NrID0gRkFMU0U7fQ0KIGVjaG8gIjxiPlNRTCBNYW5hZ2VyOjwvYj48YnI+IjsNCiBpZiAoISRzcWxfc29jaykNCiB7DQogIGlmICghJHNxbF9zZXJ2ZXIpIHtlY2hvICJOTyBDT05ORUNUSU9OIjt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3QgY29ubmVjdDwvYj48L2NlbnRlcj4iOyBlY2hvICI8Yj4iLiRlcnIuIjwvYj4iO30NCiB9DQogZWxzZQ0KIHsNCiAgJHNxbHF1aWNrbGF1bmNoID0gYXJyYXkoKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiSW5kZXgiLCRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyLXN0YXR1cyIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX2FjdD1zZXJ2ZXJzdGF0dXMiKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyIHZhcmlhYmxlcyIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX2FjdD1zZXJ2ZXJ2YXJzIik7DQogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlByb2Nlc3NlcyIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX2FjdD1wcm9jZXNzZXMiKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiTG9nb3V0Iiwkc3VybC4iYWN0PXNxbCIpOw0KICBlY2hvICI8Y2VudGVyPjxiPk15U1FMICIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIiAocHJvdG8gdi4iLm15c3FsX2dldF9wcm90b19pbmZvICgpLiIpIHJ1bm5pbmcgaW4gIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiIgYXMgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJAIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iIChwYXNzd29yZCAtIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCIpPC9iPjxicj4iOw0KICBpZiAoY291bnQoJHNxbHF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPjxiPiIuJGl0ZW1bMF0uIjwvYj48L2E+IF0gIjt9fQ0KICBlY2hvICI8L2NlbnRlcj4iOw0KIH0NCiBlY2hvICI8L3RkPjwvdHI+PHRyPiI7DQogaWYgKCEkc3FsX3NvY2spIHs/Pjx0ZCB3aWR0aD0iMjglIiBoZWlnaHQ9IjEwMCIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGZvbnQgc2l6ZT0iNSI+IGkgPC9mb250PjwvY2VudGVyPjxsaT5JZiBsb2dpbiBpcyBudWxsLCBsb2dpbiBpcyBvd25lciBvZiBwcm9jZXNzLjxsaT5JZiBob3N0IGlzIG51bGwsIGhvc3QgaXMgbG9jYWxob3N0PC9iPjxsaT5JZiBwb3J0IGlzIG51bGwsIHBvcnQgaXMgMzMwNiAoZGVmYXVsdCk8L3RkPjx0ZCB3aWR0aD0iOTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48VEFCTEUgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIHdpZHRoPSIxMDAlIiBib3JkZXI9MD48dHI+PHRkPiZuYnNwOzxiPlBsZWFzZSwgZmlsbCB0aGUgZm9ybTo8L2I+PHRhYmxlPjx0cj48dGQ+PGI+VXNlcm5hbWU8L2I+PC90ZD48dGQ+PGI+UGFzc3dvcmQ8L2I+Jm5ic3A7PC90ZD48dGQ+PGI+RGF0YWJhc2U8L2I+Jm5ic3A7PC90ZD48L3RyPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48dHI+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSJyb290IiBtYXhsZW5ndGg9IjY0Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZGIiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PC90cj48dHI+PHRkPjxiPkhvc3Q8L2I+PC90ZD48dGQ+PGI+UE9SVDwvYj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj1yaWdodD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9ImxvY2FsaG9zdCIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iMzMwNiIgbWF4bGVuZ3RoPSI2IiBzaXplPSIzIj48L3RkPjx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ29ubmVjdCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+PD9waHAgfQ0KIGVsc2UNCiB7DQogIC8vU3RhcnQgbGVmdCBwYW5lbA0KICBpZiAoIWVtcHR5KCRzcWxfZGIpKQ0KICB7DQogICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiI7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT48P3BocA0KICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRzcWxfZGIpOw0KICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgIGVjaG8gIi0tLVsgPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiImXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiI8L2I+PC9hPiBdLS0tPGJyPiI7DQogICAgJGMgPSAwOw0KICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskY291bnQgPSBteXNxbF9xdWVyeSAoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICIuJHJvd1swXSk7ICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOyBlY2hvICI8Yj4/bmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIiZzcWxfdGJsPSIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiI8L2I+PC9hPiAoIi4kY291bnRfcm93WzBdLiIpPC9icj48L2I+IjsgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsgJGMrKzt9DQogICAgaWYgKCEkYykge2VjaG8gIk5vIHRhYmxlcyBmb3VuZCBpbiBkYXRhYmFzZS4iO30NCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgID8+PHRkIHdpZHRoPSIxIiBoZWlnaHQ9IjEwMCIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNxbF9zdXJsOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+PD9waHANCiAgICRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOw0KICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgID8+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxzZWxlY3QgbmFtZT0ic3FsX2RiIj48P3BocA0KICAgICRjID0gMDsNCiAgICAkZGJzID0gIiI7DQogICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpIHskZGJzIC49ICI8b3B0aW9uIHZhbHVlPVwiIi4kcm93WzBdLiJcIiI7IGlmICgkc3FsX2RiID09ICRyb3dbMF0pIHskZGJzIC49ICIgc2VsZWN0ZWQiO30gJGRicyAuPSAiPiIuJHJvd1swXS4iPC9vcHRpb24+IjsgJGMrKzt9DQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPiI7DQogICAgZWNobyAkZGJzOw0KICAgfQ0KICAgPz48L3NlbGVjdD48aHIgc2l6ZT0iMSIgbm9zaGFkZT5QbGVhc2UsIHNlbGVjdCBkYXRhYmFzZTxociBzaXplPSIxIiBub3NoYWRlPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+PC9mb3JtPjw/cGhwDQogIH0NCiAgLy9FbmQgbGVmdCBwYW5lbA0KICBlY2hvICI8L3RkPjx0ZCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCIgdmFsaWduPVwidG9wXCI+IjsNCiAgLy9TdGFydCBjZW50ZXIgcGFuZWwNCiAgJGRpcGxheSA9IFRSVUU7DQogIGlmICgkc3FsX2RiKQ0KICB7DQogICBpZiAoIWlzX251bWVyaWMoJGMpKSB7JGMgPSAwO30NCiAgIGlmICgkYyA9PSAwKSB7JGMgPSAibm8iO30NCiAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UaGVyZSBhcmUgIi4kYy4iIHRhYmxlKHMpIGluIHRoaXMgREIgKCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iKS48YnI+IjsNCiAgIGlmIChjb3VudCgkZGJxdWlja2xhdW5jaCkgPiAwKSB7Zm9yZWFjaCgkZGJzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4gXSAiO319DQogICBlY2hvICI8L2I+PC9jZW50ZXI+IjsNCiAgICRhY3RzID0gYXJyYXkoIiIsImR1bXAiKTsNCiAgIGlmICgkc3FsX2FjdCA9PSAidGJsZHJvcCIpIHskc3FsX3F1ZXJ5ID0gIkRST1AgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGVtcHR5IikgeyRzcWxfcXVlcnkgPSAiIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFIEZST00gYCIuJHYuImAgXG4iO30gJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGR1bXAiKSB7aWYgKGNvdW50KCRib3h0YmwpID4gMCkgeyRkbXB0YmxzID0gJGJveHRibDt9IGVsc2VpZigkdGhpc3RibCkgeyRkbXB0YmxzID0gYXJyYXkoJHNxbF90YmwpO30gJHNxbF9hY3QgPSAiZHVtcCI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsY2hlY2siKSB7JHNxbF9xdWVyeSA9ICJDSEVDSyBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsb3B0aW1pemUiKSB7JHNxbF9xdWVyeSA9ICJPUFRJTUlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJscmVwYWlyIikgeyRzcWxfcXVlcnkgPSAiUkVQQUlSIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxhbmFseXplIikgeyRzcWxfcXVlcnkgPSAiQU5BTFlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZGVsZXRlcm93IikgeyRzcWxfcXVlcnkgPSAiIjsgaWYgKCFlbXB0eSgkYm94cm93X2FsbCkpIHskc3FsX3F1ZXJ5ID0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImA7Ijt9IGVsc2Uge2ZvcmVhY2goJGJveHJvdyBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImAgV0hFUkUiLiR2LiIgTElNSVQgMTtcbiI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSk7fSAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX3RibF9hY3QgPT0gImluc2VydCIpDQogICB7DQogICAgaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAxKQ0KICAgIHsNCiAgICAgJGtleXMgPSAiIjsNCiAgICAgJGFrZXlzID0gYXJyYXlfa2V5cygkc3FsX3RibF9pbnNlcnQpOw0KICAgICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQ0KICAgICBpZiAoIWVtcHR5KCRrZXlzKSkgeyRrZXlzID0gc3Vic3RyKCRrZXlzLDAsc3RybGVuKCRrZXlzKS0yKTt9DQogICAgICR2YWx1ZXMgPSAiIjsNCiAgICAgJGkgPSAwOw0KICAgICBmb3JlYWNoIChhcnJheV92YWx1ZXMoJHNxbF90YmxfaW5zZXJ0KSBhcyAkdikge2lmICgkZnVuY3QgPSAkc3FsX3RibF9pbnNlcnRfZnVuY3RzWyRha2V5c1skaV1dKSB7JHZhbHVlcyAuPSAkZnVuY3QuIiAoIjt9ICR2YWx1ZXMgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsgaWYgKCRmdW5jdCkgeyR2YWx1ZXMgLj0gIikiO30gJHZhbHVlcyAuPSAiLCAiOyAkaSsrO30NCiAgICAgaWYgKCFlbXB0eSgkdmFsdWVzKSkgeyR2YWx1ZXMgPSBzdWJzdHIoJHZhbHVlcywwLHN0cmxlbigkdmFsdWVzKS0yKTt9DQogICAgICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7DQogICAgICRzcWxfYWN0ID0gInF1ZXJ5IjsNCiAgICAgJHNxbF90YmxfYWN0ID0gImJyb3dzZSI7DQogICAgfQ0KICAgIGVsc2VpZiAoJHNxbF90YmxfaW5zZXJ0X3JhZGlvID09IDIpDQogICAgew0KICAgICAkc2V0ID0gbXlzcWxfYnVpbGR3aGVyZSgkc3FsX3RibF9pbnNlcnQsIiwgIiwkc3FsX3RibF9pbnNlcnRfZnVuY3RzKTsNCiAgICAgJHNxbF9xdWVyeSA9ICJVUERBVEUgYCIuJHNxbF90YmwuImAgU0VUICIuJHNldC4iIFdIRVJFICIuJHNxbF90YmxfaW5zZXJ0X3EuIiBMSU1JVCAxOyI7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAkcmVzdWx0ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpOw0KICAgICAkc3FsX2FjdCA9ICJxdWVyeSI7DQogICAgICRzcWxfdGJsX2FjdCA9ICJicm93c2UiOw0KICAgIH0NCiAgIH0NCiAgIGlmICgkc3FsX2FjdCA9PSAicXVlcnkiKQ0KICAgew0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICBpZiAoKCRzdWJtaXQpIGFuZCAoISRzcWxfcXVlcnlfcmVzdWx0KSBhbmQgKCRzcWxfY29uZmlybSkpIHtpZiAoISRzcWxfcXVlcnlfZXJyb3IpIHskc3FsX3F1ZXJ5X2Vycm9yID0gIlF1ZXJ5IHdhcyBlbXB0eSI7fSBlY2hvICI8Yj5FcnJvcjo8L2I+IDxicj4iLiRzcWxfcXVlcnlfZXJyb3IuIjxicj4iO30NCiAgICBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9hY3QgPSAkc3FsX2dvdG87fQ0KICAgIGlmICgoISRzdWJtaXQpIG9yICgkc3FsX2FjdCkpIHtlY2hvICI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjFcIj48dHI+PHRkPjxmb3JtIGFjdGlvbj1cIiIuJHNxbF9zdXJsLiJcIiBtZXRob2Q9XCJQT1NUXCI+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0bzoiO30gZWxzZSB7ZWNobyAiU1FMLVF1ZXJ5IDoiO30gZWNobyAiPC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9XCJzcWxfcXVlcnlcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2FjdFwiIHZhbHVlPVwicXVlcnlcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInNxbF9jb25maXJtXCIgdmFsdWU9XCJZZXNcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD48L3RyPjwvdGFibGU+Ijt9DQogICB9DQogICBpZiAoaW5fYXJyYXkoJHNxbF9hY3QsJGFjdHMpKQ0KICAgew0KICAgID8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9Im5ld3RibCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2RiIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld3RibCIgc2l6ZT0iMjAiPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkR1bXAgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9ImR1bXAiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImR1bXBfZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvICJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kc3FsX2RiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIjsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT0iRHVtcCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHANCiAgICBpZiAoIWVtcHR5KCRzcWxfYWN0KSkge2VjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+Ijt9DQogICAgaWYgKCRzcWxfYWN0ID09ICJuZXd0YmwiKQ0KICAgIHsNCiAgICAgZWNobyAiPGI+IjsNCiAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHtlY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iOw0KICAgIH0NCiAgICBlbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICB9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJkdW1wIikNCiAgIHsNCiAgICBpZiAoZW1wdHkoJHN1Ym1pdCkpDQogICAgew0KICAgICAkZGlwbGF5ID0gRkFMU0U7DQogICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2FjdFwiIHZhbHVlPVwiZHVtcFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48Yj5TUUwtRHVtcDo8L2I+PGJyPjxicj4iOw0KICAgICBlY2hvICI8Yj5EQjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJHNxbF9kYikuIlwiPjxicj48YnI+IjsNCiAgICAgJHYgPSBqb2luICgiOyIsJGRtcHRibHMpOw0KICAgICBlY2hvICI8Yj5Pbmx5IHRhYmxlcyAoZXhwbG9kZSBcIjtcIikmbmJzcDs8Yj48c3VwPjE8L3N1cD48L2I+OjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZG1wdGJsc1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkdikrNSkuIlwiPjxicj48YnI+IjsNCiAgICAgaWYgKCRkdW1wX2ZpbGUpIHskdG1wID0gJGR1bXBfZmlsZTt9DQogICAgIGVsc2UgeyR0bXAgPSBodG1sc3BlY2lhbGNoYXJzKCIuL2R1bXBfIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIl8iLiRzcWxfZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiKTt9DQogICAgIGVjaG8gIjxiPkZpbGU6PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZHVtcF9maWxlXCIgdmFsdWU9XCIiLiR0bXAuIlwiIHNpemU9XCIiLihzdHJsZW4oJHRtcCkrc3RybGVuKCR0bXApICUgMzApLiJcIj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxiPkRvd25sb2FkOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9kb3dubG9hZFwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGJyPjxicj4iOw0KICAgICBlY2hvICI8Yj5TYXZlIHRvIGZpbGU6IDwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNxbF9kdW1wX3NhdmV0b2ZpbGVcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPiI7DQogICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCJEdW1wXCI+PGJyPjxicj48Yj48c3VwPjE8L3N1cD48L2I+IC0gYWxsLCBpZiBlbXB0eSI7DQogICAgIGVjaG8gIjwvZm9ybT4iOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAkZGlwbGF5ID0gVFJVRTsNCiAgICAgJHNldCA9IGFycmF5KCk7DQogICAgICRzZXRbInNvY2siXSA9ICRzcWxfc29jazsNCiAgICAgJHNldFsiZGIiXSA9ICRzcWxfZGI7DQogICAgICRkdW1wX291dCA9ICJkb3dubG9hZCI7DQogICAgICRzZXRbInByaW50Il0gPSAwOw0KICAgICAkc2V0WyJubDJiciJdID0gMDsNCiAgICAgJHNldFsiIl0gPSAwOw0KICAgICAkc2V0WyJmaWxlIl0gPSAkZHVtcF9maWxlOw0KICAgICAkc2V0WyJhZGRfZHJvcCJdID0gVFJVRTsNCiAgICAgJHNldFsib25seXRhYnMiXSA9IGFycmF5KCk7DQogICAgIGlmICghZW1wdHkoJGRtcHRibHMpKSB7JHNldFsib25seXRhYnMiXSA9IGV4cGxvZGUoIjsiLCRkbXB0YmxzKTt9DQogICAgICRyZXQgPSBteXNxbF9kdW1wKCRzZXQpOw0KICAgICBpZiAoJHNxbF9kdW1wX2Rvd25sb2FkKQ0KICAgICB7DQogICAgICBAb2JfY2xlYW4oKTsNCiAgICAgIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsNCiAgICAgIGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuc3RybGVuKCRyZXQpKTsNCiAgICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRzcWxfZHVtcF9maWxlKS4iXCI7Iik7DQogICAgICBlY2hvICRyZXQ7DQogICAgICBleGl0Ow0KICAgICB9DQogICAgIGVsc2VpZiAoJHNxbF9kdW1wX3NhdmV0b2ZpbGUpDQogICAgIHsNCiAgICAgICRmcCA9IGZvcGVuKCRzcWxfZHVtcF9maWxlLCJ3Iik7DQogICAgICBpZiAoISRmcCkge2VjaG8gIjxiPkR1bXAgZXJyb3IhIENhbid0IHdyaXRlIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZHVtcF9maWxlKS4iXCIhIjt9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgZndyaXRlKCRmcCwkcmV0KTsNCiAgICAgICBmY2xvc2UoJGZwKTsNCiAgICAgICBlY2hvICI8Yj5EdW1wZWQhIER1bXAgaGFzIGJlZW4gd3JpdGVkIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKHJlYWxwYXRoKCRzcWxfZHVtcF9maWxlKSkuIlwiICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkc3FsX2R1bXBfZmlsZSkpLiIpPC9iPi4iOw0KICAgICAgfQ0KICAgICB9DQogICAgIGVsc2Uge2VjaG8gIjxiPkR1bXA6IG5vdGhpbmcgdG8gZG8hPC9iPiI7fQ0KICAgIH0NCiAgIH0NCiAgIGlmICgkZGlwbGF5KQ0KICAgew0KICAgIGlmICghZW1wdHkoJHNxbF90YmwpKQ0KICAgIHsNCiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2FjdCkpIHskc3FsX3RibF9hY3QgPSAiYnJvd3NlIjt9DQogICAgICRjb3VudCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsNCiAgICAgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7DQogICAgICR0Ymxfc3RydWN0X3Jlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIEZJRUxEUyBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOw0KICAgICAkdGJsX3N0cnVjdF9maWVsZHMgPSBhcnJheSgpOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCR0Ymxfc3RydWN0X3Jlc3VsdCkpIHskdGJsX3N0cnVjdF9maWVsZHNbXSA9ICRyb3c7fQ0KICAgICBpZiAoJHNxbF9scyA+ICRzcWxfbGUpIHskc3FsX2xlID0gJHNxbF9scyArICRwZXJwYWdlO30NCiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3BhZ2UpKSB7JHNxbF90YmxfcGFnZSA9IDA7fQ0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbHMpKSB7JHNxbF90YmxfbHMgPSAwO30NCiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyRzcWxfdGJsX2xlID0gMzA7fQ0KICAgICAkcGVycGFnZSA9ICRzcWxfdGJsX2xlIC0gJHNxbF90YmxfbHM7DQogICAgIGlmICghaXNfbnVtZXJpYygkcGVycGFnZSkpIHskcGVycGFnZSA9IDEwO30NCiAgICAgJG51bXBhZ2VzID0gJGNvdW50X3Jvd1swXS8kcGVycGFnZTsNCiAgICAgJGUgPSBleHBsb2RlKCIgIiwkc3FsX29yZGVyKTsNCiAgICAgaWYgKGNvdW50KCRlKSA9PSAyKQ0KICAgICB7DQogICAgICBpZiAoJGVbMF0gPT0gImQiKSB7JGFzY19kZXNjID0gIkRFU0MiO30NCiAgICAgIGVsc2UgeyRhc2NfZGVzYyA9ICJBU0MiO30NCiAgICAgICR2ID0gIk9SREVSIEJZIGAiLiRlWzFdLiJgICIuJGFzY19kZXNjLiIgIjsNCiAgICAgfQ0KICAgICBlbHNlIHskdiA9ICIiO30NCiAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAgIi4kdi4iTElNSVQgIi4kc3FsX3RibF9scy4iICwgIi4kcGVycGFnZS4iIjsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsNCiAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Y2VudGVyPjxiPlRhYmxlICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIiAoIi5teXNxbF9udW1fZmllbGRzKCRyZXN1bHQpLiIgY29scyBhbmQgIi4kY291bnRfcm93WzBdLiIgcm93cyk8L2I+PC9jZW50ZXI+IjsNCiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PXN0cnVjdHVyZVwiPlsmbmJzcDs8Yj5TdHJ1Y3R1cmU8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9hY3Q9YnJvd3NlXCI+WyZuYnNwOzxiPkJyb3dzZTwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfYWN0PXRibGR1bXAmdGhpc3RibD0xXCI+WyZuYnNwOzxiPkR1bXA8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9hY3Q9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgIGlmICgkc3FsX3RibF9hY3QgPT0gInN0cnVjdHVyZSIpIHtlY2hvICI8YnI+PGJyPjxiPkNvbWluZyBzb29vbiE8L2I+Ijt9DQogICAgIGlmICgkc3FsX3RibF9hY3QgPT0gImluc2VydCIpDQogICAgIHsNCiAgICAgIGlmICghaXNfYXJyYXkoJHNxbF90YmxfaW5zZXJ0KSkgeyRzcWxfdGJsX2luc2VydCA9IGFycmF5KCk7fQ0KICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcmFkaW8pKQ0KICAgICAgew0KDQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgZWNobyAiPGJyPjxicj48Yj5JbnNlcnRpbmcgcm93IGludG8gdGFibGU6PC9iPjxicj4iOw0KICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKQ0KICAgICAgIHsNCiAgICAgICAgJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIjsNCiAgICAgICAgJHNxbF9xdWVyeSAuPSAiIFdIRVJFIi4kc3FsX3RibF9pbnNlcnRfcTsNCiAgICAgICAgJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsNCiAgICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKSBvciBwcmludCgiPGJyPjxicj4iLm15c3FsX3NtYXJ0ZXJyb3IoKSk7DQogICAgICAgICR2YWx1ZXMgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsNCiAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICAgfQ0KICAgICAgIGVsc2UgeyR2YWx1ZXMgPSBhcnJheSgpO30NCiAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjElXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxiPkZpZWxkPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+RnVuY3Rpb248L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7DQogICAgICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3RfZmllbGRzIGFzICRmaWVsZCkNCiAgICAgICB7DQogICAgICAgICRuYW1lID0gJGZpZWxkWyJGaWVsZCJdOw0KICAgICAgICBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7JHYgPSAiIjt9DQogICAgICAgIGVjaG8gIjx0cj48dGQ+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iPC9iPjwvdGQ+PHRkPiIuJGZpZWxkWyJUeXBlIl0uIjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT1cInNxbF90YmxfaW5zZXJ0X2Z1bmN0c1siLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPjxvcHRpb24+UEFTU1dPUkQ8L29wdGlvbj48b3B0aW9uPk1ENTwvb3B0aW9uPjxvcHRpb24+RU5DUllQVDwvb3B0aW9uPjxvcHRpb24+QVNDSUk8L29wdGlvbj48b3B0aW9uPkNIQVI8L29wdGlvbj48b3B0aW9uPlJBTkQ8L29wdGlvbj48b3B0aW9uPkxBU1RfSU5TRVJUX0lEPC9vcHRpb24+PG9wdGlvbj5DT1VOVDwvb3B0aW9uPjxvcHRpb24+QVZHPC9vcHRpb24+PG9wdGlvbj5TVU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiXCI+LS0tLS0tLS08L29wdGlvbj48b3B0aW9uPlNPVU5ERVg8L29wdGlvbj48b3B0aW9uPkxDQVNFPC9vcHRpb24+PG9wdGlvbj5VQ0FTRTwvb3B0aW9uPjxvcHRpb24+Tk9XPC9vcHRpb24+PG9wdGlvbj5DVVJEQVRFPC9vcHRpb24+PG9wdGlvbj5DVVJUSU1FPC9vcHRpb24+PG9wdGlvbj5GUk9NX0RBWVM8L29wdGlvbj48b3B0aW9uPkZST01fVU5JWFRJTUU8L29wdGlvbj48b3B0aW9uPlBFUklPRF9BREQ8L29wdGlvbj48b3B0aW9uPlBFUklPRF9ESUZGPC9vcHRpb24+PG9wdGlvbj5UT19EQVlTPC9vcHRpb24+PG9wdGlvbj5VTklYX1RJTUVTVEFNUDwvb3B0aW9uPjxvcHRpb24+VVNFUjwvb3B0aW9uPjxvcHRpb24+V0VFS0RBWTwvb3B0aW9uPjxvcHRpb24+Q09OQ0FUPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0WyIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIl1cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdmFsdWVzWyRuYW1lXSkuIlwiIHNpemU9NTA+PC90ZD48L3RyPiI7DQogICAgICAgICRpKys7DQogICAgICAgfQ0KICAgICAgIGVjaG8gIjwvdGFibGU+PGJyPiI7DQogICAgICAgZWNobyAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMVwiIjsgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48Yj5JbnNlcnQgYXMgbmV3IHJvdzwvYj4iOw0KICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7ZWNobyAiIG9yIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjJcIiBjaGVja2VkPjxiPlNhdmU8L2I+IjsgZWNobyAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsX2luc2VydF9xKS4iXCI+Ijt9DQogICAgICAgZWNobyAiPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT4iOw0KICAgICAgfQ0KICAgICB9DQogICAgIGlmICgkc3FsX3RibF9hY3QgPT0gImJyb3dzZSIpDQogICAgIHsNCiAgICAgICRzcWxfdGJsX2xzID0gYWJzKCRzcWxfdGJsX2xzKTsNCiAgICAgICRzcWxfdGJsX2xlID0gYWJzKCRzcWxfdGJsX2xlKTsNCiAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICAgIGVjaG8gIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9bXVsdGlwYWdlXCIgaGVpZ2h0PVwiMTJcIiB3aWR0aD1cIjEwXCIgYWx0PVwiUGFnZXNcIj4mbmJzcDsiOw0KICAgICAgJGIgPSAwOw0KICAgICAgZm9yKCRpPTA7JGk8JG51bXBhZ2VzOyRpKyspDQogICAgICB7DQogICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfb3JkZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiImc3FsX3RibF9scz0iLigkaSokcGVycGFnZSkuIiZzcWxfdGJsX2xlPSIuKCRpKiRwZXJwYWdlKyRwZXJwYWdlKS4iXCI+PHU+Ijt9DQogICAgICAgZWNobyAkaTsNCiAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30NCiAgICAgICBpZiAoKCRpLzMwID09IHJvdW5kKCRpLzMwKSkgYW5kICgkaSA+IDApKSB7ZWNobyAiPGJyPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIiZuYnNwOyI7fQ0KICAgICAgfQ0KICAgICAgaWYgKCRpID09IDApIHtlY2hvICJlbXB0eSI7fQ0KICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiR0VUXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYWN0XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX29yZGVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIlwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xzXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xzLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbGVcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbGUuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJWaWV3XCI+PC9mb3JtPiI7DQogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+IjsNCiAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94cm93X2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+IjsNCiAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspDQogICAgICB7DQogICAgICAgJHYgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOw0KICAgICAgIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9DQogICAgICAgZWxzZSB7JHMgPSAiYSI7ICRtID0gImRlc2MiO30NCiAgICAgICBlY2hvICI8dGQ+IjsNCiAgICAgICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQ0KICAgICAgIGlmICgkZVsxXSAhPSAkdikge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJGVbMF0uIiUyMCIuJHYuIlwiPjxiPiIuJHYuIjwvYj48L2E+Ijt9DQogICAgICAgZWxzZSB7ZWNobyAiPGI+Ii4kdi4iPC9iPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJHMuIiUyMCIuJHYuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c29ydF8iLiRtLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuJG0uIlwiPjwvYT4iO30NCiAgICAgICBlY2hvICI8L3RkPiI7DQogICAgICB9DQogICAgICBlY2hvICI8dGQ+PGZvbnQgY29sb3I9XCJncmVlblwiPjxiPkFjdGlvbjwvYj48L2ZvbnQ+PC90ZD4iOw0KICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpDQogICAgICB7DQogICAgICAgZWNobyAiPHRyPiI7DQogICAgICAgJHcgPSAiIjsNCiAgICAgICAkaSA9IDA7DQogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7ICR3IC49ICIgYCIuJG5hbWUuImAgPSAnIi5hZGRzbGFzaGVzKCR2KS4iJyBBTkQiOyAkaSsrO30NCiAgICAgICBpZiAoY291bnQoJHJvdykgPiAwKSB7JHcgPSBzdWJzdHIoJHcsMCxzdHJsZW4oJHcpLTMpO30NCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOw0KICAgICAgICRpID0gMDsNCiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikNCiAgICAgICB7DQogICAgICAgICR2ID0gaHRtbHNwZWNpYWxjaGFycygkdik7DQogICAgICAgIGlmICgkdiA9PSAiIikgeyR2ID0gIjxmb250IGNvbG9yPVwiZ3JlZW5cIj5OVUxMPC9mb250PiI7fQ0KICAgICAgICBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iOw0KICAgICAgICAkaSsrOw0KICAgICAgIH0NCiAgICAgICBlY2hvICI8dGQ+IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c3FsX2J1dHRvbl9kcm9wXCIgYWx0PVwiRGVsZXRlXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiOw0KICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibF9hY3Q9aW5zZXJ0JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9pbnNlcnRfcT0iLnVybGVuY29kZSgkdykuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Y2hhbmdlXCIgYWx0PVwiRWRpdFwiIGhlaWdodD1cIjE0XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgfQ0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJsZWZ0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1hcnJvd19sdHJcIiBib3JkZXI9XCIwXCI+PHNlbGVjdCBuYW1lPVwic3FsX2FjdFwiPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImRlbGV0ZXJvd1wiPkRlbGV0ZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsNCiAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEUgU1RBVFVTIiwgJHNxbF9zb2NrKTsNCiAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgIGVjaG8gIjxicj48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD48dGQ+PGNlbnRlcj48Yj5UYWJsZTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Yj5Sb3dzPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+Q3JlYXRlZDwvYj48L3RkPjx0ZD48Yj5Nb2RpZmllZDwvYj48L3RkPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsNCiAgICAgICRpID0gMDsNCiAgICAgICR0c2l6ZSA9ICR0cm93cyA9IDA7DQogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkNCiAgICAgIHsNCiAgICAgICAkdHNpemUgKz0gJHJvd1siRGF0YV9sZW5ndGgiXTsNCiAgICAgICAkdHJvd3MgKz0gJHJvd1siUm93cyJdOw0KICAgICAgICRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOw0KICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHRibFtdXCIgdmFsdWU9XCIiLiRyb3dbIk5hbWUiXS4iXCI+PC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHJvd1siTmFtZSJdKS4iXCI+PGI+Ii4kcm93WyJOYW1lIl0uIjwvYj48L2E+Jm5ic3A7PC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlJvd3MiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlR5cGUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIkNyZWF0ZV90aW1lIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJVcGRhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHNpemUuIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF9xdWVyeT0iLnVybGVuY29kZSgiREVMRVRFIEZST00gYCIuJHJvd1siTmFtZSJdLiJgIikuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c3FsX2J1dHRvbl9lbXB0eVwiIGFsdD1cIkVtcHR5XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJEUk9QIFRBQkxFIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZHJvcFwiIGFsdD1cIkRyb3BcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibF9hY3Q9aW5zZXJ0JnNxbF90Ymw9Ii4kcm93WyJOYW1lIl0uIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c3FsX2J1dHRvbl9pbnNlcnRcIiBhbHQ9XCJJbnNlcnRcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8L3RyPiI7DQogICAgICAgJGkrKzsNCiAgICAgIH0NCiAgICAgIGVjaG8gIjx0ciBiZ2NvbG9yPVwiMDAwMDAwXCI+IjsNCiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPj8vYj48L2NlbnRlcj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj4iLiRpLiIgdGFibGUocyk8L2I+PC9jZW50ZXI+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjxiPiIuJHRyb3dzLiI8L2I+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMF0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTFdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGI+Ii52aWV3X3NpemUoJHRzaXplKS4iPC9iPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48L3RkPiI7DQogICAgICBlY2hvICI8L3RyPiI7DQogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJyaWdodFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF9hY3RcIj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0Ymxkcm9wXCI+RHJvcDwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZW1wdHlcIj5FbXB0eTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHVtcFwiPkR1bXA8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGNoZWNrXCI+Q2hlY2sgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibG9wdGltaXplXCI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibHJlcGFpclwiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsYW5hbHl6ZVwiPkFuYWx5emUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgfQ0KICAgIH0NCiAgIH0NCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICRhY3RzID0gYXJyYXkoIiIsIm5ld2RiIiwic2VydmVyc3RhdHVzIiwic2VydmVydmFycyIsInByb2Nlc3NlcyIsImdldGZpbGUiKTsNCiAgIGlmIChpbl9hcnJheSgkc3FsX2FjdCwkYWN0cykpIHs/Pjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5DcmVhdGUgbmV3IERCOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJuZXdkYiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld2RiIiBzaXplPSIyMCI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+VmlldyBGaWxlOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJnZXRmaWxlIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZ2V0ZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nZXRmaWxlKTsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwIH0NCiAgIGlmICghZW1wdHkoJHNxbF9hY3QpKQ0KICAgew0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICBpZiAoJHNxbF9hY3QgPT0gIm5ld2RiIikNCiAgICB7DQogICAgIGVjaG8gIjxiPiI7DQogICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7ZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+Ijt9DQogICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30NCiAgICB9DQogICAgaWYgKCRzcWxfYWN0ID09ICJzZXJ2ZXJzdGF0dXMiKQ0KICAgIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFNUQVRVUyIsICRzcWxfc29jayk7DQogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyLXN0YXR1cyB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+PC9jZW50ZXI+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX2FjdCA9PSAic2VydmVydmFycyIpDQogICAgew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVkFSSUFCTEVTIiwgJHNxbF9zb2NrKTsNCiAgICAgZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXIgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQ0KICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInByb2Nlc3NlcyIpDQogICAgew0KICAgICBpZiAoIWVtcHR5KCRraWxsKSkgeyRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOyAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkc3FsX3NvY2spOyBlY2hvICI8Yj5LaWxsaW5nIHByb2Nlc3MgIyIuJGtpbGwuIi4uLiBvay4gaGUgaXMgZGVhZCwgYW1lbi48L2I+Ijt9DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7DQogICAgIGVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+SUQ8L2I+PC90ZD48dGQ+PGI+VVNFUjwvYj48L3RkPjx0ZD48Yj5IT1NUPC9iPjwvdGQ+PHRkPjxiPkRCPC9iPjwvdGQ+PHRkPjxiPkNPTU1BTkQ8L2I+PC90ZD48dGQ+PGI+VElNRTwvYj48L3RkPjx0ZD48Yj5TVEFURTwvYj48L3RkPjx0ZD48Yj5JTkZPPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7IGVjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PHRkPiIuJHJvd1syXS4iPC90ZD48dGQ+Ii4kcm93WzNdLiI8L3RkPjx0ZD4iLiRyb3dbNF0uIjwvdGQ+PHRkPiIuJHJvd1s1XS4iPC90ZD48dGQ+Ii4kcm93WzZdLiI8L3RkPjx0ZD4iLiRyb3dbN10uIjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2FjdD1wcm9jZXNzZXMma2lsbD0iLiRyb3dbMF0uIlwiPjx1PktpbGw8L3U+PC9hPjwvdGQ+PC90cj4iO30NCiAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICB9DQogICAgaWYgKCRzcWxfYWN0ID09ICJnZXRmaWxlIikNCiAgICB7DQogICAgICR0bXBkYiA9ICRzcWxfbG9naW4uIl90bXBkYiI7DQogICAgICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsNCiAgICAgaWYgKCEkc2VsZWN0KSB7bXlzcWxfY3JlYXRlX2RiKCR0bXBkYik7ICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsgJGNyZWF0ZWQgPSAhISRzZWxlY3Q7fQ0KICAgICBpZiAoJHNlbGVjdCkNCiAgICAgew0KICAgICAgJGNyZWF0ZWQgPSBGQUxTRTsNCiAgICAgIG15c3FsX3F1ZXJ5KCJDUkVBVEUgVEFCTEUgYHRtcF9maWxlYCAoIGBWaWV3aW5nIHRoZSBmaWxlIGluIHNhZmVfbW9kZStvcGVuX2Jhc2VkaXJgIExPTkdCTE9CIE5PVCBOVUxMICk7Iik7DQogICAgICBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIElORklMRSBcIiIuYWRkc2xhc2hlcygkc3FsX2dldGZpbGUpLiJcIiBJTlRPIFRBQkxFIHRtcF9maWxlIik7DQogICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gdG1wX2ZpbGU7Iik7DQogICAgICBpZiAoISRyZXN1bHQpIHtlY2hvICI8Yj5FcnJvciBpbiByZWFkaW5nIGZpbGUgKHBlcm1pc2lvbiBkZW5pZWQpITwvYj4iO30NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKSB7JG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpO30NCiAgICAgICAkZiA9ICIiOw0KICAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7JGYgLj0gam9pbiAoIlxyXG4iLCRyb3cpO30NCiAgICAgICBpZiAoZW1wdHkoJGYpKSB7ZWNobyAiPGI+RmlsZSBcIiIuJHNxbF9nZXRmaWxlLiJcIiBkb2VzIG5vdCBleGlzdHMgb3IgZW1wdHkhPC9iPjxicj4iO30NCiAgICAgICBlbHNlIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiOjwvYj48YnI+Ii5ubDJicihodG1sc3BlY2lhbGNoYXJzKCRmKSkuIjxicj4iO30NCiAgICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgICBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSB0bXBfZmlsZTsiKTsNCiAgICAgIH0NCiAgICAgfQ0KICAgICBteXNxbF9kcm9wX2RiKCR0bXBkYik7IC8vY29tbWVudCBpdCBpZiB5b3Ugd2FudCB0byBsZWF2ZSBkYXRhYmFzZQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KIGlmICgkc3FsX3NvY2spDQogew0KICAkYWZmZWN0ZWQgPSBAbXlzcWxfYWZmZWN0ZWRfcm93cygkc3FsX3NvY2spOw0KICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSl7JGFmZmVjdGVkID0gMDt9DQogIGVjaG8gIjx0cj48dGQ+PGNlbnRlcj48Yj5BZmZlY3RlZCByb3dzOiAiLiRhZmZlY3RlZC4iPC9jZW50ZXI+PC90ZD48L3RyPiI7DQogfQ0KIGVjaG8gIjwvdGFibGU+IjsNCn0NCmlmICgkYWN0ID09ICJta2RpciIpDQp7DQogaWYgKCRta2RpciAhPSAkZCkNCiB7DQogIGlmIChmaWxlX2V4aXN0cygkbWtkaXIpKSB7ZWNobyAiPGI+TWFrZSBEaXIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZGlyKS4iXCI8L2I+OiBvYmplY3QgYWxyZWR5IGV4aXN0cyI7fQ0KICBlbHNlaWYgKCFta2RpcigkbWtkaXIpKSB7ZWNobyAiPGI+TWFrZSBEaXIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZGlyKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkIjt9DQogIGVjaG8gIjxicj48YnI+IjsNCiB9DQogJGFjdCA9ICRkc3BhY3QgPSAibHMiOw0KfQ0KaWYgKCRhY3QgPT0gImZ0cHF1aWNrYnJ1dGUiKQ0Kew0KIGVjaG8gIjxiPkZ0cCBRdWljayBicnV0ZTo8L2I+PGJyPiI7DQogaWYgKCF3aW4pIHtlY2hvICJUaGlzIGZ1bmN0aW9ucyBub3Qgd29yayBpbiBXaW5kb3dzITxicj48YnI+Ijt9DQogZWxzZQ0KIHsNCiAgZnVuY3Rpb24gYzk5ZnRwYnJ1dGVjaGVjaygkaG9zdCwkcG9ydCwkdGltZW91dCwkbG9naW4sJHBhc3MsJHNoLCRmcWJfb25seXdpdGhzaCkNCiAgew0KICAgaWYgKCRmcWJfb25seXdpdGhzaCkgeyRUUlVFID0gKCFpbl9hcnJheSgkc2gsYXJyYXkoIi9iaW4vRkFMU0UiLCIvc2Jpbi9ub2xvZ2luIikpKTt9DQogICBlbHNlIHskVFJVRSA9IFRSVUU7fQ0KICAgaWYgKCRUUlVFKQ0KICAgew0KICAgICRzb2NrID0gQGZ0cF9jb25uZWN0KCRob3N0LCRwb3J0LCR0aW1lb3V0KTsNCiAgICBpZiAoQGZ0cF9sb2dpbigkc29jaywkbG9naW4sJHBhc3MpKQ0KICAgIHsNCiAgICAgZWNobyAiPGEgaHJlZj1cImZ0cDovLyIuJGxvZ2luLiI6Ii4kcGFzcy4iQCIuJGhvc3QuIlwiIHRhcmdldD1cIl9ibGFua1wiPjxiPkNvbm5lY3RlZCB0byAiLiRob3N0LiIgd2l0aCBsb2dpbiBcIiIuJGxvZ2luLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRwYXNzLiJcIjwvYj48L2E+Ljxicj4iOw0KICAgICBvYl9mbHVzaCgpOw0KICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQogICB9DQogIH0NCiAgaWYgKCFlbXB0eSgkc3VibWl0KSkNCiAgew0KICAgaWYgKCFpc19udW1lcmljKCRmcWJfbGVuZ2h0KSkgeyRmcWJfbGVuZ2h0ID0gJG5peHB3ZHBlcnBhZ2U7fQ0KICAgJGZwID0gZm9wZW4oIi9ldGMvcGFzc3dkIiwiciIpOw0KICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCBnZXQgL2V0Yy9wYXNzd2QgZm9yIHBhc3N3b3JkLWxpc3QuIjt9DQogICBlbHNlDQogICB7DQogICAgaWYgKCRmcWJfbG9nZ2luZykNCiAgICB7DQogICAgIGlmICgkZnFiX2xvZ2ZpbGUpIHskZnFiX2xvZ2ZwID0gZm9wZW4oJGZxYl9sb2dmaWxlLCJ3Iik7fQ0KICAgICBlbHNlIHskZnFiX2xvZ2ZwID0gRkFMU0U7fQ0KICAgICAkZnFiX2xvZyA9ICJGVFAgUXVpY2sgQnJ1dGUgKGNhbGxlZCBjOTlzaGVsbCB2LiAiLiRzaHZlci4iKSBzdGFydGVkIGF0ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iXHJcblxyXG4iOw0KICAgICBpZiAoJGZxYl9sb2dmaWxlKSB7ZndyaXRlKCRmcWJfbG9nZnAsJGZxYl9sb2csc3RybGVuKCRmcWJfbG9nKSk7fQ0KICAgIH0NCiAgICBvYl9mbHVzaCgpOw0KICAgICRpID0gJHN1Y2Nlc3MgPSAwOw0KICAgICRmdHBxdWlja19zdCA9IGdldG1pY3JvdGltZSgpOw0KICAgIHdoaWxlKCFmZW9mKCRmcCkpDQogICAgew0KICAgICAkc3RyID0gZXhwbG9kZSgiOiIsZmdldHMoJGZwLDIwNDgpKTsNCiAgICAgaWYgKGM5OWZ0cGJydXRlY2hlY2soImxvY2FsaG9zdCIsMjEsMSwkc3RyWzBdLCRzdHJbMF0sJHN0cls2XSwkZnFiX29ubHl3aXRoc2gpKQ0KICAgICB7DQogICAgICBlY2hvICI8Yj5Db25uZWN0ZWQgdG8gIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIiB3aXRoIGxvZ2luIFwiIi4kc3RyWzBdLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRzdHJbMF0uIlwiPC9iPjxicj4iOw0KICAgICAgJGZxYl9sb2cgLj0gIkNvbm5lY3RlZCB0byAiLmdldGVudigiU0VSVkVSX05BTUUiKS4iIHdpdGggbG9naW4gXCIiLiRzdHJbMF0uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHN0clswXS4iXCIsIGF0ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iXHJcbiI7DQogICAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30NCiAgICAgICRzdWNjZXNzKys7DQogICAgICBvYl9mbHVzaCgpOw0KICAgICB9DQogICAgIGlmICgkaSA+ICRmcWJfbGVuZ2h0KSB7YnJlYWs7fQ0KICAgICAkaSsrOw0KICAgIH0NCiAgICBpZiAoJHN1Y2Nlc3MgPT0gMCkge2VjaG8gIk5vIHN1Y2Nlc3MuIGNvbm5lY3Rpb25zISI7ICRmcWJfbG9nIC49ICJObyBzdWNjZXNzLiBjb25uZWN0aW9ucyFcclxuIjt9DQogICAgJGZ0cHF1aWNrX3QgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kZnRwcXVpY2tfc3QsNCk7DQogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Yj5Eb25lITwvYj48YnI+VG90YWwgdGltZSAoc2Vjcy4pOiAiLiRmdHBxdWlja190LiI8YnI+VG90YWwgY29ubmVjdGlvbnM6ICIuJGkuIjxicj5TdWNjZXNzLjogPGZvbnQgY29sb3I9Z3JlZW4+PGI+Ii4kc3VjY2Vzcy4iPC9iPjwvZm9udD48YnI+VW5zdWNjZXNzLjoiLigkaS0kc3VjY2VzcykuIjwvYj48YnI+Q29ubmVjdHMgcGVyIHNlY29uZDogIi5yb3VuZCgkaS8kZnRwcXVpY2tfdCwyKS4iPGJyPiI7DQogICAgJGZxYl9sb2cgLj0gIlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuRG9uZSFcclxuVG90YWwgdGltZSAoc2Vjcy4pOiAiLiRmdHBxdWlja190LiJcclxuVG90YWwgY29ubmVjdGlvbnM6ICIuJGkuIlxyXG5TdWNjZXNzLjogIi4kc3VjY2Vzcy4iXHJcblVuc3VjY2Vzcy46Ii4oJGktJHN1Y2Nlc3MpLiJcclxuQ29ubmVjdHMgcGVyIHNlY29uZDogIi5yb3VuZCgkaS8kZnRwcXVpY2tfdCwyKS4iXHJcbiI7DQogICAgaWYgKCRmcWJfbG9nZnApIHtmc2VlaygkZnFiX2xvZ2ZwLDApOyBmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9DQogICAgaWYgKCRmcWJfbG9nZW1haWwpIHtAbWFpbCgkZnFiX2xvZ2VtYWlsLCJjOTlzaGVsbCB2LiAiLiRzaHZlci4iIHJlcG9ydCIsJGZxYl9sb2cpO30NCiAgICBmY2xvc2UoJGZxYl9sb2dmcCk7DQogICB9DQogIH0NCiAgZWxzZQ0KICB7DQogICAkbG9nZmlsZSA9ICR0bXBkaXJfbG9ncy4iYzk5c2hfZnRwcXVpY2ticnV0ZV8iLmRhdGUoImQubS5ZX0hfaV9zIikuIi5sb2ciOw0KICAgJGxvZ2ZpbGUgPSBzdHJfcmVwbGFjZSgiLy8iLERJUkVDVE9SWV9TRVBBUkFUT1IsJGxvZ2ZpbGUpOw0KICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwiZnRwcXVpY2ticnV0ZVwiPjxicj5SZWFkIGZpcnN0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9XCJmcWJfbGVuZ2h0XCIgdmFsdWU9XCIiLiRuaXhwd2RwZXJwYWdlLiJcIj48YnI+PGJyPlVzZXJzIG9ubHkgd2l0aCBzaGVsbD8mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImZxYl9vbmx5d2l0aHNoXCIgdmFsdWU9XCIxXCI+PGJyPjxicj5Mb2dnaW5nPyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX2xvZ2dpbmdcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj5Mb2dnaW5nIHRvIGZpbGU/Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZxYl9sb2dmaWxlXCIgdmFsdWU9XCIiLiRsb2dmaWxlLiJcIiBzaXplPVwiIi4oc3RybGVuKCRsb2dmaWxlKSsyKihzdHJsZW4oJGxvZ2ZpbGUpLzEwKSkuIlwiPjxicj5Mb2dnaW5nIHRvIGUtbWFpbD8mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2VtYWlsXCIgdmFsdWU9XCIiLiRsb2dfZW1haWwuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2VtYWlsKSsyKihzdHJsZW4oJGxvZ2VtYWlsKS8xMCkpLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkJydXRlXCI+PC9mb3JtPiI7DQogIH0NCiB9DQp9DQppZiAoJGFjdCA9PSAiZCIpDQp7DQogaWYgKCFpc19kaXIoJGQpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkITwvYj48L2NlbnRlcj4iO30NCiBlbHNlDQogew0KICBlY2hvICI8Yj5EaXJlY3RvcnkgaW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+IjsNCiAgaWYgKCEkd2luKQ0KICB7DQogICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOw0KICAgJG93ID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRkKSk7DQogICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQpKTsNCiAgICRyb3dbXSA9ICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJGQpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkZCkpOw0KICB9DQogIGVjaG8gIjx0cj48dGQ+PGI+UGVybXM8L2I+PC90ZD48dGQ+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1jaG1vZCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPjwvYT48dHI+PHRkPjxiPkNyZWF0ZSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlY3RpbWUoJGQpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+QWNjZXNzIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVhdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NT0RJRlkgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZW10aW1lKCRkKSkuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOw0KIH0NCn0NCmlmICgkYWN0ID09ICJwaHBpbmZvIikge0BvYl9jbGVhbigpOyBwaHBpbmZvKCk7IGM5OXNoZXhpdCgpO30NCmlmICgkYWN0ID09ICJzZWN1cml0eSIpDQp7DQogZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb246PC9iPjwvY2VudGVyPjxiPk9wZW4gYmFzZSBkaXI6ICIuJGhvcGVuYmFzZWRpci4iPC9iPjxicj4iOw0KIGlmICghJHdpbikNCiB7DQogIGlmICgkbml4cGFzc3dkKQ0KICB7DQogICBpZiAoJG5peHBhc3N3ZCA9PSAxKSB7JG5peHBhc3N3ZCA9IDA7fQ0KICAgZWNobyAiPGI+Km5peCAvZXRjL3Bhc3N3ZDo8L2I+PGJyPiI7DQogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9zKSkgeyRuaXhwd2RfcyA9IDA7fQ0KICAgaWYgKCFpc19udW1lcmljKCRuaXhwd2RfZSkpIHskbml4cHdkX2UgPSAkbml4cHdkcGVycGFnZTt9DQogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9XCJzZWN1cml0eVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwibml4cGFzc3dkXCIgdmFsdWU9XCIxXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0PVwiIG5hbWU9XCJuaXhwd2Rfc1wiIHZhbHVlPVwiIi4kbml4cHdkX3MuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibml4cHdkX2VcIiB2YWx1ZT1cIiIuJG5peHB3ZF9lLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJWaWV3XCI+PC9mb3JtPjxicj4iOw0KICAgJGkgPSAkbml4cHdkX3M7DQogICB3aGlsZSAoJGkgPCAkbml4cHdkX2UpDQogICB7DQogICAgJHVpZCA9IHBvc2l4X2dldHB3dWlkKCRpKTsNCiAgICBpZiAoJHVpZCkNCiAgICB7DQogICAgICR1aWRbImRpciJdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLnVybGVuY29kZSgkdWlkWyJkaXIiXSkuIlwiPiIuJHVpZFsiZGlyIl0uIjwvYT4iOw0KICAgICBlY2hvIGpvaW4oIjoiLCR1aWQpLiI8YnI+IjsNCiAgICB9DQogICAgJGkrKzsNCiAgIH0NCiAgfQ0KICBlbHNlIHtlY2hvICI8YnI+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1zZWN1cml0eSZuaXhwYXNzd2Q9MSZkPSIuJHVkLiJcIj48Yj48dT5HZXQgL2V0Yy9wYXNzd2Q8L3U+PC9iPjwvYT48YnI+Ijt9DQogfQ0KIGVsc2UNCiB7DQogICR2ID0gJF9TRVJWRVJbIldJTkRJUiJdLiJccmVwYWlyXHNhbSI7DQogIGlmIChmaWxlX2dldF9jb250ZW50cygkdikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1yZWQ+WW91IGNhbid0IGNyYWNrIHdpbm50IHBhc3N3b3JkcygiLiR2LiIpIDwvZm9udD48L2I+PGJyPiI7fQ0KICBlbHNlIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj5Zb3UgY2FuIGNyYWNrIHdpbm50IHBhc3N3b3Jkcy4gPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9c2FtJmQ9Ii4kX1NFUlZFUlsiV0lORElSIl0uIlxccmVwYWlyJmZ0PWRvd25sb2FkXCI+PHU+PGI+RG93bmxvYWQ8L2I+PC91PjwvYT4sIGFuZCB1c2UgbGNwLmNyYWNrKyA/PC9mb250PjwvYj48YnI+Ijt9DQogfQ0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy91c2VyZG9tYWlucyIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9dXNlcmRvbWFpbnMmZD0iLnVybGVuY29kZSgiL2V0YyIpLiImZnQ9dHh0XCI+PHU+PGI+VmlldyBjcGFuZWwgdXNlci1kb21haW5zIGxvZ3M8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi92YXIvY3BhbmVsL2FjY291bnRpbmcubG9nIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1hY2NvdW50aW5nLmxvZyZkPSIudXJsZW5jb2RlKCIvdmFyL2NwYW5lbC8iKS4iXCImZnQ9dHh0Pjx1PjxiPlZpZXcgY3BhbmVsIGxvZ3M8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9aHR0cGQuY29uZiZkPSIudXJsZW5jb2RlKCIvdXNyL2xvY2FsL2FwYWNoZS9jb25mIikuIiZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9aHR0cGQuY29uZiZkPSIudXJsZW5jb2RlKCIvZXRjIikuIiZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvc3lzbG9nLmNvbmYiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPXN5c2xvZy5jb25mJmQ9Ii51cmxlbmNvZGUoIi9ldGMiKS4iJmZ0PXR4dFwiPjx1PjxiPlN5c2xvZyBjb25maWd1cmF0aW9uIChzeXNsb2cuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvbW90ZCIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9bW90ZCZkPSIudXJsZW5jb2RlKCIvZXRjIikuIiZmdD10eHRcIj48dT48Yj5NZXNzYWdlIE9mIFRoZSBEYXk8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvaG9zdHMiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWhvc3RzJmQ9Ii51cmxlbmNvZGUoIi9ldGMiKS4iJmZ0PXR4dFwiPjx1PjxiPkhvc3RzPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9DQogZnVuY3Rpb24gZGlzcGxheXNlY2luZm8oJG5hbWUsJHZhbHVlKSB7aWYgKCFlbXB0eSgkdmFsdWUpKSB7aWYgKCFlbXB0eSgkbmFtZSkpIHskbmFtZSA9ICI8Yj4iLiRuYW1lLiIgLSA8L2I+Ijt9IGVjaG8gJG5hbWUubmwyYnIoJHZhbHVlKS4iPGJyPiI7fX0NCiBkaXNwbGF5c2VjaW5mbygiT1MgVmVyc2lvbj8iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvdmVyc2lvbiIpKTsNCiBkaXNwbGF5c2VjaW5mbygiS2VybmVsIHZlcnNpb24/IixteXNoZWxsZXhlYygic3lzY3RsIC1hIHwgZ3JlcCB2ZXJzaW9uIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIG5hbWUiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy9pc3N1ZS5uZXQiKSk7DQogZGlzcGxheXNlY2luZm8oIkRpc3RyaWIgbmFtZSAoMikiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy8qLXJlYWxpc2UiKSk7DQogZGlzcGxheXNlY2luZm8oIkNQVT8iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvY3B1aW5mbyIpKTsNCiBkaXNwbGF5c2VjaW5mbygiUkFNIixteXNoZWxsZXhlYygiZnJlZSAtbSIpKTsNCiBkaXNwbGF5c2VjaW5mbygiSEREIHNwYWNlIixteXNoZWxsZXhlYygiZGYgLWgiKSk7DQogZGlzcGxheXNlY2luZm8oIkxpc3Qgb2YgQXR0cmlidXRlcyIsbXlzaGVsbGV4ZWMoImxzYXR0ciAtYSIpKTsNCiBkaXNwbGF5c2VjaW5mbygiTW91bnQgb3B0aW9ucyAiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy9mc3RhYiIpKTsNCiBkaXNwbGF5c2VjaW5mbygiSXMgY1VSTCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggY3VybCIpKTsNCiBkaXNwbGF5c2VjaW5mbygiSXMgbHlueCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbHlueCIpKTsNCiBkaXNwbGF5c2VjaW5mbygiSXMgbGlua3MgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGxpbmtzIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJJcyBmZXRjaCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggZmV0Y2giKSk7DQogZGlzcGxheXNlY2luZm8oIklzIEdFVCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggR0VUIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJJcyBwZXJsIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBwZXJsIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJXaGVyZSBpcyBhcGFjaGUiLG15c2hlbGxleGVjKCJ3aGVyZWlzIGFwYWNoZSIpKTsNCiBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgcGVybD8iLG15c2hlbGxleGVjKCJ3aGVyZWlzIHBlcmwiKSk7DQogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBwcm9mdHBkLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHJvZnRwZC5jb25mIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJsb2NhdGUgaHR0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBodHRwZC5jb25mIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJsb2NhdGUgbXkuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBteS5jb25mIikpOw0KIGRpc3BsYXlzZWNpbmZvKCJsb2NhdGUgcHN5Ym5jLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHN5Ym5jLmNvbmYiKSk7DQp9DQppZiAoJGFjdCA9PSAibWtmaWxlIikNCnsNCiBpZiAoJG1rZmlsZSAhPSAkZCkNCiB7DQogIGlmIChmaWxlX2V4aXN0cygkbWtmaWxlKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBvYmplY3QgYWxyZWR5IGV4aXN0cyI7fQ0KICBlbHNlaWYgKCFmb3BlbigkbWtmaWxlLCJ3IikpIHtlY2hvICI8Yj5NYWtlIEZpbGUgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZmlsZSkuIlwiPC9iPjogYWNjZXNzIGRlbmllZCI7fQ0KICBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJG1rZmlsZSk7IGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30gJGYgPSBiYXNlbmFtZSgkbWtmaWxlKTt9DQogfQ0KIGVsc2UgeyRhY3QgPSAkZHNwYWN0ID0gImxzIjt9DQp9DQppZiAoJGFjdCA9PSAiZW5jb2RlciIpDQp7DQogZWNobyAiPHNjcmlwdD5mdW5jdGlvbiBzZXRfZW5jb2Rlcl9pbnB1dCh0ZXh0KSB7ZG9jdW1lbnQuZm9ybXMuZW5jb2Rlci5pbnB1dC52YWx1ZSA9IHRleHQ7fTwvc2NyaXB0PjxjZW50ZXI+PGI+RW5jb2Rlcjo8L2I+PC9jZW50ZXI+PGZvcm0gbmFtZT1cImVuY29kZXJcIiBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ZW5jb2Rlcj48Yj5JbnB1dDo8L2I+PGNlbnRlcj48dGV4dGFyZWEgbmFtZT1cImVuY29kZXJfaW5wdXRcIiBpZD1cImlucHV0XCIgY29scz01MCByb3dzPTU+Ii5AaHRtbHNwZWNpYWxjaGFycygkZW5jb2Rlcl9pbnB1dCkuIjwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJjYWxjdWxhdGVcIj48YnI+PGJyPjwvY2VudGVyPjxiPkhhc2hlczwvYj46PGJyPjxjZW50ZXI+IjsNCiBmb3JlYWNoKGFycmF5KCJtZDUiLCJjcnlwdCIsInNoYTEiLCJjcmMzMiIpIGFzICR2KQ0KIHsNCiAgZWNobyAkdi4iIC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTUwIG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuJHYoJGVuY29kZXJfaW5wdXQpLiJcIiByZWFkb25seT48YnI+IjsNCiB9DQogZWNobyAiPC9jZW50ZXI+PGI+VXJsOjwvYj48Y2VudGVyPjxicj51cmxlbmNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJGVuY29kZXJfaW5wdXQpLiJcIiByZWFkb25seT4NCiA8YnI+dXJsZGVjb2RlIC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycyh1cmxkZWNvZGUoJGVuY29kZXJfaW5wdXQpKS4iXCIgcmVhZG9ubHk+DQogPGJyPjwvY2VudGVyPjxiPkJhc2U2NDo8L2I+PGNlbnRlcj5iYXNlNjRfZW5jb2RlIC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuYmFzZTY0X2VuY29kZSgkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5PjwvY2VudGVyPiI7DQogZWNobyAiPGNlbnRlcj5iYXNlNjRfZGVjb2RlIC0gIjsNCiBpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRlbmNvZGVyX2lucHV0KSkgIT0gJGVuY29kZXJfaW5wdXQpIHtlY2hvICI8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgdmFsdWU9XCJmYWlsZWRcIiBkaXNhYmxlZCByZWFkb25seT4iO30NCiBlbHNlDQogew0KICAkZGViYXNlNjQgPSBiYXNlNjRfZGVjb2RlKCRlbmNvZGVyX2lucHV0KTsNCiAgJGRlYmFzZTY0ID0gc3RyX3JlcGxhY2UoIlwwIiwiWzBdIiwkZGViYXNlNjQpOw0KICAkYSA9IGV4cGxvZGUoIlxyXG4iLCRkZWJhc2U2NCk7DQogICRyb3dzID0gY291bnQoJGEpOw0KICAkZGViYXNlNjQgPSBodG1sc3BlY2lhbGNoYXJzKCRkZWJhc2U2NCk7DQogIGlmICgkcm93cyA9PSAxKSB7ZWNobyAiPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuJGRlYmFzZTY0LiJcIiBpZD1cImRlYmFzZTY0XCIgcmVhZG9ubHk+Ijt9DQogIGVsc2UgeyRyb3dzKys7IGVjaG8gIjx0ZXh0YXJlYSBjb2xzPVwiNDBcIiByb3dzPVwiIi4kcm93cy4iXCIgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIGlkPVwiZGViYXNlNjRcIiByZWFkb25seT4iLiRkZWJhc2U2NC4iPC90ZXh0YXJlYT4iO30NCiAgZWNobyAiJm5ic3A7PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwic2V0X2VuY29kZXJfaW5wdXQoZG9jdW1lbnQuZm9ybXMuZW5jb2Rlci5kZWJhc2U2NC52YWx1ZSlcIj48Yj5ePC9iPjwvYT4iOw0KIH0NCiBlY2hvICI8L2NlbnRlcj48YnI+PGI+QmFzZSBjb252ZXJ0YXRpb25zPC9iPjo8Y2VudGVyPmRlYzJoZXggLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIjsNCiAkYyA9IHN0cmxlbigkZW5jb2Rlcl9pbnB1dCk7DQogZm9yKCRpPTA7JGk8JGM7JGkrKykNCiB7DQogICRoZXggPSBkZWNoZXgob3JkKCRlbmNvZGVyX2lucHV0WyRpXSkpOw0KICBpZiAoJGVuY29kZXJfaW5wdXRbJGldID09ICImIikge2VjaG8gJGVuY29kZXJfaW5wdXRbJGldO30NCiAgZWxzZWlmICgkZW5jb2Rlcl9pbnB1dFskaV0gIT0gIlxcIikge2VjaG8gIiUiLiRoZXg7fQ0KIH0NCiBlY2hvICJcIiByZWFkb25seT48YnI+PC9jZW50ZXI+PC9mb3JtPiI7DQp9DQppZiAoJGFjdCA9PSAiZnNidWZmIikNCnsNCiAkYXJyX2NvcHkgPSAkc2Vzc19kYXRhWyJjb3B5Il07DQogJGFycl9jdXQgPSAkc2Vzc19kYXRhWyJjdXQiXTsNCiAkYXJyID0gYXJyYXlfbWVyZ2UoJGFycl9jb3B5LCRhcnJfY3V0KTsNCiBpZiAoY291bnQoJGFycikgPT0gMCkge2VjaG8gIjxjZW50ZXI+PGI+QnVmZmVyIGlzIGVtcHR5ITwvYj48L2NlbnRlcj4iO30NCiBlbHNlIHtlY2hvICI8Yj5GaWxlLVN5c3RlbSBidWZmZXI8L2I+PGJyPjxicj4iOyAkbHNfYXJyID0gJGFycjsgJGRpc3BfZnVsbHBhdGggPSBUUlVFOyAkYWN0ID0gImxzIjt9DQp9DQppZiAoJGFjdCA9PSAic2VsZnJlbW92ZSIpDQp7DQogaWYgKCgkc3VibWl0ID09ICRybmRjb2RlKSBhbmQgKCRzdWJtaXQgIT0gIiIpKQ0KIHsNCiAgaWYgKHVubGluayhfX0ZJTEVfXykpIHtAb2JfY2xlYW4oKTsgZWNobyAiVGhhbmtzIGZvciB1c2luZyBjOTlzaGVsbCB2LiIuJHNodmVyLiIhIjsgYzk5c2hleGl0KCk7IH0NCiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBkZWxldGUgIi5fX0ZJTEVfXy4iITwvYj48L2NlbnRlcj4iO30NCiB9DQogZWxzZQ0KIHsNCiAgaWYgKCFlbXB0eSgkcm5kY29kZSkpIHtlY2hvICI8Yj5FcnJvcjogaW5jb3JyZWN0IGNvbmZpbWF0aW9uITwvYj4iO30NCiAgJHJuZCA9IHJhbmQoMCw5KS5yYW5kKDAsOSkucmFuZCgwLDkpOw0KICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9c2VsZnJlbW92ZT48Yj5TZWxmLXJlbW92ZTogIi5fX0ZJTEVfXy4iIDxicj48Yj5BcmUgeW91IHN1cmU/PGJyPkZvciBjb25maXJtYXRpb24sIGVudGVyIFwiIi4kcm5kLiJcIjwvYj46Jm5ic3A7PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cm5kY29kZSB2YWx1ZT1cIiIuJHJuZC4iXCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXN1Ym1pdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJZRVNcIj48L2Zvcm0+IjsNCiB9DQp9DQppZiAoJGFjdCA9PSAidXBkYXRlIikgeyRyZXQgPSBjOTlzaF9nZXR1cGRhdGUoISEkY29uZmlybXVwZGF0ZSk7IGVjaG8gIjxiPiIuJHJldC4iPC9iPiI7IGlmIChzdHJpc3RyKCRyZXQsIm5ldyB2ZXJzaW9uIikpIHtlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPWJ1dHRvbiBvbmNsaWNrPVwibG9jYXRpb24uaHJlZj0nIi4kc3VybC4iYWN0PXVwZGF0ZSZjb25maXJtdXBkYXRlPTEnO1wiIHZhbHVlPVwiVXBkYXRlIG5vd1wiPiI7fX0NCmlmICgkYWN0ID09ICJmZWVkYmFjayIpDQp7DQogJHN1cHBtYWlsID0gYmFzZTY0X2RlY29kZSgiWXprNWMyaGxiR3hBWTJOMFpXRnRMbkoxIik7DQogaWYgKCFlbXB0eSgkc3VibWl0KSkNCiB7DQogICR0aWNrZXQgPSBzdWJzdHIobWQ1KG1pY3JvdGltZSgpK3JhbmQoMSwxMDAwKSksMCw2KTsNCiAgJGJvZHkgPSAiYzk5c2hlbGwgdi4iLiRzaHZlci4iIGZlZWRiYWNrICMiLiR0aWNrZXQuIlxuTmFtZTogIi5odG1sc3BlY2lhbGNoYXJzKCRmZGJrX25hbWUpLiJcbkUtbWFpbDogIi5odG1sc3BlY2lhbGNoYXJzKCRmZGJrX2VtYWlsKS4iXG5NZXNzYWdlOlxuIi5odG1sc3BlY2lhbGNoYXJzKCRmZGJrX2JvZHkpLiJcblxuSVA6ICIuJFJFTU9URV9BRERSOw0KICBpZiAoIWVtcHR5KCRmZGJrX3JlZikpDQogIHsNCiAgICR0bXAgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICBvYl9jbGVhbigpOw0KICAgcGhwaW5mbygpOw0KICAgJHBocGluZm8gPSBiYXNlNjRfZW5jb2RlKG9iX2dldF9jb250ZW50cygpKTsNCiAgIG9iX2NsZWFuKCk7DQogICBlY2hvICR0bXA7DQogICAkYm9keSAuPSAiXG4iLiJwaHBpbmZvKCk6ICIuJHBocGluZm8uIlxuIi4iXCRHTE9CQUxTPSIuYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJEdMT0JBTFMpKS4iXG4iOw0KICB9DQogIG1haWwoJHN1cHBtYWlsLCJjOTlzaGVsbCB2LiIuJHNodmVyLiIgZmVlZGJhY2sgIyIuJHRpY2tldCwkYm9keSwiRlJPTTogIi4kc3VwcG1haWwpOw0KICBlY2hvICI8Y2VudGVyPjxiPlRoYW5rcyBmb3IgeW91ciBmZWVkYmFjayEgWW91ciB0aWNrZXQgSUQ6ICIuJHRpY2tldC4iLjwvYj48L2NlbnRlcj4iOw0KIH0NCiBlbHNlIHtlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ZmVlZGJhY2s+PGI+RmVlZGJhY2sgb3IgcmVwb3J0IGJ1ZyAoIi5zdHJfcmVwbGFjZShhcnJheSgiQCIsIi4iKSxhcnJheSgiW2F0XSIsIltkb3RdIiksJHN1cHBtYWlsKS4iKTo8YnI+PGJyPllvdXIgbmFtZTogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZkYmtfbmFtZVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmZGJrX25hbWUpLiJcIj48YnI+PGJyPllvdXIgZS1tYWlsOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZmRia19lbWFpbFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmZGJrX2VtYWlsKS4iXCI+PGJyPjxicj5NZXNzYWdlOjxicj48dGV4dGFyZWEgbmFtZT1cImZkYmtfYm9keVwiIGNvbHM9ODAgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfYm9keSkuIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmRia19yZWZcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRIVFRQX1JFRkVSRVIpLiJcIj48YnI+PGJyPkF0dGFjaCBzZXJ2ZXItaW5mbyAqIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZmRia19zZXJ2aW5mXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD48YnI+PGJyPlRoZXJlIGFyZSBubyBjaGVja2luZyBpbiB0aGUgZm9ybS48YnI+PGJyPiogLSBzdHJvbmdseSByZWNvbW1lbmRlZCwgaWYgeW91IHJlcG9ydCBidWcsIGJlY2F1c2Ugd2UgbmVlZCBpdCBmb3IgYnVnLWZpeC48YnI+PGJyPldlIHVuZGVyc3RhbmQgbGFuZ3VhZ2VzOiBFbmdsaXNoLCBSdXNzaWFuLjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCJTZW5kXCI+PC9mb3JtPiI7fQ0KfQ0KaWYgKCRhY3QgPT0gInNlYXJjaCIpDQp7DQogZWNobyAiPGI+U2VhcmNoIGluIGZpbGUtc3lzdGVtOjwvYj48YnI+IjsNCiBpZiAoZW1wdHkoJHNlYXJjaF9pbikpIHskc2VhcmNoX2luID0gJGQ7fQ0KIGlmIChlbXB0eSgkc2VhcmNoX25hbWUpKSB7JHNlYXJjaF9uYW1lID0gIiguKikiOyAkc2VhcmNoX25hbWVfcmVnZXhwID0gMTt9DQogaWYgKGVtcHR5KCRzZWFyY2hfdGV4dF93d28pKSB7JHNlYXJjaF90ZXh0X3JlZ2V4cCA9IDA7fQ0KIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogew0KICAkZm91bmQgPSBhcnJheSgpOw0KICAkZm91bmRfZCA9IDA7DQogICRmb3VuZF9mID0gMDsNCiAgJHNlYXJjaF9pX2YgPSAwOw0KICAkc2VhcmNoX2lfZCA9IDA7DQogICRhID0gYXJyYXkNCiAgKA0KICAgIm5hbWUiPT4kc2VhcmNoX25hbWUsICJuYW1lX3JlZ2V4cCI9PiRzZWFyY2hfbmFtZV9yZWdleHAsDQogICAidGV4dCI9PiRzZWFyY2hfdGV4dCwgInRleHRfcmVnZXhwIj0+JHNlYXJjaF90ZXh0X3JlZ3hwLA0KICAgInRleHRfd3dvIj0+JHNlYXJjaF90ZXh0X3d3bywNCiAgICJ0ZXh0X2NzIj0+JHNlYXJjaF90ZXh0X2NzLA0KICAgInRleHRfbm90Ij0+JHNlYXJjaF90ZXh0X25vdA0KICApOw0KICAkc2VhcmNodGltZSA9IGdldG1pY3JvdGltZSgpOw0KICAkaW4gPSBhcnJheV91bmlxdWUoZXhwbG9kZSgiOyIsJHNlYXJjaF9pbikpOw0KICBmb3JlYWNoKCRpbiBhcyAkdikge2M5OWZzZWFyY2goJHYpO30NCiAgJHNlYXJjaHRpbWUgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kc2VhcmNodGltZSw0KTsNCiAgaWYgKGNvdW50KCRmb3VuZCkgPT0gMCkge2VjaG8gIjxiPk5vIGZpbGVzIGZvdW5kITwvYj4iO30NCiAgZWxzZQ0KICB7DQogICAkbHNfYXJyID0gJGZvdW5kOw0KICAgJGRpc3BfZnVsbHBhdGggPSBUUlVFOw0KICAgJGFjdCA9ICJscyI7DQogIH0NCiB9DQogZWNobyAiPGZvcm0gbWV0aG9kPVBPU1Q+DQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9XCIiLiRkc3BhY3QuIlwiPg0KPGI+U2VhcmNoIGZvciAoZmlsZS9mb2xkZXIgbmFtZSk6IDwvYj48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic2VhcmNoX25hbWVcIiBzaXplPVwiIi5yb3VuZChzdHJsZW4oJHNlYXJjaF9uYW1lKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfbmFtZSkuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX25hbWVfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi4oJHNlYXJjaF9uYW1lX3JlZ2V4cCA9PSAxPyIgY2hlY2tlZCI6IiIpLiI+IC0gcmVnZXhwDQo8YnI+PGI+U2VhcmNoIGluIChleHBsb2RlIFwiO1wiKTogPC9iPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzZWFyY2hfaW5cIiBzaXplPVwiIi5yb3VuZChzdHJsZW4oJHNlYXJjaF9pbikrMjUpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc2VhcmNoX2luKS4iXCI+DQo8YnI+PGJyPjxiPlRleHQ6PC9iPjxicj48dGV4dGFyZWEgbmFtZT1cInNlYXJjaF90ZXh0XCIgY29scz1cIjEyMlwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc2VhcmNoX3RleHQpLiI8L3RleHRhcmVhPg0KPGJyPjxicj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X3JlZ2V4cFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9yZWdleHAgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIHJlZ2V4cA0KJm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF93d29cIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfd3dvID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSA8dT53PC91PmhvbGUgd29yZHMgb25seQ0KJm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9jc1wiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9jcyA9PSAxPyIgY2hlY2tlZCI6IiIpLiI+IC0gY2FzPHU+ZTwvdT4gc2Vuc2l0aXZlDQombmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X25vdFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9ub3QgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIGZpbmQgZmlsZXMgPHU+Tk9UPC91PiBjb250YWluaW5nIHRoZSB0ZXh0DQo8YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIlNlYXJjaFwiPjwvZm9ybT4iOw0KIGlmICgkYWN0ID09ICJscyIpIHskZHNwYWN0ID0gJGFjdDsgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Yj5TZWFyY2ggdG9vayAiLiRzZWFyY2h0aW1lLiIgc2VjcyAoIi4kc2VhcmNoX2lfZi4iIGZpbGVzIGFuZCAiLiRzZWFyY2hfaV9kLiIgZm9sZGVycywgIi5yb3VuZCgoJHNlYXJjaF9pX2YrJHNlYXJjaF9pX2QpLyRzZWFyY2h0aW1lLDQpLiIgb2JqZWN0cyBwZXIgc2Vjb25kKS48L2I+PGJyPjxicj4iO30NCn0NCmlmICgkYWN0ID09ICJjaG1vZCIpDQp7DQogJG1vZGUgPSBmaWxlcGVybXMoJGQuJGYpOw0KIGlmICghJG1vZGUpIHtlY2hvICI8Yj5DaGFuZ2UgZmlsZS1tb2RlIHdpdGggZXJyb3I6PC9iPiBjYW4ndCBnZXQgY3VycmVudCB2YWx1ZS4iO30NCiBlbHNlDQogew0KICAkZm9ybSA9IFRSVUU7DQogIGlmICgkY2htb2Rfc3VibWl0KQ0KICB7DQogICAkb2N0ZXQgPSAiMCIuYmFzZV9jb252ZXJ0KCgkY2htb2Rfb1siciJdPzE6MCkuKCRjaG1vZF9vWyJ3Il0/MTowKS4oJGNobW9kX29bIngiXT8xOjApLigkY2htb2RfZ1siciJdPzE6MCkuKCRjaG1vZF9nWyJ3Il0/MTowKS4oJGNobW9kX2dbIngiXT8xOjApLigkY2htb2Rfd1siciJdPzE6MCkuKCRjaG1vZF93WyJ3Il0/MTowKS4oJGNobW9kX3dbIngiXT8xOjApLDIsOCk7DQogICBpZiAoY2htb2QoJGQuJGYsJG9jdGV0KSkgeyRhY3QgPSAibHMiOyAkZm9ybSA9IEZBTFNFOyAkZXJyID0gIiI7fQ0KICAgZWxzZSB7JGVyciA9ICJDYW4ndCBjaG1vZCB0byAiLiRvY3RldC4iLiI7fQ0KICB9DQogIGlmICgkZm9ybSkNCiAgew0KICAgJHBlcm1zID0gcGFyc2VfcGVybXMoJG1vZGUpOw0KICAgZWNobyAiPGI+Q2hhbmdpbmcgZmlsZS1tb2RlICgiLiRkLiRmLiIpLCAiLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiIgKCIuc3Vic3RyKGRlY29jdChmaWxlcGVybXMoJGQuJGYpKSwtNCw0KS4iKTwvYj48YnI+Ii4oJGVycj8iPGI+RXJyb3I6PC9iPiAiLiRlcnI6IiIpLiI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZikuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1jaG1vZD48dGFibGUgYWxpZ249bGVmdCB3aWR0aD0zMDAgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz01Pjx0cj48dGQ+PGI+T3duZXI8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29bcl0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9Y2htb2Rfb1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfb1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L3RkPjx0ZD48Yj5Hcm91cDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3ddIHZhbHVlPTEiLigkcGVybXNbImciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3hdIHZhbHVlPTEiLigkcGVybXNbImciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjx0ZD48Yj5Xb3JsZDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3ddIHZhbHVlPTEiLigkcGVybXNbInciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3hdIHZhbHVlPTEiLigkcGVybXNbInciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjwvdHI+PHRyPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1jaG1vZF9zdWJtaXQgdmFsdWU9XCJTYXZlXCI+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPiI7DQogIH0NCiB9DQp9DQppZiAoJGFjdCA9PSAidXBsb2FkIikNCnsNCiAkdXBsb2FkbWVzcyA9ICIiOw0KICR1cGxvYWRwYXRoID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR1cGxvYWRwYXRoKTsNCiBpZiAoZW1wdHkoJHVwbG9hZHBhdGgpKSB7JHVwbG9hZHBhdGggPSAkZDt9DQogZWxzZWlmIChzdWJzdHIoJHVwbG9hZHBhdGgsLTEpICE9ICIvIikgeyR1cGxvYWRwYXRoIC49ICIvIjt9DQogaWYgKCFlbXB0eSgkc3VibWl0KSkNCiB7DQogIGdsb2JhbCAkSFRUUF9QT1NUX0ZJTEVTOw0KICAkdXBsb2FkZmlsZSA9ICRIVFRQX1BPU1RfRklMRVNbInVwbG9hZGZpbGUiXTsNCiAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZVsidG1wX25hbWUiXSkpDQogIHsNCiAgIGlmIChlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlWyJuYW1lIl07fQ0KICAgZWxzZSB7JGRlc3RpbiA9ICR1c2VyZmlsZW5hbWU7fQ0KICAgaWYgKCFtb3ZlX3VwbG9hZGVkX2ZpbGUoJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0sJHVwbG9hZHBhdGguJGRlc3RpbikpIHskdXBsb2FkbWVzcyAuPSAiRXJyb3IgdXBsb2FkaW5nIGZpbGUgIi4kdXBsb2FkZmlsZVsibmFtZSJdLiIgKGNhbid0IGNvcHkgXCIiLiR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLiJcIiB0byBcIiIuJHVwbG9hZHBhdGguJGRlc3Rpbi4iXCIhPGJyPiI7fQ0KICB9DQogIGVsc2VpZiAoIWVtcHR5KCR1cGxvYWR1cmwpKQ0KICB7DQogICBpZiAoIWVtcHR5KCR1cGxvYWRmaWxlbmFtZSkpIHskZGVzdGluID0gJHVwbG9hZGZpbGVuYW1lO30NCiAgIGVsc2UNCiAgIHsNCiAgICAkZGVzdGluID0gZXhwbG9kZSgiLyIsJGRlc3Rpbik7DQogICAgJGRlc3RpbiA9ICRkZXN0aW5bY291bnQoJGRlc3RpbiktMV07DQogICAgaWYgKGVtcHR5KCRkZXN0aW4pKQ0KICAgIHsNCiAgICAgJGkgPSAwOw0KICAgICAkYiA9ICIiOw0KICAgICB3aGlsZShmaWxlX2V4aXN0cygkdXBsb2FkcGF0aC4kZGVzdGluKSkge2lmICgkaSA+IDApIHskYiA9ICJfIi4kaTt9ICRkZXN0aW4gPSAiaW5kZXgiLiRiLiIuaHRtbCI7ICRpKys7fX0NCiAgIH0NCiAgIGlmICgoIWVyZWdpKCJodHRwOi8vIiwkdXBsb2FkdXJsKSkgYW5kICghZXJlZ2koImh0dHBzOi8vIiwkdXBsb2FkdXJsKSkgYW5kICghZXJlZ2koImZ0cDovLyIsJHVwbG9hZHVybCkpKSB7ZWNobyAiPGI+SW5jb3JlY3QgdXJsITwvYj48YnI+Ijt9DQogICBlbHNlDQogICB7DQogICAgJHN0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHVwbG9hZHVybCk7DQogICAgJGR0ID0gcm91bmQoZ2V0bWljcm90aW1lKCktJHN0LDQpOw0KICAgIGlmICghJGNvbnRlbnQpIHskdXBsb2FkbWVzcyAuPSAgIkNhbid0IGRvd25sb2FkIGZpbGUhPGJyPiI7fQ0KICAgIGVsc2UNCiAgICB7DQogICAgIGlmICgkZmlsZXN0ZWFsdGgpIHskc3RhdCA9IHN0YXQoJHVwbG9hZHBhdGguJGRlc3Rpbik7fQ0KICAgICAkZnAgPSBmb3BlbigkdXBsb2FkcGF0aC4kZGVzdGluLCJ3Iik7DQogICAgIGlmICghJGZwKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHdyaXRpbmcgdG8gZmlsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJGRlc3RpbikuIiE8YnI+Ijt9DQogICAgIGVsc2UNCiAgICAgew0KICAgICAgZndyaXRlKCRmcCwkY29udGVudCxzdHJsZW4oJGNvbnRlbnQpKTsNCiAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCR1cGxvYWRwYXRoLiRkZXN0aW4sJHN0YXRbOV0sJHN0YXRbOF0pO30NCiAgICAgfQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBpZiAoJG1pbmlmb3JtKQ0KIHsNCiAgZWNobyAiPGI+Ii4kdXBsb2FkbWVzcy4iPC9iPiI7DQogICRhY3QgPSAibHMiOw0KIH0NCiBlbHNlDQogew0KICBlY2hvICI8Yj5GaWxlIHVwbG9hZDo8L2I+PGJyPjxiPiIuJHVwbG9hZG1lc3MuIjwvYj48Zm9ybSBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIGFjdGlvbj1cIiIuJHN1cmwuImFjdD11cGxvYWQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPg0KU2VsZWN0IGZpbGUgb24geW91ciBsb2NhbCBjb21wdXRlcjogPGlucHV0IG5hbWU9XCJ1cGxvYWRmaWxlXCIgdHlwZT1cImZpbGVcIj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7b3I8YnI+DQpJbnB1dCBVUkw6IDxpbnB1dCBuYW1lPVwidXBsb2FkdXJsXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdXBsb2FkdXJsKS4iXCIgc2l6ZT1cIjcwXCI+PGJyPjxicj4NClNhdmUgdGhpcyBmaWxlIGRpcjogPGlucHV0IG5hbWU9XCJ1cGxvYWRwYXRoXCIgc2l6ZT1cIjcwXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj4NCkZpbGUtbmFtZSAoYXV0by1maWxsKTogPGlucHV0IG5hbWU9dXBsb2FkZmlsZW5hbWUgc2l6ZT0yNT48YnI+PGJyPg0KPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT11cGxvYWRhdXRvbmFtZSB2YWx1ZT0xIGlkPWRmND4mbmJzcDtjb252ZXJ0IGZpbGUgbmFtZSB0byBsb3ZlcmNhc2U8YnI+PGJyPg0KPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiVXBsb2FkXCI+DQo8L2Zvcm0+IjsNCiB9DQp9DQppZiAoJGFjdCA9PSAiZGVsZXRlIikNCnsNCiAkZGVsZXJyID0gIiI7DQogZm9yZWFjaCAoJGFjdGJveCBhcyAkdikNCiB7DQogICRyZXN1bHQgPSBGQUxTRTsNCiAgJHJlc3VsdCA9IGZzX3Jtb2JqKCR2KTsNCiAgaWYgKCEkcmVzdWx0KSB7JGRlbGVyciAuPSAiQ2FuJ3QgZGVsZXRlICIuaHRtbHNwZWNpYWxjaGFycygkdikuIjxicj4iO30NCiB9DQogaWYgKCFlbXB0eSgkZGVsZXJyKSkge2VjaG8gIjxiPkRlbGV0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kZGVsZXJyO30NCiAkYWN0ID0gImxzIjsNCn0NCmlmICghJHVzZWZzYnVmZikNCnsNCiBpZiAoKCRhY3QgPT0gInBhc3RlIikgb3IgKCRhY3QgPT0gImNvcHkiKSBvciAoJGFjdCA9PSAiY3V0Iikgb3IgKCRhY3QgPT0gInVuc2VsZWN0IikpIHtlY2hvICI8Y2VudGVyPjxiPlNvcnJ5LCBidWZmZXIgaXMgZGlzYWJsZWQuIEZvciBlbmFibGUsIHNldCBkaXJlY3RpdmUgXCJcJHVzZUZTYnVmZlwiIGFzIFRSVUUuPC9jZW50ZXI+Ijt9DQp9DQplbHNlDQp7DQogaWYgKCRhY3QgPT0gImNvcHkiKSB7JGVyciA9ICIiOyAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJGFjdGJveCk7IGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJGFjdCA9ICJscyI7IH0NCiBlbHNlaWYgKCRhY3QgPT0gImN1dCIpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImN1dCJdLCRhY3Rib3gpOyBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICRhY3QgPSAibHMiO30NCiBlbHNlaWYgKCRhY3QgPT0gInVuc2VsZWN0Iikge2ZvcmVhY2ggKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJHYsJGFjdGJveCkpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9fSBmb3JlYWNoICgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJHYsJGFjdGJveCkpIHt1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pO319IGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJGFjdCA9ICJscyI7fQ0KIGlmICgkYWN0ZW1wdHlidWZmKSB7JHNlc3NfZGF0YVsiY29weSJdID0gJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheSgpOyBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7fQ0KIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikNCiB7DQogICRwc3RlcnIgPSAiIjsNCiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KQ0KICB7DQogICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICBpZiAoIWZzX2NvcHlfb2JqKCR2LCR0bykpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30NCiAgfQ0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19tb3ZlX29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgbW92ZSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICB9DQogIGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgaWYgKCFlbXB0eSgkcHN0ZXJyKSkge2VjaG8gIjxiPlBhc3Rpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRwc3RlcnI7fQ0KICAkYWN0ID0gImxzIjsNCiB9DQogZWxzZWlmICgkYWN0YXJjYnVmZikNCiB7DQogICRhcmNlcnIgPSAiIjsNCiAgaWYgKHN1YnN0cigkYWN0YXJjYnVmZl9wYXRoLC03LDcpID09ICIudGFyLmd6IikgeyRleHQgPSAiLnRhci5neiI7fQ0KICBlbHNlIHskZXh0ID0gIi50YXIuZ3oiO30NCiAgaWYgKCRleHQgPT0gIi50YXIuZ3oiKSB7JGNtZGxpbmUgPSAidGFyIGNmenYiO30NCiAgJGNtZGxpbmUgLj0gIiAiLiRhY3RhcmNidWZmX3BhdGg7DQogICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKTsNCiAgZm9yZWFjaCgkb2JqZWN0cyBhcyAkdikNCiAgew0KICAgJHYgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHYpOw0KICAgaWYgKHN1YnN0cigkdiwwLHN0cmxlbigkZCkpID09ICRkKSB7JHYgPSBiYXNlbmFtZSgkdik7fQ0KICAgaWYgKGlzX2RpcigkdikpDQogICB7DQogICAgaWYgKHN1YnN0cigkdiwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR2IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICR2IC49ICIqIjsNCiAgIH0NCiAgICRjbWRsaW5lIC49ICIgIi4kdjsNCiAgfQ0KICAkdG1wID0gcmVhbHBhdGgoIi4iKTsNCiAgY2hkaXIoJGQpOw0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZGxpbmUpOw0KICBjaGRpcigkdG1wKTsNCiAgaWYgKGVtcHR5KCRyZXQpKSB7JGFyY2VyciAuPSAiQ2FuJ3QgY2FsbCBhcmNoaXZhdG9yICgiLmh0bWxzcGVjaWFsY2hhcnMoc3RyMm1pbmkoJGNtZGxpbmUsNjApKS4iKSE8YnI+Ijt9DQogICRyZXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkcmV0KTsNCiAgJHJldCA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgaWYgKCRjb3B5X3Vuc2V0KSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0NCiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpDQogIHsNCiAgIGlmIChpbl9hcnJheSgkdiwkcmV0KSkge2ZzX3Jtb2JqKCR2KTt9DQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICB9DQogIGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgaWYgKCFlbXB0eSgkYXJjZXJyKSkge2VjaG8gIjxiPkFyY2hpdmF0aW9uIGVycm9yczo8L2I+PGJyPiIuJGFyY2Vycjt9DQogICRhY3QgPSAibHMiOw0KIH0NCiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpDQogew0KICAkcHN0ZXJyID0gIiI7DQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19jb3B5X29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30NCiAgfQ0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19tb3ZlX29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7DQogIH0NCiAgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOw0KICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICRhY3QgPSAibHMiOw0KIH0NCn0NCmlmICgkYWN0ID09ICJjbWQiKQ0Kew0KaWYgKHRyaW0oJGNtZCkgPT0gInBzIC1hdXgiKSB7JGFjdCA9ICJwcm9jZXNzZXMiO30NCmVsc2VpZiAodHJpbSgkY21kKSA9PSAidGFza2xpc3QiKSB7JGFjdCA9ICJwcm9jZXNzZXMiO30NCmVsc2UNCnsNCiBAY2hkaXIoJGNoZGlyKTsNCiBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KIHsNCiAgZWNobyAiPGI+UmVzdWx0IG9mIGV4ZWN1dGlvbiB0aGlzIGNvbW1hbmQ8L2I+Ojxicj4iOw0KICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgQGNoZGlyKCRkKTsNCiAgJHJldCA9IG15c2hlbGxleGVjKCRjbWQpOw0KICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogIGlmICgkY21kX3R4dCkNCiAgew0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcmV0KSkrMTsNCiAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDt9DQogICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCIgcmVhZG9ubHk+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3RleHRhcmVhPiI7DQogIH0NCiAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogIEBjaGRpcigkb2xkZGlyKTsNCiB9DQogZWxzZSB7ZWNobyAiPGI+RXhlY3V0aW9uIGNvbW1hbmQ8L2I+IjsgaWYgKGVtcHR5KCRjbWRfdHh0KSkgeyRjbWRfdHh0ID0gVFJVRTt9fQ0KIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1jbWQ+PHRleHRhcmVhIG5hbWU9Y21kIGNvbHM9MTIyIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiI8L3RleHRhcmVhPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjbWRfdHh0XCIgdmFsdWU9XCIxXCIiOyBpZiAoJGNtZF90eHQpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PC9mb3JtPiI7DQp9DQp9DQppZiAoJGFjdCA9PSAibHMiKQ0Kew0KIGlmIChjb3VudCgkbHNfYXJyKSA+IDApIHskbGlzdCA9ICRsc19hcnI7fQ0KIGVsc2UNCiB7DQogICRsaXN0ID0gYXJyYXkoKTsNCiAgaWYgKCRoID0gQG9wZW5kaXIoJGQpKQ0KICB7DQogICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkgeyRsaXN0W10gPSAkZC4kbzt9DQogICBjbG9zZWRpcigkaCk7DQogIH0NCiAgZWxzZSB7fQ0KIH0NCiBpZiAoY291bnQoJGxpc3QpID09IDApIHtlY2hvICI8Y2VudGVyPjxiPkNhbid0IG9wZW4gZm9sZGVyICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiIpITwvYj48L2NlbnRlcj4iO30NCiBlbHNlDQogew0KICAvL0J1aWxkaW5nIGFycmF5DQogICRvYmplY3RzID0gYXJyYXkoKTsNCiAgJHZkID0gImYiOyAvL1ZpZXdpbmcgbW9kZQ0KICBpZiAoJHZkID09ICJmIikNCiAgew0KICAgJG9iamVjdHNbImhlYWQiXSA9IGFycmF5KCk7DQogICAkb2JqZWN0c1siZm9sZGVycyJdID0gYXJyYXkoKTsNCiAgICRvYmplY3RzWyJsaW5rcyJdID0gYXJyYXkoKTsNCiAgICRvYmplY3RzWyJmaWxlcyJdID0gYXJyYXkoKTsNCiAgIGZvcmVhY2ggKCRsaXN0IGFzICR2KQ0KICAgew0KICAgICRvID0gYmFzZW5hbWUoJHYpOw0KICAgICRyb3cgPSBhcnJheSgpOw0KICAgIGlmICgkbyA9PSAiLiIpIHskcm93W10gPSAkZC4kbzsgJHJvd1tdID0gIkxJTksiO30NCiAgICBlbHNlaWYgKCRvID09ICIuLiIpIHskcm93W10gPSAkZC4kbzsgJHJvd1tdID0gIkxJTksiO30NCiAgICBlbHNlaWYgKGlzX2RpcigkdikpDQogICAgew0KICAgICBpZiAoaXNfbGluaygkdikpIHskdHlwZSA9ICJMSU5LIjt9DQogICAgIGVsc2UgeyR0eXBlID0gIkRJUiI7fQ0KICAgICAkcm93W10gPSAkdjsNCiAgICAgJHJvd1tdID0gJHR5cGU7DQogICAgfQ0KICAgIGVsc2VpZihpc19maWxlKCR2KSkgeyRyb3dbXSA9ICR2OyAkcm93W10gPSBmaWxlc2l6ZSgkdik7fQ0KICAgICRyb3dbXSA9IGZpbGVtdGltZSgkdik7DQogICAgaWYgKCEkd2luKQ0KICAgIHsNCiAgICAgJG93ID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCR2KSk7DQogICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOw0KICAgICAkcm93W10gPSAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCR2KSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJHYpKTsNCiAgICB9DQogICAgJHJvd1tdID0gZmlsZXBlcm1zKCR2KTsNCiAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JG9iamVjdHNbImhlYWQiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyRvYmplY3RzWyJsaW5rcyJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskb2JqZWN0c1siZm9sZGVycyJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JG9iamVjdHNbImZpbGVzIl1bXSA9ICRyb3c7fQ0KICAgICRpKys7DQogICB9DQogICAkcm93ID0gYXJyYXkoKTsNCiAgICRyb3dbXSA9ICI8Yj5OYW1lPC9iPiI7DQogICAkcm93W10gPSAiPGI+U2l6ZTwvYj4iOw0KICAgJHJvd1tdID0gIjxiPk1vZGlmeTwvYj4iOw0KICAgaWYgKCEkd2luKQ0KICB7JHJvd1tdID0gIjxiPk93bmVyL0dyb3VwPC9iPiI7fQ0KICAgJHJvd1tdID0gIjxiPlBlcm1zPC9iPiI7DQogICAkcm93W10gPSAiPGI+QWN0aW9uPC9iPiI7DQogICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRzb3J0KTsNCiAgICRzb3J0ID0gJHBhcnNlc29ydFswXS4kcGFyc2Vzb3J0WzFdOw0KICAgJGsgPSAkcGFyc2Vzb3J0WzBdOw0KICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHBhcnNlc29ydFsxXSA9ICJkIjt9DQogICAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImc29ydD0iLiRrLigkcGFyc2Vzb3J0WzFdID09ICJhIj8iZCI6ImEiKS4iXCI+IjsNCiAgICR5IC49ICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfIi4oJHNvcnRbMV0gPT0gImEiPyJhc2MiOiJkZXNjIikuIlwiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYWx0PVwiIi4oJHBhcnNlc29ydFsxXSA9PSAiYSI/IkFzYy4iOiJEZXNjIikuIlwiIGJvcmRlcj1cIjBcIj48L2E+IjsNCiAgICRyb3dbJGtdIC49ICR5Ow0KICAgZm9yKCRpPTA7JGk8Y291bnQoJHJvdyktMTskaSsrKQ0KICAgew0KICAgIGlmICgkaSAhPSAkaykgeyRyb3dbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+Ii4kcm93WyRpXS4iPC9hPiI7fQ0KICAgfQ0KICAgJHYgPSAkcGFyc2Vzb3J0WzBdOw0KICAgdXNvcnQoJG9iamVjdHNbImZvbGRlcnMiXSwgInRhYnNvcnQiKTsNCiAgIHVzb3J0KCRvYmplY3RzWyJsaW5rcyJdLCAidGFic29ydCIpOw0KICAgdXNvcnQoJG9iamVjdHNbImZpbGVzIl0sICJ0YWJzb3J0Iik7DQogICBpZiAoJHBhcnNlc29ydFsxXSA9PSAiZCIpDQogICB7DQogICAgJG9iamVjdHNbImZvbGRlcnMiXSA9IGFycmF5X3JldmVyc2UoJG9iamVjdHNbImZvbGRlcnMiXSk7DQogICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgIH0NCiAgICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJG9iamVjdHNbImhlYWQiXSwkb2JqZWN0c1siZm9sZGVycyJdLCRvYmplY3RzWyJsaW5rcyJdLCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICR0YWIgPSBhcnJheSgpOw0KICAgJHRhYlsiY29scyJdID0gYXJyYXkoJHJvdyk7DQogICAkdGFiWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZm9sZGVycyJdID0gYXJyYXkoKTsNCiAgICR0YWJbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZmlsZXMiXSA9IGFycmF5KCk7DQogICAkaSA9IDA7DQogICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkYSkNCiAgIHsNCiAgICAkdiA9ICRhWzBdOw0KICAgICRvID0gYmFzZW5hbWUoJHYpOw0KICAgICRkaXIgPSBkaXJuYW1lKCR2KTsNCiAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9DQogICAgZWxzZSB7JGRpc3BwYXRoID0gJG87fQ0KICAgICRkaXNwcGF0aCA9IHN0cjJtaW5pKCRkaXNwcGF0aCw2MCk7DQogICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30NCiAgICBlbHNlaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImNvcHkiXSkpIHskZGlzcHBhdGggPSAiPHU+Ii4kZGlzcHBhdGguIjwvdT4iO30NCiAgICBmb3JlYWNoICgkcmVneHBfaGlnaGxpZ2h0IGFzICRyKQ0KICAgIHsNCiAgICAgaWYgKGVyZWcoJHJbMF0sJG8pKQ0KICAgICB7DQogICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZC4iOyBjOTlzaGV4aXQoKTt9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgJHJbMV0gPSByb3VuZCgkclsxXSk7DQogICAgICAgJGlzZGlyID0gaXNfZGlyKCR2KTsNCiAgICAgICBpZiAoKCRyWzFdID09IDApIG9yICgoJHJbMV0gPT0gMSkgYW5kICEkaXNkaXIpIG9yICgoJHJbMV0gPT0gMikgYW5kICEkaXNkaXIpKQ0KICAgICAgIHsNCiAgICAgICAgaWYgKGVtcHR5KCRyWzJdKSkgeyRyWzJdID0gIjxiPiI7ICRyWzNdID0gIjwvYj4iO30NCiAgICAgICAgJGRpc3BwYXRoID0gJHJbMl0uJGRpc3BwYXRoLiRyWzNdOw0KICAgICAgICBpZiAoJHJbNF0pIHticmVhazt9DQogICAgICAgfQ0KICAgICAgfQ0KICAgICB9DQogICAgfQ0KICAgICR1byA9IHVybGVuY29kZSgkbyk7DQogICAgJHVkID0gdXJsZW5jb2RlKCRkaXIpOw0KICAgICR1diA9IHVybGVuY29kZSgkdik7DQogICAgJHJvdyA9IGFycmF5KCk7DQogICAgaWYgKCRvID09ICIuIikNCiAgICB7DQogICAgICRyb3dbXSA9ICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNtYWxsX2RpclwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUocmVhbHBhdGgoJGQuJG8pKS4iJnNvcnQ9Ii4kc29ydC4iXCI+Ii4kby4iPC9hPiI7DQogICAgICRyb3dbXSA9ICJMSU5LIjsNCiAgICB9DQogICAgZWxzZWlmICgkbyA9PSAiLi4iKQ0KICAgIHsNCiAgICAgJHJvd1tdID0gIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2xua1wiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUocmVhbHBhdGgoJGQuJG8pKS4iJnNvcnQ9Ii4kc29ydC4iXCI+Ii4kby4iPC9hPiI7DQogICAgICRyb3dbXSA9ICJMSU5LIjsNCiAgICB9DQogICAgZWxzZWlmIChpc19kaXIoJHYpKQ0KICAgIHsNCiAgICAgaWYgKGlzX2xpbmsoJHYpKQ0KICAgICB7DQogICAgICAkZGlzcHBhdGggLj0gIiA9PiAiLnJlYWRsaW5rKCR2KTsNCiAgICAgICR0eXBlID0gIkxJTksiOw0KICAgICAgJHJvd1tdID0gICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9sbmtcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1scyZkPSIuJHV2LiImc29ydD0iLiRzb3J0LiJcIj5bIi4kZGlzcHBhdGguIl08L2E+IjsNCiAgICAgfQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgICR0eXBlID0gIkRJUiI7DQogICAgICAkcm93W10gPSAgIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c21hbGxfZGlyXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+WyIuJGRpc3BwYXRoLiJdPC9hPiI7DQogICAgICB9DQogICAgICRyb3dbXSA9ICR0eXBlOw0KICAgIH0NCiAgICBlbHNlaWYoaXNfZmlsZSgkdikpDQogICAgew0KICAgICAkZXh0ID0gZXhwbG9kZSgiLiIsJG8pOw0KICAgICAkYyA9IGNvdW50KCRleHQpLTE7DQogICAgICRleHQgPSAkZXh0WyRjXTsNCiAgICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQogICAgICRyb3dbXSA9ICAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii4kdW8uIiZkPSIuJHVkLiImXCI+Ii4kZGlzcHBhdGguIjwvYT4iOw0KICAgICAkcm93W10gPSB2aWV3X3NpemUoJGFbMV0pOw0KICAgIH0NCiAgICAkcm93W10gPSBkYXRlKCJkLm0uWSBIOmk6cyIsJGFbMl0pOw0KICAgIGlmICghJHdpbikgeyRyb3dbXSA9ICRhWzNdO30NCiAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1jaG1vZCZmPSIuJHVvLiImZD0iLiR1ZC4iXCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCR2KS4iPC9iPjwvYT4iOw0KICAgIGlmICgkbyA9PSAiLiIpIHskY2hlY2tib3ggPSAiPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIG9uY2xpY2s9XCJsc19yZXZlcnNlX2FsbCgpO1wiPiI7ICRpLS07fQ0KICAgIGVsc2UgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgaWQ9XCJhY3Rib3giLiRpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiPiI7fQ0KICAgIGlmIChpc19kaXIoJHYpKSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZCZkPSIuJHV2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiLiRjaGVja2JveDt9DQogICAgZWxzZSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9aW5mbyZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLiR1by4iJmZ0PWVkaXQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1jaGFuZ2VcIiBhbHQ9XCJDaGFuZ2VcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9ZG93bmxvYWQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1kb3dubG9hZFwiIGFsdD1cIkRvd25sb2FkXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiLiRjaGVja2JveDt9DQogICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyR0YWJbImhlYWQiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyR0YWJbImxpbmtzIl1bXSA9ICRyb3c7fQ0KICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgeyR0YWJbImZvbGRlcnMiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19maWxlKCR2KSkgeyR0YWJbImZpbGVzIl1bXSA9ICRyb3c7fQ0KICAgICRpKys7DQogICB9DQogIH0NCiAgLy8gQ29tcGlsaW5nIHRhYmxlDQogICR0YWJsZSA9IGFycmF5X21lcmdlKCR0YWJbImNvbHMiXSwkdGFiWyJoZWFkIl0sJHRhYlsiZm9sZGVycyJdLCR0YWJbImxpbmtzIl0sJHRhYlsiZmlsZXMiXSk7DQogIGVjaG8gIjxjZW50ZXI+PGI+TGlzdGluZyBmb2xkZXIgKCIuY291bnQoJHRhYlsiZmlsZXMiXSkuIiBmaWxlcyBhbmQgIi4oY291bnQoJHRhYlsiZm9sZGVycyJdKStjb3VudCgkdGFiWyJsaW5rcyJdKSkuIiBmb2xkZXJzKTo8L2I+PC9jZW50ZXI+PGJyPjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9MTAwJSBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jNDMzMzMzIGJvcmRlcj0wPjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUIG5hbWU9XCJsc19mb3JtXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSIuJGRzcGFjdC4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9Ii4kZC4iPiI7DQogIGZvcmVhY2goJHRhYmxlIGFzICRyb3cpDQogIHsNCiAgIGVjaG8gIjx0cj5cclxuIjsNCiAgIGZvcmVhY2goJHJvdyBhcyAkdikge2VjaG8gIjx0ZD4iLiR2LiI8L3RkPlxyXG4iO30NCiAgIGVjaG8gIjwvdHI+XHJcbiI7DQogIH0NCiAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwicmlnaHRcIj4NCiAgPHNjcmlwdD4NCiAgZnVuY3Rpb24gbHNfc2V0Y2hlY2tib3hhbGwoc3RhdHVzKQ0KICB7DQogICB2YXIgaWQgPSAxOw0KICAgdmFyIG51bSA9ICIuKGNvdW50KCR0YWJsZSktMikuIjsNCiAgIHdoaWxlIChpZCA8PSBudW0pDQogICB7DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQgPSBzdGF0dXM7DQogICAgaWQrKzsNCiAgIH0NCiAgfQ0KICBmdW5jdGlvbiBsc19yZXZlcnNlX2FsbCgpDQogIHsNCiAgIHZhciBpZCA9IDE7DQogICB2YXIgbnVtID0gIi4oY291bnQoJHRhYmxlKS0yKS4iOw0KICAgd2hpbGUgKGlkIDw9IG51bSkNCiAgIHsNCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZCA9ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZDsNCiAgICBpZCsrOw0KICAgfQ0KICB9DQogIDwvc2NyaXB0Pg0KICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsc19zZXRjaGVja2JveGFsbCh0cnVlKTtcIiB2YWx1ZT1cIlNlbGVjdCBhbGxcIj4mbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsc19zZXRjaGVja2JveGFsbChmYWxzZSk7XCIgdmFsdWU9XCJVbnNlbGVjdCBhbGxcIj4gDQogIDxiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPiI7DQogIGlmIChjb3VudChhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pKSA+IDAgYW5kICgkdXNlZnNidWZmKSkNCiAgew0KICAgZWNobyAiPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9YWN0YXJjYnVmZiB2YWx1ZT1cIlBhY2sgYnVmZmVyIHRvIGFyY2hpdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiYWN0YXJjYnVmZl9wYXRoXCIgdmFsdWU9XCJhcmNoaXZlXyIuc3Vic3RyKG1kNShyYW5kKDEsMTAwMCkucmFuZCgxLDEwMDApKSwwLDUpLiIudGFyLmd6XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9XCJhY3RwYXN0ZWJ1ZmZcIiB2YWx1ZT1cIlBhc3RlXCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9XCJhY3RlbXB0eWJ1ZmZcIiB2YWx1ZT1cIkVtcHR5IGJ1ZmZlclwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyI7DQogIH0NCiAgZWNobyAiPHNlbGVjdCBuYW1lPWFjdD48b3B0aW9uIHZhbHVlPVwiIi4kYWN0LiJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogIGVjaG8gIjxvcHRpb24gdmFsdWU9ZGVsZXRlIi4oJGRzcGFjdCA9PSAiZGVsZXRlIj8iIHNlbGVjdGVkIjoiIikuIj5EZWxldGU8L29wdGlvbj4iOw0KICBlY2hvICI8b3B0aW9uIHZhbHVlPWNobW9kIi4oJGRzcGFjdCA9PSAiY2htb2QiPyIgc2VsZWN0ZWQiOiIiKS4iPkNoYW5nZS1tb2RlPC9vcHRpb24+IjsNCiAgaWYgKCR1c2Vmc2J1ZmYpDQogIHsNCiAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y3V0Ii4oJGRzcGFjdCA9PSAiY3V0Ij8iIHNlbGVjdGVkIjoiIikuIj5DdXQ8L29wdGlvbj4iOw0KICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jb3B5Ii4oJGRzcGFjdCA9PSAiY29weSI/IiBzZWxlY3RlZCI6IiIpLiI+Q29weTwvb3B0aW9uPiI7DQogICBlY2hvICI8b3B0aW9uIHZhbHVlPXVuc2VsZWN0Ii4oJGRzcGFjdCA9PSAidW5zZWxlY3QiPyIgc2VsZWN0ZWQiOiIiKS4iPlVuc2VsZWN0PC9vcHRpb24+IjsNCiAgfQ0KICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJDb25maXJtXCI+PC9wPiI7DQogIGVjaG8gIjwvZm9ybT4iOw0KIH0NCn0NCmlmICgkYWN0ID09ICJ0b29scyIpDQp7DQogJGJuZHBvcnRzcmNzID0gYXJyYXkoDQogICJjOTlzaF9iaW5kcG9ydC5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlcG9ydCIpLA0KICAiYzk5c2hfYmluZHBvcnQuYyI9PmFycmF5KCJVc2luZyBDIiwiJXBhdGggJXBvcnQgJXBhc3MiKQ0KICk7DQogJGJjc3JjcyA9IGFycmF5KA0KICAiYzk5c2hfYmFja2Nvbm4ucGwiPT5hcnJheSgiVXNpbmcgUEVSTCIsInBlcmwgJXBhdGggJWhvc3QgJXBvcnQiKSwNCiAgImM5OXNoX2JhY2tjb25uLmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVob3N0ICVwb3J0IikNCiApOw0KICRkcHNyY3MgPSBhcnJheSgNCiAgImM5OXNoX2RhdGFwaXBlLnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVsb2NhbHBvcnQgJXJlbW90ZWhvc3QgJXJlbW90ZXBvcnQiKSwNCiAgImM5OXNoX2RhdGFwaXBlLmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVsb2NhbHBvcnQgJXJlbW90ZXBvcnQgJXJlbW90ZWhvc3QiKQ0KICk7DQogaWYgKCFpc19hcnJheSgkYmluZCkpIHskYmluZCA9IGFycmF5KCk7fQ0KIGlmICghaXNfYXJyYXkoJGJjKSkgeyRiYyA9IGFycmF5KCk7fQ0KIGlmICghaXNfYXJyYXkoJGRhdGFwaXBlKSkgeyRkYXRhcGlwZSA9IGFycmF5KCk7fQ0KIA0KIGlmICghaXNfbnVtZXJpYygkYmluZFsicG9ydCJdKSkgeyRiaW5kWyJwb3J0Il0gPSAkYmluZHBvcnRfcG9ydDt9DQogaWYgKGVtcHR5KCRiaW5kWyJwYXNzIl0pKSB7JGJpbmRbInBhc3MiXSA9ICRiaW5kcG9ydF9wYXNzO30NCiAgDQogaWYgKGVtcHR5KCRiY1siaG9zdCJdKSkgeyRiY1siaG9zdCJdID0gZ2V0ZW52KCJSRU1PVEVfQUREUiIpO30NCiBpZiAoIWlzX251bWVyaWMoJGJjWyJwb3J0Il0pKSB7JGJjWyJwb3J0Il0gPSAkYmNfcG9ydDt9DQogDQogaWYgKGVtcHR5KCRkYXRhcGlwZVsicmVtb3RlYWRkciJdKSkgeyRkYXRhcGlwZVsicmVtb3RlYWRkciJdID0gImlyYy5kYWxuZXQucnU6NjY2NyI7fQ0KIGlmICghaXNfbnVtZXJpYygkZGF0YXBpcGVbImxvY2FscG9ydCJdKSkgeyRkYXRhcGlwZVsibG9jYWxwb3J0Il0gPSAkZGF0YXBpcGVfbG9jYWxwb3J0O30NCiBpZiAoIWVtcHR5KCRiaW5kc3VibWl0KSkNCiB7DQogIGVjaG8gIjxiPlJlc3VsdCBvZiBiaW5kaW5nIHBvcnQ6PC9iPjxicj4iOw0KICAkdiA9ICRibmRwb3J0c3Jjc1skYmluZFsic3JjIl1dOw0KICBpZiAoZW1wdHkoJHYpKSB7ZWNobyAiVW5rbm93biBmaWxlITxicj4iO30NCiAgZWxzZWlmIChmc29ja29wZW4oZ2V0ZW52KCJTRVJWRVJfQUREUiIpLCRiaW5kWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsMC4xKSkge2VjaG8gIlBvcnQgYWxyZWR5IGluIHVzZSwgc2VsZWN0IGFueSBvdGhlciE8YnI+Ijt9DQogIGVsc2UNCiAgew0KICAgJHcgPSBleHBsb2RlKCIuIiwkYmluZFsic3JjIl0pOw0KICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsNCiAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7DQogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7DQogICAkYmlucGF0aCA9ICR0bXBkaXIuam9pbigiLiIsJHcpLnJhbmQoMCw5OTkpOw0KICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQ0KICAgQHVubGluaygkc3JjcGF0aCk7DQogICAkZnAgPSBmb3Blbigkc3JjcGF0aCwiYWIrIik7DQogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9DQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OWdldHNvdXJjZSgkYmluZFsic3JjIl0pKSB7ZWNobyAiQ2FuJ3QgZG93bmxvYWQgc291cmNlcyEiO30NCiAgIGVsc2UNCiAgIHsNCiAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOw0KICAgIGZjbG9zZSgkZnApOw0KICAgIGlmICgkZXh0ID09ICJjIikgeyRyZXRnY2MgPSBteXNoZWxsZXhlYygiZ2NjIC1vICIuJGJpbnBhdGguIiAiLiRzcmNwYXRoKTsgIEB1bmxpbmsoJHNyY3BhdGgpO30NCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOw0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwb3J0IiwkYmluZFsicG9ydCJdLCR2WzFdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGFzcyIsJGJpbmRbInBhc3MiXSwkdlsxXSk7DQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiLy8iLCIvIiwkdlsxXSk7DQogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsNCiAgICBzbGVlcCg1KTsNCiAgICAkc29jayA9IGZzb2Nrb3BlbigibG9jYWxob3N0IiwkYmluZFsicG9ydCJdLCRlcnJubywkZXJyc3RyLDUpOw0KICAgIGlmICghJHNvY2spIHtlY2hvICJJIGNhbid0IGNvbm5lY3QgdG8gbG9jYWxob3N0OiIuJGJpbmRbInBvcnQiXS4iISBJIHRoaW5rIHlvdSBzaG91bGQgY29uZmlndXJlIHlvdXIgZmlyZXdhbGwuIjt9DQogICAgZWxzZSB7ZWNobyAiQmluZGluZy4uLiBvayEgQ29ubmVjdCB0byA8Yj4iLmdldGVudigiU0VSVkVSX0FERFIiKS4iOiIuJGJpbmRbInBvcnQiXS4iPC9iPiEgWW91IHNob3VsZCB1c2UgTmV0Q2F0JmNvcHk7LCBydW4gXCI8Yj5uYyAtdiAiLmdldGVudigiU0VSVkVSX0FERFIiKS4iICIuJGJpbmRbInBvcnQiXS4iPC9iPlwiITxjZW50ZXI+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1wcm9jZXNzZXMmZ3JlcD0iLmJhc2VuYW1lKCRiaW5wYXRoKS4iXCI+PHU+VmlldyBiaW5kZXIncyBwcm9jZXNzPC91PjwvYT48L2NlbnRlcj4iO30NCiAgIH0NCiAgIGVjaG8gIjxicj4iOw0KICB9DQogfQ0KIGlmICghZW1wdHkoJGJjc3VibWl0KSkNCiB7DQogIGVjaG8gIjxiPlJlc3VsdCBvZiBiYWNrIGNvbm5lY3Rpb246PC9iPjxicj4iOw0KICAkdiA9ICRiY3NyY3NbJGJjWyJzcmMiXV07DQogIGlmIChlbXB0eSgkdikpIHtlY2hvICJVbmtub3duIGZpbGUhPGJyPiI7fQ0KICBlbHNlDQogIHsNCiAgICR3ID0gZXhwbG9kZSgiLiIsJGJjWyJzcmMiXSk7DQogICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOw0KICAgdW5zZXQoJHdbY291bnQoJHcpLTFdKTsNCiAgICRzcmNwYXRoID0gam9pbigiLiIsJHcpLiIuIi5yYW5kKDAsOTk5KS4iLiIuJGV4dDsNCiAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdykucmFuZCgwLDk5OSk7DQogICBpZiAoJGV4dCA9PSAicGwiKSB7JGJpbnBhdGggPSAkc3JjcGF0aDt9DQogICBAdW5saW5rKCRzcmNwYXRoKTsNCiAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsNCiAgIGlmICghJGZwKSB7ZWNobyAiQ2FuJ3Qgd3JpdGUgc291cmNlcyB0byBcIiIuJHNyY3BhdGguIlwiITxicj4iO30NCiAgIGVsc2VpZiAoISRkYXRhID0gYzk5Z2V0c291cmNlKCRiY1sic3JjIl0pKSB7ZWNobyAiQ2FuJ3QgZG93bmxvYWQgc291cmNlcyEiO30NCiAgIGVsc2UNCiAgIHsNCiAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOw0KICAgIGZjbG9zZSgkZnApOw0KICAgIGlmICgkZXh0ID09ICJjIikgeyRyZXRnY2MgPSBteXNoZWxsZXhlYygiZ2NjIC1vICIuJGJpbnBhdGguIiAiLiRzcmNwYXRoKTsgQHVubGluaygkc3JjcGF0aCk7fQ0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7DQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJWhvc3QiLCRiY1siaG9zdCJdLCR2WzFdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcG9ydCIsJGJjWyJwb3J0Il0sJHZbMV0pOw0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOw0KICAgICRyZXRiaW5kID0gbXlzaGVsbGV4ZWMoJHZbMV0uIiA+IC9kZXYvbnVsbCAmIik7DQogICAgZWNobyAiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLmh0bWxzcGVjaWFsY2hhcnMoJGJjWyJob3N0Il0pLiI6Ii5odG1sc3BlY2lhbGNoYXJzKCRiY1sicG9ydCJdKS4iLi4uPGJyPiI7DQogICB9DQogIH0NCiB9DQogaWYgKCFlbXB0eSgkZHBzdWJtaXQpKQ0KIHsNCiAgZWNobyAiPGI+UmVzdWx0IG9mIGRhdGFwaXBlLXJ1bm5pbmc6PC9iPjxicj4iOw0KICAkdiA9ICRkcHNyY3NbJGRhdGFwaXBlWyJzcmMiXV07DQogIGlmIChlbXB0eSgkdikpIHtlY2hvICJVbmtub3duIGZpbGUhPGJyPiI7fQ0KICBlbHNlaWYgKGZzb2Nrb3BlbihnZXRlbnYoIlNFUlZFUl9BRERSIiksJGRhdGFwaXBlWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsMC4xKSkge2VjaG8gIlBvcnQgYWxyZWR5IGluIHVzZSwgc2VsZWN0IGFueSBvdGhlciE8YnI+Ijt9DQogIGVsc2UNCiAgew0KICAgJHNyY3BhdGggPSAkdG1wZGlyLiRkYXRhcGlwZVsic3JjIl07DQogICAkdyA9IGV4cGxvZGUoIi4iLCRkYXRhcGlwZVsic3JjIl0pOw0KICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsNCiAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7DQogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7DQogICAkYmlucGF0aCA9ICR0bXBkaXIuam9pbigiLiIsJHcpLnJhbmQoMCw5OTkpOw0KICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQ0KICAgQHVubGluaygkc3JjcGF0aCk7DQogICAkZnAgPSBmb3Blbigkc3JjcGF0aCwiYWIrIik7DQogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9DQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OWdldHNvdXJjZSgkZGF0YXBpcGVbInNyYyJdKSkge2VjaG8gIkNhbid0IGRvd25sb2FkIHNvdXJjZXMhIjt9DQogICBlbHNlDQogICB7DQogICAgZndyaXRlKCRmcCwkZGF0YSxzdHJsZW4oJGRhdGEpKTsNCiAgICBmY2xvc2UoJGZwKTsNCiAgICBpZiAoJGV4dCA9PSAiYyIpIHskcmV0Z2NjID0gbXlzaGVsbGV4ZWMoImdjYyAtbyAiLiRiaW5wYXRoLiIgIi4kc3JjcGF0aCk7IEB1bmxpbmsoJHNyY3BhdGgpO30NCiAgICBsaXN0KCRkYXRhcGlwZVsicmVtb3RlaG9zdCJdLCRkYXRhcGlwZVsicmVtb3RlcG9ydCJdKSA9IGV4cGxvZGUoIjoiLCRkYXRhcGlwZVsicmVtb3RlYWRkciJdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOw0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVsb2NhbHBvcnQiLCRkYXRhcGlwZVsibG9jYWxwb3J0Il0sJHZbMV0pOw0KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVyZW1vdGVob3N0IiwkZGF0YXBpcGVbInJlbW90ZWhvc3QiXSwkdlsxXSk7DQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXJlbW90ZXBvcnQiLCRkYXRhcGlwZVsicmVtb3RlcG9ydCJdLCR2WzFdKTsNCiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIvLyIsIi8iLCR2WzFdKTsNCiAgICAkcmV0YmluZCA9IG15c2hlbGxleGVjKCR2WzFdLiIgPiAvZGV2L251bGwgJiIpOw0KICAgIHNsZWVwKDUpOw0KICAgICRzb2NrID0gZnNvY2tvcGVuKCJsb2NhbGhvc3QiLCRkYXRhcGlwZVsicG9ydCJdLCRlcnJubywkZXJyc3RyLDUpOw0KICAgIGlmICghJHNvY2spIHtlY2hvICJJIGNhbid0IGNvbm5lY3QgdG8gbG9jYWxob3N0OiIuJGRhdGFwaXBlWyJsb2NhbHBvcnQiXS4iISBJIHRoaW5rIHlvdSBzaG91bGQgY29uZmlndXJlIHlvdXIgZmlyZXdhbGwuIjt9DQogICAgZWxzZSB7ZWNobyAiUnVubmluZyBkYXRhcGlwZS4uLiBvayEgQ29ubmVjdCB0byA8Yj4iLmdldGVudigiU0VSVkVSX0FERFIiKS4iOiIuJGRhdGFwaXBlWyJwb3J0Il0uIiwgYW5kIHlvdSB3aWxsIGNvbm5lY3RlZCB0byAiLiRkYXRhcGlwZVsicmVtb3RlYWRkciJdLiI8L2I+ISBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biBcIjxiPm5jIC12ICIuZ2V0ZW52KCJTRVJWRVJfQUREUiIpLiIgIi4kYmluZFsicG9ydCJdLiI8L2I+XCIhPGNlbnRlcj48YSBocmVmPVwiIi4kc3VybC4iYWN0PXByb2Nlc3NlcyZncmVwPSIuYmFzZW5hbWUoJGJpbnBhdGgpLiJcIj48dT5WaWV3IGRhdGFwaXBlIHByb2Nlc3M8L3U+PC9hPjwvY2VudGVyPiI7fQ0KICAgfQ0KICAgZWNobyAiPGJyPiI7DQogIH0NCiB9DQogPz48Yj5CaW5kaW5nIHBvcnQ6PC9iPjxicj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9dG9vbHM+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPlBvcnQ6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iYmluZFtwb3J0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmluZFsicG9ydCJdKTsgPz4iPiZuYnNwO1Bhc3N3b3JkOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJpbmRbcGFzc10iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBhc3MiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImJpbmRbc3JjXSI+PD9waHANCiBmb3JlYWNoKCRibmRwb3J0c3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJpbmRbInNyYyJdKSB7ZWNobyAiIHNlbGVjdGVkIjt9IGVjaG8gIj4iLiR2WzBdLiI8L29wdGlvbj4iO30NCiA/Pjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWJpbmRzdWJtaXQgdmFsdWU9IkJpbmQiPjwvZm9ybT4NCjxiPkJhY2sgY29ubmVjdGlvbjo8L2I+PGJyPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT10b29scz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+SE9TVDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiY1tob3N0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmNbImhvc3QiXSk7ID8+Ij4mbmJzcDtQb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJjW3BvcnRdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRiY1sicG9ydCJdKTsgPz4iPiZuYnNwOzxzZWxlY3QgbmFtZT0iYmNbc3JjXSI+PD9waHANCmZvcmVhY2goJGJjc3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJjWyJzcmMiXSkge2VjaG8gIiBzZWxlY3RlZCI7fSBlY2hvICI+Ii4kdlswXS4iPC9vcHRpb24+Ijt9DQo/Pjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWJjc3VibWl0IHZhbHVlPSJDb25uZWN0Ij48L2Zvcm0+DQpDbGljayAiQ29ubmVjdCIgb25seSBhZnRlciBvcGVuIHBvcnQgZm9yIGl0LiBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biAiPGI+bmMgLWwgLW4gLXYgLXAgPD9waHAgZWNobyAkYmNfcG9ydDsgPz48L2I+IiE8YnI+PGJyPg0KPGI+RGF0YXBpcGU6PC9iPjxicj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9dG9vbHM+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPkhPU1Q6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iZGF0YXBpcGVbcmVtb3RlYWRkcl0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRhdGFwaXBlWyJyZW1vdGVhZGRyIl0pOyA/PiI+Jm5ic3A7TG9jYWwgcG9ydDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJkYXRhcGlwZVtsb2NhbHBvcnRdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkYXRhcGlwZVsibG9jYWxwb3J0Il0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJkYXRhcGlwZVtzcmNdIj48P3BocA0KZm9yZWFjaCgkZHBzcmNzIGFzICRrPT4kdikge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLiRrLiJcIiI7IGlmICgkayA9PSAkYmNbInNyYyJdKSB7ZWNobyAiIHNlbGVjdGVkIjt9IGVjaG8gIj4iLiR2WzBdLiI8L29wdGlvbj4iO30NCj8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9ZHBzdWJtaXQgdmFsdWU9IlJ1biI+PC9mb3JtPjxiPk5vdGU6PC9iPiBzb3VyY2VzIHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tIHJlbW90ZSBzZXJ2ZXIuPD9waHANCn0NCmlmICgkYWN0ID09ICJwcm9jZXNzZXMiKQ0Kew0KIGVjaG8gIjxiPlByb2Nlc3Nlczo8L2I+PGJyPiI7DQogaWYgKCEkd2luKSB7JGhhbmRsZXIgPSAicHMgLWF1eCIuKCRncmVwPyIgfCBncmVwICciLmFkZHNsYXNoZXMoJGdyZXApLiInIjoiIik7fQ0KIGVsc2UgeyRoYW5kbGVyID0gInRhc2tsaXN0Ijt9DQogJHJldCA9IG15c2hlbGxleGVjKCRoYW5kbGVyKTsNCiBpZiAoISRyZXQpIHtlY2hvICJDYW4ndCBleGVjdXRlIFwiIi4kaGFuZGxlci4iXCIhIjt9DQogZWxzZQ0KIHsNCiAgaWYgKGVtcHR5KCRwcm9jZXNzZXNfc29ydCkpIHskcHJvY2Vzc2VzX3NvcnQgPSAkc29ydF9kZWZhdWx0O30NCiAgJHBhcnNlc29ydCA9IHBhcnNlc29ydCgkcHJvY2Vzc2VzX3NvcnQpOw0KICBpZiAoIWlzX251bWVyaWMoJHBhcnNlc29ydFswXSkpIHskcGFyc2Vzb3J0WzBdID0gMDt9DQogICRrID0gJHBhcnNlc29ydFswXTsNCiAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImFcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfZGVzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iO30NCiAgZWxzZSB7JHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImRcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfYXNjXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiI7fQ0KICAkcmV0ID0gaHRtbHNwZWNpYWxjaGFycygkcmV0KTsNCiAgaWYgKCEkd2luKQ0KICB7DQogICBpZiAoJHBpZCkNCiAgIHsNCiAgICBpZiAoaXNfbnVsbCgkc2lnKSkgeyRzaWcgPSA5O30NCiAgICBlY2hvICJTZW5kaW5nIHNpZ25hbCAiLiRzaWcuIiB0byAjIi4kcGlkLiIuLi4gIjsNCiAgICBpZiAocG9zaXhfa2lsbCgkcGlkLCRzaWcpKSB7ZWNobyAiT0suIjt9DQogICAgZWxzZSB7ZWNobyAiRVJST1IuIjt9DQogICB9DQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiAiLCRyZXQpO30NCiAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgICRoZWFkID0gZXhwbG9kZSgiICIsJHN0YWNrWzBdKTsNCiAgIHVuc2V0KCRzdGFja1swXSk7DQogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykNCiAgIHsNCiAgICBpZiAoJGkgIT0gJGspIHskaGVhZFskaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii4kaGVhZFskaV0uIjwvYj48L2E+Ijt9DQogICB9DQogICAkcHJjcyA9IGFycmF5KCk7DQogICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpDQogICB7DQogICAgaWYgKCFlbXB0eSgkbGluZSkpDQp7DQogZWNobyAiPHRyPiI7DQogICAgICRsaW5lID0gZXhwbG9kZSgiICIsJGxpbmUpOw0KICAgICAkbGluZVsxMF0gPSBqb2luKCIgIixhcnJheV9zbGljZSgkbGluZSwxMCkpOw0KICAgICAkbGluZSA9IGFycmF5X3NsaWNlKCRsaW5lLDAsMTEpOw0KICAgICBpZiAoJGxpbmVbMF0gPT0gZ2V0X2N1cnJlbnRfdXNlcigpKSB7JGxpbmVbMF0gPSAiPGZvbnQgY29sb3I9Z3JlZW4+Ii4kbGluZVswXS4iPC9mb250PiI7fQ0KICAgICAkbGluZVtdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cHJvY2Vzc2VzJmQ9Ii51cmxlbmNvZGUoJGQpLiImcGlkPSIuJGxpbmVbMV0uIiZzaWc9OVwiPjx1PktJTEw8L3U+PC9hPiI7DQogICAgICRwcmNzW10gPSAkbGluZTsNCiAgICAgZWNobyAiPC90cj4iOw0KICAgIH0NCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiIiwkcmV0KTt9DQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQ0KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiIiwkcmV0KTt9DQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQ0KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiIiwkcmV0KTt9DQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQ0KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIiLCIiLCRyZXQpO30NCiAgIHdoaWxlIChlcmVnKCIgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICIsIiIsJHJldCk7fQ0KICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOw0KICAgJHN0YWNrID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgdW5zZXQoJHN0YWNrWzBdLCRzdGFja1syXSk7DQogICAkc3RhY2sgPSBhcnJheV92YWx1ZXMoJHN0YWNrKTsNCiAgICRoZWFkID0gZXhwbG9kZSgiIiwkc3RhY2tbMF0pOw0KICAgJGhlYWRbMV0gPSBleHBsb2RlKCIgIiwkaGVhZFsxXSk7DQogICAkaGVhZFsxXSA9ICRoZWFkWzFdWzBdOw0KICAgJHN0YWNrID0gYXJyYXlfc2xpY2UoJHN0YWNrLDEpOw0KICAgdW5zZXQoJGhlYWRbMl0pOw0KICAgJGhlYWQgPSBhcnJheV92YWx1ZXMoJGhlYWQpOw0KICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImFcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfZGVzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iO30NCiAgIGVsc2UgeyR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJkXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0X2FzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iO30NCiAgIGlmICgkayA+IGNvdW50KCRoZWFkKSkgeyRrID0gY291bnQoJGhlYWQpLTE7fQ0KICAgZm9yKCRpPTA7JGk8Y291bnQoJGhlYWQpOyRpKyspDQogICB7DQogICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPjxiPiIudHJpbSgkaGVhZFskaV0pLiI8L2I+PC9hPiI7fQ0KICAgfQ0KICAgJHByY3MgPSBhcnJheSgpOw0KICAgZm9yZWFjaCAoJHN0YWNrIGFzICRsaW5lKQ0KICAgew0KICAgIGlmICghZW1wdHkoJGxpbmUpKQ0KICAgIHsNCiAgICAgZWNobyAiPHRyPiI7DQogICAgICRsaW5lID0gZXhwbG9kZSgiIiwkbGluZSk7DQogICAgICRsaW5lWzFdID0gaW50dmFsKCRsaW5lWzFdKTsgJGxpbmVbMl0gPSAkbGluZVszXTsgdW5zZXQoJGxpbmVbM10pOw0KICAgICAkbGluZVsyXSA9IGludHZhbChzdHJfcmVwbGFjZSgiICIsIiIsJGxpbmVbMl0pKSoxMDI0OyANCiAgICAgJHByY3NbXSA9ICRsaW5lOw0KICAgICBlY2hvICI8L3RyPiI7DQogICAgfQ0KICAgfQ0KICB9DQogICRoZWFkWyRrXSA9ICI8Yj4iLiRoZWFkWyRrXS4iPC9iPiIuJHk7DQogICR2ID0gJHByb2Nlc3Nlc19zb3J0WzBdOw0KICB1c29ydCgkcHJjcywidGFic29ydCIpOw0KICBpZiAoJHByb2Nlc3Nlc19zb3J0WzFdID09ICJkIikgeyRwcmNzID0gYXJyYXlfcmV2ZXJzZSgkcHJjcyk7fQ0KICAkdGFiID0gYXJyYXkoKTsNCiAgJHRhYltdID0gJGhlYWQ7DQogICR0YWIgPSBhcnJheV9tZXJnZSgkdGFiLCRwcmNzKTsNCiAgZWNobyAiPFRBQkxFIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPVwiI0MwQzBDMFwiPiI7DQogIGZvcmVhY2goJHRhYiBhcyAkaT0+JGspDQogIHsNCiAgIGVjaG8gIjx0cj4iOw0KICAgZm9yZWFjaCgkayBhcyAkaj0+JHYpIHtpZiAoJHdpbiBhbmQgJGkgPiAwIGFuZCAkaiA9PSAyKSB7JHYgPSB2aWV3X3NpemUoJHYpO30gZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9DQogICBlY2hvICI8L3RyPiI7DQogIH0NCiAgZWNobyAiPC90YWJsZT4iOw0KIH0NCn0NCmlmICgkYWN0ID09ICJldmFsIikNCnsNCiBpZiAoIWVtcHR5KCRldmFsKSkNCiB7DQogIGVjaG8gIjxiPlJlc3VsdCBvZiBleGVjdXRpb24gdGhpcyBQSFAtY29kZTwvYj46PGJyPiI7DQogICR0bXAgPSBvYl9nZXRfY29udGVudHMoKTsNCiAgJG9sZGRpciA9IHJlYWxwYXRoKCIuIik7DQogIEBjaGRpcigkZCk7DQogIGlmICgkdG1wKQ0KICB7DQogICBvYl9jbGVhbigpOw0KICAgZXZhbCgkZXZhbCk7DQogICAkcmV0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogICBvYl9jbGVhbigpOw0KICAgZWNobyAkdG1wOw0KICAgaWYgKCRldmFsX3R4dCkNCiAgIHsNCiAgICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyZXQpKSsxOw0KICAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDt9DQogICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiIHJlYWRvbmx5PiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC90ZXh0YXJlYT4iOw0KICAgfQ0KICAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogIH0NCiAgZWxzZQ0KICB7DQogICBpZiAoJGV2YWxfdHh0KQ0KICAgew0KICAgIGVjaG8gIjxicj48dGV4dGFyZWEgY29scz1cIjEyMlwiIHJvd3M9XCIxNVwiIHJlYWRvbmx5PiI7DQogICAgZXZhbCgkZXZhbCk7DQogICAgZWNobyAiPC90ZXh0YXJlYT4iOw0KICAgfQ0KICAgZWxzZSB7ZWNobyAkcmV0O30NCiAgfQ0KICBAY2hkaXIoJG9sZGRpcik7DQogfQ0KIGVsc2Uge2VjaG8gIjxiPkV4ZWN1dGlvbiBQSFAtY29kZTwvYj4iOyBpZiAoZW1wdHkoJGV2YWxfdHh0KSkgeyRldmFsX3R4dCA9IFRSVUU7fX0NCiBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ZXZhbD48dGV4dGFyZWEgbmFtZT1cImV2YWxcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRldmFsKS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj4mbmJzcDtEaXNwbGF5IGluIHRleHQtYXJlYSZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZXZhbF90eHRcIiB2YWx1ZT1cIjFcIiI7IGlmICgkZXZhbF90eHQpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PC9mb3JtPiI7DQp9DQppZiAoJGFjdCA9PSAiZiIpDQp7DQogaWYgKCghaXNfcmVhZGFibGUoJGQuJGYpIG9yIGlzX2RpcigkZC4kZikpIGFuZCAkZnQgIT0gImVkaXQiKQ0KIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRkLiRmKSkge2VjaG8gIjxjZW50ZXI+PGI+UGVybWlzaW9uIGRlbmllZCAoIi5odG1sc3BlY2lhbGNoYXJzKCRkLiRmKS4iKSE8L2I+PC9jZW50ZXI+Ijt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+RmlsZSBkb2VzIG5vdCBleGlzdHMgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjxicj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1lZGl0JmQ9Ii51cmxlbmNvZGUoJGQpLiImYz0xXCI+PHU+Q3JlYXRlPC91PjwvYT48L2NlbnRlcj4iO30NCiB9DQogZWxzZQ0KIHsNCiAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOw0KICAkZXh0ID0gZXhwbG9kZSgiLiIsJGYpOw0KICAkYyA9IGNvdW50KCRleHQpLTE7DQogICRleHQgPSAkZXh0WyRjXTsNCiAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7DQogICRyZnQgPSAiIjsNCiAgZm9yZWFjaCgkZnR5cGVzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fX0NCiAgaWYgKGVyZWdpKCJzZXNzXyguKikiLCRmKSkgeyRyZnQgPSAicGhwc2VzcyI7fQ0KICBpZiAoZW1wdHkoJGZ0KSkgeyRmdCA9ICRyZnQ7fQ0KICAkYXJyID0gYXJyYXkoDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZGl6XCIgYm9yZGVyPVwiMFwiPiIsImluZm8iKSwNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9odG1sXCIgYm9yZGVyPVwiMFwiPiIsImh0bWwiKSwNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF90eHRcIiBib3JkZXI9XCIwXCI+IiwidHh0IiksDQogICBhcnJheSgiQ29kZSIsImNvZGUiKSwNCiAgIGFycmF5KCJTZXNzaW9uIiwicGhwc2VzcyIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2V4ZVwiIGJvcmRlcj1cIjBcIj4iLCJleGUiKSwNCiAgIGFycmF5KCJTREIiLCJzZGIiKSwNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9naWZcIiBib3JkZXI9XCIwXCI+IiwiaW1nIiksDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfaW5pXCIgYm9yZGVyPVwiMFwiPiIsImluaSIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZG93bmxvYWRcIiBib3JkZXI9XCIwXCI+IiwiZG93bmxvYWQiKSwNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9ydGZcIiBib3JkZXI9XCIwXCI+Iiwibm90ZXBhZCIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Y2hhbmdlXCIgYm9yZGVyPVwiMFwiPiIsImVkaXQiKQ0KICApOw0KICBlY2hvICI8Yj5WaWV3aW5nIGZpbGU6Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kZi4iICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiIpICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYj48YnI+U2VsZWN0IGFjdGlvbi9maWxlLXR5cGU6PGJyPiI7DQogIGZvcmVhY2goJGFyciBhcyAkdCkNCiAgew0KICAgaWYgKCR0WzFdID09ICRyZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Zm9udCBjb2xvcj1ncmVlbj4iLiR0WzBdLiI8L2ZvbnQ+PC9hPiI7fQ0KICAgZWxzZWlmICgkdFsxXSA9PSAkZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj48dT4iLiR0WzBdLiI8L3U+PC9iPjwvYT4iO30NCiAgIGVsc2Uge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPiIuJHRbMF0uIjwvYj48L2E+Ijt9DQogICBlY2hvICIgKDxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4rPC9hPikgfCI7DQogIH0NCiAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICBpZiAoJGZ0ID09ICJpbmZvIikNCiAgew0KICAgZWNobyAiPGI+SW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+PHRyPjx0ZD48Yj5QYXRoPC9iPjwvdGQ+PHRkPiAiLiRkLiRmLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPiAiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NRDU8L2I+PC90ZD48dGQ+ICIubWQ1X2ZpbGUoJGQuJGYpLiI8L3RkPjwvdHI+IjsNCiAgIGlmICghJHdpbikNCiAgIHsNCiAgICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOyAgICANCiAgICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQuJGYpKTsNCiAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQuJGYpKTsNCiAgICBlY2hvICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJGQuJGYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkZC4kZikpOw0KICAgfQ0KICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4iYWN0PWNobW9kJmY9Ii51cmxlbmNvZGUoJGYpLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPiIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYT48L3RkPjwvdHI+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCiAgICRmaSA9IGZvcGVuKCRkLiRmLCJyYiIpOw0KICAgaWYgKCRmaSkNCiAgIHsNCiAgICBpZiAoJGZ1bGxoZXhkdW1wKSB7ZWNobyAiPGI+RlVMTCBIRVhEVU1QPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksZmlsZXNpemUoJGQuJGYpKTt9DQogICAgZWxzZSB7ZWNobyAiPGI+SEVYRFVNUCBQUkVWSUVXPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksJGhleGR1bXBfbGluZXMqJGhleGR1bXBfcm93cyk7fQ0KICAgICRuID0gMDsNCiAgICAkYTAgPSAiMDAwMDAwMDA8YnI+IjsNCiAgICAkYTEgPSAiIjsNCiAgICAkYTIgPSAiIjsNCiAgICBmb3IgKCRpPTA7ICRpPHN0cmxlbigkc3RyKTsgJGkrKykNCiAgICB7DQogICAgICRhMSAuPSBzcHJpbnRmKCIlMDJYIixvcmQoJHN0clskaV0pKS4iICI7DQogICAgIHN3aXRjaCAob3JkKCRzdHJbJGldKSkNCiAgICAgew0KICAgICAgY2FzZSAwOiAgJGEyIC49ICI8Zm9udD4wPC9mb250PiI7IGJyZWFrOw0KICAgICAgY2FzZSAzMjoNCiAgICAgIGNhc2UgMTA6DQogICAgICBjYXNlIDEzOiAkYTIgLj0gIiZuYnNwOyI7IGJyZWFrOw0KICAgICAgZGVmYXVsdDogJGEyIC49IGh0bWxzcGVjaWFsY2hhcnMoJHN0clskaV0pOw0KICAgICB9DQogICAgICRuKys7DQogICAgIGlmICgkbiA9PSAkaGV4ZHVtcF9yb3dzKQ0KICAgICB7DQogICAgICAkbiA9IDA7DQogICAgICBpZiAoJGkrMSA8IHN0cmxlbigkc3RyKSkgeyRhMCAuPSBzcHJpbnRmKCIlMDhYIiwkaSsxKS4iPGJyPiI7fQ0KICAgICAgJGExIC49ICI8YnI+IjsNCiAgICAgICRhMiAuPSAiPGJyPiI7DQogICAgIH0NCiAgICB9DQogICAgLy9pZiAoJGExICE9ICIiKSB7JGEwIC49IHNwcmludGYoIiUwOFgiLCRpKS4iPGJyPiI7fQ0KICAgIGVjaG8gIjx0YWJsZSBib3JkZXI9MCBiZ2NvbG9yPSM2NjY2NjYgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz00Pjx0cj48dGQgYmdjb2xvcj0jNjY2NjY2PiIuJGEwLiI8L3RkPjx0ZCBiZ2NvbG9yPTAwMDAwMD4iLiRhMS4iPC90ZD48dGQgYmdjb2xvcj0wMDAwMDA+Ii4kYTIuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOw0KICAgfQ0KICAgJGVuY29kZWQgPSAiIjsNCiAgIGlmICgkYmFzZTY0ID09IDEpDQogICB7DQogICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZTwvYj48YnI+IjsNCiAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKTsNCiAgIH0NCiAgIGVsc2VpZigkYmFzZTY0ID09IDIpDQogICB7DQogICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZSArIENodW5rPC9iPjxicj4iOw0KICAgICRlbmNvZGVkID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpKTsNCiAgIH0NCiAgIGVsc2VpZigkYmFzZTY0ID09IDMpDQogICB7DQogICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZSArIENodW5rICsgUXVvdGVzPC9iPjxicj4iOw0KICAgICRlbmNvZGVkID0gYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpOw0KICAgICRlbmNvZGVkID0gc3Vic3RyKHByZWdfcmVwbGFjZSgiIS57MSw3Nn0hIiwiJ1xcMCcuXG4iLCRlbmNvZGVkKSwwLC0yKTsNCiAgIH0NCiAgIGVsc2VpZigkYmFzZTY0ID09IDQpDQogICB7DQogICAgJHRleHQgPSBmaWxlX2dldF9jb250ZW50cygkZC4kZik7DQogICAgJGVuY29kZWQgPSBiYXNlNjRfZGVjb2RlKCR0ZXh0KTsNCiAgICBlY2hvICI8Yj5CYXNlNjQgRGVjb2RlIjsNCiAgICBpZiAoYmFzZTY0X2VuY29kZSgkZW5jb2RlZCkgIT0gJHRleHQpIHtlY2hvICIgKGZhaWxlZCkiO30NCiAgICBlY2hvICI8L2I+PGJyPiI7DQogICB9DQogICBpZiAoIWVtcHR5KCRlbmNvZGVkKSkNCiAgIHsNCiAgICBlY2hvICI8dGV4dGFyZWEgY29scz04MCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkZW5jb2RlZCkuIjwvdGV4dGFyZWE+PGJyPjxicj4iOw0KICAgfQ0KICAgZWNobyAiPGI+SEVYRFVNUDo8L2I+PG5vYnI+IFs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmZ1bGxoZXhkdW1wPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkZ1bGw8L2E+XSBbPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZkPSIudXJsZW5jb2RlKCRkKS4iXCI+UHJldmlldzwvYT5dPGJyPjxiPkJhc2U2NDogPC9iPg0KPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkVuY29kZTwvYT5dJm5ic3A7PC9ub2JyPg0KPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTImZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuazwvYT5dJm5ic3A7PC9ub2JyPg0KPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTMmZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuaytxdW90ZXM8L2E+XSZuYnNwOzwvbm9icj4NCjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND00JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5EZWNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCjxQPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImh0bWwiKQ0KICB7DQogICBpZiAoJHdoaXRlKSB7QG9iX2NsZWFuKCk7fQ0KICAgZWNobyAkcjsNCiAgIGlmICgkd2hpdGUpIHtjOTlzaGV4aXQoKTt9DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gInR4dCIpIHtlY2hvICI8cHJlPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAiaW5pIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAocGFyc2VfaW5pX2ZpbGUoJGQuJGYsVFJVRSkpOyBlY2hvICI8L3ByZT4iO30NCiAgZWxzZWlmICgkZnQgPT0gInBocHNlc3MiKQ0KICB7DQogICBlY2hvICI8cHJlPiI7DQogICAkdiA9IGV4cGxvZGUoInwiLCRyKTsNCiAgIGVjaG8gJHZbMF0uIjxicj4iOw0KICAgdmFyX2R1bXAodW5zZXJpYWxpemUoJHZbMV0pKTsNCiAgIGVjaG8gIjwvcHJlPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImV4ZSIpDQogIHsNCiAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICAkYyA9IGNvdW50KCRleHQpLTE7DQogICAkZXh0ID0gJGV4dFskY107DQogICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgICRyZnQgPSAiIjsNCiAgIGZvcmVhY2goJGV4ZWZ0eXBlcyBhcyAkaz0+JHYpDQogICB7DQogICAgaWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9DQogICB9DQogICAkY21kID0gc3RyX3JlcGxhY2UoIiVmJSIsJGYsJHJmdCk7DQogICBlY2hvICI8Yj5FeGVjdXRlIGZpbGU6PC9iPjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1jbWQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNtZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiJcIiBzaXplPVwiIi4oc3RybGVuKCRjbWQpKzIpLiJcIj48YnI+RGlzcGxheSBpbiB0ZXh0LWFyZWE8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj48L2Zvcm0+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAic2RiIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAodW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkcikpKTsgZWNobyAiPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJjb2RlIikNCiAgew0KICAgaWYgKGVyZWcoInBocCIuIkJCIDIuKC4qKSBhdXRvLWdlbmVyYXRlZCBjb25maWcgZmlsZSIsJHIpKQ0KICAgew0KICAgICRhcnIgPSBleHBsb2RlKCJcbiIsJHIpOw0KICAgIGlmIChjb3VudCgkYXJyID09IDE4KSkNCiAgICB7DQogICAgIGluY2x1ZGUoJGQuJGYpOw0KICAgICBlY2hvICI8Yj5waHBCQiBjb25maWd1cmF0aW9uIGlzIGRldGVjdGVkIGluIHRoaXMgZmlsZSE8YnI+IjsNCiAgICAgaWYgKCRkYm1zID09ICJteXNxbDQiKSB7JGRibXMgPSAibXlzcWwiO30NCiAgICAgaWYgKCRkYm1zID09ICJteXNxbCIpIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXNxbCZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkZGJob3N0KS4iJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRidXNlcikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkZGJwYXNzd2QpLiImc3FsX3BvcnQ9MzMwNiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYm5hbWUpLiJcIj48Yj48dT5Db25uZWN0IHRvIERCPC91PjwvYj48L2E+PGJyPjxicj4iO30NCiAgICAgZWxzZSB7ZWNobyAiQnV0LCB5b3UgY2FuJ3QgY29ubmVjdCB0byBmb3J1bSBzcWwtYmFzZSwgYmVjYXVzZSBkYi1zb2Z0d2FyZT1cIiIuJGRibXMuIlwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYzk5c2hlbGwuIFBsZWFzZSwgcmVwb3J0IHVzIGZvciBmaXguIjt9DQogICAgIGVjaG8gIlBhcmFtZXRlcnMgZm9yIG1hbnVhbCBjb25uZWN0Ojxicj4iOw0KICAgICAkY2ZndmFycyA9IGFycmF5KCJkYm1zIj0+JGRibXMsImRiaG9zdCI9PiRkYmhvc3QsImRibmFtZSI9PiRkYm5hbWUsImRidXNlciI9PiRkYnVzZXIsImRicGFzc3dkIj0+JGRicGFzc3dkKTsNCiAgICAgZm9yZWFjaCAoJGNmZ3ZhcnMgYXMgJGs9PiR2KSB7ZWNobyBodG1sc3BlY2lhbGNoYXJzKCRrKS4iPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPGJyPiI7fQ0KICAgICBlY2hvICI8L2I+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIH0NCiAgIH0NCiAgIGVjaG8gIjxkaXYgc3R5bGU9XCJib3JkZXIgOiAwcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMWVtOyBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDFlbTsgbWFyZ2luLXJpZ2h0OiAxZW07IG1hcmdpbi1sZWZ0OiAxZW07IGJhY2tncm91bmQtY29sb3I6ICIuJGhpZ2hsaWdodF9iYWNrZ3JvdW5kIC4iO1wiPiI7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9DQogICBoaWdobGlnaHRfZmlsZSgkZC4kZik7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtjOTlzaGV4aXQoKTt9DQogICBlY2hvICI8L2Rpdj4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJkb3dubG9hZCIpDQogIHsNCiAgIEBvYl9jbGVhbigpOw0KICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KICAgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5maWxlc2l6ZSgkZC4kZikpOw0KICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIlwiOyIpOw0KICAgZWNobyAkcjsNCiAgIGV4aXQ7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gIm5vdGVwYWQiKQ0KICB7DQogICBAb2JfY2xlYW4oKTsNCiAgIGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7DQogICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iLnR4dFwiOyIpOw0KICAgZWNobygkcik7DQogICBleGl0Ow0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJpbWciKQ0KICB7DQogICAkaW5mID0gZ2V0aW1hZ2VzaXplKCRkLiRmKTsNCiAgIGlmICghJHdoaXRlKQ0KICAgew0KICAgIGlmIChlbXB0eSgkaW1nc2l6ZSkpIHskaW1nc2l6ZSA9IDIwO30NCiAgICAkd2lkdGggPSAkaW5mWzBdLzEwMCokaW1nc2l6ZTsNCiAgICAkaGVpZ2h0ID0gJGluZlsxXS8xMDAqJGltZ3NpemU7DQogICAgZWNobyAiPGNlbnRlcj48Yj5TaXplOjwvYj4mbmJzcDsiOw0KICAgICRzaXplcyA9IGFycmF5KCIxMDAiLCI1MCIsIjIwIik7DQogICAgZm9yZWFjaCAoJHNpemVzIGFzICR2KQ0KICAgIHsNCiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW1nJmQ9Ii51cmxlbmNvZGUoJGQpLiImaW1nc2l6ZT0iLiR2LiJcIj4iOw0KICAgICBpZiAoJGltZ3NpemUgIT0gJHYgKSB7ZWNobyAkdjt9DQogICAgIGVsc2Uge2VjaG8gIjx1PiIuJHYuIjwvdT4iO30NCiAgICAgZWNobyAiPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgfQ0KICAgIGVjaG8gIjxicj48YnI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB3aWR0aD1cIiIuJHdpZHRoLiJcIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIGJvcmRlcj1cIjFcIj48L2NlbnRlcj4iOw0KICAgfQ0KICAgZWxzZQ0KICAgew0KICAgIEBvYl9jbGVhbigpOw0KICAgICRleHQgPSBleHBsb2RlKCRmLCIuIik7DQogICAgJGV4dCA9ICRleHRbY291bnQoJGV4dCktMV07DQogICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTsNCiAgICByZWFkZmlsZSgkZC4kZik7DQogICAgZXhpdDsNCiAgIH0NCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiZWRpdCIpDQogIHsNCiAgIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogICB7DQogICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkZC4kZik7fQ0KICAgICRmcCA9IGZvcGVuKCRkLiRmLCJ3Iik7DQogICAgaWYgKCEkZnApIHtlY2hvICI8Yj5DYW4ndCB3cml0ZSB0byBmaWxlITwvYj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICBlY2hvICI8Yj5TYXZlZCE8L2I+IjsNCiAgICAgZndyaXRlKCRmcCwkZWRpdF90ZXh0KTsNCiAgICAgZmNsb3NlKCRmcCk7DQogICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkZC4kZiwkc3RhdFs5XSwkc3RhdFs4XSk7fQ0KICAgICAkciA9ICRlZGl0X3RleHQ7DQogICAgfQ0KICAgfQ0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcikpOw0KICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgIGlmICgkcm93cyA+IDMwKSB7JHJvd3MgPSAzMDt9DQogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIlNhdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInJlc2V0XCIgdmFsdWU9XCJSZXNldFwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9JyIuYWRkc2xhc2hlcygkc3VybC4iYWN0PWxzJmQ9Ii5zdWJzdHIoJGQsMCwtMSkpLiInO1wiIHZhbHVlPVwiQmFja1wiPjxicj48dGV4dGFyZWEgbmFtZT1cImVkaXRfdGV4dFwiIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRyKS4iPC90ZXh0YXJlYT48L2Zvcm0+IjsNCiAgfQ0KICBlbHNlaWYgKCFlbXB0eSgkZnQpKSB7ZWNobyAiPGNlbnRlcj48Yj5NYW51YWxseSBzZWxlY3RlZCB0eXBlIGlzIGluY29ycmVjdC4gSWYgeW91IHRoaW5rLCBpdCBpcyBtaXN0YWtlLCBwbGVhc2Ugc2VuZCB1cyB1cmwgYW5kIGR1bXAgb2YgXCRHTE9CQUxTLjwvYj48L2NlbnRlcj4iO30NCiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5Vbmtub3duIGV4dGVuc2lvbiAoIi4kZXh0LiIpLCBwbGVhc2UsIHNlbGVjdCB0eXBlIG1hbnVhbGx5LjwvYj48L2NlbnRlcj4iO30NCiB9DQp9DQp9DQplbHNlDQp7DQogQG9iX2NsZWFuKCk7DQogJGltYWdlcyA9IGFycmF5KA0KImFycm93X2x0ciI9Pg0KIlIwbEdPRGxoSmdBV0FJQUFBQUFBQVAvLy95SDVCQVVVQUFFQUxBQUFBQUFtQUJZQUFBSXZqSStweSswUEY0aTBnVnZ6dVZ4WERub1EiLg0KIlNJclVaR1pvZXJLZjI4S2pQTlBPYWt1NVJmWit1UXNLaDhSaW9nQUFPdz09IiwNCiJiYWNrIj0+DQoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLzkzZDNjREF3SWFHaGdRRUJQLy8vd0FBQUNINUJBRUFBQVlBTEFBQUFBQVVBQlFBQUFNOCIuDQoiYUxyYy9qREtTV1dwalZ5c1NOaVlKNENVT0JKb3FqbmlJTHp3dXpMdFlOLzN6QlNFcmY2a0JXK2dLUmlQUmdoUGgrRUZLMG1PVUVxdCIuDQoiV2cwSkFEcz0iLA0KImJ1ZmZlciI9Pg0KIlIwbEdPRGxoRkFBVUFLSUFBQUFBQVAvLy8vajQrTjNkM2N6TXpMS3lzb2FHaHYvLy95SDVCQUVBQUFjQUxBQUFBQUFVQUJRQUFBTm8iLg0KImVMcmNyaWJHOTB5NEYxQW11NStOaFkya3hsMkNNS3dyUVJTR3VWanA0TG13REFXcWlBR0ZYQ2hnK3hoblJCK3B0TE9oYWkxY3JFbUQiLg0KIkRsd3Y0Y0VDNDZtaTJZZ0pRS2F4c0VHREZubkd3V0RURXpqOWpyUFJkYmh1RzhDci8ySU5aSU9FaFhzYkR3a0FPdz09IiwNCiJjaGFuZ2UiPT4NCiJSMGxHT0RsaEZBQVVBTVFmQUwzaGo3blgrcHFvMWVqeS9mN1lBY1RiKzh2aCs2RnRINTZXWnR2ci9SQVFFWmVjeDlMbC9QWDYvdjMrIi4NCiIvM2VIdDZxODhlSHUvWmtmSDN5VnlJdVF0KzcyL2tPbTk5Zm8vUDhBWm01N3JrR1M0SGV6NnBpbDlvZXAzR1ptWnYvLy95SDVCQUVBIi4NCiJBQjhBTEFBQUFBQVVBQlFBQUFXZjRDZU9aR21lNk5tdExPdWxYK2M0VFZOVlE3ZTlxRnpmZzRIRm9ua2RKQTVTNTRjYlJBb0Z5RU9DIi4NCiJ3U2lVdG1Za2tyZ3dPQWVBNXpycWFMbGRCaU5NSUplRDI2NlhZVGdRRG01Ung4bWRHK29BYlNZZGFINEdhM2M4SkJNSmFYUUdCUWdBIi4NCiJDSGtqRTRhUWtRMEFsU0lUYW4rWkFRcWtpaVFQajFBRkFhTUtFS1lqRDM5UXJLd0tBYThuR1FLOEFndS9DeFRDc0NNZXhzZkl4akRMIi4NCiJ6TXNoQURzPSIsDQoiZGVsZXRlIj0+DQoiUjBsR09EbGhGQUFVQU9aWkFQejgvTlBGeU5nSExzMFlPdlB6OC9iMjlzYWNwTlhWMWZYMTljd1hPZkR3OEtlbnAvbjUrZXRnZXVucCIuDQoiNmRjR0xNTXBSdXJxNnBLU2t0dmIyKy92Nysxd2gzUjBkUG5QMTdpQWlweHllbDlmWDdkamNzY1NNOTNkM1pHUmtlRXNUZXZkNExDdyIuDQoic0dSa1pHcE9VK0lmUStFUU5vaDZmZEljUGVIaDRZV0ZoYkpRWXZMeTh1aSt4bTV1YnN4Y2NPeDhrY000VXRZOVdlQWRRWW1KaWZXdiIuDQoidkh4OGZNbkp5Y00zVWYzdjhyUnVlOThPTmJPenM5WUZLNVNVbEtZb1ArVGs1TjBvU3VmbjU3WkdXc1FyUjlrSUw1Q1FrT1BqNDJWbCIuDQoiWmVBUE51ZEFYOXNLTVB2NysxNVFVNXVibTM5L2Y4ZTV1NHhpYXRyYTJ1Ykt6OFBEdytwZmVlOS9sTUswdDgxcmZkOEFLZi8vL3dBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINSIuDQoiQkFFQUFGa0FMQUFBQUFBVUFCUUFBQWVzZ0ZtQ2c0U0Zob2VJaGlVZklJbUlNbGdRQjQ2R0xBbFlRa2FGVlZoU0FJWkxUNWNiRVlJNCIuDQoiU1RvNU14T2ZoUXdCQTFnWUNoY2tRQmsxT3dpSUFMQUNMa2d4SmlsVEJJNjlSRmhERmg0SERKUlpWRmdQUEZCUjBGa05XRGRNSEE4RyIuDQoiQlpUYU1DSVNWZ01DNElrVldDY2FQU2k5Nk9xR05GaEtJMDRkZ3IwUVdGY0tETDNBNHVPSWpWWlpBQnhRSVdEQkxrSUVRclJvUXNIUSIuDQoiandWRkhCZ2lFR1FGSWdRYXNZa2NTYkpRSUFBNyIsDQoiZG93bmxvYWQiPT4NCiJSMGxHT0RsaEZBQVVBTE1JQUFEL0FBQ0FBSUFBQU1EQXdIOS9mLzhBQVAvLy93QUFBUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWdBTEFBQUFBQVVBQlFBQUFST0VNbEpxNzA0VXlHT3ZrTGhmVlU0a3BPSlNweDVuRjlZaUN0TGYwU3VIN3B1Ii4NCiJFWU9nY0Jna3dBaUdwSEtaekIySnhBREFTUUZDaWRRSnNNZmRHcXNESm5PUWxYVFAzOHByeldiWDNxZ0lBRHM9IiwNCiJmb3J3YXJkIj0+DQoiUjBsR09EbGhGQUFVQVBJQUFBQUFBUC8vLzkzZDNjREF3SWFHaGdRRUJQLy8vd0FBQUNINUJBRUFBQVlBTEFBQUFBQVVBQlFBQUFNOCIuDQoiYUxyYy9qREsyUXA5eFY1V2lONUc1MEZaYVJMRDZJaEU2NkxwdDNSRGJkOUNRRlNFNFArK1FXN0hlN1VLUGgwSXFWdzJsMFJRU0VxdCIuDQoiV3FzSkFEcz0iLA0KImhvbWUiPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vK3JxNnQzZDNjek16TEt5c29hR2htWm1aZ1FFQlAvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSK01NazVUVFdJNmlweU1vTzNjVVdSZ2VKb0NDYUxvS08wbXEwWnhqTlNCRFdTIi4NCiJrcnFBc0xmSjdZUUJsNHRpUkNZRlNwUE1kUlJDb1FPaUw0aThDZ1pnazA5V2ZXTEJZWkhCNlVXakNlcXV3RURIdU9FVkszUXRnTi9qIi4NCiJWd01yQkRadmdGK0NoSGFHZVlpQ0JRWUhDSDhWQkphV2RBZVNsNVlpVzUrZ29CSVJBRHM9IiwNCiJtb2RlIj0+DQoiUjBsR09EbGhIUUFVQUxNQUFBQUFBUC8vLzZDZ3BOM2QzY3pNeklhR2htWm1abDlmWC8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFkQUJRQUFBU0JFTWxKcTcwNDYxbTYvK0FIWk1VZ25HaXFuaU5XSEhBc3ozRjdGVUd1NzN4TyIuDQoiMkJaY3dHRG9FWGsvVXE0SUNBQ2VRNmZ6bVhUbG5zMGRkbGU5OWI3Y0Z2WXBFUjU1WjEwWHkxbEt0OHdwb0lzQUNyZGFxQnBZRVlLLyIuDQoiZEgxTFJXaUVlMHBSVFhCdlZId1VkM282ZUQ2T0hBU1htSm1hbUpVU1k1K2dueHVqcEJJUkFEcz0iLA0KInJlZnJlc2giPT4NCiJSMGxHT0RsaEVRQVVBTE1BQUFBQUFQLy8vL0h4OGVycTZ1UGo0OTNkM2N6TXpMS3lzb2FHaG1abVpsOWZYd1FFQlAvLy93QUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQXdBTEFBQUFBQVJBQlFBQUFSMWtNbEpxMFE0NjB4UitHQW9JTXZraGVJWWxNeUpCa0o4bG02WXhNS2k2eldZIi4NCiIzQUtDWWJqby9ZNEVRcUZnS0lZVWg4RXZ1V1E2UHdQRlFKcFVMcHVuclhaTHJZS3gyMEczb0RBNzA5M0VzdjE5cTVPL3dvRnU5WkFKIi4NCiJSM2x1Zm1XQ1ZYMTNoM0tIZldXTWpHQkRrcE9VVFR1WG1KZ1JBRHM9IiwNCiJzZWFyY2giPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vK3JxNnQzZDNjek16TURBd0xLeXNvYUdobmQzZDJabVpsOWZYMDFOVFNrcEtRUUVCUC8vIi4NCiIvd0FBQUNINUJBRUFBQTRBTEFBQUFBQVVBQlFBQUFTbjBNbDVxajB6NXhyNitKWkdlVVpwSElxUk5PSVJmSVlpeSthNnZjT3BIT2FwIi4NCiJzNUlLUWNjejhYZ0s0RUdnUXFXTXZrclNzY3lsaG9hRlZtdVpMZ1VEQW5aeEVCTU9EU25ya2hpU0NaNENHclVXTUErTExEeHVTSHNEIi4NCiJBa040QzNzZkJYMTBWSGFCSjRRZkE0ZUlVNHBpalFjRm1DVm9Oa0ZsZ2djTVJTY05TVUNkSnlob0Rhc05aNU1URFZzWEJ3bHZpUm1yIi4NCiJDYnE3QzZzSXJxYXdyS3dUdjY4aXlBNnJEaEVBT3c9PSIsDQoic2V0dXAiPT4NCiJSMGxHT0RsaEZBQVVBTVFBQUFBQUFQLy8vL2o0K09QajQ5M2QzY3pNek1EQXdMS3lzcGFXbG9hR2huZDNkMlptWmw5ZlgwMU5UVUpDIi4NCiJRaHdjSFAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkFBTEFBQUFBQVVBQlFBQUFXVklDU0tpa0tXYURtdVNoQ1VianpNd0VvR2hWdnNmSEVFTlJZT2dlZ2xqa2VnMFBGNEtCSUZSTUlCIi4NCiJxQ2FDSjRlSUdRVm9JVldzVGZRb1hNZm9VZm1NWnJnWjJHTkRQR0lJN2dKRExZRXJ3RzF2Z1c4Q0NRdHpnSGlKQW5hRmh5dDJkd1FFIi4NCiJPd2NNWm9aMGtKS1VsWmVPZFFLYlBnZWRqWm1obkFjSmxxYUlxVWVzbUlpa3BFaXhueUpodWxVTWhnMjRhU082WXlFQU93PT0iLA0KInNtYWxsX2RpciI9Pg0KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy81eWNBTTdPWS8vL25QLy96di9PblBmMzkvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVEFCQUFBQVJSRU1sSnE3MDQ2eXA2QnhzaUhFVkJFQUtZQ1VQckRwN0hsWFJkRW9NcUNlYnAiLg0KIi80WWNoZmZ6R1FoSDRZUllQQjJET2xIUGlLd3FkMVBxOHlyVlZnM1FZZUg1UllLNXJKZmFGVVVBM3ZCNGZCSUJBRHM9IiwNCiJzbWFsbF91bmsiPT4NCiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFJZXAzQkU5bWxsaWMzQjVpVnBqZE12aC9NTGMreTFVIi4NCiJwOVBtL0dWdWZjN2ovTXpWLzlYbS9FT205OWJuL05qcC9hN1ErdFRtL0xIUytlWHcvdDNyL05ucC9kam8vTnJxL2ZqNy85dnEvTmZvIi4NCiIvTWJlKzhyaC9NbmcrN2pXK3J2WStyN1orN1hSOWREay9OSGsvTkxsL0xUVStyblgrOHppL0xiVisrZngvZTcyL3ZIMy92TDQvdTMxIi4NCiIvZTMxL3VEdS9kenIvT3J6L2VIdS9mWDYvdkg0L3YvLy8vdisvM2V6NnZmNy8vVDUva0dTNFB2OS83WFYrckhUK3IvYityemErdlA0Ii4NCiIvdXowL3Vyei91NzEvdXZ6L2RUbi9NL2svTjNzL2R2ci9jamcrOFBkKzhIYytzZmYrOFRlKy9EMi9yWEk4ckhGOGJyTTg3Zko4bm1QIi4NCiJ3cjNOODYvRDhLdkI4RjluZUVGb3RFQm50RU5wdEVOcHRTeFVweDFJb0RsZnJUUmNyWmVleVphY3hwbWh6SXVSdHBXWnhJdU91S3F6Ii4NCiI5Wk9Xd1g2SXMzV0l1NWltMDdySjlKMnQyWmVrMG01N3JwcW8xbktDdFVWcnRZaXIzdmY2LzQ2djRZdXU0V1p2ZnI3UDZzUFM2c0RRIi4NCiI2NlhCNmNqWjhhL0s3OS9zL2Ribi9lenovY3pkOW1OMGpLVEI2YWkvNzZXOTduaVh6MkdDd1Y2QXdVZHN0WHlWeUdTRHdubVl6NGlvIi4NCiIyNE9pMWEzQjQ1U3k0YWU5NDRDY3o0U2oxbjJHbGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQWpuQUN0VkNrQ3c0SnhKQVFRcUZCakF4bzBNTkdxc0FCUUFoNkNGQTNuazBNSGlSUkVWRGh6c29MUXdBSjBnVDRUb2VjU0hBWU16Ii4NCiJhUWdvRE5DQ1NCNEVBbkltQ2lTQmpVeUdMb2JnWEJUcGtBQTVJNnBnbVNrRHo1Y3VNU3o4eVdsQXlvQ1pGR2I0U1FLaEFTTUJYSnBNIi4NCiJ1U3JRRVF3a0dqWWtRQ1RBeTZBbFVNaFdrbFFCdzRNRWhnU0E2WFBnUnhTNWlpNDBLTEZnaTRCR1RFS0FzQ0tYaWhFU0N6cnNnU1FDIi4NCiJ5SWtVVitTcU9ZTENBNGNzQXVwODZPR0RrTnc0QnBRNE9hQkZnQjBURXlJVUtxRHdUUnM0YTl5TUNTT21EQm95WnU0c0pLQ2d3SURqIi4NCiJ5QXNva0JrUUFEcz0iLA0KIm11bHRpcGFnZSI9PiJSMGxHT0RsaENnQU1BSkVEQVAvLy8vLzNtUUFBQUFBQUFDSDVCQUVBQUFNQUxBQUFBQUFLQUF3QUFBSWozSVIiLg0KInBKaENPRG5vdmlkQW92QmRNenpraXhsWGRsSTJvWnBKV0VzU3l3THpSVUFBQU93PT0iLA0KInNvcnRfYXNjIj0+DQoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYSIuDQoiU0xyY1BjRTlHS1VhUWxRNXNONVBsb0ZMSjM1T29LNnE1U1lBT3c9PSIsDQoic29ydF9kZXNjIj0+DQoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYiIuDQoiU0xyY09qQkNCNFVWSVRneUx0NWNoMm1nU0paREJpN3A2aElKQURzPSIsDQoic3FsX2J1dHRvbl9kcm9wIj0+DQoiUjBsR09EbGhDUUFMQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuDQoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuDQoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuDQoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuDQoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuDQoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuDQoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuDQoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuDQoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuDQoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuDQoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuDQoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFKQUFzQSIuDQoiQUFnNEFQOEpSRUZRNEQrQ0NCT2k0TWF3SVRlRkNnL2lRaEVQeGNTQmxGQ29RNUZ4NE1TS3YxQmdSR0dNbzBpSkZDMmVoSGpTb010LyIuDQoiQVFFQU93PT0iLA0KInNxbF9idXR0b25fZW1wdHkiPT4NCiJSMGxHT0RsaENRQUtBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQW9BIi4NCiJBQWdqQVA4SlJFRlE0RCtDQ0JPaU1NaFFvY0tERUJjdWpFaVJvc1NCRmpGZW5PaHdZVUFBT3c9PSIsDQoic3FsX2J1dHRvbl9pbnNlcnQiPT4NCiJSMGxHT0RsaERRQU1BUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQU5BQXdBIi4NCiJBQWd6QUZFSUhFaXdvTUdEQ0JINlcwZ3RvVUIvLzFCRU5PaVAyc0tFQ3pOZU5JaXFZMGQvRkJmK3kwalI0OGVRR1VjNkpCZ1FBRHM9IiwNCiJ1cCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8vajQrT1BqNDkzZDNjek16TEt5c29hR2hrMU5UZi8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIwTU1sSnE3MzRuczFQbmtjZ2pnWHdoY05RcklWaG1Gb256eHdRam5pZTI3amciLg0KIis0UWd5M1hnQlg0SW9IRGxNaFJ2Z2dGaUdpU3dXczVYeURmdFdwbEVKKzlIUUN5eDJjMVlFRFJmd3dmeHRvcDRwNTNQd0xLT2p2dlYiLg0KIklYdGRnd2dkUEdkWWZuZzFJVmVKYVRJQWtwT1VsWllmSHhFQU93PT0iLA0KIndyaXRlIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLzkzZDNjek16TEt5c29hR2htWm1abDlmWHdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcXl6RmFscUVRSnVHRVFTQ25XZzZGb2dwa0hBTUY0SEFKc1doNy96ZSIuDQoiRVFZUUxVQXNHZ00wV3d0M2JDSmZRU0Z4MTB5eUJsSm44UmZFTWdNOVgrM3FIV3E1aUVENXlDc01DbDExMWtuRHB1WGZZbHMrSUs2MSIuDQoiTFhkK1dXRUhMVWQvVG9KRlpRT09qNUNSamlDQmxaYVhJQkVBT3c9PSIsDQoiZXh0X2FzcCI9Pg0KIlIwbEdPRGRoRUFBUUFMTUFBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ01EQXdJQ0FnUDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8veXdBQUFBQUVBQVFBQUFFU3ZESVNhc0YyTjZETU5BUzhCeGZsMVVpT1pZZTlhVXdncERUcTZxUC9JWDBPejdBWFUvMWVSZ0kiLg0KIkQ2SFBoempTZUxZZFlhYnNEQ1dNWndoZzNXV3RLSzRRck1Ib2hDQVMraEFCQURzPSIsDQoiZXh0X21wMyI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd0lDQUFQLy9BQUFBQUFBQUFBTlUiLg0KImFHclM3aXVLUUdzWUlxcHA2UWlaUkRRV1lBSUxRUVNBMmcybzRRb0FTSEd3dkJiQU4zR1gxcVhBK3IxYUJRSFJaSE1FRFNZQ3ozZmMiLg0KIklHdEdUOHdBVXdsdHp3V05XUlYzTERueFlNMXViNkduZUR3QkFEcz0iLA0KImV4dF9hdmkiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdQOEFBQUFBQUFBQUFBQUFBQU5NIi4NCiJXRnJTN2l1S1FHc1lJcXBwNlFpWjFGRkFDWWlqQjRSTXFqYlkwMUR3V2c0NGdBc3JQNVFGazI0SHVPaE9ESndTVS9JaEJZVGNqeGU0Ii4NCiJQWVhDeWcrVjJpNDRYZVJtU2ZZcXNHaEFBZ0E3IiwNCiJleHRfY2dpIj0+DQoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUV3QUxBQUFBQUFRQUJBQWhnQUFBSnRxQ0hkM2Q3aU5HYStITXU3ZXI5R2lDNitJT091OSIuDQoiRGtKQVBxeUZRcWwvTi9EbGhzeXlmZTY3QWYvU0ZQLzhrZi85bEQ5RVR2L1BDdi9jUS8vZU52L1hJZi9aS1AvUkR2L2JMZi9jTWFoNiIuDQoiTFBQWVJ2emdSK3ZneDd5Vk12L2xVdi9tVHYvZk9mL01Bdi9tY2YvTkEvL3FpZi9NQVAvVEZmL3hwN3VaVmYvV0lQL09CcXQvSHYvUyIuDQoiRXYvaFArN09PUC9XSHYvd2JITmZQNFZ6Vjd1UEZ2L3BWLy9yWGYveWNmL3pkdi8wZVVOSldFTktXc3lrSWs5UldNeXRQLy80aUVwUSIuDQoiWHYvOXFmYnB0UC91WjkzR2lOcTZYV3BSSi8vaVF2N3dzcXVFUXYvalJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVlZ0V5Q2cwd0JoSWVIQVlxSWpBRXdob3lFQVFRWEJKQ1JoUU11QTVlU2lvb0dJd2FmaTRVTSIuDQoiQmFnTkZCTWNEUjRGUXd3QkFnRUdTQkJFRlN3eE5oQXlHZzZXQWt3Q0JBZ3ZGaVVpT0JFZ05VYzd3NElDTkQ4UEtDRkFPaTBKUE5LRCIuDQoiQWtVbkdUa1JOd01TMzRNQkpCZ2RSa0pMQ0Q3cWdnRVBLeHNKS2lZVEJ3ZUpramhRa2s3QWh4UTlGcWdMTUdCR2tHOEtGQ2c4SktBaSIuDQoiUll0TUFnRUFPdz09IiwNCiJleHRfY21kIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFjQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3QUFBZ0lDQUFQLy9BQUFBQUFOSSIuDQoiZUxyY0p6REtDWWU5K0FvZ0J2bGcrRzJkU0FRQWlwSUQ1WEpESU0rMHpOSkZrZEwzREJnNkhteFdNRUFBaFZsUEJoZ1lkclloRFFDTiIuDQoiZG1yWUFNbjFvbnEvWUtwanZFZ0FBRHM9IiwNCiJleHRfY3BwIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQyIuDQoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUlrVllXcVQ0RklDb0o1djdjNnMzY3FyQXJ3aW5FLzM0OUZpTm9GdzQ0cnRscWhPTDRSYSIuDQoiRXE3WXJMREU3YTRTQURzPSIsDQoiZXh0X2luaSI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy84REF3SUNBZ0lDQUFQLy9BQUFBQUFBQUFBTkwiLg0KImFBckIzaW9hTmtLOU1OYkhzNmxCS0lvQ29JMW9VSjRONERDcXFZQnB1TTZocThQM2h3b0VnVTNtYXdFTEJFYVBGaUFVQU1nWXkzVk0iLg0KIlNuRWpnUFZhckhFSGdyQjQzSnZzenNRRUFEcz0iLA0KImV4dF9kaXoiPT4NCiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFQLy8vMTVwaGNmYjZOTHMvN1BjLytQMC8zSitsOWJzIi4NCiIvNTJudXFqSzUvbi8vL2ovLy83Ly8vci8vMHRybHNQbi84bm4vOG5aNXRybTc5bnUvOC9xLzlYdC85encvOTN3LytqMS85SHIvK0R2Ii4NCiIvZDd2LzczSDBNalUzOXp1Lzlici84bmU4dFhuK0s2L3o4WGovTGpWN2REcC82SzR5OGJsLzVPNDJPejIvN0hXOUp1OTJ1LzkvOFQzIi4NCiIvK0wvLys3Ky8rdjYvKy82LzlINC8rWDYvK1hsNVB6Ly8rL3Q3ZlgwOHZELy8rMy8vL1AvLy9ILy8vUDcvOG5xLzhmcC84VGw5OHpyIi4NCiIvKy96OXZUNCsrbjEvYi9rL2RueS85SHYvK3Y0LzkvMC85ZncvOC91Lzh2dC8rLzA5eFV2WGhRdFc0S1RzMlYxa3c0b1ZUZFlwRFpYIi4NCiJwVnhxaGx4cWlFeGtpbUtCdE1QTDJGdHZqMk9WNmFPdXdwcWx1bHlOM2NuTzF3QUFYUUFBWlNNOGpFNVhqZ0FBYndBQWVVUkJZZ0FBIi4NCiJkQUFBZHpaRWFFOXd3RFpZcG1WdmlSNDlqRzEya0NoRm1nWXVqNisxeGVMbjdOemo2cG0yMG9lcXlwUzIxMlNKcmFDeXhaV3l6N1BXIi4NCiI5Yy9vLzg3bi84RFg3TUhZN3EvSzVMZlg5YXJCMXNybC8yK2Z6cTI5MFUxNHE3ZkN6NmUyeVh1bTMwRmpsQ2xIYzRlWHI2YkkrYlRLIi4NCiI0cmZXK05YZTZPYnkvNVN2eldTSHIrYnI4V3VLclFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQWpnQUNzSnJEUkhTSUNEUTdJTVhEZ0p4OEV2WnVJY2JQQm9vWndiQndPTUFmTW1Zd0JDQTJzRWNOQmpKQ01ZQVRMSU9MaW9rb2NtIi4NCiJDMVFza0FDbEN4Y0dCajdFc05Ib1FBY2lTQ0MxbU5BbWpKZ0dHRUJRb0JIaWdLRU5CamhjQ0JBSXpSb0dGa3dRTU5LbnlnZ1JTUkFnIi4NCiIyQkhwREJVZWV3UlYwUERIQ3A0QlNnancwWkdIekpRY0VWRDRJRUhKellrQmZvNHNlWUdsREJ3Z1RDQUFZdkZFNEtFQkpZSTRVclBGIi4NCiJDeUlJSyt3b1lqTXdRUUk2Q29yOG1LRW54UjBuQWhZS2pISkZRWUVDa3FTa1NhMTY0SU02TGhMUnJyM3d3YUJDdTNrUEZLQ2xka0FBIi4NCiJPdz09IiwNCiJleHRfZG9jIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdBQUEvNENBZ0FBQUFBQUFBQUFBQUFOUiIuDQoiV0VyY3JyQ1FRQ3NsUUEyd093ZFhrSUZXTlZCQStubWU0QVpDdW9sblJ3a3dGOVFnRU9QQUZHMjFBK1o0c1FITzk0cjFlSlJUSlZtcSIuDQoiTUlPcnJQU1dXWlJjemE2a2FvbEJDT0IwV294UnVkMEpBRHM9IiwNCiJleHRfZXhlIj0+DQoiUjBsR09EbGhFd0FPQUtJQUFBQUFBUC8vL3dBQXZjYkd4b1NFaFAvLy93QUFBQUFBQUNINUJBRUFBQVVBTEFBQUFBQVRBQTRBQUFNNyIuDQoiV0xUY1RpV1NRYXV0QkVRMWhQK2dsMjFUS0FRQWlvN1M4THhhRzh4MFBiT2NyUWY0dE51OXdhOFdITktLUmw0c2wreTlZQnVBZEVxdCIuDQoieGhJQU93PT0iLA0KImV4dF9oIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQiIuDQoiV0xQYzlYQ0FTU2NaOE1sS0NjQVJSd1ZrRUFLQ0lCS21OcVZycTd3cGJNbWJiYk9ucmdJOEYrcTN3OUdPUU9NUUdaeUpPc3BuTWtLbyIuDQoiV3EvTmtuYmJTZ0FBT3c9PSIsDQoiZXh0X2hwcCI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkYiLg0KIldMUGM5WENBU1NjWjhNbEtpY29iQndSa0VBR0NJQUtFcWFGcXBiWm5tazQyL2Q0M3lyb0ttTEFEbFBCaXM2THdLTkFGajdqZmFXVlIiLg0KIlVxVWFnbmJMZFphK1lGY0NBRHM9IiwNCiJleHRfaHRhY2Nlc3MiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQOEFBUDhBL3dBQWdJQUFnUC8vQUFBQUFBQUFBQU02Ii4NCiJXRVhXL2s2UkFHc2ptRm9ZZ05CYkV3akRCMjVkR1p6VkNLZ3NSOExoU25wclBRNDA2cGFmbWtEd1V1bUl2SkJvUkFBQWxFdURFd3BKIi4NCiJBQUE3IiwNCiJleHRfaHRtbCI9Pg0KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy8ydHJuTTNQL0ZCVmhyUE85bDZJdG95dDB5aGdrK1h5L1dHcDRzWGwvaTZaNG1mZC9ITnoiLg0KImMvLy8veUg1QkFFQUFBOEFMQUFBQUFBVEFCQUFBQVNUOE1sM3FxMW02bm1DLzRHaGJGb1hKRU8xQ0FORFNvY2lHa2JBQ0hpMjBVM1AiLg0KIktJRkdJakFRT0RTaUJXTzVOQXhSUm1UZ2dEZ2ttTTdFNmlpcEhaWUtCVk5RU0JTaWt1a1N3VzRqeW1jdXBZRmdJQnFML01LOEtCRGsiLg0KIkJreDJCWFdEZlg4VEREYUZEQTBLQkFkOWZuSUtIWFlJQkpnSEJRT0hjZytWQ2lrVkE1d0xwWWdiQkt1ckRxeXNueE1PczdTMXN4SVIiLg0KIkFEcz0iLA0KImV4dF9qcGciPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWtBTEFBQUFBQVFBQkFBZ3dBQUFQLy8vOERBd0lDQWdJQ0FBUDhBQUFEL0FJQUFBQUNBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSY2NNaEprNzBqNkszRnVGYkdiVUx3SmNVaGpnSGdBa1VxRWdKTkVFQWd4RWNpIi4NCiJDaThBTHNBTGFYQ0dKSzVvMUFHU0JzSUFjQUJnamdDRXdBTUVYcDBCQk1MbC9BNng1V1p0UGZRMmc2KzBqOFZ4KzdiNC9OWnFnZnRkIi4NCiJGeEVBT3c9PSIsDQoiZXh0X2pzIj0+DQoiUjBsR09EZGhFQUFRQUNJQUFDd0FBQUFBRUFBUUFJTC8vLzhBQUFDQWdJREF3TUQvL3dDQWdBQUFBQUFBQUFBRFVDaTYzQ0VneGliSCIuDQoiazBBUXNHMjAwQVFVSkJnQW9NaWhqNWRtSXhuTUp4dHFxMWRkRTBFV09oc0cxNm05TW9vQWlTV0VtVGl1QzRUdzJCQjBMOEZnSUFocyIuDQoiYTAwQWpZWUJiYy9vOUhqTm5pVUFBRHM9IiwNCiJleHRfbG5rIj0+DQoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUZBQUxBQUFBQUFRQUJBQWhnQUFBQUJpQUdQTE1tWE1NMHkvSmxmRkxGUzZLMXJHTFdqTyIuDQoiTlNtdUZUV3pHa0M1SUczVE9vLzFYRTdBSngyb0Q1WDdZb1RxVVlyd1YzL2xUSFRhUVhuZlJtREdNWVhyVWpLUUh3QU1BR2ZOUkh6aSIuDQoiVXd3NUNBQXFBRE9aR2thc0xYTFlRZ2hJQkJOM0RWRzJOV25QUm5EV1J3Qk9BQjV3RlFCQkFBQStBRkczTkFrNUJTR0hFVXF3TUFCayIuDQoiQUFBZ0FBQXdBQUJmQURlMEd4ZUxDeFpjREVLNklVdXhLRmpGTEUzQUoySEhNUktpQ1FXQ0FnQm1BQnB0RGcrSENCWmVEQXFGQldERyIuDQoiTXltVUZRcFdCajJmSmhkdkRRaE9CQzZYRjNmZFIwTzZJUjJPRHdBWkFIUFpRQ1NSRWdBU0FEYVhId0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVaZ0ZCUVBBR0Zob2NBZ29JN09nOEpDZ3NFQlFJV1BRQ0pna0NPa0pLVVA1ZVlVRDZQa1pNNSIuDQoiTktDS1VETXlOVGczQWdnMlM1ZXFVRXBKRGdjRENBeE1UMDZoZ2syNnZBd1VGVWhEdFlwQ3V3WkJ5Qk1SUk15Q1J3TUdSa1VnMHhJZiIuDQoiMWxBZUJpRUFHUmdYRWcwdDRTd3JvQ1lsRFJBbjRTbXBLQ29RSkMvaHFWQXVOR3pnOEU5UktCRWpZQlMwSlNoR2g0VU1vWUFTQmlVUSIuDQoiQURzPSIsDQoiZXh0X2xvZyI9Pg0KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBZ0FMQUFBQUFBUUFCQUFnLy8vL3dBQUFNREF3SUNBZ0lDQUFBQUFnQUFBLy8vL0FBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJRRUtFd0s2VXlCekM0NzVnRUFsdEprbExSQVd6YkNsUmhySzRMeTV5Zzcvd04iLg0KInpMVWFMR0JRQlYyRWdGTFY0eEVPU1NXdDlnUVFCcFJwcXhvVk5hUEtrRmI1RWgvTG1VR3pGNXFFMytFTUlnSUFPdz09IiwNCiJleHRfcGhwIj0+DQoiUjBsR09EbGhFQUFRQUFBQUFDSDVCQUVBQUFFQUxBQUFBQUFRQUJBQWdBQUFBQUFBQUFJbURBNmh5NXJXMEhHb3NmZnNkVHBxdkZsZyIuDQoidDBoa3laM1E2cWxvWjdKaW1vbVZFYit1WEFBQU93PT0iLA0KImV4dF9wbCI9Pg0KIlIwbEdPRGxoRkFBVUFLTC9BUC80LzhEQXdIOS9BUC80QUwrL3Z3QUFBQUFBQUFBQUFDSDVCQUVBQUFFQUxBQUFBQUFVQUJRQVFBTW8iLg0KIkdMcmMzZ09BTVlSNE9PdWRyZWVnUmxCV1NKMWxxSzVzNjRMaldGM2NRTWpwSnBEZjYvL0FCQUE3IiwNCiJleHRfc3dmIj0+DQoiUjBsR09EbGhGQUFVQU1RUkFQK2NuUDlTVXM0QUFQK2NBUC9PQUlRQUFQOWpBTTVqbk02Y1k4NmNuS1hPOThiZXhwd0FBUDh4QVAvTyIuDQoibkFBQUFQLy8vLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFFQSIuDQoiQUJFQUxBQUFBQUFVQUJRQUFBVjdZQ1NPWkdtZTZQbXNiTXVxVUN6UDBBUEx6aEFidVBuUUF3ZUU1MmcwZkRLQ01HZ29PbTRRQjRHQSIuDQoiR0JnYVQyZ01RWWdWalVmU1QzWW9GR0tCUmdCcVBqZ1lERUZ4WFJwREdFSUE0eEFRUU5SMU5Ib01FQUFDQUJGaEl6OHJDbmNNQUdnQyIuDQoiTnlzTGtET1RTQ3NKTkRKYW5UVXFMcU0yS2FhbnFCRWhBRHM9IiwNCiJleHRfdGFyIj0+DQoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUVzQUxBQUFBQUFRQUJBQWhnQUFBQmxPQUZnZEFGQUFBSVlDVXdBOFp3QThaOURZNEpJQyIuDQoiV3YvLy93Q0lXQkUyQUFBeVVKaWNxSVNIbDRDQUFQRDQvK0RnOFBYNi81T1hwTDdIMCsvMi9hR21zVEl5TXRUYzVQLy9zZkw1LzhYRiIuDQoiSGdCWXB3QlVsZ0JXbjFCUUFHOGFJQUJRaFJiZm13RGNrditIMTFub3VFTGxyaXppcGYrVjNuUEEvNDBDVXptbS93QTRYaFZEQUFHRCIuDQoiVXlXZC8waXQvMXUxLzNOekFQOTUwUDk5MG1PNS83djE0WXp2elhMcndvWEkvNXZTLzdEay93QlhvdjlzeXZSandPaGF0UUNIVjE3cCIuDQoidW8wR1VRQlduUCsrOExtNUFQK2o1UUJVbEFDS1dnQTRiakpRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVlZ0FLQ2c0U0ZTeFlORXc0Z01nU09qNDhERkFjSEVVSVpSRVlvSkRRelBUNC9Bd2NRQ1FrZyIuDQoiR3dpcHFxa3FBeElhRlJnWER3TzF0cmNBdWJxN3ZJZUpEaXdoQmNQRXhBeVRsU0VaT3pvNUtUVXhNQ3N2REtPbFNSc2NIRHdlSGtNZCIuDQoiSFVjTXI3R3pCdWZvNkF5ODdMdStpaTBmQWZQMDlBdklFUjhaTmpjNFFTVW1Ub2dZc2NCYUFpVkZrQ2hZeUJDSWl3WGtaRDJvUjNGQiIuDQoidTR0TEFnRUFPdz09IiwNCiJleHRfdHh0Ij0+DQoiUjBsR09EbGhFd0FRQUtJQUFBQUFBUC8vLzhiR3hvU0VoUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQVRBQkFBQUFOSiIuDQoiU0FyRTNsREpGa2E5MXJLcEEvRGdKM0pCYVo2bHNDa1c2cXFrQjRqekY4QlM2NTQ0VzlaQVc0K2cyNlZXeEY5d2Rvd1ptem5sRXVwNyIuDQoiVXBQV0czSWc2SHEvWG1SanVad2tBQUE3IiwNCiJleHRfd3JpIj0+DQoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFnQUxBQUFBQUFRQUJBQWcvLy8vd0FBQUlDQWdNREF3SUNBQUFBQWdBQUEvLy8vQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUlJVTWhKa2IwQzZLMkh1RWlSY2RzQWZLRXhra0RnQm9WeHN0d0FBeXBkdW9hbyIuDQoiYTRTWFQwYzRCRjByVWhGQUVBUVFJOWRtZWJSRVc4eVhDNk54MlFJN0xyWWJ0cEpaTnN4Z3pXNm5MZHE0OWhJQkFEcz0iLA0KImV4dF94bWwiPT4NCiJSMGxHT0RsaEVBQVFBRVFBQUNINUJBRUFBQkFBTEFBQUFBQVFBQkFBaFAvLy93QUFBUEh4OFlhR2hqTm1tYWJLOEFBQW1RQUFnQUNBIi4NCiJnRE9aQURObS96T1ovelAvLzhEQXdEUE0vd0FBL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFWazRDQ09wQWlkMEFDc2JOc01xTnF1QWlBMEFKelNkbDhId01CT1VLZ2hFQXBiRVNCVUZRd0FCSUN4Ii4NCiJPQUFNeGViVGhtQTRFb2NhdGduWUtoYUpoeFVySUJOcmg3anl0L1BaYSswaFljL24wMlY0ZHpadWZZVi9QSUdKYm9LQlFrR1BrRUVRIi4NCiJJUUE3Ig0KICk7DQogLy9Gb3Igc2ltcGxlIHNpemUtIGFuZCBzcGVlZC1vcHRpbWl6YXRpb24uDQogJGltZ2VxdWFscyA9IGFycmF5KA0KICAiZXh0X3RhciI9PmFycmF5KCJleHRfdGFyIiwiZXh0X3IwMCIsImV4dF9hY2UiLCJleHRfYXJqIiwiZXh0X2J6IiwiZXh0X2J6MiIsImV4dF90YnoiLCJleHRfdGJ6MiIsImV4dF90Z3oiLCJleHRfdXUiLCJleHRfeHhlIiwiZXh0X3ppcCIsImV4dF9jYWIiLCJleHRfZ3oiLCJleHRfaXNvIiwiZXh0X2xoYSIsImV4dF9semgiLCJleHRfcGJrIiwiZXh0X3JhciIsImV4dF91dWYiKSwNCiAgImV4dF9waHAiPT5hcnJheSgiZXh0X3BocCIsImV4dF9waHAzIiwiZXh0X3BocDQiLCJleHRfcGhwNSIsImV4dF9waHRtbCIsImV4dF9zaHRtbCIsImV4dF9odG0iKSwNCiAgImV4dF9qcGciPT5hcnJheSgiZXh0X2pwZyIsImV4dF9naWYiLCJleHRfcG5nIiwiZXh0X2pwZWciLCJleHRfamZpZiIsImV4dF9qcGUiLCJleHRfYm1wIiwiZXh0X2ljbyIsImV4dF90aWYiLCJ0aWZmIiksDQogICJleHRfaHRtbCI9PmFycmF5KCJleHRfaHRtbCIsImV4dF9odG0iKSwNCiAgImV4dF9hdmkiPT5hcnJheSgiZXh0X2F2aSIsImV4dF9tb3YiLCJleHRfbXZpIiwiZXh0X21wZyIsImV4dF9tcGVnIiwiZXh0X3dtdiIsImV4dF9ybSIpLA0KICAiZXh0X2xuayI9PmFycmF5KCJleHRfbG5rIiwiZXh0X3VybCIpLA0KICAiZXh0X2luaSI9PmFycmF5KCJleHRfaW5pIiwiZXh0X2NzcyIsImV4dF9pbmYiKSwNCiAgImV4dF9kb2MiPT5hcnJheSgiZXh0X2RvYyIsImV4dF9kb3QiKSwNCiAgImV4dF9qcyI9PmFycmF5KCJleHRfanMiLCJleHRfdmJzIiksDQogICJleHRfY21kIj0+YXJyYXkoImV4dF9jbWQiLCJleHRfYmF0IiwiZXh0X3BpZiIpLA0KICAiZXh0X3dyaSI9PmFycmF5KCJleHRfd3JpIiwiZXh0X3J0ZiIpLA0KICAiZXh0X3N3ZiI9PmFycmF5KCJleHRfc3dmIiwiZXh0X2ZsYSIpLA0KICAiZXh0X21wMyI9PmFycmF5KCJleHRfbXAzIiwiZXh0X2F1IiwiZXh0X21pZGkiLCJleHRfbWlkIiksDQogICJleHRfaHRhY2Nlc3MiPT5hcnJheSgiZXh0X2h0YWNjZXNzIiwiZXh0X2h0cGFzc3dkIiwiZXh0X2h0IiwiZXh0X2h0YSIsImV4dF9zbyIpDQogKTsNCiBpZiAoISRnZXRhbGwpDQogew0KICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogaW1hZ2UvZ2lmIik7DQogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogcHVibGljIik7DQogIGhlYWRlcigiRXhwaXJlczogIi5kYXRlKCJyIixta3RpbWUoMCwwLDAsMSwxLDIwMzApKSk7DQogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7DQogIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5kYXRlKCJyIixmaWxlbXRpbWUoX19GSUxFX18pKSk7DQogIGZvcmVhY2goJGltZ2VxdWFscyBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJGltZywkdikpIHskaW1nID0gJGs7IGJyZWFrO319DQogIGlmIChlbXB0eSgkaW1hZ2VzWyRpbWddKSkgeyRpbWcgPSAic21hbGxfdW5rIjt9DQogIGlmIChpbl9hcnJheSgkaW1nLCRleHRfdGFyKSkgeyRpbWcgPSAiZXh0X3RhciI7fQ0KICBlY2hvIGJhc2U2NF9kZWNvZGUoJGltYWdlc1skaW1nXSk7DQogfQ0KIGVsc2UNCiB7DQogIGZvcmVhY2goJGltZ2VxdWFscyBhcyAkYT0+JGIpIHtmb3JlYWNoICgkYiBhcyAkZCkge2lmICgkYSAhPSAkZCkge2lmICghZW1wdHkoJGltYWdlc1skZF0pKSB7ZWNobygiV2FybmluZyEgUmVtb3ZlIFwkaW1hZ2VzWyIuJGQuIl08YnI+Iik7fX19fQ0KICBuYXRzb3J0KCRpbWFnZXMpOw0KICAkayA9IGFycmF5X2tleXMoJGltYWdlcyk7DQogIGVjaG8gICI8Y2VudGVyPiI7DQogIGZvcmVhY2ggKCRrIGFzICR1KSB7ZWNobyAkdS4iOjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Ii4kdS4iXCIgYm9yZGVyPVwiMVwiPjxicj4iO30NCiAgZWNobyAiPC9jZW50ZXI+IjsNCiB9DQogZXhpdDsNCn0NCmlmICgkYWN0ID09ICJhYm91dCIpIHtlY2hvICI8Y2VudGVyPjxiPkdyZWF0IEZvcjo8YnI+IFRlYW0gU1FMPGJyPk1yIFNvaGF5bDxicj5NciBEYW5nZXIgJiBNZXN0cm8gRHogPGJyPldXVy5URUFNLVNRTC5DT008YSBocmVmPVwiaHR0cDovL3d3cC5pY3EuY29tL3NjcmlwdHMvY29udGFjdC5kbGw/bXNndG89NjU2NTU1XCI+PGltZyBzcmM9XCJodHRwOi8vd3d3LnRlYW0tc3FsLmNvbS9jY1wiIGJvcmRlcj0wIGFsaWduPWFic21pZGRsZT48L2E+LjwvYj4iO30NCj8+DQo8L3RkPjwvdHI+PC90YWJsZT48YSBib29rbWFyaz0ibWluaXBhbmVsIj48YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4NCjx0cj48dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjIiPjxwIGFsaWduPSJjZW50ZXIiPjxiPjo6IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWNtZCZkPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRkKTsgPz4iPjxiPkNvbW1hbmQgZXhlY3V0ZTwvYj48L2E+IDo6PC9iPjwvcD48L3RkPjwvdHI+DQo8dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+RW50ZXI6IDwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImNtZCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjbWQpOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImNtZF90eHQiIHZhbHVlPSIxIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPlNlbGVjdDogPC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kIiBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iY21kIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PHNlbGVjdCBuYW1lPSJjbWQiPjw/cGhwIGZvcmVhY2ggKCRjbWRhbGlhc2VzIGFzICRhbHMpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMV0pLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1swXSkuIjwvb3B0aW9uPiI7fSA/Pjwvc2VsZWN0PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj48L2Zvcm0+PC90ZD48L3RyPjwvVEFCTEU+DQo8YnI+DQo8VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjExNiIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+DQo8dHI+PHRkIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjIiPjxwIGFsaWduPSJjZW50ZXIiPjxiPjo6IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWNtZCZkPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRkKTsgPz4iPjxiPlNoYWRvdydzIHRyaWNrcyA6RCA8L2I+PC9hPiA6OjwvYj48L3A+PC90ZD48L3RyPg0KPHRyPg0KICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSI4MyIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+DQogICAgPGRpdiBhbGlnbj0iY2VudGVyIj5Vc2VmdWwgQ29tbWFuZHMgDQogICAgPC9kaXY+DQogICAgPGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+DQogICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPg0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImNtZCI+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4NCiAgICAgICAgICA8U0VMRUNUIE5BTUU9ImNtZCI+DQogICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ1bmFtZSAtYSI+S2VybmVsIHZlcnNpb24NCiAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0idyI+TG9nZ2VkIGluIHVzZXJzDQogICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0ibGFzdGxvZyI+TGFzdCB0byBjb25uZWN0DQogICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJmaW5kIC9iaW4gL3Vzci9iaW4gL3Vzci9sb2NhbC9iaW4gL3NiaW4gL3Vzci9zYmluIC91c3IvbG9jYWwvc2JpbiAtcGVybSAtNDAwMCAyPiAvZGV2L251bGwiPlN1aWQgYmlucw0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJjdXQgLWQ6IC1mMSwyLDMgL2V0Yy9wYXNzd2QgfCBncmVwIDo6Ij5VU0VSIFdJVEhPVVQgUEFTU1dPUkQhDQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9ImZpbmQgL2V0Yy8gLXR5cGUgZiAtcGVybSAtbyt3IDI+IC9kZXYvbnVsbCI+V3JpdGUgaW4gL2V0Yy8/DQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9IndoaWNoIHdnZXQgY3VybCB3M20gbHlueCI+RG93bmxvYWRlcnM/DQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9ImNhdCAvcHJvYy92ZXJzaW9uIC9wcm9jL2NwdWluZm8iPkNQVUlORk8NCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0ibmV0c3RhdCAtYXR1cCB8IGdyZXAgSVNUIj5PcGVuIHBvcnRzDQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9ImxvY2F0ZSBnY2MiPmdjYyBpbnN0YWxsZWQ/DQoJCQkJCTxPUFRJT04gVkFMVUU9InJtIC1SZiI+Rm9ybWF0IGJveCAoREFOR0VST1VTKQ0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ3Z2V0IGh0dHA6Ly93d3cucGFja2V0c3Rvcm1zZWN1cml0eS5vcmcvVU5JWC9wZW5ldHJhdGlvbi9sb2ctd2lwZXJzL3phcDIuYyI+V0lQRUxPR1MgUFQxIChJZiB3Z2V0IGluc3RhbGxlZCkNCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iZ2NjIHphcDIuYyAtbyB6YXAyIj5XSVBFTE9HUyBQVDINCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi96YXAyIj5XSVBFTE9HUyBQVDMNCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0id2dldCBodHRwOi8vZnRwLnBvd2VybmV0LmNvbS50ci9zdXBlcm1haWwvZGVidWcvazMiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQxIChJZiB3Z2V0IGluc3RhbGxlZCkNCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyAxIj5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDEpDQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9Ii4vazMgMiI+S2VybmVsIGF0dGFjayAoS3JhZC5jKSBQVDIgKEwyKQ0KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDMiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMMykNCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyA0Ij5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDQpDQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9Ii4vazMgNSI+S2VybmVsIGF0dGFjayAoS3JhZC5jKSBQVDIgKEw1KQ0KICAgICAgICAgICAgICAgICAgPC9TRUxFQ1Q+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+DQogICAgICAgICZuYnNwOw0KICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPg0KICAgICAgICAgIDxicj4NCiAgICAgICAgV2FybmluZy4gS2VybmVsIG1heSBiZSBhbGVydGVkIHVzaW5nIGhpZ2hlciBsZXZlbHMgPC9kaXY+DQogICAgPC9mb3JtPg0KICAgIDwvdGQ+DQogIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjgzIiB2YWxpZ249InRvcCI+PGNlbnRlcj4NCiAgIDxjZW50ZXI+S2VybmVsIEluZm86IDxmb3JtIG5hbWU9ImZvcm0xIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaHR0cDovL2dvb2dsZS5jb20vc2VhcmNoIj4NCiAgICAgIDxpbnB1dCBuYW1lPSJxIiB0eXBlPSJ0ZXh0IiBpZD0icSIgdmFsdWU9Ijw/cGhwIGVjaG8gd29yZHdyYXAocGhwX3VuYW1lKCkpOyA/PiI+DQogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjbGllbnQiIHZhbHVlPSJmaXJlZm94LWEiPg0KCSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icmxzIiB2YWx1ZT0ib3JnLm1vemlsbGE6ZW4tVVM6b2ZmaWNpYWwiPg0KCSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaGwiIHZhbHVlPSJlbiI+DQoJICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJocyIgdmFsdWU9ImI3cCI+DQoJICA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT0iYnRuRyIgVkFMVUU9IlNlYXJjaCI+DQogICAgPC9mb3JtPjwvY2VudGVyPg0KICAgIDwvdGQ+DQo8L3RyPjwvVEFCTEU+PGJyPg0KPFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4NCjx0cj4NCiA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1zZWFyY2gmZD08P3BocCBlY2hvIHVybGVuY29kZSgkZCk7ID8+Ij48Yj5TZWFyY2g8L2I+PC9hPiA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ic2VhcmNoIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNlYXJjaF9uYW1lIiBzaXplPSIyOSIgdmFsdWU9IiguKikiPiZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2VhcmNoX25hbWVfcmVnZXhwIiB2YWx1ZT0iMSIgIGNoZWNrZWQ+IC0gcmVnZXhwJm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJTZWFyY2giPjwvZm9ybT48L2NlbnRlcj48L3A+PC90ZD4NCiA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD11cGxvYWQmZD08P3BocCBlY2hvICR1ZDsgPz4iPjxiPlVwbG9hZDwvYj48L2E+IDo6PC9iPjxmb3JtIG1ldGhvZD0iUE9TVCIgRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJ1cGxvYWQiPjxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1cGxvYWRmaWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ibWluaWZvcm0iIHZhbHVlPSIxIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IlVwbG9hZCI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPGJyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMSIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IE1ha2UgRGlyIDo6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibWtkaXIiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtkaXIiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkNyZWF0ZSI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBNYWtlIEZpbGUgOjo8L2I+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Im1rZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJta2ZpbGUiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZnQiIHZhbHVlPSJlZGl0Ij4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkNyZWF0ZSI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+DQo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRGlyIDo6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibHMiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJHbyI+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRmlsZSA6OjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImdvZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJHbyI+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPg0KPGJyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz0wIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9Ijk5MCIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PHAgYWxpZ249ImNlbnRlciI+PGI+LS1bIGM5OXNoZWxsIHYuIDw/cGhwIGVjaG8gJHNodmVyOyA/PiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1hYm91dCI+PHU+PGI+cG93ZXJlZCBCeTwvYj48L3U+PC9hPiBNYWhtb3VkIFNRTCB8IDxhIGhyZWY9Imh0dHA6Ly90ZWFtLXNxbC5jb20vY2MiPjxmb250IGNvbG9yPSIjRkYwMDAwIj5UZWFtIFNRTDwvZm9udD48L2E+PGZvbnQgY29sb3I9IiNGRjAwMDAiPjwvZm9udD4gfCBHZW5lcmF0aW9uIHRpbWU6IDw/cGhwIGVjaG8gcm91bmQoZ2V0bWljcm90aW1lKCktc3RhcnR0aW1lLDQpOyA/PiBdLS08L2I+PC9wPjwvdGQ+PC90cj48L3RhYmxlPg0KPC9ib2R5PjwvaHRtbD48P3BocCBjaGRpcigkbGFzdGRpcik7IGM5OXNoZXhpdCgpOyA/Pg==")); ?>



Hizkuntza: Euskaraz





Pelikula

Fitxa Teknikoa

Zuzendaria: Lander Etxadona, Aritz Lazkano

Argazki zuzendaria: Andoni Mendizabal

Posprodukzio soinua: Iñigo Etxarri