Advertisement
xiaomianao666

邀您一起看:夸克网盘

May 11th, 2024
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥夸克网盘@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIjEyM3BhblwiLFwicGF0aFwiOlwiMTIzcGFuXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGNvbnN0IHtcXG4gICAgICAgIGZpbGVMaXN0LFxcbiAgICAgICAgZ2V0SWNvblxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXCIpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKame+4j+iuvue9rlxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3NcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KVxcbiAgICBpZiAoZ2V0SXRlbShcXFwidG9rZW5cXFwiLCBcXFwiXFxcIikgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHZhciBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoczEyM1xcXCIsIFt7XFxuICAgICAgICAgICAgbmFtZTogXFxcIuagueebruW9lVxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCIwXFxcIlxcbiAgICAgICAgfV0pXFxuICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPFxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucG9wKClcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoczEyM1xcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBwYXRocylcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaWRcXFwiLCBpdGVtLmlkKVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzMTIzXFxcIiwgcGF0aHMuc2xpY2UoMCwgaW5kZXggKyAxKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgaXRlbSwgcGF0aHMsIGluZGV4KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgZmlsZUxpc3QocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQpLmRhdGEuSW5mb0xpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICB2YXIgaW1nID0gZ2V0SWNvbihpdGVtKVxcbiAgICAgICAgICAgIGlmIChpdGVtLlR5cGUgPT0gMSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpZCwgbmFtZSwgcGF0aHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzMTIzXFxcIiwgcGF0aHMpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0uRmlsZUlkLCBpdGVtLkZpbGVOYW1lLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gaXRlbS5Eb3dubG9hZFVybFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5GaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmnKrnmbvlvZVcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nc1xcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlXCIsXCJwYXRoXCI6XCJjb2RlXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuZmlsZUxpc3QgPSBmdW5jdGlvbihpZCkge1xcbiAgICBsZXQgbGlzdCA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL2ZpbGUvbGlzdC9uZXdcXFwiLCB7XFxuICAgICAgICBcXFwiZHJpdmVJZFxcXCI6IDAsXFxuICAgICAgICBcXFwibGltaXRcXFwiOiAxMDAsXFxuICAgICAgICBcXFwib3JkZXJCeVxcXCI6IFxcXCJmaWxlSWRcXFwiLFxcbiAgICAgICAgXFxcIk9yZGVyRGlyZWN0aW9uXFxcIjogXFxcImFzY1xcXCIsXFxuICAgICAgICBcXFwiUGFyZW50RmlsZUlkXFxcIjogaWQsXFxuICAgICAgICBcXFwidHJhc2hlZFxcXCI6IGZhbHNlXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJ0b2tlblxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKGxpc3QpXFxufVxcbiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgZ2V0SHptXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcIilcXG4gICAgbGV0IHJvb3QgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcIjtcXG4gICAgaWYgKGNvbnRlbnQuVHlwZSA9PSAxKSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7tuWkuS5zdmdcXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5GaWxlTmFtZVxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXCLmlofku7Yuc3ZnXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBpbWdcXG59XFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSArIDEpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8yXCIsXCJuYW1lXCI6XCJzZXR0aW5nc1wiLFwicGF0aFwiOlwic2V0dGluZ3NcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLotKblj7co5omL5py65Y+3KVxcXCIsXFxuICAgIHVybDogJChnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwidXNlcm5hbWVcXFwiLCBpbnB1dClcXG4gICAgfSlcXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5a+G56CBXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwicGFzc3dkXFxcIiwgaW5wdXQpXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHBvc3QoXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL3VzZXIvc2lnbl9pblxcXCIsIHtcXG4gICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgIFxcXCJwYXNzcG9ydFxcXCI6IGdldEl0ZW0oXFxcInVzZXJuYW1lXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBnZXRJdGVtKFxcXCJwYXNzd2RcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSA9PSBcXFwic3VjY2Vzc1xcXCIpIHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJ0b2tlblxcXCIsIHJlcy5kYXRhLnRva2VuKVxcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgcmVzLm1lc3NhZ2VcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55m+5bqm572R55uYXCIsXCJwYXRoXCI6XCLnmb7luqbnvZHnm5hcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLorr7nva5cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvbG9naW4xXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxufSlcXG5pZiAoZ2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuXFxcIiwgXFxcIlxcXCIpICE9IFxcXCJcXFwiKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBjb25zdCB7XFxuICAgICAgICAgICAgZ2V0SWNvbixcXG4gICAgICAgICAgICBnZXRIem0sXFxuICAgICAgICAgICAgZ2V0TGlua1xcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGUxXFxcIilcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoc2JhaWR1XFxcIiwgW3tcXG4gICAgICAgICAgICBwYXRoOiBcXFwiL1xcXCIsXFxuICAgICAgICAgICAgbmFtZTogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzYmFpZHVcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vZmlsZVxcXCIsIHtcXG4gICAgICAgICAgICBcXFwiYWNjZXNzX3Rva2VuXFxcIjogZ2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFwiKSxcXG4gICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcImxpc3RcXFwiLFxcbiAgICAgICAgICAgIFxcXCJkaXJcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRoLFxcbiAgICAgICAgICAgIFxcXCJ3ZWJcXFwiOiBcXFwid2ViXFxcIixcXG4gICAgICAgICAgICBcXFwibGltaXRcXFwiOiAwLFxcbiAgICAgICAgICAgIFxcXCJsaW1pdFxcXCI6IDIwMFxcbiAgICAgICAgfSkpKVxcbiAgICAgICAgcmVzLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBpZiAoaXRlbS5pc2RpciA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGl0ZW0sIHBhdGhzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5zZXJ2ZXJfZmlsZW5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNiYWlkdVxcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uc2VydmVyX2ZpbGVuYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoXFxcIm1vdmllXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFwiYXVkaW9cXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFwiaW1nXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKFxcXCJcXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnNlcnZlcl9maWxlbmFtZSxcXG4gICAgICAgICAgICAgICAgaW1nOiBnZXRJY29uKGl0ZW0pLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICAgICB0b2FzdChcXFwi5Ye6546w6ZSZ6K+v77yM6K+35p+l55yL5pel5b+XXFxcIikgICAgICAgIFxcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImNvZGUxXCIsXCJwYXRoXCI6XCJjb2RlMVwiLFwicnVsZVwiOlwiJC5leHBvcnRzLmdldEljb24gPSBmdW5jdGlvbihjb250ZW50KSB7XFxuICAgIGxldCB7XFxuICAgICAgICBnZXRIem1cXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFwiKVxcbiAgICBsZXQgcm9vdCA9IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFwiO1xcbiAgICBpZiAoY29udGVudC5pc2RpciA9PSAxKSB7XFxuICAgICAgICBpbWcgPSByb290ICsgXFxcIuaWh+S7tuWkuS5zdmdcXFwiXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5zZXJ2ZXJfZmlsZW5hbWVcXG4gICAgICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxuICAgICAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu2LnN2Z1xcXCJcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gaW1nXFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cXG4kLmV4cG9ydHMuZ2V0TGluayA9IGZ1bmN0aW9uKGV4dCwgaWQsIHBhdGgpIHtcXG4gICAgcmV0dXJuICQoKS5sYXp5UnVsZSgoZXh0LCBpZCwgcGF0aCkgPT4ge1xcbiAgICAgICAgaWYgKGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMVxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwczovL3Bhbi5iYWlkdS5jb20vYXBpL2ZpbGVtZXRhc1xcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImFjY2Vzc190b2tlblxcXCI6IGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwiZGxpbmtcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ3ZWJcXFwiOiBcXFwiNVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJvcmlnaW5cXFwiOiBcXFwiZGxuYVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJ0YXJnZXRcXFwiOiBgW1xcXFxcXFwiJHtwYXRofVxcXFxcXFwiXWBcXG4gICAgICAgICAgICB9KSkpLmluZm9bMF0uZGxpbmtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vbXVsdGltZWRpYVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcImFjY2Vzc190b2tlblxcXCI6IGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpLFxcbiAgICAgICAgICAgICAgICBcXFwibWV0aG9kXFxcIjogXFxcImZpbGVtZXRhc1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJmc2lkc1xcXCI6IGBbJHtpZH1dYCxcXG4gICAgICAgICAgICAgICAgXFxcImRsaW5rXFxcIjogXFxcIjFcXFwiXFxuICAgICAgICAgICAgfSksIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwicGFuLmJhaWR1LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pKS5saXN0WzBdLmRsaW5rICsgXFxcIiZhY2Nlc3NfdG9rZW49XFxcIiArIGdldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXh0ID09IFxcXCJtb3ZpZVxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcInBhbi5iYWlkdS5jb21cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcImF1ZGlvXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHVybHM6IFtyZXMgKyBcXFwiI2lzTXVzaWM9dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwicGFuLmJhaWR1LmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFwiaW1nXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiByZXMgKyBgIy5qcGc7e1VzZXItQWdlbnRAcGFuLmJhaWR1LmNvbX1gXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiZG93bmxvYWQ6Ly9cXFwiICsgcmVzICsgYDt7VXNlci1BZ2VudEBwYW4uYmFpZHUuY29tfWBcXG4gICAgICAgIH1cXG4gICAgfSwgZXh0LCBpZCwgcGF0aClcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzJcIixcIm5hbWVcIjpcImxvZ2luMVwiLFwicGF0aFwiOlwibG9naW4xXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi6I635Y+WdG9rZW5cXFwiLFxcbiAgICB1cmw6IFxcXCJodHRwczovL29wZW5hcGkuYmFpZHUuY29tL29hdXRoLzIuMC9hdXRob3JpemU/cmVzcG9uc2VfdHlwZT1jb2RlJmNsaWVudF9pZD1pWUNlQzlnMDhoNXZ1UDlVcXZQSEtLU1ZyS0ZYR2ExdiZyZWRpcmVjdF91cmk9aHR0cHM6Ly90b29sLm5uLmNpL2JhaWR1L2NhbGxiYWNrJnNjb3BlPWJhc2ljLG5ldGRpc2smcXJjb2RlPTFcXFwiXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJChcXFwiXFxcIiwgXFxcIuWhq+WGmeiOt+WPluWIsOeahHRva2VuXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cHM6Ly9vcGVuYXBpLmJhaWR1LmNvbS9vYXV0aC8yLjAvdG9rZW5cXFwiLCB7XFxuICAgICAgICAgICAgXFxcImdyYW50X3R5cGVcXFwiOiBcXFwicmVmcmVzaF90b2tlblxcXCIsXFxuICAgICAgICAgICAgXFxcInJlZnJlc2hfdG9rZW5cXFwiOiBpbnB1dCxcXG4gICAgICAgICAgICBcXFwiY2xpZW50X2lkXFxcIjogXFxcImlZQ2VDOWcwOGg1dnVQOVVxdlBIS0tTVnJLRlhHYTF2XFxcIixcXG4gICAgICAgICAgICBcXFwiY2xpZW50X3NlY3JldFxcXCI6IFxcXCJqWGlGTU9QVlBDV2xPMk01Q3dXUXpmZnBOUGFHVFJCR1xcXCJcXG4gICAgICAgIH0pKSlcXG4gICAgICAgIGlmICghcmVzLmFjY2Vzc190b2tlbikge1xcbiAgICAgICAgICAgIGxvZyhyZXMpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mUmeivr++8ge+8ge+8gVxcXCJcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFwiLCByZXMuYWNjZXNzX3Rva2VuKVxcbiAgICAgICAgICAgLy8gc2V0SXRlbShcXFwicmVmcmVzaF90b2tlblxcXCIsIHJlcy5yZWZyZXNoX3Rva2VuKVxcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyBcXFwi5a6Y5pa55o6l5Y+j77ya5LiN5pivdmlw5Lya6ZmQ6YCf77yM56iz5a6aXFxcIiA6IFxcXCLpnZ7lrpjmlrnmjqXlj6PvvJrlj6/og73kuI3pmZDpgJ/vvIzkuI3nqLPlrppcXFwiLFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBzZXRJdGVtKFxcXCJqa1xcXCIsIGdldEl0ZW0oXFxcImprXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyBcXFwiMVxcXCIgOiBcXFwiMFxcXCIpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQaWtwYWtcIixcInBhdGhcIjpcIlBpa3Bha1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzMlxcXCJcXG59KVxcbmlmIChnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiLCBcXFwiXFxcIikgIT0gXFxcIlxcXCIpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBnZXRIem1cXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlMlxcXCIpXFxuICAgICAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBbe1xcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIua3u+WKoOejgemTvlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiXFxcIiwgXFxcIui+k+WFpeejgeWKm+mTvuaOpVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJwaWtwYWthcHA6Ly9teXBpa3Bhay5jb20veHBhbi9tYWluX3RhYj90YWI9MSZhZGRfdXJsPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlc1xcXCIsIHtcXG4gICAgICAgICAgICBcXFwicGFyZW50X2lkXFxcIjogcGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQsXFxuICAgICAgICAgICAgXFxcInRodW1ibmFpbF9zaXplXFxcIjogXFxcIlNJWkVfTEFSR0VcXFwiLFxcbiAgICAgICAgICAgIFxcXCJ3aXRoX2F1ZGl0XFxcIjogXFxcInRydWVcXFwiLFxcbiAgICAgICAgICAgIFxcXCJsaW1pdFxcXCI6IFxcXCIxMDAwXFxcIixcXG4gICAgICAgICAgICBcXFwiZmlsdGVyc1xcXCI6ICd7XFxcInBoYXNlXFxcIjp7XFxcImVxXFxcIjpcXFwiUEhBU0VfVFlQRV9DT01QTEVURVxcXCJ9LFxcXCJ0cmFzaGVkXFxcIjp7XFxcImVxXFxcIjpmYWxzZX19JyxcXG4gICAgICAgICAgICBcXFwicGFnZV90b2tlblxcXCI6IFxcXCJcXFwiXFxuICAgICAgICB9KSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKVxcbiAgICAgICAgbGlzdC5maWxlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT0gXFxcImRyaXZlI2ZvbGRlclxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybGwgPSAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHNwaWtwYWtcXFwiLCBwYXRocylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGl0ZW0pXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcblxcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcIiNpc1ZpZGVvPXRydWUjXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGV4dCA9IFxcXCIjaXNNdXNpYz10cnVlI1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcIiMuanBnXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBleHQgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpdGVtLCBleHQpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBgaHR0cHM6Ly9hcGktZHJpdmUubXlwaWtwYWsuY29tL2RyaXZlL3YxL2ZpbGVzLyR7aXRlbS5pZH0/X21hZ2ljPTIwMjEmdGh1bWJuYWlsX3NpemU9U0laRV9MQVJHRWBcXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCh1LCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIgKyBnZXRJdGVtKFxcXCJhY2Nlc3NfdG9rZW5cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHJlcyk7XFxuICAgICAgICAgICAgICAgIGlmIChyZXMubGlua3MgJiYgcmVzLmxpbmtzW1xcXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cXFwiXSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHJlcy5saW5rc1tcXFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXFxcIl0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyBleHRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBmb3IgKGl0ZW0gb2YgcmVzLm1lZGlhcykge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wID0gaXRlbS5saW5rXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC51cmwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcC51cmwgKyBleHRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgaXRlbSwgZXh0KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogaXRlbS5pY29uX2xpbmssXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBpdGVtLmtpbmQgPT0gXFxcImRyaXZlI2ZvbGRlclxcXCIgPyB1cmxsIDogdXJsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIHRvYXN0KFxcXCLmo4DmtYvliLDplJnor69cXFwiKVxcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgfVxcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlMlwiLFwicGF0aFwiOlwiY29kZTJcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5sb2dpbiA9IGZ1bmN0aW9uKHVzZXJuYW1lLCBwYXNzd29yZCkge1xcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShwb3N0KFxcXCJodHRwczovL3VzZXIubXlwaWtwYWsuY29tL3YxL2F1dGgvc2lnbmluXFxcIiwge1xcbiAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgIFxcXCJjYXB0Y2hhX3Rva2VuXFxcIjogXFxcIlxcXCIsXFxuICAgICAgICAgICAgXFxcImNsaWVudF9pZFxcXCI6IFxcXCJZTnhUOXc3R01kV3ZFT0thXFxcIixcXG4gICAgICAgICAgICBcXFwiY2xpZW50X3NlY3JldFxcXCI6IFxcXCJkYncyT3RtVkVldVV2SXB0YjFDb3lnXFxcIixcXG4gICAgICAgICAgICBcXFwidXNlcm5hbWVcXFwiOiB1c2VybmFtZSxcXG4gICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBwYXNzd29yZFxcbiAgICAgICAgfVxcbiAgICB9KSlcXG4gICAgaWYgKHJlcy5hY2Nlc3NfdG9rZW4pIHtcXG4gICAgICAgIHNldEl0ZW0oXFxcImFjY2Vzc190b2tlblxcXCIsIHJlcy5hY2Nlc3NfdG9rZW4pXFxuICAgICAgICBzZXRJdGVtKFxcXCJyZWZyZXNoX3Rva2VuXFxcIiwgcmVzLnJlZnJlc2hfdG9rZW4pXFxuICAgICAgICByZXR1cm4gdHJ1ZVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbG9nKHJlcylcXG4gICAgICAgIHJldHVybiBmYWxzZVxcbiAgICB9XFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcInRleHRfMlwiLFwibmFtZVwiOlwic2V0dGluZ3MyXCIsXCJwYXRoXCI6XCJzZXR0aW5nczJcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLotKblj7co6YKu566xKVxcXCIsXFxuICAgIHVybDogJChnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwidXNlcm5hbWVcXFwiLCBpbnB1dClcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgfSlcXG59KVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5a+G56CBXFxcIixcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIsIFxcXCJcXFwiKSkuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbShcXFwicGFzc3dkXFxcIiwgaW5wdXQpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGNvbnN0IHtcXG4gICAgICAgICAgICBsb2dpblxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGUyXFxcIilcXG4gICAgICAgIGxvZyhnZXRJdGVtKFxcXCJ1c2VybmFtZVxcXCIpKVxcbiAgICAgICAgaWYgKGxvZ2luKGdldEl0ZW0oXFxcInVzZXJuYW1lXFxcIiksIGdldEl0ZW0oXFxcInBhc3N3ZFxcXCIpKSkge1xcbiAgICAgICAgICAgIGJhY2soKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFwiXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nmbvpmYblpLHotKVcXFwiXFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxufSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWkqee/vOS6keebmFwiLFwicGF0aFwiOlwi5aSp57+85LqR55uYXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGlmIChmaWxlRXhpc3QoXFxcIjE4OS50eHRcXFwiKSkge1xcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGdldEZpbGVzLFxcbiAgICAgICAgICAgIGdldEljb25cXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlM1xcXCIpXFxuICAgICAgICB2YXIgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwicGF0aHN0eVxcXCIsIFt7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogLTExLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuWutlxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBhdGhzdHlcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzLCBpKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBnZXRGaWxlcyhwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZClcXG4gICAgICAgIGxpc3QuZmlsZUxpc3RBTy5mb2xkZXJMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICBpbWc6IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi/mlofku7blpLkuc3ZnXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpZCwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwicGF0aHN0eVxcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaXRlbS5pZCwgaXRlbS5uYW1lKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgICAgbGlzdC5maWxlTGlzdEFPLmZpbGVMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgdmFyIGltZyA9IGdldEljb24oaXRlbS5uYW1lKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEh6bVxcbiAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvb2tpZSA9IHJlYWRGaWxlKFxcXCIxODkudHh0XFxcIilcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL2FwaS9wb3J0YWwvZ2V0RmlsZUluZm8uYWN0aW9uXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImZpbGVJZFxcXCI6IGlkXFxuICAgICAgICAgICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkFjY2VwdFxcXCI6IFxcXCJhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLThcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhnZXRIem0obmFtZSkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogW1xcXCJodHRwczpcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKGdldEh6bShuYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXFxcImh0dHBzOlxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShuYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBgIy5qcGdAVXNlci1BZ2VudD0ke1BDX1VBfUBDb29raWU9JHtjb29raWV9YFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImRvd25sb2FkOi8vaHR0cHM6XFxcIiArIHJlcy5kb3dubG9hZFVybCArIGBAVXNlci1BZ2VudD0ke1BDX1VBfUBDb29raWU9JHtjb29raWV9YFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLmlkLCBpdGVtLm5hbWUpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBkLnVuc2hpZnQoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi55m76ZmGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvbG9naW4zXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBkLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IFxcXCLnmbvpmYZcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luM1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgIH0pXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHRvYXN0KFxcXCLnqIvluo/lj6/og73lh7rplJnkuobvvIzor7fmn6XnnIvml6Xlv5dcXFwiKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlM1wiLFwicGF0aFwiOlwiY29kZTNcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5nZXRGaWxlcyA9IGZ1bmN0aW9uKGlkKSB7XFxuICAgIGxldCB1ID0gXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL2FwaS9vcGVuL2ZpbGUvbGlzdEZpbGVzLmFjdGlvblxcXCJcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcInBhZ2VTaXplXFxcIjogMTAwMCxcXG4gICAgICAgIFxcXCJwYWdlTnVtXFxcIjogMSxcXG4gICAgICAgIFxcXCJtZWRpYVR5cGVcXFwiOiAwLFxcbiAgICAgICAgXFxcImZvbGRlcklkXFxcIjogaWQsXFxuICAgICAgICBcXFwiaWNvbk9wdGlvblxcXCI6IDUsXFxuICAgICAgICBcXFwib3JkZXJCeVxcXCI6IFxcXCJsYXN0T3BUaW1lXFxcIixcXG4gICAgICAgIFxcXCJkZXNjZW5kaW5nXFxcIjogXFxcInRydWVcXFwiLFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiMTg5LnR4dFxcXCIpLFxcbiAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04XFxcIixcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHZhciBqc29uID0gcmVzLnJlcGxhY2UoL1xcXFxcXFwiaWRcXFxcXFxcIjooXFxcXGQrKS9nLCAnXFxcImlkXFxcIjpcXFwiJDFcXFwiJykgLy/op6PlhrNqc+eahOeyvuW6pumXrumimFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKVxcbn1cXG4kLmV4cG9ydHMuZ2V0SWNvbiA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIGxldCB7XFxuICAgICAgICBnZXRIem1cXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFwiKVxcbiAgICBsZXQgcm9vdCA9IFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFwiO1xcbiAgICBsZXQgZmlsZXMgPSAnYWl8YXBrfGF2aXxjc3N8ZG1nfGV4ZXxmbHZ8Z2lmfGhpa2VyfGh0bWx8aXNvfGpwZ3xqc3xqc29ufGxvZ3xtb3Z8bXAzfG1wNHxvdGZ8cGhwfHBuZ3xwcHR8cHNkfHRhYmxlfHR4dHx3YXZ8eGxzfHppcHxjc3N8ZG9jfGVwdWJ8ZXhjfGh0bXx4bHN4Jy5zcGxpdCgnfCcpO1xcbiAgICBsZXQgaHptID0gZ2V0SHptKGZpbGVOYW1lKVxcbiAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcbiAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu2LnN2Z1xcXCJcXG4gICAgfVxcbiAgICByZXR1cm4gaW1nXFxufVxcbiQuZXhwb3J0cy5nZXRIem0gPSBmdW5jdGlvbihmaWxlTmFtZSkge1xcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXCIuXFxcIikgKyAxKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImxvZ2luM1wiLFwicGF0aFwiOlwibG9naW4zXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgKCkgPT4ge1xcbiAgICBsZXQgYyA9IGdldFZhcihcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFwiKTtcXG4gICAgbG9nKGMpO1xcbiAgICBzYXZlRmlsZShcXFwiMTg5LnR4dFxcXCIsIGMpO1xcbiAgICBjbGVhclZhcihcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFwiKTtcXG59KVxcbmQucHVzaCh7XFxuICAgIHVybDogXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9sb2dpbi5odG1sXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLmhyZWZcXG4gICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbWFpblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSBmYmEuZ2V0Q29va2llKHVybCk7XFxuICAgICAgICAgICAgICAgIGlmIChjb29raWUgIT0gbnVsbCAmJiBjb29raWUubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcihcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFwiLCBjb29raWUpO1xcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXFxcIuW3suiOt+WPluWIsGNvb2tpZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLmJhY2soKTsgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgdWE6IFBDX1VBLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZVxcbiAgICB9XFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlpLjlhYvnvZHnm5hcIixcInBhdGhcIjpcIuWkuOWFi+e9keebmFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICBpZiAoZmlsZUV4aXN0KFxcXCJxdWFyay50eHRcXFwiKSkge1xcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGdldEljb24sXFxuICAgICAgICAgICAgZ2V0SHptLFxcbiAgICAgICAgICAgIGdldExpbmtcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlNFxcXCIpXFxuICAgICAgICB2YXIgY29va2llID0gcmVhZEZpbGUoXFxcInF1YXJrLnR4dFxcXCIpXFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2FjY291bnQvaW5mb1xcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoc1xcXCIsIFt7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogXFxcIjBcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuagueebruW9lVxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB1c2VyaW5mby5kYXRhLm5pY2tuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IHVzZXJpbmZvLmRhdGEuYXZhdGFyVXJpLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3M0XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoc1xcXCIsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwgcGF0aHMsIGkpXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvc29ydFxcXCIsIHtcXG4gICAgICAgICAgICBcXFwicGRpcl9maWRcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZCxcXG4gICAgICAgICAgICBcXFwiZnJcXFwiOiBcXFwicGNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJwclxcXCI6IFxcXCJ1Y3Byb1xcXCIsXFxuICAgICAgICAgICAgXFxcIl9zaXplXFxcIjogMTAsXFxuICAgICAgICAgICAgXFxcIl9mZXRjaF90b3RhbFxcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICAgICBcXFwiX3NvcnRcXFwiOiBcXFwiZmlsZV90eXBlOmFzYyxmaWxlX25hbWU6YXNjXFxcIixcXG4gICAgICAgICAgICBcXFwiX3BhZ2VcXFwiOiBnZXRQYXJhbShcXFwicGFnZVxcXCIpXFxuICAgICAgICB9KSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZSxcXG4gICAgICAgICAgICAgICAgXFxcIkFjY2VwdFxcXCI6IFxcXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpXFxuICAgICAgICByZXMuZGF0YS5saXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFpdGVtLmZpbGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmZpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLmZpbGVfbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoc1xcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFwibW92aWVcXFwiKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXCJhdWRpb1xcXCIpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXCJpbWdcXFwiKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZmlsZV9uYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGdldEljb24oaXRlbSksXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzNFxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJjb2RlNFwiLFwicGF0aFwiOlwiY29kZTRcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgZ2V0SHptXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcIilcXG4gICAgbGV0IHJvb3QgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcIjtcXG4gICAgaWYgKCFjb250ZW50LmZpbGUpIHtcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFwi5paH5Lu25aS5LnN2Z1xcXCJcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxldCBmaWxlcyA9ICdhaXxhcGt8YXZpfGNzc3xkbWd8ZXhlfGZsdnxnaWZ8aGlrZXJ8aHRtbHxpc298anBnfGpzfGpzb258bG9nfG1vdnxtcDN8bXA0fG90ZnxwaHB8cG5nfHBwdHxwc2R8dGFibGV8dHh0fHdhdnx4bHN8emlwfGNzc3xkb2N8ZXB1YnxleGN8aHRtfHhsc3gnLnNwbGl0KCd8Jyk7XFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBjb250ZW50LmZpbGVfbmFtZVxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIGh6bSArICcuc3ZnJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXCLmlofku7Yuc3ZnXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBpbWdcXG59XFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxuICAgIHJldHVybiBmaWxlTmFtZS5zdWJzdHIoZmlsZU5hbWUubGFzdEluZGV4T2YoXFxcIi5cXFwiKSArIDEpXFxufVxcbiQuZXhwb3J0cy5nZXRMaW5rID0gZnVuY3Rpb24oaXRlbSwgY29va2llLCBleHQpIHtcXG4gICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoZmlkLCBjb29raWUsIGV4dCkgPT4ge1xcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocG9zdChcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9kb3dubG9hZD9wcj11Y3BybyZmcj1wY1xcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUsXFxuICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwiZmlkc1xcXCI6IFtmaWRdXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pKVxcbiAgICAgICAgaWYgKGV4dCA9PSBcXFwibW92aWVcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgdXJsczogW3Jlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCJdLFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09IFxcXCJhdWRpb1xcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgXFxcIiNpc011c2ljPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT0gXFxcImltZ1xcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgYEBSZWZlcmVyPWh0dHBzOi8vcGFuLnF1YXJrLmNuL0BDb29raWU9JHtjb29raWV9YFxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImRvd25sb2FkOi8vXFxcIiArIHJlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIGBAUmVmZXJlcj1odHRwczovL3Bhbi5xdWFyay5jbi9AQ29va2llPSR7Y29va2llfWBcXG4gICAgICAgIH1cXG4gICAgfSwgaXRlbS5maWQsIGNvb2tpZSwgZXh0KVxcbiAgICByZXR1cm4gdXJsXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwic2V0dGluZ3M0XCIsXCJwYXRoXCI6XCJzZXR0aW5nczRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAoKSA9PiB7XFxuICAgIHNhdmVGaWxlKFxcXCJxdWFyay50eHRcXFwiLCBnZXRWYXIoXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2xpc3QjL2xpc3QvYWxsXFxcIikpXFxuICAgIGNsZWFyVmFyKFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXCIpO1xcbn0pXFxuZC5wdXNoKHtcXG4gICAgdXJsOiBcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLmhyZWZcXG4gICAgICAgICAgICBpZiAodXJsID09IFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2tpZSA9IGZiYS5nZXRDb29raWUodXJsKTtcXG4gICAgICAgICAgICAgICAgaWYgKGNvb2tpZSAhPSBudWxsICYmIGNvb2tpZS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKHVybCwgY29va2llKTtcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXCLlt7Lojrflj5bliLBjb29raWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5iYWNrKCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgICAgIHVhOiBQQ19VQSxcXG4gICAgICAgIGNhbkJhY2s6IHRydWVcXG4gICAgfVxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YWz5LqOXCIsXCJwYXRoXCI6XCJhYm91dFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJjXFxcIik7XFxufSkpO1xcbmQucHVzaCgkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hYm91dDJcXFwiKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgbGV0IGMgPSBwYXJzZUludChnZXRNeVZhcihcXFwiY1xcXCIsIFxcXCIxXFxcIikpXFxuICAgICAgICBpZiAoYyA+PSA1KSB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcIuehruWumuimgeW8gOWQr+W8gOWPkeiAheaooeW8j+WQl++8n+azqOaEj+W8gOWQr+ivpeaooeW8j+WImeihqOekuuWQjue7reaCqOeahOaJgOacieaTjeS9nOWdh+S4uuS4u+inguiDveWKqOaTjeS9nO+8jOaJgOS6p+eUn+eahOS4gOWIh+mXrumimOS4jui0o+S7u+Wdh+eUseaCqOiHquW3seaJv+aLhVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwiZGV2XFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlvIDlkK/lvIDlj5HogIXmqKHlvI9cXFwiXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiY1xcXCIsIGMgKyAxICsgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgfVxcbn0pO1xcblxcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWFs+S6jjJcIixcInBhdGhcIjpcImFib3V0MlwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0ge1xcbiAgICB0aXRsZTogXFxcIuacrOinhOWImeWfuuS6juW8gOa6kOmhueebru+8mjxhIGhyZWY9XFxcXFxcXCJodHRwczovL2dpdGh1Yi5jb20vYWxpc3Qtb3JnL2FsaXN0XFxcXFxcXCI+QWxpc3Q8L2E+77yM5o6i57Si5LiN5L2/55So5pyN5Yqh5Zmo5a6e546wQWxpc3TpgLvovpHvvIzmnKzop4TliJnmiYDmnInku6PnoIHlhajpg6jlvIDmupDvvIzku4XpmZDkuKrkurrkvb/nlKjvvIzku4XkvpvnoJTnqbbjgIHlrabkuaDlkozmtYvor5XvvIznpoHmraLovazovb3liIbkuqvliLDnrKzkuInmlrnlubPlj7BcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCJcXG59XCJ9XSxcInBhcmFtc1wiOlwie31cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi572R55uY5ZCI6ZuGXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL+WkuOWFi+e9keebmD9wYWdlPWZ5cGFnZVwiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICBpZiAoZmlsZUV4aXN0KFxcXCJxdWFyay50eHRcXFwiKSkge1xcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGdldEljb24sXFxuICAgICAgICAgICAgZ2V0SHptLFxcbiAgICAgICAgICAgIGdldExpbmtcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb2RlNFxcXCIpXFxuICAgICAgICB2YXIgY29va2llID0gcmVhZEZpbGUoXFxcInF1YXJrLnR4dFxcXCIpXFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2FjY291bnQvaW5mb1xcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSlcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJwYXRoc1xcXCIsIFt7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogXFxcIjBcXFwiLFxcbiAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIuagueebruW9lVxcXCJcXG4gICAgICAgIH1dKVxcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB1c2VyaW5mby5kYXRhLm5pY2tuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IHVzZXJpbmZvLmRhdGEuYXZhdGFyVXJpLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3M0XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoc1xcXCIsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwgcGF0aHMsIGkpXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvc29ydFxcXCIsIHtcXG4gICAgICAgICAgICBcXFwicGRpcl9maWRcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5pZCxcXG4gICAgICAgICAgICBcXFwiZnJcXFwiOiBcXFwicGNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJwclxcXCI6IFxcXCJ1Y3Byb1xcXCIsXFxuICAgICAgICAgICAgXFxcIl9zaXplXFxcIjogMTAsXFxuICAgICAgICAgICAgXFxcIl9mZXRjaF90b3RhbFxcXCI6IFxcXCIxXFxcIixcXG4gICAgICAgICAgICBcXFwiX3NvcnRcXFwiOiBcXFwiZmlsZV90eXBlOmFzYyxmaWxlX25hbWU6YXNjXFxcIixcXG4gICAgICAgICAgICBcXFwiX3BhZ2VcXFwiOiBnZXRQYXJhbShcXFwicGFnZVxcXCIpXFxuICAgICAgICB9KSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZSxcXG4gICAgICAgICAgICAgICAgXFxcIkFjY2VwdFxcXCI6IFxcXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpXFxuICAgICAgICByZXMuZGF0YS5saXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgaWYgKCFpdGVtLmZpbGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmZpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLmZpbGVfbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJwYXRoc1xcXCIsIHBhdGhzKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFwibW92aWVcXFwiKVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXCJhdWRpb1xcXCIpXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmltZy5pbmNsdWRlcyhnZXRIem0oaXRlbS5maWxlX25hbWUpKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXCJpbWdcXFwiKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZmlsZV9uYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGdldEljb24oaXRlbSksXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIueZu+mZhlxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NldHRpbmdzNFxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCIsXCJncm91cFwiOlwi6KeG6aKRXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCIkLmV4dGVuZCh7XFxuICAgIGF1ZGlvOiBbXFxcIm1wM1xcXCIsIFxcXCJmbGFjXFxcIiwgXFxcIm9nZ1xcXCIsIFxcXCJtNGFcXFwiLCBcXFwid2F2XFxcIiwgXFxcIm9wdXNcXFwiXSxcXG4gICAgbW92aWU6IFtcXFwibXA0XFxcIiwgXFxcIm1rdlxcXCIsIFxcXCJhdmlcXFwiLCBcXFwibW92XFxcIiwgXFxcInJtdmJcXFwiLCBcXFwid2VibVxcXCIsIFxcXCJmbHZcXFwiLCBcXFwibTR2XFxcIiwgXFxcIm0zdThcXFwiLCBcXFwidHNcXFwiXSxcXG4gICAgaW1nOiBbXFxcImpwZ1xcXCIsIFxcXCJwbmdcXFwiLCBcXFwianBlZ1xcXCIsIFxcXCJnaWZcXFwiLCBcXFwic3ZnXFxcIiwgXFxcInJhd1xcXCJdXFxufSlcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiMTIzcGFuXFxcIixcXFwicGF0aFxcXCI6XFxcIjEyM3BhblxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG50cnkge1xcXFxuICAgIGNvbnN0IHtcXFxcbiAgICAgICAgZmlsZUxpc3QsXFxcXG4gICAgICAgIGdldEljb25cXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFxcXFxcIilcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLimpnvuI/orr7nva5cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nc1xcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxuICAgIGlmIChnZXRJdGVtKFxcXFxcXFwidG9rZW5cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICB2YXIgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcInBhdGhzMTIzXFxcXFxcXCIsIFt7XFxcXG4gICAgICAgICAgICBuYW1lOiBcXFxcXFxcIuagueebruW9lVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwiMFxcXFxcXFwiXFxcXG4gICAgICAgIH1dKVxcXFxuICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMSkge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCI8XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wb3AoKVxcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzMTIzXFxcXFxcXCIsIHBhdGhzKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIHBhdGhzKVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMsIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwiaWRcXFxcXFxcIiwgaXRlbS5pZClcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoczEyM1xcXFxcXFwiLCBwYXRocy5zbGljZSgwLCBpbmRleCArIDEpKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0sIHBhdGhzLCBpbmRleClcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGZpbGVMaXN0KHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLmlkKS5kYXRhLkluZm9MaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgaW1nID0gZ2V0SWNvbihpdGVtKVxcXFxuICAgICAgICAgICAgaWYgKGl0ZW0uVHlwZSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoaWQsIG5hbWUsIHBhdGhzKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZFxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzMTIzXFxcXFxcXCIsIHBhdGhzKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0uRmlsZUlkLCBpdGVtLkZpbGVOYW1lLCBwYXRocylcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGl0ZW0uRG93bmxvYWRVcmxcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uRmlsZU5hbWUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuacqueZu+W9lVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nc1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCJcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJjb2RlXFxcIixcXFwicGF0aFxcXCI6XFxcImNvZGVcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzLmZpbGVMaXN0ID0gZnVuY3Rpb24oaWQpIHtcXFxcbiAgICBsZXQgbGlzdCA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL3d3dy4xMjNwYW4uY29tL2FwaS9maWxlL2xpc3QvbmV3XFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJkcml2ZUlkXFxcXFxcXCI6IDAsXFxcXG4gICAgICAgIFxcXFxcXFwibGltaXRcXFxcXFxcIjogMTAwLFxcXFxuICAgICAgICBcXFxcXFxcIm9yZGVyQnlcXFxcXFxcIjogXFxcXFxcXCJmaWxlSWRcXFxcXFxcIixcXFxcbiAgICAgICAgXFxcXFxcXCJPcmRlckRpcmVjdGlvblxcXFxcXFwiOiBcXFxcXFxcImFzY1xcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcIlBhcmVudEZpbGVJZFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJ0cmFzaGVkXFxcXFxcXCI6IGZhbHNlXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJBdXRob3JpemF0aW9uXFxcXFxcXCI6IFxcXFxcXFwiQmVhcmVyIFxcXFxcXFwiICsgZ2V0SXRlbShcXFxcXFxcInRva2VuXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKGxpc3QpXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SWNvbiA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBnZXRIem1cXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFxcXFxcIilcXFxcbiAgICBsZXQgcm9vdCA9IFxcXFxcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcXFxcXCI7XFxcXG4gICAgaWYgKGNvbnRlbnQuVHlwZSA9PSAxKSB7XFxcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFxcXFxcIuaWh+S7tuWkuS5zdmdcXFxcXFxcIlxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGxldCBmaWxlcyA9ICdhaXxhcGt8YXZpfGNzc3xkbWd8ZXhlfGZsdnxnaWZ8aGlrZXJ8aHRtbHxpc298anBnfGpzfGpzb258bG9nfG1vdnxtcDN8bXA0fG90ZnxwaHB8cG5nfHBwdHxwc2R8dGFibGV8dHh0fHdhdnx4bHN8emlwfGNzc3xkb2N8ZXB1YnxleGN8aHRtfHhsc3gnLnNwbGl0KCd8Jyk7XFxcXG4gICAgICAgIGxldCBmaWxlTmFtZSA9IGNvbnRlbnQuRmlsZU5hbWVcXFxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXFxcbiAgICAgICAgaWYgKGZpbGVzLmluY2x1ZGVzKGh6bSkpIHtcXFxcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpbWcgPSByb290ICsgXFxcXFxcXCLmlofku7Yuc3ZnXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaW1nXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SHptID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXFxcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXFxcXFwiLlxcXFxcXFwiKSArIDEpXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCJzZXR0aW5nc1xcXCIsXFxcInBhdGhcXFwiOlxcXCJzZXR0aW5nc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIui0puWPtyjmiYvmnLrlj7cpXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSkuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIiwgaW5wdXQpXFxcXG4gICAgfSlcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuWvhueggVxcXFxcXFwiLFxcXFxuICAgIHVybDogJChnZXRJdGVtKFxcXFxcXFwicGFzc3dkXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJwYXNzd2RcXFxcXFxcIiwgaW5wdXQpXFxcXG4gICAgfSlcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIueZu+mZhlxcXFxcXFwiLFxcXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocG9zdChcXFxcXFxcImh0dHBzOi8vd3d3LjEyM3Bhbi5jb20vYXBpL3VzZXIvc2lnbl9pblxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJwYXNzcG9ydFxcXFxcXFwiOiBnZXRJdGVtKFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJwYXNzd29yZFxcXFxcXFwiOiBnZXRJdGVtKFxcXFxcXFwicGFzc3dkXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKVxcXFxuICAgICAgICBpZiAocmVzLm1lc3NhZ2UgPT0gXFxcXFxcXCJzdWNjZXNzXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJ0b2tlblxcXFxcXFwiLCByZXMuZGF0YS50b2tlbilcXFxcbiAgICAgICAgICAgIGJhY2soKVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcIiArIHJlcy5tZXNzYWdlXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcbn0pXFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLnmb7luqbnvZHnm5hcXFwiLFxcXCJwYXRoXFxcIjpcXFwi55m+5bqm572R55uYXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi6K6+572uXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9sb2dpbjFcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIlxcXFxufSlcXFxcbmlmIChnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICBnZXRJY29uLFxcXFxuICAgICAgICAgICAgZ2V0SHptLFxcXFxuICAgICAgICAgICAgZ2V0TGlua1xcXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGUxXFxcXFxcXCIpXFxcXG4gICAgICAgIGxldCBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwicGF0aHNiYWlkdVxcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgcGF0aDogXFxcXFxcXCIvXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBuYW1lOiBcXFxcXFxcIuWutlxcXFxcXFwiXFxcXG4gICAgICAgIH1dKVxcXFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHNiYWlkdVxcXFxcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGkpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHBzOi8vcGFuLmJhaWR1LmNvbS9yZXN0LzIuMC94cGFuL2ZpbGVcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIjogZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlbmJhaWR1XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJtZXRob2RcXFxcXFxcIjogXFxcXFxcXCJsaXN0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImRpclxcXFxcXFwiOiBwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRoLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ3ZWJcXFxcXFxcIjogXFxcXFxcXCJ3ZWJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwibGltaXRcXFxcXFxcIjogMCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwibGltaXRcXFxcXFxcIjogMjAwXFxcXG4gICAgICAgIH0pKSlcXFxcbiAgICAgICAgcmVzLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChpdGVtLmlzZGlyID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCgpLmxhenlSdWxlKChpdGVtLCBwYXRocykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uc2VydmVyX2ZpbGVuYW1lXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGF0aHNiYWlkdVxcXFxcXFwiLCBwYXRocylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBpdGVtLCBwYXRocylcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhnZXRIem0oaXRlbS5zZXJ2ZXJfZmlsZW5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKFxcXFxcXFwibW92aWVcXFxcXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLmF1ZGlvLmluY2x1ZGVzKGdldEh6bShpdGVtLnNlcnZlcl9maWxlbmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoXFxcXFxcXCJhdWRpb1xcXFxcXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShpdGVtLnNlcnZlcl9maWxlbmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoXFxcXFxcXCJpbWdcXFxcXFxcIiwgaXRlbS5mc19pZCwgaXRlbS5wYXRoKVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhcXFxcXFxcIlxcXFxcXFwiLCBpdGVtLmZzX2lkLCBpdGVtLnBhdGgpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnNlcnZlcl9maWxlbmFtZSxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IGdldEljb24oaXRlbSksXFxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgICAgICB0b2FzdChcXFxcXFxcIuWHuueOsOmUmeivr++8jOivt+afpeeci+aXpeW/l1xcXFxcXFwiKSAgICAgICAgXFxcXG4gICAgfVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImNvZGUxXFxcIixcXFwicGF0aFxcXCI6XFxcImNvZGUxXFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cy5nZXRJY29uID0gZnVuY3Rpb24oY29udGVudCkge1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGdldEh6bVxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZVxcXFxcXFwiKVxcXFxuICAgIGxldCByb290ID0gXFxcXFxcXCJodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9pbWcv5paH5Lu257G75Z6LMi9cXFxcXFxcIjtcXFxcbiAgICBpZiAoY29udGVudC5pc2RpciA9PSAxKSB7XFxcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFxcXFxcIuaWh+S7tuWkuS5zdmdcXFxcXFxcIlxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGxldCBmaWxlcyA9ICdhaXxhcGt8YXZpfGNzc3xkbWd8ZXhlfGZsdnxnaWZ8aGlrZXJ8aHRtbHxpc298anBnfGpzfGpzb258bG9nfG1vdnxtcDN8bXA0fG90ZnxwaHB8cG5nfHBwdHxwc2R8dGFibGV8dHh0fHdhdnx4bHN8emlwfGNzc3xkb2N8ZXB1YnxleGN8aHRtfHhsc3gnLnNwbGl0KCd8Jyk7XFxcXG4gICAgICAgIGxldCBmaWxlTmFtZSA9IGNvbnRlbnQuc2VydmVyX2ZpbGVuYW1lXFxcXG4gICAgICAgIGxldCBoem0gPSBnZXRIem0oZmlsZU5hbWUpXFxcXG4gICAgICAgIGlmIChmaWxlcy5pbmNsdWRlcyhoem0pKSB7XFxcXG4gICAgICAgICAgICBpbWcgPSByb290ICsgaHptICsgJy5zdmcnO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaW1nID0gcm9vdCArIFxcXFxcXFwi5paH5Lu2LnN2Z1xcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGltZ1xcXFxufVxcXFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxcXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZihcXFxcXFxcIi5cXFxcXFxcIikgKyAxKVxcXFxufVxcXFxuJC5leHBvcnRzLmdldExpbmsgPSBmdW5jdGlvbihleHQsIGlkLCBwYXRoKSB7XFxcXG4gICAgcmV0dXJuICQoKS5sYXp5UnVsZSgoZXh0LCBpZCwgcGF0aCkgPT4ge1xcXFxuICAgICAgICBpZiAoZ2V0SXRlbShcXFxcXFxcImprXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSA9PSBcXFxcXFxcIjFcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgdmFyIHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHBzOi8vcGFuLmJhaWR1LmNvbS9hcGkvZmlsZW1ldGFzXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiOiBnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZGxpbmtcXFxcXFxcIjogXFxcXFxcXCIxXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ3ZWJcXFxcXFxcIjogXFxcXFxcXCI1XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJvcmlnaW5cXFxcXFxcIjogXFxcXFxcXCJkbG5hXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ0YXJnZXRcXFxcXFxcIjogYFtcXFxcXFxcXFxcXFxcXFwiJHtwYXRofVxcXFxcXFxcXFxcXFxcXCJdYFxcXFxuICAgICAgICAgICAgfSkpKS5pbmZvWzBdLmRsaW5rXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3Jlc3QvMi4wL3hwYW4vbXVsdGltZWRpYVxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIjogZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIm1ldGhvZFxcXFxcXFwiOiBcXFxcXFxcImZpbGVtZXRhc1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZnNpZHNcXFxcXFxcIjogYFske2lkfV1gLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZGxpbmtcXFxcXFxcIjogXFxcXFxcXCIxXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogXFxcXFxcXCJwYW4uYmFpZHUuY29tXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KSkubGlzdFswXS5kbGluayArIFxcXFxcXFwiJmFjY2Vzc190b2tlbj1cXFxcXFxcIiArIGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoZXh0ID09IFxcXFxcXFwibW92aWVcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBcXFxcXFxcInBhbi5iYWlkdS5jb21cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09IFxcXFxcXFwiYXVkaW9cXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICB1cmxzOiBbcmVzICsgXFxcXFxcXCIjaXNNdXNpYz10cnVlI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBcXFxcXFxcInBhbi5iYWlkdS5jb21cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoZXh0ID09IFxcXFxcXFwiaW1nXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiByZXMgKyBgIy5qcGc7e1VzZXItQWdlbnRAcGFuLmJhaWR1LmNvbX1gXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJkb3dubG9hZDovL1xcXFxcXFwiICsgcmVzICsgYDt7VXNlci1BZ2VudEBwYW4uYmFpZHUuY29tfWBcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIGV4dCwgaWQsIHBhdGgpXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMlxcXCIsXFxcIm5hbWVcXFwiOlxcXCJsb2dpbjFcXFwiLFxcXCJwYXRoXFxcIjpcXFwibG9naW4xXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi6I635Y+WdG9rZW5cXFxcXFxcIixcXFxcbiAgICB1cmw6IFxcXFxcXFwiaHR0cHM6Ly9vcGVuYXBpLmJhaWR1LmNvbS9vYXV0aC8yLjAvYXV0aG9yaXplP3Jlc3BvbnNlX3R5cGU9Y29kZSZjbGllbnRfaWQ9aVlDZUM5ZzA4aDV2dVA5VXF2UEhLS1NWcktGWEdhMXYmcmVkaXJlY3RfdXJpPWh0dHBzOi8vdG9vbC5ubi5jaS9iYWlkdS9jYWxsYmFjayZzY29wZT1iYXNpYyxuZXRkaXNrJnFyY29kZT0xXFxcXFxcXCJcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIueZu+mZhlxcXFxcXFwiLFxcXFxuICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIuWhq+WGmeiOt+WPluWIsOeahHRva2VuXFxcXFxcXCIpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHBzOi8vb3BlbmFwaS5iYWlkdS5jb20vb2F1dGgvMi4wL3Rva2VuXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiZ3JhbnRfdHlwZVxcXFxcXFwiOiBcXFxcXFxcInJlZnJlc2hfdG9rZW5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicmVmcmVzaF90b2tlblxcXFxcXFwiOiBpbnB1dCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY2xpZW50X2lkXFxcXFxcXCI6IFxcXFxcXFwiaVlDZUM5ZzA4aDV2dVA5VXF2UEhLS1NWcktGWEdhMXZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY2xpZW50X3NlY3JldFxcXFxcXFwiOiBcXFxcXFxcImpYaUZNT1BWUENXbE8yTTVDd1dRemZmcE5QYUdUUkJHXFxcXFxcXCJcXFxcbiAgICAgICAgfSkpKVxcXFxuICAgICAgICBpZiAoIXJlcy5hY2Nlc3NfdG9rZW4pIHtcXFxcbiAgICAgICAgICAgIGxvZyhyZXMpXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+mUmeivr++8ge+8ge+8gVxcXFxcXFwiXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuYmFpZHVcXFxcXFxcIiwgcmVzLmFjY2Vzc190b2tlbilcXFxcbiAgICAgICAgICAgLy8gc2V0SXRlbShcXFxcXFxcInJlZnJlc2hfdG9rZW5cXFxcXFxcIiwgcmVzLnJlZnJlc2hfdG9rZW4pXFxcXG4gICAgICAgICAgICBiYWNrKClcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogZ2V0SXRlbShcXFxcXFxcImprXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSA9PSBcXFxcXFxcIjBcXFxcXFxcIiA/IFxcXFxcXFwi5a6Y5pa55o6l5Y+j77ya5LiN5pivdmlw5Lya6ZmQ6YCf77yM56iz5a6aXFxcXFxcXCIgOiBcXFxcXFxcIumdnuWumOaWueaOpeWPo++8muWPr+iDveS4jemZkOmAn++8jOS4jeeos+WumlxcXFxcXFwiLFxcXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcImprXFxcXFxcXCIsIGdldEl0ZW0oXFxcXFxcXCJqa1xcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikgPT0gXFxcXFxcXCIwXFxcXFxcXCIgPyBcXFxcXFxcIjFcXFxcXFxcIiA6IFxcXFxcXFwiMFxcXFxcXFwiKVxcXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxufSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJQaWtwYWtcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGlrcGFrXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8yXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nczJcXFxcXFxcIlxcXFxufSlcXFxcbmlmIChnZXRJdGVtKFxcXFxcXFwiYWNjZXNzX3Rva2VuXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICBnZXRIem1cXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlMlxcXFxcXFwiKVxcXFxuICAgICAgICBsZXQgcGF0aHMgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcInBhdGhzcGlrcGFrXFxcXFxcXCIsIFt7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIm5hbWVcXFxcXFxcIjogXFxcXFxcXCLlrrZcXFxcXFxcIlxcXFxuICAgICAgICB9XSlcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIua3u+WKoOejgemTvlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8yXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcXFxcXCJcXFxcXFxcIiwgXFxcXFxcXCLovpPlhaXno4Hlipvpk77mjqVcXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInBpa3Bha2FwcDovL215cGlrcGFrLmNvbS94cGFuL21haW5fdGFiP3RhYj0xJmFkZF91cmw9XFxcXFxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBwYXRocy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzcGlrcGFrXFxcXFxcXCIsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cHM6Ly9hcGktZHJpdmUubXlwaWtwYWsuY29tL2RyaXZlL3YxL2ZpbGVzXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicGFyZW50X2lkXFxcXFxcXCI6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLmlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ0aHVtYm5haWxfc2l6ZVxcXFxcXFwiOiBcXFxcXFxcIlNJWkVfTEFSR0VcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwid2l0aF9hdWRpdFxcXFxcXFwiOiBcXFxcXFxcInRydWVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwibGltaXRcXFxcXFxcIjogXFxcXFxcXCIxMDAwXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImZpbHRlcnNcXFxcXFxcIjogJ3tcXFxcXFxcInBoYXNlXFxcXFxcXCI6e1xcXFxcXFwiZXFcXFxcXFxcIjpcXFxcXFxcIlBIQVNFX1RZUEVfQ09NUExFVEVcXFxcXFxcIn0sXFxcXFxcXCJ0cmFzaGVkXFxcXFxcXCI6e1xcXFxcXFwiZXFcXFxcXFxcIjpmYWxzZX19JyxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicGFnZV90b2tlblxcXFxcXFwiOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgICAgIH0pLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJBdXRob3JpemF0aW9uXFxcXFxcXCI6IFxcXFxcXFwiQmVhcmVyIFxcXFxcXFwiICsgZ2V0SXRlbShcXFxcXFxcImFjY2Vzc190b2tlblxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgbGlzdC5maWxlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGl0ZW0ua2luZCA9PSBcXFxcXFxcImRyaXZlI2ZvbGRlclxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybGwgPSAkKCkubGF6eVJ1bGUoKHBhdGhzLCBpdGVtKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc3Bpa3Bha1xcXFxcXFwiLCBwYXRocylcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaXRlbSlcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5tb3ZpZS5pbmNsdWRlcyhnZXRIem0oaXRlbS5uYW1lKSkpIHtcXFxcblxcXFxuICAgICAgICAgICAgICAgIHZhciBleHQgPSBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5hdWRpby5pbmNsdWRlcyhnZXRIem0oaXRlbS5uYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZXh0ID0gXFxcXFxcXCIjaXNNdXNpYz10cnVlI1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShpdGVtLm5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBleHQgPSBcXFxcXFxcIiMuanBnXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGV4dCA9IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciB1cmwgPSAkKCkubGF6eVJ1bGUoKGl0ZW0sIGV4dCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gYGh0dHBzOi8vYXBpLWRyaXZlLm15cGlrcGFrLmNvbS9kcml2ZS92MS9maWxlcy8ke2l0ZW0uaWR9P19tYWdpYz0yMDIxJnRodW1ibmFpbF9zaXplPVNJWkVfTEFSR0VgXFxcXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCh1LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQXV0aG9yaXphdGlvblxcXFxcXFwiOiBcXFxcXFxcIkJlYXJlciBcXFxcXFxcIiArIGdldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhyZXMpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChyZXMubGlua3MgJiYgcmVzLmxpbmtzW1xcXFxcXFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXFxcXFxcXCJdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSByZXMubGlua3NbXFxcXFxcXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cXFxcXFxcIl0udXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgZXh0XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIG9mIHJlcy5tZWRpYXMpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0bXAgPSBpdGVtLmxpbmtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAudXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcC51cmwgKyBleHRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCBpdGVtLCBleHQpXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBpdGVtLmljb25fbGluayxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6IGl0ZW0ua2luZCA9PSBcXFxcXFxcImRyaXZlI2ZvbGRlclxcXFxcXFwiID8gdXJsbCA6IHVybFxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIHRvYXN0KFxcXFxcXFwi5qOA5rWL5Yiw6ZSZ6K+vXFxcXFxcXCIpXFxcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiY29kZTJcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29kZTJcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzLmxvZ2luID0gZnVuY3Rpb24odXNlcm5hbWUsIHBhc3N3b3JkKSB7XFxcXG4gICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocG9zdChcXFxcXFxcImh0dHBzOi8vdXNlci5teXBpa3Bhay5jb20vdjEvYXV0aC9zaWduaW5cXFxcXFxcIiwge1xcXFxuICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImNhcHRjaGFfdG9rZW5cXFxcXFxcIjogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY2xpZW50X2lkXFxcXFxcXCI6IFxcXFxcXFwiWU54VDl3N0dNZFd2RU9LYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjbGllbnRfc2VjcmV0XFxcXFxcXCI6IFxcXFxcXFwiZGJ3Mk90bVZFZXVVdklwdGIxQ295Z1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiOiB1c2VybmFtZSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicGFzc3dvcmRcXFxcXFxcIjogcGFzc3dvcmRcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKVxcXFxuICAgIGlmIChyZXMuYWNjZXNzX3Rva2VuKSB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJhY2Nlc3NfdG9rZW5cXFxcXFxcIiwgcmVzLmFjY2Vzc190b2tlbilcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInJlZnJlc2hfdG9rZW5cXFxcXFxcIiwgcmVzLnJlZnJlc2hfdG9rZW4pXFxcXG4gICAgICAgIHJldHVybiB0cnVlXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgbG9nKHJlcylcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxcXG4gICAgfVxcXFxufVxcXFxuJC5leHBvcnRzLmdldEh6bSA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxcXG4gICAgcmV0dXJuIGZpbGVOYW1lLnN1YnN0cihmaWxlTmFtZS5sYXN0SW5kZXhPZihcXFxcXFxcIi5cXFxcXFxcIikgKyAxKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwic2V0dGluZ3MyXFxcIixcXFwicGF0aFxcXCI6XFxcInNldHRpbmdzMlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIui0puWPtyjpgq7nrrEpXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSkuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBzZXRJdGVtKFxcXFxcXFwidXNlcm5hbWVcXFxcXFxcIiwgaW5wdXQpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICB9KVxcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi5a+G56CBXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKGdldEl0ZW0oXFxcXFxcXCJwYXNzd2RcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInBhc3N3ZFxcXFxcXFwiLCBpbnB1dClcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgIH0pXFxcXG59KVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLnmbvpmYZcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgIGxvZ2luXFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29kZTJcXFxcXFxcIilcXFxcbiAgICAgICAgbG9nKGdldEl0ZW0oXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiKSlcXFxcbiAgICAgICAgaWYgKGxvZ2luKGdldEl0ZW0oXFxcXFxcXCJ1c2VybmFtZVxcXFxcXFwiKSwgZ2V0SXRlbShcXFxcXFxcInBhc3N3ZFxcXFxcXFwiKSkpIHtcXFxcbiAgICAgICAgICAgIGJhY2soKVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/nmbvpmYbmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/nmbvpmYblpLHotKVcXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiXFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5aSp57+85LqR55uYXFxcIixcXFwicGF0aFxcXCI6XFxcIuWkqee/vOS6keebmFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG50cnkge1xcXFxuICAgIGlmIChmaWxlRXhpc3QoXFxcXFxcXCIxODkudHh0XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgIGdldEZpbGVzLFxcXFxuICAgICAgICAgICAgZ2V0SWNvblxcXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGUzXFxcXFxcXCIpXFxcXG4gICAgICAgIHZhciBwYXRocyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXFxcXFwicGF0aHN0eVxcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJpZFxcXFxcXFwiOiAtMTEsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIm5hbWVcXFxcXFxcIjogXFxcXFxcXCLlrrZcXFxcXFxcIlxcXFxuICAgICAgICB9XSlcXFxcbiAgICAgICAgcGF0aHMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc3R5XFxcXFxcXCIsIHBhdGhzLnNsaWNlKDAsIGkgKyAxKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCBwYXRocywgaSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBsaXN0ID0gZ2V0RmlsZXMocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0uaWQpXFxcXG4gICAgICAgIGxpc3QuZmlsZUxpc3RBTy5mb2xkZXJMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBcXFxcXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2ltZy/mlofku7bnsbvlnosyL+aWh+S7tuWkuS5zdmdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgocGF0aHMsIGlkLCBuYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzdHlcXFxcXFxcIiwgcGF0aHMpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSwgcGF0aHMsIGl0ZW0uaWQsIGl0ZW0ubmFtZSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxpc3QuZmlsZUxpc3RBTy5maWxlTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGltZyA9IGdldEljb24oaXRlbS5uYW1lKVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgbmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRIem1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSByZWFkRmlsZShcXFxcXFxcIjE4OS50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBcXFxcXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL2FwaS9wb3J0YWwvZ2V0RmlsZUluZm8uYWN0aW9uXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybCh1LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImZpbGVJZFxcXFxcXFwiOiBpZFxcXFxuICAgICAgICAgICAgICAgICAgICB9KSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkFjY2VwdFxcXFxcXFwiOiBcXFxcXFxcImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KSlcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQubW92aWUuaW5jbHVkZXMoZ2V0SHptKG5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXFxcXFxcXCJodHRwczpcXFxcXFxcIiArIHJlcy5kb3dubG9hZFVybCArIFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQuYXVkaW8uaW5jbHVkZXMoZ2V0SHptKG5hbWUpKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXFxcXFxcXCJodHRwczpcXFxcXFxcIiArIHJlcy5kb3dubG9hZFVybCArIFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQuaW1nLmluY2x1ZGVzKGdldEh6bShuYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImh0dHBzOlxcXFxcXFwiICsgcmVzLmRvd25sb2FkVXJsICsgYCMuanBnQFVzZXItQWdlbnQ9JHtQQ19VQX1AQ29va2llPSR7Y29va2llfWBcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImRvd25sb2FkOi8vaHR0cHM6XFxcXFxcXCIgKyByZXMuZG93bmxvYWRVcmwgKyBgQFVzZXItQWdlbnQ9JHtQQ19VQX1AQ29va2llPSR7Y29va2llfWBcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0uaWQsIGl0ZW0ubmFtZSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgZC51bnNoaWZ0KHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIueZu+mZhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9sb2dpbjNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBkLnVuc2hpZnQoe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLnmbvpmYZcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9sb2dpbjNcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICBsb2coZS5tZXNzYWdlKVxcXFxuICAgIHRvYXN0KFxcXFxcXFwi56iL5bqP5Y+v6IO95Ye66ZSZ5LqG77yM6K+35p+l55yL5pel5b+XXFxcXFxcXCIpXFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiY29kZTNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29kZTNcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzLmdldEZpbGVzID0gZnVuY3Rpb24oaWQpIHtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vYXBpL29wZW4vZmlsZS9saXN0RmlsZXMuYWN0aW9uXFxcXFxcXCJcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxcXG4gICAgICAgIFxcXFxcXFwicGFnZVNpemVcXFxcXFxcIjogMTAwMCxcXFxcbiAgICAgICAgXFxcXFxcXCJwYWdlTnVtXFxcXFxcXCI6IDEsXFxcXG4gICAgICAgIFxcXFxcXFwibWVkaWFUeXBlXFxcXFxcXCI6IDAsXFxcXG4gICAgICAgIFxcXFxcXFwiZm9sZGVySWRcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgIFxcXFxcXFwiaWNvbk9wdGlvblxcXFxcXFwiOiA1LFxcXFxuICAgICAgICBcXFxcXFxcIm9yZGVyQnlcXFxcXFxcIjogXFxcXFxcXCJsYXN0T3BUaW1lXFxcXFxcXCIsXFxcXG4gICAgICAgIFxcXFxcXFwiZGVzY2VuZGluZ1xcXFxcXFwiOiBcXFxcXFxcInRydWVcXFxcXFxcIixcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiByZWFkRmlsZShcXFxcXFxcIjE4OS50eHRcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICBcXFxcXFxcIkFjY2VwdFxcXFxcXFwiOiBcXFxcXFxcImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHZhciBqc29uID0gcmVzLnJlcGxhY2UoL1xcXFxcXFxcXFxcXFxcXCJpZFxcXFxcXFxcXFxcXFxcXCI6KFxcXFxcXFxcZCspL2csICdcXFxcXFxcImlkXFxcXFxcXCI6XFxcXFxcXCIkMVxcXFxcXFwiJykgLy/op6PlhrNqc+eahOeyvuW6pumXrumimFxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SWNvbiA9IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgZ2V0SHptXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb2RlXFxcXFxcXCIpXFxcXG4gICAgbGV0IHJvb3QgPSBcXFxcXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2ltZy/mlofku7bnsbvlnosyL1xcXFxcXFwiO1xcXFxuICAgIGxldCBmaWxlcyA9ICdhaXxhcGt8YXZpfGNzc3xkbWd8ZXhlfGZsdnxnaWZ8aGlrZXJ8aHRtbHxpc298anBnfGpzfGpzb258bG9nfG1vdnxtcDN8bXA0fG90ZnxwaHB8cG5nfHBwdHxwc2R8dGFibGV8dHh0fHdhdnx4bHN8emlwfGNzc3xkb2N8ZXB1YnxleGN8aHRtfHhsc3gnLnNwbGl0KCd8Jyk7XFxcXG4gICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXFxcbiAgICBpZiAoZmlsZXMuaW5jbHVkZXMoaHptKSkge1xcXFxuICAgICAgICBpbWcgPSByb290ICsgaHptICsgJy5zdmcnO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGltZyA9IHJvb3QgKyBcXFxcXFxcIuaWh+S7ti5zdmdcXFxcXFxcIlxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaW1nXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SHptID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXFxcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXFxcXFwiLlxcXFxcXFwiKSArIDEpXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwibG9naW4zXFxcIixcXFwicGF0aFxcXCI6XFxcImxvZ2luM1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICgpID0+IHtcXFxcbiAgICBsZXQgYyA9IGdldFZhcihcXFxcXFxcImh0dHBzOi8vY2xvdWQuMTg5LmNuL3dlYi9tYWluXFxcXFxcXCIpO1xcXFxuICAgIGxvZyhjKTtcXFxcbiAgICBzYXZlRmlsZShcXFxcXFxcIjE4OS50eHRcXFxcXFxcIiwgYyk7XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbWFpblxcXFxcXFwiKTtcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHVybDogXFxcXFxcXCJodHRwczovL2Nsb3VkLjE4OS5jbi93ZWIvbG9naW4uaHRtbFxcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCIxMDAlJiZmbG9hdFxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciB1cmwgPSBsb2NhdGlvbi5ocmVmXFxcXG4gICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXFxcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgY29va2llID0gZmJhLmdldENvb2tpZSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChjb29raWUgIT0gbnVsbCAmJiBjb29raWUubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKFxcXFxcXFwiaHR0cHM6Ly9jbG91ZC4xODkuY24vd2ViL21haW5cXFxcXFxcIiwgY29va2llKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXFxcXFxcXCLlt7Lojrflj5bliLBjb29raWVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5iYWNrKCk7ICAgICAgICAgICAgICAgICAgXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgdWE6IFBDX1VBLFxcXFxuICAgICAgICBjYW5CYWNrOiB0cnVlXFxcXG4gICAgfVxcXFxufSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlpLjlhYvnvZHnm5hcXFwiLFxcXCJwYXRoXFxcIjpcXFwi5aS45YWL572R55uYXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbnRyeSB7XFxcXG4gICAgaWYgKGZpbGVFeGlzdChcXFxcXFxcInF1YXJrLnR4dFxcXFxcXFwiKSkge1xcXFxuICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICBnZXRJY29uLFxcXFxuICAgICAgICAgICAgZ2V0SHptLFxcXFxuICAgICAgICAgICAgZ2V0TGlua1xcXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGU0XFxcXFxcXCIpXFxcXG4gICAgICAgIHZhciBjb29raWUgPSByZWFkRmlsZShcXFxcXFxcInF1YXJrLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9hY2NvdW50L2luZm9cXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgbGV0IHBhdGhzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJwYXRoc1xcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJpZFxcXFxcXFwiOiBcXFxcXFxcIjBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwibmFtZVxcXFxcXFwiOiBcXFxcXFxcIuagueebruW9lVxcXFxcXFwiXFxcXG4gICAgICAgIH1dKVxcXFxuICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB1c2VyaW5mby5kYXRhLm5pY2tuYW1lLFxcXFxuICAgICAgICAgICAgICAgIGltZzogdXNlcmluZm8uZGF0YS5hdmF0YXJVcmksXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zZXR0aW5nczRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIHBhdGhzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChwYXRocywgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcXFxcXCJwYXRoc1xcXFxcXFwiLCBwYXRocy5zbGljZSgwLCBpICsgMSkpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgcGF0aHMsIGkpXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvc29ydFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcInBkaXJfZmlkXFxcXFxcXCI6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLmlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJmclxcXFxcXFwiOiBcXFxcXFxcInBjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInByXFxcXFxcXCI6IFxcXFxcXFwidWNwcm9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiX3NpemVcXFxcXFxcIjogMTAsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIl9mZXRjaF90b3RhbFxcXFxcXFwiOiBcXFxcXFxcIjFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiX3NvcnRcXFxcXFxcIjogXFxcXFxcXCJmaWxlX3R5cGU6YXNjLGZpbGVfbmFtZTphc2NcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiX3BhZ2VcXFxcXFxcIjogZ2V0UGFyYW0oXFxcXFxcXCJwYWdlXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQWNjZXB0XFxcXFxcXCI6IFxcXFxcXFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSkpXFxcXG4gICAgICAgIHJlcy5kYXRhLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGlmICghaXRlbS5maWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoaXRlbSwgcGF0aHMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5maWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLmZpbGVfbmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcInBhdGhzXFxcXFxcXCIsIHBhdGhzKVxcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIGl0ZW0sIHBhdGhzKVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLm1vdmllLmluY2x1ZGVzKGdldEh6bShpdGVtLmZpbGVfbmFtZSkpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IGdldExpbmsoaXRlbSwgY29va2llLCBcXFxcXFxcIm1vdmllXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQuYXVkaW8uaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXFxcXFwiYXVkaW9cXFxcXFxcIilcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pbWcuaW5jbHVkZXMoZ2V0SHptKGl0ZW0uZmlsZV9uYW1lKSkpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gZ2V0TGluayhpdGVtLCBjb29raWUsIFxcXFxcXFwiaW1nXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBnZXRMaW5rKGl0ZW0sIGNvb2tpZSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZmlsZV9uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGltZzogZ2V0SWNvbihpdGVtKSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIueZu+mZhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2V0dGluZ3M0XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJjb2RlNFxcXCIsXFxcInBhdGhcXFwiOlxcXCJjb2RlNFxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMuZ2V0SWNvbiA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBnZXRIem1cXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvZGVcXFxcXFxcIilcXFxcbiAgICBsZXQgcm9vdCA9IFxcXFxcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvaW1nL+aWh+S7tuexu+WeizIvXFxcXFxcXCI7XFxcXG4gICAgaWYgKCFjb250ZW50LmZpbGUpIHtcXFxcbiAgICAgICAgaW1nID0gcm9vdCArIFxcXFxcXFwi5paH5Lu25aS5LnN2Z1xcXFxcXFwiXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgbGV0IGZpbGVzID0gJ2FpfGFwa3xhdml8Y3NzfGRtZ3xleGV8Zmx2fGdpZnxoaWtlcnxodG1sfGlzb3xqcGd8anN8anNvbnxsb2d8bW92fG1wM3xtcDR8b3RmfHBocHxwbmd8cHB0fHBzZHx0YWJsZXx0eHR8d2F2fHhsc3x6aXB8Y3NzfGRvY3xlcHVifGV4Y3xodG18eGxzeCcuc3BsaXQoJ3wnKTtcXFxcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gY29udGVudC5maWxlX25hbWVcXFxcbiAgICAgICAgbGV0IGh6bSA9IGdldEh6bShmaWxlTmFtZSlcXFxcbiAgICAgICAgaWYgKGZpbGVzLmluY2x1ZGVzKGh6bSkpIHtcXFxcbiAgICAgICAgICAgIGltZyA9IHJvb3QgKyBoem0gKyAnLnN2Zyc7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpbWcgPSByb290ICsgXFxcXFxcXCLmlofku7Yuc3ZnXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaW1nXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SHptID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcXFxcbiAgICByZXR1cm4gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKFxcXFxcXFwiLlxcXFxcXFwiKSArIDEpXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0TGluayA9IGZ1bmN0aW9uKGl0ZW0sIGNvb2tpZSwgZXh0KSB7XFxcXG4gICAgdmFyIHVybCA9ICQoKS5sYXp5UnVsZSgoZmlkLCBjb29raWUsIGV4dCkgPT4ge1xcXFxuICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShwb3N0KFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9kb3dubG9hZD9wcj11Y3BybyZmcj1wY1xcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQWNjZXB0XFxcXFxcXCI6IFxcXFxcXFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJmaWRzXFxcXFxcXCI6IFtmaWRdXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KSlcXFxcbiAgICAgICAgaWYgKGV4dCA9PSBcXFxcXFxcIm1vdmllXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgdXJsczogW3Jlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFxcXFxcImF1ZGlvXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgdXJsczogW3Jlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIFxcXFxcXFwiI2lzTXVzaWM9dHJ1ZSNcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWUucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PSBcXFxcXFxcImltZ1xcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gcmVzLmRhdGFbMF0uZG93bmxvYWRfdXJsICsgYEBSZWZlcmVyPWh0dHBzOi8vcGFuLnF1YXJrLmNuL0BDb29raWU9JHtjb29raWV9YFxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiZG93bmxvYWQ6Ly9cXFxcXFxcIiArIHJlcy5kYXRhWzBdLmRvd25sb2FkX3VybCArIGBAUmVmZXJlcj1odHRwczovL3Bhbi5xdWFyay5jbi9AQ29va2llPSR7Y29va2llfWBcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIGl0ZW0uZmlkLCBjb29raWUsIGV4dClcXFxcbiAgICByZXR1cm4gdXJsXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwic2V0dGluZ3M0XFxcIixcXFwicGF0aFxcXCI6XFxcInNldHRpbmdzNFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICgpID0+IHtcXFxcbiAgICBzYXZlRmlsZShcXFxcXFxcInF1YXJrLnR4dFxcXFxcXFwiLCBnZXRWYXIoXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9saXN0Iy9saXN0L2FsbFxcXFxcXFwiKSlcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL2xpc3QjL2xpc3QvYWxsXFxcXFxcXCIpO1xcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdXJsOiBcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCIxMDAlJiZmbG9hdFxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciB1cmwgPSBsb2NhdGlvbi5ocmVmXFxcXG4gICAgICAgICAgICBpZiAodXJsID09IFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY24vbGlzdCMvbGlzdC9hbGxcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGxldCBjb29raWUgPSBmYmEuZ2V0Q29va2llKHVybCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGNvb2tpZSAhPSBudWxsICYmIGNvb2tpZS5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIodXJsLCBjb29raWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFxcXFxcIuW3suiOt+WPluWIsGNvb2tpZVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZmJhLmJhY2soKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICB1YTogUENfVUEsXFxcXG4gICAgICAgIGNhbkJhY2s6IHRydWVcXFxcbiAgICB9XFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWFs+S6jlxcXCIsXFxcInBhdGhcXFwiOlxcXCJhYm91dFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5hZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgY2xlYXJNeVZhcihcXFxcXFxcImNcXFxcXFxcIik7XFxcXG59KSk7XFxcXG5kLnB1c2goJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2Fib3V0MlxcXFxcXFwiKSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgbGV0IGMgPSBwYXJzZUludChnZXRNeVZhcihcXFxcXFxcImNcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpKVxcXFxuICAgICAgICBpZiAoYyA+PSA1KSB7XFxcXG4gICAgICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmuKnppqjmj5DnpLpcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcXFxcXFxcIuehruWumuimgeW8gOWQr+W8gOWPkeiAheaooeW8j+WQl++8n+azqOaEj+W8gOWQr+ivpeaooeW8j+WImeihqOekuuWQjue7reaCqOeahOaJgOacieaTjeS9nOWdh+S4uuS4u+inguiDveWKqOaTjeS9nO+8jOaJgOS6p+eUn+eahOS4gOWIh+mXrumimOS4jui0o+S7u+Wdh+eUseaCqOiHquW3seaJv+aLhVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiZGV2XFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7LlvIDlkK/lvIDlj5HogIXmqKHlvI9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJjXFxcXFxcXCIsIGMgKyAxICsgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuXFxcXG5cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlhbPkuo4yXFxcIixcXFwicGF0aFxcXCI6XFxcImFib3V0MlxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSB7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi5pys6KeE5YiZ5Z+65LqO5byA5rqQ6aG555uu77yaPGEgaHJlZj1cXFxcXFxcXFxcXFxcXFwiaHR0cHM6Ly9naXRodWIuY29tL2FsaXN0LW9yZy9hbGlzdFxcXFxcXFxcXFxcXFxcXCI+QWxpc3Q8L2E+77yM5o6i57Si5LiN5L2/55So5pyN5Yqh5Zmo5a6e546wQWxpc3TpgLvovpHvvIzmnKzop4TliJnmiYDmnInku6PnoIHlhajpg6jlvIDmupDvvIzku4XpmZDkuKrkurrkvb/nlKjvvIzku4XkvpvnoJTnqbbjgIHlrabkuaDlkozmtYvor5XvvIznpoHmraLovazovb3liIbkuqvliLDnrKzkuInmlrnlubPlj7BcXFxcXFxcIixcXFxcbiAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInJpY2hfdGV4dFxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIlxcXFxufVxcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInBpY1VybCI6Imh0dHA6Ly9hbGlzdC5qb2VndS50ay9kL3J1bGVzLyVFNSVBNCVCOCVFNSU4NSU4Ql81LjguNi4yMjMucG5nIiwidGl0bGUiOiLlpLjlhYvnvZHnm5gifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement