xiaomianao666

小程序:JavDB

Jan 27th, 2024
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@JavDB@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiSmF2REIiLCJhdXRob3IiOiJSIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly9qYXZkYjUyMy5jb20jI2Z5cGFnZSIsInZlcnNpb24iOjIwMjQwMTI2LCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InZpZGVvIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG52YXIgZCA9IFtdO1xuYWRkTGlzdGVuZXIoXCJvbkNsb3NlXCIsICQudG9TdHJpbmcoKCkgPT4ge1xuICAgIGxldCBrZXlzID0gbGlzdE15VmFyS2V5cygpO1xuICAgIGZvciAobGV0IGl0IG9mIGtleXMpIHtcbiAgICAgICAgY2xlYXJNeVZhcihpdCk7XG4gICAgfVxufSkpO1xuXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxuICAgIHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXG59XG5jb25zdCDkuIvkuIDpobUgPSBcInBkKGh0bWwsICdhOm1hdGNoZXMo5LiL5LiAKSYmaHJlZicpXCI7XG5jb25zdCBwYWdlID0gTVlfUEFHRTtcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UveWknKSkucnVsZSlcblxudmFyIOWumuS9jeS/oeaBryA9IFt7XG4gICAg5aSn57G75a6a5L2NOiAnLm5hdmJhci1zdGFydCYmLm5hdmJhci1saW5rJyxcbiAgICDlop7liqA6IFsnPGEgaHJlZj1cIicgKyBNWV9IT01FICsgJ1wiPummlumhtTwvQT4nLCc8YSBocmVmPVwiL2xvZ2luXCI+5pS26JePPC9BPiddLFxuICAgIOWwj+exuzogJ2JvZHkmJmE6bm90KDptYXRjaGVzKPCflKUpKScsXG4gICAg6ZO+5o6l5aSE55CGOiAodSkgPT4ge1xuICAgICAgICBsZXQgdXJsID0gdS5yZXBsYWNlKC90eXBlKFxcL1xcZCspXFwuaHRtbC8sICdzaG93JDEtLS0tLS0tLS0tLS5odG1sJyk7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICB9XG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnYm9keSYmLnRhYnN8fC5idXR0b25zLmhhcy1hZGRvbnMnLFxuICAgIOWwj+exuzogJ2JvZHkmJmE6bm90KDptYXRjaGVzKOeDreaSrXwyNTB85bCB6Z2ifOeMnOS9oCkpJyxcbn0sIHtcbiAgICDkuIDnuqflrprkvY06ICcjdGFncyYmZHQnLFxuICAgIOWwj+exuzogJ2JvZHkmJmE6bm90KDptYXRjaGVzKOabtOWkmikpJyxcbn0se1xuICAgIOS4gOe6p+WumuS9jTogJy5hY3Rvci1maWx0ZXImJi5maWx0ZXItc2xpZGVyOm1hdGNoZXMo6Lqr6auYKScsXG4gICAg5bCP57G7OiAnYm9keSYmLmZpbHRlci1zbGlkZXInLFxuICAgIOihpeWFhTogW1xuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE0NyZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTMwLTE0NycsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTQ3JTJDMTYwJmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNDctMTYwJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNjAlMkMxNjUmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE2MC0xNjUnLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTE2NSUyQzE2OSZjdXA9MCUyQzE1JmJ1c3Q9NzAlMkMxMjAmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+MTY1LTE2OScsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTY5JTJDMTc1JmN1cD0wJTJDMTUmYnVzdD03MCUyQzEyMCZ3YWlzdD01MCUyQzkwJmhpcHM9NzAlMkMxMjBcIj4xNjktMTc1Jyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xNzUlMkMxODUmY3VwPTAlMkMxNSZidXN0PTcwJTJDMTIwJndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPjE3NS0xODUnLFxuXSxcbiAgICDmoIfpopg6ICdUZXh0JyxcbiAgICDpk77mjqU6ICdpbnB1dCYmaWQuanM6aW5wdXQucmVwbGFjZShcImFmLWhlaWdodC1pbnB1dFwiLFwiL2FjdG9ycy9jZW5zb3JlZFwiKScsXG59LHtcbiAgICDkuIDnuqflrprkvY06ICcuYWN0b3ItZmlsdGVyJiYuZmlsdGVyLXNsaWRlcjptYXRjaGVzKOe9qeadryknLFxuICAgIOWwj+exuzogJ2JvZHkmJi5maWx0ZXItc2xpZGVyJyxcbiAgICDooaXlhYU6IFtcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTAlMkMxJmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+QScsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD0xJTJDMyZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkJDJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTMlMkM0JmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+RCcsXG4nPGlucHV0IGlkPVwiL2FjdG9ycy9jZW5zb3JlZD90PWZpbHRlciZhZ2U9MTklMkM2NSZoZWlnaHQ9MTMwJTJDMTg1JmN1cD00JTJDNiZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkVGJyxcbic8aW5wdXQgaWQ9XCIvYWN0b3JzL2NlbnNvcmVkP3Q9ZmlsdGVyJmFnZT0xOSUyQzY1JmhlaWdodD0xMzAlMkMxODUmY3VwPTYlMkM4JmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+R0gnLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9OCUyQzEwJmJ1c3Q9NzAlMkMxMTUmd2Fpc3Q9NTAlMkM5MCZoaXBzPTcwJTJDMTIwXCI+SUonLFxuJzxpbnB1dCBpZD1cIi9hY3RvcnMvY2Vuc29yZWQ/dD1maWx0ZXImYWdlPTE5JTJDNjUmaGVpZ2h0PTEzMCUyQzE4NSZjdXA9MTAlMkMxNSZidXN0PTcwJTJDMTE1JndhaXN0PTUwJTJDOTAmaGlwcz03MCUyQzEyMFwiPkt+Jyxcbl0sXG4gICAg5qCH6aKYOiAnVGV4dCcsXG4gICAg6ZO+5o6lOiAnaW5wdXQmJmlkLmpzOmlucHV0LnJlcGxhY2UoXCJhZi1jdXAtaW5wdXRcIixcIi9hY3RvcnMvY2Vuc29yZWRcIiknLFxufV1cblxuTVlfVVJMID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdXG5sZXQgdHJ1ZV91cmwgPSBnZXRUcnVlbGluayhNWV9SVUxFLnVybCwgTVlfVVJMLCBwYWdlKTtcbk1ZX1VSTD10cnVlX3VybDtcbmxvZyh0cnVlX3VybClcbnZhciBodG1sID0gZmV0Y2godHJ1ZV91cmwsIHtyZWRpcmVjdDpmYWxzZX0pXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXG59KTtcbmRjLuW8gOWQr+aKmOWPoChmYWxzZSlcbmRjLuW8gOWQr+aQnOe0oigpXG5kYy7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxuXG52YXIgcGFyc2VSdWxlID0ge1xuICAgIGxpc3Q6ICdib2R5JiYuaXRlbScsIC8v57uf5LiAaXRlbVxuICAgIHRpdGxlOiAnLnZpZGVvLXRpdGxlJiZUZXh0JyxcbiAgICBkZXNjMTogJy50YWcmJlRleHQnLFxuICAgIGRlc2M6ICcubWV0YSYmVGV4dCcsXG4gICAgaW1nOiAnaW1nfHxhJiZzcmN8fGRhdGEtb3JpZ2luYWwnLFxuICAgIHVybDogJ2EmJmhyZWYnLFxuICAgIHJlZjogJ0BSZWZlcmVyPScsXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcbiAgICBpbXQ6IGZhbHNlLFxuICAgIC8vYmFja2ltZzogdHJ1ZSxcbn1cblxudmFyIHBhcnNlUnVsZTEgPSB7XG4gICAgbGlzdDogJ2JvZHkmJi5hY3Rvci1ib3gnLCAvL+e7n+S4gGl0ZW1cbiAgICB0aXRsZTogJ2EmJnRpdGxlJyxcbiAgICBkZXNjOiAnLm1ldGEmJlRleHQnLFxuICAgIGltZzogJ2ltZ3x8YSYmc3JjfHxkYXRhLW9yaWdpbmFsJyxcbiAgICB1cmw6ICdhJiZocmVmJyxcbiAgICByZWY6ICdAUmVmZXJlcj0nLFxuICAgIGNvbF90eXBlOiAnY2FyZF9waWNfMycsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUyID0ge1xuICAgIGxpc3Q6ICcjc2VyaWVzJiYuYm94JywgLy/nu5/kuIBpdGVtXG4gICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzMwLnN2Z1wiKScsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbnZhciBwYXJzZVJ1bGUzID0ge1xuICAgIGxpc3Q6ICcjbWFrZXJzJiYuYm94JywgLy/nu5/kuIBpdGVtXG4gICAgdGl0bGU6ICdzdHJvbmcmJlRleHQnLFxuICAgIGRlc2M6ICdzcGFuJiZUZXh0JyxcbiAgICBpbWc6ICdhJiZocmVmLmpzOmlucHV0LnJlcGxhY2UoaW5wdXQsXCJodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21vdmllLzMwLnN2Z1wiKScsXG4gICAgdXJsOiAnYSYmaHJlZicsXG4gICAgcmVmOiAnQFJlZmVyZXI9JyxcbiAgICBjb2xfdHlwZTogJ2F2YXRhcicsXG4gICAgaW10OiBmYWxzZSxcbiAgICAvL2JhY2tpbWc6IHRydWUsXG59XG5cbkNyZWF0ZS5ydWxlTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUpO1xuQ3JlYXRlLkxpc3QoZCwgaHRtbCwgcGFyc2VSdWxlMSk7XG5DcmVhdGUuTGlzdChkLCBodG1sLCBwYXJzZVJ1bGUyKTtcbkNyZWF0ZS5MaXN0KGQsIGh0bWwsIHBhcnNlUnVsZTMpO1xuYXV0b1BhZ2UoKTtcblxuc2V0UmVzdWx0KGQpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkjIyoqIiwiZ3JvdXAiOiLikaBSIiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXTtcbmxldCBIT01FID0gTVlfUlVMRS51cmwuc3BsaXQoXCIjI1wiKVsxXTtcbmxldCBrZXkgPSBNWV9VUkwuc3BsaXQoXCIjI1wiKVsxXTtcbmQucHVzaCh7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6IGa5ZCI5pCc57SiXCIgKyBrZXksXG4gICAgdXJsOiBcImhpa2VyOi8vZW1wdHkjI1wiICsgSE9NRSArIFwiL3NlYXJjaD9mPWFsbCZwYWdlPWZ5cGFnZSZxPVwiICsga2V5ICsgJ0BydWxlPWpzOiQucmVxdWlyZShcInlqXCIpJyxcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IGtleSxcbiAgICAgICAga2V5OiBrZXlcbiAgICB9XG59KTtcblxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IioiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIvL0BMb3lEZ0lr5aSn5L2s5YaZ55qE6Ieq5Yqo5pu05paw77yM5aSN5Yi26buP6LS05bCx5a6M5LqL77yM5oSf6LCi5aSn5L2s55qE5YiG5LqrXG5cbiAgICAgICAgICAgIGxldCBNWV9IT01FID0gTVlfUlVMRS51cmwubWF0Y2goL2h0dHBzPzpcXC9cXC9bXiMvPyZdKy8pWzBdO1xuICAgICAgICAgICAgbGV0IGh0bWwgPSBKU09OLnBhcnNlKGZldGNoKE1ZX0hPTUUse29ubHlIZWFkZXJzOnRydWV9KSk7XG5pZiAoaHRtbC5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICBjb25maXJtKHtcbiAgICAgICAgdGl0bGU6IFwi572R5Z2A5LiN6YCaLOaYr+WQpuabtOaWsFwiLFxuICAgICAgICBjb250ZW50OiBcIue/u+WimeWQjuWGjeeCueWHu+ehruWumlxcbuaIluiHquihjOajgOafpee9keWdgFwiLFxuICAgICAgICBjb25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgeW9uZ2ppdSA9IFwiaHR0cHM6Ly9qYXZkYi5jb21cIjtcbiAgICAgICAgICAgIGxldCBodG1sID1KU09OLnBhcnNlKGZldGNoKHlvbmdqaXUse29ubHlIZWFkZXJzOnRydWV9KSk7XG4gICAgICAgICAgICBpZiAoaHRtbC5zdGF0dXNDb2RlID09IDAgfHwgIWh0bWwpIHtcbiAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v5pu05paw5aSx6LSlLOivt+e/u+WimSzosKLosKJcIlxuICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHNob3dMb2FkaW5nKFwi5q2j5Zyo6I635Y+W5Y+v55So5Z+f5ZCNXCIpO1xuICAgICAgICAgICAgdmFyIGhvbWUgPSBNWV9SVUxFLnVybC5tYXRjaCgvaHR0cHM/OlxcL1xcL1teIy8/Jl0rLylbMF07XG4gICAgICAgICAgICB2YXIgaHRtID0gZmV0Y2goeW9uZ2ppdSlcbiAgICAgICAgICAgIHZhciBob3N0ID0gcGRmaChodG0sIFwiYm9keSYmZGF0YS1kb21haW5cIik7XG4gICAgICAgICAgICBoaWRlTG9hZGluZygpO1xuICAgICAgICAgICAgaWYgKCFob3N0KSByZXR1cm4gXCJ0b2FzdDovL+iOt+WPluWksei0pVwiO1xuICAgICAgICAgICAgaWYgKGhvbWUgPT0gaG9zdCkgcmV0dXJuIFwidG9hc3Q6Ly/mmK/mnIDmlrDnvZHlnYDvvIzor7fnqI3lkI7liLfmlrDor5Xor5VcIjtcbiAgICAgICAgICAgIHRvYXN0KGhvc3QpO1xuICAgICAgICAgICAgLyhodHRwcz86XFwvXFwvW14jLz8mXSspLy50ZXN0KE1ZX1JVTEUudXJsKTtcbiAgICAgICAgICAgIE1ZX1JVTEUudXJsID0gTVlfUlVMRS51cmwucmVwbGFjZShSZWdFeHAuJDEsIGhvc3QpO1xuICAgICAgICAgICAgcmV0dXJuIFwicnVsZTovL1wiICsgYmFzZTY0RW5jb2RlKFwi5rW36ZiU6KeG55WM77+laG9tZV9ydWxl77+lXCIgKyBKU09OLnN0cmluZ2lmeShNWV9SVUxFKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v8J+Yh1wiO1xuICAgICAgICB9XG4gICAgfSk7XG4gICB9XG5cbmlmIChyZXF1ZXN0KCdoaWtlcjovL2hvbWVAQlRTT1cnKSA9PSAnbnVsbCcpIHtcbiAgICBjb25maXJtKHtcbiAgICAgICAgdGl0bGU6ICfkvp3otZbmo4DmtYsnLFxuICAgICAgICBjb250ZW50OiAn5qOA5rWL5Yiw57y65bCR5bCP56iL5bqPQlRTT1dcXG7or7flr7zlhaUhJyxcbiAgICAgICAgY29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlUGFzdGUoXCJodHRwczovL2NtZC5pbS9pNWlqXCIpO1xuICAgICAgICB9XG4gICAgfSlcbn0iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGg5LiA57qn5YiG57G75YiX6KGoXCIsXCJwYXRoXCI6XCJ5aVwiLFwicnVsZVwiOlwianM6XFxuLypcXG5ieSDOsSh6ZXRhbHBoYSlcXG7kuIDnuqflsIHoo4VcXG7liqjmgIHliIbnsbsg5YiX6KGo5Yib5bu6IOiHquWKqOS4i+S4gOmhtVxcbnZlciAyMDIzMTAxNyAxLjBcXG4qL1xcblxcbi8v6ZqP5py66aKc6ImyXFxudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7XFxuICAgIHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcXG59XFxuXFxuLy/liqjmgIHliIbnsbtcXG5mdW5jdGlvbiBkeW5hbWljQ2xhc3Mob3B0aW9ucykge1xcbiAgICBjb25zdCBvYmogPSB7XFxuICAgICAgICAvL+m7mOiupOWAvFxcbiAgICAgICAgbGF5b3V0OiBcXFwidW5kZWZpbmVkXFxcIixcXG4gICAgICAgIGh0bWw6IFxcXCJlbXB0eVxcXCIsXFxuICAgICAgICBwYWdlOiAwLFxcbiAgICAgICAg5YiG57G76aKc6ImyOiBcXFwiI0ZBNzI5OFxcXCIsXFxuICAgICAgICDmipjlj6A6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIp1xcXCIuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICDlsZXlvIA6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIqFxcXCIuZm9udGNvbG9yKFxcXCIjRkYwMDAwXFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICBvcGVuOiB0cnVlLFxcbiAgICAgICAgc3RhdGU6IE1ZX1JVTEUudXJsLFxcbiAgICAgICAgc2VhcmNoOiBmYWxzZSxcXG4gICAgICAgIGNsZWFyczogW10sXFxuICAgICAgICBjbGVhcmFsbDogW1xcXCJ5aV9maXJzdHBhZ2VcXFwiXSxcXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcXG5cXG4gICAgICAgIOmihOiuvihwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcGFyYW0gPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyYW0pLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XFxuICAgICAgICAgICAgICAgIC8vIOWvueavj+S4quWxnuaAp+WQjeaJp+ihjOaTjeS9nFxcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtW3Byb3BlcnR5XTsgLy8g6I635Y+W5bGe5oCn5YC8XFxuICAgICAgICAgICAgICAgIC8vIOWcqOi/memHjOaJp+ihjOaCqOeahOaTjeS9nFxcbiAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocHJvcGVydHkgKyBcXFwiOlxcXCIgKyB2YWx1ZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0sXFxuICAgICAgICBldmFsSlNSdWxlKGl0ZW0sXFxuICAgICAgICAgICAganNSdWxlKSB7XFxuICAgICAgICAgICAgbGV0IHJ1bGUgPSBqc1J1bGUucmVwbGFjZShcXFwiQGpzOlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBydWxlID0gcnVsZS50cmltKCk7XFxuICAgICAgICAgICAgLy9sb2coJC5zdHJpbmdpZnkocnVsZSkpXFxuICAgICAgICAgICAgbGV0IGlucHV0ID0gaXRlbTtcXG4gICAgICAgICAgICBpZiAocnVsZS5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAgICAgKiDov5jljp/miJAgJC50b1N0cmluZyguLi4pIOeahOacgOe7iOe7k+aenO+8jOi+vuWIsOacgOe7iOWkhOeQhuaWueW8j+i3n+S4iumdoueahCBpZiDkuIDoh7TnmoTnm67nmoRcXG4gICAgICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBcXFwiKCgpID0+IHtcXFwiICsgcnVsZSArIFxcXCJ9KSgpXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VGl0bGUoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB0aXRsZVJ1bGUgPSBjYXRlZ29yeSB8fCBcXFwiYSYmVGV4dFxcXCI7XFxuICAgICAgICAgICAgaWYgKHRpdGxlUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFVybChzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB1cmxSdWxlID0gY2F0ZWdvcnku6ZO+5o6lIHx8IFxcXCJhJiZocmVmXFxcIjtcXG4gICAgICAgICAgICBpZiAodXJsUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGQoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeS7pk77mjqXlpITnkIYgPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBjYXRlZ29yeS7pk77mjqXlpITnkIYodXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHVybCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc051bGwocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzQm9vbGVhbih2YXJpYWJsZSkge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgIT09IFxcXCJib29sZWFuXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWQr+aKmOWPoOivt+S8oOWFpeW4g+WwlOWAvFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICDmuIXpmaQobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGxpc3QuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5riF6Zmk5oql6ZSZOuivt+S8oOWIl+ihqFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmNsZWFycyA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5YWo5riFKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICBsaXN0ID0gYy5jb25jYXQobGlzdCk7XFxuICAgICAgICAgICAgdGhpcy5jbGVhcmFsbCA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5rqQ56CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5odG1sID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg55WM6Z2iKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDpobXnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnirbmgIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5pCc57SiKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5oqY5Y+gKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuaXNCb29sZWFuKGlucHV0KTtcXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICBzZXRUaXRsZShrLCBpLCB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIGsgPT0gaSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdC5mb250Y29sb3IodGhpcy7liIbnsbvpopzoibIpIDogdDtcXG4gICAgICAgIH0sXFxuICAgICAgICBhY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5riF6Zmk54q25oCBXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKG9iaik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKG9iai5zdGF0ZSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJoZWFkLmNhdGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuICAgICAgICAgICAgICAgICAgICBvYmouYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBvYmouY2wuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIH0sIG9iaiksXFxuICAgICAgICAgICAgfSwgXTtcXG4gICAgICAgIH0sXFxuICAgICAgICBjaGVja1BhcmFtKCkge1xcbiAgICAgICAgICAgIHZhciBvYmogPSB7fTtcXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlID09IDAgJiYgdHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXpobXnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSB0aGlzLnBhZ2U7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gcGFnZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5odG1sID09IFxcXCJlbXB0eVxcXCIgJiYgdHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmupDnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSB0aGlzLmh0bWw7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gaHRtbDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT0gXFxcInVuZGVmaW5lZFxcXCIgJiYgdHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXnlYzpnaJcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSB0aGlzLmxheW91dDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSBkO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBvYmo7XFxuICAgICAgICB9LFxcbiAgICAgICAg5Yib5bu65Yqo5oCB5YiG57G7KHJ1bGVPYmopIHtcXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBbXTtcXG4gICAgICAgICAgICBsZXQgY2F0ZXMgPSBbXTtcXG4gICAgICAgICAgICBpZiAocnVsZU9iaiA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcnVsZU9iaiA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+W8gOWni1xcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5jaGVja1BhcmFtKCk7XFxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHBhcmFtLumhteeggTtcXG4gICAgICAgICAgICBjb25zdCBodG1sID0gcGFyYW0u5rqQ56CBO1xcbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJhbS7nlYzpnaI7XFxuICAgICAgICAgICAgY29uc3Qg54q25oCBID0gdGhpcy5zdGF0ZTtcXG4gICAgICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaDtcXG4gICAgICAgICAgICBjb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICBjb25zdCDmipjlj6DnirbmgIEgPSB0aGlzLm9wZW47XFxuICAgICAgICAgICAgdmFyIOWxleW8gCA9IHRoaXMu5bGV5byAO1xcbiAgICAgICAgICAgIHZhciDmipjlj6AgPSB0aGlzLuaKmOWPoDtcXG4gICAgICAgICAgICB2YXIg5YWo5riFID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICB2YXIg5riF6ZmkID0gdGhpcy5jbGVhcnM7XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/nu5PmnZ9cXG4gICAgICAgICAgICBsZXQgaW5pdF9jYXRlID0gbmV3IEFycmF5KDIwKS5maWxsKFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShcXG4gICAgICAgICAgICAgICAgZ2V0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBpZiAoc2VhcmNoICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcIidoaWtlcjovL3NlYXJjaD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZzPScraW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwia2V5d29yZFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICBydWxlT2JqLmZvckVhY2goKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coeClcXG4gICAgICAgICAgICAgICAgaWYgKHguanNvbiAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHguanNvbi5tYXAoayA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKEpTT04uc3RyaW5naWZ5KGspLnJlcGxhY2UoL15cXFxcW3xcXFxcXSQvZywgJycpKVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIC8vY2F0ZWdvcmllcy5wdXNoKHguanNvbilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5aSn57G75a6a5L2NLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgeC7lpKfnsbvlrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW3BkZmEoaHRtbCwgeC7lpKfnsbvlrprkvY0pLmpvaW4oJ1xcXFxuJyldO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuXFxuXFxuICAgICAgICB2YXIg5LiA57qnID0gbGlzdC5tYXAoKHMpID0+IHtcXG4gICAgICAgICAgdmFyIHNsaXN0ID0gW107XFxuICAgICAgICAgIGlmICghKFxcXCLlsI/nsbtcXFwiIGluIHgpKSB7XFxuICAgICAgICAgICAgeC7lsI/nsbsgPSBcXFwiYm9keSYmYTpub3QoOm1hdGNoZXMo6aaW6aG1KSk6bm90KGE6bm90KFtocmVmXSkpXFxcIjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoeC7lsI/nsbsuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgc2xpc3QgPSB0aGlzLmV2YWxKU1J1bGUocywgeC7lsI/nsbspO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHNsaXN0ID0gcGRmYShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgIGlmICgoJ+WinuWKoCcgaW4geCkpIHtcXG4gICAgICAgICAgICBpZiAoeC7lop7liqAuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICB4LuWinuWKoCA9IGV2YWwoeC7lop7liqApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzbGlzdCA9IHgu5aKe5YqgLmNvbmNhdChzbGlzdCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgaWYgKCgn6KGl5YWFJyBpbiB4KSkge1xcbiAgICAgICAgICAgIGlmICh4LuihpeWFhS5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgIHgu6KGl5YWFID0gZXZhbCh4LuihpeWFhSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHNsaXN0ID0gc2xpc3QuY29uY2F0KHgu6KGl5YWFKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICAvLy0t6aKd5aSW5aSE55CGLS1cXG4gICAgICAgICAgdmFyIOWumuS9jSA9IHNsaXN0Lm1hcCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgeC7moIfpopgpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFVybChpdGVtLCB4KTtcXG4gICAgICAgICAgICB2YXIgb2JqID0ge1xcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLCB1cmw6IHVybFxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKCgnZXh0JyBpbiB4KSkge1xcbiAgICAgICAgICAgICAgb2JqWydleHQnXSA9IHguZXh0O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcXG4gICAgICAgICAgfSk7XFxuICAgICAgICAgIHJldHVybiDlrprkvY07XFxuICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnKVxcbiAgICAgICAgICAgICAgICAvL2xvZyjkuIDnuqcubGVuZ3RoKVxcbiAgICAgICAgICAgICAgICBpZiAo5LiA57qnLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2go5LiA57qnLmpvaW4oXFxcIlxcXFxuXFxcIikpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAg5LiA57qnLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goaXRlbS5qb2luKFxcXCIsXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9sb2coY2F0ZWdvcmllcylcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAo5oqY5Y+g54q25oCBKSB7XFxuICAgICAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb2xkID09PSBcXFwiMVxcXCIgPyDmipjlj6AgOiDlsZXlvIAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGl0bGUsIGZvbGQsIHUsIGFsbCwgZXhwcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBb5bGV5byALCDmipjlj6BdID0gZXhwcztcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ggPSBmaW5kSXRlbXNCeUNscyh0aXRsZSArICdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdjYXRlX2J1dHRvbicsIGN4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2NhdGVfYnV0dG9uJywgW10pLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFsnY29sX3R5cGUnXSA9IHhbJ2NvbF90eXBlJ10gPyB4Wydjb2xfdHlwZSddIDogeFsndHlwZSddO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIodGl0bGUgKyAnY2F0ZV9saW5lJywgY3gpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh0aXRsZSArICdjYXRlX2V4cCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PSAxID8g5bGV5byAIDog5oqY5Y+gLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUuZ3JvdXAsIGZvbGQgPT09IFxcXCIxXFxcIiA/IFxcXCIwXFxcIiA6IFxcXCIxXFxcIik7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1JVTEUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5YWo5riFLCBb5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5oqY5Y+gXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfZXhwJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiB0aGlzLmFjdGlvbih7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbDog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIC8qaWYgKOWwj+exu+WumuS9jS5pbmNsdWRlcyhcXFwiO1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViX2NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzFdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IEpTT04ucGFyc2UoYFske2NhdGVnb3J5fV1gKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHN1Yl9jYXRlZ29yaWVzKVxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wkp+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCB0aXRsZSA9IHBkZmgoaXRlbSwgX+Wkp+exu+agh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0ZW0udGl0bGU7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ld1JlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9ICcnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJzOiDmuIXpmaQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCB1cmwgPSBwZChpdGVtLCBf5aSn57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlmICjlpKfnsbvlpITnkIYpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSDkuIDnuqfliIbnsbvlpITnkIYodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zZXRUaXRsZShrZXkudG9TdHJpbmcoKSwgY2F0ZV90ZW1wW2luZGV4XSwgdGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2NhdGUgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NhdGUucHVzaChpbmRleCA9PT0gMCA/IHBhcmFtcy5rZXkudG9TdHJpbmcoKSA6IFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArICdjYXRlX2xpbmUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5bCP57G7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRyYXBvcyA9IGZhbHNlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlmIChpdGVtLmluY2x1ZGVzKCd0eXBlPVxcXCJAZXh0cmFcXFwiJykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYXBvcyA9IHRydWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coJ+mZhOWKoOWumuS9jScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmFwb3MpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHBkZmgoaXRlbSwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCBcXFwiYSYmc3RhdGVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCBcXFwiYSYmdmFsdWVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnN3aXRjaCAodHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqc29uID0gcGQoaXRlbSwg5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHlcXFwiICsgXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT09IFxcXCIxXFxcIiB8fCDmipjlj6DnirbmgIEgPT0gZmFsc2UpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQoY2F0ZXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZm9sZCA9PT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdjYXRlX2J1dHRvbicsIGNhdGVzKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNldFByZVJlc3VsdCAhPSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgICAgICAgICBpdGVtcyA9IGQuY29uY2F0KGl0ZW1zKTtcXG4gICAgICAgICAgICAgICAgLy/muIXnqbrnu6fmib/mlbDnu4RcXG4gICAgICAgICAgICAgICAgZC5sZW5ndGggPSAwO1xcbiAgICAgICAgICAgICAgICBzZXRQcmVSZXN1bHQoaXRlbXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goaXRlbSk7XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgfTtcXG4gICAgb2JqLumihOiuvihvcHRpb25zKTtcXG4gICAgcmV0dXJuIG9iajtcXG59XFxuXFxudmFyIOeKtuaAgSA9XFxuICAgIHR5cGVvZiDnirbmgIHmoIforrAgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg54q25oCB5qCH6K6wICE9IFxcXCJcXFwiID8g54q25oCB5qCH6K6wIDogTVlfUlVMRS51cmw7XFxuXFxubGV0IGR0X2RlYnVnID0gZmFsc2U7XFxuXFxuYWRkTGlzdGVuZXIoXFxuICAgIFxcXCJvbkNsb3NlXFxcIixcXG4gICAgJC50b1N0cmluZygoKSA9PiB7fSlcXG4pO1xcblxcbnZhciBDcmVhdGUgPSB7XFxuICAgIG5leHRQYWdlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coJ246JytuZXh0KVxcbiAgICAgICAgICAgIGlmIChuZXh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5LiL5LiA6aG16ZO+5o6l5Li656m6JylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgLy9sb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgICAgIGxvZyhcXFwi6ZSZ6K+v5L+h5oGvOlxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKChuZXh0ID09IFxcXCJcXFwiIHx8IG5leHQgPT0gdW5kZWZpbmVkKSAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZV91cmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vcmVzdWx0PWZhbHNlO1xcbiAgICAgICAgICAgIG5leHQgPSBnZXRNeVZhcijnirbmgIEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ2wnK3RydWVfdXJsKVxcbiAgICAgICAgLy9sb2coJ24nK25leHQpXFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQgJiYgIXJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAvL3B1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH0sXFxuICAgIGdldEJhY2tJbWFnZTogZnVuY3Rpb24oaW1ndXJsKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gaW1ndXJsO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICByZXN1bHQgPSAvdXJsKD86XFxcXHMrKT9cXFxcKCguKj8pXFxcXCkvZ1xcbiAgICAgICAgICAgICAgICAuZXhlYyhpbWd1cmwpWzFdXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oJ3xcXFwifCZxdW90OykvZ20sIFxcXCJcXFwiKTtcXG4gICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH0sXFxuICAgIGh0dHBIYW5kbGU6IGZ1bmN0aW9uKGlucHV0KSB7XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBNWV9IT01FICsgaW5wdXQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGltZ0hhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUuaW1nLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBpbWcgPSBldmFsKHJ1bGUuaW1nKTtcXG4gICAgICAgIH0gZWxzZSBpZiAocnVsZS5iYWNraW1nKSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5nZXRCYWNrSW1hZ2UoaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaWYgKCFpbWcuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGltZyA9IHBkKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGltZyArIHJ1bGUucmVmO1xcbiAgICB9LFxcbiAgICB1cmxIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBocmVmID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS51cmwuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaHJlZiA9IHBkKGl0ZW0sIHJ1bGUudXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIgOiBocmVmO1xcbiAgICAgICAgcmV0dXJuIGhyZWY7XFxuICAgIH0sXFxuICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGl0ZW0sIGlucHV0KSB7XFxuICAgICAgICBsZXQgb3V0cHV0ID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gZXZhbChpbnB1dCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIG91dHB1dCA9IHBkZmgoaXRlbSwgaW5wdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgfSxcXG4gICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXG4gICAgICAgICAgICBcXFwib25SZWZyZXNoXFxcIixcXG4gICAgICAgICAgICAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInlpbGlzdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBwID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3NwYWdlJywgJycpO1xcbiAgICAgICAgICAgICAgICAvL3B1dE15VmFyKHUsIHApO1xcbiAgICAgICAgICAgIH0sIOeKtuaAgSlcXG4gICAgICAgICk7XFxuICAgIH0sXFxuICAgIGdldEJvb2xlYW5WYWx1ZTogZnVuY3Rpb24odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKHZhbHVlKSA6IChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHRydWUpO1xcbiAgICB9LFxcbiAgICBkZWJ1Z2xvZzogZnVuY3Rpb24oaSwgaXRlbSwgcnVsZSwgb2JqKSB7XFxuICAgICAgICBsb2coJy0tLS0tLS0tLS0nICsgKGkgKyAxKSArICc66LCD6K+V5byA5aeLLS0tLS0tLS0tLScpO1xcbiAgICAgICAgaWYgKGl0ZW0uY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgbG9nKCdpdGVt5YaF5a65OlxcXFxyXFxcXG4nICsgaXRlbSArICdcXFxcclxcXFxuJyArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR0aXRsZeWumuS9jTogICR7cnVsZS50aXRsZX0gIC0tLT4g57uT5p6cOiAgJHtvYmoudGl0bGV9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRkZXNj5a6a5L2NOiAgJHtydWxlLmRlc2N9ICAtLS0+IOe7k+aenDogICR7b2JqLmRlc2N9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRpbWflrprkvY06ICAke3J1bGUuaW1nfSAgLS0tPiDnu5Pmnpw6ICAke29iai5pbWd9YCArXFxuICAgICAgICAgICAgKHJ1bGUuY29udGVudCAhPSB1bmRlZmluZWQgPyBgXFxcXG5cXFxcdGNvbnRlbnTlrprkvY06ICAke3J1bGUuY29udGVudH0gIC0tLT4g57uT5p6cOiAgJHtvYmouY29udGVudH1gIDogJycpICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdHVybOWumuS9jTogICR7cnVsZS51cmx9ICAtLS0+IOe7k+aenDogICR7b2JqLnVybH1gXFxuICAgICAgICApO1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivlee7k+adny0tLS0tLS0tLS0nKTtcXG4gICAgfSxcXG4gICAganNvbkxpc3Q6IGZ1bmN0aW9uKGFyciwganNvbiwgcnVsZSkge1xcbiAgICAgICAgaWYgKGpzb24uY29uc3RydWN0b3IgIT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvbik7XFxuICAgICAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGpzb25bcnVsZS5saXN0XSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICBhcnIucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICBqc29uW3J1bGUubGlzdF0uZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IGV2YWwocnVsZS50aXRsZSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MgPSBldmFsKHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBldmFsKHJ1bGUuY29udGVudCk7XFxuICAgICAgICAgICAgdmFyIGltZyA9IGV2YWwocnVsZS5pbWcpICsgcnVsZS5yZWY7XFxuICAgICAgICAgICAgdmFyIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFwiIDogaHJlZjtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcblxcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gaHJlZiArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBydWxlTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCxcXG4gICAgICAgICAgICBydWxlLmxpc3QpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZyxcXG4gICAgICAgICAgICBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpO1xcbiAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYyk7XFxuICAgICAgICAgICAgdmFyIGRlc2MxID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYzEpO1xcbiAgICAgICAgICAgIHZhciBkZXNjMiA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MyKTtcXG4gICAgICAgICAgICB2YXIgaW1nID0gdGhpcy5pbWdIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCk7XFxuXFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHZhciBsYXp5ID0gcnVsZS5sYXp5ID8gcnVsZS5sYXp5IDogXFxcIlxcXCI7XFxuICAgICAgICAgICAgdmFyIGRkID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MxICsgXFxcIlxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcIiArIGRlc2MsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIHVybCArICdAcnVsZT1qczokLnJlcXVpcmUoXFxcImVqXFxcIiknLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gdXJsICsgbGF6eTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIExpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSwgcGFyYW0pIHtcXG4gICAgICAgIHBhcmFtID0gcGFyYW0gPyBwYXJhbSA6IHt9O1xcbiAgICAgICAgdmFyIGF1dG8gPSBwYXJhbS5hdXRvID8gcGFyYW0uYXV0byA6IGZhbHNlO1xcbiAgICAgICAgdmFyIHNob3cgPSBwYXJhbS5zaG93ID8gcGFyYW0uc2hvdyA6IGZhbHNlO1xcbiAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIC8vdGhpcy5zcGFnZS5zZXQodHJ1ZV91cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBydWxlLmxpc3QpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyh0aGlzLm5leHRQYWdlKCkpXFxuICAgICAgICBpZiAoKHN0b3JhZ2UwLmdldE15VmFyKCd5aV9pc25leHQnLCAndCcpID09ICd0JyAmJiBsaXN0Lmxlbmd0aCA+IDApIHx8IHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbnVtXFxcIik7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VsaW5lXFxcIik7XFxuICAgICAgICAgICAgICAgIHZhciBpZCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKTtcXG4gICAgICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCk7XFxuXFxuICAgICAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZCA9IFxcXCJsYXN0aWRfXFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgICAgICAgICBjbHMgPSBcXFwibGFzdG1hcmtcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIHVybCArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcInlqXFxcIiknLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBjbHMsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxICYmIHNob3cpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHNtYWxsPuWKoOi9veS4rS4uLjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZW51bVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7liLDlupXkuoY8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFwibGFzdFxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuLypcXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9Ki9cXG4gICAgICAgIGlmICh0aGlzLm5leHRQYWdlKCkpIHtcXG4gICAgICAgICAgICAvL2xvZygndCcpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAndCcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL2xvZygnZicpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAnZicpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGF1dG8pIHtcXG4gICAgICAgICAgICAvL2NyZWF0ZU5leHRQYWdlKCk7XFxuICAgICAgICAgICAgYXV0b1BhZ2UoKTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG59O1xcblxcbnZhciBleHRNZXRob2QgPSB7XFxuICAgIFRvUGFyYW1zOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBqc29uID0gYXJndW1lbnRzWzBdO1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pXFxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkgKyBcXFwiPVxcXCIgKyBqc29uW2tleV0pXFxuICAgICAgICAgICAgLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgfSxcXG4gICAgdXJsUGFyc2U6IGZ1bmN0aW9uKHUpIHtcXG4gICAgICAgIHZhciBkaWN0ID0ge307XFxuICAgICAgICBkaWN0LlNvdXJjZSA9IHU7XFxuICAgICAgICBsZXQgcGFyYW1zID0gKHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xcbiAgICAgICAgICAgIGxldCByZWcgPSAvKFtePz0mXSspPShbXj89Jl0rKS9nO1xcbiAgICAgICAgICAgIHVybC5yZXBsYWNlKHJlZywgZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2FyZ3VtZW50c1sxXV0gPSBhcmd1bWVudHNbMl07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBqYXZhVXJsID0gSmF2YUltcG9ydGVyKGphdmEubmV0LlVSTCk7XFxuICAgICAgICB3aXRoKGphdmFVcmwpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTCh1KTtcXG4gICAgICAgICAgICBkaWN0LlByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0ID0gdXJsLmdldEhvc3QoKTtcXG4gICAgICAgICAgICBkaWN0LlBvcnQgPSB1cmwuZ2V0UG9ydCgpO1xcbiAgICAgICAgICAgIGRpY3QuRmlsZSA9IHVybC5nZXRGaWxlKCk7XFxuICAgICAgICAgICAgZGljdC5QYXRoID0gdXJsLmdldFBhdGgoKTtcXG4gICAgICAgICAgICBkaWN0LlJlZiA9IHVybC5nZXRSZWYoKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3RzID0gYCR7ZGljdC5Qcm90b2NvbH06Ly8ke3VybC5nZXRIb3N0KCl9YDtcXG4gICAgICAgIH1cXG4gICAgICAgIGRpY3QuUGFyYW1zID0gcGFyYW1zKHUpO1xcbiAgICAgICAgcmV0dXJuIGRpY3Q7XFxuICAgIH0sXFxuICAgIGlzRXF1YWw6IGZ1bmN0aW9uKHgsIHkpIHtcXG4gICAgICAgIGNvbnN0IG9rID0gT2JqZWN0LmtleXMsXFxuICAgICAgICAgICAgdHggPSB0eXBlb2YgeCxcXG4gICAgICAgICAgICB0eSA9IHR5cGVvZiB5O1xcbiAgICAgICAgcmV0dXJuIHggJiYgeSAmJiB0eCA9PT0gXFxcIm9iamVjdFxcXCIgJiYgdHggPT09IHR5ID9cXG4gICAgICAgICAgICBvayh4KS5sZW5ndGggPT09IG9rKHkpLmxlbmd0aCAmJlxcbiAgICAgICAgICAgIG9rKHgpLmV2ZXJ5KChrZXkpID0+IHRoaXMuaXNFcXVhbCh4W2tleV0sIHlba2V5XSkpIDogeCA9PT0geTtcXG4gICAgfSxcXG4gICAgZmluZERpZmZlcmVudEluZGV4OiBmdW5jdGlvbihzdHIxLCBzdHIyKSB7XFxuICAgICAgICBjb25zdCBkaWZmQ2hhcnMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChzdHIxW2ldICE9PSBzdHIyW2ldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZDaGFycy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxcbiAgICAgICAgICAgICAgICAgICAgczE6IHN0cjFbaV0sXFxuICAgICAgICAgICAgICAgICAgICBzMjogc3RyMltpXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZDaGFycztcXG4gICAgfSxcXG4gICAgcmVwbGFjZUNoYXJBdDogZnVuY3Rpb24oc3RyLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RyLmxlbmd0aCkge1xcbiAgICAgICAgICAgIHJldHVybiBzdHI7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgIGNvbnN0IGFyciA9IHN0ci5zcGxpdChcXFwiXFxcIik7XFxuICAgICAgICBhcnJbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXFxcIlxcXCIpO1xcbiAgICB9LFxcbiAgICBnZXRPYmplY3RLZXlzRGlmZjogZnVuY3Rpb24ob2JqMSwgb2JqMikge1xcbiAgICAgICAgY29uc3QgZGlmZmVyZW50S2V5cyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajIuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMikge1xcbiAgICAgICAgICAgIGlmICghb2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmZXJlbnRLZXlzO1xcbiAgICB9LFxcbiAgICBnZXROZXh0VXJsOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyYW1zKSB7XFxuICAgICAgICB2YXIgdTEgPSB0aGlzLnVybFBhcnNlKHNvdXJjZSk7XFxuICAgICAgICB2YXIgdTIgPSB0aGlzLnVybFBhcnNlKHRhcmdldCk7XFxuICAgICAgICB2YXIgcGEgPSB1bmRlZmluZWQ7XFxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIHBhID0gcGFyYW1zLmhhc093blByb3BlcnR5KFxcXCLnibnlvoFcXFwiKSA/IHBhcmFtcy7nibnlvoEgOiB1bmRlZmluZWQ7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgbmV4dHVybCA9IHNvdXJjZTtcXG4gICAgICAgIHZhciBjYSA9IE9iamVjdC5rZXlzKHUyLlBhcmFtcykubGVuZ3RoID09IDAgPyBcXFwiXFxcIiA6IFxcXCI/XFxcIjtcXG4gICAgICAgIGlmIChwYSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB2YXIgcnMgPSBTdHJpbmcodTIuUGF0aCkucmVwbGFjZShuZXcgUmVnRXhwKHBhKSwgXFxcIiQxZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgcnMgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFcXVhbCh1MS5QYXJhbXMsIHUyLlBhcmFtcykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTEuUGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTIuUGF0aCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGRmID0gdGhpcy5maW5kRGlmZmVyZW50SW5kZXgoU3RyaW5nKHUxLlBhdGgpLCBTdHJpbmcodTIuUGF0aCkpO1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhkZik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGRmLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBkZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gZGYuZmlsdGVyKCh4KSA9PiAvXFxcXGQrLy50ZXN0KHguczIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gdGhpcy5yZXBsYWNlQ2hhckF0KFN0cmluZyh1Mi5QYXRoKSwgcmUsIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgZXAgPSB0aGlzLmdldE9iamVjdEtleXNEaWZmKHUxLlBhcmFtcywgdTIuUGFyYW1zKVxcbiAgICAgICAgICAgICAgICBpZiAoZXAubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHUxLlBhcmFtc1tlcFswXV0gPSAnZnlwYWdlJ1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGVwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSBTdHJpbmcodTEuUGF0aCkucmVwbGFjZSgvXFxcXGQrLywgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTEuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1MS5QYXJhbXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dHVybClcXG4gICAgICAgIHJldHVybiBuZXh0dXJsO1xcbiAgICB9LFxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0VHJ1ZWxpbmsobWFyaywgdXJsLCBwYWdlKSB7XFxuICAgIHZhciBwID0gZ2V0TXlWYXIobWFyaywgdXJsKS5yZXBsYWNlKFxcXCJmeXBhZ2VcXFwiLCBwYWdlKTtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcmV0dXJuIGdldE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCBwKTtcXG4gICAgfSBlbHNlIGlmIChwICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gcDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB1cmw7XFxuICAgIH1cXG59XFxuLy/mnoTlu7pcXG5mdW5jdGlvbiBjcmVhdGVOZXh0UGFnZSgpIHtcXG4gICAgbGV0IHN0YXJ0bnVtID0gMTtcXG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1swXTtcXG4gICAgaWYgKHRydWVfdXJsICE9IGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgXFxcIlxcXCIpKSB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIik7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT0gc3RhcnRudW0gJiYgZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhuZXh0KTtcXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICB9XFxuICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pGh5LqM57qn5aSW6YOo6Kej5p6QXCIsXCJwYXRoXCI6XCJ0b29sXCIsXCJydWxlXCI6XCIvL3ZhciB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCDmkJzntKLmoIfnrb4pO1xcbi8vdmFyIHRpdGxlID0gTVlfUEFSQU1TLnRpdGxlO1xcbi8vbG9nKHRpdGxlKVxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiI0ZGMDAwMFxcXCI+IFRoaXNBVjwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG40Lmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvbG9nb3MtYW5kLWJyYW5kcy81MTIvMjMyX05pbnRlbmRvX1N3aXRjaF9sb2dvLTEyOC5wbmcnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjnlarlj7cpID0+IHtcXG4gICAgICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOeVquWPtzsgXFxuLy9sb2coYXYpXFxuICAgICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IGZldGNoKGF2LCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMCknXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC9ldmFsLio/XFxcXG4vKVswXSlcXG4gICAgICAgICAgICAgICAgIHZhciBzb3VyY2UxOTIwID0gc291cmNlMTI4MC5yZXBsYWNlKFxcXCIxMjgweDcyMFxcXCIsXFxcIjE5MjB4MTA4MFxcXCIpXFxuICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IEpTT04ucGFyc2UoZmV0Y2goc291cmNlMTkyMCx7b25seUhlYWRlcnM6dHJ1ZX0pKS5zdGF0dXNDb2RlO1xcbiAgICAgICAgICAgICAgICAgaWYoY29kZSAhPT0gMjAwKXtcXG4gICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UxMjgwICsgJzt7UmVmZXJlckBodHRwczovL3RoaXNhdi5jb219J1xcbn1lbHNle1xcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTE5MjAgKyAnO3tSZWZlcmVyQGh0dHBzOi8vdGhpc2F2LmNvbX0nXFxuICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgIH1jYXRjaHtyZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIn1cXG4gICAgICAgICAgICAgICAgICB9LOeVquWPtyksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHsgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOeVquWPtyk9PnsgcmV0dXJuIFxcXCJodHRwczovL3RoaXNhdi5jb20vY24vXFxcIiArIOeVquWPtzt9LOeVquWPtyl9XSB9XFxufSk7XFxuXFxuLy9NSVNTQVZcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiMwMEZGMDBcXFwiPiBNSVNTQVY8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vY2RuMS5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL2ZydWl0cy1uLXZlZ2V0YWJsZXMtY29sb3JlZC1ncmFkaWVudC8xMjgvY2F1bGlmbG93ZXItMTI4LnBuZycsXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKOeVquWPtykgPT4ge1xcbiAgICAgICB0cnl7XFxuICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL21pc3Nhdi50by9zZWFyY2gvbW92aWUvXFxcIiArIOeVquWPtzsgIFxcbiAgICAgICAgICAgICB2YXIgdXJscyA9IFtdOyAgICBcXG4gICAgICAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGZldGNoKGF2KSxcXFwiLnZpZGVvcy1saXN0JiZhcnRpY2xlXFxcIik7XFxuICAgICAgICAgICAgZm9yKHZhciBqIGluIGxpc3Qpe1xcbiAgICAgICAgICAgICAgdXJscy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgIHVybDogcGRmaChsaXN0W2pdLFxcXCJhJiZocmVmXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgcGxheXMgPSBiZih1cmxzKS5tYXAoaD0+aC5tYXRjaCgvc3JjPVxcXCIoLio/KVxcXCIvKVsxXS5zcGxpdChcXFwiJlxcXCIpWzBdLnJlcGxhY2UoXFxcIj9pZD1cXFwiLFxcXCJobHMvXFxcIikgKyBcXFwiLm0zdThcXFwiKSAgIFxcbiAgICAgICAgICAgICByZXR1cm4ge3VybHM6cGxheXN9XFxuICAgICAgIH1jYXRjaHtcXG4gICAgICAgICB0cnl7XFxuICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL21pc3Nhdi50by9zZWFyY2gvbW92aWUvXFxcIiArIOeVquWPty5yZXBsYWNlKC9cXFxcLXxcXFxcXy8sXFxcIiUyMFxcXCIpOyAgXFxuICAgICAgICAgICAgIHZhciB1cmxzID0gW107ICAgIFxcbiAgICAgICAgICAgICB2YXIgbGlzdCA9IHBkZmEoZmV0Y2goYXYpLFxcXCIudmlkZW9zLWxpc3QmJmFydGljbGVcXFwiKTtcXG4gICAgICAgICAgICBmb3IodmFyIGogaW4gbGlzdCl7XFxuICAgICAgICAgICAgICB1cmxzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwZGZoKGxpc3Rbal0sXFxcImEmJmhyZWZcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBwbGF5cyA9IGJmKHVybHMpLm1hcChoPT5oLm1hdGNoKC9zcmM9XFxcIiguKj8pXFxcIi8pWzFdLnNwbGl0KFxcXCImXFxcIilbMF0ucmVwbGFjZShcXFwiP2lkPVxcXCIsXFxcImhscy9cXFwiKSArIFxcXCIubTN1OFxcXCIpICAgXFxuICAgICAgICAgICAgIHJldHVybiB7dXJsczpwbGF5c31cXG4gICAgICAgICAgfWNhdGNoe3JldHVybiBcXFwidG9hc3Q6Ly/msqHmnInmraTlvbHniYdcXFwifVxcbiAgICAgICB9ICAgXFxuICAgICAgICAgICAgICAgICAgfSznlarlj7cpLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7IGxvbmdDbGljazogW3t0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjnlarlj7cpPT57IHJldHVybiBcXFwiaHR0cHM6Ly9taXNzYXYudG8vc2VhcmNoL21vdmllL1xcXCIgKyDnlarlj7d9LOeVquWPtyl9XSB9XFxufSk7XFxuXFxuLy9uamF2XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjMUU5MEZGXFxcIj4gbkphdi50djwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4yLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvc29jaWFsLWljb25zLTMzLzEyOC9GYWNlYm9va19NZXNzZW5nZXItMTI4LnBuZycsXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKOeVquWPtykgPT4ge1xcbiAgICAgICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vbmphdi50di96aC92L1xcXCIgKyDnlarlj7c7IFxcbi8vbG9nKGF2KVxcbiAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBKU09OLnBhcnNlKGZldGNoKGF2LHtvbmx5SGVhZGVyczp0cnVlfSkpLnN0YXR1c0NvZGVcXG4gICAgICAgICAgICAgICAgIGlmKGNvZGUgIT09IDIwMCl7ICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieatpOW9seeJh1xcXCJcXG4gICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIiArIGF2O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0s55Wq5Y+3KSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycqLmRvcHBpb2Nkbi4qJ10sXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAgICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgICAgICAgICAgY2FjaGVNM3U4OiB0cnVlLFxcbiAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjnlarlj7cpPT57IHJldHVybiBcXFwiaHR0cHM6Ly9uamF2LnR2L3poL3YvXFxcIiArIOeVquWPtzt9LOeVquWPtyl9XVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG59KTtcXG5cXG4vL2F2MDFcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNGRjAwRkZcXFwiPiBBVjAxPC9mb250PjwvbWlkZGxlPicsXFxuICAgIHBpY191cmw6ICdodHRwczovL2NkbjIuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9vd2wtMTAvNTAwL25pbTUzMl8xMV9wdXJwbGVfb3dsX2tpZF9iaXJ0aGRheV9mYWNlX2V5ZS0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo55Wq5Y+3KSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly93d3cuYXYwMS50di9cXFwiICsg55Wq5Y+3OyBcXG4vL2xvZyhhdilcXG4gICAgICAgICAgICAgICAgIHZhciBidiA9IEpTT04ucGFyc2UoZmV0Y2goYXYse29ubHlIZWFkZXJzOnRydWV9KSlcXG4vL2xvZyhidilcXG4gICAgICAgICAgICAgICAgIGlmKGJ2LnVybC5pbmNsdWRlcygnZXJyb3InKXx8YnYuc3RhdHVzQ29kZSAhPT0gMjAwKXsgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5q2k5b2x54mHXFxcIlxcbiAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgYnYudXJsO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0s55Wq5Y+3KSxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWydkb3BwaW9jZG4nXSxcXG4gICAgICAgICAgICAgICAgdmlkZW9FeGNsdWRlUnVsZXM6IFsnMjQwJ10sXFxuICAgICAgICAgICAgICAgIHZpZGVvRXhjbHVkZVJ1bGVzOiBbJzQ4MCddLFxcbiAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJy5kb3BwaW9jZG4uJ10sXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnZG1tLmNvLmpwJ10sXFxuICAgICAgICAgICAgICAgIC8vdmlkZW9SdWxlczogWycqbTN1OConXSxcXG4gICAgICAgICAgICAgICAgY2FjaGVNM3U4OiB0cnVlLFxcbiAgICAgICAgICAgICAgIGxvbmdDbGljazogW3t0aXRsZTogJ+afpeeci+e9keWdgCcsIGpzOiAkLnRvU3RyaW5nKCjnlarlj7cpPT57IHJldHVybiBcXFwiaHR0cHM6Ly93d3cuYXYwMS50di9cXFwiICsg55Wq5Y+3O30s55Wq5Y+3KX1dXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbn0pO1xcblxcbi8vSmFibGVcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcIiNGRjhDMDBcXFwiPiBKYWJsZTwvZm9udD48L21pZGRsZT4nLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9jZG4zLmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvY2F0LXBvd2VyLXByZW1pdW0vMTIwL2NhdF9mb29kbG92ZS0xMjgucG5nJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo55Wq5Y+3KSA9PiB7XFxuICAgICAgICAgICAgICAgICB2YXIgYXYgPSBcXFwiaHR0cHM6Ly9qYWJsZS50di92aWRlb3MvXFxcIiArIOeVquWPtyArIFxcXCIvXFxcIjsgXFxuLy9sb2coYXYpXFxuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3QoXFxcImh0dHBzOi8vamFibGUudHYvXFxcIilcXG4gICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYpXFxuICAgICAgICAgICAgICAgICB2YXIgdXJsID0gaHRtbC5tYXRjaCgvaHR0cHM/OlxcXFwvXFxcXC9cXFxcUys/XFxcXC5tM3U4LylbMF1cXG4gICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICAgICAgIH1jYXRjaHtyZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ5oyC5qKv5a2Q5oiW5rKh5pyJ5q2k5b2x54mHXFxcIn1cXG4gICAgICAgICAgICAgICAgICB9LOeVquWPtyksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81JyxcXG4gICAgZXh0cmE6IHsgbG9uZ0NsaWNrOiBbe3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOeVquWPtyk9PnsgcmV0dXJuIFxcXCJodHRwczovL2phYmxlLnR2L3ZpZGVvcy9cXFwiICsg55Wq5Y+3ICsgXFxcIi9cXFwiO30s55Wq5Y+3KX1dIH1cXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekFwiLFwicGF0aFwiOlwibGF6eVwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoTVlfSE9NRSkgPT4ge1xcbiAgICB2YXIgaW5wID0gZmV0Y2goaW5wdXQse30pOyBcXG4gICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIitwZGZhKGlucCwgJy5wcmV2aWV3LWltYWdlcyYmYSwxOicpLm1hcChpbWcgPT5wZChpbWcsICdhJiZocmVmJykrXFxcIkBSZWZlcmVyPVxcXCIsKS5qb2luKFxcXCImJlxcXCIpICBcXG59LE1ZX0hPTUUpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLikaDkuIDnuqfpobXpnaLlhoXlrrlcIixcInBhdGhcIjpcInlqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwidXJsXFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJuZXh0UGFnZVxcXCIpO1xcbiAgICAgICAgY2xlYXJJdGVtKCdub3cnKVxcbiAgICAgICAgY2xlYXJJdGVtKCdubycpXFxuICAgICAgICBjbGVhckl0ZW0oJ3BhZ2VzJylcXG59KTtcXG5hZGRMaXN0ZW5lcihcXFwib25SZWZyZXNoXFxcIiwgKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKFxcXCJ1cmxcXFwiKTtcXG4gICAgY2xlYXJNeVZhcihcXFwibmV4dFBhZ2VcXFwiKTtcXG4gICAgY2xlYXJJdGVtKCdub3cnKTtcXG4gICAgY2xlYXJJdGVtKCdubycpO1xcbiAgICBjbGVhckl0ZW0oJ3BhZ2VzJylcXG59KTtcXG5cXG5NWV9VUkw9TVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsJycpO1xcbmxldCB0cnVlX3VybCA9IGdldE15VmFyKFxcXCJ1cmxcXFwiLCBNWV9VUkwpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbi8v6I635Y+W5LiK5qyh57yT5a2Y55qE5LiL6aG16ZO+5o6lXFxubGV0IG5leHRQYWdlID0gZ2V0TXlWYXIoXFxcIm5leHRQYWdlXFxcIiwgXFxcIlxcXCIpO1xcbi8v5aaC5p6c5pyJ5LiL5LiA6aG15LiU5LiN5piv56ys5LiA6aG15bCx5L2/55So5LiL5LiA6aG16ZO+5o6lXFxuaWYgKG5leHRQYWdlICYmIE1ZX1BBR0UgPiAxKSB7XFxuICAgIHRydWVfdXJsID0gbmV4dFBhZ2U7XFxufVxcbmxvZyh0cnVlX3VybCk7XFxudmFyIGh0bWwgPSByZXF1ZXN0KHRydWVfdXJsKTtcXG5cXG50cnkge1xcbiAgICAvL+e8k+WtmOS4i+S4gOmhtVxcbiAgICBsZXQgbmV4dFVybCA9IHBkKGh0bWwsIFxcXCJhOmNvbnRhaW5zKOS4i+S4gCkmJmhyZWZcXFwiKTtcXG4gICAgcHV0TXlWYXIoXFxcIm5leHRQYWdlXFxcIiwgbmV4dFVybCB8fCBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpO1xcbiAgICAvL2xvZyhcXFwi5LiL5LiA6aG177yaXFxcIiArIG5leHRVcmwpXFxufSBjYXRjaCAoZSkge1xcbiAgICAvL2NsZWFyTXlWYXIoXFxcIm5leHRQYWdlXFxcIik7XFxuICAgIGxldCBuZXh0VXJsID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICB0b2FzdChcXFwi5aW95YOP5rKh5pyJ5LiL5LiA6aG15LqG77yBXFxcIik7XFxufVxcblxcbnZhciBwYWdlcztcXG5pZihNWV9QQUdFPT0xKXtcXG4vL+a8lOWRmOWbvlxcbiAgdHJ5e1xcbiAgICB2YXIgaW1nID0gcGRmaChodG1sLFxcXCIuc2VjdGlvbi1jb2x1bW5zJiYuaW1hZ2UmJi5hdmF0YXImJnN0eWxlXFxcIik7XFxudmFyIOaPj+i/sDEgPSBwZGZoKGh0bWwsIFxcXCIuc2VjdGlvbi1jb2x1bW5zJiZoMiYmLmFjdG9yLXNlY3Rpb24tbmFtZSYmVGV4dFxcXCIpO1xcbnZhciDmj4/ov7AyID0gcGRmaChodG1sLCBcXFwiLnNlY3Rpb24tY29sdW1ucyYmaDImJi5zZWN0aW9uLW1ldGEsLTEmJlRleHRcXFwiKTtcXG52YXIgbnVtID0g5o+P6L+wMi5tYXRjaCgvXFxcXGQrLylbMF1cXG52YXIgcGFnZXMgPSBNYXRoLmZsb29yKG51bSAvIDQwKTtcXG5pZiAobnVtICUgNDAgIT09IDApIHtcXG4gIHBhZ2VzICs9IDE7XFxufVxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJKYXZEQlxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiMFxcXCIsXFxuICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJjYXJkX3BpY18yXFxcIixcXG4gICAgICAgICB9KVxcbiAgICAgZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48c21hbGw+PGZvbnQgY29sb3I9XFxcIiNmZTVjNGJcXFwiPuemu+aAneS6lOmmlsK35YW25ZubwrfllJDCt+WFg+eouVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTmm77nu4/msqfmtbfpmr7kuLrmsLTvvIxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx06Zmk5Y205ber5bGx5LiN5piv5LqR44CCXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdOWPluasoeiKseS4m+aHkuWbnumhvu+8jFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHTljYrnvJjkv67pgZPljYrnvJjlkJvjgIJcXFxcbjwvZm9udD48L3NtYWxsPjxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiY3lhblxcXCI+ICcgKyDmj4/ov7AxICsgJzwvZm9udD48L3NtYWxsPjxiPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiI0ZGMDBGRlxcXCI+XFxcXG4gJyArIOaPj+i/sDIgKyAnPC9mb250Pjwvc21hbGw+PGI+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJ5ZWxsb3dcXFwiPlxcXFxu5Lmf6K645pyJJyArIHBhZ2VzICsgJ+mhte+8jOayoemql+S9oOWQpzwvZm9udD48L3NtYWxsPicsXFxuICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICBkZXNjOiAnMCcsXFxuICAgIC8vaW1nOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiBcXFwiY2FyZF9waWNfMlxcXCIsXFxuICAgIGV4dHJhOiB7XFxcImdyYWRpZW50XFxcIjp0cnVlfVxcbn0pO1xcbiAgICB9Y2F0Y2h7fVxcbiAgICAgICBpZiAodHlwZW9mIHBhZ2VzICE9PSAndW5kZWZpbmVkJyAmJiBwYWdlcyAhPT0gbnVsbCkge1xcbiAgICAgICAgICBzZXRJdGVtKCdwYWdlcycsIHBhZ2VzLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgIH0gXFxuXFxuLy/mvJTlkZjliIbnsbtcXG4gICB0cnl7XFxuICAgICAgICB2YXIgY2F0ZWdvcnkgPSBwZGZhKGh0bWwsXFxcIi5hY3Rvci10YWdzJiYudGFnLDA6NVxcXCIpXFxubGV0IG5vID0gZ2V0SXRlbSgnbm8nLCAn5YWo6YOoJyk7XFxuICAgICAgIGNhdGVnb3J5LmZvckVhY2goaXRlbT0+e1xcbiAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChpdGVtLFxcXCJUZXh0XFxcIik7XFxuICAgICAgICAgICB2YXIgdXJsID0gcGQoaXRlbSxcXFwiYSYmaHJlZlxcXCIpICE9PScnP3BkKGl0ZW0sXFxcImEmJmhyZWZcXFwiKTogcGQoaXRlbSxcXFwiYnV0dG9uJiZvbmNsaWNrLmpzOmlucHV0LnNwbGl0KCdcXFxcJycpWzFdXFxcIik7XFxuICAgICAgICAgICB1cmwgPSB1cmwuaW5jbHVkZXMoJz9wYWdlJyk/dXJsOih1cmwuaW5jbHVkZXMoJz8nKT91cmwgKyBcXFwiJnBhZ2U9MVxcXCI6dXJsICsgXFxcIj9wYWdlPTFcXFwiKVxcbiAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICB0aXRsZTogbm8gPT10aXRsZT8gJ+KAnOKAnOKAneKAnScgKyB0aXRsZS5mb250Y29sb3IoJ2dyZWVuJykgOiAn4oCc4oCc4oCd4oCdJyArIHRpdGxlLmZvbnRjb2xvcignI0ZGMDBGRicpLFxcbiAgICAgICAgICAgICAgIHVybDogdXJsICsgJCgnJykubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwibm9cXFwiLHRpdGxlKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwidXJsXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgIH0sdGl0bGUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgfSlcXG4gICAgICAgIH1jYXRjaHt9XFxuIC8v5YiG5YmyXFxuICAgIGQucHVzaCh7XFxuICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgIH0pXFxufVxcblxcbnZhciBwYWdlcyA9IGdldEl0ZW0oJ3BhZ2VzJyk7XFxuXFxudHJ5e1xcbmxldCBub3cgPSBnZXRJdGVtKCdub3cnLCAnMemhtScpO1xcbmlmKHBhZ2VzPjEmJnBhZ2VzPDM3KXtcXG5mb3IgKHZhciBqID0gMTsgaiA8PSBwYWdlczsgaiArKyl7XFxudmFyIHVybCA9IHRydWVfdXJsLnJlcGxhY2UoL3BhZ2U9XFxcXGQrLywgJ3BhZ2U9JytqKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOm5vdyA9PSggaiArICfpobUnKT8gJ+KAnOKAnOKAneKAnScgKyAoaiArICfpobUnKS5mb250Y29sb3IoJ3JlZCcpIDogKGogKyAn6aG1JyksXFxuICAgICAgICB1cmw6JCh1cmwpLmxhenlSdWxlKChqKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwibm93XFxcIiwoIGogKyAn6aG1JykpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgfSxqKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxufSlcXG59XFxufWVsc2UgaWYocGFnZXM+Mzcpe1xcbmZvciAodmFyIGogPSAxOyBqIDw9IDYxOyBqICs9KGo9PTEpPzI6Myl7XFxudmFyIHVybCA9IHRydWVfdXJsLnJlcGxhY2UoL3BhZ2U9XFxcXGQrLywgJ3BhZ2U9JytqKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOm5vdyA9PSggaiArICfpobUnKT8gJ+KAnOKAnOKAneKAnScgKyAoaiArICfpobUnKS5mb250Y29sb3IoJ3JlZCcpIDogKGogKyAn6aG1JyksXFxuICAgICAgICB1cmw6JCh1cmwpLmxhenlSdWxlKChqKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwibm93XFxcIiwoIGogKyAn6aG1JykpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ1cmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgfSxqKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxufSlcXG59XFxufVxcbn1jYXRjaHt9XFxuXFxuXFxubGV0IGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuaXRlbScpO1xcbmlmKGxpc3QubGVuZ3RoPjApe1xcbmxpc3QuZm9yRWFjaCh4ID0+IHsgICBcXG4gZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoeCwgJy52aWRlby10aXRsZSYmVGV4dCcpLFxcbiAgICBkZXNjOiBwZGZoKHgsJy5tZXRhJiZUZXh0JyksXFxuICAgIGltZzogcGQoeCwnaW1nfHxhJiZzcmN8fGRhdGEtb3JpZ2luYWwnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL2VqP3VybD0nK3BkKHgsICdhJiZocmVmJykrJyNub0hpc3RvcnkjJyxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXG4gICAgZXh0cmE6IHtwYWdlVGl0bGU6IHBkZmgoeCwgJy52aWRlby10aXRsZSYmVGV4dCcpLH1cXG4gIH0pO1xcbn0pXFxufWVsc2V7XFxuICBmdW5jdGlvbiBnZXRCaWdUZXh0KHRleHQsIGNvdW50KSB7XFxuICAgIGlmIChjb3VudCA+IDApIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LmJpZygpO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAtY291bnQ7IGkrKykge1xcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNtYWxsKCk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHRleHQ7XFxuICAgIH1cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIrZ2V0QmlnVGV4dChcXFwiPGJpZz48Zm9udCBjb2xvcj0nI0ZFQkQ2Ric+5bey57uP6LaF6L+H5LqG5pyA57uI6aG156CBPC9mb250PjwvYmlnPjxicj48c21hbGw+PGZvbnQgY29sb3I9JyNGQjZDNzMnPuS4jeS/oeeCueWHu+aJk+W8gOe9kemhtTwvZm9udD48L3NtYWxsPlxcXCIsIDUpLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRydWVfdXJsKSA9PiB7XFxucmV0dXJuIHRydWVfdXJsXFxuICAgICB9LHRydWVfdXJsKSxcXG4gICAgZXh0cmE6e2xpbmVWaXNpYmxlOmZhbHNlfVxcbiAgICB9KVxcbn1cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKRoOS6jOe6p+mhtemdouWGheWuuVwiLFwicGF0aFwiOlwiZWpcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW11cXG5NWV9VUkw9TVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsJycpO1xcbmxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcblxcbnRyeXtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5Jywge30pKS5ydWxlKTtcXG5cXG52YXIgdGl0bGUgPSBwZGZoKGh0bWwsJ2gyJiZUZXh0Jyk7XFxuICAgaWYodGl0bGUgIT09bnVsbCl7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9I0ZGQTUwMD4nK3RpdGxlKyc8L2ZvbnQ+PC9taWRkbGU+JyxcXG4gICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9XFxuICAgIH0pXFxufVxcblxcbnZhciDnlarlj7cgPSBwZGZoKGh0bWwsICdib2R5JiYuZmlyc3QtYmxvY2smJi52YWx1ZSYmVGV4dCcpO1xcblxcbnZhciBpbWcgPSBwZChodG1sLCcuY29sdW1uLXZpZGVvLWNvdmVyJiZpbWcmJnNyYycpO1xcbi8vdmFyIGltZyA9IE1ZX1BBUkFNUy5pbWc7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgdXJsOiBcXFwieDU6Ly9odHRwczovL3N1cGphdi5jb20vemgvP3M9XFxcIiArIOeVquWPtyxcXG4gICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZSxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe3RpdGxlOiAnU3VwamF2JywganM6ICQudG9TdHJpbmcoKOeVquWPtyk9PnsgXFxub3BlbkFwcEludGVudCgnY29tLnl1amlhbi5SZXNpZGVNZW51RGVtbycsICdjbi55dWppYW4uTWFpbkFjdGl2aXR5Jywge2ludGVudERhdGE6ICdodHRwczovL3N1cGphdi5jb20vemgvP3M9JyArIOeVquWPt30pXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iwg+eUqOmbqOingea1j+iniOWZqFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgIH0s55Wq5Y+3KX0se3RpdGxlOiAn5p+l55yL572R5Z2AJywganM6ICQudG9TdHJpbmcoKOeVquWPtyk9PnsgXFxuICAgICAgICByZXR1cm4gXFxcImh0dHBzOi8vc3VwamF2LmNvbS96aC8/cz1cXFwiICsg55Wq5Y+3XFxuICAgICAgICAgICAgICAgICAgICAgICB9LOeVquWPtyl9XVxcbiAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdG9vbCcsIHt9KSkucnVsZSk7XFxuXFxubGV0IGluZm8gPSBwZGZhKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeVquiZn3zml6XmnJ985pmC6ZW3KScpLm1hcCgoaXRlbSk9PnBkZmgoaXRlbSxcXFwiVGV4dFxcXCIpLnNsaWNlKDAsMjgpKS5qb2luKFxcXCJcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXCIpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08bWlkZGxlPjxmb250IGNvbG9yPWN5YW4+ICDpu57mk4ropIfoo73nlaromZ/vvJo8L2ZvbnQ+PC9taWRkbGU+PGZvbnQgY29sb3I9I2ZmNjg3Nz4nK2luZm8rJzwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgdXJsOiBcXFwiY29weTovL1xcXCIgKyDnlarlj7csXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICBleHRyYTp7XFxuICAgICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlLFxcbiAgICAgICAgICBsb25nQ2xpY2s6IFt7dGl0bGU6ICfosLfmrYzmkJzntKInLCBqczogJC50b1N0cmluZygo55Wq5Y+3KT0+eyByZXR1cm4gXFxcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9XFxcIiArIOeVquWPtzt9LOeVquWPtyl9XVxcbiAgICAgICAgICAgICB9XFxuICAgIH0pO1xcblxcbi8v5ryU5ZGYXFxudmFyIGFydHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYucGFuZWwtYmxvY2s6Y29udGFpbnMo5ryU5ZOhOikmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgICAgIHRpdGxlOiBcXFwi5ryU5ZOhOlxcXCIsXFxuICAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjnlarlj7cpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgdmFyIGF2ID0gXFxcImh0dHBzOi8vdGhpc2F2LmNvbS9jbi9cXFwiICsg55Wq5Y+3ICsgXFxcIi11bmNlbnNvcmVkLWxlYWtcXFwiOyBcXG5sb2coYXYpXFxuICAgICAgICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gZmV0Y2goYXYsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvZXZhbC4qP1xcXFxuLylbMF0pXFxuICAgICAgICAgICAgICAgICB2YXIgc291cmNlMTkyMCA9IHNvdXJjZTEyODAucmVwbGFjZShcXFwiMTI4MHg3MjBcXFwiLFxcXCIxOTIweDEwODBcXFwiKVxcbiAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBKU09OLnBhcnNlKGZldGNoKHNvdXJjZTE5MjAse29ubHlIZWFkZXJzOnRydWV9KSkuc3RhdHVzQ29kZTtcXG4gICAgICAgICAgICAgICAgIGlmKGNvZGUgIT09IDIwMCl7XFxuICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlMTI4MCArICc7e1JlZmVyZXJAaHR0cHM6Ly90aGlzYXYuY29tfSdcXG59ZWxzZXtcXG4gICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UxOTIwICsgJzt7UmVmZXJlckBodHRwczovL3RoaXNhdi5jb219J1xcbiAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICB9Y2F0Y2h7cmV0dXJuIFxcXCJ0b2FzdDovL+aMguair+aIluayoeacieaXoOeggeegtOino1xcXCJ9XFxuICAgICAgICAgICAgICAgICAgfSznlarlj7cpLFxcbiAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG59KVxcbmZvciAodmFyIGkgaW4gYXJ0cykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCIjRkYwMEZGXFxcIj4nK3BhcnNlRG9tRm9ySHRtbChhcnRzW2ldLCAnVGV4dCcpKyc8L2ZvbnQ+PC9taWRkbGU+PC9iPicsXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKGFydHNbaV0sICdhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsLy/nu4Tku7bmoLflvI9cXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKVxcbiAgICAgICAgfVxcbn0pXFxufVxcbmQucHVzaCh7XFxuY29sX3R5cGU6XFxcImJsYW5rX2Jsb2NrXFxcIlxcbn0pXFxufVxcblxcbi8v57G75YirXFxudmFyIGFydHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYucGFuZWwtYmxvY2s6Y29udGFpbnMo6aGe5YilKSYmYScpO1xcbmlmKGFydHMubGVuZ3RoPjApe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogXFxcIumhnuWIpTpcXFwiLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCjnlarlj7cpID0+IHtcXG4gICAgICAgICAgICAgICAgIHZhciBhdiA9IFxcXCJodHRwczovL25qYXYudHYvemgvdi9cXFwiICsg55Wq5Y+3ICsgXFxcIi11bmNlbnNvcmVkLWxlYWtlZFxcXCI7IFxcbi8vbG9nKGF2KVxcbiAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBKU09OLnBhcnNlKGZldGNoKGF2LHtvbmx5SGVhZGVyczp0cnVlfSkpLnN0YXR1c0NvZGVcXG4gICAgICAgICAgICAgICAgIGlmKGNvZGUgIT09IDIwMCl7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKh5pyJ5peg56CB56C06KejXFxcIlxcbiAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgIHJldHVybiBcXFwidmlkZW86Ly9cXFwiICsgYXY7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSznlarlj7cpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICB2aWRlb0V4Y2x1ZGVSdWxlczogWycyNDAnXSxcXG4gICAgICAgICAgICAgICAgYmxvY2tSdWxlczogWycuZG9wcGlvY2RuLiddLFxcbiAgICAgICAgICAgICAgICBibG9ja1J1bGVzOiBbJ2RtbS5jby5qcCddLFxcbiAgICAgICAgICAgICAgICAvL3ZpZGVvUnVsZXM6IFsnKm0zdTgqJ10sXFxuICAgICAgICAgICAgICAgIGNhY2hlTTN1ODogdHJ1ZSxcXG4gICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7dGl0bGU6ICfmn6XnnIvnvZHlnYAnLCBqczogJC50b1N0cmluZygo55Wq5Y+3KT0+eyByZXR1cm4gXFxcImh0dHBzOi8vbmphdi50di96aC92L1xcXCIgKyDnlarlj7c7fSznlarlj7cpfV1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxufSk7XFxuZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiPjxtaWRkbGU+PGZvbnQgY29sb3I9XFxcInllbGxvd1xcXCI+JytwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ1RleHQnKSsnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShhcnRzW2ldLCAnYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0JylcXG4gICAgICAgIH1cXG59KVxcbn1cXG5kLnB1c2goe1xcbmNvbF90eXBlOlxcXCJibGFua19ibG9ja1xcXCJcXG59KVxcbn1cXG5cXG4vL+ezu+WIl1xcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnYm9keSYmLnBhbmVsLWJsb2NrOmNvbnRhaW5zKOezu+WIlykmJmEnKTtcXG5pZihhcnRzLmxlbmd0aD4wKXtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgdGl0bGU6IFxcXCLns7vliJc6XFxcIixcXG4gICAgICAgdXJsOiBcXFwidG9hc3Q6Ly/ngrnkuobkuZ/kuYjmnInnlKjwn6WyXFxcIixcXG4gICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG59KVxcbmZvciAodmFyIGkgaW4gYXJ0cykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8Yj48bWlkZGxlPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicrcGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdUZXh0JykrJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgIHVybDogcGFyc2VEb20oYXJ0c1tpXSwgJ2EmJmhyZWYnKSArICc/cGFnZT1meXBhZ2VAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95alxcXCIpJywvL+mTvuaOpVxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJywvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHBhcnNlRG9tRm9ySHRtbChhcnRzW2ldLCAnVGV4dCcpXFxuICAgICAgICB9XFxufSlcXG59XFxuZC5wdXNoKHtcXG5jb2xfdHlwZTpcXFwiYmxhbmtfYmxvY2tcXFwiXFxufSlcXG59XFxuLy/lr7zmvJRcXG50cnl7XFxudmFyIGRpcmVjdG9yID0gcGFyc2VEb21Gb3JIdG1sKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOWwjua8lCkmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwOTlGRlxcXCI+JytkaXJlY3RvcisnPC9mb250PjwvbWlkZGxlPjwvYj4nLFxcbiAgICAgICAgdXJsOiBwYXJzZURvbShodG1sLCAnLnBhbmVsJiYucGFuZWwtYmxvY2s6bWF0Y2hlcyjlsI7mvJQpJiZhJiZocmVmJykgKyAnP3BhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiKScsLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsLy/nu4Tku7bmoLflvI9cXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBkaXJlY3RvclxcbiAgICAgICAgfVxcbn0pXFxufWNhdGNoe31cXG4vL+eJh+WVhlxcbnRyeXtcXG52YXIgbWFrZXJzID0gcGFyc2VEb21Gb3JIdG1sKGh0bWwsICcucGFuZWwmJi5wYW5lbC1ibG9jazptYXRjaGVzKOeJh+WVhikmJlRleHQnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+PG1pZGRsZT48Zm9udCBjb2xvcj1cXFwiIzAwOTlGRlxcXCI+JyttYWtlcnMrJzwvZm9udD48L21pZGRsZT48L2I+JyxcXG4gICAgICAgIHVybDogcGFyc2VEb20oaHRtbCwgJy5wYW5lbCYmLnBhbmVsLWJsb2NrOm1hdGNoZXMo54mH5ZWGKSYmYSYmaHJlZicpICsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiknLC8v6ZO+5o6lXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogbWFrZXJzXFxuICAgICAgICB9XFxufSlcXG59Y2F0Y2h7fVxcblxcbmQucHVzaCh7XFxuY29sX3R5cGU6XFxcImJsYW5rX2Jsb2NrXFxcIlxcbn0pXFxuXFxudmFyIOefreiplSA9IHBkZmgoaHRtbCxcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZUZXh0XFxcIilcXG52YXIgY2lsaSA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJ2JvZHkmJi5pdGVtLmNvbHVtbnMuaXMtZGVza3RvcCcpO1xcbnZhciB0YWJzID0gW1xcXCLpoJDopr1cXFwiLFxcXCLno4Hpj4goXFxcIiArIGNpbGkubGVuZ3RoICsgXFxcIilcXFwiLOefreiplV07XFxuXFxuZnVuY3Rpb24gc2V0VGFicyh0YWJzLCB0YWJ1cmwpIHtcXG4gICAgdmFyIENvbG9yMSA9IFxcXCIjMTNCNjZBXFxcIjtcXG4gICAgZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZSkge1xcbiAgICAgICAgcmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCInICsgQ29sb3IxICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXG4gICAgICAgICB9XFxuICAgIHZhciBDb2xvcjIgPSBcXFwiI0ZGMDBGRlxcXCI7XFxuICAgIGZ1bmN0aW9uIGdldEhlYXIodGl0bGUpIHtcXG4gICAgICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yMiArICdcXFwiPicgKyB0aXRsZSArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxuICAgICAgICB9XFxuXFxuICAgIGZvciAodmFyIGkgaW4gdGFicykge1xcbiAgICAgICAgdmFyIHRhYm5hbWUgPSB0YWJzW2ldO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIodGFidXJsLCAnMCcpID09IGkgPyBnZXRIZWFkKHRhYm5hbWUpIDogZ2V0SGVhcih0YWJuYW1lKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHRhYm5hbWUsIHRhYnVybCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcih0YWJ1cmwsIGkpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIHRhYm5hbWUsIHRhYnVybCwgaSlcXG4gICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG52YXIgbGlzdHMgPSBbXTtcXG5mdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXG4gICAgZnVuY3Rpb24gcGxheUxpc3RzKCkge1xcbiAgICAgICBpZiAoaW5kZXggPT0gMCkge1xcbi8v6aKE6KeI6KeG6aKRXFxuICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj1ibGFjaz7wn5O66aCQ6Ka96KaW6aC74pGgPC9mb250PjwvbWlkZGxlPicsXFxuICAgICAgICB1cmw6IE1ZX1VSTCArICQoJycpLmxhenlSdWxlKCjnlarlj7cpID0+IHtcXG4gICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoaHRtbCxcXFwiLm1lc3NhZ2UtYm9keSYmc291cmNlJiZzcmNcXFwiKVxcbiAgICAgICAgICAgICAgICAgICBpZiggIXVybC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikmJnVybCE9PVxcXCJcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBcXFwiaHR0cHM6XFxcIiArIHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih1cmw9PVxcXCJcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mspLmnInpoJDopr3lkq9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgICB9Y2F0Y2h7cmV0dXJuIFxcXCJ0b2FzdDovL+aykuaciemgkOimveWSr1xcXCJ9XFxuICAgICAgICAgICAgICAgICAgfSznlarlj7cpLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcbiAgICAgICAgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9XFxuICAgICAgICAgICAgICAgICB9KVxcbiAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxtaWRkbGU+PGZvbnQgY29sb3I9YmxhY2s+8J+TuumgkOimveimlumgu+KRoTwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyAkKCcnKS5sYXp5UnVsZSgo55Wq5Y+3KSA9PiB7XFxuICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBcXFwiaHR0cHM6Ly9qYXZzdWJ0aXRsZWQuY29tL3poL3NlYXJjaD9rZXl3b3Jkcz1cXFwiICsg55Wq5Y+3XFxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXVybCA9IFxcXCJodHRwczovL2phdnN1YnRpdGxlZC5jb20vXFxcIiArIHBkZmgocmVxdWVzdChzZWFyY2gpLFxcXCJib2R5JiYudmlkZW9ib3gmJmEmJmhyZWZcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlsaXN0ID0gZmV0Y2goY29kZXVybCkubWF0Y2goL2h0dHBzPzpcXFxcL1xcXFwvXFxcXFMrXFxcXC5tM3U4LylbMF1cXG4gICAgICAgICAgICAgICAgICAgIHZhciBwbGF5aGQgPSBmZXRjaChwbGF5bGlzdCkubWF0Y2goL1teXFxcIlxcXFxuXStcXFxcLm0zdTgvZykucG9wKClcXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwbGF5bGlzdC5yZXBsYWNlKFxcXCJwbGF5bGlzdC5tM3U4XFxcIixwbGF5aGQpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsXFxuICAgICAgICAgICAgIH1jYXRjaHtyZXR1cm4gXFxcInRvYXN0Oi8v5oyC5qKv5oiW5rKS5pyJ6aCQ6Ka95ZKvXFxcIn1cXG4gICAgICAgICAgICAgICAgICB9LOeVquWPtyksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXFxuICAgICAgICBleHRyYToge2xpbmVWaXNpYmxlOiBmYWxzZX1cXG4gICAgICAgICAgICAgICAgIH0pXFxuLy/pooTop4jlm77niYdcXG50cnl7XFxuICAgIHZhciBsaXNyID0gcGRmYShodG1sLFxcXCIucHJldmlldy1pbWFnZXMmJi50aWxlLWl0ZW1cXFwiKVxcbiAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCxcXFwiLnByZXZpZXctaW1hZ2VzJiYudGlsZS1pdGVtLDA6OVxcXCIpXFxuaWYobGlzdC5sZW5ndGg+MCl7XFxuICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPG1pZGRsZT48Zm9udCBjb2xvcj0jRkY4QzAwPvCfp5bwn4+74oCN4pmA77iP5qij5ZOB5ZyW5YOPOiDlhbHmnIknICsgbGlzci5sZW5ndGggKyAn5by15ZyW54mH8J+RhzwvZm9udD48L21pZGRsZT4nLFxcbiAgICAgICAgdXJsOiBNWV9VUkwgKyAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGljcyA9IHBkZmEoaHRtbCxcXFwiLnByZXZpZXctaW1hZ2VzJiYudGlsZS1pdGVtXFxcIikubWFwKGl0ZW09PnBkZmgoaXRlbSxcXFwiYSYmaHJlZlxcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIitwaWNzLmpvaW4oXFxcIiYmXFxcIilcXG4gICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgIGV4dHJhOiB7bGluZVZpc2libGU6IGZhbHNlfVxcbiAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgIGxpc3QuZm9yRWFjaChpdGVtPT57XFxuICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSxcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogcGRmaChpdGVtLFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfM19zcXVhcmVcXFwiXFxuICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICAgfWNhdGNoe30gICAgICAgIFxcbiAgICAgICB9ZWxzZSBpZiAoaW5kZXggPT0gMSkge1xcbi8v56OB5Yqb5YaF5a65XFxudHJ5e1xcbmQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGOEMwMFxcXCI+8J+nsuejgeWKm+WcsOWdgDog5YWx5pyJJyArIGNpbGkubGVuZ3RoICsgJ+adoee6v+i3r/CfkYc8L3NwYW4+PC9iPicsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL3NlYXJjaD9zPScgKyDnlarlj7cgKyAnJnJ1bGU9QlRTT1cnLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgZXh0cmE6e2xpbmVWaXNpYmxlOmZhbHNlfVxcbiAgICB9KVxcblxcbmNpbGkuZm9yRWFjaCh2aWRlbyA9PiB7XFxudmFyIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnYSYmVGV4dCcpO1xcbnZhciBzaXplID0gdGl0bGUubWF0Y2goL1xcXFxkKyg/OlxcXFwuXFxcXGQrKT9bZ21dKGIpPy9pXFxuKVswXVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAucmVwbGFjZSgvXFxcXC4/dG9ycmVudC9nLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcLj9tcDQvZ2ksICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwuP2F2aS9naSwgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXC4/aGQvZ2ksICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwuP21rdi9naSwgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXF8/c2QvZ2ksICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxkKyg/OlxcXFwuXFxcXGQrKT9bZ21dKGIpPy9naSwgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXGQr5YCL5paH5Lu2L2csICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxzL2csICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL0BbXFxcXHU0ZTAwLVxcXFx1OWZhNV0rL2csICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL0AvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXCwvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgv44CQLio/44CRL2csICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxbLio/XFxcXF0vZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXC4/W1xcXFx1NGUwMC1cXFxcdTlmYTVcXFxcdTA4MDAtXFxcXHU0ZTAwXFxcXHUzMDQwLVxcXFx1MzBmZl0rL2csICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwuP1tcXFxcdTMwNDAtXFxcXHUzMDlGXFxcXHUzMEEwLVxcXFx1MzBGRl0rL2csICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL15cXFxcZCtcXFxcLS8sICcnKVxcbiAgICAgICAgLnJlcGxhY2UoL15cXFxcLSsvLCAnJylcXG4gICAgICAgIC5yZXBsYWNlKC9eXFxcXF8rLywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXCgvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXCkvZywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXC0kLywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXCMkLywgJycpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXChcXFxcdytcXFxcKS9nLCAnJylcXG4gICAgICAgICxcXG4gICAgICAgIGRlc2M6ICfwn5OAXFxcXHQnICsgc2l6ZSArICdcXFxcdFxcXFx08J+Xk1xcXFx0JyArcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnLnRpbWUmJlRleHQnKSxcXG4gICAgICAgIHBpY191cmw6ICdodHRwczovL2ltZy52aW51YS5jbi9pbWFnZXMvT2NxcGoucG5nJyxcXG4gICAgICAgIHVybDogcGFyc2VEb20odmlkZW8sICdhJiZocmVmJyksLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJywvL+e7hOS7tuagt+W8j1xcbiAgICB9KTtcXG59KVxcbn1jYXRjaHt9XFxuICAgICAgIH1lbHNlIGlmIChpbmRleCA9PSAyKSB7XFxudHJ5e1xcbiAgICAgICB2YXIgdXJsID0gcGQoaHRtbCxcXFwiLnRhYnMmJmxpW2RhdGEtbW92aWUtdGFiLXRhcmdldD1yZXZpZXdUYWJdJiZhJiZkYXRhLXVybFxcXCIpXFxuICAgICAgIHZhciBoID0gZmV0Y2godXJsKVxcbiAgICAgICB2YXIgbGlzdCA9IHBkZmEoaCxcXFwiLm1lc3NhZ2UtYm9keSYmLnJldmlldy1pdGVtOmhhcygucmV2aWV3LXRpdGxlKVxcXCIpXFxuICAgICAgIGxpc3QuZm9yRWFjaChpdGVtPT57XFxuICAgICAgICAgdmFyIGRlc2MgPSAnPG1pZGRsZT48Zm9udCBjb2xvcj0jRkY4QzAwPicgKyBwZGZoKGl0ZW0sXFxcIi5yZXZpZXctdGl0bGUtLS5saWtlcy0tLnJlcG9ydCYmVGV4dFxcXCIpICsgJzwvZm9udD48L21pZGRsZT4nOyAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGRlc2MgKyAnPGJyPicgKyAnPHNtYWxsPjxmb250IGNvbG9yPSNmZjY4Nzc+XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdCcgKyBwZGZoKGl0ZW0sXFxcIi5jb250ZW50JiZUZXh0XFxcIikgKyAnPC9mb250Pjwvc21hbGw+JywgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7bGluZVZpc2libGU6ZmFsc2V9XFxuICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPSMxM0I2NkE+5pu05aSa55+t6KmV5Y+v5oiQ5Li6VklQ5oiW6Iez5a6Y5pa5QXBw5Lit5p+l55yLPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgo55Wq5Y+3KSA9PiB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgb3BlbkFwcEludGVudCgneHh4LnBvcm5odWIuZnVjaycsICd4eHgucG9ybmh1Yi5mdWNrLk1haW5BY3Rpdml0eScsIHtpbnRlbnREYXRhOiDnlarlj7d9KVxcbiAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyDnlarlj7dcXG4gICAgICAgICAgICAgICAgICB9LOeVquWPtyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7bGluZVZpc2libGU6ZmFsc2V9XFxuICAgICAgICAgICAgICAgfSlcXG59Y2F0Y2h7fVxcbiAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIHBsYXlMaXN0cygpICAgICAgICBcXG4gICAgICAgICAgICB9XFxuXFxuc2V0VGFicyh0YWJzLCBNWV9VUkwpO1xcbnNldExpc3RzKGxpc3RzLCBnZXRNeVZhcihNWV9VUkwsICcwJykpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkYwMEZGO1xcXCI+VEEo5YCRKemChOWHuua8lOmBjjwvc3Bhbj4nLFxcbiAgICBwaWNfdXJsOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzEwMC5wbmdcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG59KTtcXG5cXG50cnl7XFxudmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYubWVzc2FnZTptYXRjaGVzKOmChOWHuua8lOmBjikmJi50aWxlLXNtYWxsJiZhJyk7Ly/liJfooahcXG5cXG5saXN0LmZvckVhY2godmlkZW8gPT4ge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICBwYXJzZURvbUZvckh0bWwodmlkZW8sICdhJiZ0aXRsZScpLC8v5qCH6aKYXFxuICAgICAgICBkZXNjOiBwYXJzZURvbUZvckh0bWwodmlkZW8sICcudmlkZW8tbnVtYmVyJiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBhcnNlRG9tKHZpZGVvLCAnaW1nJiZzcmMnKSArIFxcXCJAUmVmZXJlcj1cXFwiLC8v5Zu+54mHXFxuICAgICAgICB1cmw6IHBhcnNlRG9tKHZpZGVvLCAnYSYmaHJlZicpICsgJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsLy/pk77mjqVcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfM19tYXJxdWVlJywvL+e7hOS7tuagt+W8j1xcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJ2EmJnRpdGxlJyksXFxuICAgICAgICB9XFxuICB9KTtcXG59KSAgIFxcbn0gY2F0Y2ggKGVycikge1xcbiAgLy9jb25zb2xlLmxvZygn5rKh5pyJ5Ye65ryU5YiX6KGoJywgZXJyKTtcXG59O1xcblxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkYwMEZGO1xcXCI+5L2g5Y+v6IO95Lmf5Zac5q2hPC9zcGFuPicsXFxuICAgIHBpY191cmw6IFxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvMTAwLnBuZ1xcXCIsXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbn0pO1xcblxcbnRyeXtcXG52YXIgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJ2JvZHkmJi5tZXNzYWdlOm1hdGNoZXMo5L2g5Y+v6IO95Lmf5Zac5q2hKSYmLnRpbGUtc21hbGwmJmEnKTsvL+WIl+ihqFxcblxcbmxpc3QuZm9yRWFjaCh2aWRlbyA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogIHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJ2EmJnRpdGxlJyksLy/moIfpophcXG4gICAgICAgIGRlc2M6IHBhcnNlRG9tRm9ySHRtbCh2aWRlbywgJy52aWRlby1udW1iZXImJlRleHQnKSxcXG4gICAgICAgIGltZzogcGFyc2VEb20odmlkZW8sICdpbWcmJnNyYycpICsgXFxcIkBSZWZlcmVyPVxcXCIsLy/lm77niYdcXG4gICAgICAgIHVybDogcGFyc2VEb20odmlkZW8sICdhJiZocmVmJykgKyAnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlalxcXCIpJywvL+mTvuaOpVxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnLC8v57uE5Lu25qC35byPXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogcGFyc2VEb21Gb3JIdG1sKHZpZGVvLCAnYSYmdGl0bGUnKSxcXG4gICAgICAgIH1cXG4gIH0pO1xcbn0pICAgXFxufSBjYXRjaCAoZXJyKSB7XFxuICAvL2NvbnNvbGUubG9nKCfmsqHmnInmjqjojZDliJfooagnLCBlcnIpO1xcbn07XFxuXFxufWNhdGNoe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICBcXFwiZmMy6ZyA6KaBVklQ55m75b2VXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCIzMDDlpKfmtIvvvIzkuI3nnIvkuZ/nvaLvvIzmtJfmtJfnnaHlkKdcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgZXh0cmE6e2xpbmVWaXNpYmxlOmZhbHNlfVxcbiAgICAgICAgfSk7XFxufVxcbnNldFJlc3VsdChkKVwifV0iLCJpY29uIjoiaHR0cHM6Ly9jMC5qZGJzdGF0aWMuY29tL2ltYWdlcy9sb2dvXzEyMHgxMjAucG5nIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment