Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@聚漫🔮@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6IGa5ryr8J+UriIsImF1dGhvciI6IuWwj+ajieiihPCfjJ4m5rC46L+c44Gu5piO5pelJuWbouWtkCZIaSbmoqbmtbcm6I+c6bihJmR5MjAyMCIsInVybCI6Imhpa2VyOi8vZW1wdHkiLCJ2ZXJzaW9uIjoyMjA0MjIxMDEsImNvbF90eXBlIjoiaWNvbl9zbWFsbF80IiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJhbGwiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnJlcXVpcmUoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTQwOTEnKTtcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJyksXG4gICAgbmV3V2luZG93ID0gcmVhZEZpbGUoJ25ld1dpbmRvdycpLFxuICAgIHR5cGVTaG93ID0gZ2V0TXlWYXIoJ3R5cGVTaG93JywgJ2ZpbmQ6JyksXG4gICAgdHlwZXMgPSB7ICdhbGwnOiAn5YWo6YOoJywgJ3ZpZGVvJzogJ+inhumikScsICdtdXNpYyc6ICfpn7PpopEnLCAnbGl2ZSc6ICfnm7Tmkq0nLCAnY2FydG9vbic6ICfmvKvnlLsnLCAncmVhZCc6ICfpmIXor7snLCAncGljdHVyZSc6ICflj6bnsbsnLCAnbmV3cyc6ICfml6DmkJzntKInLCAndG9vbCc6ICflj6/kuIvovb0nLCAnb3RoZXInOiAn5oq96aOOJyB9XG5sZXQgZWwgPSBbe1xuICAgICAgICB0aXRsZTogJyAnICsgUUlOR19USVRMRS5ib2xkKCkgKyAnICZuYnNwICZuYnNwICcgKyAn4pqZIOi9u+WQiOmbhuiuvue9riDimpknLnNtYWxsKCksXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db25maWc/cnVsZT0nICsgUUlOR19USVRMRSArICcmI25vUmVjb3JkSGlzdG9yeSMnLFxuICAgICAgICBpbWc6IE1ZX1JVTEUuaWNvbiB8fCAnaGlrZXI6Ly9pbWFnZXMvaWNvbjEnLFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcbiAgICB9XSxcbiAgICBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKClcblxuZWwucHVzaCjpobrmkJwoZWwpKVxuXG5lbC5wdXNoKFxuICAgIHtcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEucG5nJyxcbiAgICAgICAgdGl0bGU6ICfmlLbol48nLFxuICAgICAgICB1cmw6XCJoaWtlcjovL2NvbGxlY3Rpb25cIixcbiAgICAgICAgY29sX3R5cGU6XCJpY29uXzJcIlxuICAgIH0sIHtcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEzNy5wbmcnLFxuICAgICAgICB0aXRsZTogJ+WOhuWPsicsXG4gICAgICAgIHVybDpcImhpa2VyOi8vaGlzdG9yeVwiLFxuICAgICAgICBjb2xfdHlwZTpcImljb25fMlwiXG4gICAgfSwge1xuICAgICAgICBpbWc6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbWVzc3kvMTAuc3ZnJyxcbiAgICAgICAgdGl0bGU6ICfmnKzlnLDotYTmupAnLFxuICAgICAgICB1cmw6XCJoaWtlcjovL3BhZ2UvTWFpbi52aWV3P3J1bGU95pys5Zyw6LWE5rqQ566h55CGXCIsXG4gICAgICAgIGNvbF90eXBlOlwiYXZhdGFyXCJcbiAgICB9KVxuXG5lbC5wdXNoKHR5cGVTaG93LnN0YXJ0c1dpdGgoJ2ZpbmQ6JykgPyB7XG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgKCfwn5SN5YWo6YOoJyArICh0eXBlU2hvd1s1XSA/ICdbJyArIHR5cGVTaG93LnNsaWNlKDUpICsgJ10nIDogJycpKS5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JyksXG4gICAgdXJsOiAkKHR5cGVTaG93LnNsaWNlKDUpLCAn5p+l5om+5bCP56iL5bqP5YWz6ZSu6K+NJykuaW5wdXQoKCkgPT4ge1xuICAgICAgICBwdXRNeVZhcigndHlwZVNob3cnLCAnZmluZDonICsgaW5wdXQpXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXG4gICAgfSksXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xufSA6IHtcbiAgICB0aXRsZTogJ/CflI3lhajpg6gnLFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XG4gICAgICAgIHB1dE15VmFyKCd0eXBlU2hvdycsICdmaW5kOicpXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YaN5qyh54K55Ye744CQ5YWo6YOo44CR5Y+v5p+l5om+5bCP56iL5bqPJ1xuICAgIH0pLFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbn0pXG5mb3IgKGxldCBrIGluIHR5cGVzKVxuICAgIGlmIChydWxlcy5maW5kKCh2KSA9PiB2LnR5cGUgPT0gaykpXG4gICAgICAgIGVsLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgKGsgPT0gdHlwZVNob3cgPyB0eXBlc1trXS5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgOiB0eXBlc1trXSksXG4gICAgICAgICAgICB1cmw6IGsgPT0gdHlwZVNob3cgPyAnaGlrZXI6Ly9lbXB0eScgOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgaylcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXG4gICAgICAgICAgICB9LCBrKSxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbiAgICAgICAgfSlcblxuaWYgKGdldEl0ZW0oXCJyZWFkX3BvbGljeVwiKSAhPT0gXCIxXCIpIHtcbiAgICBlbC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Izg3MWY3OD7ku6XkuIvmlbDmja7mnaXmupDkuo7nvZHnu5zvvIzlpoLmgqjllpzmrKLvvIzor7fmlK/mjIHlrpjmlrk8L2ZvbnQ+PC9zbWFsbD4nLFxuICAgICAgICBkZXNjOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSNmMjBjMDA+5pys6KeE5YiZ5LuF6ZmQ5YWN6LS55a2m5Lmg5Lqk5rWB5L2/55So77yM6K+35LqO5a+85YWl5ZCOMjTlsI/ml7blhoXliKDpmaTvvIzku7vkvZXnu4Tnu4fmiJbkuKrkurrkuI3lvpfku6Xku7vkvZXmlrnlvI/mlrnms5XkvKDmkq3miJbllK7ljZbmraTop4TliJnnmoTmlbTkvZPmiJbpg6jliIbvvIE8L2ZvbnQ+PC9zbWFsbD4nLFxuICAgICAgICB1cmw6ICQoJyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xuICAgICAgICAgICAgc2V0SXRlbShcInJlYWRfcG9saWN5XCIsIFwiMVwiKVxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+S9oOW3suWQjOaEj+ivpeWNj+iurlwiXG4gICAgICAgIH0pLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXG4gICAgfSlcbn1cblxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdXJsUGFyc2U/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXG5pZiAodHlwZVNob3cuc3RhcnRzV2l0aCgnZmluZDonKSkge1xuICAgIGxldCBmaWx0ZXJLZXkgPSB0eXBlU2hvdy5zbGljZSg1KVxuICAgIGlmIChmaWx0ZXJLZXkpIHJ1bGVzID0gcnVsZXMuZmlsdGVyKCh2KSA9PiB2LnRpdGxlLmluY2x1ZGVzKGZpbHRlcktleSkpXG59IGVsc2UgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudHlwZSA9PSB0eXBlU2hvdylcbnJ1bGVzLmZvckVhY2goKHYpID0+IHtcbiAgICBsZXQgdXJsUGFyYW0gPSB2LnVybC5zcGxpdCgnOycpLFxuICAgICAgICBydWxlVG1wID0ge1xuICAgICAgICAgICAgdGl0bGU6IHYudGl0bGUsIHVybDogdXJsUGFyYW0uc2hpZnQoKSxcbiAgICAgICAgICAgIGNsYXNzX25hbWU6IHYuY2xhc3NfbmFtZSwgY2xhc3NfdXJsOiB2LmNsYXNzX3VybCxcbiAgICAgICAgICAgIGFyZWFfbmFtZTogdi5hcmVhX25hbWUsIGFyZWFfdXJsOiB2LmFyZWFfdXJsLFxuICAgICAgICAgICAgeWVhcl9uYW1lOiB2LnllYXJfbmFtZSwgeWVhcl91cmw6IHYueWVhcl91cmwsXG4gICAgICAgICAgICBzb3J0X25hbWU6IHYuc29ydF9uYW1lLCBzb3J0X3VybDogdi5zb3J0X3VybFxuICAgICAgICB9LFxuICAgICAgICBmeXBhZ2UgPSBydWxlVG1wLnVybC5pbmNsdWRlcygnZnlwYWdlJykgPyAnZnlwYWdlJyA6ICcxJyxcbiAgICAgICAgZG9tYWluID0gKC9eKGh0dHBzPzpcXC9cXC8uKz8pKD86I3xcXD98XFwvfCQpL2kuZXhlYyhydWxlVG1wLnVybCkgfHwgWywgJ2hpa2VyOi8vZW1wdHknXSlbMV0sXG4gICAgICAgIGQgPSB7XG4gICAgICAgICAgICB0aXRsZTogdi50aXRsZSxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQnLFxuICAgICAgICAgICAgaW1nOiB2Lmljb24gfHwgJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcbiAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBkb21haW4gKyAnLyNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjIyMnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkocnVsZVRtcCkpLFxuICAgICAgICAgICAgICAgICAgICBwYWdlTnVtOiBmeXBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIFFJTkdfVElUTEU6IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKVxuICAgICAgICAgICAgICAgIH0pICsgJy5qczpldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UvdXJsUGFyc2XvvJ/vvJ9ydWxlPScgKyBRSU5HX1RJVExFICsgJ1wiKSkucnVsZSnvvJvvvJtpbmRleFVybChpbnB1dCk7JyArIHBhcmFtSGFuZGxlKHVybFBhcmFtLCB2LnVhKSxcbiAgICAgICAgICAgICAgICBSVUxFOiB7IHRpdGxlOiB2LnRpdGxlIH0sXG4gICAgICAgICAgICAgICAgaXNJbmRleDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgaWYgKG5ld1dpbmRvdykgT2JqZWN0LmFzc2lnbihkLmV4dHJhLCB7XG4gICAgICAgIG5ld1dpbmRvdzogdHJ1ZSxcbiAgICAgICAgd2luZG93SWQ6IFFJTkdfVElUTEUgKyAnXycgKyBkLnRpdGxlXG4gICAgfSlcbiAgICBlbC5wdXNoKGQpXG59KVxuc2V0UmVzdWx0KGVsKSIsInNlYXJjaF91cmwiOiJoaWtlcjovL2VtcHR5P2tleXdvcmQ9KioiLCJncm91cCI6IiPvuI/ig6PluLjnlKgiLCJzZWFyY2hGaW5kIjoianM6XG5zZXRSZXN1bHQoW3tcbiAgICB0aXRsZTogXCLngrnmiJHlvIDlp4vovbvlkIjpm4bigKLop4bnlYzogZrmkJxcIixcbiAgICB1cmw6IFwiaGlrZXI6Ly9zZWFyY2g/cz1cIiArIGdldFBhcmFtKFwia2V5d29yZFwiKSxcbiAgICBleHRyYToge1xuICAgICAgICBydWxlczogJC50b1N0cmluZygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpLFxuICAgICAgICAgICAgICAgIHR5cGVTaG93ID0gZ2V0TXlWYXIoJ3R5cGVTaG93JywgJ2ZpbmQ6JylcbiAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKClcbiAgICAgICAgICAgIGlmICh0eXBlU2hvdy5zdGFydHNXaXRoKCdmaW5kOicpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IHR5cGVTaG93LnNsaWNlKDUpXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSkgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudGl0bGUuaW5jbHVkZXMoZmlsdGVyS2V5KSlcbiAgICAgICAgICAgIH0gZWxzZSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50eXBlID09IHR5cGVTaG93KVxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVzKVxuICAgICAgICB9KVxuICAgIH1cbn1dKVxuIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJhdXRvIiwicHJlUnVsZSI6InB1dE15VmFyKCdteUNvbGxlY3Rpb24nLCBNWV9SVUxFLnRpdGxlKVxucHV0TXlWYXIoJ3JlbW90ZVVybCcsICdodHRwczovL3R1YW56aWRla3UuY29kaW5nLm5ldC9wL2ptL2QvSk0vZ2l0L3Jhdy9tYXN0ZXIvSk0/ZG93bmxvYWQ9ZmFsc2UnKVxuLy8gXG4vKlxuKi8iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCJDbGFzc1RhYlwiLFwicGF0aFwiOlwiQ2xhc3NUYWJcIixcInJ1bGVcIjpcImNvbnN0IENsYXNzVGFiID0gZnVuY3Rpb24oY2xhc3NBcnJheSwgcGFyYW1zKSB7XFxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKVxcbiAgICB0aGlzLmFyciA9IGNsYXNzQXJyYXkubWFwKHYgPT4gdGhpcy5pbml0KHYpKVxcbiAgICB0aGlzLnNpZ24gPSAnJCcgKyBRSU5HX1RJVExFICsgJ18nICsgKHRoaXMubmFtZSB8fCAnJykgKyAnXydcXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29sb3IgfHwgJyMxMmI2NjgnXFxuICAgIHRoaXMuYm91bmRhcnkgPSB0aGlzLmJvdW5kYXJ5IHx8ICdibGFua19ibG9jaydcXG59XFxuQ2xhc3NUYWIucHJvdG90eXBlID0ge1xcbiAgICBjb25zdHJ1Y3RvcjogQ2xhc3NUYWIsXFxuICAgIGxvYWQoZWwpIHtcXG4gICAgICAgIGxldCBmb2xkZWQgPSB0aGlzLmZvbGQgJiYgZ2V0VmFyKCdmb2xkXycgKyB0aGlzLnNpZ24sICcnKVxcbiAgICAgICAgaWYgKHRoaXMuYXJyLmxlbmd0aCA+IDEgJiYgdGhpcy5mb2xkKSBlbC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JykuZm9udGNvbG9yKCcjMDQ5ZWZmJyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBmb2xkZWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgaWQsIGNsYXNzX25hbWUsIGNsYXNzX3VybCB9ID0gdixcXG4gICAgICAgICAgICBzZWxlY3RlZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q2xhc3MoaWQpKVxcbiAgICAgICAgICAgIGNsYXNzX25hbWUuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gY2xhc3NfdXJsW2ldLFxcbiAgICAgICAgICAgICAgICAgICAgbm93ID0gSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBuYW1lLCB1cmw6IHVybCB9KVxcbiAgICAgICAgICAgICAgICBlbC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWxlY3RlZCA9PSBub3cgPyAn4oCc4oCc4oCd4oCdJyArIG5hbWUuZm9udGNvbG9yKHRoaXMuY29sb3IpLmJvbGQoKSA6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNlbGVjdGVkID09IG5vdyA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpZ24sIGlkLCBub3cpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiArIGlkLCBub3cpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5zaWduLCBpZCwgbm93KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGVsLnB1c2goeyBjb2xfdHlwZTogdGhpcy5ib3VuZGFyeSB9KVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgaW5pdChjbGFzc09iamVjdCkge1xcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc19uYW1lID09ICdzdHJpbmcnKVxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX25hbWUgPSBjbGFzc09iamVjdC5jbGFzc19uYW1lLnNwbGl0KCcmJylcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfdXJsID09ICdzdHJpbmcnKVxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9IGNsYXNzT2JqZWN0LmNsYXNzX3VybC5zcGxpdCgnJicpLm1hcCgodikgPT4gdi50cmltKCkpXFxuICAgICAgICByZXR1cm4gY2xhc3NPYmplY3RcXG4gICAgfSxcXG4gICAgcHVzaChjbGFzc09iamVjdCkge1xcbiAgICAgICAgdGhpcy5hcnIucHVzaCh0aGlzLmluaXQoY2xhc3NPYmplY3QpKVxcbiAgICB9LFxcbiAgICBnZXRDbGFzcyhpZCkge1xcbiAgICAgICAgbGV0IGRlZmF1bHRDbGFzcyA9IHRoaXMuYXJyLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09IGlkKVxcbiAgICAgICAgZGVmYXVsdENsYXNzID0gSlNPTi5zdHJpbmdpZnkoZGVmYXVsdENsYXNzID8ge1xcbiAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRDbGFzcy5jbGFzc19uYW1lWzBdLFxcbiAgICAgICAgICAgIHVybDogZGVmYXVsdENsYXNzLmNsYXNzX3VybFswXVxcbiAgICAgICAgfSA6IHsgbmFtZTogICdjYW5ub3QgZmluZCBpZDogJyArIGlkICsgJyBpbiBjbGFzc1RhYjogJyArIHRoaXMuc2lnbiwgdXJsOiAnJ30pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxuICAgIH0sXFxuICAgIHNldFVybCh1cmwpIHtcXG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgvXFxcXCRcXFxceyhbXn1dKilcXFxcfS9nLCAoXywgaWQpID0+IHRoaXMuZ2V0Q2xhc3MoaWQpLnVybClcXG4gICAgfVxcbn1cXG4vLyDnlJ/miJDlpLTpg6jliIbnsbtcXG5jb25zdCBmeUFsbCA9IFJVTEUudXJsLmluY2x1ZGVzKCdmeUFsbCcpXFxubGV0IHRhYkhlYWRlciA9IFtdXFxuaWYgKFJVTEUuY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5jbGFzc191cmxcXG59KVxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXG59KVxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUueWVhcl9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXG59KVxcbmlmIChSVUxFLnNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuc29ydF91cmxcXG59KVxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSwgZm9sZDogcmVhZEZpbGUoJ3RhYkZvbGQnKSwgfSlcXG5cIn0se1wiY29sX3R5cGVcIjpcImljb25fMl9yb3VuZFwiLFwibmFtZVwiOlwi6K6+572uXCIsXCJwYXRoXCI6XCJDb25maWdcIixcInJ1bGVcIjpcImpzOlxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyTXlWYXIoXFxcInNvcnRGbGFnXFxcIik7cmVmcmVzaFBhZ2UoKScpXFxuc2V0UGFnZVRpdGxlKCfimpkg6L275ZCI6ZuG6K6+572uIOKamScpXFxuY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSxcXG4gICAgdXJsID0gZ2V0TXlWYXIoJ3JlbW90ZVVybCcpXFxubGV0IGRhdGEgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKSh0cnVlKSxcXG4gICAgZWwgPSBbe1xcbiAgICAgICAgdGl0bGU6ICc8Yj4g5riF6Zmk57yT5a2Y77yM56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqT77yM5LiN6KaB6aKR57mB54K55Ye777yJJyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodXJsKSA9PiB7XFxuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ku5PlupPkuLrmnKzlnLDmlofku7bvvIzkuI3kvJrov5vooYznvJPlrZjvvIzmnKzlip/og73kuZ/ml6DmlYgnXFxuICAgICAgICAgICAgZGVsZXRlQ2FjaGUodXJsKVxcbiAgICAgICAgICAgIGJhY2soZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suabtOaWsCdcXG4gICAgICAgIH0sIHVybCksXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uNCcsXFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgfV0sXFxuICAgIHVwZGF0ZUludGVydmFsID0gcmVhZEZpbGUoJ3VwZGF0ZUludGVydmFsJykgfHwgJzEnLFxcbiAgICBuZXdXaW5kb3cgPSByZWFkRmlsZSgnbmV3V2luZG93JyksXFxuICAgIHRhYkZvbGQgPSByZWFkRmlsZSgndGFiRm9sZCcpLFxcbiAgICBkaXNhYmxlQ3VzdG9tID0gcmVhZEZpbGUoJ2Rpc2FibGVDdXN0b20nKSxcXG4gICAgZWRpdE1vZGUgPSBkaXNhYmxlQ3VzdG9tID8gJ+WvvOWFpea1t+mYlCcgOiBnZXRNeVZhcignZWRpdE1vZGUnLCAn5ZCv55SoL+emgeeUqCcpXFxuXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiAnICDwn5KhIOabtOaWsOmikeeOhzogJyArICh1cGRhdGVJbnRlcnZhbCA9PSAwID8gJ+aJi+WKqCcgOiB1cGRhdGVJbnRlcnZhbCArICflpKknKSArICcgICcsXFxuICAgIHVybDogJCh1cGRhdGVJbnRlcnZhbCwgJ+i+k+WFpeabtOaWsOmXtOmalO+8iOWkqe+8ie+8jOS4ujDliJnmiYvliqjmm7TmlrBcXFxcbuacrOWcsOaWh+S7tumTvuaOpeaXoOaViCcpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIGlucHV0ID0gcGFyc2VJbnQoaW5wdXQpXFxuICAgICAgICBpZihOdW1iZXIuaXNOYU4oaW5wdXQpKSBpbnB1dCA9IDFcXG4gICAgICAgIGVsc2UgaWYoaW5wdXQgPCAxKSBpbnB1dCA9IDBcXG4gICAgICAgIHNhdmVGaWxlKCd1cGRhdGVJbnRlcnZhbCcsIGlucHV0LnRvU3RyaW5nKCkpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+WpSDni6znq4vpppbpobU6ICcgKyAobmV3V2luZG93ID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5ld1dpbmRvdykgPT4ge1xcbiAgICAgICAgc2F2ZUZpbGUoJ25ld1dpbmRvdycsIG5ld1dpbmRvdyA/ICcnIDogJzEnKVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9LCBuZXdXaW5kb3cpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SoCDliIbnsbvmipjlj6A6ICcgKyAodGFiRm9sZCA/ICfmmK8nIDogJ+WQpicpICsgJyAgJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0YWJGb2xkKSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQgPyAnJyA6ICcxJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgdGFiRm9sZCksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAnICDwn5K8IOWkh+S7veaBouWkjSAgJyxcXG4gICAgdXJsOiAkKFsn5aSH5Lu9JywgJ+aBouWkjSddLCAxKS5zZWxlY3QoKFFJTkdfVElUTEUsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pID0+IHtcXG4gICAgICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXG4gICAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgJiYgIXVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpXFxuICAgICAgICAgICAgdXJsID0gJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJ1xcbiAgICAgICAgZWxzZSBpZih1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB1cmwgPSAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIGlmIChpbnB1dCA9PSAn5aSH5Lu9JykgcmV0dXJuICQoJ2hpa2VyOi8vZmlsZXMvdG1wLycgKyBRSU5HX1RJVExFICsgJ19iYWNrdXAuanNvbicsICfovpPlhaXlpIfku73ot6/lvoQnKVxcbiAgICAgICAgICAgIC5pbnB1dCgodXJsLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IHJlcXVlc3QodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbURhdGEgPSByZWFkRmlsZSgnY3VzdG9tRGF0YScpXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShpbnB1dCwgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW50ZXJ2YWw6IHVwZGF0ZUludGVydmFsLFxcbiAgICAgICAgICAgICAgICAgICAgbmV3V2luZG93OiBuZXdXaW5kb3csXFxuICAgICAgICAgICAgICAgICAgICB0YWJGb2xkOiB0YWJGb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUN1c3RvbTogZGlzYWJsZUN1c3RvbSxcXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbURhdGE6IGN1c3RvbURhdGEsXFxuICAgICAgICAgICAgICAgICAgICBydWxlczogcnVsZXNcXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LlpIfku73vvIzms6jmhI/oi6Xku5PlupPkuLrlrZDpobXpnaLliJnkuI3lpIfku70nXFxuICAgICAgICAgICAgfSwgdXJsLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKVxcbiAgICAgICAgZWxzZSByZXR1cm4gJCgnaGlrZXI6Ly9maWxlcy90bXAvJyArIFFJTkdfVElUTEUgKyAnX2JhY2t1cC5qc29uJywgJ+i+k+WFpeWkh+S7vei3r+W+hCcpLmlucHV0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICBsZXQgeyB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tLCBjdXN0b21EYXRhLCBydWxlcyB9ID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KSlcXG4gICAgICAgICAgICBzYXZlRmlsZSgndXBkYXRlSW50ZXJ2YWwnLCB1cGRhdGVJbnRlcnZhbClcXG4gICAgICAgICAgICBzYXZlRmlsZSgnbmV3V2luZG93JywgbmV3V2luZG93KVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCd0YWJGb2xkJywgdGFiRm9sZClcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsIGRpc2FibGVDdXN0b20pXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBjdXN0b21EYXRhKVxcbiAgICAgICAgICAgIGlmKHJ1bGVzKSB3cml0ZUZpbGUodXJsLCBydWxlcylcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaBouWkje+8jOWmguaenOS4jeaDs+WQjOatpei/nOeoi+S7k+W6k++8jOWPr+S7peiuvue9ruabtOaWsOmikeeOh+S4uuaJi+WKqCdcXG4gICAgICAgIH0sIHVybClcXG4gICAgfSwgUUlOR19USVRMRSwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcIiM2NjY2NjZcXFwiPjxzbWFsbD7nibnliKvpuKPosKLvvIzlsI/nqIvluo/mj5DkvpvogIXvvJpcXFxcbicgK1xcbiAgICAgICAgZGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHYuYXV0aG9yID8gc2VsZi5jb25jYXQodi5hdXRob3Iuc3BsaXQoJyYnKSkgOiBzZWxmLCBbXSlcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KVxcblxcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ/Cfk50nLnNtYWxsKCkgKyAnJm5ic3Ag6L275ZCI6ZuG6Ieq5a6a5LmJICZuYnNwJy5ib2xkKCkuZm9udGNvbG9yKCcjNzU3NTc1JykgKyAoZGlzYWJsZUN1c3RvbSA/ICfinYwnIDogJ+KtlScpLnNtYWxsKCksXFxuICAgIHVybDogJChbKGRpc2FibGVDdXN0b20gPyAn5ZCv55SoJyA6ICfnpoHnlKgnKSArICflkIjpm4boh6rlrprkuYknLCAn5riF6Zmk6Ieq5a6a5LmJ5pWw5o2uJ10sIDEpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+a4hemZpOiHquWumuS5ieaVsOaNricpIHtcXG4gICAgICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WQr+eUqOWQiOmbhuiHquWumuS5iScpIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcnKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcxJylcXG4gICAgICAgICAgICBpbnB1dCArPSAnXFxcXG7lsI/nqIvluo/lkK/nlKgv56aB55So44CB6YeN5paw5o6S5bqP562J5pON5L2c5Z2H5LiN5Lya5L2T546w5Zyo6aaW6aG15bCP56iL5bqP5YiX6KGo5LitJ1xcbiAgICAgICAgfVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5beyJyArIGlucHV0XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfVxcbn0pO1xcbihkaXNhYmxlQ3VzdG9tID8gWyflr7zlhaXmtbfpmJQnXSA6IFsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddKS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignZWRpdE1vZGUnLCB2KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIHYpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pO1xcbmlmKGVkaXRNb2RlID09ICflr7zlhaXmtbfpmJQnKSBlbC5wdXNoKHtcXG4gICAgdGl0bGU6ICflhajpg6jlr7zlhaUnLFxcbiAgICB1cmw6ICfmtbfpmJTop4bnlYzvv6Vob21lX3J1bGVfdXJs77+lJyArICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpID8gdXJsIDogJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJyksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9XFxufSk7XFxuKGRpc2FibGVDdXN0b20gPyBkYXRhIDogSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcbiAgICBzd2l0Y2ggKGVkaXRNb2RlKSB7XFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgcnVsZXNbaV0udmlzaWJsZSA9ICFydWxlc1tpXS52aXNpYmxlXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+mHjeaWsOaOkuW6jyc6XFxuICAgICAgICAgICAgbGV0IHNvcnRGbGFnID0gcGFyc2VJbnQoZ2V0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJykpXFxuICAgICAgICAgICAgZC50aXRsZSA9IChzb3J0RmxhZyA9PSBpID8gJ/CflIMgICcgOiAnJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzb3J0RmxhZycsIGkudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mAieaLqeimgeenu+WKqOWIsOeahOS9jee9ridcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob2xkSW5kZXgsIG5ld0luZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn5pu05pS55Zu+5qCHJzpcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLmljb24gPSBpbnB1dFxcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaV0uaWNvblxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICflr7zlhaXmtbfpmJQnOlxcbiAgICAgICAgICAgIGQudXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KGRhdGFbaV0pKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgIH1cXG4gICAgZWwucHVzaChkKVxcbn0pXFxuc2V0UmVzdWx0KGVsKVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aG16Z2i6L295YWlXCIsXCJwYXRoXCI6XCJmcmFtZUxvYWRcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJylcXG5sZXQgbXlDb2xsZWN0aW9uX2VsID0gW10sXFxuICAgIHsgUlVMRSwgaXNJbmRleCwgcGFnZVRpdGxlIH0gPSBNWV9QQVJBTVMsXFxuICAgIHRoaXNSVUxFID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSkoKS5maW5kKCh2KSA9PiB2LnRpdGxlID09IFJVTEUudGl0bGUpXFxuaWYgKGlzSW5kZXgpIHtcXG4gICAgUlVMRSA9IHRoaXNSVUxFXFxufSBlbHNlIHtcXG4gICAgUlVMRS5wYWdlcyA9IHRoaXNSVUxFLnBhZ2VzXFxufVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3ByZUZ1bmM/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdXJsUGFyc2U/cnVsZT0nICsgUUlOR19USVRMRSkpLnJ1bGUpXFxuXFxuaWYgKGlzSW5kZXgpIHtcXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgLy8g5Yqg6L29Q2xhc3NUYWLnu4Tku7ZcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICAgICAgdGFiSGVhZGVyLmxvYWQobXlDb2xsZWN0aW9uX2VsKVxcbiAgICAgICAgaWYgKFJVTEUuc2VhcmNoX3VybCkgbXlDb2xsZWN0aW9uX2VsLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwi5pCc5L2g5oOz6KaB55qELi4uXFxcIixcXG4gICAgICAgICAgICB1cmw6ICdcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFwiK2lucHV0JyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBydWxlczogJC50b1N0cmluZygoUUlOR19USVRMRSwgdGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gW3J1bGVzLmZpbmQoKHYpID0+IHYudGl0bGUgPT0gdGl0bGUpXVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJ1bGVzKVxcbiAgICAgICAgICAgICAgICB9LCBRSU5HX1RJVExFLCBSVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcignc2VhcmNoS2V5JywgJycpLFxcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdzZWFyY2hLZXknLGlucHV0KVxcXCJcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICAvLyDlpITnkIZNWV9SVUxFXFxuICAgIE1ZX1JVTEUudXJsID0gUlVMRS51cmxcXG4gICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuY29sX3R5cGVcXG4gICAgTVlfUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbiAgICBNWV9SVUxFLnBhcmFtcyA9IHt9XFxufSBlbHNlIHtcXG4gICAgTVlfUlVMRS51cmwgPSBNWV9QQVJBTVMudXJsXFxuICAgIE1ZX1JVTEUuY29sX3R5cGUgPSBSVUxFLmRldGFpbF9jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmZpbmRfcnVsZSA9IFJVTEUuZGV0YWlsX2ZpbmRfcnVsZVxcbiAgICBNWV9SVUxFLnBhcmFtcyA9IFJVTEUucGFyYW1zXFxufVxcbk1ZX1JVTEUucGFnZXMgPSBSVUxFLnBhZ2VzXFxuTVlfUlVMRS5wYWdlTGlzdCA9IEpTT04ucGFyc2UoTVlfUlVMRS5wYWdlcyB8fCAnW10nKVxcbk1ZX1JVTEUudGl0bGUgPSBSVUxFLnRpdGxlXFxuXFxuaWYgKCFpc0luZGV4KSB7XFxuICAgIGlmIChwYWdlVGl0bGUpIHNldFBhZ2VUaXRsZShwYWdlVGl0bGUpXFxuICAgIHNldExhc3RDaGFwdGVyUnVsZSh0aGlzUlVMRS5sYXN0X2NoYXB0ZXJfcnVsZSlcXG4gICAgTVlfUEFSQU1TID0gTVlfUlVMRS5wYXJhbXNcXG59XFxuLy8g6aKE5aSE55CG5bm25Yid5aeL5YyWY29uZmlnXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBsZXQgbG9hZGVkID0gZ2V0TXlWYXIodGhpc1JVTEUudGl0bGUgKyBcXFwiQHByZVxcXCIsIFxcXCJub1xcXCIpXFxuICAgIGlmIChcXFwieWVzXFxcIiAhPSBsb2FkZWQpIHtcXG4gICAgICAgIGV2YWwodGhpc1JVTEUucHJlUnVsZSlcXG4gICAgICAgIHB1dE15VmFyKHRoaXNSVUxFLnRpdGxlICsgXFxcIkBwcmVcXFwiLCBcXFwieWVzXFxcIilcXG4gICAgfVxcbn1cXG4vLyDmraPmlofop6PmnpDpgJrnlKjlj5jph49cXG5sZXQgYXNzaWduTGF6eVJ1bGUgPSAkLnRvU3RyaW5nKChRSU5HX1RJVExFLCB0aXRsZSwgdXJsKSA9PiB7XFxuICAgIGxldCBSVUxFID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT1cXFwiICsgUUlOR19USVRMRSkoKS5maW5kKCh2KSA9PiB2LnRpdGxlID09IHRpdGxlKVxcbiAgICByZXR1cm4geyB0aXRsZTp0aXRsZSwgdXJsOiB1cmwsIHBhZ2VzOiBSVUxFLnBhZ2VzLCBwYWdlTGlzdDogSlNPTi5wYXJzZShSVUxFLnBhZ2VzIHx8ICdbXScpIH1cXG59LCBRSU5HX1RJVExFLCBNWV9SVUxFLnRpdGxlLCBNWV9SVUxFLnVybClcXG5mdW5jdGlvbiBnZW5NeVJ1bGUoKSB7XFxuICAgIGxldCBydWxlID0gT2JqZWN0LmFzc2lnbih7fSwgTVlfUlVMRSlcXG4gICAgZGVsZXRlIHJ1bGUubGFzdF9jaGFwdGVyX3J1bGVcXG4gICAgZGVsZXRlIHJ1bGUucHJlUnVsZVxcbiAgICBkZWxldGUgcnVsZS5wYWdlTGlzdFxcbiAgICBkZWxldGUgcnVsZS5wYWdlc1xcbiAgICByZXR1cm4gcnVsZVxcbn1cXG5mdW5jdGlvbiBydW5Db2RlKHJ1bGUpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBbaW5wdXQsIGNvZGVdID0gcnVsZS5zcGxpdCgnLmpzOicpXFxuICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxuICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHJ1bGUgfVxcbn1cXG5mdW5jdGlvbiBnZW5FeFVybCh1cmwpIHtcXG4gICAgdXJsID0gdXJsLnNwbGl0KCc7JylcXG4gICAgcmV0dXJuIHVybC5zaGlmdCgpICsgJzsnICsgcGFyYW1IYW5kbGUodXJsLCB0aGlzUlVMRS51YSwgTVlfUlVMRS51cmwpXFxufVxcbi8vIOato+aWh+ino+aekFxcbmlmIChNWV9SVUxFLmZpbmRfcnVsZS5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICBzZXRSZXN1bHQgPSBmdW5jdGlvbihlbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMykge1xcbiAgICAgICAgcGFyYW0xID0gQ0FMTEJBQ0tfS0VZXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFXFxuICAgICAgICBwYXJhbTMgPSBNWV9UWVBFXFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbC5kYXRhKSkgZWwgPSBlbC5kYXRhXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShteUNvbGxlY3Rpb25fZWwsIGVsLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgIGlmKCF2LmV4dHJhKSB2LmV4dHJhID0ge31cXG4gICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgbGV0IE1ZX19SVUxFID0gT2JqZWN0LmFzc2lnbihnZW5NeVJ1bGUoKSwgeyBwYXJhbXM6IHYuZXh0cmEgfSlcXG5cXG4gICAgICAgICAgICBpZiAoIXYudXJsIHx8IFsncnVsZScsICdwaWNzJywgJ3RvYXN0JywgJ2lucHV0JywgJ2NvbmZpcm0nLCAnY29weScsICdlZGl0RmlsZScsICd4NScsICd4NVdlYlZpZXcnLCAneDVQbGF5JywgJ3dlYicsICdzZWxlY3QnLCAneDVSdWxlJywgJ3dlYlJ1bGUnLCAnZG93bmxvYWQnLCAnc2hhcmUnXS5maW5kKCh2dikgPT4gdi51cmwuc3RhcnRzV2l0aCh2diArICc6Ly8nKSkgfHwgWyd4NV93ZWJ2aWV3X3NpbmdsZScsICdpbnB1dCddLmZpbmQoKHZ2KSA9PiB2LmNvbF90eXBlID09IHZ2KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BydWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBbXywgdXJsLCBydWxlXSA9IHYudXJsLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KUBydWxlPShbXFxcXHNcXFxcU10qKSQvKVxcbiAgICAgICAgICAgICAgICB2LnVybCA9IHVybFxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gcnVsZVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfY29sX3R5cGUgPSBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfSBlbHNlIGlmICh2LnVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKHYudXJsLmluY2x1ZGVzKCdydWxlPScpIHx8IHYuZXh0cmEucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgIGxldCBbXywgcGF0aCwgZmxhZywgcGFyYW1zXSA9IHYudXJsLm1hdGNoKC9eaGlrZXI6XFxcXC9cXFxcL3BhZ2VcXFxcLyguKz8pKCMuKj8pPyg/OlxcXFw/KC4qKSk/JC8pLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViUGFnZSA9IE1ZX1JVTEUucGFnZUxpc3QuZmluZCgodikgPT4gdi5wYXRoID09IHBhdGgpLFxcbiAgICAgICAgICAgICAgICAgICAgc3ViVXJsID0gKHBhcmFtcyB8fCAnJykuc3BsaXQoJyYnKS5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3VybD0nKSlcXG4gICAgICAgICAgICAgICAgdi51cmwgPSAoc3ViVXJsID8gc3ViVXJsLnNsaWNlKDQpLnJlcGxhY2UoL++8n++8ny9nLCAnPycpLnJlcGxhY2UoL++8hu+8hi9nLCAnJicpIDogKHYuZXh0cmEgfHwge30pLnVybCkgfHwgJ2hpa2VyOi8vZW1wdHknICsgZmxhZyArICc/JyArIChwYXJhbXMgfHwgJycpXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9maW5kX3J1bGUgPSBzdWJQYWdlLnJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gc3ViUGFnZS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuaW5jbHVkZXMoJ0BsYXp5UnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgcmVJbmRleCA9IHYudXJsLmluZGV4T2YoJy5qczonKVxcbiAgICAgICAgICAgICAgICBpZiAocmVJbmRleCA+PSAwKSB2LnVybCA9IHYudXJsLnNsaWNlKDAsIHJlSW5kZXgpICsgJy5qczpcXFxcbmlmKE1ZX1JVTEUpT2JqZWN0LmFzc2lnbihNWV9SVUxFLCAnICsgYXNzaWduTGF6eVJ1bGUgKyAnKTsnICsgdi51cmwuc2xpY2UocmVJbmRleCArIDQpXFxuICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0luZGV4KSB7XFxuICAgICAgICAgICAgICAgIGlmICghTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlIHx8IC9oaWtlcjpcXFxcL1xcXFwvKD8hZW1wdHkuKyQpLy50ZXN0KHYudXJsKSkgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2LmV4dHJhID0gT2JqZWN0LmFzc2lnbih7fSwgdi5leHRyYSwge1xcbiAgICAgICAgICAgICAgICB1cmw6IGdlbkV4VXJsKHYudXJsKSxcXG4gICAgICAgICAgICAgICAgUlVMRTogTVlfX1JVTEUsXFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiB2LnRpdGxlXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB2LnVybCA9ICdoaWtlcjovL3BhZ2UvZnJhbWVMb2FkP3J1bGU9JyArIFFJTkdfVElUTEVcXG4gICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgfSkpXFxuICAgICAgICBtZXRob2Rfc2V0UmVzdWx0Lmludm9rZShqYXZhQ29udGV4dCwgbXlDb2xsZWN0aW9uX2VsLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKVxcbiAgICB9XFxuICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxuXFxuICAgIGV2YWwoTVlfUlVMRS5maW5kX3J1bGUuc2xpY2UoMykpXFxufSBlbHNlIHtcXG4gICAgbGV0IFtfLCBmaW5kUnVsZSwgZGV0YWlsRmluZFJ1bGVdID0gTVlfUlVMRS5maW5kX3J1bGUubWF0Y2goL14oW1xcXFxzXFxcXFNdKj8pKD86PT0+KFtcXFxcc1xcXFxTXSopKT8kLylcXG4gICAgZmluZFJ1bGUgPSBmaW5kUnVsZS5zcGxpdCgnOycpXFxuICAgIHBhcnNlRG9tRm9yQXJyYXkoZ2V0UmVzQ29kZSgpLCBmaW5kUnVsZS5zaGlmdCgpKS5mb3JFYWNoKChkYXRhKSA9PiB7XFxuICAgICAgICBsZXQgW3RpdGxlLCBpbWcsIGRlc2MsIHVybF0gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ID09ICcqJykgcmV0dXJuICcnXFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHYgPSAoaSA9PSAxIHx8IGkgPT0gMykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tKGRhdGEsIHYpIDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDMpIHYgPSBydW5Db2RlKHYpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgcmVzID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLCBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IE1ZX1JVTEUuY29sX3R5cGVcXG4gICAgICAgICAgICB9XFxuICAgICAgICBpZiAocmVzLnVybCkge1xcbiAgICAgICAgICAgIGlmIChyZXMudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlSW5kZXggPSByZXMudXJsLmluZGV4T2YoJy5qczonKVxcbiAgICAgICAgICAgICAgICBpZiAocmVJbmRleCA+PSAwKSByZXMudXJsID0gcmVzLnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwgJyArIGFzc2lnbkxhenlSdWxlICsgJyk7JyArIHJlcy51cmwuc2xpY2UocmVJbmRleCArIDQpXFxuICAgICAgICAgICAgfSBlbHNlICBpZiAoZGV0YWlsRmluZFJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRTogT2JqZWN0LmFzc2lnbihnZW5NeVJ1bGUoKSwgeyBkZXRhaWxfZmluZF9ydWxlOiBkZXRhaWxGaW5kUnVsZSB9KSxcXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogaXNJbmRleCAmJiB0aXRsZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlcy51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChNWV9SVUxFLmRldGFpbF9maW5kX3J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmVzLmV4dHJhID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh1cmwpLFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRTogZ2VuTXlSdWxlKCksXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdGl0bGVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIG15Q29sbGVjdGlvbl9lbC5wdXNoKHJlcylcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KG15Q29sbGVjdGlvbl9lbClcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlbDmja7ovb3lhaVcIixcInBhdGhcIjpcImRhdGFMb2FkXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSBmdW5jdGlvbihzaG93QWxsKSB7XFxuICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJyksXFxuICAgICAgICBkYXRhID0gW11cXG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcXG4gICAgICAgIC8vIOWmguaenOS4uuacrOWcsOaWh+S7tuWImeS4jei/m+ihjOe8k+WtmFxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgb3JpRGF0YSA9IGZldGNoKHVybClcXG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSlcXG4gICAgICAgICAgICAgICAgb3JpRGF0YSA9IEpTT04ucGFyc2Uob3JpRGF0YSkucnVsZVxcbiAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKG9yaURhdGEpXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g6I635Y+W6L+c56iL5pWw5o2u77yM5qOA5p+l6Ze06ZqU6buY6K6k5LiA5aSpXFxuICAgICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludChyZWFkRmlsZSgndXBkYXRlSW50ZXJ2YWwnKSB8fCAnMScpLFxcbiAgICAgICAgICAgIG9sZERhdGEgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9saWJzLycgKyBtZDUodXJsKSArICcuanMnKSxcXG4gICAgICAgICAgICByZW1vdGVEYXRhID0gW11cXG4gICAgICAgIGlmKGludGVydmFsID09IDApIGludGVydmFsID0gLTFcXG4gICAgICAgIHRyeSB7IHJlbW90ZURhdGEgPSBKU09OLnBhcnNlKGZldGNoQ2FjaGUodXJsLCAyNCAqIGludGVydmFsLCB7dGltZW91dDo1MDAwMH0pKSB9IGNhdGNoKGUpIHt9XFxuICAgICAgICBpZighQXJyYXkuaXNBcnJheShyZW1vdGVEYXRhKSkgcmVtb3RlRGF0YSA9IFtdXFxuICAgICAgICBpZiAocmVtb3RlRGF0YS5sZW5ndGggPCAzKSB7XFxuICAgICAgICAgICAgbG9nKCfmnKrojrflj5bliLDmlbDmja4nKVxcbiAgICAgICAgICAgIGlmIChvbGREYXRhKSB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJywgb2xkRGF0YSlcXG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShvbGREYXRhIHx8ICdbXScpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxvZygn5bey6I635Y+W5Yiw5pWw5o2uJylcXG4gICAgICAgICAgICBkYXRhID0gcmVtb3RlRGF0YVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigodikgPT4geyByZXR1cm4gdi50aXRsZSAhPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJykgJiYgISh2LmF1dGhvciB8fCAnJykuaW5jbHVkZXMoJ+i9u+WQiOmbhueUn+aIkOWZqCcpIH0pXFxuICAgIGlmIChyZWFkRmlsZSgnZGlzYWJsZUN1c3RvbScpKSByZXR1cm4gZGF0YVxcbiAgICBlbHNlIHsgLy8g5YaZ5YWl6Ieq5a6a5LmJ5pWw5o2uXFxuICAgICAgICBsZXQgY3VzdG9tRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2N1c3RvbURhdGEnKSB8fCAnW10nKSxcXG4gICAgICAgICAgICByZXdyaXRlRGF0YSA9IFtdXFxuICAgICAgICBjdXN0b21EYXRhID0gY3VzdG9tRGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgodnYpID0+IHYudGl0bGUgPT0gdnYudGl0bGUpXFxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcXG4gICAgICAgICAgICAgICAgc2VsZi5wdXNoKHYpXFxuICAgICAgICAgICAgICAgIGxldCBydWxlID0gZGF0YS5zcGxpY2UoaW5kZXgsIDEpWzBdXFxuICAgICAgICAgICAgICAgIGlmIChzaG93QWxsIHx8IHYudmlzaWJsZSlcXG4gICAgICAgICAgICAgICAgICAgIHJld3JpdGVEYXRhLnB1c2goT2JqZWN0LmFzc2lnbihydWxlLCB2KSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHNlbGZcXG4gICAgICAgIH0sIFtdKVxcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2KSA9PiBjdXN0b21EYXRhLnB1c2goeyB0aXRsZTogdi50aXRsZSwgdmlzaWJsZTogdHJ1ZSB9KSlcXG4gICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkoY3VzdG9tRGF0YSkpXFxuICAgICAgICByZXR1cm4gcmV3cml0ZURhdGEuY29uY2F0KGRhdGEpXFxuICAgIH1cXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbDph43lhplcIixcInBhdGhcIjpcInByZUZ1bmNcIixcInJ1bGVcIjpcIi8vIOmYsuatonJlcXVpcmXlpJrmrKHov5DooYxcXG5sZXQgckNhY2hlID0ge31cXG5yZXF1aXJlID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpIHtcXG4gICAgaWYgKCFwYXJhbTAgfHwgckNhY2hlW3BhcmFtMF0gIT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuXFxuICAgIH1cXG4gICAgckNhY2hlW3BhcmFtMF0gPSAxXFxuICAgIHBhcmFtMiA9IHBhcmFtMiB8fCAwXFxuICAgIHBhcmFtMyA9IE1ZX1RJQ0tFVFxcbiAgICBwYXJhbTQgPSBldmFsXFxuICAgIHJldHVybiBtZXRob2RfcmVxdWlyZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KVxcbn1cXG5yZXF1aXJlQ2FjaGUgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KSB7XFxuICAgIGlmICghcGFyYW0wIHx8IHJDYWNoZVtwYXJhbTBdICE9IG51bGwpIHtcXG4gICAgICAgIHJldHVyblxcbiAgICB9XFxuICAgIHJDYWNoZVtwYXJhbTBdID0gMVxcbiAgICBwYXJhbTMgPSBwYXJhbTMgfHwgMFxcbiAgICBwYXJhbTQgPSBNWV9USUNLRVRcXG4gICAgcGFyYW01ID0gZXZhbFxcbiAgICByZXR1cm4gbWV0aG9kX3JlcXVpcmVDYWNoZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUpXFxufVxcbnJjID0gcmVxdWlyZUNhY2hlXFxuXFxuLy8g5pyA5paw56ug6IqC6KeE5YiZ5rOo5YWl6aKE5aSE55CG5Luj56CBXFxuc2V0TGFzdENoYXB0ZXJSdWxlID0gZnVuY3Rpb24ocGFyYW0wKSB7XFxuICAgIGlmICghcGFyYW0wKSByZXR1cm5cXG4gICAgaWYgKHBhcmFtMC5zdGFydHNXaXRoKFxcXCJqczpcXFwiKSAmJiB0aGlzUlVMRS5wcmVSdWxlKSB7XFxuICAgICAgICBwYXJhbTAgPSAnanM6XFxcXG50cnl7ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvcHJlRnVuYz9ydWxlPScgKyBRSU5HX1RJVExFICsgJ1xcXCIpKS5ydWxlKTtcXFxcXFxuICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoXFxcIicgKyBiYXNlNjRFbmNvZGUodGhpc1JVTEUucHJlUnVsZSkgKyAnXFxcIikpO1xcXFxcXG4gICAgICAgICAgICBsZXQgX2NmZyA9IGdldE15VmFyKFxcXCJpbml0Q29uZmlnXFxcIiwgXFxcInt9XFxcIik7XFxcXFxcbiAgICAgICAgICAgIGlmIChfY2ZnICYmIF9jZmcubGVuZ3RoPjApIHtjb25maWcgPSBKU09OLnBhcnNlKF9jZmcpfX1jYXRjaChlKXtsb2coZS5tZXNzYWdlKX1cXFxcbjsnICtcXG4gICAgICAgICAgICBwYXJhbTAuc2xpY2UoMylcXG4gICAgfVxcbiAgICBtZXRob2Rfc2V0TGFzdENoYXB0ZXJSdWxlLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wKTtcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpk77mjqXlpITnkIZcIixcInBhdGhcIjpcInVybFBhcnNlXCIsXCJydWxlXCI6XCIvLyDpppbpobXpk77mjqXmm7/mjaLliIbnsbtcXG5mdW5jdGlvbiBpbmRleFVybChwYXJhbSkge1xcbiAgICBmdW5jdGlvbiBydW5Db2RlKHJ1bGUpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IFtpbnB1dCwgY29kZV0gPSBydWxlLnNwbGl0KCcuanM6JylcXG4gICAgICAgICAgICByZXR1cm4gY29kZSA/IGV2YWwoY29kZSkgOiBydWxlXFxuICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG4gICAgfVxcbiAgICBsZXQgeyBSVUxFLCBwYWdlTnVtLCBRSU5HX1RJVExFIH0gPSBKU09OLnBhcnNlKHBhcmFtLnNwbGl0KCcjIyMnKVsxXSlcXG4gICAgUlVMRSA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKFJVTEUpKVxcbiAgICBwYWdlTnVtID0gcGFyc2VJbnQocGFnZU51bSlcXG4gICAgbGV0IHVybCA9IFJVTEUudXJsXFxuXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICB1cmwgPSB0YWJIZWFkZXIuc2V0VXJsKGZ5QWxsID8gdXJsLnJlcGxhY2UoL2Z5QWxsL2csICckJHtmeUFsbH0nKSA6IHVybC5yZXBsYWNlKC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZywgJyQke2Z5JDF9JykpXFxuICAgIHVybCA9IHVybC5yZXBsYWNlKC9meXBhZ2UoPzpAKC0/XFxcXGQrKUApPyg/OlxcXFwqKFxcXFxkKylAKT8vZywgKF8sIHN0YXJ0LCBzcGFjZSkgPT4gcGFyc2VJbnQoc3RhcnQgfHwgMCkgKyAxICsgKHBhZ2VOdW0gLSAxKSAqIHBhcnNlSW50KHNwYWNlIHx8IDEpKVxcbiAgICB1cmwgPSAvXihbXFxcXHNcXFxcU10qPykoPzpcXFxcW2ZpcnN0UGFnZT0oW1xcXFxzXFxcXFNdKj8pXFxcXF0pPyg/OihcXFxcLmpzOltcXFxcc1xcXFxTXSo/KSk/JC8uZXhlYyh1cmwpXFxuICAgIGlmIChwYWdlTnVtID09IDEgJiYgdXJsWzJdKSB1cmxbMV0gPSB1cmxbMl1cXG4gICAgaWYgKHVybFszXSAmJiAhdXJsWzFdLmluY2x1ZGVzKCcuanM6JykpIHVybFsxXSArPSB1cmxbM11cXG4gICAgcmV0dXJuIHJ1bkNvZGUodXJsWzFdKVxcbn1cXG4vLyDpk77mjqXlj4LmlbDlpITnkIZcXG5mdW5jdGlvbiBwYXJhbUhhbmRsZSh1cmxQYXJhbSwgdWEsIHVybFRtcCkge1xcbiAgICBsZXQgY2hhcnNldCwgVXNlckFnZW50XFxuICAgIHRyeSB7IC8vIOmTvuaOpeeahOe8lueggeWSjHVh5bqU6K+l5piv6aaW5YWI57un5om/6aaW6aG16ZO+5o6lXFxuICAgICAgICBbLCAsIGNoYXJzZXQsIFVzZXJBZ2VudF0gPSB1cmxUbXAuc3BsaXQoJzsnKVxcbiAgICAgICAgVXNlckFnZW50ID0gVXNlckFnZW50Lm1hdGNoKC9eeyguKil9JC8pWzFdLnNwbGl0KCcmJicpLmZpbmQoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSlcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdXJsUGFyYW1bMF0gPSB1cmxQYXJhbVswXSB8fCAnR0VUJ1xcbiAgICB1cmxQYXJhbVsxXSA9IHVybFBhcmFtWzFdIHx8IGNoYXJzZXQgfHwgJ1VURi04J1xcbiAgICB0cnkge1xcbiAgICAgICAgdXJsUGFyYW1bMl0gPSB1cmxQYXJhbVsyXS5tYXRjaCgvXnsoLiopfSQvKVsxXS5zcGxpdCgnJiYnKVxcbiAgICB9IGNhdGNoIChlKSB7IHVybFBhcmFtWzJdID0gW10gfVxcbiAgICAvLyDmt7vliqDlhajlsYBVQVxcbiAgICBpZiAoIXVybFBhcmFtWzJdLnNvbWUoKHYpID0+IHYuc3RhcnRzV2l0aCgnVXNlci1BZ2VudEAnKSkpIHtcXG4gICAgICAgIGlmIChVc2VyQWdlbnQpIHVybFBhcmFtWzJdLnB1c2goVXNlckFnZW50KVxcbiAgICAgICAgZWxzZSBpZiAodWEgPT0gJ3BjJylcXG4gICAgICAgICAgICB1cmxQYXJhbVsyXS5wdXNoKCdVc2VyLUFnZW50QCcgKyBQQ19VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgICAgIGVsc2UgaWYgKHVhID09ICdtb2JpbGUnKVxcbiAgICAgICAgICAgIHVybFBhcmFtWzJdLnB1c2goJ1VzZXItQWdlbnRAJyArIE1PQklMRV9VQS5yZXBsYWNlKC87L2csICfvvJvvvJsnKS5yZXBsYWNlKC9cXFxcPy8sICfvvJ/vvJ8nKSlcXG4gICAgfVxcbiAgICB1cmxQYXJhbVsyXSA9ICd7JyArIHVybFBhcmFtWzJdLmpvaW4oJyYmJykgKyAnfSdcXG4gICAgcmV0dXJuIHVybFBhcmFtLmpvaW4oJzsnKVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkNTU+mAieaLqeWZqOaooeeJiFwiLFwicGF0aFwiOlwiZWp3Yi5qc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24g5LiA57qnKOWIl+ihqCwg5qCH6aKYLCDlm77niYcsIOmbhuaVsCwg6ZO+5o6lLCDorr/pl67lpLQpIHtcXG4gICAg6K6/6Zeu5aS0ID0gIeiuv+mXruWktCA/ICcnIDog6K6/6Zeu5aS0XFxuICAgIHZhciBkID0gW107XFxuICAgIHZhciBjb2RlID0gZ2V0Q29kZSgpXFxuICAgIHBkZmEoY29kZSwg5YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoZGF0YSwg5qCH6aKYKSxcXG4gICAgICAgICAgICBkZXNjOiBwZGZoKGRhdGEsIOmbhuaVsCksXFxuICAgICAgICAgICAgcGljX3VybDogcGQoZGF0YSwg5Zu+54mHKSArIFxcXCJAUmVmZXJlcj1cXFwiICsg6K6/6Zeu5aS0LFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkjaW1tZXJzaXZlVGhlbWUjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiLFxcbmV4dHJhOiB7XFxuICAgICAgICAgICAgbmFtZTogcGRmaChkYXRhLCDmoIfpopgpLFxcbiAgICAgICAgICAgIHVybDogcGQoZGF0YSwg6ZO+5o6lKSxcXG4gICAgICAgICAgICBxejogTVlfSE9NRVxcbiAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcblxcblxcblxcbmZ1bmN0aW9uIOaQnOe0oijliJfooagsIOagh+mimCwg6ZO+5o6lLCDmj4/ov7AsIOivpuaDhSwg5Zu+54mHLCDorr/pl67lpLQpIHtcXG4gICAgdmFyIGQgPSBbXTtcXG4gICAg6K6/6Zeu5aS0ID0gIeiuv+mXruWktCA/ICcnIDog6K6/6Zeu5aS0XFxuICAgIHBkZmEoZ2V0UmVzQ29kZSgpLCDliJfooagpLmZvckVhY2goZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLCDmoIfpopgpLFxcbiAgICAgICAgICAgIGRlc2M6IHBkZmgoZGF0YSwg5o+P6L+wKSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBwZChkYXRhLCDlm77niYcpICsgXFxcIkBSZWZlcmVyPVxcXCIgKyDorr/pl67lpLQsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSNpbW1lcnNpdmVUaGVtZSMnLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBkZmgoZGF0YSwg6K+m5oOFKSxcXG5cXG5leHRyYToge1xcbiAgICAgICAgICAgIG5hbWU6IHBkZmgoZGF0YSwg5qCH6aKYKSxcXG4gICAgICAgICAgICB1cmw6IHBkKGRhdGEsIOmTvuaOpSksXFxuICAgICAgICAgICAgcXo6IE1ZX0hPTUVcXG4gICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiDmnIDmlrAo6YCJ5oup5ZmoLCBVQSkge1xcbiAgICBpZiAoVUEgPT0gXFxcIlBDXFxcIikge1xcbiAgICAgICAgdmFyIGNvZGUgPSBmZXRjaChnZXRQYXJhbSgndXJsJykucmVwbGFjZShcXFwibS5cXFwiLCBcXFwid3d3LlxcXCIpKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHZhciBjb2RlID0gcmVxdWVzdChnZXRQYXJhbSgndXJsJykucmVwbGFjZShcXFwid3d3LlxcXCIsIFxcXCJtLlxcXCIpKTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQocGRmaChjb2RlLCDpgInmi6nlmagpKVxcbn1cXG5cXG5cXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9wYWdlL3FzP3J1bGU96IGa5ryr8J+UrlxcXCIpKS5ydWxlKVxcblxcbmZ1bmN0aW9uIOS6jOe6pyjlpLTpg6jliJfooagsIOagh+mimCwg5Zu+54mHLCDmj4/ov7AsIOiuv+mXruWktCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuywg566A5LuLLCDlpJrot6/nur/lkKYsIOi3r+e6v+WIl+ihqCwg6Lev57q/5ZCNLCDpgInpm4bmgLvliJfooagsIOmAiembhuWIl+ihqCwg6ZuG5ZCNLCDpm4Z1cmwsIOa8q+eUu+ino+aekCzlvZPliY1VUkws5b2T5YmN6aG15ZCNLOWJjee8gCxVQSzpmLLph43ovb3lkKYpIHtcXG4gICAgdmFyIGQgPSBbXTtcXG5cXG4vL+WktOmDqOWIl+ihqCAg5YiZ6buY6K6k5L2/55SoIGNvZGUg5p2l5L2c5Li65aS06YOo5YiX6KGo5pWw5o2uXFxuLy/lpJrot6/nur/lkKYgIHRydWUg5YiZ5L2/55So5aSa6Lev57q/77ybZmFsc2Ug5YiZ5L2/55So56ug6Lev57q/XFxuLy9VQSAg5LiN5aGr5YiZ5L2/55So5omL5py656uvICAnUEMn5YiZ5omL5py656uvXFxuXFxuaWYgKOW9k+WJjemhteWQjSkge1xcbiAgICBzZXRQYWdlVGl0bGUo5b2T5YmN6aG15ZCNKVxcbn1cXG5cXG5pZijpmLLph43ovb3lkKYpe1xcbi8v572R6aG15YaF5a65K+mYsuatoumHjeaLiVxcbiAgICB2YXIgY29kZSA9IOa3u+WKoOmYsuatoue9kemhtSjlvZPliY1VUkwsIFVBKVxcbn1lbHNle1xcbiAgICB2YXIgY29kZSA9IGdldENvZGUoKVxcbn1cXG4gICAgXFxuXFxuICAgIC8v5aS06YOo5YiX6KGo5pWw5o2uXFxuICAgIHZhciDlpLTpg6ggPSAh5aS06YOo5YiX6KGoID8gY29kZSA6IHBkZmEoY29kZSwg5aS06YOo5YiX6KGoKVswXTtcXG4gICAg5qCH6aKYID0gcGRmaCjlpLTpg6gsIOagh+mimClcXG4gICAg5Zu+54mHID0gcGRmaCjlpLTpg6gsIOWbvueJhylcXG4gICAgaWYgKOWbvueJhykge1xcbiAgICAgICAg5Zu+54mHID0g5Zu+54mHLmluY2x1ZGVzKCdodHRwJykgPyDlm77niYcgOiDliY3nvIAgKyDlm77niYdcXG4gICAgICAgIGlmICgh6K6/6Zeu5aS0KSB7fSBlbHNlIGlmICjorr/pl67lpLQuc3Vic3RyKDAsIDEpID09ICdAJykge1xcbiAgICAgICAgICAgIOWbvueJhyA9IOWbvueJhyArIOiuv+mXruWktFxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICDlm77niYcgPSDlm77niYcgKyBcXFwiQFJlZmVyZXI9XFxcIiArIOiuv+mXruWktFxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIFxcbuaPj+i/sCA9IOaPj+i/sC5pbmNsdWRlcygnJCcpID8g5o+P6L+wLnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5o+P6L+wLnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOaPj+i/sClcXG5cXG7kvZzogIUgPSDkvZzogIUuaW5jbHVkZXMoJyQnKSA/IOS9nOiAhS5zcGxpdCgnJCcpWzFdICsgcGRmaCjlpLTpg6gsIOS9nOiAhS5zcGxpdCgnJCcpWzBdKSA6IHBkZmgo5aS06YOoLCDkvZzogIUpXFxuICAgIFxcbuaXtumXtCA9IOaXtumXtC5pbmNsdWRlcygnJCcpID8g5pe26Ze0LnNwbGl0KCckJylbMV0gKyBwZGZoKOWktOmDqCwg5pe26Ze0LnNwbGl0KCckJylbMF0pIDogcGRmaCjlpLTpg6gsIOaXtumXtClcXG5cXG7liIbnsbsgPSDliIbnsbsuaW5jbHVkZXMoJyQnKSA/IOWIhuexuy5zcGxpdCgnJCcpWzFdICsgcGRmaCjlpLTpg6gsIOWIhuexuy5zcGxpdCgnJCcpWzBdKSA6IHBkZmgo5aS06YOoLCDliIbnsbspXFxuXFxuICAgIFxcbiAgICAvL+WktOmDqOWIl+ihqFxcbiAgICDmt7vliqDlpLTpg6jliJfooagoZCwg5qCH6aKYLCDlm77niYcsIOaPj+i/sCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuyzlvZPliY1VUkwpXFxuICAgIFxcbiAgICAvL+i3r+e6v+WQjeS4jumAiembhuaVsOaNrlxcbiAgICB2YXIg56ug6IqCanNvbiA9IOS8mOWMlui3r+e6v+eroOiKguaVsOaNrijlpJrot6/nur/lkKYsIGNvZGUsIOi3r+e6v+WIl+ihqCzot6/nur/lkI0s6YCJ6ZuG5oC75YiX6KGoLOmAiembhuWIl+ihqCzpm4blkI0s6ZuGdXJsLOWJjee8gCzlvZPliY3pobXlkI0s5Zu+54mHKVxcblxcbiAgICAvL+eugOS7i1xcbiAgICDmt7vliqDnroDku4soZCwgcGRmaChjb2RlLCDnroDku4spLCDlvZPliY1VUkwsICcnKVxcblxcbiAgIC8v5b2T5rKh5pyJ56ug6IqC5YaF5a6577yM5bCx5LiN5pi+56S6XFxuICAgIGlmICjnq6DoioJqc29uLmxlbmd0aCA+IDApIHtcXG5cXG4gICAgICAgIC8v6Lev57q/6YCJ5oupXFxuICAgICAgICB2YXIg6YCJ5oup5YiX6KGoID0g5re75Yqg6YCJ5oup6Lev57q/KGQsIOeroOiKgmpzb24sIOW9k+WJjVVSTCwg5aSa6Lev57q/5ZCmKVxcblxcbiAgICAgICAgLy/pgInmi6nkuIvovb1cXG4gICAgICAgIOa3u+WKoOmAieaLqeS4i+i9vShkLCDnq6DoioJqc29uLOWkmui3r+e6v+WQpilcXG5cXG4gICAgICAgIC8v5o6S5bqP5LiO6YCJ6ZuGXFxuICAgICAgICB2YXIgbGF6eSA9IGBAbGF6eVJ1bGU9LmpzOmAgKyDmvKvnlLvop6PmnpA7XFxuICAgICAgICDmt7vliqDliJfooajnq6DoioIoZCwg56ug6IqCanNvblvpgInmi6nliJfooahdLnRpdGxlLCDnq6DoioJqc29uW+mAieaLqeWIl+ihqF0ubGlzdCwgbGF6eSwg5b2T5YmNVVJMLCAnJylcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZClcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmqKHmnb/kuIBcIixcInBhdGhcIjpcImNvbWljRnVuY3Rpb25GaWxlLmpzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjb3Zlcihjb3ZlclRpdGxlLCBjb3ZlclRpdGxlMSwgY292ZXJUaXRsZTIsIGNvdmVyVGl0bGUzLCBjb3ZlckRlc2MsIGNvdmVyUGljLCBjb3ZlclVybCwgaGFzTGluZSkge1xcbiAgICB0cnkge1xcbiAgICAgICAgY29uc3QgQ29sb3IgPSBcXFwiIzE5Qjg5RFxcXCI7XFxuICAgIFxcdHZhciBkZXNfZGVzYyA9IHBkZmgoaHRtbCwgY292ZXJEZXNjKS5yZXBsYWNlKCfnroDjgIDjgIDku4vvvJonLCcnKS5yZXBsYWNlKCfmvKvnlLvnroDku4vvvJonLCcnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Pjxmb250IGNvbG9yPVxcXCIjRkE3Mjk4XFxcIj4nICsgcGRmaChodG1sLCBjb3ZlclRpdGxlKSArICdcXFxcbicgKyAn4oCY4oCY4oCZ4oCZPD48Zm9udCBjb2xvcj1cXFwiIzczNDMzOFxcXCI+JyArICBwZGZoKGh0bWwsIGNvdmVyVGl0bGUxKSsgJ1xcXFxuJyxcXG4gICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPD48Zm9udCBjb2xvcj1cXFwiIzk1NEE0NVxcXCI+JyArIHBkZmgoaHRtbCwgY292ZXJUaXRsZTIpICsgJ1xcXFxuJyArICfigJjigJjigJnigJk8Pjxmb250IGNvbG9yPVxcXCIjOTU0QTQ1XFxcIj4nICsgcGRmaChodG1sLCBjb3ZlclRpdGxlMyksXFxuICAgICAgICAgICAgcGljX3VybDogcGQoaHRtbCwgY292ZXJQaWMpLFxcbiAgICAgICAgICAgIHVybDogY292ZXJVcmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goeyAgICAgXFxuICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgfSk7XFxuICAgIC8vdmFyIGpqID0gZ2V0VmFyKFxcXCJqanNcXFwiLCBcXFwi5pS26LW3XFxcIik7XFxuLy92YXIgamp1cmwgPSAnaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6Z2V0VmFyKFxcXCJqanNcXFwiKSA9PSBcXFwi5pS26LW3XFxcIj9wdXRWYXIoXFxcImpqc1xcXCIsXFxcIuWxleW8gFxcXCIpOnB1dFZhcihcXFwiampzXFxcIixcXFwi5pS26LW3XFxcIik7XFxcImhpa2VyOi8vZW1wdHlcXFwiJztcXG5kLnB1c2goe1xcbiAgdGl0bGU6ICfnroDku4sgPHNtYWxsPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzE5Qjg5RFxcXCI+5bGV5byAPjwvc3Bhbj48L3NtYWxsPjwvc21hbGw+JyxcXG4gIGltZzogXFxcImh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9tb3JlLzE5Ny5wbmdcXFwiLFxcbiAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChqamlkLGRlY2lkLGRlc19kZXNjKSA9PiB7XFxuXFx0ICBpZihnZXRWYXIoXFxcImpqc1xcXCIsXFxcIuaUtui1t1xcXCIpID09IFxcXCLmlLbotbdcXFwiKXtcXG5cXHQgICAgcHV0VmFyKFxcXCJqanNcXFwiLFxcXCLlsZXlvIBcXFwiKTtcXG5cXG5cXHRcXHQgdXBkYXRlSXRlbSh7XFxuXFx0ICAgICAgZXh0cmE6IHsgaWQ6IGpqaWQgfSxcXG5cXHQgICAgICB0aXRsZTogJ+eugOS7iyA8c21hbGw+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMTlCODlEXFxcIj7mlLbotbc+PC9zcGFuPjwvc21hbGw+PC9zbWFsbD4nXFxuXFx0XFx0ICB9KVxcblxcblxcdFxcdHVwZGF0ZUl0ZW0oe1xcblxcdCAgICAgIGV4dHJhOiB7IHRleHRTaXplOiAxNCxsaW5lU3BhY2luZzogMyxpZDogZGVjaWQgfSxcXG5cXHQgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojODA4MDgwXFxcIj4nICsgZGVzX2Rlc2MgKyAnLi4uPC9zcGFuPidcXG5cXHRcXHQgIH0pXFxuXFx0XFx0ICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFx0XFx0XFxuXFx0ICB9ZWxzZXtcXG5cXHQgICAgcHV0VmFyKFxcXCJqanNcXFwiLFxcXCLmlLbotbdcXFwiKTtcXG5cXG5cXHRcXHR1cGRhdGVJdGVtKHtcXG5cXHQgICAgICBleHRyYTogeyBpZDogamppZCB9LFxcblxcdCAgICAgIHRpdGxlOiAn566A5LuLIDxzbWFsbD48c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMxOUI4OURcXFwiPuWxleW8gD48L3NwYW4+PC9zbWFsbD48L3NtYWxsPidcXG5cXHRcXHQgIH0pXFxuXFxuXFx0XFx0dXBkYXRlSXRlbSh7XFxuXFx0ICAgICAgZXh0cmE6IHsgdGV4dFNpemU6IDE0LGxpbmVTcGFjaW5nOiAzLGlkOiBkZWNpZCB9LFxcblxcdCAgICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiM4MDgwODBcXFwiPicgKyBkZXNfZGVzYy5zdWJzdHIoMCwgMzApICsgJy4uLjwvc3Bhbj4nXFxuXFx0XFx0ICB9KVxcblxcdFxcdCAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcdFxcblxcdCAgfVxcblxcdFxcblxcdH0sIE1ZX1JVTEUgKyBcXFwiX2pqaWRcXFwiLE1ZX1JVTEUgKyBcXFwiX2RlY2lkXFxcIixkZXNfZGVzYyksXFxuXFx0ICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICBleHRyYToge2lkOiBNWV9SVUxFICsgXFxcIl9qamlkXFxcIn1cXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzgwODA4MFxcXCI+JyArIGRlc19kZXNjLnN1YnN0cigwLCAzMCkgKyAnLi4uPC9zcGFuPicsXFxuICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICBleHRyYToge3RleHRTaXplOiAxNCxsaW5lU3BhY2luZzogMyxpZDogTVlfUlVMRSArIFxcXCJfZGVjaWRcXFwifVxcbn0pO1xcbiAgICAgICAgZC5wdXNoKHsgICAgIFxcbiAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgIH0pXFxuICAgICAgICBkLnB1c2goeyAgICAgXFxuICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgfSlcXG4gICAgfSBjYXRjaCAoZSkge31cXG59XFxuZnVuY3Rpb24gY2hhcHRlcihjaGFwdGVyTGlzdCwgY2hhcHRlclRpdGxlLCBjaGFwdGVyVXJsLCBkZWZhdWx0T3JkZXIsIGhhc0xpbmUpIHtcXG4gICAgdmFyIGxpc3QgPSBjaGFwdGVyTGlzdDtcXG4gICAgdmFyIG9yaWdpbmFsID0gW3tcXG4gICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgb3JkZXI6IGRlZmF1bHRPcmRlclxcbiAgICB9XTtcXG4gICAgIWZpbGVFeGlzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSA/ICh3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJywgSlNPTi5zdHJpbmdpZnkob3JpZ2luYWwpKSkgOiAwO1xcbiAgICB2YXIgbG9nID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSk7XFxuICAgIGZvciAodmFyIGkgaW4gbG9nKSB7XFxuICAgICAgICBpZiAobG9nW2ldLnVybCA9PSBNWV9VUkwpIHtcXG4gICAgICAgICAgICB2YXIgbm93ID0gaTtcXG4gICAgICAgICAgICB2YXIgb3JkZXIgPSBsb2dbaV0ub3JkZXI7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBub3cgPSAnJztcXG4gICAgICAgICAgICB2YXIgb3JkZXIgPSBkZWZhdWx0T3JkZXI7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IG9yZGVySXRlbSA9IHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArICc8Zm9udCBjb2xvcj1cXFwiI2YzNzMzNVxcXCI+JyArICfnq6DoioLmjpLluo/ih4UnICsgJzwvZm9udD4nLFxcbiAgICAgICAgdXJsOiBNWV9VUkwgKyBgQGxhenlSdWxlPS5qczp2YXIgbG9nID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnKSk7dmFyIG5vdz0nYCArIG5vdyArIGAnO2lmKG5vdyE9Jycpe3ZhciBub3c9cGFyc2VJbnQobm93KTt2YXIgb3JkZXI9bG9nW25vd10ub3JkZXJ9ZWxzZXt2YXIgbm93PXBhcnNlSW50KGxvZy5sZW5ndGgpO3ZhciBvcmRlcj1gICsgZGVmYXVsdE9yZGVyICsgYDtsb2cucHVzaCh7dXJsOmlucHV0LG9yZGVyOm9yZGVyfSk7fWlmKGxvZ1tub3ddLm9yZGVyKXtsb2dbbm93XS5vcmRlcj0wO31lbHNle2xvZ1tub3ddLm9yZGVyPTE7fTt3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJywgSlNPTi5zdHJpbmdpZnkobG9nKSk7cmVmcmVzaFBhZ2UoKTsnaGlrZXI6Ly9lbXB0eSdgLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICB9XFxuICAgIGlmIChoYXNMaW5lKSB7XFxuICAgICAgICAgIG9yZGVySXRlbS50aXRsZSA9IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxmb250IGNvbG9yPVxcXCIjZjM3MzM1XFxcIj4nICsgJ+mbhuaVsOaOkuW6j+KHhScgKyAnPC9mb250Pic7XFxuICAgICAgICBvcmRlckl0ZW0uY29sX3R5cGUgPSBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSAgIFxcbiAgICBkLnB1c2gob3JkZXJJdGVtKTtcXG4gICAgZC5wdXNoKHsgICAgIFxcbiAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgIH0pO1xcbiAgICBcXG4gICAgdmFyIGxpc3QgPSBvcmRlciA/IGxpc3QgOiBsaXN0LnJldmVyc2UoKTtcXG4gICAgZm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoLTEgOyBpID49IDA7IGktLSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChsaXN0W2ldLCBjaGFwdGVyVGl0bGUpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkKGxpc3RbaV0sIGNoYXB0ZXJVcmwpICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHBkZmgobGlzdFswXSwgY2hhcHRlclRpdGxlKS5sZW5ndGggPiA0PyAndGV4dF8yJyA6ICd0ZXh0XzMnLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfWNhdGNoIChlKSB7fVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGxpbmUobGluZUxpc3QsIGxpbmVUaXRsZVJ1bGUsIHZhcktleSkge1xcbiAgICBsZXQgbGlzdCA9IGxpbmVMaXN0XFxuICAgIHZhcktleSA9IHZhcktleSA9PSBudWxsID8gKE1ZX1JVTEUudXJsICsgJyNsaW5lLWluZGV4Jyk6ICB2YXJLZXk7XFxuICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoa2V5TGlzdCkgPT4ge1xcbiAgICAgICAgZm9yIChsZXQgaSBpbiBrZXlMaXN0KSB7XFxuICAgICAgICAgICAgY2xlYXJWYXIoa2V5TGlzdFtpXSlcXG4gICAgICAgIH1cXG5cXG4gICAgfSwgW3ZhcktleSwgTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZSddKSlcXG4gICAgbGV0IGxpbmUwVGl0bGUgPSAnJ1xcbiAgICB0cnkge1xcbiAgICAgICAgbGluZTBUaXRsZSA9IHBkZmgobGlzdFswXSwgbGluZVRpdGxlUnVsZSk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxvZyhNWV9SVUxFLnRpdGxlICsgZ2V0VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJykpKVxcbiAgICBmb3IgKGxldCBpIGluIGxpc3QpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IGxpbmVUaXRsZSA9IHBkZmgobGlzdFtpXSwgbGluZVRpdGxlUnVsZSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGdldFZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpLCBsaW5lMFRpdGxlKSA9PT0gbGluZVRpdGxlID8gXFxcIuWIh+aNojrigJjigJhcXFwiICsgbGluZVRpdGxlK1xcXCJcXFwiOmxpbmVUaXRsZStcXFwi4oCY4oCYOuWIh+aNolxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh2YXJLZXksIGxpbmVJbmRleCwgbGluZVRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIodmFyS2V5LCBsaW5lSW5kZXgudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZyhNWV9SVUxFLnVybClcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpLCBsaW5lVGl0bGUpXFxuICAgICAgICAgICAgICAgICAgICBsb2coTVlfUlVMRS50aXRsZSArIGdldFZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliIfmjaLoh7NcXFwiICsgbGluZVRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHZhcktleSwgaSwgbGluZVRpdGxlKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgfVxcbn1cXG5cXG4gICAgICAgICAgICAgICAgXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqflt6XlhbdcIixcInBhdGhcIjpcInlqdG9vbFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY29udmVydDEoc3RyKSB7XFxuICAgIGxldCBjID0gc3RyLnNwbGl0KFxcXCI7XFxcIilcXG4gICAgcmV0dXJuIHtcXG4gICAgICAgIOWIl+ihqDogY1swXSxcXG4gICAgICAgIOagh+mimDogY1sxXSxcXG4gICAgICAgIOWbvueJhzogY1syXSxcXG4gICAgICAgIOaPj+i/sDogY1szXSxcXG4gICAgICAgIOmTvuaOpTogY1s0XVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIG1lcmdlKHNvdXJjZSwgdGFyZ2V0KSB7XFxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKVxcbiAgICBmb3IgKGxldCBpIGluIGtleXMpIHtcXG4gICAgICAgIHRhcmdldFtrZXlzW2ldXSA9IHNvdXJjZVtrZXlzW2ldXVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIOS4gOe6pyhvYmopIHtcXG4gICAgdmFyIGQgPSBbXTtcXG4gICAgaWYgKCQudHlwZShvYmopID09IFxcXCJzdHJpbmdcXFwiKSB7XFxuICAgICAgICBvYmogPSBjb252ZXJ0MShvYmopXFxuICAgIH1cXG4gICAgaWYgKG9iai7op4TliJkpIHtcXG4gICAgICAgIGxldCBjID0gY29udmVydDEob2JqLuinhOWImSlcXG4gICAgICAgIG1lcmdlKGMsIG9iailcXG4gICAgfVxcbiAgICBsZXQgYXJyID0gcGRmYShnZXRSZXNDb2RlKCksIG9iai7liJfooagpO1xcbiAgICAgICBpZiAob2JqLuWIl+ihqOWkhOeQhiAhPSBudWxsKSB7XFxuICAgICAgICAgICAgYXJyID0gb2JqLumTvuaOpeWkhOeQhihhcnIpXFxuICAgICAgICB9XFxuICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICAgICAgbGV0IHVybCA9IHBkKGl0LCBvYmou6ZO+5o6lKVxcbiAgICAgICAgaWYgKG9iai7pk77mjqXlpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHVybCA9IG9iai7pk77mjqXlpITnkIYodXJsKVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHBpYyA9IHBkKGl0LCBvYmou5Zu+54mHKVxcbiAgICAgICAgaWYgKG9iai7lm77niYflpITnkIYgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHBpYyA9IG9iai7lm77niYflpITnkIYocGljKVxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdCwgb2JqLuagh+mimCksXFxuICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IG9iai7mj4/ov7AgPyBwZGZoKGl0LCBvYmou5o+P6L+wKSA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IHBpY1xcbiAgICAgICAgfSk7XFxuXFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG52YXIgdG9vbCA9IHtcXG4gICAg5LiA57qnOiDkuIDnuqdcXG59XFxuJC5leHBvcnRzID0gdG9vbFwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Ye95pWw57uE5Lu2XCIsXCJwYXRoXCI6XCJxc1wiLFwicnVsZVwiOlwiZnVuY3Rpb24g5LyY5YyW6Lev57q/56ug6IqC5pWw5o2uKOWkmui3r+e6v+WQpiwg5rqQ5pWw5o2uLCDot6/nur/liJfooagsIOi3r+e6v+WQjSwg6YCJ6ZuG5oC75YiX6KGoLCDpgInpm4bliJfooagsIOmbhuWQjSwg6ZuGdXJsLCDliY3nvIAsIOagh+mimCwg5Zu+54mHKSB7XFxuXFxuICAgIC8v5b2T5aSa6Lev57q/5ZCmIOmAiembhuaAu+WIl+ihqOS4uuepulxcbiAgICAvL+acgOe7iOi/lOWbniBbe3RpdGxlOiAn6Lev57q/5ZCNJyxsaXN0OiBbe3RpdGxlOifpgInpm4blkI0nLHVybDon6YCJ6ZuGdXJsJywuLi59XSxzanNzOifkuIvovb3otYTmlpknfSwuLi4uXVxcbiAgICAvL+mAiembhuWIl+ihqCDnrKzkuIDpobnmmK9jc3PpgInmi6nlmajvvIzkuYvlkI7lj6/ku6XnlKgk5YiG5Ymy5re75Yqg6KaB5Yig6Zmk56ug6IqC5ZCNXFxuXFxuXFxuICAgIHZhciDnq6DoioJqc29uID0gW107XFxuICAgIHZhciDljZXot6/nur/nq6DoioIgPSAn56ug6IqC5YiX6KGoJ1xcblxcbiAgICB2YXIg5YiX6KGo5ZCNID0gW107XFxuICAgIGlmICgh5aSa6Lev57q/5ZCmKSB7XFxuXFxuICAgICAgICDliJfooajlkI0ucHVzaCjljZXot6/nur/nq6DoioIpXFxuXFxuICAgIH0gZWxzZSB7XFxuXFxuICAgICAgICBwZGZhKOa6kOaVsOaNriwg6Lev57q/5YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgICAgICDliJfooajlkI0ucHVzaChwZGZoKGRhdGEsIOi3r+e6v+WQjSkpXFxuICAgICAgICB9KTtcXG5cXG4gICAgfVxcblxcbiAgICB2YXIg6ZuG5pWw57uEID0gW107XFxuXFxuXFxudmFyIOaOkumZpOeroOiKgiA9IFtdO1xcbmlmKOmAiembhuWIl+ihqC5pbmNsdWRlcygnJCcpKXtcXG7mjpLpmaTnq6DoioIgPSDpgInpm4bliJfooaguc3BsaXQoJyQnKVxcbumAiembhuWIl+ihqCA9IOaOkumZpOeroOiKgi5zaGlmdCgpXFxufVxcblxcbiAgICBpZiAoIeWkmui3r+e6v+WQpikge1xcbiAgICAgICAg6ZuG5pWw57uELnB1c2gocGRmYSjmupDmlbDmja4sIOmAiembhuWIl+ihqCkpXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwZGZhKOa6kOaVsOaNriwg6YCJ6ZuG5oC75YiX6KGoKS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgICAgICDpm4bmlbDnu4QucHVzaChwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkpXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcblxcbiAgICBmb3IgKGxldCBpIGluIOmbhuaVsOe7hCkge1xcblxcbiAgICAgICAgdmFyIGRvTGlzdCA9IFtdO1xcblxcbuaOkumZpOeroOiKgi5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgdmFyIOagh+ivhmlkID0g6ZuG5pWw57uEW2ldLmZpbmRJbmRleCjov5Tlm54gPT4g6L+U5ZueLmluZGV4T2YoZGF0YSkgIT0gLTEpO1xcbiAgICBpZiAo5qCH6K+GaWQgIT0gLTEpIHtcXG4gICAgICDpm4bmlbDnu4RbaV0uc3BsaWNlKOagh+ivhmlkLCAxKVxcbiAgICB9O1xcbiAgfSk7XFxuXFxuICAgICAgICBmb3IgKGxldCBpdCBvZiDpm4bmlbDnu4RbaV0pIHtcXG4gICAgICAgICAgICB2YXIgZG9MaXN0dXJsID0gcGRmaChpdCwg6ZuGdXJsKVxcbiAgICAgICAgICAgIGRvTGlzdHVybCA9IGRvTGlzdHVybC5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpID8gZG9MaXN0dXJsIDog5YmN57yAICsgZG9MaXN0dXJsXFxuICAgICAgICAgICAgZG9MaXN0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdCwg6ZuG5ZCNKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBkb0xpc3R1cmxcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGJvb2tOYW1lID0gIeWkmui3r+e6v+WQpiA/IOagh+mimCA6IOagh+mimCArICctJyArIOWIl+ihqOWQjVtpXVxcblxcbiAgICAgICAg56ug6IqCanNvbi5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTog5YiX6KGo5ZCNW2ldLFxcbiAgICAgICAgICAgIGxpc3Q6IGRvTGlzdCxcXG4gICAgICAgICAgICBzanNzOiB7XFxuICAgICAgICAgICAgICAgIGNoYXB0ZXJMaXN0OiBkb0xpc3QsXFxuICAgICAgICAgICAgICAgIGluZm86IHtcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tOYW1lOiBib29rTmFtZSwgLy/mvKvnlLvlkI3np7AsXFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZTogTVlfUlVMRS50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tUb3BQaWM6IOWbvueJhyxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZTog5ryr55S76Kej5p6QLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmlldzogXFxcIjFcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICByZXR1cm4g56ug6IqCanNvblxcbn1cXG5cXG5cXG5mdW5jdGlvbiDmt7vliqDlpLTpg6jliJfooagoZCwg5qCH6aKYLCDlm77niYcsIOaPj+i/sCwg5L2c6ICFLCDml7bpl7QsIOWIhuexuyzpobVVUkwpIHtcXG5cXG4gICAg5qCH6aKYID0gIeagh+mimCA/ICcnIDog5qCH6aKYICsgJ1xcXFxuJ1xcbiAgICDlm77niYcgPSAh5Zu+54mHID8gJycgOiDlm77niYdcXG4gICAg5o+P6L+wID0gIeaPj+i/sCA/ICcnIDog5o+P6L+wLnJlcGxhY2UoXFxcIuabtOaWsOiHs++8mlxcXCIsICcnKVxcblxcbiAgICDkvZzogIUgPSAh5L2c6ICFID8gJycgOiAnXFxcXG4nICsg5L2c6ICFXFxuICAgIOaXtumXtCA9ICHml7bpl7QgPyAnJyA6ICdcXFxcbicgKyDml7bpl7RcXG4gICAg5YiG57G7ID0gIeWIhuexuyA/ICcnIDogJ1xcXFxuJyArIOWIhuexu1xcblxcblxcbiAgICB2YXIg5aS06YOodGl0bGUgPSBbJ+KAmOKAmOKAmeKAmTxiPicsJzwvYj4gPHNtYWxsPjxmb250IGNvbG9yPSNGQTcyOTg+JywnPC9mb250PicsJzwvc21hbGw+J11cXG4gICAgdmFyIOWktOmDqGRlc2MgPSBbJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPSNmOGVjYzk+JywnPC9mb250PiddXFxuXFxuXFxuXFxuICAgIOWktOmDqHRpdGxlID0g5aS06YOodGl0bGVbMF0r5qCH6aKYK+WktOmDqHRpdGxlWzFdK+aPj+i/sCvlpLTpg6h0aXRsZVsyXSvkvZzogIUr5aS06YOodGl0bGVbM11cXG5cXG4gICAg5aS06YOoZGVzYyA9IOWktOmDqGRlc2NbMF0r5pe26Ze0K+WIhuexuyvlpLTpg6hkZXNjWzFdXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTog5aS06YOodGl0bGUsXFxuICAgICAgICBkZXNjOiDlpLTpg6hkZXNjLFxcbiAgICAgICAgcGljX3VybDog5Zu+54mHLFxcbiAgICAgICAgdXJsOiDpobVVUkwgKyBcXFwiI25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbiAgICB9KTtcXG5cXG59XFxuXFxuXFxuZnVuY3Rpb24g5re75Yqg566A5LuLKGQsIOaVsOaNrua6kCwg6aG1VVJMLCDlm77niYcpIHtcXG4gICAgLy/ojrflj5bmlbDmja5cXG4gICAgdmFyIOeugOS7i+WGheWuuSA9IOaVsOaNrua6kFxcbiAgICDnroDku4vlhoXlrrkgPSDnroDku4vlhoXlrrkucmVwbGFjZShcXFwi566A5LuL77yaXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIuS7i+e7jTpcXFwiLCBcXFwiXFxcIikucmVwbGFjZShcXFwi5ryr55S7XFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIuKApuKAplxcXCIsIFxcXCJcXFwiKS5yZXBsYWNlKFxcXCLnroDku4tcXFwiLCBcXFwiXFxcIilcXG5cXG4gICAgdmFyIOeugOS7i+WGheWuueaUtjtcXG4gICAgaWYgKOeugOS7i+WGheWuuS5sZW5ndGggPiA0NSkge1xcbiAgICAgICAg566A5LuL5YaF5a655pS2ID0g566A5LuL5YaF5a65LnN1YnN0cigwLCA0NSkgKyAnLi4uJ1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAg566A5LuL5YaF5a655pS2ID0g566A5LuL5YaF5a65ICsgJy4uLidcXG4gICAgfVxcblxcbiAgICAvL+Wbvuagh+iOt+WPllxcbiAgICBpZiAoIeWbvueJhykge1xcbiAgICAgICAg5Zu+54mHID0gJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9xLzEwNy5wbmcnXFxuICAgIH1cXG5cXG4gICAgLy/pobVVUkwg6I635Y+WXFxuICAgIGlmICgh6aG1VVJMKSB7XFxuICAgICAgICDpobVVUkwgPSBNWV9SVUxFLnRpdGxlXFxuICAgIH1cXG5cXG4gICAgLy/moIfpopjkuI7nroDku4vmoLflvI9cXG4gICAgdmFyIG16dGV4dCA9IFxcXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8c21hbGw+566A5LuLPC9zbWFsbD48YnI+XFxcIlxcbiAgICB2YXIgYnR0aXRsZSA9ICc8Zm9udCBjb2xvcj1cXFwiIzA5OEFDMVxcXCI+5ryr55S7566A5LuLICA8L2ZvbnQ+PHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI2Y0Nzk4M1xcXCI+566A5LuL5pS2PjwvZm9udD48L3NtYWxsPjwvc21hbGw+J1xcblxcbiAgICAvL+WxleW8gOS4juaUtue8qeaTjeS9nFxcbiAgICB2YXIgamogPSBnZXRWYXIo6aG1VVJMICsgXFxcIueugOS7i+aUtlxcXCIsIFxcXCLlt7LmlLbotbdcXFwiKTtcXG4gICAgdmFyIGpqdXJsID0gJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgo566A5LuL5YaF5a65LCDnroDku4vlhoXlrrnmlLYsIOaUtiwg5pS25YaF5a65LCDlvZPliY1VUkwpID0+IHtcXG4gICAgICAgIHZhciBqc2JsID0g5b2T5YmNVVJMICsgXFxcIueugOS7i+aUtlxcXCI7XFxuICAgICAgICB2YXIgamogPSBnZXRWYXIo5b2T5YmNVVJMICsgXFxcIueugOS7i+aUtlxcXCIsIFxcXCLlt7LmlLbotbdcXFwiKTtcXG4gICAgICAgIGpqID0gamogPT0gXFxcIuW3suaUtui1t1xcXCIgPyBcXFwi5bGV5byAXFxcIiA6IFxcXCLlt7LmlLbotbdcXFwiO1xcbiAgICAgICAgcHV0VmFyKGpzYmwsIGpqKVxcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IOW9k+WJjVVSTCArIFxcXCJfYnRcXFwiXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB0aXRsZTog5pS2LnJlcGxhY2UoXFxcIueugOS7i+aUtlxcXCIsIGpqKVxcbiAgICAgICAgfSlcXG5cXG4gICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiDlvZPliY1VUkwgKyBcXFwiX216XFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdGl0bGU6IGpqID09IFxcXCLlt7LmlLbotbdcXFwiID8g5pS25YaF5a65LnJlcGxhY2UoXFxcIueugOS7i1xcXCIsIOeugOS7i+WGheWuueaUtikgOiDmlLblhoXlrrkucmVwbGFjZShcXFwi566A5LuLXFxcIiwg566A5LuL5YaF5a65KVxcbiAgICAgICAgfSlcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSwg566A5LuL5YaF5a65LCDnroDku4vlhoXlrrnmlLYsIGJ0dGl0bGUsIG16dGV4dCwg6aG1VVJMKVxcblxcblxcbiAgICAvL+agh+mimFxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGJ0dGl0bGUucmVwbGFjZShcXFwi566A5LuL5pS2XFxcIiwgamopLFxcbiAgICAgICAgdXJsOiBqanVybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIHBpY191cmw6IOWbvueJhyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJfYnRcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICAvL+eugOS7i1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGpqID09IFxcXCLlt7LmlLbotbdcXFwiID8gbXp0ZXh0LnJlcGxhY2UoXFxcIueugOS7i1xcXCIsIOeugOS7i+WGheWuueaUtikgOiBtenRleHQucmVwbGFjZShcXFwi566A5LuLXFxcIiwg566A5LuL5YaF5a65KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJfbXpcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbn1cXG5cXG5mdW5jdGlvbiDmt7vliqDliJfooajnq6DoioIoZCwg5qCH6aKY5pWw5o2uLCDliJfooajmlbDmja4sIOino+aekOS7o+eggSwg6aG1VVJMLCDlm77niYcpIHtcXG5cXG5cXG4gICAgLy9k5LiO5aSW55WMZO+8jOS4uuWQjOWGheWtmOWcsOWdgO+8jOS4jeeUqOi/lOWbnlxcbiAgICAvL+agh+mimOaVsOaNriAg5Y2z5qCH6aKY5ZCN5a2XXFxuICAgIC8v5YiX6KGo5pWw5o2u5b+F6aG75pivSlNPTiAg5qC85byP5pivW3t0aXRsZTonJyx1cmw6JycsfSwuLi4uLl0gIOS4lHVybOW/hemhu+acieWJjee8gFxcblxcbiAgICAvL+Wbvuagh+iOt+WPllxcbiAgICBpZiAoIeWbvueJhykge1xcbiAgICAgICAg5Zu+54mHID0gJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9xLzE4LnBuZydcXG4gICAgfVxcblxcbiAgICAvL+mhtVVSTCDojrflj5ZcXG4gICAgaWYgKCHpobVVUkwpIHtcXG4gICAgICAgIOmhtVVSTCA9IE1ZX1JVTEUudGl0bGVcXG4gICAgfVxcblxcbiAgICAvL+agh+mimOWQjVxcbiAgICB2YXIg5qCH6aKY5ZCNID0gJzxiPui3r+e6vzwvYj4gIDxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9I2Y5OTA2Zj7mjpLluo8gPjwvZm9udD48L3NtYWxsPjwvc21hbGw+J1xcblxcblxcbiAgICB2YXIg5o6S5bqPID0gZ2V0VmFyKOmhtVVSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCBcXFwi5q2j5bqPXFxcIik7XFxuICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJ+WAkuW6jycgPyAn5q2j5bqPJyA6ICflgJLluo8nO1xcblxcbiAgICB2YXIg5o6S5bqPdXJsID0gJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgo5qCH6aKY5ZCNLCDmoIfpopjmlbDmja4sIOWIl+ihqOaVsOaNriwg6Kej5p6Q5Luj56CBLCDpobVVUkwpID0+IHtcXG4gICAgICAgIHZhciDmjpLluo8gPSBnZXRWYXIo6aG1VVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsIFxcXCLmraPluo9cXFwiKTtcXG4gICAgICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJ+WAkuW6jycgPyAn5q2j5bqPJyA6ICflgJLluo8nO1xcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdGl0bGU6IOagh+mimOWQjS5yZXBsYWNlKCfot6/nur8nLCDmoIfpopjmlbDmja4pLnJlcGxhY2UoJ+aOkuW6jycsIOaPkOekuilcXG4gICAgICAgIH0pXFxuXFxuXFxuICAgICAgICBpZiAo5o+Q56S6ID09ICflgJLluo8nKSB7XFxuICAgICAgICAgICAg5YiX6KGo5pWw5o2uLnJldmVyc2UoKVxcbiAgICAgICAgfVxcbiAgICAgICAg5YiX6KGo5pWw5o2uLmZvckVhY2goZnVuY3Rpb24oZGF0YSwgc3NpZCkge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBkYXRhLnVybCArIOino+aekOS7o+eggSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+mAiembhlxcXCIgKyBzc2lkXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcblxcblxcbiAgICAgICAgcHV0VmFyKOmhtVVSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCDmj5DnpLopXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIOagh+mimOWQjSwg5qCH6aKY5pWw5o2uLCDliJfooajmlbDmja4sIOino+aekOS7o+eggSwg6aG1VVJMKVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IOagh+mimOWQjS5yZXBsYWNlKCfot6/nur8nLCDmoIfpopjmlbDmja4pLnJlcGxhY2UoJ+aOkuW6jycsIOaOkuW6jyksXFxuICAgICAgICBwaWNfdXJsOiDlm77niYcsXFxuICAgICAgICB1cmw6IOaOkuW6j3VybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IOmhtVVSTCArIFxcXCJf5o6S5bqPXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKOaOkuW6jyA9PSAn5YCS5bqPJykge1xcbiAgICAgICAg5YiX6KGo5pWw5o2uLnJldmVyc2UoKVxcbiAgICB9XFxuXFxuICAgIOWIl+ihqOaVsOaNri5mb3JFYWNoKGZ1bmN0aW9uKGRhdGEsIGlkKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogZGF0YS51cmwgKyDop6PmnpDku6PnoIEsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+mAiembhlxcXCIgKyBpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG5cXG59XFxuXFxuXFxuZnVuY3Rpb24g5re75Yqg6Ziy5q2i572R6aG1KOmhuXVybCwgVUEpIHtcXG5cXG4gICAgLy/kuIrnuqfot7PovazliLDlvZPliY3pobXnmoTpk77mjqXlv4XpobvmmK9oaWtlcjovL2VtcHR577yb5LiN54S25LiA5Yi35paw6L+Y5piv5Lya6YeN5aSN5Yqg6L29XFxuICAgIC8vVUEgJyfmiJZmYWxzZeaIlifmiYvmnLonIOm7mOiupOaYr+aJi+acuuerryA7IOeUteiEkSAnUEMnXFxuXFxuICAgIHZhciDliLfmlrDph43lpI0gPSBNWV9SVUxFLnRpdGxlICsgXFxcIue9kemhtea6kOeggVxcXCJcXG4gICAgdmFyIHBj6ZO+5o6lID0g6aG5dXJsLnJlcGxhY2UoXFxcIm0uXFxcIiwgXFxcInd3dy5cXFwiKVxcbiAgICB2YXIg5omL5py66ZO+5o6lID0g6aG5dXJsLnJlcGxhY2UoXFxcInd3dy5cXFwiLCBcXFwibS5cXFwiKVxcblxcbiAgICB2YXIgY29kZTtcXG4gICAgaWYgKGdldFZhcijliLfmlrDph43lpI0sIFxcXCJmYWxzZVxcXCIpID09IFxcXCJmYWxzZVxcXCIpIHtcXG5cXG4gICAgICAgIGNvZGUgPSBVQSA9PSAnUEMnID8gZmV0Y2gocGPpk77mjqUpIDogcmVxdWVzdCjmiYvmnLrpk77mjqUpO1xcbiAgICAgICAgcHV0VmFyKOWIt+aWsOmHjeWkjSwgZ2V0UGFyYW0oJ3VybCcpICsgXFxcIu+/pSbvv6VcXFwiICsgY29kZSlcXG5cXG4gICAgfSBlbHNlIHtcXG5cXG4gICAgICAgIHZhciBwbSA9IGdldFZhcijliLfmlrDph43lpI0pLnNwbGl0KFxcXCLvv6Um77+lXFxcIilcXG4gICAgICAgIGlmIChwbVswXSA9PSBnZXRQYXJhbSgndXJsJykpIHtcXG4gICAgICAgICAgICBjb2RlID0gcG1bMV1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY29kZSA9IFVBID09ICdQQycgPyBmZXRjaChwY+mTvuaOpSkgOiByZXF1ZXN0KOaJi+acuumTvuaOpSk7XFxuICAgICAgICAgICAgcHV0VmFyKOWIt+aWsOmHjeWkjSwgZ2V0UGFyYW0oJ3VybCcpICsgXFxcIu+/pSbvv6VcXFwiICsgY29kZSlcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY29kZVxcbn1cXG5cXG5cXG5mdW5jdGlvbiDmt7vliqDpgInmi6not6/nur8oZCwg6Lev57q/5pWw5o2uLCDpobVVUkwsIOWkmui3r+e6v+WQpikge1xcblxcbiAgICAvL+i3r+e6v+aVsOaNriDmoLzlvI9be3RpdGxlOifot6/nur/lkI0nfSwuLi4uXVxcbiAgICAvL+Wkmui3r+e6v+WQpiAgZmFsc2Ug5YiZ5LiN5ZCv55So6YCJ5oup6Lev57q/77ybdHJ1ZSDliJnlkK/nlKhcXG5cXG4gICAgdmFyIOmAieaLqeWIl+ihqCA9IGdldEl0ZW0o6aG1VVJMICsgXFxcIumAieaLqeWIl+ihqFxcXCIsIFxcXCIwXFxcIilcXG5cXG4gICAgaWYgKOWkmui3r+e6v+WQpikge1xcblxcbiAgICAgICAgdmFyIOi3r+e6v+mAieS4rSA9ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj0jMDk4QUMxPumAieS4rTwvZm9udD4nXFxuXFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZ8J+Tljxmb250IGNvbG9yPVxcXCIjRkE3Mjk4XFxcIj4g5Zu+5rqQ5YiX6KGoPC9mb250PiDvvJonLFxcbiAgICAgICAgICAgIHVybDogXFxcInRvYXN0Oi8v54K55oiR5bmy5ZWl5ZGiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuXFxuXFxuICAgICAgICDot6/nur/mlbDmja4uZm9yRWFjaChmdW5jdGlvbihkYXRhLCBpZCkge1xcblxcbiAgICAgICAgICAgIHZhciBqanVybCA9ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKOmhtVVSTCxpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKOmhtVVSTCArICfpgInmi6nliJfooagnLGlkKycnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH0s6aG1VVJMLGlkKTtcXG5cXG4gICAgICAgICAgICB2YXIg5qCH6aKY5ZCNID0gaWQgPT0g6YCJ5oup5YiX6KGoID8g6Lev57q/6YCJ5LitLnJlcGxhY2UoJ+mAieS4rScsIGRhdGEudGl0bGUpIDogZGF0YS50aXRsZTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTog5qCH6aKY5ZCNLFxcbiAgICAgICAgICAgICAgICB1cmw6IGpqdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiDpobVVUkwgKyBcXFwiX+i3r+e6v1xcXCIgKyBpZFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG5cXG4gICAgfVxcbiAgICByZXR1cm4g6YCJ5oup5YiX6KGoXFxufVxcblxcblxcbmZ1bmN0aW9uIOa3u+WKoOmAieaLqeS4i+i9vShkLCDot6/nur/mlbDmja4sIOWkmui3r+e6v+WQpikge1xcblxcbiAgICAvL+i3r+e6v+aVsOaNriDmoLzlvI9be3RpdGxlOifot6/nur/lkI0nLHNqc3M6J+S4i+i9vei1hOaWmeS/oeaBryd9LC4uLi5dXFxuICAgIC8v5aSa6Lev57q/5ZCmICBmYWxzZSDliJnlj6rmnInikaDkuKrkuIvovb0g5qCH6aKY5Li6IOeCueWHu+S4i+i9ve+8m3RydWUg5YiZ5aSa5Liq5LiL6L29XFxuXFxuaWYo5aSa6Lev57q/5ZCmKXtcXG5cXG5kLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJnwn5OlPGZvbnQgY29sb3I9XFxcIiNmNDc5ODNcXFwiPiDkuIvovb08L2ZvbnQ+IO+8micsXFxuICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+eCueaIkeW5suWVpeWRolxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcblxcbn1cXG5cXG4gICAg6Lev57q/5pWw5o2uLmZvckVhY2goZnVuY3Rpb24oZGF0YSwgaWQpIHtcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUuaW5jbHVkZXMoJ+eroOiKguWIl+ihqCcpID8gJ+eCueWHu+S4i+i9vScgOiBkYXRhLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9kb3dubG9hZC52aWV3I25vUmVjb3JkSGlzdG9yeSMjbm9SZWZyZXNoIyNub0hpc3RvcnkjP3J1bGU95pys5Zyw6LWE5rqQ566h55CGJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIGV4dHJhOiBkYXRhLnNqc3NcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG5cXG4gICAgaWYgKOWkmui3r+e6v+WQpikge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaooeadv+S4iVwiLFwicGF0aFwiOlwiZWp0b29sXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjb3ZlcijmoIfpopgsIOS9nOiAhSwg5YiG57G7LCDnirbmgIEsIOeroOiKgiwg5pu05pawLCDnroDku4ss5bCB6Z2i5Zu+54mHLHRydWVfdXJsLCBoYXNMaW5lKSB7XFxyXFxudmFyIOagh+mimCwg5L2c6ICFLCDliIbnsbssIOeKtuaAgSwg56ug6IqCLCDmm7TmlrAsIOeugOS7iyzlsIHpnaLlm77niYcsdHJ1ZV91cmwsIGhhc0xpbmU7XFxyXFxuXFx0dHJ5IHtcXHJcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxmb250IGNvbG9yPVxcXCIjRkE3Mjk4XFxcIj4nK+S9nOiAhS5zbGljZSgwLDE1KStcXFwiJm5ic3A7XFxcIivnirbmgIErJzwvZm9udD48L3NtYWxsPicrJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0IxNUJGRlxcXCI+JytcXFwiXFxcXG5cXFwiK+WIhuexuysnPC9mb250Pjwvc21hbGw+Jysn4oCY4oCY4oCZ4oCZPHNtYWxsPjxmb250IGNvbG9yPVxcXCIjRjE3QzY3XFxcIj4nK1xcXCJcXFxcblxcXCIr56ug6IqCK1xcXCImbmJzcDtcXFwiK+abtOaWsCsnPC9mb250Pjwvc21hbGw+JyxcXHJcXG5cXHRcXHRcXHRkZXNjOifigJjigJjigJnigJk8c21hbGw+PGZvbnQgY29sb3I9XFxcIiM1MjQzM0RcXFwiPicgK+eugOS7iysgJzwvc21hbGw+JyxcXHJcXG5cXHRcXHRcXHRwaWNfdXJsOiAg5bCB6Z2i5Zu+54mHLFxcclxcblxcdFxcdFxcdHVybDogdHJ1ZV91cmwsXFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcclxcblxcdFxcdH0pO1xcblxcdFxcdGQucHVzaCh7XFxyXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdsaW5lX2JsYW5rJyxcXHJcXG5cXHRcXHR9KTtcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdGNvbF90eXBlOiAnbGluZScsXFxyXFxuXFx0XFx0fSk7XFxyXFxuXFx0XFx0aWYgKGhhc0xpbmUpIHtcXHJcXG5cXHRcXHRcXHRpdGVtLmV4dHJhID0ge1xcclxcblxcdFxcdFxcdFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcclxcblxcdFxcdFxcdH1cXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0ZC5wdXNoKGl0ZW0pO1xcclxcblxcdH0gY2F0Y2ggKGUpIHt9XFxyXFxufVxcclxcbmZ1bmN0aW9uIGNoYXB0ZXIodGl0bGUscGljX3VybCxjaGFwdGVyTGlzdCwgY2hhcHRlclRpdGxlLCBjaGFwdGVyVXJsLCBkZWZhdWx0T3JkZXIsIGhhc0xpbmUsZG93bmxvYWRsYXp5KSB7XFxyXFxuXFx0dmFyIGxpc3QgPSBjaGFwdGVyTGlzdDtcXHJcXG5cXHR2YXIgb3JpZ2luYWwgPSBbe1xcclxcblxcdFxcdHVybDogTVlfVVJMLFxcclxcblxcdFxcdG9yZGVyOiBkZWZhdWx0T3JkZXJcXHJcXG5cXHR9XTtcXHJcXG5cXHQhZmlsZUV4aXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpID8gKHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShvcmlnaW5hbCkpKSA6IDA7XFxyXFxuXFx0dmFyIGxvZyA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY29taWMvY29taWNMb2dGaWxlLmpzJykpO1xcclxcblxcdGZvciAodmFyIGkgaW4gbG9nKSB7XFxyXFxuXFx0XFx0aWYgKGxvZ1tpXS51cmwgPT0gTVlfVVJMKSB7XFxyXFxuXFx0XFx0XFx0dmFyIG5vdyA9IGk7XFxyXFxuXFx0XFx0XFx0dmFyIG9yZGVyID0gbG9nW2ldLm9yZGVyO1xcclxcblxcdFxcdFxcdGJyZWFrO1xcclxcblxcdFxcdH0gZWxzZSB7XFxyXFxuXFx0XFx0XFx0dmFyIG5vdyA9ICcnO1xcclxcblxcdFxcdFxcdHZhciBvcmRlciA9IGRlZmF1bHRPcmRlcjtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0fVxcclxcblxcdGxldCBvcmRlckl0ZW0gPSB7XFxyXFxuXFx0XFx0dGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiMwOThBQzFcXFwiPicgKyAn56ug6IqC5o6S5bqP4oeFJyArICc8L2ZvbnQ+PC9zdHJvbmc+JyxcXHJcXG5cXHRcXHR1cmw6IE1ZX1VSTCArIGBAbGF6eVJ1bGU9LmpzOnZhciBsb2cgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2NvbWljL2NvbWljTG9nRmlsZS5qcycpKTt2YXIgbm93PSdgICsgbm93ICsgYCc7aWYobm93IT0nJyl7dmFyIG5vdz1wYXJzZUludChub3cpO3ZhciBvcmRlcj1sb2dbbm93XS5vcmRlcn1lbHNle3ZhciBub3c9cGFyc2VJbnQobG9nLmxlbmd0aCk7dmFyIG9yZGVyPWAgKyBkZWZhdWx0T3JkZXIgKyBgO2xvZy5wdXNoKHt1cmw6aW5wdXQsb3JkZXI6b3JkZXJ9KTt9aWYobG9nW25vd10ub3JkZXIpe2xvZ1tub3ddLm9yZGVyPTA7fWVsc2V7bG9nW25vd10ub3JkZXI9MTt9O3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jb21pYy9jb21pY0xvZ0ZpbGUuanMnLCBKU09OLnN0cmluZ2lmeShsb2cpKTtyZWZyZXNoUGFnZSgpOydoaWtlcjovL2VtcHR5J2AsXFxyXFxuXFx0XFx0Y29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcclxcblxcdH1cXHJcXG5cXHRpZiAoaGFzTGluZSkge1xcclxcblxcdFxcdG9yZGVySXRlbS50aXRsZSA9IFxcXCLigJzigJzigJ3igJ1cXFwiICsgJzxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiMwOThBQzFcXFwiPicgKyAn6ZuG5pWw5o6S5bqP4oeFJyArICc8L2ZvbnQ+PC9zdHJvbmc+JztcXHJcXG5cXHRcXHRvcmRlckl0ZW0uY29sX3R5cGUgPSBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXHJcXG5cXHR9XFxyXFxuXFx0bGV0IGNoYXB0ZXJMaXN0cyA9IGxpc3QubWFwKChpdGVtKT0+KHtcXHJcXG5cXHRcXHR0aXRsZTogcGRmaChpdGVtLFxcXCJhJiZUZXh0XFxcIiksXFxyXFxuXFx0XFx0dXJsOiBwZChpdGVtLFxcXCJhJiZocmVmXFxcIiksXFxyXFxuXFx0fSkpO1xcclxcbmQucHVzaCh7XFxyXFxuXFx0dGl0bGU6ICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPSBcXFwiIzA5OEFDMVxcXCI+JyArIFxcXCLkuIvovb3mvKvnlLtcXFwiICsgJzwvZnJvbnQ+PC9zdHJvbmc+JyxcXHJcXG5cXHR1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZG93bmxvYWQudmlldyNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjbm9SZWZyZXNoIz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXCIsXFxyXFxuXFx0Y29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXHJcXG5cXHRleHRyYToge1xcclxcblxcdFxcdGNoYXB0ZXJMaXN0OiBjaGFwdGVyTGlzdHMsXFxyXFxuXFx0XFx0aW5mbzp7XFxyXFxuXFx0XFx0XFx0Ym9va05hbWU6IHRpdGxlLFxcclxcblxcdFxcdFxcdHJ1bGVOYW1lOiBNWV9SVUxFLnRpdGxlLFxcclxcblxcdFxcdFxcdGJvb2tUb3BQaWM6IHBpY191cmwsXFxyXFxuXFx0XFx0XFx0cGFyc2VDb2RlOiBkb3dubG9hZGxhenlcXHJcXG5cXHRcXHR9LFxcclxcblxcdFxcdGRlZmF1bHRWaWV3OlxcXCIxXFxcIlxcclxcblxcdH1cXHJcXG59KTtcXHJcXG5cXHRkLnB1c2goe1xcclxcblxcdFxcdHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0gXFxcIiMwOThBQzFcXFwiPicgKyBcXFwi5pys5Zyw5Lmm5p62XFxcIiArICc8L2Zyb250Pjwvc3Ryb25nPicsXFxyXFxuXFx0XFx0dXJsOiBcXFwiaGlrZXI6Ly9wYWdlL01haW4udmlldz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXCIsXFxyXFxuXFx0XFx0Y29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXHJcXG5cXHR9KTsgIFxcclxcblxcdGQucHVzaChvcmRlckl0ZW0pO1xcclxcblxcdGQucHVzaCh7Y29sX3R5cGU6ICdsaW5lJ30pO1xcdFxcclxcblxcdHZhciBsaXN0ID0gb3JkZXIgPyBsaXN0IDogbGlzdC5yZXZlcnNlKCk7XFxuXFx0aWYoIWxpc3R8fGxpc3Q9PVxcXCJcXFwiKXtcXHJcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdHRpdGxlOiAn5q2k5ryr55S75bey5LiL5p62ISEnLFxcclxcblxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF8xJyxcXHJcXG5cXHRcXHR9KTtcXHJcXG5cXHR9XFxuXFxyXFxuXFx0Zm9yICh2YXIgaSBpbiBsaXN0KSB7XFxyXFxuXFx0XFx0dHJ5IHtcXHJcXG5cXHRcXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiBwZGZoKGxpc3RbaV0sIGNoYXB0ZXJUaXRsZSksXFxyXFxuXFx0XFx0XFx0XFx0dXJsOiBwZChsaXN0W2ldLCBjaGFwdGVyVXJsKSArIGxhenksXFxyXFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXHJcXG5cXHRcXHRcXHR9KTtcXHJcXG5cXHRcXHR9Y2F0Y2ggKGUpIHt9XFxyXFxuXFx0fVxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBsaW5lKGxpbmVMaXN0LCBsaW5lVGl0bGVSdWxlLCB2YXJLZXkpIHtcXHJcXG5cXHRsZXQgbGlzdCA9IGxpbmVMaXN0XFxyXFxuXFx0dmFyS2V5ID0gdmFyS2V5ID09IG51bGwgPyAoTVlfUlVMRS51cmwgKyAnI2xpbmUtaW5kZXgnKTogdmFyS2V5O1xcclxcblxcdGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoa2V5TGlzdCkgPT4ge1xcclxcblxcdFxcdGZvciAobGV0IGkgaW4ga2V5TGlzdCkge2NsZWFyVmFyKGtleUxpc3RbaV0pfVxcclxcblxcdH0sIFt2YXJLZXksIE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnXSkpXFxyXFxuXFx0bGV0IGxpbmUwVGl0bGUgPSAnJztcXHJcXG5cXHR0cnkge1xcclxcblxcdFxcdGxpbmUwVGl0bGUgPSBwZGZoKGxpc3RbMF0sIGxpbmVUaXRsZVJ1bGUpLnJlcGxhY2UoXFxcIueroOiKguWIl+ihqO+8mlxcXCIsXFxcIlxcXCIpO1xcclxcblxcdH0gY2F0Y2ggKGUpIHt9XFxyXFxuXFx0bG9nKE1ZX1JVTEUudGl0bGUgKyBnZXRWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSkpXFxyXFxuXFx0Zm9yIChsZXQgaSBpbiBsaXN0KSB7XFxyXFxuXFx0XFx0dHJ5IHtcXHJcXG5cXHRcXHRcXHRsZXQgbGluZVRpdGxlID0gcGRmaChsaXN0W2ldLCBsaW5lVGl0bGVSdWxlKS5yZXBsYWNlKFxcXCLnq6DoioLliJfooajvvJpcXFwiLFxcXCJcXFwiKTtcXHJcXG5cXHRcXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiBnZXRWYXIoKE1ZX1JVTEUudGl0bGUgKyAnI2xpbmUtdGl0bGUnKSwgbGluZTBUaXRsZSkgPT09IGxpbmVUaXRsZSA/IFxcXCLliIfmjaI64oCY4oCYXFxcIiArIGxpbmVUaXRsZStcXFwiXFxcIjpsaW5lVGl0bGUrXFxcIuKAmOKAmDrliIfmjaJcXFwiLFxcclxcblxcdFxcdFxcdFxcdHVybDogJCgpLmxhenlSdWxlKCh2YXJLZXksIGxpbmVJbmRleCwgbGluZVRpdGxlKSA9PiB7XFxyXFxuXFx0XFx0XFx0XFx0XFx0cHV0VmFyKHZhcktleSwgbGluZUluZGV4LnRvU3RyaW5nKCkpO1xcclxcblxcdFxcdFxcdFxcdFxcdHB1dFZhcigoTVlfUlVMRS50aXRsZSArICcjbGluZS10aXRsZScpLCBsaW5lVGl0bGUpO1xcclxcblxcdFxcdFxcdFxcdFxcdGxvZyhNWV9SVUxFLnRpdGxlICsgZ2V0VmFyKChNWV9SVUxFLnRpdGxlICsgJyNsaW5lLXRpdGxlJykpKTtcXHJcXG5cXHRcXHRcXHRcXHRcXHRyZWZyZXNoUGFnZSgpO1xcclxcblxcdFxcdFxcdFxcdFxcdHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliIfmjaLoh7NcXFwiICsgbGluZVRpdGxlO1xcclxcblxcdFxcdFxcdFxcdH0sIHZhcktleSwgaSwgbGluZVRpdGxlKSxcXHJcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcclxcblxcdFxcdFxcdH0pO1xcclxcblxcdFxcdH0gY2F0Y2ggKGUpIHt9XFxyXFxuXFx0fVxcclxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p2R5XCIsXCJwYXRoXCI6XCJ5aWppXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDkuIDnuqcoKSB7fTtcXHJcXG5PYmplY3QuYXNzaWduKOS4gOe6py5wcm90b3R5cGUsIHtcXHJcXG5cXHRjb25zdHJ1Y3Rvcjog5LiA57qnLFxcclxcblxcdHRlc3QoKSB7fSxcXHJcXG5cXHTojrflj5bmupDnoIEodXJsLCBoZWFkZXIpIHtyZXR1cm4gZmV0Y2godHJ1ZV91cmwsIHtoZWFkZXJzOiBoZWFkZXIgfHwgeydVc2VyLUFnZW50JzogUENfVUF9fSkgfSwvLyDpu5jorqTnu5/kuIDkvb/nlKhNT0JJTEVfVUFcXHJcXG5cXHTmkJzntKLmoYbmnrYocGFnZSkge1xcclxcblxcdFxcdGlmIChwYWdlID09ICcxJykge1xcbi8qXFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogXFxcIuaQnOe0ouacrOinhOWImVxcXCIsXFxyXFxuXFx0XFx0XFx0XFx0dXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxyXFxuXFx0XFx0XFx0XFx0ZGVzYzogXFxcIiBcXFwiLFxcclxcblxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiXFxyXFxuXFx0XFx0XFx0fSk7XFxuKi9cXHJcXG5cXHRcXHR9XFxyXFxuXFx0fSxcXHJcXG5cXHTojrflj5bpk77mjqUocGFnZSwgcmVnZXgpIHtcXHJcXG5cXHRcXHRsZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcignaGVhZGVyLnVybCcsIE1ZX1VSTCk7XFxyXFxuXFx0XFx0Ly9sZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKGNvbmZpZy7pk77mjqXlpITnkIblt6Xlhbfkvp3otZYpXFxyXFxuXFx0XFx0Ly9sZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gcmVxdWlyZUNhY2hlKCdodHRwczovL2dpdGVlLmNvbS9yZWJvcm4wL0hpa2VyUnVsZXMvcmF3L21hc3Rlci9wbHVnaW5zL1VybFByb2Nlc3Nvci5qcycpXFxyXFxuXFx0XFx0Ly9sZXQg6ZO+5o6l5aSE55CG5bel5YW3ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdXJsLXByb2Nlc3NvcicpXFxyXFxuXFx0XFx0bGV0IOmTvuaOpeWkhOeQhuW3peWFtyA9IHJlcXVpcmVDYWNoZSgnaHR0cHM6Ly9naXRlZS5jb20vY293YXJkLWNhdC9qcy9yYXcvbWFzdGVyL1VybFByb2Nlc3Nvci5qcycpXFxyXFxuXFx0XFx0dHJ1ZV91cmwgPSDpk77mjqXlpITnkIblt6XlhbdcXHJcXG5cXHRcXHRcXHQu6ZO+5o6lKHRydWVfdXJsKVxcclxcblxcdFxcdFxcdC7pobXnoIEocGFnZSlcXHJcXG5cXHRcXHRcXHQu5o+S5YWl5paw5aSE55CG6KeE5YiZKHJlZ2V4IHx8IFtdKVxcclxcblxcdFxcdFxcdC7ojrflj5blpITnkIbnu5PmnpwoKTtcXHJcXG5cXHRcXHRyZXR1cm4gdHJ1ZV91cmw7XFxyXFxuXFx0fSxcXHJcXG5cXHTmiZPpgKDliIbnsbsocnVsZUxpc3QpIHtcXHJcXG5cXHRcXHQvLyAgbGV0IGh0bWxDYXRlZ29yaWVzID0gcmVxdWlyZUNhY2hlKGNvbmZpZy7liqjmgIHliIbnsbvkvp3otZYpXFxyXFxuXFx0XFx0Ly9sZXQgaHRtbENhdGVnb3JpZXMgPSByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vZ2l0ZWUuY29tL3JlYm9ybjAvSGlrZXJSdWxlcy9yYXcvbWFzdGVyL3BsdWdpbnMvY2F0ZWdvcmllcy1oZWFkZXIuanMnKVxcclxcblxcdFxcdGlmICghcnVsZUxpc3QpIHtcXHJcXG5cXHRcXHRcXHRsZXQg5YiG57G75a6a5L2NID0gW3tcXHJcXG5cXHRcXHRcXHRcXHRcXHTkuIDnuqfliIbnsbs6IOS4gOe6p+WumuS9jUEsXFxyXFxuXFx0XFx0XFx0XFx0XFx05a2Q5YiG57G7OiDnu5/kuIDlrprkvY1CIHx8IOS4gOe6p+WumuS9jUIsXFxyXFxuXFx0XFx0XFx0XFx0XFx05YiG57G76ZO+5o6lOiB75LqM5qyh5aSE55CGKHVybCkge3RyeSB7cmV0dXJuIOS4gOe6p+WkhOeQhkModXJsKX0gY2F0Y2ggKGUpIHtyZXR1cm4gdXJsfX19XFxyXFxuXFx0XFx0XFx0fV1cXHJcXG5cXHRcXHRcXHRpZiAo5LqM57qn5a6a5L2NQSAmJiAo57uf5LiA5a6a5L2NQiB8fCDkuoznuqflrprkvY1CKSkge1xcclxcblxcdFxcdFxcdFxcdOWIhuexu+WumuS9jS5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTkuIDnuqfliIbnsbs6IOS6jOe6p+WumuS9jUEsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05a2Q5YiG57G7OiDnu5/kuIDlrprkvY1CIHx8IOS6jOe6p+WumuS9jUIsXFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05YiG57G76ZO+5o6lOiB75LqM5qyh5aSE55CGKHVybCkge3RyeSB7cmV0dXJuIOS6jOe6p+WkhOeQhkModXJsKX0gY2F0Y2ggKGUpIHtyZXR1cm4gdXJsfX19XFxyXFxuXFx0XFx0XFx0XFx0fSlcXHJcXG5cXHRcXHRcXHR9XFxyXFxuXFx0XFx0XFx0aWYgKOS4iee6p+WumuS9jUEgJiYgKOe7n+S4gOWumuS9jUIgfHwg5LiJ57qn5a6a5L2NQikpIHtcXHJcXG5cXHRcXHRcXHRcXHTliIbnsbvlrprkvY0ucHVzaCh7XFxyXFxuXFx0XFx0XFx0XFx0XFx0XFx05LiA57qn5YiG57G7OiDkuInnuqflrprkvY1BLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWtkOWIhuexuzog57uf5LiA5a6a5L2NQiB8fCDkuInnuqflrprkvY1CLFxcclxcblxcdFxcdFxcdFxcdFxcdFxcdOWIhuexu+mTvuaOpToge+S6jOasoeWkhOeQhih1cmwpIHt0cnkge3JldHVybiDkuInnuqflpITnkIZDKHVybCl9IGNhdGNoIChlKSB7cmV0dXJuIHVybH19fVxcclxcblxcdFxcdFxcdFxcdH0pXFxyXFxuXFx0XFx0XFx0fVxcclxcblxcdFxcdFxcdGlmICjlm5vnuqflrprkvY1BICYmICjnu5/kuIDlrprkvY1CIHx8IOWbm+e6p+WumuS9jUIpKSB7XFxyXFxuXFx0XFx0XFx0XFx05YiG57G75a6a5L2NLnB1c2goe1xcclxcblxcdFxcdFxcdFxcdFxcdFxcdOS4gOe6p+WIhuexuzog5Zub57qn5a6a5L2NQSxcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTlrZDliIbnsbs6IOe7n+S4gOWumuS9jUIgfHwg5Zub57qn5a6a5L2NQixcXHJcXG5cXHRcXHRcXHRcXHRcXHRcXHTliIbnsbvpk77mjqU6IHvkuozmrKHlpITnkIYodXJsKSB7dHJ5IHtyZXR1cm4g5Zub57qn5aSE55CGQyh1cmwpfSBjYXRjaCAoZSkge3JldHVybiB1cmx9fX1cXHJcXG5cXHRcXHRcXHRcXHR9KVxcclxcblxcdFxcdFxcdH1cXHJcXG5cXHRcXHRcXHRydWxlTGlzdCA9IOWIhuexu+WumuS9jTtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0Ly8gJzAnIOS4uum7mOiupOS4jeaKmOWPoO+8jCcxJyDkuLrpu5jorqTmipjlj6BcXHJcXG5cXHRcXHRjb25zdCDlvZPliY3mipjlj6DnirbmgIEgPSBnZXRNeVZhcignaGVhZGVyLmZvbGQnLCAnMCcpXFxyXFxuXFx0XFx0Ly8g5byV5YWl5Yqo5oCB5YiG57G75L6d6LWWXFxyXFxuXFx0XFx0bGV0IGh0bWxDYXRlZ29yaWVzID0gcmVxdWlyZUNhY2hlKCdodHRwczovL2dpdGVlLmNvbS9jb3dhcmQtY2F0L2pzL3Jhdy9tYXN0ZXIvY2F0ZWdvcmllcy1oZWFkZXIuanMnKVxcclxcblxcdFxcdHZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcclxcblxcdFxcdFxcdHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcXHJcXG5cXHRcXHR9IC8vIOmaj+acuumAieS4reeahOWIhuexu+minOiJslxcclxcblxcdFxcdHZhciBjb2xvdXI7XFxyXFxuXFx0XFx0aWYgKOWIhuexu+minOiJsiAhPT0gJycpIHtcXHJcXG5cXHRcXHRcXHRjb2xvdXIgPSDliIbnsbvpopzoibJcXHJcXG5cXHRcXHR9IGVsc2Uge1xcclxcblxcdFxcdFxcdGNvbG91ciA9IGdldFJhbmdlQ29sb3JzKClcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0aHRtbENhdGVnb3JpZXMu55WM6Z2iKGQpXFxyXFxuXFx0XFx0XFx0Ly8u5YiG57G76ZO+5o6lKHRydWVfdXJsKVxcclxcblxcdFxcdFxcdC7mupDnoIEoaHRtbClcXHJcXG5cXHRcXHRcXHQu6aG156CBKHBhZ2UpXFxyXFxuXFx0XFx0XFx0Lua3u+WKoOWIhuexu+WumuS9jShydWxlTGlzdClcXHJcXG5cXHRcXHRcXHQu5byA5ZCv5YaF572u5oqY5Y+g5Yqf6IO9KCkgLy8g5b+F6aG7XFxyXFxuXFx0XFx0XFx0LuaKmOWPoCjlvZPliY3mipjlj6DnirbmgIEpIC8vIOW/hemhu1xcclxcblxcdFxcdFxcdC7mipjlj6DmjInpkq7moLflvI8oe1xcclxcblxcdFxcdFxcdFxcdHRpdGxlOiDlvZPliY3mipjlj6DnirbmgIEgPT0gXFxcIjFcXFwiID8gXFxcIuKAnOKAnOKAneKAnTxiaWc+PGI+PGZvbnQgY29sb3I9JyM1OTU5QUInPlxcXCIgKyDliqjmgIHnvKnlsI8gKyBcXFwiPC9mb250PjwvYj48L2JpZz5cXFwiIDogXFxcIuKAnOKAnOKAneKAnTxiaWc+PGI+PGZvbnQgY29sb3I9JyNGNzVENTknPlxcXCIgKyDliqjmgIHmianlsZUgKyBcXFwiPC9mb250PjwvYj48L2JpZz5cXFwiXFxyXFxuXFx0XFx0XFx0fSkgLy8g5Y+v6YCJXFxyXFxuXFx0XFx0XFx0Ly8gLuesrOWHoOihjOW8gOWni+aKmOWPoCgyKSAvLyDlj6/pgIlcXHJcXG5cXHRcXHRcXHQvLyAu5oqY5Y+g5oyJ6ZKu5qC35byPKHsg5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGMOiAyIH0pICAvLyDlj6/pgInvvIzkvYblv4XpobvlhYjosIPnlKggLuesrOWHoOihjOW8gOWni+aKmOWPoChpbmRleCnvvIznhLblkI7lho3kvKDlhaUgeyDmipjlj6DmjInpkq7mj5LlhaXooYw6IGluZGV4IH1cXHJcXG5cXHRcXHRcXHQu6YCJ5Lit55qE5YiG57G76aKc6ImyKGNvbG91cilcXHJcXG5cXHRcXHRcXHQu5byA5aeL5omT6YCg5YiG57G7KCk7XFxyXFxuXFx0fSxcXHJcXG5cXHJcXG5cXHTnlJ/miJDniYfljZUoZCxodG1sKSB7XFxyXFxuXFxyXFxuXFx0XFx0dmFyIOWIl+ihqFxcclxcblxcdFxcdHZhciDmoIfpophcXHJcXG5cXHRcXHR2YXIg5o+P6L+wXFxyXFxuXFx0XFx0dmFyIOWbvueJh1xcclxcblxcdFxcdHZhciDpk77mjqVcXHJcXG5cXHJcXG5cXHRcXHRpZiAo5qGG5p6257G75Z6LID09PSAnbXl1aS12b2RsaXN0Jykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcubXl1aS12b2RsaXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2g0JiZUZXh0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnLnBpYy10YWd8fC5waWMtdGV4dCYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdFxcdC8vbG9nKCfmoYbmnrbnsbvlnovCt215dWktdm9kbGlzdCcpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICcjZGF0YV9saXN0Jykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcjZGF0YV9saXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnZW0mJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICdpbWcmJmRhdGEtc3JjbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdFxcdC8vbG9nKCfmoYbmnrbnsbvlnovCt2RhdGFfbGlzdCcpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdmZWQtbGlzdC10aXRsZScpIHtcXHJcXG5cXHRcXHRcXHTliJfooaggPSAnLmZlZC1saXN0LWluZm8mJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnLmZlZC1saXN0LXRpdGxlJiZUZXh0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnLmZlZC10ZXh0LWNlbnRlciYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2EmJmRhdGEtb3JpZ2luYWwnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHRcXHQvL2xvZygn5qGG5p6257G75Z6LwrcuZmVkLWxpc3QtaW5mbycpXFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdpdGVtJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiYuaXRlbSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2ltZyYmYWx0JztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAncCYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJ2ltZyYmc3JjbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAnbW9kdWxlLWl0ZW1zJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICcubW9kdWxlLWl0ZW1zJiYubW9kdWxlLWl0ZW0nO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdhJiZ0aXRsZSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJy5tb2R1bGUtaXRlbS10ZXh0JiZUZXh0JztcXHJcXG5cXHRcXHRcXHTlm77niYcgPSAnaW1nfHwubGF6eSYmZGF0YS1zcmMnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ3BhY2steWtwYWNrJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiYucGFjay15a3BhY2snO1xcclxcblxcdFxcdFxcdOagh+mimCA9ICdhJiZ0aXRsZSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJ3NwYW4sLTEmJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICcuZWNsYXp5JiZkYXRhLW9yaWdpbmFsJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYSYmaHJlZic7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICdzdHVpLXZvZGxpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy5zdHVpLXZvZGxpc3QmJmxpJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYSYmdGl0bGUnO1xcclxcblxcdFxcdFxcdOaPj+i/sCA9ICcucGljLXRleHQmJlRleHQnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICcubGF6eWxvYWR8fGEmJmRhdGEtb3JpZ2luYWwnO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9ICdhJiZocmVmJztcXHJcXG5cXHRcXHR9IGVsc2UgaWYgKOahhuaetuexu+WeiyA9PT0gJ3ZvZGxpc3QnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0gJy52b2RsaXN0JiZsaSc7XFxyXFxuXFx0XFx0XFx05qCH6aKYID0gJ2EmJnRpdGxlJztcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSAnYSYmVGV4dCc7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0gJy5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCc7XFxyXFxuXFx0XFx0XFx06ZO+5o6lID0gJ2EmJmhyZWYnO1xcclxcblxcdFxcdH0gZWxzZSBpZiAo5qGG5p6257G75Z6LID09PSAn5rWL6K+VJykge1xcclxcblxcdFxcdFxcdOWIl+ihqCA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHRcXHTmoIfpopggPSAnYm9keSYmYSc7XFxyXFxuXFx0XFx0XFx05o+P6L+wID0gJ2JvZHkmJmEnO1xcclxcblxcdFxcdFxcdOWbvueJhyA9ICdib2R5JiZhJztcXHJcXG5cXHRcXHRcXHTpk77mjqUgPSAnYm9keSYmYSc7XFxyXFxuXFx0XFx0fSBlbHNlIGlmICjmoYbmnrbnsbvlnosgPT09ICcnKSB7XFxyXFxuXFx0XFx0XFx05YiX6KGoID0g5qGG5p625YiX6KGoO1xcclxcblxcdFxcdFxcdOagh+mimCA9IOahhuaetuagh+mimDtcXHJcXG5cXHRcXHRcXHTmj4/ov7AgPSDmoYbmnrbmj4/ov7A7XFxyXFxuXFx0XFx0XFx05Zu+54mHID0g5qGG5p625Zu+54mHO1xcclxcblxcdFxcdFxcdOmTvuaOpSA9IOahhuaetumTvuaOpTtcXHJcXG5cXHRcXHR9XFxyXFxuXFx0XFx0bGV0IGxpc3QgPSBwZGZhKGh0bWwsIOWIl+ihqCk7XFxyXFxuXFx0XFx0Zm9yIChsZXQgayBpbiBsaXN0KSB7XFxyXFxuXFx0XFx0XFx0ZC5wdXNoKHtcXHJcXG5cXHRcXHRcXHRcXHR0aXRsZTogcGRmaChsaXN0W2tdLCDmoIfpopgpLFxcclxcblxcdFxcdFxcdFxcdGRlc2M6IHBkZmgobGlzdFtrXSwg5o+P6L+wKSxcXHJcXG5cXHRcXHRcXHRcXHRpbWc6IHBkKGxpc3Rba10sIOWbvueJhykgKyAnQFJlZmVyZXI9JyxcXHJcXG5cXHRcXHRcXHRcXHR1cmw6IHBkKGxpc3Rba10sIOmTvuaOpSkrXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcclxcblxcdFxcdFxcdH0pO1xcclxcblxcdFxcdH1cXHJcXG5cXHRcXHRkLnB1c2goe1xcclxcblxcdFxcdFxcdGNvbF90eXBlOiAnYmlnX2JpZ19ibGFua19ibG9jaycsXFxyXFxuXFx0XFx0fSk7XFxyXFxuXFx0fVxcclxcbn0pXFxyXFxuXFxyXFxuJC5leHBvcnRzID0gbmV3IOS4gOe6pygpO1xcclxcbiQuZXhwb3J0c1wifV0iLCJpY29uIjoiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzI4LnBuZyJ9
Add Comment
Please, Sign In to add comment