Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@𝐒𝐮𝐩𝐣𝐚𝐯@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi8J2QkvCdkK7wnZCp8J2Qo/CdkJrwnZCvIiwiYXV0aG9yIjoiUiIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2h0dHBzOi8vc3VwamF2LmNvbS96aC8jI2Z5cGFnZSIsInZlcnNpb24iOjIwMjUwMjI2LCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InZpZGVvIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG4gICAgYWRkTGlzdGVuZXIoXCJvbkNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgY2xlYXJNeVZhcihcIm5leHRQYWdlXCIpO1xuICAgIH0pO1xuLypcbmFkZExpc3RlbmVyKFwib25SZWZyZXNoXCIsICgpID0+IHtcbiAgICBjbGVhck15VmFyKFwibmV4dFBhZ2VcIik7XG59KTtcbiovXG52YXIgZCA9IFtdXG52YXIgcmVzID0gW11cbk1ZX1VSTCA9IE1ZX1VSTC5zcGxpdChcIiMjXCIpWzFdXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihcInVybFwiLCBNWV9VUkwpO1xubGV0IG5leHRQYWdlID0gZ2V0TXlWYXIoXCJuZXh0UGFnZVwiLCBcIlwiKTtcbmlmIChuZXh0UGFnZSAmJiBNWV9QQUdFID4gMSkge1xuICAgIHRydWVfdXJsID0gbmV4dFBhZ2U7XG59IGVsc2UgaWYgKE1ZX1BBR0UgPiAxKSB7XG4gICAgdHJ1ZV91cmwgPSBcIuayoeacieS4i+S4gOmhteWTpvCfmJFcIlxufVxudmFyIGh0bWwgPSBmZXRjaCh0cnVlX3VybCwgSlNPTi5wYXJzZShnZXRNeVZhcignaGVhZGVycycpKSlcbi8vdmFyIGh0bWwgPSBmZXRjaENvZGVCeVdlYlZpZXcodHJ1ZV91cmwpXG5sb2codHJ1ZV91cmwpXG4vL2xvZyhodG1sKVxudHJ5IHtcbiAgICBsZXQgbmV4dFVybCA9IHBkKGh0bWwsIFwiLnBhZ2luYXRpb24mJi5hY3RpdmUrbGkmJmEmJmhyZWZcIik7XG4gICAgcHV0TXlWYXIoXCJuZXh0UGFnZVwiLCBuZXh0VXJsKTtcbn0gY2F0Y2ggKGUpIHtcbiAgICBjbGVhck15VmFyKFwibmV4dFBhZ2VcIik7XG4gICAgLy8gdG9hc3QoXCLlpb3lg4/msqHmnInkuIvkuIDpobXkuobvvIFcIik7XG59XG5cbmlmIChodG1sLmluY2x1ZGVzKFwi6K+356iN5YCZ4oCmXCIpIHx8IGh0bWwuaW5jbHVkZXMoXCJKdXN0IGEgbW9tZW50XCIpKSB7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+eCueWHu+iOt+WPlmNvb2tpZScuZm9udGNvbG9yKCcjRkYwMEZGJykuYmlnKCksXG4gICAgICAgIHVybDogdHJ1ZV91cmwsXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH1cbiAgICB9LCB7XG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArICfngrnlh7vliLfmlrAnLmZvbnRjb2xvcignI0ZGMDAwMCcpLmJpZygpLFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcbiAgICAgICAgICAgIHJldHVybiBcImhpa2VyOi8vZW1wdHlcIlxuICAgICAgICB9KSxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgfVxuICAgIH0sIHtcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+i2heaAp+S7t+avlOacuuWcuicuZm9udGNvbG9yKCcjRkY2Njk5JykuYmlnKCkuYmlnKCksXG4gICAgICAgIGRlc2M6ICfpppnmuK/oioLngrnlj6/ku6Xov4dzdXBqYXYuY29t6aqM6K+BJyxcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vYXBwLmFpc3UubWUvIy9yZWdpc3Rlcj9jb2RlPUQzTlRFRWZ5XCIsXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZSwgY29sb3IpIHtcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XCInICsgY29sb3IgKyAnXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+Jztcbn1cblxuJC5yZXF1aXJlKFwiY2F0ZWdvcnlcIikoKVxuXG5pZiAodHJ1ZV91cmwgPT0gXCJodHRwczovL3N1cGphdi5jb20vemgvXCIpIHtcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XG4gICAgICAgICQucmVxdWlyZShcImhvbWVcIilcbiAgICB9XG59IGVsc2UgaWYgKC90YWd8bWFrZXJ8Y2FzdC8udGVzdCh0cnVlX3VybCkpIHtcbiAgICAkLnJlcXVpcmUoXCJ0YWJzXCIpXG59IGVsc2Uge1xuICAgICQucmVxdWlyZShcImxpc3RcIikoKVxufVxuc2V0UHJlUmVzdWx0KHJlcylcbnNldFJlc3VsdChkKSIsInNlYXJjaF91cmwiOiJodHRwczovL3N1cGphdi5jb20vemgvcGFnZS9meXBhZ2U/cz0qKiIsImdyb3VwIjoi4pGh55SfIiwic2VhcmNoRmluZCI6ImpzOlxuTVlfVVJMID0gTVlfVVJMLnJlcGxhY2UoL2ZjMi0/cHB2LT98ZmMyLT8vaSxcIlwiKVxuJC5yZXF1aXJlKFwieWlcIikiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiJpZiAoIWdldE15VmFyKCdoZWFkZXJzJykpe1xucHV0TXlWYXIoJ2hlYWRlcnMnLHtoZWFkZXJzOntcIkNvb2tpZVwiOlwiY2ZfY2xlYXJhbmNlPTNTd24uSXpjYVE3Z2VwY01Ib0trbU0zYnNfSjI2eC5CV1c2SEJUbFV0ejAtMTcwNTI2NjAzMC0wLTItYTY1OWIzOGMuNjM5Yzg1ZGMuZjE1OGVjNmMtMTYwLjIuMTcwNTI2NjAzMFwiLFwiVXNlci1BZ2VudFwiOlwiTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyAxNl80XzEgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzE2LjQgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjFcIixcIlJlZmVyZXJcIjpcImh0dHBzOi8vc3VwamF2LmNvbS9cIn19KVxufSIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbnsbtcIixcInBhdGhcIjpcImNhdGVnb3J5XCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSAoKSA9PiB7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb3J0XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJwYWdpXFxcIik7XFxuICAgICAgICAvLyBjbGVhck15VmFyKFxcXCJ1cmxcXFwiKTsgICBcXG4gICAgfSkpO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25SZWZyZXNoXFxcIiwgKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic29ydFxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicGFnaVxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwidXJsXFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ0YWJcXFwiKTtcXG4gICAgfSk7XFxuXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UveWl5YW4nLCB7fSkpLnJ1bGUpO1xcblxcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICByZXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLwn5SNXFxcIixcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHIpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnRyaW0oKSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2tleXdvcmQnLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoVXJsID0gXFxcImh0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsgaW5wdXQucmVwbGFjZSgvZmMyLT9wcHYtP3xmYzItPy9pLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBzZWFyY2hVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgY29uZmlybTovLyR7cn0uanM6J2hpa2VyOi8vZW1wdHknYFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgZGF5X3NheSksXFxuICAgICAgICAgICAgZGVzYzogZGF5X3NheSwvLyAn5pu+57uP5rKn5rW36Zq+5Li65rC0LOmZpOWNtOW3q+WxseS4jeaYr+S6kScsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigna2V5d29yZCcsICcnKSB8fCBcXFwiXFxcIixcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciB0YWJzID0gcGRmYShodG1sLCBcXFwiLm5hdiYmbGk6bm90KGxpOmhhcyguc3ViLW1lbnUpKTpub3QoOmhhcyhhW3RhcmdldF0pKTpub3QoOmhhcyhhW3RpdGxlXSkpXFxcIik7XFxuICAgICAgICBmb3IgKHZhciBpIGluIHRhYnMpIHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHRhYnNbaV0sICdUZXh0JylcXG4gICAgICAgICAgICByZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcigndGFiJywgJzAnKSA9PSBpID8gZ2V0SGVhZCh0aXRsZSwgJyNGRjY2OTknKSA6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkKHRhYnNbaV0sICdhJiZocmVmJykgKyAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigndGFiJywgaSlcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBpZiAoaSA9PSA1KSB7XFxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmVzLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIHZhciBwYWdpbmF0aW9uID0gcGRmYShodG1sLCBcXFwiLnBhZ2luYXRpb24mJmxpOm5vdCgucHJldi1wYWdlKTpub3QoLm5leHQtcGFnZSlcXFwiKTtcXG4gICAgdmFyIGN1cnJlbnR1ID0gcGRmaChodG1sLCBcXFwibGlua1tocmVmbGFuZz16aF0mJmhyZWZcXFwiKVxcblxcbiAgICB2YXIgZmlyc3R1ID0gY3VycmVudHUgPyBjdXJyZW50dS5yZXBsYWNlKC9cXFxcL3BhZ2VcXFxcL1xcXFxkKy8sIFxcXCJcXFwiKSA6IFxcXCJodHRwczovL3N1cGphdi5jb20vemgvXFxcIlxcbiAgICB2YXIgYWN0aXZlID0gY3VycmVudHUubWF0Y2goL1xcXFwvcGFnZVxcXFwvKFxcXFxkKykvKSA/IGN1cnJlbnR1Lm1hdGNoKC9cXFxcL3BhZ2VcXFxcLyhcXFxcZCspLylbMV0gOiAxO1xcbiAgICB2YXIgbGFzdHUgPSBwZGZoKHBhZ2luYXRpb24ucG9wKCksIFxcXCJhJiZocmVmXFxcIikgfHwgY3VycmVudHVcXG4gICAgdmFyIGxhc3RwID0gbGFzdHUubWF0Y2goL1xcXFwvcGFnZVxcXFwvKFxcXFxkKykvKSA/IGxhc3R1Lm1hdGNoKC9cXFxcL3BhZ2VcXFxcLyhcXFxcZCspLylbMV0gOiAxO1xcblxcbiAgICBpZiAoIWN1cnJlbnR1LmluY2x1ZGVzKFxcXCJwb3B1bGFyXFxcIikpIHtcXG4gICAgICAgIGxhc3R1ID0gbGFzdHUucmVwbGFjZSgvXFxcXC9wYWdlXFxcXC9cXFxcZCsvLCBcXFwiL3BhZ2UvXFxcIiArIChsYXN0cCAtIDApKVxcbiAgICAgICAgbGFzdHAgPSBsYXN0cCAtIDBcXG4gICAgfVxcblxcbiAgICB2YXIgcGFnaTtcXG4gICAgaWYgKGFjdGl2ZSA9PSAxKSB7XFxuICAgICAgICBwYWdpID0gMFxcbiAgICB9IGVsc2UgaWYgKGFjdGl2ZSA9PSBsYXN0cCkge1xcbiAgICAgICAgcGFnaSA9IDJcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHBhZ2kgPSAxXFxuICAgIH1cXG4gICAgdmFyIHRpdGxlID0gW1xcXCLpppZcXFwiLCBcXFwi6Lez6aG1OlxcXCIgKyBhY3RpdmUsIFxcXCLlsL46XFxcIiArIGxhc3RwXVxcbiAgICB2YXIgdXJscyA9IFtmaXJzdHUsIE1ZX1VSTCwgbGFzdHVdXFxuICAgIGlmIChjdXJyZW50dSAhPT0gXFxcImh0dHBzOi8vc3VwamF2LmNvbS96aC9cXFwiKSB7XFxuICAgICAgICBmb3IgKHZhciBqIGluIHRpdGxlKSB7XFxuXFxuICAgICAgICAgICAgdmFyIHVybCA9IHVybHNbal0gKyAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChqKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGopXFxuXFxuICAgICAgICAgICAgaWYgKGogPT0gMSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSAkKCcnLCAn6Zmk6aaW6aG15ZKM5bC+6aG15LmL5aSW55qE6aG156CBJykuaW5wdXQoKGxhc3R1LCBsYXN0cCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KGlucHV0KSA+IDAgJiYgcGFyc2VJbnQoaW5wdXQpIDw9IHBhcnNlSW50KGxhc3RwKSAmJiBwYXJzZUludChpbnB1dCkgJSAxID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcHUgPSBsYXN0dS5yZXBsYWNlKC9cXFxcL3BhZ2VcXFxcL1xcXFxkKy8sIFxcXCIvcGFnZS9cXFwiICsgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGp1bXB1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5q2j56Gu55qE6aG156CBXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCBsYXN0dSwgbGFzdHApXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBhZ2kgPT0gaiA/IGdldEhlYWQodGl0bGVbal0sICcjRkY2Njk5JykgOiB0aXRsZVtqXSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICB2YXIgc290dCA9IGN1cnJlbnR1LnJlcGxhY2UoLy4qPyg9KC4qKXwkKS8sIFxcXCIkMlxcXCIpXFxuICAgICAgICB2YXIgc29ydCA9IHBkZmEoaHRtbCwgXFxcIi5zb3J0JiZhXFxcIik7XFxuICAgICAgICBzb3R0ID0gc290dCA9PT0gXFxcIlxcXCIgPyBwZGZoKHNvcnRbMF0sICdUZXh0JykudG9Mb3dlckNhc2UoKSA6IHNvdHQ7XFxuICAgICAgICBmb3IgKHZhciBqIGluIHNvcnQpIHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKHNvcnRbal0sICdUZXh0JylcXG4gICAgICAgICAgICByZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBzb3R0ID09IHRpdGxlLnRvTG93ZXJDYXNlKCkgPyBnZXRIZWFkKHRpdGxlLCAnI0ZGNjY5OScpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDogcGQoc29ydFtqXSwgJ2EmJmhyZWYnKSArICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIGopXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG5cXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIl+ihqFwiLFwicGF0aFwiOlwibGlzdFwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0gKCkgPT4ge1xcbnZhciBsaXN0ID0gcGRmYShodG1sLCBcXFwiLnBvc3RzJiYucG9zdFxcXCIpO1xcbmxpc3QuZm9yRWFjaChpdGVtPT57XFxuICAgdmFyIGltZyA9IHBkKGl0ZW0sXFxcImltZyYmZGF0YS1vcmlnaW5hbFxcXCIpO1xcbiAgIHZhciB0aXRsZSA9IHBkZmgoaXRlbSxcXFwiYSYmdGl0bGVcXFwiKS5yZXBsYWNlKFxcXCJb5Lit5paH5a2X5bmVXVxcXCIsXFxcIvCfh6jwn4ezXFxcIikucmVwbGFjZShcXFwiW1xcXFx1NjVlMFxcXFx1NzgwMeegtOino11cXFwiLFxcXCLwn5SlXFxcIikucmVwbGFjZShcXFwiWzRLXVxcXCIsXFxcIvCflqVcXFwiKS5yZXBsYWNlKFxcXCJb6Iux5paH5a2X5bmVXVxcXCIsXFxcIvCfh7rwn4e4XFxcIikucmVwbGFjZShcXFwi44CQU3VwSkFWLeeLrOWutuOAkVxcXCIsXFxcIlxcXCIpO1xcbiAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOiBwZGZoKGl0ZW0sXFxcIi5tZXRhLS0uZGF0ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgIGltZzogaW1nLnJlcGxhY2UoLyhodHRwLio/XFxcXC4oPzpqcGd8d2VicHxwbmd8anBlZykpLiovLFxcXCIkMVxcXCIpLFxcbiAgICAgICAgICAgICAgIHVybDogcGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIikgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlclxcXCIpJyxcXG4gICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzJcXFwiLFxcbiAgICAgICAgICAgICAgIGV4dHJhOiB7cGFnZVRpdGxlOnRpdGxlfVxcbiAgICAgICAgIH0pXFxufSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmoIfnrb5cIixcInBhdGhcIjpcInRhYnNcIixcInJ1bGVcIjpcInZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XFxufVxcbnZhciBsaXN0cyA9IHBkZmEoaHRtbCwgXFxcIi5jYXRlZ29yeXMmJi5jaGlsZFxcXCIpO1xcbmxpc3RzLmZvckVhY2goaXRlbT0+e1xcbiAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIHBkZmgoaXRlbSxcXFwiYSYmVGV4dFxcXCIpLmZvbnRjb2xvcihnZXRSYW5nZUNvbG9ycygpKSwgICAgICAgICBcXG4gICAgICAgICAgICAgICB1cmw6IHBkZmgoaXRlbSxcXFwiYSYmaHJlZlxcXCIpICsgJyMjZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJ5aVxcXCIpJyxcXG4gICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgICB9KVxcbn0pXFxuZC5wdXNoKHtjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIn0pXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpppbpobVcIixcInBhdGhcIjpcImhvbWVcIixcInJ1bGVcIjpcInZhciB0YWIxID0gcGRmYShodG1sLCAnYm9keSYmLnJlY29tbWVuZCcpOyBcXG52YXIgdGFiMiA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5jb250ZW50cyYmLmNvbnRlbnQnKTsgXFxudmFyIHRhYnMgPSB0YWIxLmNvbmNhdCh0YWIyKVxcbnZhciBjb250cyA9IHRhYnNcXG5cXG5mb3IgKHZhciBpID0gMDsgaSA8IGNvbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGxpc3QgPSBwZGZhKGNvbnRzW2ldLCAnLnBvc3RzJiYucG9zdCcpOyBcXG4gICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxtaWRkbGU+PGZvbnQgY29sb3I9I0ZGQTUwMD4nK3BkZmgodGFic1tpXSwgJy5hcmNoaXZlLXRpdGxlJiZUZXh0JykucmVwbGFjZShcXFwiKyBNb3JlXFxcIixcXFwiXFxcIikrJzwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgZGVzYzogJzxtaWRkbGU+PGZvbnQgY29sb3I9cmVkPitcXFxcdFxcXFx0XFxcXHRcXFxcdCAg8J2QjPCdkKjwnZCr8J2QnjwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9pbWcudmludWEuY24vaW1hZ2VzL0lJZW5YLnBuZ1xcXCIsXFxuICAgICAgICB1cmw6IHBkKHRhYnNbaV0sJ2EmJmhyZWYnKSArICcjI2Z5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwieWlcXFwiKScsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICBleHRyYToge2xpbmVWaXNpYmxlOmZhbHNlfVxcbiAgICB9KTtcXG5cXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykgeyAgICAgXFxuICB2YXIgaW1nID0gIGkgPT0gMD8gcGQobGlzdFtqXSwnaW1nJiZzcmMnKSA6IHBkKGxpc3Rbal0sJ2ltZyYmZGF0YS1vcmlnaW5hbCcpOyAgXFxuICB2YXIgdGl0bGUgPSBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLnJlcGxhY2UoXFxcIlvkuK3mloflrZfluZVdXFxcIixcXFwi8J+HqPCfh7NcXFwiKS5yZXBsYWNlKFxcXCJbXFxcXHU2NWUwXFxcXHU3ODAx56C06KejXVxcXCIsXFxcIvCflKVcXFwiKS5yZXBsYWNlKFxcXCJbNEtdXFxcIixcXFwi8J+WpVxcXCIpLnJlcGxhY2UoXFxcIlvoi7HmloflrZfluZVdXFxcIixcXFwi8J+HuvCfh7hcXFwiKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJy5tZXRhLS0uZGF0ZSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICBpbWc6IGltZy5yZXBsYWNlKC8oaHR0cC4qP1xcXFwuKD86anBnfHdlYnB8cG5nfGpwZWcpKS4qLyxcXFwiJDFcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZXJcXFwiKScsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7cGFnZVRpdGxlOnRpdGxlfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdcIixcInBhdGhcIjpcInlpXCIsXCJydWxlXCI6XCJqczpcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwieXNvcnRcXFwiKTsgICBcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInl1cmxcXFwiKTsgICBcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcIm5leHRQYWdcXFwiKTsgICBcXG59KSk7XFxudmFyIGQgPSBbXVxcbk1ZX1VSTCA9IGdldE15VmFyKFxcXCJ5dXJsXFxcIiwgTVlfVVJMLnJlcGxhY2UoLyMjXFxcXGQrLyxcXFwiXFxcIikpO1xcbmxldCBuZXh0UGFnID0gZ2V0TXlWYXIoXFxcIm5leHRQYWdcXFwiLCBcXFwiXFxcIik7XFxuaWYgKG5leHRQYWcgJiYgTVlfUEFHRSA+IDEpIHtcXG4gICAgTVlfVVJMID0gbmV4dFBhZztcXG59IGVsc2UgaWYgKE1ZX1BBR0UgPiAxKSB7XFxuICAgICAgICAgICAgTVlfVVJMID0gXFxcIuayoeacieS4i+S4gOmhteWTpvCfmJFcXFwiXFxuICAgICAgICB9XFxuLy92YXIgaHRtbCA9IGZldGNoQ29kZUJ5V2ViVmlldyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpXFxudHJ5IHtcXG4gICAgdmFyIG5leHRVcmxsID0gcGQoaHRtbCwgXFxcIi5wYWdpbmF0aW9uJiYuYWN0aXZlK2xpJiZhJiZocmVmXFxcIik7XFxuICAgIHB1dE15VmFyKFxcXCJuZXh0UGFnXFxcIiwgbmV4dFVybGwpO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgY2xlYXJNeVZhcihcXFwibmV4dFBhZ1xcXCIpO1xcbiAgIC8vIHRvYXN0KFxcXCLlpb3lg4/msqHmnInkuIvkuIDpobXkuobvvIFcXFwiKTtcXG59XFxubG9nKE1ZX1VSTClcXG5cXG4vL2xvZyhcXFwi5LiL5LiA6aG1ICDvvJpcXFwiK25leHRQYWcpXFxuZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZSxjb2xvcikge1xcbiAgICAgICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCInICsgY29sb3IgKyAnXFxcIj4nICsgdGl0bGUgKyAnPC9mcm9udD48L3N0cm9uZz4nO1xcbiAgICAgICAgIH1cXG5cXG5pZihNWV9UWVBFICE9IFxcXCJzZWFyY2hcXFwiKSB7XFxuICAgICB2YXIgcGFnaW5hdGlvbiA9IHBkZmEoaHRtbCwgXFxcIi5wYWdpbmF0aW9uJiZsaTpub3QoLnByZXYtcGFnZSk6bm90KC5uZXh0LXBhZ2UpXFxcIik7XFxuICAgIHZhciBjdXJyZW50dSA9IHBkZmgoaHRtbCxcXFwibGlua1tocmVmbGFuZz16aF0mJmhyZWZcXFwiKVxcblxcbiAgICB2YXIgZmlyc3R1ID0gZ2V0TXlWYXIoXFxcInl1cmxcXFwiKS5yZXBsYWNlKC9cXFxcL3BhZ2VcXFxcL1xcXFxkKy8sXFxcIlxcXCIpXFxuICAgIHZhciBhY3RpdmUgPSBjdXJyZW50dS5tYXRjaCgvXFxcXC9wYWdlXFxcXC8oXFxcXGQrKS8pID8gY3VycmVudHUubWF0Y2goL1xcXFwvcGFnZVxcXFwvKFxcXFxkKykvKVsxXSA6IDE7XFxuICAgIHZhciBsYXN0dSA9IHBkZmgocGFnaW5hdGlvbi5wb3AoKSxcXFwiYSYmaHJlZlxcXCIpIHx8IGdldE15VmFyKFxcXCJ5dXJsXFxcIilcXG4gICAgdmFyIGxhc3RwID0gbGFzdHUubWF0Y2goL1xcXFwvcGFnZVxcXFwvKFxcXFxkKykvKSA/IGxhc3R1Lm1hdGNoKC9cXFxcL3BhZ2VcXFxcLyhcXFxcZCspLylbMV0gOiAxO1xcblxcbnZhciBwYWdpO1xcbiAgICBpZiAoYWN0aXZlPT0xKSB7XFxuICAgICAgIHBhZ2kgPSAwXFxufSBlbHNlIGlmIChhY3RpdmUgPT0gbGFzdHApIHtcXG4gICAgICAgcGFnaSA9IDJcXG59IGVsc2Uge1xcbiAgICAgICBwYWdpID0gMVxcbn1cXG4gICAgdmFyIHRpdGxlID0gW1xcXCLpppZcXFwiLFxcXCLot7PpobU6XFxcIiArIGFjdGl2ZSxcXFwi5bC+6aG1OlxcXCIgKyBsYXN0cF1cXG4gICAgdmFyIHVybHMgPSBbZmlyc3R1LE1ZX1VSTCxsYXN0dV1cXG5pZiAoIGN1cnJlbnR1ICE9PSBcXFwiaHR0cHM6Ly9zdXBqYXYuY29tL3poL1xcXCIgKXtcXG4gICBmb3IgKHZhciBqIGluIHRpdGxlKSB7XFxuXFxuICAgIHZhciB1cmwgPSB1cmxzW2pdICsgJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaikgPT4geyAgICBcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInl1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBqKVxcblxcbiAgICBpZiAoaj09MSkge1xcbiAgICB1cmwgPSAkKCcnLCfpmaTpppbpobXlkozlsL7pobXkuYvlpJbnmoTpobXnoIEnKS5pbnB1dCgobGFzdHUsbGFzdHApPT57XFxuICAgICAgICBpZiAocGFyc2VJbnQoaW5wdXQpID4gMCAmJiBwYXJzZUludChpbnB1dCkgPD0gcGFyc2VJbnQobGFzdHApICYmIHBhcnNlSW50KGlucHV0KSAlIDEgPT0gMCkge1xcbiAgICAgICAgICAgICAgICB2YXIganVtcHUgPSBsYXN0dS5yZXBsYWNlKC9cXFxcL3BhZ2VcXFxcL1xcXFxkKy8sIFxcXCIvcGFnZS9cXFwiKyBpbnB1dClcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInl1cmxcXFwiLCBqdW1wdSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbn0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fovpPlhaXmraPnoa7nmoTpobXnoIFcXFwifVxcbiAgICAgICAgICAgfSxsYXN0dSxsYXN0cCkgICAgICAgICAgICAgICAgICBcXG4gICAgICB9XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwYWdpID09IGogPyBnZXRIZWFkKHRpdGxlW2pdLCcjRkY2Njk5JykgOiB0aXRsZVtqXSwgICAgICAgICAgIFxcbiAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsICAgICAgICAgICAgICAgICBcXG4gICAgICAgIH0pXFxufX1cXG59XFxuXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgdmFyIHNvcnQgPSBwZGZhKGh0bWwsIFxcXCIuc29ydCYmYVxcXCIpO1xcbiAgIGZvciAodmFyIGogaW4gc29ydCkge1xcbiAgICAgICAgdmFyIHRpdGxlID0gcGRmaChzb3J0W2pdLCdUZXh0JylcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCd5c29ydCcsICcwJykgPT0gaiA/IGdldEhlYWQodGl0bGUsJyNGRjY2OTknKSA6IHRpdGxlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiBwZChzb3J0W2pdLCAnYSYmaHJlZicpICsgJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaikgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigneXNvcnQnLCBqKVxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwieXVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgailcXG4gICAgICAgIH0pXFxufVxcbn1cXG5cXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgXFxcIi5wb3N0cyYmLnBvc3RcXFwiKTtcXG5saXN0LmZvckVhY2goaXRlbT0+e1xcbiAgIHZhciBpbWcgPSBwZChpdGVtLFxcXCJpbWcmJmRhdGEtb3JpZ2luYWxcXFwiKTtcXG4gICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sXFxcImEmJnRpdGxlXFxcIikucmVwbGFjZShcXFwiW+S4reaWh+Wtl+W5lV1cXFwiLFxcXCLwn4eo8J+Hs1xcXCIpLnJlcGxhY2UoXFxcIltcXFxcdTY1ZTBcXFxcdTc4MDHnoLTop6NdXFxcIixcXFwi8J+UpVxcXCIpLnJlcGxhY2UoXFxcIls0S11cXFwiLFxcXCLwn5alXFxcIikucmVwbGFjZShcXFwiW+iLseaWh+Wtl+W5lV1cXFwiLFxcXCLwn4e68J+HuFxcXCIpO1xcbiAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICBkZXNjOiBwZGZoKGl0ZW0sXFxcIi5tZXRhLS0uZGF0ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgIGltZzogaW1nLnJlcGxhY2UoLyhodHRwLio/XFxcXC4oPzpqcGd8d2VicHxwbmd8anBlZykpLiovLFxcXCIkMVxcXCIpLFxcbiAgICAgICAgICAgICAgIHVybDogcGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIikgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlclxcXCIpJyxcXG4gICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzJcXFwiLFxcbiAgICAgICAgICAgICAgIGV4dHJhOiB7cGFnZVRpdGxlOnRpdGxlfVxcbiAgICAgICAgIH0pXFxufSlcXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p1wiLFwicGF0aFwiOlwiZXJcIixcInJ1bGVcIjpcImpzOiB2YXIgZCA9IFtdXFxuTVlfVVJMID0gTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsICcnKTtcXG5sb2coTVlfVVJMKVxcbi8vdmFyIGh0bWwgPSBmZXRjaENvZGVCeVdlYlZpZXcoTVlfVVJMKTtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTClcXG5cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5Jywge30pKVxcbiAgICAucnVsZSk7XFxuXFxudmFyIHRpdGxlID0gcGRmaChodG1sLCAnLmFyY2hpdmUtdGl0bGUmJlRleHQnKVxcbiAgICAucmVwbGFjZShcXFwiW+S4reaWh+Wtl+W5lV1cXFwiLCBcXFwi8J+HqPCfh7NcXFwiKVxcbiAgICAucmVwbGFjZShcXFwiW1xcXFx1NjVlMFxcXFx1NzgwMeegtOino11cXFwiLCBcXFwi8J+UpVxcXCIpXFxuICAgIC5yZXBsYWNlKFxcXCJbNEtdXFxcIiwgXFxcIvCflqVcXFwiKVxcbiAgICAucmVwbGFjZShcXFwiW+iLseaWh+Wtl+W5lV1cXFwiLCBcXFwi8J+HuvCfh7hcXFwiKTtcXG52YXIg6K+G5Yir56CBID0gdGl0bGUubWF0Y2goL1xcXFx3Kyg/Oi18XylcXFxcdysoPzpcXFxccytcXFxcZCspP3xcXFxcdysoPyFcXFxcbilcXFxccytcXFxcdysvKVswXVxcbmlmICh0aXRsZSAhPT0gbnVsbCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9I2U1N2ExYT4nICsgdGl0bGUgKyAnPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiICsgJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXG50aXRsZSA9IHRpdGxlLnJlcGxhY2UoL0ZDMlBQVlxcXFxzXFxcXGQrLyxcXFwiXFxcIikucmVwbGFjZSgvXFxcXHcrLVxcXFxkK1xcXFxzLyxcXFwiXFxcIilcXG4vL+WKqOaAgeWIt+aWsFxcbnZhciBkZXNjID0gZmluZEl0ZW0oJ3RyYW5zZGVzYycpLmRlc2NcXG4gICAgICAgICAgaWYoIWRlc2Mpe1xcbiAgICB2YXIgdHJhbnNsYXRlcyA9ICQucmVxdWlyZShcXFwidHJhbnNcXFwiKS50cmFuc2xhdGUodGl0bGUpXFxuICAgICAgdXBkYXRlSXRlbShcXFwidHJhbnNkZXNjXFxcIix7XFxuICAgICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ0nK3RyYW5zbGF0ZXMuZm9udGNvbG9yKFxcXCJyZWRcXFwiKSxcXG59KVxcbn1lbHNle1xcbnVwZGF0ZUl0ZW0oXFxcInRyYW5zZGVzY1xcXCIse1xcbiAgICAgICAgICBkZXNjOiAnJyxcXG59KVxcbn0gICAgICAgXFxuICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgICAgICBcXG4vKiAgICAgICBcXG4gICAgICAgICAgdmFyIHRyYW5zbGF0ZXMgPSAkLnJlcXVpcmUoXFxcInRyYW5zXFxcIikudHJhbnNsYXRlKHRpdGxlKSAgIFxcbiAgICAgICAgICByZXR1cm4gXFxcImNvbmZpcm06Ly9cXFwiICsgdHJhbnNsYXRlcyArIFxcXCIuanM6J2hpa2VyOi8vZW1wdHknIFxcXCIgICAqL1xcbiAgICAgICAgICAgICAgICB9LHRpdGxlKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgaWQ6ICd0cmFuc2Rlc2MnLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7dGl0bGU6ICfnvZHpobUnLCBqczogJC50b1N0cmluZygoKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIE1ZX1VSTFxcbiAgICAgICAgICAgICAgICAgICAgICAgfSl9LHt0aXRsZTogJ+WkjeWIticsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgdGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX0se3RpdGxlOiAn55m+5bqm57+76K+RJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwieDU6Ly9odHRwczovL2ZhbnlpLmJhaWR1LmNvbS8janAvemgvXFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX0se3RpdGxlOiAnRGVlcGznv7vor5EnLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vd3d3LmRlZXBsLmNvbS96aC90cmFuc2xhdG9yLW1vYmlsZSNqYS96aC9cXFwiICsgdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgIH0sdGl0bGUpfSx7dGl0bGU6ICfosLfmrYznv7vor5EnLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJ4NTovL2h0dHBzOi8vdHJhbnNsYXRlLmdvb2dsZS5jb20vP2hsPXpoLUNOJnNsPWphJnRsPXpoLUNOJnRleHQ9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX1dXFxufVxcbiAgICB9KVxcbn1cXG5cXG52YXIgaW1nID0gcGQoaHRtbCwgXFxcIi5wb3N0LW1ldGEmJmltZyYmc3JjXFxcIik7XFxuaWYgKGltZyAhPT0gbnVsbCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICflpI3liLblm77niYcnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoaW1nKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgaW1nXFxuICAgICAgICAgICAgICAgIH0sIGltZylcXG4gICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5omT5byA5Zu+54mHJyxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGltZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltZ1xcbiAgICAgICAgICAgICAgICB9LCBpbWcpXFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S4i+i9veWbvueJhycsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpbWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiZG93bmxvYWQ6Ly9cXFwiICsgaW1nXFxuICAgICAgICAgICAgICAgIH0sIGltZylcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6IFxcXCI+PHNtYWxsPvCdkJLwnZCE8J2QkfCdkJXwnZCE8J2QkSDvvJrlt7LlsY/olL1KUEHnrYnml6DnlKjnur/ot688L3NtYWxsPjwvc3Bhbj4nLFxcbiAgICB1cmw6IOivhuWIq+eggSArICQoJyNub0xvYWRpbmcjJylcXG4gICAgICAgIC5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS95aj9ydWxlPfCdkInwnZCa8J2Qr/CdkIPwnZCBJnVybD1cXFwiICsgZ2V0UHVibGljSXRlbSgnamF2ZGIwJywgJ2h0dHBzOi8vamF2ZGIuY29tJykgKyBcXFwiL3NlYXJjaO+8n++8n2Y9YWxs77yG77yGcGFnZT1meXBhZ2XvvIbvvIZxPVxcXCIgKyBpbnB1dFxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgcGFnZVRpdGxlOiDor4bliKvnoIFcXG4gICAgfVxcbn0pO1xcblxcbi8v5bey57uP6Kej5p6Q55qE57q/6LevXFxudmFyIFBsYXlsaW5lZCA9IFtcXFwiVFZcXFwiLCBcXFwiRlNUXFxcIiwgXFxcIlNUXFxcIiwgXFxcIlZPRVxcXCIsIFxcXCJEU1xcXCIsIFxcXCJTdHJlYW10YXBlXFxcIiwgXFxcIlZUVVxcXCJdXFxuXFxubGV0IGJ0bnMgPSBwZGZhKGh0bWwsICcuYnRucyYmLmJ0bnN0JylcXG5pZiAoYnRucy5sZW5ndGggPT0gMSkge1xcbiAgICBidG5zdCA9IHBkZmEoYnRuc1swXSwgJ2JvZHkmJmRpdicpXFxufSBlbHNlIHtcXG4gICAgYnRuc3QgPSBwZGZhKGJ0bnNbMV0sICdib2R5JiYuY2Qtc2VydmVyJylcXG59XFxuYnRuc3QuZm9yRWFjaCgoY2RzLCBpbmRleCkgPT4ge1xcbiAgICBsZXQgc2VydmVyID0gcGRmYShjZHMsICdib2R5JiZhOm5vdCg6bWF0Y2hlcyhKUEF8SlN8U1NCfE5TfE1peGRyb3B8TmluamFTdHJlYW18TUR8R29VbmxpbWl0ZWQpKScpOyAvL+Wxj+iUvee6v+i3r/CfiLLwn4iy8J+IsvCfiLLwn4iy8J+IslxcbiAgICBpZiAoYnRuc3QubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyBcXFwiQ0RcXFwiLmJvbGQoKVxcbiAgICAgICAgICAgICAgICAuZm9udGNvbG9yKFxcXCIjOEEyQkUyXFxcIikgKyAoaW5kZXggKyAxKVxcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxcbiAgICAgICAgICAgICAgICAuYm9sZCgpXFxuICAgICAgICAgICAgICAgIC5mb250Y29sb3IoXFxcIiM4QTJCRTJcXFwiKSArIFxcXCI6XFxcIi5mb250Y29sb3IoXFxcIiM4QTJCRTJcXFwiKSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2VydmVyLmZvckVhY2goKGxpc3QsIGluZGV4KSA9PiB7XFxuICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGxpc3QsICdUZXh0Jyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBQbGF5bGluZWQuaW5kZXhPZih0aXRsZSkgPj0gMCA/ICfigJzigJzigJ3igJ0nICsgJ/Cfl68nLmZvbnRjb2xvcihcXFwiIzI3NzY4NlxcXCIpICsgdGl0bGUuYm9sZCgpXFxuICAgICAgICAgICAgICAgIC5mb250Y29sb3IoXFxcIiMyNzc2ODZcXFwiKSArICfwn5evJy5mb250Y29sb3IoXFxcIiMyNzc2ODZcXFwiKSA6ICfwn5ev4oCc4oCc4oCd4oCdJyArIHRpdGxlLmJvbGQoKSArICfwn5evJyxcXG4gICAgICAgICAgICB1cmw6IHBkZmgobGlzdCwgJ2EmJmRhdGEtbGluaycpICsgbGF6eSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgfSk7XFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICB9KVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxufSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxufSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG59KVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbn0pXFxuXFxubGV0IGluZm8gPSBwZGZhKGh0bWwsICcucG9zdC1tZXRhJiYuY2F0cyYmYScpO1xcbmluZm8uZm9yRWFjaCgobGlzdCwgaW5kZXgpID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGRmaChsaXN0LCAnVGV4dCcpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGluZGV4ID09IDEgPyAn4oCY4oCYTWFrZXI64oCZ4oCZJyArIHRpdGxlIDogKGluZGV4ID4gMSA/ICfigJjigJhDYXN0OuKAmeKAmScgKyB0aXRsZSA6IHRpdGxlKSxcXG4gICAgICAgIHVybDogcGQobGlzdCwgJ2EmJmhyZWYnKSArICcjI2Z5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwieWlcXFwiKScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBpZiAoaW5kZXggPT0gMSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0pXFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbn0pXFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiXFxufSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbn0pXFxubGV0IHRhZ3MgPSBwZGZhKGh0bWwsICcucG9zdC1tZXRhJiYudGFncyYmYScpO1xcbnRhZ3MuZm9yRWFjaCgobGlzdCwgaW5kZXgpID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGRmaChsaXN0LCAnVGV4dCcpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJwnICsgdGl0bGUgKyAn4oCd4oCdJyxcXG4gICAgICAgIHVybDogcGQobGlzdCwgJ2EmJmhyZWYnKSArICcjI2Z5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwieWlcXFwiKScsXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KVxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkZGRkZGO1xcXCI+8J2QmPCdkKjwnZCuIPCdkIzwnZCa8J2QsiDwnZCA8J2QpfCdkKzwnZCoIPCdkIvwnZCi8J2QpPCdkJ48L3NwYW4+JyxcXG4gICAgdXJsOiBcXFwiY29weTovL1xcXCIgKyDor4bliKvnoIEsXFxuICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgfVxcbn0pO1xcblxcbnZhciBsaXN0ID0gcGRmYShodG1sLCBcXFwiLnBvc3RzJiYucG9zdFxcXCIpO1xcbmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgdmFyIGltZyA9IHBkKGl0ZW0sIFxcXCJpbWcmJmRhdGEtb3JpZ2luYWxcXFwiKTtcXG4gICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLCBcXFwiYSYmdGl0bGVcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoXFxcIlvkuK3mloflrZfluZVdXFxcIiwgXFxcIvCfh6jwn4ezXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKFxcXCJbXFxcXHU2NWUwXFxcXHU3ODAx56C06KejXVxcXCIsIFxcXCLwn5SlXFxcIilcXG4gICAgICAgIC5yZXBsYWNlKFxcXCJbNEtdXFxcIiwgXFxcIvCflqVcXFwiKVxcbiAgICAgICAgLnJlcGxhY2UoXFxcIlvoi7HmloflrZfluZVdXFxcIiwgXFxcIvCfh7rwn4e4XFxcIik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICBkZXNjOiBwZGZoKGl0ZW0sIFxcXCIubWV0YS0tLmRhdGUmJlRleHRcXFwiKSxcXG4gICAgICAgIGltZzogaW1nLnJlcGxhY2UoLyhodHRwLio/XFxcXC4oPzpqcGd8d2VicHxwbmd8anBlZykpLiovLCBcXFwiJDFcXFwiKSxcXG4gICAgICAgIHVybDogcGRmaChpdGVtLCBcXFwiYSYmaHJlZlxcXCIpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZXJcXFwiKScsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlXFxuICAgICAgICB9XFxuICAgIH0pXFxufSlcXG5kLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyArIFxcXCLmiJHmmK/mnInlupXnur/nmoRcXFwiLmZvbnRjb2xvcihcXFwiZ3JleVxcXCIpXFxuICAgICAgICAgICAgICAgIC5zbWFsbCgpLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG59KVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiYmlnX2JsYW5rX2Jsb2NrXFxcIlxcbn0pXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAvL0pQQeetiee6v+i3r+aMguS6huW3suWxj+iUve+8jOmcgOimgeWPr+WOu+S6jOe6p+aBouWkjVxcbiAgICAvL1RW57q/6LevLy9GU1Tnur/ot68vL1ZPRee6v+i3ry8vU1Tnur/ot68vL0RT57q/6LevLy9WVFXnur/ot69cXG4gICAgLy8g5a6a5LmJ5LiA5Liq6Kej5p6Q5YiG6L6o546H55qE5Ye95pWwXFxuICAgIGZ1bmN0aW9uIGdldFJlc29sdXRpb24obmFtZSkge1xcbiAgICAgICAgdmFyIG1hdGNoID0gbmFtZS5tYXRjaCgvKFxcXFxkKykvKTsgLy8g5o+Q5Y+W6ZmN57qn5YiG6L6o546HXFxuICAgICAgICByZXR1cm4gbWF0Y2ggPyBwYXJzZUludChtYXRjaFsxXSwgMTApIDogMDsgLy8g5aaC5p6c5rKh5pyJ5Yy56YWN5YiZ6L+U5ZueMFxcbiAgICB9XFxuICAgIHZhciBpZCA9IGlucHV0LnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJyk7XFxuICAgIHZhciB1cmwgPSBgaHR0cHM6Ly9sazEuc3VwcmVtZWphdi5jb20vc3VwamF2LnBocD9jPSR7aWR9YDtcXG4gICAgdmFyIHJlZmVyZXIgPSBgaHR0cHM6Ly9sazEuc3VwcmVtZWphdi5jb20vc3VwamF2LnBocD9sPSR7aW5wdXR9YDtcXG4gICAgdmFyIGxvY2F0aW9uID0gSlNPTi5wYXJzZShmZXRjaCh1cmwsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IHJlZmVyZXIsXFxuICAgICAgICB9LFxcbiAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgfSkpLnVybC5yZXBsYWNlKC8jLiovLCBcXFwiXFxcIilcXG4gICAgbG9nKGxvY2F0aW9uKVxcblxcbiAgICBpZiAobG9jYXRpb24uaW5jbHVkZXMoXFxcImVtdHVyYm92aWRcXFwiKSkge1xcblxcbiAgICAgICAgLy/ikaBUVue6v+i3r1xcbiAgICAgICAgdmFyIGRvbWFpbiA9IGdldEhvbWUobG9jYXRpb24pXFxuICAgICAgICB2YXIgcGF0aCA9IGZldGNoKGxvY2F0aW9uLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZmVyZXJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciBwbGF5VXJsID0gcGF0aC5tYXRjaCgvaHR0cHM/Lio/XFxcXC5tM3U4LylbMF07XFxuICAgICAgICB2YXIgZ3JvdXBfcXVhbGl0eSA9IGZldGNoKHBsYXlVcmwsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogbG9jYXRpb25cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIGxvZyhncm91cF9xdWFsaXR5KVxcbiAgICAgICAgaGdoZXN0X3F1YWxpdHkgPSBncm91cF9xdWFsaXR5Lm1hdGNoKC9eW14jXFxcXHNdKyQvZ20pLm1hcCh2ID0+IHYuaW5jbHVkZXMoXFxcImh0dHBcXFwiKSA/IHYgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiIDogcGxheVVybC5yZXBsYWNlKC9bXlxcXFwvXSskLywgdikpXFxuICAgICAgICAvL2xvZyhoZ2hlc3RfcXVhbGl0eSlcXG4gICAgICAgIG5hbWVfcXVhbGl0eSA9IGdyb3VwX3F1YWxpdHkubWF0Y2goL1JFU09MVVRJT049Lio/XFxcXCwvZ20pLm1hcChuID0+IG4ucmVwbGFjZSgvUkVTT0xVVElPTj18XFxcXCwvZywgXFxcIlxcXCIpKVxcblxcbiAgICAgICAgLy8g5oyJ5YiG6L6o546H6ZmN5bqP5o6S5bqPIOWIhui+qOeOhyDmlbDnu4TvvIzlubblkIzml7bosIPmlbQgaGdoZXN0X3F1YWxpdHlcXG4gICAgICAgIHZhciBzb3J0ZWREYXRhID0gbmFtZV9xdWFsaXR5Lm1hcCgobmFtZSwgaW5kZXgpID0+ICh7XFxuICAgICAgICAgICAgICAgIG5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogaGdoZXN0X3F1YWxpdHlbaW5kZXhdXFxuICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGdldFJlc29sdXRpb24oYi5uYW1lKSAtIGdldFJlc29sdXRpb24oYS5uYW1lKSk7XFxuICAgICAgICAvLyDliIblvIDmjpLluo/lkI7nmoQgbmFtZXMg5ZKMIHVybHMg5pWw57uEXFxuICAgICAgICB2YXIgc29ydGVkTmFtZXMgPSBzb3J0ZWREYXRhLm1hcChpdGVtID0+IGl0ZW0ubmFtZSk7XFxuICAgICAgICB2YXIgc29ydGVkVXJscyA9IHNvcnRlZERhdGEubWFwKGl0ZW0gPT4gaXRlbS51cmwpO1xcbiAgICAgICAgbGV0IHBsYXlsaXN0ID0gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIG5hbWVzOiBzb3J0ZWROYW1lcyxcXG4gICAgICAgICAgICB1cmxzOiBzb3J0ZWRVcmxzLFxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBBcnJheShoZ2hlc3RfcXVhbGl0eS5sZW5ndGgpLmZpbGwoe1xcbiAgICAgICAgICAgICAgICBSZWZlcmVyOiBcXFwiXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBwbGF5bGlzdDtcXG5cXG4gICAgfSBlbHNlIGlmICgvY2luZHlleWVmaW5hbHxmYzJzdHJlYW18bWljaGFlbGFwcGx5c29tZS8udGVzdChsb2NhdGlvbikpIHtcXG5cXG4gICAgICAgIC8v4pGhRlNU57q/6LevXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGxvY2F0aW9uLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZmVyZXJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHZhciBzY3JpcHQgPSBwZGZoKGh0bWwsIFxcXCJib2R5PnNjcmlwdCYmSHRtbFxcXCIpLnJlcGxhY2UoXFxcImV2YWxcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIHZhciB1YXMgPSBldmFsKHNjcmlwdClcXG4gICAgICAgIHZhciBwbGF5VXJsID0gdWFzLm1hdGNoKC9cXFwiKGh0dHBzPy4qbTN1OC4qPylcXFwiLylbMV1cXG4gICAgICAgIHZhciBncm91cF9xdWFsaXR5ID0gZmV0Y2gocGxheVVybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBsb2NhdGlvblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZ3JvdXBfcXVhbGl0eSA9IGdyb3VwX3F1YWxpdHkuc3BsaXQoXFxcIlxcXFxuXFxcXG5cXFwiKVswXVxcbiAgICAgICAgLy8gbG9nKGdyb3VwX3F1YWxpdHkpXFxuICAgICAgICBoZ2hlc3RfcXVhbGl0eSA9IGdyb3VwX3F1YWxpdHkubWF0Y2goL15bXiNcXFxcc10rJC9nbSkubWFwKHYgPT4gdi5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpID8gdiArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCIgOiBwbGF5VXJsLnJlcGxhY2UoL1teXFxcXC9dKyQvLCB2KSlcXG4gICAgICAgIC8vbG9nKGhnaGVzdF9xdWFsaXR5KVxcbiAgICAgICAgbmFtZV9xdWFsaXR5ID0gZ3JvdXBfcXVhbGl0eS5tYXRjaCgvUkVTT0xVVElPTj0uKj9cXFxcLC9nbSkubWFwKG4gPT4gbi5yZXBsYWNlKC9SRVNPTFVUSU9OPXxcXFxcLC9nLCBcXFwiXFxcIikpXFxuXFxuICAgICAgICAvLyDmjInliIbovqjnjofpmY3luo/mjpLluo8g5YiG6L6o546HIOaVsOe7hO+8jOW5tuWQjOaXtuiwg+aVtCBoZ2hlc3RfcXVhbGl0eVxcbiAgICAgICAgdmFyIHNvcnRlZERhdGEgPSBuYW1lX3F1YWxpdHkubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcXG4gICAgICAgICAgICAgICAgbmFtZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBoZ2hlc3RfcXVhbGl0eVtpbmRleF1cXG4gICAgICAgICAgICB9KSlcXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gZ2V0UmVzb2x1dGlvbihiLm5hbWUpIC0gZ2V0UmVzb2x1dGlvbihhLm5hbWUpKTtcXG4gICAgICAgIC8vIOWIhuW8gOaOkuW6j+WQjueahCBuYW1lcyDlkowgdXJscyDmlbDnu4RcXG4gICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNvcnRlZERhdGEubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKTtcXG4gICAgICAgIHZhciBzb3J0ZWRVcmxzID0gc29ydGVkRGF0YS5tYXAoaXRlbSA9PiBpdGVtLnVybCk7XFxuICAgICAgICBsZXQgcGxheWxpc3QgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgbmFtZXM6IHNvcnRlZE5hbWVzLFxcbiAgICAgICAgICAgIHVybHM6IHNvcnRlZFVybHMsXFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEFycmF5KGhnaGVzdF9xdWFsaXR5Lmxlbmd0aCkuZmlsbCh7XFxuICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIHBsYXlsaXN0O1xcblxcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLmluY2x1ZGVzKFxcXCJzdHJlYW10YXBlXFxcIikpIHtcXG5cXG4gICAgICAgIC8v4pGiU1Tnur/ot69cXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2gobG9jYXRpb24sIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmZXJlclxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgcGF0dGVybiA9IGh0bWwubWF0Y2goL1xcXFwoJyMoLiopJ1xcXFwpLylbMV1cXG4gICAgICAgIHZhciBzcmMgPSBcXFwidmFyIHNyY2xpbmsgPSBcXFwiICsgaHRtbC5tYXRjaChuZXcgUmVnRXhwKFxcXCInXFxcIiArIHBhdHRlcm4gKyBcXFwiLio/PShbXjtdKylcXFwiKSlbMV1cXG4gICAgICAgIGV2YWwoc3JjKVxcbiAgICAgICAgdmFyIGxpbmsgPSBcXFwiaHR0cHM6XFxcIiArIHNyY2xpbmsgKyBcXFwiJnN0cmVhbT0xXFxcIlxcbiAgICAgICAgdmFyIHBsYXlVcmwgPSBKU09OLnBhcnNlKGZldGNoKGxpbmssIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogbG9jYXRpb24sXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxcbiAgICAgICAgfSkpLnVybFxcbiAgICAgICAgcmV0dXJuIHBsYXlVcmwgKyBcXFwiO3tSZWZlcmVyQFxcXCIgKyBsb2NhdGlvbiArIFxcXCJ9XFxcIlxcblxcbiAgICB9IGVsc2UgaWYgKC92b2UvLnRlc3QobG9jYXRpb24pKSB7XFxuXFxuICAgICAgICAvL+KRpVZPRee6v+i3r1xcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChsb2NhdGlvbiwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZlcmVyXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICB2YXIgY3VycmVudFVybCA9IGh0bWwubWF0Y2goL2h0dHBzP1teJ10rLylbMF07XFxuICAgICAgICB2YXIgc291cmNlcyA9IGZldGNoKGN1cnJlbnRVcmwpLm1hdGNoKC92YXIgc291cmNlc1teXFxcXDtdKy8pWzBdICAgXFxuICAgICAgICBldmFsKHNvdXJjZXMpICAgXFxuICAgICAgICB2YXIgcGxheVVybCA9IGJhc2U2NERlY29kZShzb3VyY2VzLmhscykgXFxuICAgICAgICByZXR1cm4gcGxheVVybCArIFxcXCI7e1JlZmVyZXJAXFxcIiArIGxvY2F0aW9uICsgXFxcIn1cXFwiXFxuXFxuICAgIH0gZWxzZSBpZiAoL2QwMDAwZHxkb29kfGRzMnBsYXkvLnRlc3QobG9jYXRpb24pKSB7XFxuXFxuICAgICAgICAvL+KRo0RT57q/6LevXFxuICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGxvY2F0aW9uLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZmVyZXJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgdmFyIHBhc3NfbWQ1ID0gZ2V0SG9tZShsb2NhdGlvbikgKyBodG1sLm1hdGNoKC9cXFxcL3Bhc3NfbWQ1W15cXFwiJ10rLylbMF1cXG4gICAgICAgIHZhciB0b2tlbiA9IGh0bWwubWF0Y2goL2Nvb2tpZUluZGV4Lio/XFxcXCcoLio/KVxcXFwnLylbMV1cXG4gICAgICAgIHZhciBkYXRhID0gZmV0Y2gocGFzc19tZDUsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogbG9jYXRpb25cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcblxcbiAgICAgICAgZnVuY3Rpb24gbWFrZVBsYXkodG9rZW4pIHtcXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0ID0gXFxcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIG4gPSB0Lmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgICAgIG8gPSAwOyAxMCA+IG87IG8rKylcXG4gICAgICAgICAgICAgICAgYSArPSB0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBuKSk7XFxuICAgICAgICAgICAgcmV0dXJuIGEgKyBcXFwiP3Rva2VuPVxcXCIgKyB0b2tlbiArIFxcXCImZXhwaXJ5PVxcXCIgKyBEYXRlLm5vdygpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBwbGF5VXJsID0gZGF0YSArIG1ha2VQbGF5KHRva2VuKVxcbiAgICAgICAgcmV0dXJuIHBsYXlVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSM7e1JlZmVyZXJAXFxcIiArIGxvY2F0aW9uICsgXFxcIn1cXFwiXFxuXFxuICAgIH0gZWxzZSBpZiAobG9jYXRpb24uaW5jbHVkZXMoXFxcInZ0YmUudG9cXFwiKSkge1xcblxcbiAgICAgICAgLy/ikaRWVFXnur/ot69cXG4gICAgICAgIGZ1bmN0aW9uIGV2YWxkZWNvZGUodGV4dCkge1xcbiAgICAgICAgICAgIHZhciBjb2RlID0gJyc7XFxuICAgICAgICAgICAgdmFyIHMgPSB0ZXh0LnJlcGxhY2UoL15ldmFsLywgJycpXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdyZXR1cm4gcCcsICdjb2RlKz1wJylcXG4gICAgICAgICAgICBldmFsKHMpO1xcbiAgICAgICAgICAgIHJldHVybiBjb2RlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGhvc3RSZWdleCA9ICh1cmwpID0+IHtcXG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSB1cmwubWF0Y2goL14oPzpodHRwcz86XFxcXC9cXFxcLyk/KD86d3d3XFxcXC4pPyhbYS16QS1aMC05LV17MSw2M31cXFxcLikrW2EtekEtWl17Miw2fS9pKTtcXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IHVybDtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICBsZXQgaG9zdCA9IGhvc3RSZWdleChyZWZlcmVyKVxcblxcbiAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChsb2NhdGlvbiwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgUmVmZXJlcjogaG9zdCxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgdmFyIGlmcmFtZSA9IHBkZmEoaHRtbCwgXFxcImlmcmFtZVxcXCIpO1xcblxcbiAgICAgICAgaWYgKGlmcmFtZS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgaHRtbCA9IGZldGNoKHBkZmgoaWZyYW1lWzBdLCBcXFwiaWZyYW1lJiZzcmNcXFwiKSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBSZWZlcmVyOiBob3N0LFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBzY3JpcHRzID0gcGRmYShodG1sLCBcXFwiYm9keSYmc2NyaXB0XFxcIik7XFxuICAgICAgICBsZXQgc2NyaXB0ID0gc2NyaXB0cy5maWx0ZXIoeCA9PiB4LmluY2x1ZGVzKCdldmFsJykpLm1hcChtID0+IHBkZmgobSwgXFxcInNjcmlwdCYmSHRtbFxcXCIpKVswXTtcXG4gICAgICAgIGlmIChzY3JpcHQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOaVsOaNridcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxldCBtM3U4ID0gL2ZpbGU6XFxcIiguKj8pXFxcIi9nLmV4ZWMoZXZhbGRlY29kZShzY3JpcHQpKVsxXTtcXG4gICAgICAgIHJldHVybiBtM3U4O1xcblxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbG9nKFxcXCLpnanlkb3lsJrmnKrmiJDlip8s5ZCM5b+X5LuN6ZyA5Yqq5YqbIVxcXCIpXFxuICAgICAgICByZXR1cm4gXFxcImNvbmZpcm06Ly/lkrMs5pys57q/6Lev6L+Z5Liq5Zyw5Z2A5bm25rKh5pyJ6Kej5p6Q77yM5pel5b+X5bey5omT5Y2w5Ye677yM5pWs6K+35p+l55yLLmpzOidoaWtlcjovL2VtcHR5JyBcXFwiXFxuICAgIH1cXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi57+76K+RXCIsXCJwYXRoXCI6XCJ0cmFuc1wiLFwicnVsZVwiOlwiICAgIC8v57+76K+RXFxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZSh0ZXh0KSB7XFxuICAgICAgICB2YXIgc3dpdGNodHJhbnMgPSBnZXRJdGVtKCdzd2l0Y2h0cmFucycsICflvankupHlsI/or5EnKTtcXG4gICAgICAgIGlmICggc3dpdGNodHJhbnMgPT0gdHJ1ZSB8fCBzd2l0Y2h0cmFucyA9PSBcXFwi5b2p5LqR5bCP6K+RXFxcIikge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHZhciB0byA9ICd6aCdcXG4gICAgICAgICAgICAgICAgdmFyIGZyb20gPSAnYXV0bydcXG5cXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdF9kYXRhKHNvdXJjZV9sYW5nLCB0YXJnZXRfbGFuZykge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvc190eXBlOiAnaW9zJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VfaWQ6ICdGMUY5MDJGNy0xNzgwLTRDODgtODQ4RC03MUYzNUQ4OEE2MDInLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zX3R5cGU6IHNvdXJjZV9sYW5nICsgJzInICsgdGFyZ2V0X2xhbmcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6ICd0ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2lkOiA0MjQyMzgzMzUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pZDogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRSYW5kb21OdW1iZXIoKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5kID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTk5OTkpICsgMTAwMDAwXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZCAqIDEwMDBcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBjb25zdCBwb3N0X2RhdGEgPSBpbml0X2RhdGEoZnJvbSwgdG8pXFxuICAgICAgICAgICAgICAgIHBvc3RfZGF0YS5zb3VyY2UgPSB0ZXh0XFxuICAgICAgICAgICAgICAgIHBvc3RfZGF0YS5yZXF1ZXN0X2lkID0gZ2V0UmFuZG9tTnVtYmVyKClcXG4gICAgICAgICAgICAgICAgbGV0IHJlcyA9IGZldGNoKCdodHRwczovL2ludGVycHJldGVyLmN5YXBpLmNuL3YxL3RyYW5zbGF0b3InLCB7XFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3gtYXV0aG9yaXphdGlvbic6ICd0b2tlbiBzc2RqMjcza3NkaXdpOTIzYnNkOScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXItYWdlbnQnOiAnY2FpeXVuSW50ZXJwcmV0ZXIvNSBDRk5ldHdvcmsvMTQwNC4wLjUgRGFyd2luLzIyLjMuMCcsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcG9zdF9kYXRhLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXMpXFxuICAgICAgICAgICAgICAgICAgICAudGFyZ2V0XFxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBcXFwi44CQ4piB77iP44CRXFxcIlxcbiAgICAgICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIue/u+ivkeWksei0pe+8jOS9v+eUqOWOn+aWh1xcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSBpZiAoc3dpdGNodHJhbnMgPT0gXFxcIuWwj+eJm+e/u+ivkVxcXCIpIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gXFxcImh0dHBzOi8vYXBpLm5pdXRyYW5zLmNvbS9OaXVUcmFuc1NlcnZlci90cmFuc2xhdGlvblxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciBhcGkgPSBnZXRJdGVtKCdhcGknKTtcXG4gICAgICAgICAgICAgICAgaWYgKGFwaSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZyA9IFxcXCJodHRwczovL3Rlc3Qubml1dHJhbnMuY29tL05pdVRyYW5zU2VydmVyL2xhbmd1YWdlP3NyY190ZXh0PVxcXCIgKyB0ZXh0ICsgXFxcIiZzb3VyY2U9dGV4dFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyb20gPSBKU09OLnBhcnNlKGZldGNoKGxhbmcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcG9zdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3RleHQ6IHRleHQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBmcm9tLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IFxcXCJ6aFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlrZXk6IGFwaSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogMTIyM1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShyZXN1bHQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudGd0X3RleHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudGd0X3RleHQgKyBcXFwi44CQ8J+QruOAkVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcIue/u+ivkeWksei0pe+8jOS9v+eUqOWOn+aWh1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLnv7vor5HlpLHotKXvvIzljp/mlofkuLrnqbpcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIumihOWkhOeQhuivt+Whq+WGmee/u+ivkWFwaVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi57+76K+R5aSx6LSl77yM5L2/55So5Y6f5paHXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdGV4dFxcbiAgICAgICAgfVxcbiAgICB9O1xcblxcbiAgICAkLmV4cG9ydHMudHJhbnNsYXRlID0gdHJhbnNsYXRlXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDoqIBcIixcInBhdGhcIjpcInlpeWFuXCIsXCJydWxlXCI6XCIvL2F1dGhvcjrnsonlprlcXG5mdW5jdGlvbiBzYXZlX2RheV9zYXlfY2FjaGUoKSB7XFxuICAgIGxldCBkYXlfc2F5X2NhY2hlID0ge31cXG4gICAgbGV0IGRheV9zYXlfaHRtbCA9IGZldGNoKCdodHRwczovL3YxLmhpdG9rb3RvLmNuJywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzpcXG4gICAgICAgICAgICAgICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjIuMC4wLjAgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICB9LFxcbiAgICB9KVxcbiAgICBkYXlfc2F5X2h0bWwgPSBKU09OLnBhcnNlKGRheV9zYXlfaHRtbClcXG4gICAgZGF5X3NheV9jYWNoZVsnY29udGVudCddID0gZGF5X3NheV9odG1sWydoaXRva290byddXFxuICAgIGRheV9zYXlfY2FjaGVbJ3RpbWUnXSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApXFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdkYXlzYXknLCBkYXlfc2F5X2NhY2hlKVxcbiAgICByZXR1cm4gZGF5X3NheV9odG1sWydoaXRva290byddXFxufVxcblxcbiAgICBsZXQgZGF5X3NheSA9ICcnXFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgZGF5X3NheV9jYWNoZSA9IHt9XFxuICAgICAgICBsZXQgZGF5X3RpbWUgPSAwXFxuICAgICAgICBpZiAoc3RvcmFnZTAuZ2V0TXlWYXIoJ2RheXNheScpKSB7XFxuICAgICAgICAgICAgZGF5X3NheV9jYWNoZSA9IHN0b3JhZ2UwLmdldE15VmFyKCdkYXlzYXknLCB7fSlcXG4gICAgICAgICAgICBkYXlfdGltZSA9IGRheV9zYXlfY2FjaGVbJ3RpbWUnXVxcbiAgICAgICAgICAgIGlmIChNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSAtIGRheV90aW1lID49IDEwKSB7XFxuICAgICAgICAgICAgICAgIGRheV9zYXkgPSBzYXZlX2RheV9zYXlfY2FjaGUoKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGRheV9zYXkgPSBkYXlfc2F5X2NhY2hlWydjb250ZW50J11cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGRheV9zYXkgPSBzYXZlX2RheV9zYXlfY2FjaGUoKVxcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIGRheV9zYXkgPSAnJ1xcbiAgICB9XCJ9XSIsImljb24iOiJodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvenJ3SzQud2VicCIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment