Advertisement
xiaomianao666

邀您一起看:编辑解析接口

Nov 22nd, 2021
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥编辑解析接口@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmh0bWxcIixcInBhdGhcIjpcIlBhcnNlX0RuLmh0bWxcIixcInJ1bGVcIjpcIjwhRE9DVFlQRSBodG1sPlxcbjxodG1sPlxcbjxoZWFkPlxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCI+XFxuICAgIDxtZXRhIG5hbWU9XFxcInZpZXdwb3J0XFxcIiBjb250ZW50PVxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG4gICAgPHNjcmlwdCBzcmM9XFxcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vdnVlQDIuNS4xNi9kaXN0L3Z1ZS5taW4uanNcXFwiPjwvc2NyaXB0PlxcbiAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMS40Lm1pbi5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIDwhLS1cXG4gICAgPHNjcmlwdCBzcmM9XFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL2pxdWVyeS8yLjEuNC9qcXVlcnkubWluLmpzXFxcIj48L3NjcmlwdD5cXG4gICAgPHNjcmlwdCBzcmM9XFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL3Z1ZS8xLjAuMTQvdnVlLmpzXFxcIj48L3NjcmlwdD5cXG4gICAgLS0+XFxuICAgIDx0aXRsZT5QYXJzZV9EbjwvdGl0bGU+XFxuICAgIDxzdHlsZSB0eXBlPXRleHQvY3NzPlxcbiAgICAgICAgaHRtbCwgYm9keSB7XFxuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICB9XFxuICAgICAgICBib2R5IHtcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMHB4IDAgMHB4O1xcbiAgICAgICAgICAgIC8vYmFja2dyb3VuZDogI0Y5RjBEQTtcXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXG4gICAgICAgICAgICBmb250LWZhbWlseTogXFxcIk1pY3Jvc29mdCBZYUhlaVxcXCIsXFxcIuWui+S9k1xcXCIsXFxcIlNlZ29lIFVJXFxcIiwgXFxcIkx1Y2lkYSBHcmFuZGVcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXG4gICAgICAgIH1cXG4gICAgICAgICNkaXYye1xcbiAgICAgICAgICAgbWFyZ2luLXRvcDozNXB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrovpPlhaXmoYbniLblhYPntKAqL1xcbiAgICAgICAgZGl2LmJveCB7XFxuICAgICAgICAgICAgaGVpZ2h0OiA1M3B4O1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG5bC65a+4Ki9cXG4gICAgICAgIGZvcm0ge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgICB3aWR0aDogOTIlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaW5wdXQsIGxhYmVsLCAubGllYiBidXR0b24ge1xcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcbiAgICAgICAgaW5wdXQge1xcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjZweDtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgbGFiZWwge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrlsI/moYYqL1xcbiAgICAgICAgLmJhciBsYWJlbCB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTUgNTU1cHggNTU1cHggNTU1O1xcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gICAgICAgICAgICBjb2xvcjogI0Y5RjBEQTtcXG4gICAgICAgICAgICB0b3A6IDA7XFxuICAgICAgICAgICAgbGVmdDogM3B4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcbiAgICAgICAgLmJhciBpbnB1dCB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y5RjBEQTtcXG4gICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjRDA2QjZDO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5YiX6KGoKi9cXG4gICAgICAgIC5saWViIGJ1dHRvbiB7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDI3cHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5YiX6KGoKi9cXG4gICAgICAgIC5saWViIGJ1dHRvbntcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIHJpZ2h0OiAwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWktOWDjyovXFxuICAgICAgICAucm91bmRfaWNvbntcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLmp4LXVsLCAuY2otdWwge1xcbiAgICAgICAgICAgIHotaW5kZXg6IDk5OTtcXG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXG4gICAgICAgICAgIC8vIGxlZnQ6IDEwJTtcXG4gICAgICAgIH1cXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgICAgLmp4LXVsIHtcXG4gICAgICAgICAgICB0b3A6IDMlO1xcbiAgICAgICAgfVxcbiAgICAgICAgLmNqLXVsIHtcXG4gICAgICAgICAgICB0b3A6IDMwJTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpIHtcXG4gICAgICAgICAgICBoZWlnaHQ6IDM1cHg7XFxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAxYmZkYTtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMzVweDtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gICAgICAgIH1cXG4gICAgICAgIGxpIHtcXG4gICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGk6aG92ZXIge1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMTMxLCAxMjAsIDAuOSk7XFxuICAgICAgICB9XFxuICAgICAgICBsaVtjaGVjaz1cXFwidHJ1ZVxcXCJdIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMCwgMCwgMC45KTtcXG4gICAgICAgIH1cXG5cXG4gICAgPC9zdHlsZT5cXG48L2hlYWQ+XFxuXFxuPGJvZHk+XFxuICAgIDxkaXYgY2xhc3M9XFxcImZ1bmdcXFwiPlxcbiAgICAgICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7XFxcIj5cXG4gICAgICAgICAgICA8YnV0dG9uICBzdHlsZT1cXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjYzU0NjRhO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcIiBvbmNsaWNrPVxcXCJjYW5jZWwoKTtcXFwiPuWFsyDpl608L2J1dHRvbj5cXG4gICAgICAgIDwvYT5cXG4gICAgICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpyaWdodFxcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjMDY4MDA2O3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcIm9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXCI+5L+dIOWtmDwvYnV0dG9uPiBcXG4gICAgICAgIDwvYT5cXG4gICAgPC9kaXY+XFxuICAgIDxicj5cXG4gICAgPGRpdiBpZD1cXFwiZGl2MlxcXCI+PC9kaXY+XFxuICAgIDxkaXY+XFxuICAgICAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDtcXFwiIG9uY2xpY2s9XFxcIm9wZW5EblBhZ2UoKVxcXCI+XFxuICAgICAgICAgICAgPGltZyBzcmM9XFxcImh0dHBzOi8vczMuYXgxeC5jb20vMjAyMS8wMi8yMi95N3diOU8uanBnXFxcIiBjbGFzcz1cXFwicm91bmRfaWNvblxcXCIgIGFsdD1cXFwiXFxcIj5cXG4gICAgICAgIDwvYT5cXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXCJsaW5lLWhlaWdodDo2MHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiBncmV5O1xcXCI+Jm5ic3A7Jm5ic3A75patJm5ic3A75b+1PC9zcGFuPlxcbiAgICAgICAgPGEgc3R5bGU9XFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6NXB4O1xcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA1QkZDNTt3aWR0aDogMTg1cHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXCI+5L+d5a2Y6K6+572u5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxuICAgICAgICA8L2E+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJ6ai1kaXZcXFwiPlxcbiAgICAgICAgPHVsIGNsYXNzPVxcXCJqeC11bFxcXCIgc3R5bGU9XFxcImhlaWdodDo0NDRweDtvdmVyZmxvdy15OmF1dG87XFxcIj5cXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcIm15Q2hvaWNlXFxcIiBzdHlsZT1cXFwiei1pbmRleDo5OTk5O3Bvc2l0aW9uOiBmaXhlZDt3aWR0aDo3Ni41JTtjb2xvcjpyZWQ7XFxcIj48L2xpPlxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFwidXNlbGVzc1xcXCI+PC9saT5cXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcInhsTGlzdFxcXCIgdi1mb3I9XFxcIml0ZW0gaW4ganhEYXRhXFxcIj57e2l0ZW19fTwvbGk+XFxuICAgICAgICA8L3VsPlxcbiAgICAgICAgPHVsIGNsYXNzPVxcXCJjai11bFxcXCI+XFxuICAgICAgICAgICAgPGxpIHN0eWxlPVxcXCJiYWNrZ3JvdW5kOmdyZXk7XFxcIj7or7fpgInmi6nmj5Lku7Y8L2xpPlxcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cXFwiaXRlbSBpbiBjakRhdGFcXFwiPnt7aXRlbX19PC9saT5cXG4gICAgICAgIDwvdWw+XFxuICAgIDwvZGl2PlxcbjwvYm9keT5cXG48c2NyaXB0PlxcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxuICAgICAgICBxeTogJ3l1bjE3MTcnLFxcbiAgICAgICAgeWs6ICd5dW4xNzE3JyxcXG4gICAgICAgIHR4OiAneXVuMTcxNycsXFxuICAgICAgICBtZzogJ3l1bjE3MTcnLFxcbiAgICAgICAgYmw6ICd5dW4xNzE3JyxcXG4gICAgICAgIG90aDogJ3l1bjE3MTcnLFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXG4gICAgfTtcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmdldEludGVybmFsSnMoKSk7XFxuICAgIFxcbiAgICB2YXIgb2xkUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbiAgICB2YXIgbXlTZXQgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG9sZFJvdXRlKTtcXG4gICAgXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxuICAgIHZhciBuZXdDb25maWcgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKTtcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxuICAgIGlmKG5ld0NvbmZpZyAhPSBcXFwiXFxcIil7XFxuICAgICAgICBldmFsKFxcXCJuZXdDb25maWcgPVxcXCIgKyBuZXdDb25maWcgKyBcXFwiO1xcXCIpO1xcbiAgICAgICAgc2V0dGluZ3MgPSBuZXdDb25maWcuc2V0dGluZ3M7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuZXdDb25maWcudGl0bGUubGVuZ3RoOyBpKyspe1xcbiAgICAgICAgICAgIHZhciBUaXRsZXMgPSBuZXdDb25maWcudGl0bGVbaV07XFxuICAgICAgICAgICAgaWYoeWNUaXRsZS5pbmNsdWRlcyhUaXRsZXMpID09IGZhbHNlKXtcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3QucHVzaChUaXRsZXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB2YXIgc2ZSZWZyZXNoID0gc2V0dGluZ3MuY2o7XFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcbiAgICB9XFxuICAgIFxcbiAgICBpZihteVNldCA9PSAnJyl7XFxuICAgICAgICBEaWQoXFxcImRpdjJcXFwiKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCdcXFxcXFxuPGg0PuaPkOekuu+8mjxicj7ikaDms6jmhI/mj5Lku7bpgInpobnvvIzmsqHmnInmiYvliqjlr7zlhaXmj5Lku7bnmoTor53kuI3nlKjliqjlroPjgILlpoLorr7nva7kuI3lvZPkvJrlr7zoh7Top4TliJnml6Dms5Xkvb/nlKjvvIw8YnI+6Kej5Yaz5Yqe5rOV77ya6KeG55WM5omT5byA5pu05aSa6K6+572u4oaS5paH5Lu2566h55CG4oaS54K5Y2FjaGXihpLplb/mjIlNeVBhcnNlU2V0Lmpzb27liKDpmaTmjonvvJs8YnI+4pGh5YWo5bGA6K6+572u5aaC5p6c6YCJ5oup5LqG6Z2e6buY6K6k6YKj5LmI5YWo6YOo55qE6Kej5p6Q5Lya5L2/55So6L+Z5LiA6K6+572u77yM5LiN5oOz6L+Z5qC355qE6K+d6K+35aGr5YWl6buY6K6k77ybPGJyPuKRoue7v+iJsuS/neWtmOaMiemSruS7heS7heS/neWtmOmFjee9ruS4jeS8muWFs+mXreiuvue9rumhtemdou+8jOmFjee9ruWQjuaDs+S/neWtmOW5tuWFs+mXreiuvue9rumhtemdoueahOivneivt+eCueiTneiJsuaMiemSru+8mzxicj7ikaPpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+PC9oND4nKTtcXG4gICAgfVxcbiAgICBcXG4gICAgdmFyIGJveERhdGEgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLlpYcg5aWHXFxcIixcXG4gICAgICAgICAgICBpZDogXFxcInF5XFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucXksXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLphbcg6YW3XFxcIixcXG4gICAgICAgICAgICBpZDogXFxcInlrXFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MueWssXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLohb4g6IW+XFxcIixcXG4gICAgICAgICAgICBpZDogXFxcInR4XFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MudHgsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmnpwg5p6cXFxcIixcXG4gICAgICAgICAgICBpZDogXFxcIm1nXFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MubWcsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLlk6kg5ZOpXFxcIixcXG4gICAgICAgICAgICBpZDogXFxcImJsXFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuYmwsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLlhbYg5LuWXFxcIixcXG4gICAgICAgICAgICBpZDogXFxcIm90aFxcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLm90aCxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWFqCDlsYBcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwicWp1XFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucWp1LFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5o+SIOS7tlxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJjalxcXCIsXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmNqLFxcbiAgICAgICAgfVxcbiAgICBdO1xcblxcbiAgICB2YXIgaW5wdXRCb3ggPSBcXFwiXFxcIjtcXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGJveERhdGEubGVuZ3RoOyBpKyspe1xcbiAgICAgICAgbGV0IGIgPSBib3hEYXRhW2ldO1xcbiAgICAgICAgaW5wdXRCb3ggKz0gJzxkaXYgY2xhc3M9XFxcImJveCBiYXJcXFwiPlxcXFxcXG4gICAgICAgICAgICA8Zm9ybT5cXFxcXFxuICAgICAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXCJzdWJtaXRcXFwiPicgKyBiLnRpdGxlICsgJzwvbGFiZWw+XFxcXFxcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgcGxhY2Vob2xkZXI9XFxcIui+k+WFpeino+aekOWQjeaIluiAhVVSTC4uLi4uLlxcXCIgdmFsdWU9XFxcIicgKyBiLnZhbHVlICsgJ1xcXCIgaWQ9XFxcIicgKyBiLmlkICsgJ1xcXCI+XFxcXFxcbiAgICAgICAgICAgIDwvZm9ybT5cXFxcXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibGllYlxcXCI+XFxcXFxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVxcXCInICsgYi5pZCArICdTZWxlY3RcXFwiPuKYsDwvYnV0dG9uPlxcXFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcXFxuICAgICAgICA8L2Rpdj4nO1xcbiAgICB9XFxuICAgIERpZChcXFwiZGl2MlxcXCIpLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJlbmQnLCBpbnB1dEJveCk7XFxuICAgIERpZChcXFwiY2pcXFwiKS5wbGFjZWhvbGRlciA9IFxcXCLovpPlhaXmj5Lku7blnLDlnYAuLi4uLi5cXFwiO1xcbiAgICBEaWQoXFxcInFqdVxcXCIpLnBsYWNlaG9sZGVyID0gXFxcIuatpOmhueW7uuiurueVmeepuuaIluiAheWhq+m7mOiupOS4pOS4quWtl1xcXCI7XFxuICAgIFxcbiAgICBuZXcgVnVlKHtcXG4gICAgICAgIGVsOiBcXFwiLnpqLWRpdlxcXCIsXFxuICAgICAgICBkYXRhOiB7XFxuICAgICAgICAgICAganhEYXRhOiBteVNlbGVjdCxcXG4gICAgICAgICAgICBjakRhdGE6IFtcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXCIsIFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qc1xcXCIsIFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzXFxcIl1cXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIGxlbiA9ICQoJy5qeC11bCcpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcXG4gICAgICAgIHZhciBsZW4yID0gJCgnLmNqLXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcbiAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY2xpY2soZnVuY3Rpb24oZSkge1xcbiAgICAgICAgICAgIGlmKCQoJy5saWViIGJ1dHRvbicpLnRleHQoKS5pbmNsdWRlcygn4pSBJykpe1xcbiAgICAgICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS5jc3MoJ2JhY2tncm91bmQnLCAnJyk7XFxuICAgICAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLnRleHQoJ+KYsCcpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnRleHQoJ+KUgScpO1xcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygnYmFja2dyb3VuZCcsICdyZWQnKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgJCgnbGknKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcbiAgICAgICAgICAgIHZhciBpbnB1dGlkID0gXFxcIiNcXFwiICsgdGhpcy5pZC5zcGxpdChcXFwiU2VsZWN0XFxcIilbMF07XFxuICAgICAgICAgICAgdmFyIGFyciA9ICQoaW5wdXRpZCkudmFsKCkuc3BsaXQoJywnKTtcXG4gICAgICAgICAgICBhcnIgPSBhcnJbMF0gPT0gJycgPyBbXSA6IGFycjtcXG4gICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxuICAgICAgICAgICAgaWYgKGlucHV0aWQgIT09ICcjY2onICYmICQoJy5jai11bCcpLmNzcygnZGlzcGxheScpPT0nbm9uZScpIHtcXG4gICAgICAgICAgICAgICAgJCgnLmp4LXVsJykuc2xpZGVUb2dnbGUoMzAwKTtcXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW47IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGp4TGlzdCA9ICQoJy5qeC11bCBsaTpub3QoLm15Q2hvaWNlKScpLmVxKGkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5pbmNsdWRlcyhqeExpc3QudGV4dCgpKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4TGlzdC5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBqeExpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2NoZWNrJykgIT09IFxcXCJ0cnVlXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnVuc2hpZnQoJCh0aGlzKS50ZXh0KCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGFyci5sZW5ndGg7IGErKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyclthXSA9PSAkKHRoaXMpLnRleHQoKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoYSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmKCQoJy5qeC11bCcpLmNzcygnZGlzcGxheScpPT0nbm9uZScpe1xcbiAgICAgICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVRvZ2dsZSgyMDApO1xcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNqTGlzdCA9ICQoJy5jai11bCBsaScpLmVxKGkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoaW5wdXRpZCkudmFsKCkgPT0gY2pMaXN0LnRleHQoKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGlzdC5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBjakxpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKCQodGhpcykudGV4dCgpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuc2libGluZ3MoKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgICQoZG9jdW1lbnQpLm5vdCgkKCcueGxMaXN0JykpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXG4gICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVVwKCk7XFxuICAgICAgICAgICAgJCgnLmNqLXVsJykuc2xpZGVVcCgpO1xcbiAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLnRleHQoJ+KYsCcpO1xcbiAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNzcygnYmFja2dyb3VuZCcsICcnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJChmdW5jdGlvbigpe1xcbiAgICAgICAgICAgICQoJ2xhYmVsJykubW91c2V1cChmdW5jdGlvbigpe1xcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRpZCA9ICcjJyArICQodGhpcykubmV4dCgpLmF0dHIoJ2lkJyk7XFxuICAgICAgICAgICAgICAgIG9uZU9yRGJsKGlucHV0aWQpO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XFxuICAgICAgICAgICAgdmFyIHRpbWVyO1xcbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uZU9yRGJsKGlucHV0aWQpe1xcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xcbiAgICAgICAgICAgICAgICB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XFxuICAgICAgICAgICAgICAgICAgICBpZihjb3VudCA9PSAxKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gJChpbnB1dGlkKS52YWwoKS5zcGxpdCgnLCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoMCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKCcnKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSAwO1xcbiAgICAgICAgICAgICAgICB9LDI2MClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9KTtcXG4gICAgXFxuICAgIGZ1bmN0aW9uIFRvYXN0KG1zZyxkdXJhdGlvbil7ICBcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uOyAgXFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyAgXFxuICAgICAgICBtLmlubmVySFRNTCA9IG1zZzsgIFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXCJ3aWR0aDo0NSU7IG1pbi13aWR0aDoxNTBweDsgYmFja2dyb3VuZDojMzExOyBvcGFjaXR5OjAuNjsgaGVpZ2h0OmF1dG87bWluLWhlaWdodDogNDVweDsgY29sb3I6I2ZmZjsgbGluZS1oZWlnaHQ6NDVweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgcG9zaXRpb246Zml4ZWQ7IHRvcDo2MCU7IGxlZnQ6MjYlOyB6LWluZGV4Ojk5OTk5OTtcXFwiOyAgXFxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG0pOyAgXFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAgXFxuICAgICAgICAgICAgdmFyIGQgPSAwLjU7ICBcXG4gICAgICAgICAgICBtLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnLXdlYmtpdC10cmFuc2Zvcm0gJyArIGQgKyAncyBlYXNlLWluLCBvcGFjaXR5ICcgKyBkICsgJ3MgZWFzZS1pbic7ICBcXG4gICAgICAgICAgICBtLnN0eWxlLm9wYWNpdHkgPSAnMCc7ICBcXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pIH0sIGQgKiAxMDAwKTsgIFxcbiAgICAgICAgfSwgZHVyYXRpb24pOyAgXFxuICAgIH0gIFxcblxcbiAgICBmdW5jdGlvbiBvcGVuRG5QYWdlKCl7XFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgcnVsZTogXFxcIj1eX149XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIueuoeeQhuino+aekFxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBmaW5kUnVsZTogXFxcImpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L2p4SXRlbS5qcycpO2p4SXRlbS5qeExpc3QoKTtzZXRSZXN1bHQoZClcXFwiXFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2FuY2VsKCl7XFxuICAgICAgICBpZihteVNldD09Jycpe1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG9sZFJvdXRlLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgNCkpO1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soZmFsc2UpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBib3hEYXRhLmxlbmd0aDsgaSsrKXtcXG4gICAgICAgICAgICBsZXQgaWQgPSBib3hEYXRhW2ldLmlkO1xcbiAgICAgICAgICAgIHNldHRpbmdzW2lkXSA9IERpZChpZCkudmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICBpZihzZXR0aW5ncy5xanUgPT0gJycpe1xcbiAgICAgICAgICAgIHNldHRpbmdzLnFqdSA9ICfpu5jorqQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG15U2VsZWN0WzBdICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBiY0NvbmZpZz0nICsgZnlfYnJpZGdlX2FwcC5mZXRjaChuZXdSb3V0ZSkpO1xcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYmNDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShiY0NvbmZpZykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBcXG4gICAgICAgIFRvYXN0KG1zZyxkdXJhdGlvbik7XFxuICAgICAgICBpZih0aXRsZT09XFxcIuWFs1xcXCIpe1xcbiAgICAgICAgICAgIGlmKHNmUmVmcmVzaCAhPSBEaWQoXFxcImNqXFxcIikudmFsdWUpe1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuPC9zY3JpcHQ+ICAgXFxuPC9odG1sPlwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiUGFyc2VfRG4uanNcIixcInBhdGhcIjpcIlBhcnNlX0RuLmpzXCIsXCJydWxlXCI6XCIvLz09PT09PT09PT09PeWFjeWXheiwg+eUqD09PT09PT09PT09PVxcbi8v77yN77yN77yNPV5fXj1cXG52YXIgdmVyc2lvbiA9IFxcXCIzLjUuMjVcXFwiO1xcblxcbnZhciBwYXJzZVJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJztcXG52YXIgTXlQYXJzZVMgPSB7fTtcXG52YXIgbXlTZXQgPSB7fTtcXG5pZiAoZmlsZUV4aXN0KHBhcnNlUm91dGUpKSB7XFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXG59XFxudmFyIHBhcnNlVGl0bGUgPSBbXFxuICAgIFxcXCLwn6WaXFxcIixcXG4gICAgXFxcInl1bjE3MTdcXFwiLFxcbiAgICBcXFwiUGFuR3VcXFwiLFxcbiAgICBcXFwiRnVYaW5nXFxcIixcXG4gICAgXFxcImh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XFxcIixcXG4gICAgXFxcImh0dHBzOi8vb2tqeC5jYy8/dXJsPVxcXCIsXFxuICAgIFxcXCJodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD1cXFwiLFxcbiAgICBcXFwiaHR0cHM6Ly9zYi41Z3Nlby5uZXQvP3VybD1cXFwiXFxuXTtcXG5cXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1JvdXRlLnNldFBhcnNlKCk7c2V0UmVzdWx0KGQpO1xcXCI7XFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxudmFyIGxhenkgPSBgcmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO2F5dG1QYXJzZShpbnB1dClgO1xcblxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXG5cXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXG4vKlxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXG4gKiBcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxuICogXFxuICovXFxuXFxuXFxudmFyIHRvb2xzID0ge1xcbiAgICBNRDU6IGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KGRhdGEpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpO1xcbiAgICB9LFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpO1xcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcbiAgICAgICAgaWYgKGlzRW5jcnlwdCkge1xcbiAgICAgICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmRlY3J5cHQodGV4dCwga2V5LCB7XFxuICAgICAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgfSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICB9LFxcbiAgICAvL2FzY2lpXFxuICAgIG5leHRDaGFyYWN0ZXI6IGZ1bmN0aW9uKGFzY2lpVmFsdWUsIGspIHtcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHMgKyBrKTtcXG4gICAgfSxcXG4gICAgLy/lh6/mkpJcXG4gICAgY2Flc2FyQ2lwaGVyOiBmdW5jdGlvbihzdHJpbmdWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIG5ld1N0cmluZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmdWYWx1ZS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIG5ld1N0cmluZyArPSB0aGlzLm5leHRDaGFyYWN0ZXIoc3RyaW5nVmFsdWVbaV0uY2hhckNvZGVBdCgpLCBrKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XFxuICAgIH1cXG59O1xcblxcbnZhciBQYXJzZVMgPSB7fTtcXG52YXIgb3JpZ2luYWxQYXJzZVMgPSB7XFxuICAgIC8vdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXG4gICAgQ2l0eUlQOiAnaHR0cDovL3B2LnNvaHUuY29tL2NpdHlqc29uJyxcXG4gICAgcGNVQTogJ1VzZXItQWdlbnRATW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMFxcXFzvvJtcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzYnLFxcbiAgICBjYWNoZU0zdTg6IGZ1bmN0aW9uKHZVcmwsIHJlZikge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbTN1OCA9IGZldGNoKHZVcmwsIHt9KTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvdmlkZW9zLm0zdTgnLCBtM3U4KTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3ZpZGVvcy5tM3U4Iyc7XFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZTogZnVuY3Rpb24odXJsKSB7XFxuICAgICAgICByZXR1cm4gdXJsO1xcbiAgICB9LFxcbiAgICBtYW9zczogZnVuY3Rpb24oanh1cmwsIHJlZiwga2V5KSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAocmVmKSB7XFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJyZidHdhZj0nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArICcmYnR3YWYnICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFwiLylbMV0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KCdidF90b2tlbiA9IFxcXCInKVsxXS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXHNcXFxcU10qP30vKVswXSArICcnKTtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnVybC5zbGljZSgwLCA0KSAhPSAnaHR0cCcpIHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwgXFxcImR2eVlSUWxuUFJDTWRRU2VcXFwiLCBpdikpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcImFwaS5waHBcXFwiO1xcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcbiAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxuICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcbiAgICAgICAgKi9cXG4gICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXG4gICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcbiAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXCJodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocFxcXCI7XFxuICAgICAgICBpZiAoZGF0YSkge1xcbiAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxuICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcbiAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcbiAgICAgICAgdmFyIGpzb24gPSByZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBwYXJzZVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogXFxcInVybD1cXFwiICsgdmlwVXJsICsgXFxcIiZyZWZlcmVyPVxcXCIgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgXFxcIiZyZWY9MSZ0aW1lPVxcXCIgKyBUaW1lICsgXFxcIiZ0eXBlPSZvdGhlcj1cXFwiICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyBcXFwiJmlvcz0wXFxcIixcXG4gICAgICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICB2YXIgdXJsID0ganNvblswXSA9PSBcXFwie1xcXCIgPyBKU09OLnBhcnNlKGpzb24pLnVybCA6IFxcXCJcXFwiO1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfSxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcbiAgICAgICAgdmFyIHJlZiA9IFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcIjtcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXG4gICAgfSxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFw/LiovLCcnKTtcXG4gICAgICAgICAgICAvL31cXG4gICAgICAgICAgICB2YXIgcmVmID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgXFxcIvCfpZpcXFwiOiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIGxldCDkvZzogIVf6KeG55WM55+l5ZCN5aSn5L2sO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBldmFsKGZldGNoKFxcXCJodHRwOi8vcTE2LjIyd2ViLm9yZy9hZXMuanNcXFwiKSk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoZmV0Y2goXFxcImh0dHA6Ly9xMTYuMjJ3ZWIub3JnL2FwaS5waHBcXFwiKSwgXFxcImJvZHkmJnNjcmlwdCwxJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgZXZhbCh1cmwucmVwbGFjZShcXFwiZG9jdW1lbnQuXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImxvY2F0aW9uLlxcXCIsIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgdmFyIHBsYXkgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwOi8vcTE2LjIyd2ViLm9yZy9hcGkucGhwXFxcIiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llLnNwbGl0KFxcXCI7XFxcIilbMF1cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogXFxcInVybD1cXFwiICsgaW5wdXQsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICBpZiAocGxheS5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgcGxheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcGxheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxufTtcXG5cXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcblxcblxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsIHBhcnNlTmFtZSkge1xcbiAgICB0aGlzLnJlcXVlc3QgPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxuICAgICAgICBwYXJhbTEgPSBwYXJhbTEgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTE7XFxuICAgICAgICBwYXJhbTEudGltZW91dCA9IDI1MDA7XFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFO1xcbiAgICAgICAgdmFyIHJldFN0ciA9IG1ldGhvZF9yZXF1ZXN0Lmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFwiXFxcIjtcXG4gICAgfTtcXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXG4gICAgICAgIHBhcmFtMSA9IHBhcmFtMSA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMTtcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzID0gcGFyYW0xLmhlYWRlcnMgPT0gdW5kZWZpbmVkID8ge30gOiBwYXJhbTEuaGVhZGVycztcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBQQ19VQTtcXG4gICAgICAgIHBhcmFtMS50aW1lb3V0ID0gMjUwMDtcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxuICAgICAgICB2YXIgcmV0U3RyID0gbWV0aG9kX2ZldGNoLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFwiXFxcIjtcXG4gICAgfTtcXG4gICAgdmFyIGhhbmRsZVVybCA9IGZ1bmN0aW9uKHVybCkge1xcbiAgICAgICAgaWYgKHVybFswXSA9PSAnLycpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPWh0dHAnKSAhPSAtMSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybC5pbmRleE9mKCcmdXJsPScpID4gLTEgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmwubWF0Y2goL21ndHYuY29tL2cpID09ICdtZ3R2LmNvbScpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwuaW5kZXhPZignVXNlci1BZ2VudCcpID09IC0xID8gdXJsICsgJzt7VXNlci1BZ2VudEBhcHB9JyA6IHVybDtcXG4gICAgICAgIH0gZWxzZSBpZiAodXJsLmluZGV4T2YoJy5mbHYnKSAhPSAtMSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdXJsO1xcbiAgICB9O1xcbiAgICB2YXIgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXC4oLio/KVxcXFwvLyk7XFxuICAgIGhvc3QgPSBob3N0ID09IG51bGwgPyBudWxsIDogaG9zdFsxXTtcXG4gICAgdmFyIG5vVXJsID0gXFxcInRvYXN0Oi8v5o6l5pS25Yiw55qE6ZO+5o6l5Li6OiBcXFwiO1xcbiAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcbiAgICAgICAgY2FzZSBcXFwi6buY6K6kXFxcIjpcXG4gICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwicXEuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcImlxaXlpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCJ5b3VrdS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwibWd0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwiYmlsaWJpbGkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0Lm90aDtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgc3RyID0gaG9zdCA9PSBudWxsID8gbm9VcmwgOiBteVNldC5xanU7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgIH1cXG4gICAgaWYgKHBhcnNlTmFtZSkge1xcbiAgICAgICAgc3RyID0gcGFyc2VOYW1lO1xcbiAgICB9XFxuICAgIGxldCBteUNob2ljZSA9IHN0ci5zcGxpdCgnLCcpO1xcbiAgICBsZXQgbGVuID0gbXlDaG9pY2UubGVuZ3RoO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XFxuICAgICAgICBsZXQgbmFtZSA9IG15Q2hvaWNlW2ldO1xcbiAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBQYXJzZVNbbmFtZV0odmlwVXJsKTtcXG4gICAgICAgICAgICBpZiAoaSAhPSBsZW4gLSAxICYmICEvbTN1OHxtcDR8aHR0cC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhuYW1lICsgJ+ino+aekOWksei0pScpO1xcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdXJsID0gaGFuZGxlVXJsKHVybCk7XFxuICAgICAgICAgICAgaWYgKHVybCA9PSAnJyB8fCB1cmwgPT0gdmlwVXJsKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhuYW1lICsgJ+ino+aekOWksei0pScpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFBhcnNlU1tuYW1lXSA9PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKFBhcnNlU1tuYW1lXSArIHZpcFVybCwgaGFuZGxlVXJsLCBuYW1lKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDAsIDQpID09IFxcXCJodHRwXFxcIiB8fCBob3N0ID09IG51bGwgPyBuYW1lICsgdmlwVXJsIDogXFxcInRvYXN0Oi8vXFxcIiArIG5hbWUgKyBcXFwiIOS4jeaYr+ebtOmTvuS5n+S4jeaYr+WFjeWXhVxcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG59O1xcblxcbnZhciBwbGF5UGFyc2UgPSB7XFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCwgTGFiZWwpIHtcXG4gICAgICAgIHJldHVybiAkKGp1cmwpLmxhenlSdWxlKChMYWJlbCkgPT4ge1xcbiAgICAgICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtcXG4gICAgICAgICAgICB2YXIgZmEgPSBbJ2xldHYnLCAncHB0dicsICdxcScsICd5b3VrdScsICdxaXlpJywgJ2lxaXlpJywgJ21ndHYnLCAnYmlsaWJpbGknLCAnc29odScsICdtaWd1JywgJ20xOTA1JywgJ3ZpcCddO1xcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXG4gICAgICAgICAgICBldmFsKGh0bWwucmVwbGFjZSgvcGxheWVyXy4qPz17LywgJ3BkYXRhPXsnKSk7XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykpIHtcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZmEuaW5jbHVkZXMocGRhdGEuZnJvbSkgPT0gdHJ1ZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBkYXRhLnVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgTGFiZWwpXFxuICAgIH1cXG59O1xcblxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcbiAgICB0aGlzLmQgPSBbXTtcXG4gICAgcmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1xcbiAgICBSb3V0ZS5zZXRQYXJzZSgpO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6LCD55So6Lev55SxXCIsXCJwYXRoXCI6XCJSb3V0ZVwiLFwicnVsZVwiOlwianM6XFxucmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1xcbnN3aXRjaCAoZ2V0UGFyYW0oXFxcInR5cGVcXFwiKSkge1xcbiAgICBjYXNlIFxcXCLorr7nva5cXFwiOlxcbiAgICB0aGlzLmQgPSBbXTtcXG4gICAgICAgIFJvdXRlLnNldFBhcnNlKCk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwi57yW6L6RXFxcIjpcXG4gICAgdGhpcy5kID0gW107XFxuICAgcmVxdWlyZShmTGlua3MuanhJdFVybCk7XFxuICAganhJdGVtLmp4TGlzdCgpO1xcbiAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICQuZXhwb3J0cyA9IFJvdXRlO1xcbiAgICAgICAgYnJlYWs7XFxufVxcblwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIk15RmllbGThtLDigb9cIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcIixcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbnJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtcXG5zd2l0Y2ggKGdldFBhcmFtKFxcXCJ0eXBlXFxcIikpIHtcXG4gICAgY2FzZSBcXFwi6K6+572uXFxcIjpcXG4gICAgdGhpcy5kID0gW107XFxuICAgICAgICBSb3V0ZS5zZXRQYXJzZSgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIue8lui+kVxcXCI6XFxuICAgIHRoaXMuZCA9IFtdO1xcbiAgIHJlcXVpcmUoZkxpbmtzLmp4SXRVcmwpO1xcbiAgIGp4SXRlbS5qeExpc3QoKTtcXG4gICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAkLmV4cG9ydHMgPSBSb3V0ZTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5cIixcImdyb3VwXCI6XCLikaDgvoTwn42nXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJ2YXIga1QgPSBcXFwiaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L2JyYW5jaC9tL1xcXCI7XFxudmFyIGZMaW5rcyA9IHtcXG4gICAga1Q6IGtULFxcbiAgICBjakZyb206ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanMnLFxcbiAgICB4NUZyb206ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbCcsXFxuICAgIGNqVXJsOiBrVCArICd2L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcbiAgICB4NVVybDoga1QgKyAndi9QYXJzZV9Ebi5odG1sJyxcXG4gICAganhJdEZyb206IGtUICsgJ3YvanhJdGVtLmpzJyxcXG4gICAgckZyb206IGtUICsgJ3YvUm91dGUuanMnLFxcbiAgICBfYmpGcm9tOiBrVCArICd2L2p4SXRlbV9iai5qcycsXFxuICAgIF9ialVybDogJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvanhJdGVtX2JqLmpzJyxcXG4gICAganhJdFVybDogJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvanhJdGVtLmpzJyxcXG4gICAgcm91dGVVcmw6ICdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyxcXG4gICAgY2pjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLFxcbiAgICB4NWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyxcXG4gICAgY29uZmlnOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb24nLFxcbiAgICBwYXJzZXM6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcbn07XFxubGV0IGZSb3V0ZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2ZpbGVMaW5rc+G0sOKBvy50eHQnO1xcbmlmIChnZXRWYXIoJ2p4TmV3VicsICcwJykgIT09ICcwJyB8fCAhZmlsZUV4aXN0KGZSb3V0ZSkpIHtcXG4gICAgd3JpdGVGaWxlKGZSb3V0ZSwgJ3ZhciBmTGlua3M9JyArICQuc3RyaW5naWZ5KGZMaW5rcykpO1xcbn1cIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uaHRtbFxcXCIsXFxcInBhdGhcXFwiOlxcXCJQYXJzZV9Ebi5odG1sXFxcIixcXFwicnVsZVxcXCI6XFxcIjwhRE9DVFlQRSBodG1sPlxcXFxuPGh0bWw+XFxcXG48aGVhZD5cXFxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXFxcXFwidXRmLThcXFxcXFxcIj5cXFxcbiAgICA8bWV0YSBuYW1lPVxcXFxcXFwidmlld3BvcnRcXFxcXFxcIiBjb250ZW50PVxcXFxcXFwid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0xLHVzZXItc2NhbGFibGU9bm9cXFxcXFxcIiAvPlxcXFxuICAgIDxzY3JpcHQgc3JjPVxcXFxcXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS92dWVAMi41LjE2L2Rpc3QvdnVlLm1pbi5qc1xcXFxcXFwiPjwvc2NyaXB0PlxcXFxuICAgIDxzY3JpcHQgc3JjPVxcXFxcXFwiaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMS40Lm1pbi5qc1xcXFxcXFwiPjwvc2NyaXB0PlxcXFxuICAgIDwhLS1cXFxcbiAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHA6Ly9hcHBzLmJkaW1nLmNvbS9saWJzL2pxdWVyeS8yLjEuNC9qcXVlcnkubWluLmpzXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy92dWUvMS4wLjE0L3Z1ZS5qc1xcXFxcXFwiPjwvc2NyaXB0PlxcXFxuICAgIC0tPlxcXFxuICAgIDx0aXRsZT5QYXJzZV9EbjwvdGl0bGU+XFxcXG4gICAgPHN0eWxlIHR5cGU9dGV4dC9jc3M+XFxcXG4gICAgICAgIGh0bWwsIGJvZHkge1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBib2R5IHtcXFxcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxcXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDBweCAwIDBweDtcXFxcbiAgICAgICAgICAgIC8vYmFja2dyb3VuZDogI0Y5RjBEQTtcXFxcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAwO1xcXFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXFxcXFwiTWljcm9zb2Z0IFlhSGVpXFxcXFxcXCIsXFxcXFxcXCLlrovkvZNcXFxcXFxcIixcXFxcXFxcIlNlZ29lIFVJXFxcXFxcXCIsIFxcXFxcXFwiTHVjaWRhIEdyYW5kZVxcXFxcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAjZGl2MntcXFxcbiAgICAgICAgICAgbWFyZ2luLXRvcDozNXB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q6L6T5YWl5qGG54i25YWD57SgKi9cXFxcbiAgICAgICAgZGl2LmJveCB7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDUzcHg7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxcXG4gICAgICAgIGZvcm0ge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxcXG4gICAgICAgICAgICB3aWR0aDogOTIlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlucHV0LCBsYWJlbCwgLmxpZWIgYnV0dG9uIHtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXFxcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcXFxuICAgICAgICBpbnB1dCB7XFxcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsYWJlbCB7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrlsI/moYYqL1xcXFxuICAgICAgICAuYmFyIGxhYmVsIHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEMDZCNkM7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTUgNTU1cHggNTU1cHggNTU1O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxcXG4gICAgICAgICAgICBjb2xvcjogI0Y5RjBEQTtcXFxcbiAgICAgICAgICAgIHRvcDogMDtcXFxcbiAgICAgICAgICAgIGxlZnQ6IDNweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxcXG4gICAgICAgIC5iYXIgaW5wdXQge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y5RjBEQTtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICNEMDZCNkM7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxuICAgICAgICAubGllYiBidXR0b24ge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDI3cHg7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxuICAgICAgICAubGllYiBidXR0b257XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRDA2QjZDO1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICB0b3A6IDA7XFxcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5aS05YOPKi9cXFxcbiAgICAgICAgLnJvdW5kX2ljb257XFxcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcXFxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLmp4LXVsLCAuY2otdWwge1xcXFxuICAgICAgICAgICAgei1pbmRleDogOTk5O1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xcXFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXFxcbiAgICAgICAgICAgLy8gbGVmdDogMTAlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXFxcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLmp4LXVsIHtcXFxcbiAgICAgICAgICAgIHRvcDogMyU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLmNqLXVsIHtcXFxcbiAgICAgICAgICAgIHRvcDogMzAlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxpIHtcXFxcbiAgICAgICAgICAgIGhlaWdodDogMzVweDtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMWJmZGE7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XFxcXG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMzVweDtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXFxcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxuICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGkge1xcXFxuICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsaTpob3ZlciB7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMTMxLCAxMjAsIDAuOSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGlbY2hlY2s9XFxcXFxcXCJ0cnVlXFxcXFxcXCJdIHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTM5LCAwLCAwLCAwLjkpO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICA8L3N0eWxlPlxcXFxuPC9oZWFkPlxcXFxuXFxcXG48Ym9keT5cXFxcbiAgICA8ZGl2IGNsYXNzPVxcXFxcXFwiZnVuZ1xcXFxcXFwiPlxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OmxlZnQ7XFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8YnV0dG9uICBzdHlsZT1cXFxcXFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogI2M1NDY0YTt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJjYW5jZWwoKTtcXFxcXFxcIj7lhbMg6ZetPC9idXR0b24+XFxcXG4gICAgICAgIDwvYT5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodFxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cXFxcXFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA2ODAwNjt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXFxcXFwib25jbGljaz1cXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXFxcXFwiPuS/nSDlrZg8L2J1dHRvbj4gXFxcXG4gICAgICAgIDwvYT5cXFxcbiAgICA8L2Rpdj5cXFxcbiAgICA8YnI+XFxcXG4gICAgPGRpdiBpZD1cXFxcXFxcImRpdjJcXFxcXFxcIj48L2Rpdj5cXFxcbiAgICA8ZGl2PlxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDo1cHg7XFxcXFxcXCIgb25jbGljaz1cXFxcXFxcIm9wZW5EblBhZ2UoKVxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGltZyBzcmM9XFxcXFxcXCJodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZ1xcXFxcXFwiIGNsYXNzPVxcXFxcXFwicm91bmRfaWNvblxcXFxcXFwiICBhbHQ9XFxcXFxcXCJcXFxcXFxcIj5cXFxcbiAgICAgICAgPC9hPlxcXFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFxcXFxcImxpbmUtaGVpZ2h0OjYwcHg7Zm9udC1zaXplOjE4cHg7Y29sb3I6IGdyZXk7XFxcXFxcXCI+Jm5ic3A7Jm5ic3A75patJm5ic3A75b+1PC9zcGFuPlxcXFxuICAgICAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6NXB4O1xcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcXFxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICMwNUJGQzU7d2lkdGg6IDE4NXB4O2hlaWdodDo0MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcXFxcXCIgb25jbGljaz1cXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXFxcXFwiPuS/neWtmOiuvue9ruW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcXFxuICAgICAgICA8L2E+XFxcXG4gICAgPC9kaXY+XFxcXG4gICAgPGRpdiBjbGFzcz1cXFxcXFxcInpqLWRpdlxcXFxcXFwiPlxcXFxuICAgICAgICA8dWwgY2xhc3M9XFxcXFxcXCJqeC11bFxcXFxcXFwiIHN0eWxlPVxcXFxcXFwiaGVpZ2h0OjQ0NHB4O292ZXJmbG93LXk6YXV0bztcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFxcXFxcIm15Q2hvaWNlXFxcXFxcXCIgc3R5bGU9XFxcXFxcXCJ6LWluZGV4Ojk5OTk7cG9zaXRpb246IGZpeGVkO3dpZHRoOjc2LjUlO2NvbG9yOnJlZDtcXFxcXFxcIj48L2xpPlxcXFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXFxcXFwidXNlbGVzc1xcXFxcXFwiPjwvbGk+XFxcXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcXFxcXCJ4bExpc3RcXFxcXFxcIiB2LWZvcj1cXFxcXFxcIml0ZW0gaW4ganhEYXRhXFxcXFxcXCI+e3tpdGVtfX08L2xpPlxcXFxuICAgICAgICA8L3VsPlxcXFxuICAgICAgICA8dWwgY2xhc3M9XFxcXFxcXCJjai11bFxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGxpIHN0eWxlPVxcXFxcXFwiYmFja2dyb3VuZDpncmV5O1xcXFxcXFwiPuivt+mAieaLqeaPkuS7tjwvbGk+XFxcXG4gICAgICAgICAgICA8bGkgdi1mb3I9XFxcXFxcXCJpdGVtIGluIGNqRGF0YVxcXFxcXFwiPnt7aXRlbX19PC9saT5cXFxcbiAgICAgICAgPC91bD5cXFxcbiAgICA8L2Rpdj5cXFxcbjwvYm9keT5cXFxcbjxzY3JpcHQ+XFxcXG4gICAgdmFyIHNldHRpbmdzID0ge1xcXFxuICAgICAgICBxeTogJ3l1bjE3MTcnLFxcXFxuICAgICAgICB5azogJ3l1bjE3MTcnLFxcXFxuICAgICAgICB0eDogJ3l1bjE3MTcnLFxcXFxuICAgICAgICBtZzogJ3l1bjE3MTcnLFxcXFxuICAgICAgICBibDogJ3l1bjE3MTcnLFxcXFxuICAgICAgICBvdGg6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICAgICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcXFxuICAgIH07XFxcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmdldEludGVybmFsSnMoKSk7XFxcXG4gICAgXFxcXG4gICAgdmFyIG9sZFJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiO1xcXFxuICAgIHZhciBteVNldCA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2gob2xkUm91dGUpO1xcXFxuICAgIFxcXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcIjtcXFxcbiAgICB2YXIgbmV3Q29uZmlnID0gZnlfYnJpZGdlX2FwcC5mZXRjaChuZXdSb3V0ZSk7XFxcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxcXG4gICAgaWYobmV3Q29uZmlnICE9IFxcXFxcXFwiXFxcXFxcXCIpe1xcXFxuICAgICAgICBldmFsKFxcXFxcXFwibmV3Q29uZmlnID1cXFxcXFxcIiArIG5ld0NvbmZpZyArIFxcXFxcXFwiO1xcXFxcXFwiKTtcXFxcbiAgICAgICAgc2V0dGluZ3MgPSBuZXdDb25maWcuc2V0dGluZ3M7XFxcXG4gICAgICAgIHZhciB5Y1RpdGxlID0gWydkZWZhdWx0UGFyc2UnLCAnbWFvc3MnLCAnQ2l0eUlQJywgJ2NhY2hlTTN1OCcsICdwY1VBJywgJ3BhcnNlTGMnLCAnZ3BhcnNlJywgJ25wYXJzZSddO1xcXFxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbmV3Q29uZmlnLnRpdGxlLmxlbmd0aDsgaSsrKXtcXFxcbiAgICAgICAgICAgIHZhciBUaXRsZXMgPSBuZXdDb25maWcudGl0bGVbaV07XFxcXG4gICAgICAgICAgICBpZih5Y1RpdGxlLmluY2x1ZGVzKFRpdGxlcykgPT0gZmFsc2Upe1xcXFxuICAgICAgICAgICAgICAgIG15U2VsZWN0LnB1c2goVGl0bGVzKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICB2YXIgc2ZSZWZyZXNoID0gc2V0dGluZ3MuY2o7XFxcXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXFxcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXFxcbiAgICB9XFxcXG4gICAgXFxcXG4gICAgaWYobXlTZXQgPT0gJycpe1xcXFxuICAgICAgICBEaWQoXFxcXFxcXCJkaXYyXFxcXFxcXCIpLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsJ1xcXFxcXFxcXFxcXG48aDQ+5o+Q56S677yaPGJyPuKRoOazqOaEj+aPkuS7tumAiemhue+8jOayoeacieaJi+WKqOWvvOWFpeaPkuS7tueahOivneS4jeeUqOWKqOWug+OAguWmguiuvue9ruS4jeW9k+S8muWvvOiHtOinhOWImeaXoOazleS9v+eUqO+8jDxicj7op6PlhrPlip7ms5XvvJrop4bnlYzmiZPlvIDmm7TlpJrorr7nva7ihpLmlofku7bnrqHnkIbihpLngrljYWNoZeKGkumVv+aMiU15UGFyc2VTZXQuanNvbuWIoOmZpOaOie+8mzxicj7ikaHlhajlsYDorr7nva7lpoLmnpzpgInmi6nkuobpnZ7pu5jorqTpgqPkuYjlhajpg6jnmoTop6PmnpDkvJrkvb/nlKjov5nkuIDorr7nva7vvIzkuI3mg7Pov5nmoLfnmoTor53or7floavlhaXpu5jorqTvvJs8YnI+4pGi57u/6Imy5L+d5a2Y5oyJ6ZKu5LuF5LuF5L+d5a2Y6YWN572u5LiN5Lya5YWz6Zet6K6+572u6aG16Z2i77yM6YWN572u5ZCO5oOz5L+d5a2Y5bm25YWz6Zet6K6+572u6aG16Z2i55qE6K+d6K+354K56JOd6Imy5oyJ6ZKu77ybPGJyPuKRo+mYheivu+WujOaPkOekuueCueWFs+mXreWKoOi9veWujOaVtOiuvue9rumhtemdou+8jOWmguWHuumXrumimOaXoOazleiHquihjOino+WGs+eCueWbvueJh+i/m+WFpeiuuuWdm+WQkeaIkeWPjemmiOOAgjxicj48L2g0PicpO1xcXFxuICAgIH1cXFxcbiAgICBcXFxcbiAgICB2YXIgYm94RGF0YSA9IFtcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5aWHIOWlh1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwicXlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xeSxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6YW3IOmFt1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwieWtcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy55ayxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6IW+IOiFvlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwidHhcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy50eCxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5p6cIOaenFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwibWdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5tZyxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5ZOpIOWTqVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwiYmxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5ibCxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5YW2IOS7llxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwib3RoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3Mub3RoLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLlhagg5bGAXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJxanVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xanUsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaPkiDku7ZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcImNqXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuY2osXFxcXG4gICAgICAgIH1cXFxcbiAgICBdO1xcXFxuXFxcXG4gICAgdmFyIGlucHV0Qm94ID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxcXG4gICAgICAgIGxldCBiID0gYm94RGF0YVtpXTtcXFxcbiAgICAgICAgaW5wdXRCb3ggKz0gJzxkaXYgY2xhc3M9XFxcXFxcXCJib3ggYmFyXFxcXFxcXCI+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDxmb3JtPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcXFxcXCJzdWJtaXRcXFxcXFxcIj4nICsgYi50aXRsZSArICc8L2xhYmVsPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcXFxcXCJ0ZXh0XFxcXFxcXCIgcGxhY2Vob2xkZXI9XFxcXFxcXCLovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi5cXFxcXFxcIiB2YWx1ZT1cXFxcXFxcIicgKyBiLnZhbHVlICsgJ1xcXFxcXFwiIGlkPVxcXFxcXFwiJyArIGIuaWQgKyAnXFxcXFxcXCI+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDwvZm9ybT5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFxcXFxcImxpZWJcXFxcXFxcIj5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XFxcXFxcXCInICsgYi5pZCArICdTZWxlY3RcXFxcXFxcIj7imLA8L2J1dHRvbj5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXFxcXFxcXFxcbiAgICAgICAgPC9kaXY+JztcXFxcbiAgICB9XFxcXG4gICAgRGlkKFxcXFxcXFwiZGl2MlxcXFxcXFwiKS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgaW5wdXRCb3gpO1xcXFxuICAgIERpZChcXFxcXFxcImNqXFxcXFxcXCIpLnBsYWNlaG9sZGVyID0gXFxcXFxcXCLovpPlhaXmj5Lku7blnLDlnYAuLi4uLi5cXFxcXFxcIjtcXFxcbiAgICBEaWQoXFxcXFxcXCJxanVcXFxcXFxcIikucGxhY2Vob2xkZXIgPSBcXFxcXFxcIuatpOmhueW7uuiurueVmeepuuaIluiAheWhq+m7mOiupOS4pOS4quWtl1xcXFxcXFwiO1xcXFxuICAgIFxcXFxuICAgIG5ldyBWdWUoe1xcXFxuICAgICAgICBlbDogXFxcXFxcXCIuemotZGl2XFxcXFxcXCIsXFxcXG4gICAgICAgIGRhdGE6IHtcXFxcbiAgICAgICAgICAgIGp4RGF0YTogbXlTZWxlY3QsXFxcXG4gICAgICAgICAgICBjakRhdGE6IFtcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFxcXFxcIiwgXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qc1xcXFxcXFwiLCBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanNcXFxcXFxcIl1cXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHZhciBsZW4gPSAkKCcuangtdWwnKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XFxcXG4gICAgICAgIHZhciBsZW4yID0gJCgnLmNqLXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcXFxuICAgICAgICAkKCcubGllYiBidXR0b24nKS5jbGljayhmdW5jdGlvbihlKSB7XFxcXG4gICAgICAgICAgICBpZigkKCcubGllYiBidXR0b24nKS50ZXh0KCkuaW5jbHVkZXMoJ+KUgScpKXtcXFxcbiAgICAgICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS5jc3MoJ2JhY2tncm91bmQnLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnRleHQoJ+KUgScpO1xcXFxuICAgICAgICAgICAgICAgICQodGhpcykuY3NzKCdiYWNrZ3JvdW5kJywgJ3JlZCcpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgJCgnbGknKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgdmFyIGlucHV0aWQgPSBcXFxcXFxcIiNcXFxcXFxcIiArIHRoaXMuaWQuc3BsaXQoXFxcXFxcXCJTZWxlY3RcXFxcXFxcIilbMF07XFxcXG4gICAgICAgICAgICB2YXIgYXJyID0gJChpbnB1dGlkKS52YWwoKS5zcGxpdCgnLCcpO1xcXFxuICAgICAgICAgICAgYXJyID0gYXJyWzBdID09ICcnID8gW10gOiBhcnI7XFxcXG4gICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXRpZCAhPT0gJyNjaicgJiYgJCgnLmNqLXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJykge1xcXFxuICAgICAgICAgICAgICAgICQoJy5qeC11bCcpLnNsaWRlVG9nZ2xlKDMwMCk7XFxcXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBqeExpc3QgPSAkKCcuangtdWwgbGk6bm90KC5teUNob2ljZSknKS5lcShpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5pbmNsdWRlcyhqeExpc3QudGV4dCgpKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAganhMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBqeExpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdjaGVjaycpICE9PSBcXFxcXFxcInRydWVcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci51bnNoaWZ0KCQodGhpcykudGV4dCgpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXJyLmxlbmd0aDsgYSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJbYV0gPT0gJCh0aGlzKS50ZXh0KCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoYSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZigkKCcuangtdWwnKS5jc3MoJ2Rpc3BsYXknKT09J25vbmUnKXtcXFxcbiAgICAgICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVRvZ2dsZSgyMDApO1xcXFxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW4yOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNqTGlzdCA9ICQoJy5jai11bCBsaScpLmVxKGkpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoJChpbnB1dGlkKS52YWwoKSA9PSBjakxpc3QudGV4dCgpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpc3QuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGNqTGlzdC51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKCQodGhpcykudGV4dCgpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCkuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAkKGRvY3VtZW50KS5ub3QoJCgnLnhsTGlzdCcpKS5jbGljayhmdW5jdGlvbihlKSB7XFxcXG4gICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVVwKCk7XFxcXG4gICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVVwKCk7XFxcXG4gICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS50ZXh0KCfimLAnKTtcXFxcbiAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNzcygnYmFja2dyb3VuZCcsICcnKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgICQoZnVuY3Rpb24oKXtcXFxcbiAgICAgICAgICAgICQoJ2xhYmVsJykubW91c2V1cChmdW5jdGlvbigpe1xcXFxuICAgICAgICAgICAgICAgIGxldCBpbnB1dGlkID0gJyMnICsgJCh0aGlzKS5uZXh0KCkuYXR0cignaWQnKTtcXFxcbiAgICAgICAgICAgICAgICBvbmVPckRibChpbnB1dGlkKTtcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgdmFyIGNvdW50ID0gMDtcXFxcbiAgICAgICAgICAgIHZhciB0aW1lcjtcXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uZU9yRGJsKGlucHV0aWQpe1xcXFxuICAgICAgICAgICAgICAgIGNvdW50Kys7XFxcXG4gICAgICAgICAgICAgICAgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe1xcXFxuICAgICAgICAgICAgICAgICAgICBpZihjb3VudCA9PSAxKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSAkKGlucHV0aWQpLnZhbCgpLnNwbGl0KCcsJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKDAsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbCgnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDtcXFxcbiAgICAgICAgICAgICAgICB9LDI2MClcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KTtcXFxcbiAgICBcXFxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24peyAgXFxcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uOyAgXFxcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ICBcXFxcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7ICBcXFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXFxcXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcXFxcXCI7ICBcXFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTsgIFxcXFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAgXFxcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTsgIFxcXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nOyAgXFxcXG4gICAgICAgICAgICBtLnN0eWxlLm9wYWNpdHkgPSAnMCc7ICBcXFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApOyAgXFxcXG4gICAgICAgIH0sIGR1cmF0aW9uKTsgIFxcXFxuICAgIH0gIFxcXFxuXFxcXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnrqHnkIbop6PmnpBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGZpbmRSdWxlOiBcXFxcXFxcImpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L2p4SXRlbS5qcycpO2p4SXRlbS5qeExpc3QoKTtzZXRSZXN1bHQoZClcXFxcXFxcIlxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcXFxuICAgICAgICBpZihteVNldD09Jycpe1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcXFxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxcXG4gICAgICAgICAgICBsZXQgaWQgPSBib3hEYXRhW2ldLmlkO1xcXFxuICAgICAgICAgICAgc2V0dGluZ3NbaWRdID0gRGlkKGlkKS52YWx1ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZihzZXR0aW5ncy5xanUgPT0gJycpe1xcXFxuICAgICAgICAgICAgc2V0dGluZ3MucWp1ID0gJ+m7mOiupCc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKG15U2VsZWN0WzBdICE9IHVuZGVmaW5lZCkge1xcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGJjQ29uZmlnPScgKyBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKSk7XFxcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJjQ29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShiY0NvbmZpZykpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxcXG4gICAgICAgICAgICBcXFxcbiAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXFxcbiAgICAgICAgaWYodGl0bGU9PVxcXFxcXFwi5YWzXFxcXFxcXCIpe1xcXFxuICAgICAgICAgICAgaWYoc2ZSZWZyZXNoICE9IERpZChcXFxcXFxcImNqXFxcXFxcXCIpLnZhbHVlKXtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuPC9zY3JpcHQ+ICAgXFxcXG48L2h0bWw+XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcbnZhciB2ZXJzaW9uID0gXFxcXFxcXCIzLjUuMjVcXFxcXFxcIjtcXFxcblxcXFxudmFyIHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xcXFxudmFyIE15UGFyc2VTID0ge307XFxcXG52YXIgbXlTZXQgPSB7fTtcXFxcbmlmIChmaWxlRXhpc3QocGFyc2VSb3V0ZSkpIHtcXFxcbiAgICBldmFsKCd2YXIgcGFyc2VGaWxlID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcXFxuICAgIG15U2V0ID0gcGFyc2VGaWxlLnNldHRpbmdzO1xcXFxufVxcXFxudmFyIHBhcnNlVGl0bGUgPSBbXFxcXG4gICAgXFxcXFxcXCLwn6WaXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5dW4xNzE3XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJQYW5HdVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiRnVYaW5nXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJodHRwczovL2p4eC5zbXlzOC5jbi9pbmRleC5waHA/dXJsPVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaHR0cHM6Ly9va2p4LmNjLz91cmw9XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD1cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vc2IuNWdzZW8ubmV0Lz91cmw9XFxcXFxcXCJcXFxcbl07XFxcXG5cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcblxcXFxuLy/mjqXlj6Porr7nva4uXFxcXG5cXFxcbnZhciBzZXRVcmwgPSBcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I0BydWxlPWpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCI7XFxcXG52YXIgc2V0X3N3aXRjaCA9IHNldFVybDtcXFxcbnZhciBsYXp5ID0gYHJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtheXRtUGFyc2UoaW5wdXQpYDtcXFxcblxcXFxuLy92YXIgcGFyd2l4ID0gYHZhciB5dXJsPSdodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuLz91cmw9JztSZWZlcmVyJzogJ2h0dHBzOi8vd3d3Lm1heWl4aW9uZ2RpLmNuL3lzP2lkPSc7J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vYXBpLnBocCcsICdSZWZlcmVyJzonaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbic7XFxcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxcXG5cXFxcbi8v77yN77yN77yN5aSHIOeUqO+8je+8je+8jVxcXFxuLypcXFxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxcXG4gKiDmsZ/muZY6IDU1NeeUteW9sSBodHRwczovL3d3dy41NTVkeTIuY29tL3Bob25lLmh0bWwg772cIDE355yLIGh0dHA6Ly8xN2thbnl5LmNuLyBodHRwOi8vamhqaWV4aS4zMHZyLmNuLz91cmw9IO+9nCBodHRwOi8vYXBpLm1haXppbWFsbC5jb20vaW5kZXgucGhwP3VybD1cXFxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcXFxuICog5Lq65Lq66L+3OiBodHRwczovL3ZpcC5zdXNvdS50di9wbGF5ZXIvP3VybD0g772cIGh0dHBzOi8vd3d3Lm1vbWRtLmNjL1xcXFxuICogXFxcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXFxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcXFxuICogaHR0cHM6Ly8yLjY2bW92aWUudG9wL3BsYXllci8/dXJsPVxcXFxuICogXFxcXG4gKi9cXFxcblxcXFxuXFxcXG52YXIgdG9vbHMgPSB7XFxcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXG4gICAgfSxcXFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXFxcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICB9LFxcXFxuICAgIC8vYXNjaWlcXFxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxuICAgIH0sXFxcXG4gICAgLy/lh6/mkpJcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG52YXIgUGFyc2VTID0ge307XFxcXG52YXIgb3JpZ2luYWxQYXJzZVMgPSB7XFxcXG4gICAgLy91cGRhdGVEYXRlOiB1cGRhdGVEYXRlLFxcXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxcXG4gICAgcGNVQTogJ1VzZXItQWdlbnRATW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMFxcXFxcXFxc77ybXFxcXFxcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBtM3U4ID0gZmV0Y2godlVybCwge30pO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvcy5tM3U4JywgbTN1OCk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgIHJldHVybiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvdmlkZW9zLm0zdTgjJztcXFxcbiAgICB9LFxcXFxuICAgIGRlZmF1bHRQYXJzZTogZnVuY3Rpb24odXJsKSB7XFxcXG4gICAgICAgIHJldHVybiB1cmw7XFxcXG4gICAgfSxcXFxcbiAgICBtYW9zczogZnVuY3Rpb24oanh1cmwsIHJlZiwga2V5KSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgZ2V0VmlkZW9JbmZvID0gZnVuY3Rpb24odGV4dCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxcXG4gICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgaWYgKHJlZikge1xcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCwge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCcmYnR3YWY9JykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArICcmYnR3YWYnICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIGl2ID0gaHRtbC5zcGxpdCgnYnRfdG9rZW4gPSBcXFxcXFxcIicpWzFdLnNwbGl0KCdcXFxcXFxcIicpWzBdO1xcXFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC92YXIgY29uZmlnID0ge1tcXFxcXFxcXHNcXFxcXFxcXFNdKj99LylbMF0gKyAnJyk7XFxcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnVybC5zbGljZSgwLCA0KSAhPSAnaHR0cCcpIHtcXFxcbiAgICAgICAgICAgICAgICBjb25maWcudXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHRvb2xzLkFFUyhjb25maWcudXJsLCBcXFxcXFxcImR2eVlSUWxuUFJDTWRRU2VcXFxcXFxcIiwgaXYpKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSBqeHVybC5zcGxpdCgnP3VybD0nKVswXSArIFxcXFxcXFwiYXBpLnBocFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlaWQgPSB0b29scy5jYWVzYXJDaXBoZXIoYjY0aWQsIC0xKTtcXFxcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBqeHVybFxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgcGFyc2VpZFxcXFxuICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxcXG4gICAgICAgIC8qdmFyIHJlZiA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS8nO1xcXFxuICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvYXBpLnBocCc7XFxcXG4gICAgICAgICovXFxcXG4gICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXFxcbiAgICAgICAgLy92YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2luZGV4LnBocD91cmw9JyArIHRhaWxVcmw7XFxcXG4gICAgICAgIC8vdmFyIGFwaSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvYXBpLnBocCc7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFwiaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vcGFuZ3UvP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIGFwaSA9IFxcXFxcXFwiaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L3Bhbmd1MjAyMS9hcGkucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChkYXRhKSB7XFxcXG4gICAgICAgICAgICByZWYgPSBkYXRhWzBdO1xcXFxuICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcXFxuICAgICAgICAgICAgYXBpID0gZGF0YVsyXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcXFxuICAgICAgICB2YXIganNvbiA9IHJlcXVlc3QoYXBpLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IHBhcnNlXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgYm9keTogXFxcXFxcXCJ1cmw9XFxcXFxcXCIgKyB2aXBVcmwgKyBcXFxcXFxcIiZyZWZlcmVyPVxcXFxcXFwiICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArIFxcXFxcXFwiJnJlZj0xJnRpbWU9XFxcXFxcXCIgKyBUaW1lICsgXFxcXFxcXCImdHlwZT0mb3RoZXI9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUodmlwVXJsKSArIFxcXFxcXFwiJmlvcz0wXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICB2YXIgdXJsID0ganNvblswXSA9PSBcXFxcXFxcIntcXFxcXFxcIiA/IEpTT04ucGFyc2UoanNvbikudXJsIDogXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICB9LFxcXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcXFxuICAgICAgICB2YXIgcmVmID0gXFxcXFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFxcXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzA4MjgvP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIGFwaSA9IFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMTAwNC8uLmluZGV4Li5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgcmV0dXJuIGlzeWsgPT0gLTEgPyB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pIDogdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYgKyAnLHZpcDonLCBwYXJzZSArICcsdmlwOicsIGFwaV0pO1xcXFxuICAgIH0sXFxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcXFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFxcXFxcPy4qLywnJyk7XFxcXG4gICAgICAgICAgICAvL31cXFxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgXFxcXFxcXCLwn6WaXFxcXFxcXCI6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICBsZXQg5L2c6ICFX+inhueVjOefpeWQjeWkp+S9rDtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goXFxcXFxcXCJodHRwOi8vcTE2LjIyd2ViLm9yZy9hZXMuanNcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgdmFyIHVybCA9IHBkZmgoZmV0Y2goXFxcXFxcXCJodHRwOi8vcTE2LjIyd2ViLm9yZy9hcGkucGhwXFxcXFxcXCIpLCBcXFxcXFxcImJvZHkmJnNjcmlwdCwxJiZIdG1sXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgZXZhbCh1cmwucmVwbGFjZShcXFxcXFxcImRvY3VtZW50LlxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwibG9jYXRpb24uXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgIHZhciBwbGF5ID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHA6Ly9xMTYuMjJ3ZWIub3JnL2FwaS5waHBcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llLnNwbGl0KFxcXFxcXFwiO1xcXFxcXFwiKVswXVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgYm9keTogXFxcXFxcXCJ1cmw9XFxcXFxcXCIgKyBpbnB1dCxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KSkudXJsO1xcXFxuICAgICAgICAgICAgaWYgKHBsYXkuc3RhcnRzV2l0aChcXFxcXFxcIi9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJodHRwczpcXFxcXFxcIiArIHBsYXk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBwbGF5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxufTtcXFxcblxcXFxuT2JqZWN0LmFzc2lnbihQYXJzZVMsIG9yaWdpbmFsUGFyc2VTLCBNeVBhcnNlUyk7XFxcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcXFxuXFxcXG5cXFxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsIHBhcnNlTmFtZSkge1xcXFxuICAgIHRoaXMucmVxdWVzdCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gcGFyYW0xID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xO1xcXFxuICAgICAgICBwYXJhbTEudGltZW91dCA9IDI1MDA7XFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxcXG4gICAgICAgIHZhciByZXRTdHIgPSBtZXRob2RfcmVxdWVzdC5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpO1xcXFxuICAgICAgICByZXR1cm4gcmV0U3RyID09IG51bGwgPyByZXRTdHIgOiByZXRTdHIgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIH07XFxcXG4gICAgdGhpcy5mZXRjaCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gcGFyYW0xID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xO1xcXFxuICAgICAgICBwYXJhbTEuaGVhZGVycyA9IHBhcmFtMS5oZWFkZXJzID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xLmhlYWRlcnM7XFxcXG4gICAgICAgIHBhcmFtMS5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBQQ19VQTtcXFxcbiAgICAgICAgcGFyYW0xLnRpbWVvdXQgPSAyNTAwO1xcXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFO1xcXFxuICAgICAgICB2YXIgcmV0U3RyID0gbWV0aG9kX2ZldGNoLmludm9rZShqYXZhQ29udGV4dCwgcGFyYW0wLCBwYXJhbTEsIHBhcmFtMik7XFxcXG4gICAgICAgIHJldHVybiByZXRTdHIgPT0gbnVsbCA/IHJldFN0ciA6IHJldFN0ciArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgfTtcXFxcbiAgICB2YXIgaGFuZGxlVXJsID0gZnVuY3Rpb24odXJsKSB7XFxcXG4gICAgICAgIGlmICh1cmxbMF0gPT0gJy8nKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz1odHRwJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybC5pbmRleE9mKCcmdXJsPScpID4gLTEgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKSA9PSAnbWd0di5jb20nKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwuaW5kZXhPZignVXNlci1BZ2VudCcpID09IC0xID8gdXJsICsgJzt7VXNlci1BZ2VudEBhcHB9JyA6IHVybDtcXFxcbiAgICAgICAgfSBlbHNlIGlmICh1cmwuaW5kZXhPZignLmZsdicpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiB1cmw7XFxcXG4gICAgfTtcXFxcbiAgICB2YXIgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXFxcXFwuKC4qPylcXFxcXFxcXC8vKTtcXFxcbiAgICBob3N0ID0gaG9zdCA9PSBudWxsID8gbnVsbCA6IGhvc3RbMV07XFxcXG4gICAgdmFyIG5vVXJsID0gXFxcXFxcXCJ0b2FzdDovL+aOpeaUtuWIsOeahOmTvuaOpeS4ujogXFxcXFxcXCI7XFxcXG4gICAgc3dpdGNoIChteVNldC5xanUpIHtcXFxcbiAgICAgICAgY2FzZSBcXFxcXFxcIum7mOiupFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInFxLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImlxaXlpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInlvdWt1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIm1ndHYuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiYmlsaWJpbGkuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0Lm90aDtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgIHN0ciA9IGhvc3QgPT0gbnVsbCA/IG5vVXJsIDogbXlTZXQucWp1O1xcXFxuICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgfVxcXFxuICAgIGlmIChwYXJzZU5hbWUpIHtcXFxcbiAgICAgICAgc3RyID0gcGFyc2VOYW1lO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgbXlDaG9pY2UgPSBzdHIuc3BsaXQoJywnKTtcXFxcbiAgICBsZXQgbGVuID0gbXlDaG9pY2UubGVuZ3RoO1xcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IG5hbWUgPSBteUNob2ljZVtpXTtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ2Z1bmN0aW9uJykge1xcXFxuICAgICAgICAgICAgbGV0IHVybCA9IFBhcnNlU1tuYW1lXSh2aXBVcmwpO1xcXFxuICAgICAgICAgICAgaWYgKGkgIT0gbGVuIC0gMSAmJiAhL20zdTh8bXA0fGh0dHAvLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhuYW1lICsgJ+ino+aekOWksei0pScpO1xcXFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdXJsID0gaGFuZGxlVXJsKHVybCk7XFxcXG4gICAgICAgICAgICBpZiAodXJsID09ICcnIHx8IHVybCA9PSB2aXBVcmwpIHtcXFxcbiAgICAgICAgICAgICAgICBsb2cobmFtZSArICfop6PmnpDlpLHotKUnKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW25hbWVdID09ICdzdHJpbmcnKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZShQYXJzZVNbbmFtZV0gKyB2aXBVcmwsIGhhbmRsZVVybCwgbmFtZSk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHIoMCwgNCkgPT0gXFxcXFxcXCJodHRwXFxcXFxcXCIgfHwgaG9zdCA9PSBudWxsID8gbmFtZSArIHZpcFVybCA6IFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIiDkuI3mmK/nm7Tpk77kuZ/kuI3mmK/lhY3ll4VcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbnZhciBwbGF5UGFyc2UgPSB7XFxcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcXFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoTGFiZWwpID0+IHtcXFxcbiAgICAgICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtcXFxcbiAgICAgICAgICAgIHZhciBmYSA9IFsnbGV0dicsICdwcHR2JywgJ3FxJywgJ3lvdWt1JywgJ3FpeWknLCAnaXFpeWknLCAnbWd0dicsICdiaWxpYmlsaScsICdzb2h1JywgJ21pZ3UnLCAnbTE5MDUnLCAndmlwJ107XFxcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxcXG4gICAgICAgICAgICBldmFsKGh0bWwucmVwbGFjZSgvcGxheWVyXy4qPz17LywgJ3BkYXRhPXsnKSk7XFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSkge1xcXFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IGJhc2U2NERlY29kZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gdW5lc2NhcGUocGRhdGEudXJsKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChmYS5pbmNsdWRlcyhwZGF0YS5mcm9tKSA9PSB0cnVlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgTGFiZWwpXFxcXG4gICAgfVxcXFxufTtcXFxcblxcXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxcXG4gICAgdGhpcy5kID0gW107XFxcXG4gICAgcmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1xcXFxuICAgIFJvdXRlLnNldFBhcnNlKCk7XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxufVxcXFxuXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLosIPnlKjot6/nlLFcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUm91dGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5yZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7XFxcXG5zd2l0Y2ggKGdldFBhcmFtKFxcXFxcXFwidHlwZVxcXFxcXFwiKSkge1xcXFxuICAgIGNhc2UgXFxcXFxcXCLorr7nva5cXFxcXFxcIjpcXFxcbiAgICB0aGlzLmQgPSBbXTtcXFxcbiAgICAgICAgUm91dGUuc2V0UGFyc2UoKTtcXFxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwi57yW6L6RXFxcXFxcXCI6XFxcXG4gICAgdGhpcy5kID0gW107XFxcXG4gICByZXF1aXJlKGZMaW5rcy5qeEl0VXJsKTtcXFxcbiAgIGp4SXRlbS5qeExpc3QoKTtcXFxcbiAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICQuZXhwb3J0cyA9IFJvdXRlO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcblxcXCJ9XVwifSIsInRpdGxlIjoi57yW6L6R6Kej5p6Q5o6l5Y+jIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement