xiaomianao666

小程序:MyFieldᴰⁿ

Oct 28th, 2021
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@MyFieldᴰⁿ@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiTXlGaWVsZOG0sOKBvyIsImF1dGhvciI6IuaWreW/tSbpgZPplb/prZTmlLkiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IiwidmVyc2lvbiI6MzcwLCJjb2xfdHlwZSI6InRleHRfY2VudGVyXzEiLCJjbGFzc19uYW1lIjoiIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG5jb25zdCB7ZGVtb0RhdGEsZGVmYXVsdFNldHMsZmxvb3JzfSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9kZW1vRGF0YT9ydWxlPU15RmllbGThtLDigb9cIik7XG5jb25zdCB7Z2V0T25lLHVuaXF1ZTIsZHVwbGljYXRlc30gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvdXRpbHM/cnVsZT1NeUZpZWxk4bSw4oG/XCIpO1xubGV0IHNqVGVzdCA9W107Zm9yKGxldCBpIGluIGRlbW9EYXRhKXtzalRlc3Q9c2pUZXN0LmNvbmNhdChkZW1vRGF0YVtpXSl9XG50aGlzLmQgPSBbXTtcbmNvbnN0IGp4SXRlbSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XCIpO1xudmFyIFJvdXRlID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbmV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcbi8vIG16UG9wdXAoKTtcbnZhciBqeE9sZFYgPSBnZXRWYXIoJ2p4T2xkVicpO1xudmFyIGp4TmV3ViA9IGdldFZhcignanhOZXdWJyk7XG52YXIgdmVyc2lvblRpcHMgPSBwYXJzZUZsb2F0KGp4TmV3VikgPiBwYXJzZUZsb2F0KGp4T2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIGp4TmV3ViArICdcXG7lhYjmm7TmlrDlsI/nqIvluo/nhLblkI7ngrnlh7vkuIvmlrnmjInpkq7mi4nlj5boh7PmnKzlnLDigJnigJknIDogJ3YnK2p4T2xkVjtcbmQucHVzaCh7XG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8YmlnPjxzcGFuIHN0eWxlPVwiY29sb3I6IzBDMDAwMFwiPuaWreaPkiDpgZPplb/prZTmlLknLFxuICAgIGRlc2M6IHZlcnNpb25UaXBzLFxuICAgIHVybDogUm91dGUuc3pQYXJzZSxcbiAgICAvL3VybDogJ3RvYXN0Oi8v6L+Z5piv5qCH6aKYJyxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXG59KTtcblxuZnVuY3Rpb24gY3pHdWlkZSgpIHtcbiAgICByZXR1cm4gJCgpLnJ1bGUoKGspID0+IHtcbiAgICAgICAgc2V0UmVzdWx0KFt7XG4gICAgICAgICAgICB0aXRsZTogZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL0d1aWRlP3J1bGU9TXlGaWVsZOG0sOKBv1wiKSkpLnJ1bGUsXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcbiAgICAgICAgfV0pO1xuICAgIH0pXG59XG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xuICAgIC8vY2xlYXJWYXIoXCJwYXJzZVVybC51cmxcIik7XG4gICAgY2xlYXJJdGVtKFwiY2xhc3NcIik7XG59KSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOiflvIDlp4vop6PmnpAnLFxuICAgIGNvbF90eXBlOiAnaW5wdXQnLFxuICAgIGRlc2M6IFwi6K+36L6T6Kej5p6Q5Zyw5Z2AXCIsXG4gICAgdXJsOiQudG9TdHJpbmcoKCk9PntcbiAgICAgICAgbGV0IHVybCA9IGdldFZhcihcInBhcnNlVXJsLnVybFwiLCBcIlwiKS50cmltKCk7XG4gICAgICAgIGlmICghL15odHRwLy50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v6L+Y5rKh5pyJ6L6T5YWl6ZO+5o6l5ZOmXCI7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGp4ID0gZ2V0SXRlbShcInNlbGVjdGVkXCIsIFwiXCIpO1xuICAgICAgICBpZihqeCYmangubGVuZ3RoPjImJiFqeC5zdGFydHNXaXRoKCdodHRwJykpe1xuICAgICAgICAgICAganggPSAnJzsvL+aWreaPkumrmOe6p+aWueazleebtOaOpea4heepuuino+aekOmTvuaOpeWQjumdouiwg+eUqOagh+mimOWQjeWtl1xuICAgICAgICB9XG4gICAgICAgIGxldCBwbGF5VXJsID0ganggKyB1cmw7XG4gICAgICAgIGxvZyhwbGF5VXJsKTtcbiAgICAgICAgaWYoIS9eaHR0cC8udGVzdChwbGF5VXJsKSl7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v55yL6LW35p2l5pKt5pS+5Zyw5Z2A5Ly85LmO5LiN5a+55YqyP1xcbicrcGxheVVybFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkKCkubGF6eVJ1bGUoKHBsYXlVcmwsdXJsKT0+e1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0SXRlbShcInNlbGVjdGVkMFwiLCBcIiYmXCIpLnNwbGl0KFwiJiZcIilbMF0ucmVwbGFjZSgv8J+RiS9nLCcnKTtcbiAgICAgICAgICAgIGlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScpPT09J+aWreaPkicmJnRpdGxlIT09J+S4jemAiScpe1xuICAgICAgICAgICAgICAgIGV2YWwoXCJ2YXIgY29uZmlnID1cIiArIGZldGNoKFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cIikpO1xuICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0SXRlbShcInNlbGVjdGVkMFwiLCBcIiYmXCIpLnNwbGl0KFwiJiZcIilbMF0ucmVwbGFjZSgv8J+RiS9nLCcnKS5yZXBsYWNlKC/kuI3pgIkvZywnJyk7XG4gICAgICAgICAgICAgICAgbG9nKCflvIDlp4vosIPnlKjmlq3mj5LmtYvor5UsbXlGaWxlZOi2heaXtuS4ujonK2dldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodXJsLHRpdGxlLHBhcnNlSW50KGdldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGNvbnN0IHtsYXp5UGFyc2V9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGF6eVBhcnNlKHBsYXlVcmwscGFyc2VJbnQoZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSkpfHwndG9hc3Q6Ly/op6PmnpDlpLHotKUs5YW35L2T55yL5pel5b+XJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LHBsYXlVcmwsdXJsKVxuICAgIH0pLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIGJsb2NrUnVsZXM6IFsnYmFpZHUuKi5wbmcnLCAnLmpwZycsJy5tcDMnLCcubXA0JywnLm0zdTgnLCcuZmx2JywnLmF2aScsJy4zZ3AnLCcubXBlZycsJy53bXYnLCcubW92JywnLnJtdmInLCcuZ2lmJywnLmpwZycsJy5qcGVnJywnLnBuZycsJy5pY28nLCcuc3ZnJ10sXG4gICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3BhcnNlVXJsLnVybCcsICcnKSB8fCBcIlwiLFxuICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcInBhcnNlVXJsLnVybFwiLGlucHV0KSdcbiAgICB9XG59KTtcbmxldCBzZWxfdGl0bGUgPSBbJ1HnpZ4nLCfmlq3mj5InXS5tYXAoKGl0KSA9PiB7XG4gICAgbGV0IHRlc3RfbW9kZSA9IGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKTtcbiAgICByZXR1cm4gaXQ9PT10ZXN0X21vZGU/J/CfkYknK2l0Oml0O1xufSk7XG5cbmQucHVzaCh7XG4gICAgdGl0bGU6J/CfkqsnK2dldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKSxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoc2VsX3RpdGxlLDIpLnNlbGVjdCgoKT0+e1xuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL/CfkYkvZywnJyk7XG4gICAgICAgIHNldEl0ZW0oJ2RuLnRlc3RfbW9kZScsaW5wdXQpO1xuICAgICAgICAvLyBzZXRJdGVtKFwic2VsZWN0ZWRcIiwgdXJsKTtcbiAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsIFwiXCIpOyAvLyDph43nva7op6PmnpDlpLRcbiAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkMFwiLCBcIuS4jemAiSYmXCIpOyAvL+WIh+aNouaooeW8j+a4heepuumAieS4reeahOino+aekFxuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNouaooeW8j+S4ujonK2lucHV0XG4gICAgfSlcbn0pO1xuXG5sZXQgdGl0bGVBcnIgPSBbXSwgdXJsQXJyID0gW107XG52YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xuaWYoZ2V0SXRlbSgnZG4udGVzdF9tb2RlJywnUeelnicpPT09J1HnpZ4nKXtcbiAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XCIpO1xuICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXG4vKTtcbiAgICBwYXJzZVVybEFycmF5LmZvckVhY2goKGl0KSA9PiB7XG4gICAgICAgIGl0ID0gaXQuc3BsaXQoXCImJlwiKTtcbiAgICAgICAgdGl0bGVBcnIucHVzaChpdFswXSk7XG4gICAgICAgIHVybEFyci5wdXNoKGl0WzFdKTtcbiAgICB9KTtcbn1cbmVsc2UgaWYoZ2V0SXRlbSgnZG4udGVzdF9tb2RlJywnUeelnicpPT09J+aWreaPkicpe1xuICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XG4gICAgfWNhdGNoIChlKSB7XG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XG4gICAgfVxuICAgIHRpdGxlQXJyID0ganNvbi50aXRsZTtcbiAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICB1cmxBcnIucHVzaChqc29uLmNvZGVzW2l0XSk7XG4gICAgfSk7XG4gICAgLy8kLnN0cmluZ2lmeShqc29uKVxufVxuXG5kLnB1c2goe1xuICAgIHRpdGxlOnRpdGxlQXJyLmxlbmd0aCsnJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoZ2V0SXRlbSgnZG4udGVzdF9tb2RlJywnUeelnicpKyflhbHorqHop6PmnpDmlbDph486Jyt0aXRsZUFyci5sZW5ndGgrJ+S4qlxcbuaYr+WQpumaj+acuuadpeS4quWcsOWdgOi/m+ihjOa1i+ivlT8nKS5jb25maXJtKChzalRlc3QsZ2V0T25lKT0+e1xuICAgICAgICBwdXRWYXIoJ3BhcnNlVXJsLnVybCcsIGdldE9uZShzalRlc3QpKTtcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lnLDlnYDlt7Lnu5nkvaDkuoYnXG4gICAgfSxzalRlc3QsZ2V0T25lKVxufSk7XG5cbmxldCByZWFsVGl0bGVzID0gdGl0bGVBcnI7XG50aXRsZUFyciA9IFsn5LiN6YCJJ10uY29uY2F0KHRpdGxlQXJyKTtcbnRpdGxlQXJyID0gdGl0bGVBcnIubWFwKChpdCkgPT4ge1xuICAgIGxldCB0aXRsZSA9IGdldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCImJlwiKS5zcGxpdChcIiYmXCIpWzBdO1xuICAgIHJldHVybiBpdD09PXRpdGxlPyfwn5GJJytpdDppdDtcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogJ+KYou+4jycrZ2V0SXRlbShcInNlbGVjdGVkMFwiLCBcIiYmXCIpLnNwbGl0KFwiJiZcIilbMF0sXG4gICAgdXJsOiAkKHRpdGxlQXJyLCAzKS5zZWxlY3QoKHJlYWxUaXRsZXMsdXJsQXJyKSA9PiB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv8J+RiS9nLCcnKTtcbiAgICAgICAgaWYoaW5wdXQ9PT0n5LiN6YCJJyl7XG4gICAgICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWRcIiwgJycpO1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkMFwiLCBpbnB1dCArIFwiJiZcIiArICcnKTtcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v5bey5Y+W5raI6Kej5p6Q5Y+jLOebtOaOpei/m+ihjOebtOmTvuino+aekFwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gcmVhbFRpdGxlcy5pbmRleE9mKGlucHV0KTtcbiAgICAgICAgbGV0IHVybCA9IHVybEFycltpXTtcbiAgICAgICAgbG9nKFwiXFxu5pu05pS55o6l5Y+jPiBcIiArIHVybCk7XG4gICAgICAgIGlmKHR5cGVvZih1cmwpIT09J3N0cmluZycpe1xuICAgICAgICAgICAgbG9nKCQudG9TdHJpbmcodXJsKSk7XG4gICAgICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWRcIiwgJC50b1N0cmluZyh1cmwpKTtcbiAgICAgICAgICAgIC8vIHJldHVybiAndG9hc3Q6Ly/mmoLkuI3mlK/mjIHmlq3mj5JmdW5jdGlvbuezu+WIl+eahOmrmOe6p+ino+aekOa1i+ivlSdcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWRcIiwgdXJsKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWQwXCIsIGlucHV0ICsgXCImJlwiICsgdXJsKTtcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xuICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+WIh+aNouino+aekOWPo+S4ujpcIitpbnB1dDtcbiAgICB9LCByZWFsVGl0bGVzLHVybEFyciksXG4gICAgY29sX3R5cGU6IFwic2Nyb2xsX2J1dHRvblwiXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6J/CfjYDkuLvpopgnLFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU95Li76aKYI25vSGlzdG9yeSNcIixcbiAgICBjb2xfdHlwZTogXCJzY3JvbGxfYnV0dG9uXCJcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon8J+NgOino+aekCcsXG4gICAgdXJsOiBcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9SZWNvcmRIaXN0b3J5I1wiLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIlxufSk7XG5cbmQucHVzaCh7XG4gICAgdGl0bGU6J/CflZInK2dldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJyksXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKGdldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJyksJ+ivt+i+k+WFpeino+aekOi2heaXtuavq+enkicpLmlucHV0KCgpPT57XG4gICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+i2heaXtuiuvue9rumUmeivr++8jOaLkue7neS/neWtmCdcbiAgICAgICAgfVxuICAgICAgICBzZXRJdGVtKCdkbi50aW1lb3V0JyxpbnB1dHx8JzUwMDAnKTtcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7op6PmnpDotoXml7bmr6vnp5I6JytnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpO1xuICAgIH0pLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn5Oy5a+85Ye6VFhUJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoJ+ehruiupOWvvOWHuuacrOWcsOaYjuaWh+S4lOWkjeWItuS6keWJquWIh+advz9cXG7lj6/lroznvo7lr7zlh7rlkI3np7DlnLDlnYDnmoTpgJrnlKjop4TliJks5a+5ZnVuY3Rpb27nsbvlhbzlrrnmmoLml7bkuI3mmK/lvojlpb0nKS5jb25maXJtKCh0aXRsZUFycix1cmxBcnIpPT57XG4gICAgICAgIGxldCBtb2RlID0gZ2V0SXRlbSgnZG4udGVzdF9tb2RlJywnUeelnicpO1xuICAgICAgICBpZihtb2RlPT09J+aWreaPkid8fG1vZGU9PT0nUeelnicpe1xuICAgICAgICAgICAgbGV0IGp4Q29kZSA9IFtdO1xuICAgICAgICAgICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgICAgICAgICBpZighL+S4jemAiS8udGVzdChpdCkpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IHRpdGxlQXJyLmluZGV4T2YoaXQpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHVybEFycltpLTFdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3V0Q29kZSA9ICh0eXBlb2YoY29kZSk9PT0nc3RyaW5nJ3x8dHlwZW9mKGNvZGUpPT09J3VuZGVmaW5lZCcpP2NvZGU6YmFzZTY0RW5jb2RlKGNvZGUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvdXRUaXRsZSA9IGl0LnJlcGxhY2UoL/CfkYkvZywnJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmKG91dFRpdGxlLnN0YXJ0c1dpdGgoJ2h0dHAnKSYmKHR5cGVvZihvdXRDb2RlKT09PSd1bmRlZmluZWQnfHwhb3V0Q29kZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAganhDb2RlLnB1c2gob3V0VGl0bGUrJywnK291dFRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICBqeENvZGUucHVzaChvdXRUaXRsZSsnLCcrb3V0Q29kZXx8JycpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBvdXRUZXh0ID0ganhDb2RlLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgbGV0IG91dFBhdGggPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlT3V0XycrbW9kZSsnLnR4dCc7XG4gICAgICAgICAgICB3cml0ZUZpbGUob3V0UGF0aCxvdXRUZXh0KTtcbiAgICAgICAgICAgIGxldCBwYXN0ZXMgPSBnZXRQYXN0ZXMoKTtcbiAgICAgICAgICAgIGxldCBpbXBvcnRVcmwgPSBzaGFyZVBhc3RlKGJhc2U2NEVuY29kZShvdXRUZXh0KSxwYXN0ZXNbMV0pO1xuICAgICAgICAgICAgbGV0IGltcG9ydENvZGUgPSAn6a2U5pat6Kej5p6Q5a+85YWl5Y+j5LukwqXCpScraW1wb3J0VXJsO1xuICAgICAgICAgICAgY29weShpbXBvcnRDb2RlKTtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlofku7blt7Llr7zlh7rliLA6JytvdXRQYXRoKydcXG7or7foh6rooYzpgJrov4dNVOeuoeeQhuWZqOafpeeciydcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oiR5LiN5riF5qWa5L2g6KaB5YGa5LuA5LmIP1xcbicrbW9kZTtcbiAgICAgICAgfVxuICAgIH0sdGl0bGVBcnIsdXJsQXJyKSxcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon8J+TpeWvvOWFpVRYVCcsXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKCkucnVsZSgoKT0+e1xuICAgICAgICBsZXQgZCA9IFtdO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpeivtOaYjicsXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcbiAgICAgICAgICAgIGRlc2M6J+aUr+aMgeatpOaPkuS7tuWvvOWHuuagvOW8j+eahOaWh+acrOi/m+ihjOWvvOWFpeOAglxcbuagvOW8jzE6IOWQjeensCzlnLDlnYAg5LiA6KGM5LiA5Liq6Kej5p6QXFxu5qC85byPMjrkupHliarliIfmnb8g6a2U5pat6Kej5p6Q5a+85YWl5Y+j5LukwqXCpeWJquWIh+adv+WcsOWdgCcsXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknXG4gICAgICAgIH0pO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgZGVzYzogXCJ0eHTmlofmnKzop6PmnpDop4TliJks5LiA6KGM5LiA5LiqXCIsXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgIHRpdGxlOifop6PmnpDmlofmnKwnLFxuICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdkbi5pbXBvcnRfdGV4dCcsICcnKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFwiZG4uaW1wb3J0X3RleHRcIixpbnB1dCknXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6J/Cfk6Xlr7zlhaUnLFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxuICAgICAgICAgICAgdXJsOiQoJ+ehruWumue8lui+keWlveS6huWQlz/mraTmk43kvZzlsIbopobnm5bmnKzlnLDlt7LmnInnmoTorrDlvZXvvIzlu7rorq7lpIfku73lkI7nlKjnqbrmlofku7blr7zlhaUnKS5jb25maXJtKCgpPT57XG4gICAgICAgICAgICAgICAgY29uc3Qge2RlZmF1bHRTZXRzfSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9kZW1vRGF0YT9ydWxlPU15RmllbGThtLDigb9cIik7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xuICAgICAgICAgICAgICAgIGxldCBqc0NvZGUgPSBmZXRjaChwYXJzZVJvdXRlKXx8SlNPTi5zdHJpbmdpZnkoe3RpdGxlOltdLGNvZGVzOnt9LHNldHRpbmdzOmRlZmF1bHRTZXRzfSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBqc0NvZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Y+R55Sf6ZSZ6K+vOlxcbicrZS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB0b0ltcG9ydCA9IGdldFZhcihcImRuLmltcG9ydF90ZXh0XCIpO1xuICAgICAgICAgICAgICAgIGlmKC/prZTmlq3op6PmnpDlr7zlhaXlj6Pku6TCpcKlLy50ZXN0KHRvSW1wb3J0KSYmdG9JbXBvcnQuc3BsaXQoJ8KlwqUnKS5sZW5ndGg+MSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSB0b0ltcG9ydC5zcGxpdCgnwqXCpScpWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZighL15odHRwLy50ZXN0KHVybCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WJquWIh+adv+WcsOWdgOacieivryzlr7zlhaXlpLHotKUnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdG9JbXBvcnQgPSBwYXJzZVBhc3RlKHVybCk7XG4gICAgICAgICAgICAgICAgICAgIHRvSW1wb3J0ID0gYmFzZTY0RGVjb2RlKHRvSW1wb3J0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGppZXhpID0gdG9JbXBvcnQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZVRpdGxlID0gW107XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlQ29kZSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gamlleGkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcsJylbMF07XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcsJylbMV07XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCEoY29kZS5yZXBsYWNlKC9bXFxzXS9nLCcnKS5zdGFydHNXaXRoKCdodHRwJykpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyh0aXRsZSsn5Li65Ye95pWw6Kej5p6QJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjb2RlLnJlcGxhY2UoL1tcXHNdL2csJycpLmxlbmd0aD4yMCl7Ly/op4bkuLpmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBldmFsKGJhc2U2NERlY29kZShjb2RlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGUubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc2NPYmplY3QgPSBbXCJDaXR5SVBcIiwgXCJwY1VBXCIsIFwiY2FjaGVNM3U4XCIsIFwiZGVmYXVsdFBhcnNlV2ViXCIsXCJtYW9zc1wiLCBcIkxMUVwiXTtcbiAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gcGFyc2VUaXRsZT9wYXJzZVRpdGxlLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKGl0KSk6W107XG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsIG5ld0ZpbGUpO1xuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWlJytqaWV4aS5sZW5ndGgrJ+adoeino+aekCc7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGV4dHJhOntcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTp0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRSZXN1bHQoZCk7XG4gICAgfSksXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6J+KYr++4j+afpemHjeWkhOeQhicsXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKCkubGF6eVJ1bGUoKHVuaXF1ZTIsZHVwbGljYXRlcyxmbG9vcnMpPT57XG4gICAgICAgIGxldCBwYXJzZVJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJztcbiAgICAgICAgbGV0IGpzQ29kZSA9IGZldGNoKHBhcnNlUm91dGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBqc0NvZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pys5Zyw6YKj5LiqTXlQYXJzZS5qc29u5paH5Lu25pyJ6Zeu6aKYLOi/meS4quWKn+iDveS4jee7meS9oOeUqOS6hiEnXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpdGxlcyA9IGpzb24udGl0bGU7XG4gICAgICAgIGxldCBjb2RlcyA9IGpzb24uY29kZXM7XG4gICAgICAgIGxldCBrZXlzPSBPYmplY3Qua2V5cyhjb2Rlcyk7XG4gICAgICAgIGxldCBrZXlzX3JlX2N0ID0ga2V5cy5sZW5ndGggLSB1bmlxdWUyKGtleXMpLmxlbmd0aDsgLy8g5ZCN56ew6YeN5aSNXG4gICAgICAgIGxldCBub3JtYWxfbGlzdCA9IFtdO1xuICAgICAgICBmb3IobGV0IG8gaW4gY29kZXMpe1xuICAgICAgICAgICAgaWYodHlwZW9mKGNvZGVzW29dKSE9PSd1bmRlZmluZWQnJiZ0eXBlb2YoY29kZXNbb10pIT09J2Z1bmN0aW9uJyl7XG4gICAgICAgICAgICAgICAgbm9ybWFsX2xpc3QucHVzaChjb2Rlc1tvXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlTm9yTGlzdCA9IHVuaXF1ZTIobm9ybWFsX2xpc3QpO1xuICAgICAgICBsZXQgdmFsdWVfcmVfY3QgPSBub3JtYWxfbGlzdC5sZW5ndGggLSByZU5vckxpc3QubGVuZ3RoOyAvL+S7o+eggemHjeWkjVxuICAgICAgICBsZXQgdmFsdWVzX3JlID0gZHVwbGljYXRlcyhub3JtYWxfbGlzdCk7Ly/ph43lpI3nmoTlgLxcbiAgICAgICAgbGV0IGZ0bGlzdCA9IFtdO1xuICAgICAgICBsZXQgZmxhZ3MgPSB7fTtcbiAgICAgICAgbGV0IG15Rmxvb3JzID0gZmxvb3JzO1xuICAgICAgICBmb3IobGV0IGogaW4gY29kZXMpey8v6YGN5Y6G5omA5pyJXG4gICAgICAgICAgICBsZXQgb25lID0gY29kZXNbal07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yob25lKSAhPT0gJ2Z1bmN0aW9uJyYmdmFsdWVzX3JlLmluY2x1ZGVzKG9uZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZmxhZ3Nbb25lXSkgPT09ICd1bmRlZmluZWQnIHx8ICFmbGFnc1tvbmVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+WPluWHuuesrOS4gOS4quagh+W/l1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3Nbb25lXSA9IG15Rmxvb3JzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbXlGbG9vcnMuc3BsaWNlKDAsIDEpOy8v5Yig6Zmk5qCH5b+X5YiX6KGo6YeM55qE56ys5LiA5Liq5YWD57SgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnRsaXN0LnB1c2goe2tleTogZmxhZ3Nbb25lXSArIGosIHZhbHVlOiBvbmV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmdGxpc3QucHVzaCh7a2V5OiBqLCB2YWx1ZTogb25lfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb2coSlNPTi5zdHJpbmdpZnkoZmxhZ3MpKTtcbiAgICAgICAgbGV0IG5ld0NvZGVzID0ge307XG4gICAgICAgIGZvcihsZXQgayBpbiBmdGxpc3Qpe1xuICAgICAgICAgICAgbmV3Q29kZXNbZnRsaXN0W2tdLmtleV0gPSBmdGxpc3Rba10udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpcHMgPSAn5qOA5rWL5Yiw5ZCN56ew5aSN55So6aG555uu5pWwOicra2V5c19yZV9jdCsnLOS7o+eggemHjeWkjemhueebruaVsOmHjzonK3ZhbHVlX3JlX2N0KydcXG7pnIDopoHkuIDplK7miZPkuKrmoIfor4blkJc/5LiN5pSv5oyB6Ieq5Yqo5Yig6ZmkLOaJk+agh+W/l+iHquihjOino+WGsyc7XG4gICAgICAgIHJldHVybiAkKHRpcHMpLmNvbmZpcm0oKHZhbHVlX3JlX2N0LGpzb24sbmV3Q29kZXMscGFyc2VSb3V0ZSk9PntcbiAgICAgICAgICAgIGlmKHZhbHVlX3JlX2N0PDEpe1xuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6LnhLbpg73mmK8w5Liq6YeN5aSN6aG555uu5LqG77yM5bCx5LiN6ZyA6KaB5oiR5YGa5LuA5LmI5LqGISdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7Zmxvb3JzfSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9kZW1vRGF0YT9ydWxlPU15RmllbGThtLDigb9cIik7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4ID0gYS5zdWJzdHJpbmcoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHkgPSBiLnN1YnN0cmluZygwLDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxvb3JzLmluZGV4T2YoeSktZmxvb3JzLmluZGV4T2YoeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAganNvbi5jb2RlcyA9IG5ld0NvZGVzO1xuICAgICAgICAgICAgbGV0IHRpdGxlcyA9IE9iamVjdC5rZXlzKG5ld0NvZGVzKTtcbiAgICAgICAgICAgIHRpdGxlcyA9IHRpdGxlcy5zb3J0KGNvbXBhcmUoKSk7XG4gICAgICAgICAgICBqc29uLnRpdGxlID0gdGl0bGVzO1xuICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5LiA6ZSu5omT5LiK5qCH5b+XJztcbiAgICAgICAgfSx2YWx1ZV9yZV9jdCxqc29uLG5ld0NvZGVzLHBhcnNlUm91dGUpXG4gICAgfSx1bmlxdWUyLGR1cGxpY2F0ZXMsZmxvb3JzKSxcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTpcIvCflITph43nva5C56uZVUFcIixcbiAgICBjb2xfdHlwZTogXCJzY3JvbGxfYnV0dG9uXCIsXG4gICAgdXJsOiBcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cIixcbiAgICBleHRyYToge1xuICAgICAgICB1YTogUENfVUFcbiAgICB9XG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6XCLwn5eR77iP5om56YeP5Yig6ZmkXCIsXG4gICAgY29sX3R5cGU6IFwic2Nyb2xsX2J1dHRvblwiLFxuICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoKT0+e1xuICAgICAgICBsZXQgbG9jYWxIdG1sID0gJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJztcbiAgICAgICAgbGV0IHRlc3Rjb2RlID0gZmV0Y2gobG9jYWxIdG1sKTtcbiAgICAgICAgaWYoIXRlc3Rjb2RlfHwv5om56YeP5Yig6Zmk6Kej5p6QLy50ZXN0KHRlc3Rjb2RlKSl7XG4gICAgICAgICAgICB3cml0ZUZpbGUobG9jYWxIdG1sLGZldGNoKCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvenl3X2RhdGEvMTAnKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGQgPSBbXTtcbiAgICAgICAgZC5wdXNoKHt0aXRsZTogXCLmibnph4/liKDpmaTop6PmnpBcIiwgZGVzYzogXCJhdXRvJiZmbG9hdFwiLCB1cmw6IFwiZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWxcIiwgY29sX3R5cGU6IFwieDVfd2Vidmlld19zaW5nbGVcIn0pO1xuICAgICAgICBzZXRSZXN1bHQoZCk7XG4gICAgfSksXG59KTtcbmxldCB3ZWJfc2VsID0gJ+eIseWlh+iJui/kvJjphbcv6IW+6K6vL+iKkuaenC/lk5Tlk6nlk5Tlk6kv5pCc54uQL+ilv+eTnC/pmL/ph4wvUFBUVi/lkqrlkpUv5LmQ6KeGLzE5MDUv6aOO6KGMJy5zcGxpdCgnLycpO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XCJjb2xvcjojMDBkOWZmXCI+5p2l5Liq5rWL6K+V5Zyw5Z2AJyxcbiAgICBjb2xfdHlwZTogXCJ0ZXh0XzJcIixcbiAgICB1cmw6JCh3ZWJfc2VsLDQpLnNlbGVjdCgoZGVtb0RhdGEsZ2V0T25lKT0+e1xuICAgICAgICBsZXQgdXJscyA9IGRlbW9EYXRhW2lucHV0XTtcbiAgICAgICAgbGV0IHVybCA9IGdldE9uZSh1cmxzKXx8Jyc7XG4gICAgICAgIGlmKCF1cmwpe1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycraW5wdXQrJ+i/meS4que9keermeaaguaXtuayoeacieaSreaUvuS+i+WtkCdcbiAgICAgICAgfVxuICAgICAgICBwdXRWYXIoJ3BhcnNlVXJsLnVybCcsIHVybCk7XG4gICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57uZ5L2g5om+5LqG5LiqJytpbnB1dCsn55qE5pKt5pS+5Zyw5Z2AOlxcbicrdXJsO1xuICAgIH0sZGVtb0RhdGEsZ2V0T25lKVxufSk7XG5pZihnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk9PT0nUeelnicpe1xuICAgIGQucHVzaCh7XG4gICAgICAgIC8vJyNmZjcwMDAnXG4gICAgICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjcwMDBcIj5R56We5o+S5Lu25o6l5Y+j6K6+572uJyxcbiAgICAgICAgLy8gdGl0bGU6ICfigJzigJxR56We5o+S5Lu25o6l5Y+j6K6+572u4oCd4oCdJyxcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9FZGl0VXJsP3J1bGU9TXlGaWVsZOG0sOKBv1wiLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcbiAgICB9KTtcbn1lbHNlIGlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKT09PSfmlq3mj5InKXtcbiAgICBsZXQgdXJsID0gcmVhbFRpdGxlcy5sZW5ndGg+MD9cImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5I1wiOiQoJ+WIq+iuvue9ruS6hu+8jOWFiOaLieS7o+eggScpLmNvbmZpcm0oKVxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjcwMDBcIj7mlq3mj5LmjqXlj6Porr7nva4nLFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInXG4gICAgfSk7XG59XG5cbmp4SXRlbS5scUZpbGUoKTtcbmxldCBleHRyYSA9IGQuc2xpY2UoLTcsZC5sZW5ndGgpOyAvL+aWreaPkua3u+WKoOeahOWFg+e0oFxuZCA9IGQuc2xpY2UoMCwtNyk7IC8vIOiHquW3seeahOWHveaVsFxuZXh0cmFbMF0udGl0bGU9J+aLieWPluWIl+ihqCjkuI3mjqjojZApJ1xuZXh0cmFbMF0uY29sX3R5cGU9J3RleHRfMidcbmV4dHJhWzFdLnRpdGxlPSfmi4nlj5bku6PnoIEo5by654OI5o6o6I2QKSdcbmV4dHJhWzFdLmNvbF90eXBlPSd0ZXh0XzInXG5leHRyYVs0XS5jb2xfdHlwZT0ndGV4dF9jZW50ZXJfMSdcbmV4dHJhWzRdLnVybD1jekd1aWRlKCk7XG5leHRyYS5zcGxpY2UoMiwxKTtcbmQgPSBkLmNvbmNhdChleHRyYSk7XG4vLyBkLnNwbGljZShkLmxlbmd0aC01LDEpO1xuc2V0UmVzdWx0KGQpOyIsInNlYXJjaF91cmwiOiIiLCJncm91cCI6IumBk+mVv+i9puW6k/CfmpciLCJzZWFyY2hGaW5kIjoiIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLXZ1ZS5odG1sXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5odG1sXCIsXCJydWxlXCI6XCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG48aGVhZD5cXG4gICAgPG1ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiPlxcbiAgICA8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0xLHVzZXItc2NhbGFibGU9bm9cXFwiIC8+XFxuICAgIDx0aXRsZT5QYXJzZV9Ebl92dWU8L3RpdGxlPlxcbiAgICA8c2NyaXB0PlxcbiAgICAgICAgY29uc3QgdnVlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzJztcXG4gICAgICAgIGlmKHR5cGVvZihmYmEpPT0ndW5kZWZpbmVkJ3x8IWZiYSl7XFxuICAgICAgICAgICAgdmFyIGZiYSA9IGZ5X2JyaWRnZV9hcHA7XFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXF1ZXN0KT09J3VuZGVmaW5lZCd8fCFyZXF1ZXN0KXtcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZ2V0SW50ZXJuYWxKcygpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZyh2dWVQYXRoKTtcXG4gICAgICAgICAgICBpZighcmVxdWVzdCh2dWVQYXRoKSl7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUodnVlUGF0aCxyZXF1ZXN0KCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0xODIzJykpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5mZXRjaCh2dWVQYXRoKSk7XFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgIGZiYS5sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZygn5Yqg6L29dnVl57uE5Lu25a6M5q+VJyk7XFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICA8L3NjcmlwdD5cXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly91bnBrZy5jb20vdnVlQG5leHRcXFwiPjwvc2NyaXB0Pi0tPlxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qc1xcXCI+PC9zY3JpcHQ+LS0+XFxuICAgIDxzdHlsZT5cXG4gICAgICAgIGJvZHkge1xcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxuICAgICAgICAgICAgLyogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGMERBOyovXFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXCJNaWNyb3NvZnQgWWFIZWlcXFwiLFxcXCLlrovkvZNcXFwiLFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJMdWNpZGEgR3JhbmRlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxuICAgICAgICB9XFxuICAgICAgICAjYXBwe1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAjdGlwc3tcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206NXB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLmZ1bmd7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXJcXG4gICAgICAgIH1cXG4gICAgICAgIGRpdi5ib3gge1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTFweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQzcHg7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxuICAgICAgICBmb3JtIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIHNlbGVjdCB7XFxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWtl+S9k+S9jee9riovXFxuICAgICAgICBpbnB1dCB7XFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXG4gICAgICAgICAgICBoZWlnaHQ6IDMycHg7XFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5bCP5qGGKi9cXG4gICAgICAgIC5iYXIgbGFiZWwge1xcbiAgICAgICAgICAgIC8qYmFja2dyb3VuZDogI0QwNkI2QzsqL1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgICAgIHRvcDogMDtcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxuICAgICAgICAuYmFyIGlucHV0IHtcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgc2VsZWN0IHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgLmxpZWIgc2VsZWN0e1xcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNHB4OyovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1cHggNXB4IDVweCA1NTVweDtcXG4gICAgICAgICAgICB3aWR0aDogODBweDtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWktOWDjyovXFxuICAgICAgICAucm91bmRfaWNvbntcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcbiAgICA8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG48ZGl2IGNsYXNzPVxcXCJmdW5nXFxcIj5cXG4gICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7XFxcIj5cXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuY2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLmNsb3NlQnRuLmNvbG9yXFxcIiBvbmNsaWNrPVxcXCJjYW5jZWwoKTtcXFwiPuWFsyDpl608L2J1dHRvbj5cXG4gICAgPC9hPlxcbiAgICA8YSBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIj5cXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMudGlwc0J0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDEyMHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnRpcHNCdG4uY29sb3JcXFwiIEBjbGljaz1cXFwic2hvd1RpcHM9IXNob3dUaXBzXFxcIj57e3Nob3dUaXBzP1xcXCLpmpDol4/mj5DnpLpcXFwiOlxcXCLmmL7npLrmj5DnpLpcXFwifX08L2J1dHRvbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHRcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnNhdmVCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXCI+5L+dIOWtmDwvYnV0dG9uPlxcbiAgICA8L2E+XFxuXFxuPC9kaXY+XFxuPGJyPlxcbjxkaXYgaWQ9XFxcImFwcFxcXCI+XFxuICAgIDxoNiBpZD1cXFwidGlwc1xcXCIgdi1odG1sPVxcXCJ0aXBzXFxcIiB2LXNob3c9XFxcInNob3dUaXBzXFxcIj48L2g2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJib3ggYmFyXFxcIiB2LWZvcj1cXFwib3B0aW9uIGluIG9wdGlvbnNcXFwiPlxcbiAgICAgICAgPGZvcm0+XFxuICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcInN1Ym1pdFxcXCIgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJsYWJlbC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuYmFybGFiZWwuY29sb3JcXFwiPnt7IG9wdGlvbi5uYW1lIH19PC9sYWJlbD5cXG4gICAgICAgICAgICA8aW5wdXQgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJJbnB1dC5iYWNrZ3JvdW5kKyc7Ym9yZGVyOiAzcHggc29saWQgJyt0aGVtZXMuYmFySW5wdXQuY29sb3JcXFwiIHR5cGU9XFxcInRleHRcXFwiIG9uY2xpY2s9XFxcInJlc2V0U2VsZWN0KHRoaXMuaWQpXFxcIiA6cGxhY2Vob2xkZXI9XFxcIm9wdGlvbi5wbGFjZWhvbGRlcnx8cGxhY2Vob2xkZXJcXFwiIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCIgdi1iaW5kOmlkPVxcXCJvcHRpb24uaWRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImxpZWJcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IDpzdHlsZT1cXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuc2VsZWN0LmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5zZWxlY3QuY29sb3JcXFwiIDpjbGVhcmFibGU9XFxcInRydWVcXFwiIHNpemU9XFxcIjJcXFwiIDppZD1cXFwib3B0aW9uLmlkKydTZWxlY3QnXFxcIiA6bmFtZT1cXFwib3B0aW9uLmlkXFxcIiBvbmNoYW5nZT1cXFwiZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKVxcXCIgIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZWxzZS1pZj1cXFwib3B0aW9uLmlkPT09J3FqdSdcXFwiIDp2YWx1ZT1cXFwic2VsXFxcIiA6a2V5PVxcXCJpbmRleFxcXCIgdi1mb3I9XFxcIihzZWwsaW5kZXgpIGluIFsn6buY6K6kJ10uY29uY2F0KG15U2VsZWN0KVxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFwic2VsXFxcIiA6a2V5PVxcXCJpbmRleFxcXCIgdi1lbHNlIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBjalNlbFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9mb3JtPlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2PlxcbiAgICA8YSB2LWZvcj1cXFwidmVyIGluIHZlcmluZm9cXFwiIHN0eWxlPVxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6MXB4O21hcmdpbi1yaWdodDogMjBweFxcXCIgdi1iaW5kOmlkPSd2ZXIuaWQnIG9uY2xpY2s9XFxcImRvT3B0aW9uKHRoaXMuaWQpXFxcIj5cXG4gICAgICAgIDxpbWcgOnNyYz1cXFwidmVyLmF2YXRhclxcXCIgY2xhc3M9XFxcInJvdW5kX2ljb25cXFwiICBhbHQ9XFxcIlxcXCI+XFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXCI+e3sgdmVyLmF1dGhvciB9fTwvc3Bhbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDoxMHB4O1xcXCI+XFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDonK3RoZW1lcy5zYXZlQ2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxNjBweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQ2xvc2VCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXCI+5L+d5a2Y5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxuICAgIDwvYT5cXG48L2Rpdj5cXG48c2NyaXB0PlxcbiAgICBsZXQgdGlwcyA9IGDmj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj5aaC5p6c6YGH5Yiw5L+d5a2Y5oyJ6ZKu54K55LiN5Yqo5oiW6ICF5oql6ZSZ55qE5oOF5Ya177yM5Lul5LiL6Lev5b6E5oyo552A5Yig6Zmk5LiA6YGN77yM54S25ZCO6YeN5paw5ouJ5Y+W5o+S5Lu277yM572R6aG15YaN5omT5byA5q2k572R6aG1W+S4jeimgeWFiOaLieS7o+eggV3jgILorrDlvpflpIfku708YnI+XFxu5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanM8YnI+XFxu572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbDxicj5cXG7ml6fmlq3mj5LphY3nva7ot6/lvoQ6L2NhY2hlL015UGFyc2VTZXQuanNvbjxicj5cXG7mlrDmlq3mj5LphY3nva7ot6/lvoQvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uPGJyPlxcbiAgICDikaTpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+YDtcXG4gICAgbGV0IHBsYWNlaG9sZGVyPSfovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi4nO1xcbiAgICAvLyNhYTk2ZGEgI2ZjNTE4NVxcbiAgICBsZXQgdGhlbWVzID0ge1xcbiAgICAgICAgbmFtZTon6buY6K6k5Li76aKYJyxcXG4gICAgICAgIGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICAgICAgc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxcXG4gICAgICAgIHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXG4gICAgICAgIHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxuICAgICAgICBiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXG4gICAgICAgIGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LFxcbiAgICAgICAgc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICB9O1xcbiAgICBsZXQgdGhlbWVEZWYgPSB7XFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xljp/nmq5cXFwiLFxcXCJjbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI2M1NDY0YVxcXCJ9LFxcXCJzYXZlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDY4MDA2XFxcIn0sXFxcInNhdmVDbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJ0aXBzQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcImJhcmxhYmVsXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn0sXFxcImJhcklucHV0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0QwNkI2Q1xcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRjlGMERBXFxcIn0sXFxcInNlbGVjdFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9fTtcXG4gICAgdmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICBpZighZmJhLmZldGNoKHRoZW1lUm91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZiYS5mZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICBsZXQgbm93VGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lID09PSBteVRoZW1lcy5ub3dfdGhlbWUpO1xcbiAgICAgICAgdGhlbWVzID0gbm93VGhlbWU/bm93VGhlbWVbMF06bXlUaGVtZXMudGhlbWVzWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgIC8vIOaWreW/teWIneWni+WMlumDqOWIhlxcbiAgICBjb25zdCBhbGxBcGk9WydodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPScsJ2h0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPSddO1xcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxuICAgICAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxuICAgICAgICB5azogJ+mihumFtycsXFxuICAgICAgICB0eDogJ+iNo+iAgCcsXFxuICAgICAgICBtZzogJ+iaguiageWFhOW8nycsXFxuICAgICAgICBibDogJ09L6Kej5p6QJyxcXG4gICAgICAgIHNoOiAn5rGf5rmWRCcsXFxuICAgICAgICB4ZzogJ+axn+a5lkQnLFxcbiAgICAgICAgYWw6ICfmsZ/muZZEJyxcXG4gICAgICAgIHBwOiAn5Lq65Lq66L+3JyxcXG4gICAgICAgIG1pOiAnMTA4MCcsXFxuICAgICAgICBsZTogJ+i/quWlpeWXheaOoicsXFxuICAgICAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICAgICAgb25lOiAnMTA4MCcsXFxuICAgICAgICBmdW46ICfono3lhbQnLFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXG4gICAgfTtcXG4gICAgdmFyIG9sZFJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG4gICAgdmFyIG15U2V0ID0gZmJhLmZldGNoKG9sZFJvdXRlKTtcXG4gICAgdmFyIG5ld1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcIjtcXG4gICAgaWYoIWZiYS5mZXRjaChuZXdSb3V0ZSkpe1xcbiAgICAgICAgZmJhLndyaXRlRmlsZShuZXdSb3V0ZSxKU09OLnN0cmluZ2lmeSh7c2V0dGluZ3M6c2V0dGluZ3MsdGl0bGU6W1xcXCJ5dW4xNzE3XFxcIixcXFwi5L2g54i556eR5oqAXFxcIixcXFwi6J6N5YW0XFxcIixcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXCJdLGNvZGVzOntcXFwi5L2g54i556eR5oqAXFxcIjpcXFwiaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9XFxcIixcXFwi6J6N5YW0XFxcIjpcXFwiaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD1cXFwiLFxcXCLkurrkurrov7ct5LyY6YW3XFxcIjpcXFwiaHR0cHM6Ly9zdmlwLnJlbnJlbm1pLmNjOjIyMjIvYXBpLz9rZXk9bm40ajhydWtQWFNWelI3OEU5JnVybD1cXFwifX0pKVxcbiAgICB9XFxuICAgIHZhciBuZXdDb25maWcgPSBmYmEuZmV0Y2gobmV3Um91dGUpO1xcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXG4gICAgZnVuY3Rpb24gY29tcGFyZShsaXN0KSB7XFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XFxuICAgICAgICAgICAgcmV0dXJuICFsaXN0LmluY2x1ZGVzKGl0KVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmKG5ld0NvbmZpZyYmbmV3Q29uZmlnLmxlbmd0aD4yMCl7XFxuICAgICAgICBldmFsKFxcXCJuZXdDb25maWcgPVxcXCIgKyBuZXdDb25maWcgKyBcXFwiO1xcXCIpO1xcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXG4gICAgfVxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXG5cXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXG4gICAgICAgICAgICBpZDoncXknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXG4gICAgICAgICAgICBpZDonbWcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXG4gICAgICAgICAgICBpZDoneGcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mYv+mHjCcsXFxuICAgICAgICAgICAgaWQ6J2FsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5hbFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXG4gICAgICAgICAgICBpZDoncHAnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnBwXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WSquWSlScsXFxuICAgICAgICAgICAgaWQ6J21pJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5taVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkuZDop4YnLFxcbiAgICAgICAgICAgIGlkOidsZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxuICAgICAgICAgICAgaWQ6J29uZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub25lXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mjjuihjCcsXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuZnVuXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFtuS7licsXFxuICAgICAgICAgICAgaWQ6J290aCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxuICAgICAgICAgICAgaWQ6J3FqdScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucWp1XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+aPkuS7ticsXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5jalxcbiAgICAgICAgfSxcXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gZ2V0T3B0aW9uKGlkLHRpdGxlKSB7XFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXG4gICAgICAgIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiByZXNldFNlbGVjdChpZCl7XFxuICAgICAgICBEaWQoaWQrXFxcIlNlbGVjdFxcXCIpLm9wdGlvbnMuc2VsZWN0ZWRJbmRleCA9IC0xO1xcbiAgICB9XFxuXFxuICAgIC8v5Ye95pWw6YOo5YiGXFxuXFxuICAgIGZ1bmN0aW9uIFRvYXN0KG1zZyxkdXJhdGlvbil7XFxuICAgICAgICBkdXJhdGlvbj1pc05hTihkdXJhdGlvbik/MjAwMDpkdXJhdGlvbjtcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XFxuICAgICAgICBtLmlubmVySFRNTCA9IG1zZztcXG4gICAgICAgIG0uc3R5bGUuY3NzVGV4dD1cXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcIjtcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7XFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgIHZhciBkID0gMC41O1xcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJztcXG4gICAgICAgICAgICBtLnN0eWxlLm9wYWNpdHkgPSAnMCc7XFxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKSB9LCBkICogMTAwMCk7XFxuICAgICAgICB9LCBkdXJhdGlvbik7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLnvJbovpHop6PmnpBcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAvL2ZpbmRSdWxlOiBcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuZWRpdCgpO3NldFJlc3VsdChkKTtcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIG9wZW5UaGVtZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLkuLvpopjnrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBvcGVuSnhNYW5hZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6Kej5p6Q6YWN572u566h55CGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2FuY2VsKCl7XFxuICAgICAgICBpZighbXlTZXQpe1xcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxuICAgICAgICAgICAgZmJhLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZmJhLmJhY2soZmFsc2UpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBzZXR0aW5ncyl7XFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coRGlkKGtleSkrJycra2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXCIra2V5K1xcXCJcXFxcblxcXCIrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3Q29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcIuWFs1xcXCIpe1xcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcbiAgICAvL2FsZXJ0KFxcXCLlvZPliY3liIbovqjnjoc6XFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcIipcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXG4gICAgdmFyIHZlcmluZm8gPSBbe1xcbiAgICAgICAgaWQ6J2RuJyxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXG4gICAgICAgIGF2YXRhcjonaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGcnLFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGlkOidkeicsXFxuICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxuICAgICAgICBhdmF0YXI6J2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NDM0ODU3MDA1JnM9NjQwJyxcXG4gICAgICAgIG9wdGlvbjpvcGVuVGhlbWVcXG4gICAgfSxcXG4gICAge1xcbiAgICBpZDonbG0nLFxcbiAgICAgICAgYXV0aG9yOiAn6JOd6I6TJyxcXG4gICAgICAgIGF2YXRhcjogJ2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9MjU3OTk0OTM3OCZzPTY0MCcsXFxuICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxuICAgIH1cXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gZG9PcHRpb24ob3B0aW9uX2lkKXtcXG4gICAgICAgIGxldCB2ZXIgPSB2ZXJpbmZvLmZpbHRlcihpdD0+aXQuaWQ9PT1vcHRpb25faWQpWzBdO1xcbiAgICAgICAgdmVyLm9wdGlvbigpO1xcbiAgICB9XFxuXFxuICAgIGNvbnN0IFJlbmRlckh0bWxBcHAgPSB7XFxuICAgICAgICBkYXRhKCkge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIC8vIHJhd0h0bWw6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IHJlZFxcXCI+6L+Z6YeM5Lya5pi+56S657qi6Imy77yBPC9zcGFuPicsXFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucyxcXG4gICAgICAgICAgICAgICAgdmVyaW5mbzp2ZXJpbmZvLFxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpwbGFjZWhvbGRlcixcXG4gICAgICAgICAgICAgICAgdGlwczp0aXBzLFxcbiAgICAgICAgICAgICAgICB0aGVtZXM6dGhlbWVzLFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdDpteVNlbGVjdCxcXG4gICAgICAgICAgICAgICAgLy8gY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxuICAgICAgICAgICAgICAgIHNob3dUaXBzOmZhbHNlLFxcbiAgICAgICAgICAgICAgICAvL3dpZHRoUHg6d2lkdGhQeFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2RzOntcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcbiAgICAgICAgICAgIC8vICAgICBnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpO1xcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbE9wdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcIuS9oOmAieS4reS6hlxcXCIrZXZlbnQudGFyZ2V0LnZhbHVlKTtcXG4gICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgY29uc3QgYXBwPVZ1ZS5jcmVhdGVBcHAoUmVuZGVySHRtbEFwcCk7XFxuICAgICAgICBhcHAubW91bnQoJ2JvZHknKTtcXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG5cXG48L3NjcmlwdD5cXG5cXG48L2JvZHk+XFxuPC9odG1sPlwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiUGFyc2VfRG4uanNcIixcInBhdGhcIjpcIlBhcnNlX0RuLmpzXCIsXCJydWxlXCI6XCIvLz09PT09PT09PT09PeWFjeWXheiwg+eUqD09PT09PT09PT09PVxcbi8v77yN77yN77yNPV5fXj1cXG5cXG52YXIgdmVyc2lvbiA9IDMuNDg7XFxudmFyIHVwZGF0ZURhdGUgPSAnMjAyMS8xMC8yOC8wMTozMCc7XFxudmFyIF9teVNldCA9IHtcXG4gICAgcWp1OiAn6buY6K6kJyxcXG4gICAgb3RoOifpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcbiAgICBvbGRDb25maWc6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicsXFxuICAgIGNrTGluazogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi8nLFxcbiAgICBjajogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9DbG91ZFBhcnNlLVYyX0RuLmpzJyxcXG4gICAgeDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxuICAgIHBhcnNlUm91dGU6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcbn07XFxudmFyIE15UGFyc2VTID0ge307XFxudmFyIG15U2V0ID0gX215U2V0O1xcbmlmIChmaWxlRXhpc3QoX215U2V0LnBhcnNlUm91dGUpKSB7XFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChfbXlTZXQucGFyc2VSb3V0ZSkpO1xcbiAgICBNeVBhcnNlUyA9IHBhcnNlRmlsZS5jb2RlcztcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxufVxcbnZhciBwYXJzZVRpdGxlID0gW1xcbiAgICBcXFwieXVuMTcxN1xcXCIsXFxuICAgIFxcXCJQYW5HdVxcXCIsXFxuICAgIFxcXCJGdVhpbmdcXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlXFxcIixcXG4gICAgXFxcIumBk+mVv+S7k+W6k+mAmuWFjVxcXCIsXFxuICAgIFxcXCJkZWZhdWx0UGFyc2VXZWJcXFwiLFxcbiAgICBcXFwiT0vop6PmnpBcXFwiLFxcbiAgICBcXFwiTTNVOFRWXFxcIixcXG5dO1xcbi8v77yN77yN77yNPV5fXj1cXG5cXG4vL+aOpeWPo+iuvue9ri5cXG5cXG52YXIgc2V0VXJsID0gXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxudmFyIGxhenkgPSBgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClgO1xcblxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXG5cXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXG4vKlxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXG4gKlxcbiAqIHd1aWdlbjogaHR0cHM6Ly93d3cuNWlnZW4uY29tL2RtcGxheWVyL3BsYXllci8/dXJsPVxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXG4gKlxcbiAqL1xcblxcblxcbnZhciB0b29scyA9IHtcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLk1ENShkYXRhKS50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXG4gICAgfSxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXG4gICAgICAgIGlmIChpc0VuY3J5cHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgfSxcXG4gICAgLy9hc2NpaVxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzICsgayk7XFxuICAgIH0sXFxuICAgIC8v5Yev5pKSXFxuICAgIGNhZXNhckNpcGhlcjogZnVuY3Rpb24oc3RyaW5nVmFsdWUsIGspIHtcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xcbiAgICB9LFxcbiAgICBub3dEYXRlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBkYXRlMSA9IG5ldyBEYXRlKCk7XFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGRhdGUxKSB7XFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxuICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZTEuZ2V0TW9udGgoKSArIDE7XFxuICAgICAgICAgICAgdmFyIGRheSA9IGRhdGUxLmdldERhdGUoKTtcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItMFxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIG1vbnRoO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZGF5IDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi1cXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcbiAgICB9LFxcbiAgICB0b0pTT046IGZ1bmN0aW9uKGpzb24pIHtcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgNCk7XFxuICAgIH0sXFxuICAgIHRvVk51bTogZnVuY3Rpb24oYSkge1xcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxuICAgICAgICB2YXIgYyA9IGEuc3BsaXQoJy4nKTtcXG4gICAgICAgIHZhciBudW1fcGxhY2UgPSBbXFxcIlxcXCIsIFxcXCIwXFxcIiwgXFxcIjAwXFxcIiwgXFxcIjAwMFxcXCIsIFxcXCIwMDAwXFxcIl0sXFxuICAgICAgICAgICAgciA9IG51bV9wbGFjZS5yZXZlcnNlKCk7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICB2YXIgbGVuID0gY1tpXS5sZW5ndGg7XFxuICAgICAgICAgICAgY1tpXSA9IHJbbGVuXSArIGNbaV07XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcmVzID0gYy5qb2luKCcnKTtcXG4gICAgICAgIHJldHVybiByZXM7XFxuICAgIH0sXFxuICAgIGNwclZlcnNpb246IGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgIHZhciBfYSA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGEpKSxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXG4gICAgICAgIGIgPSBpc05hTihfYikgPyB2ZXJzaW9uIDogYjtcXG4gICAgICAgIGlmIChfYSA+IF9iKSB7XFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHB1dFZhcignanhPbGRWJywgYik7XFxuICAgIH1cXG59O1xcbmlmIChnZXRWYXIoXFxcImp4T2xkVlxcXCIsIFxcXCIwXFxcIikgIT0gdmVyc2lvbikge1xcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcbiAgICBsZXQganhOZXdWID0gZmV0Y2goJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy9QYXJzZVZlcnNpb24udHh0JyksXFxuICAgICAgICBqeE9sZFYgPSAoZmV0Y2goX215U2V0LmNqY2FjaGUpLnNwbGl0KCd2ZXJzaW9uID0gXFxcIicpWzFdICsgJycpLnNwbGl0KCdcXFwiJylbMF07XFxuICAgIHRvb2xzLmNwclZlcnNpb24oanhOZXdWLCBqeE9sZFYpO1xcbn1cXG5cXG52YXIgUGFyc2VTID0ge307XFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcbiAgICAvLyB1cGRhdGVEYXRlOiB1cGRhdGVEYXRlLFxcbiAgICBwYXJzZUxjOidodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3AvcGFyc2VMYy5qcycsXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxc77ybXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG0zdTggPSBmZXRjaCh2VXJsLCB7fSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvcy5tM3U4JywgbTN1OCk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgcmV0dXJuICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS92aWRlb3MubTN1OCMnO1xcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0LGV4dHJhKSB7XFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICAgICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHw1MDAwO1xcbiAgICAgICAgZXh0cmEgPSBleHRyYXx8e307XFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBleHRyYS5wbGF5VXJsTGlzdHx8W107XFxuICAgICAgICBpZih0eXBlb2YocGxheVVybExpc3QpPT09J29iamVjdCcmJnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC51bnNoaWZ0KHBsYXlVcmwpO1xcbiAgICAgICAgICAgIGxvZygn5byA5aeL5om56YeP6Kej5p6QKOW3suWOu+mHjSk6JytleHRyYS5uYW1lTGlzdCk7XFxuICAgICAgICAgICAgY29uc3Qge0xhenlQYXJzZUZhc3R9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgICAgICBsZXQgcmV0ID0gTGF6eVBhcnNlRmFzdChwbGF5VXJsTGlzdCx0aW1lb3V0LHRpbWVvdXQpO1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXQpPT09J29iamVjdCcmJnJldC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIHJldHVybiByZXRbMF1cXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGNvbnN0IHtsYXp5UGFyc2V9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgICAgICBsZXQgeDVQbGF5PWxhenlQYXJzZShwbGF5VXJsLHRpbWVvdXQpO1xcbiAgICAgICAgICAgIGlmKHR5cGVvZih4NVBsYXkpPT1cXFwidW5kZWZpbmVkXFxcInx8IXg1UGxheSl7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pgZPplb/ku5PlupPop6PmnpDlpLHotKVcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCB0aXBzPS94NVJ1bGUvLnRlc3QoeDVQbGF5KT9cXFwieDXlhY3ll4XlvIDlp4tcXFwiOlxcXCLmnoHpgJ/lhY3ll4XmjqLlrozmr5XvvIzlnLDlnYA6XFxcIisoL15odHRwLy50ZXN0KHg1UGxheSk/eDVQbGF5OifpnZ7mraPluLjpk77mjqUnKTtcXG4gICAgICAgICAgICBsb2codGlwcyk7XFxuICAgICAgICAgICAgcmV0dXJuIHg1UGxheTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgbWFvc3M6IGZ1bmN0aW9uKGp4dXJsLCByZWYpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXCIvKVsxXSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoJ2J0X3Rva2VuID0gXFxcIicpWzFdLnNwbGl0KCdcXFwiJylbMF07XFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC92YXIgY29uZmlnID0ge1tcXFxcc1xcXFxTXSo/fS8pWzBdICsgJycpO1xcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcbiAgICAgICAgICAgICAgICBjb25maWcudXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHRvb2xzLkFFUyhjb25maWcudXJsLCBcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXCIsIGl2KSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFwiYXBpLnBocFxcXCI7XFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8qdmFyIHJlZiA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS8nO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcbiAgICAgICAgICAgICovXFxuICAgICAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcbiAgICAgICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcbiAgICAgICAgICAgIC8vdmFyIGFwaSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvYXBpLnBocCc7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tL3Bhbmd1Lz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocCc7XFxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcXG4gICAgICAgICAgICAgICAgcmVmID0gZGF0YVswXTtcXG4gICAgICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcbiAgICAgICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcGFyc2VcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgdmlwVXJsICsgJyZyZWZlcmVyPScgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgJyZyZWY9MSZ0aW1lPScgKyBUaW1lICsgJyZ0eXBlPSZvdGhlcj0nICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyAnJmlvcz0wJyxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICB9KSkudXJsO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB5dW4xNzE3OiBmdW5jdGlvbiAodmlwVXJsKSB7XFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcbiAgICAgICAgdmFyIHJlZiA9IFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcIjtcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXG4gICAgfSxcXG4gICAgT0vop6PmnpA6J2h0dHBzOi8vb2tqeC5jYy8/dXJsPScsXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXG4gICAg6YGT6ZW/5LuT5bqT6YCa5YWNOmZ1bmN0aW9uICh1cmwsdGltZW91dCl7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIEZ1WGluZzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcbiAgICAgICAgICAgIC8vICAgIHZpcFVybCA9IChKU09OLnBhcnNlKHJlcXVlc3QodmlwVXJsLCB7cmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSkuaGVhZGVycy5sb2NhdGlvbiArICcnKS5yZXBsYWNlKC9cXFxcPy4qLywnJyk7XFxuICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpL2FwaXVfZngucGhwJztcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcblxcblxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsc3RyVGl0bGUsdGltZW91dCxwbGF5VXJsKSB7XFxuICAgIC8vIOWPguaVsDE65q2j54mI572R5Z2A5Zyw5Z2AIOWPguaVsDIg5a6a5ZCR6Kej5p6Q5o6l5Y+j5ZCN56ewIOWPguaVsDMgeDXop6PmnpDotoXml7Yg5Y+C5pWwNCDlrozmlbTnmoTmkq3mlL7pk77mjqVcXG4gICAgc3RyVGl0bGUgPSBzdHJUaXRsZXx8Jyc7XFxuICAgIHBsYXlVcmw9cGxheVVybHx8Jyc7XFxuICAgIC8vIGxvZygn5Lyg5YWlYXl0bVBhcnNl55qE6LaF5pe2OicrdGltZW91dCk7XFxuICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8NTAwMDtcXG5cXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAgIGxldCBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxuICAgIGxldCBNeUppZXhpID0ge307XFxuICAgIGxldCBqaWV4aXMgPSB7fTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxuICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxuICAgIH1jYXRjaCAoZSkge31cXG4gICAgZnVuY3Rpb24gZ2V0UGxheUp4KGtleSl7XFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBbXTsvL+aJuemHj+aSreaUvuWcsOWdgOWIl+ihqFxcbiAgICAgICAgbGV0IG5hbWVMaXN0ID0gW107XFxuICAgICAgICBsZXQganhzID0gamlleGlzW2tleV07IC8vIOmAgueUqOS6jui/meS4que9keermeeahOino+aekOWIl+ihqFxcbiAgICAgICAgaWYoanhzKXtcXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4ganhzKXtcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlU1tqeHNbaV1dID09ICdzdHJpbmcnJiZQYXJzZVNbanhzW2ldXS5tYXRjaCgvaHR0cC4qPz0vKSl7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdC5wdXNoKFBhcnNlU1tqeHNbaV1dK3ZpcFVybCk7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKGp4c1tpXSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvLyByZXR1cm4gcGxheVVybExpc3RcXG4gICAgICAgIHJldHVybiB7cGxheVVybExpc3Q6cGxheVVybExpc3QsbmFtZUxpc3Q6bmFtZUxpc3R9XFxuICAgIH1cXG4gICAgbGV0IGV4dHJhID0ge307XFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgICBpZighc3RyVGl0bGUpe1xcbiAgICAgICAgdmFyIGhvc3Q7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXC4oLio/KVxcXFwvLylbMV07XFxuICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgaWYoIS9eaHR0cC8udGVzdChwbGF5VXJsKSl7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwi5pat5o+S6LCD55So5aSx6LSl77yBXFxcXG7pnZ7mraPluLjnmoR2aXDmraPniYjlnLDlnYDkuJTmnKror4bliKvljp/nq5nop6PmnpDmkq3mlL7lnLDlnYBcXFwiO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLumBk+mVv+S7k+W6k+mAmuWFjShwbGF5VXJsLHRpbWVvdXQpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coaG9zdCk7XFxuICAgICAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcbiAgICAgICAgICAgIGNhc2UgXFxcIum7mOiupFxcXCI6XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicXEuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgndHgnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImlxaXlpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3F5Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJ5b3VrdS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnlrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd5aycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiYWxpenlcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmFsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdhbCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWd0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiYmlsaWJpbGkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYmwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInNvaHUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIml4aWd1YS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnhnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd4ZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicHB0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnBwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdwcCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWlndXZpZGVvLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21pJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJsZS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdsZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiMTkwNS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm9uZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb25lJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJmdW4udHZcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmZ1bjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnZnVuJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm90aDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGxvZygn5q615o+S5omn6KGM5a6a5ZCR6Kej5p6Q57q/6Lev5aS0Oicrc3RyVGl0bGUpO1xcbiAgICAgICAgc3RyID0gc3RyVGl0bGU7XFxuICAgIH1cXG4gICAgbGV0IHdpdGhCYXRjaCA9ICEhKE15SmlleGkuaXNBdXRvICYmIE15SmlleGkuYXV0b01vZGUgPT09ICfpgJ/luqbkvJjlhYgnKTtcXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICBpZigv6YCa5YWNLy50ZXN0KHN0cikpe1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgdXJsID0gUGFyc2VTW3N0cl0odmlwVXJsKTtcXG4gICAgICAgIGlmICgvXlxcXFwvLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKC89aHR0cC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8qaWYodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKT09J21ndHYuY29tJyl7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcbiAgICAgICAgfSBlbHNlICovXFxuICAgICAgICBpZiAoL1xcXFwuZmx2Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSB2aXBVcmwpIHtcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ3N0cmluZycmJlBhcnNlU1tzdHJdLm1hdGNoKC9odHRwLio/PS8pKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuaWreaPkuW8gOWni+mAmueUqOaJp+ihjOWFjeWXhSBkZWZhdWx0UGFyc2VXZWI6XFxcIit0aW1lb3V0KTtcXG4gICAgICAgIC8vbG9nKFxcXCLpu5jorqR4NVxcXCIrUGFyc2VTLmRlZmF1bHRQYXJzZVdlYik7XFxuICAgICAgICBpZih3aXRoQmF0Y2gpe1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihleHRyYS5wbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmZXh0cmEucGxheVVybExpc3QubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0LmZpbHRlcihpdD0+aXQhPT0oUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwpO1xcbiAgICAgICAgICAgICAgICBsZXQgbmFtZUxpc3QgPSBleHRyYS5uYW1lTGlzdDtcXG4gICAgICAgICAgICAgICAgbmFtZUxpc3QudW5zaGlmdChzdHIpO1xcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBleHRyYS5uYW1lTGlzdD11bmlxdWUyKG5hbWVMaXN0KTtcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSB1bmlxdWUyKGV4dHJhLnBsYXlVcmxMaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKChQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCx0aW1lb3V0LGV4dHJhKTooUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmw7XFxuICAgIH0gZWxzZSBpZih0eXBlb2Yoc3RyKT09PSdzdHJpbmcnJiZzdHIubGVuZ3RoPjEmJih0eXBlb2YgUGFyc2VTW3N0cl09PSd1bmRlZmluZWQnfHwhUGFyc2VTW3N0cl0pJiYhL15odHRwLy50ZXN0KHN0cikpe1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+i/m+ihjOaWreaPkumFjee9rizmjqjojZDmi4nlj5bpgZPplb/nsr7pgIkhXFxcXG7mo4DmtYvliLDml6DmlYjnmoTop6PmnpDphY3nva46JytzdHI7XFxuICAgIH1lbHNlIHtcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKHN0ciArIHZpcFVybCx0aW1lb3V0KTtcXG4gICAgfVxcbn1cXG5cXG52YXIgcGxheVBhcnNlID0ge1xcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwsIExhYmVsKSB7XFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBqc1VybCA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpLmNqO1xcbiAgICAgICAgICAgIHZhciBMYWJlbCA9IGs7XFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSBiYXNlNjREZWNvZGUocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IHVuZXNjYXBlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmYS5pbmNsdWRlcyhwZGF0YS5mcm9tKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBkYXRhLnVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgTGFiZWwpXFxuICAgIH1cXG59O1xcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxuICAgIGlmIChnZXRWYXIoXFxcImlqay10eFxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiMVxcXCIpIHtcXG4gICAgICAgIHNldEl0ZW0oXFxcInRpeGluZ1xcXCIsIFxcXCIxXFxcIilcXG4gICAgICAgIGNsZWFyVmFyKFxcXCJpamstdHhcXFwiKVxcbiAgICB9XFxuICAgIGlmIChnZXRJdGVtKFxcXCJ0aXhpbmdcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5YWN6LSj5aOw5piOJyxcXG4gICAgICAgICAgICBjb250ZW50OiAn5pys56iL5bqP5LiN5o+Q5L6b6KeG6aKR6Kej5p6Q5pyN5YqhXFxcXG7miYDmnInlhoXlrrnlnYfku47nlKjmiLfliIbkuqvkuK3mlLbpm4ZcXFxcbuS7heS+m+a1i+ivleWSjOWtpuS5oOS6pOa1gVxcXFxuXFxcXG7noa7lrprljbPorqTlj6/vvIzkuI3lho3mj5DphpInLFxcbiAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoXFxcImlqay10eFxcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eCueWHu+S6huehruiupFxcXCJcXG5cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5pZiAoIWdldFZhcihcXFwidGl4aW5nXFxcIikpIHtcXG4gICAgbXpQb3B1cCgpO1xcbiAgICBwdXRWYXIoJ3RpeGluZycsJ29rJyk7XFxufVxcblxcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCxuYW1lKSB7XFxuICAgIG5hbWUgPSBuYW1lfHwnJztcXG4gICAgdmFyIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIXimIXimIUnKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgX2R0ID0gcGFyc2VQYXN0ZShkYXRhWzBdKTtcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9PSAnZXJyb3I6JyA/IF9kdCA6ICcnO1xcbiAgICB9XFxuICAgIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIUnKTtcXG4gICAgdmFyIHR5cGUgPSBkYXRhWzBdO1xcbiAgICB2YXIgYXJyTGlzdCA9IFtdO1xcbiAgICB2YXIgb2JqQ29kZSA9IHt9O1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAyICYmIGRhdGFbMF0gIT09ICfnm7Tpk74nKSB7XFxuICAgICAgICB2YXIgb2JqS2V5ID0gZGF0YVsxXTtcXG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGRhdGFbMl07XFxuICAgICAgICBpZiAodHlwZSA9PT0gJ015UGFyc2VTJykge1xcbiAgICAgICAgICAgIG9ialZhbHVlID0gYmFzZTY0RGVjb2RlKG9ialZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChvYmpWYWx1ZS5zcGxpdCgnZnVuY3Rpb24nKS5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgZXZhbCgnb2JqVmFsdWU9JyArIG9ialZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDAsIG9iaktleSk7IC8v5re75Yqg6aG555uu6Z2e5Yig6ZmkXFxuICAgICAgICBvYmpDb2RlW29iaktleV0gPSBvYmpWYWx1ZTtcXG5cXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAn55u06ZO+Jykge1xcbiAgICAgICAgYXJyTGlzdCA9IGRhdGE7XFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAxKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGFyckxpc3QgPSBudWxsO1xcbiAgICB9XFxuICAgIGlmIChhcnJMaXN0ICE9IG51bGwpIHtcXG4gICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG4gICAgICAgIGlmKG5hbWUpey8v5Yig6Zmk5ZCN56ew5YiX6KGo5ZKM5Luj56CBXFxuICAgICAgICAgICAganNvbi50aXRsZS5yZW1vdmUobmFtZSk7XFxuICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICB9XFxuICAgICAgICBhcnJMaXN0ID0gYXJyTGlzdC5jb25jYXQoanNvbi50aXRsZSk7XFxuICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KGFyckxpc3QpKTtcXG4gICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb2JqQ29kZSk7XFxuICAgICAgICBpZiAodHlwZSA9PT0gJ+a1i+ivlScpIHtcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbZGF0YVsxXV0gPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTW2RhdGFbMV1dKGRhdGFbMl0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKFBhcnNlU1tkYXRhWzFdXSArIGRhdGFbMl0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5L+d5a2Y5YaF5a65XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaJcXFwiXFxuICAgIH1cXG59XFxuLy8g5Lul5LiL5Luj56CB5Y2D5LiH5LiN6KaB5pS+5Ye65p2l5ZCm5YiZ5oql6ZSZXFxuaWYgKGdldEl0ZW0oJ3VwZGF0ZURhdGUnKSAhPSB1cGRhdGVEYXRlKSB7XFxuLy8gaWYgKHRydWUpIHtcXG4gICAgLy8g5oqKZnVuY3Rpb27lj5jmiJBzdHJpbmdcXG4gICAgbGV0IGZ1bmN0aW9uQ29kZSA9IHNhdmVCdXR0b24gKyAnOycrbXpQb3B1cDtcXG4gICAgLy8gd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJywgZmV0Y2goX215U2V0LmNrTGluayArICdwbHNjUGFyc2UuaHRtbCcpKTtcXG4gICAgc2V0SXRlbSgnbXlGdW5jdGlvbicsIGZ1bmN0aW9uQ29kZSk7XFxuICAgIHNldEl0ZW0oJ3VwZGF0ZURhdGUnLCB1cGRhdGVEYXRlKTtcXG59XFxudmFyIGJqSXRlbSA9IHtcXG4gICAgaGZQbHVnaW46IGZ1bmN0aW9uKHBhcnNlUm91dGUpIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGZpbGVFeGlzdChrKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pjYWNoZSA9IGdldFZhcignY2pDYWNoZScpO1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKGspKTtcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncy5jaiA9IGNqY2FjaGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgIHZhciBvbGRSb3V0ZSA9IGdldFZhcignb2xkQ29uZmlnJyk7XFxuICAgICAgICAgICAgICAgIHZhciBvbGRDb25maWcgPSBqc29uLnNldHRpbmdzO1xcbiAgICAgICAgICAgICAgICBvbGRDb25maWcuY2ogPSBjamNhY2hlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsICQuc3RyaW5naWZ5KG9sZENvbmZpZykpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3miJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pnIDopoHlhYjmi4nlj5bliJfooagnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgcGFyc2VSb3V0ZSlcXG4gICAgfSxcXG4gICAgcHVsbENvZGU6IGZ1bmN0aW9uKGspIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHB1bGxNb2RlID0ga1swXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGtbMV07XFxuICAgICAgICAgICAgdmFyIHBhcnNlRmlsZSA9IGZldGNoKHBhcnNlUm91dGUpO1xcbiAgICAgICAgICAgIGlmICghcGFyc2VGaWxlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpO1xcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9ICFzZXR0aW5ncyA/IHt9IDogSlNPTi5wYXJzZShzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIHZhciBqc29uID0ge307XFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MgPSBzZXR0aW5ncztcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IFtdO1xcbiAgICAgICAgICAgICAgICBqc29uLmNvZGVzID0ge307XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBwYXJzZUZpbGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgcGFyc2VUaXRsZSA9IFtdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZUNvZGU9e307XFxuICAgICAgICAgICAgdmFyIGNqTGluayA9IGdldFZhcigncGx1Z2luTGluaycpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFwvXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZShjakxpbmsuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigv5o+S5Lu25ZCNLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxMaW5rID0gY2pMaW5rLnNwbGl0KCfmj5Lku7blkI0nKVswXS5yZXBsYWNlKC9bXFxcXHNdL2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKCfop6PmnpDkupHliarliIfmnb86JytyZWFsTGluayk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgeVBhc3RlID0gcGFyc2VQYXN0ZShyZWFsTGluayk7XFxuICAgICAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcL1xcXFwvLy50ZXN0KHlQYXN0ZSkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKHlQYXN0ZS5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVM9PT0ndW5kZWZpbmVkJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Liq6bih5q+b5o+S5Lu2LOmHjOmdoui/nlBhcnNlU+WvueixoemDveayoeaciSEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+m4oeavm+aPkuS7tuaJp+ihjOaKpemUmTpcXFxcbicrZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrog73or4bliKvkupHliarliIfmnb/kuK3nmoTlhoXlrrk6XFxcXG4nK3lQYXN0ZS5zdWJzdHJpbmcoMCwxMDApO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNqTGluayA9PT0gJ1HnpZ4nKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHQnKS5zcGxpdCgnXFxcXG4nKTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBqaWV4aSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyB9ZWxzZSBpZigvXiNbYS16QS1aMC05XXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY1cXG4gICAgICAgICAgICAgICAgZWxzZSBpZigvXiNbXFxcXFNdezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jeS7u+aEj+mdnuepuuWtl+espuS4slxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Rhc2tDYWxsLCB0YXNrUnVuLHRhc2tSZXF9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdGFza0NhbGw/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZygn5byA5aeL5omn6KGM5Lu75Yqh5LuT5bqT6I635Y+W5pat5b+15o+S5Lu256aP5Yip5Y+j5LukJyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGFza0NhbGwoMTcsJ0RuRnVsaScsW2NqTGlua10pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gSlNPTi5wYXJzZShyZXN1bHQucmVzdWx0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cocmV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQub3B0PT09J2Vycm9yJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nK3JldC5tc2c7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd1cmwnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChyZXQucmV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IGh0bWwuaW5jbHVkZXMoJ2h0dHAnKT8gaHRtbDpiYXNlNjREZWNvZGUoaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGFyci5tYXRjaCgvW1xcXFxTXSo/LC4qP1tcXFxcc10vZyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gamlleGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXS5zcGxpdChcXFwiXFxcXG5cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J2p4Jyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC9bXFxcXFNdKj8saHR0cFtcXFxcU10vLnRlc3QocmV0LnJldCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcmV0LnJldC5zcGxpdCgnLCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCcsJylbMV0uc3BsaXQoJ1xcXFxuJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmh0dHAvLnRlc3QocmV0LnJldCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJ1xcXFxuJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrnn6XnmoTnpo/liKk6XFxcXG4nK3JldC5yZXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J3ZpcEp4Jyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT0vZnVuY3Rpb24vLnRlc3QoY29kZSk/ZXZhbChjb2RlKTpjb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ku5PlupPpnZ7mnIDmlrDniYjmiJbogIXnpo/liKnnpL7lip/og73lvIDlj5HkuK0nXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGNqTGluaz09PSfmlq3mj5InKXtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9eaGlrZXI6XFxcXC9cXFxcL3xeZmlsZTpcXFxcL1xcXFwvfF5odHRwfF5cXFxcL3N0b3JhZ2VcXFxcL3xeXFxcXC9zZGNhcmRcXFxcLy8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9eXFxcXC9zdG9yYWdlXFxcXC98XlxcXFwvc2RjYXJkXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaW5rID0gJ2ZpbGU6Ly8nK2NqTGluaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY2pMaW5rKSk7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluWPo+S7pOacieivrydcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBqeEp1ZGdlID0gdHlwZW9mIFBhcnNlUyA9PSAnb2JqZWN0JztcXG4gICAgICAgICAgICB2YXIgbGJKdWRnZSA9IHR5cGVvZihwYXJzZVRpdGxlKSA9PSAnb2JqZWN0JztcXG4gICAgICAgICAgICBpZiAoanhKdWRnZSB8fCBsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgIC8vIGlmIChwdWxsTW9kZSA9PT0gJ+WIl+ihqCcpIHtcXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICghbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHBhcnNlVGl0bGUgPSBPYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgLy8gICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcbiAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgIC8vIOS4jeeuoeaLieWPluS7o+eggei/mOaYr+WIl+ihqOmDveimgeaKiuWIl+ihqOaLieS6hlxcbiAgICAgICAgICAgICAgICBpZiAoIWxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBPYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBzY09iamVjdCA9IFtcXFwiQ2l0eUlQXFxcIiwgXFxcInBjVUFcXFwiLCBcXFwiY2FjaGVNM3U4XFxcIiwgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxcImRlZmF1bHRQYXJzZVdlYlxcXCIsXFxcIm1hb3NzXFxcIiwgXFxcIkxMUVxcXCIsXFxcInBhcnNlTGNcXFwiXTtcXG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09PSAn5Luj56CBJykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbFBhcnNlUyA9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2NPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yaWdpbmFsUGFyc2VTW3NjT2JqZWN0W2ldXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWxQYXJzZVMgPW9yaWdpbmFsUGFyc2VTLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KVswXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb3JpZ2luYWxQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoUGFyc2VTKT09XFxcInVuZGVmaW5lZFxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieS7o+egge+8jOS4jeWPr+aLieWPllxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPlicgKyBwdWxsTW9kZSArICfmiJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrojrflj5bliLDlr7nosaEnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIFtrLCBfbXlTZXQucGFyc2VSb3V0ZV0pXFxuICAgIH0sXFxuICAgIHB1bGxTY3JpcHQ6IGZ1bmN0aW9uKGNqLCB4NSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHZhciB4NUZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/JztcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB2YXIgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1swXSwgY2pGaWxlKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMV0sIHg1RmlsZSk7XFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE9sZFYnKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bmiJDlip8nO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquaIkOWKn+iOt+WPluWGheWuuSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgW2NqLCB4NV0pXFxuICAgIH0sXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxuICAgICAgICByZXR1cm4gXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6cmVkXFxcIiB0aXRsZT1cXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXCI+5YigIOmZpCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6I0Y1NzQ3NFxcXCIgdGl0bGU9XFxcIumakOiXj3x8JyArIGJpYW5qaSArICdcXFwiPumakCDol48nLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGRjgwMDBcXFwiIHRpdGxlPVxcXCLkv67mlLl8fCcgKyBiaWFuamkgKyAnXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXCI+572uIOmhticsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIuenu+WKqHx8JyArIGJpYW5qaSArICdcXFwiPuenuyDliqgnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnva7lupV8fCcgKyBiaWFuamkgKyBsYkxlbmd0aCArICdcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7lnLDmnb/liIbkuqsnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLkupHliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7kupHmnb/liIbkuqsnXSxcXG4gICAgICAgICAgICBjb2w6ICcyJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG5ld0lucHV0WzBdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5ld0lucHV0WzFdO1xcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxuICAgICAgICAgICAgICAgIHZhciBudW0yID0gbmV3SW5wdXRbM107XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5Yig6ZmkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi5Y2z5bCG5Yig6ZmkOiBcXFwiICsgbmFtZSkuY29uZmlybSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXCIgKyBuYW1lICsgXFxcIuOAl+WIoOmZpFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi6ZqQ6JePXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfpmpDol49cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPr+iDveaYr+S4que9keWdgCwg5oKo5Y+v6YCJ5oup5Yig6ZmkXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuS/ruaUuVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuQ29kZSA9IG5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5OYW1lID0gXFxcIui/meaYr+WQjeensFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkNvZGUgPSBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5OYW1lID0gbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLnJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtiYWNrKCk7XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuW7uuiuruaMiem7mOiupOeahOS7o+eggeagvOW8j+S/ruaUueWTplxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdpbnB1dF9lZGl0JywgaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ+S/ruaUueKYhScgKyBuYW1lICsgJ+KYhScgKyBjb2RlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj7moLzlvI/kuLrvvJrmk43kvZznsbvlnovimIXmoIfpopjimIVmdW5jdGlvbigpe+iHquWumuS5ieWGheWuuX08YnI+6K+35Yu/5aGr5YWl5YW25LuW5qC85byPJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbixuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5XFxcXG7or7foh6rooYzmo4DmtYvop6PmnpDmmK/lkKbmnInooqvopobnm5bnmoTlhoXlrrknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKHR5cGVvZihjb2RlKT09PSdzdHJpbmcnJiZjb2RlLmxlbmd0aD4yKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGNvZGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbixuYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMyOThBMDhcXFwiPuS/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuTmFtZSwgbkNvZGVdKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcbiAgICAgICAgICAgICAgICAgICAgLyp9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj6rmnInnvZHlnYDmiJbogIXmoIfpopgsIOS4jeaUr+aMgeS/ruaUuVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi572u6aG2XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIue9ruW6lVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bTIsIDAsIGl0ZW1bMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi56e75YqoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuWIhuS6q1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLkupHliIbkuqtcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAn5LqR5YiG5LqrJyAmJiBwYXJzZVRleHQuc3Vic3RyKDAsIDgpID09ICdNeVBhcnNlUycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcbuKYheKYheKYhVxcXFxuJyArICdNeVBhcnNlU++8micgKyBuYW1lIDogJ3RvYXN0Oi8v5YiG5Lqr5aSx6LSlISHkupHliarotLTmnb/lj6/og73mjILkuoYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXG4gICAgICAgICAgICAgICAgfSAvL3N3aXRjaOeahFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcbiAgICB9LFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFwiKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJpbnB1dF9hZGRcXFwiLCBpbnB1dCknLFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+5oyJ5o+P6L+w6K+J5qC85byP6L6T5YWlLCDor7fli7/loavlhaXlhbbku5bmoLzlvI88YnI+5pys5Zyw5Y+j5LukOiDmk43kvZznsbvlnovimIXlkI3np7DimIXku6PnoIE8YnI+5LqR5Y+j5LukOiDpk77mjqXimIXimIXimIXlkI3np7A7IOe6r+e9keWdgDog55u06ZO+4piFdXJsMeKYhXVybDInLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj7kv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdub0xvYWRpbmcnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcbiAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKEIsIDAsIGl0ZW1bMF0pOyAvLyAxOiDlkIzkuIrvvIwyOiAw6KGo56S65LiN5Yig6Zmk77yMMzog5re75Yqg5a+56LGhXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXG4gICAgfSxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5Yig6Zmk6Kej5p6QJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2F1dG8mJmZsb2F0JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfVxcbn07XFxuXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxuICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnNldFBhcnNlKCk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6LCD55So6Lev55SxXCIsXCJwYXRoXCI6XCJSb3V0ZVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgZCA9IFtdO1xcbmNvbnN0IGRhdGEgPSB7fTtcXG5cXG5kYXRhLm9sZENvbmZpZyA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuZGF0YS5jalJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiO1xcbmRhdGEueDVSb3V0ZSA9IFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sXFxcIjtcXG5cXG5cXG5kYXRhLmp4TGF6eSA9IFxcXCJldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goJ1xcXCIgKyBkYXRhLm9sZENvbmZpZyArIFxcXCInKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpXFxcIjtcXG5cXG5kYXRhLnN6UGFyc2UgPSBcXFwiI25vSGlzdG9yeSNoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uXFxcIjtcXG5cXG5kYXRhLnNldFBhcnNlID0gZnVuY3Rpb24oKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBkZXNjOiAnNzk1JyxcXG4gICAgICAgIHVybDogdGhpcy54NVJvdXRlLFxcbiAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgfSk7XFxuICAgIHZhciBvbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcXG4gICAgdmFyIG5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xcbiAgICB2YXIgdmVyc2lvblRpcHMgPSBwYXJzZUZsb2F0KG5ld1YpID4gcGFyc2VGbG9hdChvbGRWKSA/ICfigJjigJjmnInmlrDniYjmnKw6IHYnICsgbmV3ViA6ICfigJjigJgnO1xcbiAgICB2YXIgcGljcyA9IFtcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL3Nlb3Z4LTIwLTEwJTIwKDkyKS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgyMDcpLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmE0LnNpbmFpbWcuY24vbGFyZ2UvOWJkOWIxNjdneTFmd3JoNXhvbHRkajIxaGMwdTB0YXguanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmV5dTRubDZqMzFoYzB1MGFoci5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvZDdlNjBiOTkwNzQyMDkzZC5qcGVnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwLzkxYWQ2ZDY1MzhiZjg2ODkuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmVzbDVwbWxqMzFoYzB4Y3drYS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMy5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZ2pkazc0b2ozMWhjMHUwZHFuLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDMyMCkuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoODAzKS5qcGcnXFxuICAgIF07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBpbWc6IHBpY3NbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApXSxcXG4gICAgICAgIHRpdGxlOiB2ZXJzaW9uVGlwcyArICfigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPjxicj7jgIDjgIDngrnlh7vkuIrmlrnlpLTlg4/ov5vlhaXnvJbovpE8YnI+54K55q2k6L+b5YWl6K665Z2b5biW5a2Q5YiX6KGoJyxcXG4gICAgICAgIGRlc2M6ICflvZPliY3niYjmnKw6IHYnICsgb2xkVixcXG4gICAgICAgIHVybDogJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3VzZXIvMTk1OCcsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzEnXFxuICAgIH0pO1xcbn1cXG5cXG5zd2l0Y2ggKGdldFBhcmFtKFxcXCJ0eXBlXFxcIikpIHtcXG4gICAgY2FzZSBcXFwi6K6+572uXFxcIjpcXG4gICAgICAgIGRhdGEuc2V0UGFyc2UoKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCLnvJbovpFcXFwiOlxcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi5Li76aKYXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnRoZW1lSW5pdCgpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi6Kej5p6QXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TWFuYWdlKCk7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxuICAgICAgICBicmVhaztcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpDpobnkuLvnlYzpnaJcIixcInBhdGhcIjpcImp4SXRlbVwiLFwicnVsZVwiOlwidmFyIF8weG9kUj0nanNqaWFtaS5jb20udjYnLF8weDQ4NTU9W18weG9kUiwndzdGTHc3a2lKUT09JywnQThLdkpDL0RpUT09JywnUjhLdHc1SERxOEtTUWNPTycsJ3c1L0NnVnZDcmk5RndybDRYQlJXdzZyQ2lnPT0nLCdJVFRDbWNPd3dwM0NxQT09JywnR1FoR1k4S0onLCdHTUsxVXNLL1ZBPT0nLCd3cGpDdmlSSCcsJ0hBTVFTdzQ9JywnQXNLTkhEdkRxZz09JywnWmNLUndvWENrdz09Jywnd3AvQ213NSt3b0U9JywnSU1PL1BBbkRqZz09Jywnd294bnc1SERtQ1k9Jywnd29MQ3RRQkZ3b1E9JywnZDhPb05XL0Nsdz09JywnZVJIQ29TQWknLCdKY09tYmNPb0FNT3MnLCdKOEs4dzVURGt4d3lBZz09JywndzdZekFTTT0nLCd3cWNKd3ByQ2pGVT0nLCdmUUxDdlNzSicsJ09NT0J3cHdWdzZvPScsJ3c2RERyY09WRGNPdScsJ05zS0VGVFREcmc9PScsJ1ZNT3ZQOEs3S2c9PScsJ09BNVVRc0tyJywnUDhLMnc0M0RrUT09JywnSTNQRG04S0EnLCdHY0tSTmhYRHZnPT0nLCd3NFBDbDI1cXc2TT0nLCdQc081YjhPTEdBPT0nLCdLMnJEdThLTmFqSnVjZz09JywnRU1LcHc1WENzc09Zd28vRGtjT04nLCd3Nmsyd3BZSScsJ05UWENoY09Sd3A4PScsJ2VzT1hBTUtiTHc9PScsJ3dyaHNGVjFwJywnd3BUQ3R3Uld3cDlDd3FQRGpRPT0nLCdLbkhEZ3NLZGZnPT0nLCdVMFhEazF4eicsJ1JzT2ZQd3Qyd3JMRGxnPT0nLCd3cm9Td3IvRHFHYkNxc09sVUN2RGtNS1p3NmJEaUdzcCcsJ0U4S0hlTUtqYXc9PScsJ1hjT0p3NHMrd3JuRGptRENuOEttVDhPU3c0VENoUlhDdU1PendyM0Nsc0taSGNLM3c2WERoOE8wTWc9PScsJzVvbUI1WSs2NUxpcDVvMkE1THV4NVpLKzU3MkU2YUs3NkllUTVwNkknLCdKMlBEa01LY1dUUm9hQnNBSnkxWScsJzVwTy81THl1NW95MjViNnEnLCc1b3U2NVkyQTVMcWw1NkM3JywnNTcrMDZMNmg2S1dVNXB5ZScsJ0t4OTVXTUtlQVE9PScsJzVvT2s1YVdMNW82ZzVMcTk2TGVDNWJ5ejVMcWw2YnVaNks2dicsJ0h5azlmVHZEa2duRHRIOXAnLCc2TDJFNVlhazVwMnY1cFdhNW95dzVMcXg1WjZnNVoycicsJ0F6VW5UZ1hEZ2szQ3QyRnVWc09qU0Y5b1ZoUENuMkhDcmpGcURETkJ3NGM9JywnNG9PdDRvR0s0b0d5NG9LVndwSERxMnRHVk1La3dwcFdTQmpEcDhPbExPZVprK1c5dXVhTm1lZW5yZz09JywnNUx5YzU1YTI1NWlnNVlXUzVZaVQ2SUNQNlo2QzU1aUk1YnlGNktXbDU1YVE2SzZrNVp5aDZMUzI1WTYzRE9XbnFPYWZwZW1VZ2VtaHZPV0luK1c5cHVpdHQrV2ZrK1M1cE9pbHJlaXR0dWFBcHc9PScsJ3dwM0Rvc0txdzR2Q2g4T2VhTUsrV2xyQ3MzVWdSOEtpVjMzRGoxcE13N3d5dzVrYVFNT3RTd05CdzRGdXc3UVFUTUtxJywnSWNPd1VzTzRLdz09Jywnd3B2Q2lERmR3b2s9JywndzRYQ3QwakNzQWc9JywndzRYRHFVN0NyY091JywndzRyQ3MwckNpQU09JywnSU1LbVBVSENqQT09JywnRmNLVXc1ZkNvc09yJywnQ3lZM1VBOD0nLCdZMmZEdVJsQicsJ0hHM0R0OE9kZnc9PScsJ1c4T2dMMzdEcHc9PScsJ1RjTzFIdzVpJywnd3BKRnc0VERwZz09JywndzdVcXdvc0ZaOEttdzcvRGwyNFYnLCdXaHRhdzVva3c2M0RpV0Zud3FUQ3NjT3RQeTVQd29Vb3c2ckNnd1Zrd3FzY05IUkVJY08wd3FMQ3M4SytVc09odzY3Q3MwRERoc09ad3BmRHNsd1lFZ3pEdmNPYVVTdkNwTU9YUEZmQ3BzT3dBOEtWd3JSMHc2eEp3NUxEbkZIRG1jSzV3cjdDZ3NLcHc3UXV3cWJDbVFROHdySER2WE4wVzM3RHRNS2ZHY09tSnNPajRiYTQ0b0cyd29WSXdwN0NsbmNsS1EwSEhUVmtKTU9HUGNPVndxbkRuQWpDb2xVYnc2YkRpTU96JywndzVKVVI4TzFjdz09JywndzR0Ync2RkV3cUp0WDBRPScsJ0tWZkR1OEtrUXc9PScsJ3c1UTl3cFFXR3c9PScsJ1FoTkR3NHd6d29YQ2lUdDJ3cXc9JywnNW9xZTVZeWo1WW1NNktHSCcsJ3c3aFpmc08rUkYxeHdxcz0nLCd3cTExdzUvRHJ3QT0nLCdKTUtDV0E5eU5NS2pOQT09JywnVVVQRHBXWm13NnZEbjFacXc3QT0nLCd3NEF5d3BrMEdnPT0nLCdjY09rREdIQ2dnPT0nLCdYTU9PSGd3PScsJ3c1dyt3cm5Eb3p3PScsJ3c1OXZ3NlJtd3I0PScsJ3dvQWZFV289JywnR3NPSndybHV3NFU9Jywnd29UQ3ZRZGZ3b1pBd3FuRGx3PT0nLCdUTU9HUEJsR1VjSzNZeXpEdmc9PScsJ1h1V3VyK2FVaXVpMmpPVyt0V0hEcDM3Q3RSZzF3N05jTzhLM3dxQnF3b0hDaGdKalF4ckN2c09tWjhLblJYOE1GOE9IWXNPeFVBPT0nLCdKOEtBS0VjPScsJ0VzS1V3N0hEcGdnPScsJ1hNTzJFR25DaEE9PScsJ1M4T2dOMTNEalE9PScsJ3dvVENyVDUzd3A4PScsJ3dxZkNyUk4xd29zcHc1eENDMGs9JywndzZMQ2pVWENzeEU9Jywnd29kUVBVSnYnLCdOd0RDcE1PYndxdz0nLCdCc09td3FoT3c3N0Noc094Jywnd29BTEVIRkknLCdPY09xZnNPNUxjT2tGeXpDdVhYQ2ljS1N3N1o4UGpwZ1BYWERpbloydzdqQ3JNS2xPU1RDazhLVndyZ2FSalREb01LaXc3SVk0YmVGNG9PaScsJzRvR040b09CNG9LOTRvS21RU0lLdzQ3RHBjS1VHTU9DQ2NLa2Y4S2V3ck1Pd3ByRGdNS09Bc095dzQ1TEMyOGp3ckREcEJQQ3VNT01PY084d3FjUWVsND0nLCd3b0UzRThPNHc3TENxZz09JywnVE1PUkU4S3BEdz09Jywnd3Bjd0dNT1Z3N2M9JywnRFFKcVZNS0EnLCdHeFBDc01PZHdxRT0nLCd3NHAyZGNPQWN3PT0nLCdIOE9Td3IwQnc0OD0nLCdXM2JEbmkxYScsJ3c3aFpZY082JywndzZJdndwN0RnamM9JywnZjhPUk1WZkRpQT09Jywnd3FiQ293Uit3cDA9Jywnd29zRndvbkNua2M9JywnY2NPQkptM0NoUT09JywnRXNLRUVrUENoUT09JywnNG9PbzRvR3k0b0c3NG9DYkVjT0JCOE9ldzZzM3dwbkN2c0trd3JIRGtSckNzM01VdzZBRGM4T2F3NXRWRnNPS3dyY0d3cjlGdzVBPScsJ0dzS1dJV0RDb1E9PScsJ3dydG5LV0pNJywnZmNPQUY4S2NGQT09JywnWk1PdUFRaGgnLCc1NmVINVlpUGJRPT0nLCc1Nlc5NVl1dVNHcz0nLCd3NFlBdzVNYnc0N0NvQT09JywnZUIvQ2lTc0pIQT09JywndWpzQVNPalRPaW5heFptaXJ6LmNvbUsuTHY2PT0nXTsoZnVuY3Rpb24oXzB4MzE1MmRhLF8weDJmNzFkZixfMHgyMjkzOTYpe3ZhciBfMHg0MTAzOTk9ZnVuY3Rpb24oXzB4NGE4MjM4LF8weDE0NjdhNSxfMHhlMDQyMDUsXzB4MTdjZmQ3LF8weDM4MjQxNCl7XzB4MTQ2N2E1PV8weDE0NjdhNT4+MHg4LF8weDM4MjQxND0ncG8nO3ZhciBfMHg5NmQyNzQ9J3NoaWZ0JyxfMHg3MTkzNDI9J3B1c2gnO2lmKF8weDE0NjdhNTxfMHg0YTgyMzgpe3doaWxlKC0tXzB4NGE4MjM4KXtfMHgxN2NmZDc9XzB4MzE1MmRhW18weDk2ZDI3NF0oKTtpZihfMHgxNDY3YTU9PT1fMHg0YTgyMzgpe18weDE0NjdhNT1fMHgxN2NmZDc7XzB4ZTA0MjA1PV8weDMxNTJkYVtfMHgzODI0MTQrJ3AnXSgpO31lbHNlIGlmKF8weDE0NjdhNSYmXzB4ZTA0MjA1WydyZXBsYWNlJ10oL1t1QVNPVE9ueFpyektMPV0vZywnJyk9PT1fMHgxNDY3YTUpe18weDMxNTJkYVtfMHg3MTkzNDJdKF8weDE3Y2ZkNyk7fX1fMHgzMTUyZGFbXzB4NzE5MzQyXShfMHgzMTUyZGFbXzB4OTZkMjc0XSgpKTt9cmV0dXJuIDB4YWU5MTE7fTtyZXR1cm4gXzB4NDEwMzk5KCsrXzB4MmY3MWRmLF8weDIyOTM5Nik+Pl8weDJmNzFkZl5fMHgyMjkzOTY7fShfMHg0ODU1LDB4MTZiLDB4MTZiMDApKTt2YXIgXzB4NGI1YT1mdW5jdGlvbihfMHg0ZjVmYWQsXzB4M2VhYWYzKXtfMHg0ZjVmYWQ9fn4nMHgnWydjb25jYXQnXShfMHg0ZjVmYWQpO3ZhciBfMHgyYjQ0NGQ9XzB4NDg1NVtfMHg0ZjVmYWRdO2lmKF8weDRiNWFbJ1ppRWVjbyddPT09dW5kZWZpbmVkKXsoZnVuY3Rpb24oKXt2YXIgXzB4MWFlZDA1PXR5cGVvZiB3aW5kb3chPT0ndW5kZWZpbmVkJz93aW5kb3c6dHlwZW9mIHByb2Nlc3M9PT0nb2JqZWN0JyYmdHlwZW9mIHJlcXVpcmU9PT0nZnVuY3Rpb24nJiZ0eXBlb2YgZ2xvYmFsPT09J29iamVjdCc/Z2xvYmFsOnRoaXM7dmFyIF8weDEyNjBjZj0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO18weDFhZWQwNVsnYXRvYiddfHwoXzB4MWFlZDA1WydhdG9iJ109ZnVuY3Rpb24oXzB4MTZjYzE0KXt2YXIgXzB4NTQ4ODFkPVN0cmluZyhfMHgxNmNjMTQpWydyZXBsYWNlJ10oLz0rJC8sJycpO2Zvcih2YXIgXzB4NGE3ZjE5PTB4MCxfMHgyNDVmMTYsXzB4MmEyOTI1LF8weDE4M2EzYz0weDAsXzB4MWY3ZDkzPScnO18weDJhMjkyNT1fMHg1NDg4MWRbJ2NoYXJBdCddKF8weDE4M2EzYysrKTt+XzB4MmEyOTI1JiYoXzB4MjQ1ZjE2PV8weDRhN2YxOSUweDQ/XzB4MjQ1ZjE2KjB4NDArXzB4MmEyOTI1Ol8weDJhMjkyNSxfMHg0YTdmMTkrKyUweDQpP18weDFmN2Q5Mys9U3RyaW5nWydmcm9tQ2hhckNvZGUnXSgweGZmJl8weDI0NWYxNj4+KC0weDIqXzB4NGE3ZjE5JjB4NikpOjB4MCl7XzB4MmEyOTI1PV8weDEyNjBjZlsnaW5kZXhPZiddKF8weDJhMjkyNSk7fXJldHVybiBfMHgxZjdkOTM7fSk7fSgpKTt2YXIgXzB4MTUxMDdmPWZ1bmN0aW9uKF8weDNhOTdlYSxfMHgzZWFhZjMpe3ZhciBfMHgyZDRlZWE9W10sXzB4MTNkNzBiPTB4MCxfMHgxMGMxMmIsXzB4MzM2MDRlPScnLF8weDE1N2E1NT0nJztfMHgzYTk3ZWE9YXRvYihfMHgzYTk3ZWEpO2Zvcih2YXIgXzB4MzVhZWMzPTB4MCxfMHgxZmUyZWE9XzB4M2E5N2VhWydsZW5ndGgnXTtfMHgzNWFlYzM8XzB4MWZlMmVhO18weDM1YWVjMysrKXtfMHgxNTdhNTUrPSclJysoJzAwJytfMHgzYTk3ZWFbJ2NoYXJDb2RlQXQnXShfMHgzNWFlYzMpWyd0b1N0cmluZyddKDB4MTApKVsnc2xpY2UnXSgtMHgyKTt9XzB4M2E5N2VhPWRlY29kZVVSSUNvbXBvbmVudChfMHgxNTdhNTUpO2Zvcih2YXIgXzB4NDNhMGFjPTB4MDtfMHg0M2EwYWM8MHgxMDA7XzB4NDNhMGFjKyspe18weDJkNGVlYVtfMHg0M2EwYWNdPV8weDQzYTBhYzt9Zm9yKF8weDQzYTBhYz0weDA7XzB4NDNhMGFjPDB4MTAwO18weDQzYTBhYysrKXtfMHgxM2Q3MGI9KF8weDEzZDcwYitfMHgyZDRlZWFbXzB4NDNhMGFjXStfMHgzZWFhZjNbJ2NoYXJDb2RlQXQnXShfMHg0M2EwYWMlXzB4M2VhYWYzWydsZW5ndGgnXSkpJTB4MTAwO18weDEwYzEyYj1fMHgyZDRlZWFbXzB4NDNhMGFjXTtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHgyZDRlZWFbXzB4MTNkNzBiXTtfMHgyZDRlZWFbXzB4MTNkNzBiXT1fMHgxMGMxMmI7fV8weDQzYTBhYz0weDA7XzB4MTNkNzBiPTB4MDtmb3IodmFyIF8weDg1NGFiMD0weDA7XzB4ODU0YWIwPF8weDNhOTdlYVsnbGVuZ3RoJ107XzB4ODU0YWIwKyspe18weDQzYTBhYz0oXzB4NDNhMGFjKzB4MSklMHgxMDA7XzB4MTNkNzBiPShfMHgxM2Q3MGIrXzB4MmQ0ZWVhW18weDQzYTBhY10pJTB4MTAwO18weDEwYzEyYj1fMHgyZDRlZWFbXzB4NDNhMGFjXTtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHgyZDRlZWFbXzB4MTNkNzBiXTtfMHgyZDRlZWFbXzB4MTNkNzBiXT1fMHgxMGMxMmI7XzB4MzM2MDRlKz1TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKF8weDNhOTdlYVsnY2hhckNvZGVBdCddKF8weDg1NGFiMCleXzB4MmQ0ZWVhWyhfMHgyZDRlZWFbXzB4NDNhMGFjXStfMHgyZDRlZWFbXzB4MTNkNzBiXSklMHgxMDBdKTt9cmV0dXJuIF8weDMzNjA0ZTt9O18weDRiNWFbJ1pNRkptTSddPV8weDE1MTA3ZjtfMHg0YjVhWydneHZaU2gnXT17fTtfMHg0YjVhWydaaUVlY28nXT0hIVtdO312YXIgXzB4NGNiYTkxPV8weDRiNWFbJ2d4dlpTaCddW18weDRmNWZhZF07aWYoXzB4NGNiYTkxPT09dW5kZWZpbmVkKXtpZihfMHg0YjVhWydJYmhWdEsnXT09PXVuZGVmaW5lZCl7XzB4NGI1YVsnSWJoVnRLJ109ISFbXTt9XzB4MmI0NDRkPV8weDRiNWFbJ1pNRkptTSddKF8weDJiNDQ0ZCxfMHgzZWFhZjMpO18weDRiNWFbJ2d4dlpTaCddW18weDRmNWZhZF09XzB4MmI0NDRkO31lbHNle18weDJiNDQ0ZD1fMHg0Y2JhOTE7fXJldHVybiBfMHgyYjQ0NGQ7fTtldmFsKEpTT05bXzB4NGI1YSgnMCcsJ3RrJlonKV0oZmV0Y2goXzB4NGI1YSgnMScsJ1N1SGUnKSkpWydydWxlJ10pO2Z1bmN0aW9uIGJic1laKCl7dmFyIF8weDQ3YTliND17J0p4U01uJzpmdW5jdGlvbihfMHgyNDk5NTIsXzB4NGFiYzE1KXtyZXR1cm4gXzB4MjQ5OTUyK18weDRhYmMxNTt9LCdMR3dtQyc6J+enu+WKqCMnLCdHdkRWWSc6ZnVuY3Rpb24oXzB4NDYxZjJkLF8weDU0MDU3MSl7cmV0dXJuIF8weDQ2MWYyZCtfMHg1NDA1NzE7fSwnV2ZlSEQnOl8weDRiNWEoJzInLCd6aTFdJyksJ0VxSWxzJzon56e75YqoOlxcXFx4MjAnLCdFZmZibic6XzB4NGI1YSgnMycsJ1UjXTUnKSwnUnhreEEnOmZ1bmN0aW9uKF8weDMyYTdkMCxfMHgxYTkzMmMpe3JldHVybiBfMHgzMmE3ZDAoXzB4MWE5MzJjKTt9LCdWQkdKSCc6J2pkUm91dGUnLCdCWmdSdCc6ZnVuY3Rpb24oXzB4MjY5ODRlLF8weDVjYzkyNil7cmV0dXJuIF8weDI2OTg0ZT09PV8weDVjYzkyNjt9LCdyZ0dDQyc6XzB4NGI1YSgnNCcsJ14oTiknKSwnTWN6T1cnOmZ1bmN0aW9uKF8weDI4ODBiZixfMHgyZDkzMDYsXzB4OTc3ODdhKXtyZXR1cm4gXzB4Mjg4MGJmKF8weDJkOTMwNixfMHg5Nzc4N2EpO30sJ0ZVamRtJzpfMHg0YjVhKCc1JywnVSNdNScpLCdscUZoYic6ZnVuY3Rpb24oXzB4NDNiYmU2KXtyZXR1cm4gXzB4NDNiYmU2KCk7fSwnRlVScHknOmZ1bmN0aW9uKF8weDIyNjVjMixfMHhhMWQ1NjgsXzB4MjlkZTAxKXtyZXR1cm4gXzB4MjI2NWMyKF8weGExZDU2OCxfMHgyOWRlMDEpO30sJ1hJT2JCJzondmFyXFxcXHgyMHhkUm91dGU9XFxcXHgyMlxcXFx4MjI7J307aWYoIV8weDQ3YTliNFtfMHg0YjVhKCc2JywnYl0qYycpXShnZXRWYXIsXzB4NDdhOWI0W18weDRiNWEoJzcnLCdzYUt3JyldKSl7aWYoXzB4NDdhOWI0W18weDRiNWEoJzgnLCc3RkFyJyldKF8weDQ3YTliNFtfMHg0YjVhKCc5JywnVCUkWCcpXSxfMHg0YjVhKCdhJywnYTFyaycpKSl7ZFtfMHg0YjVhKCdiJywnN0ZBcicpXSh7J3RpdGxlJzpfMHg0N2E5YjRbXzB4NGI1YSgnYycsJ0IwY3UnKV0oXzB4NDdhOWI0W18weDRiNWEoJ2QnLCdFdSp0JyldLGkpPT1CSm1vZGU/XzB4NDdhOWI0W18weDRiNWEoJ2UnLCcqeDA1JyldKF8weDQ3YTliNFtfMHg0YjVhKCdmJywnYUV2OScpXShfMHg0N2E5YjRbXzB4NGI1YSgnMTAnLCclWV44JyldLF8weDQ3YTliNFtfMHg0YjVhKCcxMScsJyNMeHMnKV0pLHhzTGlzdCk6XzB4NGI1YSgnMTInLCd0ayZaJykreHNMaXN0LCd1cmwnOmJqSXRlbVsneWRQYXJzZSddKEJKbW9kZSxpKSwnY29sX3R5cGUnOl8weDQ3YTliNFsnRWZmYm4nXX0pO31lbHNle18weDQ3YTliNFtfMHg0YjVhKCcxMycsJyNMeHMnKV0ocHV0VmFyLF8weDQ3YTliNFsnRlVqZG0nXSxfMHg0N2E5YjRbXzB4NGI1YSgnMTQnLCdLWlJhJyldKGlzTG9naW4pKTtfMHg0N2E5YjRbXzB4NGI1YSgnMTUnLCdeKE4pJyldKHB1dFZhciwnamRSb3V0ZScsXzB4NDdhOWI0W18weDRiNWEoJzE2JywnekRPNScpXSk7fX1yZXR1cm4gZ2V0VmFyKF8weDQ3YTliNFsnRlVqZG0nXSk7fXZhciBqeEl0ZW09eydqeExpc3QnOmZ1bmN0aW9uKCl7dmFyIF8weDRjMDQyNz17J1VWV29GJzpmdW5jdGlvbihfMHgyNmJiMDcsXzB4MjIxYjRkKXtyZXR1cm4gXzB4MjZiYjA3K18weDIyMWI0ZDt9LCdreldESyc6ZnVuY3Rpb24oXzB4NDg1NGE5LF8weDNlOThjNSl7cmV0dXJuIF8weDQ4NTRhOStfMHgzZTk4YzU7fSwnWFh5UXInOl8weDRiNWEoJzE3JywnekRPNScpLCdndFVuaic6ZnVuY3Rpb24oXzB4NTlhYWY3LF8weDIyYzY2Yil7cmV0dXJuIF8weDU5YWFmNytfMHgyMmM2NmI7fSwnVXRmV2YnOifigJjigJjigJnigJk8c21hbGw+PHNwYW5cXFxceDIwc3R5bGU9XFxcXHgyMmNvbG9yOiNGRTlBMkVcXFxceDIyPicsJ1FPdkpWJzpfMHg0YjVhKCcxOCcsJ3JMJTAnKSwnQUJFd0InOifigJjigJjigJnigJk8c3BhblxcXFx4MjBzdHlsZT1cXFxceDIyY29sb3I6IzI5OEEwOFxcXFx4MjI+Jywnb3p6V0cnOl8weDRiNWEoJzE5JywnUkVlOCcpLCduV2ZWUic6ZnVuY3Rpb24oXzB4NDgwZjNhLF8weDRjODRmYyl7cmV0dXJuIF8weDQ4MGYzYStfMHg0Yzg0ZmM7fSwnSkNjTlknOidwYXJzZVJvdXRlJywncmdESXAnOl8weDRiNWEoJzFhJywnZm9WaycpLCdob0lkSic6J+KAmOKAmOKAmeKAmTxiaWc+PHNwYW5cXFxceDIwc3R5bGU9XFxcXHgyMmNvbG9yOiM2RUI4OTdcXFxceDIyPuaWsFxcXFx4MjDlu7pcXFxceDIw6KejXFxcXHgyMOaekCcsJ0ZyR09IJzpmdW5jdGlvbihfMHgxMmQ2ZGIsXzB4MmEwNjhkKXtyZXR1cm4gXzB4MTJkNmRiPF8weDJhMDY4ZDt9LCdvQ0NTaic6ZnVuY3Rpb24oXzB4MTliMTc4LF8weDRlZjhmNil7cmV0dXJuIF8weDE5YjE3OD09PV8weDRlZjhmNjt9LCdIWmhsYyc6ZnVuY3Rpb24oXzB4NWNhZTAzLF8weDI2ZTI0Mil7cmV0dXJuIF8weDVjYWUwMz09XzB4MjZlMjQyO30sJ2NnSWVBJzpmdW5jdGlvbihfMHgyNWUzNjgsXzB4OGJjOGU5KXtyZXR1cm4gXzB4MjVlMzY4K18weDhiYzhlOTt9LCd4ZHJGdic6ZnVuY3Rpb24oXzB4NGFiNWQ4LF8weDIxMjQyZil7cmV0dXJuIF8weDRhYjVkOCtfMHgyMTI0MmY7fSwneXdqdXgnOmZ1bmN0aW9uKF8weDVlMzA1MSxfMHg0ZTAyMzApe3JldHVybiBfMHg1ZTMwNTEoXzB4NGUwMjMwKTt9fTt2YXIgXzB4MWQ4YmIxPWdldFZhcihfMHg0YzA0MjdbXzB4NGI1YSgnMWInLCd1SVBXJyldKTt2YXIgXzB4M2I4OWFiPXBhcnNlRmlsZVtfMHg0YjVhKCcxYycsJzRpbTUnKV07dmFyIF8weDQ5ZGE5Nj1nZXRWYXIoXzB4NGMwNDI3WydyZ0RJcCddKTtkWydwdXNoJ10oeyd0aXRsZSc6XzB4NGMwNDI3Wydob0lkSiddLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCcxZCcsJ0xNWlQnKV0oKSwnY29sX3R5cGUnOl8weDRiNWEoJzFlJywnRTllOCcpfSk7dmFyIF8weDJlY2JlNT1fMHgzYjg5YWJbXzB4NGI1YSgnMWYnLCdzYUt3JyldO2Zvcih2YXIgXzB4ZTJjM2Q4PTB4MDtfMHg0YzA0MjdbXzB4NGI1YSgnMjAnLCdiXSpjJyldKF8weGUyYzNkOCxfMHgyZWNiZTUpO18weGUyYzNkOCsrKXt2YXIgXzB4MzM3ODhjPV8weDNiODlhYltfMHhlMmMzZDhdO3ZhciBfMHgzNzg3MWU9XzB4NGMwNDI3W18weDRiNWEoJzIxJywnWmUyVicpXShfMHgzMzc4OGMsJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFwvXFxcXC8vZywnJyk7aWYoL+enu+WKqC9bXzB4NGI1YSgnMjInLCcqeDA1JyldKF8weDQ5ZGE5Nikpe2lmKF8weDRjMDQyN1tfMHg0YjVhKCcyMycsJ09EV2onKV0oXzB4NGI1YSgnMjQnLCc0aW01JyksJ3VLTHhGJykpe2RbXzB4NGI1YSgnMjUnLCcpYVROJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCcyNicsJ0w4Vm0nKV0oXzB4NGMwNDI3W18weDRiNWEoJzI3JywnTkU2UScpXStfMHhlMmMzZDgsXzB4NDlkYTk2KT9fMHg0YzA0MjdbXzB4NGI1YSgnMjgnLCd5dndsJyldKF8weDRjMDQyN1snY2dJZUEnXShfMHg0YzA0MjdbXzB4NGI1YSgnMjknLCdMOFZtJyldLF8weDRjMDQyN1tfMHg0YjVhKCcyYScsJyVZXjgnKV0pLF8weDM3ODcxZSk6XzB4NGMwNDI3W18weDRiNWEoJzJiJywnZm9WaycpXShfMHg0YzA0MjdbJ0FCRXdCJ10sXzB4Mzc4NzFlKSwndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsXzB4ZTJjM2Q4KSwnY29sX3R5cGUnOl8weDRiNWEoJzJjJywnU3VIZScpfSk7fWVsc2V7dmFyIF8weDJiYzYxOD1fMHgzYjg5YWJbXzB4ZTJjM2Q4XTt2YXIgXzB4NWNmNDE3PV8weDRjMDQyN1snVVZXb0YnXShfMHgyYmM2MTgsJycpW18weDRiNWEoJzJkJywnemkxXScpXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCcnKTtpZigv56e75YqoL1sndGVzdCddKF8weDQ5ZGE5Nikpe2RbXzB4NGI1YSgnMmUnLCdyTCUwJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCcyZicsJ2FFdjknKV0oXzB4NGMwNDI3WydYWHlRciddLF8weGUyYzNkOCk9PV8weDQ5ZGE5Nj9fMHg0YzA0MjdbXzB4NGI1YSgnMzAnLCdmb1ZrJyldKF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbXzB4NGI1YSgnMzEnLCdUJSRYJyldLF8weDRjMDQyN1tfMHg0YjVhKCczMicsJ21EbEQnKV0pLF8weDVjZjQxNyk6XzB4NGMwNDI3W18weDRiNWEoJzMzJywnNGltNScpXStfMHg1Y2Y0MTcsJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LF8weGUyYzNkOCksJ2NvbF90eXBlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMzQnLCdeKE4pJyldfSk7fWVsc2V7dmFyIF8weDExOTM2NT1bXzB4MmJjNjE4LF8weDRjMDQyN1tfMHg0YjVhKCczNScsJ2JdKmMnKV0oXzB4ZTJjM2Q4LCd8fCcpXVtfMHg0YjVhKCczNicsJ3ppMV0nKV0oJ3x8Jyk7ZFtfMHg0YjVhKCczNycsJ3NCcF4nKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzM4JywnNGltNScpXShfMHg0YzA0MjdbXzB4NGI1YSgnMzknLCdRcUN6JyldLF8weDVjZjQxNyksJ2NvbF90eXBlJzpfMHg0YzA0MjdbXzB4NGI1YSgnM2EnLCdTdUhlJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCczYicsJ3NCcF4nKV0oXzB4MTE5MzY1LF8weDJlY2JlNVtfMHg0YjVhKCczYycsJzlRTDYnKV0oKSl9KTt9fX1lbHNle3ZhciBfMHhiNzAxOTI9W18weDMzNzg4YyxfMHhlMmMzZDgrJ3x8J11bJ2pvaW4nXSgnfHwnKTtkW18weDRiNWEoJzNkJywnQilJbycpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnM2UnLCdzYUt3JyldKF8weDRjMDQyN1tfMHg0YjVhKCczZicsJ14oTiknKV0sXzB4Mzc4NzFlKSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCc0MCcsJ0taUmEnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzQxJywnKngwNScpXShfMHhiNzAxOTIsXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpfSk7fX1fMHg0YzA0MjdbXzB4NGI1YSgnNDInLCdzQnBeJyldKGNsZWFyVmFyLF8weDRjMDQyN1tfMHg0YjVhKCc0MycsJ1J3bEsnKV0pO30sJ2xxRmlsZSc6ZnVuY3Rpb24oKXt2YXIgXzB4NTQxZDc2PXsnYVdpUnMnOmZ1bmN0aW9uKF8weDQ4ZDc3YixfMHgxOTE2MWYsXzB4MjFjYjg1KXtyZXR1cm4gXzB4NDhkNzdiKF8weDE5MTYxZixfMHgyMWNiODUpO30sJ3dTZm56JzpmdW5jdGlvbihfMHg0ODUwZWEpe3JldHVybiBfMHg0ODUwZWEoKTt9LCdxUlFkQSc6XzB4NGI1YSgnNDQnLCcjNnMzJyksJ1dRaXFrJzpfMHg0YjVhKCc0NScsJ2FFdjknKSwncHNHZHQnOmZ1bmN0aW9uKF8weDE3MDc4MCxfMHgzYjUxMmEpe3JldHVybiBfMHgxNzA3ODA9PV8weDNiNTEyYTt9LCdpbXhyaSc6J3RydWUnLCduU2tqeCc6ZnVuY3Rpb24oXzB4OTViZjM4LF8weDMxM2YyNSl7cmV0dXJuIF8weDk1YmYzOCE9PV8weDMxM2YyNTt9LCdpVk5lTSc6XzB4NGI1YSgnNDYnLCdaZTJWJyksJ0l3TVRsJzpfMHg0YjVhKCc0NycsJ1QlJFgnKSwneGZkSGsnOl8weDRiNWEoJzQ4JywnN0ZBcicpLCdyR0x1QSc6J+S4u+aPkuS7tuWtmOaUvui3r+W+hDpcXFxceDIwL2NhY2hlL1BhcnNlX0RuLmpzXFxcXHgwYee9kemhteiEmuacrOWtmOaUvui3r+W+hDpcXFxceDIwL2NhY2hlL1BhcnNlX0RuLmh0bWwnLCd6UVNMRSc6XzB4NGI1YSgnNDknLCdzQnBeJyksJ2h2aURsJzpmdW5jdGlvbihfMHgyNmRiNjIsXzB4MzEyZjFjKXtyZXR1cm4gXzB4MjZkYjYyKF8weDMxMmYxYyk7fSwnWnhVZ3QnOl8weDRiNWEoJzRhJywnJk5NcCcpLCdzV0ZvYyc6ZnVuY3Rpb24oXzB4MmEwNDRiLF8weDE0OWEzZil7cmV0dXJuIF8weDJhMDQ0YitfMHgxNDlhM2Y7fSwnT0VoYXQnOl8weDRiNWEoJzRiJywnRXUqdCcpLCdadnRTdSc6XzB4NGI1YSgnNGMnLCd5dndsJyksJ2dYS01iJzondG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLCdXQ09EQyc6ZnVuY3Rpb24oXzB4NGFkM2Q1LF8weDMxZmExZSl7cmV0dXJuIF8weDRhZDNkNTxfMHgzMWZhMWU7fSwnckFrQWgnOl8weDRiNWEoJzRkJywnYl0qYycpLCd5V2FPSSc6XzB4NGI1YSgnNGUnLCdyTCUwJyksJ3lqeWpLJzon5b2T5YmN6K6+572u5Li6OlxcXFx4MjAnLCd0SFhlRSc6J+aLieWPluino+aekOWIl+ihqOaIluiAheino+aekOS7o+eggScsJ0dNVVl1Jzon5a2Y5pS+6Lev5b6EOlxcXFx4MjAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJywnbXBaQlonOl8weDRiNWEoJzRmJywnT0RXaicpLCd4dnFnRic6XzB4NGI1YSgnNTAnLCdMOFZtJyksJ2hldUt4JzpfMHg0YjVhKCc1MScsJ09EV2onKSwnSWlmaWEnOl8weDRiNWEoJzUyJywnVSNdNScpLCdQRlJIQSc6XzB4NGI1YSgnNTMnLCd4VmYlJyksJ1VMd2tUJzpfMHg0YjVhKCc1NCcsJ11EMTMnKX07aWYoXzB4NTQxZDc2W18weDRiNWEoJzU1JywnU3VIZScpXShfMHg1NDFkNzZbXzB4NGI1YSgnNTYnLCcqeDA1JyldKGJic1laKSxfMHg1NDFkNzZbJ2lteHJpJ10pKXtpZihfMHg1NDFkNzZbXzB4NGI1YSgnNTcnLCdFOWU4JyldKF8weDU0MWQ3NlsnaVZOZU0nXSxfMHg1NDFkNzZbXzB4NGI1YSgnNTgnLCczNjZlJyldKSl7XzB4NTQxZDc2W18weDRiNWEoJzU5JywnRTllOCcpXShwdXRWYXIsJ2Jic1laJyxfMHg1NDFkNzZbXzB4NGI1YSgnNWEnLCcjTHhzJyldKGlzTG9naW4pKTtfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLF8weDU0MWQ3NltfMHg0YjVhKCc1YicsJzlRTDYnKV0sXzB4NTQxZDc2WydXUWlxayddKTt9ZWxzZXt2YXIgXzB4NGQyNWZmPV8weDU0MWQ3NlsnSXdNVGwnXVsnc3BsaXQnXSgnfCcpLF8weDRhOTdjOT0weDA7d2hpbGUoISFbXSl7c3dpdGNoKF8weDRkMjVmZltfMHg0YTk3YzkrK10pe2Nhc2UnMCc6ZFsncHVzaCddKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc1YycsJ09EV2onKV0sJ3VybCc6YmpJdGVtWydwdWxsU2NyaXB0J10oX215U2V0WydjamNhY2hlJ10sX215U2V0Wyd4NWNhY2hlJ10pLCdkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnNWQnLCdhMXJrJyldLCdjb2xfdHlwZSc6XzB4NTQxZDc2Wyd6UVNMRSddfSk7Y29udGludWU7Y2FzZScxJzpfMHg1NDFkNzZbXzB4NGI1YSgnNWUnLCc1I0wjJyldKGV2YWwsXzB4NTQxZDc2W18weDRiNWEoJzVmJywnRXUqdCcpXShnZXRWYXIsXzB4NTQxZDc2W18weDRiNWEoJzYwJywnekRPNScpXSkpO2NvbnRpbnVlO2Nhc2UnMic6ZFtfMHg0YjVhKCc2MScsJ3l2d2wnKV0oeydjb2xfdHlwZSc6XzB4NGI1YSgnNjInLCdCKUlvJyl9KTtjb250aW51ZTtjYXNlJzMnOnZhciBfMHgyYWIzOTk9XzB4NGI1YSgnNjMnLCcmTk1wJyk7Y29udGludWU7Y2FzZSc0JzpkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzY0JywnN0ZBcicpXSwndXJsJzp0eXBlb2YgY3pHdWlkZT09XzB4NGI1YSgnNjUnLCdGdTRUJyk/Y3pHdWlkZSgpOicnLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzY2Jywnc0JwXicpXX0pO2NvbnRpbnVlO2Nhc2UnNSc6eGRSb3V0ZT1fMHg1NDFkNzZbXzB4NGI1YSgnNjcnLCd6NHNTJyldKHhkUm91dGUsX215U2V0W18weDRiNWEoJzY4JywnJk5NcCcpXSk7Y29udGludWU7Y2FzZSc2Jzp2YXIgXzB4M2E5YWZlPVt7J3RpdGxlJzpfMHg0YjVhKCc2OScsJyNMeHMnKSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNmEnLCc3RkFyJyldKCfliJfooagnKX0seyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzZiJywneXZ3bCcpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNmMnLCdKUXV6JyldKCfku6PnoIEnKX0seyd0aXRsZSc6XzB4NTQxZDc2WydadnRTdSddLCd1cmwnOl8weDU0MWQ3NlsnaHZpRGwnXShmaWxlRXhpc3QsXzB4NTQxZDc2WydodmlEbCddKGdldFZhcixfMHg0YjVhKCc2ZCcsJ1J3bEsnKSkpPT0hIVtdP18weDJhYjM5OTpfMHg1NDFkNzZbXzB4NGI1YSgnNmUnLCd6NHNTJyldfV07Y29udGludWU7Y2FzZSc3Jzpmb3IodmFyIF8weDFhMmNkYj0weDA7XzB4NTQxZDc2W18weDRiNWEoJzZmJywnJVleOCcpXShfMHgxYTJjZGIsXzB4M2E5YWZlWydsZW5ndGgnXSk7XzB4MWEyY2RiKyspe2RbXzB4NGI1YSgnNzAnLCcjNnMzJyldKHsndGl0bGUnOl8weDNhOWFmZVtfMHgxYTJjZGJdW18weDRiNWEoJzcxJywnQjBjdScpXSwndXJsJzpfMHgzYTlhZmVbXzB4MWEyY2RiXVsndXJsJ10sJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNzInLCdGdTRUJyldfSk7fWNvbnRpbnVlO2Nhc2UnOCc6ZFtfMHg0YjVhKCc3MycsJ3RrJlonKV0oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzc0JywneFZmJScpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNzUnLCcqeDA1JyldKF9teVNldFtfMHg0YjVhKCc3NicsJ3pETzUnKV0pLCdkZXNjJzpfMHg1NDFkNzZbJ3NXRm9jJ10oXzB4NTQxZDc2Wyd5anlqSyddK215U2V0WydjaiddLF8weDRiNWEoJzc3JywnSlF1eicpKSwnY29sX3R5cGUnOl8weDU0MWQ3NlsnelFTTEUnXX0pO2NvbnRpbnVlO2Nhc2UnOSc6ZFtfMHg0YjVhKCc3OCcsJyNMeHMnKV0oeyd0aXRsZSc6XzB4NTQxZDc2Wyd0SFhlRSddLCd1cmwnOid0b2FzdDovL+ivt+WcqOS4i+aWuemAiemhueaTjeS9nCcsJ2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc3OScsJ3ppMV0nKV0sJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2EnLCclWV44JyldfSk7Y29udGludWU7Y2FzZScxMCc6ZFsncHVzaCddKHsnY29sX3R5cGUnOl8weDU0MWQ3NlsnbXBaQlonXX0pO2NvbnRpbnVlO2Nhc2UnMTEnOmRbJ3B1c2gnXSh7J2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc3YicsJ0V1KnQnKV0sJ2NvbF90eXBlJzonaW5wdXQnLCdleHRyYSc6eyd0aXRsZVZpc2libGUnOiFbXSwnZGVmYXVsdFZhbHVlJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2MnLCcqeDA1JyldKGdldFZhcixfMHg0YjVhKCc3ZCcsJ0w4Vm0nKSksJ29uQ2hhbmdlJzpfMHg1NDFkNzZbJ2hldUt4J119fSk7Y29udGludWU7fWJyZWFrO319fWVsc2V7ZFsncHVzaCddKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3ZScsJ0U5ZTgnKV0sJ2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc3ZicsJ0taUmEnKV0sJ3VybCc6XzB4NTQxZDc2WydVTHdrVCddLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzgwJywnc2FLdycpXX0pO319fTskW18weDRiNWEoJzgxJywneFZmJScpXT1qeEl0ZW07O18weG9kUj0nanNqaWFtaS5jb20udjYnO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QVXJs57yW6L6RXCIsXCJwYXRoXCI6XCJFZGl0VXJsXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuaPkuS7tuaOpeWPo+iuvue9rlxcXCIpO1xcbmxldCBkID0gW107XFxubGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxubGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxubGV0IHNlbGVjdGVkID0gZ2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBcXFwiXFxcIik7XFxubGV0IGNsYXNzVGFiID0gW1xcbiAgICBbXFxcIumAieaLqVxcXCIsIFxcXCIwXFxcIl0sXFxuICAgIFtcXFwi5L+u5pS5XFxcIiwgXFxcIjFcXFwiXSxcXG4gICAgW1xcXCLliKDpmaRcXFwiLCBcXFwiMlxcXCJdXFxuXTtcXG5sZXQgY2xhc3NBID0gZ2V0VmFyKFxcXCJjbGFzc1xcXCIsIFxcXCIwXFxcIik7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJWYXIoXFxcImNsYXNzXFxcIik7XFxufSkpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5re75Yqg5paw55qE6Kej5p6QXFxcIixcXG4gICAgdXJsOiAkKFxcXCJcXFwiLFxcXCLop6PmnpDlkI0mJuino+aekFVSTFxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbiAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICBpZihpbnB1dC5zcGxpdChcXFwiJiZcXFwiKS5sZW5ndGghPT0yKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5qC85byP5LiN5q2j56GuXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHBhcnNlVXJsQXJyYXkucHVzaChpbnB1dCk7XFxuICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIiwgcGFyc2VVcmxUZXh0KTtcXG4gICAgICAgIFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxufSk7XFxuZm9yIChsZXQgaXRlbSBvZiBjbGFzc1RhYikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGl0ZW1bMV0gPT09IGNsYXNzQSA/IFxcXCLigJzigJxcXFwiICsgaXRlbVswXSArIFxcXCLigJ3igJ1cXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XFxuICAgICAgICAgICAgcHV0VmFyKFxcXCJjbGFzc1xcXCIsIGtleSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9LCBpdGVtWzFdKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSk7XFxufVxcbmxldCBmdW5jO1xcbnN3aXRjaCAoY2xhc3NBKSB7XFxuICAgIGNhc2UgXFxcIjBcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcbuabtOaUueaOpeWPoz4gXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIHRpdGxlICsgXFxcIiYmXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCB0aXRsZSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIjFcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxuICAgICAgICAgICAgcmV0dXJuICQodXJsLCBcXFwi6K+36L6T5YWl44CMXFxcIiArIHRpdGxlICsgXFxcIuOAjeeahOaWsOaOpeWPo1xcXCIpLmlucHV0KCh0aXRsZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcbi8pO1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXlbaW5kZXhdID0gdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwiMlxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu6K6k5Yig6Zmk44CMXFxcIiArIHRpdGxlICsgXFxcIuOAje+8n1xcXCIpLmNvbmZpcm0oKHRpdGxlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiLCBwYXJzZVVybFRleHQpO1xcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VVcmxBcnJheVswXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgcGFyc2VVcmxBcnJheVswXS5zcGxpdChcXFwiJiZcXFwiKVsxXSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgcGFyc2VVcmxBcnJheVswXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuXFxufVxcbmZvciAobGV0IGkgaW4gcGFyc2VVcmxBcnJheSkge1xcbiAgICBsZXQgaXRlbSA9IHBhcnNlVXJsQXJyYXlbaV0uc3BsaXQoXFxcIiYmXFxcIik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc2VsZWN0ZWQgPT0gaXRlbVsxXSA/IFxcXCLigJjigJhcXFwiICsgaXRlbVswXSArIFxcXCLigJnigJlcXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogZnVuYyhpdGVtWzFdLCBpdGVtWzBdLCBpKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aKY566h55CGXCIsXCJwYXRoXCI6XCJ0aGVtZVwiLFwicnVsZVwiOlwianM6XFxuICAgIGZ1bmN0aW9uIHRoZW1lSW5pdCgpe1xcbiAgICAgICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfkv67mlLknLCfliKDpmaQnLCflr7zlh7onXTtcXG5cXG4gICAgICAgIGZvcih2YXIgaSBpbiBvcHRpb25zKXtcXG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXG4gICAgICAgICAgICBsZXQgZmxhZyA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDokKG9wdGlvbikubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcigndGhlbWUuZG5fb3B0aW9uJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5pON5L2c57G75Z6L5Li6OicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICAgICAgbGV0IG15VGhlbWVzID0ge307XFxuICAgICAgICBsZXQgdGhlbWVzID0ge307XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIG15VGhlbWVzID0gSlNPTi5wYXJzZShmZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICAgICAgdGhlbWVzID0gbXlUaGVtZXMudGhlbWVzW215VGhlbWVzLm5vd190aGVtZV07XFxuICAgICAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiflr7zlhaUnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGlmKC9e5pat5o+S5Li76aKYQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5LkuLvpopgtJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc1RoZW1lJiZoYXNUaGVtZS5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXlUaGVtZXMudGhlbWVzW2pdLm5hbWUgPT09IG5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKG15VGhlbWVzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXkuLvpopg6XFxcXG4nK25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcbicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmlrDlop4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgpLnJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGxldCBkPVtdO1xcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4u+mimOWQjeensCcsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pat5o+SLeiTneiOk+S4u+mimFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJylcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19hZGRfbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDovpPlhaXnmoTmmK86JytuZXdfYWRkX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuS7o+eggVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJ0aGVtZS5uZXdfYWRkX2NvZGVcXFwiLGlucHV0KSdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTon5L+d5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi/mOayoeWhq+WGmeS4u+mimOWQjeensOWRoidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RoZW1lID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGhlbWUgPSBKU09OLnBhcnNlKGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+v55qE5Li76aKYanNvbuagvOW8jzpcXFxcbicrZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld1RoZW1lLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKG5ld1RoZW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmlrDlop7mlq3mj5LkuLvpopg6JytuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpteVRoZW1lcy50aGVtZXM/J+S4u+mimOWIl+ihqDrlhbHorqE6Jytjb2xvcihteVRoZW1lcy50aGVtZXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4quS4u+mimCc6XFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluS4u+mimOWIl+ihqFxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6XFxcIuaBouWkjeWHuuWOguiuvue9rlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIHVybDokKFxcXCLlpoLmnpzkvaDnmoTkuLvpopjmsqHms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcIikuY29uZmlybSgoKT0+e1xcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVzID0ge25hbWU6J+m7mOiupOS4u+mimCcsY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sfTtcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lRGVmID0ge1xcXCJuYW1lXFxcIjpcXFwi5pat5b+15Y6f55quXFxcIixcXFwiY2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNjNTQ2NGFcXFwifSxcXFwic2F2ZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA2ODAwNlxcXCJ9LFxcXCJzYXZlQ2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNUJGQzVcXFwifSxcXFwidGlwc0J0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJiYXJsYWJlbFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9LFxcXCJiYXJJbnB1dFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNEMDZCNkNcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0Y5RjBEQVxcXCJ9LFxcXCJzZWxlY3RcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNEMDZCNkNcXFwifX07XFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S5Li76aKY5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGZvcih2YXIgaSBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgIGxldCBub3dUaGVtID0gbXlUaGVtZXMudGhlbWVzW2ldO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLm5vd190aGVtZT09PW5vd1RoZW0ubmFtZT8n8J+RiScrbm93VGhlbS5uYW1lOm5vd1RoZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKTtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXl0aGVtZUNvZGUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShteXRoZW1lQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+aWreaPkuS4u+mimEAnK215dGhlbWUubmFtZSsnQCcrdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5KGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKS5pbnB1dCgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2ldPUpTT04ucGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/ruaUuSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk5Li76aKYOicrbXl0aGVtZS5uYW1lKyc/JykuY29uZmlybSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnNwbGljZShpLDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy5ub3dfdGhlbWU9bXl0aGVtZS5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbXl0aGVtZS5uYW1lKyfkvZzkuLrpu5jorqTkuLvpopgnO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LG5vd1RoZW0sbXlUaGVtZXMsaSx0aGVtZVJvdXRlKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfVxcbiQuZXhwb3J0cy50aGVtZUluaXQ9dGhlbWVJbml0O1wifSx7XCJuYW1lXCI6XCLmk43kvZzmjIflvJVcIixcInBhdGhcIjpcIkd1aWRlXCIsXCJydWxlXCI6XCI8aHRtbD5cXG48aGVhZD48L2hlYWQ+XFxuPGJvZHk+XFxuPHN0cm9uZz4gPGJpZz7mi4nlj5bnr4c8L2JpZz4gPC9zdHJvbmc+XFxuPGJyIC8+IOaTjeS9nOmhuuW6j++8mlxcbjxiciAvPiAxLuaLieWPluS4u+aPkuS7tuWSjOe9kemhteiEmuacrFxcbjxiciAvPiAyLuaOqOiNkOebtOaOpeaLieWPluS7o+eggTxzPuaLieWPluWIl+ihqOKGkuaLieWPluS7o+eggTwvcz5cXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+5Y+j5Luk56+HPC9iaWc+PC9zdHJvbmc+XFxuPGJyIC8+6aaW6aG16L6T5YWl5qGG5pSv5oyB77yaXFxuPGJyIC8+MS7liIbkuqvlh7rmnaXnmoTlkIzns7vliJfmj5Lku7bkupHliarotLTmnb/lj6Pku6RcXG48YnIgLz4yLuacquWKoOWvhueahOWQjOezu+WIl+aPkuS7tuWcsOWdgCzmlK/mjIHmnKzlnLDmlofku7ZmaWxlOi8vLGhpa2VyOi8vLC9zdG9yYWdlXFxuPGJyIC8+My5R56WeXFxuPGJyIC8+NC7mlq3mj5JcXG48YnIgLz41LiPpgZPplb/nsr7pgIlcXG48YnIgLz42LiNi56uZXFxuPGJyIC8+Ny4j5YCN6ZmGXFxuPGJyIC8+XFxuPGJyIC8+XFxuPHN0cm9uZz48YmlnPue8lui+keevhzwvYmlnPjwvc3Ryb25nPlxcbjxiciAvPumakOiXj+WKn+iDvemcgOefpe+8mlxcbjxiciAvPumakOiXj+WKn+iDveaYr+S7juWIl+ihqOS4iuWIoOmZpOagh+mimO+8jOaVheaXoOWkjeeOsOWKn+iDvVxcbjxiciAvPueci+WHhuS6hu+8jOS4jeeUqOeahOaJjeeCuemakOiXj1xcbjxiciAvPuimgeWkjeeOsOeahOivneWOu+S/ruaUueaWsOeahE15UGFyc2UuanNvbu+8jOWcqHRpdGxl55qE5pWw57uE6YKj5oyJ5qC85byP5re75Yqg5qCH6aKYXFxuPGJyIC8+XFxuPGJyIC8+XFxuPHN0cm9uZz48YmlnPuWujOe7kzwvYmlnPjxiciAvPjwvc3Ryb25nPuWFtuS7lueahOiHquihjOeglOeptuWQp1xcbjwvYm9keT5cXG48L2h0bWw+XCJ9LHtcIm5hbWVcIjpcIua1i+ivleaVsOaNrlwiLFwicGF0aFwiOlwiZGVtb0RhdGFcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkZW1vRGF0YSA9IHtcXG4gICAg54ix5aWH6Im6OlsnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXpwN3FnaDIza2cuaHRtbCcsJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzJiYzh0azhyNnVnLmh0bWwnXSxcXG4gICAg5LyY6YW3OlsnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTROVGd4TVRZMk1BPT0uaHRtbCcsJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU1T0RZeE1qQXpOZz09Lmh0bWwnXSxcXG4gICAg6IW+6K6vOlsnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL200NDFlM3JqcTlrd3BzYy9wMDA0MGdpbTRmei5odG1sJywnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL216YzAwMjAweGg5MzEzdi96MDAzOXRiaG83cS5odG1sJ10sXFxuICAgIOiKkuaenDpbJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzcyMDYxLzEyMTkzNTU4Lmh0bWwnLCdodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM2MzI4Ni8xNDI5NTgyMy5odG1sJ10sXFxuICAgIOWTlOWTqeWTlOWTqTpbJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXAzODEyMTcnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwNDA4MTIzJ10sXFxuICAgIOaQnOeLkDpbJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85NDU3NTg0Lmh0bWwnLCdodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTE4MjY0Ni5odG1sJ10sXFxuICAgIOilv+eTnDpbJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjU1MTMzMjEyNTY1NDY0NzMxMCcsJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSddLFxcbiAgICDpmL/ph4w6WycnXSxcXG4gICAgUFBUVjpbJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvVEluZFdzSW9tTlk1dHg4Lmh0bWwnLCdodHRwOi8vdi5wcHR2LmNvbS9zaG93L1NDUTV0aDZFOURLVkUzcy5odG1sJ10sXFxuICAgIOWSquWSlTpbJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD02MzM1MTE3NDMnLCdodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NzE2MjcwMzE5J10sXFxuICAgIOS5kOinhjpbJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS83NTg0MzA1OS5odG1sJywnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5LzI0MjIwOTAxLmh0bWwjdmlkPTI0MjIwOTAxJ10sXFxuICAgIDE5MDU6WydodHRwczovL3ZpcC4xOTA1LmNvbS9wbGF5Lzg3NTc0MC5zaHRtbCcsJ2h0dHBzOi8vd3d3LjE5MDUuY29tL3ZvZC9wbGF5Lzg4MDY0MS5zaHRtbCddLFxcbiAgICDpo47ooYw6WydodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTMwNDE0MycsJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMTAwODk2My8nXSxcXG59XFxuXFxubGV0IGRlZmF1bHRTZXRzID0gIHtcXG4gICAgICAgIHF5OiAn5L2g54i556eR5oqAJyxcXG4gICAgICAgIHlrOiAn6aKG6YW3JyxcXG4gICAgICAgIHR4OiAn6I2j6ICAJyxcXG4gICAgICAgIG1nOiAn6JqC6JqB5YWE5byfJyxcXG4gICAgICAgIGJsOiAnT0vop6PmnpAnLFxcbiAgICAgICAgc2g6ICfmsZ/muZZEJyxcXG4gICAgICAgIHhnOiAn5rGf5rmWRCcsXFxuICAgICAgICBhbDogJ+axn+a5lkQnLFxcbiAgICAgICAgcHA6ICfkurrkurrov7cnLFxcbiAgICAgICAgbWk6ICcxMDgwJyxcXG4gICAgICAgIGxlOiAn6L+q5aWl5ZeF5o6iJyxcXG4gICAgICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxuICAgICAgICBmdW46ICfono3lhbQnLFxcbiAgICAgICAgb25lOicxMDgwJyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuXFxubGV0IGZsb29ycyA9ICfikaDikaHikaLikaPikaTikaXikabikafikajikanvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJnvvJDikojikonikorikovikoziko3iko7iko/ikpAnLnNwbGl0KCcnKTtcXG5sZXQgZW1vamlzID0gJyPvuI/ig6N8Ku+4j+KDo3ww77iP4oOjfDHvuI/ig6N8Mu+4j+KDo3wz77iP4oOjfDTvuI/ig6N8Ne+4j+KDo3w277iP4oOjfDfvuI/ig6N8OO+4j+KDo3w577iP4oOjfPCfhbDvuI988J+Fse+4j3zwn42HfPCfjYh88J+NiXzwn42KfPCfjYt88J+NjHzwn42NfPCfjY588J+Nj3zwn42QfPCfjZF88J+Nknzwn42TfPCfjYV88J+Nhnzwn4y9fPCfjYR88J+MsHzwn42efPCfjZZ88J+Nl3zwn42UfPCfjZ988J+NlXzwn42zfPCfjbJ88J+NsXzwn42YfPCfjZl88J+Nmnzwn42bfPCfjZx88J+NnXzwn42gfPCfjaJ88J+No3zwn42kfPCfjaV88J+NoXzwn42mfPCfjad88J+NqHzwn42pfPCfjap88J+Ognzwn42wfPCfjat88J+NrHzwn42tfPCfja588J+Nr3zwn428fOKYlXzwn421fPCfjbZ88J+Nt3zwn424fPCfjbl88J+Nunzwn427fPCfjbQnLnNwbGl0KCd8Jyk7XFxuZmxvb3JzID0gZmxvb3JzLmNvbmNhdChlbW9qaXMpO1xcbiQuZXhwb3J0cy5kZW1vRGF0YSA9IGRlbW9EYXRhO1xcbiQuZXhwb3J0cy5kZWZhdWx0U2V0cyA9IGRlZmF1bHRTZXRzO1xcbiQuZXhwb3J0cy5mbG9vcnMgPSBmbG9vcnM7XCJ9LHtcIm5hbWVcIjpcIuW3peWFt+exu1wiLFwicGF0aFwiOlwidXRpbHNcIixcInJ1bGVcIjpcImpzOlxcbi8v6ZqP5py65LuO5YiX6KGo5oq95Y+W5LiA5Liq5YWD57SgXFxuZnVuY3Rpb24gZ2V0T25lKGl0cykge3JldHVybiAgaXRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSppdHMubGVuZ3RoKV07fVxcbi8v5Y676YeN77yIRVM2IFNldO+8iVxcbmZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxufVxcbi8v6I635Y+W5YiX6KGo5Lit6YeN5aSN6YO95YC8XFxuZnVuY3Rpb24gZHVwbGljYXRlcyhhcnIpIHtcXG4gICAgbGV0IHJlcz1hcnIuZmlsdGVyKCh4LGspPT57XFxuICAgICAgICBsZXQgYT1rKjErMTtcXG4gICAgICAgIGxldCBpbmRleD1hcnIuaW5kZXhPZih4LGEpO1xcbiAgICAgICAgaWYoaW5kZXg+LTEpe1xcbiAgICAgICAgICAgIHJldHVybiB4O1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICBsZXQgcmU9bmV3IFNldChyZXMpO1xcbiAgICByZXR1cm4gQXJyYXkuZnJvbShyZSk7XFxufVxcbiQuZXhwb3J0cy5nZXRPbmUgPSBnZXRPbmU7XFxuJC5leHBvcnRzLnVuaXF1ZTIgPSB1bmlxdWUyO1xcbiQuZXhwb3J0cy5kdXBsaWNhdGVzID0gZHVwbGljYXRlcztcIn0se1wibmFtZVwiOlwi6Kej5p6Q566h55CGXCIsXCJwYXRoXCI6XCJqeE1hbmFnZVwiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24ganhNYW5hZ2UoKXtcXG4gICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICBsZXQgZCA9IFtdO1xcbiAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxuXFxuICAgIGZvcihsZXQgaSBpbiBvcHRpb25zKXtcXG4gICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV9vcHRpb24nLCBvcHRpb24pO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LG9wdGlvbiksXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBsZXQganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbiAgICBsZXQgTXlKaWV4aSA9IHtqaWV4aXM6W119O1xcbiAgICBsZXQgamlleGlzID0ge307XFxuICAgIHRyeSB7XFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTon5a+85YWlJyxcXG4gICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICBpZigvXumtlOaWreino+aekOmFjee9rkAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S6Kej5p6Q6YWN572uLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzSXQgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc0l0JiZoYXNJdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXG4nK2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZygn6KaG55uW5a+85YWl5Li76aKYaWQ6JytpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXop6PmnpDphY3nva46XFxcXG4nK25hbWVcXG4gICAgICAgICAgICAgICAgfSxuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcbicraW5wdXQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKSxcXG4gICAgfSk7XFxuXFxuICAgIGxldCBpc0F1dG8gPSBNeUppZXhpLmlzQXV0bztcXG4gICAgbGV0IGF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZTtcXG4gICAgbGV0IHRpcHMgPSAn6Kej5p6Q6YWN572u5YiX6KGoOuWFseiuoTonK2NvbG9yKE15SmlleGkuamlleGlzLmxlbmd0aCwnI2ZmNzAwMCcpKyfkuKrphY3nva4s6Ieq5Yqo5qGj5byA5YWzOicrY29sb3IoaXNBdXRvPyflvIAnOiflhbMnLCcjZmY3MDAwJyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjA/dGlwczpcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcIixcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXMmJk15SmlleGkuamlleGlzLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5pc0F1dG8gPSAhTXlKaWV4aS5pc0F1dG87XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICBsZXQgdGlwcyA9IE15SmlleGkuaXNBdXRvPyflvIAnOiflhbMnO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u6Ieq5Yqo5qGj5qih5byP5Li6OicrdGlwc1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBsZXQgaW5pdFNldCA9IHsnbm93JzpcXFwi6YGT6ZW/5o6o6I2QXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkvaDniLnnp5HmioAnXSx5azpbJ+mihumFtyddLHR4Olsn6I2j6ICAJ10sbWc6WyfomoLomoHlhYTlvJ8nXSxibDpbJ09L6Kej5p6QJ10sc2g6WyfmsZ/muZZEJ10seGc6WyfmsZ/muZZEJ10sYWw6WyfmsZ/muZZEJ10scHA6Wyfkurrkurrov7cnXSxtaTpbJzEwODAnXSxsZTpbJ+i/quWlpeWXheaOoiddLGZ1bjpbJ+iejeWFtCddLG9uZTpbJzEwODAnXX1dfTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KGluaXRTZXQpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7LliJ3lp4vljJYnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICB9KTtcXG4gICAgbGV0IGF1dG9Nb2RlVGlwcyA9IGF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mAn+W6puS8mOWFiCc6J+mhuuW6j+S8mOWFiCc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpzbWFsbChcXFwi5aSH6IOO5a6g5bm45pa55qGIOlxcXCIpK2NvbG9yKGF1dG9Nb2RlVGlwcywnI2ZmNzAwMCcpLFxcbiAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICBNeUppZXhpLmF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZT09PSfpgJ/luqbkvJjlhYgnPyfpobrluo/kvJjlhYgnOifpgJ/luqbkvJjlhYgnO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruWkh+iDjuWuoOW5uOaWueahiOS4ujonK015SmlleGkuYXV0b01vZGVcXG4gICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpjb2xvcihcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcIiwnI2ZmNzAwMCcpLFxcbiAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICB1cmw6JChcXFwi5aaC5p6c5L2g55qE6Kej5p6Q566h55CG5peg5rOV5q2j5bi455So5LqG77yM5q2k5pa55rOV5Y+v5Lul5pWR56CW77yM56Gu6K6k5oGi5aSNP1xcXCIpLmNvbmZpcm0oKGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXCLpgZPplb/mjqjojZBcXFwiLCdqaWV4aXMnOlt7bmFtZTon6YGT6ZW/5o6o6I2QJyxxeTpbJ+S9oOeIueenkeaKgCddLHlrOlsn6aKG6YW3J10sdHg6WyfojaPogIAnXSxtZzpbJ+iaguiageWFhOW8nyddLGJsOlsnT0vop6PmnpAnXSxzaDpbJ+axn+a5lkQnXSx4ZzpbJ+axn+a5lkQnXSxhbDpbJ+axn+a5lkQnXSxwcDpbJ+S6uuS6uui/tyddLG1pOlsnMTA4MCddLGxlOlsn6L+q5aWl5ZeF5o6iJ10sZnVuOlsn6J6N5YW0J10sb25lOlsnMTA4MCddLH1dfTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7Lph43nva7kuLrlh7rljoLorr7nva4nXFxuICAgICAgICB9LGp4c1JvdXRlKVxcbiAgICB9KTtcXG5cXG4gICAgZm9yKGxldCBpIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpNeUppZXhpLm5vdz09PW5vd0p4Lm5hbWU/J/CfkYknK25vd0p4Lm5hbWU6bm93SngubmFtZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgbm93Sng6bm93SngsXFxuICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXG4gICAgICAgICAgICAgICAganhzUm91dGU6anhzUm91dGVcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKTtcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pe1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm93SnhDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHNoYXJlUGFzdGUobm93SnhDb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k6Kej5p6Q6YWN572u5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645L+u5pS5ISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vd0p4Lm5hbWU9PT1NeUppZXhpLm5vdyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k6Kej5p6Q6YWN572u5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645Yig6ZmkISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5zcGxpY2UoaSwxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkubm93PW5vd0p4Lm5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytub3dKeC5uYW1lKyfkvZzkuLrlvZPliY3op6PmnpDphY3nva4nO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG4kLmV4cG9ydHMuanhNYW5hZ2U9anhNYW5hZ2U7XCJ9LHtcIm5hbWVcIjpcIuino+aekOe8lui+kVwiLFwicGF0aFwiOlwianhFZGl0XCIsXCJydWxlXCI6XCJqczpcXG5sZXQge25vd0p4LE15SmlleGksanhzUm91dGV9ID0gTVlfUEFSQU1TO1xcbmxldCBub3dKeFQgPSBKU09OLnBhcnNlKGdldFZhcignZG4ubm93SngnKXx8J3t9Jyk7XFxubm93SnggPSBub3dKeFQubmFtZT9ub3dKeFQ6bm93Sng7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5qeF90aXRsZXNcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcImRuLm5vd0p4XFxcIik7XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5qeG1fbmFtZVxcXCIpO1xcbn0pKTtcXG5sZXQgaWQgPSBudWxsO1xcbmZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcbiAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIH1cXG59XFxubGV0IGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+mFjee9ruWQjeensCcsXFxuICAgIGRlc2M6IFxcXCLop6PmnpDphY3nva7lkI3np7As5aaC6YGT6ZW/5o6o6I2QXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdkbi5qeG1fbmFtZScsaW5wdXQpXFxcIixcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyl8fG5vd0p4Lm5hbWVcXG4gICAgfSxcXG4gICAgY29sX3R5cGU6J2lucHV0J1xcbn0pO1xcbi8vIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfmlrDlop4nLCfliKDpmaQnLCfmibnph4/liKDpmaQnLCfnp7vliqgnXTtcXG5sZXQgb3B0aW9ucyA9IFsn5paw5aKeJywn5Yig6ZmkJywn56e75YqoJ107XFxuXFxuZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcbiAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXG4gICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXG4gICAgICAgIC8vIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcbiAgICAgICAgICAgIHB1dFZhcignZG4uanhtX3dyaXRlTW9kZScsIG9wdGlvbik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sb3B0aW9uKSxcXG4gICAgfSk7XFxufVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOidsaW5lJ1xcbn0pO1xcbi8v6I635Y+W5pat5o+S5YiX6KGoXFxuaWYoIWdldFZhcihcXFwiZG4uanhfdGl0bGVzXFxcIikpe1xcbiAgICBsZXQgdGl0bGVBcnIgPSBbXSwgdXJsQXJyID0gW107XFxuICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxuICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRpdGxlQXJyID0ganNvbi50aXRsZTtcXG4gICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcXG4gICAgICAgIHVybEFyci5wdXNoKGpzb24uY29kZXNbaXRdKTtcXG4gICAgfSk7XFxuICAgIHB1dFZhcignZG4uanhfdGl0bGVzJyxKU09OLnN0cmluZ2lmeSh0aXRsZUFycikpO1xcbn1cXG5cXG5sZXQgdGl0bGVzID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLmp4X3RpdGxlcycpfHwnW10nKTtcXG5sZXQgdGl0bGVEaWMgPSB7XFxuICAgIGFsOifpmL/ph4wnLGJsOiflk5Tlk6nlk5Tlk6knLGZ1bjon6aOO6KGMJyxsZTon5LmQ6KeGJyxtZzon6IqS5p6cJyxtaTon5ZKq5ZKVJyxwcDonUFBUVicscXk6J+eIseWlh+iJuicsc2g6J+aQnOeLkCcsXFxuICAgIHR4Oifohb7orq8nLHhnOifopb/nk5wnLHlrOifkvJjphbcnLG9uZTonMTkwNSdcXG59XFxuXFxuLy8tLS0tLS0tLS0tLS0tLS0tLVxcbmxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyYmaXQhPT0nb3RoJyk7XFxuZm9yKGxldCBqIGluIGpkcyl7XFxuICAgIGxldCBqeHMgPSBub3dKeFtqZHNbal1dfHxbXTtcXG4gICAgbGV0IHRpdGxlID0gamRzW2pdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6dGl0bGVEaWNbdGl0bGVdfHx0aXRsZSxcXG4gICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngpPT57XFxuICAgICAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT0n5paw5aKeJyl7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxfdGl0bGUgPSB0aXRsZXMuZmlsdGVyKGl0PT4hanhzLmluY2x1ZGVzKGl0KSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbF90aXRsZSwzKS5zZWxlY3QoKE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV5L+d5a2YOlxcXFxuJytpZFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAganhzLnB1c2goaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGp4cyk7XFxuICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpO1xcbiAgICAgICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KVxcbiAgICB9KTtcXG4gICAgZm9yKGxldCBrIGluIGp4cyl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmp4c1trXSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxuangsaWQsayxtYXgpPT57XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJykpe1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeHMucmVtb3ZlKG5qeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGssJ+enu+WKqOWIsOe0ouW8leWkmuWwkT8nKS5pbnB1dCgoayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1vdmUoYXJyLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYXJyW2Zyb21JbmRleF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGZyb21JbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKHRvSW5kZXgsIDAsIGVsZW1lbnQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KGlucHV0KT09PWspe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WVpeS5n+ayoeWBmidcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocGFyc2VJbnQoaW5wdXQpPm1heC0xfHxwYXJzZUludChpbnB1dCk8LTEpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOacgOWkp+enu+WKqOiMg+WbtDAtJytwYXJzZUludChtYXgtMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IG5ld0FyID0ganhzLnNwbGljZShrLCAxKTsgLy8g5Yig5o6JXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp4cy51bnNoaWZ0KG5ld0FyWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZShqeHMsayxwYXJzZUludChpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTlhYPntKDkuI3mlK/mjIHov5vooYw6JytnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSx0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngsanhzW2tdLGlkLGssanhzLmxlbmd0aClcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTonbGluZSdcXG4gICAgfSlcXG59XFxuXFxuZC5wdXNoKHtcXG4gICB0aXRsZTon5L+d5a2YJyxcXG4gICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxuICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksaWQsanhzUm91dGUpPT57XFxuICAgICAgIGlmKGdldFZhcignZG4uanhtX25hbWUnLCcnKSE9PU15SmlleGkuamlleGlzW2lkXS5uYW1lKXtcXG4gICAgICAgICAgIGlmSGFzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpKS5sZW5ndGg+MDtcXG4gICAgICAgICAgIGlmKGlmSGFzKXtcXG4gICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5b6F5L+u5pS555qE5ZCN56ew6YeN5aSNLOS4jeWFgeiuuOS/neWtmCdcXG4gICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXS5uYW1lID0gIGdldFZhcignZG4uanhtX25hbWUnLCcnKTtcXG4gICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgfVxcbiAgICAgICB9XFxuICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZgnXFxuICAgfSxNeUppZXhpLGlkLGp4c1JvdXRlKVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn1dIiwiaWNvbiI6Imh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9tb3ZpZS80LnN2ZyJ9
Add Comment
Please, Sign In to add comment