Advertisement
xiaomianao666

邀您一起看:你还没有书哦~~点我进入设置

Oct 26th, 2024
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥你还没有书哦~~点我进入设置@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5rqQ55uu5b2VXCIsXCJwYXRoXCI6XCJzb3VyY2VcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudmFyIG0gPSBNWV9QQVJBTVMucnVsZXNcXG52YXIgYmFzZXVybCA9IG0uYm9va1NvdXJjZVVybFxcbmlmIChtLnJ1bGVFeHBsb3JlLmJvb2tMaXN0KSB7XFxuICAgIHZhciBydWxlID0gbS5ydWxlRXhwbG9yZVxcbn0gZWxzZSB7XFxuICAgIHZhciBydWxlID0gbS5ydWxlU2VhcmNoXFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgZGVzYzogXFxcIuivt+i+k+WFpeaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcihcXFwia3dcXFwiLCBpbnB1dCk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2g/cD1meXBhZ2Uma3c9XFxcIiArIGlucHV0XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIFxcXCJ1XFxcIjogYmFzZXVybCArIG0uc2VhcmNoVXJsLFxcbiAgICAgICAgXFxcInJ1bGVzXFxcIjogbSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImt3XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgYm9va1NvdXJjZU5hbWU6IG0uYm9va1NvdXJjZU5hbWVcXG4gICAgfVxcbn0pO1xcbnRyeSB7XFxuICAgIGlmIChtLmVuYWJsZWRFeHBsb3JlICYmIG0uZXhwbG9yZVVybCkge1xcbiAgICAgICAgSlNPTi5wYXJzZShtLmV4cGxvcmVVcmwpLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdGVtLnN0eWxlLmxheW91dF9mbGV4QmFzaXNQZXJjZW50ID09IDEgPyBcXFwidGV4dF9jZW50ZXJfMVxcXCIgOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBpdGVtLnVybCA9PSBcXFwiXFxcIiA/IFxcXCJoaWtlcjovL2VtcHR5XFxcIiA6IFxcXCJoaWtlcjovL3BhZ2UvYm9va3M/cD1meXBhZ2VcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImFsbFxcXCI6IG0sXFxuICAgICAgICAgICAgICAgICAgICBcXFwicnVsZXNcXFwiOiBydWxlLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInVcXFwiOiBiYXNldXJsICsgaXRlbS51cmxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2cobS5leHBsb3JlVXJsKTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aG1XCIsXCJwYXRoXCI6XCJob21lXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbmxldCB7XFxuICAgIGxvYWQsXFxuICAgIGxvYWRSdWxlcyxcXG4gICAgZ2V0U2VsZWN0XFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIik7XFxubGV0IGRhdGEgPSBsb2FkKCk7XFxuaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLimpnvuI/orr7nva5cXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbmZpZ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pO1xcbiAgICBsZXQgc2VsZWN0ID0gZ2V0U2VsZWN0KGRhdGEpO1xcbiAgICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzZWxlY3QudXJsID09IGl0ZW0udXJsID8gXFxcIuKAnOKAnFxcXCIgKyBpdGVtLm5hbWUgKyBcXFwi4oCd4oCdXFxcIiA6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInRhYlxcXCIsIHVybClcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgIH0sIGl0ZW0udXJsKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICB9KVxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwia3dcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvanU/cD1meXBhZ2Uma3c9XFxcIiArIGlucHV0XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuiBmuWQiOaQnOe0ou+8jOivt+i+k+WFpeWFs+mUruivjVxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwia3dcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBsZXQgbGlzdCA9IGxvYWRSdWxlcyhzZWxlY3QubmFtZSk7XFxuICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uYm9va1NvdXJjZU5hbWUgKyBgKCR7aXRlbS5ib29rU291cmNlR3JvdXB9KWAsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9zb3VyY2U/cD1meXBhZ2VcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJydWxlc1xcXCI6IGl0ZW1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9KVxcbn0gZWxzZSB7XFxuICAgIHNldFJlc3VsdChbe1xcbiAgICAgICAgdGl0bGU6IFxcXCLkvaDov5jmsqHmnInkuablk6bvvZ7vvZ7ngrnmiJHov5vlhaXorr7nva5cXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbmZpZ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgIH1dKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1wiLFwibmFtZVwiOlwi5YiX6KGoXCIsXCJwYXRoXCI6XCJib29rc1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG52YXIge1xcbiAgICBjb252ZXJ0LFxcbiAgICBwYXJzZVVybCxcXG4gICAgZ2V0Q2hhcnNldFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb252ZXJ0ZXJcXFwiKTtcXG50cnkge1xcbiAgICAvL2xvZyhNWV9QQVJBTVMpO1xcbiAgICB2YXIgbSA9IE1ZX1BBUkFNUy5ydWxlc1xcbiAgICAvLyDpmIXor7s9PuinhueVjFxcbiAgICB2YXIgdXJsID0gcGFyc2VVcmwoTVlfUEFSQU1TLnUsIE1ZX1BBR0UpO1xcbiAgICB2YXIgbGlzdHJ1bGUgPSBcXFwiYm9keSYmXFxcIiArIGNvbnZlcnQobS5ib29rTGlzdC5zcGxpdChcXFwifHxcXFwiKVswXSk7XFxuICAgIGxldCBhdXRob3IgPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgYXV0aG9yID0gY29udmVydChtLmF1dGhvcik7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBjb3ZlciA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBjb3ZlciA9IGNvbnZlcnQobS5jb3ZlclVybCk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBuYW1lID0gbnVsbDtcXG4gICAgdHJ5IHtcXG4gICAgICAgIG5hbWUgPSBjb252ZXJ0KG0ubmFtZSk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBib29rdXJsID0gbnVsbDtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGJvb2t1cmwgPSBjb252ZXJ0KG0uYm9va1VybCk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBpbnRybyA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBpbnRybyA9IGNvbnZlcnQobS5pbnRybyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBwZGZoMSA9IChhLCBiKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGlmIChiID09IG51bGwpIHJldHVybiBcXFwiXFxcIjtcXG4gICAgICAgICAgICByZXR1cm4gcGRmaChhLCBiKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IHBkMSA9IChhLCBiLCBjKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGlmIChiID09IG51bGwpIHJldHVybiBcXFwiXFxcIjtcXG4gICAgICAgICAgICByZXR1cm4gcGQoYSwgYiwgYyk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIE1ZX1VSTCA9IHVybDtcXG4gICAgaWYgKE1ZX1BBUkFNUy5hbGwgJiYgTVlfUEFSQU1TLmFsbC5zZWFyY2hVcmwpIHtcXG4gICAgICAgIG0uY2hhcnNldCA9IGdldENoYXJzZXQoTVlfUEFSQU1TLmFsbC5zZWFyY2hVcmwpO1xcbiAgICB9XFxuICAgIGxldCBoZWFkZXJzID0gbS5jaGFyc2V0ID8ge1xcbiAgICAgICAgXFxcIkNvbnRlbnQtVHlwZVxcXCI6IFxcXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9XFxcIiArIG0uY2hhcnNldFxcbiAgICB9IDoge307XFxuICAgIHZhciByZXMgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgaGVhZGVyczogaGVhZGVyc1xcbiAgICB9KVxcbiAgICBsZXQgbGlzdCA9IHBkZmEocmVzLCBsaXN0cnVsZSlcXG4gICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xcbiAgICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGxldCBuZXh0ID0gTVlfUEFSQU1TLmFsbC5ydWxlVG9jLm5leHRUb2NVcmw7XFxuICAgICAgICAgICAgbGV0IG5leHR0b2MgPSBuZXh0ICYmIG5leHQgIT0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IGFjID0gbmV4dHRvYyA/IFxcXCJcXFwiOiBcXFwiI2F1dG9DYWNoZSNcXFwiO1xcbiAgICAgICAgICAgIC8vbGV0IGFjID0gXFxcIiNhdXRvQ2FjaGUjXFxcIjtcXG4gICAgICAgICAgICBsZXQgdTEgPSBwZDEoaXRlbSwgYm9va3VybCkgKyBhYyArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIjtcXG4gICAgICAgICAgICBpZiAobS5jaGFyc2V0KSB7XFxuICAgICAgICAgICAgICAgIHUxID0gdTEgKyBcXFwiO2dldDtcXFwiICsgbS5jaGFyc2V0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAoY292ZXIgPyBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiIDogXFxcInRleHRfMVxcXCIpLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaDEoaXRlbSwgbmFtZSksXFxuICAgICAgICAgICAgICAgIGltZzogKGNvdmVyID8gcGQxKGl0ZW0sIGNvdmVyKSArIFxcXCJAUmVmZXJlcj1cXFwiIDogXFxcImhpa2VyOi8vZW1wdHlcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL21lbnVcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAoYXV0aG9yID8gcGRmaDEoaXRlbSwgYXV0aG9yKSA6IFxcXCJcXFwiKSArIFxcXCJcXFxcblxcXCIgKyAoaW50cm8gPyBwZGZoMShpdGVtLCBpbnRybykgOiBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiYm9va05hbWVcXFwiOiBwZGZoMShpdGVtLCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjb3ZlclxcXCI6IChjb3ZlciA/IHBkMShpdGVtLCBjb3ZlcikgKyBcXFwiQFJlZmVyZXI9XFxcIiA6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiVG9jXFxcIjogTVlfUEFSQU1TLmFsbC5ydWxlVG9jLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRlbnRcXFwiOiBNWV9QQVJBTVMuYWxsLnJ1bGVDb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBuZXh0dG9jID8gXFxcImhpa2VyOi8vZW1wdHkjXFxcIiArIHUxIDogdTEsXFxuICAgICAgICAgICAgICAgICAgICB1MTogbmV4dHRvYyA/IHUxIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ6IG0uY2hhcnNldCxcXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWIl+ihqOWKoOi9veWksei0pe+8mlxcXCIgKyBsaXN0cnVsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLliqDovb3lpLHotKXvvJpcXFwiICsgZS5tZXNzYWdlLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0pXFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcInRleHRfY2VudGVyXzFcIixcIm5hbWVcIjpcIuiuvue9rlwiLFwicGF0aFwiOlwiY29uZmlnXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIua3u+WKoOiuoumYhVxcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXorqLpmIXlkI3np7DvvIzlj5bkuKrlkI3lkKfvvIjms6jmhI/kuI3opoHloavlnLDlnYDvvIlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IG51bGwgfHwgaW5wdXQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeWhq+aAjuS5iOiDveihjOWRolxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKFxcXCI6Ly9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN6IO95aGr5Zyw5Z2A5ZOm77yM5YK75a6d6LSdXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeiuoumYheWcsOWdgFxcXCIpLmlucHV0KChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICBhZGQsXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIik7XFxuICAgICAgICAgICAgICAgIGFkZChuYW1lLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUobmFtZSwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lr7zlhaXmiJDlip9cXFwiXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lr7zlhaXlpLHotKVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIua3u+WKoOacrOWcsFxcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXorqLpmIXlkI3np7DvvIzlj5bkuKrlkI3lkKfvvIjovpPlrozngrnlh7vnoa7lrprlkI7kvJrot7PovazpgInmi6nkuabmupDmlofku7bnlYzpnaLvvIlcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IG51bGwgfHwgaW5wdXQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4jeWhq+aAjuS5iOiDveihjOWRolxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKFxcXCI6Ly9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN6IO95aGr5Zyw5Z2A5ZOm77yM5YK75a6d6LSdXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gXFxcImZpbGVTZWxlY3Q6Ly9cXFwiICsgJC50b1N0cmluZygobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcyA9IGlucHV0LnNwbGl0KFxcXCIvXFxcIilcXG4gICAgICAgICAgICAgICAgbGV0IGZuYW1lID0gc1tzLmxlbmd0aCAtIDFdLnJlcGxhY2UoXFxcIl9maWxlU2VsZWN0X1xcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKCFmbmFtZS5pbmNsdWRlcyhcXFwiLmpzb25cXFwiKSAmJiAhZm5hbWUuaW5jbHVkZXMoXFxcIi50eHRcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+agvOW8j+S4jeWvue+8jOS7heaUr+aMgWpzb27miJZ0eHTmoLzlvI/nmoTkuabmupDmlofku7ZcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBmbmFtZTtcXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBmZXRjaChcXFwiZmlsZTovL1xcXCIgKyBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIGlmICghYy5pbmNsdWRlcyhcXFwiYm9va1NvdXJjZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5qC85byP5LiN5a+577yM5LuF5pSv5oyB5Lmm5rqQ5paH5Lu2XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh1cmwsIGMpO1xcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgYWRkLFxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpO1xcbiAgICAgICAgICAgICAgICBhZGQobmFtZSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZShuYW1lLCB1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lr7zlhaXmiJDlip9cXFwiXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lr7zlhaXlpLHotKVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIlxcbiAgICB9KVxcbiAgICBsZXQgbGlzdCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIikubG9hZCgpO1xcbiAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICBkZXNjOiBpdGVtLnVybCxcXG4gICAgICAgICAgICB1cmw6ICQoW1xcXCLliKDpmaTorqLpmIVcXFwiLCBcXFwi57yW6L6R5ZCN56ewXFxcIiwgXFxcIuWIhuS6q+iuoumYhVxcXCIsIFxcXCLmm7TmlrDmlbDmja5cXFwiXSkuc2VsZWN0KChuYW1lLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLliKDpmaTorqLpmIVcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu6K6k5Yig6Zmk77yfXFxcIikuY29uZmlybSgobmFtZSwgdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKFxcXCJoaWtlcjovL2ZpbGVzL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFwiICsgbWQ1KG5hbWUpICsgXFxcIi5qc29uXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpLnJlbW92ZSh1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWIoOmZpFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSBcXFwi57yW6L6R5ZCN56ewXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIpLmlucHV0KChuYW1lLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBtZDUobmFtZSkgKyBcXFwiLmpzb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKGlucHV0LCB1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZSh1cmwsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSBcXFwi5YiG5Lqr6K6i6ZiFXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKFxcXCJoaWtlcjovL2ZpbGVzL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W9k+WJjeiuoumYheS4uuacrOWcsOaWh+S7tu+8jOaXoOazleWIhuS6q1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgobmFtZSwgdXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hhcmUobmFtZSwgdXJsKVxcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUobmFtZSwgdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pu05paw5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mm7TmlrDlpLHotKVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBpdGVtLm5hbWUsIGl0ZW0udXJsKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCJcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufSBjYXRjaCAoZSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLplJnor6/vvJpcXFwiICsgZS5tZXNzYWdlLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0pXFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi55uu5b2VXCIsXCJwYXRoXCI6XCJtZW51XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciByZXMgPSBnZXRSZXNDb2RlKClcXG5sZXQgVG9jID0gTVlfUEFSQU1TLlRvY1xcbmxldCB7XFxuICAgIGdldEFycmF5LFxcbiAgICBnZXRUZXh0LFxcbiAgICBnZXRVcmwwLFxcbiAgICBjb252ZXJ0XFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvbnZlcnRlclxcXCIpO1xcbi8vbG9nKFRvYyk7XFxudmFyIGNhY2hlcyA9IFtdO1xcblxcbmZ1bmN0aW9uIGdldENhY2hlKCkge1xcbiAgICBsZXQgYyA9IHJlYWRGaWxlKFxcXCJjaGFwdGVyLmpzb25cXFwiKSB8fCBcXFwiW11cXFwiO1xcbiAgICBjYWNoZXMgPSBKU09OLnBhcnNlKGMpXFxuICAgIGxldCB1cmwgPSBNWV9VUkxcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uUmVmcmVzaFxcXCIsICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgbGV0IGMgPSByZWFkRmlsZShcXFwiY2hhcHRlci5qc29uXFxcIikgfHwgXFxcIltdXFxcIjtcXG4gICAgICAgIGMgPSBKU09OLnBhcnNlKGMpXFxuICAgICAgICBsZXQgY2hlID0ge1xcbiAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgIG5leHQ6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNoYXB0ZXJzOiBbXVxcbiAgICAgICAgfTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChjW2ldLnVybCA9PSBjaGUudXJsKSB7XFxuICAgICAgICAgICAgICAgIGNbaV0gPSBjaGU7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwiY2xlYXI6XFxcIiArIHVybClcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoXFxcImNoYXB0ZXIuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KGMpKVxcbiAgICAgICAgICAgICAgICBicmVha1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSwgdXJsKSlcXG4gICAgZm9yIChsZXQgaXQgb2YgY2FjaGVzKSB7XFxuICAgICAgICBpZiAoaXQudXJsID09IHVybCkge1xcbiAgICAgICAgICAgIHJldHVybiBpdDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4ge1xcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBuZXh0OiBcXFwiXFxcIixcXG4gICAgICAgIGNoYXB0ZXJzOiBbXVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHNhdmVDYWNoZShjaGUpIHtcXG4gICAgbGV0IGMgPSBjYWNoZXNcXG4gICAgaWYgKGMubGVuZ3RoID4gMTApIHtcXG4gICAgICAgIGMuc2hpZnQoKVxcbiAgICB9XFxuICAgIGxldCBleGlzdCA9IGZhbHNlXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgaWYgKGNbaV0udXJsID09IGNoZS51cmwpIHtcXG4gICAgICAgICAgICBjW2ldID0gY2hlO1xcbiAgICAgICAgICAgIGV4aXN0ID0gdHJ1ZTtcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmICghZXhpc3QpIHtcXG4gICAgICAgIGMucHVzaChjaGUpXFxuICAgIH1cXG4gICAgc2F2ZUZpbGUoXFxcImNoYXB0ZXIuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KGMpKVxcbn1cXG5cXG5cXG5sZXQgbmV4dCA9IFRvYy5uZXh0VG9jVXJsO1xcbmxldCBsaXN0ID0gW107XFxuaWYgKG5leHQgJiYgbmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICBpZiAobmV4dCA9PSBcXFwib3B0aW9uQHZhbHVlXFxcIikge1xcbiAgICAgICAgbmV4dCA9IFxcXCJ0ZXh0LuS4i+S4gOmhtSYmaHJlZlxcXCI7XFxuICAgIH1cXG4gICAgTVlfVVJMID0gTVlfUEFSQU1TLnUxIHx8IE1ZX1VSTDtcXG4gICAgbGV0IGhlYWRlcnMgPSBNWV9QQVJBTVMuY2hhcnNldCA/IHtcXG4gICAgICAgIFxcXCJjaGFyc2V0XFxcIjogTVlfUEFSQU1TLmNoYXJzZXQsXFxuICAgICAgICBcXFwiQ29udGVudC1UeXBlXFxcIjogXFxcInRleHQvaHRtbDsgY2hhcnNldD1cXFwiICsgTVlfUEFSQU1TLmNoYXJzZXRcXG4gICAgfSA6IHt9O1xcbiAgICBuZXh0ID0gY29udmVydChuZXh0KTtcXG4gICAgLy9sb2cobmV4dCk7XFxuICAgIGxldCBjYWNoZSA9IGdldENhY2hlKCk7XFxuICAgIGxldCBudXJsID0gY2FjaGUubmV4dDtcXG4gICAgaWYgKG51cmwgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIG51cmwgPSBNWV9VUkw7XFxuICAgIH1cXG4gICAgbGV0IGlkID0gTVlfVVJMICsgXFxcIkBAXFxcIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcbiAgICBsZXQgYWlkID0gXFxcImFcXFwiICsgaWQ7XFxuICAgIHB1dE15VmFyKGFpZCwgXFxcIjFcXFwiKTtcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKChhaWQpID0+IHtcXG4gICAgICAgIGxvZyhcXFwiY2xlYXI6IFxcXCIgKyBhaWQpO1xcbiAgICAgICAgY2xlYXJNeVZhcihhaWQpO1xcbiAgICB9LCBhaWQpKTtcXG4gICAgbGV0IGFyciA9IGNhY2hlLmNoYXB0ZXJzIHx8IFtdO1xcbiAgICB2YXIgY2MgPSAoYSkgPT4ge1xcbiAgICAgICAgcmV0dXJuIGEubWFwKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGdldFRleHQoaXRlbSwgVG9jLmNoYXB0ZXJOYW1lKVxcbiAgICAgICAgICAgIGlmICh0aXRsZSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBsZXQgdTEgPSBnZXRVcmwwKGl0ZW0sIFRvYy5jaGFwdGVyTGlzdCwgVG9jLmNoYXB0ZXJVcmwpICsgXFxcIiNhdXRvUGFnZSMjcmVhZFRoZW1lI1xcXCI7XFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQVJBTVMuY2hhcnNldCkge1xcbiAgICAgICAgICAgICAgICAgICAgdTEgPSB1MSArIFxcXCI7Z2V0O1xcXCIgKyBNWV9QQVJBTVMuY2hhcnNldDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbnRlbnRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogTVlfUEFSQU1TLmNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1MVxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIC8vbG9nKGNhY2hlLm5leHQgKyBcXFwiOlxcXCIgKyBjYWNoZS5jaGFwdGVycy5sZW5ndGgpO1xcbiAgICBsZXQgZDIgPSBjYyhhcnIpO1xcbiAgICBkMi5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5Yqg6L295Lit77yM6K+356iN5YCZLi4uXFxcIixcXG4gICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogaWRcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQyLnVuc2hpZnQoe1xcbiAgICAgICAgdGl0bGU6IE1ZX1BBUkFNUy5ib29rTmFtZSxcXG4gICAgICAgIGltZzogTVlfUEFSQU1TLmNvdmVyLFxcbiAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFwiXFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoZDIpO1xcbiAgICBoZWFkZXJzW1xcXCJSZWZlcmVyXFxcIl0gPSBNWV9VUkwuc3BsaXQoXFxcIiNcXFwiKVswXTtcXG4gICAgaWYgKG51cmwgIT0gTVlfVVJMKSB7XFxuICAgICAgICBNWV9VUkwgPSBudXJsO1xcbiAgICAgICAgcmVzID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSBpZiAoTVlfUEFSQU1TLnUxKSB7XFxuICAgICAgICByZXMgPSBmZXRjaChNWV9VUkwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICB2YXIgdXJscyA9IFtudXJsXTtcXG4gICAgd2hpbGUgKHRydWUpIHtcXG4gICAgICAgIGxldCBhID0gW107XFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgICAgICBhLnB1c2goaXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgY2FjaGUuY2hhcHRlcnMgPSBhO1xcbiAgICAgICAgbGV0IGFycjEgPSBnZXRBcnJheShyZXMsIFRvYy5jaGFwdGVyTGlzdCk7XFxuICAgICAgICAvL2xvZyhhcnIxKTtcXG4gICAgICAgIGlmIChhcnIxICYmIGFycjEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGFycjEpIHtcXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goaXQpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYWRkSXRlbUJlZm9yZShpZCwgY2MoYXJyMSkpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoZ2V0TXlWYXIoYWlkLCBcXFwiMFxcXCIpICE9IFxcXCIxXFxcIikge1xcbiAgICAgICAgICAgICAgICBsb2coXFxcImJyZWFrOiBcXFwiICsgYWlkKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoNTApO1xcbiAgICAgICAgICAgIGxldCBudXJsMiA9IHBkKHJlcywgXFxcImJvZHkmJlxcXCIgKyBuZXh0KTtcXG4gICAgICAgICAgICBpZiAobnVybDIgJiYgbnVybDIgIT0gXFxcIlxcXCIgJiYgIXVybHMuaW5jbHVkZXMobnVybDIpKSB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnNbXFxcIlJlZmVyZXJcXFwiXSA9IGNhY2hlLm5leHQuc3BsaXQoXFxcIiNcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgdXJscy5wdXNoKG51cmwyKTtcXG4gICAgICAgICAgICAgICAgY2FjaGUubmV4dCA9IG51cmwyO1xcbiAgICAgICAgICAgICAgICBudXJsID0gbnVybDI7XFxuICAgICAgICAgICAgICAgIE1ZX1VSTCA9IG51cmw7XFxuICAgICAgICAgICAgICAgIHJlcyA9IGZldGNoKG51cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGRlbGV0ZUl0ZW0oaWQpO1xcbiAgICAvL2xvZyhjYWNoZS5uZXh0ICsgXFxcIjplbmQ6XFxcIiArIGNhY2hlLmNoYXB0ZXJzLmxlbmd0aCk7XFxuICAgIHNhdmVDYWNoZShjYWNoZSk7XFxufSBlbHNlIHtcXG4gICAgbGlzdCA9IGdldEFycmF5KHJlcywgVG9jLmNoYXB0ZXJMaXN0KTtcXG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgLy9sb2coaXRlbSk7ICAgIFxcbiAgICAgICAgdmFyIHRpdGxlID0gZ2V0VGV4dChpdGVtLCBUb2MuY2hhcHRlck5hbWUpXFxuICAgICAgICBpZiAodGl0bGUgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgdTEgPSBnZXRVcmwwKGl0ZW0sIFRvYy5jaGFwdGVyTGlzdCwgVG9jLmNoYXB0ZXJVcmwpICsgXFxcIiNhdXRvUGFnZSMjcmVhZFRoZW1lI1xcXCI7XFxuICAgICAgICAgICAgaWYgKE1ZX1BBUkFNUy5jaGFyc2V0KSB7XFxuICAgICAgICAgICAgICAgIHUxID0gdTEgKyBcXFwiO2dldDtcXFwiICsgTVlfUEFSQU1TLmNoYXJzZXQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbnRlbnRcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogTVlfUEFSQU1TLmNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUxXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgdmFyIGNwID0gZC5tYXAoZnVuY3Rpb24oaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICBcXFwidGl0bGVcXFwiOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBpdGVtLmV4dHJhLnVybC5yZXBsYWNlKFxcXCIjYXV0b1BhZ2UjI3JlYWRUaGVtZSNcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgIGQudW5zaGlmdCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLkuIvovb1cXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9kb3dubG9hZC52aWV3I25vUmVjb3JkSGlzdG9yeSMjbm9SZWZyZXNoIyNub0hpc3RvcnkjP3J1bGU95pys5Zyw6LWE5rqQ566h55CGXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGNoYXB0ZXJMaXN0OiBjcCxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZpZXc6IFxcXCIxXFxcIixcXG4gICAgICAgICAgICAgICAgaW5mbzoge1xcbiAgICAgICAgICAgICAgICAgICAgYm9va05hbWU6IE1ZX1BBUkFNUy5ib29rTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tUb3BQaWM6IE1ZX1BBUkFNUy5jb3ZlcixcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lOiBcXFwi5oKm6K+7XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZTogJC50b1N0cmluZygoTVlfUEFSQU1TLCByMCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29udmVydGVyP3J1bGU9XFxcIiArIHIwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBNWV9QQVJBTVMuY29udGVudDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGNvbnZlcnQocnVsZS5jb250ZW50KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcjEgPSByLnNwbGl0KFxcXCImJlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByMiA9IHIxLnNsaWNlKDAsIHIxLmxlbmd0aCAtIDEpLmpvaW4oXFxcIiYmXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEocmVzLCBcXFwiYm9keSYmXFxcIiArIHIyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0dCA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ID0gaXQucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJcXFxcblxcXCIsIFxcXCJnXFxcIiksIFxcXCItLWJyLS1cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHBkZmgoaXQsIFxcXCJUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiLS1ici0tXFxcIiwgXFxcImdcXFwiKSwgXFxcIjxicj5cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQyID0gdC5zcGxpdChcXFwiPGJyPlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdDIgb2YgdDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdDIgPT0gXFxcIlxcXCIgfHwgaXQyLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXQyLnN0YXJ0c1dpdGgoXFxcIuOAgFxcXCIpICYmICFpdDIuc3RhcnRzV2l0aChcXFwiJm5ic3A7Jm5ic3A7XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdDIgPSBcXFwiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XFxcIiArIGl0Mi50cmltKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5yZXBsYWNlUmVnZXgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdDIgPSBpdDIucmVwbGFjZShuZXcgUmVnRXhwKHJ1bGUucmVwbGFjZVJlZ2V4LnJlcGxhY2UoXFxcIiMjXFxcIiwgXFxcIlxcXCIpLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdDIgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHQgKz0gaXQyICsgXFxcIlxcXFxuXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0dFxcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfUEFSQU1TLCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJub3ZlbFxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZC51bnNoaWZ0KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuacquino+aekOWIsOebruW9leWIl+ihqFxcXCIsXFxuICAgICAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQudW5zaGlmdCh7XFxuICAgICAgICB0aXRsZTogTVlfUEFSQU1TLmJvb2tOYW1lLFxcbiAgICAgICAgaW1nOiBNWV9QQVJBTVMuY292ZXIsXFxuICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXCJcXG4gICAgfSlcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWGheWuuVwiLFwicGF0aFwiOlwiY29udGVudFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQge1xcbiAgICBjb252ZXJ0XFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2NvbnZlcnRlclxcXCIpO1xcbnZhciByZXMgPSBnZXRSZXNDb2RlKCk7XFxudmFyIHJ1bGUgPSBNWV9QQVJBTVMuY29udGVudFxcbmxldCByID0gY29udmVydChydWxlLmNvbnRlbnQpO1xcbmxldCByMSA9IHIuc3BsaXQoXFxcIiYmXFxcIik7XFxubGV0IHIyID0gcjEuc2xpY2UoMCwgcjEubGVuZ3RoIC0gMSkuam9pbihcXFwiJiZcXFwiKTtcXG5sZXQgYXJyID0gcGRmYShyZXMsIFxcXCJib2R5JiZcXFwiICsgcjIpO1xcbi8vbG9nKGFycik7XFxuZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgIGl0ID0gaXQucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJcXFxcblxcXCIsIFxcXCJnXFxcIiksIFxcXCItLWJyLS1cXFwiKTtcXG4gICAgLy9sb2coaXQpO1xcbiAgICB2YXIgdCA9IHBkZmgoaXQsIFxcXCJUZXh0XFxcIik7XFxuICAgIHQgPSB0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiLS1ici0tXFxcIiwgXFxcImdcXFwiKSwgXFxcIjxicj5cXFwiKTtcXG4gICAgaWYgKHQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGNvbnRpbnVlXFxuICAgIH1cXG4gICAgbGV0IHQyID0gdC5zcGxpdChcXFwiPGJyPlxcXCIpO1xcbiAgICBmb3IgKGxldCBpdDIgb2YgdDIpIHtcXG4gICAgICAgIGlmIChpdDIgPT0gXFxcIlxcXCIgfHwgaXQyLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghaXQyLnN0YXJ0c1dpdGgoXFxcIuOAgFxcXCIpICYmICFpdDIuc3RhcnRzV2l0aChcXFwiJm5ic3A7Jm5ic3A7XFxcIikpIHtcXG4gICAgICAgICAgICBpdDIgPSBcXFwiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XFxcIiArIGl0Mi50cmltKCk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAocnVsZS5yZXBsYWNlUmVnZXgpIHtcXG4gICAgICAgICAgICBpdDIgPSBpdDIucmVwbGFjZShuZXcgUmVnRXhwKHJ1bGUucmVwbGFjZVJlZ2V4LnJlcGxhY2UoXFxcIiMjXFxcIiwgXFxcIlxcXCIpLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpdDIgPT0gXFxcIlxcXCIgfHwgaXQyID09IFxcXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcXFwiKSB7XFxuICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0MixcXG4gICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZC51bnNoaWZ0KHtcXG4gICAgdGl0bGU6IFxcXCI8YmlnPlxcXCIgKyBNWV9QQVJBTVMudGl0bGUgKyBcXFwiPC9iaWc+XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1wiLFwibmFtZVwiOlwi5pCc57SiXCIsXCJwYXRoXCI6XCJzZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbmxldCB7XFxuICAgIHNlYXJjaFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zc1xcXCIpO1xcbmxldCBkID0gW107XFxubGV0IGt3ID0gZ2V0UGFyYW0oXFxcImt3XFxcIik7XFxubGV0IHMgPSBrdztcXG5zZXRQYWdlVGl0bGUoXFxcIuaQnOe0olxcXCIgKyBrdyArIFxcXCIgXFxcIiArIE1ZX1BBUkFNUy5ib29rU291cmNlTmFtZSk7XFxuaWYgKHR5cGVvZihnZXRTZWFyY2hNb2RlKSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICBjb25maXJtKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgIGNvbnRlbnQ6IFxcXCLkvaDnmoTova/ku7bniYjmnKzlpKrkvY7vvIzmm7TmlrDliLDmnIDmlrDniYjmiY3og73kvb/nlKjmnKzop4TliJlcXFwiXFxuICAgIH0pXFxufVxcbmxldCBtYXRjaE11c3QgPSBnZXRTZWFyY2hNb2RlKCkgPT0gMTtcXG5sZXQgdGlwID0gXFxcIueyvuehruWMuemFje+8mlxcXCIgKyAobWF0Y2hNdXN0ID8gXFxcIuaYr1xcXCIgOiBcXFwi5ZCmXFxcIik7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpcCxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgc2V0U2VhcmNoTW9kZShnZXRTZWFyY2hNb2RlKCkgPT0gMCA/IDEgOiAwKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgfSk7XFxufVxcbmxldCBkMiA9IHNlYXJjaChNWV9QQVJBTVMucnVsZXMsIGt3LCBNWV9QQUdFKTtcXG5mb3IgKGxldCBpdCBvZiBkMikge1xcbiAgICBpZiAoIW1hdGNoTXVzdCB8fCBzZWFyY2hDb250YWlucyhpdC50aXRsZSwgcykpIHtcXG4gICAgICAgIGl0LnRpdGxlID0gaXQudGl0bGUuaW5jbHVkZXMoXFxcIuKAnOKAnOKAneKAnVxcXCIpID8gaXQudGl0bGUgOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIGl0LnRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiPGVtPnw8L2VtPlxcXCIsIFxcXCJnXFxcIiksIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKVxcbiAgICAgICAgZC5wdXNoKGl0KTtcXG4gICAgfVxcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLovazmjaJcIixcInBhdGhcIjpcImNvbnZlcnRlclwiLFwicnVsZVwiOlwidmFyIGNvbnZlcnQgPSAoc3RyKSA9PiB7XFxuICAgIHJldHVybiBzdHIucmVwbGFjZSgvQC9nLCBcXFwiJiZcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcbiAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgICAgICB9KVxcbiAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiIFxcXCIsIFxcXCJnXFxcIiksIFxcXCImJlxcXCIpXFxuICAgICAgICAucmVwbGFjZSgvdGV4dFxcXFwuKC4qPykmJi9nLCBcXFwiKjpjb250YWlucygkMSksLTEmJlxcXCIpXFxuICAgICAgICAucmVwbGFjZSgvLWNsYXNzXFxcXC4vZywgXFxcIi5cXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoL2NsYXNzXFxcXC4vZywgXFxcIi5cXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoL3RhZ1xcXFwuL2csIFxcXCJcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoL2lkXFxcXC4vZywgXFxcIiNcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoLyMjL2csIFxcXCIhXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKC8mJihbYS16QS1aXFxcXC5cXFxcLV0rPykhKFswLTldKS9nLCBcXFwiLS0kMSwkMiYmJDFcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoXFxcInRleHRcXFwiLCBcXFwiVGV4dFxcXCIpO1xcbn07XFxubGV0IGdldEFycmF5ID0gKGh0bWwsIHJ1bGUpID0+IHtcXG4gICAgbGV0IHIxID0gcnVsZS5zcGxpdChcXFwiIVxcXCIpWzBdLnNwbGl0KFxcXCJ8fFxcXCIpO1xcbiAgICBsZXQgYyA9IGNvbnZlcnQocjFbMF0pO1xcbiAgICBpZiAoYy5pbmNsdWRlcyhcXFwiJiZsaSYmYVxcXCIpICYmIGNbYy5sZW5ndGggLSAxXSA9PSBcXFwiYVxcXCIpIHtcXG4gICAgICAgIGMgPSBjLnJlcGxhY2UoXFxcIiYmbGkmJmFcXFwiLCBcXFwiJiZsaVxcXCIpO1xcbiAgICB9XFxuICAgIGxvZyhjKTtcXG4gICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJlxcXCIgKyBjKTtcXG4gICAgaWYgKHIxLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgIGxldCByMiA9IHIxWzFdLnNwbGl0KFxcXCI6XFxcIik7XFxuICAgICAgICBsZXQgcjMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIHIyKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgbGV0IGkgPSBwYXJzZUludChpdCk7XFxuICAgICAgICAgICAgICAgIGlmIChpc05hTihpKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcjMucHVzaChpKTtcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGFycjIgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKHIzLmluZGV4T2YoaSkgPCAwKSB7XFxuICAgICAgICAgICAgICAgIGFycjIucHVzaChhcnJbaV0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBhcnIyO1xcbiAgICB9XFxuICAgIGxvZyhcXFwi6I635Y+W5aSx6LSl77yM5aSx6LSl5a6a5L2N77yaXFxcIiArIHIxKVxcbiAgICByZXR1cm4gYXJyO1xcbn07XFxubGV0IGdldFRleHQgPSAoaHRtbCwgcnVsZSkgPT4ge1xcbiAgICB2YXIgcnUgPSBjb252ZXJ0KHJ1bGUpXFxuICAgIHZhciByID0gcGRmaChodG1sLCBydSlcXG4gICAgaWYgKHIgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGxvZyhcXFwi6L+U5Zue5Li656m677yM5Y+v6IO95piv5a6a5L2N5aSx6LSl77yaXFxcIiArIHJ1bGUpXFxuICAgIH1cXG4gICAgcmV0dXJuIHJcXG59O1xcbmxldCBnZXRVcmwwID0gKGh0bWwsIHBhcmVudFJ1bGUsIHJ1bGUpID0+IHtcXG4gICAgaWYgKHBhcmVudFJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgcGFyZW50UnVsZSA9IHBhcmVudFJ1bGUuc3BsaXQoXFxcIiFcXFwiKVswXTtcXG4gICAgfVxcbiAgICBsZXQgcCA9IHBhcmVudFJ1bGUgIT0gbnVsbCAmJiBwYXJlbnRSdWxlW3BhcmVudFJ1bGUubGVuZ3RoIC0gMV0gPT0gXFxcImFcXFwiID8gXFxcImEmJlxcXCIgOiBcXFwiXFxcIjtcXG4gICAgbGV0IHIgPSBwZChodG1sLCBwICsgY29udmVydChydWxlLnNwbGl0KFxcXCIjI1xcXCIpWzBdKSk7XFxuICAgIGlmIChyID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBsb2coXFxcIui/lOWbnuS4uuepuu+8jOWPr+iDveaYr+WumuS9jeWksei0pe+8mlxcXCIgKyBydWxlKVxcbiAgICB9XFxuICAgIHJldHVybiByXFxufTtcXG5sZXQgcGFyc2VVcmwgPSAodXJsLCBwYWdlKSA9PiB7XFxuICAgIHVybCA9IHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcInt7cGFnZX19XFxcIiwgXFxcImdcXFwiKSwgcGFnZSk7XFxuICAgIGxldCBzID0gdXJsLnNwbGl0KFxcXCI8LFxcXCIpO1xcbiAgICBpZiAocy5sZW5ndGggPiAxKSB7XFxuICAgICAgICBpZiAocGFnZSA+IDEpIHtcXG4gICAgICAgICAgICBsZXQgczIgPSBzWzFdLnNwbGl0KFxcXCI+XFxcIik7XFxuICAgICAgICAgICAgdXJsID0gc1swXSArIHMyWzBdICsgKHMyLmxlbmd0aCA+IDEgPyBzMlsxXSA6IFxcXCJcXFwiKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cmwgPSBzWzBdO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiB1cmw7XFxufVxcbmxldCBnZXRDaGFyc2V0ID0gKHNlYXJjaFVybCkgPT4ge1xcbiAgICBpZiAoc2VhcmNoVXJsKSB7XFxuICAgICAgICBpZiAoc2VhcmNoVXJsLmluY2x1ZGVzKCdcXFwiZ2JrXFxcIicpIHx8IHNlYXJjaFVybC5pbmNsdWRlcyhcXFwiJ2diaydcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiZ2JrXFxcIlxcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hVcmwuaW5jbHVkZXMoJ1xcXCJnYjIzMTJcXFwiJykgfHwgc2VhcmNoVXJsLmluY2x1ZGVzKFxcXCInZ2IyMzEyJ1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJnYjIzMTJcXFwiXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG51bGxcXG59XFxuJC5leHBvcnRzID0ge1xcbiAgICBnZXRBcnJheTogZ2V0QXJyYXksXFxuICAgIGNvbnZlcnQ6IGNvbnZlcnQsXFxuICAgIGdldFRleHQ6IGdldFRleHQsXFxuICAgIGdldFVybDA6IGdldFVybDAsXFxuICAgIHBhcnNlVXJsOiBwYXJzZVVybCxcXG4gICAgZ2V0Q2hhcnNldDogZ2V0Q2hhcnNldFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiBmuaQnFwiLFwicGF0aFwiOlwianVcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxubGV0IHtcXG4gICAgc2VhcmNoLFxcbiAgICBsaXN0UnVsZXNcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3NcXFwiKTtcXG5sZXQge1xcbiAgICBhbGwsXFxuICAgIHVzZSxcXG4gICAgZGF0YVxcbn0gPSBsaXN0UnVsZXMoTVlfUEFHRSk7XFxuZGF0YSA9IGRhdGEgfHwgW107XFxubGV0IHMgPSBnZXRQYXJhbShcXFwia3dcXFwiKTtcXG5zZXRQYWdlVGl0bGUoXFxcIuaQnOe0olxcXCIgKyBzKTtcXG5pZiAodHlwZW9mKGdldFNlYXJjaE1vZGUpID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgIGNvbmZpcm0oe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmuKnppqjmj5DnpLpcXFwiLFxcbiAgICAgICAgY29udGVudDogXFxcIuS9oOeahOi9r+S7tueJiOacrOWkquS9ju+8jOabtOaWsOWIsOacgOaWsOeJiOaJjeiDveS9v+eUqOacrOinhOWImVxcXCJcXG4gICAgfSlcXG59XFxubGV0IG1hdGNoTXVzdCA9IGdldFNlYXJjaE1vZGUoKSA9PSAxO1xcbmxldCB0aXAgPSBcXFwi5pCc57Si5rqQ77yaXFxcIiArIHVzZSArIFxcXCIvXFxcIiArIGFsbCArIFxcXCIgIOeyvuehruWMuemFje+8mlxcXCIgKyAobWF0Y2hNdXN0ID8gXFxcIuaYr1xcXCIgOiBcXFwi5ZCmXFxcIik7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpcCxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgc2V0U2VhcmNoTW9kZShnZXRTZWFyY2hNb2RlKCkgPT0gMCA/IDEgOiAwKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IFxcXCJ5dWVkdS1zLWhcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0gZWxzZSBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgIHVwZGF0ZUl0ZW0oXFxcInl1ZWR1LXMtaFxcXCIsIHtcXG4gICAgICAgIHRpdGxlOiB0aXBcXG4gICAgfSk7XFxufVxcbmxldCBwID0gTVlfUEFHRTtcXG5sZXQgcGFnZWlkID0gXFxcInl1ZWR1LXBhZ2VcXFwiICsgTVlfUEFHRTtcXG5pZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhteS4re+8jOi/m+W6pu+8mjEvXFxcIiArIGRhdGEubGVuZ3RoLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1xcbmlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgLy/lpJrnur/nqIvliqDovb1cXG4gICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBzZWFyY2gocnVsZSwgcywgMSk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbTogaXQsXFxuICAgICAgICAgICAgaWQ6IFxcXCJydWxlQFxcXCIgKyBpdC5uYW1lXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXG4gICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJsaXN0ZW5lcjogXFxcIiArIChyZXN1bHQgfHwgW10pLmxlbmd0aClcXG4gICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaE11c3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hDb250YWlucyhpdC50aXRsZSwgcykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHRyYSA9IGl0LmV4dHJhIHx8IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmlkID0gXFxcIl9fYXBwXFxcIiArIE1ZX1BBR0UgKyBcXFwiQFxcXCIgKyBwYXJhbS5qO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvb2tOYW1lID0gaXQudGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5jb3ZlciA9IGl0LnBpY191cmwgfHwgaXQuaW1nXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IGl0LnRpdGxlIDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsIHx8IGl0LmltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgfHwgaXQuaW1nID8gJ21vdmllXzFfdmVydGljYWxfcGljJyA6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcIi9cXFwiICsgcGFyYW0uYWxsLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgaTogMCxcXG4gICAgICAgICAgICBqOiAtMVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLovoXliqlcIixcInBhdGhcIjpcInNzXCIsXCJydWxlXCI6XCJ2YXIge1xcbiAgICBjb252ZXJ0LFxcbiAgICBwYXJzZVVybCxcXG4gICAgZ2V0Q2hhcnNldFxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jb252ZXJ0ZXJcXFwiKTtcXG5sZXQgc2VhcmNoID0gKHJ1bGUsIGt3LCBwYWdlKSA9PiB7XFxuICAgIGxldCBkID0gW107XFxuICAgIGxldCBtID0gcnVsZS5ydWxlU2VhcmNoXFxuICAgIC8vIOmYheivuz0+6KeG55WMXFxuICAgIGxldCB1ID0gcnVsZS5zZWFyY2hVcmwuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpID8gcnVsZS5zZWFyY2hVcmwgOiBydWxlLmJvb2tTb3VyY2VVcmwgKyBydWxlLnNlYXJjaFVybDtcXG4gICAgLy9sb2cobSk7XFxuICAgIGxldCB1cmwxID0gcGFyc2VVcmwodSwgcGFnZSkucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJ7e2tleX19XFxcIiwgXFxcImdcXFwiKSwga3cpO1xcbiAgICBsZXQgdXJsMiA9IHVybDEuc3BsaXQoXFxcIix7XFxcIik7XFxuICAgIGxldCB1cmwgPSB1cmwyWzBdO1xcbiAgICBsZXQgaGVhZGVycyA9IHt9O1xcbiAgICBsZXQgbWV0aG9kID0gXFxcImdldFxcXCI7XFxuICAgIGxldCBib2R5ID0gbnVsbDtcXG4gICAgbGV0IGMgPSBnZXRDaGFyc2V0KHVybDEpO1xcbiAgICBpZiAoYykge1xcbiAgICAgICAgaGVhZGVycy5jaGFyc2V0ID0gYztcXG4gICAgICAgIGhlYWRlcnNbXFxcIkNvbnRlbnQtVHlwZVxcXCJdID0gXFxcInRleHQvaHRtbDsgY2hhcnNldD1cXFwiICsgYztcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKHVybDIubGVuZ3RoID4gMSAmJiB1cmwxLnN1YnN0cmluZyh1cmwxLmxlbmd0aCAtIDEsIHVybDEubGVuZ3RoKSA9PSBcXFwifVxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgZXh0ID0gXFxcIntcXFwiICsgdXJsMS5zdWJzdHJpbmcodXJsMS5pbmRleE9mKFxcXCIse1xcXCIpICsgMiwgdXJsMS5sZW5ndGgpO1xcbiAgICAgICAgICAgIC8vbG9nKGV4dCk7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZXh0ID0gSlNPTi5wYXJzZShleHQpO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChcXFwiZXh0PVxcXCIgKyBleHQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZXh0Lm1ldGhvZCAmJiBleHQubWV0aG9kICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IGV4dC5tZXRob2Q7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChleHQuYm9keSAmJiBleHQuYm9keSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBib2R5ID0gZXh0LmJvZHk7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnNbXFxcIkNvbnRlbnQtVHlwZVxcXCJdID0gXFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXCIgKyAoaGVhZGVycy5jaGFyc2V0ID8gXFxcIjtjaGFyc2V0PVxcXCIgKyBoZWFkZXJzLmNoYXJzZXQgOiBcXFwiXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBpZiAodXJsMS5pbmNsdWRlcygnXFxcIlBPU1RcXFwiJykgfHwgdXJsMS5pbmNsdWRlcygnXFxcInBvc3RcXFwiJykpIHtcXG4gICAgICAgICAgICBtZXRob2QgPSBcXFwicG9zdFxcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgaWYgKG1ldGhvZCA9PSBcXFwicG9zdFxcXCIgfHwgbWV0aG9kID09IFxcXCJQT1NUXFxcIikge1xcbiAgICAgICAgbGV0IGN0ID0gaGVhZGVyc1tcXFwiQ29udGVudC1UeXBlXFxcIl07XFxuICAgICAgICBoZWFkZXJzW1xcXCJDb250ZW50LVR5cGVcXFwiXSA9IGN0ID8gY3QucmVwbGFjZShcXFwidGV4dC9odG1sXFxcIiwgXFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXCIpIDogXFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXCI7XFxuICAgIH1cXG5cXG4gICAgbGV0IGxpc3RydWxlID0gXFxcImJvZHkmJlxcXCIgKyBjb252ZXJ0KG0uYm9va0xpc3QpLnNwbGl0KFxcXCJ8fFxcXCIpWzBdXFxuICAgIGxldCBhdXRob3IgPSBudWxsO1xcbiAgICB0cnkge1xcbiAgICAgICAgYXV0aG9yID0gY29udmVydChtLmF1dGhvcik7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBjb3ZlciA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBjb3ZlciA9IGNvbnZlcnQobS5jb3ZlclVybCk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBuYW1lID0gbnVsbDtcXG4gICAgdHJ5IHtcXG4gICAgICAgIG5hbWUgPSBjb252ZXJ0KG0ubmFtZSk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBib29rdXJsID0gbnVsbDtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGJvb2t1cmwgPSBjb252ZXJ0KG0uYm9va1VybCk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIGxldCBpbnRybyA9IG51bGw7XFxuICAgIHRyeSB7XFxuICAgICAgICBpbnRybyA9IGNvbnZlcnQobS5pbnRybyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIC8vc2V0UGFnZVRpdGxlKFxcXCLmkJzntKJcXFwiICsgZ2V0UGFyYW0oXFxcImt3XFxcIikgKyBcXFwiIFxcXCIgKyBNWV9QQVJBTVMuYm9va1NvdXJjZU5hbWUpO1xcbiAgICAvL01ZX1VSTCA9IHVybDtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxuICAgICAgICBib2R5OiBib2R5XFxuICAgIH0pO1xcbiAgICBsZXQgcGRmaDEgPSAoYSwgYikgPT4ge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICAgICAgcmV0dXJuIHBkZmgoYSwgYik7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCBwZDEgPSAoYSwgYiwgYykgPT4ge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICAgICAgcmV0dXJuIHBkKGEsIGIsIGMpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsaXN0cnVsZSA9IGxpc3RydWxlLnJlcGxhY2UoXFxcIiYmdGJvZHktLXRyLDAmJnRyXFxcIiwgXFxcIiYmdGFibGUgdGJvZHkgdHI6Z3QoMClcXFwiKTtcXG4gICAgLy9sb2cobGlzdHJ1bGUpO1xcbiAgICBsZXQgbGlzdCA9IHBkZmEocmVzLCBsaXN0cnVsZSk7XFxuICAgIC8vbG9nKGxpc3QpO1xcbiAgICAvL2xvZyhuYW1lKTtcXG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgbGV0IG5leHQgPSBydWxlLnJ1bGVUb2MubmV4dFRvY1VybDtcXG4gICAgICAgIGxldCBuZXh0dG9jID0gbmV4dCAmJiBuZXh0ICE9IFxcXCJcXFwiO1xcbiAgICAgICAgbGV0IGFjID0gbmV4dHRvYyA/IFxcXCJcXFwiOiBcXFwiI2F1dG9DYWNoZSNcXFwiO1xcbiAgICAgICAgLy9sZXQgYWMgPSBcXFwiI2F1dG9DYWNoZSNcXFwiO1xcbiAgICAgICAgbGV0IHUxID0gcGQxKGl0ZW0sIGJvb2t1cmwsIHVybCkgKyBhYyArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIjtcXG4gICAgICAgIGlmIChjKSB7XFxuICAgICAgICAgICAgdTEgPSB1MSArIFxcXCI7Z2V0O1xcXCIgKyBjXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoMShpdGVtLCBuYW1lKSxcXG4gICAgICAgICAgICBpbWc6IHBkMShpdGVtLCBjb3ZlciwgdXJsKSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvbWVudVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogcnVsZS5ib29rU291cmNlTmFtZSArIFxcXCJcXFxcblxcXCIgKyBwZGZoMShpdGVtLCBhdXRob3IpICsgXFxcIlxcXFxuXFxcIiArIHBkZmgxKGl0ZW0sIGludHJvKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiVG9jXFxcIjogcnVsZS5ydWxlVG9jLFxcbiAgICAgICAgICAgICAgICBcXFwiY29udGVudFxcXCI6IHJ1bGUucnVsZUNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIFxcXCJib29rTmFtZVxcXCI6IHBhcnNlRG9tRm9ySHRtbChpdGVtLCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgXFxcImNvdmVyXFxcIjogcGFyc2VEb20oaXRlbSwgY292ZXIsIHVybCksXFxuICAgICAgICAgICAgICAgIHVybDogbmV4dHRvYyA/IFxcXCJoaWtlcjovL2VtcHR5I1xcXCIgKyB1MSA6IHUxLFxcbiAgICAgICAgICAgICAgICB1MTogbmV4dHRvYyA/IHUxIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgY2hhcnNldDogY1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0pO1xcbiAgICByZXR1cm4gZDtcXG59XFxuJC5leHBvcnRzID0ge1xcbiAgICBjb252ZXJ0OiBjb252ZXJ0LFxcbiAgICBzZWFyY2g6IHNlYXJjaCxcXG4gICAgbGlzdFJ1bGVzOiAocGFnZSwgcnVsZSkgPT4ge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvL+W5tuWPkeaVsOmHj1xcbiAgICAgICAgICAgIGxldCBzaXplID0gMTY7XFxuICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgbG9hZCxcXG4gICAgICAgICAgICAgICAgbG9hZFJ1bGVzLFxcbiAgICAgICAgICAgICAgICBnZXRTZWxlY3RcXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGxvYWQoKTtcXG4gICAgICAgICAgICBsZXQgc2VsZWN0ID0gZ2V0U2VsZWN0KGRhdGEpO1xcbiAgICAgICAgICAgIGxldCBydWxlcyA9IGRhdGEubGVuZ3RoID4gMCA/IGxvYWRSdWxlcyhzZWxlY3QubmFtZSkgOiBbXTtcXG4gICAgICAgICAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXG4gICAgICAgICAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGxlbiA9IHNpemU7XFxuICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxuICAgICAgICAgICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBhbGwgPSBydWxlcy5sZW5ndGg7XFxuICAgICAgICAgICAgbGV0IHVzZSA9IChwYWdlIC0gMSkgKiBzaXplICsgbGVuO1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGFsbDogYWxsLFxcbiAgICAgICAgICAgICAgICB1c2U6IHVzZSxcXG4gICAgICAgICAgICAgICAgZGF0YTogcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgYWxsOiAwLFxcbiAgICAgICAgICAgICAgICB1c2U6IDAsXFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5o2uXCIsXCJwYXRoXCI6XCJkYXRhdFwiLFwicnVsZVwiOlwibGV0IGxvYWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIpKS51cmxzO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG59XFxubGV0IGxvYWRSdWxlcyA9IGZ1bmN0aW9uKG5hbWUpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFwiICsgbWQ1KG5hbWUpICsgXFxcIi5qc29uXFxcIikpO1xcbiAgICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ID0+IHtcXG4gICAgICAgICAgICBsZXQgcyA9IEpTT04uc3RyaW5naWZ5KGl0KVxcbiAgICAgICAgICAgIGlmIChzLmluY2x1ZGVzKFxcXCI8anM+XFxcIikgfHwgcy5pbmNsdWRlcyhcXFwiQGpzOlxcXCIpIHx8IHMuaW5jbHVkZXMoXFxcIiQuXFxcIikgfHwgcy5pbmNsdWRlcyhcXFwi8J+UnlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIHJldHVybiBbXTtcXG4gICAgfVxcbn1cXG5sZXQgcmVtb3ZlID0gZnVuY3Rpb24odXJsKSB7XFxuICAgIGxldCBkYXRhID0gbG9hZCgpO1xcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXQgPT4gaXQudXJsICE9IHVybCk7XFxuICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICB1cmxzOiBkYXRhXFxuICAgIH0pKVxcbn1cXG5sZXQgcmVuYW1lID0gZnVuY3Rpb24odXJsLCBuYW1lKSB7XFxuICAgIGxldCBhcnIgPSBsb2FkKCk7XFxuICAgIGZvciAobGV0IGkgaW4gYXJyKSB7XFxuICAgICAgICBpZiAoYXJyW2ldLnVybCA9PSB1cmwpIHtcXG4gICAgICAgICAgICBhcnJbaV0ubmFtZSA9IG5hbWU7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIHVybHM6IGFyclxcbiAgICB9KSlcXG59XFxubGV0IGFkZCA9IGZ1bmN0aW9uKG5hbWUsIHVybCkge1xcbiAgICBsZXQgZGF0YSA9IGxvYWQoKTtcXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ID0+IGl0LnVybCAhPSB1cmwpO1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgIHVybDogdXJsXFxuICAgIH0pO1xcbiAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgdXJsczogZGF0YVxcbiAgICB9KSlcXG59XFxubGV0IHVwZGF0ZSA9IGZ1bmN0aW9uKG5hbWUsIHVybCkge1xcbiAgICBsZXQgdCA9IGZldGNoKHVybClcXG4gICAgSlNPTi5wYXJzZSh0KVxcbiAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIG1kNShuYW1lKSArIFxcXCIuanNvblxcXCIsIHQpXFxufVxcbmxldCBzaGFyZSA9IGZ1bmN0aW9uKG5hbWUsIHVybCkge1xcbiAgICByZXR1cm4gXFxcImNvcHk6Ly/mgqbor7vorqLpmIXmlbDmja7liIbkuqvvvIzlpI3liLbmlbTmnaHlj6Pku6TmiZPlvIDova/ku7bljbPlj6/lr7zlhaVcXFxcblxcXCIgKyBuYW1lICsgXFxcIu+8mlxcXCIgKyB1cmwgKyBcXFwiQGltcG9ydD1qczokLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhdD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIicpLmNhKClcXFwiXFxufVxcbmxldCBjbG91ZEFkZCA9IGZ1bmN0aW9uKCkge1xcbiAgICBsZXQgcyA9IGlucHV0LnNwbGl0KFxcXCLvvJpcXFwiKTtcXG4gICAgaWYgKHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgYWRkKHNbMF0sIHNbMV0pO1xcbiAgICAgICAgdXBkYXRlKHNbMF0sIHNbMV0pO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Llr7zlhaXmgqbor7vorqLpmIXmupDigJxcXFwiICsgc1swXSArIFxcXCLigJ1cXFwiXFxufVxcbmxldCBnZXRTZWxlY3QgPSBmdW5jdGlvbihkYXRhKSB7XFxuICAgIGlmIChkYXRhID09IG51bGwpIHtcXG4gICAgICAgIGRhdGEgPSBsb2FkKCk7XFxuICAgIH1cXG4gICAgaWYgKGRhdGEubGVuZ3RoID09IDApIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBsZXQgdGFiID0gZ2V0SXRlbShcXFwidGFiXFxcIiwgZGF0YVswXS51cmwpO1xcbiAgICBsZXQgc2VsZWN0ID0gZGF0YS5maWx0ZXIoaXQgPT4gaXQudXJsID09IHRhYik7XFxuICAgIGlmIChzZWxlY3QubGVuZ3RoIDw9IDApIHtcXG4gICAgICAgIHJldHVybiBkYXRhWzBdO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHNlbGVjdFswXTtcXG4gICAgfVxcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIGFkZDogYWRkLFxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcXG4gICAgcmVtb3ZlOiByZW1vdmUsXFxuICAgIHJlbmFtZTogcmVuYW1lLFxcbiAgICBsb2FkOiBsb2FkLFxcbiAgICBsb2FkUnVsZXM6IGxvYWRSdWxlcyxcXG4gICAgZ2V0U2VsZWN0OiBnZXRTZWxlY3QsXFxuICAgIHNoYXJlOiBzaGFyZSxcXG4gICAgY2E6IGNsb3VkQWRkXFxufVwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIuaCpuivu1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS9jb25maWdcIixcImNvbF90eXBlXCI6XCJ0ZXh0X2NlbnRlcl8xXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudHJ5IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5re75Yqg6K6i6ZiFXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeiuoumYheWQjeensO+8jOWPluS4quWQjeWQp++8iOazqOaEj+S4jeimgeWhq+WcsOWdgO+8iVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN5aGr5oCO5LmI6IO96KGM5ZGiXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcIjovL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3og73loavlnLDlnYDlk6bvvIzlgrvlrp3otJ1cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl6K6i6ZiF5Zyw5Z2AXFxcIikuaW5wdXQoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgIGFkZCxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKTtcXG4gICAgICAgICAgICAgICAgYWRkKG5hbWUsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZShuYW1lLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvvOWFpeaIkOWKn1xcXCJcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvvOWFpeWksei0pVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGlucHV0KVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCJcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5re75Yqg5pys5ZywXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiXFxcIiwgXFxcIuivt+i+k+WFpeiuoumYheWQjeensO+8jOWPluS4quWQjeWQp++8iOi+k+WujOeCueWHu+ehruWumuWQjuS8mui3s+i9rOmAieaLqeS5pua6kOaWh+S7tueVjOmdou+8iVxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN5aGr5oCO5LmI6IO96KGM5ZGiXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcIjovL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3og73loavlnLDlnYDlk6bvvIzlgrvlrp3otJ1cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBcXFwiZmlsZVNlbGVjdDovL1xcXCIgKyAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBzID0gaW5wdXQuc3BsaXQoXFxcIi9cXFwiKVxcbiAgICAgICAgICAgICAgICBsZXQgZm5hbWUgPSBzW3MubGVuZ3RoIC0gMV0ucmVwbGFjZShcXFwiX2ZpbGVTZWxlY3RfXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAoIWZuYW1lLmluY2x1ZGVzKFxcXCIuanNvblxcXCIpICYmICFmbmFtZS5pbmNsdWRlcyhcXFwiLnR4dFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5qC85byP5LiN5a+577yM5LuF5pSv5oyBanNvbuaIlnR4dOagvOW8j+eahOS5pua6kOaWh+S7tlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIGZuYW1lO1xcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGZldGNoKFxcXCJmaWxlOi8vXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgaWYgKCFjLmluY2x1ZGVzKFxcXCJib29rU291cmNlXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/moLzlvI/kuI3lr7nvvIzku4XmlK/mjIHkuabmupDmlofku7ZcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHVybCwgYyk7XFxuICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICBhZGQsXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIik7XFxuICAgICAgICAgICAgICAgIGFkZChuYW1lLCB1cmwpO1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlKG5hbWUsIHVybCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvvOWFpeaIkOWKn1xcXCJcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvvOWFpeWksei0pVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiXFxuICAgIH0pXFxuICAgIGxldCBsaXN0ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKS5sb2FkKCk7XFxuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgIGRlc2M6IGl0ZW0udXJsLFxcbiAgICAgICAgICAgIHVybDogJChbXFxcIuWIoOmZpOiuoumYhVxcXCIsIFxcXCLnvJbovpHlkI3np7BcXFwiLCBcXFwi5YiG5Lqr6K6i6ZiFXFxcIiwgXFxcIuabtOaWsOaVsOaNrlxcXCJdKS5zZWxlY3QoKG5hbWUsIHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuWIoOmZpOiuoumYhVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7orqTliKDpmaTvvJ9cXFwiKS5jb25maXJtKChuYW1lLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXFxcImhpa2VyOi8vZmlsZXMvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRmlsZSh1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBtZDUobmFtZSkgKyBcXFwiLmpzb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcIikucmVtb3ZlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5Yig6ZmkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXCLnvJbovpHlkI3np7BcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIikuaW5wdXQoKG5hbWUsIHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIG1kNShuYW1lKSArIFxcXCIuanNvblxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUoaW5wdXQsIHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lKHVybCwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXCLliIbkuqvorqLpmIVcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXFxcImhpa2VyOi8vZmlsZXMvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5b2T5YmN6K6i6ZiF5Li65pys5Zyw5paH5Lu277yM5peg5rOV5YiG5LqrXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChuYW1lLCB1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGFyZShuYW1lLCB1cmwpXFxuICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCB1cmwpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZShuYW1lLCB1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mm7TmlrDmiJDlip9cXFwiXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+abtOaWsOWksei0pVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGl0ZW0ubmFtZSwgaXRlbS51cmwpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59IGNhdGNoIChlKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIumUmeivr++8mlxcXCIgKyBlLm1lc3NhZ2UsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSlcXG59XFxuc2V0UmVzdWx0KGQpO1wiLFwiZ3JvdXBcIjpcIuKRp+Wwj+ivtFwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzFcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5rqQ55uu5b2VXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdXJjZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG52YXIgbSA9IE1ZX1BBUkFNUy5ydWxlc1xcXFxudmFyIGJhc2V1cmwgPSBtLmJvb2tTb3VyY2VVcmxcXFxcbmlmIChtLnJ1bGVFeHBsb3JlLmJvb2tMaXN0KSB7XFxcXG4gICAgdmFyIHJ1bGUgPSBtLnJ1bGVFeHBsb3JlXFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciBydWxlID0gbS5ydWxlU2VhcmNoXFxcXG59XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJrd1xcXFxcXFwiLCBpbnB1dCk7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zZWFyY2g/cD1meXBhZ2Uma3c9XFxcXFxcXCIgKyBpbnB1dFxcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgXFxcXFxcXCJ1XFxcXFxcXCI6IGJhc2V1cmwgKyBtLnNlYXJjaFVybCxcXFxcbiAgICAgICAgXFxcXFxcXCJydWxlc1xcXFxcXFwiOiBtLFxcXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXFxcXFwia3dcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgIGJvb2tTb3VyY2VOYW1lOiBtLmJvb2tTb3VyY2VOYW1lXFxcXG4gICAgfVxcXFxufSk7XFxcXG50cnkge1xcXFxuICAgIGlmIChtLmVuYWJsZWRFeHBsb3JlICYmIG0uZXhwbG9yZVVybCkge1xcXFxuICAgICAgICBKU09OLnBhcnNlKG0uZXhwbG9yZVVybCkuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0ZW0uc3R5bGUubGF5b3V0X2ZsZXhCYXNpc1BlcmNlbnQgPT0gMSA/IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiIDogXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICB1cmw6IGl0ZW0udXJsID09IFxcXFxcXFwiXFxcXFxcXCIgPyBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIiA6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2Jvb2tzP3A9ZnlwYWdlXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJhbGxcXFxcXFxcIjogbSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJydWxlc1xcXFxcXFwiOiBydWxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInVcXFxcXFxcIjogYmFzZXVybCArIGl0ZW0udXJsXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgbG9nKG0uZXhwbG9yZVVybCk7XFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Li76aG1XFxcIixcXFwicGF0aFxcXCI6XFxcImhvbWVcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbmxldCB7XFxcXG4gICAgbG9hZCxcXFxcbiAgICBsb2FkUnVsZXMsXFxcXG4gICAgZ2V0U2VsZWN0XFxcXG59ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcXFxcXCIpO1xcXFxubGV0IGRhdGEgPSBsb2FkKCk7XFxcXG5pZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi4pqZ77iP6K6+572uXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29uZmlnXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuICAgIGxldCBzZWxlY3QgPSBnZXRTZWxlY3QoZGF0YSk7XFxcXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHNlbGVjdC51cmwgPT0gaXRlbS51cmwgPyBcXFxcXFxcIuKAnOKAnFxcXFxcXFwiICsgaXRlbS5uYW1lICsgXFxcXFxcXCLigJ3igJ1cXFxcXFxcIiA6IGl0ZW0ubmFtZSxcXFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1cmwpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwidGFiXFxcXFxcXCIsIHVybClcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSwgaXRlbS51cmwpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSlcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLmkJzntKJcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwia3dcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p1P3A9ZnlwYWdlJmt3PVxcXFxcXFwiICsgaW5wdXRcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwi6IGa5ZCI5pCc57Si77yM6K+36L6T5YWl5YWz6ZSu6K+NXFxcXFxcXCIsXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXFxcXFwia3dcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgbGlzdCA9IGxvYWRSdWxlcyhzZWxlY3QubmFtZSk7XFxcXG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uYm9va1NvdXJjZU5hbWUgKyBgKCR7aXRlbS5ib29rU291cmNlR3JvdXB9KWAsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc291cmNlP3A9ZnlwYWdlXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicnVsZXNcXFxcXFxcIjogaXRlbVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0pXFxcXG59IGVsc2Uge1xcXFxuICAgIHNldFJlc3VsdChbe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLkvaDov5jmsqHmnInkuablk6bvvZ7vvZ7ngrnmiJHov5vlhaXorr7nva5cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9jb25maWdcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiXFxcXG4gICAgfV0pXFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcIixcXFwibmFtZVxcXCI6XFxcIuWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJib29rc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG52YXIge1xcXFxuICAgIGNvbnZlcnQsXFxcXG4gICAgcGFyc2VVcmwsXFxcXG4gICAgZ2V0Q2hhcnNldFxcXFxufSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9jb252ZXJ0ZXJcXFxcXFxcIik7XFxcXG50cnkge1xcXFxuICAgIC8vbG9nKE1ZX1BBUkFNUyk7XFxcXG4gICAgdmFyIG0gPSBNWV9QQVJBTVMucnVsZXNcXFxcbiAgICAvLyDpmIXor7s9PuinhueVjFxcXFxuICAgIHZhciB1cmwgPSBwYXJzZVVybChNWV9QQVJBTVMudSwgTVlfUEFHRSk7XFxcXG4gICAgdmFyIGxpc3RydWxlID0gXFxcXFxcXCJib2R5JiZcXFxcXFxcIiArIGNvbnZlcnQobS5ib29rTGlzdC5zcGxpdChcXFxcXFxcInx8XFxcXFxcXCIpWzBdKTtcXFxcbiAgICBsZXQgYXV0aG9yID0gbnVsbDtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBhdXRob3IgPSBjb252ZXJ0KG0uYXV0aG9yKTtcXFxcbiAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIGxldCBjb3ZlciA9IG51bGw7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgY292ZXIgPSBjb252ZXJ0KG0uY292ZXJVcmwpO1xcXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgbGV0IG5hbWUgPSBudWxsO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIG5hbWUgPSBjb252ZXJ0KG0ubmFtZSk7XFxcXG4gICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICBsZXQgYm9va3VybCA9IG51bGw7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgYm9va3VybCA9IGNvbnZlcnQobS5ib29rVXJsKTtcXFxcbiAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIGxldCBpbnRybyA9IG51bGw7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgaW50cm8gPSBjb252ZXJ0KG0uaW50cm8pO1xcXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgbGV0IHBkZmgxID0gKGEsIGIpID0+IHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGlmIChiID09IG51bGwpIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHBkZmgoYSwgYik7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGxldCBwZDEgPSAoYSwgYiwgYykgPT4ge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgaWYgKGIgPT0gbnVsbCkgcmV0dXJuIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICByZXR1cm4gcGQoYSwgYiwgYyk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIE1ZX1VSTCA9IHVybDtcXFxcbiAgICBpZiAoTVlfUEFSQU1TLmFsbCAmJiBNWV9QQVJBTVMuYWxsLnNlYXJjaFVybCkge1xcXFxuICAgICAgICBtLmNoYXJzZXQgPSBnZXRDaGFyc2V0KE1ZX1BBUkFNUy5hbGwuc2VhcmNoVXJsKTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGhlYWRlcnMgPSBtLmNoYXJzZXQgPyB7XFxcXG4gICAgICAgIFxcXFxcXFwiQ29udGVudC1UeXBlXFxcXFxcXCI6IFxcXFxcXFwidGV4dC9odG1sOyBjaGFyc2V0PVxcXFxcXFwiICsgbS5jaGFyc2V0XFxcXG4gICAgfSA6IHt9O1xcXFxuICAgIHZhciByZXMgPSByZXF1ZXN0KHVybCwge1xcXFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXFxcXG4gICAgfSlcXFxcbiAgICBsZXQgbGlzdCA9IHBkZmEocmVzLCBsaXN0cnVsZSlcXFxcbiAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBuZXh0ID0gTVlfUEFSQU1TLmFsbC5ydWxlVG9jLm5leHRUb2NVcmw7XFxcXG4gICAgICAgICAgICBsZXQgbmV4dHRvYyA9IG5leHQgJiYgbmV4dCAhPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgbGV0IGFjID0gbmV4dHRvYyA/IFxcXFxcXFwiXFxcXFxcXCI6IFxcXFxcXFwiI2F1dG9DYWNoZSNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIC8vbGV0IGFjID0gXFxcXFxcXCIjYXV0b0NhY2hlI1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgbGV0IHUxID0gcGQxKGl0ZW0sIGJvb2t1cmwpICsgYWMgKyBcXFxcXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGlmIChtLmNoYXJzZXQpIHtcXFxcbiAgICAgICAgICAgICAgICB1MSA9IHUxICsgXFxcXFxcXCI7Z2V0O1xcXFxcXFwiICsgbS5jaGFyc2V0XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAoY292ZXIgPyBcXFxcXFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcXFxcXCIgOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaDEoaXRlbSwgbmFtZSksXFxcXG4gICAgICAgICAgICAgICAgaW1nOiAoY292ZXIgPyBwZDEoaXRlbSwgY292ZXIpICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIiA6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21lbnVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAoYXV0aG9yID8gcGRmaDEoaXRlbSwgYXV0aG9yKSA6IFxcXFxcXFwiXFxcXFxcXCIpICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIChpbnRybyA/IHBkZmgxKGl0ZW0sIGludHJvKSA6IFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiYm9va05hbWVcXFxcXFxcIjogcGRmaDEoaXRlbSwgbmFtZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY292ZXJcXFxcXFxcIjogKGNvdmVyID8gcGQxKGl0ZW0sIGNvdmVyKSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIgOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVG9jXFxcXFxcXCI6IE1ZX1BBUkFNUy5hbGwucnVsZVRvYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJjb250ZW50XFxcXFxcXCI6IE1ZX1BBUkFNUy5hbGwucnVsZUNvbnRlbnQsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogbmV4dHRvYyA/IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNcXFxcXFxcIiArIHUxIDogdTEsXFxcXG4gICAgICAgICAgICAgICAgICAgIHUxOiBuZXh0dG9jID8gdTEgOiBudWxsLFxcXFxuICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OiBtLmNoYXJzZXQsXFxcXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2VcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLliJfooajliqDovb3lpLHotKXvvJpcXFxcXFxcIiArIGxpc3RydWxlLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLliqDovb3lpLHotKXvvJpcXFxcXFxcIiArIGUubWVzc2FnZSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCLorr7nva5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29uZmlnXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbnRyeSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5re75Yqg6K6i6ZiFXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIuivt+i+k+WFpeiuoumYheWQjeensO+8jOWPluS4quWQjeWQp++8iOazqOaEj+S4jeimgeWhq+WcsOWdgO+8iVxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kuI3loavmgI7kuYjog73ooYzlkaJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKFxcXFxcXFwiOi8vXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kuI3og73loavlnLDlnYDlk6bvvIzlgrvlrp3otJ1cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJcXFxcXFxcIiwgXFxcXFxcXCLor7fovpPlhaXorqLpmIXlnLDlnYBcXFxcXFxcIikuaW5wdXQoKG5hbWUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICBhZGQsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgYWRkKG5hbWUsIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUobmFtZSwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WvvOWFpeaIkOWKn1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WvvOWFpeWksei0pVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSwgaW5wdXQpXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5re75Yqg5pys5ZywXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIuivt+i+k+WFpeiuoumYheWQjeensO+8jOWPluS4quWQjeWQp++8iOi+k+WujOeCueWHu+ehruWumuWQjuS8mui3s+i9rOmAieaLqeS5pua6kOaWh+S7tueVjOmdou+8iVxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kuI3loavmgI7kuYjog73ooYzlkaJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKFxcXFxcXFwiOi8vXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kuI3og73loavlnLDlnYDlk6bvvIzlgrvlrp3otJ1cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiZmlsZVNlbGVjdDovL1xcXFxcXFwiICsgJC50b1N0cmluZygobmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCBzID0gaW5wdXQuc3BsaXQoXFxcXFxcXCIvXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgbGV0IGZuYW1lID0gc1tzLmxlbmd0aCAtIDFdLnJlcGxhY2UoXFxcXFxcXCJfZmlsZVNlbGVjdF9cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCFmbmFtZS5pbmNsdWRlcyhcXFxcXFxcIi5qc29uXFxcXFxcXCIpICYmICFmbmFtZS5pbmNsdWRlcyhcXFxcXFxcIi50eHRcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/moLzlvI/kuI3lr7nvvIzku4XmlK/mjIFqc29u5oiWdHh05qC85byP55qE5Lmm5rqQ5paH5Lu2XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFxcXFxcIiArIGZuYW1lO1xcXFxuICAgICAgICAgICAgICAgIGxldCBjID0gZmV0Y2goXFxcXFxcXCJmaWxlOi8vXFxcXFxcXCIgKyBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCFjLmluY2x1ZGVzKFxcXFxcXFwiYm9va1NvdXJjZVxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+agvOW8j+S4jeWvue+8jOS7heaUr+aMgeS5pua6kOaWh+S7tlxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh1cmwsIGMpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFkZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlXFxcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBhZGQobmFtZSwgdXJsKTtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUobmFtZSwgdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lr7zlhaXmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lr7zlhaXlpLHotKVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sIGlucHV0KTtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMlxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICBsZXQgbGlzdCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXFxcXFwiKS5sb2FkKCk7XFxcXG4gICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lLFxcXFxuICAgICAgICAgICAgZGVzYzogaXRlbS51cmwsXFxcXG4gICAgICAgICAgICB1cmw6ICQoW1xcXFxcXFwi5Yig6Zmk6K6i6ZiFXFxcXFxcXCIsIFxcXFxcXFwi57yW6L6R5ZCN56ewXFxcXFxcXCIsIFxcXFxcXFwi5YiG5Lqr6K6i6ZiFXFxcXFxcXCIsIFxcXFxcXFwi5pu05paw5pWw5o2uXFxcXFxcXCJdKS5zZWxlY3QoKG5hbWUsIHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFxcXFxcIuWIoOmZpOiuoumYhVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwi56Gu6K6k5Yig6Zmk77yfXFxcXFxcXCIpLmNvbmZpcm0oKG5hbWUsIHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFxcXFxcIiArIG1kNShuYW1lKSArIFxcXFxcXFwiLmpzb25cXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXFxcXFwiKS5yZW1vdmUodXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suWIoOmZpFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXFxcXFwi57yW6L6R5ZCN56ewXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJcXFxcXFxcIikuaW5wdXQoKG5hbWUsIHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcXFxcXCIgKyBtZDUobmFtZSkgKyBcXFxcXFxcIi5qc29uXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUoaW5wdXQsIHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5hbWUodXJsLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIHVybClcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXFxcXFwi5YiG5Lqr6K6i6ZiFXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5b2T5YmN6K6i6ZiF5Li65pys5Zyw5paH5Lu277yM5peg5rOV5YiG5LqrXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgobmFtZSwgdXJsKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGF0XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlKG5hbWUsIHVybClcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSwgdXJsKVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhdFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZShuYW1lLCB1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/mm7TmlrDmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+abtOaWsOWksei0pVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCBpdGVtLm5hbWUsIGl0ZW0udXJsKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSlcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLplJnor6/vvJpcXFxcXFxcIiArIGUubWVzc2FnZSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8xXFxcIixcXFwibmFtZVxcXCI6XFxcIuebruW9lVxcXCIsXFxcInBhdGhcXFwiOlxcXCJtZW51XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbnZhciByZXMgPSBnZXRSZXNDb2RlKClcXFxcbmxldCBUb2MgPSBNWV9QQVJBTVMuVG9jXFxcXG5sZXQge1xcXFxuICAgIGdldEFycmF5LFxcXFxuICAgIGdldFRleHQsXFxcXG4gICAgZ2V0VXJsMCxcXFxcbiAgICBjb252ZXJ0XFxcXG59ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvbnZlcnRlclxcXFxcXFwiKTtcXFxcbi8vbG9nKFRvYyk7XFxcXG52YXIgY2FjaGVzID0gW107XFxcXG5cXFxcbmZ1bmN0aW9uIGdldENhY2hlKCkge1xcXFxuICAgIGxldCBjID0gcmVhZEZpbGUoXFxcXFxcXCJjaGFwdGVyLmpzb25cXFxcXFxcIikgfHwgXFxcXFxcXCJbXVxcXFxcXFwiO1xcXFxuICAgIGNhY2hlcyA9IEpTT04ucGFyc2UoYylcXFxcbiAgICBsZXQgdXJsID0gTVlfVVJMXFxcXG4gICAgYWRkTGlzdGVuZXIoXFxcXFxcXCJvblJlZnJlc2hcXFxcXFxcIiwgJC50b1N0cmluZygodXJsKSA9PiB7XFxcXG4gICAgICAgIGxldCBjID0gcmVhZEZpbGUoXFxcXFxcXCJjaGFwdGVyLmpzb25cXFxcXFxcIikgfHwgXFxcXFxcXCJbXVxcXFxcXFwiO1xcXFxuICAgICAgICBjID0gSlNPTi5wYXJzZShjKVxcXFxuICAgICAgICBsZXQgY2hlID0ge1xcXFxuICAgICAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgICAgICBuZXh0OiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY2hhcHRlcnM6IFtdXFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgaWYgKGNbaV0udXJsID09IGNoZS51cmwpIHtcXFxcbiAgICAgICAgICAgICAgICBjW2ldID0gY2hlO1xcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcImNsZWFyOlxcXFxcXFwiICsgdXJsKVxcXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKFxcXFxcXFwiY2hhcHRlci5qc29uXFxcXFxcXCIsIEpTT04uc3RyaW5naWZ5KGMpKVxcXFxuICAgICAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB1cmwpKVxcXFxuICAgIGZvciAobGV0IGl0IG9mIGNhY2hlcykge1xcXFxuICAgICAgICBpZiAoaXQudXJsID09IHVybCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGl0O1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiB7XFxcXG4gICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICBuZXh0OiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBjaGFwdGVyczogW11cXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIHNhdmVDYWNoZShjaGUpIHtcXFxcbiAgICBsZXQgYyA9IGNhY2hlc1xcXFxuICAgIGlmIChjLmxlbmd0aCA+IDEwKSB7XFxcXG4gICAgICAgIGMuc2hpZnQoKVxcXFxuICAgIH1cXFxcbiAgICBsZXQgZXhpc3QgPSBmYWxzZVxcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBpZiAoY1tpXS51cmwgPT0gY2hlLnVybCkge1xcXFxuICAgICAgICAgICAgY1tpXSA9IGNoZTtcXFxcbiAgICAgICAgICAgIGV4aXN0ID0gdHJ1ZTtcXFxcbiAgICAgICAgICAgIGJyZWFrXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgaWYgKCFleGlzdCkge1xcXFxuICAgICAgICBjLnB1c2goY2hlKVxcXFxuICAgIH1cXFxcbiAgICBzYXZlRmlsZShcXFxcXFxcImNoYXB0ZXIuanNvblxcXFxcXFwiLCBKU09OLnN0cmluZ2lmeShjKSlcXFxcbn1cXFxcblxcXFxuXFxcXG5sZXQgbmV4dCA9IFRvYy5uZXh0VG9jVXJsO1xcXFxubGV0IGxpc3QgPSBbXTtcXFxcbmlmIChuZXh0ICYmIG5leHQgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIGlmIChuZXh0ID09IFxcXFxcXFwib3B0aW9uQHZhbHVlXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgbmV4dCA9IFxcXFxcXFwidGV4dC7kuIvkuIDpobUmJmhyZWZcXFxcXFxcIjtcXFxcbiAgICB9XFxcXG4gICAgTVlfVVJMID0gTVlfUEFSQU1TLnUxIHx8IE1ZX1VSTDtcXFxcbiAgICBsZXQgaGVhZGVycyA9IE1ZX1BBUkFNUy5jaGFyc2V0ID8ge1xcXFxuICAgICAgICBcXFxcXFxcImNoYXJzZXRcXFxcXFxcIjogTVlfUEFSQU1TLmNoYXJzZXQsXFxcXG4gICAgICAgIFxcXFxcXFwiQ29udGVudC1UeXBlXFxcXFxcXCI6IFxcXFxcXFwidGV4dC9odG1sOyBjaGFyc2V0PVxcXFxcXFwiICsgTVlfUEFSQU1TLmNoYXJzZXRcXFxcbiAgICB9IDoge307XFxcXG4gICAgbmV4dCA9IGNvbnZlcnQobmV4dCk7XFxcXG4gICAgLy9sb2cobmV4dCk7XFxcXG4gICAgbGV0IGNhY2hlID0gZ2V0Q2FjaGUoKTtcXFxcbiAgICBsZXQgbnVybCA9IGNhY2hlLm5leHQ7XFxcXG4gICAgaWYgKG51cmwgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBudXJsID0gTVlfVVJMO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgaWQgPSBNWV9VUkwgKyBcXFxcXFxcIkBAXFxcXFxcXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXFxcbiAgICBsZXQgYWlkID0gXFxcXFxcXCJhXFxcXFxcXCIgKyBpZDtcXFxcbiAgICBwdXRNeVZhcihhaWQsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoYWlkKSA9PiB7XFxcXG4gICAgICAgIGxvZyhcXFxcXFxcImNsZWFyOiBcXFxcXFxcIiArIGFpZCk7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoYWlkKTtcXFxcbiAgICB9LCBhaWQpKTtcXFxcbiAgICBsZXQgYXJyID0gY2FjaGUuY2hhcHRlcnMgfHwgW107XFxcXG4gICAgdmFyIGNjID0gKGEpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuIGEubWFwKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gZ2V0VGV4dChpdGVtLCBUb2MuY2hhcHRlck5hbWUpXFxcXG4gICAgICAgICAgICBpZiAodGl0bGUgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGxldCB1MSA9IGdldFVybDAoaXRlbSwgVG9jLmNoYXB0ZXJMaXN0LCBUb2MuY2hhcHRlclVybCkgKyBcXFxcXFxcIiNhdXRvUGFnZSMjcmVhZFRoZW1lI1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQVJBTVMuY2hhcnNldCkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1MSA9IHUxICsgXFxcXFxcXCI7Z2V0O1xcXFxcXFwiICsgTVlfUEFSQU1TLmNoYXJzZXQ7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9jb250ZW50XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBNWV9QQVJBTVMuY29udGVudCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdTFcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgLy9sb2coY2FjaGUubmV4dCArIFxcXFxcXFwiOlxcXFxcXFwiICsgY2FjaGUuY2hhcHRlcnMubGVuZ3RoKTtcXFxcbiAgICBsZXQgZDIgPSBjYyhhcnIpO1xcXFxuICAgIGQyLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLliqDovb3kuK3vvIzor7fnqI3lgJkuLi5cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBpZDogaWRcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIGQyLnVuc2hpZnQoe1xcXFxuICAgICAgICB0aXRsZTogTVlfUEFSQU1TLmJvb2tOYW1lLFxcXFxuICAgICAgICBpbWc6IE1ZX1BBUkFNUy5jb3ZlcixcXFxcbiAgICAgICAgdXJsOiBNWV9VUkwsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuICAgIHNldFJlc3VsdChkMik7XFxcXG4gICAgaGVhZGVyc1tcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIl0gPSBNWV9VUkwuc3BsaXQoXFxcXFxcXCIjXFxcXFxcXCIpWzBdO1xcXFxuICAgIGlmIChudXJsICE9IE1ZX1VSTCkge1xcXFxuICAgICAgICBNWV9VUkwgPSBudXJsO1xcXFxuICAgICAgICByZXMgPSBmZXRjaChNWV9VUkwsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBlbHNlIGlmIChNWV9QQVJBTVMudTEpIHtcXFxcbiAgICAgICAgcmVzID0gZmV0Y2goTVlfVVJMLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICB2YXIgdXJscyA9IFtudXJsXTtcXFxcbiAgICB3aGlsZSAodHJ1ZSkge1xcXFxuICAgICAgICBsZXQgYSA9IFtdO1xcXFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXFxcbiAgICAgICAgICAgIGEucHVzaChpdCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2FjaGUuY2hhcHRlcnMgPSBhO1xcXFxuICAgICAgICBsZXQgYXJyMSA9IGdldEFycmF5KHJlcywgVG9jLmNoYXB0ZXJMaXN0KTtcXFxcbiAgICAgICAgLy9sb2coYXJyMSk7XFxcXG4gICAgICAgIGlmIChhcnIxICYmIGFycjEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgYXJyMSkge1xcXFxuICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0KVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGFkZEl0ZW1CZWZvcmUoaWQsIGNjKGFycjEpKTtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcihhaWQsIFxcXFxcXFwiMFxcXFxcXFwiKSAhPSBcXFxcXFxcIjFcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcImJyZWFrOiBcXFxcXFxcIiArIGFpZCk7XFxcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDUwKTtcXFxcbiAgICAgICAgICAgIGxldCBudXJsMiA9IHBkKHJlcywgXFxcXFxcXCJib2R5JiZcXFxcXFxcIiArIG5leHQpO1xcXFxuICAgICAgICAgICAgaWYgKG51cmwyICYmIG51cmwyICE9IFxcXFxcXFwiXFxcXFxcXCIgJiYgIXVybHMuaW5jbHVkZXMobnVybDIpKSB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyc1tcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIl0gPSBjYWNoZS5uZXh0LnNwbGl0KFxcXFxcXFwiI1xcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICB1cmxzLnB1c2gobnVybDIpO1xcXFxuICAgICAgICAgICAgICAgIGNhY2hlLm5leHQgPSBudXJsMjtcXFxcbiAgICAgICAgICAgICAgICBudXJsID0gbnVybDI7XFxcXG4gICAgICAgICAgICAgICAgTVlfVVJMID0gbnVybDtcXFxcbiAgICAgICAgICAgICAgICByZXMgPSBmZXRjaChudXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGRlbGV0ZUl0ZW0oaWQpO1xcXFxuICAgIC8vbG9nKGNhY2hlLm5leHQgKyBcXFxcXFxcIjplbmQ6XFxcXFxcXCIgKyBjYWNoZS5jaGFwdGVycy5sZW5ndGgpO1xcXFxuICAgIHNhdmVDYWNoZShjYWNoZSk7XFxcXG59IGVsc2Uge1xcXFxuICAgIGxpc3QgPSBnZXRBcnJheShyZXMsIFRvYy5jaGFwdGVyTGlzdCk7XFxcXG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAvL2xvZyhpdGVtKTsgICAgXFxcXG4gICAgICAgIHZhciB0aXRsZSA9IGdldFRleHQoaXRlbSwgVG9jLmNoYXB0ZXJOYW1lKVxcXFxuICAgICAgICBpZiAodGl0bGUgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgbGV0IHUxID0gZ2V0VXJsMChpdGVtLCBUb2MuY2hhcHRlckxpc3QsIFRvYy5jaGFwdGVyVXJsKSArIFxcXFxcXFwiI2F1dG9QYWdlIyNyZWFkVGhlbWUjXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBpZiAoTVlfUEFSQU1TLmNoYXJzZXQpIHtcXFxcbiAgICAgICAgICAgICAgICB1MSA9IHUxICsgXFxcXFxcXCI7Z2V0O1xcXFxcXFwiICsgTVlfUEFSQU1TLmNoYXJzZXQ7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvbnRlbnRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IE1ZX1BBUkFNUy5jb250ZW50LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUxXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgdmFyIGNwID0gZC5tYXAoZnVuY3Rpb24oaXRlbSkge1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJ0aXRsZVxcXFxcXFwiOiBpdGVtLnRpdGxlLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ1cmxcXFxcXFxcIjogaXRlbS5leHRyYS51cmwucmVwbGFjZShcXFxcXFxcIiNhdXRvUGFnZSMjcmVhZFRoZW1lI1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG4gICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICBkLnVuc2hpZnQoe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5LiL6L29XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2Rvd25sb2FkLnZpZXcjbm9SZWNvcmRIaXN0b3J5IyNub1JlZnJlc2gjI25vSGlzdG9yeSM/cnVsZT3mnKzlnLDotYTmupDnrqHnkIZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgY2hhcHRlckxpc3Q6IGNwLFxcXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWaWV3OiBcXFxcXFxcIjFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBpbmZvOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tOYW1lOiBNWV9QQVJBTVMuYm9va05hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGJvb2tUb3BQaWM6IE1ZX1BBUkFNUy5jb3ZlcixcXFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWU6IFxcXFxcXFwi5oKm6K+7XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZTogJC50b1N0cmluZygoTVlfUEFSQU1TLCByMCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvbnZlcnRlcj9ydWxlPVxcXFxcXFwiICsgcjApO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlcXVlc3QoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBNWV9QQVJBTVMuY29udGVudDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByID0gY29udmVydChydWxlLmNvbnRlbnQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIxID0gci5zcGxpdChcXFxcXFxcIiYmXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIyID0gcjEuc2xpY2UoMCwgcjEubGVuZ3RoIC0gMSkuam9pbihcXFxcXFxcIiYmXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEocmVzLCBcXFxcXFxcImJvZHkmJlxcXFxcXFwiICsgcjIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0dCA9IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ID0gaXQucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCItLWJyLS1cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coaXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gcGRmaChpdCwgXFxcXFxcXCJUZXh0XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIi0tYnItLVxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiPGJyPlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0MiA9IHQuc3BsaXQoXFxcXFxcXCI8YnI+XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0MiBvZiB0Mikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQyID09IFxcXFxcXFwiXFxcXFxcXCIgfHwgaXQyLmxlbmd0aCA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXQyLnN0YXJ0c1dpdGgoXFxcXFxcXCLjgIBcXFxcXFxcIikgJiYgIWl0Mi5zdGFydHNXaXRoKFxcXFxcXFwiJm5ic3A7Jm5ic3A7XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdDIgPSBcXFxcXFxcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xcXFxcXFwiICsgaXQyLnRyaW0oKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5yZXBsYWNlUmVnZXgpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0MiA9IGl0Mi5yZXBsYWNlKG5ldyBSZWdFeHAocnVsZS5yZXBsYWNlUmVnZXgucmVwbGFjZShcXFxcXFxcIiMjXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0MiA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0ICs9IGl0MiArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHRcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfUEFSQU1TLCBNWV9SVUxFLnRpdGxlKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXCJub3ZlbFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBkLnVuc2hpZnQoe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pyq6Kej5p6Q5Yiw55uu5b2V5YiX6KGoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIGQudW5zaGlmdCh7XFxcXG4gICAgICAgIHRpdGxlOiBNWV9QQVJBTVMuYm9va05hbWUsXFxcXG4gICAgICAgIGltZzogTVlfUEFSQU1TLmNvdmVyLFxcXFxuICAgICAgICB1cmw6IE1ZX1VSTCxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICBzZXRSZXN1bHQoZCk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5YaF5a65XFxcIixcXFwicGF0aFxcXCI6XFxcImNvbnRlbnRcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxubGV0IHtcXFxcbiAgICBjb252ZXJ0XFxcXG59ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvbnZlcnRlclxcXFxcXFwiKTtcXFxcbnZhciByZXMgPSBnZXRSZXNDb2RlKCk7XFxcXG52YXIgcnVsZSA9IE1ZX1BBUkFNUy5jb250ZW50XFxcXG5sZXQgciA9IGNvbnZlcnQocnVsZS5jb250ZW50KTtcXFxcbmxldCByMSA9IHIuc3BsaXQoXFxcXFxcXCImJlxcXFxcXFwiKTtcXFxcbmxldCByMiA9IHIxLnNsaWNlKDAsIHIxLmxlbmd0aCAtIDEpLmpvaW4oXFxcXFxcXCImJlxcXFxcXFwiKTtcXFxcbmxldCBhcnIgPSBwZGZhKHJlcywgXFxcXFxcXCJib2R5JiZcXFxcXFxcIiArIHIyKTtcXFxcbi8vbG9nKGFycik7XFxcXG5mb3IgKGxldCBpdCBvZiBhcnIpIHtcXFxcbiAgICBpdCA9IGl0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiLS1ici0tXFxcXFxcXCIpO1xcXFxuICAgIC8vbG9nKGl0KTtcXFxcbiAgICB2YXIgdCA9IHBkZmgoaXQsIFxcXFxcXFwiVGV4dFxcXFxcXFwiKTtcXFxcbiAgICB0ID0gdC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCItLWJyLS1cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIjxicj5cXFxcXFxcIik7XFxcXG4gICAgaWYgKHQgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBjb250aW51ZVxcXFxuICAgIH1cXFxcbiAgICBsZXQgdDIgPSB0LnNwbGl0KFxcXFxcXFwiPGJyPlxcXFxcXFwiKTtcXFxcbiAgICBmb3IgKGxldCBpdDIgb2YgdDIpIHtcXFxcbiAgICAgICAgaWYgKGl0MiA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGl0Mi5sZW5ndGggPT0gMSkge1xcXFxuICAgICAgICAgICAgY29udGludWVcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoIWl0Mi5zdGFydHNXaXRoKFxcXFxcXFwi44CAXFxcXFxcXCIpICYmICFpdDIuc3RhcnRzV2l0aChcXFxcXFxcIiZuYnNwOyZuYnNwO1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgaXQyID0gXFxcXFxcXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcXFxcXFxcIiArIGl0Mi50cmltKCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHJ1bGUucmVwbGFjZVJlZ2V4KSB7XFxcXG4gICAgICAgICAgICBpdDIgPSBpdDIucmVwbGFjZShuZXcgUmVnRXhwKHJ1bGUucmVwbGFjZVJlZ2V4LnJlcGxhY2UoXFxcXFxcXCIjI1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChpdDIgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBpdDIgPT0gXFxcXFxcXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgY29udGludWVcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGl0MixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInJpY2hfdGV4dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxufVxcXFxuZC51bnNoaWZ0KHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCI8YmlnPlxcXFxcXFwiICsgTVlfUEFSQU1TLnRpdGxlICsgXFxcXFxcXCI8L2JpZz5cXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcIlxcXFxufSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInNlYXJjaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCB7XFxcXG4gICAgc2VhcmNoXFxcXG59ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NzXFxcXFxcXCIpO1xcXFxubGV0IGQgPSBbXTtcXFxcbmxldCBrdyA9IGdldFBhcmFtKFxcXFxcXFwia3dcXFxcXFxcIik7XFxcXG5sZXQgcyA9IGt3O1xcXFxuc2V0UGFnZVRpdGxlKFxcXFxcXFwi5pCc57SiXFxcXFxcXCIgKyBrdyArIFxcXFxcXFwiIFxcXFxcXFwiICsgTVlfUEFSQU1TLmJvb2tTb3VyY2VOYW1lKTtcXFxcbmlmICh0eXBlb2YoZ2V0U2VhcmNoTW9kZSkgPT0gXFxcXFxcXCJ1bmRlZmluZWRcXFxcXFxcIikge1xcXFxuICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLmuKnppqjmj5DnpLpcXFxcXFxcIixcXFxcbiAgICAgICAgY29udGVudDogXFxcXFxcXCLkvaDnmoTova/ku7bniYjmnKzlpKrkvY7vvIzmm7TmlrDliLDmnIDmlrDniYjmiY3og73kvb/nlKjmnKzop4TliJlcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG59XFxcXG5sZXQgbWF0Y2hNdXN0ID0gZ2V0U2VhcmNoTW9kZSgpID09IDE7XFxcXG5sZXQgdGlwID0gXFxcXFxcXCLnsr7noa7ljLnphY3vvJpcXFxcXFxcIiArIChtYXRjaE11c3QgPyBcXFxcXFxcIuaYr1xcXFxcXFwiIDogXFxcXFxcXCLlkKZcXFxcXFxcIik7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHRpcCxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgc2V0U2VhcmNoTW9kZShnZXRTZWFyY2hNb2RlKCkgPT0gMCA/IDEgOiAwKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL09LXFxcXFxcXCI7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmxldCBkMiA9IHNlYXJjaChNWV9QQVJBTVMucnVsZXMsIGt3LCBNWV9QQUdFKTtcXFxcbmZvciAobGV0IGl0IG9mIGQyKSB7XFxcXG4gICAgaWYgKCFtYXRjaE11c3QgfHwgc2VhcmNoQ29udGFpbnMoaXQudGl0bGUsIHMpKSB7XFxcXG4gICAgICAgIGl0LnRpdGxlID0gaXQudGl0bGUuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyBpdC50aXRsZSA6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCI8ZW0+fDwvZW0+XFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXCIgKyBzICsgXFxcXFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcXFxcXCIpXFxcXG4gICAgICAgIGQucHVzaChpdCk7XFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6L2s5o2iXFxcIixcXFwicGF0aFxcXCI6XFxcImNvbnZlcnRlclxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgY29udmVydCA9IChzdHIpID0+IHtcXFxcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL0AvZywgXFxcXFxcXCImJlxcXFxcXFwiKVxcXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCIgXFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCImJlxcXFxcXFwiKVxcXFxuICAgICAgICAucmVwbGFjZSgvdGV4dFxcXFxcXFxcLiguKj8pJiYvZywgXFxcXFxcXCIqOmNvbnRhaW5zKCQxKSwtMSYmXFxcXFxcXCIpXFxcXG4gICAgICAgIC5yZXBsYWNlKC8tY2xhc3NcXFxcXFxcXC4vZywgXFxcXFxcXCIuXFxcXFxcXCIpXFxcXG4gICAgICAgIC5yZXBsYWNlKC9jbGFzc1xcXFxcXFxcLi9nLCBcXFxcXFxcIi5cXFxcXFxcIilcXFxcbiAgICAgICAgLnJlcGxhY2UoL3RhZ1xcXFxcXFxcLi9nLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICAucmVwbGFjZSgvaWRcXFxcXFxcXC4vZywgXFxcXFxcXCIjXFxcXFxcXCIpXFxcXG4gICAgICAgIC5yZXBsYWNlKC8jIy9nLCBcXFxcXFxcIiFcXFxcXFxcIilcXFxcbiAgICAgICAgLnJlcGxhY2UoLyYmKFthLXpBLVpcXFxcXFxcXC5cXFxcXFxcXC1dKz8pIShbMC05XSkvZywgXFxcXFxcXCItLSQxLCQyJiYkMVxcXFxcXFwiKVxcXFxuICAgICAgICAucmVwbGFjZShcXFxcXFxcInRleHRcXFxcXFxcIiwgXFxcXFxcXCJUZXh0XFxcXFxcXCIpO1xcXFxufTtcXFxcbmxldCBnZXRBcnJheSA9IChodG1sLCBydWxlKSA9PiB7XFxcXG4gICAgbGV0IHIxID0gcnVsZS5zcGxpdChcXFxcXFxcIiFcXFxcXFxcIilbMF0uc3BsaXQoXFxcXFxcXCJ8fFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgYyA9IGNvbnZlcnQocjFbMF0pO1xcXFxuICAgIGlmIChjLmluY2x1ZGVzKFxcXFxcXFwiJiZsaSYmYVxcXFxcXFwiKSAmJiBjW2MubGVuZ3RoIC0gMV0gPT0gXFxcXFxcXCJhXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgYyA9IGMucmVwbGFjZShcXFxcXFxcIiYmbGkmJmFcXFxcXFxcIiwgXFxcXFxcXCImJmxpXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICBsb2coYyk7XFxcXG4gICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcXFxcXCJib2R5JiZcXFxcXFxcIiArIGMpO1xcXFxuICAgIGlmIChyMS5sZW5ndGggPiAxKSB7XFxcXG4gICAgICAgIGxldCByMiA9IHIxWzFdLnNwbGl0KFxcXFxcXFwiOlxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IHIzID0gW107XFxcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIHIyKSB7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpID0gcGFyc2VJbnQoaXQpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChpc05hTihpKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcjMucHVzaChpKTtcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGFycjIgPSBbXTtcXFxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGlmIChyMy5pbmRleE9mKGkpIDwgMCkge1xcXFxuICAgICAgICAgICAgICAgIGFycjIucHVzaChhcnJbaV0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBhcnIyO1xcXFxuICAgIH1cXFxcbiAgICBsb2coXFxcXFxcXCLojrflj5blpLHotKXvvIzlpLHotKXlrprkvY3vvJpcXFxcXFxcIiArIHIxKVxcXFxuICAgIHJldHVybiBhcnI7XFxcXG59O1xcXFxubGV0IGdldFRleHQgPSAoaHRtbCwgcnVsZSkgPT4ge1xcXFxuICAgIHZhciBydSA9IGNvbnZlcnQocnVsZSlcXFxcbiAgICB2YXIgciA9IHBkZmgoaHRtbCwgcnUpXFxcXG4gICAgaWYgKHIgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBsb2coXFxcXFxcXCLov5Tlm57kuLrnqbrvvIzlj6/og73mmK/lrprkvY3lpLHotKXvvJpcXFxcXFxcIiArIHJ1bGUpXFxcXG4gICAgfVxcXFxuICAgIHJldHVybiByXFxcXG59O1xcXFxubGV0IGdldFVybDAgPSAoaHRtbCwgcGFyZW50UnVsZSwgcnVsZSkgPT4ge1xcXFxuICAgIGlmIChwYXJlbnRSdWxlICE9IG51bGwpIHtcXFxcbiAgICAgICAgcGFyZW50UnVsZSA9IHBhcmVudFJ1bGUuc3BsaXQoXFxcXFxcXCIhXFxcXFxcXCIpWzBdO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgcCA9IHBhcmVudFJ1bGUgIT0gbnVsbCAmJiBwYXJlbnRSdWxlW3BhcmVudFJ1bGUubGVuZ3RoIC0gMV0gPT0gXFxcXFxcXCJhXFxcXFxcXCIgPyBcXFxcXFxcImEmJlxcXFxcXFwiIDogXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBsZXQgciA9IHBkKGh0bWwsIHAgKyBjb252ZXJ0KHJ1bGUuc3BsaXQoXFxcXFxcXCIjI1xcXFxcXFwiKVswXSkpO1xcXFxuICAgIGlmIChyID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgbG9nKFxcXFxcXFwi6L+U5Zue5Li656m677yM5Y+v6IO95piv5a6a5L2N5aSx6LSl77yaXFxcXFxcXCIgKyBydWxlKVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gclxcXFxufTtcXFxcbmxldCBwYXJzZVVybCA9ICh1cmwsIHBhZ2UpID0+IHtcXFxcbiAgICB1cmwgPSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwie3twYWdlfX1cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBwYWdlKTtcXFxcbiAgICBsZXQgcyA9IHVybC5zcGxpdChcXFxcXFxcIjwsXFxcXFxcXCIpO1xcXFxuICAgIGlmIChzLmxlbmd0aCA+IDEpIHtcXFxcbiAgICAgICAgaWYgKHBhZ2UgPiAxKSB7XFxcXG4gICAgICAgICAgICBsZXQgczIgPSBzWzFdLnNwbGl0KFxcXFxcXFwiPlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHVybCA9IHNbMF0gKyBzMlswXSArIChzMi5sZW5ndGggPiAxID8gczJbMV0gOiBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdXJsID0gc1swXTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gdXJsO1xcXFxufVxcXFxubGV0IGdldENoYXJzZXQgPSAoc2VhcmNoVXJsKSA9PiB7XFxcXG4gICAgaWYgKHNlYXJjaFVybCkge1xcXFxuICAgICAgICBpZiAoc2VhcmNoVXJsLmluY2x1ZGVzKCdcXFxcXFxcImdia1xcXFxcXFwiJykgfHwgc2VhcmNoVXJsLmluY2x1ZGVzKFxcXFxcXFwiJ2diaydcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImdia1xcXFxcXFwiXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVXJsLmluY2x1ZGVzKCdcXFxcXFxcImdiMjMxMlxcXFxcXFwiJykgfHwgc2VhcmNoVXJsLmluY2x1ZGVzKFxcXFxcXFwiJ2diMjMxMidcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImdiMjMxMlxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIG51bGxcXFxcbn1cXFxcbiQuZXhwb3J0cyA9IHtcXFxcbiAgICBnZXRBcnJheTogZ2V0QXJyYXksXFxcXG4gICAgY29udmVydDogY29udmVydCxcXFxcbiAgICBnZXRUZXh0OiBnZXRUZXh0LFxcXFxuICAgIGdldFVybDA6IGdldFVybDAsXFxcXG4gICAgcGFyc2VVcmw6IHBhcnNlVXJsLFxcXFxuICAgIGdldENoYXJzZXQ6IGdldENoYXJzZXRcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLogZrmkJxcXFwiLFxcXCJwYXRoXFxcIjpcXFwianVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxubGV0IHtcXFxcbiAgICBzZWFyY2gsXFxcXG4gICAgbGlzdFJ1bGVzXFxcXG59ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NzXFxcXFxcXCIpO1xcXFxubGV0IHtcXFxcbiAgICBhbGwsXFxcXG4gICAgdXNlLFxcXFxuICAgIGRhdGFcXFxcbn0gPSBsaXN0UnVsZXMoTVlfUEFHRSk7XFxcXG5kYXRhID0gZGF0YSB8fCBbXTtcXFxcbmxldCBzID0gZ2V0UGFyYW0oXFxcXFxcXCJrd1xcXFxcXFwiKTtcXFxcbnNldFBhZ2VUaXRsZShcXFxcXFxcIuaQnOe0olxcXFxcXFwiICsgcyk7XFxcXG5pZiAodHlwZW9mKGdldFNlYXJjaE1vZGUpID09IFxcXFxcXFwidW5kZWZpbmVkXFxcXFxcXCIpIHtcXFxcbiAgICBjb25maXJtKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5rip6aao5o+Q56S6XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbnRlbnQ6IFxcXFxcXFwi5L2g55qE6L2v5Lu254mI5pys5aSq5L2O77yM5pu05paw5Yiw5pyA5paw54mI5omN6IO95L2/55So5pys6KeE5YiZXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxufVxcXFxubGV0IG1hdGNoTXVzdCA9IGdldFNlYXJjaE1vZGUoKSA9PSAxO1xcXFxubGV0IHRpcCA9IFxcXFxcXFwi5pCc57Si5rqQ77yaXFxcXFxcXCIgKyB1c2UgKyBcXFxcXFxcIi9cXFxcXFxcIiArIGFsbCArIFxcXFxcXFwiICDnsr7noa7ljLnphY3vvJpcXFxcXFxcIiArIChtYXRjaE11c3QgPyBcXFxcXFxcIuaYr1xcXFxcXFwiIDogXFxcXFxcXCLlkKZcXFxcXFxcIik7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHRpcCxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgc2V0U2VhcmNoTW9kZShnZXRTZWFyY2hNb2RlKCkgPT0gMCA/IDEgOiAwKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL09LXFxcXFxcXCI7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInl1ZWR1LXMtaFxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0gZWxzZSBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgdXBkYXRlSXRlbShcXFxcXFxcInl1ZWR1LXMtaFxcXFxcXFwiLCB7XFxcXG4gICAgICAgIHRpdGxlOiB0aXBcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmxldCBwID0gTVlfUEFHRTtcXFxcbmxldCBwYWdlaWQgPSBcXFxcXFxcInl1ZWR1LXBhZ2VcXFxcXFxcIiArIE1ZX1BBR0U7XFxcXG5pZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXFxcXFwiICsgZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXFxuaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgIC8v5aSa57q/56iL5Yqg6L29XFxcXG4gICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBzZWFyY2gocnVsZSwgcywgMSk7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwicnVsZUBcXFxcXFxcIiArIGl0Lm5hbWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxcXG4gICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxcXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5qID0gcGFyYW0uaiArIDE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hNdXN0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hDb250YWlucyhpdC50aXRsZSwgcykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gaXQuZXh0cmEgfHwge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5pZCA9IFxcXFxcXFwiX19hcHBcXFxcXFxcIiArIE1ZX1BBR0UgKyBcXFxcXFxcIkBcXFxcXFxcIiArIHBhcmFtLmo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5ib29rTmFtZSA9IGl0LnRpdGxlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5jb3ZlciA9IGl0LnBpY191cmwgfHwgaXQuaW1nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiKSA/IGl0LnRpdGxlIDogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIGl0LnRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIjxlbT58PC9lbT5cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcIiArIHMgKyBcXFxcXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsIHx8IGl0LmltZyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCB8fCBpdC5pbWcgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXFxcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcXFxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcXFxcXCIvXFxcXFxcXCIgKyBwYXJhbS5hbGwsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHBhcmFtOiB7XFxcXG4gICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgaTogMCxcXFxcbiAgICAgICAgICAgIGo6IC0xXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLovoXliqlcXFwiLFxcXCJwYXRoXFxcIjpcXFwic3NcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIHtcXFxcbiAgICBjb252ZXJ0LFxcXFxuICAgIHBhcnNlVXJsLFxcXFxuICAgIGdldENoYXJzZXRcXFxcbn0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29udmVydGVyXFxcXFxcXCIpO1xcXFxubGV0IHNlYXJjaCA9IChydWxlLCBrdywgcGFnZSkgPT4ge1xcXFxuICAgIGxldCBkID0gW107XFxcXG4gICAgbGV0IG0gPSBydWxlLnJ1bGVTZWFyY2hcXFxcbiAgICAvLyDpmIXor7s9PuinhueVjFxcXFxuICAgIGxldCB1ID0gcnVsZS5zZWFyY2hVcmwuc3RhcnRzV2l0aChcXFxcXFxcImh0dHBcXFxcXFxcIikgPyBydWxlLnNlYXJjaFVybCA6IHJ1bGUuYm9va1NvdXJjZVVybCArIHJ1bGUuc2VhcmNoVXJsO1xcXFxuICAgIC8vbG9nKG0pO1xcXFxuICAgIGxldCB1cmwxID0gcGFyc2VVcmwodSwgcGFnZSkucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwie3trZXl9fVxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIGt3KTtcXFxcbiAgICBsZXQgdXJsMiA9IHVybDEuc3BsaXQoXFxcXFxcXCIse1xcXFxcXFwiKTtcXFxcbiAgICBsZXQgdXJsID0gdXJsMlswXTtcXFxcbiAgICBsZXQgaGVhZGVycyA9IHt9O1xcXFxuICAgIGxldCBtZXRob2QgPSBcXFxcXFxcImdldFxcXFxcXFwiO1xcXFxuICAgIGxldCBib2R5ID0gbnVsbDtcXFxcbiAgICBsZXQgYyA9IGdldENoYXJzZXQodXJsMSk7XFxcXG4gICAgaWYgKGMpIHtcXFxcbiAgICAgICAgaGVhZGVycy5jaGFyc2V0ID0gYztcXFxcbiAgICAgICAgaGVhZGVyc1tcXFxcXFxcIkNvbnRlbnQtVHlwZVxcXFxcXFwiXSA9IFxcXFxcXFwidGV4dC9odG1sOyBjaGFyc2V0PVxcXFxcXFwiICsgYztcXFxcbiAgICB9XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgaWYgKHVybDIubGVuZ3RoID4gMSAmJiB1cmwxLnN1YnN0cmluZyh1cmwxLmxlbmd0aCAtIDEsIHVybDEubGVuZ3RoKSA9PSBcXFxcXFxcIn1cXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgbGV0IGV4dCA9IFxcXFxcXFwie1xcXFxcXFwiICsgdXJsMS5zdWJzdHJpbmcodXJsMS5pbmRleE9mKFxcXFxcXFwiLHtcXFxcXFxcIikgKyAyLCB1cmwxLmxlbmd0aCk7XFxcXG4gICAgICAgICAgICAvL2xvZyhleHQpO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBleHQgPSBKU09OLnBhcnNlKGV4dCk7XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChcXFxcXFxcImV4dD1cXFxcXFxcIiArIGV4dCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoZXh0Lm1ldGhvZCAmJiBleHQubWV0aG9kICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBleHQubWV0aG9kO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGV4dC5ib2R5ICYmIGV4dC5ib2R5ICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBib2R5ID0gZXh0LmJvZHk7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyc1tcXFxcXFxcIkNvbnRlbnQtVHlwZVxcXFxcXFwiXSA9IFxcXFxcXFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXFxcXFxcXCIgKyAoaGVhZGVycy5jaGFyc2V0ID8gXFxcXFxcXCI7Y2hhcnNldD1cXFxcXFxcIiArIGhlYWRlcnMuY2hhcnNldCA6IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBpZiAodXJsMS5pbmNsdWRlcygnXFxcXFxcXCJQT1NUXFxcXFxcXCInKSB8fCB1cmwxLmluY2x1ZGVzKCdcXFxcXFxcInBvc3RcXFxcXFxcIicpKSB7XFxcXG4gICAgICAgICAgICBtZXRob2QgPSBcXFxcXFxcInBvc3RcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBpZiAobWV0aG9kID09IFxcXFxcXFwicG9zdFxcXFxcXFwiIHx8IG1ldGhvZCA9PSBcXFxcXFxcIlBPU1RcXFxcXFxcIikge1xcXFxuICAgICAgICBsZXQgY3QgPSBoZWFkZXJzW1xcXFxcXFwiQ29udGVudC1UeXBlXFxcXFxcXCJdO1xcXFxuICAgICAgICBoZWFkZXJzW1xcXFxcXFwiQ29udGVudC1UeXBlXFxcXFxcXCJdID0gY3QgPyBjdC5yZXBsYWNlKFxcXFxcXFwidGV4dC9odG1sXFxcXFxcXCIsIFxcXFxcXFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXFxcXFxcXCIpIDogXFxcXFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFxcXFxcIjtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBsZXQgbGlzdHJ1bGUgPSBcXFxcXFxcImJvZHkmJlxcXFxcXFwiICsgY29udmVydChtLmJvb2tMaXN0KS5zcGxpdChcXFxcXFxcInx8XFxcXFxcXCIpWzBdXFxcXG4gICAgbGV0IGF1dGhvciA9IG51bGw7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgYXV0aG9yID0gY29udmVydChtLmF1dGhvcik7XFxcXG4gICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICBsZXQgY292ZXIgPSBudWxsO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGNvdmVyID0gY29udmVydChtLmNvdmVyVXJsKTtcXFxcbiAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIGxldCBuYW1lID0gbnVsbDtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBuYW1lID0gY29udmVydChtLm5hbWUpO1xcXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgbGV0IGJvb2t1cmwgPSBudWxsO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGJvb2t1cmwgPSBjb252ZXJ0KG0uYm9va1VybCk7XFxcXG4gICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICBsZXQgaW50cm8gPSBudWxsO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGludHJvID0gY29udmVydChtLmludHJvKTtcXFxcbiAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIC8vc2V0UGFnZVRpdGxlKFxcXFxcXFwi5pCc57SiXFxcXFxcXCIgKyBnZXRQYXJhbShcXFxcXFxcImt3XFxcXFxcXCIpICsgXFxcXFxcXCIgXFxcXFxcXCIgKyBNWV9QQVJBTVMuYm9va1NvdXJjZU5hbWUpO1xcXFxuICAgIC8vTVlfVVJMID0gdXJsO1xcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KHVybCwge1xcXFxuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcXFxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXFxcbiAgICAgICAgYm9keTogYm9keVxcXFxuICAgIH0pO1xcXFxuICAgIGxldCBwZGZoMSA9IChhLCBiKSA9PiB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIHJldHVybiBwZGZoKGEsIGIpO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBsZXQgcGQxID0gKGEsIGIsIGMpID0+IHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGlmIChiID09IG51bGwpIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHBkKGEsIGIsIGMpO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBsaXN0cnVsZSA9IGxpc3RydWxlLnJlcGxhY2UoXFxcXFxcXCImJnRib2R5LS10ciwwJiZ0clxcXFxcXFwiLCBcXFxcXFxcIiYmdGFibGUgdGJvZHkgdHI6Z3QoMClcXFxcXFxcIik7XFxcXG4gICAgLy9sb2cobGlzdHJ1bGUpO1xcXFxuICAgIGxldCBsaXN0ID0gcGRmYShyZXMsIGxpc3RydWxlKTtcXFxcbiAgICAvL2xvZyhsaXN0KTtcXFxcbiAgICAvL2xvZyhuYW1lKTtcXFxcbiAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgIGxldCBuZXh0ID0gcnVsZS5ydWxlVG9jLm5leHRUb2NVcmw7XFxcXG4gICAgICAgIGxldCBuZXh0dG9jID0gbmV4dCAmJiBuZXh0ICE9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBhYyA9IG5leHR0b2MgPyBcXFxcXFxcIlxcXFxcXFwiOiBcXFxcXFxcIiNhdXRvQ2FjaGUjXFxcXFxcXCI7XFxcXG4gICAgICAgIC8vbGV0IGFjID0gXFxcXFxcXCIjYXV0b0NhY2hlI1xcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgdTEgPSBwZDEoaXRlbSwgYm9va3VybCwgdXJsKSArIGFjICsgXFxcXFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChjKSB7XFxcXG4gICAgICAgICAgICB1MSA9IHUxICsgXFxcXFxcXCI7Z2V0O1xcXFxcXFwiICsgY1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaDEoaXRlbSwgbmFtZSksXFxcXG4gICAgICAgICAgICBpbWc6IHBkMShpdGVtLCBjb3ZlciwgdXJsKSxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWVudVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogcnVsZS5ib29rU291cmNlTmFtZSArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyBwZGZoMShpdGVtLCBhdXRob3IpICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIHBkZmgxKGl0ZW0sIGludHJvKSxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJUb2NcXFxcXFxcIjogcnVsZS5ydWxlVG9jLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiY29udGVudFxcXFxcXFwiOiBydWxlLnJ1bGVDb250ZW50LFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiYm9va05hbWVcXFxcXFxcIjogcGFyc2VEb21Gb3JIdG1sKGl0ZW0sIG5hbWUpLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiY292ZXJcXFxcXFxcIjogcGFyc2VEb20oaXRlbSwgY292ZXIsIHVybCksXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBuZXh0dG9jID8gXFxcXFxcXCJoaWtlcjovL2VtcHR5I1xcXFxcXFwiICsgdTEgOiB1MSxcXFxcbiAgICAgICAgICAgICAgICB1MTogbmV4dHRvYyA/IHUxIDogbnVsbCxcXFxcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgIGNoYXJzZXQ6IGNcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KTtcXFxcbiAgICByZXR1cm4gZDtcXFxcbn1cXFxcbiQuZXhwb3J0cyA9IHtcXFxcbiAgICBjb252ZXJ0OiBjb252ZXJ0LFxcXFxuICAgIHNlYXJjaDogc2VhcmNoLFxcXFxuICAgIGxpc3RSdWxlczogKHBhZ2UsIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8v5bm25Y+R5pWw6YePXFxcXG4gICAgICAgICAgICBsZXQgc2l6ZSA9IDE2O1xcXFxuICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICBsb2FkLFxcXFxuICAgICAgICAgICAgICAgIGxvYWRSdWxlcyxcXFxcbiAgICAgICAgICAgICAgICBnZXRTZWxlY3RcXFxcbiAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YXRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGxvYWQoKTtcXFxcbiAgICAgICAgICAgIGxldCBzZWxlY3QgPSBnZXRTZWxlY3QoZGF0YSk7XFxcXG4gICAgICAgICAgICBsZXQgcnVsZXMgPSBkYXRhLmxlbmd0aCA+IDAgPyBsb2FkUnVsZXMoc2VsZWN0Lm5hbWUpIDogW107XFxcXG4gICAgICAgICAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZXMubWFwKGl0ID0+IGl0Lm5hbWUpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXFxcbiAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPCBzdGFydCArIDEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgbGVuID0gc2l6ZTtcXFxcbiAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcXFxuICAgICAgICAgICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgYWxsID0gcnVsZXMubGVuZ3RoO1xcXFxuICAgICAgICAgICAgbGV0IHVzZSA9IChwYWdlIC0gMSkgKiBzaXplICsgbGVuO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBhbGw6IGFsbCxcXFxcbiAgICAgICAgICAgICAgICB1c2U6IHVzZSxcXFxcbiAgICAgICAgICAgICAgICBkYXRhOiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pXFxcXG4gICAgICAgICAgICB9O1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgIGFsbDogMCxcXFxcbiAgICAgICAgICAgICAgICB1c2U6IDAsXFxcXG4gICAgICAgICAgICAgICAgZGF0YTogW11cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmlbDmja5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGF0YXRcXFwiLFxcXCJydWxlXFxcIjpcXFwibGV0IGxvYWQgPSBmdW5jdGlvbigpIHtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcXFxcXCIpKS51cmxzO1xcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgcmV0dXJuIFtdO1xcXFxuICAgIH1cXFxcbn1cXFxcbmxldCBsb2FkUnVsZXMgPSBmdW5jdGlvbihuYW1lKSB7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFxcXFxcIiArIG1kNShuYW1lKSArIFxcXFxcXFwiLmpzb25cXFxcXFxcIikpO1xcXFxuICAgICAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXQgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IHMgPSBKU09OLnN0cmluZ2lmeShpdClcXFxcbiAgICAgICAgICAgIGlmIChzLmluY2x1ZGVzKFxcXFxcXFwiPGpzPlxcXFxcXFwiKSB8fCBzLmluY2x1ZGVzKFxcXFxcXFwiQGpzOlxcXFxcXFwiKSB8fCBzLmluY2x1ZGVzKFxcXFxcXFwiJC5cXFxcXFxcIikgfHwgcy5pbmNsdWRlcyhcXFxcXFxcIvCflJ5cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICByZXR1cm4gW107XFxcXG4gICAgfVxcXFxufVxcXFxubGV0IHJlbW92ZSA9IGZ1bmN0aW9uKHVybCkge1xcXFxuICAgIGxldCBkYXRhID0gbG9hZCgpO1xcXFxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdCA9PiBpdC51cmwgIT0gdXJsKTtcXFxcbiAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXFxcXFwiLCBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgIHVybHM6IGRhdGFcXFxcbiAgICB9KSlcXFxcbn1cXFxcbmxldCByZW5hbWUgPSBmdW5jdGlvbih1cmwsIG5hbWUpIHtcXFxcbiAgICBsZXQgYXJyID0gbG9hZCgpO1xcXFxuICAgIGZvciAobGV0IGkgaW4gYXJyKSB7XFxcXG4gICAgICAgIGlmIChhcnJbaV0udXJsID09IHVybCkge1xcXFxuICAgICAgICAgICAgYXJyW2ldLm5hbWUgPSBuYW1lO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcXFxcXCIsIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgdXJsczogYXJyXFxcXG4gICAgfSkpXFxcXG59XFxcXG5sZXQgYWRkID0gZnVuY3Rpb24obmFtZSwgdXJsKSB7XFxcXG4gICAgbGV0IGRhdGEgPSBsb2FkKCk7XFxcXG4gICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ID0+IGl0LnVybCAhPSB1cmwpO1xcXFxuICAgIGRhdGEucHVzaCh7XFxcXG4gICAgICAgIG5hbWU6IG5hbWUsXFxcXG4gICAgICAgIHVybDogdXJsXFxcXG4gICAgfSk7XFxcXG4gICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFxcXFxcIiwgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICB1cmxzOiBkYXRhXFxcXG4gICAgfSkpXFxcXG59XFxcXG5sZXQgdXBkYXRlID0gZnVuY3Rpb24obmFtZSwgdXJsKSB7XFxcXG4gICAgbGV0IHQgPSBmZXRjaCh1cmwpXFxcXG4gICAgSlNPTi5wYXJzZSh0KVxcXFxuICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcXFxcXCIgKyBtZDUobmFtZSkgKyBcXFxcXFxcIi5qc29uXFxcXFxcXCIsIHQpXFxcXG59XFxcXG5sZXQgc2hhcmUgPSBmdW5jdGlvbihuYW1lLCB1cmwpIHtcXFxcbiAgICByZXR1cm4gXFxcXFxcXCJjb3B5Oi8v5oKm6K+76K6i6ZiF5pWw5o2u5YiG5Lqr77yM5aSN5Yi25pW05p2h5Y+j5Luk5omT5byA6L2v5Lu25Y2z5Y+v5a+85YWlXFxcXFxcXFxuXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCLvvJpcXFxcXFxcIiArIHVybCArIFxcXFxcXFwiQGltcG9ydD1qczokLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhdD9ydWxlPVxcXFxcXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXFxcXFwiJykuY2EoKVxcXFxcXFwiXFxcXG59XFxcXG5sZXQgY2xvdWRBZGQgPSBmdW5jdGlvbigpIHtcXFxcbiAgICBsZXQgcyA9IGlucHV0LnNwbGl0KFxcXFxcXFwi77yaXFxcXFxcXCIpO1xcXFxuICAgIGlmIChzLmxlbmd0aCA+IDEpIHtcXFxcbiAgICAgICAgYWRkKHNbMF0sIHNbMV0pO1xcXFxuICAgICAgICB1cGRhdGUoc1swXSwgc1sxXSk7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5a+85YWl5oKm6K+76K6i6ZiF5rqQ4oCcXFxcXFxcXCIgKyBzWzBdICsgXFxcXFxcXCLigJ1cXFxcXFxcIlxcXFxufVxcXFxubGV0IGdldFNlbGVjdCA9IGZ1bmN0aW9uKGRhdGEpIHtcXFxcbiAgICBpZiAoZGF0YSA9PSBudWxsKSB7XFxcXG4gICAgICAgIGRhdGEgPSBsb2FkKCk7XFxcXG4gICAgfVxcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgICAgIHJldHVybiB7fTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHRhYiA9IGdldEl0ZW0oXFxcXFxcXCJ0YWJcXFxcXFxcIiwgZGF0YVswXS51cmwpO1xcXFxuICAgIGxldCBzZWxlY3QgPSBkYXRhLmZpbHRlcihpdCA9PiBpdC51cmwgPT0gdGFiKTtcXFxcbiAgICBpZiAoc2VsZWN0Lmxlbmd0aCA8PSAwKSB7XFxcXG4gICAgICAgIHJldHVybiBkYXRhWzBdO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBzZWxlY3RbMF07XFxcXG4gICAgfVxcXFxufVxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGFkZDogYWRkLFxcXFxuICAgIHVwZGF0ZTogdXBkYXRlLFxcXFxuICAgIHJlbW92ZTogcmVtb3ZlLFxcXFxuICAgIHJlbmFtZTogcmVuYW1lLFxcXFxuICAgIGxvYWQ6IGxvYWQsXFxcXG4gICAgbG9hZFJ1bGVzOiBsb2FkUnVsZXMsXFxcXG4gICAgZ2V0U2VsZWN0OiBnZXRTZWxlY3QsXFxcXG4gICAgc2hhcmU6IHNoYXJlLFxcXFxuICAgIGNhOiBjbG91ZEFkZFxcXFxufVxcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInRpdGxlIjoi5L2g6L+Y5rKh5pyJ5Lmm5ZOm772e772e54K55oiR6L+b5YWl6K6+572uIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement