Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥名侦探柯南:万圣节的新娘@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+ino+aekFwiLFwicGF0aFwiOlwicFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmxldCBodG1sID0gcmVxdWVzdCh1cmwpO1xcbmxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG5sZXQgYXJyID0gYWxpc3QubWFwKGl0ID0+IHtcXG4gICAgcmV0dXJuIHtcXG4gICAgICAgIC8vaHRtbDogaXQsXFxuICAgICAgICB0ZXh0OiBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpLFxcbiAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJhJiZ0aXRsZVxcXCIpLFxcbiAgICAgICAgaHJlZjogcGQoaXQsIFxcXCJhJiZocmVmXFxcIiwgdXJsKVxcbiAgICB9XFxufSk7XFxuLy9sb2coYXJyKTtcXG5sZXQgZGVidWcgPSBmYWxzZTtcXG5cXG5mdW5jdGlvbiBjbGVhclRleHQoaXQpIHtcXG4gICAgcmV0dXJuIGl0LnJlcGxhY2UoL+esrHzpm4Z856ugL2csIFxcXCJcXFwiKTtcXG59XFxuXFxuZnVuY3Rpb24gaXNNb3ZpZShpdCkge1xcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBsZXQgdGl0ID0gaXQudGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgIGl0ID0gaXQudGV4dCB8fCBcXFwiXFxcIjtcXG4gICAgaWYgKGl0ID09IFxcXCJcXFwiIHx8IGl0Lmxlbmd0aCA+IDgpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICAvL+aOkumZpFxcbiAgICBsZXQgcmVnID0gL1xcXFwufOmrmOa4heebtOaSrXzlhpnnnJ/mjqjojZAvO1xcbiAgICBpZiAodGl0ICE9IFxcXCJcXFwiICYmICF0aXQuaW5jbHVkZXMoaXQpIHx8IHJlZy50ZXN0KGl0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIHJldHVybiBpdC5tYXRjaCgv5Y6f55S7fOWkh+eUqHzok53lhYl86LaF5riFfOmrmOa4hXzmraPniYd86Z+p54mIfDRLfDRrfDEwODBQfDcyMFB8VEN8SER8QkQvKVxcbn1cXG5cXG5mdW5jdGlvbiBub3RDaGFwdGVyKGl0KSB7XFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gICAgcmV0dXJuIGl0LnRleHQubWF0Y2goL1swLTldXFxcXC5bMC05XeWIhi8pO1xcbn1cXG5cXG5mdW5jdGlvbiBpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkge1xcbiAgICBpZiAobm90Q2hhcHRlcihpdCkpIHtcXG4gICAgICAgIC8v5LyY5YWI5o6S6ZmkXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgLy/liKTmlq3mmK/kuI3mmK/nlLXlvbFcXG4gICAgaWYgKGlzTW92aWUoaXQpKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXNDaGFwdGVyMChpdCwgcHJlKSB8fCBpc0NoYXB0ZXIwKGl0LCBuZXh0KTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0Q2hhcHRlck51bShpdCkge1xcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgIHJldHVybiAtMTtcXG4gICAgfVxcbiAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgIGlmIChpdCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9XFxuICAgIGl0ID0gY2xlYXJUZXh0KGl0KTtcXG4gICAgbGV0IHJlZyA9IC9eWzAtOV0qJC87XFxuICAgIGlmICghcmVnLnRlc3QoaXQpKSB7XFxuICAgICAgICByZXR1cm4gLTE7XFxuICAgIH1cXG4gICAgaXQgPSBwYXJzZUludChpdCk7XFxuICAgIGlmIChpc05hTihpdCkpIHtcXG4gICAgICAgIHJldHVybiAtMTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXQ7XFxufVxcblxcbmZ1bmN0aW9uIGlzQ2hhcHRlcjAoaXQsIGJyb3RoZXIpIHtcXG4gICAgLyppZiAoZGVidWcpIHtcXG4gICAgICAgIGxvZyh7XFxuICAgICAgICAgICAgaXQ6IGl0LFxcbiAgICAgICAgICAgIGJyb3RoZXI6IGJyb3RoZXJcXG4gICAgICAgIH0pO1xcbiAgICB9Ki9cXG4gICAgaXQgPSBnZXRDaGFwdGVyTnVtKGl0KTtcXG4gICAgLy9pZiAoZGVidWcpIGxvZyhpdCk7XFxuICAgIGlmIChpdCA8IDApIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBicm90aGVyID0gZ2V0Q2hhcHRlck51bShicm90aGVyKTtcXG4gICAgLy9pZiAoZGVidWcpIGxvZyhicm90aGVyKTtcXG4gICAgaWYgKGJyb3RoZXIgPCAwKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIGl0IC0gYnJvdGhlciA8IDIgJiYgaXQgLSBicm90aGVyID4gLTI7XFxufVxcblxcbmxldCBfd2ViID0gJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGxldCB1cmxzID0gX2dldFVybHMoKTtcXG4gICAgbGV0IHJlZyA9IC9cXFxcLmh0bWx8XFxcXC5jc3N8XFxcXC5qcy87XFxuICAgIGZvciAobGV0IGsgaW4gdXJscykge1xcbiAgICAgICAgaWYgKCFyZWcudGVzdCh1cmxzW2tdKSAmJiB1cmxzW2tdLm1hdGNoKC9cXFxcLm1wNHxcXFxcLm0zdTgvKSkge1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKHVybHNba10pO1xcbiAgICAgICAgICAgIHJldHVybiBmeV9icmlkZ2VfYXBwLmdldEhlYWRlclVybCh1cmxzW2tdLnJlcGxhY2UoLy4qP3VybD0vLCBcXFwiXFxcIikpICsgXFxcIiNpZ25vcmVJbWc9dHJ1ZSNcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxufSk7XFxuXFxubGV0IHdlYiA9IGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcIjFcXFwiO1xcblxcbmZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgbGV0IHQgPSBpdC50ZXh0O1xcbiAgICBpZiAoIWl0LmhyZWYgfHwgaXQuaHJlZiA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgY29udGludWU7XFxuICAgIH1cXG4gICAgbGV0IHByZSA9IGkgPT0gMCA/IG51bGwgOiBhcnJbaSAtIDFdO1xcbiAgICBsZXQgbmV4dCA9IGkgPT0gKGFyci5sZW5ndGggLSAxKSA/IG51bGwgOiBhcnJbaSArIDFdO1xcbiAgICBpZiAoaXNDaGFwdGVyKGl0LCBwcmUsIG5leHQpKSB7XFxuICAgICAgICBpZiAod2ViKSB7XFxuICAgICAgICAgICAgdmFyIHVybHggPSBcXFwid2ViUnVsZTovL1xcXCIgKyBpdC5ocmVmICsgXFxcIkBcXFwiICsgX3dlYjtcXG4gICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcbiAgICAgICAgICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcbiAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5tNGEnLCAnLm1wMycsICcuZmx2JywgJy5hdmknLCAnLjNncCcsICcubXBlZycsICcud212JywgJy5tb3YnLCAnLnJtdmInLCAnLmdpZicsICcuanBlZycsICcucG5nJywgJy5pY28nLCAnLnN2ZyddXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIHVybHggPSBcXFwidmlkZW86Ly9cXFwiICsgaXQuaHJlZjtcXG4gICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcbiAgICAgICAgICAgICAgICBpZDogaXQuaHJlZlxcbiAgICAgICAgICAgIH07XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0LFxcbiAgICAgICAgICAgIHVybDogdXJseCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IGV4dHJheFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuaWYgKGQubGVuZ3RoID09IDApIHtcXG4gICAgLy/ljLnphY3lpLHotKVcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiZmxvYXQmJjEwMCVcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGNhbkJhY2s6IHRydWVcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHRvYXN0KFxcXCJBSeWMuemFjeWksei0pe+8jOW3suS9v+eUqFg15Yqg6L29XFxcIik7XFxuICAgIHNldFJlc3VsdChkKTtcXG59IGVsc2Uge1xcbiAgICAvL+S4uue6v+i3r+WKoOWIhuWJsue6v1xcbiAgICBsZXQgZDIgPSBbXTtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBkMi5wdXNoKGRbaV0pO1xcbiAgICAgICAgaWYgKGkgPCBkLmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICBsZXQgaXQgPSBkW2ldO1xcbiAgICAgICAgICAgIGxldCB0MSA9IHBhcnNlSW50KGNsZWFyVGV4dChpdC50aXRsZSkpO1xcbiAgICAgICAgICAgIGxldCBuZXh0ID0gZFtpICsgMV07XFxuICAgICAgICAgICAgbGV0IHQyID0gcGFyc2VJbnQoY2xlYXJUZXh0KG5leHQudGl0bGUpKTtcXG4gICAgICAgICAgICBpZiAodDIgLSB0MSA+IDEgfHwgdDEgLSB0MiA+IDEpIHtcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHNldFJlc3VsdChkMik7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLmkJzntKLmtYvor5VcIixcInBhdGhcIjpcInNcIixcInJ1bGVcIjpcImpzOlxcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcInVcXFwiKSk7XFxubG9nKHVybCk7XFxubGV0IGtleSA9IGdldFBhcmFtKFxcXCJrZXlcXFwiKTtcXG5sZXQgc3AgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zcFxcXCIpO1xcbnNldFJlc3VsdChzcCh1cmwsIGtleSwgXFxcIuaQnOe0oua1i+ivlVxcXCIpKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiBmuWQiOaQnOe0olwiLFwicGF0aFwiOlwicHJvXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb3VcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInNvXFxcIik7XFxuICAgIH0pKTtcXG59XFxuXFxubGV0IHMgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpO1xcbmxldCByID0gXFxcIlxcXCI7XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcbiAgICBsZXQge1xcbiAgICAgICAgbG9hZFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpO1xcbiAgICBsZXQge1xcbiAgICAgICAgd3JhcFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBsZXQgZGF0YSA9IGxvYWQocCwgciAhPSBcXFwiXFxcIiA/IHIgOiBudWxsKTtcXG5cXG4gICAgbGV0IHBhZ2VpZCA9IE1ZX1JVTEUudGl0bGUgKyBcXFwiLXBhZ2VcXFwiICsgcDtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBwICsgXFxcIumhteS4re+8jOi/m+W6pu+8mjEvXFxcIiArIGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFwiXFxcIiA9PSByID8gMSA6IHA7XFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHBhcmFtOiBpdCxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXCJydWxlQFxcXCIgKyBpdC5uYW1lXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcImxpc3RlbmVyOiBcXFwiICsgKHJlc3VsdCB8fCBbXSkubGVuZ3RoKVxcbiAgICAgICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwKGl0LnRpdGxlLCBzKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBpdC5leHRyYVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICBsZXQge1xcbiAgICAgICAgbG9hZFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpO1xcbiAgICBsZXQgZGF0YSA9IGxvYWQoLTEsIG51bGwpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW5hZ2VcXFwiKShkLCBkYXRhLm1hcChpdCA9PiBpdC5uYW1lKSk7XFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBkYXRhKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuivt+mAieaLqeaTjeS9nFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2w6IDEsXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbXFxcIuiuv+mXrummlumhtVxcXCIsIFxcXCLmkJzntKLmraTnq5lcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuiuv+mXrummlumhtVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcIng1Oi8vXFxcIiArIGdldEhvbWUodXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZXNcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgaXQudXJsKVxcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi56aB55SoXFxcIiArIGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcXFwi56Gu6K6k5Yig6Zmk56aB55SoXFxcIiArIG5hbWUgKyBcXFwi5ZCX77yfXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG5hbWUsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGE/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCBNWV9SVUxFLnRpdGxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0Lm5hbWUpXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLorr/pl67pppbpobVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiBcXFwiJ3g1Oi8vXFxcIiArIGdldEhvbWUoaXQudXJsKSArIFxcXCInXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5pCc57Si5q2k5rqQXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogXFxcIidoaWtlcjovL3BhZ2Uvc2luZ2xlcydcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5o2uXCIsXCJwYXRoXCI6XCJkYXRhXCIsXCJydWxlXCI6XCIvL+W5tuWPkeinhOWImeaVsFxcbmxldCBzaXplMCA9IDEwO1xcbmxldCBydWxlc1RleHQwID0gYDEu5b2x6KeG5bel5Y6CQGh0dHBzOi8vd3d3LnlzZ2MuY2Mvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbjIu6JuL6JuLQGh0dHBzOi8vd3d3LmRhbmRhbnphbjEwLnRvcC9zby8qKi0qKi0tLmh0bWxcXG40LueogOmlrUBodHRwczovL3d3dy54aWZhbnlzLmNvbS95aW5ncGlhbnNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG41Lui+vum+n0BodHRwczovL3d3dy5kYWRhZ3VpLm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcbjYu5Z+O5biCQGh0dHBzOi8vd3d3LmNpdHlkeS5jb20vc2VhcmNoLmh0bWw/d2Q9KipcXG5saWJ2aW9AaHR0cHM6Ly93d3cubGlidmlvLm1lL3NlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcbjcu5paw6KeGQGh0dHBzOi8vd3d3LjYwODBkeTEuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG44Lueci+eci3lAaHR0cHM6Ly93d3cua2tkeS5saXZlL3ZvZC1zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxuOS7ppa3lm6JAaHR0cHM6Ly93d3cuZmFudHVhbmhkLmNvbS9zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxuMTAu6YeR5pu8QGh0dHBzOi8vamlubWFudHYuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcXG7lnKjnur/nlLXlvbFAaHR0cHM6Ly93d3cuemFpeGlhbmRpYW55aW5nOC5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxu56We6ams5b2x6ZmiQGh0dHBzOi8vd3d3LmlzbTYuY29tL2luZGV4LnBocD9zPXZvZC1zZWFyY2hcXG7lhY3nmoRAaHR0cHM6Ly93d3cuZnJlZW9rLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu54mb6amsQGh0dHBzOi8vd3d3Lm5pdW1hdHYuY2Mvdm9kc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcbuWFjei0uUBodHRwczovL3d3dy50aGVmcmVlLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu6I6r5omO5YWUQGh0dHBzOi8vd3d3Lm1vemhhdHUuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcXG7pnLnpm7NAaHR0cHM6Ly9wbHlpbmdzaGkuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7ljoLplb9AaHR0cHM6Ly93d3cuY3pzcHAuY29tL3hzc2VhcmNoP3E9KipcXG5WT0ZAaHR0cHM6Ly93d3cudm9mbGl4LmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu55S15b2xQGh0dHBzOi8vd3d3LmFwcG1vdmllLmNjL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcbui/veWJp0BodHRwOi8vempkci52aXAvdm9kL3NlYXJjaC93ZC8qKi5odG1sXFxu55av54uXQGh0dHBzOi8vbS5mZW5nZ291ZHkzLmNvbS9pbmRleC5waHA/cz12b2Qtc2VhcmNoLW5hbWUmd2Q9KipcXG7lnKjnur9AaHR0cHM6Ly96eHpqLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXG7kuIPkuINAaHR0cDovL2FhYXNvZmEuY29tL3NlYXJjaC5waHBcXG7ljJflt51AaHR0cHM6Ly93d3cuYmN3emcuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLz93ZD0qKlxcbkVGQGh0dHBzOi8vd3d3LnBpbGk1LmNuL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcbuW9seWutkBodHRwOi8veXN6anZpcC5jb20vaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKlxcbuS6lOS6lEBodHRwczovLzU1NWR5LmNjL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7muKPmvKtAaHR0cHM6Ly93d3cuZG0yMDIyLmNvbS92b2RzZWFyY2guaHRtbD93ZD0qKlxcbuWcqOWutkBodHRwczovL3p4emoudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcbnBpYeW6k0BodHRwczovL20ucGlha3UuY2Mvcy8tLS0tLS0tLS0tLS0tLz93ZD0qKlxcbuaegeWTgUBodHRwczovL3d3dy5qcHlzLm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7oib7ov6pAaHR0cHM6Ly9haWRpLnR2L3ZzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXG7kuZ3lt55AaHR0cDovL3d3dy5qaXV6aG91OTExLmNvbS9zZWFyY2gucGhwP3NlYXJjaHdvcmQ9KipcXG7ljYHljYNAaHR0cDovL3d3dy5xaWFuc2hpaG91c2UuY29tL3NyaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7puqbniYdAaHR0cDovL20ubHkzNjguY29tL2luZGV4LnBocD9zPXZvZC1tX3MtbmFtZSZ3ZD0qKlxcbueUteW9seeJm0AgaHR0cHM6Ly93d3cuZGlhbnlpbmduLmNjL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7kurrkurrlvbHop4ZAaHR0cHM6Ly93d3cucnR0a3MuY29tL3Jyc28uaHRtbD93ZD0qKlxcbuengeS6ukBodHRwczovL3NvdW1rLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu5pif6L6wQGh0dHA6Ly93d3cucWhkZGouY29tLmNuL3hjeXlzZWFyY2gvKiotLS0tLS0tLS0tLS0tLmh0bWxcXG5Db2tldllAaHR0cHM6Ly9jb2tlbXYubWUvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbueIseeci3lAaHR0cHM6Ly9pa2FuNi52aXAvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0vP3dkPSoqJnN1Ym1pdD1cXG7lubLppa1weUBodHRwczovL3d3dy5nZnlzeXMxLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu5aSp56m6eUBodHRwOi8vdGt6bnAuY29tL3ZvZHNlYXJjaC5odG1sP3dkPSoqXFxu6JOd5YWJQGh0dHBzOi8vd3d3LmxneXkuY2Mvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbuS9juerr0BodHRwczovL2RkeXMudHYvP3M9KiomcG9zdF90eXBlPXBvc3RcXG7liqrliqpAaHR0cHM6Ly93d3cubnVudXl5My5vcmcvc28vKiotKiotLS5odG1sXFxu55+z5qa0QGh0dHBzOi8vaGVpMTkuY29tL3NlYXJjaD90eXBlPTEma2V5d29yZHM9KipgO1xcbmxldCBydWxlc1RleHQgPSBnZXRJdGVtKFxcXCJydWxlc1xcXCIsIHJ1bGVzVGV4dDApO1xcbmxldCBzcCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcIik7XFxucnVsZXMgPSBydWxlc1RleHQuc3BsaXQoXFxcIlxcXFxuXFxcIilcXG4gICAgLmZpbHRlcihpdCA9PiBpdC5pbmNsdWRlcyhcXFwiQFxcXCIpKVxcbiAgICAubWFwKHJ1bGUgPT4ge1xcbiAgICAgICAgbGV0IHMgPSBydWxlLnNwbGl0KFxcXCJAXFxcIik7XFxuICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgIG5hbWU6IHNbMF0sXFxuICAgICAgICAgICAgZmluZDogZnVuY3Rpb24oa2V5LCBwYWdlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBzcChzWzFdLCBrZXksIHNbMF0pO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdXJsOiBzWzFdXFxuICAgICAgICB9O1xcbiAgICB9KTtcXG5cXG5mdW5jdGlvbiBsb2FkKHBhZ2UsIHJ1bGUpIHtcXG4gICAgbGV0IHNpemUgPSBwYWdlIDw9IDAgPyBydWxlcy5sZW5ndGggOiBzaXplMDtcXG4gICAgcGFnZSA9IHBhZ2UgPD0gMCA/IDEgOiBwYWdlO1xcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxuICAgIH1cXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlID4gMSkge1xcbiAgICAgICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSAmJiBpLnBhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXG4gICAgfVxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcbiAgICAgICAgcmV0dXJuIFtdO1xcbiAgICB9XFxuICAgIGxldCBsZW4gPSBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgcGFnZSAqIHNpemUpIHtcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxuICAgIH1cXG4gICAgcmV0dXJuIHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbik7XFxufVxcblxcbmZ1bmN0aW9uIGFkZFJ1bGUobmFtZSwgc3VybCkge1xcbiAgICBzZXRJdGVtKFxcXCJydWxlc1xcXCIsIHJ1bGVzVGV4dCArIFxcXCJcXFxcblxcXCIgKyBuYW1lICsgXFxcIkBcXFwiICsgc3VybCk7XFxufVxcblxcbmZ1bmN0aW9uIHJlbW92ZVJ1bGUobmFtZSkge1xcbiAgICBsZXQgbmV3VCA9IHJ1bGVzVGV4dC5zcGxpdChcXFwiXFxcXG5cXFwiKVxcbiAgICAgICAgLmZpbHRlcihpdCA9PiBpdC5pbmRleE9mKG5hbWUgKyBcXFwiQFxcXCIpIDwgMClcXG4gICAgICAgIC5qb2luKFxcXCJcXFxcblxcXCIpO1xcbiAgICBzZXRJdGVtKFxcXCJydWxlc1xcXCIsIG5ld1QpO1xcbn1cXG5cXG4kLmV4cG9ydHMgPSB7XFxuICAgIGxvYWQ6IGxvYWQsXFxuICAgIGFkZFJ1bGU6IGFkZFJ1bGUsXFxuICAgIHJlbW92ZVJ1bGU6IHJlbW92ZVJ1bGVcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLop6PmnpBcIixcInBhdGhcIjpcInNwXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBzZWFyY2godXJsLCBrZXksIHJ1bGUpIHtcXG4gICAgbGV0IGQgPSBbXTtcXG4gICAgbGV0IGh0bWwgPSBcXFwiXFxcIjtcXG4gICAgaWYgKHVybC5pbmNsdWRlcyhcXFwiKipcXFwiKSkge1xcbiAgICAgICAgLy9nZXTor7fmsYJcXG4gICAgICAgIGxldCBvbGQgPSB1cmw7XFxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcXFwiKipcXFwiLCBrZXkpO1xcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXG4gICAgICAgIC8v6Ieq5Yqo6L+H6aqM6K+B56CB5ZKM6aKR57mB6K6/6Zeu6ZmQ5Yi2XFxuICAgICAgICBsZXQge1xcbiAgICAgICAgICAgIGNoZWNrLCB0ZXN0XFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveXptXFxcIik7XFxuICAgICAgICBpZiAoY2hlY2sodXJsLCBodG1sLCBkKSkge1xcbiAgICAgICAgICAgIGxvZyhcXFwi6YeN6K+V5LqGXFxcIik7XFxuICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogdXJsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTsgICAgICAgICAgIFxcbiAgICAgICAgfSAgICAgICAgIFxcbiAgICAgICAgdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8v6Ieq5Yqo6K+G5YircG9zdOivt+axglxcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXG4gICAgICAgIGxldCBmb3JtID0gcGRmaChodG1sLCBcXFwiYm9keSYmZm9ybSYmSHRtbFxcXCIpO1xcbiAgICAgICAgbGV0IGFjdGlvbiA9IHBkKGh0bWwsIFxcXCJmb3JtJiZhY3Rpb25cXFwiLCB1cmwpO1xcbiAgICAgICAgbGV0IGlucHV0cyA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmZvcm0mJmlucHV0XFxcIik7XFxuICAgICAgICBsZXQgYm9keSA9IHt9O1xcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgaW5wdXRzKSB7XFxuICAgICAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCBcXFwiaW5wdXQmJm5hbWVcXFwiKTtcXG4gICAgICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBkZmgoaXQsIFxcXCJpbnB1dCYmdmFsdWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgYm9keVtuYW1lXSA9IHZhbHVlIHx8IGtleTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBodG1sID0gcG9zdChhY3Rpb24sIHtcXG4gICAgICAgICAgICBib2R5OiBib2R5XFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbiAgICBsZXQgYWxpc3QgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiZhXFxcIik7XFxuICAgIGxldCBhcnIgPSBhbGlzdC5tYXAoaXQgPT4ge1xcbiAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpO1xcbiAgICAgICAgbGV0IHQyID0gcGRmaChpdCwgXFxcImEmJnRpdGxlXFxcIik7XFxuICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgIC8vaHRtbDogaXQsXFxuICAgICAgICAgICAgdGV4dDogdDIgJiYgdDIuaW5jbHVkZXMoa2V5KSA/IHQyIDogdCxcXG4gICAgICAgICAgICBocmVmOiBwZChpdCwgXFxcImEmJmhyZWZcXFwiLCB1cmwpXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbiAgICBmdW5jdGlvbiBpc1Jlc3VsdChpdCkge1xcbiAgICAgICAgaXQgPSBpdC50ZXh0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGl0ID09IFxcXCJcXFwiIHx8IGl0Lm1hdGNoKC/mkJzntKJ857uT5p6cLykpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpdC5pbmNsdWRlcyhrZXkpO1xcbiAgICB9XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICBsZXQgdCA9IGl0LnRleHQ7XFxuICAgICAgICBpZiAoIWl0LmhyZWYgfHwgaXQuaHJlZiA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGlzUmVzdWx0KGl0KSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0LFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcD91PVxcXCIgKyBiYXNlNjRFbmNvZGUoaXQuaHJlZiksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXCIgKyBydWxlICsgXFxcIjwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGQ7XFxufVxcbiQuZXhwb3J0cyA9IHNlYXJjaDtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWinuWIoFwiLFwicGF0aFwiOlwibWFuYWdlXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSBmdW5jdGlvbihkLCBuYW1lcykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJBSeaKgOacr1xcXCIsXFxuICAgICAgICB1cmw6IFxcXCJjb25maXJtOi8v5Z+65LqOQUnor4bniYfoh6rliqjliIbmnpDmupDnoIHmioDmnK/vvIzku6PnoIHlrozlhajlvIDmupDvvIzmlbDmja7mnaXmupDkuo7ljp/nvZHnq5nvvIzova/ku7blkozop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrkuanM6JydcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcIjBcXFwiID8gXFxcIuinhumikeWXheaOolxcXCIgOiBcXFwiV2Vi6YCa5YWNXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcxJylcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCd3ZWInLCAnMCcpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiICsgXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocnIpID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoXFxcImFpYWRkXFxcIik7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHJyICsgXFxcImFpc2RlbFxcXCIsIFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5ZCN56ewXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ25hbWUnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6K+36L6T5YWl572R56uZ5pCc57Si5Zyw5Z2AXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3N1cmwnLCBpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcImFpYWRkXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaPkOS6pOS/neWtmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VybCA9IGdldE15VmFyKFxcXCJzdXJsXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcIm5hbWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cmwgPT0gXFxcIlxcXCIgfHwgbmFtZSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5a6M5pW05YaF5a65XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGRlY29kZVVSSUNvbXBvbmVudChzdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gci5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIltcXFxcdTRlMDAtXFxcXHU5ZmE1XStcXFwiLCBcXFwiZ1xcXCIpLCBcXFwiKipcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlKG5hbWUsIHIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suS/neWtmFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwiYWlhZGRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBdKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBNWV9SVUxFLnRpdGxlKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiIC0gXFxcIixcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogbmFtZXMsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLor7fpgInmi6nopoHliKDpmaTnmoTnq5nngrlcXFwiLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgXFxcImFpc2RlbFxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KTtcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpqozor4HnoIFcIixcInBhdGhcIjpcInl6bVwiLFwicnVsZVwiOlwiZnVuY3Rpb24gY2hlY2sodXJsLCBodG1sLCBkKSB7XFxuICAgIGxldCByZWxvYWQgPSBmYWxzZTtcXG4gICAgaWYgKC/pqozor4HnoIF857O757uf5a6J5YWo6aqM6K+BLy50ZXN0KGh0bWwpKSB7XFxuICAgICAgICBsZXQgaGVhZGVycyA9IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IHVybFxcbiAgICAgICAgfTtcXG4gICAgICAgIE1ZX0hPTUUgPSBnZXRIb21lKHVybCk7XFxuICAgICAgICBsZXQgc3N5eiA9ICdUbG9Hbm5pa1RocmZzLzVmRE5sazVDU3NiYUd0QUg3Vy91TVpqdVlvSXVwQjZiQ29vOUNvdExRSGZQSWRHZ2JrYnluS3FMMmFVRTJYeTU1OFgyUXhIWXRUVTA5dkQrNG9hQ0RJdVNaTzdueERiTGZSR2ZXajd6cWwreU1idkYrYUpvRC9tNlBzZncvUHlZT0FwL1pWR2RyUHphQ0J5ZmQwSEw1REZWU3crWUYyT0M0MFY4U1A5UnhkRktLZHJCdVB4Q1dkeFVDRnJKKzFsUnkvVFUzTEM4NEM0eHhFQmhndWQ3UnRCcDB6WkFycUJFMDYrWjNKdERQMGVGQ3ovRDVYMDQwOXFQSEszZTF5L0x1VWdjY3V4cEhuallMRTFHamxQOHdZQTJoUVdlN3lQbmdnZ1FCSHczMy9ndmIzdHVDY3hFS1RXZ21haC9SMzJBSDlaRjhqRjdXZW1UMjZsVWl6VlhlL3NwQ2RoRGdIUi96VWhPREQ0UE82Z2xJOEpQaGR1K1Z3ZlB5UkxHMkQ3Q1VvMUw2U0lGKzBmWWYwb1RPV04xM1VQSVRvNSt1WmQvV25RUUxVOE5ZeC9XRkNUaEVua2J6bG45WUd0NjBmUnhzSCs4dU1ERmdhQmlDK3oyU3BjeEI5Z1o2R1h5cExTWFdhaitxRVViR0pLRXgraksvdjVmbnJrSWhDZHdOYmtwOWRSa3M2ZG1sWWxCaWZ6b1dGOFJrdUMzcnFQdG9TY0JrTU9NWnU3R2lWdG9IRWRIVW96bW5VSWRyVTFMR0lxcTlXbkc3WDJhM3lIOHM2NW1qTHVMbmQzcTBVOHYrTE1QbkhMMi9HalF1VFFLVmgrUktFUHFLL0pkckNoR0xOcmpjSHZMSERiSEVzaHJHWnVRT2RFcGhieC9Qa2hrdmFZeTRLMU1PODRSMTdndVJzS3MvVjZuaVVQYUwrWGJRN2MzZnFKUzRWSEp3bHVkSlREZTAyZXVmZkdDbTBQSklQbEFPZ0xIblgwaXpKaEE2cTczOFIyVXdRY1dCUWpKdDc5YUYra3lxU2R5dDFRUFZRVmphQzNJcFJmN1Bnc0RoRUo3Ymk5blNjbHlJemdKOURDSjRUKzhkRzF4SGhLeVphc1Q3TC94OUxmcjFNZ3M4bkJaRVIyVzlheDdpVGtOSytYNUFDVS8vcC9Zb1AvdUFhbkR0YjNEMGlLVVV1WEZIK0piYjB4MVAzMjJTMnc2Qko0Nm51TkhCTUhUcFZ1V3doWmVaenJpR2g3cW9PeXdMV2lFeEJNS3l4VEdMbm1LaDdyMDMveVhLWVdJSm5wQk4yTU15Y1ZIUlpKN1J1bUhWNENJc1ZycTdpUlA0ODgyM1JKVnQ5T3R5UDd1dWMzd0JCVjNrY1pVemJiYVlkV0J4MStBdStPZDJ1N2xSNmpvT0w4MTBtY0ptL2Y3SjVUdkdRUDZIR3BoMVlISFg0Qzc0NTNhN3VWSHFPZ3lqamg1RUJkNzIwTUVCWTIzYytUS3EvejlVcFdERE9nNDhaRm53U0loRnFpdFdkaVppcXNhWXVOMC9TWHdpSzhFRzllUTI5dTJYREpvRFc0bWx3dGNSTzd2YVg1WGNGc2dmNC9tTFUwN21pJztcXG4gICAgICAgIGV2YWxQcml2YXRlSlMoc3N5eik7XFxuXFxuICAgICAgICBsZXQgdmNvZGUgPSBnZXRWQ29kZTIoTVlfSE9NRSArICcvaW5kZXgucGhwL3ZlcmlmeS9pbmRleC5odG1sPycsIEpTT04uc3RyaW5naWZ5KGhlYWRlcnMpLCAnbnVtJyk7XFxuICAgICAgICBmZXRjaChNWV9IT01FICsgaHRtbC5tYXRjaCgvXFxcXC9pbmRleC5waHAuKj92ZXJpZnk9LylbMF0gKyBKU09OLnBhcnNlKHZjb2RlKS5yZXQsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJlbG9hZCA9IHRydWU7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlbG9hZDtcXG59XFxuXFxuZnVuY3Rpb24gdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKSB7XFxuICAgIGlmICgvNeenknzpopHnuYEvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmkJzntKLpnIDpl7TpmpQ156eS77yM54K55Ye76YeN5paw5Yqg6L29JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXCIgKyBydWxlICsgXFxcIjwvZm9udD5cXFwiLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh1cmwsIG9sZCwga2V5LCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBzcCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBkID0gc3Aob2xkLCBrZXksIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgd3JhcFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBkKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIGtleSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHVybCwgZCk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0odXJsKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgICAgICB9LCB1cmwsIG9sZCwga2V5LCBydWxlKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogdXJsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBjaGVjazogY2hlY2ssXFxuICAgIHRlc3Q6IHRlc3RcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHdyYXAodGV4dCwgcykge1xcbiAgICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyB0ZXh0IDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiPGVtPnw8L2VtPlxcXCIsIFxcXCJnXFxcIiksIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKVxcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHdyYXA6IHdyYXBcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLljZXmkJxcIixcInBhdGhcIjpcInNpbmdsZXNcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInNvXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJzb1xcXCIsIFxcXCJcXFwiKVxcbiAgICB9XFxufSk7XFxubGV0IHMgPSBnZXRNeVZhcihcXFwic29cXFwiLCBcXFwiXFxcIik7XFxubGV0IHIgPSBcXFwiXFxcIjtcXG5pZiAocyAhPSBcXFwiXFxcIikge1xcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxuICAgIGxldCB7XFxuICAgICAgICBsb2FkXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIik7XFxuICAgIGxldCB7XFxuICAgICAgICB3cmFwXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgIGxldCBkYXRhID0gbG9hZChwLCBNWV9QQVJBTVMuUlVMRS5uYW1lKTtcXG4gICAgbGV0IGFyciA9IGRhdGFbMF0uZmluZChzLCBwKTtcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBpdC50aXRsZSA9IHdyYXAoaXQudGl0bGUsIHMpXFxuICAgICAgICBkLnB1c2goaXQpO1xcbiAgICB9XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oumhtemdolwiLFwicGF0aFwiOlwic291cFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLmtleSAmJiBnZXRNeVZhcihcXFwidXNlXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG4gICAgcHV0TXlWYXIoXFxcInVzZVxcXCIsIFxcXCIxXFxcIik7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ1c2VcXFwiKTtcXG4gICAgfSkpO1xcbn1cXG4kLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVwifV0sXCJwYXJhbXNcIjpcIntcXFwiaW5oZXJpdFRpdGxlXFxcIjpmYWxzZX1cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwiQUnlvbHmkJxcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2UvcD91PWFIUjBjSE02THk5NmVIcHFMblpwY0M5a1pYUmhhV3d2TXprNU5TNW9kRzFzXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcInVcXFwiKSk7XFxubGV0IGh0bWwgPSByZXF1ZXN0KHVybCk7XFxubGV0IGFsaXN0ID0gcGRmYShodG1sLCBcXFwiYm9keSYmYVxcXCIpO1xcbmxldCBhcnIgPSBhbGlzdC5tYXAoaXQgPT4ge1xcbiAgICByZXR1cm4ge1xcbiAgICAgICAgLy9odG1sOiBpdCxcXG4gICAgICAgIHRleHQ6IHBkZmgoaXQsIFxcXCJhJiZUZXh0XFxcIiksXFxuICAgICAgICB0aXRsZTogcGRmaChpdCwgXFxcImEmJnRpdGxlXFxcIiksXFxuICAgICAgICBocmVmOiBwZChpdCwgXFxcImEmJmhyZWZcXFwiLCB1cmwpXFxuICAgIH1cXG59KTtcXG4vL2xvZyhhcnIpO1xcbmxldCBkZWJ1ZyA9IGZhbHNlO1xcblxcbmZ1bmN0aW9uIGNsZWFyVGV4dChpdCkge1xcbiAgICByZXR1cm4gaXQucmVwbGFjZSgv56ysfOmbhnznq6AvZywgXFxcIlxcXCIpO1xcbn1cXG5cXG5mdW5jdGlvbiBpc01vdmllKGl0KSB7XFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIGxldCB0aXQgPSBpdC50aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgaXQgPSBpdC50ZXh0IHx8IFxcXCJcXFwiO1xcbiAgICBpZiAoaXQgPT0gXFxcIlxcXCIgfHwgaXQubGVuZ3RoID4gOCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIC8v5o6S6ZmkXFxuICAgIGxldCByZWcgPSAvXFxcXC586auY5riF55u05pKtfOWGmeecn+aOqOiNkC87XFxuICAgIGlmICh0aXQgIT0gXFxcIlxcXCIgJiYgIXRpdC5pbmNsdWRlcyhpdCkgfHwgcmVnLnRlc3QoaXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIGl0Lm1hdGNoKC/ljp/nlLt85aSH55SofOiTneWFiXzotoXmuIV86auY5riFfOato+eJh3zpn6nniYh8NEt8NGt8MTA4MFB8NzIwUHxUQ3xIRHxCRC8pXFxufVxcblxcbmZ1bmN0aW9uIG5vdENoYXB0ZXIoaXQpIHtcXG4gICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXQudGV4dC5tYXRjaCgvWzAtOV1cXFxcLlswLTld5YiGLyk7XFxufVxcblxcbmZ1bmN0aW9uIGlzQ2hhcHRlcihpdCwgcHJlLCBuZXh0KSB7XFxuICAgIGlmIChub3RDaGFwdGVyKGl0KSkge1xcbiAgICAgICAgLy/kvJjlhYjmjpLpmaRcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICAvL+WIpOaWreaYr+S4jeaYr+eUteW9sVxcbiAgICBpZiAoaXNNb3ZpZShpdCkpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuICAgIHJldHVybiBpc0NoYXB0ZXIwKGl0LCBwcmUpIHx8IGlzQ2hhcHRlcjAoaXQsIG5leHQpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRDaGFwdGVyTnVtKGl0KSB7XFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9XFxuICAgIGl0ID0gaXQudGV4dCB8fCBcXFwiXFxcIjtcXG4gICAgaWYgKGl0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gLTE7XFxuICAgIH1cXG4gICAgaXQgPSBjbGVhclRleHQoaXQpO1xcbiAgICBsZXQgcmVnID0gL15bMC05XSokLztcXG4gICAgaWYgKCFyZWcudGVzdChpdCkpIHtcXG4gICAgICAgIHJldHVybiAtMTtcXG4gICAgfVxcbiAgICBpdCA9IHBhcnNlSW50KGl0KTtcXG4gICAgaWYgKGlzTmFOKGl0KSkge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9XFxuICAgIHJldHVybiBpdDtcXG59XFxuXFxuZnVuY3Rpb24gaXNDaGFwdGVyMChpdCwgYnJvdGhlcikge1xcbiAgICAvKmlmIChkZWJ1Zykge1xcbiAgICAgICAgbG9nKHtcXG4gICAgICAgICAgICBpdDogaXQsXFxuICAgICAgICAgICAgYnJvdGhlcjogYnJvdGhlclxcbiAgICAgICAgfSk7XFxuICAgIH0qL1xcbiAgICBpdCA9IGdldENoYXB0ZXJOdW0oaXQpO1xcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGl0KTtcXG4gICAgaWYgKGl0IDwgMCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIGJyb3RoZXIgPSBnZXRDaGFwdGVyTnVtKGJyb3RoZXIpO1xcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGJyb3RoZXIpO1xcbiAgICBpZiAoYnJvdGhlciA8IDApIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXQgLSBicm90aGVyIDwgMiAmJiBpdCAtIGJyb3RoZXIgPiAtMjtcXG59XFxuXFxubGV0IF93ZWIgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgbGV0IHVybHMgPSBfZ2V0VXJscygpO1xcbiAgICBsZXQgcmVnID0gL1xcXFwuaHRtbHxcXFxcLmNzc3xcXFxcLmpzLztcXG4gICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxuICAgICAgICBpZiAoIXJlZy50ZXN0KHVybHNba10pICYmIHVybHNba10ubWF0Y2goL1xcXFwubXA0fFxcXFwubTN1OC8pKSB7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxuICAgICAgICAgICAgcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXCJcXFwiKSkgKyBcXFwiI2lnbm9yZUltZz10cnVlI1xcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG59KTtcXG5cXG5sZXQgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKSA9PSBcXFwiMVxcXCI7XFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICBsZXQgdCA9IGl0LnRleHQ7XFxuICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb250aW51ZTtcXG4gICAgfVxcbiAgICBsZXQgcHJlID0gaSA9PSAwID8gbnVsbCA6IGFycltpIC0gMV07XFxuICAgIGxldCBuZXh0ID0gaSA9PSAoYXJyLmxlbmd0aCAtIDEpID8gbnVsbCA6IGFycltpICsgMV07XFxuICAgIGlmIChpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkpIHtcXG4gICAgICAgIGlmICh3ZWIpIHtcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXCJ3ZWJSdWxlOi8vXFxcIiArIGl0LmhyZWYgKyBcXFwiQFxcXCIgKyBfd2ViO1xcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLm00YScsICcubXAzJywgJy5mbHYnLCAnLmF2aScsICcuM2dwJywgJy5tcGVnJywgJy53bXYnLCAnLm1vdicsICcucm12YicsICcuZ2lmJywgJy5qcGVnJywgJy5wbmcnLCAnLmljbycsICcuc3ZnJ11cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXCJ2aWRlbzovL1xcXCIgKyBpdC5ocmVmO1xcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgdXJsOiB1cmx4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICBleHRyYTogZXh0cmF4XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5pZiAoZC5sZW5ndGggPT0gMCkge1xcbiAgICAvL+WMuemFjeWksei0pVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgY2FuQmFjazogdHJ1ZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgdG9hc3QoXFxcIkFJ5Yy56YWN5aSx6LSl77yM5bey5L2/55SoWDXliqDovb1cXFwiKTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbn0gZWxzZSB7XFxuICAgIC8v5Li657q/6Lev5Yqg5YiG5Ymy57q/XFxuICAgIGxldCBkMiA9IFtdO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGQyLnB1c2goZFtpXSk7XFxuICAgICAgICBpZiAoaSA8IGQubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgIGxldCBpdCA9IGRbaV07XFxuICAgICAgICAgICAgbGV0IHQxID0gcGFyc2VJbnQoY2xlYXJUZXh0KGl0LnRpdGxlKSk7XFxuICAgICAgICAgICAgbGV0IG5leHQgPSBkW2kgKyAxXTtcXG4gICAgICAgICAgICBsZXQgdDIgPSBwYXJzZUludChjbGVhclRleHQobmV4dC50aXRsZSkpO1xcbiAgICAgICAgICAgIGlmICh0MiAtIHQxID4gMSB8fCB0MSAtIHQyID4gMSkge1xcbiAgICAgICAgICAgICAgICBkMi5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkMi5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgc2V0UmVzdWx0KGQyKTtcXG59XCIsXCJncm91cFwiOlwi4pGg5bel5YW3XCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5LqM57qn6Kej5p6QXFxcIixcXFwicGF0aFxcXCI6XFxcInBcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxubGV0IHVybCA9IGJhc2U2NERlY29kZShnZXRQYXJhbShcXFxcXFxcInVcXFxcXFxcIikpO1xcXFxubGV0IGh0bWwgPSByZXF1ZXN0KHVybCk7XFxcXG5sZXQgYWxpc3QgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmYVxcXFxcXFwiKTtcXFxcbmxldCBhcnIgPSBhbGlzdC5tYXAoaXQgPT4ge1xcXFxuICAgIHJldHVybiB7XFxcXG4gICAgICAgIC8vaHRtbDogaXQsXFxcXG4gICAgICAgIHRleHQ6IHBkZmgoaXQsIFxcXFxcXFwiYSYmVGV4dFxcXFxcXFwiKSxcXFxcbiAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXFxcXFwiYSYmdGl0bGVcXFxcXFxcIiksXFxcXG4gICAgICAgIGhyZWY6IHBkKGl0LCBcXFxcXFxcImEmJmhyZWZcXFxcXFxcIiwgdXJsKVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuLy9sb2coYXJyKTtcXFxcbmxldCBkZWJ1ZyA9IGZhbHNlO1xcXFxuXFxcXG5mdW5jdGlvbiBjbGVhclRleHQoaXQpIHtcXFxcbiAgICByZXR1cm4gaXQucmVwbGFjZSgv56ysfOmbhnznq6AvZywgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIGlzTW92aWUoaXQpIHtcXFxcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgdGl0ID0gaXQudGl0bGUgfHwgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpdCA9IGl0LnRleHQgfHwgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAoaXQgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBpdC5sZW5ndGggPiA4KSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG4gICAgLy/mjpLpmaRcXFxcbiAgICBsZXQgcmVnID0gL1xcXFxcXFxcLnzpq5jmuIXnm7Tmkq185YaZ55yf5o6o6I2QLztcXFxcbiAgICBpZiAodGl0ICE9IFxcXFxcXFwiXFxcXFxcXCIgJiYgIXRpdC5pbmNsdWRlcyhpdCkgfHwgcmVnLnRlc3QoaXQpKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGl0Lm1hdGNoKC/ljp/nlLt85aSH55SofOiTneWFiXzotoXmuIV86auY5riFfOato+eJh3zpn6nniYh8NEt8NGt8MTA4MFB8NzIwUHxUQ3xIRHxCRC8pXFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIG5vdENoYXB0ZXIoaXQpIHtcXFxcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpdC50ZXh0Lm1hdGNoKC9bMC05XVxcXFxcXFxcLlswLTld5YiGLyk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIGlzQ2hhcHRlcihpdCwgcHJlLCBuZXh0KSB7XFxcXG4gICAgaWYgKG5vdENoYXB0ZXIoaXQpKSB7XFxcXG4gICAgICAgIC8v5LyY5YWI5o6S6ZmkXFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG4gICAgLy/liKTmlq3mmK/kuI3mmK/nlLXlvbFcXFxcbiAgICBpZiAoaXNNb3ZpZShpdCkpIHtcXFxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpc0NoYXB0ZXIwKGl0LCBwcmUpIHx8IGlzQ2hhcHRlcjAoaXQsIG5leHQpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBnZXRDaGFwdGVyTnVtKGl0KSB7XFxcXG4gICAgaWYgKGl0ID09IG51bGwgfHwgaXQudGV4dCA9PSBudWxsKSB7XFxcXG4gICAgICAgIHJldHVybiAtMTtcXFxcbiAgICB9XFxcXG4gICAgaXQgPSBpdC50ZXh0IHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgaWYgKGl0ID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgcmV0dXJuIC0xO1xcXFxuICAgIH1cXFxcbiAgICBpdCA9IGNsZWFyVGV4dChpdCk7XFxcXG4gICAgbGV0IHJlZyA9IC9eWzAtOV0qJC87XFxcXG4gICAgaWYgKCFyZWcudGVzdChpdCkpIHtcXFxcbiAgICAgICAgcmV0dXJuIC0xO1xcXFxuICAgIH1cXFxcbiAgICBpdCA9IHBhcnNlSW50KGl0KTtcXFxcbiAgICBpZiAoaXNOYU4oaXQpKSB7XFxcXG4gICAgICAgIHJldHVybiAtMTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGl0O1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBpc0NoYXB0ZXIwKGl0LCBicm90aGVyKSB7XFxcXG4gICAgLyppZiAoZGVidWcpIHtcXFxcbiAgICAgICAgbG9nKHtcXFxcbiAgICAgICAgICAgIGl0OiBpdCxcXFxcbiAgICAgICAgICAgIGJyb3RoZXI6IGJyb3RoZXJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSovXFxcXG4gICAgaXQgPSBnZXRDaGFwdGVyTnVtKGl0KTtcXFxcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGl0KTtcXFxcbiAgICBpZiAoaXQgPCAwKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG4gICAgYnJvdGhlciA9IGdldENoYXB0ZXJOdW0oYnJvdGhlcik7XFxcXG4gICAgLy9pZiAoZGVidWcpIGxvZyhicm90aGVyKTtcXFxcbiAgICBpZiAoYnJvdGhlciA8IDApIHtcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaXQgLSBicm90aGVyIDwgMiAmJiBpdCAtIGJyb3RoZXIgPiAtMjtcXFxcbn1cXFxcblxcXFxubGV0IF93ZWIgPSAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBsZXQgdXJscyA9IF9nZXRVcmxzKCk7XFxcXG4gICAgbGV0IHJlZyA9IC9cXFxcXFxcXC5odG1sfFxcXFxcXFxcLmNzc3xcXFxcXFxcXC5qcy87XFxcXG4gICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxcXG4gICAgICAgIGlmICghcmVnLnRlc3QodXJsc1trXSkgJiYgdXJsc1trXS5tYXRjaCgvXFxcXFxcXFwubXA0fFxcXFxcXFxcLm0zdTgvKSkge1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gZnlfYnJpZGdlX2FwcC5nZXRIZWFkZXJVcmwodXJsc1trXS5yZXBsYWNlKC8uKj91cmw9LywgXFxcXFxcXCJcXFxcXFxcIikpICsgXFxcXFxcXCIjaWdub3JlSW1nPXRydWUjXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59KTtcXFxcblxcXFxubGV0IHdlYiA9IGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcXFxcXCIxXFxcXFxcXCI7XFxcXG5cXFxcbmZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgIGxldCB0ID0gaXQudGV4dDtcXFxcbiAgICBpZiAoIWl0LmhyZWYgfHwgaXQuaHJlZiA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIGNvbnRpbnVlO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgcHJlID0gaSA9PSAwID8gbnVsbCA6IGFycltpIC0gMV07XFxcXG4gICAgbGV0IG5leHQgPSBpID09IChhcnIubGVuZ3RoIC0gMSkgPyBudWxsIDogYXJyW2kgKyAxXTtcXFxcbiAgICBpZiAoaXNDaGFwdGVyKGl0LCBwcmUsIG5leHQpKSB7XFxcXG4gICAgICAgIGlmICh3ZWIpIHtcXFxcbiAgICAgICAgICAgIHZhciB1cmx4ID0gXFxcXFxcXCJ3ZWJSdWxlOi8vXFxcXFxcXCIgKyBpdC5ocmVmICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBfd2ViO1xcXFxuICAgICAgICAgICAgdmFyIGV4dHJheCA9IHtcXFxcbiAgICAgICAgICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxcXG4gICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycubTRhJywgJy5tcDMnLCAnLmZsdicsICcuYXZpJywgJy4zZ3AnLCAnLm1wZWcnLCAnLndtdicsICcubW92JywgJy5ybXZiJywgJy5naWYnLCAnLmpwZWcnLCAnLnBuZycsICcuaWNvJywgJy5zdmcnXVxcXFxuICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciB1cmx4ID0gXFxcXFxcXCJ2aWRlbzovL1xcXFxcXFwiICsgaXQuaHJlZjtcXFxcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWZcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiB0LFxcXFxuICAgICAgICAgICAgdXJsOiB1cmx4LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYTogZXh0cmF4XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFxcbmlmIChkLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgLy/ljLnphY3lpLHotKVcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwiZmxvYXQmJjEwMCVcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGNhbkJhY2s6IHRydWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIHRvYXN0KFxcXFxcXFwiQUnljLnphY3lpLHotKXvvIzlt7Lkvb/nlKhYNeWKoOi9vVxcXFxcXFwiKTtcXFxcbiAgICBzZXRSZXN1bHQoZCk7XFxcXG59IGVsc2Uge1xcXFxuICAgIC8v5Li657q/6Lev5Yqg5YiG5Ymy57q/XFxcXG4gICAgbGV0IGQyID0gW107XFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgIGQyLnB1c2goZFtpXSk7XFxcXG4gICAgICAgIGlmIChpIDwgZC5sZW5ndGggLSAxKSB7XFxcXG4gICAgICAgICAgICBsZXQgaXQgPSBkW2ldO1xcXFxuICAgICAgICAgICAgbGV0IHQxID0gcGFyc2VJbnQoY2xlYXJUZXh0KGl0LnRpdGxlKSk7XFxcXG4gICAgICAgICAgICBsZXQgbmV4dCA9IGRbaSArIDFdO1xcXFxuICAgICAgICAgICAgbGV0IHQyID0gcGFyc2VJbnQoY2xlYXJUZXh0KG5leHQudGl0bGUpKTtcXFxcbiAgICAgICAgICAgIGlmICh0MiAtIHQxID4gMSB8fCB0MSAtIHQyID4gMSkge1xcXFxuICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJiaWdfYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJsaW5lX2JsYW5rXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBkMi5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuICAgIHNldFJlc3VsdChkMik7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLmtYvor5VcXFwiLFxcXCJwYXRoXFxcIjpcXFwic1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcXFxcXCJ1XFxcXFxcXCIpKTtcXFxcbmxvZyh1cmwpO1xcXFxubGV0IGtleSA9IGdldFBhcmFtKFxcXFxcXFwia2V5XFxcXFxcXCIpO1xcXFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcXFxcXCIpO1xcXFxuc2V0UmVzdWx0KHNwKHVybCwga2V5LCBcXFxcXFxcIuaQnOe0oua1i+ivlVxcXFxcXFwiKSk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6IGa5ZCI5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInByb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl5YWz6ZSu6K+N77yM5bC96YeP5bCR5a2X5LiN6KaB5aSa5a2XXFxcXFxcXCIsXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIik7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiKTtcXFxcbiAgICB9KSk7XFxcXG59XFxcXG5cXFxcbmxldCBzID0gZ2V0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG5sZXQgciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG5pZiAocyAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGxvYWRcXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIik7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgd3JhcFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0YSA9IGxvYWQocCwgciAhPSBcXFxcXFxcIlxcXFxcXFwiID8gciA6IG51bGwpO1xcXFxuXFxcXG4gICAgbGV0IHBhZ2VpZCA9IE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcIi1wYWdlXFxcXFxcXCIgKyBwO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgcCArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFxcXFxcIiArIGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFxcXFxcIlxcXFxcXFwiID09IHIgPyAxIDogcDtcXFxcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcInJ1bGVAXFxcXFxcXCIgKyBpdC5uYW1lXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcXFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcXFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogd3JhcChpdC50aXRsZSwgcyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogaXQuZXh0cmFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcXFxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcXFxcXCIvXFxcXFxcXCIgKyBwYXJhbS5hbGwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBwYXJhbToge1xcXFxuICAgICAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICAgICAgaTogMCxcXFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgbG9hZFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0YSA9IGxvYWQoLTEsIG51bGwpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL21hbmFnZVxcXFxcXFwiKShkLCBkYXRhLm1hcChpdCA9PiBpdC5uYW1lKSk7XFxcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIGRhdGEpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLor7fpgInmi6nmk43kvZxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sOiAxLFxcXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbXFxcXFxcXCLorr/pl67pppbpobVcXFxcXFxcIiwgXFxcXFxcXCLmkJzntKLmraTnq5lcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFxcXFxcIuiuv+mXrummlumhtVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIng1Oi8vXFxcXFxcXCIgKyBnZXRIb21lKHVybClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZXNcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9LCBpdC51cmwpXFxcXG4gICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgUlVMRToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXQubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuemgeeUqFxcXFxcXFwiICsgaXQubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIua4qemmqOaPkOekulxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcXFxcXFxcIuehruiupOWIoOmZpOemgeeUqFxcXFxcXFwiICsgbmFtZSArIFxcXFxcXFwi5ZCX77yfXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG5hbWUsIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhP3J1bGU9XFxcXFxcXCIgKyBydWxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGUobmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9PS1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCBNWV9SVUxFLnRpdGxlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXQubmFtZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6K6/6Zeu6aaW6aG1XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogXFxcXFxcXCIneDU6Ly9cXFxcXFxcIiArIGdldEhvbWUoaXQudXJsKSArIFxcXFxcXFwiJ1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0ouatpOa6kFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6IFxcXFxcXFwiJ2hpa2VyOi8vcGFnZS9zaW5nbGVzJ1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmlbDmja5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGF0YVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIvL+W5tuWPkeinhOWImeaVsFxcXFxubGV0IHNpemUwID0gMTA7XFxcXG5sZXQgcnVsZXNUZXh0MCA9IGAxLuW9seinhuW3peWOgkBodHRwczovL3d3dy55c2djLmNjL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbjIu6JuL6JuLQGh0dHBzOi8vd3d3LmRhbmRhbnphbjEwLnRvcC9zby8qKi0qKi0tLmh0bWxcXFxcbjQu56iA6aWtQGh0dHBzOi8vd3d3LnhpZmFueXMuY29tL3lpbmdwaWFuc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxuNS7ovr7pvp9AaHR0cHM6Ly93d3cuZGFkYWd1aS5tZS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbjYu5Z+O5biCQGh0dHBzOi8vd3d3LmNpdHlkeS5jb20vc2VhcmNoLmh0bWw/d2Q9KipcXFxcbmxpYnZpb0BodHRwczovL3d3dy5saWJ2aW8ubWUvc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG43LuaWsOinhkBodHRwczovL3d3dy42MDgwZHkxLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG44Lueci+eci3lAaHR0cHM6Ly93d3cua2tkeS5saXZlL3ZvZC1zZWFyY2guaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG45LumlreWbokBodHRwczovL3d3dy5mYW50dWFuaGQuY29tL3NlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbjEwLumHkeabvEBodHRwczovL2ppbm1hbnR2LmNvbS9pbmRleC5waHAvdm9kL3NlYXJjaC5odG1sP3dkPSoqXFxcXG7lnKjnur/nlLXlvbFAaHR0cHM6Ly93d3cuemFpeGlhbmRpYW55aW5nOC5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7npZ7pqazlvbHpmaJAaHR0cHM6Ly93d3cuaXNtNi5jb20vaW5kZXgucGhwP3M9dm9kLXNlYXJjaFxcXFxu5YWN55qEQGh0dHBzOi8vd3d3LmZyZWVvay52aXAvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu54mb6amsQGh0dHBzOi8vd3d3Lm5pdW1hdHYuY2Mvdm9kc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu5YWN6LS5QGh0dHBzOi8vd3d3LnRoZWZyZWUudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbuiOq+aJjuWFlEBodHRwczovL3d3dy5tb3poYXR1LmNvbS9pbmRleC5waHAvdm9kL3NlYXJjaC5odG1sP3dkPSoqXFxcXG7pnLnpm7NAaHR0cHM6Ly9wbHlpbmdzaGkuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbuWOgumVv0BodHRwczovL3d3dy5jenNwcC5jb20veHNzZWFyY2g/cT0qKlxcXFxuVk9GQGh0dHBzOi8vd3d3LnZvZmxpeC5jb20vc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu55S15b2xQGh0dHBzOi8vd3d3LmFwcG1vdmllLmNjL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu6L+95YmnQGh0dHA6Ly96amRyLnZpcC92b2Qvc2VhcmNoL3dkLyoqLmh0bWxcXFxcbueWr+eLl0BodHRwczovL20uZmVuZ2dvdWR5My5jb20vaW5kZXgucGhwP3M9dm9kLXNlYXJjaC1uYW1lJndkPSoqXFxcXG7lnKjnur9AaHR0cHM6Ly96eHpqLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbuS4g+S4g0BodHRwOi8vYWFhc29mYS5jb20vc2VhcmNoLnBocFxcXFxu5YyX5bedQGh0dHBzOi8vd3d3LmJjd3pnLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9KipcXFxcbkVGQGh0dHBzOi8vd3d3LnBpbGk1LmNuL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu5b2x5a62QGh0dHA6Ly95c3pqdmlwLmNvbS9pbmRleC5waHAvdm9kL3NlYXJjaC5odG1sP3dkPSoqXFxcXG7kupTkupRAaHR0cHM6Ly81NTVkeS5jYy92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7muKPmvKtAaHR0cHM6Ly93d3cuZG0yMDIyLmNvbS92b2RzZWFyY2guaHRtbD93ZD0qKlxcXFxu5Zyo5a62QGh0dHBzOi8venh6ai52aXAvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG5waWHlupNAaHR0cHM6Ly9tLnBpYWt1LmNjL3MvLS0tLS0tLS0tLS0tLS8/d2Q9KipcXFxcbuaegeWTgUBodHRwczovL3d3dy5qcHlzLm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbuiJvui/qkBodHRwczovL2FpZGkudHYvdnNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu5Lmd5beeQGh0dHA6Ly93d3cuaml1emhvdTkxMS5jb20vc2VhcmNoLnBocD9zZWFyY2h3b3JkPSoqXFxcXG7ljYHljYNAaHR0cDovL3d3dy5xaWFuc2hpaG91c2UuY29tL3NyaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbum6pueJh0BodHRwOi8vbS5seTM2OC5jb20vaW5kZXgucGhwP3M9dm9kLW1fcy1uYW1lJndkPSoqXFxcXG7nlLXlvbHniZtAIGh0dHBzOi8vd3d3LmRpYW55aW5nbi5jYy92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7kurrkurrlvbHop4ZAaHR0cHM6Ly93d3cucnR0a3MuY29tL3Jyc28uaHRtbD93ZD0qKlxcXFxu56eB5Lq6QGh0dHBzOi8vc291bWsuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbuaYn+i+sEBodHRwOi8vd3d3LnFoZGRqLmNvbS5jbi94Y3l5c2VhcmNoLyoqLS0tLS0tLS0tLS0tLS5odG1sXFxcXG5Db2tldllAaHR0cHM6Ly9jb2tlbXYubWUvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu54ix55yLeUBodHRwczovL2lrYW42LnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9Kiomc3VibWl0PVxcXFxu5bmy6aWtcHlAaHR0cHM6Ly93d3cuZ2Z5c3lzMS5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu5aSp56m6eUBodHRwOi8vdGt6bnAuY29tL3ZvZHNlYXJjaC5odG1sP3dkPSoqXFxcXG7ok53lhYlAaHR0cHM6Ly93d3cubGd5eS5jYy92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7kvY7nq69AaHR0cHM6Ly9kZHlzLnR2Lz9zPSoqJnBvc3RfdHlwZT1wb3N0XFxcXG7liqrliqpAaHR0cHM6Ly93d3cubnVudXl5My5vcmcvc28vKiotKiotLS5odG1sXFxcXG7nn7PmprRAaHR0cHM6Ly9oZWkxOS5jb20vc2VhcmNoP3R5cGU9MSZrZXl3b3Jkcz0qKmA7XFxcXG5sZXQgcnVsZXNUZXh0ID0gZ2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIHJ1bGVzVGV4dDApO1xcXFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcXFxcXCIpO1xcXFxucnVsZXMgPSBydWxlc1RleHQuc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilcXFxcbiAgICAuZmlsdGVyKGl0ID0+IGl0LmluY2x1ZGVzKFxcXFxcXFwiQFxcXFxcXFwiKSlcXFxcbiAgICAubWFwKHJ1bGUgPT4ge1xcXFxuICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcXFxcXCJAXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgbmFtZTogc1swXSxcXFxcbiAgICAgICAgICAgIGZpbmQ6IGZ1bmN0aW9uKGtleSwgcGFnZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBzcChzWzFdLCBrZXksIHNbMF0pO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHVybDogc1sxXVxcXFxuICAgICAgICB9O1xcXFxuICAgIH0pO1xcXFxuXFxcXG5mdW5jdGlvbiBsb2FkKHBhZ2UsIHJ1bGUpIHtcXFxcbiAgICBsZXQgc2l6ZSA9IHBhZ2UgPD0gMCA/IHJ1bGVzLmxlbmd0aCA6IHNpemUwO1xcXFxuICAgIHBhZ2UgPSBwYWdlIDw9IDAgPyAxIDogcGFnZTtcXFxcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcXFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXFxcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxcXG4gICAgICAgIHJldHVybiBbXTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGxlbiA9IHNpemU7XFxcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBhZGRSdWxlKG5hbWUsIHN1cmwpIHtcXFxcbiAgICBzZXRJdGVtKFxcXFxcXFwicnVsZXNcXFxcXFxcIiwgcnVsZXNUZXh0ICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIkBcXFxcXFxcIiArIHN1cmwpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiByZW1vdmVSdWxlKG5hbWUpIHtcXFxcbiAgICBsZXQgbmV3VCA9IHJ1bGVzVGV4dC5zcGxpdChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKVxcXFxuICAgICAgICAuZmlsdGVyKGl0ID0+IGl0LmluZGV4T2YobmFtZSArIFxcXFxcXFwiQFxcXFxcXFwiKSA8IDApXFxcXG4gICAgICAgIC5qb2luKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpO1xcXFxuICAgIHNldEl0ZW0oXFxcXFxcXCJydWxlc1xcXFxcXFwiLCBuZXdUKTtcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGxvYWQ6IGxvYWQsXFxcXG4gICAgYWRkUnVsZTogYWRkUnVsZSxcXFxcbiAgICByZW1vdmVSdWxlOiByZW1vdmVSdWxlXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Si6Kej5p6QXFxcIixcXFwicGF0aFxcXCI6XFxcInNwXFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIHNlYXJjaCh1cmwsIGtleSwgcnVsZSkge1xcXFxuICAgIGxldCBkID0gW107XFxcXG4gICAgbGV0IGh0bWwgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCIqKlxcXFxcXFwiKSkge1xcXFxuICAgICAgICAvL2dldOivt+axglxcXFxuICAgICAgICBsZXQgb2xkID0gdXJsO1xcXFxuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShcXFxcXFxcIioqXFxcXFxcXCIsIGtleSk7XFxcXG4gICAgICAgIGh0bWwgPSByZXF1ZXN0KHVybCk7XFxcXG4gICAgICAgIC8v6Ieq5Yqo6L+H6aqM6K+B56CB5ZKM6aKR57mB6K6/6Zeu6ZmQ5Yi2XFxcXG4gICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICBjaGVjaywgdGVzdFxcXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3l6bVxcXFxcXFwiKTtcXFxcbiAgICAgICAgaWYgKGNoZWNrKHVybCwgaHRtbCwgZCkpIHtcXFxcbiAgICAgICAgICAgIGxvZyhcXFxcXFxcIumHjeivleS6hlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KHVybCwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IHVybFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgXFxcXG4gICAgICAgIH0gICAgICAgICBcXFxcbiAgICAgICAgdGVzdCh1cmwsIGh0bWwsIGQsIG9sZCwga2V5LCBydWxlKTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvL+iHquWKqOivhuWIq3Bvc3Tor7fmsYJcXFxcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXFxcbiAgICAgICAgbGV0IGZvcm0gPSBwZGZoKGh0bWwsIFxcXFxcXFwiYm9keSYmZm9ybSYmSHRtbFxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGFjdGlvbiA9IHBkKGh0bWwsIFxcXFxcXFwiZm9ybSYmYWN0aW9uXFxcXFxcXCIsIHVybCk7XFxcXG4gICAgICAgIGxldCBpbnB1dHMgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmZm9ybSYmaW5wdXRcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBib2R5ID0ge307XFxcXG4gICAgICAgIGZvciAobGV0IGl0IG9mIGlucHV0cykge1xcXFxuICAgICAgICAgICAgbGV0IG5hbWUgPSBwZGZoKGl0LCBcXFxcXFxcImlucHV0JiZuYW1lXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGRmaChpdCwgXFxcXFxcXCJpbnB1dCYmdmFsdWVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgYm9keVtuYW1lXSA9IHZhbHVlIHx8IGtleTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBodG1sID0gcG9zdChhY3Rpb24sIHtcXFxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgbGV0IGFsaXN0ID0gcGRmYShodG1sLCBcXFxcXFxcImJvZHkmJmFcXFxcXFxcIik7XFxcXG4gICAgbGV0IGFyciA9IGFsaXN0Lm1hcChpdCA9PiB7XFxcXG4gICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcXFxcXCJhJiZUZXh0XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgdDIgPSBwZGZoKGl0LCBcXFxcXFxcImEmJnRpdGxlXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgLy9odG1sOiBpdCxcXFxcbiAgICAgICAgICAgIHRleHQ6IHQyICYmIHQyLmluY2x1ZGVzKGtleSkgPyB0MiA6IHQsXFxcXG4gICAgICAgICAgICBocmVmOiBwZChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIsIHVybClcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgZnVuY3Rpb24gaXNSZXN1bHQoaXQpIHtcXFxcbiAgICAgICAgaXQgPSBpdC50ZXh0IHx8IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChpdCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGl0Lm1hdGNoKC/mkJzntKJ857uT5p6cLykpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBpdC5pbmNsdWRlcyhrZXkpO1xcXFxuICAgIH1cXFxcblxcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgbGV0IHQgPSBpdC50ZXh0O1xcXFxuICAgICAgICBpZiAoIWl0LmhyZWYgfHwgaXQuaHJlZiA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoaXNSZXN1bHQoaXQpKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0LFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvcD91PVxcXFxcXFwiICsgYmFzZTY0RW5jb2RlKGl0LmhyZWYpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBkO1xcXFxufVxcXFxuJC5leHBvcnRzID0gc2VhcmNoO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWinuWIoFxcXCIsXFxcInBhdGhcXFwiOlxcXCJtYW5hZ2VcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0gZnVuY3Rpb24oZCwgbmFtZXMpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCJBSeaKgOacr1xcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiY29uZmlybTovL+WfuuS6jkFJ6K+G54mH6Ieq5Yqo5YiG5p6Q5rqQ56CB5oqA5pyv77yM5Luj56CB5a6M5YWo5byA5rqQ77yM5pWw5o2u5p2l5rqQ5LqO5Y6f572R56uZ77yM6L2v5Lu25ZKM6KeE5YiZ5LiN5o+Q5L6b5Lu75L2V5YaF5a65LmpzOicnXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIHRpdGxlOiBnZXRJdGVtKCd3ZWInLCAnMCcpID09IFxcXFxcXFwiMFxcXFxcXFwiID8gXFxcXFxcXCLop4bpopHll4XmjqJcXFxcXFxcIiA6IFxcXFxcXFwiV2Vi6YCa5YWNXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChnZXRJdGVtKCd3ZWInLCAnMCcpID09IFxcXFxcXFwiMFxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzEnKVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCd3ZWInLCAnMCcpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIiArIFxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgocnIpID0+IHtcXFxcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhcXFxcXFxcImFpYWRkXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHJyICsgXFxcXFxcXCJhaXNkZWxcXFxcXFxcIiwgW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl572R56uZ5ZCN56ewXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0TXlWYXIoJ25hbWUnLCBpbnB1dClcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcXFxcXCJhaWFkZFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6K+36L6T5YWl572R56uZ5pCc57Si5Zyw5Z2AXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0TXlWYXIoJ3N1cmwnLCBpbnB1dClcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcXFxcXCJhaWFkZFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5o+Q5Lqk5L+d5a2YXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1cmwgPSBnZXRNeVZhcihcXFxcXFxcInN1cmxcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGdldE15VmFyKFxcXFxcXFwibmFtZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdXJsID09IFxcXFxcXFwiXFxcXFxcXCIgfHwgbmFtZSA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/or7fovpPlhaXlrozmlbTlhoXlrrlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBkZWNvZGVVUklDb21wb25lbnQoc3VybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gci5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCJbXFxcXFxcXFx1NGUwMC1cXFxcXFxcXHU5ZmE1XStcXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIioqXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSdWxlKG5hbWUsIHIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5L+d5a2YXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFxcXFxcImFpYWRkXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIF0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiLFxcXFxuICAgIH0pO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIiAtIFxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwic2VsZWN0Oi8vXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBvcHRpb25zOiBuYW1lcyxcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuivt+mAieaLqeimgeWIoOmZpOeahOermeeCuVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJ1bGVcXFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL09LXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgXFxcXFxcXCJhaXNkZWxcXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6aqM6K+B56CBXFxcIixcXFwicGF0aFxcXCI6XFxcInl6bVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBjaGVjayh1cmwsIGh0bWwsIGQpIHtcXFxcbiAgICBsZXQgcmVsb2FkID0gZmFsc2U7XFxcXG4gICAgaWYgKC/pqozor4HnoIF857O757uf5a6J5YWo6aqM6K+BLy50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgIGxldCBoZWFkZXJzID0ge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IE1PQklMRV9VQSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiB1cmxcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgTVlfSE9NRSA9IGdldEhvbWUodXJsKTtcXFxcbiAgICAgICAgbGV0IHNzeXogPSAnVGxvR25uaWtUaHJmcy81ZkRObGs1Q1NzYmFHdEFIN1cvdU1aanVZb0l1cEI2YkNvbzlDb3RMUUhmUElkR2dia2J5bktxTDJhVUUyWHk1NThYMlF4SFl0VFUwOXZEKzRvYUNESXVTWk83bnhEYkxmUkdmV2o3enFsK3lNYnZGK2FKb0QvbTZQc2Z3L1B5WU9BcC9aVkdkclB6YUNCeWZkMEhMNURGVlN3K1lGMk9DNDBWOFNQOVJ4ZEZLS2RyQnVQeENXZHhVQ0ZySisxbFJ5L1RVM0xDODRDNHh4RUJoZ3VkN1J0QnAwelpBcnFCRTA2K1ozSnREUDBlRkN6L0Q1WDA0MDlxUEhLM2UxeS9MdVVnY2N1eHBIbmpZTEUxR2psUDh3WUEyaFFXZTd5UG5nZ2dRQkh3MzMvZ3ZiM3R1Q2N4RUtUV2dtYWgvUjMyQUg5WkY4akY3V2VtVDI2bFVpelZYZS9zcENkaERnSFIvelVoT0RENFBPNmdsSThKUGhkdStWd2ZQeVJMRzJEN0NVbzFMNlNJRiswZllmMG9UT1dOMTNVUElUbzUrdVpkL1duUVFMVThOWXgvV0ZDVGhFbmtiemxuOVlHdDYwZlJ4c0grOHVNREZnYUJpQyt6MlNwY3hCOWdaNkdYeXBMU1hXYWorcUVVYkdKS0V4K2pLL3Y1Zm5ya0loQ2R3TmJrcDlkUmtzNmRtbFlsQmlmem9XRjhSa3VDM3JxUHRvU2NCa01PTVp1N0dpVnRvSEVkSFVvem1uVUlkclUxTEdJcXE5V25HN1gyYTN5SDhzNjVtakx1TG5kM3EwVTh2K0xNUG5ITDIvR2pRdVRRS1ZoK1JLRVBxSy9KZHJDaEdMTnJqY0h2TEhEYkhFc2hyR1p1UU9kRXBoYngvUGtoa3ZhWXk0SzFNTzg0UjE3Z3VSc0tzL1Y2bmlVUGFMK1hiUTdjM2ZxSlM0VkhKd2x1ZEpURGUwMmV1ZmZHQ20wUEpJUGxBT2dMSG5YMGl6SmhBNnE3MzhSMlV3UWNXQlFqSnQ3OWFGK2t5cVNkeXQxUVBWUVZqYUMzSXBSZjdQZ3NEaEVKN2JpOW5TY2x5SXpnSjlEQ0o0VCs4ZEcxeEhoS3laYXNUN0wveDlMZnIxTWdzOG5CWkVSMlc5YXg3aVRrTksrWDVBQ1UvL3AvWW9QL3VBYW5EdGIzRDBpS1VVdVhGSCtKYmIweDFQMzIyUzJ3NkJKNDZudU5IQk1IVHBWdVd3aFplWnpyaUdoN3FvT3l3TFdpRXhCTUt5eFRHTG5tS2g3cjAzL3lYS1lXSUpucEJOMk1NeWNWSFJaSjdSdW1IVjRDSXNWcnE3aVJQNDg4MjNSSlZ0OU90eVA3dXVjM3dCQlYza2NaVXpiYmFZZFdCeDErQXUrT2QydTdsUjZqb09MODEwbWNKbS9mN0o1VHZHUVA2SEdwaDFZSEhYNEM3NDUzYTd1VkhxT2d5ampoNUVCZDcyME1FQlkyM2MrVEtxL3o5VXBXRERPZzQ4WkZud1NJaEZxaXRXZGlaaXFzYVl1TjAvU1h3aUs4RUc5ZVEyOXUyWERKb0RXNG1sd3RjUk83dmFYNVhjRnNnZjQvbUxVMDdtaSc7XFxcXG4gICAgICAgIGV2YWxQcml2YXRlSlMoc3N5eik7XFxcXG5cXFxcbiAgICAgICAgbGV0IHZjb2RlID0gZ2V0VkNvZGUyKE1ZX0hPTUUgKyAnL2luZGV4LnBocC92ZXJpZnkvaW5kZXguaHRtbD8nLCBKU09OLnN0cmluZ2lmeShoZWFkZXJzKSwgJ251bScpO1xcXFxuICAgICAgICBmZXRjaChNWV9IT01FICsgaHRtbC5tYXRjaCgvXFxcXFxcXFwvaW5kZXgucGhwLio/dmVyaWZ5PS8pWzBdICsgSlNPTi5wYXJzZSh2Y29kZSkucmV0LCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHJlbG9hZCA9IHRydWU7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiByZWxvYWQ7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIHRlc3QodXJsLCBodG1sLCBkLCBvbGQsIGtleSwgcnVsZSkge1xcXFxuICAgIGlmICgvNeenknzpopHnuYEvLnRlc3QoaHRtbCkpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5pCc57Si6ZyA6Ze06ZqUNeenku+8jOeCueWHu+mHjeaWsOWKoOi9vScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgodXJsLCBvbGQsIGtleSwgcnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCBzcCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9zcFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgZCA9IHNwKG9sZCwga2V5LCBydWxlKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICB3cmFwXFxcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90b29sXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaXQudGl0bGUgPSB3cmFwKGl0LnRpdGxlLCBrZXkpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIodXJsLCBkKTtcXFxcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHVybCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9PS1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSwgdXJsLCBvbGQsIGtleSwgcnVsZSksXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiB1cmxcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG4kLmV4cG9ydHMgPSB7XFxcXG4gICAgY2hlY2s6IGNoZWNrLFxcXFxuICAgIHRlc3Q6IHRlc3RcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlt6XlhbdcXFwiLFxcXCJwYXRoXFxcIjpcXFwidG9vbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiB3cmFwKHRleHQsIHMpIHtcXFxcbiAgICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiKSA/IHRleHQgOiBcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiICsgdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCI8ZW0+fDwvZW0+XFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXCIgKyBzICsgXFxcXFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcXFxcXCIpXFxcXG59XFxcXG4kLmV4cG9ydHMgPSB7XFxcXG4gICAgd3JhcDogd3JhcFxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWNleaQnFxcXCIsXFxcInBhdGhcXFwiOlxcXCJzaW5nbGVzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi5pCc57SiXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiLCBpbnB1dCk7XFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcIuivt+i+k+WFpeWFs+mUruivje+8jOWwvemHj+WwkeWtl+S4jeimgeWkmuWtl1xcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFxcXFxcInNvXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpXFxcXG4gICAgfVxcXFxufSk7XFxcXG5sZXQgcyA9IGdldE15VmFyKFxcXFxcXFwic29cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG5sZXQgciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG5pZiAocyAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIGxvYWRcXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIik7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgd3JhcFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0YSA9IGxvYWQocCwgTVlfUEFSQU1TLlJVTEUubmFtZSk7XFxcXG4gICAgbGV0IGFyciA9IGRhdGFbMF0uZmluZChzLCBwKTtcXFxcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXFxcbiAgICAgICAgaXQudGl0bGUgPSB3cmFwKGl0LnRpdGxlLCBzKVxcXFxuICAgICAgICBkLnB1c2goaXQpO1xcXFxuICAgIH1cXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLpobXpnaJcXFwiLFxcXCJwYXRoXFxcIjpcXFwic291cFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5pZiAoTVlfUEFSQU1TLmtleSAmJiBnZXRNeVZhcihcXFxcXFxcInVzZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgcHV0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgTVlfUEFSQU1TLmtleSk7XFxcXG4gICAgcHV0TXlWYXIoXFxcXFxcXCJ1c2VcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpO1xcXFxuICAgIGFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInVzZVxcXFxcXFwiKTtcXFxcbiAgICB9KSk7XFxcXG59XFxcXG4kLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9wcm8nKVxcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInRpdGxlIjoi5ZCN5L6m5o6i5p+v5Y2X77ya5LiH5Zyj6IqC55qE5paw5aiYIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement