xiaomianao666

小程序:JavDB

Mar 30th, 2024
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@JavDB@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiSmF2REIiLCJhdXRob3IiOiLOseaooeadvyZSIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly9qYXZkYjM2NS5jb20vIyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyMDI0MDMyOCwiY29sX3R5cGUiOiJtb3ZpZV8zIiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJ2aWRlbyIsImNsYXNzX3VybCI6IuS6kTZvb29vbGUveHh4eHh4L3hvenhkd2ppNXJyaHJsNnYiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5hZGRMaXN0ZW5lcihcIm9uQ2xvc2VcIiwgJC50b1N0cmluZygoKSA9PiB7XG4gICAgbGV0IGtleXMgPSBsaXN0TXlWYXJLZXlzKCk7XG4gICAgZm9yIChsZXQgaXQgb2Yga2V5cykge1xuICAgICAgICBjbGVhck15VmFyKGl0KTtcbiAgICB9XG59KSk7XG5cbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge8KgwqDCoMKgwqDCoMKgXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO8KgwqDCoMKgwqBcbn1cbmNvbnN0IOS4i+S4gOmhtSA9IFwicGQoaHRtbCwgJ2E6bWF0Y2hlcyjkuIvkuIApJiZocmVmJylcIjtcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS95aScpKS5ydWxlKVxuXG52YXIg5a6a5L2N5L+h5oGvID0gW3tcbiAgICDlpKfnsbvlrprkvY06ICcubmF2YmFyLXN0YXJ0JiYubmF2YmFyLWxpbmsnLFxuICAgIOWinuWKoDogWyc8YSBocmVmPVwiJyArIE1ZX0hPTUUgKyAnL1wiPummlumhtTwvQT4nLCc8YSBocmVmPVwiL2Fib3V0XCI+5pS26JePPC9BPiddLFxuICAgIOWwj+exuzogJ2JvZHkmJmE6bm90KDptYXRjaGVzKPCflKUpKScsXG4gICAg6ZO+5o6l5aSE55CGOiAodSkgPT4ge1xuICAgICAgICBsZXQgdXJsID0gdS5yZXBsYWNlKC90eXBlKFxcL1xcZCspXFwuaHRtbC8sICdzaG93JDEtLS0tLS0tLS0tLS5odG1sJyk7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICB9XG59LHtcbiAgICDkuIDnuqflrprkvY06ICcubmF2YmFyLWl0ZW1baHJlZj0vbG9naW5dJ1xufSx7XG4gICAg5LiA57qn5a6a5L2NOiAnYm9keSYmLm5hdmJhci1kcm9wZG93bjpoYXMoaHIpJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhOm5vdCg6bWF0Y2hlcyjmiJHnmoTmuIXllq585pSv5LuY6KiY6YyEfOWAi+S6uuS/oeaBrykpJyxcbn0sIHtcbiAgICDkuIDnuqflrprkvY06ICdib2R5JiYudGFic3x8LmJ1dHRvbnMuaGFzLWFkZG9ucycsXG4gICAg5bCP57G7OiAnYm9keSYmYTpub3QoOm1hdGNoZXMo54Ot5pKtfDI1MHzlsIHpnaJ854yc5L2gfEZDMikpJyxcbn0sIHtcbiAgICDkuIDnuqflrprkvY06ICcjdGFncyYmZHQnLFxuICAgIOWwj+exuzogJ2JvZHkmJmE6bm90KDptYXRjaGVzKOabtOWkmikpJyxcbn0se1xuICAgIOS4gOe6p+WumuS9jTogJy5hY3Rvci1maWx0ZXImJi5maWx0ZXItc2xpZGVyOm1hdGNoZXMo6Lqr6auYKScsXG4gICAg5bCP57G7OiAnYm9keSYmLmZpbHRlci1zbGlkZXInLFxuICAgIOihpeWFhTogW1xuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE0NyZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTMwLTE0NycsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTQ3JTJDMTYwJmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNDctMTYwJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNjAlMkMxNjUmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE2MC0xNjUnLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE2NSUyQzE2OSZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTY1LTE2OScsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTY5JTJDMTc1JmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNjktMTc1Jyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNzUlMkMxODUmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE3NS0xODUnLFxuXSxcbiAgICDmoIfpopg6ICdUZXh0JyxcbiAgICDpk77mjqU6ICdpbnB1dCYmaWQuanM6aW5wdXQucmVwbGFjZShcImFmLWhlaWdodC1pbnB1dFwiLFwiL2FjdG9ycy9jZW5zb3JlZFwiKScsXG59LHtcbiAgICDkuIDnuqflrprkvY06ICcuYWN0b3ItZmlsdGVyJiYuZmlsdGVyLXNsaWRlcjptYXRjaGVzKOe9qeadryknLFxuICAgIOWwj+exuzogJ2JvZHkmJi5maWx0ZXItc2xpZGVyJyxcbiAgICDooaXlhYU6IFtcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTAlMkMxJmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+QScsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD0xJTJDMyZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkJDJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTMlMkM0JmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+RCcsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD00JTJDNiZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkVGJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTYlMkM4JmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+R0gnLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9OCUyQzEwJmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+SUonLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9MTAlMkMxNSZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkt+Jyxcbl0sXG4gICAg5qCH6aKYOiAnVGV4dCcsXG4gICAg6ZO+5o6lOiAnaW5wdXQmJmlkLmpzOmlucHV0LnJlcGxhY2UoXCJhZi1jdXAtaW5wdXRcIixcIi9hY3RvcnMvY2Vuc29yZWRcIiknLFxufV1cblxuTVlfVVJMID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdXG5sZXQgdHJ1ZV91cmwgPSBnZXRUcnVlbGluayhNWV9SVUxFLnVybCwgTVlfVVJMLCBwYWdlKTtcbmxvZyh0cnVlX3VybClcbnZhciBodG1sID0gZmV0Y2godHJ1ZV91cmwsIHtcbiAgICBoZWFkZXJzOiB7XG4gICAgICAgIGNvb2tpZTogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYl9jb29raWUudHh0JykgfHwgJycsXG4gICAgfSxcbiAgICByZWRpcmVjdDogZmFsc2Vcbn0pO1xuXG5pZiAoL3JlZGlyZWN0ZWQvLnRlc3QoaHRtbCkmJiEvXFwvZmMyLy50ZXN0KHRydWVfdXJsKSkge1xuICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYi9qYXZkYl9jb29raWUudHh0JywgJycpO1xuICAgIGh0bWwgPSBmZXRjaCh0cnVlX3VybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBjb29raWU6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGIvamF2ZGJfY29va2llLnR4dCcpIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgICByZWRpcmVjdDogZmFsc2VcbiAgICB9KVxufVxuXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXG59KTtcbmRjLuW8gOWQr+aKmOWPoChmYWxzZSlcbmRjLuW8gOWQr+aQnOe0oigpXG5kYy7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxuXG52YXIgcGFyc2VSdWxlID0ge1xuICAgIGxpc3Q6ICdib2R5JiYuaXRlbScsXG4gICAgdGl0bGU6ICcudmlkZW8tdGl0bGUmJlRleHQnLFxuICAgIGRlc2MxOiAnLnRhZyYmVGV4dCcsXG4gICAgZGVzYzogJy5tZXRhJiZUZXh0JyxcbiAgICBpbWc6ICdpbWd8fGEmJnNyY3x8ZGF0YS1vcmlnaW5hbCcsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ21vdmllXzInLFxuICAgIGltdDogZmFsc2UsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG52YXIgcGFyc2VSdWxlMSA9IHtcbiAgICBsaXN0OiAnYm9keSYmLmFjdG9yLWJveCcsIFxuICAgIHRpdGxlOiAnYSYmdGl0bGUnLFxuICAgIGRlc2M6ICcubWV0YSYmVGV4dCcsXG4gICAgaW1nOiAnaW1nfHxhJiZzcmN8fGRhdGEtb3JpZ2luYWwnLFxuICAgIHVybDogJ2EmJmhyZWYnLFxuICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgY29sX3R5cGU6ICdjYXJkX3BpY18zJyxcbiAgICBpbXQ6IGZhbHNlLFxuICAgIC8vYmFja2ltZzogdHJ1ZSxcbn1cblxudmFyIHBhcnNlUnVsZTIgPSB7XG4gICAgbGlzdDogJyNzZXJpZXMmJi5ib3gnLFxuICAgIHRpdGxlOiAnc3Ryb25nJiZUZXh0JyxcbiAgICBkZXNjOiAnc3BhbiYmVGV4dCcsXG4gICAgaW1nOiAnYSYmaHJlZi5qczppbnB1dC5yZXBsYWNlKGlucHV0LFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tb3ZpZS8zMC5zdmdcIiknLFxuICAgIHVybDogJ2EmJmhyZWYnLFxuICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgY29sX3R5cGU6ICdhdmF0YXInLFxuICAgIGltdDogZmFsc2UsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG52YXIgcGFyc2VSdWxlMyA9IHtcbiAgICBsaXN0OiAnI21ha2VycyYmLmJveCcsXG4gICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzMwLnN2Z1wiKScsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGU0ID0ge1xuICAgIGxpc3Q6ICcjZGlyZWN0b3JzJiYuYm94JyxcbiAgICB0aXRsZTogJ3N0cm9uZyYmVGV4dCcsXG4gICAgZGVzYzogJ3NwYW4mJlRleHQnLFxuICAgIGltZzogJ2EmJmhyZWYuanM6aW5wdXQucmVwbGFjZShpbnB1dCxcImh0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy9YYTJoRC5wbmdcIiknLFxuICAgIHVybDogJ2EmJmhyZWYnLFxuICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgY29sX3R5cGU6ICdhdmF0YXInLFxuICAgIGltdDogZmFsc2UsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG52YXIgcGFyc2VSdWxlNSA9IHtcbiAgICBsaXN0OiAnI2NvZGVzJiYuYm94JyxcbiAgICB0aXRsZTogJ3N0cm9uZyYmVGV4dCcsXG4gICAgZGVzYzogJ3NwYW4mJlRleHQnLFxuICAgIGltZzogJ2EmJmhyZWYuanM6aW5wdXQucmVwbGFjZShpbnB1dCxcImh0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy9PVE00ay5wbmdcIiknLFxuICAgIHVybDogJ2EmJmhyZWYnLFxuICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgY29sX3R5cGU6ICdhdmF0YXInLFxuICAgIGltdDogZmFsc2UsXG4gICAgLy9iYWNraW1nOiB0cnVlLFxufVxuXG5pZiAodHJ1ZV91cmwuaW5jbHVkZXMoJy9hYm91dCcpKXtcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2Uv5pS26JePJykpLnJ1bGUpXG59XG5cbmlmICh0cnVlX3VybC5pbmNsdWRlcygnL2xvZ291dCcpKXtcbndyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYl9jb29raWUudHh0JywgJycpO1xuICAgIHRvYXN0KCfotKblj7flt7Lnmbvlh7onKTtcbn1cblxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCcvbG9naW4nKSl7XG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL+eZu+W9lScpKS5ydWxlKVxufVxuXG5DcmVhdGUucnVsZUxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlKTtcbkNyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTEpO1xuQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlMik7XG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUzKTtcbmlmICh0cnVlX3VybC5pbmNsdWRlcygnY29sbGVjdGlvbl9kaXJlY3RvcnMnKSl7XG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGU0KTt9XG5pZiAodHJ1ZV91cmwuaW5jbHVkZXMoJ2NvbGxlY3Rpb25fY29kZXMnKSl7XG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGU1KTt9XG5hdXRvUGFnZSgpO1xuXG5zZXRSZXN1bHQoZCkiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjKioiLCJncm91cCI6IuKRoFIiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xubGV0IEhPTUUgPSBcImhpa2VyOi8vZW1wdHkjI1wiICsgTVlfUlVMRS51cmwuc3BsaXQoXCIjI1wiKVsxXTtcbmxldCBrZXkgPSBNWV9VUkwuc3BsaXQoXCIjI1wiKVsxXTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL5pCc57SiXCIgKyBrZXksXG4gICAgdXJsOiBIT01FICsgXCIvc2VhcmNoP2Y9YWxsJnBhZ2U9ZnlwYWdlJnE9XCIgKyBrZXkgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFwieWpcIiknLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIHBhZ2VUaXRsZToga2V5LFxuICAgICAgICBrZXk6IGtleVxuICAgIH1cbn0pO1xuXG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6Ii8vQExveURnSWvlpKfkvazlhpnnmoToh6rliqjmm7TmlrDvvIzlpI3liLbpu4/otLTlsLHlrozkuovvvIzmhJ/osKLlpKfkvaznmoTliIbkuqtcblxudmFyIOabtOaWsOmXtOmalCA9IDEgIDsvLyjlpKkpXG5sZXQgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLnRvU3RyaW5nKClcbmxldCDml7bpl7Tpl7TpmpQgPSB0aW1lLWdldEl0ZW0oJ3RpbWUnLCBuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmluZygpKVxuXG5sZXQg6Ze06ZqU5aSp5pWwID0gTWF0aC5mbG9vcijml7bpl7Tpl7TpmpQgLyAoMjQgKiA2MCAqIDYwICogMTAwMCkpO1xubGV0IOmXtOmalOaXtuaVsCA9IE1hdGguZmxvb3Io5pe26Ze06Ze06ZqUIC8gKDYwICogNjAgKiAxMDAwKSk7XG5sZXQg6Ze06ZqU5YiG5pWwID0gTWF0aC5mbG9vcijml7bpl7Tpl7TpmpQgLyAoIDYwICogMTAwMCkpO1xubGV0IOmXtOmalOenkuaVsCA9IE1hdGguZmxvb3Io5pe26Ze06Ze06ZqUIC8gMTAwMCk7XG4gICAgXG5zZXRJdGVtKCd0aW1lJywgdGltZSk7XG5cbmlmICjpl7TpmpTlpKnmlbA+PeabtOaWsOmXtOmalCApIHtcbiAgICAgICAgICAgIGxldCBIT01FID0gTVlfUlVMRS51cmwubWF0Y2goL2h0dHBzPzpcXC9cXC9bXiMvPyZdKy8pWzBdO1xuICAgICAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChIT01FICsgJy9hYm91dCcse3RpbWVvdXQ6MjIzMH0pO1xuICAgICAgICAgICAgdmFyIHVybCA9ICdodHRwczovLycgKyBwZGZoKGh0bWwsJy5zdWItaGVhZGVyJiYuY29udGVudCYmYVtocmVmfj1jb21dJiZUZXh0JylcblxuaWYgKEhPTUUgIT09IHVybCkge1xuICAgIGNvbmZpcm0oe1xuICAgICAgICB0aXRsZTogXCLmm7TmlrDmj5DnpLpcIixcbiAgICAgICAgY29udGVudDogXCLmnInmnIDmlrDlhY3nv7vlnLDlnYAs5piv5ZCm5pu05pawXCIsXG4gICAgICAgIGNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgIHNob3dMb2FkaW5nKFwi5q2j5Zyo6I635Y+W5pyA5paw5Z+f5ZCNXCIpO1xuICAgICAgICAgICAgdmFyIGhvbWUgPSBNWV9SVUxFLnVybC5tYXRjaCgvaHR0cHM/OlxcL1xcL1teIy8/Jl0rLylbMF07XG4gICAgICAgICAgICB2YXIgaHRtID0gZmV0Y2goaG9tZSArICcvYWJvdXQnLHt0aW1lb3V0OjIyMzB9KTtcbiAgICAgICAgICAgIHZhciBob3N0ID0gJ2h0dHBzOi8vJyArIHBkZmgoaHRtLCcuc3ViLWhlYWRlciYmLmNvbnRlbnQmJmFbaHJlZn49Y29tXSYmVGV4dCcpXG4gICAgICAgICAgICBoaWRlTG9hZGluZygpO1xuICAgICAgICAgICAgaWYgKCFob3N0KSByZXR1cm4gXCJ0b2FzdDovL+iOt+WPluWksei0pVwiO1xuICAgICAgICAgICAgdG9hc3QoaG9zdCk7XG4gICAgICAgICAgICAvKGh0dHBzPzpcXC9cXC9bXiMvPyZdKykvLnRlc3QoTVlfUlVMRS51cmwpO1xuICAgICAgICAgICAgTVlfUlVMRS51cmwgPSBNWV9SVUxFLnVybC5yZXBsYWNlKFJlZ0V4cC4kMSwgaG9zdCk7XG4gICAgICAgICAgICByZXR1cm4gXCJydWxlOi8vXCIgKyBiYXNlNjRFbmNvZGUoXCLmtbfpmJTop4bnlYzvv6Vob21lX3J1bGXvv6VcIiArIEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUpKTsgICAgICAgICAgICBcbiAgICAgICAgfSxcbiAgICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL/CfmIdcIjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgfVxufVxuXG5pZiAocmVxdWVzdCgnaGlrZXI6Ly9ob21lQOejgeWKm+WQmy7nroAnKSA9PSAnbnVsbCcpIHtcbiAgICBjb25maXJtKHtcbiAgICAgICAgdGl0bGU6ICfkvp3otZbmo4DmtYsnLFxuICAgICAgICBjb250ZW50OiAn5qOA5rWL5Yiw57y65bCR56OB5Yqb5ZCbLueugFxcbuivt+WvvOWFpSEnLFxuICAgICAgICBjb25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VQYXN0ZShcIuS6kTZvb29vbGUveHh4eHh4L2p1bWdqdXVjenhidXZzYWlcIik7XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5ob3N0ID0gTVlfUlVMRS51cmwubWF0Y2goL2h0dHBzPzpcXC9cXC8oW14jLz8mXSspLylbMV07XG5cbnB1dE15VmFyKCd5b25naml1JywnaHR0cHM6Ly9qYXZkYi5jb20nKVxucmVnaXN0ZXJETlMoe1xuICAgIFwiamF2ZGIuY29tXCI6IFwidWRwOi8vOC44LjguOFwiLFxuICAgICBob3N0OiBcInVkcDovLzguOC44LjhcIlxufSk7IiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoOS4gOe6p+WIhuexu+WIl+ihqFwiLFwicGF0aFwiOlwieWlcIixcInJ1bGVcIjpcImpzOlxcbi8qXFxuYnkgzrEoemV0YWxwaGEpXFxu5LiA57qn5bCB6KOFXFxu5Yqo5oCB5YiG57G7IOWIl+ihqOWIm+W7uiDoh6rliqjkuIvkuIDpobVcXG52ZXIgMjAyMzEwMTcgMS4wXFxuKi9cXG5cXG4vL+maj+acuuminOiJslxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XFxufVxcblxcbi8v5Yqo5oCB5YiG57G7XFxuZnVuY3Rpb24gZHluYW1pY0NsYXNzKG9wdGlvbnMpIHtcXG4gICAgY29uc3Qgb2JqID0ge1xcbiAgICAgICAgLy/pu5jorqTlgLxcXG4gICAgICAgIGxheW91dDogXFxcInVuZGVmaW5lZFxcXCIsXFxuICAgICAgICBodG1sOiBcXFwiZW1wdHlcXFwiLFxcbiAgICAgICAgcGFnZTogMCxcXG4gICAgICAgIOWIhuexu+minOiJsjogXFxcIiNGQTcyOThcXFwiLFxcbiAgICAgICAg5oqY5Y+gOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKdcXFwiLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAg5bGV5byAOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKhcXFwiLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAgb3BlbjogdHJ1ZSxcXG4gICAgICAgIHN0YXRlOiBNWV9SVUxFLnVybCxcXG4gICAgICAgIHNlYXJjaDogZmFsc2UsXFxuICAgICAgICBjbGVhcnM6IFtdLFxcbiAgICAgICAgY2xlYXJhbGw6IFtcXFwieWlfZmlyc3RwYWdlXFxcIl0sXFxuICAgICAgICBkZWJ1ZzogZmFsc2UsXFxuXFxuICAgICAgICDpooTorr4ocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHBhcmFtID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcmFtKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAvLyDlr7nmr4/kuKrlsZ7mgKflkI3miafooYzmk43kvZxcXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbVtwcm9wZXJ0eV07IC8vIOiOt+WPluWxnuaAp+WAvFxcbiAgICAgICAgICAgICAgICAvLyDlnKjov5nph4zmiafooYzmgqjnmoTmk43kvZxcXG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BlcnR5ICsgXFxcIjpcXFwiICsgdmFsdWUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgZXZhbEpTUnVsZShpdGVtLFxcbiAgICAgICAgICAgIGpzUnVsZSkge1xcbiAgICAgICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpO1xcbiAgICAgICAgICAgIC8vbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IGl0ZW07XFxuICAgICAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvKipcXG4gICAgICAgICAgICAgICAgICog6L+Y5Y6f5oiQICQudG9TdHJpbmcoLi4uKSDnmoTmnIDnu4jnu5PmnpzvvIzovr7liLDmnIDnu4jlpITnkIbmlrnlvI/ot5/kuIrpnaLnmoQgaWYg5LiA6Ie055qE55uu55qEXFxuICAgICAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgXFxcIigoKSA9PiB7XFxcIiArIHJ1bGUgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFRpdGxlKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdGl0bGVSdWxlID0gY2F0ZWdvcnkgfHwgXFxcImEmJlRleHRcXFwiO1xcbiAgICAgICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdGl0bGVSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChzcmMsIHRpdGxlUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB0aXRsZSB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LumTvuaOpSB8fCBcXFwiYSYmaHJlZlxcXCI7XFxuICAgICAgICAgICAgaWYgKHVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHBkKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2F0ZWdvcnku6ZO+5o6l5aSE55CGID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gY2F0ZWdvcnku6ZO+5o6l5aSE55CGKHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNOdWxsKHBhcmFtKSB7XFxuICAgICAgICAgICAgaWYgKHBhcmFtID09IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc0Jvb2xlYW4odmFyaWFibGUpIHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhcmlhYmxlICE9PSBcXFwiYm9vbGVhblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlkK/mipjlj6Dor7fkvKDlhaXluIPlsJTlgLxcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAg5riF6ZmkKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChsaXN0LmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIua4hemZpOaKpemUmTror7fkvKDliJfooahcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5jbGVhcnMgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWFqOa4hShsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgbGlzdCA9IGMuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgICAgIHRoaXMuY2xlYXJhbGwgPSBsaXN0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOa6kOeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeVjOmdoihpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg6aG156CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5wYWdlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg54q25oCBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aQnOe0oihpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOW8gOWQr+aKmOWPoChpbnB1dCkge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmlzQm9vbGVhbihpbnB1dCk7XFxuICAgICAgICAgICAgdGhpcy5vcGVuID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAgc2V0VGl0bGUoaywgaSwgdCkge1xcbiAgICAgICAgICAgIHJldHVybiBrID09IGkgPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHQuZm9udGNvbG9yKHRoaXMu5YiG57G76aKc6ImyKSA6IHQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgYWN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIHJldHVybiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4hemZpOeKtuaAgVxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChvYmopID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihvYmouc3RhdGUpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwiaGVhZC5jYXRlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICB9LCBvYmopLFxcbiAgICAgICAgICAgIH0sIF07XFxuICAgICAgICB9LFxcbiAgICAgICAgY2hlY2tQYXJhbSgpIHtcXG4gICAgICAgICAgICB2YXIgb2JqID0ge307XFxuICAgICAgICAgICAgaWYgKHRoaXMucGFnZSA9PSAwICYmIHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl6aG156CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYWdlID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gdGhpcy5wYWdlO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHBhZ2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMuaHRtbCA9PSBcXFwiZW1wdHlcXFwiICYmIHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl5rqQ56CBXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gdGhpcy5odG1sO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IGh0bWw7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09IFxcXCJ1bmRlZmluZWRcXFwiICYmIHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWl55WM6Z2iXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkID09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gdGhpcy5sYXlvdXQ7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIueVjOmdolxcXCJdID0gZDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOWIm+W7uuWKqOaAgeWIhuexuyhydWxlT2JqKSB7XFxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gW107XFxuICAgICAgICAgICAgbGV0IGNhdGVzID0gW107XFxuICAgICAgICAgICAgaWYgKHJ1bGVPYmogPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHJ1bGVPYmogPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/lvIDlp4tcXG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMuY2hlY2tQYXJhbSgpO1xcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJhbS7pobXnoIE7XFxuICAgICAgICAgICAgY29uc3QgaHRtbCA9IHBhcmFtLua6kOeggTtcXG4gICAgICAgICAgICBjb25zdCBkID0gcGFyYW0u55WM6Z2iO1xcbiAgICAgICAgICAgIGNvbnN0IOeKtuaAgSA9IHRoaXMuc3RhdGU7XFxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2g7XFxuICAgICAgICAgICAgY29uc3QgZW1wdHkgPSBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgY29uc3Qg5oqY5Y+g54q25oCBID0gdGhpcy5vcGVuO1xcbiAgICAgICAgICAgIHZhciDlsZXlvIAgPSB0aGlzLuWxleW8gDtcXG4gICAgICAgICAgICB2YXIg5oqY5Y+gID0gdGhpcy7mipjlj6A7XFxuICAgICAgICAgICAgdmFyIOWFqOa4hSA9IHRoaXMuY2xlYXJhbGw7XFxuICAgICAgICAgICAgdmFyIOa4hemZpCA9IHRoaXMuY2xlYXJzO1xcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP57uT5p2fXFxuICAgICAgICAgICAgbGV0IGluaXRfY2F0ZSA9IG5ldyBBcnJheSgyMCkuZmlsbChcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIGNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoXFxuICAgICAgICAgICAgICAgIGdldE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCInaGlrZXI6Ly9zZWFyY2g/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImcz0nK2lucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhbPplK7or41cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwia2V5d29yZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgcnVsZU9iai5mb3JFYWNoKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgICAgIC8vbG9nKHgpXFxuICAgICAgICAgICAgICAgIGlmICh4Lmpzb24gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICB4Lmpzb24ubWFwKGsgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChKU09OLnN0cmluZ2lmeShrKS5yZXBsYWNlKC9eXFxcXFt8XFxcXF0kL2csICcnKSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAvL2NhdGVnb3JpZXMucHVzaCh4Lmpzb24pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBwZGZhKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5aSn57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtwZGZhKGh0bWwsIHgu5aSn57G75a6a5L2NKS5qb2luKCdcXFxcbicpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgdmFyIOS4gOe6pyA9IGxpc3QubWFwKChzKSA9PiB7XFxuICAgICAgICAgIHZhciBzbGlzdCA9IFtdO1xcbiAgICAgICAgICBpZiAoIShcXFwi5bCP57G7XFxcIiBpbiB4KSkge1xcbiAgICAgICAgICAgIHgu5bCP57G7ID0gXFxcImJvZHkmJmE6bm90KDptYXRjaGVzKOmmlumhtSkpOm5vdChhOm5vdChbaHJlZl0pKVxcXCI7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgaWYgKHgu5bCP57G7LnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgIHNsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBzbGlzdCA9IHBkZmEocywgeC7lsI/nsbspO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICBpZiAoKCflop7liqAnIGluIHgpKSB7XFxuICAgICAgICAgICAgaWYgKHgu5aKe5YqgLmNvbnN0cnVjdG9yID09IFN0cmluZykge1xcbiAgICAgICAgICAgICAgeC7lop7liqAgPSBldmFsKHgu5aKe5YqgKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2xpc3QgPSB4LuWinuWKoC5jb25jYXQoc2xpc3QpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGlmICgoJ+ihpeWFhScgaW4geCkpIHtcXG4gICAgICAgICAgICBpZiAoeC7ooaXlhYUuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICB4LuihpeWFhSA9IGV2YWwoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzbGlzdCA9IHNsaXN0LmNvbmNhdCh4LuihpeWFhSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgIHZhciDlrprkvY0gPSBzbGlzdC5tYXAoKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKGl0ZW0sIHgu5qCH6aKYKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgeCk7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHtcXG4gICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwgdXJsOiB1cmxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmICgoJ2V4dCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgIG9ialsnZXh0J10gPSB4LmV4dDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgICByZXR1cm4g5a6a5L2NO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PT0gXFxcIjFcXFwiID8g5oqY5Y+gIDog5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpdGxlLCBmb2xkLCB1LCBhbGwsIGV4cHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgW+WxleW8gCwg5oqY5Y+gXSA9IGV4cHM7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gZmluZEl0ZW1zQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IHN0b3JhZ2UwLmdldE15VmFyKCdjYXRlX2J1dHRvbicsIFtdKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbJ2NvbF90eXBlJ10gPSB4Wydjb2xfdHlwZSddID8geFsnY29sX3R5cGUnXSA6IHhbJ3R5cGUnXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHRpdGxlICsgJ2NhdGVfbGluZScsIGN4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0odGl0bGUgKyAnY2F0ZV9leHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT0gMSA/IOWxleW8gCA6IOaKmOWPoCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWFqOa4hSwgW+WxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaKmOWPoFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArICdjYXRlX2V4cCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3J5KVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAvKmlmICjlsI/nsbvlrprkvY0uaW5jbHVkZXMoXFxcIjtcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yl9jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBKU09OLnBhcnNlKGBbJHtjYXRlZ29yeX1dYCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhzdWJfY2F0ZWdvcmllcylcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lpKfnsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIF/lpKfnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdGVtLnRpdGxlO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXdSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSAnJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyczog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdXJsID0gcGQoaXRlbSwgX+Wkp+exu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAo5aSn57G75aSE55CGKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0g5LiA57qn5YiG57G75aSE55CGKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9saW5lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wwj+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmFwb3MgPSBmYWxzZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoaXRlbS5pbmNsdWRlcygndHlwZT1cXFwiQGV4dHJhXFxcIicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFwb3MgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKCfpmYTliqDlrprkvY0nKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhcG9zKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwgXFxcImEmJnN0YXRlXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwgXFxcImEmJnZhbHVlXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgdGl0bGUgPSBwZGZoKGl0ZW0sIOWIhuexu+agh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBpdGVtLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzd2l0Y2ggKHRydWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSDliIbnsbvpk77mjqUuaW5jbHVkZXMoXFxcIkBAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSDliIbnsbvpk77mjqUuaW5jbHVkZXMoXFxcIkBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBcXFwiKVswXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBcXFwiKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganNvbiA9IHBkKGl0ZW0sIOWIhuexu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdmFyIGpzb2495YiG57G76ZO+5o6lLmluY2x1ZGVzKCdAQEAnKT97XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAQCcpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb2495YiG57G76ZO+5o6lLmluY2x1ZGVzKCdAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU65YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zZXRUaXRsZShrZXkudG9TdHJpbmcoKSwgY2F0ZV90ZW1wW2luZGV4XSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5XFxcIiArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMVxcXCIgfHwg5oqY5Y+g54q25oCBID09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGNhdGVzKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT09IFxcXCIwXFxcIikge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjYXRlcylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXRQcmVSZXN1bHQgIT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBkLmNvbmNhdChpdGVtcyk7XFxuICAgICAgICAgICAgICAgIC8v5riF56m657un5om/5pWw57uEXFxuICAgICAgICAgICAgICAgIGQubGVuZ3RoID0gMDtcXG4gICAgICAgICAgICAgICAgc2V0UHJlUmVzdWx0KGl0ZW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgIH07XFxuICAgIG9iai7pooTorr4ob3B0aW9ucyk7XFxuICAgIHJldHVybiBvYmo7XFxufVxcblxcbnZhciDnirbmgIEgPVxcbiAgICB0eXBlb2Yg54q25oCB5qCH6K6wICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOeKtuaAgeagh+iusCAhPSBcXFwiXFxcIiA/IOeKtuaAgeagh+iusCA6IE1ZX1JVTEUudXJsO1xcblxcbmxldCBkdF9kZWJ1ZyA9IGZhbHNlO1xcblxcbmFkZExpc3RlbmVyKFxcbiAgICBcXFwib25DbG9zZVxcXCIsXFxuICAgICQudG9TdHJpbmcoKCkgPT4ge30pXFxuKTtcXG5cXG52YXIgQ3JlYXRlID0ge1xcbiAgICBuZXh0UGFnZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKCduOicrbmV4dClcXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4i+S4gOmhtemTvuaOpeS4uuepuicpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBsb2coXFxcIumUmeivr+S/oeaBrzpcXFwiICsgZS5tZXNzYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgobmV4dCA9PSBcXFwiXFxcIiB8fCBuZXh0ID09IHVuZGVmaW5lZCkgJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbmV4dCA9IHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL3Jlc3VsdD1mYWxzZTtcXG4gICAgICAgICAgICBuZXh0ID0gZ2V0TXlWYXIo54q25oCBKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCdsJyt0cnVlX3VybClcXG4gICAgICAgIC8vbG9nKCduJytuZXh0KVxcbiAgICAgICAgaWYgKHBhZ2UgIT0gMSkge1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0ICYmICFyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAgICAgLy9wdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9LFxcbiAgICBnZXRCYWNrSW1hZ2U6IGZ1bmN0aW9uKGltZ3VybCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGltZ3VybDtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgcmVzdWx0ID0gL3VybCg/OlxcXFxzKyk/XFxcXCgoLio/KVxcXFwpL2dcXG4gICAgICAgICAgICAgICAgLmV4ZWMoaW1ndXJsKVsxXVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCd8XFxcInwmcXVvdDspL2dtLCBcXFwiXFxcIik7XFxuICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9LFxcbiAgICBodHRwSGFuZGxlOiBmdW5jdGlvbihpbnB1dCkge1xcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiLy9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6XFxcIiArIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gTVlfSE9NRSArIGlucHV0O1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBpbWdIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBpbWcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLmltZy5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaW1nID0gZXZhbChydWxlLmltZyk7XFxuICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuYmFja2ltZykge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuZ2V0QmFja0ltYWdlKGltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGlmICghaW1nLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBwZChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpbWcgKyBydWxlLnJlZjtcXG4gICAgfSxcXG4gICAgdXJsSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaHJlZiA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUudXJsLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGhyZWYgPSBwZChpdGVtLCBydWxlLnVybCk7XFxuICAgICAgICB9XFxuICAgICAgICBocmVmID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICAgIHJldHVybiBocmVmO1xcbiAgICB9LFxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihpdGVtLCBpbnB1dCkge1xcbiAgICAgICAgbGV0IG91dHB1dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIG91dHB1dCA9IGV2YWwoaW5wdXQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBwZGZoKGl0ZW0sIGlucHV0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgYWRkTGlzdGVuZXIoXFxuICAgICAgICAgICAgXFxcIm9uUmVmcmVzaFxcXCIsXFxuICAgICAgICAgICAgJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJ5aWxpc3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcCA9IHN0b3JhZ2UwLmdldE15VmFyKCdzcGFnZScsICcnKTtcXG4gICAgICAgICAgICAgICAgLy9wdXRNeVZhcih1LCBwKTtcXG4gICAgICAgICAgICB9LCDnirbmgIEpXFxuICAgICAgICApO1xcbiAgICB9LFxcbiAgICBnZXRCb29sZWFuVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gQm9vbGVhbih2YWx1ZSkgOiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB0cnVlKTtcXG4gICAgfSxcXG4gICAgZGVidWdsb2c6IGZ1bmN0aW9uKGksIGl0ZW0sIHJ1bGUsIG9iaikge1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivleW8gOWniy0tLS0tLS0tLS0nKTtcXG4gICAgICAgIGlmIChpdGVtLmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZygnaXRlbeWGheWuuTpcXFxcclxcXFxuJyArIGl0ZW0gKyAnXFxcXHJcXFxcbicgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0dGl0bGXlrprkvY06ICAke3J1bGUudGl0bGV9ICAtLS0+IOe7k+aenDogICR7b2JqLnRpdGxlfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0ZGVzY+WumuS9jTogICR7cnVsZS5kZXNjfSAgLS0tPiDnu5Pmnpw6ICAke29iai5kZXNjfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0aW1n5a6a5L2NOiAgJHtydWxlLmltZ30gIC0tLT4g57uT5p6cOiAgJHtvYmouaW1nfWAgK1xcbiAgICAgICAgICAgIChydWxlLmNvbnRlbnQgIT0gdW5kZWZpbmVkID8gYFxcXFxuXFxcXHRjb250ZW505a6a5L2NOiAgJHtydWxlLmNvbnRlbnR9ICAtLS0+IOe7k+aenDogICR7b2JqLmNvbnRlbnR9YCA6ICcnKSArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR1cmzlrprkvY06ICAke3J1bGUudXJsfSAgLS0tPiDnu5Pmnpw6ICAke29iai51cmx9YFxcbiAgICAgICAgKTtcXG4gICAgICAgIGxvZygnLS0tLS0tLS0tLScgKyAoaSArIDEpICsgJzrosIPor5Xnu5PmnZ8tLS0tLS0tLS0tJyk7XFxuICAgIH0sXFxuICAgIGpzb25MaXN0OiBmdW5jdGlvbihhcnIsIGpzb24sIHJ1bGUpIHtcXG4gICAgICAgIGlmIChqc29uLmNvbnN0cnVjdG9yICE9IE9iamVjdCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChqc29uW3J1bGUubGlzdF0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5peg5YaF5a65PC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7fSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAganNvbltydWxlLmxpc3RdLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBldmFsKHJ1bGUudGl0bGUpO1xcbiAgICAgICAgICAgIHZhciBkZXNjID0gZXZhbChydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gZXZhbChydWxlLmNvbnRlbnQpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBldmFsKHJ1bGUuaW1nKSArIHJ1bGUucmVmO1xcbiAgICAgICAgICAgIHZhciBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIiA6IGhyZWY7XFxuICAgICAgICAgICAgdmFyIGxhenkgPSBydWxlLmxhenkgPyBydWxlLmxhenkgOiBcXFwiXFxcIjtcXG5cXG4gICAgICAgICAgICB2YXIgZGQgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IGhyZWYgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgcnVsZUxpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsXFxuICAgICAgICAgICAgcnVsZS5saXN0KTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsXFxuICAgICAgICAgICAgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpO1xcbiAgICAgICAgICAgIHZhciBkZXNjMSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MxKTtcXG4gICAgICAgICAgICB2YXIgZGVzYzIgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjMik7XFxuICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjMSArIFxcXCJcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXCIgKyBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlalxcXCIpJyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IHVybCArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBMaXN0OiBmdW5jdGlvbihhcnIsIGh0bWwsIHJ1bGUsIHBhcmFtKSB7XFxuICAgICAgICBwYXJhbSA9IHBhcmFtID8gcGFyYW0gOiB7fTtcXG4gICAgICAgIHZhciBhdXRvID0gcGFyYW0uYXV0byA/IHBhcmFtLmF1dG8gOiBmYWxzZTtcXG4gICAgICAgIHZhciBzaG93ID0gcGFyYW0uc2hvdyA/IHBhcmFtLnNob3cgOiBmYWxzZTtcXG4gICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAvL3RoaXMuc3BhZ2Uuc2V0KHRydWVfdXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZywgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZS5saXN0KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2codGhpcy5uZXh0UGFnZSgpKVxcbiAgICAgICAgaWYgKChzdG9yYWdlMC5nZXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKSA9PSAndCcgJiYgbGlzdC5sZW5ndGggPiAwKSB8fCBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZW51bVxcXCIpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbGluZVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBcXFwibGFzdGlkX1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgY2xzID0gXFxcImxhc3RtYXJrXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJ5alxcXCIpJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogY2xzLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSAmJiBzaG93KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzbWFsbD7liqDovb3kuK0uLi48L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VudW1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKFxcXCJwYWdlbnVtXFxcIiwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5Yiw5bqV5LqGPC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogXFxcImxhc3RcXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbi8qXFxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSovXFxuICAgICAgICBpZiAodGhpcy5uZXh0UGFnZSgpKSB7XFxuICAgICAgICAgICAgLy9sb2coJ3QnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9sb2coJ2YnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ2YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChhdXRvKSB7XFxuICAgICAgICAgICAgLy9jcmVhdGVOZXh0UGFnZSgpO1xcbiAgICAgICAgICAgIGF1dG9QYWdlKCk7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG52YXIgZXh0TWV0aG9kID0ge1xcbiAgICBUb1BhcmFtczogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIganNvbiA9IGFyZ3VtZW50c1swXTtcXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uKVxcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4ga2V5ICsgXFxcIj1cXFwiICsganNvbltrZXldKVxcbiAgICAgICAgICAgIC5qb2luKFxcXCImXFxcIik7XFxuICAgIH0sXFxuICAgIHVybFBhcnNlOiBmdW5jdGlvbih1KSB7XFxuICAgICAgICB2YXIgZGljdCA9IHt9O1xcbiAgICAgICAgZGljdC5Tb3VyY2UgPSB1O1xcbiAgICAgICAgbGV0IHBhcmFtcyA9ICh1cmwpID0+IHtcXG4gICAgICAgICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcXG4gICAgICAgICAgICBsZXQgcmVnID0gLyhbXj89Jl0rKT0oW14/PSZdKykvZztcXG4gICAgICAgICAgICB1cmwucmVwbGFjZShyZWcsIGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1thcmd1bWVudHNbMV1dID0gYXJndW1lbnRzWzJdO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgamF2YVVybCA9IEphdmFJbXBvcnRlcihqYXZhLm5ldC5VUkwpO1xcbiAgICAgICAgd2l0aChqYXZhVXJsKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwodSk7XFxuICAgICAgICAgICAgZGljdC5Qcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdCA9IHVybC5nZXRIb3N0KCk7XFxuICAgICAgICAgICAgZGljdC5Qb3J0ID0gdXJsLmdldFBvcnQoKTtcXG4gICAgICAgICAgICBkaWN0LkZpbGUgPSB1cmwuZ2V0RmlsZSgpO1xcbiAgICAgICAgICAgIGRpY3QuUGF0aCA9IHVybC5nZXRQYXRoKCk7XFxuICAgICAgICAgICAgZGljdC5SZWYgPSB1cmwuZ2V0UmVmKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0cyA9IGAke2RpY3QuUHJvdG9jb2x9Oi8vJHt1cmwuZ2V0SG9zdCgpfWA7XFxuICAgICAgICB9XFxuICAgICAgICBkaWN0LlBhcmFtcyA9IHBhcmFtcyh1KTtcXG4gICAgICAgIHJldHVybiBkaWN0O1xcbiAgICB9LFxcbiAgICBpc0VxdWFsOiBmdW5jdGlvbih4LCB5KSB7XFxuICAgICAgICBjb25zdCBvayA9IE9iamVjdC5rZXlzLFxcbiAgICAgICAgICAgIHR4ID0gdHlwZW9mIHgsXFxuICAgICAgICAgICAgdHkgPSB0eXBlb2YgeTtcXG4gICAgICAgIHJldHVybiB4ICYmIHkgJiYgdHggPT09IFxcXCJvYmplY3RcXFwiICYmIHR4ID09PSB0eSA/XFxuICAgICAgICAgICAgb2soeCkubGVuZ3RoID09PSBvayh5KS5sZW5ndGggJiZcXG4gICAgICAgICAgICBvayh4KS5ldmVyeSgoa2V5KSA9PiB0aGlzLmlzRXF1YWwoeFtrZXldLCB5W2tleV0pKSA6IHggPT09IHk7XFxuICAgIH0sXFxuICAgIGZpbmREaWZmZXJlbnRJbmRleDogZnVuY3Rpb24oc3RyMSwgc3RyMikge1xcbiAgICAgICAgY29uc3QgZGlmZkNoYXJzID0gW107XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cjIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xcbiAgICAgICAgICAgICAgICBkaWZmQ2hhcnMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcXG4gICAgICAgICAgICAgICAgICAgIHMxOiBzdHIxW2ldLFxcbiAgICAgICAgICAgICAgICAgICAgczI6IHN0cjJbaV0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmQ2hhcnM7XFxuICAgIH0sXFxuICAgIHJlcGxhY2VDaGFyQXQ6IGZ1bmN0aW9uKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50KSB7XFxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0ci5sZW5ndGgpIHtcXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICBjb25zdCBhcnIgPSBzdHIuc3BsaXQoXFxcIlxcXCIpO1xcbiAgICAgICAgYXJyW2luZGV4XSA9IHJlcGxhY2VtZW50O1xcbiAgICAgICAgcmV0dXJuIGFyci5qb2luKFxcXCJcXFwiKTtcXG4gICAgfSxcXG4gICAgZ2V0T2JqZWN0S2V5c0RpZmY6IGZ1bmN0aW9uKG9iajEsIG9iajIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZlcmVudEtleXMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoxKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoyLmhhc093blByb3BlcnR5KGtleSkgfHwgb2JqMVtrZXldICE9PSBvYmoyW2tleV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajIpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZmVyZW50S2V5cztcXG4gICAgfSxcXG4gICAgZ2V0TmV4dFVybDogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIHBhcmFtcykge1xcbiAgICAgICAgdmFyIHUxID0gdGhpcy51cmxQYXJzZShzb3VyY2UpO1xcbiAgICAgICAgdmFyIHUyID0gdGhpcy51cmxQYXJzZSh0YXJnZXQpO1xcbiAgICAgICAgdmFyIHBhID0gdW5kZWZpbmVkO1xcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gXFxcIm9iamVjdFxcXCIpIHtcXG4gICAgICAgICAgICBwYSA9IHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShcXFwi54m55b6BXFxcIikgPyBwYXJhbXMu54m55b6BIDogdW5kZWZpbmVkO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIG5leHR1cmwgPSBzb3VyY2U7XFxuICAgICAgICB2YXIgY2EgPSBPYmplY3Qua2V5cyh1Mi5QYXJhbXMpLmxlbmd0aCA9PSAwID8gXFxcIlxcXCIgOiBcXFwiP1xcXCI7XFxuICAgICAgICBpZiAocGEgIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgdmFyIHJzID0gU3RyaW5nKHUyLlBhdGgpLnJlcGxhY2UobmV3IFJlZ0V4cChwYSksIFxcXCIkMWZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgIG5leHR1cmwgPSB1Mi5Ib3N0cyArIHJzICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUyLlBhcmFtcyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXF1YWwodTEuUGFyYW1zLCB1Mi5QYXJhbXMpKSB7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHUxLlBhdGgpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHUyLlBhdGgpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBkZiA9IHRoaXMuZmluZERpZmZlcmVudEluZGV4KFN0cmluZyh1MS5QYXRoKSwgU3RyaW5nKHUyLlBhdGgpKTtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZGYpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChkZi5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGRmLmZpbHRlcigoeCkgPT4gL1xcXFxkKy8udGVzdCh4LnMyKSk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IHRoaXMucmVwbGFjZUNoYXJBdChTdHJpbmcodTIuUGF0aCksIHJlLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1Mi5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUyLlBhcmFtcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGVwID0gdGhpcy5nZXRPYmplY3RLZXlzRGlmZih1MS5QYXJhbXMsIHUyLlBhcmFtcylcXG4gICAgICAgICAgICAgICAgaWYgKGVwLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB1MS5QYXJhbXNbZXBbMF1dID0gJ2Z5cGFnZSdcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhlcCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gU3RyaW5nKHUxLlBhdGgpLnJlcGxhY2UoL1xcXFxkKy8sIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUxLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTEuUGFyYW1zKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHR1cmwpXFxuICAgICAgICByZXR1cm4gbmV4dHVybDtcXG4gICAgfSxcXG59O1xcblxcbmZ1bmN0aW9uIGdldFRydWVsaW5rKG1hcmssIHVybCwgcGFnZSkge1xcbiAgICB2YXIgcCA9IGdldE15VmFyKG1hcmssIHVybCkucmVwbGFjZShcXFwiZnlwYWdlXFxcIiwgcGFnZSk7XFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgIHJldHVybiBnZXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgcCk7XFxuICAgIH0gZWxzZSBpZiAocCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgcmV0dXJuIHA7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gdXJsO1xcbiAgICB9XFxufVxcbi8v5p6E5bu6XFxuZnVuY3Rpb24gY3JlYXRlTmV4dFBhZ2UoKSB7XFxuICAgIGxldCBzdGFydG51bSA9IDE7XFxuICAgIHZhciBvYmogPSBhcmd1bWVudHNbMF07XFxuICAgIGlmICh0cnVlX3VybCAhPSBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIFxcXCJcXFwiKSkge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpO1xcbiAgICB9XFxuICAgIGlmIChwYWdlID09IHN0YXJ0bnVtICYmIGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCB0cnVlX3VybCk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAgICAgLy9sb2cobmV4dCk7XFxuICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgICAgIG5leHQgPSBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgdmFyIG54dXJsID0gZXh0TWV0aG9kLmdldE5leHRVcmwodHJ1ZV91cmwsIG5leHQsIG9iaik7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm54dXJsOlxcXCIgKyBueHVybCk7XFxuICAgICAgICAgICAgcHV0TXlWYXIo54q25oCBLCBueHVybCk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiLCBueHVybCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gYXV0b1BhZ2UoKSB7XFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCB0cnVlX3VybCk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dCk7XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgIG5leHQgPSBcXFwiXFxcIjtcXG4gICAgfVxcbiAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIo54q25oCBLCBuZXh0KTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoeS6jOe6p+WklumDqOino+aekFwiLFwicGF0aFwiOlwidG9vbFwiLFwicnVsZVwiOlwiLy92YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwg5pCc57Si5qCH562+KTtcXG4vL3ZhciB0aXRsZSA9IE1ZX1BBUkFNUy50aXRsZTtcXG4vL2xvZyh0aXRsZSlcXG5cXG4vL1RoaXNzQVZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNGRjAwMDBcXFwiPiBUaGlzQVY8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuNC5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2xvZ29zLWFuZC1icmFuZHMvNTEyLzIzMl9OaW50ZW5kb19Td2l0Y2hfbG9nby0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly90aGlzYXYuY29tL2NuL1xcXCIgKyDor4bliKvnoIE7IFxcbi8vbG9nKGF2KVxcbiAgICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhdiwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjApJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sdGltZW91dDo1MDAwXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL2V2YWwuKj9cXFxcbi8pWzBdKVxcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W55S76LSo5YiX6KGo77yM5bm25Y675pyA6auY55S76LSoXFxuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBfcXVhbGl0eSA9IGZldGNoKHNvdXJjZSx7aGVhZGVyczp7XFxcIm9yaWdpblxcXCI6XFxcImh0dHBzOi8vdGhpc2F2LmNvbVxcXCJ9fSlcXG4gICAgICAgICAgICAgICAgICAgIGhnaGVzdF9xdWFsaXR5ID0gZ3JvdXBfcXVhbGl0eS5tYXRjaCgvXiguKilcXFxcLm0zdTgkL2dtKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKFxcXCJwbGF5bGlzdC5tM3U4XFxcIiwgaGdoZXN0X3F1YWxpdHlbaGdoZXN0X3F1YWxpdHkubGVuZ3RoLTFdKSArICc7e09yaWdpbkBodHRwczovL3RoaXNhdi5jb219JyAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgfWNhdGNoe3JldHVybiBcXFwidG9hc3Q6Ly/mjILmoq/miJbmsqHmnInmraTlvbHniYdcXFwifVxcbiAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYTogeyBsb25nQ2xpY2s6IFt7dGl0bGU6ICfmn6XnnIvnvZHlnYAnLCBqczogJC50b1N0cmluZygo6K+G5Yir56CBKT0+eyByZXR1cm4gXFxcImh0dHBzOi8vdGhpc2F2LmNvbS9jbi9cXFwiICsg6K+G5Yir56CBO30s6K+G5Yir56CBKX1dIH1cXG59KTtcXG5cXG4vL01JU1NBVlxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI0JFREE4RlxcXCI+IE1JU1NBVjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4xLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvZnJ1aXRzLW4tdmVnZXRhYmxlcy1jb2xvcmVkLWdyYWRpZW50LzEyOC9jYXVsaWZsb3dlci0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbWlzc2F2LnRvL3NlYXJjaC9tb3ZpZS9cXFwiICsg6K+G5Yir56CBOyAgXFxuICAgICAgICAgICAgIHZhciB1cmxzID0gW107ICAgIFxcbiAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoZmV0Y2goYXYse3RpbWVvdXQ6NTAwMH0pLFxcXCIudmlkZW9zLWxpc3QmJmFydGljbGVcXFwiKTtcXG4gICAgICAgICAgICBmb3IodmFyIGogaW4gbGlzdCl7XFxuICAgICAgICAgICAgICB1cmxzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZGZoKGxpc3Rbal0sXFxcImEmJmhyZWZcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBwbGF5cyA9IGJmKHVybHMpLm1hcChoPT5oLm1hdGNoKC9zcmM9XFxcIiguKj8pXFxcIi8pWzFdLnNwbGl0KFxcXCImXFxcIilbMF0ucmVwbGFjZShcXFwiP2lkPVxcXCIsXFxcImhscy9cXFwiKSArIFxcXCIubTN1OFxcXCIpICAgXFxuICAgICAgICAgICAgIHJldHVybiB7dXJsczpwbGF5c31cXG4gICAgICAgfWNhdGNoe1xcbiAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbWlzc2F2LnRvL3NlYXJjaC9tb3ZpZS9cXFwiICsg6K+G5Yir56CBLnJlcGxhY2UoL1xcXFwtfFxcXFxfLyxcXFwiJTIwXFxcIik7ICBcXG4gICAgICAgICAgICAgdmFyIHVybHMgPSBbXTsgICAgXFxuICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYShmZXRjaChhdix7dGltZW91dDo1MDAwfSksXFxcIi52aWRlb3MtbGlzdCYmYXJ0aWNsZVxcXCIpO1xcbiAgICAgICAgICAgIGZvcih2YXIgaiBpbiBsaXN0KXtcXG4gICAgICAgICAgICAgIHVybHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBkZmgobGlzdFtqXSxcXFwiYSYmaHJlZlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHBsYXlzID0gYmYodXJscykubWFwKGg9PmgubWF0Y2goL3NyYz1cXFwiKC4qPylcXFwiLylbMV0uc3BsaXQoXFxcIiZcXFwiKVswXS5yZXBsYWNlKFxcXCI/aWQ9XFxcIixcXFwiaGxzL1xcXCIpICsgXFxcIi5tM3U4XFxcIikgICBcXG4gICAgICAgICAgICAgcmV0dXJuIHt1cmxzOnBsYXlzfVxcbiAgICAgICAgICB9Y2F0Y2h7cmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieatpOW9seeJh1xcXCJ9XFxuICAgICAgIH0gICBcXG4gICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHsgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PnsgcmV0dXJuIFxcXCJodHRwczovL21pc3Nhdi50by9zZWFyY2gvbW92aWUvXFxcIiArIOivhuWIq+eggX0s6K+G5Yir56CBKX1dIH1cXG59KTtcXG5cXG4vL25qYXZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiMxRTkwRkZcXFwiPiBuSmF2LnR2PC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjIuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9zb2NpYWwtaWNvbnMtMzMvMTI4L0ZhY2Vib29rX01lc3Nlbmdlci0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOivhuWIq+eggTsgXFxuLy9sb2coYXYpXFxuICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LHt0aW1lb3V0OjUwMDB9KVxcbiAgICAgICAgICAgICAgICAgaWYoIWh0bWwgfHwgaHRtbC5pbmNsdWRlcyhcXFwi6K+35qOA5p+l5Zyw5Z2A5qCP5Lit55qE572R5Z2AXFxcIikpeyAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGF2O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycqLmRvcHBpb2Nkbi4qJ10sXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAgICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgICAgICAgICAgY2FjaGVNM3U4OiB0cnVlLFxcbiAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IHJldHVybiBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOivhuWIq+eggTt9LOivhuWIq+eggSl9XVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG59KTtcXG5cXG4vL2F2MDFcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiM4QTJCRTJcXFwiPiBBVjAxPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjIuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9vd2wtMTAvNTAwL25pbTUzMl8xMV9wdXJwbGVfb3dsX2tpZF9iaXJ0aGRheV9mYWNlX2V5ZS0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly93d3cuYXYwMS50di9cXFwiICsg6K+G5Yir56CBOyBcXG4vL2xvZyhhdilcXG4gICAgICAgICAgICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYse3RpbWVvdXQ6NTAwMH0pXFxuICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IHBkZmgoaHRtbCwnI3BseXJfdmlkZW8mJnBvc3RlcicpXFxubG9nKGNvZGUpXFxuICAgICAgICAgICAgICAgICBpZighY29kZSl7ICAgICAgICAgXFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgYXY7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSzor4bliKvnoIEpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJ2RvcHBpb2NkbiddLFxcbiAgICAgICAgICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgICAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnNDgwJ10sXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLmRvcHBpb2Nkbi4nXSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWydkbW0uY28uanAnXSxcXG4gICAgICAgICAgICAgICAgLy92aWRlb1J1bGVzOiBbJyptM3U4KiddLFxcbiAgICAgICAgICAgICAgICBjYWNoZU0zdTg6IHRydWUsXFxuICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PnsgcmV0dXJuIFxcXCJodHRwczovL3d3dy5hdjAxLnR2L1xcXCIgKyDor4bliKvnoIE7fSzor4bliKvnoIEpfV1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxufSk7XFxuXFxuLy9KYWJsZVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI0ZGOEMwMFxcXCI+IEphYmxlPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjMuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9jYXQtcG93ZXItcHJlbWl1bS8xMjAvY2F0X2Zvb2Rsb3ZlLTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL2phYmxlLnR2L3ZpZGVvcy9cXFwiICsg6K+G5Yir56CBICsgXFxcIi9cXFwiOyBcXG4vL2xvZyhhdilcXG4gICAgICAgICAgICAgICAgLy8gcmVxdWVzdChcXFwiaHR0cHM6Ly9qYWJsZS50di9cXFwiKVxcbiAgICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhdix7dGltZW91dDo1MDAwfSlcXG4gICAgICAgICAgICAgICAgIHZhciB1cmwgPSBodG1sLm1hdGNoKC9odHRwcz86XFxcXC9cXFxcL1xcXFxTKz9cXFxcLm0zdTgvKVswXVxcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgICAgICAgfWNhdGNoe3JldHVybiBcXFwidG9hc3Q6Ly/msqHmnInmjILmoq/lrZDmiJbmsqHmnInmraTlvbHniYdcXFwifVxcbiAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYTogeyBsb25nQ2xpY2s6IFt7dGl0bGU6ICfmn6XnnIvnvZHlnYAnLCBqczogJC50b1N0cmluZygo6K+G5Yir56CBKT0+eyByZXR1cm4gXFxcImh0dHBzOi8vamFibGUudHYvdmlkZW9zL1xcXCIgKyDor4bliKvnoIEgKyBcXFwiL1xcXCI7fSzor4bliKvnoIEpfV0gfVxcbn0pO1xcblxcbi8vVGhpc3NBVuegtOino1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzNGQjhDMVxcXCI+54Sh56K856C06KejPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjQuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9zb2xpZC13ZWJpLWNvbi0zLWN5YW4vMTI4L1JlY29tZW5kYXRpb24tMTI4LnBuZycsXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKOivhuWIq+eggSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vdGhpc2F2LmNvbS9jbi9cXFwiICsg6K+G5Yir56CBICsgXFxcIi11bmNlbnNvcmVkLWxlYWtcXFwiOyBcXG4vL2xvZyhhdilcXG4gICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9LHRpbWVvdXQ6NTAwMFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC9ldmFsLio/XFxcXG4vKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIC8vIOiOt+WPlueUu+i0qOWIl+ihqO+8jOW5tuWOu+acgOmrmOeUu+i0qFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwX3F1YWxpdHkgPSBmZXRjaChzb3VyY2Use2hlYWRlcnM6e1xcXCJvcmlnaW5cXFwiOlxcXCJodHRwczovL3RoaXNhdi5jb21cXFwifX0pXFxuICAgICAgICAgICAgICAgICAgICBoZ2hlc3RfcXVhbGl0eSA9IGdyb3VwX3F1YWxpdHkubWF0Y2goL14oLiopXFxcXC5tM3U4JC9nbSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UucmVwbGFjZShcXFwicGxheWxpc3QubTN1OFxcXCIsIGhnaGVzdF9xdWFsaXR5W2hnaGVzdF9xdWFsaXR5Lmxlbmd0aC0xXSkgKyAnO3tPcmlnaW5AaHR0cHM6Ly90aGlzYXYuY29tfScgICAgICAgICBcXG4gICAgICAgICAgICAgICAgIH1jYXRjaHtyZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIn1cXG4gICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHsgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PnsgcmV0dXJuIFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOivhuWIq+eggSArIFxcXCItdW5jZW5zb3JlZC1sZWFrXFxcIjt9LOivhuWIq+eggSl9XSB9XFxufSk7XFxuXFxuLy9uamF256C06KejXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMUU5MEZGXFxcIj4gbkphduegtOinozwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4wLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvQ3V0ZU1vbnN0ZXJzUE5HLzEyOC9ibHVlX21vbnN0ZXIucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOivhuWIq+eggSArIFxcXCItdW5jZW5zb3JlZC1sZWFrZWRcXFwiOyBcXG4vL2xvZyhhdilcXG4gICAgICAgICAgICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYse3RpbWVvdXQ6NTAwMH0pXFxuICAgICAgICAgICAgICAgICBpZighaHRtbCB8fCBodG1sLmluY2x1ZGVzKFxcXCLor7fmo4Dmn6XlnLDlnYDmoI/kuK3nmoTnvZHlnYBcXFwiKSl7ICAgICAgICAgXFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgYXY7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSzor4bliKvnoIEpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJzI0MCddLFxcbiAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJyouZG9wcGlvY2RuLionXSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWydkbW0uY28uanAnXSxcXG4gICAgICAgICAgICAgICAgLy92aWRlb1J1bGVzOiBbJyptM3U4KiddLFxcbiAgICAgICAgICAgICAgICBjYWNoZU0zdTg6IHRydWUsXFxuICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PnsgcmV0dXJuIFxcXCJodHRwczovL25qYXYudHYvemgvdi9cXFwiICsg6K+G5Yir56CBICsgXFxcIi11bmNlbnNvcmVkLWxlYWtlZFxcXCI7fSzor4bliKvnoIEpfV1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxufSk7XFxuXFxuLy9TdXBqYXZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNBMzI5ODZcXFwiPlN1cGphdjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4zLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvbG9nb3MtYnJhbmRzLTMvMjQvbG9nb19icmFuZF9icmFuZHNfbG9nb3Nfc2tyaWxsLTEyOC5wbmcnLFxcbiAgICB1cmw6IFxcXCJ4NTovL2h0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg6K+G5Yir56CBLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6ZmFsc2UsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+WPrOWUpOmbqOingScsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IFxcbi8qXFxub3BlbkFwcEludGVudCgnY29tLnl1amlhbi5SZXNpZGVNZW51RGVtbycsICdjbi55dWppYW4uTWFpbkFjdGl2aXR5Jywge2ludGVudERhdGE6ICdodHRwczovL3N1cGphdi5jb20vemgvP3M9JyArIOivhuWIq+eggX0pXFxuKi9cXG4gICAgICAgICAgICByZXR1cm4gXFxcInlqYnJvd3NlcjovL3NlYXJjaD9xPWh0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSl9LHt0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJodHRwczovL3N1cGphdi5jb20vemgvP3M9XFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgICAgICAgICAgICAgfSzor4bliKvnoIEpfV1cXG4gICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgIH0pO1xcblxcbi8v6IGa5pCcXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjNjdFMEZBXFxcIj7ogZrmkJwg4oCiIFI8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuNC5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2Vzc2VudGlhbHMtNzIvMjQvMDAyXy1fU2VhcmNoLTEyOC5wbmcnLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIgKyDor4bliKvnoIEgKyBcXFwiJnJ1bGU95aW955yL6KeG6aKRJnNpbXBsZT1mYWxzZVxcXCIsXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7dGl0bGU6ICdKYXYuR3VydScsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IHJldHVybiBcXFwiaHR0cHM6Ly9qYXYuZ3VydS8/cz1cXFwiICsg6K+G5Yir56CBO30s6K+G5Yir56CBKX0se3RpdGxlOiAnSmF2QmFuZ2VycycsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IHJldHVybiBcXFwiaHR0cHM6Ly93d3cuamF2YmFuZ2Vycy5jb20vc2VhcmNoL1xcXCIgKyDor4bliKvnoIEgKycvJzt9LOivhuWIq+eggSl9LHt0aXRsZTogJ+WkjeWItuivhuWIq+eggScsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IHJldHVybiBcXFwiY29weTovL1xcXCIgKyDor4bliKvnoIE7fSzor4bliKvnoIEpfV1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxufSk7XFxuXFxuXFxuLy/no4HlipvlkJsu566AXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjRUY0ODIzXFxcIj7no4HlipvlkJsu566APC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjQuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9zaG9wcGluZy1kb29kbGUvNTEyL1Nob3BwaW5nLTMxLTEyOC5wbmcnLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc291P3J1bGU956OB5Yqb5ZCbLueugCZwPWZ5cGFnZSZzZWFyY2hUZXJtcz1cXFwiICsg6K+G5Yir56CBLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn6LC35q2M5pCc57SiJywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PnsgcmV0dXJuIFxcXCJodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVxcXCIgKyDor4bliKvnoIE7fSzor4bliKvnoIEpfSx7dGl0bGU6ICdZYW5kZXjmkJzntKInLCBqczogJC50b1N0cmluZygo6K+G5Yir56CBKT0+eyByZXR1cm4gXFxcImh0dHBzOi8veWFuZGV4LmNvbS9zZWFyY2gvdG91Y2gvP3RleHQ9XFxcIiArIOivhuWIq+eggTt9LOivhuWIq+eggSl9LHt0aXRsZTogJ+WkjeWItuivhuWIq+eggScsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IHJldHVybiBcXFwiY29weTovL1xcXCIgKyDor4bliKvnoIE7fSzor4bliKvnoIEpfV1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxufSk7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKE1ZX0hPTUUpID0+IHtcXG4gICAgdmFyIGlucCA9IGZldGNoKGlucHV0LHt9KTsgXFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIrcGRmYShpbnAsICcucHJldmlldy1pbWFnZXMmJmEsMTonKS5tYXAoaW1nID0+cGQoaW1nLCAnYSYmaHJlZicpK1xcXCJAUmVmZXJlcj1cXFwiLCkuam9pbihcXFwiJiZcXFwiKSAgXFxufSxNWV9IT01FKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LiA57qn6aG16Z2i5YaF5a65XCIsXCJwYXRoXCI6XCJ5alwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5cXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInVybFxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwibmV4dFBhZ2VcXFwiKTtcXG4gICAgICAgIGNsZWFySXRlbSgnbm93JylcXG4gICAgICAgIGNsZWFySXRlbSgnbm8nKVxcbiAgICAgICAgY2xlYXJJdGVtKCdwYWdlcycpXFxufSk7XFxuYWRkTGlzdGVuZXIoXFxcIm9uUmVmcmVzaFxcXCIsICgpID0+IHtcXG4gICAgY2xlYXJNeVZhcihcXFwidXJsXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGNsZWFySXRlbSgnbm93Jyk7XFxuICAgIGNsZWFySXRlbSgnbm8nKTtcXG4gICAgY2xlYXJJdGVtKCdwYWdlcycpXFxufSk7XFxuXFxuTVlfVVJMPU1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKTtcXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihcXFwidXJsXFxcIiwgTVlfVVJMKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG4vL+iOt+WPluS4iuasoee8k+WtmOeahOS4i+mhtemTvuaOpVxcbmxldCBuZXh0UGFnZSA9IGdldE15VmFyKFxcXCJuZXh0UGFnZVxcXCIsIFxcXCJcXFwiKTtcXG4vL+WmguaenOacieS4i+S4gOmhteS4lOS4jeaYr+esrOS4gOmhteWwseS9v+eUqOS4i+S4gOmhtemTvuaOpVxcbmlmIChuZXh0UGFnZSAmJiBNWV9QQUdFID4gMSkge1xcbiAgICB0cnVlX3VybCA9IG5leHRQYWdlO1xcbn1cXG5sb2codHJ1ZV91cmwpO1xcbnZhciBodG1sID0gcmVxdWVzdCh0cnVlX3VybCk7XFxuXFxudHJ5IHtcXG4gICAgLy/nvJPlrZjkuIvkuIDpobVcXG4gICAgbGV0IG5leHRVcmwgPSBwZChodG1sLCBcXFwiYTpjb250YWlucyjkuIvkuIApJiZocmVmXFxcIik7XFxuICAgIHB1dE15VmFyKFxcXCJuZXh0UGFnZVxcXCIsIG5leHRVcmwgfHwgXFxcImhpa2VyOi8vZW1wdHlcXFwiKTtcXG4gICAgLy9sb2coXFxcIuS4i+S4gOmhte+8mlxcXCIgKyBuZXh0VXJsKVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgLy9jbGVhck15VmFyKFxcXCJuZXh0UGFnZVxcXCIpO1xcbiAgICBsZXQgbmV4dFVybCA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgdG9hc3QoXFxcIuWlveWDj+ayoeacieS4i+S4gOmhteS6hu+8gVxcXCIpO1xcbn1cXG5cXG52YXIgcGFnZXM7XFxuaWYoTVlfUEFHRT09MSl7XFxuLy/mvJTlkZjlm75cXG50cnl7XFxuICB0cnl7XFxuICAgIHZhciBpbWcgPSAgcGRmaChodG1sLFxcXCIuc2VjdGlvbi1jb2x1bW5zJiYuaW1hZ2UmJi5hdmF0YXImJnN0eWxlXFxcIik7XFxuICAgIH1jYXRjaHsgXFxuICAgIHZhciBpbWcgPSBcXFwiaHR0cHM6Ly90aHVtYnNuYXAuY29tL2kvc3lTTVE3TWcuanBnXFxcIjt9XFxudmFyIOaPj+i/sDEgPSBwZGZoKGh0bWwsIFxcXCIuc2VjdGlvbi1jb2x1bW5zJiZoMi0tLnNlY3Rpb24tbWV0YSwtMSYmVGV4dFxcXCIpO1xcbnZhciDmj4/ov7AyID0gcGRmaChodG1sLCBcXFwiLnNlY3Rpb24tY29sdW1ucyYmaDImJi5zZWN0aW9uLW1ldGEsLTEmJlRleHRcXFwiKTtcXG52YXIgbnVtID0g5o+P6L+wMi5tYXRjaCgvXFxcXGQrLylbMF0gfHwgJzEnXFxudmFyIHBhZ2VzID0gTWF0aC5mbG9vcihudW0gLyA0MCk7XFxuaWYgKG51bSAlIDQwICE9PSAwKSB7XFxuICBwYWdlcyArPSAxO1xcbn1cXG5cXG52YXIgbGlzdEFjdG9ycyA9IEpTT04ucGFyc2UoZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGJfYWN0b3IudHh0JykgfHwgJ1tdJyk7XFxudmFyIHN0ciA9IOaPj+i/sDEgKyAnQEAnICsgaW1nICsgJ0BAJyArIE1ZX1VSTC5yZXBsYWNlKCdwYWdlPTEnLCdwYWdlPWZ5cGFnZScpLnJlcGxhY2UoTVlfSE9NRSxnZXRNeVZhcigneW9uZ2ppdScpKTtcXG5pZiAobGlzdEFjdG9ycy5pbmRleE9mKHN0cikgPT0gJy0xJykge1xcbiAgICB2YXIgdCA9ICfwn6SN5pyq5pS26JeP8J+kjScuc21hbGwoKVxcbn0gZWxzZSB7XFxuICAgIHZhciB0ID0gJzxiPjxzbWFsbD48Zm9udCBjb2xvcj0jRkYwMEZGPvCfkp3lt7LmlLbol4/wn5KdPC9mb250Pjwvc21hbGw+J1xcbn1cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiSmF2REJcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIjBcXFwiLFxcbiAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICB1cmw6ICdjb3B5Oi8vJyArIOaPj+i/sDEgKyAnLGhpa2VyOi8vcGFnZS95aj91cmw9JyArIE1ZX1VSTC5yZXBsYWNlKC9cXFxcL1xcXFwvXFxcXHcrXFxcXC4vLCcvL2phdmRiLicpLnJlcGxhY2UoJ3BhZ2U9MScsJ3BhZ2U9ZnlwYWdlJykgKyAnJnJ1bGU9SmF2REInLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18yXFxcIixcXG4gICAgICAgICB9KVxcbiAgICAgZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNmZTVjNGJcXFwiPuemu+aAneS6lOmmlsK35YW25ZubwrfllJDCt+WFg+eouVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTmm77nu4/msqfmtbfpmr7kuLrmsLTvvIxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx06Zmk5Y205ber5bGx5LiN5piv5LqR44CCXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdOWPluasoeiKseS4m+aHkuWbnumhvu+8jFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTljYrnvJjkv67pgZPljYrnvJjlkJvjgIJcXFxcbjwvZm9udD48L3NtYWxsPjxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiY3lhblxcXCI+ICcgKyDmj4/ov7AxLnNsaWNlKDAsMTMpICsgJzwvZm9udD48L3NtYWxsPjxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+XFxcXG4gJyArIOaPj+i/sDIgKyAnXFxcXHRcXFxcdDwvZm9udD48L3NtYWxsPicgKyB0ICsgJzxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwieWVsbG93XFxcIj5cXFxcbuS5n+iuuOaciScgKyBwYWdlcyArICfpobXvvIzmsqHpqpfkvaDlkKc8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICBkZXNjOiAnMCcsXFxuICAgIC8vaW1nOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfMlxcXCIsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgc3RyID0gZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGJfYWN0b3IudHh0Jyk7XFxuICAgICAgICAgICAgICAgIGlmICghc3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGJfYWN0b3IudHh0JywgSlNPTi5zdHJpbmdpZnkobGlzdCkpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKHN0cik7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5pbmRleE9mKG5hbWUpID09ICctMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QucHVzaChuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnVuc2hpZnQobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYl9hY3Rvci50eHQnLCBKU09OLnN0cmluZ2lmeShsaXN0KSk7XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGJfYWN0b3IudHh0JywgSlNPTi5zdHJpbmdpZnkobGlzdCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHN0ciksXFxuICAgIGV4dHJhOiB7XFxcImdyYWRpZW50XFxcIjp0cnVlfVxcbn0pO1xcbiAgICB9Y2F0Y2h7fVxcbiAgICAgICBpZiAodHlwZW9mIHBhZ2VzICE9PSAndW5kZWZpbmVkJyAmJiBwYWdlcyAhPT0gbnVsbCkge1xcbiAgICAgICAgICBzZXRJdGVtKCdwYWdlcycsIHBhZ2VzLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgIH0gXFxuXFxuLy/mvJTlkZjliIbnsbtcXG4gICB0cnl7XFxuICAgICAgICB2YXIgY2F0ZWdvcnkgPSBwZGZhKGh0bWwsXFxcIi5hY3Rvci10YWdzJiYudGFnLDA6NVxcXCIpXFxubGV0IG5vID0gZ2V0SXRlbSgnbm8nLCAn5YWo6YOoJyk7XFxuICAgICAgIGNhdGVnb3J5LmZvckVhY2goaXRlbT0+e1xcbiAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLFxcXCJUZXh0XFxcIik7XFxuICAgICAgICAgICB2YXIgdXJsID0gcGQoaXRlbSxcXFwiYSYmaHJlZlxcXCIpICE9PScnP3BkKGl0ZW0sXFxcImEmJmhyZWZcXFwiKTogcGQoaXRlbSxcXFwiYnV0dG9uJiZvbmNsaWNrLmpzOmlucHV0LnNwbGl0KCdcXFxcJycpWzFdXFxcIik7XFxuICAgICAgICAgICB1cmwgPSB1cmwuaW5jbHVkZXMoJz9wYWdlJyk/dXJsOih1cmwuaW5jbHVkZXMoJz8nKT91cmwgKyBcXFwiJnBhZ2U9MVxcXCI6dXJsICsgXFxcIj9wYWdlPTFcXFwiKVxcbiAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICB0aXRsZTogbm8gPT10aXRsZT8gJ+KAnOKAnOKAneKAnScgKyB0aXRsZS5mb250Y29sb3IoJ2dyZWVuJykgOiAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLmZvbnRjb2xvcignI0QzRDNEMycpLFxcbiAgICAgICAgICAgICAgIHVybDogdXJsICsgJCgnJykubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwibm9cXFwiLHRpdGxlKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgIH0sdGl0bGUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgfSlcXG4gICAgICAgIH1jYXRjaHt9XFxuIC8v5YiG5YmyXFxuICAgIGQucHVzaCh7XFxuICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgIH0pXFxufVxcblxcbnZhciBwYWdlcyA9IGdldEl0ZW0oJ3BhZ2VzJyk7XFxuXFxudHJ5e1xcbmxldCBub3cgPSBnZXRJdGVtKCdub3cnKTtcXG5pZihwYWdlcz4xJiZwYWdlczwzNyl7XFxuZm9yICh2YXIgaiA9IDE7IGogPD0gcGFnZXM7IGogKyspe1xcbnZhciB1cmwgPSB0cnVlX3VybC5yZXBsYWNlKC9wYWdlPVxcXFxkKy8sICdwYWdlPScraik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaiA9PU1ZX1BBR0UgfHwgbm93ID09KCBqICsgJ+mhtScpPyAn4oCc4oCc4oCd4oCdJyArIChqICsgJ+mhtScpLmZvbnRjb2xvcigncmVkJykgOiAoaiArICfpobUnKSxcXG4gICAgICAgIHVybDokKHVybCkubGF6eVJ1bGUoKGopID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJub3dcXFwiLCggaiArICfpobUnKSk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICB9LGopLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG59KVxcbn1cXG59ZWxzZSBpZihwYWdlcz4zNyl7XFxuZm9yICh2YXIgaiA9IDE7IGogPD0gNjE7IGogKz0oaj09MSk/MjozKXtcXG52YXIgdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvcGFnZT1cXFxcZCsvLCAncGFnZT0nK2opO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGogPT1NWV9QQUdFIHx8IG5vdyA9PSggaiArICfpobUnKT8gJ+KAnOKAnOKAneKAnScgKyAoaiArICfpobUnKS5mb250Y29sb3IoJ3JlZCcpIDogKGogKyAn6aG1JyksXFxuICAgICAgICB1cmw6JCh1cmwpLmxhenlSdWxlKChqKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwibm93XFxcIiwoIGogKyAn6aG1JykpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgfSxqKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxufSlcXG59XFxufVxcbn1jYXRjaHt9XFxuXFxuXFxubGV0IGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuaXRlbScpO1xcbmlmKGxpc3QubGVuZ3RoPjApe1xcbmxpc3QuZm9yRWFjaCh4ID0+IHsgICBcXG4gZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoeCwgJy52aWRlby10aXRsZSYmVGV4dCcpLFxcbiAgICBkZXNjOiBwZGZoKHgsJy5tZXRhJiZUZXh0JyksXFxuICAgIGltZzogcGQoeCwnaW1nfHxhJiZzcmN8fGRhdGEtb3JpZ2luYWwnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2VqP3VybD0nK3BkKHgsICdhJiZocmVmJykrJyNub0hpc3RvcnkjJyxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXG4gICAgZXh0cmE6IHtwYWdlVGl0bGU6IHBkZmgoeCwgJy52aWRlby10aXRsZSYmVGV4dCcpLH1cXG4gIH0pO1xcbn0pXFxufWVsc2V7XFxuLypcXG4gIGZ1bmN0aW9uIGdldEJpZ1RleHQodGV4dCwgY291bnQpIHtcXG4gICAgaWYgKGNvdW50ID4gMCkge1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XFxuICAgICAgICAgICAgdGV4dCA9IHRleHQuYmlnKCk7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IC1jb3VudDsgaSsrKSB7XFxuICAgICAgICAgICAgdGV4dCA9IHRleHQuc21hbGwoKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gdGV4dDtcXG4gICAgfVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIitnZXRCaWdUZXh0KFxcXCI8YmlnPjxmb250IGNvbG9yPScjRkVCRDZGJz7lt7Lnu4/otoXov4fkuobmnIDnu4jpobXnoIE8L2ZvbnQ+PC9iaWc+PGJyPjxzbWFsbD48Zm9udCBjb2xvcj0nI0ZCNkM3Myc+5LiN5L+h54K55Ye75omT5byA572R6aG1PC9mb250Pjwvc21hbGw+XFxcIiwgNSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodHJ1ZV91cmwpID0+IHtcXG5yZXR1cm4gdHJ1ZV91cmxcXG4gICAgIH0sdHJ1ZV91cmwpLFxcbiAgICBleHRyYTp7bGluZVZpc2libGU6ZmFsc2V9XFxuICAgIH0pXFxuKi9cXG59XFxuXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaHkuoznuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcImVqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdXFxuTVlfVVJMPU1ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLCcnKTtcXG5sb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG5cXG50cnl7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eScsIHt9KSkucnVsZSk7XFxuXFxudmFyIHRpdGxlID0gcGRmaChodG1sLCdoMiYmVGV4dCcpO1xcbiAgIGlmKHRpdGxlICE9PW51bGwpe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPSNGRkE1MDA+Jyt0aXRsZSsnPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5aSN5Yi25qCH6aKYJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgfSx0aXRsZSl9LHt0aXRsZTogJ+eZvuW6pue/u+ivkScsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcIng1Oi8vaHR0cHM6Ly9mYW55aS5iYWlkdS5jb20vI2pwL3poL1xcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgfSx0aXRsZSl9LHt0aXRsZTogJ0RlZXBs57+76K+RJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwieDU6Ly9odHRwczovL3d3dy5kZWVwbC5jb20vemgvdHJhbnNsYXRvci1tb2JpbGUjamEvemgvXFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICAgICB9LHRpdGxlKX0se3RpdGxlOiAn6LC35q2M57+76K+RJywganM6ICQudG9TdHJpbmcoKHRpdGxlKT0+eyBcXG4gICAgICAgIHJldHVybiBcXFwieDU6Ly9odHRwczovL3RyYW5zbGF0ZS5nb29nbGUuY29tLz9obD16aC1DTiZzbD1qYSZ0bD16aC1DTiZ0ZXh0PVxcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgfSx0aXRsZSl9XVxcbn1cXG4gICAgfSlcXG59XFxuXFxudmFyIOivhuWIq+eggSA9IHBkZmgoaHRtbCwgJ2JvZHkmJi5maXJzdC1ibG9jayYmLnZhbHVlJiZUZXh0Jyk7XFxuXFxudmFyIGltZyA9IHBkKGh0bWwsJy5jb2x1bW4tdmlkZW8tY292ZXImJmltZyYmc3JjJyk7XFxuLy92YXIgaW1nID0gTVlfUEFSQU1TLmltZztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICB1cmw6IGltZyxcXG4gICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZSxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn6Zuo6KeBU3VwamF2JywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PnsgXFxuLypcXG5vcGVuQXBwSW50ZW50KCdjb20ueXVqaWFuLlJlc2lkZU1lbnVEZW1vJywgJ2NuLnl1amlhbi5NYWluQWN0aXZpdHknLCB7aW50ZW50RGF0YTogJ2h0dHBzOi8vc3VwamF2LmNvbS96aC8/cz0nICsg6K+G5Yir56CBfSlcXG4qL1xcbiAgICAgICAgICAgIHJldHVybiBcXFwieWpicm93c2VyOi8vc2VhcmNoP3E9aHR0cHM6Ly9zdXBqYXYuY29tL3poLz9zPVxcXCIgKyDor4bliKvnoIFcXG4gICAgICAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKX0se3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOivhuWIq+eggSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSl9LHt0aXRsZTogJ+WkjeWItuWbvueJhycsIGpzOiAkLnRvU3RyaW5nKChpbWcpPT57IFxcbiAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGltZ1xcbiAgICAgICAgICAgICAgICAgICAgICAgfSxpbWcpfV1cXG4gICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgIH0pO1xcblxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3Rvb2wnLCB7fSkpLnJ1bGUpO1xcblxcbnZhciBsaXN0VmlkZW9zID0gSlNPTi5wYXJzZShmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYl92aWRlby50eHQnKSB8fCAnW10nKTtcXG52YXIgc3RyID0gdGl0bGUgKyAnQEAnICsgaW1nICsgJ0BAJyArIE1ZX1VSTC5yZXBsYWNlKE1ZX0hPTUUsZ2V0TXlWYXIoJ3lvbmdqaXUnKSk7XFxuaWYgKGxpc3RWaWRlb3MuaW5kZXhPZihzdHIpID09ICctMScpIHtcXG4gICAgdmFyIHQgPSAn8J+kjeacquaUtuiXjydcXG59IGVsc2Uge1xcbiAgICB2YXIgdCA9ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jRkYwMEZGPvCfkp3lt7LmlLbol48nXFxufVxcblxcbmxldCBpbmZvID0gcGRmYShodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjnlaromZ985pel5pyffOaZgumVtyknKTtcXG5pbmZvLmZvckVhY2goKGxpc3QsIGluZGV4KSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0LCAnc3Ryb25nJiZUZXh0JyksXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jOTM3MERCPicgKyBwZGZoKGxpc3QsICcudmFsdWUmJlRleHQnKSArICc8L2ZvbnQ+JyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7ICAgICAgICAgIFxcbiAgICAgICAgICAgIHRvYXN0KCfnlarlj7flt7LlpI3liLYnKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsg6K+G5Yir56CBO1xcbiAgICAgICAgfSzor4bliKvnoIEpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfosLfmrYzmkJzntKInLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9XFxcIiArIOivhuWIq+eggTtcXG4gICAgICAgICAgICAgICAgfSwg6K+G5Yir56CBKVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfno4HlipvmkJzmoIfpopgnLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NvdT9ydWxlPeejgeWKm+WQmy7nroAmcD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIHRpdGxlXFxuICAgICAgICAgICAgICAgIH0sIHRpdGxlKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBpZiAoaW5kZXggPT0gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiX3ZpZGVvLnR4dCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXN0cikge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiX3ZpZGVvLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShzdHIpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuaW5kZXhPZihuYW1lKSA9PSAnLTEnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LnB1c2gobmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC51bnNoaWZ0KG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGJfdmlkZW8udHh0JywgSlNPTi5zdHJpbmdpZnkobGlzdCkpO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZihuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvYXBvbGxvL2phdmRiX3ZpZGVvLnR4dCcsIEpTT04uc3RyaW5naWZ5KGxpc3QpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBzdHIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICB9KVxcbiAgICB9XFxufSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgfSlcXG4vL+a8lOWRmFxcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOa8lOWToTopJiZhJyk7XFxuaWYoYXJ0cy5sZW5ndGg+MCl7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICAgICB0aXRsZTogXFxcIua8lOWToTpcXFwiLFxcbiAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOivhuWIq+eggSArIFxcXCItY2hpbmVzZS1zdWJ0aXRsZVxcXCI7IFxcbiAgICAgICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMCknXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LHRpbWVvdXQ6MzAwMFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC9ldmFsLio/XFxcXG4vKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIC8vIOiOt+WPlueUu+i0qOWIl+ihqO+8jOW5tuWOu+acgOmrmOeUu+i0qFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwX3F1YWxpdHkgPSBmZXRjaChzb3VyY2Use2hlYWRlcnM6e1xcXCJvcmlnaW5cXFwiOlxcXCJodHRwczovL3RoaXNhdi5jb21cXFwifX0pXFxuICAgICAgICAgICAgICAgICAgICBoZ2hlc3RfcXVhbGl0eSA9IGdyb3VwX3F1YWxpdHkubWF0Y2goL14oLiopXFxcXC5tM3U4JC9nbSlcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UucmVwbGFjZShcXFwicGxheWxpc3QubTN1OFxcXCIsIGhnaGVzdF9xdWFsaXR5W2hnaGVzdF9xdWFsaXR5Lmxlbmd0aC0xXSkgKyAnO3tPcmlnaW5AaHR0cHM6Ly90aGlzYXYuY29tfScgICAgICBcXG4gICAgICAgICAgICAgICAgIH1jYXRjaHtyZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5peg56CB56C06KejXFxcIn1cXG4gICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSksXFxuICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+S4reaWh+Wtl+W5lScsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IHJldHVybiBcXFwiaHR0cHM6Ly90aGlzYXYuY29tL2NuL1xcXCIgKyDor4bliKvnoIEgKyBcXFwiLWNoaW5lc2Utc3VidGl0bGVcXFwiO30s6K+G5Yir56CBKX1dXFxuICAgICAgICAgICAgIH1cXG59KVxcbmZvciAodmFyIGkgaW4gYXJ0cykge1xcbiAgICB2YXIgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI2MxMzE0MVxcXCI+Jyt0aXRsZSsnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShhcnRzW2ldLCAnYSYmaHJlZicpICsgJz9wYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogdGl0bGUsXFxuICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+WkjeWItua8lOWRmCcsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIHRpdGxlO30sdGl0bGUpfSx7dGl0bGU6ICfosLfmrYzmkJzntKInLCBqczogJC50b1N0cmluZygodGl0bGUpPT57IHJldHVybiBcXFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1cXFwiICsgdGl0bGU7fSx0aXRsZSl9LHt0aXRsZTogJ+eZvuW6puaQnOe0oicsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgcmV0dXJuIFxcXCJodHRwczovL3d3dy5iYWlkdS5jb20vcz93ZD1cXFwiICsgdGl0bGU7fSx0aXRsZSl9LHt0aXRsZTogJ+ejgeWKm+aQnOa8lOWRmCcsIGpzOiAkLnRvU3RyaW5nKCh0aXRsZSk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zb3U/cnVsZT3no4HlipvlkJsu566AJnA9ZnlwYWdlJnNlYXJjaFRlcm1zPVxcXCIgKyB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgfSx0aXRsZSl9XVxcbiAgICAgICAgfVxcbn0pXFxufVxcbmQucHVzaCh7XFxuY29sX3R5cGU6XFxcImJsYW5rX2Jsb2NrXFxcIlxcbn0pXFxufVxcblxcbi8v57G75YirXFxudmFyIGFydHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYucGFuZWwtYmxvY2s6Y29udGFpbnMo6aGe5YilKSYmYScpO1xcbmlmKGFydHMubGVuZ3RoPjApe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogXFxcIumhnuWIpTpcXFwiLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL25qYXYudHYvemgvdi9cXFwiICsg6K+G5Yir56CBICsgXFxcIi11bmNlbnNvcmVkLWxlYWtlZFxcXCI7IFxcbi8vbG9nKGF2KVxcbiAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBmZXRjaChhdix7dGltZW91dDo1MDAwfSlcXG4gICAgICAgICAgICAgICAgIGlmKCFodG1sIHx8IGh0bWwuaW5jbHVkZXMoXFxcIuivt+ajgOafpeWcsOWdgOagj+S4reeahOe9keWdgFxcXCIpKXtcXG4gICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mjILmoq/miJbmsqHmnInmraTlvbHniYdcXFwiXFxuICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ2aWRlbzovL1xcXCIgKyBhdjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICB9LOivhuWIq+eggSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJzI0MCddLFxcbiAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5kb3BwaW9jZG4uJ10sXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAgICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgICAgICAgICAgY2FjaGVNM3U4OiB0cnVlLFxcbiAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjor4bliKvnoIEpPT57IHJldHVybiBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOivhuWIq+eggSArIFxcXCItdW5jZW5zb3JlZC1sZWFrZWRcXFwiOyB9LOivhuWIq+eggSl9XVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG59KTtcXG5mb3IgKHZhciBpIGluIGFydHMpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwOEI4QlxcXCI+JytwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKSsnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShhcnRzW2ldLCAnYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0JylcXG4gICAgICAgIH1cXG59KVxcbn1cXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbn1cXG5cXG4vL+ezu+WIl1xcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOezu+WIlykmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgdGl0bGU6IFxcXCLns7vliJc6XFxcIixcXG4gICAgICAgdXJsOiBcXFwidG9hc3Q6Ly/ngrnkuobkuZ/kuYjmnInnlKjwn6WyXFxcIixcXG4gICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG59KVxcbmZvciAodmFyIGkgaW4gYXJ0cykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMDA4QjhCXFxcIj4nK3BhcnNlRG9tRm9ySHRtbChhcnRzW2ldLCAnVGV4dCcpKyc8L2ZvbnQ+PC9taWRkbGU+PC9iPicsXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKGFydHNbaV0sICdhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsLy/nu4Tku7bmoLflvI9cXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKVxcbiAgICAgICAgfVxcbn0pXFxufVxcbmQucHVzaCh7XFxuY29sX3R5cGU6XFxcImJsYW5rX2Jsb2NrXFxcIlxcbn0pXFxufVxcbi8v5a+85ryUXFxudHJ5IHtcXG4gICAgdmFyIGRpcmVjdG9yID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjlsI7mvJQpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgaWYgKGRpcmVjdG9yKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5bCO5ryUOlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIGRpcmVjdG9yICsgJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOWwjua8lCkmJmEmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLCAvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogZGlyZWN0b3JcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2gge31cXG4vL+eJh+WVhlxcbnRyeSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIueJh+WVhjpcXFwiLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICB2YXIgbWFrZXJzID0gcGRmaChodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjniYfllYYpJiYudmFsdWUmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzFFOTBGRlxcXCI+JyArIG1ha2VycyArICc8L2ZvbnQ+PC9taWRkbGU+PC9iPicsXFxuICAgICAgICB1cmw6IHBkKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeJh+WVhikmJmEmJmhyZWYnKSArICcmcGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywgLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogbWFrZXJzXFxuICAgICAgICB9XFxuICAgIH0pXFxufSBjYXRjaCB7fVxcblxcbmQucHVzaCh7XFxuY29sX3R5cGU6XFxcImJsYW5rX2Jsb2NrXFxcIlxcbn0pXFxuXFxudmFyIOefreiplSA9IHBkZmgoaHRtbCxcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZUZXh0XFxcIilcXG52YXIgY2lsaSA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJ2JvZHkmJi5pdGVtLmNvbHVtbnMuaXMtZGVza3RvcCcpO1xcbnZhciB0YWJzID0gW1xcXCLpoJDopr1cXFwiLFxcXCLno4Hpj4goXFxcIiArIGNpbGkubGVuZ3RoICsgXFxcIilcXFwiLOefreiplV07XFxuXFxuZnVuY3Rpb24gc2V0VGFicyh0YWJzLCB0YWJ1cmwpIHtcXG4gICAgdmFyIENvbG9yMSA9IFxcXCIjMTNCNjZBXFxcIjtcXG4gICAgZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZSkge1xcbiAgICAgICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCInICsgQ29sb3IxICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXG4gICAgICAgICB9XFxuICAgIHZhciBDb2xvcjIgPSBcXFwiI0ZGMDBGRlxcXCI7XFxuICAgIGZ1bmN0aW9uIGdldEhlYXIodGl0bGUpIHtcXG4gICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yMiArICdcXFwiPicgKyB0aXRsZSArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxuICAgICAgICB9XFxuXFxuICAgIGZvciAodmFyIGkgaW4gdGFicykge1xcbiAgICAgICAgdmFyIHRhYm5hbWUgPSB0YWJzW2ldO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIodGFidXJsLCAnMScpID09IGkgPyBnZXRIZWFkKHRhYm5hbWUpIDogZ2V0SGVhcih0YWJuYW1lKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHRhYm5hbWUsIHRhYnVybCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcih0YWJ1cmwsIGkpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICB9LCB0YWJuYW1lLCB0YWJ1cmwsIGkpXFxuICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgIH1cXG5cXG52YXIgbGlzdHMgPSBbXTtcXG5mdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXG4gICAgZnVuY3Rpb24gcGxheUxpc3RzKCkge1xcbiAgICAgICBpZiAoaW5kZXggPT0gMCkge1xcbi8v6aKE6KeI6KeG6aKRXFxuICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj1ibGFjaz7wn5O66aCQ6Ka96KaW6aC74pGgPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICB1cmw6IE1ZX1VSTCArICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHtcXG4gICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoaHRtbCxcXFwiLm1lc3NhZ2UtYm9keSYmc291cmNlJiZzcmNcXFwiKVxcbiAgICAgICAgICAgICAgICAgICBpZiggIXVybC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikmJnVybCE9PVxcXCJcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6XFxcIiArIHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih1cmw9PVxcXCJcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mspLmnInpoJDopr3lkq9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgICB9Y2F0Y2h7cmV0dXJuIFxcXCJ0b2FzdDovL+aykuaciemgkOimveWSr1xcXCJ9XFxuICAgICAgICAgICAgICAgICAgfSzor4bliKvnoIEpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9XFxuICAgICAgICAgICAgICAgICB9KVxcbiAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9YmxhY2s+8J+TuumgkOimveimlumgu+KRoTwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyAkKCcnKS5sYXp5UnVsZSgo6K+G5Yir56CBKSA9PiB7XFxuICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBcXFwiaHR0cHM6Ly9qYXZzdWJ0aXRsZWQuY29tL3poL3NlYXJjaD9rZXl3b3Jkcz1cXFwiICsg6K+G5Yir56CBXFxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXVybCA9IFxcXCJodHRwczovL2phdnN1YnRpdGxlZC5jb20vXFxcIiArIHBkZmgocmVxdWVzdChzZWFyY2gpLFxcXCJib2R5JiYudmlkZW9ib3gmJmEmJmhyZWZcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlsaXN0ID0gZmV0Y2goY29kZXVybCkubWF0Y2goL2h0dHBzPzpcXFxcL1xcXFwvXFxcXFMrXFxcXC5tM3U4LylbMF1cXG4gICAgICAgICAgICAgICAgICAgIHZhciBwbGF5aGQgPSBmZXRjaChwbGF5bGlzdCkubWF0Y2goL1teXFxcIlxcXFxuXStcXFxcLm0zdTgvZykucG9wKClcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwbGF5bGlzdC5yZXBsYWNlKFxcXCJwbGF5bGlzdC5tM3U4XFxcIixwbGF5aGQpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsXFxuICAgICAgICAgICAgIH1jYXRjaHtyZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKS5pyJ6aCQ6Ka95ZKvXFxcIn1cXG4gICAgICAgICAgICAgICAgICB9LOivhuWIq+eggSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICBleHRyYToge2xpbmVWaXNpYmxlOiBmYWxzZX1cXG4gICAgICAgICAgICAgICAgIH0pXFxuLy/pooTop4jlm77niYdcXG50cnl7XFxuICAgIHZhciBsaXNyID0gcGRmYShodG1sLFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW1cXFwiKVxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCxcXFwiLnByZXZpZXctaW1hZ2VzJiYudGlsZS1pdGVtLDA6OVxcXCIpXFxuaWYobGlzci5sZW5ndGg+MCl7XFxuICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPSNGRjhDMDA+8J+nlvCfj7vigI3imYDvuI/mqKPlk4HlnJblg486IOWFseaciScgKyBsaXNyLmxlbmd0aCArICflvLXlnJbniYfwn5GHPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICB1cmw6IE1ZX1VSTCArICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwaWNzID0gcGRmYShodG1sLFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW1cXFwiKS5tYXAoaXRlbT0+cGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInBpY3M6Ly9cXFwiK3BpY3Muam9pbihcXFwiJiZcXFwiKVxcbiAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9XFxuICAgICAgICAgICAgICAgICB9KSAgIFxcbn0gICAgICAgXFxuICAgIGxpc3QuZm9yRWFjaChpdGVtPT57XFxuICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSxcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogcGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfM19zcXVhcmVcXFwiXFxuICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgfWNhdGNoe30gICAgICAgIFxcbiAgICAgICB9ZWxzZSBpZiAoaW5kZXggPT0gMSkge1xcbi8v56OB5Yqb5YaF5a65XFxudHJ5e1xcbmNpbGkuZm9yRWFjaCh2aWRlbyA9PiB7XFxudmFyIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnYSYmVGV4dCcpO1xcbnRyeXtcXG52YXIgc2l6ZSA9IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy5tZXRhJiZUZXh0JykubWF0Y2goL1xcXFxkKyg/OlxcXFwuXFxcXGQrKT9bZ21dKGIpPy9pKVswXVxcbn1jYXRjaHtcXG52YXIgc2l6ZSA9ICcwLjAwR0InXFxufVxcbnZhciB0YWcgPSBwYXJzZURvbUZvckh0bWwodmlkZW8sICcudGFncyYmVGV4dCcpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGVcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcLj90b3JyZW50L2csICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwuP21wNC9naSwgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXC4/YXZpL2dpLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcLj9oZC9naSwgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXC4/bWt2L2dpLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcXz9zZC9naSwgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXGQrKD86XFxcXC5cXFxcZCspP1tnbV0oYik/L2dpLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcZCvlgIvmlofku7YvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXHMvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvQFtcXFxcdTRlMDAtXFxcXHU5ZmE1XSsvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvQC9nLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcLC9nLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC/jgJAuKj/jgJEvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFsuKj9cXFxcXS9nLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcLj9bXFxcXHU0ZTAwLVxcXFx1OWZhNVxcXFx1MDgwMC1cXFxcdTRlMDBcXFxcdTMwNDAtXFxcXHUzMGZmXSsvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXC4/W1xcXFx1MzA0MC1cXFxcdTMwOUZcXFxcdTMwQTAtXFxcXHUzMEZGXSsvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXlxcXFxkK1xcXFwtLywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXlxcXFwtKy8sICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL15cXFxcXysvLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcKC9nLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcKS9nLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcLSQvLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcIyQvLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcKFxcXFx3K1xcXFwpL2csICcnKVxcbiAgICAgICAgLFxcbiAgICAgICAgZGVzYzogdGFnICsgJ/Cfk4BcXFxcdCcgKyBzaXplICsgJ1xcXFx0XFxcXHTwn5eTXFxcXHQnICtwYXJzZURvbUZvckh0bWwodmlkZW8sICcudGltZSYmVGV4dCcpLFxcbiAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy9PY3Fwai5wbmcnLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbSh2aWRlbywgJ2EmJmhyZWYnKSwvL+mTvuaOpVxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLC8v57uE5Lu25qC35byPXFxuICAgIH0pO1xcbn0pXFxufWNhdGNoe31cXG4gICAgICAgfWVsc2UgaWYgKGluZGV4ID09IDIpIHtcXG50cnl7XFxuICAgICAgIHZhciB1cmwgPSBwZChodG1sLFxcXCIudGFicyYmbGlbZGF0YS1tb3ZpZS10YWItdGFyZ2V0PXJldmlld1RhYl0mJmEmJmRhdGEtdXJsXFxcIilcXG4gICAgICAgdmFyIGggPSBmZXRjaCh1cmwpXFxuICAgICAgIHZhciBsaXN0ID0gcGRmYShoLFxcXCIubWVzc2FnZS1ib2R5JiYucmV2aWV3LWl0ZW06aGFzKC5yZXZpZXctdGl0bGUpXFxcIilcXG4gICAgICAgbGlzdC5mb3JFYWNoKGl0ZW09PntcXG4gICAgICAgICB2YXIgZGVzYyA9ICc8bWlkZGxlPjxmb250IGNvbG9yPSNGRjhDMDA+JyArIHBkZmgoaXRlbSxcXFwiLnJldmlldy10aXRsZS0tLmxpa2VzLS0ucmVwb3J0JiZUZXh0XFxcIikgKyAnPC9mb250PjwvbWlkZGxlPic7ICAgICAgICAgICAgICBcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogZGVzYyArICc8YnI+JyArICc8c21hbGw+PGZvbnQgY29sb3I9I2ZmNjg3Nz5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JyArIHBkZmgoaXRlbSxcXFwiLmNvbnRlbnQmJlRleHRcXFwiKSArICc8L2ZvbnQ+PC9zbWFsbD4nLCAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTpmYWxzZX1cXG4gICAgICAgICAgICAgICB9KVxcbiAgICAgICAgIH0pXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9IzEzQjY2QT7mm7TlpJrnn63oqZXlj6/miJDkuLpWSVDmiJboh7PlrpjmlrlBcHDkuK3mn6XnnIs8L2ZvbnQ+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjor4bliKvnoIEpID0+IHsgICAgICAgICAgICAgICBcXG4gICAgICAgICBvcGVuQXBwSW50ZW50KCd4eHgucG9ybmh1Yi5mdWNrJywgJ3h4eC5wb3JuaHViLmZ1Y2suTWFpbkFjdGl2aXR5Jywge2ludGVudERhdGE6IOivhuWIq+eggX0pXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIOivhuWIq+eggVxcbiAgICAgICAgICAgICAgICAgIH0s6K+G5Yir56CBKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTpmYWxzZX1cXG4gICAgICAgICAgICAgICB9KVxcbn1jYXRjaHt9XFxuICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgcGxheUxpc3RzKCkgICAgICAgIFxcbiAgICAgICAgICAgIH1cXG5cXG5zZXRUYWJzKHRhYnMsIE1ZX1VSTCk7XFxuc2V0TGlzdHMobGlzdHMsIGdldE15VmFyKE1ZX1VSTCwgJzEnKSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwRkY7XFxcIj5UQSjlgJEp6YKE5Ye65ryU6YGOPC9zcGFuPicsXFxuICAgIHBpY191cmw6IFxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvMTAwLnBuZ1xcXCIsXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbn0pO1xcblxcbnRyeXtcXG52YXIgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJ2JvZHkmJi5tZXNzYWdlOm1hdGNoZXMo6YKE5Ye65ryU6YGOKSYmLnRpbGUtc21hbGwmJmEnKTsvL+WIl+ihqFxcblxcbmxpc3QuZm9yRWFjaCh2aWRlbyA9PiB7XFxuICAgIHZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy52aWRlby1udW1iZXImJlRleHQnKSArICcgJyArIHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJ2EmJnRpdGxlJyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogIHRpdGxlLFxcbiAgICAgICAgZGVzYzogcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiBwYXJzZURvbSh2aWRlbywgJ2ltZyYmc3JjJykgKyBcXFwiQFJlZmVyZXI9XFxcIiwvL+WbvueJh1xcbiAgICAgICAgdXJsOiBwYXJzZURvbSh2aWRlbywgJ2EmJmhyZWYnKSArICdAcnVsZT1qczokLnJlcXVpcmUoXFxcImVqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZScsLy/nu4Tku7bmoLflvI9cXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiB0aXRsZSxcXG4gICAgICAgIH1cXG4gIH0pO1xcbn0pICAgXFxufSBjYXRjaCAoZXJyKSB7XFxuICAvL2NvbnNvbGUubG9nKCfmsqHmnInlh7rmvJTliJfooagnLCBlcnIpO1xcbn07XFxuXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwRkY7XFxcIj7kvaDlj6/og73kuZ/llpzmraE8L3NwYW4+JyxcXG4gICAgcGljX3VybDogXFxcImh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS8xMDAucG5nXFxcIixcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxufSk7XFxuXFxudHJ5e1xcbnZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLm1lc3NhZ2U6bWF0Y2hlcyjkvaDlj6/og73kuZ/llpzmraEpJiYudGlsZS1zbWFsbCYmYScpOy8v5YiX6KGoXFxuXFxubGlzdC5mb3JFYWNoKHZpZGVvID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLnZpZGVvLW51bWJlciYmVGV4dCcpICsgJyAnICsgcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnYSYmdGl0bGUnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAgdGl0bGUsXFxuICAgICAgICBkZXNjOiBwYXJzZURvbUZvckh0bWwodmlkZW8sICcudmlkZW8tbnVtYmVyJiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nJiZzcmMnKSArIFxcXCJAUmVmZXJlcj1cXFwiLC8v5Zu+54mHXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfM19tYXJxdWVlJywvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlLFxcbiAgICAgICAgfVxcbiAgfSk7XFxufSkgICBcXG59IGNhdGNoIChlcnIpIHtcXG4gIC8vY29uc29sZS5sb2coJ+ayoeacieaOqOiNkOWIl+ihqCcsIGVycik7XFxufTtcXG5cXG59Y2F0Y2h7XFxudmFyIOivhuWIq+eggSA9IGdldFBhZ2VUaXRsZSgpLnNwbGl0KFxcXCIgXFxcIilbMF0ucmVwbGFjZShcXFwiRkMyXFxcIixcXFwiRkMyLVBQVlxcXCIpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICBcXFwiZmMy6ZyA6KaBVklQ55m75b2VXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCIzMDDlpKfmtIvvvIzkuI3nnIvkuZ/nvaLvvIzosLfmrYzmkJzntKLkuIDkuItcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1cXFwiICsg6K+G5Yir56CBLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgIGV4dHJhOntsaW5lVmlzaWJsZTpmYWxzZX1cXG4gICAgICAgIH0pO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3Rvb2wnLCB7fSkpLnJ1bGUpO1xcblxcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRouS4gOe6p+aUtuiXj+mhtemdolwiLFwicGF0aFwiOlwi5pS26JePXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBnZXRIZWFkKHRpdGxlLGNvbG9yKSB7XFxuICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48YmlnPjxmb250IGNvbG9yPVxcXCInK2NvbG9yKydcXFwiPicgKyB0aXRsZSArICc8L2Zyb250PjwvYmlnPjwvc3Ryb25nPic7XFxufVxcbmxvZyhNWV9IT01FKVxcbnZhciBsYWJlbCA9IGdldFZhcihcXFwibGFiZWxcXFwiKSA/IGdldFZhcihcXFwibGFiZWxcXFwiKSA6IFxcXCLlvbHniYdcXFwiO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBsYWJlbCA9PSBcXFwi5b2x54mHXFxcIiA/IGdldEhlYWQoXFxcIj3ii5nlvbHniYfii5g9XFxcIixcXFwiI0ZGMDBGRlxcXCIpIDogZ2V0SGVhZChcXFwiPeKLmeW9seeJh+KLmD1cXFwiLFxcXCIjRDNEM0QzXFxcIiksXFxuICAgICAgIGltZzogXFxcImh0dHBzOi8vY2RuMS5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL3VpLXVzZXItaW50ZXJmYWNlLTkvMTAwMC9WaWRlb19DYW1lcmEtMTI4LnBuZ1xcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOnB1dFZhcignbGFiZWwnLCflvbHniYcnKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i5oiQ5YqfJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCdcXG4gICAgfSk7XFxufVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGxhYmVsID09IFxcXCLmvJTlk6FcXFwiID8gZ2V0SGVhZChcXFwiPeKLmea8lOWToeKLmD1cXFwiLFxcXCIjRkYwMEZGXFxcIikgOiBnZXRIZWFkKFxcXCI94ouZ5ryU5ZOh4ouYPVxcXCIsXFxcIiNEM0QzRDNcXFwiKSxcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vY2RuMi5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL3ZhbGVudGluZS1kYXktMTYvNTEyLzcwNl9wZW5fbG92ZV9oZWFydF93ZWRkaW5nX3ZhbGVudGluZV92YWxlbnRpbmVzX2RheV9sb3ZlLTEyOC5wbmdcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpwdXRWYXIoJ2xhYmVsJywn5ryU5ZOhJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouaIkOWKnydcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uXzJfcm91bmQnXFxuICAgIH0pO1xcblxcblxcbnZhciB1ID0gbGFiZWwgPT0gXFxcIuW9seeJh1xcXCIgPyAnaGlrZXI6Ly9maWxlcy9ydWxlcy9hcG9sbG8vamF2ZGJfdmlkZW8udHh0JyA6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2Fwb2xsby9qYXZkYl9hY3Rvci50eHQnO1xcbnZhciBzdHIgPSByZWFkRmlsZSh1LCAwKTtcXG5pZiAoc3RyKSB7XFxuICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShzdHIpO1xcbiAgICBsaXN0LmZvckVhY2goKGxpc3QpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpc3Quc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgaW1nOiBsaXN0LnNwbGl0KCdAQCcpWzFdLFxcbiAgICAgICAgICAgIHVybDogbGFiZWwgPT0gXFxcIua8lOWToVxcXCI/J2hpa2VyOi8vcGFnZS95aic6J2hpa2VyOi8vcGFnZS9laicsXFxuICAgICAgICAgICAgY29sX3R5cGU6IGxhYmVsID09IFxcXCLmvJTlk6FcXFwiID8gJ2NhcmRfcGljXzMnIDogJ21vdmllXzInLFxcbiAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgIHVybDogbGlzdC5zcGxpdCgnQEAnKVsyXS5yZXBsYWNlKGdldE15VmFyKCd5b25naml1JyksTVlfSE9NRSksXFxuICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgdGl0bGU6ICflj5bmtojmlLbol48nLFxcbiAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChsaXN0LCB1KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShmZXRjaFBDKHUpIHx8ICdbXScpO1xcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoeCA9PiB4ICE9IGxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgIH0sIGxpc3QsIHUpXFxuICAgICAgICAgICAgICB9XSxcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRouS4gOe6p+mhtemdoueZu+W9lVwiLFwicGF0aFwiOlwi55m75b2VXCIsXCJydWxlXCI6XCJcXG5pZihmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9qYXZkYl9jb29raWUudHh0Jykpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiaWc+PGZvbnQgY29sb3I9I0ZGMDBGRj7otKblj7flt7LnmbvlvZU8L2ZvbnQ+PC9iaWc+JyxcXG4gICAgICAgICAgICBkZXNjOiAn4oCc4oCc4oCd4oCdJyArICfliIfmjaLliIbnsbvliLfmlrDpobXpnaLlhoXlrrknLmZvbnRjb2xvcignI0ZGMDBGRicpLmJpZygpLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICB9KTtcXG4gICAgfWVsc2V7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAn54K55Ye755m75b2V6LSm5Y+3Jy5mb250Y29sb3IoJyNGRjAwRkYnKS5iaWcoKSxcXG4gICAgICAgIHVybDogdHJ1ZV91cmwgKyAkKCcnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnLFxcbiAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2xpc3QmJnNjcmVlbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICB1YTogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVjaygpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjdGFncycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY28gPSBmYmEuZ2V0Q29va2llKHUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2ZiYS5sb2coJ2NvOjo6Ojo6JyArIGNvKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvLmluY2x1ZGVzKCdyZW1lbWJlcl9tZV90b2tlbicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEucGFyc2VMYXp5UnVsZSgkJCQoKS5sYXp5UnVsZSgoY28pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvamF2ZGJfY29va2llLnR4dCcsIGNvKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6LSm5Y+35bey55m75b2VJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrLCA1MDApO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBNWV9VUkwpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgIH0pO1xcblxcbn1cIn1dIiwiaWNvbiI6Imh0dHBzOi8vaW1nLnZpbnVhLmNuL2ltYWdlcy96ckxrUS5wbmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment