xiaomianao666

小程序:91美剧网

Mar 20th, 2024
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@91美剧网@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6ImpzOlxudmFyIGNocCA9IFtdO1xudHJ5IHtcbiAgICB2YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcbiAgICB2YXIgY29udHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYuc3R1aS1jb250ZW50X19wbGF5bGlzdCcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGNvbnRzW2ldLCAnYm9keSYmbGknKTtcbiAgICAgICAgY2hwLnB1c2gobGlzdC5sZW5ndGgpO1xuICAgIH0gICAgIFxufSBjYXRjaCAoZSkge31cbnNldFJlc3VsdCgn5pu05paw6IezOicgKyAoTWF0aC5tYXguYXBwbHkobnVsbCwgY2hwKSkpOyIsInRpdGxlIjoiOTHnvo7liafnvZEiLCJhdXRob3IiOiJSIiwidXJsIjoiaHR0cHM6Ly85MW1qdy52aXAvZnlBbGwvcGFnZS9meXBhZ2VbZmlyc3RQYWdlPWh0dHBzOi8vOTFtancudmlwL2Z5QWxsXSIsInZlcnNpb24iOjIwMjMwNjE4LCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoi576O5YmnJuenkeW5u+eJhybliafmg4XniYcm5Yqo5L2c54mHJuWWnOWJp+eJhyIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6ImNhdGVnb3J5L2FsbF9taiZjYXRlZ29yeS9hbGxfbWova2VodWFucGlhbiZjYXRlZ29yeS9hbGxfbWovanVxaW5ncGlhbiZjYXRlZ29yeS9hbGxfbWovZG9uZ3p1b3BpYW4mY2F0ZWdvcnkvYWxsX21qL3hpanVwaWFuIiwiYXJlYV9uYW1lIjoi5Yqo55S754mHJuWlh+W5u+eJhybmgZDmgJbniYcm5oKs55aR54mHIiwiYXJlYV91cmwiOiJjYXRlZ29yeS9hbGxfbWovZG9uZ2h1YXBpYW4mY2F0ZWdvcnkvYWxsX21qL3FpaHVhbnBpYW4mY2F0ZWdvcnkvYWxsX21qL2tvbmdidXBpYW4mY2F0ZWdvcnkvYWxsX21qL3h1YW55aXBpYW4iLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiLnlLXlvbEm57qq5b2V54mHJuecn+S6uuengCbku4rml6Xmm7TmlrAm5o6S6KGM5qacIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6ImNhdGVnb3J5L2RpYW55aW5nJmNhdGVnb3J5L2ppbHVwaWFuJmNhdGVnb3J5L3poZW5yZW54aXUmbGFzdC11cGRhdGUmYWxsdG9wX2hpdCIsImZpbmRfcnVsZSI6ImpzOlxudmFyIGQgPSBbXVxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XG5hZGRMaXN0ZW5lcihcIm9uQ2xvc2VcIiwgJC50b1N0cmluZygoKSA9PiB7XG4gICAgbGV0IGtleXMgPSBsaXN0TXlWYXJLZXlzKCk7XG4gICAgZm9yIChsZXQgaXQgb2Yga2V5cykge1xuICAgICAgICBjbGVhck15VmFyKGl0KTtcbiAgICB9XG59KSk7XG5cbi8qXG4vL+WKqOaAgeWIhuexu1xuXG5jb25zdCDlpKfnsbvlrprkvY0gPSAnYm9keSYmLm1vLXNjcmUtaW5mbzpub3QoOm50aC1sYXN0LWNoaWxkKDMpKXx8aDInO1xuY29uc3Qg5ou85o6l5YiG57G7ID0gJyc7XG5jb25zdCDlsI/nsbvlrprkvY0gPSAnYm9keSYmYTpub3QoOm1hdGNoZXMo6aaW6aG1fOeDreaQnHzkuJPpoph8QVBQfOaEj+Wig3zmmI7mmJ/lvbHlupMpKSc7XG5cblxuLy/nv7vpobVcbk1ZX1VSTCA9IE1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCAnJylcbmxldCB0cnVlX3VybCA9IGdldFZhcihNWV9SVUxFLnVybCwgTVlfVVJMKVxuY29uc3QgcGFnZSA9IE1ZX1BBR0VcbmlmIChnZXRWYXIoTVlfUlVMRS51cmwpKSB7XG4gICAgdHJ1ZV91cmw9dHJ1ZV91cmwucmVwbGFjZSgvdm9kdHlwZShcXC9cXGQrKS8sJ3ZvZHNob3ckMS0tLS0tLS0tLS0tJykucmVwbGFjZSgvKFxcZCspPy0tLShcXGR7NH0pP1xcLmh0bWwvLCBwYWdlICsgJy0tLSQyJyArICcuaHRtbCcpO1xufVxubG9nKHRydWVfdXJsKVxudmFyIGh0bWwgPSByZXF1ZXN0KHRydWVfdXJsKVxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9kdGZsJykpLnJ1bGUpXG5cbiovXG5cblxuLy/pobXpnaLlhoXlrrnloavlhYVcbnZhciDkuIDnuqfliJfooaggPSAnYm9keSYmLnUtbW92aWUnXG52YXIg5LiA57qn5qCH6aKYID0gJ2gyJiZUZXh0J1xudmFyIOS4gOe6p+aPj+i/sDEgPSAnLnBpbmdmZW4mJlRleHQnXG52YXIg5LiA57qn5o+P6L+wMiA9ICcuemh1YW5ndGFpJiZUZXh0J1xudmFyIOS4gOe6p+WbvueJhyA9ICdpbWcmJmRhdGEtb3JpZ2luYWwnXG52YXIg5LiA57qn6ZO+5o6lID0gJ2EmJmhyZWYnXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9QcmltYXJ5VGVtcGxhdGUnLCB7fSkpLnJ1bGUpO1xuXG5zZXRIb21lUmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Ii9wYWdlL2Z5cGFnZT9zPSoqIiwiZ3JvdXAiOiI277iP4oOj5b2x6KeGIiwic2VhcmNoRmluZCI6ImpzOlxuXG52YXIg5qGG5p625YiX6KGoID0gJ2JvZHkmJi51LW1vdmllJ1xudmFyIOahhuaetuagh+mimCA9ICdoMiYmVGV4dCdcbnZhciDmoYbmnrbmj4/ov7AxID0gJy56aHVhbmd0YWkmJlRleHQnXG52YXIg5qGG5p625o+P6L+wMiA9ICcnXG52YXIg5qGG5p62566A5LuLMSA9ICcucGluZ2ZlbiYmVGV4dCdcbnZhciDmoYbmnrbnroDku4syID0gJy5tZXRhJiZUZXh0J1xudmFyIOahhuaetuWbvueJhyA9ICdpbWcmJmRhdGEtb3JpZ2luYWwnXG52YXIg5qGG5p626ZO+5o6lID0gJ2EmJmhyZWYnXG5cbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL1NlYXJjaEZyYW1lJywge30pKS5ydWxlKTtcblxuc2V0UmVzdWx0KGQpIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMyIsImRldGFpbF9maW5kX3J1bGUiOiJqczpcbnZhciBkID0gW11cbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpXG52YXIg5pCc57Si5qCH562+ID0gJy52aWRlb19pbWcmJmltZyYmYWx0Jztcbi8qXG52YXIg5b2x54mH5LiL6L29ID0gJChcIlwiKS5ydWxlKCgpID0+IHtcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS95cHh6Jywge30pKS5ydWxlKTtcbn0pOyAqL1xuXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2VyJykpLnJ1bGUpO1xuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eTAnLCB7fSkpLnJ1bGUpO1xudmFyIHBsYXlsaXN0ID0gW3tcbiAgICDnsbvlnos6ICflnKjnur/op4LnnIsnLFxuICAgIC8v57q/6LevOiAnYm9keSYmYTpub3QoOm1hdGNoZXMo566A5LuLfOaOqOiNkHzmppzljZUpKScsXG4gICAg6YCJ6ZuGOiAnYm9keSYmLnZpZGVvX2xpc3RfbGkmJi52bGluazpub3QoOm1hdGNoZXMo572R55uY6ZO+5o6lKSknLFxuICAgIC8v57q/6Lev5ZCN56ewOiAnVGV4dEBALnJlcGxhY2UoXCLniLHnnItcIixcIlwiKScsXG4gICAg6YCJ6ZuG5YiX6KGoOiAnYm9keSYmYScsXG4gICAg5o6S6ZmkOiAnJyxcbiAgICAvL+mAiembhuWQjeensDogJ1RleHQnLFxuICAgIOmAiembhumTvuaOpTogJ2EmJmlkJyxcbiAgICAvL+WAkuW6jzp0cnVlLFxuICAgIOino+aekDogbGF6eVxufSwge1xuICAgIOexu+WeizogJ+W9seeJh+S4i+i9vScsXG4gICAg6YCJ6ZuGOiAnYm9keSYmLnZpZGVvLWluZm8tZG93bmJ0bicsXG4gICAg6YCJ6ZuG5ZCN56ewOiAnVGV4dCcsXG4gICAg6YCJ6ZuG6ZO+5o6lOiAnYSYmaHJlZicsXG59XVxuXG52YXIgb2JqID0ge1xuICAgIG1haW46IHBkZmEoaHRtbCwgJ2JvZHkmJi52aWRlb19pbmZvOm5vdCg6bWF0Y2hlcyjliafmg4UpKScpLFxuICAgIHNvcnQ6IFsn5Y6f5ZCNJywgJ+abtOaWsCcsICfliKvlkI0nLCfnvJbliacnLCAn5a+85ryUJywgJ+S4u+a8lCcsICfmvJTlkZgnXSxcbiAgICBpbWc6IE1ZX1BBUkFNUy5pbWcsXG4vL3BkKGh0bWwsICcjY292ZXJfc2hvd2JveCYmZGF0YS1vcmlnaW5hbCcpLC8v5bCB6Z2i5Zu+54mHXG59XG5cbkVyamkuc2V0Q29udGVudChvYmopO1xuRXJqaS5zZXREZXNjKHBkZmgoaHRtbCwgJy5qaWFuamllJiZUZXh0JykucmVwbGFjZSgn566A5LuL77yaJywnJykucmVwbGFjZSgn6K+m5oOFJywnJykpOy8v5Ymn5oOF566A5LuLXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90b29sJywge30pKS5ydWxlKTsvL+WklumDqOW/q+aNt+aQnOe0olxuRXJqaS5nZXRQbGF5ZXJzKHBsYXlsaXN0KTtcbkVyamku5aOw5piOKCk7XG5cbnNldFJlc3VsdChkKSIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIqIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p+WKqOaAgeWIhuexu1wiLFwicGF0aFwiOlwiZHRmbFwiLFwicnVsZVwiOlwidmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7wqDCoMKgwqDCoMKgwqBcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO8KgwqDCoMKgwqBcXG59XFxuY29uc3Qg5YiG57G76aKc6ImyID0gZ2V0UmFuZ2VDb2xvcnMoKTsvLycjRjA1MDZFJ1xcbnZhciDmkJzntKLmjInpkq4gPSAnU2VhcmNoJ1xcbnZhciDliqjmgIHmlLbnvKkgPSAn4ouAJ1xcbnZhciDliqjmgIHlsZXlvIAgPSAn4ouBJ1xcbmNvbnN0IOWIhuexu+agh+mimCA9ICdhJiZUZXh0JztcXG5jb25zdCDliIbnsbvpk77mjqUgPSAnYSYmaHJlZic7XFxuY29uc3Qg5byA5ZCv5pCc57SiID0gdHJ1ZTtcXG5cXG5jb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbnZhciDmkJzntKI9dHlwZW9mKOW8gOWQr+aQnOe0oikhPSd1bmRlZmluZWQnP+W8gOWQr+aQnOe0ojpmYWxzZTtcXG5pZsKgKHBhcnNlSW50KHBhZ2UpwqA9PT3CoDEpwqB7XFxuICAgIGlmKOaQnOe0oil7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IOaQnOe0ouaMiemSrixcXG4gICAgICAgIHVybDogXFxcIidoaWtlcjovL3NlYXJjaD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZzPScraW5wdXRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIuaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigna2V5d29yZCcsICcnKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkJywgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgfVxcbn1cXG5pZiAodHlwZW9mKOaLvOaOpeWIhuexuykgIT0gJ3VuZGVmaW5lZCcgJiYg5ou85o6l5YiG57G7ICE9ICcnKSB7XFxuICAgIHZhciBjYXRlZ29yaWVzID0gcGRmYShodG1sLCDlpKfnsbvlrprkvY0pLmNvbmNhdChwZGZhKGh0bWwsIOaLvOaOpeWIhuexuykpXFxufSBlbHNlIHtcXG4gICAgdmFyIGNhdGVnb3JpZXMgPSBwZGZhKGh0bWwsIOWkp+exu+WumuS9jSlcXG59XFxuXFxubGV0IGluaXRfY2F0ZSA9IFtdXFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG59XFxuXFxuY29uc3QgZm9sZCA9IGdldFZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpXFxuY29uc3QgY2F0ZV90ZW1wX2pzb24gPSBnZXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG5jb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKGNhdGVfdGVtcF9qc29uKVxcbmV2YWxQcml2YXRlSlMoXFxcIkwzRHZuNkNDV08wd3EyMnBma0ZxbFB5bWpqaThUUnplUWZqM0VOdVoyQlNGSEswdzB4RDloUVVqSU1UL2FVZ2lFZlQ0NGxzRkN4ZGJudm9vVkRiSkZJMHJNVFhuYWZ1NVphL1krRGhhcmh0a0pXNUFTWHFaWm9PclcrMmR0ZHVzSmJkeFEvMVp6d3ZxV2pGWnQ2eWtKZz09XFxcIilcXG5pZiAocGFyc2VJbnQocGFnZSkgPT09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBmb2xkID09PSAnMScgPyAn4oCc4oCc4oCd4oCdPGI+JyArIOWKqOaAgeWxleW8gC5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArICc8L2I+JyA6ICfigJzigJzigJ3igJ08Yj4nICsg5Yqo5oCB5pS257ypLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpICsgJzwvYj4nLFxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGZvbGQpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCA9PT0gJzEnID8gJzAnIDogJzEnKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgZm9sZCksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcbiAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xcbiAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimClcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZijmjpLpmaQpICE9ICd1bmRlZmluZWQnICYmIOaOkumZpCAhPSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGtleS50b1N0cmluZygpID09PSBjYXRlX3RlbXBbaW5kZXhdID8gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKSA6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHBkKGl0ZW0sIOWIhuexu+mTvuaOpSkgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW11cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnVybCwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2UgaWYgKGZvbGQgPT09ICcxJykge1xcbiAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimClcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZijmjpLpmaQpICE9ICd1bmRlZmluZWQnICYmIOaOkumZpCAhPSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGtleS50b1N0cmluZygpID09PSBjYXRlX3RlbXBbaW5kZXhdID8gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0aXRsZS5mb250Y29sb3Io5YiG57G76aKc6ImyKSA6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHBkKGl0ZW0sIOWIhuexu+mTvuaOpSkgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnVybCwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p+WIl+ihqOahhuaetlwiLFwicGF0aFwiOlwiUHJpbWFyeVRlbXBsYXRlXCIsXCJydWxlXCI6XCJcXG5sZXQgbGlzdCA9IHBkZmEoaHRtbCwg5LiA57qn5YiX6KGoKTtcXG5mb3IgKGxldCBqIGluIGxpc3QpIHtcXG4gICAgIHZhciDmoIfpopggPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwg5LiA57qn5qCH6aKYKTtcXG4gICAgIHZhciDmj4/ov7AxID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sIOS4gOe6p+aPj+i/sDEpXFxuICAgICAucmVwbGFjZSgn6LGG55OjOicsJycpXFxuICAgICA7XFxuICAgICB2YXIg5o+P6L+wMiA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCDkuIDnuqfmj4/ov7AyKVxcbiAgICAgLnJlcGxhY2UoJ+i/nui9veS4re+8jCcsJycpXFxuICAgICAucmVwbGFjZSgv6IezZCvpm4ZcXFxcLy8sJycpXFxuICAgICAucmVwbGFjZSgv77yMLiovZywnJylcXG4gICAgIC5yZXBsYWNlKCfmlrAnLCcnKVxcbiAgICAgLnJlcGxhY2UoJ+esrCcsJycpO1xcbiAgICAgdmFyIOWbvueJhyA9IHBhcnNlRG9tKGxpc3Rbal0sIOS4gOe6p+WbvueJhykgKyAnQFJlZmVyZXI9JztcXG4gICAgIHZhciDpk77mjqUgPSBwYXJzZURvbShsaXN0W2pdLCDkuIDnuqfpk77mjqUpICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiO1xcbiAgICAgICAgICBcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiDmoIfpopgsXFxuICAgICAgICBkZXNjOiDmj4/ov7AxICsgJyAnICsg5o+P6L+wMixcXG4gICAgICAgIGltZzog5Zu+54mHLFxcbiAgICAgICAgdXJsOiDpk77mjqUsIFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaW1nOiDlm77niYcsXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p+aQnOe0ouahhuaetlwiLFwicGF0aFwiOlwiU2VhcmNoRnJhbWVcIixcInJ1bGVcIjpcIlxcclxcbnZhciBkID0gW107XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgJ2Nvb2tpZSc6IGdldEl0ZW0oTVlfSE9NRSArICdDb29raWUnLCAnJyksXFxuICAgIH1cXG59KVxcbmlmIChodG1sLmluY2x1ZGVzKCfpqozor4HpobXpnaInKSkge1xcbiAgICBjbGVhckl0ZW0oTVlfSE9NRSArICdDb29raWUnKTtcXG4gICAgY2xlYXJWYXIoTVlfSE9NRSArICdDb29raWUnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5omL5Yqo6aqM6K+BJyxcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLnJ1bGUoKE1ZX0hPTUUsIE1ZX1VSTCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgdmFyIGNvb2tpZSA9IGdldFZhcihNWV9IT01FICsgJ0Nvb2tpZScsICcnKTtcXG4gICAgICAgICAgICAvL2xvZyhjb29raWUpXFxuICAgICAgICAgICAgaWYgKGNvb2tpZSAhPSAnJykge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKE1ZX0hPTUUgKyAnQ29va2llJyxjb29raWUpO1xcbiAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJ2hpa2VyOi8vZW1wdHknKTtcXG4gICAgICAgICAgICAgICAgdG9hc3QoJ+WIt+aWsOS9v+eUqCcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChNWV9IT01FLCBNWV9VUkwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50SWQgPSAnZGl2LmRldGFpbCc7IC8vIOW+heajgOafpeeahOWFg+e0oCBJRCBcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbFRpbWUgPSAxMDAwOyAvLyDmr4/pmpQgMSDnp5Lpkp/mo4Dmn6XkuIDmrKEgXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRJZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7IC8vIOWtmOWcqOivpeWFg+e0oO+8jOWPr+S7peaJp+ihjOafkOS6m+aTjeS9nCBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmJhLmxvZygn5a2Y5ZyoJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5yZWZyZXNoWDVEZXNjKCdmbG9hdCYmMCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5jb2xvciA9ICdyZWQnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcihNWV9IT01FICsgJ0Nvb2tpZScsIGZiYS5nZXRDb29raWUoTVlfVVJMKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7IC8vIOa4hemZpOWumuaXtuWZqCBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2ZiYS5sb2coJ+S4jeWtmOWcqCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGludGVydmFsVGltZSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBNWV9IT01FLCBNWV9VUkwpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRIb21lUmVzdWx0KGQpXFxuICAgICAgICB9LCBNWV9IT01FLCBNWV9VUkwpXFxuICAgIH0pXFxufVxcblxcbi8vZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcmpzYicsIHt9KSkucnVsZSk7XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9odWFrdWFpJykpLnJ1bGUpXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS95em0/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5sZXQgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwg5qGG5p625YiX6KGoKTtcXG5mb3IgKGxldCBqIGluIGxpc3QpIHtcXG4gICAgIHZhciDmoIfpopggPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwg5qGG5p625qCH6aKYKS5zbGljZSgwLDE2KTtcXG4gICAgIHZhciDnroDku4sxID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sIOahhuaetueugOS7izEpLnNsaWNlKDAsMjYpO1xcbiAgICAgdmFyIOeugOS7izIgPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwg5qGG5p62566A5LuLMik7XFxuICAgICB2YXIg5o+P6L+wMSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCDmoYbmnrbmj4/ov7AxKTtcXG4gICAgIHZhciDmj4/ov7AyID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sIOahhuaetuaPj+i/sDIpLnJlcGxhY2UoJ+exu+Wei++8micsJyAgJykucmVwbGFjZSgn5Zyw5Yy677yaJywnICcpLnJlcGxhY2UoJ+W5tOS7ve+8micsJyAgJyk7XFxuICAgICB2YXIg5Zu+54mHID0gcGFyc2VEb20obGlzdFtqXSwg5qGG5p625Zu+54mHKSArICdAUmVmZXJlcj0nO1xcbiAgICAgdmFyIOmTvuaOpSA9IHBhcnNlRG9tKGxpc3Rbal0sIOahhuaetumTvuaOpSkgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCI7XFxuICAgICAgXFxuICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgIHRpdGxlOiDmoIfpopgsICAgICAgICAgICBcXG4gICAgICAgICAgICAgICBjb250ZW50OiDnroDku4sxICsgJ1xcXFxuJyArIOeugOS7izIsXFxuICAgICAgICAgICAgICAgZGVzYzog5o+P6L+wMSArICcgJyArIOaPj+i/sDIsXFxuICAgICAgICAgICAgICAgaW1nOiDlm77niYcsXFxuICAgICAgICAgICAgICAgdXJsOiDpk77mjqUsXFxuICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpbWc6IOWbvueJhyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6YCa55So6Kej5p6Q4pGgXCIsXCJwYXRoXCI6XCJsYXp5MVwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCkubWF0Y2goL3IgcGxheWVyXy4qPz0oLio/KTwvKVsxXSlcXG4gICAgICAgICAgICB2YXIgdXJsID0gaHRtbC51cmxcXG4gICAgICAgICAgICBpZiAoaHRtbC5lbmNyeXB0ID09ICcxJykge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1bmVzY2FwZSh1cmwpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5lbmNyeXB0ID09ICcyJykge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB1bmVzY2FwZShiYXNlNjREZWNvZGUodXJsKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICgvbTN1OHxtcDQvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd2aWRlbzovLycgKyBpbnB1dFxcbiAgICAgICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgcmV0dXJuICd2aWRlbzovLycgKyBpbnB1dFxcbiAgICB9XFxufSlcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumAmueUqOino+aekOKRoVwiLFwicGF0aFwiOlwibGF6eTJcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcbiAgICAvL3g1cnVsZeW8uuWKm+WXheaOolxcbmZ1bmN0aW9uIHg1cnVsZShqaWV4dXJsLCBzcmN1cmwpIHtcXG4gICAgc2hvd0xvYWRpbmcoXFxcIue9kemhteiuv+mXruajgOe0ouS4re+8jOivt+eojeWAmS4uLlxcXCIpO1xcbiAgICB2YXIgdmlkZW8gPSAnd2ViUnVsZTovLycgKyBqaWV4dXJsICsgJ0AnICsgJC50b1N0cmluZygoc3JjdXJsKSA9PiB7XFxuICAgICAgICAvL2ZiYS5sb2coZmJhLmdldFVybHMoKSk7XFxuICAgICAgICB2YXIgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICBpZiAod2luZG93LmNvdW50ID09IG51bGwgfHwgd2luZG93LmNvdW50ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHdpbmRvdy5jb3VudCA9IDBcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh3aW5kb3cuY291bnQgPj0gMjMpIHtcXG4gICAgICAgICAgICByZXR1cm4gc3JjdXJsXFxuICAgICAgICB9XFxuICAgICAgICB3aW5kb3cuY291bnQgPSB3aW5kb3cuY291bnQgKyAxO1xcbiAgICAgICAgaWYgKHdpbmRvdy5jb3VudCA+IDEgJiYgd2luZG93LmNvdW50IDw9IDMgJiYgd2luZG93LmNvdW50ICE9IG51bGwgJiYgd2luZG93LmNvdW50ICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuaW5uZXJUZXh0LnNlYXJjaCgv6Kem5Y+R5LqG6Ziy55uX6ZO+fOacquaOiOadg3zmjqXlj6PpmLLnm5d86K+35Yiw5Li756uZ6KeC55yLLykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFzcmN1cmwpIHtcXG4gICAgICAgICAgICAgICAgXFx0ZmJhLmxvZygn5bCd6K+V6Lez6Ziy55uX6aqM6K+B5LiAJyk7XFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgXFx0ZmJhLmxvZygn5bCd6K+V6Lez6Ziy55uX6aqM6K+B5LqMJyk7XFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gc3JjdXJsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSBlbHNlIGlmKHdpbmRvdy5jb3VudCA+IDMgJiYgd2luZG93LmNvdW50ICE9IG51bGwgJiYgd2luZG93LmNvdW50ICE9IHVuZGVmaW5lZCl7XFxuICAgICAgICAgICAgaWYgKHVybHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgICAgICAgICBmYmEuaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ajgOe0ouWksei0pe+8jOWPr+iDvemTvuaOpeaXoOazleiuv+mXruOAgic7XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmxzLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGZiYS5sb2coJ+WwneivleebtOmTvuS4jkpTT07op6PmnpAnKTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybHNbMF0ubWF0Y2goL2R5Y2RuXFxcXC10b3NcXFxcLnBzdGF0cHxcXFxcLm0zdTh8XFxcXC5tcDR8XFxcXC5mbHZ8bmV0ZWFzZVxcXFwuY29tfHZpZGVvX21wNHx0eXBlXFxcXD1tM3U4fHB0XFxcXD1tM3U4LykgJiYgIXVybHNbMF0ubWF0Y2goL1xcXFwuaHRtbHxtM3U4XFxcXC50dnxcXFxcJm5leHR8YWNcXFxcPWRtfFxcXFw9aHR0cHxodHRwc1xcXFw6XFxcXC9cXFxcL1tcXFxcZF1cXFxcLm0zdTh8XFxcXD91cmxcXFxcPVxcXFwvbTN1OC8pKSB7XFxuICAgICAgICAgICAgICAgICAgICAvL2Z5X2JyaWRnZV9hcHAubG9nKHVybHNbMF0pXFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsc1swXS5pbmRleE9mKCdiaWxpdmlkZW8nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxzWzBdICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5iaWxpYmlsaS5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsc1swXS5pbmRleE9mKCd0aXRhbi5tZ3R2LmNvbScpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbMF0gKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbMF1cXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRpb24uaHJlZi5tYXRjaCgvZHljZG5cXFxcLXRvc1xcXFwucHN0YXRwfFxcXFwubTN1OHxcXFxcLm1wNHxcXFxcLmZsdnxuZXRlYXNlXFxcXC5jb218dmlkZW9fbXA0fHR5cGVcXFxcPW0zdTh8cHRcXFxcPW0zdTgvKSAmJiAhbG9jYXRpb24uaHJlZi5tYXRjaCgvaHRtbHxtM3U4XFxcXC50dnxcXFxcJm5leHR8YWNcXFxcPWRtfFxcXFw9aHR0cHxodHRwc1xcXFw6XFxcXC9cXFxcL1tcXFxcZF1cXFxcLm0zdTh8XFxcXD91cmxcXFxcPVxcXFwvbTN1OC8pKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24uaHJlZjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gZmJhLmZldGNoKGxvY2F0aW9uLmhyZWYsIHt9KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghL1xcXFw8bWV0YS8udGVzdChodG1sKSYmIS9cXFxcPGh0bWwvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGh0bWwpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWZ9XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZmJhLmxvZygn5pel5b+X5qOA57Si56ysJyArIHdpbmRvdy5jb3VudCArICfmrKEnKTtcXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1cmxzKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsc1tpXS5tYXRjaCgvZHljZG5cXFxcLXRvc1xcXFwucHN0YXRwfFxcXFwubTN1OHxcXFxcLm1wNHxcXFxcLmZsdnxuZXRlYXNlXFxcXC5jb218dmlkZW9fbXA0fHR5cGVcXFxcPW0zdTh8cHRcXFxcPW0zdTgvKSAmJiAhdXJsc1tpXS5tYXRjaCgvaHRtbHxtM3U4XFxcXC50dnxcXFxcJm5leHR8YWNcXFxcPWRtfFxcXFw9aHR0cHxodHRwc1xcXFw6XFxcXC9cXFxcL1tcXFxcZF1cXFxcLm0zdTh8XFxcXD91cmxcXFxcPVxcXFwvbTN1OC8pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9meV9icmlkZ2VfYXBwLmxvZyh1cmxzW2ldKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmxzW2ldLmluZGV4T2YoJ2JpbGl2aWRlbycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxzW2ldICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5iaWxpYmlsaS5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybHNbaV0uaW5kZXhPZigndGl0YW4ubWd0di5jb20nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsc1tpXSArICcjaXNWaWRlbz10cnVlIycgKyAnO3tSZWZlcmVyQHd3dy5tZ3R2LmNvbSYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH0nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsc1tpXS5pbmRleE9mKCdqdWhhb2thbicpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxzW2ldICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5qdWhhb2thbi5jYy99JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybHNbaV0uaW5kZXhPZignb2piaycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxzW2ldICsgJzt7UmVmZXJlckBodHRwczovL3Yub2pia2p4LmNvbS99JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybHNbaV0uaW5kZXhPZignd2tmaWxlJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbaV0gKyAnO3tSZWZlcmVyQGh0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL30nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxzW2ldICsgJyNpc1ZpZGVvPXRydWUjJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSAvL2VuZCBmb3IgaVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSwgc3JjdXJsKTtcXG4gICAgcmV0dXJuIHZpZGVvXFxufVxcbi8v57uT5p2feDVydWxl5by65Yqb5ZeF5o6iXFxuICAgIHJldHVybiB4NXJ1bGUoaW5wdXQsIGlucHV0KTtcXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qn5aSW6YOo5pCc57SiXCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCJ2YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwg5pCc57Si5qCH562+KS5yZXBsYWNlKCfnmoTmtbfmiqUnLCcnKTtcXG5sb2codGl0bGUpXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjRkYwMDAwXFxcIj4g6IGa5b2x4oiaPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwOi8vaW1hZ2UuY29vbGFway5jb20vL2Fwa19sb2dvLzIwMjIvMDUwNy8xNC8wXzM4MjhfNzI1NF82MzlAMjYweDI2MC5wbmcudC5wbmcnLFxcbiAgICB1cmw6ICdoaWtlcjovL3NlYXJjaD9zPScgKyB0aXRsZSArICcmcnVsZT3ogZrlvbHiiJonLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMUU5MEZGXFxcIj4g5LqR55uY5ZCbKOaOqOmAgSk8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHA6Ly9pbWFnZS5jb29sYXBrLmNvbS9hcGtfbG9nby8yMDIxLzA3MjEvMTAvYmI1YzZkNTlhOWUzNjE1OTgzNGIzZjE5ZmM3NDlkZjUtMjg1MTA3LW9fMWZiM2Z0bDNnY3N0MXNkdDFuM2IxbTJ1bmpkMTgtdWlkLTY2MjQzNUAzNjB4MzYwLnBuZycsXFxuICAgIHVybDogJ2hpa2VyOi8vc2VhcmNoP3M9JyArIHRpdGxlICsgJyZydWxlPeS6keebmOWQmyjmjqjpgIEpJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzQnLFxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI0ZGOEMwMFxcXCI+IOmmmeaDheW9seinhjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cDovL3N0YXRpYy55aW5neW9uZ2h1aS5jb20vaWNvbi8xMjgvNjg2MzQ0Ny5wbmcnLFxcbiAgICB1cmw6ICdoaWtlcjovL3NlYXJjaD9zPScgKyB0aXRsZSArICcmcnVsZT3pppnmg4XlvbHop4YnLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMDBGRjAwXFxcIj4g6Z2S6LGGPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwOi8vc3RhdGljLnlpbmd5b25naHVpLmNvbS9pY29uLzEyOC83MDAwNDc4LnBuZycsXFxuICAgIHVybDogJ2hpa2VyOi8vc2VhcmNoP3M9JyArIHRpdGxlICsgJyZydWxlPemdkuixhicsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumAmueUqOeMq+WHveaVsFwiLFwicGF0aFwiOlwibGF6eVwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKFxcXCJcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuXFxuICAgIC8v54yr5Ye95pWwXFxuICAgIGZ1bmN0aW9uIG1hb3NzKGp4dXJsLCByZWYsIGtleSkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgICAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHZhciB0b2tlbl9rZXkgPSBrZXkgPT0gdW5kZWZpbmVkID8gJ2R2eVlSUWxuUFJDTWRRU2UnIDoga2V5O1xcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXCIvKVsxXSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciB0b2tlbl9pdiA9IGh0bWwuc3BsaXQoJ190b2tlbiA9IFxcXCInKVsxXS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh0b2tlbl9rZXkpO1xcbiAgICAgICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHRva2VuX2l2KTtcXG4gICAgICAgICAgICAvLyBsb2coXFxcIml2OlxcXCIraXYpO1xcbiAgICAgICAgICAgIC8vICBsb2coaHRtbCk7XFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC92YXIgY29uZmlnID0ge1tcXFxcc1xcXFxTXSo/fS8pWzBdICsgJycpO1xcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcbiAgICAgICAgICAgICAgICAvL2NvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQoQUVTKGNvbmZpZy51cmwsIGtleSwgaXYpKTtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGNvbmZpZy51cmwsIGtleSwge1xcbiAgICAgICAgICAgICAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG5cXG5mdW5jdGlvbiBibCh2aXBVcmwpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBodG1sID0gcmVxdWVzdChcXFwiaHR0cHM6Ly9ibGJmcS5mMzMyMi5uZXQvcGxheWVyL2FuYWx5c2lzLnBocD92PVxcXCIgKyB2aXBVcmwsIHt0aW1lb3V0OiA1MDAwfSk7XFxuICAgICAgICB1cmwgPSBodG1sLm1hdGNoKC92YXIgdXJscyA9IFxcXCIoLio/KVxcXCIvKVsxXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcXFwiXFxcIik7XFxuICAgICAgICByZXR1cm4gdXJsO1xcbiAgICB9XFxuICAgIGNhdGNoIChlKSB7XFxuICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgIH1cXG59XFxuXFxuXFxuICAgIHZhciBwbGF5ZXIgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9yIHBsYXllcl8uKj89KC4qPyk8LylbMV0pO1xcbiAgICB2YXIgZnJvbSA9IHBsYXllci5mcm9tO1xcbiAgICB2YXIganN1cmwgPSBwbGF5ZXIudXJsO1xcbiAgICBpZiAocGxheWVyLmVuY3J5cHQgPT0gJzEnKSB7XFxuICAgICAgICB2YXIganN1cmwgPSB1bmVzY2FwZShqc3VybCk7XFxuICAgIH0gZWxzZSBpZiAocGxheWVyLmVuY3J5cHQgPT0gJzInKSB7XFxuICAgICAgICB2YXIganN1cmwgPSB1bmVzY2FwZShiYXNlNjREZWNvZGUoanN1cmwpKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGpzdXJsXFxuICAgIH1cXG4gICAgXFxuICAgIGlmIChqc3VybC5zZWFyY2goL1xcXFwubTN1OHxcXFxcLm1wNC8pID4gLTEpIHtcXG4gICAgICAgICAgICAgcmV0dXJuIGpzdXJsXFxuICAgIH0gZWxzZSBpZiAoanN1cmwubWF0Y2goL08wTzBPLykpICB7XFxuICAgICAgIGxldCBwbGF5dXJsID0gbWFvc3MoXFxcImh0dHBzOi8vYmZxLnhkeXMudmlwLz91cmw9XFxcIiArIGpzdXJsLCBmYWxzZSwgXFxcIkE0MkVBQzBDMkI0MDg0NzJcXFwiKTtcXG4gICAgICAgICAgLy8gIHJldHVybiBibChqc3VybCkrICcjaXNWaWRlbz10cnVlIydcXG4gICAgICAgIHJldHVybiBwbGF5dXJsKyAnI2lzVmlkZW89dHJ1ZSMnXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vYWdpdC5haS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9icmFuY2gvbWFzdGVyL3g1cnVsZS5qcycsIDI0KTtcXG4gICAgICAgIHJldHVybiB4NXJ1bGUoaW5wdXQsIGlucHV0KTtcXG4gICAgfVxcbn0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aqM6K+B56CBXCIsXCJwYXRoXCI6XCJ5em1cIixcInJ1bGVcIjpcIndoaWxlwqAoL+i+k+WFpemqjOivgeeggXzns7vnu5/lronlhajpqozor4EvLnRlc3QoaHRtbCkpwqB7XFxuwqDCoMKgwqBsZXTCoGhlYWRlcnPCoD3CoHtcXG7CoMKgwqDCoMKgwqDCoMKgXFxcIlVzZXItQWdlbnRcXFwiOsKgTU9CSUxFX1VBLFxcbsKgwqDCoMKgwqDCoMKgwqBcXFwiUmVmZXJlclxcXCI6wqBNWV9VUkxcXG7CoMKgwqDCoH1cXG7CoMKgwqDCoGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2Uvanhocz9ydWxlPeaooeadv8K3UScpKS5ydWxlKTtcXG7CoMKgwqDCoGV2YWxQcml2YXRlSlMoc3N5eik7XFxuXFxuwqDCoMKgwqBsZXTCoHZjb2RlwqA9wqBnZXRWQ29kZTIoTVlfSE9NRcKgK8KgJy9pbmRleC5waHAvdmVyaWZ5L2luZGV4Lmh0bWw/JyzCoEpTT04uc3RyaW5naWZ5KGhlYWRlcnMpLMKgJ251bScpO1xcbsKgwqDCoMKgZmV0Y2goTVlfSE9NRcKgK8KgaHRtbC5tYXRjaCgvXFxcXC9pbmRleC5waHAuKj92ZXJpZnk9LylbMF3CoCvCoEpTT04ucGFyc2UodmNvZGUpLnJldCzCoHtcXG7CoMKgwqDCoMKgwqDCoMKgaGVhZGVyczrCoGhlYWRlcnMsXFxuwqDCoMKgwqDCoMKgwqDCoG1ldGhvZDrCoCdQT1NUJ1xcbsKgwqDCoMKgfSlcXG7CoMKgwqDCoHZhcsKgeXrCoD3CoE1ZX1RZUEXCoD09wqAnaG9tZSfCoD/CoHRydWVfdXJswqA6wqBNWV9VUkxcXG7CoMKgwqDCoGxvZyhNWV9UWVBFKVxcbsKgwqDCoMKgaHRtbMKgPcKgcmVxdWVzdCh5eizCoHtcXG7CoMKgwqDCoMKgwqDCoMKgLy/CoMKgwqBoZWFkZXJzOsKgaGVhZGVyc1xcbsKgwqDCoMKgfSlcXG59XFxuaWbCoCgv6aKR57mB5pON5L2cLy50ZXN0KGh0bWwpKcKge1xcbsKgwqDCoMKgZC5wdXNoKHtcXG7CoMKgwqDCoHRpdGxlOsKgJ+e9keermeaQnOe0ouaXtumXtOmXtOmalCcsXFxuwqDCoMKgwqBkZXNjOsKgXFxcIuS4i+aLiemHjeivlVxcXCJcXG59KVxcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6uuacuuivhuWIq1wiLFwicGF0aFwiOlwicmpzYlwiLFwicnVsZVwiOlwidmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxudmFyIHNwbCA9IE1ZX1VSTC5tYXRjaCgvKFtcXFxcU10qPzpcXFxcL1xcXFwvW1xcXFxTXSo/KVxcXFwvLylbMV07XFxuICAgIGlmIChodG1sLmluZGV4T2YoJ+S6uuacuui6q+S7vemqjOivge+8jOivt+WujOaIkOS7peS4i+aTjeS9nCcpID4gLTEgfHwgaHRtbC5pbmRleE9mKCfkurrmnLror4bliKvvvIzor7fnqI3nrYknKSA+IC0xKSB7XFxuICAgICAgICBldmFsKGdldEl0ZW0oJ2h1YWRvbmcnKS5yZXBsYWNlKC9yZWZyZS9nLCBzcGwpKTtcXG4gICAgICAgIHZhciBodG1sID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvayxcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBzcGxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgaWYgKGh0bWwuaW5kZXhPZignanM9Y2xpY2tfaHRtbCcpID4gLTEpIHtcXG4gICAgICAgIC8vbG9nKGdldENvb2tpZShNWV9VUkwpKTtcXG4gICAgICAgIHZhciBfMHg0ODZheDcgPSB7XFxuICAgICAgICAgICAgXFxcInhcXFwiOiA2MTYsXFxuICAgICAgICAgICAgXFxcInlcXFwiOiAyODgsXFxuICAgICAgICAgICAgXFxcImFcXFwiOiA5MDRcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29vayA9IFxcXCJcXFwiO1xcbiAgICAgICAgLypcXG4gICAgICAgIHZhciBhYSA9IGZldGNoQ29va2llKE1ZX1VSTCwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUFcXG4gICAgICAgIH1cXG4gICAgICAgIH0pOyovXFxuICAgICAgICB2YXIgYWEgPSBnZXRDb29raWUoTVlfVVJMKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIHNldFJldChfMHg0ODZheGQsIF8weDQ4NmF4Nykge1xcbiAgICAgICAgICAgIGxldCBqc2YgPSByZXF1ZXN0KHNwbCArIFxcXCIvX2d1YXJkL2VuY3J5cHQuanNcXFwiKTtcXG4gICAgICAgICAgICBldmFsKGpzZik7XFxuICAgICAgICAgICAgdmFyIF8weDQ4NmF4ZSA9IF8weDQ4NmF4ZFtcXFwic3Vic3RyXFxcIl0oMCwgOCk7XFxuICAgICAgICAgICAgdmFyIF8weDQ4NmF4ZiA9IGNkbi5NRDUoXzB4NDg2YXhlKTtcXG4gICAgICAgICAgICB2YXIgXzB4NDg2YXgxMCA9IGNkbltcXFwiY2VudG9zXFxcIl1bXFxcImVuY3J5cHRcXFwiXShKU09OW1xcXCJzdHJpbmdpZnlcXFwiXShfMHg0ODZheDcpLCBfMHg0ODZheGYsIHtcXG4gICAgICAgICAgICAgICAgaXY6IF8weDQ4NmF4ZlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGNvb2sgPSBcXFwiZ3VhcmRyZXQ9XFxcIiArIF8weDQ4NmF4MTAudG9TdHJpbmcoKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZ1bmN0aW9uIHQoXzB4NDg2YXg3KSB7XFxuICAgICAgICAgICAgLy92YXIgY28gPSBKU09OLnBhcnNlKGFhKS50b1N0cmluZygpLnNwbGl0KFxcXCJndWFyZD1cXFwiKTtcXG4gICAgICAgICAgICB2YXIgY28gPSBhYS5zcGxpdChcXFwiZ3VhcmQ9XFxcIik7XFxuICAgICAgICAgICAgdmFyIF8weDQ4NmF4ZCA9IGNvLnBvcCgpLnNwbGl0KFxcXCI7XFxcIikuc2hpZnQoKTtcXG4gICAgICAgICAgICBpZiAoIV8weDQ4NmF4ZCkge1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIumHjei9vVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHNldFJldChfMHg0ODZheGQsIF8weDQ4NmF4NylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB0KF8weDQ4NmF4Nyk7XFxuICAgICAgICBodG1sID0gZmV0Y2goTVlfVVJMLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICAgICAgLy8nQ29va2llJzpKU09OLnBhcnNlKGFhKS50b1N0cmluZygpKyc7ICcrY29va1xcbiAgICAgICAgICAgICAgICAnQ29va2llJzogJ3NlYXJjaG5lZWQ9b2s7ICcgKyBhYSArICc7ICcgKyBjb29rXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpgJrnlKjop6PmnpDikaJcIixcInBhdGhcIjpcImxhenkzXCIsXCJydWxlXCI6XCJ2YXIgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9yIHBsYXllcl8uKj89KC4qPyk8LylbMV0pXFxuICAgIHZhciB1cmwgPSBodG1sLnVybFxcbiAgICBpZiAoaHRtbC5lbmNyeXB0ID09ICcxJykge1xcbiAgICAgICAgdXJsID0gdW5lc2NhcGUodXJsKTtcXG4gICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7XFxuICAgICAgICB1cmwgPSB1bmVzY2FwZShiYXNlNjREZWNvZGUodXJsKSk7XFxuICAgIH1cXG4gICAgaWYgKC9tM3U4fG1wNC8udGVzdCh1cmwpKSB7XFxuICAgICAgICByZXR1cm4gdXJsXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL2x6azIzNTU5L1B1YmxpY1J1bGUvcmF3L21hc3Rlci94NXJ1bGUuanMnLCAyNCk7XFxuICAgICAgICByZXR1cm4geDVydWxlKGlucHV0LCBpbnB1dCk7XFxuICAgIH1cXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6YCa5YWN6YGT6ZW/MFwiLFwicGF0aFwiOlwibGF6eTBcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICBpZiAoaW5wdXQuaW5kZXhPZignbWFnbmV0Oj94dCcpID09IC0xKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KS5tYXRjaCgvciBwbGF5ZXJfLio/PSguKj8pPC8pWzFdKVxcbiAgICAgICAgICAgIHZhciB1cmwgPSBodG1sLnVybFxcbiAgICAgICAgICAgIGlmIChodG1sLmVuY3J5cHQgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKHVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChodG1sLmVuY3J5cHQgPT0gJzInKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVuZXNjYXBlKGJhc2U2NERlY29kZSh1cmwpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKC9tM3U4fG1wNC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycsIDI0KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhenlQYXJzZShpbnB1dCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGxvZygn5oql6ZSZ5pS5d2Vi5ZeF5o6iJyk7XFxuICAgICAgICAgICAgLy9yZXF1aXJlQ2FjaGUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycsIDI0KTtcXG4gICAgICAgICAgICAvL3JldHVybiBsYXp5UGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgaW5wdXRcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBpbnB1dFxcbiAgICB9XFxufSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqfpobXpnaLmoYbmnrZcIixcInBhdGhcIjpcImVyXCIsXCJydWxlXCI6XCJqczpcXG4vKnZlciAyMDIzMDYwNSAxLjNcXG4gKi9cXG5sZXQgRXJqaSA9IHtcXG4gICAgY2xvc2U6IGZ1bmN0aW9uKGxpc3QsIHNvcnRzKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKGxpc3QsIHNvcnRzKSA9PiB7XFxuICAgICAgICAgICAgbGlzdC5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoeCArICdmb2xkJyk7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoeCk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRzOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcigncGxheWxpc3RfJyArIGkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGxpc3QsIHNvcnRzKSlcXG4gICAgfSxcXG4gICAgc21hbGw6IGZ1bmN0aW9uKHN0ciwgY29sb3IpIHtcXG4gICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxmb250IGNvbG9yPVxcXCInICsgKGNvbG9yIHx8ICcnKSArICdcXFwiPicgKyBzdHIgKyAnPC9mb250Pjwvc21hbGw+JztcXG4gICAgfSxcXG4gICAgXFxuXFxuLy/lo7DmmI5cXG4gICAg5aOw5piOOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuc21hbGwoJ+S7peS4iuaVsOaNruadpea6kOS6jue9kee7nO+8jOWmguaCqOWWnOasou+8jOivt+aUr+aMgeWumOaWue+8gScsICcjRjA1MDZFJyksXFxuICAgICAgICAgICAgZGVzYzogdGhpcy5zbWFsbCgn5q2k6KeE5YiZ5LuF6ZmQ5a2m5Lmg5Lqk5rWB5L2/55So77yM6K+35LqO5a+85YWl5ZCOMjTlsI/ml7blhoXliKDpmaTvvIzku7vkvZXnu4Tnu4fmiJbkuKrkurrkuI3lvpfku6Xku7vkvZXmlrnlvI/mlrnms5XkvKDmkq3mraTop4TliJnnmoTmlbTkvZPmiJbpg6jliIbvvIEnLCAncmVkJyksXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuXFxuLy/nroDku4tcXG4gICAgc2V0RGVzYzogZnVuY3Rpb24oZGVzYywgbnVtKSB7XFxuICAgICAgICBkZXNjID0gZGVzYy5jb25zdHJ1Y3RvciA9PSBBcnJheSA/IGRlc2Muam9pbignPGJyPicpIDogZGVzYztcXG4gICAgICAgIGlmIChkZXNjLnJlcGxhY2UoLyg8YnI+fFxcXFxzKykvZywgJycpLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuXFxuICAgICAgICB9XFxuICAgICAgICBjb25zdCBtYXJrID0gJ2Rlc2MnO1xcbiAgICAgICAgbnVtID0gdHlwZW9mKG51bSkgPT0gJ3VuZGVmaW5lZCcgPyA4OCA6IG51bVxcbiAgICAgICAgZGVzYyA9IGRlc2Muc3RhcnRzV2l0aCgn44CA44CAJykgPyBkZXNjIDogJ+OAgOOAgCcgKyBkZXNjO1xcbiAgICAgICAgZGVzYyA9IGRlc2MucmVwbGFjZSgvJy9nLCBcXFwiJiMzOTtcXFwiKVxcblxcbiAgICAgICAgZnVuY3Rpb24gc3Vic3RyKHN0ciwgbWF4TGVuZ3RoKSB7XFxuICAgICAgICAgICAgbGV0IGxlbiA9IDA7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgaWYgKHN0ci5jaGFyQ29kZUF0KGkpID4gMjU1KSB7XFxuICAgICAgICAgICAgICAgICAgICBsZW4gKz0gMjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxlbisrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChsZW4gPiBtYXhMZW5ndGgpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIuc2xpY2UoMCwgaSkgKyAnLi4uJztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHNkZXNjID0gc3Vic3RyKGRlc2MsIG51bSk7XFxuICAgICAgICB2YXIgbGF6eSA9ICQoYCNub0xvYWRpbmcjYCkubGF6eVJ1bGUoKGRjLCBzZGMsIG0pID0+IHtcXG4gICAgICAgICAgICB2YXIgc2hvdyA9IHN0b3JhZ2UwLmdldEl0ZW0obSwgJzAnKTtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBmaW5kSXRlbSgnZGVzYycpLnRpdGxlO1xcbiAgICAgICAgICAgIHZhciByZSA9IC8oPFxcXFwvc21hbGw+PGJyPi4qPz4pLisvZztcXG4gICAgICAgICAgICB2YXIgZXhwID0gJ+WxleW8gDonO1xcbiAgICAgICAgICAgIHZhciByZXQgPSAn5pS26LW3Oic7XFxuICAgICAgICAgICAgaWYgKHNob3cgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ2Rlc2MnLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShyZXQsIGV4cClcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShyZSwgJyQxJyArIHNkYyArICc8L3NtYWxsPicpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyg8XFxcXC9zbWFsbD48YnI+PGZvbnQgY29sb3I9XFxcIikuKj8oXFxcIj4pLywgJyQxIzhBMkJFMiQyICcpLy/ntKvoibLmlLbotbfpopzoibJcXG5cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShtLCAnMCcpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ2Rlc2MnLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShleHAsIHJldClcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShyZSwgJyQxJyArIGRjICsgJzwvc21hbGw+JylcXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDxcXFxcL3NtYWxsPjxicj48Zm9udCBjb2xvcj1cXFwiKS4qPyhcXFwiPikvLCAnJDEjMDA4MDAwJDInKS8v57u/6Imy5bGV5byA6aKc6ImyXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0obSwgJzEnKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGBoaWtlcjovL2VtcHR5YFxcbiAgICAgICAgfSwgZGVzYywgc2Rlc2MsIG1hcmspXFxuICAgICAgICB2YXIgc2MgPSBzdG9yYWdlMC5nZXRJdGVtKG1hcmssICcwJykgPT0gJzAnID8gJ+WxleW8gDonIDogJ+aUtui1tzonO1xcbiAgICAgICAgdmFyIGRjID0gc3RvcmFnZTAuZ2V0SXRlbShtYXJrLCAnMCcpID09ICcwJyA/IHNkZXNjIDogZGVzYztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgdGl0bGU6ICcnICsgJzxiPjxmb250IGNvbG9yPVxcXCJjeWFuXFxcIj7iiLcg5Ymn5oOF566A5LuLXFx0PC9mb250PjwvYj4nICsgXFxcIjxzbWFsbD48YSBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOiBub25lOycgaHJlZj0nXFxcIiArIGxhenkgKyBcXFwiJz5cXFwiICsgc2MgKyAnPC9hPjwvc21hbGw+PGJyPjxmb250IGNvbG9yPVxcXCIjOEEyQkUyXFxcIj4nICsgYCR7ZGN9YCArICc8L3NtYWxsPicsLy/ntKvoibLpu5jorqTpopzoibJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdkZXNjJyxcXG4gICAgICAgICAgICAgICAgbGluZVNwYWNpbmc6IDYsXFxuICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNSxcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IHRydWUsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG5cXG4vL+a1t+aKpVxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgIHZhciBjb250ZW50cyA9IG9iai5tYWluO1xcbiAgICAgICAgdmFyIHNvcnRPcmRlciA9IG9iai5zb3J0O1xcbiAgICAgICAgdmFyIGltZyA9IG9iai5pbWc7XFxuICAgICAgICB2YXIgdGV4dHMgPSBjb250ZW50cy5tYXAoeCA9PiBwZGZoKHgsICdUZXh0JykpO1xcbiAgICAgICAgdmFyIGFycmF5ID0gdGV4dHMuc29ydCgoYSwgYikgPT4ge1xcbiAgICAgICAgICAgIGNvbnN0IGluZGV4QSA9IHNvcnRPcmRlci5pbmRleE9mKGEuc3Vic3RyKDAsIDIpKTtcXG4gICAgICAgICAgICBjb25zdCBpbmRleEIgPSBzb3J0T3JkZXIuaW5kZXhPZihiLnN1YnN0cigwLCAyKSk7XFxuICAgICAgICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCcoJyArIHNvcnRPcmRlci5qb2luKCd8JykgKyAnKScpO1xcbiAgICAgICAgYXJyYXkgPSBhcnJheS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KGl0ZW0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBhcnJheSA9IGFycmF5Lm1hcCh4ID0+IHtcXG4gICAgICAgICAgICBzdHIgPSB4O1xcbiAgICAgICAgICAgIGlmICgvKOWvvOa8lHzkuLvmvJR857G75Z6LKe+8mi8udGVzdChzdHIpKSB7XFxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnLycpLm1hcCgodmFsLCBpbmRleCkgPT4gKGluZGV4ID09PSAwID8gJycgOiAnJykgKyB2YWwpLnNsaWNlKDAsIDUpLmpvaW4oJyAnKS5yZXBsYWNlKC8gJC8sICcnKS5yZXBsYWNlKC9cXFxcKC4qP1xcXFwpL2csICcnKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHN0clxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgLy90aXRsZTogdGhpcy5zbWFsbChhcnJheVswXSArICdcXFxcbicgKyBhcnJheS5zbGljZSgxLCAyKS5qb2luKCdcXFxcbicpLCcjRkY3RjAwJyksLy/mqZjoibJcXG4gICAgICAgICAgICAgdGl0bGU6IHRoaXMuc21hbGwocGRmaChodG1sLCdib2R5JiYuYXJ0aWNsZS1tZXRhJiZUZXh0JykucmVwbGFjZSgvXFxcXC8vZywnICcpICsgJ1xcXFxuJyArIHBkZmgoaHRtbCwnYm9keSYmLmFydGljbGUtdGFncyYmVGV4dCcpLnJlcGxhY2UoL1xcXFwvL2csJ1xcXFx0JyksJyNGRjdGMDAnKSwvL+apmOiJslxcbiAgICAgICAgICAgIC8vZGVzYzogdGhpcy5zbWFsbChhcnJheS5zbGljZSgzKS5qb2luKCdcXFxcbicpLCcjRkZENzAwJyksLy/pu4ToibJcXG4gICAgICAgICAgICAgIGRlc2M6IHRoaXMuc21hbGwocGRmaChodG1sLCdib2R5JiYudmlkZW9faW5mbyYmVGV4dCcpLnJlcGxhY2UoL1xcXFwvL2csJyAnKSwnI0ZGRDcwMCcpLC8v6buE6ImyXFxuICAgICAgICAgICAgcGljX3VybDogaW1nICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBpZiAob2JqLmRlc2MgIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgdGhpcy5zZXREZXNjKG9iai5kZXNjKTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG5cXG5cXG4vL+e6v+i3r1xcbiAgICBzZXRUYWJzOiBmdW5jdGlvbih0YWJzLCB2YXJpLCBzaHNvcnQpIHtcXG4gICAgICAgIHNoc29ydCA9IHNoc29ydCA/IHNoc29ydCA6ICdzaHNvcnQnO1xcbiAgICAgICAgdmFyIHRpdGxlID0gKGdldE15VmFyKHNoc29ydCwgJzAnKSA9PSAnMScpID8gJzxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGMDAwMFxcXCI+6YCG5bqPPC9zcGFuPjwvYj4nIDogJzxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzFhYWQxOVxcXCI+5q2j5bqPPC9zcGFuPjwvYj4nXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpICsgJzonICsgdGl0bGUsXFxuICAgICAgICAgICAgZGVzYzogJ+WFsScgKyB0YWJzLmxlbmd0aCArICfmnaHnur/ot68nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2hzb3J0KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBjb25mID0gZ2V0TXlWYXIoc2hzb3J0LCAnMCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoY29uZiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHNoc29ydCwgJzAnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHNoc29ydCwgJzEnKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmjpLluo/miJDlip8nXFxuICAgICAgICAgICAgfSwgc2hzb3J0KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vY2RuMS5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2FuaW1hbHMtODgvNjQvQ2F0XzEtMTI4LnBuZycsXFxuICAgICAgICB9KVxcbiAgICAgICAgdmFyIOaKmOWPoCA9ICfigJzigJzigJ3igJ08Yj4nwqAgKyDCoCfimLcnLmZvbnRjb2xvcihcXFwiI0QzRDNEM1xcXCIpO1xcbiAgICAgICAgdmFyIOWxleW8gCA9ICfigJzigJzigJ3igJ08Yj4nwqAgKyDCoCfimLAnLmZvbnRjb2xvcihcXFwiI0ZGQTUwMFxcXCIpO1xcbiAgICAgICAgdmFyIGZvbGRuYW1lID0gdmFyaSArICdmb2xkJztcXG4gICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoZm9sZG5hbWUsICcxJyk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiDCoGZvbGQgPT09IMKgJzAnwqAgPyDCoMKg5oqY5Y+gwqAgOiDCoOWxleW8gCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZm9sZG5hbWUsIGZvbGQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoZm9sZG5hbWUsIMKgZm9sZMKgID09PSDCoCcxJ8KgID8gwqAnMCfCoCA6IMKgJzEnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycgKyAoZm9sZMKgID09PSDCoCcxJ8KgID8gwqAn5pS26LW3J8KgIDogwqAn5bGV5byAJyk7XFxuICAgICAgICAgICAgfSwgZm9sZG5hbWUsIGZvbGQpXFxuICAgICAgICB9KVxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IFxcXCIjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ1xcXCIgKyB2YXJpICsgXFxcIicsICdcXFwiICsgaSArIFxcXCInKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i5oiQ5Yqf77yBJzsnI25vSGlzdG9yeSNoaWtlcjovL2VtcHR5J1xcXCI7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKHZhcmksICcwJykgPT0gaSA/ICfigJzigJwnICsgdGFic1tpXSArICfigJ3igJ0nIDogdGFic1tpXSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBzZXRMaXN0czogZnVuY3Rpb24obGlzdHMsIGluZGV4LCBzaHNvcnQpIHtcXG4gICAgICAgIHNoc29ydCA9IHNoc29ydCA/IHNoc29ydCA6ICdzaHNvcnQnO1xcbiAgICAgICAgdmFyIGxpc3QgPSBsaXN0c1tpbmRleF07XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoc2hzb3J0KSA9PSAnMScgJiYgbGlzdHMubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbGlzdHNbaW5kZXhdLnJldmVyc2UoKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0W2pdLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IGxpc3Rbal0udXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogbGlzdC5sZW5ndGggPiA0ID8gJ3RleHRfNScgOiAndGV4dF8yJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0W2pdLnVybC5yZXBsYWNlKC9AbGF6eVJ1bGVbXFxcXHNcXFxcU10rL2csICcnKSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBnZXRUYWJzOiBmdW5jdGlvbihwYXJzZSkge1xcbiAgICAgICAgdmFyIHRhYnMgPSBbXTtcXG4gICAgICAgIHZhciBhcnRzID0gcGRmYShodG1sLCBwYXJzZS7nur/ot68pO1xcbiAgICAgICAgdmFyIOe6v+i3r+WQjSA9IHBhcnNlLue6v+i3r+WQjeensDtcXG4gICAgICAgIHZhciDmm7/mjaLlh73mlbAgPSAnJztcXG4gICAgICAgIGlmIChwYXJzZS7nur/ot6/lkI3np7AuaW5jbHVkZXMoJ0BAJykpIHtcXG4gICAgICAgICAgICDnur/ot6/lkI0gPSBwYXJzZS7nur/ot6/lkI3np7Auc3BsaXQoJ0BAJylbMF07XFxuICAgICAgICAgICAg5pu/5o2i5Ye95pWwID0gcGFyc2Uu57q/6Lev5ZCN56ewLnNwbGl0KCdAQCcpWzFdO1xcbiAgICAgICAgfVxcbiAgICAgICAgZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgICAgICAgICAgdmFyIGxpbmVuYW1lID0gcGRmaChhcnRzW2ldLCDnur/ot6/lkI0pO1xcbiAgICAgICAgICAgIGlmICjmm7/mjaLlh73mlbAgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgbGluZW5hbWUgPSBldmFsKCdsaW5lbmFtZScgKyDmm7/mjaLlh73mlbApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0YWJzLnB1c2gobGluZW5hbWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcmV0dXJuIHRhYnM7XFxuICAgIH0sXFxuICAgIGdldExpc3RzOiBmdW5jdGlvbihwYXJzZSkge1xcbiAgICAgICAgdmFyIGxpc3RzID0gW107XFxuICAgICAgICB2YXIgY29udHMgPSBwZGZhKGh0bWwsIHBhcnNlLumAiembhik7XFxuICAgICAgICB2YXIg6YCJ6ZuG5ZCN56ewID0gcGFyc2Uu6YCJ6ZuG5ZCN56ewID8gcGFyc2Uu6YCJ6ZuG5ZCN56ewIDogJ2EmJlRleHQnO1xcbiAgICAgICAgdmFyIOmAiembhumTvuaOpSA9IHBhcnNlLumAiembhumTvuaOpSA/IHBhcnNlLumAiembhumTvuaOpSA6ICdhJiZocmVmJztcXG4gICAgICAgIHZhciDop6PmnpAgPSBwYXJzZS7op6PmnpAgPyBwYXJzZS7op6PmnpAgOiAnJztcXG4gICAgICAgIHZhciB0ZW1wID0gW107XFxuICAgICAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxuICAgICAgICAgICAgaWYgKHBhcnNlLumAiembhuWIl+ihqCAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgbGlzdHMucHVzaChwZGZhKGNvbnRzW2ldLCBwYXJzZS7pgInpm4bliJfooagpLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoeCwg6YCJ6ZuG5ZCN56ewKS5yZXBsYWNlKC/nrKx86ZuGfOivnXzmnJ8vZywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vOTFtancudmlwL3ZwbGF5LycgKyBwZGZoKHgsIOmAiembhumTvuaOpSkgKycuaHRtbCcgKyDop6PmnpAsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwZChjb250c1tpXSwg6YCJ6ZuG6ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgaWYgKCHpgInpm4bpk77mjqUuaW5jbHVkZXMoJ2hyZWYnKSkge1xcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gcGRmaChjb250c1tpXSwg6YCJ6ZuG6ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB0ZW1wLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoY29udHNbaV0sIOmAiembhuWQjeensCksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCArIOW9seeJh+S4i+i9vSxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBsZXQg5YCS5bqPID0gcGFyc2Uu5YCS5bqPID8gcGFyc2Uu5YCS5bqPIDogZmFsc2U7XFxuICAgICAgICB2YXIgcmVzdWx0cyA9IGxpc3RzLmxlbmd0aCA/IGxpc3RzIDogW3RlbXBdO1xcbiAgICAgICAgaWYgKOWAkuW6jykge1xcbiAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLm1hcCh4ID0+IHgucmV2ZXJzZSgpKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xcbiAgICB9LFxcbiAgICBnZXRQbGF5ZXJzOiBmdW5jdGlvbihwYXJzZSkge1xcbiAgICAgICAgdGhpcy5jbG9zZShwYXJzZS5tYXAoeCA9PiB4Luexu+WeiyksIHBhcnNlLmxlbmd0aCk7XFxuICAgICAgICBwYXJzZS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRhYnMgPSBbJ+S4u+e6vyddO1xcbiAgICAgICAgICAgIGlmIChpdGVtLue6v+i3ryAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgdGFicyA9IHRoaXMuZ2V0VGFicyhpdGVtKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGxpc3RzID0gdGhpcy5nZXRMaXN0cyhpdGVtKTtcXG4gICAgICAgICAgICBpZiAobGlzdHMuc29tZSh4ID0+IHgubGVuZ3RoID4gMCkpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJzKHRhYnMsIGl0ZW0u57G75Z6LLCAncGxheWxpc3RfJyArIGkpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpZiAoZ2V0TXlWYXIoaXRlbS7nsbvlnosgKyAnZm9sZCcsICcxJykgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGlzdHMobGlzdHMsIGdldE15VmFyKGl0ZW0u57G75Z6LLCAnMCcpLCAncGxheWxpc3RfJyArIGkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9LFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIua7keWdl1wiLFwicGF0aFwiOlwiaHVha3VhaVwiLFwicnVsZVwiOlwiZnVuY3Rpb24gc3RyaW5ndG9IZXgoYWNTVFIpIHtcXHJcXG4gIHZhciB2YWwgPSBcXFwiXFxcIjtcXHJcXG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IGFjU1RSLmxlbmd0aCAtIDE7IGkrKykge1xcclxcbiAgICB2YXIgc3RyID0gYWNTVFIuY2hhckF0KGkpO1xcclxcbiAgICB2YXIgY29kZSA9IHN0ci5jaGFyQ29kZUF0KCk7XFxyXFxuICAgIHZhbCArPSBwYXJzZUludChjb2RlKSArIDFcXHJcXG4gIH1cXHJcXG4gIDsgcmV0dXJuIHZhbFxcclxcbn1cXHJcXG5cXHJcXG5mdW5jdGlvbiBtZDVlbmNvZGUod29yZCkge1xcclxcbiAgcmV0dXJuIG1kNSh3b3JkKS50b1N0cmluZygpXFxyXFxufVxcclxcbmlmIChodG1sLmluZGV4T2YoJ+a7keWKqOmqjOivgScpID4gLTEpIHtcXHJcXG4gIGxldCBqc3AgPSBwZChodG1sLCAnc2NyaXB0JiZzcmMnKTtcXHJcXG4gIGxldCBqc2YgPSByZXF1ZXN0KGpzcCk7XFxyXFxuICBldmFsKGpzZi5tYXRjaCgva2V5PVxcXCJbXlxcXFxcXFwiXStcXFwiLHZhbHVlPVxcXCJbXlxcXFxcXFwiXStcXFwiLylbMF0pO1xcclxcbiAgZXZhbChgbGV0IHVybD0nJHtNWV9IT01FfScrYCArIGpzZi5tYXRjaCgvXFxcImNvbXBsZXRlXFxcIixmdW5jdGlvblxcXFwoXFxcXClcXFxce2NcXFxcLmdldFxcXFwoKFteLF0rKSwvKVsxXSk7XFxyXFxuICByZXF1ZXN0KHVybClcXHJcXG4gIGh0bWwgPSByZXF1ZXN0KE1ZX1VSTClcXHJcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqflvbHniYfkuIvovb1cIixcInBhdGhcIjpcInlweHpcIixcInJ1bGVcIjpcIlxcbmpzOlxcbnZhciBkID0gW11cXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKVxcblxcbmQucHVzaCh7XFxuICAgIGltZzogJ2h0dHBzOi8vd3d3LmhsYXBpLmNuL2FwaS9tbTEnICsgJyMnICsgbmV3IERhdGUoKS5nZXRUaW1lKCksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBkZXNjOicwJyxcXG4gICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18xXFxcIlxcbn0pXFxuXFxubGV0IEVyamkgPSB7XFxuICAgIGNsb3NlOiBmdW5jdGlvbihsaXN0LCBzb3J0cykge1xcbiAgICAgICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKChsaXN0LCBzb3J0cykgPT4ge1xcbiAgICAgICAgICAgIGxpc3QubWFwKHggPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKHggKyAnZm9sZCcpO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKHgpO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0czsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3BsYXlsaXN0XycgKyBpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBsaXN0LCBzb3J0cykpXFxuICAgIH0sXFxuICAgIHNtYWxsOiBmdW5jdGlvbihzdHIsIGNvbG9yKSB7XFxuICAgICAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj1cXFwiJyArIChjb2xvciB8fCAnJykgKyAnXFxcIj4nICsgc3RyICsgJzwvZm9udD48L3NtYWxsPic7XFxuICAgIH0sXFxuXFxuLy/nur/ot69cXG4gICAgc2V0VGFiczogZnVuY3Rpb24odGFicywgdmFyaSwgc2hzb3J0KSB7XFxuICAgICAgICBzaHNvcnQgPSBzaHNvcnQgPyBzaHNvcnQgOiAnc2hzb3J0JztcXG4gICAgICAgIHZhciB0aXRsZSA9IChnZXRNeVZhcihzaHNvcnQsICcwJykgPT0gJzEnKSA/ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwMDBcXFwiPumAhuW6jzwvc3Bhbj48L2I+JyA6ICc8Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuato+W6jzwvc3Bhbj48L2I+J1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdmFyaSArICc6JyArIHRpdGxlLFxcbiAgICAgICAgICAgIGRlc2M6ICflhbEnICsgdGFicy5sZW5ndGggKyAn5p2h57q/6LevJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNoc29ydCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgY29uZiA9IGdldE15VmFyKHNoc29ydCwgJzAnKTtcXG4gICAgICAgICAgICAgICAgaWYgKGNvbmYgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihzaHNvcnQsICcwJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihzaHNvcnQsICcxJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5o6S5bqP5oiQ5YqfJ1xcbiAgICAgICAgICAgIH0sIHNoc29ydCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIHBpY191cmw6ICdodHRwczovL2NkbjQuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9idW5vLXNvY2lhbC1uZXR3b3Jrcy8zMi95b3V0dWJlX3ZpZGVvX3BsYXktMTI4LnBuZycsXFxuICAgICAgICB9KVxcbiAgICAgICAgdmFyIOaKmOWPoCA9ICfigJzigJzigJ3igJ08Yj4nwqAgKyDCoCfimLcnLmZvbnRjb2xvcihcXFwiI0QzRDNEM1xcXCIpO1xcbiAgICAgICAgdmFyIOWxleW8gCA9ICfigJzigJzigJ3igJ08Yj4nwqAgKyDCoCfimLAnLmZvbnRjb2xvcihcXFwiI0ZGQTUwMFxcXCIpO1xcbiAgICAgICAgdmFyIGZvbGRuYW1lID0gdmFyaSArICdmb2xkJztcXG4gICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoZm9sZG5hbWUsICcxJyk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiDCoGZvbGQgPT09IMKgJzAnwqAgPyDCoMKg5oqY5Y+gwqAgOiDCoOWxleW8gCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZm9sZG5hbWUsIGZvbGQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoZm9sZG5hbWUsIMKgZm9sZMKgID09PSDCoCcxJ8KgID8gwqAnMCfCoCA6IMKgJzEnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycgKyAoZm9sZMKgID09PSDCoCcxJ8KgID8gwqAn5pS26LW3J8KgIDogwqAn5bGV5byAJyk7XFxuICAgICAgICAgICAgfSwgZm9sZG5hbWUsIGZvbGQpXFxuICAgICAgICB9KVxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IFxcXCIjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ1xcXCIgKyB2YXJpICsgXFxcIicsICdcXFwiICsgaSArIFxcXCInKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i5oiQ5Yqf77yBJzsnI25vSGlzdG9yeSNoaWtlcjovL2VtcHR5J1xcXCI7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKHZhcmksICcwJykgPT0gaSA/ICfigJzigJwnICsgdGFic1tpXSArICfigJ3igJ0nIDogdGFic1tpXSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBzZXRMaXN0czogZnVuY3Rpb24obGlzdHMsIGluZGV4LCBzaHNvcnQpIHtcXG4gICAgICAgIHNoc29ydCA9IHNoc29ydCA/IHNoc29ydCA6ICdzaHNvcnQnO1xcbiAgICAgICAgdmFyIGxpc3QgPSBsaXN0c1tpbmRleF07XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoc2hzb3J0KSA9PSAnMScgJiYgbGlzdHMubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gbGlzdHNbaW5kZXhdLnJldmVyc2UoKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0W2pdLnRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IGxpc3Rbal0udXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogbGlzdC5sZW5ndGggPiA0ID8gJ3RleHRfNScgOiAndGV4dF8yJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0W2pdLnVybC5yZXBsYWNlKC9AbGF6eVJ1bGVbXFxcXHNcXFxcU10rL2csICcnKSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBnZXRUYWJzOiBmdW5jdGlvbihwYXJzZSkge1xcbiAgICAgICAgdmFyIHRhYnMgPSBbXTtcXG4gICAgICAgIHZhciBhcnRzID0gcGRmYShodG1sLCBwYXJzZS7nur/ot68pO1xcbiAgICAgICAgdmFyIOe6v+i3r+WQjSA9IHBhcnNlLue6v+i3r+WQjeensDtcXG4gICAgICAgIHZhciDmm7/mjaLlh73mlbAgPSAnJztcXG4gICAgICAgIGlmIChwYXJzZS7nur/ot6/lkI3np7AuaW5jbHVkZXMoJ0BAJykpIHtcXG4gICAgICAgICAgICDnur/ot6/lkI0gPSBwYXJzZS7nur/ot6/lkI3np7Auc3BsaXQoJ0BAJylbMF07XFxuICAgICAgICAgICAg5pu/5o2i5Ye95pWwID0gcGFyc2Uu57q/6Lev5ZCN56ewLnNwbGl0KCdAQCcpWzFdO1xcbiAgICAgICAgfVxcbiAgICAgICAgZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgICAgICAgICAgdmFyIGxpbmVuYW1lID0gcGRmaChhcnRzW2ldLCDnur/ot6/lkI0pO1xcbiAgICAgICAgICAgIGlmICjmm7/mjaLlh73mlbAgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgbGluZW5hbWUgPSBldmFsKCdsaW5lbmFtZScgKyDmm7/mjaLlh73mlbApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0YWJzLnB1c2gobGluZW5hbWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcmV0dXJuIHRhYnM7XFxuICAgIH0sXFxuICAgIGdldExpc3RzOiBmdW5jdGlvbihwYXJzZSkge1xcbiAgICAgICAgdmFyIGxpc3RzID0gW107XFxuICAgICAgICB2YXIgY29udHMgPSBwZGZhKGh0bWwsIHBhcnNlLumAiembhik7XFxuICAgICAgICB2YXIg6YCJ6ZuG5ZCN56ewID0gcGFyc2Uu6YCJ6ZuG5ZCN56ewID8gcGFyc2Uu6YCJ6ZuG5ZCN56ewIDogJ2EmJlRleHQnO1xcbiAgICAgICAgdmFyIOmAiembhumTvuaOpSA9IHBhcnNlLumAiembhumTvuaOpSA/IHBhcnNlLumAiembhumTvuaOpSA6ICdhJiZocmVmJztcXG4gICAgICAgIHZhciDop6PmnpAgPSBwYXJzZS7op6PmnpAgPyBwYXJzZS7op6PmnpAgOiAnJztcXG4gICAgICAgIHZhciB0ZW1wID0gW107XFxuICAgICAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxuICAgICAgICAgICAgaWYgKHBhcnNlLumAiembhuWIl+ihqCAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgbGlzdHMucHVzaChwZGZhKGNvbnRzW2ldLCBwYXJzZS7pgInpm4bliJfooagpLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoeCwg6YCJ6ZuG5ZCN56ewKS5yZXBsYWNlKC/nrKx86ZuGfOivnXzmnJ8vZywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGQoeCwg6YCJ6ZuG6ZO+5o6lKSxcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoY29udHNbaV0sIOmAiembhumTvuaOpSk7XFxuICAgICAgICAgICAgICAgIGlmICgh6YCJ6ZuG6ZO+5o6lLmluY2x1ZGVzKCdocmVmJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHBkZmgoY29udHNbaV0sIOmAiembhumTvuaOpSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdGVtcC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGNvbnRzW2ldLCDpgInpm4blkI3np7ApLnNwbGl0KCctJylbMV0ucmVwbGFjZSgv56ysfOmbhnzor5185pyfL2csICcnKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGxldCDlgJLluo8gPSBwYXJzZS7lgJLluo8gPyBwYXJzZS7lgJLluo8gOiBmYWxzZTtcXG4gICAgICAgIHZhciByZXN1bHRzID0gbGlzdHMubGVuZ3RoID8gbGlzdHMgOiBbdGVtcF07XFxuICAgICAgICBpZiAo5YCS5bqPKSB7XFxuICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMubWFwKHggPT4geC5yZXZlcnNlKCkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XFxuICAgIH0sXFxuICAgIGdldFBsYXllcnM6IGZ1bmN0aW9uKHBhcnNlKSB7XFxuICAgICAgICB0aGlzLmNsb3NlKHBhcnNlLm1hcCh4ID0+IHgu57G75Z6LKSwgcGFyc2UubGVuZ3RoKTtcXG4gICAgICAgIHBhcnNlLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGFicyA9IFsn5Li757q/J107XFxuICAgICAgICAgICAgaWYgKGl0ZW0u57q/6LevICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICB0YWJzID0gdGhpcy5nZXRUYWJzKGl0ZW0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgbGlzdHMgPSB0aGlzLmdldExpc3RzKGl0ZW0pO1xcbiAgICAgICAgICAgIGlmIChsaXN0cy5zb21lKHggPT4geC5sZW5ndGggPiAwKSkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRhYnModGFicywgaXRlbS7nsbvlnossICdwbGF5bGlzdF8nICsgaSk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcihpdGVtLuexu+WeiyArICdmb2xkJywgJzEnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMaXN0cyhsaXN0cywgZ2V0TXlWYXIoaXRlbS7nsbvlnossICcwJyksICdwbGF5bGlzdF8nICsgaSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0sXFxufVxcblxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenkwJywge30pKS5ydWxlKTtcXG52YXIgcGxheWxpc3QgPSBbe1xcbiAgICDnsbvlnos6ICflvbHniYfkuIvovb0nLFxcbiAgICDnur/ot686ICdib2R5JiZyJyxcXG4gICAg6YCJ6ZuGOiAnYm9keSYmcjpub3QoOm1hdGNoZXMo572R55uY6ZO+5o6lKSknLFxcbiAgICDnur/ot6/lkI3np7A6ICdUZXh0QEAucmVwbGFjZShcXFwiXFxcIixcXFwiXFxcIiknLFxcbiAgICDpgInpm4bliJfooag6ICdib2R5JyxcXG4gICAg5o6S6ZmkOiAnJyxcXG4gICAgLy/pgInpm4blkI3np7A6ICdUZXh0JyxcXG4gICAgLy/pgInpm4bpk77mjqU6ICcnLFxcbiAgICAvL+WAkuW6jzp0cnVlLFxcbiAgICDop6PmnpA6IGxhenlcXG59LCB7XFxuICAgIOexu+WeizogJ01wNOS4i+i9vScsXFxuICAgIOmAiembhjogJ2JvZHkmJi5tb2R1bGUtcm93LWluZm8nLFxcbiAgICDpgInpm4blkI3np7A6ICdoNCYmVGV4dCcsXFxuICAgIOmAiembhumTvuaOpTogJy5tb2R1bGUtcm93LXRleHQmJmRhdGEtY2xpcGJvYXJkLXRleHQnLFxcbn1dXFxuXFxuRXJqaS5nZXRQbGF5ZXJzKHBsYXlsaXN0KTtcXG5zZXRSZXN1bHQoZClcIn1dIiwiaWNvbiI6Imh0dHBzOi8vOTFtancudmlwL3dwLWNvbnRlbnQvdGhlbWVzL21qdzkxL2ltYWdlcy9hdmF0YXItZGVmYXVsdC5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment