xiaomianao666

小程序:禁漫天堂

Aug 20th, 2024
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@禁漫天堂@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56aB5ryr5aSp5aCCIiwiYXV0aG9yIjoiTElVJuWtkOS4keWvheWNryZLaWxsZXImTG95RGdJayblraPpo44iLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyMvYWxidW1zP289bXImcGFnZT1meXBhZ2UiLCJ2ZXJzaW9uIjowLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6ImNhcnRvb24iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UvamlhblwiKSkucnVsZSk7XG4vL2V2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UveWk/cnVsZT3OsScpKS5ydWxlKTtcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS95alwiLCB7fSkpLnJ1bGUpO1xucHV0VmFyKCdsaW5rJyxjb25maWcuaG9zdClcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJylcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xuY29uc3QgZGMgPSBkeW5hbWljQ2xhc3Moe1xuICAgIOWIhuexu+minOiJsjogZ2V0UmFuZ2VDb2xvcnMoKVxufSk7XG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxuICAgIHJldHVybiAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXG59XG52YXIgaGVhZGVycyA9IHtcbiAgICAgICAgXCJDb29raWVcIjogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9KTV9jb29raWUudHh0JykgfHwgJycsIFxuICAgICAgICBcIlVzZXItQWdlbnRcIjpcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XCJcbiAgICB9O1xudmFyIGxvZ2luID0gbGluayArIFwiL3VzZXJcIjtcbnZhciBsb2dpbmluZyA9IHJlcXVlc3QobG9naW4se1xuICAgIGhlYWRlcnM6IGhlYWRlcnNcbn0pXG50cnl7XG4gICAgdmFyIGZhdiA9IHBkKGxvZ2luaW5nLFwiLmhlYWRlci1tZW51JiZhOm1hdGNoZXMo5pS26JePKSYmaHJlZlwiLGxpbmspXG4gICAgdmFyIGljb24gPSBwZChsb2dpbmluZyxcIi5wYW5lbC1ib2R5JiZpbWcmJnNyY1wiLGxpbmspXG52YXIgdXNlcl9uYW1lID0gcGRmaChsb2dpbmluZyxcIi5wYW5lbC1ib2R5JiYuaGVhZGVyLXJpZ2h0LXVzZXJuYW1lJiZUZXh0XCIpXG52YXIgZXhwID0gcGRmaChsb2dpbmluZyxcIi5oZWFkZXItcHJvZmlsZS1leHAmJlRleHRcIilcbnZhciBMViA9IChcIkx2LlwiK3BkZmgobG9naW5pbmcsXCIucGFuZWwtYm9keSYmLmhlYWRlci1wcm9maWxlLXJvdy12YWx1ZTpoYXMoLmhlYWRlci1wcm9maWxlLWV4cCkmJlRleHRcIikucmVwbGFjZShleHAsJycpKS5mb250Y29sb3IoJyM1NWJiOGEnKVxufWNhdGNoKGUpe31cbmlmIChNWV9QQUdFID09IDEpXG4ge1xuICAgICBpZihsb2dpbmluZy5pbmNsdWRlcyhcIueZu+WHulwiKSl7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogdXNlcl9uYW1lLFxuICAgICAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9mYXZvcml0ZT91cmw9XCIrZmF2K1wiJnBhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1wiLFxuICAgICAgICAgICAgZGVzYzogTFYrXCIgXCIrZXhwLFxuICAgICAgICAgICAgcGljX3VybDogaWNvbixcbiAgICAgICAgICAgIGNvbF90eXBlOiBcImF2YXRhclwiXG4gICAgICAgIH0pO1xuICAgIH1lbHNle1xuXG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfnmbvlvZXotKblj7cnLFxuICAgICAgICBkZXNjOiAn55m75b2V5pe26K6w5b6X6YO95Yu+5LiKJy5zbWFsbCgpLFxuICAgICAgICBwaWNfdXJsOiBsaW5rK1wiL3RlbXBsYXRlcy9mcm9udGVuZC9haXJhdi9pbWcvYXBwX2xpbmszLnBuZz92PTNcIixcbiAgICAgICAgdXJsOiBsb2dpbiArICQoJycpLnJ1bGUoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGQgPSBbXTtcbiAgICAgICAgICAgIGxvZyhmZXRjaENvb2tpZShNWV9VUkwpKVxuICAgICAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcbiAgICAgICAgICAgICAgICBkZXNjOiAnbGlzdCYmc2NyZWVuJyxcbiAgICAgICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLC8vUENfVUEsICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvID0gZmJhLmdldENvb2tpZSh1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY28uaW5jbHVkZXMoJ3JlbWVtYmVyPScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKChjbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnLCBjbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6LSm5Y+35bey55m75b2VJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjbykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfVVJMKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdChkKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xuICAgIH0pO1xuXG59XG5sZXQgbmF2ID0gW1wi6aaW6aG1XCIsXCJB5ryrXCIsXCLliIbnsbtcIl07XG5sZXQgY29sb3JzPSBbJzlGNUY5RicsJ2Y3ZThhYScsJzIwYTE2MiddO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBteXRpdGxlID0gbmF2W2ldO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCduYXZ0aXRsZScsIFwi6aaW6aG1XCIpID09IG15dGl0bGUgPyBjb2xvcihteXRpdGxlLGdldFJhbmdlQ29sb3JzKCkpOiBteXRpdGxlLFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKG15dGl0bGUpID0+IHtcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcIm5hdnRpdGxlXCIsIG15dGl0bGUpO1xuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xuICAgICAgICAgICAgfSwgbXl0aXRsZSksXG4gICAgICAgICAgICBjb2xfdHlwZTogXCJ0ZXh0XzNcIlxuICAgICAgICB9KTtcbiAgICB9XG59XG5pZiAoZ2V0TXlWYXIoJ25hdnRpdGxlJywgXCLpppbpobVcIikgPT0gXCLpppbpobVcIikgeyQucmVxdWlyZShcImhpa2VyOi8vcGFnZS/pppbpobVcIil9XG5lbHNlIGlmIChnZXRNeVZhcihcIm5hdnRpdGxlXCIpID09IFwiQea8q1wiKSB7dmFyIOWumuS9jeS/oeaBryA9IFt7XG4gICAg5aSn57G75a6a5L2NOiAnYm9keSYmLmRyb3Bkb3duLW1lbnU6aGFzKGxpOmhhcyhhOm1hdGNoZXMo5ZCM5Lq6KSkpJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcbn0sIHtcbiAgICDkuIDnuqflrprkvY06ICdib2R5JiYuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjku4rlpKkpKSksMDoxfHwuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjmnIDmlrApKSksMDoxfHwuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjml6UpKSksMToyJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcbn1dO1xubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsbGluaytcIi9hbGJ1bXM/bz1tciZwYWdlPVwiK3BhZ2UpXG5pZiAodHJ1ZV91cmwuaW5jbHVkZXMoJ3BhZ2UnKSkge1xuICAgIHRydWVfdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvcGFnZT1cXGQrLywgXCJwYWdlPVwiICsgcGFnZSk7XG59IGVsc2Uge1xuICAgIHRydWVfdXJsID0gdHJ1ZV91cmwgKyBcIiZwYWdlPVwiICsgcGFnZTtcbn1cblxuTVlfVVJMID0gdHJ1ZV91cmw7XG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XG5kYy7lvIDlkK/mipjlj6AoZmFsc2UpXG5kYy7lvIDlkK/mkJzntKIoZmFsc2UpLuWIm+W7uuWKqOaAgeWIhuexuyjlrprkvY3kv6Hmga8pXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5jb250YWluZXI6aGFzKC5jb2wteHMtNikmJi5wLWItMTUnKTtcbmZvciAodmFyIGogaW4gbGlzdCkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuLDEmJlRleHQnKSksXG4gICAgICAgIGRlc2M6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4mJlRleHQnKSsnXFx0XFx0JytwZGZoKGxpc3Rbal0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksXG4gICAgICAgIGltZzogcGRmaChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsfHxzcmN8fGRhdGEtc3JjJyksXG4gICAgICAgIHVybDogbGluaytwZGZoKGxpc3Rbal0sICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9lalwiKSdcbiAgICB9KTtcbn19XG5lbHNlIGlmIChnZXRNeVZhcihcIm5hdnRpdGxlXCIpID09IFwi5YiG57G7XCIpIHtcbmlmIChNWV9QQUdFID09IDEpe1xuZC5wdXNoKHtcbnRpdGxlIDpcIuemgea8q+WkqeWgglwiLFxuY29sX3R5cGU6IFwicmljaF90ZXh0XCIsXG59KVxudmFyIGNhdGVnb3J5cyA9IFt7XG4gICAgICAgIHRpdGxlOiBcIuavj+WRqOW/heeci1wiLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvYmsjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJyxcbn0se1xuICAgICAgICB0aXRsZTogXCLmjpLooYzmppxcIixcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9yYW5rP3BhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1wiLFxuICAgICAgICB9LHtcbiAgICAgICAgdGl0bGU6IFwiSOWKqOeUu1wiLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvSD9wYWdlPWZ5cGFnZSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMnLFxuICAgICAgICB9LHtcbiAgICB0aXRsZTogXCJKTeaWh+W6k1wiLFxuICAgIHVybDogJ2hpa2VyOi8vcGFnZS9MaWJyYXJ5P3BhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5IycsXG4gICAgfV1cbiAgICBmb3IoaSBvZiBjYXRlZ29yeXMpe1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nK2kudGl0bGUuc21hbGwoKSxcbiAgICAgICAgICAgIHVybDogaS51cmwsXG4gICAgICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiXG4gICAgfSlcbn1cbnZhciBodG1sID0gZmV0Y2gobGluaysnL3RoZW1lLycpO1xuLypcbnZhciBIb3QgPSBwZGZhKGh0bWwsJ2JvZHkmJi5jb2wtbWQtMywwOjEnKTtcbiAgICAgSG90LmZvckVhY2goKGRhdGEpID0+IHtcbmQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogc3AocGRmaChkYXRhLCAnc3BhbiYmVGV4dCcpKSxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJyaWNoX3RleHRcIixcclxuICAgICAgICAgICAgfSk7IFxudmFyIGl0ZW0gPSBwZGZhKGRhdGEsICdib2R5JiZhJyk7XHJcbiAgICAgICAgICAgIGl0ZW0uZm9yRWFjaCgoZGF0YXMpID0+IHtcbnZhciB0aXRsZT0gc3AocGRmaChkYXRhcywgJ2EmJlRleHQnKSk7XG52YXIgdXJsID0gbGluaytcIi9zZWFyY2gvcGhvdG9zP3NlYXJjaF9xdWVyeT1cIit0aXRsZStcIiZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9XCI7XHJcbiAgICAgICAgICAgICAgICBkLnB1c2goeyBcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsKydmeXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjQHJ1bGU9anM6JC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3NlYXJjaFwiKScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFwiZmxleF9idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgIH1cbn0pO1xufSlcbn0pXG4qL1xudmFyIExhYiA9IHBkZmEoaHRtbCwnYm9keSYmLnJvdzpoYXMoLmJ0bi10b29sYmFyKTpub3QoOm1hdGNoZXMo57G75YirfOaOkuihjCkpJyk7XHJcbiAgICAgICAgTGFiLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgZC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBzcChwZGZoKGRhdGEsICdoNCYmVGV4dCcpKSxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJyaWNoX3RleHRcIixcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gcGRmYShkYXRhLCAnLnJvdyYmbGknKTtcclxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xudmFyIHRpdGxlPSBzcChwZGZoKGRhdGFzLCAnYSYmVGV4dCcpKTtcbiAgICAgICAgICAgICAgICBkLnB1c2goeyBcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScrdGl0bGUuc21hbGwoKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgICAgICAgICAgICAnaGlrZXI6Ly9wYWdlL3NlYXJjaD90aXRsZT0nK3RpdGxlKycmcGFnZT1meXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiLFxufSk7XG59KVxufSlcbn1cbn1cbnNldFJlc3VsdChkKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjL3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PSoqJm1haW5fdGFnPTAmbz1tdiZ0PWEmcGFnZT1meXBhZ2UiLCJncm91cCI6IuKRo+WFtuS7liIsInNlYXJjaEZpbmQiOiJqczpcbnZhciBkID0gW107XG52YXIgVVJMID0gY29uZmlnLmhvc3QrTVlfVVJMLnJlcGxhY2UoJ2hpa2VyOi8vZW1wdHkjIycsKVxudmFyIGh0bWwgPSBmZXRjaChVUkwpO1xuZXZhbChKU09OLnBhcnNlKGZldGNoKFwiaGlrZXI6Ly9wYWdlL2ppYW5cIikpLnJ1bGUpO1xudmFyIGxpc3QgPSBwZGZhKGh0bWwsICcuY29udGFpbmVyOmhhcyguY29sLXhzLTYpJiYucC1iLTE1Jyk7XG5mb3IgKHZhciBqIGluIGxpc3QpIHtcbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogc3AocGRmaChsaXN0W2pdLCAnc3BhbiwxJiZUZXh0JykpLFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuJiZUZXh0JykrJ1xcdFxcdCcrcGRmaChsaXN0W2pdLCAnLmxhYmVsLWNhdGVnb3J5JiZUZXh0JykpLFxuICAgICAgICBpbWc6IHBkZmgobGlzdFtqXSwgJ2ltZyYmZGF0YS1vcmlnaW5hbCcpLFxuICAgICAgICB1cmw6IGdldFZhcignbGluaycpK3BkZmgobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2VqXCIpJ1xuICAgIH0pO1xufVxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6ImxldCB0aW1lID0gbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKTtcbmxldCBmYiA9ICdodHRwczovL2ptY21vbWljLmdpdGh1Yi5pby8nO1xubGV0IGZicmVxID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldEl0ZW0oJ2xpbmsnLCAnaHR0cHM6Ly8xOGNvbWljLXBhbHdvcmxkLmNsdWInKSwge1xuICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWUsXG4gICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxuICAgICAgICB9KSk7XG4gICAgICAgIC8vbG9nKGZicmVxLnN0YXR1c0NvZGUpXG5pZiAoZ2V0SXRlbSgndGltZScsIG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkpICE9IHRpbWUgfHwgZmJyZXEuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgbGV0IGZhYnUgPSByZXF1ZXN0KGZiKTtcbiAgICBsZXQgbGlua3MgPSBwZGZhKGZhYnUsICdib2R5JiZhW15ocmVmXTpub3QoLl9fY2ZfZW1haWxfXyksNDo3Jyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaHJlZiA9IHBkKGxpbmtzW2ldLCAnYSYmaHJlZicsZmIpO1xuICAgICAgICBsZXQgbGluayA9IHJlcXVlc3QoaHJlZikubWF0Y2goL2h0dHBzOlxcL1xcL1teXFxcIl0rLylbMF07XG4gICAgICAgIGxldCByZXEgPSBKU09OLnBhcnNlKHJlcXVlc3QobGluaywge1xuICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWUsXG4gICAgICAgICAgICBvbmx5SGVhZGVyczogdHJ1ZVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYgKHJlcS5zdGF0dXNDb2RlID09IDIwMCkge1xuICAgIHNldEl0ZW0oJ3RpbWUnLCB0aW1lKTtcbiAgICBzZXRJdGVtKCdsaW5rJywgbGluayk7XG4gICAgdG9hc3QoJ+abtOaWsOWfn+WQjScpO1xuICAgIGxvZygn5pu05paw5Z+f5ZCNJyk7XG4gICAgbG9nKGxpbmspO1xuICAgIGJyZWFrXG4gICAgfVxuICAgIH1cbiAgICB9XG5pbml0Q29uZmlnKHtcbiAgICBob3N0OiBnZXRJdGVtKCdsaW5rJywgJ2h0dHBzOi8vMThjb21pYy1wYWx3b3JsZC5jbHViJylcbn0pOyIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJkXCIsXCJwYXRoXCI6XCJkXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gPSBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTtcXG5jb25zdCBCeXRlQXJyYXlJbnB1dFN0cmVhbSA9IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07XFxuY29uc3QgQml0bWFwID0gYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7XFxuY29uc3QgQml0bWFwRmFjdG9yeSA9IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTtcXG5jb25zdCBDYW52YXMgPSBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhcztcXG4kLmV4cG9ydHMgPSBmdW5jdGlvbihwaWNVcmwsIGltZ0lucHV0U3RyZWFtKSB7XFxuICAgIC8vbGV0IHBpY1VybCA9IHBpY1VybDtcXG4gICAgcGljVXJsLm1hdGNoKC9waG90b3NcXFxcLyhcXFxcZCspP1xcXFwvKFxcXFxkKyk/Lyk7XFxuICAgIGxldCBib29rSWQgPSBSZWdFeHAuJDE7XFxuICAgIGxldCBpbWdJZCA9IFJlZ0V4cC4kMjtcXG4gICAgaWYoIWJvb2tJZHx8IWltZ0lkfHxOdW1iZXIoYm9va0lkKTw9MjIwOTgwKSByZXR1cm4gaW1nSW5wdXRTdHJlYW07XFxuICAgIGlmIChOdW1iZXIoYm9va0lkKSA+PSBcXFwiMjY4ODUwXFxcIiAmJiBOdW1iZXIoYm9va0lkKSA8PSBcXFwiNDIxOTI1XFxcIikge1xcclxcbiAgICB2YXIgJG51bSA9IHBhcnNlSW50KG1kNShib29rSWQgKyBpbWdJZCkuc2xpY2UoLTEpLmNoYXJDb2RlQXQoKSAlIDEwKSAqIDIgKyAyO1xcclxcbn0gZWxzZSBpZiAoTnVtYmVyKGJvb2tJZCkgPiBcXFwiNDIxOTI1XFxcIikge1xcclxcbiAgICB2YXIgJG51bSA9IHBhcnNlSW50KG1kNShib29rSWQgKyBpbWdJZCkuc2xpY2UoLTEpLmNoYXJDb2RlQXQoKSAlIDgpICogMiArIDI7XFxyXFxufSBlbHNlIHtcXHJcXG4gICAgdmFyICRudW0gPSBcXFwiMTBcXFwiO1xcclxcbn1cXG4gICAvKiBpZiAoTnVtYmVyKGJvb2tJZCkgPj0gMjY4ODUwKSB7XFxuICAgICAgICBsZXQgJG1kNSA9IG1kNShib29rSWQgKyBpbWdJZCk7XFxuICAgICAgICBsZXQgJGFzY2lpID0gJG1kNS5zdWJzdHIoLTEpLmNoYXJDb2RlQXQoMCkgKyBcXFwiXFxcIjtcXG4gICAgICAgIGxldCAkbGFzdCA9IE51bWJlcigkYXNjaWkuc3Vic3RyKC0xKSk7XFxuICAgICAgICB2YXIgJG51bSA9ICgkbGFzdCArIDEpICogMjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHZhciAkbnVtID0gMTA7XFxuICAgIH0qL1xcbiAgICAvKmxldCBpbWdJbnB1dFN0cmVhbSA9IGZldGNoKHBpY1VybCwge1xcbiAgICAgICAgaW5wdXRTdHJlYW06IHRydWUsXFxuICAgIH0pO1xcbiAgICAqL1xcbiAgICAvL2xldCBpbWdJbnB1dFN0cmVhbSA9IGlucHV0O1xcbiAgICBsZXQgaW1nQml0bWFwID0gQml0bWFwRmFjdG9yeS5kZWNvZGVTdHJlYW0oaW1nSW5wdXRTdHJlYW0pO1xcbiAgICBjbG9zZU1lKGltZ0lucHV0U3RyZWFtKTtcXG5cXG4gICAgbGV0IHdpZHRoID0gaW1nQml0bWFwLmdldFdpZHRoKCk7XFxuICAgIGxldCBoZWlnaHQgPSBpbWdCaXRtYXAuZ2V0SGVpZ2h0KCk7XFxuICAgIGxldCB5ID0gTWF0aC5mbG9vcihoZWlnaHQgLyAkbnVtKTtcXG4gICAgbGV0IHJlbWFpbmRlciA9IGhlaWdodCAlICRudW07XFxuXFxuICAgIGxldCBuZXdJbWdCaXRtYXAgPSBCaXRtYXAuY3JlYXRlQml0bWFwKHdpZHRoLCBoZWlnaHQsIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTtcXG4gICAgbGV0IGNhbnZhcyA9IG5ldyBDYW52YXMobmV3SW1nQml0bWFwKTtcXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gJG51bTsgaSsrKSB7XFxuICAgICAgICBsZXQgaCA9IGkgPT09ICRudW0gPyByZW1haW5kZXIgOiAwO1xcbiAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAoQml0bWFwLmNyZWF0ZUJpdG1hcChpbWdCaXRtYXAsIDAsIHkgKiAoaSAtIDEpLCB3aWR0aCwgeSArIGgpLCAwLCBoZWlnaHQgLSB5ICogaSAtIGgsIG51bGwpO1xcbiAgICB9XFxuICAgIGxldCBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpO1xcbiAgICBuZXdJbWdCaXRtYXAuY29tcHJlc3MoQml0bWFwLkNvbXByZXNzRm9ybWF0LlBORywgMTAwLCBiYW9zKTtcXG4gICAgcmV0dXJuIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiYW9zLnRvQnl0ZUFycmF5KCkpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4gOe6p1wiLFwicGF0aFwiOlwieWpcIixcInJ1bGVcIjpcImpzOlxcbi8qXFxuYnkgzrEoemV0YWxwaGEpXFxu5LiA57qn5bCB6KOFXFxu5Yqo5oCB5YiG57G7IOWIl+ihqOWIm+W7uiDoh6rliqjkuIvkuIDpobVcXG52ZXIgMjAyMzEwMTcgMS4wXFxuKi9cXG5cXG4vL+maj+acuuminOiJslxcbnZhciBnZXRSYW5nZUNvbG9ycyA9IGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gJyMnICsgKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7XFxufVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxuLy/liqjmgIHliIbnsbtcXG5mdW5jdGlvbiBkeW5hbWljQ2xhc3Mob3B0aW9ucykge1xcbiAgICBjb25zdCBvYmogPSB7XFxuICAgICAgICAvL+m7mOiupOWAvFxcbiAgICAgICAgbGF5b3V0OiBcXFwidW5kZWZpbmVkXFxcIixcXG4gICAgICAgIGh0bWw6IFxcXCJlbXB0eVxcXCIsXFxuICAgICAgICBwYWdlOiAwLFxcbiAgICAgICAg5YiG57G76aKc6ImyOiBcXFwiI0ZBNzI5OFxcXCIsXFxuICAgICAgICDmipjlj6A6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIp1xcXCIuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICDlsZXlvIA6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIqFxcXCIuZm9udGNvbG9yKFxcXCIjRkYwMDAwXFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICBvcGVuOiB0cnVlLFxcbiAgICAgICAgc3RhdGU6IE1ZX1JVTEUudXJsLFxcbiAgICAgICAgc2VhcmNoOiBmYWxzZSxcXG4gICAgICAgIGNsZWFyczogW10sXFxuICAgICAgICBjbGVhcmFsbDogW1xcXCJ5aV9maXJzdHBhZ2VcXFwiXSxcXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcXG5cXG4gICAgICAgIOmihOiuvihwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcGFyYW0gPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyYW0pLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XFxuICAgICAgICAgICAgICAgIC8vIOWvueavj+S4quWxnuaAp+WQjeaJp+ihjOaTjeS9nFxcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtW3Byb3BlcnR5XTsgLy8g6I635Y+W5bGe5oCn5YC8XFxuICAgICAgICAgICAgICAgIC8vIOWcqOi/memHjOaJp+ihjOaCqOeahOaTjeS9nFxcbiAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocHJvcGVydHkgKyBcXFwiOlxcXCIgKyB2YWx1ZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0sXFxuICAgICAgICBldmFsSlNSdWxlKGl0ZW0sXFxuICAgICAgICAgICAganNSdWxlKSB7XFxuICAgICAgICAgICAgbGV0IHJ1bGUgPSBqc1J1bGUucmVwbGFjZShcXFwiQGpzOlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBydWxlID0gcnVsZS50cmltKCk7XFxuICAgICAgICAgICAgLy9sb2coJC5zdHJpbmdpZnkocnVsZSkpXFxuICAgICAgICAgICAgbGV0IGlucHV0ID0gaXRlbTtcXG4gICAgICAgICAgICBpZiAocnVsZS5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAgICAgKiDov5jljp/miJAgJC50b1N0cmluZyguLi4pIOeahOacgOe7iOe7k+aenO+8jOi+vuWIsOacgOe7iOWkhOeQhuaWueW8j+i3n+S4iumdoueahCBpZiDkuIDoh7TnmoTnm67nmoRcXG4gICAgICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBcXFwiKCgpID0+IHtcXFwiICsgcnVsZSArIFxcXCJ9KSgpXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VGl0bGUoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB0aXRsZVJ1bGUgPSBjYXRlZ29yeSB8fCBcXFwiYSYmVGV4dFxcXCI7XFxuICAgICAgICAgICAgaWYgKHRpdGxlUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBzcCh0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHNwKHBhcnNlRG9tRm9ySHRtbChzcmMsIHRpdGxlUnVsZSkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VXJsKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHVybFJ1bGUgPSBjYXRlZ29yeS7pk77mjqUgfHwgXFxcImEmJmhyZWZcXFwiO1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZChzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhdGVnb3J5LumTvuaOpeWkhOeQhiA9PSBcXFwiZnVuY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IGNhdGVnb3J5LumTvuaOpeWkhOeQhih1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdXJsIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzTnVsbChwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNCb29sZWFuKHZhcmlhYmxlKSB7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YXJpYWJsZSAhPT0gXFxcImJvb2xlYW5cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5byA5ZCv5oqY5Y+g6K+35Lyg5YWl5biD5bCU5YC8XFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIOa4hemZpChsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAobGlzdC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLmuIXpmaTmiqXplJk66K+35Lyg5YiX6KGoXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuY2xlYXJzID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlhajmuIUobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGMgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIGxpc3QgPSBjLmNvbmNhdChsaXN0KTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyYWxsID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDmupDnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmh0bWwgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnlYzpnaIoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmxheW91dCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOmhteeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeKtuaAgShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mkJzntKIoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5zZWFyY2ggPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mipjlj6AoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5pc0Jvb2xlYW4oaW5wdXQpO1xcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNldFRpdGxlKGssIGksIHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gayA9PSBpID8gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0LmZvbnRjb2xvcih0aGlzLuWIhuexu+minOiJsikgOiB0O1xcbiAgICAgICAgfSxcXG4gICAgICAgIGFjdGlvbihvYmopIHtcXG4gICAgICAgICAgICByZXR1cm4gW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmuIXpmaTnirbmgIFcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsb2cob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIob2JqLnN0YXRlKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5hbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5jbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgfSwgb2JqKSxcXG4gICAgICAgICAgICB9LCBdO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGNoZWNrUGFyYW0oKSB7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHt9O1xcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gMCAmJiB0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpemhteeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHRoaXMucGFnZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSBwYWdlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmh0bWwgPT0gXFxcImVtcHR5XFxcIiAmJiB0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpea6kOeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IHRoaXMuaHRtbDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSBodG1sO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dCA9PSBcXFwidW5kZWZpbmVkXFxcIiAmJiB0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeeVjOmdolxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IHRoaXMubGF5b3V0O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IGQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIG9iajtcXG4gICAgICAgIH0sXFxuICAgICAgICDliJvlu7rliqjmgIHliIbnsbsocnVsZU9iaikge1xcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgIGxldCBjYXRlcyA9IFtdO1xcbiAgICAgICAgICAgIGlmIChydWxlT2JqID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBydWxlT2JqID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP5byA5aeLXFxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmNoZWNrUGFyYW0oKTtcXG4gICAgICAgICAgICBjb25zdCBwYWdlID0gcGFyYW0u6aG156CBO1xcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBwYXJhbS7mupDnoIE7XFxuICAgICAgICAgICAgY29uc3QgZCA9IHBhcmFtLueVjOmdojtcXG4gICAgICAgICAgICBjb25zdCDnirbmgIEgPSB0aGlzLnN0YXRlO1xcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoO1xcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIGNvbnN0IOaKmOWPoOeKtuaAgSA9IHRoaXMub3BlbjtcXG4gICAgICAgICAgICB2YXIg5bGV5byAID0gdGhpcy7lsZXlvIA7XFxuICAgICAgICAgICAgdmFyIOaKmOWPoCA9IHRoaXMu5oqY5Y+gO1xcbiAgICAgICAgICAgIHZhciDlhajmuIUgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIHZhciDmuIXpmaQgPSB0aGlzLmNsZWFycztcXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+e7k+adn1xcbiAgICAgICAgICAgIGxldCBpbml0X2NhdGUgPSBuZXcgQXJyYXkoMjApLmZpbGwoXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKFxcbiAgICAgICAgICAgICAgICBnZXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pCc57Si5YWz6ZSu6K+NXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdO1xcbiAgICAgICAgICAgIHJ1bGVPYmouZm9yRWFjaCgoeCkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh4KVxcbiAgICAgICAgICAgICAgICBpZiAoeC5qc29uICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICAgICAgeC5qc29uLm1hcChrID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goSlNPTi5zdHJpbmdpZnkoaykucmVwbGFjZSgvXlxcXFxbfFxcXFxdJC9nLCAnJykpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgLy9jYXRlZ29yaWVzLnB1c2goeC5qc29uKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5aSn57G75a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuWkp+exu+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbcGRmYShodG1sLCB4LuWkp+exu+WumuS9jSkuam9pbignXFxcXG4nKV07XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgICAgICAgIGlmICgoJ+WinuWKoCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWinuWKoC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuWinuWKoCA9IGV2YWwoeC7lop7liqApO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSB4LuWinuWKoC5jb25jYXQoc2xpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICgoJ+ihpeWFhScgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuihpeWFhS5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuihpeWFhSA9IGV2YWwoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBzbGlzdC5jb25jYXQoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICAgICAgICB2YXIg5LiA57qnID0gbGlzdC5tYXAoKHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoXFxcIuWwj+exu1xcXCIgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuWwj+exuyA9IFxcXCJib2R5JiZhOm5vdCg6bWF0Y2hlcyjpppbpobUpKTpub3QoYTpub3QoW2hyZWZdKSlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5bCP57G7LnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBwZGZhKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHZhciDlrprkvY0gPSBzbGlzdC5tYXAoKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBzcCh0aGlzLmdldFRpdGxlKGl0ZW0sIHgu5qCH6aKYKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIHgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4g5a6a5L2NO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnKVxcbiAgICAgICAgICAgICAgICAvL2xvZyjkuIDnuqcubGVuZ3RoKVxcbiAgICAgICAgICAgICAgICBpZiAo5LiA57qnLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2go5LiA57qnLmpvaW4oXFxcIlxcXFxuXFxcIikpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAg5LiA57qnLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goaXRlbS5qb2luKFxcXCIsXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9sb2coY2F0ZWdvcmllcylcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAo5oqY5Y+g54q25oCBKSB7XFxuICAgICAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb2xkID09PSBcXFwiMVxcXCIgPyDmipjlj6AgOiDlsZXlvIAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGl0bGUsIGZvbGQsIHUsIGFsbCwgZXhwcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBb5bGV5byALCDmipjlj6BdID0gZXhwcztcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ggPSBmaW5kSXRlbXNCeUNscyh0aXRsZSArICdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdjYXRlX2J1dHRvbicsIGN4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2NhdGVfYnV0dG9uJywgW10pLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFsnY29sX3R5cGUnXSA9IHhbJ2NvbF90eXBlJ10gPyB4Wydjb2xfdHlwZSddIDogeFsndHlwZSddO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIodGl0bGUgKyAnY2F0ZV9saW5lJywgY3gpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh0aXRsZSArICdjYXRlX2V4cCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PSAxID8g5bGV5byAIDog5oqY5Y+gLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUuZ3JvdXAsIGZvbGQgPT09IFxcXCIxXFxcIiA/IFxcXCIwXFxcIiA6IFxcXCIxXFxcIik7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1JVTEUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5YWo5riFLCBb5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5oqY5Y+gXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfZXhwJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiB0aGlzLmFjdGlvbih7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbDog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIC8qaWYgKOWwj+exu+WumuS9jS5pbmNsdWRlcyhcXFwiO1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViX2NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzFdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IEpTT04ucGFyc2UoYFske2NhdGVnb3J5fV1gKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHN1Yl9jYXRlZ29yaWVzKVxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wkp+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCB0aXRsZSA9IHBkZmgoaXRlbSwgX+Wkp+exu+agh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHNwKGl0ZW0udGl0bGUpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXdSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSAnJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyczog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdXJsID0gcGQoaXRlbSwgX+Wkp+exu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAo5aSn57G75aSE55CGKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0g5LiA57qn5YiG57G75aSE55CGKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nK3NwKHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSkuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KG5ld19jYXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9saW5lJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wwj+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmFwb3MgPSBmYWxzZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoaXRlbS5pbmNsdWRlcygndHlwZT1cXFwiQGV4dHJhXFxcIicpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFwb3MgPSB0cnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKCfpmYTliqDlrprkvY0nKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhcG9zKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBzcChwZGZoKGl0ZW0sIFxcXCJhJiZUZXh0XFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwZGZoKGl0ZW0sIFxcXCJhJiZzdGF0ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIFxcXCJhJiZ2YWx1ZVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRpdGxlID0gcGRmaChpdGVtLCDliIbnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gaXRlbS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzBdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwZGZoKGl0ZW0sIOWIhuexu+mTvuaOpS5zcGxpdChcXFwiQEBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug5YiG57G76ZO+5o6lLmluY2x1ZGVzKFxcXCJAQFxcXCIpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAXFxcIilbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpzb24gPSBwZChpdGVtLCDliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnZhciBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEBAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQEAnKVsxXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH06cGQoaXRlbSzliIbnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uPeWIhuexu+mTvuaOpS5pbmNsdWRlcygnQEAnKT97XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOuWIhuexu+mTvuaOpS5zcGxpdCgnQEAnKVswXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOnBkZmgoaXRlbSzliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nK3RoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5XFxcIiArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFsbGNsZWFycy5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogTVlfUlVMRS50aXRsZSArICdjYXRlX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMVxcXCIgfHwg5oqY5Y+g54q25oCBID09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGNhdGVzKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT09IFxcXCIwXFxcIikge1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjYXRlcylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXRQcmVSZXN1bHQgIT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBkLmNvbmNhdChpdGVtcyk7XFxuICAgICAgICAgICAgICAgIC8v5riF56m657un5om/5pWw57uEXFxuICAgICAgICAgICAgICAgIGQubGVuZ3RoID0gMDtcXG4gICAgICAgICAgICAgICAgc2V0UHJlUmVzdWx0KGl0ZW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgIH07XFxuICAgIG9iai7pooTorr4ob3B0aW9ucyk7XFxuICAgIHJldHVybiBvYmo7XFxufVxcblxcbnZhciDnirbmgIEgPVxcbiAgICB0eXBlb2Yg54q25oCB5qCH6K6wICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOeKtuaAgeagh+iusCAhPSBcXFwiXFxcIiA/IOeKtuaAgeagh+iusCA6IE1ZX1JVTEUudXJsO1xcblxcbmxldCBkdF9kZWJ1ZyA9IGZhbHNlO1xcblxcbmFkZExpc3RlbmVyKFxcbiAgICBcXFwib25DbG9zZVxcXCIsXFxuICAgICQudG9TdHJpbmcoKCkgPT4ge30pXFxuKTtcXG5cXG52YXIgQ3JlYXRlID0ge1xcbiAgICBuZXh0UGFnZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKCduOicrbmV4dClcXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4i+S4gOmhtemTvuaOpeS4uuepuicpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBsb2coXFxcIumUmeivr+S/oeaBrzpcXFwiICsgZS5tZXNzYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgobmV4dCA9PSBcXFwiXFxcIiB8fCBuZXh0ID09IHVuZGVmaW5lZCkgJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbmV4dCA9IHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL3Jlc3VsdD1mYWxzZTtcXG4gICAgICAgICAgICBuZXh0ID0gZ2V0TXlWYXIo54q25oCBKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCdsJyt0cnVlX3VybClcXG4gICAgICAgIC8vbG9nKCduJytuZXh0KVxcbiAgICAgICAgaWYgKHBhZ2UgIT0gMSkge1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0ICYmICFyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAgICAgLy9wdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9LFxcbiAgICBnZXRCYWNrSW1hZ2U6IGZ1bmN0aW9uKGltZ3VybCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGltZ3VybDtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgcmVzdWx0ID0gL3VybCg/OlxcXFxzKyk/XFxcXCgoLio/KVxcXFwpL2dcXG4gICAgICAgICAgICAgICAgLmV4ZWMoaW1ndXJsKVsxXVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKCd8XFxcInwmcXVvdDspL2dtLCBcXFwiXFxcIik7XFxuICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9LFxcbiAgICBodHRwSGFuZGxlOiBmdW5jdGlvbihpbnB1dCkge1xcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiLy9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaHR0cHM6XFxcIiArIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gTVlfSE9NRSArIGlucHV0O1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBpbWdIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBpbWcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLmltZy5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaW1nID0gZXZhbChydWxlLmltZyk7XFxuICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuYmFja2ltZykge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuZ2V0QmFja0ltYWdlKGltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGltZyA9IHBkZmgoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgIGlmICghaW1nLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgICAgICBpbWcgPSBwZChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBpbWcgKyBydWxlLnJlZjtcXG4gICAgfSxcXG4gICAgdXJsSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaHJlZiA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUudXJsLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGhyZWYgPSBwZChpdGVtLCBydWxlLnVybCk7XFxuICAgICAgICB9XFxuICAgICAgICBocmVmID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI1xcXCIgOiBocmVmO1xcbiAgICAgICAgcmV0dXJuIGhyZWY7XFxuICAgIH0sXFxuICAgIHNldENvbnRlbnQ6IGZ1bmN0aW9uKGl0ZW0sIGlucHV0KSB7XFxuICAgICAgICBsZXQgb3V0cHV0ID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gZXZhbChpbnB1dCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIG91dHB1dCA9IHBkZmgoaXRlbSwgaW5wdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcXG4gICAgfSxcXG4gICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7XFxuICAgICAgICBhZGRMaXN0ZW5lcihcXG4gICAgICAgICAgICBcXFwib25SZWZyZXNoXFxcIixcXG4gICAgICAgICAgICAkLnRvU3RyaW5nKCh1KSA9PiB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInlpbGlzdFxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBwID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ3NwYWdlJywgJycpO1xcbiAgICAgICAgICAgICAgICAvL3B1dE15VmFyKHUsIHApO1xcbiAgICAgICAgICAgIH0sIOeKtuaAgSlcXG4gICAgICAgICk7XFxuICAgIH0sXFxuICAgIGdldEJvb2xlYW5WYWx1ZTogZnVuY3Rpb24odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKHZhbHVlKSA6IChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHRydWUpO1xcbiAgICB9LFxcbiAgICBkZWJ1Z2xvZzogZnVuY3Rpb24oaSwgaXRlbSwgcnVsZSwgb2JqKSB7XFxuICAgICAgICBsb2coJy0tLS0tLS0tLS0nICsgKGkgKyAxKSArICc66LCD6K+V5byA5aeLLS0tLS0tLS0tLScpO1xcbiAgICAgICAgaWYgKGl0ZW0uY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgbG9nKCdpdGVt5YaF5a65OlxcXFxyXFxcXG4nICsgaXRlbSArICdcXFxcclxcXFxuJyArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR0aXRsZeWumuS9jTogICR7cnVsZS50aXRsZX0gIC0tLT4g57uT5p6cOiAgJHtvYmoudGl0bGV9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRkZXNj5a6a5L2NOiAgJHtydWxlLmRlc2N9ICAtLS0+IOe7k+aenDogICR7b2JqLmRlc2N9YCArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHRpbWflrprkvY06ICAke3J1bGUuaW1nfSAgLS0tPiDnu5Pmnpw6ICAke29iai5pbWd9YCArXFxuICAgICAgICAgICAgKHJ1bGUuY29udGVudCAhPSB1bmRlZmluZWQgPyBgXFxcXG5cXFxcdGNvbnRlbnTlrprkvY06ICAke3J1bGUuY29udGVudH0gIC0tLT4g57uT5p6cOiAgJHtvYmouY29udGVudH1gIDogJycpICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdHVybOWumuS9jTogICR7cnVsZS51cmx9ICAtLS0+IOe7k+aenDogICR7b2JqLnVybH1gXFxuICAgICAgICApO1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivlee7k+adny0tLS0tLS0tLS0nKTtcXG4gICAgfSxcXG4gICAganNvbkxpc3Q6IGZ1bmN0aW9uKGFyciwganNvbiwgcnVsZSkge1xcbiAgICAgICAgaWYgKGpzb24uY29uc3RydWN0b3IgIT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoanNvbik7XFxuICAgICAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGpzb25bcnVsZS5saXN0XSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICBhcnIucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICBqc29uW3J1bGUubGlzdF0uZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHNwKGV2YWwocnVsZS50aXRsZSkpO1xcbiAgICAgICAgICAgIHZhciBkZXNjID0gc3AoZXZhbChydWxlLmRlc2MpKTtcXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IHNwKGV2YWwocnVsZS5jb250ZW50KSk7XFxuICAgICAgICAgICAgdmFyIGltZyA9IGV2YWwocnVsZS5pbWcpICsgcnVsZS5yZWY7XFxuICAgICAgICAgICAgdmFyIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gcnVsZS5pbXQgPyBocmVmICsgXFxcIiNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI1xcXCIgOiBocmVmO1xcbiAgICAgICAgICAgIHZhciBsYXp5ID0gcnVsZS5sYXp5ID8gcnVsZS5sYXp5IDogXFxcIlxcXCI7XFxuXFxuICAgICAgICAgICAgdmFyIGRkID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9O1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSBocmVmICsgbGF6eTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIHJ1bGVMaXN0OiBmdW5jdGlvbihhcnIsIGh0bWwsIHJ1bGUpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLFxcbiAgICAgICAgICAgIHJ1bGUubGlzdCk7XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLFxcbiAgICAgICAgICAgIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSkpO1xcbiAgICAgICAgICAgIHZhciBkZXNjID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYykpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5jb250ZW50KSk7XFxuXFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHZhciBsYXp5ID0gcnVsZS5sYXp5ID8gcnVsZS5sYXp5IDogXFxcIlxcXCI7XFxuICAgICAgICAgICAgdmFyIGRkID0ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIHVybCxcXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IHVybCArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBMaXN0OiBmdW5jdGlvbihhcnIsIGh0bWwsIHJ1bGUsIHBhcmFtKSB7XFxuICAgICAgICBwYXJhbSA9IHBhcmFtID8gcGFyYW0gOiB7fTtcXG4gICAgICAgIHZhciBhdXRvID0gcGFyYW0uYXV0byA/IHBhcmFtLmF1dG8gOiBmYWxzZTtcXG4gICAgICAgIHZhciBzaG93ID0gcGFyYW0uc2hvdyA/IHBhcmFtLnNob3cgOiBmYWxzZTtcXG4gICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAvL3RoaXMuc3BhZ2Uuc2V0KHRydWVfdXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZywgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgcnVsZS5saXN0KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2codGhpcy5uZXh0UGFnZSgpKVxcbiAgICAgICAgaWYgKChzdG9yYWdlMC5nZXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKSA9PSAndCcgJiYgbGlzdC5sZW5ndGggPiAwKSB8fCBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZW51bVxcXCIpO1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbGluZVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIGNscyA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS50aXRsZSkpO1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpKTtcXG4gICAgICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy51cmxIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCkpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBcXFwibGFzdGlkX1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgY2xzID0gXFxcImxhc3RtYXJrXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IHJ1bGUuY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGNscyxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEgJiYgc2hvdykge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZWxpbmVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ08c21hbGw+5Yqg6L295LitLi4uPC9zbWFsbD5cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbnVtXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbShcXFwicGFnZW51bVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuWIsOW6leS6hjwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJsYXN0XFxcIixcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAwICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodGhpcy5uZXh0UGFnZSgpKSB7XFxuICAgICAgICAgICAgLy9sb2coJ3QnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ3QnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9sb2coJ2YnKTtcXG4gICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcigneWlfaXNuZXh0JywgJ2YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChhdXRvKSB7XFxuICAgICAgICAgICAgLy9jcmVhdGVOZXh0UGFnZSgpO1xcbiAgICAgICAgICAgIGF1dG9QYWdlKCk7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG52YXIgZXh0TWV0aG9kID0ge1xcbiAgICBUb1BhcmFtczogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIganNvbiA9IGFyZ3VtZW50c1swXTtcXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uKVxcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4ga2V5ICsgXFxcIj1cXFwiICsganNvbltrZXldKVxcbiAgICAgICAgICAgIC5qb2luKFxcXCImXFxcIik7XFxuICAgIH0sXFxuICAgIHVybFBhcnNlOiBmdW5jdGlvbih1KSB7XFxuICAgICAgICB2YXIgZGljdCA9IHt9O1xcbiAgICAgICAgZGljdC5Tb3VyY2UgPSB1O1xcbiAgICAgICAgbGV0IHBhcmFtcyA9ICh1cmwpID0+IHtcXG4gICAgICAgICAgICBsZXQgcXVlcnlQYXJhbXMgPSB7fTtcXG4gICAgICAgICAgICBsZXQgcmVnID0gLyhbXj89Jl0rKT0oW14/PSZdKykvZztcXG4gICAgICAgICAgICB1cmwucmVwbGFjZShyZWcsIGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1thcmd1bWVudHNbMV1dID0gYXJndW1lbnRzWzJdO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgamF2YVVybCA9IEphdmFJbXBvcnRlcihqYXZhLm5ldC5VUkwpO1xcbiAgICAgICAgd2l0aChqYXZhVXJsKSB7XFxuICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwodSk7XFxuICAgICAgICAgICAgZGljdC5Qcm90b2NvbCA9IHVybC5nZXRQcm90b2NvbCgpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdCA9IHVybC5nZXRIb3N0KCk7XFxuICAgICAgICAgICAgZGljdC5Qb3J0ID0gdXJsLmdldFBvcnQoKTtcXG4gICAgICAgICAgICBkaWN0LkZpbGUgPSB1cmwuZ2V0RmlsZSgpO1xcbiAgICAgICAgICAgIGRpY3QuUGF0aCA9IHVybC5nZXRQYXRoKCk7XFxuICAgICAgICAgICAgZGljdC5SZWYgPSB1cmwuZ2V0UmVmKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0cyA9IGAke2RpY3QuUHJvdG9jb2x9Oi8vJHt1cmwuZ2V0SG9zdCgpfWA7XFxuICAgICAgICB9XFxuICAgICAgICBkaWN0LlBhcmFtcyA9IHBhcmFtcyh1KTtcXG4gICAgICAgIHJldHVybiBkaWN0O1xcbiAgICB9LFxcbiAgICBpc0VxdWFsOiBmdW5jdGlvbih4LCB5KSB7XFxuICAgICAgICBjb25zdCBvayA9IE9iamVjdC5rZXlzLFxcbiAgICAgICAgICAgIHR4ID0gdHlwZW9mIHgsXFxuICAgICAgICAgICAgdHkgPSB0eXBlb2YgeTtcXG4gICAgICAgIHJldHVybiB4ICYmIHkgJiYgdHggPT09IFxcXCJvYmplY3RcXFwiICYmIHR4ID09PSB0eSA/XFxuICAgICAgICAgICAgb2soeCkubGVuZ3RoID09PSBvayh5KS5sZW5ndGggJiZcXG4gICAgICAgICAgICBvayh4KS5ldmVyeSgoa2V5KSA9PiB0aGlzLmlzRXF1YWwoeFtrZXldLCB5W2tleV0pKSA6IHggPT09IHk7XFxuICAgIH0sXFxuICAgIGZpbmREaWZmZXJlbnRJbmRleDogZnVuY3Rpb24oc3RyMSwgc3RyMikge1xcbiAgICAgICAgY29uc3QgZGlmZkNoYXJzID0gW107XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cjIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPT0gc3RyMltpXSkge1xcbiAgICAgICAgICAgICAgICBkaWZmQ2hhcnMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcXG4gICAgICAgICAgICAgICAgICAgIHMxOiBzdHIxW2ldLFxcbiAgICAgICAgICAgICAgICAgICAgczI6IHN0cjJbaV0sXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmQ2hhcnM7XFxuICAgIH0sXFxuICAgIHJlcGxhY2VDaGFyQXQ6IGZ1bmN0aW9uKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50KSB7XFxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0ci5sZW5ndGgpIHtcXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICBjb25zdCBhcnIgPSBzdHIuc3BsaXQoXFxcIlxcXCIpO1xcbiAgICAgICAgYXJyW2luZGV4XSA9IHJlcGxhY2VtZW50O1xcbiAgICAgICAgcmV0dXJuIGFyci5qb2luKFxcXCJcXFwiKTtcXG4gICAgfSxcXG4gICAgZ2V0T2JqZWN0S2V5c0RpZmY6IGZ1bmN0aW9uKG9iajEsIG9iajIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZlcmVudEtleXMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoxKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoyLmhhc093blByb3BlcnR5KGtleSkgfHwgb2JqMVtrZXldICE9PSBvYmoyW2tleV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajIpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZmVyZW50S2V5cztcXG4gICAgfSxcXG4gICAgZ2V0TmV4dFVybDogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIHBhcmFtcykge1xcbiAgICAgICAgdmFyIHUxID0gdGhpcy51cmxQYXJzZShzb3VyY2UpO1xcbiAgICAgICAgdmFyIHUyID0gdGhpcy51cmxQYXJzZSh0YXJnZXQpO1xcbiAgICAgICAgdmFyIHBhID0gdW5kZWZpbmVkO1xcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gXFxcIm9iamVjdFxcXCIpIHtcXG4gICAgICAgICAgICBwYSA9IHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShcXFwi54m55b6BXFxcIikgPyBwYXJhbXMu54m55b6BIDogdW5kZWZpbmVkO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIG5leHR1cmwgPSBzb3VyY2U7XFxuICAgICAgICB2YXIgY2EgPSBPYmplY3Qua2V5cyh1Mi5QYXJhbXMpLmxlbmd0aCA9PSAwID8gXFxcIlxcXCIgOiBcXFwiP1xcXCI7XFxuICAgICAgICBpZiAocGEgIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgdmFyIHJzID0gU3RyaW5nKHUyLlBhdGgpLnJlcGxhY2UobmV3IFJlZ0V4cChwYSksIFxcXCIkMWZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgIG5leHR1cmwgPSB1Mi5Ib3N0cyArIHJzICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUyLlBhcmFtcyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXF1YWwodTEuUGFyYW1zLCB1Mi5QYXJhbXMpKSB7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHUxLlBhdGgpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHUyLlBhdGgpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBkZiA9IHRoaXMuZmluZERpZmZlcmVudEluZGV4KFN0cmluZyh1MS5QYXRoKSwgU3RyaW5nKHUyLlBhdGgpKTtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZGYpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChkZi5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGRmLmZpbHRlcigoeCkgPT4gL1xcXFxkKy8udGVzdCh4LnMyKSk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IHRoaXMucmVwbGFjZUNoYXJBdChTdHJpbmcodTIuUGF0aCksIHJlLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1Mi5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUyLlBhcmFtcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGVwID0gdGhpcy5nZXRPYmplY3RLZXlzRGlmZih1MS5QYXJhbXMsIHUyLlBhcmFtcylcXG4gICAgICAgICAgICAgICAgaWYgKGVwLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB1MS5QYXJhbXNbZXBbMF1dID0gJ2Z5cGFnZSdcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhlcCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gU3RyaW5nKHUxLlBhdGgpLnJlcGxhY2UoL1xcXFxkKy8sIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUxLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTEuUGFyYW1zKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHR1cmwpXFxuICAgICAgICByZXR1cm4gbmV4dHVybDtcXG4gICAgfSxcXG59O1xcblxcbmZ1bmN0aW9uIGdldFRydWVsaW5rKG1hcmssIHVybCwgcGFnZSkge1xcbiAgICB2YXIgcCA9IGdldE15VmFyKG1hcmssIHVybCkucmVwbGFjZShcXFwiZnlwYWdlXFxcIiwgcGFnZSk7XFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgIHJldHVybiBnZXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgcCk7XFxuICAgIH0gZWxzZSBpZiAocCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgcmV0dXJuIHA7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gdXJsO1xcbiAgICB9XFxufVxcbi8v5p6E5bu6XFxuZnVuY3Rpb24gY3JlYXRlTmV4dFBhZ2UoKSB7XFxuICAgIGxldCBzdGFydG51bSA9IDE7XFxuICAgIHZhciBvYmogPSBhcmd1bWVudHNbMF07XFxuICAgIGlmICh0cnVlX3VybCAhPSBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIFxcXCJcXFwiKSkge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpO1xcbiAgICB9XFxuICAgIGlmIChwYWdlID09IHN0YXJ0bnVtICYmIGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCB0cnVlX3VybCk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAgICAgLy9sb2cobmV4dCk7XFxuICAgICAgICB9IGNhdGNoIHtcXG4gICAgICAgICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgICAgIG5leHQgPSBcXFwiXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgdmFyIG54dXJsID0gZXh0TWV0aG9kLmdldE5leHRVcmwodHJ1ZV91cmwsIG5leHQsIG9iaik7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm54dXJsOlxcXCIgKyBueHVybCk7XFxuICAgICAgICAgICAgcHV0TXlWYXIo54q25oCBLCBueHVybCk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiLCBueHVybCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gYXV0b1BhZ2UoKSB7XFxuICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgIHB1dE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCB0cnVlX3VybCk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBuZXh0ID0gZXZhbCjkuIvkuIDpobUpO1xcbiAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dCk7XFxuICAgIH0gY2F0Y2gge1xcbiAgICAgICAgbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgIG5leHQgPSBcXFwiXFxcIjtcXG4gICAgfVxcbiAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIo54q25oCBLCBuZXh0KTtcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS7i+e7jVwiLFwicGF0aFwiOlwiaW50cm9kdWNlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdXFxuZC5wdXNoKHtcXG5pbWc6IE1ZX1BBUkFNUy5pbWcsXFxudXJsOiBNWV9QQVJBTVMuaW1nLFxcbmNvbF90eXBlOlxcXCJwaWNfMV9mdWxsXFxcIixcXG59KVxcbmQucHVzaCh7XFxudGl0bGU6IE1ZX1BBUkFNUy5pbnRyb2R1Y2UsXFxuY29sX3R5cGU6XFxcInJpY2hfdGV4dFxcXCIsXFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJcIixcInBhdGhcIjpcInNlYXJjaFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbnZhciBUaXRsZSA9IE1ZX1BBUkFNUy50aXRsZT9NWV9QQVJBTVMudGl0bGU6Z2V0UGFyYW0oJ3RpdGxlJyk/Z2V0UGFyYW0oJ3RpdGxlJyk6Z2V0VmFyKCdUaXRsZScpXFxudmFyIHN1cmwgPSBnZXRWYXIoJ2xpbmsnKStcXFwiL3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PVxcXCIrVGl0bGUrXFxcIiZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9XFxcIlxcbnZhciBVUkw9IHN1cmwrcGFnZTtcXG4vL3ZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbmxldCBub3cgPSBnZXRJdGVtKCdub3cnLCAn5pyA5aSa54K55Ye7Jyk7XFxuaWYoTVlfUEFHRT09MSl7XFxuZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5qCH562+5pCc57Si77yaXFxcIisn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiI2ZmMTQ5M1xcXCI+JytUaXRsZSsnPC9mb250Pjwvc3Ryb25nPicsXFxuICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL1xcXCIrTVlfUEFSQU1TLnRpdGxlK1xcXCLwn6SUXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuZXh0cmE6e1xcXCJsaW5lVmlzaWJsZVxcXCI6ZmFsc2V9XFxuICAgIH0pXFxubGV0IGFyciA9IFtcXFwi5pyA5aSa54K55Ye7XFxcIixcXFwi5pyA5pawXFxcIixcXFwi5pyA5aSa54ix5b+DXFxcIixcXFwi5pyA5aSa5Zu+54mHXFxcIl07XFxuZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBub3cgPT0gaXQgPyAn4oCc4oCc4oCd4oCdJyArIGl0LmZvbnRjb2xvcigncmVkJykgOiBpdCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwibm93XFxcIiwgaXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGl0KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5pZiAobm93ID09ICfmnIDlpJrngrnlh7snKSB7XFxudmFyIGh0bWwgPSBmZXRjaChVUkwpO1xcbn1lbHNlIGlmIChub3cgPT0gJ+acgOaWsCcpIHtcXG52YXIgaHRtbCA9IGZldGNoKFVSTC5yZXBsYWNlKCdtdicsJ21yJykpO1xcbn1lbHNlIGlmIChub3cgPT0gJ+acgOWkmueIseW/gycpIHtcXG52YXIgaHRtbCA9IGZldGNoKFVSTC5yZXBsYWNlKCdtdicsJ3RmJykpO1xcbn1lbHNlIGlmIChub3cgPT0gJ+acgOWkmuWbvueJhycpIHtcXG52YXIgaHRtbCA9IGZldGNoKFVSTC5yZXBsYWNlKCdtdicsJ21wJykpO1xcbn1cXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5tLTAmJi5jb2wteHMtNicpO1xcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4sMSYmVGV4dCcpKSxcXG4gICAgICAgIGRlc2M6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4mJlRleHQnKSsnXFxcXHRcXFxcdCcrcGRmaChsaXN0W2pdLCAnLmxhYmVsLWNhdGVnb3J5JiZUZXh0JykrXFxcIiBcXFwiK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1zdWImJlRleHQnKSksXFxuICAgICAgICBpbWc6IHBkZmgobGlzdFtqXSwgJ2ltZyYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICAgICAgdXJsOiBnZXRWYXIoJ2xpbmsnKStwZGZoKGxpc3Rbal0sICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknLFxcbmNvbF90eXBlOiAnbW92aWVfMycsXFxuZXh0cmE6e1xcbiAgICBwYWdlVGl0bGU6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4sMSYmVGV4dCcpKSxcXG59XFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdcIixcInBhdGhcIjpcImVqXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxuLy9ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2VyP3J1bGU9zrEnKSkucnVsZSk7XFxudmFyIGhlYWRlcnMgPSB7XFxuICAgICAgICBcXFwiQ29va2llXFxcIjogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9KTV9jb29raWUudHh0JykgfHwgJycsIFxcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCIsXFxuICAgICAgICBcXFwiUmVmZXJlclxcXCI6IE1ZX1VSTFxcbiAgICB9O1xcbiAgICAvL2xvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwse2hlYWRlcnM6aGVhZGVyc30pXFxuc2V0UGFnZVRpdGxlKHNwKHBkZmgoaHRtbCwnaDEmJlRleHQnKSkpXFxudmFyIGxpbmsgPSBnZXRWYXIoJ2xpbmsnKVxcbnZhciBjb250ZW50cyA9IHBkZmEoaHRtbCwgJyNpbnRyby1ibG9jayYmLnRhZy1ibG9jaycpXFxudmFyIGNvbnRlbnQgPSBjb250ZW50cy5tYXAoeCA9PiBwZGZoKHgsICdkaXYmJlRleHQnKSk7XFxudmFyIGludHJvZHVjZSA9IHNwKHBkZmgoaHRtbCwgXFxcIiNpbnRyby1ibG9jayYmLnAtYi01JiZUZXh0XFxcIikpO1xcbnZhciBwYWdlY291bnQ9c3AocGRmaChodG1sLCBcXFwiLnBhZ2Vjb3VudCYmVGV4dFxcXCIpKTtcXG52YXIgSUQgPSBcXFwi56aB5ryrSUQ6XFxcIitwZGZoKGh0bWwsIFxcXCIubnVtYmVyJiZUZXh0XFxcIikuc3BsaXQoJ0pNJylbMV1cXG52YXIgdmlld3MgPSBzcChcXFwi8J+RjVxcXCIrcGRmaChodG1sLCBcXFwiLmxpc3Qtc3R5bGUtbm9uZSYmVGV4dFxcXCIpK1xcXCIgICBcXFwiK1xcXCLwn5GAXFxcIitwZGZoKGh0bWwsIFxcXCIubGlzdC1zdHlsZS1ub25lLDEmJlRleHRcXFwiKSk7XFxudmFyIGlkID0gcGRmaChodG1sLCBcXFwiI2FsYnVtX2lkJiZ2YWx1ZVxcXCIpO1xcbnZhciBjb21tZW50ID0gcGRmaChodG1sLCBcXFwiI2NvbW1lbnRzX2EmJlRleHRcXFwiKTtcXG52YXIgYXV0aG9yID1wZGZhKGh0bWwsICcjaW50cm8tYmxvY2smJi50YWctYmxvY2ssMyYmYScpO1xcbnZhciB0YWcgPSBwZGZhKGh0bWwsICcjaW50cm8tYmxvY2smJi50YWctYmxvY2ssMiYmYScpO1xcbnRyeSB7XFxuICAgIHZhciBkZXNfcGljID0gcGQoaHRtbCwgJ2JvZHkmJi50aHVtYi1vdmVybGF5LDEmJmltZyYmc3JjfHxkYXRhLWNmc3JjJyk7XFxuICAgIHZhciBkZXNfYXV0aG9yID0gc21hbGwoc3AocGRmaChodG1sLCAnYm9keSYmLnBhbmVsLWhlYWRpbmcmJmRpdiwxJiZUZXh0Jykuc3Vic3RyaW5nKDAsIDIwKSsnXFxcXG4nK3BhcnNlRG9tRm9ySHRtbChodG1sLCAnYm9keSYmLnAtdC01LDAmJlRleHQnKSsnXFxcXG4nKyBwYXJzZURvbUZvckh0bWwoaHRtbCwgJ2JvZHkmJi5wLXQtNSwxJiZUZXh0JykpLCdGMEZGRkYnKTtcXG4gICAgdmFyIGRlc19kZXNjID0gc21hbGwoc3AocGFnZWNvdW50K1xcXCIgIFxcXCIrSUQrJ1xcXFxuJyt2aWV3cysnXFxcXG4nK2ludHJvZHVjZSksJzAwNjY5OScpO1xcbiAgICB2YXIgZGVzX3RpdGxlID0gc3AocGFyc2VEb21Gb3JIdG1sKGh0bWwsICdoMSYmVGV4dCcpKTtcXG4gICAgdmFyIGNvbnRzID0gcGRmYShodG1sLCAnYm9keSYmLmJ0bi10b29sYmFyJiZhJyk7XFxuICAgIGlmIChjb250cy5sZW5ndGggPT09IDApIHtcXG4gICAgY29udHMgPSBwZGZhKGh0bWwsICdib2R5JiYucmVhZC1ibG9jayYmYScpO1xcbiAgICB9XFxuICAgIHZhciBmYXZfaWQgPSBwZGZoKGh0bWwsXFxcImJvZHkmJi5idG4tcHJpbWFyeTptYXRjaGVzKOaUtuiXjykmJmlkXFxcIikuc3BsaXQoJ18nKVsyXVxcbiAgICBpZihmYXZfaWQpe1xcbiAgICAgICAgdmFyIGZhdl9pbmZvID0gdHJ1ZTtcXG4gICAgICAgIHZhciBmYXZfdXJsID0gbGluaysnL2FqYXgvcmVtb3ZlX2FsYnVtX3BsYXlsaXN0JztcXG4gICAgICAgIHZhciBmYXZfZGF0YSA9IHtcXG4gICAgICAgICAgICBcXFwidmlkZW9faWRcXFwiOiBmYXZfaWQsXFxuICAgICAgICAgICAgXFxcImxpc3RcXFwiOiAnZmF2b3JpdGVzJ1xcbiAgICAgICAgfVxcbiAgICAgICAgIFxcbiAgICB9ZWxzZXtcXG4gICAgICAgIHZhciBmYXZfaW5mbyA9IGZhbHNlO1xcbiAgICAgICAgdmFyIGZhdl9pZCA9IHBkZmgoaHRtbCxcXFwiYm9keSYmLmZsb2F0LXJpZ2h0Om1hdGNoZXMo5pS26JePKSYmaWRcXFwiKS5zcGxpdCgnXycpWzJdXFxuICAgICAgICB2YXIgZmF2X3VybCA9IGxpbmsrJy9hamF4L2Zhdm9yaXRlX2FsYnVtJztcXG4gICAgICAgIHZhciBmYXZfZGF0YSA9IHtcXG4gICAgICAgICAgICBcXFwiYWxidW1faWRcXFwiOiBmYXZfaWQsXFxuICAgICAgICAgICAgXFxcImZpZFxcXCI6ICcwJ1xcbiAgICAgICAgfVxcbiAgICAgICAgXFxuICAgICAgICB9XFxuICAgLy9sb2coZmF2X2lkKSBcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBkZXNfYXV0aG9yLFxcbiAgICAgICAgZGVzYzogZGVzX2Rlc2MsXFxuICAgICAgICBwaWNfdXJsOiBkZXNfcGljLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2ludHJvZHVjZSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJyxcXG5leHRyYToge1xcbiAgICAgICAgICAgIGltZzogZGVzX3BpYyxcXG4gICAgICAgICAgICBpbnRyb2R1Y2U6IGludHJvZHVjZSxcXG4gICAgICAgICAgICBncmFkaWVudDogdHJ1ZSAgICAgICAgICAgIFxcbiAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIHRpdGxlOiBmYXZfaW5mbz8n4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7kuI3mlLbol488L2ZvbnQ+PC9zdHJvbmc+Jzon4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiIzAwYmZmZlxcXCI+5pS26JePPC9mb250Pjwvc3Ryb25nPicsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoZmF2X2lkLCBoZWFkZXJzLCBmYXZfaW5mbywgZmF2X3VybCwgZmF2X2RhdGEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHBvc3RSZXF1ZXN0KGZhdl91cmwsIHtoZWFkZXJzOiBoZWFkZXJzLCBib2R5OiBmYXZfZGF0YX0pXFxuICAgICAgICAgICAgICAgICAgICB0b2FzdChmYXZfaW5mbz8n5Y+W5raI5pS26JePJzon5pS26JeP5oiQ5YqfJylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSwgZmF2X2lkLCBoZWFkZXJzLCBmYXZfaW5mbywgZmF2X3VybCwgZmF2X2RhdGEpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzRcXFwiXFxuICAgICAgICBcXG4gICAgfSx7XFxudGl0bGU6IFxcXCLkvZzogIXwn5mH4oCN4pmC77iPXFxcIixcXG51cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGF1dGhvcikgPT4ge1xcbiAgICAgIGNvbnN0IGhpa2VyUG9wID0gcmVxdWlyZShcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3dlaXN5ci9qcy9oaWtlclBvcC5qc1xcXCIpO1xcbiAgICAgIGxldCDmoIfnrb4gPSBhdXRob3IubWFwKHggPT4ge1xcbiAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKHgsJ2EmJlRleHQnKTtcXG4gICAgICAgICAgICAgIHJldHVybiB7ICAgICAgICBcXG4gICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwgICAgICAgIFxcbiAgICAgICAgICAgICAgaWNvbjogZ2V0VmFyKCdsaW5rJykrXFxcIi90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL2FwcF9saW5rMy5wbmc/dj0zXFxcIiwgICAgICAgIFxcbiAgICAgICAgICAgICAgdXJsOiB0aXRsZSwgICAgfX0pOyAgICAgICAgICAgaGlrZXJQb3Auc2VsZWN0Q2VudGVySWNvbih7XFxuICAgICAgICAgICAgICBpY29uTGlzdDog5qCH562+LCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlsI/wn6aM5oCh5oOFXFxcIiwgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIGNvbHVtbnM6IDIsICAgICAgICAgICAgXFxuICAgICAgICAgICAgICBjbGljayhhKSB7ICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoP3RpdGxlPVxcXCIrYStcXFwiJnBhZ2U9ZnlwYWdlI2Z1bGxUaGVtZSMjbm9IaXN0b3J5I1xcXCI7ICAgICAgICAgICAgfSAgICAgICAgfSk7ICAgICAgICBcXG4gICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7ICAgIH0sYXV0aG9yKSxcXG5jb2xfdHlwZTogXFxcInRleHRfNFxcXCIsXFxufSx7XFxudGl0bGU6IFxcXCLmoIfnrb7wn4+377iPXFxcIixcXG51cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHRhZykgPT4ge1xcbiAgICAgIGNvbnN0IGhpa2VyUG9wID0gcmVxdWlyZShcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3dlaXN5ci9qcy9oaWtlclBvcC5qc1xcXCIpO1xcbiAgICAgIGxldCDmoIfnrb4gPSB0YWcubWFwKHggPT4ge1xcbiAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKHgsJ2EmJlRleHQnKTtcXG4gICAgICAgICAgbGV0IHVybCA9IHBkKHgsJ2EmJmhyZWYnKStcXFwiJm1haW5fdGFnPTAmbz1tdiZ0PWEmcGFnZT1cXFwiO1xcbiAgICAgICAgICAgICAgcmV0dXJuIHsgICAgICAgIFxcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLCAgICAgICAgXFxuICAgICAgICAgICAgICBpY29uOiBnZXRWYXIoJ2xpbmsnKStcXFwiL3RlbXBsYXRlcy9mcm9udGVuZC9haXJhdi9pbWcvcGhpY29uL2xpYnJhcnkucG5nXFxcIiwgICAgICAgIFxcbiAgICAgICAgICAgICAgdXJsOiB0aXRsZSwgICAgfX0pOyAgICAgICAgICAgaGlrZXJQb3Auc2VsZWN0Q2VudGVySWNvbih7XFxuICAgICAgICAgICAgICBpY29uTGlzdDog5qCH562+LCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlpKfwn6aM5Lyk6LqrXFxcIiwgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIGNvbHVtbnM6IDIsICAgICAgICAgICAgXFxuICAgICAgICAgICAgICBjbGljayhhKSB7ICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoP3RpdGxlPVxcXCIrYStcXFwiJnBhZ2U9ZnlwYWdlI2Z1bGxUaGVtZSMjbm9IaXN0b3J5I1xcXCI7ICAgICAgICAgICAgfSAgICAgICAgfSk7ICAgICAgICBcXG4gICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7ICAgIH0sdGFnKSxcXG5jb2xfdHlwZTogXFxcInRleHRfNFxcXCIsXFxufSx7XFxudGl0bGU6IGNvbW1lbnQsXFxudXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbW1lbnQ/aWQ9XFxcIitpZCtcXFwiJnBhZ2U9ZnlwYWdlJnRhZz1hbGJ1bSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiLFxcbmNvbF90eXBlOiBcXFwidGV4dF80XFxcIixcXG5cXG59LHtcXG5jb2xfdHlwZTogXFxcImxpbmVcXFwiXFxufSlcXG5mdW5jdGlvbiBqbSgpIHtcXG4gICAgdmFyIGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgdmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsIFxcXCIucGFuZWwtYm9keSYmaW1nOm5vdChbZGF0YS1jZnNyY10pOm5vdChbYWx0XSlcXFwiKTtcXG4gICAgdmFyIHBpY3MgPSBbXTtcXG4gICAgZm9yICh2YXIgaXRlbSBvZiBsaXN0KSB7XFxuICAgICAgICB2YXIgcGljVXJsID0gcGQoaXRlbSwgJ2ltZyYmZGF0YS1vcmlnaW5hbCcpO1xcbiAgICAgICAgbGV0IGRlY29kZSA9ICQoKS5pbWFnZSgocGljVXJsKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiZD9ydWxlPVxcXCIgKyBNWV9USVRMRSkocGljVXJsLCBpbnB1dCk7XFxuICAgICAgICB9LCBwaWNVcmwpO1xcbiAgICAgICAgcGljcy5wdXNoKHBpY1VybCArIGRlY29kZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIiArIHBpY3Muam9pbihcXFwiJiZcXFwiKTtcXG59XFxuXFxuZnVuY3Rpb24gYmptKCkge1xcbiAgICBcXG4gICAgdmFyIGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgdmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsIFxcXCIucGFuZWwtYm9keSYmaW1nXFxcIik7XFxuICAgIHZhciBwaWNzID0gW107XFxuICAgIGZvciAodmFyIGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgdmFyIHBpY1VybCA9IHBkKGl0ZW0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKTtcXG4gICAgICAgIHBpY3MucHVzaChwaWNVcmwpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufVxcbiAgICB2YXIgbGF6eUptID0gJChcXFwiXFxcIikubGF6eVJ1bGUoam0pO1xcbiAgICB2YXIgbGF6eUJqbSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGJqbSk7XFxuICAgIHZhciBjaGFwdGVyTGlzdCA9IFtdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IChnZXRNeVZhcignc2hzb3J0JykgPT09ICcxJykgPyAnPGI+PGZvbnQgY29sb3I9XFxcIiMxOUI4OURcXFwiPumAiembhumAhuW6jzwvZm9udD48Zm9udCBjb2xvcj1cXFwiI2ZmN2Y1MFxcXCI+4pa+PC9mb250PjwvYj4nOiAnPGI+PGZvbnQgY29sb3I9XFxcIiMxOUI4OURcXFwiPumAiembhuato+W6jzwvZm9udD48Zm9udCBjb2xvcj1cXFwiIzMzY2NjY1xcXCI+4pa0PC9mb250PjwvYj4nLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBsZXQgY29uZiA9IGdldE15VmFyKCdzaHNvcnQnKTtcXG4gICAgICAgICAgICBpZiAoY29uZiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNoc29ydFxcXCIsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNoc29ydFxcXCIsIFxcXCIxXFxcIilcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouaOkuW6j+aIkOWKnydcXG4gICAgICAgIH0pLFxcbiAgICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS85LnN2ZycsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbidcXG4gICAgfSk7XFxuXFxuXFxuICBpZiAoY29udHMubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi54K55Ye755u05o6l6ZiF6K+7XFxcIixcXG4gICAgICAgICAgICB1cmw6IHVybCArIGxhenlCam0sXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4jeino+WvhicsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCwgbGF6eUJqbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUJqbVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybCwgbGF6eUJqbSlcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfop6Plr4YnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwsIGxhenlKbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUptXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdXJsLCBsYXp5Sm0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGNoYXB0ZXJMaXN0LnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBkZXNfdGl0bGUsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaHR0cHM6Ly9qbWNvbWljLm1lL3Bob3RvL1xcXCIgKyBNWV9VUkwuc3BsaXQoXFxcIlxcXFwvXFxcIilbNF1cXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbGV0IGxpc3QgPSBjb250cy5tYXAodiA9PiB7XFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gc3AocGRmaCh2LCAnYSYmVGV4dCcpKSxcXG4gICAgICAgICAgICAgICAgdXJsID0gcGQodiwgJ2EmJmhyZWYnKTtcXG4gICAgICAgICAgICBjaGFwdGVyTGlzdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmwgKyBsYXp5Sm0sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuI3op6Plr4YnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsLCBsYXp5QmptKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUJqbVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIGxhenlCam0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6Kej5a+GJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCwgbGF6eUptKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgbGF6eUptXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybCwgbGF6eUptKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKGdldE15VmFyKCdzaHNvcnQnKSA9PT0gJzEnKSB7XFxuICAgICAgICAgICAgbGlzdC5yZXZlcnNlKCk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkID0gZC5jb25jYXQobGlzdCk7XFxuICAgIH1cXG4gICAgdmFyIHJlY29tbWVuZCA9IHBkZmEoaHRtbCxcXFwiI3JlbGF0ZWRfY29taWNzJiYucm93OmhhcyhoNClcXFwiKVxcbiAgICByZWNvbW1lbmQuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChkYXRhLFxcXCJoNCYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgfSlcXG4gICAgICAgIHZhciBpdGVtID0gcGRmYShkYXRhLCAnYm9keSYmLnAtYi0xNSwwOjYnKTtcXHJcXG4gICAgICAgICAgICBpdGVtLmZvckVhY2goKGRhdGFzKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSBwZGZoKGRhdGFzLFxcXCJpbWcmJmRhdGEtc3JjXFxcIilcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChkYXRhcyxcXFwiaW1nJiZhbHRcXFwiKVxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGQoZGF0YXMsXFxcImEmJmhyZWZcXFwiKSArJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknXFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gcGRmaChkYXRhcyxcXFwiLnRleHQtd2hpdGUmJlRleHRcXFwiKStcXFwiIFxcXCIrcGRmaChkYXRhcyxcXFwiLnZpZGVvLXZpZXdzJiZUZXh0XFxcIilcXG4gICAgICAgICAgICAgICAgdmFyIGFydGljbGUgPSBwZGZoKGRhdGFzLFxcXCIuZ2FtZWxpYl9ibG9ja19oZWFkZXImJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYoYXJ0aWNsZSl7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjID0gYXJ0aWNsZVxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlP3VybD1cXFwiK3BkKGRhdGFzLFxcXCJhLDEmJmhyZWZcXFwiKStcXFwiI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSNcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXHJcXG5cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmr4/lkajlv4XnnItcIixcInBhdGhcIjpcImJrXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiLCB7fSkpLnJ1bGUpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbmNvbnN0IGhvc3QgPSBnZXRWYXIoJ2xpbmsnKStcXFwiL3dlZWs/c2tkYWQ9MVxcXCI7XFxudmFyIOWumuS9jeS/oeaBryA9IFt7XFxuICAgIOWkp+exu+WumuS9jTogJ2JvZHkmJi53ZWVrLXRpbWUtaXRlbScsXFxuICAgIOWwj+exuzogJ2JvZHkmJmEnLFxcbn0sIHtcXG4gICAg5LiA57qn5a6a5L2NOiAnYm9keSYmLm5hdi1waWxscycsXFxuICAgIOWwj+exuzogJ2JvZHkmJmEnLFxcbn1dO1xcbk1ZX1VSTCA9IGhvc3Q7XFxubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsIE1ZX1VSTClcXG52YXIgaHRtbCA9IGZldGNoKHRydWVfdXJsKTtcXG5jb25zdCBkYyA9IGR5bmFtaWNDbGFzcyh7XFxuICAgIOWIhuexu+minOiJsjogZ2V0UmFuZ2VDb2xvcnMoKVxcbn0pO1xcbmRjLuW8gOWQr+aKmOWPoChmYWxzZSlcXG5kYy7lvIDlkK/mkJzntKIoZmFsc2UpLuWIm+W7uuWKqOaAgeWIhuexuyjlrprkvY3kv6Hmga8pXFxudmFyIGl0ZW0gPSBwZGZhKGh0bWwsICdib2R5JiYud2Vla2x5LXZpZGVvLWl0ZW0nKTtcXHJcXG4gICAgICAgICAgICBpdGVtLmZvckVhY2goKGRhdGFzKSA9PiB7XFxyXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7IFxcclxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHNwKHNtYWxsKHBkZmgoZGF0YXMsICcudmlkZW8tdGl0bGUmJlRleHQnKSsnXFxcXG4nK3BkZmgoZGF0YXMsICcudGl0bGUtdHJ1bmNhdGUmJlRleHQnKSkpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogc3AoJ/CfkYAnK1xcXCIgXFxcIitwZGZoKGRhdGFzLCAnc3BhbiYmVGV4dCcpKydcXFxcbicrcGRmaChkYXRhcywgJy50aXRsZS10cnVuY2F0ZSwxJiZUZXh0JykpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGQoZGF0YXMsICdpbWcmJmRhdGEtb3JpZ2luYWwnKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IGdldFZhcignbGluaycpK3BkZmgoZGF0YXMsICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknLFxcbiAgICAgICAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6c3AocGRmaChkYXRhcywgJy52aWRlby10aXRsZSYmVGV4dCcpKVxcbiAgICAgICAgICAgICAgICAgICAgICB9XFxufSk7XFxufSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaOkuihjOamnFwiLFwicGF0aFwiOlwicmFua1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcclxcbnZhciBob3N0ID0gZ2V0VmFyKCdsaW5rJykrJy9hbGJ1bXM/bz1tdiZ0PSc7IFxcbmxldCByYW5rID0gZ2V0SXRlbSgncmFuaycsICflhajpg6gnKTtcXG4gaWYgKE1ZX1BBR0UgPT0gMSkge1xcclxcbiAgICAgICAgICAgIGxldCBhcnIgPSBbXFxcIuWFqOmDqFxcXCIsXFxcIuacrOaXpVxcXCIsXFxcIuacrOWRqFxcXCIsXFxcIuacrOaciFxcXCJdO1xcbmZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcmFuayA9PSBpdCA/ICfigJzigJzigJ3igJ0nICsgaXQuZm9udGNvbG9yKCdyZWQnKSA6IGl0LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF80JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInJhbmtcXFwiLCBpdCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgaXQpXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcbmlmIChyYW5rID09ICflhajpg6gnKSB7XFxuTVlfVVJMPWhvc3QrXFxcIiZwYWdlPVxcXCIrcGFnZTtcXG4gbG9nKE1ZX1VSTClcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufWVsc2UgaWYgKHJhbmsgPT0gJ+acrOaXpScpIHtcXG5NWV9VUkw9aG9zdCtcXFwidFxcXCIrXFxcIiZwYWdlPVxcXCIrcGFnZTtcXG4gbG9nKE1ZX1VSTClcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufWVsc2UgaWYgKHJhbmsgPT0gJ+acrOWRqCcpIHtcXG5NWV9VUkw9aG9zdCtcXFwid1xcXCIrXFxcIiZwYWdlPVxcXCIrcGFnZTtcXG4gbG9nKE1ZX1VSTClcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufWVsc2UgaWYgKHJhbmsgPT0gJ+acrOaciCcpIHtcXG5NWV9VUkw9aG9zdCtcXFwibVxcXCIrXFxcIiZwYWdlPVxcXCIrcGFnZTtcXG4gbG9nKE1ZX1VSTClcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufVxcclxcbiB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5jb250YWluZXI6aGFzKC5jb2wteHMtNikmJi5wLWItMTUnKTtcXHJcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcXHJcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AocGRmaChpdGVtLCAnc3BhbiwxJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICB2YXIgdGFnID0gc21hbGwoc3AocGRmaChpdGVtLCAnLnRpdGxlLXRydW5jYXRlLDImJlRleHQnKSkpO1xcclxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlKydcXFxcbicrdGFnLFxcclxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogc21hbGwoJ/Cfk5EnLCA3Nzc3NzcpICsgY29sb3Ioc3AocGRmaChpdGVtLCAnLnRpdGxlLXRydW5jYXRlLDEmJmEmJlRleHQnKSksICc5OTk5OTknKSArICdcXFxcbicgKyBzbWFsbCgn8J+SoCcsIDc3Nzc3NykgKyBjb2xvcihzcChwZGZoKGl0ZW0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksICc5OTk5OTknKSsgJ1xcXFxuJyArIHNtYWxsKCfwn5SlJywgNjY2NjY2KSArIGNvbG9yKHNwKHBkZmgoaXRlbSwgJ3NwYW4mJlRleHQnKSksICc5OTk5OTknKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGltZzogcGQoaXRlbSwgJ2ltZyYmZGF0YS1jZnNyY3x8c3JjfHxkYXRhLXNyYycpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnZXRWYXIoJ2xpbmsnKStwZGZoKGl0ZW0sICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlIycrJ0BydWxlPWpzOiQucmVxdWlyZShcXFwiZWpcXFwiKScsXFxyXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBwZChpdGVtLCAnaW1nJiZkYXRhLWNmc3JjfHxzcmN8fGRhdGEtc3JjJyksXFxyXFxuICAgICAgICAgICAgICAgICAgICB9XFxyXFxuICAgICAgICAgICAgICAgIH0pO1xcclxcbiAgICAgICAgICAgIH0pO1xcclxcbiAgICAgICAgXFxyXFxuICAgICAgc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5o6o6I2QXCIsXCJwYXRoXCI6XCJyZWNvbW1lbmRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvamlhblxcXCIpKS5ydWxlKTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5jb2wteGwtMicpO1xcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgobGlzdFtqXSwgJy52aWRlby10aXRsZSYmVGV4dCcpKSxcXG4gICAgICAgIGRlc2M6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4mJlRleHQnKSsnXFxcXHRcXFxcdCcrcGRmaChsaXN0W2pdLCAnLmxhYmVsLWNhdGVnb3J5JiZUZXh0JykrXFxcIiBcXFwiK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1zdWImJlRleHQnKSksXFxuICAgICAgICBpbWc6IHBkZmgobGlzdFtqXSwgJ2ltZyYmZGF0YS1vcmlnaW5hbHx8ZGF0YS1zcmN8fHNyYycpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9lalxcXCIpJyxcXG4gICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IHNwKHBkZmgobGlzdFtqXSwgJy52aWRlby10aXRsZSYmVGV4dCcpKSxcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Yqo55S7XCIsXCJwYXRoXCI6XCJIXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxyXFxudmFyIGhvc3QgPSBnZXRWYXIoJ2xpbmsnKTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9sYXp5Jywge30pKS5ydWxlKTsgXFxudmFyIGNvbnRlbnRzID0gcGRmYShmZXRjaChob3N0KycvdmlkZW9zLycpLCAnYm9keSYmLm1vdmllbWVudS1zdWI6bm90KDptYXRjaGVzKENPUykpJylcXG52YXIgYXJyID0gY29udGVudHMubWFwKHggPT4gcGRmaCh4LCAnc3BhbiYmVGV4dCcpKTtcXG52YXIgaWNvbj0gY29udGVudHMubWFwKHggPT4gcGQoeCwgJ2ltZyYmc3JjJyxob3N0KSk7XFxubGV0IGNhcnRvb24gPSBnZXRJdGVtKCdjYXJ0b29uJywgJ2FyclswXScpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4vL2xldCBhcnIgPSBbXFxcIkjliqjmvKtcXFwiLFxcXCLpqazotZvlhYvnoLTlnY9cXFwiLFxcXCLmiJDkurrlsI/nlLXlvbFcXFwiLFxcXCLmt7HlpJzpo5/loIJcXFwiXTtcXG4vL2ZvciAobGV0IGl0IG9mIGFycikge1xcbmFyci5mb3JFYWNoKChpdCxpZCkgPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogY2FydG9vbiA9PSBpdCA/ICfigJzigJzigJ3igJ0nICsgaXQuZm9udGNvbG9yKCdyZWQnKSA6IGl0LFxcbiAgICAgICAgICAgIHBpY191cmw6IGljb25baWRdLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl80X2NhcmQnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwiY2FydG9vblxcXCIsIGl0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBpdClcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufVxcblxcbmlmIChjYXJ0b29uID09IGFyclswXSkge1xcbk1ZX1VSTD1ob3N0K1xcXCIvdmlkZW9zL2NhcnRvb24/cGFnZT1cXFwiK3BhZ2U7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChjYXJ0b29uID09IGFyclsxXSkge1xcbk1ZX1VSTD1ob3N0K1xcXCIvc2VhcmNoL21vdmllcy8/bWFpbl90YWc9MCZzZWFyY2hfcXVlcnk9JUU5JUE5JUFDJUU4JUI1JTlCJUU1JTg1JThCJUU3JUEwJUI0JUU1JTlEJThGJUU3JTg5JTg4JnBhZ2U9XFxcIitwYWdlO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59ZWxzZSBpZiAoY2FydG9vbiA9PSBhcnJbMl0pIHtcXG5NWV9VUkw9aG9zdCtcXFwiL21vdmllcz9wYWdlPVxcXCIrcGFnZTtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufWVsc2UgaWYgKGNhcnRvb24gPT0gYXJyWzNdKSB7XFxuTVlfVVJMPWhvc3QrXFxcIi9ibG9nVmlkZW8/cGFnZT1cXFwiK3BhZ2U7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1cXHJcXG4gdmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuY29sLXNtLTYnKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICcudmlkZW8tdGl0bGUmJlRleHQnKSksXFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICcudmlkZW8ta2V5d29yZHMmJlRleHQnKSsnXFxcXG4nK3BkZmgobGlzdFtqXSwgJy52aWRlby1hZGRlZHx8LnZpZGVvLWtleXdvcmRzLDEmJlRleHQnKSsnXFxcXG4nK3BkZmgobGlzdFtqXSwgJy5kdXJhdGlvbnx8LnZpZGVvLWtleXdvcmRzLDImJlRleHQnKSksXFxuICAgICAgICBpbWc6IHBkZmgobGlzdFtqXSwgJ2ltZyYmZGF0YS1vcmlnaW5hbHx8c3JjJyksXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJykrbGF6eSxcXG5jb2xfdHlwZTogJ3BpY18xX2NhcmQnLFxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QXCIsXCJwYXRoXCI6XCJsYXp5XCIsXCJydWxlXCI6XCJ2YXIgbGF6eSA9ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG50cnl7XFxuICAgIHZhciB1cmwgPSBwZChmZXRjaChpbnB1dCksJ3NvdXJjZSYmc3JjJyk7XFxubG9nICh1cmwpXFxuICAgIGlmICgvbTN1OHxtcDQvLnRlc3QodXJsKSkge1xcbiAgICAgICAgcmV0dXJuIHVybFxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZXZhbChyZXF1ZXN0KHVybCkubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxzXFxcXFNdKj99LylbMF0pXFxuICAgICAgICB2YXIgdmlkZW8gPSBjb25maWcudXJsOyAgICAgIFxcbiAgcmV0dXJuIHZpZGVvXFxuICAgIH1cXG4gICAgfWNhdGNoKGUpXFxue1xcbiAgcmV0dXJuIFxcXCJ2aWRlbzovL1xcXCIraW5wdXRcXG59XFxufSlcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuemgea8q+ivhOiuulwiLFwicGF0aFwiOlwiY29tbWVudFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxuY29uc3QgaWQgPSBnZXRQYXJhbSgnaWQnLCAnMjg3MjM0Jyk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxudmFyIGxpbmsgPSBnZXRWYXIoJ2xpbmsnKTtcXG52YXIgdGFnID0gZ2V0UGFyYW0oJ3RhZycsJ2FsYnVtJylcXG5sZXQgdXJsID10YWc9PSdhbGJ1bSc/bGluayArJy9hamF4L2FsYnVtX3BhZ2luYXRpb24nOmxpbmsrJy9hamF4L2Jsb2dfcGFnaW5hdGlvbic7XFxubGV0IGJvZHkgPSB0YWc9PSdhbGJ1bSc/e1xcbiAgICAgICAgdmlkZW9faWQ6IGlkLFxcbiAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgIH06e1xcbiAgICAgICAgYmxvZ19pZDogaWQsXFxuICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgfVxcbmh0bWwgPSBwb3N0KHVybCwge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICBcXFwiWC1SZXF1ZXN0ZWQtV2l0aFxcXCI6IFxcXCJYTUxIdHRwUmVxdWVzdFxcXCIsXFxuICAgIH0sXFxuICAgIGJvZHk6IGJvZHlcXG4gICAgICAgIH0pXFxuLy9sb2coaHRtbClcXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwnYm9keSYmLnBhbmVsJylcXG5saXN0LmZvckVhY2goKGxpc3QpID0+e1xcbiAgICBsZXQgdGl0bGUgPSBwZGZoKGxpc3QsJy50aW1lbGluZS11c2VybmFtZSYmVGV4dCcpXFxuICAgIGxldCBpbWcgPSBnZXRWYXIoJ2xpbmsnKStwZGZoKGxpc3QsJ2ltZyYmc3JjJylcXG4gICAgbGV0IGxldmVsID0gcGRmaChsaXN0LCcudGltZWxpbmUtdXNlci1sZXZlbCYmVGV4dCcpXFxuICAgIGxldCB0aW1lID0gcGRmaChsaXN0LCcudGltZWxpbmUtZGF0ZSYmVGV4dCcpXFxuICAgIGxldCBjb250ZW50ID0gc3AocGRmaChsaXN0LCcudGltZWxpbmUtY29udGVudCYmVGV4dCcpKVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlK1xcXCIgIFxcXCIrbGV2ZWwsXFxuICAgICAgICBkZXNjOiB0aW1lLFxcbiAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICB1cmw6IGltZyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGNvbnRlbnQsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgfSlcXG4gICAgfSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIummlumhtVwiLFwicGF0aFwiOlwi6aaW6aG1XCIsXCJydWxlXCI6XCJ2YXIgaHRtbD1mZXRjaChsaW5rKTtcXG52YXIgSWNvbiA9IGxpbmsrXFxcIi90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL1xcXCI7XFxudmFyIExhYl9pY29uID0gWydwaGljb24vd2Vlay5wbmcnLCdhcHBfbGluazMucG5nP3Y9MycsJ3BoaWNvbi9rb3JlYS5wbmcnLCdwaGljb24vRG91amluLnBuZycsJ3BoaWNvbi9vbmx5b25lLnBuZycsICdwaGljb24vbmV3LnBuZyddO1xcbmlmIChNWV9QQUdFID09IDEpe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdXJsOlxcXCJpZihwYXJzZUludChpbnB1dCkgPT0gaW5wdXQgJiYgaW5wdXQubGVuZ3RoID09PSA2KXsnaGlrZXI6Ly9wYWdlL2VqP3VybD0nK2dldFZhcignbGluaycpKycvYWxidW0vJytpbnB1dCsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjJ31lbHNlICdoaWtlcjovL3BhZ2Uvc2VhcmNoP3BhZ2U9ZnlwYWdlI2Z1bGxUaGVtZSMjbm9IaXN0b3J5Iyc7XFxcIixcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXnpoHmvKtpZHzlhbPplK7or40nLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdUaXRsZScsaW5wdXQpO3B1dFZhcignVXJsJyxnZXRWYXIoJ2xpbmsnKSsnL3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PScraW5wdXQrJyZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9Jyk7XFxcIiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pICAgIFxcbnZhciBMYWIxID0gcGRmYShodG1sLCdib2R5JiYucm93LDg6MTYnKTtcXG52YXIgTGFiMiA9IHBkZmEoaHRtbCwnYm9keSYmLnJvdywyMzoyNScpO1xcbnZhciBMYWIzID0gcGRmYShodG1sLCdib2R5JiYucm93LDI2OjI4Jyk7XFxudmFyIExhYnMgPSBMYWIxLmNvbmNhdChMYWIyKS5jb25jYXQoTGFiMylcXHJcXG4gICAgICAgIExhYnMuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgIHZhciBsaXN0ID0gcGRmYShkYXRhLCAnYm9keSYmLnJvdzpoYXMoLnB1bGwtbGVmdCknKTtcXG4gICAgICAgICBsaXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG52YXIgdGl0bGU9c3AocGRmaChkYXRhLCAnaDQmJlRleHQnKSk7XFxuaWYoL+i/nui9vS8udGVzdCh0aXRsZSkpe1xcbmlkPTBcXG59ZWxzZSBpZigv56aB5ryrLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTFcXG59ZWxzZSBpZigv6Z+p5ryrLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTJcXG59ZWxzZSBpZigv5pys5pysLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTNcXG59ZWxzZSBpZigv5Y2VLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTRcXG59ZWxzZSBpZigv5pyA5pawLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTVcXG59XFxuICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmm7TlpJrigbpcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBJY29uK0xhYl9pY29uW2lkXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBsaW5rK3BkZmgoZGF0YSwnYSYmaHJlZicpKyAnJnBhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvcmVjb21tZW5kXFxcIiknLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxyXFxuICAgICAgICAgICAgfSk7XFxufSkgICAgICAgICAgICBcXHJcXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHBkZmEoZGF0YSwgJy5yb3cmJi5wLWItMTUsMDo5Jyk7XFxyXFxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgoZGF0YXMsICdpbWcmJmFsdCcpKSxcXG4gICAgICAgIGRlc2M6IHNwKHBkZmgoZGF0YXMsICdzcGFuJiZUZXh0JykrJ1xcXFx0XFxcXHQnK3BkZmgoZGF0YXMsICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksXFxuICAgICAgICBpbWc6IHBkZmgoZGF0YXMsICdpbWcmJmRhdGEtc3JjfHxkYXRhLW9yaWdpbmFsJyksXFxuICAgICAgICB1cmw6IGxpbmsrcGRmaChkYXRhcywgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKScsXFxuICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM1xcXCIsXFxuICAgIH0pO1xcbn0pXFxufSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuLvpobXmlLbol49cIixcInBhdGhcIjpcImZhdm9yaXRlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJyk7XFxudmFyIGhlYWRlcnMgPSB7XFxuICAgICAgICBcXFwiQ29va2llXFxcIjogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9KTV9jb29raWUudHh0JykgfHwgJycsIFxcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCJcXG4gICAgfTtcXG52YXIgaWNvbiA9IHBkKHJlcXVlc3QoTVlfVVJMLHtoZWFkZXJzOmhlYWRlcnN9KSxcXFwiLnBhbmVsLWJvZHkmJmltZyYmc3JjXFxcIixsaW5rKVxcbnZhciBmYXZzID0gcGRmYShyZXF1ZXN0KE1ZX1VSTCx7aGVhZGVyczpoZWFkZXJzfSksXFxcImJvZHkmJi5wYW5lbC1oZWFkaW5nOmhhcygucHVsbC1sZWZ0KSYmLnB1bGwtbGVmdFxcXCIpLm1hcCh4ID0+IHBkZmgoeCwgJ1RleHQnKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGZhdnNbMF0sXFxuICAgIGRlc2M6IGZhdnNbMV0sXFxuICAgIHBpY191cmw6IGljb24sXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG59KVxcbmxldCBuYXYgPSBbXFxcIuaUtuiXj+aXtumXtFxcXCIsXFxcIuabtOaWsOaXtumXtFxcXCJdO1xcbmxldCBsaW5rcyA9IFsnP289bXInLCc/bz1tcCddO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IG15dGl0bGUgPSBuYXZbaV07XFxuICAgICAgICBsZXQgc2ogPSBsaW5rc1tpXVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ3NjdGl0bGUnLCBcXFwi5pS26JeP5pe26Ze0XFxcIikgPT0gbXl0aXRsZSA/ICfigJzigJzigJ3igJ0nK215dGl0bGUuZm9udGNvbG9yKCdyZWQnKS5zbWFsbCgpOiAn4oCc4oCc4oCd4oCdJytteXRpdGxlLnNtYWxsKCksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKG15dGl0bGUsc2opID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNjdGl0bGVcXFwiLCBteXRpdGxlKTtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImZhdlxcXCIsTVlfVVJMK3NqKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIG15dGl0bGUsc2opLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbmxldCBmYXYgPSBnZXRNeVZhcihcXFwiZmF2XFxcIixNWV9VUkwrJz9vPW1yJylcXG4vL2xvZyhmYXYpXFxudmFyIGh0bWwgPSByZXF1ZXN0KGZhdix7XFxuICAgIGhlYWRlcnM6aGVhZGVyc1xcbn0pIFxcbnZhciBmYXZvcml0ZSA9IHBkZmEoaHRtbCxcXFwiYm9keSYmLnBhbmVsLWJvZHk6aGFzKGFbaHJlZn49YWxidW1dKSYmLnRodW1iLW92ZXJsYXk6aGFzKGFbaHJlZn49YWxidW1dKVxcXCIpXFxuZmF2b3JpdGUuZm9yRWFjaCh4ID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGRmaCh4LFxcXCIudmlkZW8tdGl0bGUmJlRleHRcXFwiKVxcbiAgICB2YXIgaW1nID0gcGQoeCxcXFwiaW1nJiZzcmNcXFwiLGxpbmspXFxuICAgIHZhciB1cmwgPSBwZCh4LFxcXCJhJiZocmVmXFxcIixsaW5rKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKSc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM1xcXCIsXFxuICAgICAgICBleHRyYTp7XFxuICAgIHBhZ2VUaXRsZTogdGl0bGVcXG4gICAgfVxcbiAgICB9KVxcbiAgICBcXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5paH56ugXCIsXCJwYXRoXCI6XCJhcnRpY2xlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxudmFyIGxpbmsgPSBnZXRWYXIoJ2xpbmsnKVxcbnZhciBoZWFkZXJzID0ge1xcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvSk1fY29va2llLnR4dCcpIHx8ICcnLCBcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyBTTS1HOTc1MCBCdWlsZC9TUDFBLjIxMDgxMi4wMTY7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODkuMC40Mzg5LjcyIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDYyNzkgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBNWV9VUkxcXG4gICAgfTtcXG4gICAgLy9sb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMLHtoZWFkZXJzOmhlYWRlcnN9KVxcbnRyeXtcXG52YXIgYmxvZ19pZCA9IHBkZmgoaHRtbCxcXFwiI2Jsb2dfaWQmJnZhbHVlXFxcIilcXG52YXIgY29tbWVudCA9IHBkZmgoaHRtbCxcXFwiI2NvbW1lbnRzX2EmJlRleHRcXFwiKVxcbnZhciB0aXRsZSA9IHBkZmgoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJmEmJlRleHQnKS5mb250Y29sb3IoJyMxNzgxYjUnKS5zbWFsbCgpK1xcXCIgXFxcIisnPHN0cm9uZz4nK3BkZmgoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJmg0JiZUZXh0JykrJzxzdHJvbmc+J1xcbnZhciBhdXRob3JfdXJsID0gcGQoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJi5ibG9nX2lkX21haW4mJmEmJmhyZWYnKVxcbnZhciB0YWdzID0gcGRmYShodG1sLCcucGFuZWwtaGVhZGluZyYmLm0tdC01JiZhJylcXG52YXIgYXV0aG9yaWNvbiA9IHBkKGh0bWwsJy5wYW5lbC1oZWFkaW5nJiZpbWcmJnNyYycpXFxudmFyIGF1dGhvciA9ICBwZGZoKGh0bWwsJy5wYW5lbC1oZWFkaW5nJiYuYmxvZ19uYW1lX2lkJiZUZXh0JylcXG52YXIgZGF0ZSA9ICBwZGZoKGh0bWwsJy5wYW5lbC1oZWFkaW5nJiYuZGF0ZSYmVGV4dCcpXFxuY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoaHR0cHM/OlxcXFxcXFxcL1xcXFxcXFxcLyguKj8keycxOGNvbWljJ30uKj8pKShcXFxcXFxcXC9bXlxcXFxcXFxcc1xcXCJdKilgLCAnZycpO1xcbmNvbnN0IHJwID0gbGluay5zcGxpdCgnLy8nKVsxXVxcbnZhciBtYWluID0gcGRmaChodG1sLCAnLnBhbmVsLWJvZHkmJi5wLXQtMTAmJkh0bWwnKS5yZXBsYWNlKHJlZ2V4LCAobWF0Y2gsIHAxLCBwMiwgcDMpID0+IGBoaWtlcjovL3BhZ2UvZWo/dXJsPSR7cDEucmVwbGFjZShwMixycCl9JHtwM30jaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNgKS5yZXBsYWNlKC9zcmM9XFxcIihbXlxcXCJdKilcXFwiL2csIGBzcmM9XFxcImAgKyBsaW5rICsgYCQxXFxcImApLnJlcGxhY2UoLzxiclxcXFxzKlxcXFwvPz4vZ2ksICcnKS5yZXBsYWNlKC9waG90by9nLCdhbGJ1bScpO1xcbiBkLnB1c2goe1xcbiAgICAgIHBpY191cmw6ICdodHRwczovL2hpa2VyZmFucy5jb20vaW1nL3RvcC5wbmcnLFxcbiAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgIGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxuICAgIH0se1xcbiAgICB0aXRsZSA6IHRpdGxlLFxcbiAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdGV4dFNpemU6IDIwLFxcbiAgICAgICAgICAgIH1cXG59KVxcbnRhZ3MubWFwKHggPT4ge1xcbmxldCB0YWc9cGRmaCh4LCdhJiZUZXh0Jyk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ0nK3RhZy5zbWFsbCgpLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2VhcmNoP3RpdGxlPVxcXCIrdGFnK1xcXCImcGFnZT1meXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjXFxcIixcXG4gICBjb2xfdHlwZTpcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgIH0pXFxufSlcXG5kLnB1c2goe1xcbnRpdGxlOiAn4oCc4oCc4oCd4oCdJytjb21tZW50LnNtYWxsKCksXFxudXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbW1lbnQ/aWQ9XFxcIitibG9nX2lkK1xcXCImcGFnZT1meXBhZ2UmdGFnPWJsb2cjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIixcXG5jb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG5cXG59LHtcXG4gICAgdGl0bGU6IGF1dGhvcixcXG4gICAgZGVzYzogZGF0ZSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2Jsb2c/dXJsPVxcXCIrYXV0aG9yX3VybCtcXFwiP3BhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCIsXFxuICAgIHBpY191cmw6IGF1dGhvcmljb24sXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbn0se1xcbiAgICB0aXRsZTogc3AobWFpbiksXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgICAgIH1cXG59KVxcbn1jYXRjaChlKXt9XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuablupNcIixcInBhdGhcIjpcIkxpYnJhcnlcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkPVtdXFxudmFyIGxpbmsgPSBnZXRWYXIoJ2xpbmsnKVxcbnZhciBoZWFkZXJzID0ge1xcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvSk1fY29va2llLnR4dCcpIHx8ICcnLCBcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyBTTS1HOTc1MCBCdWlsZC9TUDFBLjIxMDgxMi4wMTY7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODkuMC40Mzg5LjcyIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDYyNzkgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiXFxuICAgIH07XFxudmFyIE1ZX1VSTCA9IGxpbmsgKycvYmxvZ3MnO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbmNvbnN0IOS4i+S4gOmhtSA9IFxcXCJwZChodG1sLCAnYTptYXRjaGVzKMK7KSYmaHJlZicpXFxcIjtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS95alxcXCIsIHt9KSkucnVsZSk7XFxudmFyIOWumuS9jeS/oeaBryA9IFt7XFxuICAgIOWkp+exu+WumuS9jTogJ2JvZHkmJi5uYXYtcGlsbHMnLFxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcXG59XTtcXG5sZXQgdHJ1ZV91cmwgPSBnZXRUcnVlbGluayhNWV9SVUxFLnVybCwgTVlfVVJMLCBwYWdlKTtcXG4vL2xvZyh0cnVlX3VybClcXG5NWV9VUkwgPSB0cnVlX3VybDtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCx7aGVhZGVyczpoZWFkZXJzfSk7XFxuY29uc3QgZGMgPSBkeW5hbWljQ2xhc3Moe1xcbiAgICDliIbnsbvpopzoibI6IGdldFJhbmdlQ29sb3JzKClcXG59KTtcXG5kYy7lvIDlkK/mipjlj6AoZmFsc2UpXFxuZGMu5byA5ZCv5pCc57SiKGZhbHNlKS7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxcblxcbnZhciBsaXN0ID0gcGRmYShodG1sLFxcXCIjd3JhcHBlciYmLmNvbnRhaW5lciYmLm93bC1jYXJvdXNlbCYmLmdhbWUtbWFpblxcXCIpXFxubGlzdC5mb3JFYWNoKHggPT4ge1xcbiAgICB2YXIgdGl0bGUgPSBwZGZoKHgsXFxcImltZyYmYWx0XFxcIilcXG4gICAgdmFyIGltZyA9IHBkZmgoeCxcXFwiaW1nJiZkYXRhLXNyY1xcXCIpXFxuICAgIHZhciB1cmwgPSBcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGU/dXJsPVxcXCIrcGQoeCxcXFwiYSwxJiZocmVmXFxcIikrXFxcIiNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjXFxcIlxcbiAgICB2YXIgZGVzYyA9IHBkZmgoeCxcXFwiYSYmVGV4dFxcXCIpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTp0aXRsZSxcXG4gICAgICAgIGRlc2M6ZGVzYyxcXG4gICAgICAgIHBpY191cmw6aW1nLFxcbiAgICAgICAgdXJsOnVybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM1xcXCJcXG4gICAgICAgIFxcbiAgICB9KVxcbiAgICBcXG59KVxcbmF1dG9QYWdlKCk7XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnroDnuYHovazmjaJcIixcInBhdGhcIjpcImppYW5cIixcInJ1bGVcIjpcImZ1bmN0aW9uIGNoYXJQWVN0cigpe1xcblxcdHJldHVybiAn6ZSV55qR6JS856KN54ix5Zez5auS55G35pqn6Zyt6LCZ6ZO16bmM6IKu6KKE5aWl5aqq6aqc6bOM5Z2d572i6ZKv5pGG6LSl5ZGX6aKB5Yqe57uK6ZKj5biu57uR6ZWR6LCk5Yml6aWx5a6d5oql6bKN6bio6b6F6L6I6LSd6ZKh54uI5aSH5oOr6bmO6LSy6ZSb57u356yU5q+V5q+Z5biB6Zet6I2c5ZOU5ruX6ZOL562a6Le46L6557yW6LSs5Y+Y6L6p6L6r6IuE57yP56y+5qCH6aqg6aOR6aOZ6ZWW6ZWz6bOU6bOW5Yir55iq5r+S5ruo5a6+5pGI5YKn57yk5qef5q6h6IaR6ZWU6auM6ayT6aW856aA5ouo6ZK16ZOC6amz6aW96ZK56bmB6KGl6ZK46LSi5Y+C6JqV5q6L5oOt5oOo54G/6aqW6buq6IuN6Iix5LuT5rKn5Y6V5L6n5YaM5rWL5oG75bGC6K+n6ZS45L6q6ZKX5pCA5o666J2J6aaL6LCX57yg6ZOy5Lqn6ZiQ6aKk5YaB6LCE6LC26JKH5b+P5am16aqj6KeH56aF6ZWh5Zy65bCd6ZW/5YG/6IKg5Y6C55WF5Lyl6IuM5oCF6ZiK6bKz6ZKe6L2m5b2756CX5bCY6ZmI6KGs5Lyn6LCM5qaH56Kc6b6A5pKR56ew5oOp6K+a6aqL5p6o5p+96ZOW6ZOb55e06L+f6amw6IC76b2/54K96aWs6bix5Yay5Yay6Jmr5a6g6ZOz55W06LiM562557u45L+m5bix6Zug5qmx5Y6o6ZSE6ZuP56GA5YKo6Kem5aSE5YiN57uM6Lmw5Lyg6ZKP55au6Zev5Yib5oCG6ZSk57yN57qv6bmR57uw6L6N6b6K6L6e6K+N6LWQ6bma6IGq6JGx5Zux5LuO5Lib6IuB6aqi5p6e5YeR6L6P6Lm/56qc5pK66ZSZ6ZSJ6bm+6L6+5ZOS6Z6R5bim6LS36aqA57uQ5ouF5Y2V6YO45o646IOG5oOu6K+e5by55q6a6LWV55iF566q5b2T5oyh5YWa6I2h5qGj6LCg56CA6KOG5o2j5bKb56W35a+855uX54SY54Gv6YKT6ZWr5pWM5rak6YCS57yU57G06K+L6LCb57uo6KeM6ZWd6aKg54K55Z6r55S15beF6ZK/55mr6ZKT6LCD6ZOr6bK36LCN5Y+g6bK96ZKJ6aG26ZSt6K6i6ZOk5Lii6ZOl5Lic5Yqo5qCL5Ya75bK96bir56qm54qK54us6K+76LWM6ZWA5riO5qSf54mN56yD6bup6ZS75pat57yO57CW5YWR6Zif5a+55oC86ZWm5ZCo6aG/6ZKd54KW6La45aS65aCV6ZOO6bmF6aKd6K655oG26aW/6LCU5Z6p6ZiP6L2t6ZSH6ZS36bmX6aKa6aKb6bOE6K+25YS/5bCU6aW16LSw6L+p6ZOS6bi46bKV5Y+R572a6ZiA54+Q55++6ZKS54Om6LSp6aWt6K6/57q66ZKr6bKC6aOe6K+95bqf6LS557uv6ZWE6bKx57q35Z2f5aWL5oSk57Kq5YG+5Liw5p6r6ZSL6aOO55av5Yav57yd6K695Yek5rKj6IKk6L6Q5oqa6L6F6LWL5aSN6LSf6K6j5aaH57ya5Yer6am457uC57uL6LWZ6bq46bKL6bOG6ZKG6K+l6ZKZ55uW6LWF5p2G6LW256eG6LWj5bC05pOA57uA5YaI5Yia6ZKi57qy5bKX5oiG6ZWQ552+6K+w57yf6ZSG5pCB6bi96ZiB6ZOs5Liq57ql6ZWJ6aKN57uZ5LqY6LWT57ug6bKg6b6a5a6r5bep6LSh6ZKp5rKf6Iuf5p6E6LSt5aSf6K+f57yR6KeP6JuK6aG+6K+C5q+C6ZK06ZSi6biq6bmE6bmY5YmQ5oyC6bi55o605YWz6KeC6aaG5oOv6LSv6K+W5o686bmz6bOP5bm/54q36KeE5b2S6b6f6Ze66L2o6K+h6LS15Yi95Yym5Yi/5aar5qGn6bKR6bOc6L6K5rua6KGu57uy6bKn6ZSF5Zu96L+H5Z+a5ZGZ5bi85qSB6J2I6ZOq6aqH6Z+p5rGJ6Zia57uX6aKJ5Y+354GP6aKi6ZiC6bmk6LS66K+D6ZiW6JuO5qiq6L2w6bi/57qi6buJ6K6n6I2t6Zez6bKO5aO25oqk5rKq5oi35rWS6bmV5ZOX5Y2O55S75YiS6K+d6aqF5qGm6ZOn5oCA5Z2P5qyi546v6L+Y57yT5o2i5ZSk55eq54SV5raj5aWC57yz6ZS+6bKp6buE6LCO6bOH5oyl6L6J5q+B6LS/56e95Lya54Op5rGH6K6z6K+y57uY6K+Z6I2f5ZOV5rWN57yL54+y5pmW6I2k5rWR6K+o6aaE6ZiN6I636LSn56W46ZKs6ZWs5Ye75py656ev6aWl6L+56K6l6bih57up57yJ5p6B6L6R57qn5oyk5Yeg6JOf5YmC5rWO6K6h6K6w6ZmF57un57qq6K6m6K+Y6I2g5Y+95ZOc6aql546R6KeK6b2R55+2576B6Jm/6Le76ZyB6bKa6bKr5aS56I2a6aKK6LS+6ZK+5Lu36am+6YOP5rWD6ZOX6ZWT6Juy5q2855uR5Z2a56y66Ze06Imw57yE6Iyn5qOA56Kx56G35ouj5o2h566A5L+t5YeP6I2Q5qeb6Ym06Le16LSx6KeB6ZSu6Iiw5YmR6aWv5riQ5rqF5ran6LCP57yj5oiL5ois552R6bmj56yV6bKj6Z6v5bCG5rWG6JKL5qGo5aWW6K6y6YWx57ub57yw6IO25rWH6aqE5aiH5pCF6ZOw55+r5L6l6ISa6aW657y057ue6L2/6L6D5oyi5bOk6bmq6bKb6Zi26IqC5rSB57uT6K+r5bGK55aW6aKM6bKS57Sn6ZSm5LuF6LCo6L+b5pmL54Os5bC95Yqy6I2G6IyO5Y266I2p6aaR57yZ6LWG6KeQ6bK45oOK57uP6aKI6Z2Z6ZWc5b6E55eJ56ue5YeA5Yit5rO+6L+z5byq6IOr6Z2T57qg5Y6p5pen6ZiE6big6bmr6am55Li+5o2u6ZSv5oOn5Ymn6K615bGm5qaJ6aOT6ZKc6ZSU56qt6b6D6bmD57ui6ZSp6ZWM6Zq96KeJ5Yaz57ud6LCy54+P6ZKn5Yab6aqP55qy5byA5Yev5YmA5Z6y5b++5oG66ZOg6ZS06b6b6Ze26ZKq6ZOQ6aKX5aOz6K++6aqS57yC6L2y6ZK26ZSe6aKU5Z6m5oGz6b6I6ZO/5oqg5bqT6KOk5Za+5Z2X5L6p6YOQ5ZOZ6ISN5a6954uv6auL55+/5pe35Ya16K+T6K+z6YKd5Zy557qp6LS25LqP5bK/56ql6aaI5rqD5Yyu6JKJ5oSm6IGp56+R6ZiD6ZSf6bKy5omp6ZiU6Ju06Jyh6IWK6I6x5p2l6LWW5bSD5b6V5rae5r+R6LWJ552Q6ZO855me57GB6JOd5qCP5oum56+u6ZiR5YWw5r6c6LCw5o+96KeI5oeS57yG54OC5rul5bKa5qaE5paT6ZWn6KS055CF6ZiG6ZSS5o2e5Yqz5rad5ZSg5bSC6ZOR6ZO555eo5LmQ6bOT6ZWt5Z6S57G75rOq6K+U57yn56+x54u456a76bKk56S85Li95Y6J5Yqx56C+5Y6G5rKl6Zq25L+q6YOm5Z2c6IuI6I6F6JOg5ZGW6YCm6aqK57yh5p6l5qCO6L2556C66ZSC6bmC55ag57Kd6Lee6Zuz6bKh6bOi5L+p6IGU6I6y6L+e6ZWw5oCc5raf5biY5pWb6IS46ZO+5oGL54K857uD6JS55aWB5r2L55CP5q6T6KOi6KOj6bKi57Ku5YeJ5Lik6L6G6LCF6a2J55aX6L696ZWj57yt6ZKM6bmp54yO5Li06YK76bOe5Yeb6LWB6JS65buq5qqp6L6a6LqP6b6E6ZOD54G15bKt6aKG57ur5qOC6JuP6bKu6aaP5YiY5rWP6aqd57u66ZWP6bmo6b6Z6IGL5ZKZ56y85Z6E5oui6ZmH6IyP5rO354+R5qCK6IOn56C75qW85aiE5pCC56+T5YG76JKM5Za95bWd6ZWC55iY6ICn6J286auF6Iqm5Y2i6aKF5bqQ54KJ5o6z5Y2k6JmP6bKB6LWC56aE5b2V6ZmG5Z6G5pK45Zmc6Ze+5rO45riM5qCM5qm56L2z6L6C6L6Y5rCH6IOq6bis6bmt6Ii76bKI5bOm5oyb5a2q5rum5Lmx6ISU5aiI5qC+6bi+6Yqu5oqh6L2u5Lym5LuR5rKm57q26K665Zu16JCd572X6YC76ZSj566p6aqh6aqG57uc6I2m54yh5rO65qSk6IS26ZWZ6am05ZCV6ZOd5L6j5bGh57yV6JmR5ruk57u/5qaI6KSb6ZSK5ZGS5aaI546b56CB6JqC6ams6aqC5ZCX5ZSb5ay35p2p5Lmw6bqm5Y2W6L+I6ISJ5Yqi556S6aaS6Juu5ruh6LCp57ym6ZWY6aKh6bOX54yr6ZSa6ZOG6LS46bq95rKh6ZWB6Zeo6Ze35Lus5omq54SW5oeR6ZKU6ZSw5qKm55yv6LCc5byl6KeF5bmC6IqI6LCn54yV56Wi57u157yF5riR6IW86bu+5bqZ57yI57yq54Gt5oKv6Ze96Ze157yX6bij6ZOt6LCs6LCf6JOm6aaN5q6B6ZWG6LCL5Lqp6ZK85ZGQ6ZKg57qz6Zq+5oyg6ISR5oG86Ze56ZOZ6K636aaB5YaF5ouf6IW76ZOM6bK15pK16L6H6bK26YW/6bif6IyR6KKF6IGC5ZWu6ZWK6ZWN6Zmn6JiW5Zer6aKf6LmR5p+g54ue5a6B5oun5rOe6IuO5ZKb6IGN6ZKu57q96IST5rWT5Yac5L6s5ZOd6am96ZKV6K+65YKp55af5qyn6bil5q605ZGV5rKk6K605oCE55Ov55uY6LmS5bqe5oqb55ax6LWU6L6U5Za36bmP57qw57206ZON6aqX6LCd6aqI6aOY57yl6aKR6LSr5auU6Iu55Yet6K+E5rO86aKH6ZKL5omR6ZO65py06LCx6ZWk6ZWo5qCW6ISQ6b2Q6aqR5bKC5ZCv5rCU5byD6K6r6JWy6aqQ57uu5qGk56Kb6aKA6aKD6bON54m16ZKO6ZOF6L+B562+6LCm6ZKx6ZKz5r2c5rWF6LC05aCR5L2l6I2o5oKt6aqe57yx5qSg6ZKk5p6q5ZGb5aKZ6JS35by65oqi5aux5qiv5oiX54Kd6ZSW6ZS16ZWq576f6LeE6ZS55qGl5LmU5L6o57+Y56qN6K+u6LCv6I2e57yy56GX6Le356qD5oOs6ZSy566n6ZKm5Lqy5a+d6ZST6L275rCi5YC+6aG36K+35bqG5o+/6bKt55C856m36IyV6Jux5bev6LWH6Jmu6bOF6LaL5Yy66Lqv6amx6b6L6K+O5bKW6ZiS6KeR6biy6aKn5p2D5Yqd6K+g57u76L6B6ZOo5Y206bmK56Gu6ZiV6ZiZ5oKr6K6p6aW25omw57uV6I2b5aiG5qGh54Ot6Z+n6K6k57qr6aWq6L2r6I2j57uS5bWY6J2+57yb6ZO36aKm6L2v6ZSQ6Jqs6Zew5ram5rSS6JCo6aOS6bOD6LWb5Lye5q+157OB5Lin6aqa5omr57yr5rap5ZWs6ZOv56mR5p2A5Yi557qx6ZOp6bKo562b5pmS6YW+5Yig6Zeq6ZmV6LWh57yu6K6q5aeX6aqf6ZKQ6bOd5aKS5Lyk6LWP5Z6n5q6H6Kee54On57uN6LWK5pGE5oWR6K6+5Y6N5rug55Wy57uF5a6h5am26IK+5riX6K+c6LCC5riW5aOw57uz6IOc5biI54uu5rm/6K+X5pe26JqA5a6e6K+G6am25Yq/6YCC6YeK6aWw6KeG6K+V6LCl5Z+Y6I6z5byR6L286LSz6ZOI6bKl5a+/5YW957u25p6i6L6T5Lmm6LWO5bGe5pyv5qCR56uW5pWw5pGF57q+5biF6Zep5Y+M6LCB56iO6aG66K+056GV54OB6ZOE5Lid6aWy5Y6u6am357yM6ZS26bi26IC45oCC6aKC6K686K+15pOe6Jau6aaK6aOV6ZS86IuP6K+J6IKD6LCh56ij6Jm96ZqP57ul5bKB6LCH5a2Z5o2f56yL6I2q54uy57yp55CQ6ZSB5ZSi552D542t5oye6Ze86ZOK6bOO5Y+w5oCB6ZKb6bKQ5pGK6LSq55ir5rup5Z2b6LCt6LCI5Y+55piZ6ZK96ZSs6aG45rGk54Or5YKl6aWn6ZO06ZWX5rab57um6K6o6Z+s6ZO96IW+6KqK6ZSR6aKY5L2T5bGJ57yH6bmI6ZiX5p2h57Kc6b6G6bKm6LS06ZOB5Y6F5ZCs54OD6ZOc57uf5oG45aS06ZKt56eD5Zu+6ZKN5Zui5oqf6aKT6JyV6aWo6ISx6bi16amu6am85qSt566o6byN6KKc5aiy6IW95byv5rm+6aG95LiH57qo57u+572R6L6L6Z+m6L+d5Zu05Li65r2N57u06IuH5Lyf5Lyq57qs6LCT5Y2r6K+/5biP6Zex5rKp5rag546u6Z+q54Kc6bKU5rip6Ze757q556iz6Zeu6ZiM55Ou5oyd6JyX5rah56qd5Y2n6I606b6M5ZGc6ZKo5LmM6K+s5peg6Iqc5ZC05Z2e6Zu+5Yqh6K+v6YKs5bqR5oCD5aap6aqb6bmJ6bmc6ZSh54m66KKt5Lmg6ZOj5oiP57uG6aWp6ZiL54666KeL6Jm+6L6W5bOh5L6g54ut5Y6m5ZCT56GW6bKc57qk6LSk6KGU6Zey5pi+6Zmp546w54yu5Y6/6aaF576h5a6q57q/6IuL6I626JeT5bKY54yD5ai06bmH55er6Jqd57G86Le55Y6i6ZW25Lmh6K+m5ZON6aG56IqX6aW36aqn57yD6aOo6JCn5Zqj6ZSA5pmT5ZW45ZOT5r2H6aqB57uh5p6t566r5Y2P5oyf5pC66IOB6LCQ5YaZ5rO76LCi5Lq15pK357uB57ys6ZSM6KGF5YW06ZmJ6I2l5Ye25rG56ZSI57uj6aaQ6bi66Jma5ZiY6aG76K645Y+Z57uq57ut6K+p6aG86L2p5oKs6YCJ55mj57ua6LCW6ZOJ6ZWf5a2m6LCR5rO26bOV5YuL6K+i5a+76amv6K6t6K6v6YCK5Z+Z5rWU6bKf5Y6L6bim6bit5ZOR5Lqa6K625Z6t5aiF5qGg5rCp6ZiJ54Of55uQ5Lil5bKp6aKc6ZiO6Imz5Y6M56Ca5b2m6LCa6aqM5Y6j6LWd5L+o5YWW6LCz5oG56Zer6YW96a2H6aSN6by56biv5p2o5oms55ah6Ziz55eS5YW75qC354KA55G25pGH5bCn6YGl56qR6LCj6I2v6L266bme6bOQ54i36aG15Lia5Y+26Z2l6LCS6YK65pmU54Oo5Yy76ZOx6aKQ6YGX5Luq6JqB6Im65Lq/5b+G5LmJ6K+j6K6u6LCK6K+R5byC57uO6K+S5ZGT5bOE6aW05oC/6am/57yi6L226LS76ZKH6ZWS6ZWx55iX6Iij6I2r6Zi06ZO26aWu6ZqQ6ZOf55i+5qix5am06bmw5bqU57yo6I656JCk6JCl6I2n6J2H6LWi6aKW6IyU6I666JCm6JOl5pKE5Zik5rui5r2G55KO6bmm55i/6aKP572C5ZOf5oul5L2j55eI6LiK5ZKP6ZWb5LyY5b+n6YKu6ZOA54q56K+x6I646ZOV6bG/6IiG6bG85riU5aix5LiO5bG/6K+t54ux6KqJ6aKE6amt5Lyb5L+j6LCA6LCV6JOj5bWb6aWr6ZiI5aaq57qh6KeO5qyk6ZKw6bmG6bms6b6J6biz5riK6L6V5Zut5ZGY5ZyG57yY6L+c5qm86bii6byL57qm6LeD6ZKl57Kk5oKm6ZiF6ZK66YOn5YyA6Zmo6L+Q6JW06YWd5pmV6Z+16YOT6Iq45oG95oSg57qt6Z+r5q6S5rCy5p2C54G+6L295pSS5pqC6LWe55OS6Lax6Yy+6LWD6ISP6am15Ye/5p6j6LSj5oup5YiZ5rO96LWc5ZWn5bi7566m6LS86LCu6LWg57u857yv6L2n6ZOh6Ze45qCF6K+I5paL5YC65q+h55uP5pap6L6X5bSt5qCI5oiY57u96LC15byg5rao5biQ6LSm6IOA6LW16K+P6ZKK6Juw6L6Z6ZSX6L+Z6LCq6L6E6bmn6LSe6ZKI5L6m6K+K6ZWH6Zi15rWI57yc5qGi6L246LWI56Wv6bip5oyj552B54uw5LqJ5bin55eH6YOR6K+B6K+k5bOl6ZKy6ZOu562d57uH6IGM5omn57q45oya5o635bic6LSo5rue6aqY5qCJ5qCA6L216L2+6LS96bi36Juz57W36Lis6Liv6Kev6ZKf57uI56eN6IK/5LyX6ZS66K+M6L2055qx5pi86aqk57qj57uJ54yq6K+46K+b54Ob556p5Zix6LSu6ZO46am75Lyr5qeg6ZOi5LiT56CW6L2s6LWa5ZWt6aaU6aKe5qGp5bqE6KOF5aaG5aOu54q26ZSl6LWY5Z2g57yA6aqT57yS6LCG5YeG552A5rWK6K+86ZWv5YW56LWE5riN6LCY57yB6L6O6LWA55ym6ZSx6b6H6bK76Liq5oC757q15YGs6YK56K+56am66bKw6K+F57uE6ZWe6ZK757y16Lqc6bOf57+x5bm25Y2c5rKJ5LiR5reA6L+t5paX6IyD5bmy55qL56GF5p+c5ZCO5LyZ56e45p2w6K+A5aS46YeM5YeM5LmI6ZyJ5o275YeE5omm5Zyj5bC45oqs5raC5rS85ZaC5rGh6ZSo5ZK46J2O5b2d5raM5ri45ZCB5b6h5oS/5bKz5LqR54G25omO5pyt562R5LqO5b+X5rOo5YeL6K6g6LCr6YOE5YuQ5Ye85Z2C5Z6F5Z605Z+v5Z+d6IuY6I2s6I2u6I6c6I686I+w6JeB5o+45ZCS5ZCj5ZKU5ZKd5ZK05ZmY5Zm85Zqv5bme5bKZ5bW05b235b6854q454uN6aaA6aaH6aaT6aaV5oSj5oa35oeU5Lis5rqG5ruf5rq35ryk5r205r6555Sv57qf57uU57ux54+J5p6n5qGK5qGJ5qeU5qml6L2x6L236LWN6IK36IOo6aOa54Wz54WF54aY5oSN5re856Cc56OZ55yN6ZKa6ZK36ZOY6ZOe6ZSD6ZSN6ZSO6ZSP6ZSY6ZSd6ZSq6ZSr6ZS/6ZWF6ZWO6ZWi6ZWl6ZWp6ZWy56iG6bmL6bmb6bmx55as55a055eW55mv6KOl6KWB6ICi6aKl6J6o6bq06bKF6bKG6bKH6bKe6bK06bK66bK86bOK6bOL6bOY6bOZ6Z6S6Z606b2EJztcXG59XFxuZnVuY3Rpb24gZnRQWVN0cigpe1xcblxcdHJldHVybiAn6YyS55qa6Je556SZ5oSb5Zmv5ayh55Km5puW6Z2E6Kuz6Yqo6bWq6aqv6KWW5aWn5aq86amB6bCy5aOp57236YiA5pO65pWX5ZSE6aCS6L6m57WG6YiR5bmr57aB6Y6K6KyX5Ymd6aO95a+25aCx6a6R6bSH6b2Z6Lyp6LKd6YuH54u95YKZ5oaK6bWv6LOB6Yyb57mD562G55Wi5paD5bmj6ZaJ6JO95Ze25r236YmN56+z6LmV6YKK57eo6LK26K6K6L6v6L6u6IqQ57e257Gp5qiZ6amD6aKu6aOG6Y+i6ZGj6bC+6bGJ5Yil55mf54CV5r+x6LOT5pOv5YSQ57m95qqz5q6v6IeP6ZGM6auV6ayi6aSF56if5pKl57y96YmR6aeB6aSR6Yi46bWT6KOc6Yi96LKh5Y+D6KC25q6Y5oWa5oWY54em6amC6buy6JK86ImZ5YCJ5ruE5buB5YG05YaK5ris5oO75bGk6Kmr6Y2k5YSV6Ye15pSZ5pG76J+s6aWe6K6S57qP6Y+f55Si6Zeh6aGr5ZuF6KuC6K6W6JWG5oe65ayL6amP6KaY56aq6ZCU5aC05ZiX6ZW35YSf6IW45bug5pqi5YCA6JCH5oK16Za26a+n6YiU6LuK5b6556Go5aG16Zmz6KWv5YKW6Ku25qus56Oj6b2U5pKQ56ix5oey6Kqg6aiB5qOW5qqJ6Yuu6ZC655mh6YGy6aaz5oGl6b2S54a+6aOt6bSf5rKW6KGd6J+y5a+16YqD55aH6LqK57GM57ai5YSU5bms6K6O5qul5bua6Yuk6Zub56SO5YSy6Ke46JmV6Iq757WA6LqV5YKz6Yen55ih6ZeW5Ym15oS06YyY57ae57SU6baJ57a96Lyf6b2q6L6t6Kme6LOc6ba/6IGw6JSl5Zuq5b6e5Y+i6JOv6amE5qiF5rmK6Lyz6Lql56uE5pSb6Yyv6Yq86bm66YGU5Zmg6Z+D5bi26LK46aeY57S/5pOU5Zau6YSy5pKj6Ia95oaa6KqV5b2I5q6r6LOn55mJ57Ce55W25pOL6buo6JWp5qqU6K6c56Kt6KWg5pCX5bO256ax5bCO55uc54e+54eI6YSn6ZCZ5pW15ruM6YGe57eg57O06KmG6Kum57aI6Ka/6Y+R6aGb6bue5aKK6Zu75beU6Yi/55my6Yej6Kq/6Yqa6a+b6Kuc55aK6bCI6YeY6aCC6Yyg6KiC6YuM5Lif6Yqp5p2x5YuV5qOf5YeN5bSg6baH56uH54qi542o6K6A6LOt6Y2N54CG5qud54mY56+k6bu36Y2b5pa357ee57Gq5YWM6ZqK5bCN5oef6ZCT5Zm46aCT6YiN54eJ6LqJ5aWq5aKu6ZC46bWd6aGN6Kib5oOh6aST6Kuk5aCK6Za86Lub6Yuo6Y2U6baa6aGO6aGT6bG36KqS5YWS54i+6aSM6LKz6YKH6Ym66bSv6a6e55m8572w6Zal55C656Ss6Yep54Wp6LKp6aOv6Kiq57Sh6YiB6a206aOb6Kq55bui6LK757eL6ZCo6a+h57Sb5aKz5aWu5oak57Oe5YOo6LGQ5qWT6YuS6aKo55iL6aau57ir6Ku36bOz54GD6Iaa6Ly75pKr6LyU6LOm5b6p6LKg6KiD5amm57ib6bOn6aeZ57Sx57S86LO76bqp6a6S6bCS6YeT6Kmy6Yij6JOL6LOF5qG/6LaV56iI6LSb5bC35pCf57S65bKh5Ymb6Yu857ax5bSX5oiH6Y6s552q6Kql57ie6Yuv5pOx6bS/6Zaj6Ym75YCL57SH6Y6Y5r2B57Wm5LqZ6LOh57aG6a+B6b6U5a6u6Z6P6LKi6Ymk5rqd6IyN5qeL6LO85aSg6Kms57ex6Kav6KCx6aGn6KmB6L2C6Yi36Yyu6bSj6bWg6ba75Ymu5o6b6bSw5pGR6Zec6KeA6aSo5oWj6LKr6Km/5pGc6bib6bCl5buj54236KaP5q246b6c6Zao6LuM6Kmt6LK05YqK5Yyt5YqM5aqv5qqc6a6t6bGW6Lyl5ru+6KKe57eE6a+A6Y2L5ZyL6YGO5aCd5ZK85bmX5qeo6J+I6Ym/6aet6Z+T5ryi6Zee57WO6aCh6Jmf54Gd6aGl6Zah6ba06LOA6Ki26ZeU6KCj5qmr6L2f6bS757SF6buM6KiM6JGS6ZaO6bGf5aO66K235rus5oi25ru46baY5Zip6I+v55Wr5YqD6Kmx6amK5qi66Y+15oe35aOe5q2h55Kw6YKE57ep5o+b5Zaa55iT54Wl5riZ5aWQ57mv6Y2w6a+H6buD6KyK6bCJ5o+u6Lyd5q+A6LOE56mi5pyD54e05Yyv6Kux6Kqo57mq6Km86JaI5Zmm5r6u57mi55C/5pqJ6JG35ri+6Kui6aSb6Za9542y6LKo56aN6Yil6ZGK5pOK5qmf56mN6aWR6Leh6K2P6Zue57i+57ed5qW16Lyv57Sa5pOg5bm+6JaK5YqR5r+f6KiI6KiY6Zqb57m857SA6KiQ6Kmw6Ja65Ziw5ZqM6aml55Kj6Kas6b2P56Ov576I6KCG6LqL6Zy96bGt6a+95aS+6I6i6aCw6LOI6YmA5YO56aeV6YOf5rW56YuP6Y616J+v5q6y55uj5aCF566L6ZaT6Imx57eY57mt5qqi5aC/6bm85o+A5pK/57Ch5YSJ5rib6Jam5qq76ZGS6LiQ6LOk6KaL6Y216Imm5YqN6aSe5ry45r+65r6X6Kur57iR5oiU5oip55686ba8562n6bC56Z+J5bCH5ry/6JSj5qez542O6Kyb6Yas57Wz6Z+B6Iag5r6G6amV5ayM5pSq6Ym455+v5YOl6IWz6aSD57mz57We6L2O6LyD5pKf5bag6bem6a6r6ZqO56+A5r2U57WQ6Kqh5bGG55mk6aCc6a6a57eK6Yym5YOF6Ky56YCy5pmJ54e855uh5YuB6I2K6I6W5be56JeO6aWJ57iJ6LSQ6Kay6a+o6ama57aT6aC46Z2c6Y+h5b6R55eZ56u25YeI5YmE5raH6YCV5byz6ISb6Z2a57O+5buE6IiK6ayu6bOp6bey6aeS6IiJ5pOa6Yu45oe85YqH6KmO5bGo5qu46aK26YmF6Yum56q26b2f6bWR57W56YyI6ZCr6ZuL6Ka65rG657WV6K2O546o6Yie6LuN6ae/55q46ZaL5Yex5Ym05aGP5oS+5oS36Y6n6Y2H6b6V6ZaM6Yin6Yqs6aGG5q686Kqy6aiN57eZ6Lu76Yiz6YyB6aC35aK+5oeH6b2m6Y+X5pGz5bqr6KSy5Zqz5aGK5YSI6YS25Zmy6Ia+5a+s542q6auW56Sm5pug5rOB6KqG6KqR6YS65aOZ57qK6LK66Jmn5beL56q66aWL5r2w5Yyx6JWi5oaS6IG157Cj6Zar6YyV6a+k5pO06ZeK6KCQ6KCf6IeY6JCK5L6G6LO05bSN5b6g5re254Co6LOa552e6Yy455mp57Gf6JeN5qyE5pSU57GD6ZeM6Jit54C+6K6V5pSs6Ka95oe257qc54ib5r+r5bWQ5qyW5paV6ZGt6KWk55Gv6Zas6YuD5pKI5Yue5r6H5Ziu5baX6Yqg6ZCS55mG5qiC6bCz6ZCz5aOY6aGe5rea6KqE57iy57Gs6LKN6Zui6a+J56au6bqX5Y6y5Yu156Sr5q2354Cd6Zq45YS36YWI5aOi6Je26JKe6Ji65Zqm6YKQ6amq57it5quq5quf6L2i56Sq6Yuw6bid55mY57Oy6LqS6Z2C6bG66bGn5YCG6IGv6JOu6YCj6ZCu5oaQ5ryj57C+5paC6IeJ6Y+I5oiA54WJ57e06Jie5aWp54Cy55KJ5q6u6KSz6KWd6bCx57On5ra85YWp6Lyb6KuS6a2O55mC6YG86ZCQ57ma6YeV6bev54216Ieo6YSw6bGX5Yec6LOD6Je65bup5qqB6L2U6Lqq6b2h6Yi06Z2I5ba66aCY57a+5qye6J+26a+q6aS+5YqJ54CP6aiu57a56Y6m6bea6b6N6IG+5Zqo57Gg5aOf5pSP6Zq06Jii54Cn55OP5quz5pyn56Sx5qiT5amB5pGf57CN5YOC6JSe5ZiN5baB6Y+k55i66ICs6J676auP6JiG55un6aGx5bus54iQ5pOE6bm16Jmc6a2v6LOC56W/6YyE6Zm45aOa5pO85ZqV6Zat54CY5rel5quo5quT6L2k6LyF6L2G5rCM6Iea6biV6be66Imr6bG45beS5pSj5a2/54Gk5LqC6Ieg5a2M5qyS6bie6ZG+5o6E6Lyq5YCr5L6W5req57a46KuW5ZyH6Ji/576F6YKP6ZG857Gu6ai+6aex57Wh54qW546A5r+85qyP6IWh6Y+N6ami5ZGC6YuB5L625bGi57i35oWu5r++57ag5qua6KS46Yud5Zi45aq955Gq56K86J6e6aas57215ZeO5Zic5ayk5qaq6LK36bql6LOj6YKB6ISI5Yux556e6aWF6KC75ru/6Ky+57i16Y+d6aGZ6bC76LKT6Yyo6Yma6LK/6bq85rKS6Y6C6ZaA5oK25YCR5o2r54ec5oej6Y2G6Yyz5aSi556H6KyO5b2M6KaT5Yaq576L6KyQ542856aw57a/57es5r6g6Z2m6bu95buf57ey57mG5ruF5oar6Zap6ZaU57eh6bO06YqY6Kys6Kyo6amA6aWD5q2/6Y+M6KyA55Wd6Yms5ZC26YiJ57SN6Zuj5pKT6IWm5oOx6ayn6ZCD6Kil6aSS5YWn5pOs6Iap6Yiu6a+i5pSG6Lym6a+w6YeA6bOl6JSm6KOK6IG25ZqZ6ZG36Y6z6ZqJ6JiX5ZuB6aGi6Lqh5qq4542w5a+n5pOw5r+Y6Iun5ZqA6IG56YiV57SQ6Ia/5r+D6L6y5YSC5Zml6aeR6Ye56Ku+5YS655in5q2Q6beX5q+G5ZiU5rya6Kyz5oWq55SM55uk6Lmj6b6Q5ouL55qw6LOg6L2h5Zm06bWs57SV576G6Yi56aiZ6Kue6aei6aOE57i56aC76LKn5ayq6JiL5oaR6KmV5r2R6aCX6YeZ5pKy6Yuq5qi46K2c6Y+36ZCg5qOy6IeN6b2K6aiO6LGI5ZWf5rCj5qOE6KiW6JiE6aiP57a65qa/56On6aCO6aCP6bCt54m96Yes6Ymb6YG357C96KyZ6Yyi6YmX5r2b5re66K205aG55YOJ6JWB5oWz6air57m+5qen6YiQ5qeN5ZeG5aK76JaU5by35pC25ayZ5qqj5oin54aX6YyG6Y+Y6Y+5576l6LmM6Y2s5qmL5Zas5YOR57+556uF6Kqa6K2Z6JWO57mw56O96Lm656uK5oSc6Y2l56+L5qy96Kaq5a+i6Yuf6LyV5rCr5YK+6aCD6KuL5oW25pKz6a+W55OK56qu54Wi6Ju65bew6LOV6J+j6bCN6Lao5Y2A6LuA6amF6b2y6KmY5baH6ZeD6Ka36bSd6aG05qyK5Yu46Kmu57aj6LyH6YqT5Y276bWy56K66ZeL6ZeV5oSo6K6T6aWS5pO+57me6JWY5ayI5qmI54ax6Z+M6KqN57SJ6aOq6LuU5qau57Wo5ba46KCR57if6Yqj6aGw6Luf6Yqz6JyG6ZaP5r2k54GR6Jap6aKv6bCT6LO95YKY5q+/57Od5Zaq6ai35o6D57mF5r6A5ZeH6Yqr56mh5q665YmO57SX6Y6p6a+K56+p5pus6YeD5Yiq6ZaD6Zmc6LSN57mV6KiV5aeN6ai46Yek6bGU5aKR5YK36LOe5Z2w5q6k6Ke054eS57S56LOS5pSd5oe+6Kit5Y6Z54GE55Ws57Sz5a+p5ay46IWO5ruy6Km16KuX54CL6IGy57mp5Yud5bir542F5r+V6Kmp5pmC6J2V5a+m6K2Y6aeb5Yui6YGp6YeL6aO+6KaW6Kmm6Kya5aGS6JKU5byS6Lu+6LKw6Yiw6bCj5aO9542457as5qie6Ly45pu46LSW5bGs6KGT5qi56LGO5pW45pSE57ST5bil6ZaC6ZuZ6Kqw56iF6aCG6Kqq56Kp54iN6ZGg57Wy6aO85bud6aef57em6Y226bel6IGz5oWr6aCM6Kif6Kqm5pO76Jeq6aS/6aK86Y6q6JiH6Ki06IKF6KyW56mM6ZuW6Zqo57aP5q2y6Kq25a2r5pCN562N6JOA54y757iu55Gj6Y6W5Zep6ISn54265pK76Zel6YmI6bCo6Ie65oWL6Yim6a6Q5pSk6LKq55mx54GY5aOH6K2a6KuH5ZiG5puH6Ymt6Yyf6aCH5rmv54eZ5YS76aSz6ZCL6Y+c5r+k57Wz6KiO6Z+c6Yux6aiw6KyE6Yq76aGM6auU5bGc57e56bWc6ZeQ5qKd57O26b2g6bC36LK86ZC15buz6IG954O06YqF57Wx5oWf6aCt6YiE56a/5ZyW6Ye35ZyY5pG26aC56Ju76aOp6ISr6bSV6aax6aed5qmi57Gc6byJ6KWq5aqn6IaD5b2O54Gj6aCR6JCs57SI57aw57ay6Lye6Z+L6YGV5ZyN54K65r+w57at6JGm5YGJ5YG957ev6KyC6KGb6KuJ5bmD6ZeI5rqI5r2/55GL6Z+Z54WS6a6q5rqr6IGe57SL56mp5ZWP6Za/55SV5pK+6J245rim56qp6Iel6JC16b235Zea6Y6i54OP6Kqj54Sh6JWq5ZCz5aGi6Zyn5YuZ6Kqk6YSU5buh5oau5au16aiW6bWh6bap6Yyr54qn6KWy57+S6YqR5oiy57Sw6aS86ayp55K96Kah6J2m6L2E5bO95L+g54u55buI5ZqH56Gk6a6u57qW6LOi6Yqc6ZaR6aGv6Zqq54++542757ij6aSh576o5oay57ea6I6n6Jaf6Jia5bO0542r5au76be055mH6KCU56eI6Lqa5buC6ZGy6YSJ6Kmz6Z+/6aCF6JaM6aSJ6amk57eX6aWX6JWt5ZuC6Yq35puJ5Ziv5Zi154Cf6amN57aD5qKf57Cr5Y2U5oy+5pSc6ISF6Kun5a+r54CJ6Kyd6KS75pO357Sy57qI6YuF6YeB6IiI6ZmY5ruO5YWH5rS26Yq557mh6aWI6bWC6Jmb5ZmT6aCI6Kix5pWY57eS57qM6Kmh6aCK6LuS5oe46YG455ms57Wi6Ku86YmJ6Y+H5a246KyU5r6p6bGI5Yub6Kmi5bCL6aa06KiT6KiK6YGc5aGk5r2v6bGY5aOT6bSJ6bSo5ZWe5Lqe6Kid5Z+h5amt5qSP5rCs6Za554WZ6bm95Zq05beW6aGP6Za76Im35Y6t56Gv5b2l6Ku66amX5Y606LSX5YS85YWX6K6e5oeo6ZaG6YeF6a2Y6aWc6by06bSm5qWK5o+a55iN6Zm955mi6aSK5qij54Ws55Gk5pCW5aCv6YGZ56qv6Kyg6Jel6Lu66beC6bCp54i66aCB5qWt6JGJ6Z2o6KyB6YS05puE54eB6Yar6Yql6aCk6YG65YSA6J+76Jed5YSE5oa2576p6Kmj6K2w6Kq86K2v55Ww57m56KmS5ZuI5ban6aO05oeM6amb57iK6Lu86LK96YeU6Y6w6ZC/55ie6Imk6JSt6Zmw6YqA6aOy6Zqx6Yqm55mu5qu75ayw6be55oeJ57qT55Gp6J6i54ef54aS6KCF6LSP56mO5aGL6bav57iI6Y6j5pSW5Zq254CF54Cg55OU6bia55mt6aCm572M5Zay5pOB5YKt55mw6Li06Kmg6Y+e5YSq5oaC6YO16Yi+54y26KqY6JWV6Yqq6a236Ly/6a2a5ryB5aib6IiH5ba86Kqe542E6K296aCQ6aat5YK05L+B6Kub6Kut6JW35bSz6aOr6Za+5auX57SG6Kam5q2f6Yi66bWS6be46b2s6bSb5re16L2F5ZyS5ZOh5ZyT57ej6YGg5que6bO26bu/57SE6LqN6ZGw57K15oKF6Zax6Yme6YSW5Yu76ZqV6YGL6JiK6Yae5pqI6Z+76YSG6JWT5oOy5oWN57Sc6Z+e5q6e5rCz6Zuc54G96LyJ5pSi5pqr6LSK55Oa6Lay6Y+o6LST6Ief6aeU6ZG/5qOX6LKs5pOH5YmH5r6k6LO+5ZiW5bmY57CA6LOK6K2W6LSI57ac57mS6LuL6Y2Y6ZaY5p+16KmQ6b2L5YK15rCI55ue5pas6Ly+5baE5qOn5oiw57a76K2r5by15ryy5biz6LOs6IS56LaZ6KmU6YeX6J+E6L2N6Y266YCZ6Kyr6LyS6beT6LKe6Yed5YG16Ki66Y6u6Zmj5rme57id5qWo6Lur6LOR56aO6bSG5o6Z552c54yZ54it5bmA55ml6YSt6K2J6KuN5bSi6Ymm6Yya566P57mU6IG35Z+357SZ5pGv5pOy5bmf6LOq5ruv6ait5qub5qKU6Lu56LyK6LSE6beZ6J6E57i26LqT6LqR6Ke26ZCY57WC56iu6IWr55y+6Y2+6KyF6Lu455q65pmd6amf57SC57iQ6LGs6Ku46KqF54et55+a5ZuR6LKv6ZGE6aeQ5L2H5qun6YqW5bCI56Oa6L2J6LO65ZuA6aWM6aGz5qiB6I6K6KOd5aad5aOv54uA6YyQ6LSF5aKc57a06aiF57iL6KuE5rqW6JGX5r+B6KuR6ZCy6Iyy6LOH5rys6Kuu57eH6Lyc6LKy55yl6YyZ6b2c6a+U6Lmk57i957ix5YKv6YSS6KuP6ai26a+r6Kmb57WE6Y+D6YmG57qY6Lqm6bGS57+65Lim6JSU5rKI6Yac5r6x5Y+g6ayl56+E5bm56Iev55+95quD5b6M5aSl56it5YKR6Kij6KqH6KOP5rep6bq96bu05pKa5reS5omh6IGW5bGN5pOh5aGX56qq6aS15rGZ6Y2B6bm56KCN5b2c5rmn6YGK57Gy56am6aGY5ba96Zuy56uI57Su5YqE56+J5pa86KqM6Ki76ZuV6KiB6K2+6YOk54yb5rC56Ziq5aOf5aCW5Z615aKK5qq+6JWS6JGk6JOn6JKT6I+H5qeB5pGj5ZKk5ZSa5ZOi5Zmd5ZmF5pKF5YqI6KyU6KWG5ba06ISK5Lu/5YOl542B6bqF6aSY6aS36aWK6aWi5qWe5oC15oeN54i/5ry154Gp5re35r+r54Cm5reh5a+n57O457Wd57eU55GJ5qKY5qOs5qGI5qmw5qur6Luy6Luk6LOr6IaB6IWW6aOI57OK54WG5rqc5rmj5ri656K45ru+556Y6YiI6YmV6Yuj6Yqx6Yul6Yu26ZCm6ZCn6Y2p6Y2A6Y2D6YyH6Y6E6Y6H6Y6/6ZCd6ZGl6ZG56ZGU56mt6baT6bal6biM55mn5bGZ55iC6IeS6KWH57mI6ICu6aGs6J+O6bqv6a6B6a6D6a6O6a+X6a+d6a+06bGd6a+/6bCg6bC16bGF6Z696Z+d6b2HJztcXG59XFxuXFxuXFxuZnVuY3Rpb24gVHJhZGl0aW9uYWxpemVkKGNjKXtcXG5cXHRcXHR2YXIgc3RyPScnO1xcblxcdFxcdGZvcih2YXIgaT0wO2k8Y2MubGVuZ3RoO2krKyl7XFxuXFx0XFx0XFx0aWYoY2hhclBZU3RyKCkuaW5kZXhPZihjYy5jaGFyQXQoaSkpIT0tMSlcXG5cXHRcXHRcXHRcXHRzdHIrPWZ0UFlTdHIoKS5jaGFyQXQoY2hhclBZU3RyKCkuaW5kZXhPZihjYy5jaGFyQXQoaSkpKTtcXG5cXHRcXHRcXHRlbHNlXFxuXFx0XFx0XFx0XFx0c3RyKz1jYy5jaGFyQXQoaSk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBzdHI7XFxuXFx0fVxcbiBcXG5mdW5jdGlvbiBzcChjYyl7XFxuXFx0XFx0dmFyIHN0cj0nJztcXG5cXHRcXHRmb3IodmFyIGk9MDtpPGNjLmxlbmd0aDtpKyspe1xcblxcdFxcdFxcdGlmKGZ0UFlTdHIoKS5pbmRleE9mKGNjLmNoYXJBdChpKSkhPS0xKVxcblxcdFxcdFxcdFxcdHN0cis9Y2hhclBZU3RyKCkuY2hhckF0KGZ0UFlTdHIoKS5pbmRleE9mKGNjLmNoYXJBdChpKSkpO1xcblxcdFxcdFxcdGVsc2VcXG5cXHRcXHRcXHRcXHRzdHIrPWNjLmNoYXJBdChpKTtcXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIHN0cjtcXG59XFxuZnVuY3Rpb24gY29sb3JDb2RlKGQpIHtcXG4gICAgdmFyIHN0ciA9IEFycmF5LmZyb20oZC50b1N0cmluZygpLnJlcGxhY2UoJyMnLCAnJykpO1xcbiAgICBpZiAoc3RyLmxlbmd0aCAhPSA2KSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBmb3IgKHZhciBrIGluIHN0cikge1xcbiAgICAgICAgICAgIGlmICghKChzdHJba10gPj0gJzAnICYmIHN0cltrXSA8PSAnOScpIHx8IChzdHJba10gPj0gJ2EnICYmIHN0cltrXSA8PSAnZicpIHx8IChzdHJba10gPj0gJ0EnICYmIHN0cltrXSA8PSAnRicpKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG59XFxuZnVuY3Rpb24gY29sb3IoZCwgYykge2lmIChjb2xvckNvZGUoZCkgJiYgIWNvbG9yQ29kZShjKSkge1xcbiAgICAgICAgdmFyIHRtcCA9IGQ7XFxuICAgICAgICBkID0gYztcXG4gICAgICAgIGMgPSB0bXA7XFxuICAgIH1cXG4gICAgcmV0dXJuICfigJjigJjigJnigJk8Zm9udCBjb2xvcj0jJyArIChjIHx8ICcwMDAwMDAnKSArICc+JyArIGQgKyAnPC9mb250Pic7XFxufVxcbmZ1bmN0aW9uIHNtYWxsKGQsIGMpIHtpZiAoY29sb3JDb2RlKGQpICYmICFjb2xvckNvZGUoYykpIHtcXG4gICAgICAgIHZhciB0bXAgPSBkO1xcbiAgICAgICAgZCA9IGM7XFxuICAgICAgICBjID0gdG1wO1xcbiAgICB9XFxuICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxmb250IGNvbG9yPSMnICsgKGMgfHwgJzAwMDAwMCcpICsgJz4nICsgZCArICc8L2ZvbnQ+PC9zbWFsbD4nO1xcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaWh+eroOS9nOiAhVwiLFwicGF0aFwiOlwiYmxvZ1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG52YXIgbGluayA9IGdldFZhcignbGluaycpO1xcbnZhciBoZWFkZXJzID0ge1xcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvSk1fY29va2llLnR4dCcpIHx8ICcnLCBcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyBTTS1HOTc1MCBCdWlsZC9TUDFBLjIxMDgxMi4wMTY7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODkuMC40Mzg5LjcyIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDYyNzkgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiXFxuICAgIH07XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKClcXG52YXIgaWNvbiA9IHBkKGh0bWwsXFxcIi5wYW5lbC1ib2R5JiZpbWcmJnNyY1xcXCIsbGluaylcXG52YXIgbGVmdCA9IHBkZmgoaHRtbCxcXFwiLnVzZXItYmxvZy1saXN0JiYucHVsbC1sZWZ0JiZUZXh0XFxcIilcXG52YXIgcmlnaHQgPSBwZGZoKGh0bWwsXFxcIi51c2VyLWJsb2ctbGlzdCYmLnB1bGwtcmlnaHQmJlRleHRcXFwiKS5zcGxpdCgnb2YnKVsxXVxcbmlmKHBhZ2U9PTEpe1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBsZWZ0LFxcbiAgICBkZXNjOiByaWdodC5zbWFsbCgpLFxcbiAgICBwaWNfdXJsOiBpY29uLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxufSlcXG59XFxudmFyIGJsaXN0ID0gcGRmYShodG1sLFxcXCJib2R5JiYudXNlci1ibG9nLWxpc3QmJi5nYW1lLW1haW5cXFwiKVxcbmJsaXN0LmZvckVhY2goeCA9PiB7XFxuICAgIHZhciB0aXRsZSA9IHBkZmgoeCxcXFwiaW1nJiZhbHRcXFwiKVxcbiAgICB2YXIgaW1nID0gcGQoeCxcXFwiaW1nJiZzcmNcXFwiLGxpbmspXFxuICAgIHZhciB1cmwgPSBcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGU/dXJsPVxcXCIrcGQoeCxcXFwiYSwxJiZocmVmXFxcIikrXFxcIiNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjXFxcIjtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgIHBpY191cmw6IGltZyxcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8zXFxcIixcXG4gICAgICAgIGV4dHJhOntcXG4gICAgcGFnZVRpdGxlOiB0aXRsZVxcbiAgICB9XFxuICAgIH0pXFxuICAgIFxcbn0pXFxuc2V0UmVzdWx0KGQpXCJ9XSIsImljb24iOiJodHRwczovLzE4LWNvbWljZnJpZXJlbi5tZS90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL2FwcF9saW5rMy5wbmc/dj0zIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment