Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@𝐒𝐮𝐩𝐣𝐚𝐯@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi8J2QkvCdkK7wnZCp8J2Qo/CdkJrwnZCvIiwiYXV0aG9yIjoiUiIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2h0dHBzOi8vc3VwamF2LmNvbS96aC8jI2Z5cGFnZSIsInZlcnNpb24iOjIwMjUwMzAyMSwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxuICAgIGFkZExpc3RlbmVyKFwib25DbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGNsZWFyTXlWYXIoXCJuZXh0UGFnZVwiKTtcbiAgICB9KTtcbi8qXG5hZGRMaXN0ZW5lcihcIm9uUmVmcmVzaFwiLCAoKSA9PiB7XG4gICAgY2xlYXJNeVZhcihcIm5leHRQYWdlXCIpO1xufSk7XG4qL1xudmFyIGQgPSBbXVxuLy92YXIgcmVzID0gW11cbk1ZX1VSTCA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihcInVybFwiLCBNWV9VUkwpO1xubGV0IG5leHRQYWdlID0gZ2V0TXlWYXIoXCJuZXh0UGFnZVwiLCBcIlwiKTtcbmlmIChuZXh0UGFnZSAmJiBNWV9QQUdFID4gMSkge1xuICAgIHRydWVfdXJsID0gbmV4dFBhZ2U7XG59IGVsc2UgaWYgKE1ZX1BBR0UgPiAxKSB7XG4gICAgdHJ1ZV91cmwgPSBcIuayoeacieS4i+S4gOmhteWTpvCfmJFcIlxufVxuLy92YXIgaHRtbCA9IGZldGNoKHRydWVfdXJsLCBKU09OLnBhcnNlKGdldE15VmFyKCdoZWFkZXJzJykpKVxuLy92YXIgaHRtbCA9IGZldGNoQ29kZUJ5V2ViVmlldyh0cnVlX3VybClcblxubG9nKHRydWVfdXJsKVxucHV0TXlWYXIoXCJ0cnVlXCIsdHJ1ZV91cmwpXG5cbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2ZldGNoJywge30pKVxuICAgIC5ydWxlKTtcbnZhciBodG1sID0gU3VwZmV0Y2godHJ1ZV91cmwpXG5cbi8vbG9nKGh0bWwpXG50cnkge1xuICAgIGxldCBuZXh0VXJsID0gcGQoaHRtbCwgXCIucGFnaW5hdGlvbiYmLmFjdGl2ZStsaSYmYSYmaHJlZlwiKTtcbiAgICBwdXRNeVZhcihcIm5leHRQYWdlXCIsIG5leHRVcmwpO1xufSBjYXRjaCAoZSkge1xuICAgIGNsZWFyTXlWYXIoXCJuZXh0UGFnZVwiKTtcbiAgICAvLyB0b2FzdChcIuWlveWDj+ayoeacieS4i+S4gOmhteS6hu+8gVwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZSwgY29sb3IpIHtcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XCInICsgY29sb3IgKyAnXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+Jztcbn1cblxuJC5yZXF1aXJlKFwiY2F0ZWdvcnlcIikoKVxuXG5pZiAoaHRtbC5pbmNsdWRlcyhcIuivt+eojeWAmeKAplwiKSB8fCBodG1sLmluY2x1ZGVzKFwiSnVzdCBhIG1vbWVudFwiKSkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICflhYjngrnmraTojrflj5ZDb29raWXlkI7vvIzlho3lm57liLDmraTpobXpnaInLmZvbnRjb2xvcignI0ZGMDBGRicpLmJpZygpLFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCh0cnVlX3VybCkgPT4ge1xuICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFwiZmV0Y2hcIiwgXCIxXCIpOyAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlX3VybCAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfSx0cnVlX3VybCksXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICfngrnmraTliLfmlrAnLmZvbnRjb2xvcignI0ZGMDAwMCcpLmJpZygpLFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcbiAgICAgICAgICAgIHJldHVybiBcImhpa2VyOi8vZW1wdHlcIlxuICAgICAgICB9KSxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgfVxuICAgIH0sIC8qe1xuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAnPHU+KOeos+Wumivlv6sp5py65Zy6PC91PicuZm9udGNvbG9yKCcjRkY2Njk5JykuYmlnKCkuYmlnKCkgKyAnXFxuMi455YWDL1Qv5pyI77yM5pyA5L2OMuWFgy9UJy5mb250Y29sb3IoJ2dyZWVuJykuYmlnKCksXG4gICAgICAgIGRlc2M6ICfpppnmuK/oioLngrnlj6/ku6Xov4dzdXBqYXYuY29t6aqM6K+BJyxcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vYXBwLmFpc3UubWUvIy9yZWdpc3Rlcj9jb2RlPUQzTlRFRWZ5XCIsXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH1cbiAgICB9Ki8pO1xufVxuXG5pZiAodHJ1ZV91cmwgPT0gXCJodHRwczovL3N1cGphdi5jb20vemgvXCIpIHtcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XG4gICAgICAgICQucmVxdWlyZShcImhvbWVcIilcbiAgICB9XG59IGVsc2UgaWYgKC90YWd8bWFrZXJ8Y2FzdC8udGVzdCh0cnVlX3VybCkpIHtcbiAgICAkLnJlcXVpcmUoXCJ0YWJzXCIpXG59IGVsc2Uge1xuICAgICQucmVxdWlyZShcImxpc3RcIikoKVxufVxuLy9zZXRQcmVSZXN1bHQocmVzKVxuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Imh0dHBzOi8vc3VwamF2LmNvbS96aC9wYWdlL2Z5cGFnZT9zPSoqIiwiZ3JvdXAiOiLikaHnlJ8iLCJzZWFyY2hGaW5kIjoianM6XG5NWV9VUkwgPSBNWV9VUkwucmVwbGFjZSgvZmMyLT9wcHYtP3xmYzItPy9pLFwiXCIpXG4kLnJlcXVpcmUoXCJ5aVwiKSIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6Ii8qXG5pZiAoIWdldE15VmFyKCdoZWFkZXJzJykpe1xucHV0TXlWYXIoJ2hlYWRlcnMnLHtoZWFkZXJzOntcIkNvb2tpZVwiOlwiY2ZfY2xlYXJhbmNlPTNTd24uSXpjYVE3Z2VwY01Ib0trbU0zYnNfSjI2eC5CV1c2SEJUbFV0ejAtMTcwNTI2NjAzMC0wLTItYTY1OWIzOGMuNjM5Yzg1ZGMuZjE1OGVjNmMtMTYwLjIuMTcwNTI2NjAzMFwiLFwiVXNlci1BZ2VudFwiOlwiTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyAxNl80XzEgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzE2LjQgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjFcIixcIlJlZmVyZXJcIjpcImh0dHBzOi8vc3VwamF2LmNvbS9cIn19KVxufVxuKi9cblxudmFyIOabtOaWsOmXtOmalCA9IDFcbmxldCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKVxuXG5mdW5jdGlvbiBjb3VudENyb3NzZWREYXlzKGRhdGUxLCBkYXRlMikge1xuICAgIHZhciBkMSA9IG5ldyBEYXRlKE51bWJlcihkYXRlMSkpO1xuICAgIHZhciBkMiA9IG5ldyBEYXRlKE51bWJlcihkYXRlMikpO1xuICAgIC8vIOiOt+WPluWujOaVtOaXpeacn+mDqOWIhlxuICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKGQxLmdldEZ1bGxZZWFyKCksIGQxLmdldE1vbnRoKCksIGQxLmdldERhdGUoKSk7XG4gICAgdmFyIGVuZCA9IG5ldyBEYXRlKGQyLmdldEZ1bGxZZWFyKCksIGQyLmdldE1vbnRoKCksIGQyLmdldERhdGUoKSk7XG4gICAgLy8g5Yik5pat5byA5aeL5ZKM57uT5p2f5pel5pyfXG4gICAgdmFyIHRpbWVEaWZmZXJlbmNlID0gTWF0aC5hYnMoZW5kIC0gc3RhcnQpO1xuICAgIC8vIOiuoeeul+i3qOi2iueahOWkqeaVsFxuICAgIHZhciBjcm9zc2VkRGF5cyA9IE1hdGguY2VpbCh0aW1lRGlmZmVyZW5jZSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XG4gICAgcmV0dXJuIGNyb3NzZWREYXlzOyAvLyDov5Tlm57ot6jotornmoTlpKnmlbBcbn1cbnZhciDot6jotorlpKnmlbAgPSBjb3VudENyb3NzZWREYXlzKHRpbWUsIGdldEl0ZW0oJ3RpbWUnLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSkpXG4vL2xvZyjot6jotorlpKnmlbApXG5pZiAo6Leo6LaK5aSp5pWwID49IOabtOaWsOmXtOmalCkge1xuICAgIHNldEl0ZW0oJ3RpbWUnLCB0aW1lKTtcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBmdW5jdGlvbiBsb2NhbHZlcnNpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gTVlfUlVMRS52ZXJzaW9uXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICd1bmRlcmZpbmQnXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZnVuY3Rpb24gcmVtb3RldmVyc2lvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goYmFzZTY0RGVjb2RlKCdhSFIwY0hNNkx5OXlZWGN1WjJsMGFIVmlkWE5sY21OdmJuUmxiblF1WTI5dEwwRndiMnhzYjFKcGIyOHZVaTl0WVhOMFpYSXZTR2xyWlhJdicpICsgTVlfUlVMRS50aXRsZSkpXG4gICAgICAgICAgICByZXR1cm4gQXBvbGxvLnZlcnNpb25cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gJ3VuZGVyZmluZCdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBpZiAoKHJlbW90ZXZlcnNpb24oKSAhPSAndW5kZXJmaW5kJyAmJiByZW1vdGV2ZXJzaW9uKCkgIT0gbG9jYWx2ZXJzaW9uKCkpIHx8IGxvY2FsdmVyc2lvbigpID09ICd1bmRlcmZpbmQnKSB7XG4gICAgICAgIHNob3dMb2FkaW5nKCfmo4DmtYvliLDmlrDniYjmnKzvvIzmm7TmlrDkuK0uLi4nKVxuICAgICAgICAvL2phdmEubGFuZy5UaHJlYWQuc2xlZXAoMzAwMCk7XG4gICAgICAgIGhpZGVMb2FkaW5nKClcbiAgICAgICAgZXZhbChmZXRjaChiYXNlNjREZWNvZGUoJ2FIUjBjSE02THk5eVlYY3VaMmwwYUhWaWRYTmxjbU52Ym5SbGJuUXVZMjl0TDBGd2IyeHNiMUpwYjI4dlVpOXRZWE4wWlhJdlNHbHJaWEl2JykgKyBNWV9SVUxFLnRpdGxlKSk7XG4gICAgICAgIGNvbmZpcm0oe1xuICAgICAgICAgICAgdGl0bGU6ICfmm7TmlrDmj5DnpLonLFxuICAgICAgICAgICAgY29udGVudDogJ+ajgOa1i+WIsOWwj+eoi+W6j+eJiOacrOS9juS6juacjeWKoeWZqOeJiOacrO+8jOaYr+WQpueri+WNs+abtOaWsCcsXG4gICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCh1cCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVBhc3RlKHVwKTtcbiAgICAgICAgICAgIH0sIEFwb2xsby51cGRhdGUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxufSIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbnsbtcIixcInBhdGhcIjpcImNhdGVnb3J5XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSAoKSA9PiB7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb3J0XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJwYWdpXFxcIik7XFxuICAgICAgICAvLyBjbGVhck15VmFyKFxcXCJ1cmxcXFwiKTsgICBcXG4gICAgfSkpO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25SZWZyZXNoXFxcIiwgKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic29ydFxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicGFnaVxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwidXJsXFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ0YWJcXFwiKTtcXG4gICAgfSk7XFxuXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3lpeWFuJywge30pKS5ydWxlKTtcXG5cXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIvCflI1cXFwiLFxcbiAgICAgICAgICAgIHVybDogJC50b1N0cmluZygocikgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZCcsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hVcmwgPSBcXFwiaHR0cHM6Ly9zdXBqYXYuY29tL3poLz9zPVxcXCIgKyBpbnB1dC5yZXBsYWNlKC9mYzItP3Bwdi0/fGZjMi0/L2ksIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIHNlYXJjaFVybCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBjb25maXJtOi8vJHtyfS5qczonaGlrZXI6Ly9lbXB0eSdgXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBkYXlfc2F5KSxcXG4gICAgICAgICAgICBkZXNjOiBkYXlfc2F5LCAvLyAn5pu+57uP5rKn5rW36Zq+5Li65rC0LOmZpOWNtOW3q+WxseS4jeaYr+S6kScsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigna2V5d29yZCcsICcnKSB8fCBcXFwiXFxcIixcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciB0YWJzID0gcGRmYShodG1sLCBcXFwiLm5hdiYmbGk6bm90KGxpOmhhcyguc3ViLW1lbnUpKTpub3QoOmhhcyhhW3RhcmdldF0pKTpub3QoOmhhcyhhW3RpdGxlXSkpXFxcIik7XFxuICAgICAgICBmb3IgKHZhciBpIGluIHRhYnMpIHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHRhYnNbaV0sICdUZXh0JylcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ3RhYicsICcwJykgPT0gaSA/IGdldEhlYWQodGl0bGUsICcjRkY2Njk5JykgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZCh0YWJzW2ldLCAnYSYmaHJlZicpICsgJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RhYicsIGkpXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGlmIChpID09IDUpIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICB2YXIgcGFnaW5hdGlvbiA9IHBkZmEoaHRtbCwgXFxcIi5wYWdpbmF0aW9uJiZsaTpub3QoLnByZXYtcGFnZSk6bm90KC5uZXh0LXBhZ2UpXFxcIik7XFxuICAgIHZhciBjdXJyZW50dSA9IHBkZmgoaHRtbCwgXFxcImxpbmtbaHJlZmxhbmc9emhdJiZocmVmXFxcIilcXG5cXG4gICAgdmFyIGZpcnN0dSA9IGN1cnJlbnR1ID8gY3VycmVudHUucmVwbGFjZSgvXFxcXC9wYWdlXFxcXC9cXFxcZCsvLCBcXFwiXFxcIikgOiBcXFwiaHR0cHM6Ly9zdXBqYXYuY29tL3poL1xcXCJcXG4gICAgdmFyIGFjdGl2ZSA9IGN1cnJlbnR1Lm1hdGNoKC9cXFxcL3BhZ2VcXFxcLyhcXFxcZCspLykgPyBjdXJyZW50dS5tYXRjaCgvXFxcXC9wYWdlXFxcXC8oXFxcXGQrKS8pWzFdIDogMTtcXG4gICAgdmFyIGxhc3R1ID0gcGRmaChwYWdpbmF0aW9uLnBvcCgpLCBcXFwiYSYmaHJlZlxcXCIpIHx8IGN1cnJlbnR1XFxuICAgIHZhciBsYXN0cCA9IGxhc3R1Lm1hdGNoKC9cXFxcL3BhZ2VcXFxcLyhcXFxcZCspLykgPyBsYXN0dS5tYXRjaCgvXFxcXC9wYWdlXFxcXC8oXFxcXGQrKS8pWzFdIDogMTtcXG5cXG4gICAgaWYgKCFjdXJyZW50dS5pbmNsdWRlcyhcXFwicG9wdWxhclxcXCIpKSB7XFxuICAgICAgICBsYXN0dSA9IGxhc3R1LnJlcGxhY2UoL1xcXFwvcGFnZVxcXFwvXFxcXGQrLywgXFxcIi9wYWdlL1xcXCIgKyAobGFzdHAgLSAwKSlcXG4gICAgICAgIGxhc3RwID0gbGFzdHAgLSAwXFxuICAgIH1cXG5cXG4gICAgdmFyIHBhZ2k7XFxuICAgIGlmIChhY3RpdmUgPT0gMSkge1xcbiAgICAgICAgcGFnaSA9IDBcXG4gICAgfSBlbHNlIGlmIChhY3RpdmUgPT0gbGFzdHApIHtcXG4gICAgICAgIHBhZ2kgPSAyXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwYWdpID0gMVxcbiAgICB9XFxuICAgIHZhciB0aXRsZSA9IFtcXFwi6aaWXFxcIiwgXFxcIui3s+mhtTpcXFwiICsgYWN0aXZlLCBcXFwi5bC+OlxcXCIgKyBsYXN0cF1cXG4gICAgdmFyIHVybHMgPSBbZmlyc3R1LCBNWV9VUkwsIGxhc3R1XVxcbiAgICBpZiAoY3VycmVudHUgIT09IFxcXCJodHRwczovL3N1cGphdi5jb20vemgvXFxcIiAmJiBnZXRNeVZhcihcXFwidHJ1ZVxcXCIpICE9IFxcXCLmsqHmnInkuIvkuIDpobXlk6bwn5iRXFxcIikge1xcbmlmIChNWV9QQUdFID4gMSkge1xcbmQucHVzaCh7Y29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIn0pXFxuZC5wdXNoKHtjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJ9KVxcbmQucHVzaCh7Y29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwifSlcXG5kLnB1c2goe2NvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIn0pXFxufVxcbiAgICAgICAgZm9yICh2YXIgaiBpbiB0aXRsZSkge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB1cmxzW2pdICsgJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaikgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgailcXG5cXG4gICAgICAgICAgICBpZiAoaiA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9ICQoJycsICfpmaTpppbpobXlkozlsL7pobXkuYvlpJbnmoTpobXnoIEnKS5pbnB1dCgobGFzdHUsIGxhc3RwKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoaW5wdXQpID4gMCAmJiBwYXJzZUludChpbnB1dCkgPD0gcGFyc2VJbnQobGFzdHApICYmIHBhcnNlSW50KGlucHV0KSAlIDEgPT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqdW1wdSA9IGxhc3R1LnJlcGxhY2UoL1xcXFwvcGFnZVxcXFwvXFxcXGQrLywgXFxcIi9wYWdlL1xcXCIgKyBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwganVtcHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5q2j56Gu55qE6aG156CBXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBsYXN0dSwgbGFzdHApXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwYWdpID09IGogPyBnZXRIZWFkKHRpdGxlW2pdLCAnI0ZGNjY5OScpIDogdGl0bGVbal0sXFxuICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgLy8gIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgdmFyIHNvdHQgPSBjdXJyZW50dS5yZXBsYWNlKC8uKj8oPSguKil8JCkvLCBcXFwiJDJcXFwiKVxcbiAgICB2YXIgc29ydCA9IHBkZmEoaHRtbCwgXFxcIi5zb3J0JiZhXFxcIik7XFxuICAgIHNvdHQgPSBzb3R0ID09PSBcXFwiXFxcIiA/IHBkZmgoc29ydFswXSwgJ1RleHQnKS50b0xvd2VyQ2FzZSgpIDogc290dDtcXG4gICAgZm9yICh2YXIgaiBpbiBzb3J0KSB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHNvcnRbal0sICdUZXh0JylcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHNvdHQgPT0gdGl0bGUudG9Mb3dlckNhc2UoKSA/IGdldEhlYWQodGl0bGUsICcjRkY2Njk5JykgOiB0aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogcGQoc29ydFtqXSwgJ2EmJmhyZWYnKSArICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGopID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGopXFxuICAgICAgICB9KVxcbiAgICB9XFxuLy9kLnB1c2goe2NvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJ9KVxcbiAgICAvL31cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliJfooahcIixcInBhdGhcIjpcImxpc3RcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9ICgpID0+IHtcXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgXFxcIi5wb3N0cyYmLnBvc3RcXFwiKTtcXG5saXN0LmZvckVhY2goaXRlbT0+e1xcbiAgIHZhciBpbWcgPSBwZChpdGVtLFxcXCJpbWcmJmRhdGEtb3JpZ2luYWxcXFwiKTtcXG4gICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sXFxcImEmJnRpdGxlXFxcIikucmVwbGFjZShcXFwiW+S4reaWh+Wtl+W5lV1cXFwiLFxcXCLwn4eo8J+Hs1xcXCIpLnJlcGxhY2UoXFxcIltcXFxcdTY1ZTBcXFxcdTc4MDHnoLTop6NdXFxcIixcXFwi8J+UpVxcXCIpLnJlcGxhY2UoXFxcIls0S11cXFwiLFxcXCLwn5alXFxcIikucmVwbGFjZShcXFwiW+iLseaWh+Wtl+W5lV1cXFwiLFxcXCLwn4e68J+HuFxcXCIpLnJlcGxhY2UoXFxcIuOAkFN1cEpBVi3ni6zlrrbjgJFcXFwiLFxcXCJcXFwiKTtcXG4gICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgZGVzYzogcGRmaChpdGVtLFxcXCIubWV0YS0tLmRhdGUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICBpbWc6IGltZy5yZXBsYWNlKC8oaHR0cC4qP1xcXFwuKD86anBnfHdlYnB8cG5nfGpwZWcpKS4qLyxcXFwiJDFcXFwiKSxcXG4gICAgICAgICAgICAgICB1cmw6IHBkZmgoaXRlbSxcXFwiYSYmaHJlZlxcXCIpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZXJcXFwiKScsXFxuICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8yXFxcIixcXG4gICAgICAgICAgICAgICBleHRyYToge3BhZ2VUaXRsZTp0aXRsZX1cXG4gICAgICAgICB9KVxcbn0pXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5qCH562+XCIsXCJwYXRoXCI6XCJ0YWJzXCIsXCJydWxlXCI6XCJ2YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbn1cXG52YXIgbGlzdHMgPSBwZGZhKGh0bWwsIFxcXCIuY2F0ZWdvcnlzJiYuY2hpbGRcXFwiKTtcXG5saXN0cy5mb3JFYWNoKGl0ZW09PntcXG4gICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyBwZGZoKGl0ZW0sXFxcImEmJlRleHRcXFwiKS5mb250Y29sb3IoZ2V0UmFuZ2VDb2xvcnMoKSksICAgICAgICAgXFxuICAgICAgICAgICAgICAgdXJsOiBwZGZoKGl0ZW0sXFxcImEmJmhyZWZcXFwiKSArICcjI2Z5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwieWlcXFwiKScsXFxuICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgIH0pXFxufSlcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIummlumhtVwiLFwicGF0aFwiOlwiaG9tZVwiLFwicnVsZVwiOlwidmFyIHRhYjEgPSBwZGZhKGh0bWwsICdib2R5JiYucmVjb21tZW5kJyk7XFxudmFyIHRhYjIgPSBwZGZhKGh0bWwsICdib2R5JiYuY29udGVudHMmJi5jb250ZW50Jyk7XFxudmFyIHRhYnMgPSB0YWIxLmNvbmNhdCh0YWIyKVxcbnZhciBjb250cyA9IHRhYnNcXG5cXG5mb3IgKHZhciBpID0gMDsgaSA8IGNvbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBsaXN0ID0gcGRmYShjb250c1tpXSwgJy5wb3N0cyYmLnBvc3QnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnPG1pZGRsZT48Zm9udCBjb2xvcj0jRkZBNTAwPicgKyBwZGZoKHRhYnNbaV0sICcuYXJjaGl2ZS10aXRsZSYmVGV4dCcpLnJlcGxhY2UoXFxcIisgTW9yZVxcXCIsIFxcXCJcXFwiKSArICc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIGRlc2M6IChpID09IDAgPyBcXFwi6ZW/5oyJ5Yqf6IO9XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcIiA6IFxcXCJcXFwiKSArICc8bWlkZGxlPjxmb250IGNvbG9yPXJlZD4rXFxcXHRcXFxcdFxcXFx0XFxcXHQgIPCdkIzwnZCo8J2Qq/CdkJ48L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy9JSWVuWC5wbmdcXFwiLFxcbiAgICAgICAgdXJsOiBwZCh0YWJzW2ldLCAnYSYmaHJlZicpICsgJyMjZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJ5aVxcXCIpJyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGxvbmdDbGljazogaSA9PSAwID8gW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfor7vlj5bmupDnoIHpu5jorqTmlrnlvI8nLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZmV0Y2hcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfV0gOiBcXFwiXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICB2YXIgaW1nID0gaSA9PSAwID8gcGQobGlzdFtqXSwgJ2ltZyYmc3JjJykgOiBwZChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsJyk7XFxuICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLnJlcGxhY2UoXFxcIlvkuK3mloflrZfluZVdXFxcIiwgXFxcIvCfh6jwn4ezXFxcIikucmVwbGFjZShcXFwiW1xcXFx1NjVlMFxcXFx1NzgwMeegtOino11cXFwiLCBcXFwi8J+UpVxcXCIpLnJlcGxhY2UoXFxcIls0S11cXFwiLCBcXFwi8J+WpVxcXCIpLnJlcGxhY2UoXFxcIlvoi7HmloflrZfluZVdXFxcIiwgXFxcIvCfh7rwn4e4XFxcIik7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcubWV0YS0tLmRhdGUmJlRleHQnKSxcXG4gICAgICAgICAgICBpbWc6IGltZy5yZXBsYWNlKC8oaHR0cC4qP1xcXFwuKD86anBnfHdlYnB8cG5nfGpwZWcpKS4qLywgXFxcIiQxXFxcIiksXFxuICAgICAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZXJcXFwiKScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuXFxuZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyBcXFwi5oiR5piv5pyJ5bqV57q/55qEXFxcIi5mb250Y29sb3IoXFxcImdyZXlcXFwiKVxcbiAgICAgICAgICAgICAgICAuc21hbGwoKSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdcIixcInBhdGhcIjpcInlpXCIsXCJydWxlXCI6XCJqczpcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInlzb3J0XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5dXJsXFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJuZXh0UGFnXFxcIik7XFxuICAgIH0pKTtcXG52YXIgZCA9IFtdXFxuTVlfVVJMID0gZ2V0TXlWYXIoXFxcInl1cmxcXFwiLCBNWV9VUkwucmVwbGFjZSgvIyNcXFxcZCsvLCBcXFwiXFxcIikpO1xcbmxldCBuZXh0UGFnID0gZ2V0TXlWYXIoXFxcIm5leHRQYWdcXFwiLCBcXFwiXFxcIik7XFxuaWYgKG5leHRQYWcgJiYgTVlfUEFHRSA+IDEpIHtcXG4gICAgTVlfVVJMID0gbmV4dFBhZztcXG59IGVsc2UgaWYgKE1ZX1BBR0UgPiAxKSB7XFxuICAgIE1ZX1VSTCA9IFxcXCLmsqHmnInkuIvkuIDpobXlk6bwn5iRXFxcIlxcbn1cXG4vL3ZhciBodG1sID0gZmV0Y2hDb2RlQnlXZWJWaWV3KE1ZX1VSTClcXG4vL3ZhciBodG1sID0gZmV0Y2goTVlfVVJMKVxcblxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2ZldGNoJywge30pKVxcbiAgICAucnVsZSk7XFxudmFyIGh0bWwgPSBTdXBmZXRjaChNWV9VUkwpXFxuXFxudHJ5IHtcXG4gICAgdmFyIG5leHRVcmxsID0gcGQoaHRtbCwgXFxcIi5wYWdpbmF0aW9uJiYuYWN0aXZlK2xpJiZhJiZocmVmXFxcIik7XFxuICAgIHB1dE15VmFyKFxcXCJuZXh0UGFnXFxcIiwgbmV4dFVybGwpO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgY2xlYXJNeVZhcihcXFwibmV4dFBhZ1xcXCIpO1xcbiAgICAvLyB0b2FzdChcXFwi5aW95YOP5rKh5pyJ5LiL5LiA6aG15LqG77yBXFxcIik7XFxufVxcbmxvZyhNWV9VUkwpXFxuXFxuLy9sb2coXFxcIuS4i+S4gOmhtSAg77yaXFxcIituZXh0UGFnKVxcbmZ1bmN0aW9uIGdldEhlYWQodGl0bGUsIGNvbG9yKSB7XFxuICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIGNvbG9yICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXG59XFxuXFxuaWYgKE1ZX1RZUEUgIT0gXFxcInNlYXJjaFxcXCIpIHtcXG4gICAgdmFyIHBhZ2luYXRpb24gPSBwZGZhKGh0bWwsIFxcXCIucGFnaW5hdGlvbiYmbGk6bm90KC5wcmV2LXBhZ2UpOm5vdCgubmV4dC1wYWdlKVxcXCIpO1xcbiAgICB2YXIgY3VycmVudHUgPSBwZGZoKGh0bWwsIFxcXCJsaW5rW2hyZWZsYW5nPXpoXSYmaHJlZlxcXCIpXFxuXFxuICAgIHZhciBmaXJzdHUgPSBNWV9VUkwucmVwbGFjZSgvXFxcXC9wYWdlXFxcXC9cXFxcZCsvLCBcXFwiXFxcIilcXG4gICAgdmFyIGFjdGl2ZSA9IGN1cnJlbnR1Lm1hdGNoKC9cXFxcL3BhZ2VcXFxcLyhcXFxcZCspLykgPyBjdXJyZW50dS5tYXRjaCgvXFxcXC9wYWdlXFxcXC8oXFxcXGQrKS8pWzFdIDogMTtcXG4gICAgdmFyIGxhc3R1ID0gcGRmaChwYWdpbmF0aW9uLnBvcCgpLCBcXFwiYSYmaHJlZlxcXCIpIHx8IE1ZX1VSTFxcbiAgICB2YXIgbGFzdHAgPSBsYXN0dS5tYXRjaCgvXFxcXC9wYWdlXFxcXC8oXFxcXGQrKS8pID8gbGFzdHUubWF0Y2goL1xcXFwvcGFnZVxcXFwvKFxcXFxkKykvKVsxXSA6IDE7XFxuXFxuICAgIHZhciBwYWdpO1xcbiAgICBpZiAoYWN0aXZlID09IDEpIHtcXG4gICAgICAgIHBhZ2kgPSAwXFxuICAgIH0gZWxzZSBpZiAoYWN0aXZlID09IGxhc3RwKSB7XFxuICAgICAgICBwYWdpID0gMlxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcGFnaSA9IDFcXG4gICAgfVxcbiAgICB2YXIgdGl0bGUgPSBbXFxcIummllxcXCIsIFxcXCLot7PpobU6XFxcIiArIGFjdGl2ZSwgXFxcIuWwvumhtTpcXFwiICsgbGFzdHBdXFxuICAgIHZhciB1cmxzID0gW2ZpcnN0dSwgTVlfVVJMLCBsYXN0dV1cXG4gICAgaWYgKGN1cnJlbnR1ICE9PSBcXFwiaHR0cHM6Ly9zdXBqYXYuY29tL3poL1xcXCIgJiYgTVlfVVJMICE9IFxcXCLmsqHmnInkuIvkuIDpobXlk6bwn5iRXFxcIikge1xcbmlmIChNWV9QQUdFID4gMSkge1xcbmQucHVzaCh7Y29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIn0pXFxuZC5wdXNoKHtjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJ9KVxcbmQucHVzaCh7Y29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwifSlcXG5kLnB1c2goe2NvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIn0pXFxufVxcbiAgICAgICAgZm9yICh2YXIgaiBpbiB0aXRsZSkge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB1cmxzW2pdICsgJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaikgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwieXVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGopXFxuXFxuICAgICAgICAgICAgaWYgKGogPT0gMSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSAkKCcnLCAn6Zmk6aaW6aG15ZKM5bC+6aG15LmL5aSW55qE6aG156CBJykuaW5wdXQoKGxhc3R1LCBsYXN0cCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGlucHV0KSA+IDAgJiYgcGFyc2VJbnQoaW5wdXQpIDw9IHBhcnNlSW50KGxhc3RwKSAmJiBwYXJzZUludChpbnB1dCkgJSAxID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcHUgPSBsYXN0dS5yZXBsYWNlKC9cXFxcL3BhZ2VcXFxcL1xcXFxkKy8sIFxcXCIvcGFnZS9cXFwiICsgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInl1cmxcXFwiLCBqdW1wdSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fovpPlhaXmraPnoa7nmoTpobXnoIFcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIGxhc3R1LCBsYXN0cClcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBhZ2kgPT0gaiA/IGdldEhlYWQodGl0bGVbal0sICcjRkY2Njk5JykgOiB0aXRsZVtqXSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG4vL2lmIChNWV9QQUdFID09IDEpIHtcXG52YXIgc29ydCA9IHBkZmEoaHRtbCwgXFxcIi5zb3J0JiZhXFxcIik7XFxuZm9yICh2YXIgaiBpbiBzb3J0KSB7XFxuICAgIHZhciB0aXRsZSA9IHBkZmgoc29ydFtqXSwgJ1RleHQnKVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGdldE15VmFyKCd5c29ydCcsICcwJykgPT0gaiA/IGdldEhlYWQodGl0bGUsICcjRkY2Njk5JykgOiB0aXRsZSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB1cmw6IHBkKHNvcnRbal0sICdhJiZocmVmJykgKyAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChqKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3lzb3J0JywgailcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieXVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIGopXFxuICAgIH0pXFxufVxcbi8vfVxcblxcbnZhciBsaXN0ID0gcGRmYShodG1sLCBcXFwiLnBvc3RzJiYucG9zdFxcXCIpO1xcbmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgdmFyIGltZyA9IHBkKGl0ZW0sIFxcXCJpbWcmJmRhdGEtb3JpZ2luYWxcXFwiKTtcXG4gICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiYSYmdGl0bGVcXFwiKS5yZXBsYWNlKFxcXCJb5Lit5paH5a2X5bmVXVxcXCIsIFxcXCLwn4eo8J+Hs1xcXCIpLnJlcGxhY2UoXFxcIltcXFxcdTY1ZTBcXFxcdTc4MDHnoLTop6NdXFxcIiwgXFxcIvCflKVcXFwiKS5yZXBsYWNlKFxcXCJbNEtdXFxcIiwgXFxcIvCflqVcXFwiKS5yZXBsYWNlKFxcXCJb6Iux5paH5a2X5bmVXVxcXCIsIFxcXCLwn4e68J+HuFxcXCIpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgZGVzYzogcGRmaChpdGVtLCBcXFwiLm1ldGEtLS5kYXRlJiZUZXh0XFxcIiksXFxuICAgICAgICBpbWc6IGltZy5yZXBsYWNlKC8oaHR0cC4qP1xcXFwuKD86anBnfHdlYnB8cG5nfGpwZWcpKS4qLywgXFxcIiQxXFxcIiksXFxuICAgICAgICB1cmw6IHBkZmgoaXRlbSwgXFxcImEmJmhyZWZcXFwiKSArICdAcnVsZT1qczokLnJlcXVpcmUoXFxcImVyXFxcIiknLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8yXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdcIixcInBhdGhcIjpcImVyXCIsXCJydWxlXCI6XCJqczogdmFyIGQgPSBbXVxcbk1ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJyk7XFxubG9nKE1ZX1VSTClcXG4vL3ZhciBodG1sID0gZmV0Y2hDb2RlQnlXZWJWaWV3KE1ZX1VSTCk7XFxuLy92YXIgaHRtbCA9IGZldGNoKE1ZX1VSTClcXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9mZXRjaCcsIHt9KSlcXG4gICAgLnJ1bGUpO1xcbnZhciBodG1sID0gU3VwZmV0Y2goTVlfVVJMKVxcblxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenknLCB7fSkpXFxuICAgIC5ydWxlKTtcXG5cXG52YXIgdGl0bGUgPSBwZGZoKGh0bWwsICcuYXJjaGl2ZS10aXRsZSYmVGV4dCcpXFxuICAgIC5yZXBsYWNlKFxcXCJb5Lit5paH5a2X5bmVXVxcXCIsIFxcXCLwn4eo8J+Hs1xcXCIpXFxuICAgIC5yZXBsYWNlKFxcXCJbXFxcXHU2NWUwXFxcXHU3ODAx56C06KejXVxcXCIsIFxcXCLwn5SlXFxcIilcXG4gICAgLnJlcGxhY2UoXFxcIls0S11cXFwiLCBcXFwi8J+WpVxcXCIpXFxuICAgIC5yZXBsYWNlKFxcXCJb6Iux5paH5a2X5bmVXVxcXCIsIFxcXCLwn4e68J+HuFxcXCIpO1xcbnZhciDor4bliKvnoIEgPSB0aXRsZS5tYXRjaCgvXFxcXHcrKD86LXxfKVxcXFx3Kyg/OlxcXFxzK1xcXFxkKyk/fFxcXFx3Kyg/IVxcXFxuKVxcXFxzK1xcXFx3Ky8pWzBdXFxuaWYgKHRpdGxlICE9PSBudWxsKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzbWFsbD48Zm9udCBjb2xvcj0jZTU3YTFhPicgKyB0aXRsZSArICc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbnRpdGxlID0gdGl0bGUucmVwbGFjZSgvRkMyUFBWXFxcXHNcXFxcZCsvLFxcXCJcXFwiKS5yZXBsYWNlKC9cXFxcdystXFxcXGQrXFxcXHMvLFxcXCJcXFwiKVxcbi8v5Yqo5oCB5Yi35pawXFxudmFyIGRlc2MgPSBmaW5kSXRlbSgndHJhbnNkZXNjJykuZGVzY1xcbiAgICAgICAgICBpZighZGVzYyl7XFxuICAgIHZhciB0cmFuc2xhdGVzID0gJC5yZXF1aXJlKFxcXCJ0cmFuc1xcXCIpLnRyYW5zbGF0ZSh0aXRsZSlcXG4gICAgICB1cGRhdGVJdGVtKFxcXCJ0cmFuc2Rlc2NcXFwiLHtcXG4gICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnScrdHJhbnNsYXRlcy5mb250Y29sb3IoXFxcInJlZFxcXCIpLFxcbn0pXFxufWVsc2V7XFxudXBkYXRlSXRlbShcXFwidHJhbnNkZXNjXFxcIix7XFxuICAgICAgICAgIGRlc2M6ICcnLFxcbn0pXFxufSAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIiAgICAgIFxcbi8qICAgICAgIFxcbiAgICAgICAgICB2YXIgdHJhbnNsYXRlcyA9ICQucmVxdWlyZShcXFwidHJhbnNcXFwiKS50cmFuc2xhdGUodGl0bGUpICAgXFxuICAgICAgICAgIHJldHVybiBcXFwiY29uZmlybTovL1xcXCIgKyB0cmFuc2xhdGVzICsgXFxcIi5qczonaGlrZXI6Ly9lbXB0eScgXFxcIiAgICovXFxuICAgICAgICAgICAgICAgIH0sdGl0bGUpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBpZDogJ3RyYW5zZGVzYycsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+e9kemhtScsIGpzOiAkLnRvU3RyaW5nKCgpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ3ZWI6Ly9cXFwiICsgTVlfVVJMXFxuICAgICAgICAgICAgICAgICAgICAgICB9KX0se3RpdGxlOiAn5aSN5Yi2JywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfSx7dGl0bGU6ICfnmb7luqbnv7vor5EnLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vZmFueWkuYmFpZHUuY29tLyNqcC96aC9cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfSx7dGl0bGU6ICdEZWVwbOe/u+ivkScsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcIng1Oi8vaHR0cHM6Ly93d3cuZGVlcGwuY29tL3poL3RyYW5zbGF0b3ItbW9iaWxlI2phL3poL1xcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgfSx0aXRsZSl9LHt0aXRsZTogJ+iwt+atjOe/u+ivkScsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcIng1Oi8vaHR0cHM6Ly90cmFuc2xhdGUuZ29vZ2xlLmNvbS8/aGw9emgtQ04mc2w9amEmdGw9emgtQ04mdGV4dD1cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfV1cXG59XFxuICAgIH0pXFxufVxcblxcbnZhciBpbWcgPSBwZChodG1sLCBcXFwiLnBvc3QtbWV0YSYmaW1nJiZzcmNcXFwiKTtcXG5pZiAoaW1nICE9PSBudWxsKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WkjeWItuWbvueJhycsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpbWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBpbWdcXG4gICAgICAgICAgICAgICAgfSwgaW1nKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmiZPlvIDlm77niYcnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoaW1nKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1nXFxuICAgICAgICAgICAgICAgIH0sIGltZylcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5LiL6L295Zu+54mHJyxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGltZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJkb3dubG9hZDovL1xcXCIgKyBpbWdcXG4gICAgICAgICAgICAgICAgfSwgaW1nKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjogXFxcIj48c21hbGw+8J2QkvCdkITwnZCR8J2QlfCdkITwnZCRIO+8muW3suWxj+iUvUpQQeetieaXoOeUqOe6v+i3rzwvc21hbGw+PC9zcGFuPicsXFxuICAgIHVybDog6K+G5Yir56CBICsgJCgnI25vTG9hZGluZyMnKVxcbiAgICAgICAgLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3lqP3J1bGU98J2QifCdkJrwnZCv8J2Qg/CdkIEmdXJsPVxcXCIgKyBnZXRQdWJsaWNJdGVtKCdqYXZkYjAnLCAnaHR0cHM6Ly9qYXZkYi5jb20nKSArIFxcXCIvc2VhcmNo77yf77yfZj1hbGzvvIbvvIZwYWdlPWZ5cGFnZe+8hu+8hnE9XFxcIiArIGlucHV0XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICBwYWdlVGl0bGU6IOivhuWIq+eggVxcbiAgICB9XFxufSk7XFxuXFxuLy/lt7Lnu4/op6PmnpDnmoTnur/ot69cXG52YXIgUGxheWxpbmVkID0gW1xcXCJUVlxcXCIsIFxcXCJGU1RcXFwiLCBcXFwiU1RcXFwiLCBcXFwiVk9FXFxcIiwgXFxcIkRTXFxcIiwgXFxcIlN0cmVhbXRhcGVcXFwiLCBcXFwiVlRVXFxcIl1cXG5cXG5sZXQgYnRucyA9IHBkZmEoaHRtbCwgJy5idG5zJiYuYnRuc3QnKVxcbmlmIChidG5zLmxlbmd0aCA9PSAxKSB7XFxuICAgIGJ0bnN0ID0gcGRmYShidG5zWzBdLCAnYm9keSYmZGl2JylcXG59IGVsc2Uge1xcbiAgICBidG5zdCA9IHBkZmEoYnRuc1sxXSwgJ2JvZHkmJi5jZC1zZXJ2ZXInKVxcbn1cXG5idG5zdC5mb3JFYWNoKChjZHMsIGluZGV4KSA9PiB7XFxuICAgIGxldCBzZXJ2ZXIgPSBwZGZhKGNkcywgJ2JvZHkmJmE6bm90KDptYXRjaGVzKEpQQXxKU3xTU0J8TlN8TWl4ZHJvcHxOaW5qYVN0cmVhbXxNRHxHb1VubGltaXRlZCkpJyk7IC8v5bGP6JS957q/6Lev8J+IsvCfiLLwn4iy8J+IsvCfiLLwn4iyXFxuICAgIGlmIChidG5zdC5sZW5ndGggPiAxKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIFxcXCJDRFxcXCIuYm9sZCgpXFxuICAgICAgICAgICAgICAgIC5mb250Y29sb3IoXFxcIiM4QTJCRTJcXFwiKSArIChpbmRleCArIDEpXFxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXFxuICAgICAgICAgICAgICAgIC5ib2xkKClcXG4gICAgICAgICAgICAgICAgLmZvbnRjb2xvcihcXFwiIzhBMkJFMlxcXCIpICsgXFxcIjpcXFwiLmZvbnRjb2xvcihcXFwiIzhBMkJFMlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXJ2ZXIuZm9yRWFjaCgobGlzdCwgaW5kZXgpID0+IHtcXG4gICAgICAgIHZhciB0aXRsZSA9IHBkZmgobGlzdCwgJ1RleHQnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFBsYXlsaW5lZC5pbmRleE9mKHRpdGxlKSA+PSAwID8gJ+KAnOKAnOKAneKAnScgKyAn8J+XrycuZm9udGNvbG9yKFxcXCIjMjc3Njg2XFxcIikgKyB0aXRsZS5ib2xkKClcXG4gICAgICAgICAgICAgICAgLmZvbnRjb2xvcihcXFwiIzI3NzY4NlxcXCIpICsgJ/Cfl68nLmZvbnRjb2xvcihcXFwiIzI3NzY4NlxcXCIpIDogJ/Cfl6/igJzigJzigJ3igJ0nICsgdGl0bGUuYm9sZCgpICsgJ/Cfl68nLFxcbiAgICAgICAgICAgIHVybDogcGRmaChsaXN0LCAnYSYmZGF0YS1saW5rJykgKyBsYXp5LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB9KTtcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG59KVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG59KVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbn0pXFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxufSlcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAmOKAmCtUR+e+pOKAmeKAmVxcXCIsXFxuICAgIHVybDogXFxcImh0dHBzOi8vdC5tZS9TdXBqYXZjb20jaWdub3JlVmlkZW89dHJ1ZSNcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxufSlcXG5cXG5sZXQgaW5mbyA9IHBkZmEoaHRtbCwgJy5wb3N0LW1ldGEmJi5jYXRzJiZhJyk7XFxuaW5mby5mb3JFYWNoKChsaXN0LCBpbmRleCkgPT4ge1xcbiAgICB2YXIgdGl0bGUgPSBwZGZoKGxpc3QsICdUZXh0Jyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaW5kZXggPT0gMSA/ICfigJjigJhNYWtlcjrigJnigJknICsgdGl0bGUgOiAoaW5kZXggPiAxID8gJ+KAmOKAmENhc3Q64oCZ4oCZJyArIHRpdGxlIDogdGl0bGUpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0LCAnYSYmaHJlZicpICsgJyMjZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJ5aVxcXCIpJyxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogdGl0bGVcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGlmIChpbmRleCA9PSAxKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxufSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxufSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG59KVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxufSlcXG5sZXQgdGFncyA9IHBkZmEoaHRtbCwgJy5wb3N0LW1ldGEmJi50YWdzJiZhJyk7XFxudGFncy5mb3JFYWNoKChsaXN0LCBpbmRleCkgPT4ge1xcbiAgICB2YXIgdGl0bGUgPSBwZGZoKGxpc3QsICdUZXh0Jyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnCcgKyB0aXRsZSArICfigJ3igJ0nLFxcbiAgICAgICAgdXJsOiBwZChsaXN0LCAnYSYmaHJlZicpICsgJyMjZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJ5aVxcXCIpJyxcXG4gICAgICAgIGNvbF90eXBlOiAnZmxleF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRkZGRkY7XFxcIj7wnZCY8J2QqPCdkK4g8J2QjPCdkJrwnZCyIPCdkIDwnZCl8J2QrPCdkKgg8J2Qi/CdkKLwnZCk8J2Qnjwvc3Bhbj4nLFxcbiAgICB1cmw6IFxcXCJjb3B5Oi8vXFxcIiArIOivhuWIq+eggSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICB9XFxufSk7XFxuXFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsIFxcXCIucG9zdHMmJi5wb3N0XFxcIik7XFxubGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICB2YXIgaW1nID0gcGQoaXRlbSwgXFxcImltZyYmZGF0YS1vcmlnaW5hbFxcXCIpO1xcbiAgICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIFxcXCJhJiZ0aXRsZVxcXCIpXFxuICAgICAgICAucmVwbGFjZShcXFwiW+S4reaWh+Wtl+W5lV1cXFwiLCBcXFwi8J+HqPCfh7NcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoXFxcIltcXFxcdTY1ZTBcXFxcdTc4MDHnoLTop6NdXFxcIiwgXFxcIvCflKVcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoXFxcIls0S11cXFwiLCBcXFwi8J+WpVxcXCIpXFxuICAgICAgICAucmVwbGFjZShcXFwiW+iLseaWh+Wtl+W5lV1cXFwiLCBcXFwi8J+HuvCfh7hcXFwiKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgIGRlc2M6IHBkZmgoaXRlbSwgXFxcIi5tZXRhLS0uZGF0ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgaW1nOiBpbWcucmVwbGFjZSgvKGh0dHAuKj9cXFxcLig/OmpwZ3x3ZWJwfHBuZ3xqcGVnKSkuKi8sIFxcXCIkMVxcXCIpLFxcbiAgICAgICAgdXJsOiBwZGZoKGl0ZW0sIFxcXCJhJiZocmVmXFxcIikgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlclxcXCIpJyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMlxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogdGl0bGVcXG4gICAgICAgIH1cXG4gICAgfSlcXG59KVxcbmQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgXFxcIuaIkeaYr+acieW6lee6v+eahFxcXCIuZm9udGNvbG9yKFxcXCJncmV5XFxcIilcXG4gICAgICAgICAgICAgICAgLnNtYWxsKCksXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbn0pXFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxufSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekFwiLFwicGF0aFwiOlwibGF6eVwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgIC8vSlBB562J57q/6Lev5oyC5LqG5bey5bGP6JS977yM6ZyA6KaB5Y+v5Y675LqM57qn5oGi5aSNXFxuICAgIC8vVFbnur/ot68vL0ZTVOe6v+i3ry8vVk9F57q/6LevLy9TVOe6v+i3ry8vRFPnur/ot68vL1ZUVee6v+i3r1xcbiAgICAvLyDlrprkuYnkuIDkuKrop6PmnpDliIbovqjnjofnmoTlh73mlbBcXG4gICAgZnVuY3Rpb24gZ2V0UmVzb2x1dGlvbihuYW1lKSB7XFxuICAgICAgICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKC8oXFxcXGQrKS8pOyAvLyDmj5Dlj5bpmY3nuqfliIbovqjnjodcXG4gICAgICAgIHJldHVybiBtYXRjaCA/IHBhcnNlSW50KG1hdGNoWzFdLCAxMCkgOiAwOyAvLyDlpoLmnpzmsqHmnInljLnphY3liJnov5Tlm54wXFxuICAgIH1cXG4gICAgdmFyIGlkID0gaW5wdXQuc3BsaXQoJycpLnJldmVyc2UoKS5qb2luKCcnKTtcXG4gICAgdmFyIHVybCA9IGBodHRwczovL2xrMS5zdXByZW1lamF2LmNvbS9zdXBqYXYucGhwP2M9JHtpZH1gO1xcbiAgICB2YXIgcmVmZXJlciA9IGBodHRwczovL2xrMS5zdXByZW1lamF2LmNvbS9zdXBqYXYucGhwP2w9JHtpbnB1dH1gO1xcbiAgICB2YXIgbG9jYXRpb24gPSBKU09OLnBhcnNlKGZldGNoKHVybCwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogcmVmZXJlcixcXG4gICAgICAgIH0sXFxuICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICB9KSkudXJsLnJlcGxhY2UoLyMuKi8sIFxcXCJcXFwiKVxcbiAgICBsb2cobG9jYXRpb24pXFxuXFxuICAgIGlmIChsb2NhdGlvbi5pbmNsdWRlcyhcXFwiZW10dXJib3ZpZFxcXCIpKSB7XFxuXFxuICAgICAgICAvL+KRoFRW57q/6LevXFxuICAgICAgICB2YXIgZG9tYWluID0gZ2V0SG9tZShsb2NhdGlvbilcXG4gICAgICAgIHZhciBwYXRoID0gZmV0Y2gobG9jYXRpb24sIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmZXJlclxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgdmFyIHBsYXlVcmwgPSBwYXRoLm1hdGNoKC9odHRwcz8uKj9cXFxcLm0zdTgvKVswXTtcXG4gICAgICAgIHZhciBncm91cF9xdWFsaXR5ID0gZmV0Y2gocGxheVVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBsb2NhdGlvblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy8gbG9nKGdyb3VwX3F1YWxpdHkpXFxuICAgICAgICBoZ2hlc3RfcXVhbGl0eSA9IGdyb3VwX3F1YWxpdHkubWF0Y2goL15bXiNcXFxcc10rJC9nbSkubWFwKHYgPT4gdi5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpID8gdiArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCIgOiBwbGF5VXJsLnJlcGxhY2UoL1teXFxcXC9dKyQvLCB2KSlcXG4gICAgICAgIC8vbG9nKGhnaGVzdF9xdWFsaXR5KVxcbiAgICAgICAgbmFtZV9xdWFsaXR5ID0gZ3JvdXBfcXVhbGl0eS5tYXRjaCgvUkVTT0xVVElPTj0uKj9cXFxcLC9nbSkubWFwKG4gPT4gbi5yZXBsYWNlKC9SRVNPTFVUSU9OPXxcXFxcLC9nLCBcXFwiXFxcIikpXFxuXFxuICAgICAgICAvLyDmjInliIbovqjnjofpmY3luo/mjpLluo8g5YiG6L6o546HIOaVsOe7hO+8jOW5tuWQjOaXtuiwg+aVtCBoZ2hlc3RfcXVhbGl0eVxcbiAgICAgICAgdmFyIHNvcnRlZERhdGEgPSBuYW1lX3F1YWxpdHkubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcXG4gICAgICAgICAgICAgICAgbmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBoZ2hlc3RfcXVhbGl0eVtpbmRleF1cXG4gICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gZ2V0UmVzb2x1dGlvbihiLm5hbWUpIC0gZ2V0UmVzb2x1dGlvbihhLm5hbWUpKTtcXG4gICAgICAgIC8vIOWIhuW8gOaOkuW6j+WQjueahCBuYW1lcyDlkowgdXJscyDmlbDnu4RcXG4gICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNvcnRlZERhdGEubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKTtcXG4gICAgICAgIHZhciBzb3J0ZWRVcmxzID0gc29ydGVkRGF0YS5tYXAoaXRlbSA9PiBpdGVtLnVybCk7XFxuICAgICAgICBsZXQgcGxheWxpc3QgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgbmFtZXM6IHNvcnRlZE5hbWVzLFxcbiAgICAgICAgICAgIHVybHM6IHNvcnRlZFVybHMsXFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEFycmF5KGhnaGVzdF9xdWFsaXR5Lmxlbmd0aCkuZmlsbCh7XFxuICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIHBsYXlsaXN0O1xcblxcbiAgICB9IGVsc2UgaWYgKC9jaW5keWV5ZWZpbmFsfGZjMnN0cmVhbXxtaWNoYWVsYXBwbHlzb21lLy50ZXN0KGxvY2F0aW9uKSkge1xcblxcbiAgICAgICAgLy/ikaFGU1Tnur/ot69cXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2gobG9jYXRpb24sIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmZXJlclxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgdmFyIHNjcmlwdCA9IHBkZmgoaHRtbCwgXFxcImJvZHk+c2NyaXB0JiZIdG1sXFxcIikucmVwbGFjZShcXFwiZXZhbFxcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgdmFyIHVhcyA9IGV2YWwoc2NyaXB0KVxcbiAgICAgICAgdmFyIHBsYXlVcmwgPSB1YXMubWF0Y2goL1xcXCIoaHR0cHM/LiptM3U4Lio/KVxcXCIvKVsxXVxcbiAgICAgICAgdmFyIGdyb3VwX3F1YWxpdHkgPSBmZXRjaChwbGF5VXJsLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGxvY2F0aW9uXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBncm91cF9xdWFsaXR5ID0gZ3JvdXBfcXVhbGl0eS5zcGxpdChcXFwiXFxcXG5cXFxcblxcXCIpWzBdXFxuICAgICAgICAvLyBsb2coZ3JvdXBfcXVhbGl0eSlcXG4gICAgICAgIGhnaGVzdF9xdWFsaXR5ID0gZ3JvdXBfcXVhbGl0eS5tYXRjaCgvXlteI1xcXFxzXSskL2dtKS5tYXAodiA9PiB2LmluY2x1ZGVzKFxcXCJodHRwXFxcIikgPyB2ICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIiA6IHBsYXlVcmwucmVwbGFjZSgvW15cXFxcL10rJC8sIHYpKVxcbiAgICAgICAgLy9sb2coaGdoZXN0X3F1YWxpdHkpXFxuICAgICAgICBuYW1lX3F1YWxpdHkgPSBncm91cF9xdWFsaXR5Lm1hdGNoKC9SRVNPTFVUSU9OPS4qP1xcXFwsL2dtKS5tYXAobiA9PiBuLnJlcGxhY2UoL1JFU09MVVRJT049fFxcXFwsL2csIFxcXCJcXFwiKSlcXG5cXG4gICAgICAgIC8vIOaMieWIhui+qOeOh+mZjeW6j+aOkuW6jyDliIbovqjnjocg5pWw57uE77yM5bm25ZCM5pe26LCD5pW0IGhnaGVzdF9xdWFsaXR5XFxuICAgICAgICB2YXIgc29ydGVkRGF0YSA9IG5hbWVfcXVhbGl0eS5tYXAoKG5hbWUsIGluZGV4KSA9PiAoe1xcbiAgICAgICAgICAgICAgICBuYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6IGhnaGVzdF9xdWFsaXR5W2luZGV4XVxcbiAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBnZXRSZXNvbHV0aW9uKGIubmFtZSkgLSBnZXRSZXNvbHV0aW9uKGEubmFtZSkpO1xcbiAgICAgICAgLy8g5YiG5byA5o6S5bqP5ZCO55qEIG5hbWVzIOWSjCB1cmxzIOaVsOe7hFxcbiAgICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc29ydGVkRGF0YS5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpO1xcbiAgICAgICAgdmFyIHNvcnRlZFVybHMgPSBzb3J0ZWREYXRhLm1hcChpdGVtID0+IGl0ZW0udXJsKTtcXG4gICAgICAgIGxldCBwbGF5bGlzdCA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBuYW1lczogc29ydGVkTmFtZXMsXFxuICAgICAgICAgICAgdXJsczogc29ydGVkVXJscyxcXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgQXJyYXkoaGdoZXN0X3F1YWxpdHkubGVuZ3RoKS5maWxsKHtcXG4gICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcIlxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gcGxheWxpc3Q7XFxuXFxuICAgIH0gZWxzZSBpZiAobG9jYXRpb24uaW5jbHVkZXMoXFxcInN0cmVhbXRhcGVcXFwiKSkge1xcblxcbiAgICAgICAgLy/ikaJTVOe6v+i3r1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChsb2NhdGlvbiwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZlcmVyXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIHZhciBwYXR0ZXJuID0gaHRtbC5tYXRjaCgvXFxcXCgnIyguKiknXFxcXCkvKVsxXVxcbiAgICAgICAgdmFyIHNyYyA9IFxcXCJ2YXIgc3JjbGluayA9IFxcXCIgKyBodG1sLm1hdGNoKG5ldyBSZWdFeHAoXFxcIidcXFwiICsgcGF0dGVybiArIFxcXCIuKj89KFteO10rKVxcXCIpKVsxXVxcbiAgICAgICAgZXZhbChzcmMpXFxuICAgICAgICB2YXIgbGluayA9IFxcXCJodHRwczpcXFwiICsgc3JjbGluayArIFxcXCImc3RyZWFtPTFcXFwiXFxuICAgICAgICB2YXIgcGxheVVybCA9IEpTT04ucGFyc2UoZmV0Y2gobGluaywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBsb2NhdGlvbixcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXFxuICAgICAgICB9KSkudXJsXFxuICAgICAgICByZXR1cm4gcGxheVVybCArIFxcXCI7e1JlZmVyZXJAXFxcIiArIGxvY2F0aW9uICsgXFxcIn1cXFwiXFxuXFxuICAgIH0gZWxzZSBpZiAoL3ZvZS8udGVzdChsb2NhdGlvbikpIHtcXG5cXG4gICAgICAgIC8v4pGlVk9F57q/6LevXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGxvY2F0aW9uLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZmVyZXJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciBjdXJyZW50VXJsID0gaHRtbC5tYXRjaCgvaHR0cHM/W14nXSsvKVswXTtcXG4gICAgICAgIHZhciBzb3VyY2VzID0gZmV0Y2goY3VycmVudFVybCkubWF0Y2goL3ZhciBzb3VyY2VzW15cXFxcO10rLylbMF0gICBcXG4gICAgICAgIGV2YWwoc291cmNlcykgICBcXG4gICAgICAgIHZhciBwbGF5VXJsID0gYmFzZTY0RGVjb2RlKHNvdXJjZXMuaGxzKSBcXG4gICAgICAgIHJldHVybiBwbGF5VXJsICsgXFxcIjt7UmVmZXJlckBcXFwiICsgbG9jYXRpb24gKyBcXFwifVxcXCJcXG5cXG4gICAgfSBlbHNlIGlmICgvZDAwMDBkfGRvb2R8ZHMycGxheS8udGVzdChsb2NhdGlvbikpIHtcXG5cXG4gICAgICAgIC8v4pGjRFPnur/ot69cXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2gobG9jYXRpb24sIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmZXJlclxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgcGFzc19tZDUgPSBnZXRIb21lKGxvY2F0aW9uKSArIGh0bWwubWF0Y2goL1xcXFwvcGFzc19tZDVbXlxcXCInXSsvKVswXVxcbiAgICAgICAgdmFyIHRva2VuID0gaHRtbC5tYXRjaCgvY29va2llSW5kZXguKj9cXFxcJyguKj8pXFxcXCcvKVsxXVxcbiAgICAgICAgdmFyIGRhdGEgPSBmZXRjaChwYXNzX21kNSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBsb2NhdGlvblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuXFxuICAgICAgICBmdW5jdGlvbiBtYWtlUGxheSh0b2tlbikge1xcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHQgPSBcXFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgbiA9IHQubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICAgICAgbyA9IDA7IDEwID4gbzsgbysrKVxcbiAgICAgICAgICAgICAgICBhICs9IHQuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG4pKTtcXG4gICAgICAgICAgICByZXR1cm4gYSArIFxcXCI/dG9rZW49XFxcIiArIHRva2VuICsgXFxcIiZleHBpcnk9XFxcIiArIERhdGUubm93KCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgdmFyIHBsYXlVcmwgPSBkYXRhICsgbWFrZVBsYXkodG9rZW4pXFxuICAgICAgICByZXR1cm4gcGxheVVybCArIFxcXCIjaXNWaWRlbz10cnVlIzt7UmVmZXJlckBcXFwiICsgbG9jYXRpb24gKyBcXFwifVxcXCJcXG5cXG4gICAgfSBlbHNlIGlmIChsb2NhdGlvbi5pbmNsdWRlcyhcXFwidnRiZS50b1xcXCIpKSB7XFxuXFxuICAgICAgICAvL+KRpFZUVee6v+i3r1xcbiAgICAgICAgZnVuY3Rpb24gZXZhbGRlY29kZSh0ZXh0KSB7XFxuICAgICAgICAgICAgdmFyIGNvZGUgPSAnJztcXG4gICAgICAgICAgICB2YXIgcyA9IHRleHQucmVwbGFjZSgvXmV2YWwvLCAnJylcXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ3JldHVybiBwJywgJ2NvZGUrPXAnKVxcbiAgICAgICAgICAgIGV2YWwocyk7XFxuICAgICAgICAgICAgcmV0dXJuIGNvZGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgaG9zdFJlZ2V4ID0gKHVybCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IHVybC5tYXRjaCgvXig/Omh0dHBzPzpcXFxcL1xcXFwvKT8oPzp3d3dcXFxcLik/KFthLXpBLVowLTktXXsxLDYzfVxcXFwuKStbYS16QS1aXXsyLDZ9L2kpO1xcbiAgICAgICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzBdIDogdXJsO1xcbiAgICAgICAgfTtcXG5cXG4gICAgICAgIGxldCBob3N0ID0gaG9zdFJlZ2V4KHJlZmVyZXIpXFxuXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGxvY2F0aW9uLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBSZWZlcmVyOiBob3N0LFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgaWZyYW1lID0gcGRmYShodG1sLCBcXFwiaWZyYW1lXFxcIik7XFxuXFxuICAgICAgICBpZiAoaWZyYW1lLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICBodG1sID0gZmV0Y2gocGRmaChpZnJhbWVbMF0sIFxcXCJpZnJhbWUmJnNyY1xcXCIpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IGhvc3QsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHNjcmlwdHMgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiZzY3JpcHRcXFwiKTtcXG4gICAgICAgIGxldCBzY3JpcHQgPSBzY3JpcHRzLmZpbHRlcih4ID0+IHguaW5jbHVkZXMoJ2V2YWwnKSkubWFwKG0gPT4gcGRmaChtLCBcXFwic2NyaXB0JiZIdG1sXFxcIikpWzBdO1xcbiAgICAgICAgaWYgKHNjcmlwdCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5pWw5o2uJ1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGV0IG0zdTggPSAvZmlsZTpcXFwiKC4qPylcXFwiL2cuZXhlYyhldmFsZGVjb2RlKHNjcmlwdCkpWzFdO1xcbiAgICAgICAgcmV0dXJuIG0zdTg7XFxuXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsb2coXFxcIumdqeWRveWwmuacquaIkOWKnyzlkIzlv5fku43pnIDliqrlipshXFxcIilcXG4gICAgICAgIHJldHVybiBcXFwiY29uZmlybTovL+WSsyzmnKznur/ot6/ov5nkuKrlnLDlnYDlubbmsqHmnInop6PmnpDvvIzml6Xlv5flt7LmiZPljbDlh7rvvIzmlazor7fmn6XnnIsuanM6J2hpa2VyOi8vZW1wdHknIFxcXCJcXG4gICAgfVxcbn0pXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnv7vor5FcIixcInBhdGhcIjpcInRyYW5zXCIsXCJydWxlXCI6XCIgICAgLy/nv7vor5FcXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKHRleHQpIHtcXG4gICAgICAgIHZhciBzd2l0Y2h0cmFucyA9IGdldEl0ZW0oJ3N3aXRjaHRyYW5zJywgJ+W9qeS6keWwj+ivkScpO1xcbiAgICAgICAgaWYgKCBzd2l0Y2h0cmFucyA9PSB0cnVlIHx8IHN3aXRjaHRyYW5zID09IFxcXCLlvankupHlsI/or5FcXFwiKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgdmFyIHRvID0gJ3poJ1xcbiAgICAgICAgICAgICAgICB2YXIgZnJvbSA9ICdhdXRvJ1xcblxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbml0X2RhdGEoc291cmNlX2xhbmcsIHRhcmdldF9sYW5nKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9zX3R5cGU6ICdpb3MnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9pZDogJ0YxRjkwMkY3LTE3ODAtNEM4OC04NDhELTcxRjM1RDg4QTYwMicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNfdHlwZTogc291cmNlX2xhbmcgKyAnMicgKyB0YXJnZXRfbGFuZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYTogJ3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaWQ6IDQyNDIzODMzNSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWN0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFJhbmRvbU51bWJlcigpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OSkgKyAxMDAwMDBcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByYW5kICogMTAwMFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNvbnN0IHBvc3RfZGF0YSA9IGluaXRfZGF0YShmcm9tLCB0bylcXG4gICAgICAgICAgICAgICAgcG9zdF9kYXRhLnNvdXJjZSA9IHRleHRcXG4gICAgICAgICAgICAgICAgcG9zdF9kYXRhLnJlcXVlc3RfaWQgPSBnZXRSYW5kb21OdW1iZXIoKVxcbiAgICAgICAgICAgICAgICBsZXQgcmVzID0gZmV0Y2goJ2h0dHBzOi8vaW50ZXJwcmV0ZXIuY3lhcGkuY24vdjEvdHJhbnNsYXRvcicsIHtcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAneC1hdXRob3JpemF0aW9uJzogJ3Rva2VuIHNzZGoyNzNrc2Rpd2k5MjNic2Q5JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAndXNlci1hZ2VudCc6ICdjYWl5dW5JbnRlcnByZXRlci81IENGTmV0d29yay8xNDA0LjAuNSBEYXJ3aW4vMjIuMy4wJyxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBwb3N0X2RhdGEsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKHJlcylcXG4gICAgICAgICAgICAgICAgICAgIC50YXJnZXRcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIFxcXCLjgJDimIHvuI/jgJFcXFwiXFxuICAgICAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi57+76K+R5aSx6LSl77yM5L2/55So5Y6f5paHXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIGlmIChzd2l0Y2h0cmFucyA9PSBcXFwi5bCP54mb57+76K+RXFxcIikge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkubml1dHJhbnMuY29tL05pdVRyYW5zU2VydmVyL3RyYW5zbGF0aW9uXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGFwaSA9IGdldEl0ZW0oJ2FwaScpO1xcbiAgICAgICAgICAgICAgICBpZiAoYXBpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5nID0gXFxcImh0dHBzOi8vdGVzdC5uaXV0cmFucy5jb20vTml1VHJhbnNTZXJ2ZXIvbGFuZ3VhZ2U/c3JjX3RleHQ9XFxcIiArIHRleHQgKyBcXFwiJnNvdXJjZT10ZXh0XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnJvbSA9IEpTT04ucGFyc2UoZmV0Y2gobGFuZywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMTAwMFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxhbmd1YWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBwb3N0KHVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfdGV4dDogdGV4dCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGZyb20sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogXFxcInpoXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaWtleTogYXBpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMjIzXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdClcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50Z3RfdGV4dCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS50Z3RfdGV4dCArIFxcXCLjgJDwn5Cu44CRXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhcXFwi57+76K+R5aSx6LSl77yM5L2/55So5Y6f5paHXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcIue/u+ivkeWksei0pe+8jOWOn+aWh+S4uuepulxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi6aKE5aSE55CG6K+35aGr5YaZ57+76K+RYXBpXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCLnv7vor5HlpLHotKXvvIzkvb/nlKjljp/mlodcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiB0ZXh0XFxuICAgICAgICB9XFxuICAgIH07XFxuXFxuICAgICQuZXhwb3J0cy50cmFuc2xhdGUgPSB0cmFuc2xhdGVcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOiogFwiLFwicGF0aFwiOlwieWl5YW5cIixcInJ1bGVcIjpcIi8vYXV0aG9yOueyieWmuVxcbmZ1bmN0aW9uIHNhdmVfZGF5X3NheV9jYWNoZSgpIHtcXG4gICAgbGV0IGRheV9zYXlfY2FjaGUgPSB7fVxcbiAgICBsZXQgZGF5X3NheV9odG1sID0gZmV0Y2goJ2h0dHBzOi8vdjEuaGl0b2tvdG8uY24nLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ1VzZXItQWdlbnQnOlxcbiAgICAgICAgICAgICAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMi4wLjAuMCBTYWZhcmkvNTM3LjM2JyxcXG4gICAgICAgIH0sXFxuICAgIH0pXFxuICAgIGRheV9zYXlfaHRtbCA9IEpTT04ucGFyc2UoZGF5X3NheV9odG1sKVxcbiAgICBkYXlfc2F5X2NhY2hlWydjb250ZW50J10gPSBkYXlfc2F5X2h0bWxbJ2hpdG9rb3RvJ11cXG4gICAgZGF5X3NheV9jYWNoZVsndGltZSddID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMClcXG4gICAgc3RvcmFnZTAucHV0TXlWYXIoJ2RheXNheScsIGRheV9zYXlfY2FjaGUpXFxuICAgIHJldHVybiBkYXlfc2F5X2h0bWxbJ2hpdG9rb3RvJ11cXG59XFxuXFxuICAgIGxldCBkYXlfc2F5ID0gJydcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBkYXlfc2F5X2NhY2hlID0ge31cXG4gICAgICAgIGxldCBkYXlfdGltZSA9IDBcXG4gICAgICAgIGlmIChzdG9yYWdlMC5nZXRNeVZhcignZGF5c2F5JykpIHtcXG4gICAgICAgICAgICBkYXlfc2F5X2NhY2hlID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2RheXNheScsIHt9KVxcbiAgICAgICAgICAgIGRheV90aW1lID0gZGF5X3NheV9jYWNoZVsndGltZSddXFxuICAgICAgICAgICAgaWYgKE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApIC0gZGF5X3RpbWUgPj0gMTApIHtcXG4gICAgICAgICAgICAgICAgZGF5X3NheSA9IHNhdmVfZGF5X3NheV9jYWNoZSgpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF5X3NheSA9IGRheV9zYXlfY2FjaGVbJ2NvbnRlbnQnXVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZGF5X3NheSA9IHNhdmVfZGF5X3NheV9jYWNoZSgpXFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgZGF5X3NheSA9ICcnXFxuICAgIH1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIua6kOeggVwiLFwicGF0aFwiOlwiZmV0Y2hcIixcInJ1bGVcIjpcImZ1bmN0aW9uIFN1cGZldGNoKHVybCkge1xcbiAgICBsZXQgaHRtbDtcXG4gICAgaWYgKGdldE15VmFyKFxcXCJmZXRjaFxcXCIsIFxcXCIwXFxcIikgPT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICBodG1sID0gZmV0Y2godXJsKVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaHRtbCA9IGZldGNoQ29kZUJ5V2ViVmlldyh1cmwpXFxuICAgIH1cXG4gICAgcmV0dXJuIGh0bWw7XFxufVwifV0iLCJpY29uIjoiaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL3pyd0s0LndlYnAiLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment