Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥1DM++「原IDM+」 v15.9 修改最终版@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+ino+aekFwiLFwicGF0aFwiOlwicFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgdXJsOiB1cmwsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiZmxvYXQmJjEwMCVcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBibG9ja1J1bGVzOiBbXFxcIi5naWZcXFwiLCBcXFwiL2FkL1xcXCIsIFxcXCIvYWRzL1xcXCIsIFxcXCJnb29nbGVcXFwiLCBcXFwiL3NoL3RvL1xcXCIsIFxcXCIuR0lGXFxcIl1cXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5pCc57Si5rWL6K+VXCIsXCJwYXRoXCI6XCJzXCIsXCJydWxlXCI6XCJqczpcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmxvZyh1cmwpO1xcbmxldCBrZXkgPSBnZXRQYXJhbShcXFwia2V5XFxcIik7XFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFwiKTtcXG5zZXRSZXN1bHQoc3AodXJsLCBrZXksIFxcXCLmkJzntKLmtYvor5VcXFwiKSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLogZrlkIjmkJzntKJcIixcInBhdGhcIjpcInByb1wiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb3VcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwic291XFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic291XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb1xcXCIpO1xcbiAgICB9KSk7XFxufVxcblxcbmxldCBzID0gZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKTtcXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IHtcXG4gICAgICAgIGxvYWRcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXBcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG4gICAgbGV0IGRhdGEgPSBsb2FkKHAsIHIgIT0gXFxcIlxcXCIgPyByIDogbnVsbCk7XFxuXFxuICAgIGxldCBwYWdlaWQgPSBNWV9SVUxFLnRpdGxlICsgXFxcIi1wYWdlXFxcIiArIHA7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgcCArIFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXCIgKyBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChkKTtcXG4gICAgbG9nKGRhdGEubGVuZ3RoKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcbiAgICAgICAgbGV0IHJlYWxQYWdlID0gXFxcIlxcXCIgPT0gciA/IDEgOiBwO1xcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBwYXJhbTogaXQsXFxuICAgICAgICAgICAgICAgIGlkOiBcXFwicnVsZUBcXFwiICsgaXQubmFtZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIC8vbG9nKFxcXCJsaXN0ZW5lcjogXFxcIiArIChyZXN1bHQgfHwgW10pLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5qID0gcGFyYW0uaiArIDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcChpdC50aXRsZSwgcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogaXQuZXh0cmFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcblxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcIi9cXFwiICsgcGFyYW0uYWxsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgaTogMCxcXG4gICAgICAgICAgICAgICAgajogLTFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxufSBlbHNlIHtcXG4gICAgbGV0IHtcXG4gICAgICAgIGxvYWRcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgbGV0IGRhdGEgPSBsb2FkKC0xLCBudWxsKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbWFuYWdlXFxcIikoZCwgZGF0YS5tYXAoaXQgPT4gaXQubmFtZSkpO1xcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgZGF0YSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJzZWxlY3Q6Ly9cXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLor7fpgInmi6nmk43kvZxcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogW1xcXCLorr/pl67pppbpobVcXFwiLCBcXFwi5pCc57Si5q2k56uZXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLorr/pl67pppbpobVcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1VSTCA9IHVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcD91PVxcXCIgKyBiYXNlNjRFbmNvZGUoZ2V0SG9tZSh1cmwpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZXNcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgaXQudXJsKVxcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi56aB55SoXFxcIiArIGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcXFwi56Gu6K6k5Yig6Zmk56aB55SoXFxcIiArIG5hbWUgKyBcXFwi5ZCX77yfXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG5hbWUsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGE/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCBNWV9SVUxFLnRpdGxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0Lm5hbWUpXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLorr/pl67pppbpobVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiBcXFwiJ2hpa2VyOi8vcGFnZS9wP3U9XFxcIiArIGJhc2U2NEVuY29kZShnZXRIb21lKGl0LnVybCkpICtcXFwiJ1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaQnOe0ouatpOa6kFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6IFxcXCInaGlrZXI6Ly9wYWdlL3NpbmdsZXMnXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaVsOaNrlwiLFwicGF0aFwiOlwiZGF0YVwiLFwicnVsZVwiOlwiLy/lubblj5Hop4TliJnmlbBcXG5sZXQgc2l6ZTAgPSAxMDtcXG5sZXQgcnVsZXNUZXh0MCA9IGDwn5Cv54Gr54Gr6LWE5rqQ8J+Qr0BodHRwOi8vd3d3LmhuZmNqci5jb20vc28vbS8/az0qKlxcbvCfkK/kuZDkuZDotYTmupDwn5CvQGh0dHA6Ly93d3cuNmxsLmNvbS9zby9tLz9rPSoqXFxu8J+Qr+ebkuWtkEBodHRwczovL3d3dy5oZXppcGllLmNvbS8/cz0qKlxcbvCfkK/mlrDliIbkuqvogIXwn5CvQGh0dHBzOi8vd3d3LmZlbnhtLmNvbS9zZWFyY2gucGhwP3E9KipcXG7wn5Cv6JOd6bKo6LWE5rqQ8J+Qr0BodHRwczovL3d3dy5sYW4tc2hhLmNvbS8/cz0qKlxcbvCfkK/phbflupNAaHR0cHM6Ly93d3cuenhraS5jbi8/a2V5d29yZD0qKlxcbvCfkK9BcHDllrXmkJzwn5CvQGh0dHBzOi8vd3d3LmFwcG1pdS5jb20vP3M9KiomdHlwZT1wb3N0XFxu8J+Qr+WlpeWFlOWFlOaQnPCfkK9AaHR0cDovL3d3dy5hb3R1dHUuY24vc2VhcmNoLz9rZXl3b3JkPSoqXFxu8J+Qr+iTneeCuUBodHRwczovL3d3dy5sYW5kaWFubmV3cy5jb20vc2VhcmNoLyoqP3Bvc3RfdHlwZT1wb3N0XFxu8J+Qr1HkupHotYTmupDwn5CvQGh0dHBzOi8vd3d3LnF5dW4udmlwLz9rZXl3b3JkPSoqXFxu8J+Qr1FR6LWE5rqQ8J+Qr0BodHRwczovL3d3dy5xcXp5Zy5jbi9zZWFyY2g/a2V5d29yZD0qKlxcbvCfkK/lpJzmsrPmkJxAaHR0cDovL3d3dy55ZWhlcy5jb20vP2NhdD0mcz0qKlxcbvCfkK81aWxy6LWE5rqQ8J+Qr0BodHRwczovL3d3dy41aWxyLmNvbS8/cz0qKiZjYXQ9MFxcbvCfkK/puKHnm5LotYTmupDwn5CvQGh0dHBzOi8vY2FvbmlhbmcubmV0L3NlYXJjaC8qKi5odG1sXFxu8J+Qr+i3r+e+vUBodHRwczovL3d3dy5qaXNodXNvbmdzaHUuY29tLz9zPSoqJnBvc3RfdHlwZT1wb3N0XFxu8J+Qr+S4jeatu+m4n+aQnPCfkK9AaHR0cHM6Ly9pdWkuc3Uvc2VhcmNoLyoqL1xcbvCfkK/mupDnoIHotYTmupDwn5CvQGh0dHBzOi8vd3d3LnNjb2RlMS5jb20vc2VhcmNoLz9rZXl3b3JkPSoqXFxu8J+Qr+WknOmbqEBodHRwczovL3d3dy55ZXl1bGluZ2ZlbmcuY29tLz9zPSoqXFxu8J+Qr+eOieexs+eykuaQnPCfkK9AaHR0cHM6Ly95aW1pbGkubmV0Lz9zPSoqXFxu8J+Qr+acqOmjjui9r+S7tvCfkK9AaHR0cHM6Ly93d3cubWZyanouY29tLz9zPSoqXFxu8J+QrzcyNzNAaHR0cDovL3MuNzI3My5jb20vbS8/az0qKlxcbvCfkK/mtbfmo6DotYTmupDwn5CvQGh0dHBzOi8vd3d3LmhhaXRhbmd3LmNjLz9zPSoqXFxu8J+Qr+Wwj+iPjOi1hOa6kPCfkK9AaHR0cHM6Ly93d3cud3d0dGwuY29tLz9zPSoqXFxu8J+Qr+WfuuWcsEBodHRwOi8vcmpqZDYuY29tL3NlYXJjaD9tb2xkcz1hcnRpY2xlJndvcmQ9KipcXG7wn5Cv5YmN5pa56LWE5rqQ8J+Qr0BodHRwczovL3FpYW5mYW5nenkuY29tLz9zPSoqXFxu8J+Qr+S5kOS6q+i1hOa6kPCfkK9AaHR0cHM6Ly93d3cubHhhcGsuY29tLz9zPSoqJnR5cGU9cG9zdFxcbvCfkK/mjbflvoRAaHR0cHM6Ly9zaGFyZWN1dHMuY24vc2VhcmNoP3E9KipcXG7wn5CvcG9qaWXotYTmupDwn5CvQGh0dHBzOi8vd3d3LnBvamllcy5jbi8/cz0qKiZ0eXBlPXBvc3RcXG7wn5CvTWVtb3J58J+Qr0BodHRwczovL2NueGlhb2JhaS5jb20vc2VhcmNoP2tleXdvcmQ9KipcXG7wn5Cv5bCP5Y+vQGh0dHBzOi8vd3d3LnFrZWtlLmNvbS8/cz0qKlxcbvCfkK/niLHlhY3otLnlkKfwn5CvQGh0dHBzOi8vd3d3LmltZjguY24vc2VhcmNoLyoqLmh0bWxcXG7wn5Cv5rex6JOd5LiL6L298J+Qr0BodHRwczovL2Rvd25sb2FkLnNlbmxzLmNuL3NlYXJjaC8/a2V5d29yZD0qKlxcbvCfkK/nuqLlsJhAaHR0cHM6Ly93d3cuaGN3My5jbi9zZWFyY2gvKiouaHRtbFxcbvCfkK82NzjovoXliqnwn5CvQGh0dHBzOi8vd3d3LjY3OGN2LmNvbS9pbmRleC5waHA/a2V5d29yZD0qKlxcbvCfkK/mnInotqPmupDnoIHwn5CvQGh0dHBzOi8vd3d3LnlxeW0ubmV0Lz9zPSoqXFxu8J+Qr+ezu+e7n0BodHRwczovL3d3dy54aXRtaS5jb20vP3M9KipcXG7wn5Cv5YiG5Lqr6LWE5rqQ8J+Qr0BodHRwczovL3d3dy55cHppeXVhbnNoYXJlLmNsdWIvc2VhcmNoLnBocD9xPSoqXFxu8J+Qr+a0vuajruebkuWtkPCfkK9AaHR0cHM6Ly93d3cucHloZXppLmNvbS8/cz0qKlxcbvCfkK/liJ3op4FAaHR0cHM6Ly93d3cueWJjajA5MDcuY29tLz9zPSoqJmNhdD1cXG7wn5Cv5Lqk5rWB5bKb5pCc8J+Qr0BodHRwczovL3d3dy5qaWFvbGl1ZGFvLmNvbS8/cz0qKlxcbvCfkK/kuIvovb3otYTmupDwn5CvQGh0dHBzOi8vbS54emppLmNvbS9zZWFyY2gvYWxsLTAtMS0qKi5odG1sXFxu8J+Qr+W6lOeUqEBodHRwczovL3d3dy5pYXBwcy5tZS9hcmNoaXZlcy9jYXRlZ29yeS90dlxcbvCfkK/phbc46L6F5Yqp8J+Qr0BodHRwczovL3d3dy4xOWZ6dy5jb20vaW5kZXgucGhwP2tleXdvcmQ9KipcXG7wn5Cv5p6B5a6i5LiL6L298J+Qr0BodHRwczovL3d3dy5nZWVrZGxvYWQuY29tLz9zPSoqXFxu8J+Qr+maj+mjjkBodHRwczovL3d3dy41Mm5mdy5jbi8/cz0qKiZ0eXBlPXBvc3RcXG7wn5Cv5Yeh5bCY6LWE5rqQ8J+Qr0BodHRwczovL3d3dy41MGZjdy5jb20vaW5kZXgucGhwP2tleXdvcmQ9KiomdHlwZWlkPTBcXG7wn5Cv5b+D5rW3ReermfCfkK9AaHR0cHM6Ly9hcHBob3QuY2MvP3M9KipcXG7wn5Cv5p2C6LSn6ZO6QGh0dHBzOi8vdG1pb2UuY29tLz9zPSoqXFxu8J+Qr+Wkp+ecvOS7lOaQnPCfkK9AaHR0cDovL3d3dy5kYXlhbnphaS5tZS8/cz0qKlxcbvCfkK/po5jpgaXotYTmupDwn5CvQGh0dHBzOi8vd3d3Lm1weWl0LmNvbS8/cz0qKlxcbvCfkK/ova7lm55AaHR0cHM6Ly93d3cuY2hlbmJvLmluZm8vP3M9KipcXG7wn5Cv5p6r6Z+z5bqU55So8J+Qr0BodHRwczovL3d3dy5meTZiLmNvbS8/cz0qKlxcbvCfkK/lk4fllpToj4zmkJzwn5CvQGh0dHBzOi8vd3d3Lndhb2Rvd24uY29tL3NlYXJjaC8qKlxcbvCfkK/kuZ3ova9AaHR0cHM6Ly93d3cuam9ydWFuLmNvbS8/cz0qKlxcbvCfkK9pM+ekvuWMuvCfkK9AaHR0cHM6Ly93d3cuaTN6aC5jb20vP3M9KipcXG7wn5Cv6LWE5rqQ5ZCm5pCc8J+Qr0BodHRwczovL3d3dy56eWZvdS5jb20vP3M9KipcXG7wn5Cv6KW/6KW/5pCcQGh0dHBzOi8vc28uY3IxNzMuY29tL3NvdXN1by9tLz9rPSoqXFxu8J+Qr+aXoOeXleWTpeaQnPCfkK9AaHR0cHM6Ly93d3cud2hnNi5jb20vNDY1OC5odG1sXFxu8J+Qr+eIseeVmei1hOa6kPCfkK9AaHR0cDovL3p5dy5pNi5ncy9pbmRleC5waHA/a2V5d29yZD0qKlxcbvCfkK/lsI/kvJdAaHR0cHM6Ly93d3cuYXBwaW5uLmNvbS8/cz0qKlxcbvCfkK/pu5HmtbfmtIvmkJzwn5CvQGh0dHBzOi8vYmxvZy51cHg4LmNvbS9zZWFyY2gvKiovXFxu8J+Qr+WFheeUteermeaQnPCfkK9AaHR0cHM6Ly93d3cuY29jb2tsLmNuLz9zPSoqXFxu8J+Qr+iJvuiWh0BodHRwOi8vbS5haXdlaWJrLmNvbS9zZWFyY2gvKiouaHRtbFxcbvCfkK835LiL6L295pCc8J+Qr0BodHRwczovL3d3dy43eGlhemFpLmNvbS8/cz0qKlxcbvCfkK/nsr7lk4HotYTmupDwn5CvQGh0dHA6Ly93d3cuajlwLmNvbS9zby9tLz9rPSoqXFxu8J+Qr+iTneihq+aQnEBodHRwczovL3d3dy5ibHVlbHNxa2ouY29tLz9zPSoqXFxu8J+Qr0Hlp5DliIbkuqvwn5CvQGh0dHBzOi8vd3d3LmFoaGhoZnMuY29tLz9jYXQ9JnM9KipcXG7wn5Cv5ZC+54ix6L2v5Lu28J+Qr0BodHRwczovL3d3dy52aXB0b29scy52aXAvP3M9KiomdHlwZT1wb3N0XFxu8J+Qr+e+veWFlOe9kUBodHRwczovL20ueXV0dS5jbi9zZWFyY2gvc29mdC5odG1sP3Q9MzImaz0qKlxcbvCfkK/mnpzmoLjliaXlo7Pwn5CvQGh0dHBzOi8vd3d3LmdoeGkuY29tLz9zPSoqXFxu8J+QrzQyM0Rvd27wn5CvQGh0dHBzOi8vd3d3LjQyM2Rvd24uY29tL3NlYXJjaC8qKlxcbvCfkK9GSOaQnEBodHRwczovL2ZpbGVoaXBwby5jb20vemgvc2VhcmNoLz9xPSoqXFxu8J+Qr+S8mOexs+agvOaQnPCfkK9AaHR0cHM6Ly93d3cuNHNwYWNlcy5vcmcvP3M9KipcXG7wn5CvQWx0ZXJu5pCc8J+Qr0BodHRwczovL2FsdGVybmF0aXZldG8ubmV0L2Jyb3dzZS9zZWFyY2gvP3E9KipcXG7wn5CvU09T8J+Qr0BodHRwczovL3d3dy5yanNvcy5jb20vc2VhcmNoP3M9KipcXG7wn5CvWk5EU+iuuuWdm/CfkK9AaHR0cDovL3poYW5uZWkuYmFpZHUuY29tL2NzZS9zZWFyY2g/cT0qKiZzPTEzNjI0MDMzODE4OTI2MjE2MTI1XFxu8J+Qr1B1cmVzeXPwn5CvQGh0dHBzOi8vd3d3LnB1cmVzeXMubmV0Lz9zPSoqXFxu8J+Qr0xJVEVAaHR0cHM6Ly9saXRlYXBrcy5jb20vP3M9KipcXG7wn5Cv572R55uY5Lit5b+D8J+Qr0BodHRwczovL3Bhbi5pc2hhcmVwYy5jb20vP3M9KipcXG7wn5CvaW9z5ri45oiP8J+Qr0BodHRwczovL25rODdjLmNuLz9zPSoqXFxu8J+Qr+WzsOWTpfCfkK9AaHR0cHM6Ly96enp6enoubWUvP2tleXdvcmQ9KiomcGFnZT1meXBhZ2VcXG7wn5Cv5bCP5YiA5aix5LmQ8J+Qr0BodHRwczovL3hkLng2ZC5jb20vZGFvd2FuZ3NvdXN1bz9xPSoqJnR5cGVpZD0wXFxu8J+Qr+WPjeaWl+i1hOa6kPCfkK9AaHR0cHM6Ly93d3cuYXBwcmNuLmNvbS8/cz0qKlxcbvCfkK/ovoXliqlAaHR0cHM6Ly93d3cuZnV6aHVnb3UuY29tL2ZpbmQvKipcXG7wn5Cv55m95ryC5ri45oiP8J+Qr0BodHRwczovL3h4eHh4NTI1LmNvbS8/cz0qKlxcbvCfkK/ova/ku7bmsYnljJbwn5CvQGh0dHBzOi8vYXBwaG90LmNjLz9zPSoqXFxu8J+Qr+W+ruW9k0BodHRwczovL20ud2VpZG93bi5jb20vc2VhcmNoLmh0bWw/cT0qKlxcbvCfkK/mgqDkuYXlrp3lupPwn5CvQGh0dHBzOi8vdTliYW9rdS54eXovP3M9KipcXG7wn5Cv6Zey5LiA6bG85pCc8J+Qr0BodHRwczovL3d3dy5tYWNyci5jb20vP3M9KipcXG7wn5Cv6Jek6L2pQGh0dHBzOi8vd3d3LnRlbmd4dWFudy5jb20vaW5kZXgucGhwP2tleXdvcmQ9KiomdHlwZWlkPTBcXG7wn5CvYXBw54Ot5pCc8J+Qr0BodHRwczovL2FwcGhvdC5jYy8/cz0qKlxcbvCfkK/lpYfotqPotYTmupDwn5CvQGh0dHBzOi8vZnV1bi5mdW4vc2VhcmNoP3dvcmQ9KipcXG7wn5Cv55qu55quQGh0dHBzOi8vd3d3LnB5enliLmNvbS9pbmRleC5waHA/a2V5d29yZD0qKiZ0eXBlaWQ9MFxcblxcblxcblxcblxcbmA7XFxubGV0IHJ1bGVzVGV4dCA9IGdldEl0ZW0oXFxcInJ1bGVzXFxcIiwgcnVsZXNUZXh0MCk7XFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFwiKTtcXG5ydWxlcyA9IHJ1bGVzVGV4dC5zcGxpdChcXFwiXFxcXG5cXFwiKVxcbiAgICAuZmlsdGVyKGl0ID0+IGl0LmluY2x1ZGVzKFxcXCJAXFxcIikpXFxuICAgIC5tYXAocnVsZSA9PiB7XFxuICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcIkBcXFwiKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgbmFtZTogc1swXSxcXG4gICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihrZXksIHBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwKHNbMV0sIGtleSwgc1swXSk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6IHNbMV1cXG4gICAgICAgIH07XFxuICAgIH0pO1xcblxcbmZ1bmN0aW9uIGxvYWQocGFnZSwgcnVsZSkge1xcbiAgICBsZXQgc2l6ZSA9IHBhZ2UgPD0gMCA/IHJ1bGVzLmxlbmd0aCA6IHNpemUwO1xcbiAgICBwYWdlID0gcGFnZSA8PSAwID8gMSA6IHBhZ2U7XFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgfVxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcbiAgICB9XFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG4gICAgbGV0IGxlbiA9IHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XFxuXFxuZnVuY3Rpb24gYWRkUnVsZShuYW1lLCBzdXJsKSB7XFxuICAgIHNldEl0ZW0oXFxcInJ1bGVzXFxcIiwgcnVsZXNUZXh0ICsgXFxcIlxcXFxuXFxcIiArIG5hbWUgKyBcXFwiQFxcXCIgKyBzdXJsKTtcXG59XFxuXFxuZnVuY3Rpb24gYWRkQWxsKGlucHV0KSB7XFxuICAgIGlmIChpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgfVxcbiAgICBsZXQgYXJyID0gaW5wdXQuc3BsaXQoXFxcIlxcXFxuXFxcIilcXG4gICAgICAgIC5maWx0ZXIoaXQgPT4gaXQuaW5jbHVkZXMoXFxcIkBcXFwiKSlcXG4gICAgICAgIC5tYXAocnVsZSA9PiB7XFxuICAgICAgICAgICAgbGV0IHMgPSBydWxlLnNwbGl0KFxcXCJAXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgbmFtZTogc1swXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBzWzFdXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0pO1xcbiAgICBsZXQgZXhpc3QgPSBydWxlcy5tYXAoaXQgPT4gaXQudXJsKTtcXG4gICAgbGV0IGMgPSAwO1xcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGlmICghZXhpc3QuaW5jbHVkZXMoaXQudXJsKSkge1xcbiAgICAgICAgICAgIHJ1bGVzVGV4dCA9IHJ1bGVzVGV4dCArIFxcXCJcXFxcblxcXCIgKyBpdC5uYW1lICsgXFxcIkBcXFwiICsgaXQudXJsO1xcbiAgICAgICAgICAgIGMrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRJdGVtKFxcXCJydWxlc1xcXCIsIHJ1bGVzVGV4dCk7XFxuICAgIHJldHVybiBjO1xcbn1cXG5cXG5mdW5jdGlvbiByZW1vdmVSdWxlKG5hbWUpIHtcXG4gICAgbGV0IG5ld1QgPSBydWxlc1RleHQuc3BsaXQoXFxcIlxcXFxuXFxcIilcXG4gICAgICAgIC5maWx0ZXIoaXQgPT4gaXQuaW5kZXhPZihuYW1lICsgXFxcIkBcXFwiKSA8IDApXFxuICAgICAgICAuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgc2V0SXRlbShcXFwicnVsZXNcXFwiLCBuZXdUKTtcXG59XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBsb2FkOiBsb2FkLFxcbiAgICBhZGRSdWxlOiBhZGRSdWxlLFxcbiAgICByZW1vdmVSdWxlOiByZW1vdmVSdWxlLFxcbiAgICBhZGRBbGw6IGFkZEFsbFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0ouino+aekFwiLFwicGF0aFwiOlwic3BcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHNlYXJjaCh1cmwsIGtleSwgcnVsZSkge1xcbiAgICBsZXQgZCA9IFtdO1xcbiAgICBsZXQgaHRtbCA9IFxcXCJcXFwiO1xcbiAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCIqKlxcXCIpKSB7XFxuICAgICAgICAvL2dldOivt+axglxcbiAgICAgICAgbGV0IG9sZCA9IHVybDtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCIqKlxcXCIsIGtleSk7XFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcbiAgICAgICAgLy/oh6rliqjov4fpqozor4HnoIHlkozpopHnuYHorr/pl67pmZDliLZcXG4gICAgICAgIGxldCB7XFxuICAgICAgICAgICAgY2hlY2ssIHRlc3RcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95em1cXFwiKTtcXG4gICAgICAgIGlmIChjaGVjayh1cmwsIGh0bWwsIGQpKSB7XFxuICAgICAgICAgICAgbG9nKFxcXCLph43or5XkuoZcXFwiKTtcXG4gICAgICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiB1cmxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgXFxuICAgICAgICB9ICAgICAgICAgXFxuICAgICAgICB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy/oh6rliqjor4bliKtwb3N06K+35rGCXFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcbiAgICAgICAgbGV0IGZvcm0gPSBwZGZoKGh0bWwsIFxcXCJib2R5JiZmb3JtJiZIdG1sXFxcIik7XFxuICAgICAgICBsZXQgYWN0aW9uID0gcGQoaHRtbCwgXFxcImZvcm0mJmFjdGlvblxcXCIsIHVybCk7XFxuICAgICAgICBsZXQgaW5wdXRzID0gcGRmYShodG1sLCBcXFwiYm9keSYmZm9ybSYmaW5wdXRcXFwiKTtcXG4gICAgICAgIGxldCBib2R5ID0ge307XFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBpbnB1dHMpIHtcXG4gICAgICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXQsIFxcXCJpbnB1dCYmbmFtZVxcXCIpO1xcbiAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGRmaChpdCwgXFxcImlucHV0JiZ2YWx1ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBib2R5W25hbWVdID0gdmFsdWUgfHwga2V5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGh0bWwgPSBwb3N0KGFjdGlvbiwge1xcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuXFxuICAgIGxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgbGV0IGFyciA9IGFsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICBsZXQgdCA9IHBkZmgoaXQsIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICBsZXQgdDIgPSBwZGZoKGl0LCBcXFwiYSYmdGl0bGVcXFwiKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgLy9odG1sOiBpdCxcXG4gICAgICAgICAgICB0ZXh0OiB0MiAmJiB0Mi5pbmNsdWRlcyhrZXkpID8gdDIgOiB0LFxcbiAgICAgICAgICAgIGhyZWY6IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybClcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIGZ1bmN0aW9uIGlzUmVzdWx0KGl0KSB7XFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaXQgPT0gXFxcIlxcXCIgfHwgaXQubWF0Y2goL+aQnOe0onznu5PmnpwvKSkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGl0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5KTtcXG4gICAgfVxcbiAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgIGxldCB0ID0gaXQudGV4dDtcXG4gICAgICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXNSZXN1bHQoaXQpKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9wP3U9XFxcIiArIGJhc2U2NEVuY29kZShpdC5ocmVmKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+XFxcIiArIHJ1bGUgKyBcXFwiPC9mb250PlxcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZDtcXG59XFxuJC5leHBvcnRzID0gc2VhcmNoO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aKe5YigXCIsXCJwYXRoXCI6XCJtYW5hZ2VcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKGQsIG5hbWVzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIkFJ5oqA5pyvXFxcIixcXG4gICAgICAgIHVybDogXFxcImNvbmZpcm06Ly/ln7rkuo5BSeivhueJh+iHquWKqOWIhuaekOa6kOeggeaKgOacr++8jOS7o+eggeWujOWFqOW8gOa6kO+8jOaVsOaNruadpea6kOS6juWOn+e9keerme+8jOi9r+S7tuWSjOinhOWImeS4jeaPkOS+m+S7u+S9leWGheWuuS5qczonJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiICsgXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocnIpID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoXFxcImFpYWRkXFxcIik7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHJyICsgXFxcImFpc2RlbFxcXCIsIFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5ZCN56ewXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ25hbWUnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5pCc57Si5Zyw5Z2AXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3N1cmwnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaPkOS6pOS/neWtmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VybCA9IGdldE15VmFyKFxcXCJzdXJsXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcIm5hbWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cmwgPT0gXFxcIlxcXCIgfHwgbmFtZSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5a6M5pW05YaF5a65XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGRlY29kZVVSSUNvbXBvbmVudChzdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gci5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIltcXFxcdTRlMDAtXFxcXHU5ZmE1XStcXFwiLCBcXFwiZ1xcXCIpLCBcXFwiKipcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlKG5hbWUsIHIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suS/neWtmFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwiYWlhZGRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBdKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiIC0gXFxcIixcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogbmFtZXMsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLor7fpgInmi6nopoHliKDpmaTnmoTnq5nngrlcXFwiLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCJcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKGl++4j1xcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLnoa7lrprlr7zlh7rmiYDmnInmlbDmja7lkJfvvJ/vvIjlr7zlh7rlkI7lj6/ku6Xngrnlh7vml4HovrnnmoTlr7zlhaXmjInpkq7mibnph4/lr7zlhaXvvIlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFxcbiAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gbG9hZCgtMSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IGRhdGEubWFwKGl0ID0+IGl0Lm5hbWUgKyBcXFwiQFxcXCIgKyBpdC51cmwpLmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgc1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLihpjvuI9cXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWl6KaB5om56YeP5a+85YWl55qE5pWw5o2uXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgIGFkZEFsbFxcbiAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgICAgICAgICAgbGV0IGNvdW50ID0gYWRkQWxsKGlucHV0KTtcXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgKGNvdW50ID4gMCA/IFxcXCLmiJDlip/lr7zlhaVcXFwiICsgY291bnQgKyBcXFwi5p2h5pWw5o2uXFxcIiA6IFxcXCLkuIDmnaHkuZ/msqHlr7zlhaVcXFwiKVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyBcXFwiYWlzZGVsXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpqozor4HnoIFcIixcInBhdGhcIjpcInl6bVwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY2hlY2sodXJsLCBodG1sLCBkKSB7XFxuICAgIGxldCByZWxvYWQgPSBmYWxzZTtcXG4gICAgcmV0dXJuIHJlbG9hZDtcXG59XFxuXFxuZnVuY3Rpb24gdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKSB7XFxuICAgIGlmICgvNeenknzpopHnuYEvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmkJzntKLpnIDpl7TpmpQ156eS77yM54K55Ye76YeN5paw5Yqg6L29JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXCIgKyBydWxlICsgXFxcIjwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1cmwsIG9sZCwga2V5LCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBzcCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBkID0gc3Aob2xkLCBrZXksIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgd3JhcFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBkKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIGtleSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHVybCwgZCk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0odXJsKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgICAgICB9LCB1cmwsIG9sZCwga2V5LCBydWxlKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBjaGVjazogY2hlY2ssXFxuICAgIHRlc3Q6IHRlc3RcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHdyYXAodGV4dCwgcykge1xcbiAgICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyB0ZXh0IDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiPGVtPnw8L2VtPlxcXCIsIFxcXCJnXFxcIiksIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKVxcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHdyYXA6IHdyYXBcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLljZXmkJxcIixcInBhdGhcIjpcInNpbmdsZXNcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInNvXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb1xcXCIsIFxcXCJcXFwiKVxcbiAgICB9XFxufSk7XFxubGV0IHMgPSBnZXRNeVZhcihcXFwic29cXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxuICAgIGxldCB7XFxuICAgICAgICBsb2FkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIGxldCBkYXRhID0gbG9hZChwLCBNWV9QQVJBTVMuUlVMRS5uYW1lKTtcXG4gICAgbGV0IGFyciA9IGRhdGFbMF0uZmluZChzLCBwKTtcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIHMpXFxuICAgICAgICBkLnB1c2goaXQpO1xcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291cFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLmtleSAmJiBnZXRNeVZhcihcXFwidXNlXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG4gICAgcHV0TXlWYXIoXFxcInVzZVxcXCIsIFxcXCIxXFxcIik7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ1c2VcXFwiKTtcXG4gICAgfSkpO1xcbn1cXG4kLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIkFJ6L2v5pCcXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL3A/dT1hSFIwY0hNNkx5OTNkM2N1YkdGdUxYTm9ZUzVqYjIwdk1URTFMbWgwYld3PVwiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgdXJsOiB1cmwsXFxuICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICBkZXNjOiBcXFwiZmxvYXQmJjEwMCVcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBibG9ja1J1bGVzOiBbXFxcIi5naWZcXFwiLCBcXFwiL2FkL1xcXCIsIFxcXCIvYWRzL1xcXCIsIFxcXCJnb29nbGVcXFwiLCBcXFwiL3NoL3RvL1xcXCIsIFxcXCIuR0lGXFxcIl1cXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcXG5cIixcImdyb3VwXCI6XCLlhbblroNcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcIlwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuoznuqfop6PmnpBcXFwiLFxcXCJwYXRoXFxcIjpcXFwicFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXFxcXFwidVxcXFxcXFwiKSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIHVybDogdXJsLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCJmbG9hdCYmMTAwJVxcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXFxcbiAgICAgICAgYmxvY2tSdWxlczogW1xcXFxcXFwiLmdpZlxcXFxcXFwiLCBcXFxcXFxcIi9hZC9cXFxcXFxcIiwgXFxcXFxcXCIvYWRzL1xcXFxcXFwiLCBcXFxcXFxcImdvb2dsZVxcXFxcXFwiLCBcXFxcXFxcIi9zaC90by9cXFxcXFxcIiwgXFxcXFxcXCIuR0lGXFxcXFxcXCJdXFxcXG4gICAgfVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8xXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0oua1i+ivlVxcXCIsXFxcInBhdGhcXFwiOlxcXCJzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IHVybCA9IGJhc2U2NERlY29kZShnZXRQYXJhbShcXFxcXFxcInVcXFxcXFxcIikpO1xcXFxubG9nKHVybCk7XFxcXG5sZXQga2V5ID0gZ2V0UGFyYW0oXFxcXFxcXCJrZXlcXFxcXFxcIik7XFxcXG5sZXQgc3AgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFxcXFxcIik7XFxcXG5zZXRSZXN1bHQoc3AodXJsLCBrZXksIFxcXFxcXFwi5pCc57Si5rWL6K+VXFxcXFxcXCIpKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLogZrlkIjmkJzntKJcXFwiLFxcXCJwYXRoXFxcIjpcXFwicHJvXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pCc57SiXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIGFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInNvdVxcXFxcXFwiKTtcXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInNvXFxcXFxcXCIpO1xcXFxuICAgIH0pKTtcXFxcbn1cXFxcblxcXFxubGV0IHMgPSBnZXRNeVZhcihcXFxcXFxcInNvdVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCByID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbmlmIChzICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgbG9hZFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICB3cmFwXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90b29sXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkYXRhID0gbG9hZChwLCByICE9IFxcXFxcXFwiXFxcXFxcXCIgPyByIDogbnVsbCk7XFxcXG5cXFxcbiAgICBsZXQgcGFnZWlkID0gTVlfUlVMRS50aXRsZSArIFxcXFxcXFwiLXBhZ2VcXFxcXFxcIiArIHA7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBwICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXFxcXFwiICsgZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgIGxvZyhkYXRhLmxlbmd0aCk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXFxcXFwiXFxcXFxcXCIgPT0gciA/IDEgOiBwO1xcXFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBwYXJhbTogaXQsXFxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXFxcXFwicnVsZUBcXFxcXFxcIiArIGl0Lm5hbWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFxcXFxcImxpc3RlbmVyOiBcXFxcXFxcIiArIChyZXN1bHQgfHwgW10pLmxlbmd0aClcXFxcbiAgICAgICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwKGl0LnRpdGxlLCBzKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5waWNfdXJsID8gJ21vdmllXzFfdmVydGljYWxfcGljJyA6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBpdC5leHRyYVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0ocGFnZWlkKVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJpcXFxcXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFxcXFxcIi9cXFxcXFxcIiArIHBhcmFtLmFsbCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHBhcmFtOiB7XFxcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcXFxuICAgICAgICAgICAgICAgIGo6IC0xXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBsb2FkXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkYXRhID0gbG9hZCgtMSwgbnVsbCk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFuYWdlXFxcXFxcXCIpKGQsIGRhdGEubWFwKGl0ID0+IGl0Lm5hbWUpKTtcXFxcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgZGF0YSkge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXQubmFtZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwic2VsZWN0Oi8vXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuivt+mAieaLqeaTjeS9nFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2w6IDEsXFxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcXFxcXFxcIuiuv+mXrummlumhtVxcXFxcXFwiLCBcXFxcXFxcIuaQnOe0ouatpOermVxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXFxcXFwi6K6/6Zeu6aaW6aG1XFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9VUkwgPSB1cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3A/dT1cXFxcXFxcIiArIGJhc2U2NEVuY29kZShnZXRIb21lKHVybCkpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS9zaW5nbGVzXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgaXQudXJsKVxcXFxuICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybFxcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnpoHnlKhcXFxcXFxcIiArIGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygobmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmuKnppqjmj5DnpLpcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXFxcXFxcXCLnoa7orqTliKDpmaTnpoHnlKhcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIuWQl++8n1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChuYW1lLCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YT9ydWxlPVxcXFxcXFwiICsgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlKG5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSwgTVlfUlVMRS50aXRsZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0Lm5hbWUpXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuiuv+mXrummlumhtVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6IFxcXFxcXFwiJ2hpa2VyOi8vcGFnZS9wP3U9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUoZ2V0SG9tZShpdC51cmwpKSArXFxcXFxcXCInXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pCc57Si5q2k5rqQXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogXFxcXFxcXCInaGlrZXI6Ly9wYWdlL3NpbmdsZXMnXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaVsOaNrlxcXCIsXFxcInBhdGhcXFwiOlxcXCJkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcIi8v5bm25Y+R6KeE5YiZ5pWwXFxcXG5sZXQgc2l6ZTAgPSAxMDtcXFxcbmxldCBydWxlc1RleHQwID0gYPCfkK/ngavngavotYTmupDwn5CvQGh0dHA6Ly93d3cuaG5mY2pyLmNvbS9zby9tLz9rPSoqXFxcXG7wn5Cv5LmQ5LmQ6LWE5rqQ8J+Qr0BodHRwOi8vd3d3LjZsbC5jb20vc28vbS8/az0qKlxcXFxu8J+Qr+ebkuWtkEBodHRwczovL3d3dy5oZXppcGllLmNvbS8/cz0qKlxcXFxu8J+Qr+aWsOWIhuS6q+iAhfCfkK9AaHR0cHM6Ly93d3cuZmVueG0uY29tL3NlYXJjaC5waHA/cT0qKlxcXFxu8J+Qr+iTnemyqOi1hOa6kPCfkK9AaHR0cHM6Ly93d3cubGFuLXNoYS5jb20vP3M9KipcXFxcbvCfkK/phbflupNAaHR0cHM6Ly93d3cuenhraS5jbi8/a2V5d29yZD0qKlxcXFxu8J+Qr0FwcOWWteaQnPCfkK9AaHR0cHM6Ly93d3cuYXBwbWl1LmNvbS8/cz0qKiZ0eXBlPXBvc3RcXFxcbvCfkK/lpaXlhZTlhZTmkJzwn5CvQGh0dHA6Ly93d3cuYW90dXR1LmNuL3NlYXJjaC8/a2V5d29yZD0qKlxcXFxu8J+Qr+iTneeCuUBodHRwczovL3d3dy5sYW5kaWFubmV3cy5jb20vc2VhcmNoLyoqP3Bvc3RfdHlwZT1wb3N0XFxcXG7wn5CvUeS6kei1hOa6kPCfkK9AaHR0cHM6Ly93d3cucXl1bi52aXAvP2tleXdvcmQ9KipcXFxcbvCfkK9RUei1hOa6kPCfkK9AaHR0cHM6Ly93d3cucXF6eWcuY24vc2VhcmNoP2tleXdvcmQ9KipcXFxcbvCfkK/lpJzmsrPmkJxAaHR0cDovL3d3dy55ZWhlcy5jb20vP2NhdD0mcz0qKlxcXFxu8J+QrzVpbHLotYTmupDwn5CvQGh0dHBzOi8vd3d3LjVpbHIuY29tLz9zPSoqJmNhdD0wXFxcXG7wn5Cv6bih55uS6LWE5rqQ8J+Qr0BodHRwczovL2Nhb25pYW5nLm5ldC9zZWFyY2gvKiouaHRtbFxcXFxu8J+Qr+i3r+e+vUBodHRwczovL3d3dy5qaXNodXNvbmdzaHUuY29tLz9zPSoqJnBvc3RfdHlwZT1wb3N0XFxcXG7wn5Cv5LiN5q276bif5pCc8J+Qr0BodHRwczovL2l1aS5zdS9zZWFyY2gvKiovXFxcXG7wn5Cv5rqQ56CB6LWE5rqQ8J+Qr0BodHRwczovL3d3dy5zY29kZTEuY29tL3NlYXJjaC8/a2V5d29yZD0qKlxcXFxu8J+Qr+WknOmbqEBodHRwczovL3d3dy55ZXl1bGluZ2ZlbmcuY29tLz9zPSoqXFxcXG7wn5Cv546J57Gz57KS5pCc8J+Qr0BodHRwczovL3lpbWlsaS5uZXQvP3M9KipcXFxcbvCfkK/mnKjpo47ova/ku7bwn5CvQGh0dHBzOi8vd3d3Lm1mcmp6LmNvbS8/cz0qKlxcXFxu8J+QrzcyNzNAaHR0cDovL3MuNzI3My5jb20vbS8/az0qKlxcXFxu8J+Qr+a1t+ajoOi1hOa6kPCfkK9AaHR0cHM6Ly93d3cuaGFpdGFuZ3cuY2MvP3M9KipcXFxcbvCfkK/lsI/oj4zotYTmupDwn5CvQGh0dHBzOi8vd3d3Lnd3dHRsLmNvbS8/cz0qKlxcXFxu8J+Qr+WfuuWcsEBodHRwOi8vcmpqZDYuY29tL3NlYXJjaD9tb2xkcz1hcnRpY2xlJndvcmQ9KipcXFxcbvCfkK/liY3mlrnotYTmupDwn5CvQGh0dHBzOi8vcWlhbmZhbmd6eS5jb20vP3M9KipcXFxcbvCfkK/kuZDkuqvotYTmupDwn5CvQGh0dHBzOi8vd3d3Lmx4YXBrLmNvbS8/cz0qKiZ0eXBlPXBvc3RcXFxcbvCfkK/mjbflvoRAaHR0cHM6Ly9zaGFyZWN1dHMuY24vc2VhcmNoP3E9KipcXFxcbvCfkK9wb2ppZei1hOa6kPCfkK9AaHR0cHM6Ly93d3cucG9qaWVzLmNuLz9zPSoqJnR5cGU9cG9zdFxcXFxu8J+Qr01lbW9yefCfkK9AaHR0cHM6Ly9jbnhpYW9iYWkuY29tL3NlYXJjaD9rZXl3b3JkPSoqXFxcXG7wn5Cv5bCP5Y+vQGh0dHBzOi8vd3d3LnFrZWtlLmNvbS8/cz0qKlxcXFxu8J+Qr+eIseWFjei0ueWQp/CfkK9AaHR0cHM6Ly93d3cuaW1mOC5jbi9zZWFyY2gvKiouaHRtbFxcXFxu8J+Qr+a3seiTneS4i+i9vfCfkK9AaHR0cHM6Ly9kb3dubG9hZC5zZW5scy5jbi9zZWFyY2gvP2tleXdvcmQ9KipcXFxcbvCfkK/nuqLlsJhAaHR0cHM6Ly93d3cuaGN3My5jbi9zZWFyY2gvKiouaHRtbFxcXFxu8J+QrzY3OOi+heWKqfCfkK9AaHR0cHM6Ly93d3cuNjc4Y3YuY29tL2luZGV4LnBocD9rZXl3b3JkPSoqXFxcXG7wn5Cv5pyJ6Laj5rqQ56CB8J+Qr0BodHRwczovL3d3dy55cXltLm5ldC8/cz0qKlxcXFxu8J+Qr+ezu+e7n0BodHRwczovL3d3dy54aXRtaS5jb20vP3M9KipcXFxcbvCfkK/liIbkuqvotYTmupDwn5CvQGh0dHBzOi8vd3d3Lnlweml5dWFuc2hhcmUuY2x1Yi9zZWFyY2gucGhwP3E9KipcXFxcbvCfkK/mtL7mo67nm5LlrZDwn5CvQGh0dHBzOi8vd3d3LnB5aGV6aS5jb20vP3M9KipcXFxcbvCfkK/liJ3op4FAaHR0cHM6Ly93d3cueWJjajA5MDcuY29tLz9zPSoqJmNhdD1cXFxcbvCfkK/kuqTmtYHlspvmkJzwn5CvQGh0dHBzOi8vd3d3LmppYW9saXVkYW8uY29tLz9zPSoqXFxcXG7wn5Cv5LiL6L296LWE5rqQ8J+Qr0BodHRwczovL20ueHpqaS5jb20vc2VhcmNoL2FsbC0wLTEtKiouaHRtbFxcXFxu8J+Qr+W6lOeUqEBodHRwczovL3d3dy5pYXBwcy5tZS9hcmNoaXZlcy9jYXRlZ29yeS90dlxcXFxu8J+Qr+mFtzjovoXliqnwn5CvQGh0dHBzOi8vd3d3LjE5Znp3LmNvbS9pbmRleC5waHA/a2V5d29yZD0qKlxcXFxu8J+Qr+aegeWuouS4i+i9vfCfkK9AaHR0cHM6Ly93d3cuZ2Vla2Rsb2FkLmNvbS8/cz0qKlxcXFxu8J+Qr+maj+mjjkBodHRwczovL3d3dy41Mm5mdy5jbi8/cz0qKiZ0eXBlPXBvc3RcXFxcbvCfkK/lh6HlsJjotYTmupDwn5CvQGh0dHBzOi8vd3d3LjUwZmN3LmNvbS9pbmRleC5waHA/a2V5d29yZD0qKiZ0eXBlaWQ9MFxcXFxu8J+Qr+W/g+a1t0Xnq5nwn5CvQGh0dHBzOi8vYXBwaG90LmNjLz9zPSoqXFxcXG7wn5Cv5p2C6LSn6ZO6QGh0dHBzOi8vdG1pb2UuY29tLz9zPSoqXFxcXG7wn5Cv5aSn55y85LuU5pCc8J+Qr0BodHRwOi8vd3d3LmRheWFuemFpLm1lLz9zPSoqXFxcXG7wn5Cv6aOY6YGl6LWE5rqQ8J+Qr0BodHRwczovL3d3dy5tcHlpdC5jb20vP3M9KipcXFxcbvCfkK/ova7lm55AaHR0cHM6Ly93d3cuY2hlbmJvLmluZm8vP3M9KipcXFxcbvCfkK/mnqvpn7PlupTnlKjwn5CvQGh0dHBzOi8vd3d3LmZ5NmIuY29tLz9zPSoqXFxcXG7wn5Cv5ZOH5ZaU6I+M5pCc8J+Qr0BodHRwczovL3d3dy53YW9kb3duLmNvbS9zZWFyY2gvKipcXFxcbvCfkK/kuZ3ova9AaHR0cHM6Ly93d3cuam9ydWFuLmNvbS8/cz0qKlxcXFxu8J+Qr2kz56S+5Yy68J+Qr0BodHRwczovL3d3dy5pM3poLmNvbS8/cz0qKlxcXFxu8J+Qr+i1hOa6kOWQpuaQnPCfkK9AaHR0cHM6Ly93d3cuenlmb3UuY29tLz9zPSoqXFxcXG7wn5Cv6KW/6KW/5pCcQGh0dHBzOi8vc28uY3IxNzMuY29tL3NvdXN1by9tLz9rPSoqXFxcXG7wn5Cv5peg55eV5ZOl5pCc8J+Qr0BodHRwczovL3d3dy53aGc2LmNvbS80NjU4Lmh0bWxcXFxcbvCfkK/niLHnlZnotYTmupDwn5CvQGh0dHA6Ly96eXcuaTYuZ3MvaW5kZXgucGhwP2tleXdvcmQ9KipcXFxcbvCfkK/lsI/kvJdAaHR0cHM6Ly93d3cuYXBwaW5uLmNvbS8/cz0qKlxcXFxu8J+Qr+m7kea1t+a0i+aQnPCfkK9AaHR0cHM6Ly9ibG9nLnVweDguY29tL3NlYXJjaC8qKi9cXFxcbvCfkK/lhYXnlLXnq5nmkJzwn5CvQGh0dHBzOi8vd3d3LmNvY29rbC5jbi8/cz0qKlxcXFxu8J+Qr+iJvuiWh0BodHRwOi8vbS5haXdlaWJrLmNvbS9zZWFyY2gvKiouaHRtbFxcXFxu8J+QrzfkuIvovb3mkJzwn5CvQGh0dHBzOi8vd3d3Ljd4aWF6YWkuY29tLz9zPSoqXFxcXG7wn5Cv57K+5ZOB6LWE5rqQ8J+Qr0BodHRwOi8vd3d3Lmo5cC5jb20vc28vbS8/az0qKlxcXFxu8J+Qr+iTneihq+aQnEBodHRwczovL3d3dy5ibHVlbHNxa2ouY29tLz9zPSoqXFxcXG7wn5CvQeWnkOWIhuS6q/CfkK9AaHR0cHM6Ly93d3cuYWhoaGhmcy5jb20vP2NhdD0mcz0qKlxcXFxu8J+Qr+WQvueIsei9r+S7tvCfkK9AaHR0cHM6Ly93d3cudmlwdG9vbHMudmlwLz9zPSoqJnR5cGU9cG9zdFxcXFxu8J+Qr+e+veWFlOe9kUBodHRwczovL20ueXV0dS5jbi9zZWFyY2gvc29mdC5odG1sP3Q9MzImaz0qKlxcXFxu8J+Qr+aenOaguOWJpeWjs/CfkK9AaHR0cHM6Ly93d3cuZ2h4aS5jb20vP3M9KipcXFxcbvCfkK80MjNEb3du8J+Qr0BodHRwczovL3d3dy40MjNkb3duLmNvbS9zZWFyY2gvKipcXFxcbvCfkK9GSOaQnEBodHRwczovL2ZpbGVoaXBwby5jb20vemgvc2VhcmNoLz9xPSoqXFxcXG7wn5Cv5LyY57Gz5qC85pCc8J+Qr0BodHRwczovL3d3dy40c3BhY2VzLm9yZy8/cz0qKlxcXFxu8J+Qr0FsdGVybuaQnPCfkK9AaHR0cHM6Ly9hbHRlcm5hdGl2ZXRvLm5ldC9icm93c2Uvc2VhcmNoLz9xPSoqXFxcXG7wn5CvU09T8J+Qr0BodHRwczovL3d3dy5yanNvcy5jb20vc2VhcmNoP3M9KipcXFxcbvCfkK9aTkRT6K665Z2b8J+Qr0BodHRwOi8vemhhbm5laS5iYWlkdS5jb20vY3NlL3NlYXJjaD9xPSoqJnM9MTM2MjQwMzM4MTg5MjYyMTYxMjVcXFxcbvCfkK9QdXJlc3lz8J+Qr0BodHRwczovL3d3dy5wdXJlc3lzLm5ldC8/cz0qKlxcXFxu8J+Qr0xJVEVAaHR0cHM6Ly9saXRlYXBrcy5jb20vP3M9KipcXFxcbvCfkK/nvZHnm5jkuK3lv4Pwn5CvQGh0dHBzOi8vcGFuLmlzaGFyZXBjLmNvbS8/cz0qKlxcXFxu8J+Qr2lvc+a4uOaIj/CfkK9AaHR0cHM6Ly9uazg3Yy5jbi8/cz0qKlxcXFxu8J+Qr+WzsOWTpfCfkK9AaHR0cHM6Ly96enp6enoubWUvP2tleXdvcmQ9KiomcGFnZT1meXBhZ2VcXFxcbvCfkK/lsI/liIDlqLHkuZDwn5CvQGh0dHBzOi8veGQueDZkLmNvbS9kYW93YW5nc291c3VvP3E9KiomdHlwZWlkPTBcXFxcbvCfkK/lj43mlpfotYTmupDwn5CvQGh0dHBzOi8vd3d3LmFwcHJjbi5jb20vP3M9KipcXFxcbvCfkK/ovoXliqlAaHR0cHM6Ly93d3cuZnV6aHVnb3UuY29tL2ZpbmQvKipcXFxcbvCfkK/nmb3mvILmuLjmiI/wn5CvQGh0dHBzOi8veHh4eHg1MjUuY29tLz9zPSoqXFxcXG7wn5Cv6L2v5Lu25rGJ5YyW8J+Qr0BodHRwczovL2FwcGhvdC5jYy8/cz0qKlxcXFxu8J+Qr+W+ruW9k0BodHRwczovL20ud2VpZG93bi5jb20vc2VhcmNoLmh0bWw/cT0qKlxcXFxu8J+Qr+aCoOS5heWuneW6k/CfkK9AaHR0cHM6Ly91OWJhb2t1Lnh5ei8/cz0qKlxcXFxu8J+Qr+mXsuS4gOmxvOaQnPCfkK9AaHR0cHM6Ly93d3cubWFjcnIuY29tLz9zPSoqXFxcXG7wn5Cv6Jek6L2pQGh0dHBzOi8vd3d3LnRlbmd4dWFudy5jb20vaW5kZXgucGhwP2tleXdvcmQ9KiomdHlwZWlkPTBcXFxcbvCfkK9hcHDng63mkJzwn5CvQGh0dHBzOi8vYXBwaG90LmNjLz9zPSoqXFxcXG7wn5Cv5aWH6Laj6LWE5rqQ8J+Qr0BodHRwczovL2Z1dW4uZnVuL3NlYXJjaD93b3JkPSoqXFxcXG7wn5Cv55qu55quQGh0dHBzOi8vd3d3LnB5enliLmNvbS9pbmRleC5waHA/a2V5d29yZD0qKiZ0eXBlaWQ9MFxcXFxuXFxcXG5cXFxcblxcXFxuXFxcXG5gO1xcXFxubGV0IHJ1bGVzVGV4dCA9IGdldEl0ZW0oXFxcXFxcXCJydWxlc1xcXFxcXFwiLCBydWxlc1RleHQwKTtcXFxcbmxldCBzcCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9zcFxcXFxcXFwiKTtcXFxcbnJ1bGVzID0gcnVsZXNUZXh0LnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpXFxcXG4gICAgLmZpbHRlcihpdCA9PiBpdC5pbmNsdWRlcyhcXFxcXFxcIkBcXFxcXFxcIikpXFxcXG4gICAgLm1hcChydWxlID0+IHtcXFxcbiAgICAgICAgbGV0IHMgPSBydWxlLnNwbGl0KFxcXFxcXFwiQFxcXFxcXFwiKTtcXFxcbiAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgIG5hbWU6IHNbMF0sXFxcXG4gICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihrZXksIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gc3Aoc1sxXSwga2V5LCBzWzBdKTtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICB1cmw6IHNbMV1cXFxcbiAgICAgICAgfTtcXFxcbiAgICB9KTtcXFxcblxcXFxuZnVuY3Rpb24gbG9hZChwYWdlLCBydWxlKSB7XFxcXG4gICAgbGV0IHNpemUgPSBwYWdlIDw9IDAgPyBydWxlcy5sZW5ndGggOiBzaXplMDtcXFxcbiAgICBwYWdlID0gcGFnZSA8PSAwID8gMSA6IHBhZ2U7XFxcXG4gICAgaWYgKCFwYWdlICYmICFydWxlKSB7XFxcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxcXG4gICAgfVxcXFxuICAgIGlmIChydWxlICE9IG51bGwpIHtcXFxcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlID4gMSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcXFxuICAgICAgICByZXR1cm4gW107XFxcXG4gICAgfVxcXFxuICAgIGxldCBsZW4gPSBzaXplO1xcXFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcXFxuICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydFxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gYWRkUnVsZShuYW1lLCBzdXJsKSB7XFxcXG4gICAgc2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIHJ1bGVzVGV4dCArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBzdXJsKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gYWRkQWxsKGlucHV0KSB7XFxcXG4gICAgaWYgKGlucHV0ID09IG51bGwgfHwgaW5wdXQgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gMDtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGFyciA9IGlucHV0LnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpXFxcXG4gICAgICAgIC5maWx0ZXIoaXQgPT4gaXQuaW5jbHVkZXMoXFxcXFxcXCJAXFxcXFxcXCIpKVxcXFxuICAgICAgICAubWFwKHJ1bGUgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IHMgPSBydWxlLnNwbGl0KFxcXFxcXFwiQFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAgICAgbmFtZTogc1swXSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHNbMV1cXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIGxldCBleGlzdCA9IHJ1bGVzLm1hcChpdCA9PiBpdC51cmwpO1xcXFxuICAgIGxldCBjID0gMDtcXFxcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXFxcbiAgICAgICAgaWYgKCFleGlzdC5pbmNsdWRlcyhpdC51cmwpKSB7XFxcXG4gICAgICAgICAgICBydWxlc1RleHQgPSBydWxlc1RleHQgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiICsgaXQubmFtZSArIFxcXFxcXFwiQFxcXFxcXFwiICsgaXQudXJsO1xcXFxuICAgICAgICAgICAgYysrO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHNldEl0ZW0oXFxcXFxcXCJydWxlc1xcXFxcXFwiLCBydWxlc1RleHQpO1xcXFxuICAgIHJldHVybiBjO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiByZW1vdmVSdWxlKG5hbWUpIHtcXFxcbiAgICBsZXQgbmV3VCA9IHJ1bGVzVGV4dC5zcGxpdChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKVxcXFxuICAgICAgICAuZmlsdGVyKGl0ID0+IGl0LmluZGV4T2YobmFtZSArIFxcXFxcXFwiQFxcXFxcXFwiKSA8IDApXFxcXG4gICAgICAgIC5qb2luKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpO1xcXFxuICAgIHNldEl0ZW0oXFxcXFxcXCJydWxlc1xcXFxcXFwiLCBuZXdUKTtcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGxvYWQ6IGxvYWQsXFxcXG4gICAgYWRkUnVsZTogYWRkUnVsZSxcXFxcbiAgICByZW1vdmVSdWxlOiByZW1vdmVSdWxlLFxcXFxuICAgIGFkZEFsbDogYWRkQWxsXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Si6Kej5p6QXFxcIixcXFwicGF0aFxcXCI6XFxcInNwXFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIHNlYXJjaCh1cmwsIGtleSwgcnVsZSkge1xcXFxuICAgIGxldCBkID0gW107XFxcXG4gICAgbGV0IGh0bWwgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCIqKlxcXFxcXFwiKSkge1xcXFxuICAgICAgICAvL2dldOivt+axglxcXFxuICAgICAgICBsZXQgb2xkID0gdXJsO1xcXFxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcXFxcXFxcIioqXFxcXFxcXCIsIGtleSk7XFxcXG4gICAgICAgIGh0bWwgPSByZXF1ZXN0KHVybCk7XFxcXG4gICAgICAgIC8v6Ieq5Yqo6L+H6aqM6K+B56CB5ZKM6aKR57mB6K6/6Zeu6ZmQ5Yi2XFxcXG4gICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICBjaGVjaywgdGVzdFxcXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3l6bVxcXFxcXFwiKTtcXFxcbiAgICAgICAgaWYgKGNoZWNrKHVybCwgaHRtbCwgZCkpIHtcXFxcbiAgICAgICAgICAgIGxvZyhcXFxcXFxcIumHjeivleS6hlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KHVybCwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IHVybFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgXFxcXG4gICAgICAgIH0gICAgICAgICBcXFxcbiAgICAgICAgdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvL+iHquWKqOivhuWIq3Bvc3Tor7fmsYJcXFxcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXFxcbiAgICAgICAgbGV0IGZvcm0gPSBwZGZoKGh0bWwsIFxcXFxcXFwiYm9keSYmZm9ybSYmSHRtbFxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGFjdGlvbiA9IHBkKGh0bWwsIFxcXFxcXFwiZm9ybSYmYWN0aW9uXFxcXFxcXCIsIHVybCk7XFxcXG4gICAgICAgIGxldCBpbnB1dHMgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmZm9ybSYmaW5wdXRcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBib2R5ID0ge307XFxcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIGlucHV0cykge1xcXFxuICAgICAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCBcXFxcXFxcImlucHV0JiZuYW1lXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGRmaChpdCwgXFxcXFxcXCJpbnB1dCYmdmFsdWVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgYm9keVtuYW1lXSA9IHZhbHVlIHx8IGtleTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBodG1sID0gcG9zdChhY3Rpb24sIHtcXFxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgbGV0IGFsaXN0ID0gcGRmYShodG1sLCBcXFxcXFxcImJvZHkmJmFcXFxcXFxcIik7XFxcXG4gICAgbGV0IGFyciA9IGFsaXN0Lm1hcChpdCA9PiB7XFxcXG4gICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcXFxcXCJhJiZUZXh0XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgdDIgPSBwZGZoKGl0LCBcXFxcXFxcImEmJnRpdGxlXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgLy9odG1sOiBpdCxcXFxcbiAgICAgICAgICAgIHRleHQ6IHQyICYmIHQyLmluY2x1ZGVzKGtleSkgPyB0MiA6IHQsXFxcXG4gICAgICAgICAgICBocmVmOiBwZChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIsIHVybClcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgZnVuY3Rpb24gaXNSZXN1bHQoaXQpIHtcXFxcbiAgICAgICAgaXQgPSBpdC50ZXh0IHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChpdCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGl0Lm1hdGNoKC/mkJzntKJ857uT5p6cLykpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBpdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleSk7XFxcXG4gICAgfVxcXFxuICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgbGV0IHQgPSBpdC50ZXh0O1xcXFxuICAgICAgICBpZiAoIWl0LmhyZWYgfHwgaXQuaHJlZiA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoaXNSZXN1bHQoaXQpKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0LFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvcD91PVxcXFxcXFwiICsgYmFzZTY0RW5jb2RlKGl0LmhyZWYpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBkO1xcXFxufVxcXFxuJC5leHBvcnRzID0gc2VhcmNoO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWinuWIoFxcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW5hZ2VcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0gZnVuY3Rpb24oZCwgbmFtZXMpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCJBSeaKgOacr1xcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiY29uZmlybTovL+WfuuS6jkFJ6K+G54mH6Ieq5Yqo5YiG5p6Q5rqQ56CB5oqA5pyv77yM5Luj56CB5a6M5YWo5byA5rqQ77yM5pWw5o2u5p2l5rqQ5LqO5Y6f572R56uZ77yM6L2v5Lu25ZKM6KeE5YiZ5LiN5o+Q5L6b5Lu75L2V5YaF5a65LmpzOicnXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCIgKyBcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKHJyKSA9PiB7XFxcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoXFxcXFxcXCJhaWFkZFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihyciArIFxcXFxcXFwiYWlzZGVsXFxcXFxcXCIsIFt7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuivt+i+k+WFpee9keermeWQjeensFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dE15VmFyKCduYW1lJywgaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXFxcXFwiYWlhZGRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuivt+i+k+WFpee9keermeaQnOe0ouWcsOWdgFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dE15VmFyKCdzdXJsJywgaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXFxcXFwiYWlhZGRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaPkOS6pOS/neWtmFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdXJsID0gZ2V0TXlWYXIoXFxcXFxcXCJzdXJsXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBnZXRNeVZhcihcXFxcXFxcIm5hbWVcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VybCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IG5hbWUgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6K+36L6T5YWl5a6M5pW05YaF5a65XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IHIucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwiW1xcXFxcXFxcdTRlMDAtXFxcXFxcXFx1OWZhNV0rXFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCIqKlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUnVsZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUnVsZShuYW1lLCByKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suS/neWtmFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcXFxcXCJhaWFkZFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBdKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCIgLSBcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgb3B0aW9uczogbmFtZXMsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLor7fpgInmi6nopoHliKDpmaTnmoTnq5nngrlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlXFxcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGUoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9PS1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLihpfvuI9cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5rip6aao5o+Q56S6XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcXFxcXCLnoa7lrprlr7zlh7rmiYDmnInmlbDmja7lkJfvvJ/vvIjlr7zlh7rlkI7lj6/ku6Xngrnlh7vml4HovrnnmoTlr7zlhaXmjInpkq7mibnph4/lr7zlhaXvvIlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRcXFxcbiAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGxvYWQoLTEpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IGRhdGEubWFwKGl0ID0+IGl0Lm5hbWUgKyBcXFxcXFxcIkBcXFxcXFxcIiArIGl0LnVybCkuam9pbihcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiY29weTovL1xcXFxcXFwiICsgc1xcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLihpjvuI9cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiXFxcXFxcXCIsIFxcXFxcXFwi6K+36L6T5YWl6KaB5om56YeP5a+85YWl55qE5pWw5o2uXFxcXFxcXCIpLmlucHV0KCgpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgYWRkQWxsXFxcXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBsZXQgY291bnQgPSBhZGRBbGwoaW5wdXQpO1xcXFxuICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXCIgKyAoY291bnQgPiAwID8gXFxcXFxcXCLmiJDlip/lr7zlhaVcXFxcXFxcIiArIGNvdW50ICsgXFxcXFxcXCLmnaHmlbDmja5cXFxcXFxcIiA6IFxcXFxcXFwi5LiA5p2h5Lmf5rKh5a+85YWlXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiLFxcXFxuICAgIH0pO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImJsYW5rX2Jsb2NrXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArIFxcXFxcXFwiYWlzZGVsXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6aqM6K+B56CBXFxcIixcXFwicGF0aFxcXCI6XFxcInl6bVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBjaGVjayh1cmwsIGh0bWwsIGQpIHtcXFxcbiAgICBsZXQgcmVsb2FkID0gZmFsc2U7XFxcXG4gICAgcmV0dXJuIHJlbG9hZDtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKSB7XFxcXG4gICAgaWYgKC8156eSfOmikee5gS8udGVzdChodG1sKSkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfmkJzntKLpnIDpl7TpmpQ156eS77yM54K55Ye76YeN5paw5Yqg6L29JyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1cmwsIG9sZCwga2V5LCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHNwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBkID0gc3Aob2xkLCBrZXksIHJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHdyYXBcXFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgZCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIGtleSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcih1cmwsIGQpO1xcXFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0odXJsKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL09LXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCB1cmwsIG9sZCwga2V5LCBydWxlKSxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6IHVybFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cyA9IHtcXFxcbiAgICBjaGVjazogY2hlY2ssXFxcXG4gICAgdGVzdDogdGVzdFxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuW3peWFt1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ0b29sXFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIHdyYXAodGV4dCwgcykge1xcXFxuICAgIHJldHVybiB0ZXh0LmluY2x1ZGVzKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID8gdGV4dCA6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIjxlbT58PC9lbT5cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcIiArIHMgKyBcXFxcXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFxcXFxcIilcXFxcbn1cXFxcbiQuZXhwb3J0cyA9IHtcXFxcbiAgICB3cmFwOiB3cmFwXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Y2V5pCcXFxcIixcXFwicGF0aFxcXCI6XFxcInNpbmdsZXNcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLmkJzntKJcXFxcXFxcIixcXFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICBwdXRNeVZhcihcXFxcXFxcInNvXFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcXFxcXCIsXFxcXG4gICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXFxcXFwic29cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICB9XFxcXG59KTtcXFxcbmxldCBzID0gZ2V0TXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCByID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbmlmIChzICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgbG9hZFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICB3cmFwXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90b29sXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkYXRhID0gbG9hZChwLCBNWV9QQVJBTVMuUlVMRS5uYW1lKTtcXFxcbiAgICBsZXQgYXJyID0gZGF0YVswXS5maW5kKHMsIHApO1xcXFxuICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcXFxuICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIHMpXFxcXG4gICAgICAgIGQucHVzaChpdCk7XFxcXG4gICAgfVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0oumhtemdolxcXCIsXFxcInBhdGhcXFwiOlxcXCJzb3VwXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmlmIChNWV9QQVJBTVMua2V5ICYmIGdldE15VmFyKFxcXFxcXFwidXNlXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICBwdXRNeVZhcihcXFxcXFxcInNvdVxcXFxcXFwiLCBNWV9QQVJBTVMua2V5KTtcXFxcbiAgICBwdXRNeVZhcihcXFxcXFxcInVzZVxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIik7XFxcXG4gICAgYWRkTGlzdGVuZXIoXFxcXFxcXCJvbkNsb3NlXFxcXFxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICBjbGVhck15VmFyKFxcXFxcXFwidXNlXFxcXFxcXCIpO1xcXFxuICAgIH0pKTtcXFxcbn1cXFxcbiQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3BybycpXFxcIn1dXCIsXCJwcm94eVwiOlwiXCJ9IiwidGl0bGUiOiIxRE0rK+OAjOWOn0lETSvjgI0gdjE1Ljkg5L+u5pS55pyA57uI54mIIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement