Advertisement
xiaomianao666

邀您一起看:断插接口设置

Feb 6th, 2022
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥断插接口设置@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLXZ1ZS5odG1sXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5odG1sXCIsXCJydWxlXCI6XCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG48aGVhZD5cXG4gICAgPG1ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiPlxcbiAgICA8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0xLHVzZXItc2NhbGFibGU9bm9cXFwiIC8+XFxuICAgIDx0aXRsZT5QYXJzZV9Ebl92dWU8L3RpdGxlPlxcbiAgICA8c2NyaXB0PlxcbiAgICAgICAgY29uc3QgdnVlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzJztcXG4gICAgICAgIGlmKHR5cGVvZihmYmEpPT0ndW5kZWZpbmVkJ3x8IWZiYSl7XFxuICAgICAgICAgICAgdmFyIGZiYSA9IGZ5X2JyaWRnZV9hcHA7XFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXF1ZXN0KT09J3VuZGVmaW5lZCd8fCFyZXF1ZXN0KXtcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZ2V0SW50ZXJuYWxKcygpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZyh2dWVQYXRoKTtcXG4gICAgICAgICAgICBpZighcmVxdWVzdCh2dWVQYXRoKSl7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUodnVlUGF0aCxyZXF1ZXN0KCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0xODIzJykpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5mZXRjaCh2dWVQYXRoKSk7XFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgIGZiYS5sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZygn5Yqg6L29dnVl57uE5Lu25a6M5q+VJyk7XFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICA8L3NjcmlwdD5cXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly91bnBrZy5jb20vdnVlQG5leHRcXFwiPjwvc2NyaXB0Pi0tPlxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qc1xcXCI+PC9zY3JpcHQ+LS0+XFxuICAgIDxzdHlsZT5cXG4gICAgICAgIGJvZHkge1xcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxuICAgICAgICAgICAgLyogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGMERBOyovXFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXCJNaWNyb3NvZnQgWWFIZWlcXFwiLFxcXCLlrovkvZNcXFwiLFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJMdWNpZGEgR3JhbmRlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxuICAgICAgICB9XFxuICAgICAgICAjYXBwe1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAjdGlwc3tcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206NXB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLmZ1bmd7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXJcXG4gICAgICAgIH1cXG4gICAgICAgIGRpdi5ib3gge1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTFweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQzcHg7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxuICAgICAgICBmb3JtIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIHNlbGVjdCB7XFxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWtl+S9k+S9jee9riovXFxuICAgICAgICBpbnB1dCB7XFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXG4gICAgICAgICAgICBoZWlnaHQ6IDMycHg7XFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5bCP5qGGKi9cXG4gICAgICAgIC5iYXIgbGFiZWwge1xcbiAgICAgICAgICAgIC8qYmFja2dyb3VuZDogI0QwNkI2QzsqL1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgICAgIHRvcDogMDtcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxuICAgICAgICAuYmFyIGlucHV0IHtcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgc2VsZWN0IHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgLmxpZWIgc2VsZWN0e1xcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNHB4OyovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1cHggNXB4IDVweCA1NTVweDtcXG4gICAgICAgICAgICB3aWR0aDogODBweDtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWktOWDjyovXFxuICAgICAgICAucm91bmRfaWNvbntcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcbiAgICA8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG48ZGl2IGNsYXNzPVxcXCJmdW5nXFxcIj5cXG4gICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7XFxcIj5cXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuY2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLmNsb3NlQnRuLmNvbG9yXFxcIiBvbmNsaWNrPVxcXCJjYW5jZWwoKTtcXFwiPuWFsyDpl608L2J1dHRvbj5cXG4gICAgPC9hPlxcbiAgICA8YSBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIj5cXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMudGlwc0J0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDEyMHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnRpcHNCdG4uY29sb3JcXFwiIEBjbGljaz1cXFwic2hvd1RpcHM9IXNob3dUaXBzXFxcIj57e3Nob3dUaXBzP1xcXCLpmpDol4/mj5DnpLpcXFwiOlxcXCLmmL7npLrmj5DnpLpcXFwifX08L2J1dHRvbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHRcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnNhdmVCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+W8gCcpO1xcXCI+5L+dIOWtmDwvYnV0dG9uPlxcbiAgICA8L2E+XFxuXFxuPC9kaXY+XFxuPGJyPlxcbjxkaXYgaWQ9XFxcImFwcFxcXCI+XFxuICAgIDxoNiBpZD1cXFwidGlwc1xcXCIgdi1odG1sPVxcXCJ0aXBzXFxcIiB2LXNob3c9XFxcInNob3dUaXBzXFxcIj48L2g2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJib3ggYmFyXFxcIiB2LWZvcj1cXFwib3B0aW9uIGluIG9wdGlvbnNcXFwiPlxcbiAgICAgICAgPGZvcm0+XFxuICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcInN1Ym1pdFxcXCIgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJsYWJlbC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuYmFybGFiZWwuY29sb3JcXFwiPnt7IG9wdGlvbi5uYW1lIH19PC9sYWJlbD5cXG4gICAgICAgICAgICA8aW5wdXQgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJJbnB1dC5iYWNrZ3JvdW5kKyc7Ym9yZGVyOiAzcHggc29saWQgJyt0aGVtZXMuYmFySW5wdXQuY29sb3JcXFwiIHR5cGU9XFxcInRleHRcXFwiIG9uY2xpY2s9XFxcInJlc2V0U2VsZWN0KHRoaXMuaWQpXFxcIiA6cGxhY2Vob2xkZXI9XFxcIm9wdGlvbi5wbGFjZWhvbGRlcnx8cGxhY2Vob2xkZXJcXFwiIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCIgdi1iaW5kOmlkPVxcXCJvcHRpb24uaWRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImxpZWJcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IDpzdHlsZT1cXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuc2VsZWN0LmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5zZWxlY3QuY29sb3JcXFwiIDpjbGVhcmFibGU9XFxcInRydWVcXFwiIHNpemU9XFxcIjJcXFwiIDppZD1cXFwib3B0aW9uLmlkKydTZWxlY3QnXFxcIiA6bmFtZT1cXFwib3B0aW9uLmlkXFxcIiBvbmNoYW5nZT1cXFwiZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKVxcXCIgIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZWxzZS1pZj1cXFwib3B0aW9uLmlkPT09J3FqdSdcXFwiIDp2YWx1ZT1cXFwic2VsXFxcIiA6a2V5PVxcXCJpbmRleFxcXCIgdi1mb3I9XFxcIihzZWwsaW5kZXgpIGluIFsn6buY6K6kJ10uY29uY2F0KG15U2VsZWN0KVxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cXFwic2VsXFxcIiA6a2V5PVxcXCJpbmRleFxcXCIgdi1lbHNlIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBjalNlbFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9mb3JtPlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2PlxcbiAgICA8YSB2LWZvcj1cXFwidmVyIGluIHZlcmluZm9cXFwiIHN0eWxlPVxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6MXB4O21hcmdpbi1yaWdodDogMjBweFxcXCIgdi1iaW5kOmlkPSd2ZXIuaWQnIG9uY2xpY2s9XFxcImRvT3B0aW9uKHRoaXMuaWQpXFxcIj5cXG4gICAgICAgIDxpbWcgOnNyYz1cXFwidmVyLmF2YXRhclxcXCIgY2xhc3M9XFxcInJvdW5kX2ljb25cXFwiICBhbHQ9XFxcIlxcXCI+XFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXCI+e3sgdmVyLmF1dGhvciB9fTwvc3Bhbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDoxMHB4O1xcXCI+XFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDonK3RoZW1lcy5zYXZlQ2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxNjBweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQ2xvc2VCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXCI+5L+d5a2Y5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxuICAgIDwvYT5cXG48L2Rpdj5cXG48c2NyaXB0PlxcbiAgICBsZXQgdGlwcyA9IGDmj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj5aaC5p6c6YGH5Yiw5L+d5a2Y5oyJ6ZKu54K55LiN5Yqo5oiW6ICF5oql6ZSZ55qE5oOF5Ya177yM5Lul5LiL6Lev5b6E5oyo552A5Yig6Zmk5LiA6YGN77yM54S25ZCO6YeN5paw5ouJ5Y+W5o+S5Lu277yM572R6aG15YaN5omT5byA5q2k572R6aG1W+S4jeimgeWFiOaLieS7o+eggV3jgILorrDlvpflpIfku708YnI+XFxu5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanM8YnI+XFxu572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbDxicj5cXG7ml6fmlq3mj5LphY3nva7ot6/lvoQ6L2NhY2hlL015UGFyc2VTZXQuanNvbjxicj5cXG7mlrDmlq3mj5LphY3nva7ot6/lvoQvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uPGJyPlxcbiAgICDikaTpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+YDtcXG4gICAgbGV0IHBsYWNlaG9sZGVyPSfovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi4nO1xcbiAgICAvLyNhYTk2ZGEgI2ZjNTE4NVxcbiAgICBsZXQgdGhlbWVzID0ge1xcbiAgICAgICAgbmFtZTon6buY6K6k5Li76aKYJyxcXG4gICAgICAgIGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICAgICAgc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxcXG4gICAgICAgIHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXG4gICAgICAgIHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxuICAgICAgICBiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXG4gICAgICAgIGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LFxcbiAgICAgICAgc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICB9O1xcbiAgICBsZXQgdGhlbWVEZWYgPSB7XFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xljp/nmq5cXFwiLFxcXCJjbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI2M1NDY0YVxcXCJ9LFxcXCJzYXZlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDY4MDA2XFxcIn0sXFxcInNhdmVDbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJ0aXBzQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcImJhcmxhYmVsXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn0sXFxcImJhcklucHV0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0QwNkI2Q1xcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRjlGMERBXFxcIn0sXFxcInNlbGVjdFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9fTtcXG4gICAgdmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICBpZighZmJhLmZldGNoKHRoZW1lUm91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZiYS5mZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICBsZXQgbm93VGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lID09PSBteVRoZW1lcy5ub3dfdGhlbWUpO1xcbiAgICAgICAgdGhlbWVzID0gbm93VGhlbWU/bm93VGhlbWVbMF06bXlUaGVtZXMudGhlbWVzWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgIC8vIOaWreW/teWIneWni+WMlumDqOWIhlxcbiAgICBjb25zdCBhbGxBcGk9WydodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPScsJ2h0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPSddO1xcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxuICAgICAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxuICAgICAgICB5azogJ+mihumFtycsXFxuICAgICAgICB0eDogJ+iNo+iAgCcsXFxuICAgICAgICBtZzogJ+iaguiageWFhOW8nycsXFxuICAgICAgICBibDogJ09L6Kej5p6QJyxcXG4gICAgICAgIHNoOiAn5rGf5rmWRCcsXFxuICAgICAgICB4ZzogJ+axn+a5lkQnLFxcbiAgICAgICAgYWw6ICfmsZ/muZZEJyxcXG4gICAgICAgIHBwOiAn5Lq65Lq66L+3JyxcXG4gICAgICAgIG1pOiAnMTA4MCcsXFxuICAgICAgICBsZTogJ+i/quWlpeWXheaOoicsXFxuICAgICAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICAgICAgb25lOiAnMTA4MCcsXFxuICAgICAgICBmdW46ICfono3lhbQnLFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXG4gICAgfTtcXG4gICAgdmFyIG9sZFJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG4gICAgdmFyIG15U2V0ID0gZmJhLmZldGNoKG9sZFJvdXRlKTtcXG4gICAgdmFyIG5ld1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcIjtcXG4gICAgaWYoIWZiYS5mZXRjaChuZXdSb3V0ZSkpe1xcbiAgICAgICAgZmJhLndyaXRlRmlsZShuZXdSb3V0ZSxKU09OLnN0cmluZ2lmeSh7c2V0dGluZ3M6c2V0dGluZ3MsdGl0bGU6W1xcXCJ5dW4xNzE3XFxcIixcXFwi5L2g54i556eR5oqAXFxcIixcXFwi6J6N5YW0XFxcIixcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXCJdLGNvZGVzOntcXFwi5L2g54i556eR5oqAXFxcIjpcXFwiaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9XFxcIixcXFwi6J6N5YW0XFxcIjpcXFwiaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD1cXFwiLFxcXCLkurrkurrov7ct5LyY6YW3XFxcIjpcXFwiaHR0cHM6Ly9zdmlwLnJlbnJlbm1pLmNjOjIyMjIvYXBpLz9rZXk9bm40ajhydWtQWFNWelI3OEU5JnVybD1cXFwifX0pKVxcbiAgICB9XFxuICAgIHZhciBuZXdDb25maWcgPSBmYmEuZmV0Y2gobmV3Um91dGUpO1xcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXG4gICAgZnVuY3Rpb24gY29tcGFyZShsaXN0KSB7XFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XFxuICAgICAgICAgICAgcmV0dXJuICFsaXN0LmluY2x1ZGVzKGl0KVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmKG5ld0NvbmZpZyYmbmV3Q29uZmlnLmxlbmd0aD4yMCl7XFxuICAgICAgICBldmFsKFxcXCJuZXdDb25maWcgPVxcXCIgKyBuZXdDb25maWcgKyBcXFwiO1xcXCIpO1xcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXG4gICAgICAgIC8vIG15U2VsZWN0ID0gbXlTZWxlY3QubWFwKChpdCk9PntcXG4gICAgICAgIC8vICAgICBsZXQgZmxhZyA9ICfik4onO1xcbiAgICAgICAgLy8gICAgIGlmKHR5cGVvZihuZXdDb25maWcuY29kZXNbaXRdKT09PSdmdW5jdGlvbicpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJ+KSvyc7XFxuICAgICAgICAvLyAgICAgfWVsc2UgaWYodHlwZW9mKG5ld0NvbmZpZy5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAvLyAgICAgfVxcbiAgICAgICAgLy8gICAgIHJldHVybiBmbGFnK2l0XFxuICAgICAgICAvLyB9KTtcXG4gICAgfVxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXG5cXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXG4gICAgICAgICAgICBpZDoncXknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXG4gICAgICAgICAgICBpZDonbWcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXG4gICAgICAgICAgICBpZDoneGcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mYv+mHjCcsXFxuICAgICAgICAgICAgaWQ6J2FsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5hbFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXG4gICAgICAgICAgICBpZDoncHAnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnBwXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WSquWSlScsXFxuICAgICAgICAgICAgaWQ6J21pJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5taVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkuZDop4YnLFxcbiAgICAgICAgICAgIGlkOidsZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxuICAgICAgICAgICAgaWQ6J29uZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub25lXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mjjuihjCcsXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuZnVuXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFtuS7licsXFxuICAgICAgICAgICAgaWQ6J290aCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxuICAgICAgICAgICAgaWQ6J3FqdScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucWp1XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+aPkuS7ticsXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5jalxcbiAgICAgICAgfSxcXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gZ2V0T3B0aW9uKGlkLHRpdGxlKSB7XFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXG4gICAgICAgIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dDtcXG4gICAgICAgIC8vIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dC5yZXBsYWNlKC/ik4p84pK/L2csJycpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIHJlc2V0U2VsZWN0KGlkKXtcXG4gICAgICAgIERpZChpZCtcXFwiU2VsZWN0XFxcIikub3B0aW9ucy5zZWxlY3RlZEluZGV4ID0gLTE7XFxuICAgIH1cXG5cXG4gICAgLy/lh73mlbDpg6jliIZcXG5cXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXtcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uO1xcbiAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnO1xcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXCJ3aWR0aDo0NSU7IG1pbi13aWR0aDoxNTBweDsgYmFja2dyb3VuZDojMzExOyBvcGFjaXR5OjAuNjsgaGVpZ2h0OmF1dG87bWluLWhlaWdodDogNDVweDsgY29sb3I6I2ZmZjsgbGluZS1oZWlnaHQ6NDVweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgcG9zaXRpb246Zml4ZWQ7IHRvcDo2MCU7IGxlZnQ6MjYlOyB6LWluZGV4Ojk5OTk5OTtcXFwiO1xcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTtcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgdmFyIGQgPSAwLjU7XFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nO1xcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJztcXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pIH0sIGQgKiAxMDAwKTtcXG4gICAgICAgIH0sIGR1cmF0aW9uKTtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiBvcGVuRG5QYWdlKCl7XFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgcnVsZTogXFxcIj1eX149XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIue8lui+keino+aekFxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgLy9maW5kUnVsZTogXFxcImpzOnRoaXMuZD1bXTskLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLmVkaXQoKTtzZXRSZXN1bHQoZCk7XFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBvcGVuVGhlbWUoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Li76aKY566h55CGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU95Li76aKYI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBvcGVuSnhNYW5hZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi6Kej5p6Q6YWN572u566h55CGXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge31cXG4gICAgICAgIH0pKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjYW5jZWwoKXtcXG4gICAgICAgIGlmKCFteVNldCl7XFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXG4gICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBmYmEuYmFjayhmYWxzZSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcbiAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHNldHRpbmdzKXtcXG4gICAgICAgICAgICAgICAgLy8gZmJhLmxvZyhEaWQoa2V5KSsnJytrZXkpO1xcbiAgICAgICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgICAgICAvL3NldHRpbmdzW2tleV0gPSBEaWQoa2V5KS52YWx1ZS5yZXBsYWNlKC/ik4p84pK/L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXCIra2V5K1xcXCJcXFxcblxcXCIrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3Q29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcIuWFs1xcXCIpe1xcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcbiAgICAvL2FsZXJ0KFxcXCLlvZPliY3liIbovqjnjoc6XFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcIipcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXG4gICAgdmFyIHZlcmluZm8gPSBbe1xcbiAgICAgICAgaWQ6J2RuJyxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXG4gICAgICAgIGF2YXRhcjonaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGcnLFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxuICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgaWQ6J2R6JyxcXG4gICAgICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxuICAgICAgICAgICAgYXZhdGFyOidodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTQzNDg1NzAwNSZzPTY0MCcsXFxuICAgICAgICAgICAgb3B0aW9uOm9wZW5UaGVtZVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBpZDonbG0nLFxcbiAgICAgICAgICAgIGF1dGhvcjogJ+iTneiOkycsXFxuICAgICAgICAgICAgYXZhdGFyOiAnaHR0cDovL3ExLnFsb2dvLmNuL2c/Yj1xcSZuaz0yNTc5OTQ5Mzc4JnM9NjQwJyxcXG4gICAgICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxuICAgICAgICB9XFxuICAgIF07XFxuXFxuICAgIGZ1bmN0aW9uIGRvT3B0aW9uKG9wdGlvbl9pZCl7XFxuICAgICAgICBsZXQgdmVyID0gdmVyaW5mby5maWx0ZXIoaXQ9Pml0LmlkPT09b3B0aW9uX2lkKVswXTtcXG4gICAgICAgIHZlci5vcHRpb24oKTtcXG4gICAgfVxcblxcbiAgICBjb25zdCBSZW5kZXJIdG1sQXBwID0ge1xcbiAgICAgICAgZGF0YSgpIHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAvLyByYXdIdG1sOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiByZWRcXFwiPui/memHjOS8muaYvuekuue6ouiJsu+8gTwvc3Bhbj4nLFxcbiAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnMsXFxuICAgICAgICAgICAgICAgIHZlcmluZm86dmVyaW5mbyxcXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6cGxhY2Vob2xkZXIsXFxuICAgICAgICAgICAgICAgIHRpcHM6dGlwcyxcXG4gICAgICAgICAgICAgICAgdGhlbWVzOnRoZW1lcyxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3Q6bXlTZWxlY3QsXFxuICAgICAgICAgICAgICAgIC8vIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzJ10sXFxuICAgICAgICAgICAgICAgIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ10sXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzOnNldHRpbmdzLFxcbiAgICAgICAgICAgICAgICBzaG93VGlwczpmYWxzZSxcXG4gICAgICAgICAgICAgICAgLy93aWR0aFB4OndpZHRoUHhcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kczp7XFxuICAgICAgICAgICAgLy8gY2hhbmdlVmFsOmZ1bmN0aW9uKGV2ZW50KXtcXG4gICAgICAgICAgICAvLyAgICAgZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKTtcXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZWxPcHRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XFxuICAgICAgICAgICAgLy8gICAgIGFsZXJ0KFxcXCLkvaDpgInkuK3kuoZcXFwiK2V2ZW50LnRhcmdldC52YWx1ZSk7XFxuICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgIGRvT3B0aW9uOmRvT3B0aW9uXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IGFwcD1WdWUuY3JlYXRlQXBwKFJlbmRlckh0bWxBcHApO1xcbiAgICAgICAgYXBwLm1vdW50KCdib2R5Jyk7XFxuICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgY29uc29sZS5sb2coZS5tZXNzYWdlKVxcbiAgICB9XFxuXFxuPC9zY3JpcHQ+XFxuXFxuPC9ib2R5PlxcbjwvaHRtbD5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmpzXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5qc1wiLFwicnVsZVwiOlwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXG4vL++8je+8je+8jT1eX149XFxuXFxudmFyIHZlcnNpb24gPSAzLjQ5MTIxMjtcXG52YXIgdXBkYXRlRGF0ZSA9ICcyMDIxLzEyLzEyLzExOjExJztcXG52YXIgX215U2V0ID0ge1xcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBvdGg6J+mBk+mVv+S7k+W6k+mAmuWFjScsXFxuICAgIGNqY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJyxcXG4gICAgdGhlbWVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uJyxcXG4gICAgamlleGljYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uJyxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgIG9sZENvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXG4gICAgY2tMaW5rOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92LycsXFxuICAgIGNqOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcbiAgICB4NVVybDogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9QYXJzZV9Ebi5odG1sJyxcXG4gICAgcGFyc2VSb3V0ZTogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXG4gICAgeDVSb3V0ZTogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWwnXFxufTtcXG52YXIgTXlQYXJzZVMgPSB7fTtcXG52YXIgbXlTZXQgPSBfbXlTZXQ7XFxuaWYgKGZpbGVFeGlzdChfbXlTZXQucGFyc2VSb3V0ZSkpIHtcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXG59XFxudmFyIHBhcnNlVGl0bGUgPSBbXFxuICAgIFxcXCJ5dW4xNzE3XFxcIixcXG4gICAgXFxcIlBhbkd1XFxcIixcXG4gICAgXFxcIkZ1WGluZ1xcXCIsXFxuICAgIFxcXCJpc1ZpZGVvXFxcIixcXG4gICAgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxuICAgIFxcXCLpgZPplb/ku5PlupPpgJrlhY1cXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXG4gICAgXFxcIk9L6Kej5p6QXFxcIixcXG4gICAgXFxcIk0zVThUVlxcXCIsXFxuXTtcXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFwiO1xcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXG5cXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxuXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxuLypcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxuICpcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxuICpcXG4gKi9cXG5cXG5cXG52YXIgdG9vbHMgPSB7XFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxuICAgIH0sXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH0sXFxuICAgIC8vYXNjaWlcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcbiAgICB9LFxcbiAgICAvL+WHr+aSklxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXG4gICAgfSxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChkYXRlMSkge1xcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgbW9udGg7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLVxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi0wXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXG4gICAgfSxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgKGtleSwgdmFsdWUpID0+IHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIDQpO1xcbiAgICB9LFxcbiAgICB0b1ZOdW06IGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xcbiAgICAgICAgdmFyIGMgPSBhLnNwbGl0KCcuJyk7XFxuICAgICAgICB2YXIgbnVtX3BsYWNlID0gW1xcXCJcXFwiLCBcXFwiMFxcXCIsIFxcXCIwMFxcXCIsIFxcXCIwMDBcXFwiLCBcXFwiMDAwMFxcXCJdLFxcbiAgICAgICAgICAgIHIgPSBudW1fcGxhY2UucmV2ZXJzZSgpO1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdmFyIGxlbiA9IGNbaV0ubGVuZ3RoO1xcbiAgICAgICAgICAgIGNbaV0gPSByW2xlbl0gKyBjW2ldO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHJlcyA9IGMuam9pbignJyk7XFxuICAgICAgICByZXR1cm4gcmVzO1xcbiAgICB9LFxcbiAgICBjcHJWZXJzaW9uOiBmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICB2YXIgX2EgPSBwYXJzZUludCh0aGlzLnRvVk51bShhKSksXFxuICAgICAgICAgICAgX2IgPSBwYXJzZUludCh0aGlzLnRvVk51bShiKSk7XFxuICAgICAgICBiID0gaXNOYU4oX2IpID8gdmVyc2lvbiA6IGI7XFxuICAgICAgICBpZiAoX2EgPiBfYikge1xcbiAgICAgICAgICAgIHB1dFZhcignanhOZXdWJywgJ+acieaWsOeJiOacrDogJyArIGEpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxuICAgICAgICB9XFxuICAgICAgICBwdXRWYXIoJ2p4T2xkVicsIGIpO1xcbiAgICB9LFxcbiAgICBhdG9iOmZ1bmN0aW9uIChzdHIpe1xcbiAgICAgICAgcmVxdWlyZSgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9qcy1iYXNlNjRAMy43LjIvYmFzZTY0Lm1pbi5qcycpO1xcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5hdG9iKHN0cik7XFxuICAgIH0sXFxuICAgIGJ0b2E6ZnVuY3Rpb24gKHN0cil7XFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxuICAgICAgICByZXR1cm4gQmFzZTY0LmJ0b2Eoc3RyKTtcXG4gICAgfSxcXG4gICAg5rGf5rmWOmZ1bmN0aW9uIChjb25maWdfdXJsLCB0ZW0sIHRva2VuKSB7XFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxuICAgICAgICB2YXIgYXRvYj1CYXNlNjQuYXRvYjtcXG4gICAgICAgIHZhciBidG9hPUJhc2U2NC5idG9hO1xcbiAgICAgICAgdmFyIGNvbmZpZ19hID0gdGVtIHx8IFxcXCJmZnNpcmxscVxcXCI7XFxuICAgICAgICB2YXIgdmlkZW8gPSAnJztcXG4gICAgICAgIHZhciB0ZW0gPSBbXTtcXG4gICAgICAgIHZhciBjb25maWdfYXJyeSA9IFtdO1xcbiAgICAgICAgdmFyIGNvbmZpZ19iID0gY29uZmlnX2EubGVuZ3RoO1xcbiAgICAgICAgaWYgKHRva2VuID09IDB4MSkge1xcbiAgICAgICAgICAgIHZhciBjb25maWdfdXJsID0gYXRvYihjb25maWdfdXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGNvbmZpZ191cmwgPSBlbmNvZGVVUklDb21wb25lbnQoY29uZmlnX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgY29uZmlnX2MgPSBjb25maWdfdXJsLmxlbmd0aDtcXG4gICAgICAgIGZvciAoaSA9IDB4MDsgaSA8IDB4MTAwOyBpKyspIHtcXG4gICAgICAgICAgICB0ZW1baV0gPSBjb25maWdfYVtpICUgY29uZmlnX2JdLmNoYXJDb2RlQXQoKTtcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtpXSA9IGk7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGogPSBpID0gMHgwOyBpIDwgMHgxMDA7IGkrKykge1xcbiAgICAgICAgICAgIGogPSAoaiArIGNvbmZpZ19hcnJ5W2ldICsgdGVtW2ldKSAlIDB4MTAwO1xcbiAgICAgICAgICAgIHRtcCA9IGNvbmZpZ19hcnJ5W2ldO1xcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2ldID0gY29uZmlnX2Fycnlbal07XFxuICAgICAgICAgICAgY29uZmlnX2Fycnlbal0gPSB0bXA7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGEgPSBqID0gaSA9IDB4MDsgaSA8IGNvbmZpZ19jOyBpKyspIHtcXG4gICAgICAgICAgICBhID0gKGEgKyAweDEpICUgMHgxMDA7XFxuICAgICAgICAgICAgaiA9IChqICsgY29uZmlnX2FycnlbYV0pICUgMHgxMDA7XFxuICAgICAgICAgICAgdG1wID0gY29uZmlnX2FycnlbYV07XFxuICAgICAgICAgICAgY29uZmlnX2FycnlbYV0gPSBjb25maWdfYXJyeVtqXTtcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtqXSA9IHRtcDtcXG4gICAgICAgICAgICBrID0gY29uZmlnX2FycnlbKGNvbmZpZ19hcnJ5W2FdICsgY29uZmlnX2Fycnlbal0pICUgMHgxMDBdO1xcbiAgICAgICAgICAgIHZpZGVvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29uZmlnX3VybFtpXS5jaGFyQ29kZUF0KCkgXiBrKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZyhkZWNvZGVVUklDb21wb25lbnQodmlkZW8pKTtcXG4gICAgICAgIGlmICh0b2tlbiA9PSAweDEpIHtcXG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZpZGVvKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIGJ0b2EodmlkZW8pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufTtcXG5pZiAoZ2V0VmFyKFxcXCJqeE9sZFZcXFwiLCBcXFwiMFxcXCIpICE9IHZlcnNpb24pIHtcXG4gICAgcHV0VmFyKCdjakNhY2hlJywgX215U2V0LmNqY2FjaGUpO1xcbiAgICBwdXRWYXIoJ3g1Q2FjaGUnLCBfbXlTZXQueDVDYWNoZSk7XFxuICAgIHB1dFZhcignb2xkQ29uZmlnJywgX215U2V0Lm9sZENvbmZpZyk7XFxuICAgIHB1dFZhcigncGFyc2VSb3V0ZScsIF9teVNldC5wYXJzZVJvdXRlKTtcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKCdodHRwczovL2dpdGVlLmNvbS9EdWFuLU5pYW4vRG4vcmF3L21hc3Rlci9oaWtlcnZpZXcvUGFyc2VWZXJzaW9uLnR4dCcpLFxcbiAgICAgICAganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXG59XFxuXFxudmFyIFBhcnNlUyA9IHt9O1xcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXG4gICAgLy8gdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXG4gICAgcGFyc2VMYzonaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci9wL3BhcnNlTGMuanMnLFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXO+8m1xcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBtM3U4ID0gZmV0Y2godlVybCwge30pO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlb3MubTN1OCcsIG0zdTgpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIHJldHVybiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvdmlkZW9zLm0zdTgjJztcXG4gICAgfSxcXG4gICAgaXNWaWRlbzpmdW5jdGlvbihwbGF5VXJsKXtcXG4gICAgICAgIGNvbnN0IHtpc1ZpZGVvfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICByZXR1cm4gaXNWaWRlbyhwbGF5VXJsKVxcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0LGV4dHJhKSB7XFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICAgICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHxwYXJzZUludChnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzUwMDAnKSl8fDUwMDA7XFxuICAgICAgICBleHRyYSA9IGV4dHJhfHx7fTtcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0fHxbXTtcXG4gICAgICAgIGlmKHR5cGVvZihwbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmcGxheVVybExpc3QubGVuZ3RoPjApe1xcbiAgICAgICAgICAgIHBsYXlVcmxMaXN0LnVuc2hpZnQocGxheVVybCk7XFxuICAgICAgICAgICAgbGV0IHBsYXlVcmxzPXBsYXlVcmxMaXN0LnNsaWNlKDAsNCk7XFxuICAgICAgICAgICAgbGV0IG5hbWVzPWV4dHJhLm5hbWVMaXN0LnNsaWNlKDAsNCk7XFxuICAgICAgICAgICAgLy8gbG9nKCflvIDlp4vmibnph4/op6PmnpAo5bey5Y676YeNLOWPquWPluWJjTPkuKrlpIfog47vvIzliqDpgZPplb/nvqQ6NDg2NzIyMzI46I635Y+W5pyA5paw6a2U5pat5Yqo5oCBKTonK25hbWVzKTtcXG4gICAgICAgICAgICBwbGF5VXJscz1wbGF5VXJscy5tYXAoKGl0LGlkKT0+aXQrXFxcIjtcXFwiK25hbWVzW2lkXSk7XFxuICAgICAgICAgICAgLy9sb2cocGxheVVybHMpO1xcbiAgICAgICAgICAgIGNvbnN0IHtMYXp5UGFyc2VGYXN0fSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICAgICAgbGV0IHJldCA9IExhenlQYXJzZUZhc3QocGxheVVybHMsdGltZW91dCx0aW1lb3V0KTtcXG4gICAgICAgICAgICBpZih0eXBlb2YocmV0KT09PSdvYmplY3QnJiZyZXQubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAvL3JldHVybiByZXRbMF1cXG4gICAgICAgICAgICAgICAgLy9sb2cocmV0KTtcXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBnZXRBcHBWZXJzaW9uKCk7XFxuICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KHYpPj0yMTk0JiZyZXQubGVuZ3RoPjEpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBBcnJheS5mcm9tKG5ldyBTZXQocmV0KSk7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lcz11cmxzLm1hcCgoaXQsaWQpPT5pdC5zcGxpdChcXFwi4piFXFxcIikubGVuZ3RoPjE/aXQuc3BsaXQoXFxcIuKYhVxcXCIpWzFdOlxcXCLnur/ot686XFxcIitwYXJzZUludChpZCsxKSk7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzPXVybHMubWFwKGl0PT5pdC5zcGxpdChcXFwi4piFXFxcIilbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB1cmxzLm1hcCgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS87Ly50ZXN0KGl0KXx8aXQuc3BsaXQoJzsnKS5sZW5ndGg8Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvQC8udGVzdChoZWFkKXx8IS97fH0vLnRlc3QoaGVhZCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZD1oZWFkLnNwbGl0KFxcXCJ7XFxcIilbMV0uc3BsaXQoXFxcIn1cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9oZWFkID0gaGVhZC5yZXBsYWNlKC97fH0vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KCcmJicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBoZWFkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sJ++8m++8mycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJscy5tYXAoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0dXJsPWl0LnNwbGl0KCc7JylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXQuaW5jbHVkZXMoXFxcIiNpc1ZpZGVvPXRydWUjXFxcIikmJiF0dXJsLmluY2x1ZGVzKFxcXCIjaXNWaWRlbz10cnVlI1xcXCIpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVybCs9XFxcIiNpc1ZpZGVvPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cmxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHt1cmxzOnVybHMsaGVhZGVyczpoZWFkZXJzLG5hbWVzOm5hbWVzfSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFswXS5zcGxpdChcXFwi4piFXFxcIilbMF1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgY29uc3Qge2xhenlQYXJzZX0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcbiAgICAgICAgICAgIGxldCB4NVBsYXk9bGF6eVBhcnNlKHBsYXlVcmwsdGltZW91dCk7XFxuICAgICAgICAgICAgaWYodHlwZW9mKHg1UGxheSk9PVxcXCJ1bmRlZmluZWRcXFwifHwheDVQbGF5KXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mBk+mVv+S7k+W6k+ino+aekOWksei0pVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHRpcHM9L3g1UnVsZXx3ZWJSdWxlLy50ZXN0KHg1UGxheSk/XFxcIng1L3dlYuWFjeWXheW8gOWni1xcXCI6XFxcIuaegemAn+WFjeWXheaOouWujOavle+8jOWcsOWdgDpcXFwiKygvXmh0dHAvLnRlc3QoeDVQbGF5KT94NVBsYXk6J+mdnuato+W4uOmTvuaOpScpO1xcbiAgICAgICAgICAgIGxvZyh0aXBzKTtcXG4gICAgICAgICAgICByZXR1cm4geDVQbGF5O1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBcXFwibWFvc3NcXFwiOlxcbiAgICAgICAgZnVuY3Rpb24gKGp4dXJsLCByZWYsIGtleSkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLueMqyhqeHVybCwgcmVmLCBrZXkpXFxuICAgICAgICB9LFxcbiAgICDlhY3ll4U6ZnVuY3Rpb24odmlwVXJsLGspe1xcbiAgICAgICAgaz1rfHxcXFwidXJsXFxcIjtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBsZXQgcmVhbFVybD1KU09OLnBhcnNlKGZldGNoKHZpcFVybCkpW2tdO1xcbiAgICAgICAgICAgIGlmKHJlYWxVcmwuc3RhcnRzV2l0aCgnLycpKXtcXG4gICAgICAgICAgICAgICAgcmVhbFVybCA9ICdodHRwczovLycrcmVhbFVybDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWaWRlbyhyZWFsVXJsKXx8XFxcIlxcXCI7XFxuICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgLy9sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgWDU6ZnVuY3Rpb24odmlwVXJsLHJlZil7Ly8gaHR0cHM6Ly9hcGkuNTJ3eWIuY29tL3dlYmNsb3VkLz92PWh0dHA6Ly92aXAuMTkwNS5jb20vcGxheS82OTE5NDAuc2h0bWwgaHR0cDovL3d3dy5jZGNlci5uZXQvXFxuICAgICAgICBsZXQgX3g1ID0gJC50b1N0cmluZygodmlwVXJsKSA9PiB7XFxuICAgICAgICAgICAgaWYoIWxvY2F0aW9uLmhyZWYuaW5jbHVkZXModmlwVXJsKSl7XFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB2aXBVcmw7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKHdpbmRvdy5jb3VudCA9PSBudWxsKXtcXG4gICAgICAgICAgICAgICAgd2luZG93LmNvdW50PTE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdpbmRvdy5jb3VudCsrO1xcbiAgICAgICAgICAgIGlmKCB3aW5kb3cuY291bnQgPj0gMjApe1xcbiAgICAgICAgICAgICAgICBmYmEubG9nKFxcXCLmnKrojrflj5bliLDotYTmupDlnLDlnYDvvIzot7PliLDop6PmnpDpobVcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpcFVybFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1cmxzKSB7XFxuICAgICAgICAgICAgICAgIGlmICghL3BsYXltM3U4fG0zdThcXFxcLnR2Ly50ZXN0KHVybHNbaV0pICYmIHVybHNbaV0ubWF0Y2goL1xcXFwubXAzfFxcXFwubXA0fFxcXFwubTN1OHxcXFxcLmZsdi8pKSB7XFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKHVybHNbaV0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbaV1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sdmlwVXJsKTtcXG4gICAgICAgIGxldCBwbGF5VXJsID0gcmVmP3JlZjp2aXBVcmw7XFxuICAgICAgICBsZXQgeDVVcmwgPSAnd2ViUnVsZTovLycrcGxheVVybCsgJ0AnICtfeDU7XFxuICAgICAgICBzaG93TG9hZGluZygn6a2U5patLmpz5ZeF5o6i5LitLi4uJyk7XFxuICAgICAgICByZXR1cm4geDVVcmxcXG4gICAgfSxcXG4gICAgJ+eMqyc6ZnVuY3Rpb24gKGp4dXJsLCByZWYsIGtleSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgZ2V0VmlkZW9JbmZvID0gZnVuY3Rpb24gKHRleHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGxldCBoZWFkZXJzID0ge2hlYWRlcnM6IHtcXFwiUmVmZXJlclxcXCI6IHJlZnx8Jyd9fTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHJlZj9yZXF1ZXN0KGp4dXJsLCBoZWFkZXJzKTpyZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICBpZiAoLyZidHdhZj0vLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyBcXFwiJmJ0d2FmXFxcIiArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcIi8pWzFdLCB7aGVhZGVyczoge1xcXCJSZWZlcmVyXFxcIjogcmVmfX0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KFxcXCJfdG9rZW4gPSBcXFxcXFxcIlxcXCIpWzFdLnNwbGl0KFxcXCJcXFxcXFxcIlxcXCIpWzBdO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXHNcXFxcU10qP30vKVswXSArIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBpZiAoIS9eaHR0cC8udGVzdChjb25maWcudXJsKSkge1xcbiAgICAgICAgICAgICAgICBjb25maWcudXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHRvb2xzLkFFUyhjb25maWcudXJsLCBcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXCIsIGl2KSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsO1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcImFwaS5waHBcXFwiO1xcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvKnZhciByZWYgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vJztcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXG4gICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXG4gICAgICAgICAgICAvL3ZhciBwYXJzZSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvaW5kZXgucGhwP3VybD0nICsgdGFpbFVybDtcXG4gICAgICAgICAgICAvL3ZhciBhcGkgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2FwaS5waHAnO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvcGFuZ3UyMDIxL2FwaS5waHAnO1xcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XFxuICAgICAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxuICAgICAgICAgICAgICAgIHBhcnNlID0gZGF0YVsxXTtcXG4gICAgICAgICAgICAgICAgYXBpID0gZGF0YVsyXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIFRpbWUgPSAoTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApICogMSkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHBhcnNlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHZpcFVybCArICcmcmVmZXJlcj0nICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArICcmcmVmPTEmdGltZT0nICsgVGltZSArICcmdHlwZT0mb3RoZXI9JyArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgJyZpb3M9MCcsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24gKHZpcFVybCkge1xcbiAgICAgICAgdmFyIGlzeWsgPSB2aXBVcmwuaW5kZXhPZigneW91a3UnKTtcXG4gICAgICAgIHZhciByZWYgPSBcXFwiaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vangvdHkucGhwP3VybD1cXFwiICsgdmlwVXJsO1xcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzA4MjgvP3VybD1cXFwiICsgdmlwVXJsO1xcbiAgICAgICAgdmFyIGFwaSA9IFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8xMDA0Ly4uaW5kZXguLnBocFxcXCI7XFxuICAgICAgICByZXR1cm4gaXN5ayA9PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArICcsdmlwOicsIHBhcnNlICsgJyx2aXA6JywgYXBpXSk7XFxuICAgIH0sXFxuICAgIE9L6Kej5p6QOidodHRwczovL29ranguY2MvP3VybD0nLFxcbiAgICBNM1U4VFY6J2h0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPScsXFxuICAgIOmBk+mVv+S7k+W6k+mAmuWFjTpmdW5jdGlvbiAodXJsLHRpbWVvdXQpe1xcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcbiAgICB9LFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvL2lmKHZpcFVybC5pbmRleE9mKCd2LnlvdWt1JykhPS0xKXtcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXD8uKi8sJycpO1xcbiAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gcmVmO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuXFxuT2JqZWN0LmFzc2lnbihQYXJzZVMsIG9yaWdpbmFsUGFyc2VTLCBNeVBhcnNlUyk7XFxuLy/opobnm5bpobrluo/vvIznrKzkuInkuKropobnm5bnrKzkuozkuKrnhLblkI7opobnm5bnrKzkuIDkuKpcXG5cXG5cXG5mdW5jdGlvbiBheXRtUGFyc2UodmlwVXJsLHN0clRpdGxlLHRpbWVvdXQscGxheVVybCkge1xcbiAgICAvLyDlj4LmlbAxOuato+eJiOe9keWdgOWcsOWdgCDlj4LmlbAyIOWumuWQkeino+aekOaOpeWPo+WQjeensCDlj4LmlbAzIHg16Kej5p6Q6LaF5pe2IOWPguaVsDQg5a6M5pW055qE5pKt5pS+6ZO+5o6lXFxuICAgIHN0clRpdGxlID0gc3RyVGl0bGV8fCcnO1xcbiAgICB2aXBVcmwgPSBkZWNvZGVVUklDb21wb25lbnQodmlwVXJsKTtcXG4gICAgcGxheVVybD1kZWNvZGVVUklDb21wb25lbnQocGxheVVybCl8fHZpcFVybHx8Jyc7XFxuICAgIC8vIGxvZygn5Lyg5YWlYXl0bVBhcnNl55qE6LaF5pe2OicrdGltZW91dCk7XFxuICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8cGFyc2VJbnQoZ2V0VmFyKCdkcC5qeFRpbWVvdXQnLCc1MDAwJykpfHw1MDAwO1xcblxcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICAgbGV0IGp4c1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcIjtcXG4gICAgbGV0IE15SmlleGkgPSB7fTtcXG4gICAgbGV0IGppZXhpcyA9IHt9O1xcbiAgICB0cnkge1xcbiAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXG4gICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXG4gICAgfWNhdGNoIChlKSB7fVxcbiAgICBmdW5jdGlvbiBnZXRQbGF5Sngoa2V5KXtcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IFtdOy8v5om56YeP5pKt5pS+5Zyw5Z2A5YiX6KGoXFxuICAgICAgICBsZXQgbmFtZUxpc3QgPSBbXTtcXG4gICAgICAgIGxldCBqeHMgPSBqaWV4aXNba2V5XTsgLy8g6YCC55So5LqO6L+Z5Liq572R56uZ55qE6Kej5p6Q5YiX6KGoXFxuICAgICAgICBpZihqeHMpe1xcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBqeHMpe1xcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTW2p4c1tpXV0gPT0gJ3N0cmluZycmJlBhcnNlU1tqeHNbaV1dLm1hdGNoKC9odHRwLio/PS8pKXtcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlVcmxMaXN0LnB1c2goUGFyc2VTW2p4c1tpXV0rdmlwVXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goanhzW2ldKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vIHJldHVybiBwbGF5VXJsTGlzdFxcbiAgICAgICAgcmV0dXJuIHtwbGF5VXJsTGlzdDpwbGF5VXJsTGlzdCxuYW1lTGlzdDpuYW1lTGlzdH1cXG4gICAgfVxcbiAgICBsZXQgZXh0cmEgPSB7fTtcXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAgIGlmKCFzdHJUaXRsZSl7XFxuICAgICAgICBpZigvcmVucmVubWktfGZlbmRvdVxcXFwuZHVvZHVvenkvLnRlc3QodmlwVXJsKSl7XFxuICAgICAgICAgICAgc3RyID0gbXlTZXQucHA7XFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3BwJyk7XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICB2YXIgaG9zdDtcXG4gICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgIGhvc3QgPSB2aXBVcmwubWF0Y2goL1xcXFwuKC4qPylcXFxcLy8pWzFdO1xcbiAgICAgICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICAgICAgaWYoIS9eaHR0cC8udGVzdChwbGF5VXJsKSl7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcIuaWreaPkuiwg+eUqOWksei0pe+8gVxcXFxu6Z2e5q2j5bi455qEdmlw5q2j54mI5Zyw5Z2A5LiU5pyq6K+G5Yir5Y6f56uZ6Kej5p6Q5pKt5pS+5Zyw5Z2AXFxcIjtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLumBk+mVv+S7k+W6k+mAmuWFjShwbGF5VXJsLHRpbWVvdXQpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9ob3N0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGhvc3QpO1xcbiAgICAgICAgICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcIum7mOiupFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJxcS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3R4Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImlxaXlpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnF5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncXknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwieW91a3UuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd5aycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJhbGl6eVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmFsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYWwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWd0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21nJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImJpbGliaWxpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYmwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwic29odS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInR2LnNvaHUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJpeGlndWEuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueGc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd4ZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwcHR2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnBwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncHAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWlndXZpZGVvLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibGUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdsZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCIxOTA1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm9uZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ29uZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJmdW4udHZcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5mdW47XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdmdW4nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub3RoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucWp1O1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGxvZygn6a2U5pat5omn6KGM5a6a5ZCR6Kej5p6Q57q/6Lev5aS0Oicrc3RyVGl0bGUpO1xcbiAgICAgICAgc3RyID0gc3RyVGl0bGU7XFxuICAgIH1cXG4gICAgbGV0IHdpdGhCYXRjaCA9ICEhKE15SmlleGkuaXNBdXRvICYmIE15SmlleGkuYXV0b01vZGUgPT09ICfpgJ/luqbkvJjlhYgnKTtcXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICBpZigv6YCa5YWNLy50ZXN0KHN0cikpe1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgdXJsID0gUGFyc2VTW3N0cl0odmlwVXJsKTtcXG4gICAgICAgIGlmKC9eaGlrZXI6fF50b2FzdDp8XnJ1bGU6fF54NVJ1bGU6fF53ZWJSdWxlOnxec2VsZWN0Ly50ZXN0KHVybCkpe1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9XFxuICAgICAgICBpZighdXJsJiYhL15odHRwLy50ZXN0KHZpcFVybCkpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/prZTmlq3op6PmnpDlpLHotKU+Jyt2aXBVcmxcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIGxvZyh2aXBVcmwrJ+WFjeWXheaOoue7k+aenDonK3VybCk7XFxuICAgICAgICBpZiAoL15cXFxcLy8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gJ2h0dHBzOicgKyB1cmxcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgvPWh0dHAvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgIHVybCA9IC8mdXJsPS8udGVzdCh1cmwpID8gdXJsIDogJ2h0dHAnICsgZGVjb2RlVVJJQ29tcG9uZW50KHVybC5zcGxpdCgnPWh0dHAnKVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICAvKmlmKHVybC5tYXRjaCgvbWd0di5jb20vZyk9PSdtZ3R2LmNvbScpe1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cubWd0di5jb219JztcXG4gICAgICAgIH0gZWxzZSAqL1xcbiAgICAgICAgaWYgKC9cXFxcLmZsdi8udGVzdCh1cmwpJiYhL1VzZXItQWdlbnQvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsID09PSAnJyB8fCB1cmwgPT09IHZpcFVybCkge1xcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxuICAgICAgICB9IGVsc2UgaWYoIS8jaXNWaWRlbz10cnVlIy8udGVzdCh1cmwpKXtcXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ3N0cmluZycmJlBhcnNlU1tzdHJdLm1hdGNoKC9odHRwLio/PS8pKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuaWreaPkuW8gOWni+mAmueUqOaJp+ihjOWFjeWXhSBkZWZhdWx0UGFyc2VXZWI6XFxcIit0aW1lb3V0KTtcXG4gICAgICAgIC8vbG9nKFxcXCLpu5jorqR4NVxcXCIrUGFyc2VTLmRlZmF1bHRQYXJzZVdlYik7XFxuICAgICAgICBpZih3aXRoQmF0Y2gpe1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihleHRyYS5wbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmZXh0cmEucGxheVVybExpc3QubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0LmZpbHRlcihpdD0+aXQhPT0oUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwpO1xcbiAgICAgICAgICAgICAgICBsZXQgbmFtZUxpc3QgPSBleHRyYS5uYW1lTGlzdDtcXG4gICAgICAgICAgICAgICAgbmFtZUxpc3QudW5zaGlmdChzdHIpO1xcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBleHRyYS5uYW1lTGlzdD11bmlxdWUyKG5hbWVMaXN0KTtcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSB1bmlxdWUyKGV4dHJhLnBsYXlVcmxMaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBleHRyYSA9IHt9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKChQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCx0aW1lb3V0LGV4dHJhKTooUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmw7XFxuICAgIH0gZWxzZSBpZih0eXBlb2Yoc3RyKT09PSdzdHJpbmcnJiZzdHIubGVuZ3RoPjEmJih0eXBlb2YgUGFyc2VTW3N0cl09PSd1bmRlZmluZWQnfHwhUGFyc2VTW3N0cl0pJiYhL15odHRwLy50ZXN0KHN0cikpe1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+i/m+ihjOaWreaPkumFjee9rizmjqjojZDmi4nlj5bpgZPplb/nsr7pgIkhXFxcXG7mo4DmtYvliLDml6DmlYjnmoTop6PmnpDphY3nva46JytzdHI7XFxuICAgIH1lbHNlIHtcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKHN0ciArIHZpcFVybCx0aW1lb3V0KTtcXG4gICAgfVxcbn1cXG5cXG52YXIgcGxheVBhcnNlID0ge1xcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwsIExhYmVsKSB7XFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBqc1VybCA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpLmNqO1xcbiAgICAgICAgICAgIHZhciBMYWJlbCA9IGs7XFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSBiYXNlNjREZWNvZGUocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IHVuZXNjYXBlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmYS5pbmNsdWRlcyhwZGF0YS5mcm9tKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBkYXRhLnVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgTGFiZWwpXFxuICAgIH1cXG59O1xcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxuICAgIC8qXFxuICAgIGlmIChnZXRWYXIoXFxcImlqay10eFxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiMVxcXCIpIHtcXG4gICAgICAgIHNldEl0ZW0oXFxcInRpeGluZ1xcXCIsIFxcXCIxXFxcIilcXG4gICAgICAgIGNsZWFyVmFyKFxcXCJpamstdHhcXFwiKVxcbiAgICB9XFxuICAgIGlmIChnZXRJdGVtKFxcXCJ0aXhpbmdcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5YWN6LSj5aOw5piOJyxcXG4gICAgICAgICAgICBjb250ZW50OiAn5pys56iL5bqP5LiN5o+Q5L6b6KeG6aKR6Kej5p6Q5pyN5YqhXFxcXG7miYDmnInlhoXlrrnlnYfku47nlKjmiLfliIbkuqvkuK3mlLbpm4ZcXFxcbuS7heS+m+a1i+ivleWSjOWtpuS5oOS6pOa1gVxcXFxuXFxcXG7noa7lrprljbPorqTlj6/vvIzkuI3lho3mj5DphpInLFxcbiAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoXFxcImlqay10eFxcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eCueWHu+S6huehruiupFxcXCJcXG5cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICAgKi9cXG59XFxuLypcXG5pZiAoIWdldFZhcihcXFwidGl4aW5nXFxcIikpIHtcXG4gICAgbXpQb3B1cCgpO1xcbiAgICBwdXRWYXIoJ3RpeGluZycsJ29rJyk7XFxufVxcbiovXFxuZnVuY3Rpb24gc2F2ZUJ1dHRvbihjb250ZW50LG5hbWUpIHtcXG4gICAgbmFtZSA9IG5hbWV8fCcnO1xcbiAgICB2YXIgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYheKYheKYhScpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDIpIHtcXG4gICAgICAgIHZhciBfZHQgPSBwYXJzZVBhc3RlKGRhdGFbMF0pO1xcbiAgICAgICAgY29udGVudCA9IF9kdC5zdWJzdHIoMCwgNikgIT09ICdlcnJvcjonID8gX2R0IDogJyc7XFxuICAgIH1cXG4gICAgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYhScpO1xcbiAgICB2YXIgdHlwZSA9IGRhdGFbMF07XFxuICAgIHZhciBhcnJMaXN0ID0gW107XFxuICAgIHZhciBvYmpDb2RlID0ge307XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDIgJiYgZGF0YVswXSAhPT0gJ+ebtOmTvicpIHtcXG4gICAgICAgIHZhciBvYmpLZXkgPSBkYXRhWzFdO1xcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZGF0YVsyXTtcXG4gICAgICAgIGlmICh0eXBlID09PSAnTXlQYXJzZVMnKSB7XFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBiYXNlNjREZWNvZGUob2JqVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG9ialZhbHVlLnNwbGl0KCdmdW5jdGlvbicpLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICBldmFsKCdvYmpWYWx1ZT0nICsgb2JqVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMCwgb2JqS2V5KTsgLy/mt7vliqDpobnnm67pnZ7liKDpmaRcXG4gICAgICAgIG9iakNvZGVbb2JqS2V5XSA9IG9ialZhbHVlO1xcblxcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICfnm7Tpk74nKSB7XFxuICAgICAgICBhcnJMaXN0ID0gZGF0YTtcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDEpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgYXJyTGlzdCA9IG51bGw7XFxuICAgIH1cXG4gICAgaWYgKGFyckxpc3QgIT0gbnVsbCkge1xcbiAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgaWYobmFtZSl7Ly/liKDpmaTlkI3np7DliJfooajlkozku6PnoIFcXG4gICAgICAgICAgICBqc29uLnRpdGxlLnJlbW92ZShuYW1lKTtcXG4gICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGFyckxpc3QgPSBhcnJMaXN0LmNvbmNhdChqc29uLnRpdGxlKTtcXG4gICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoYXJyTGlzdCkpO1xcbiAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvYmpDb2RlKTtcXG4gICAgICAgIGlmICh0eXBlID09PSAn5rWL6K+VJykge1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7XFxuICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWcuY2opKTtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIFBhcnNlU1tkYXRhWzFdXSA9PSBcXFwiZnVuY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVNbZGF0YVsxXV0oZGF0YVsyXSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIoUGFyc2VTW2RhdGFbMV1dICsgZGF0YVsyXSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lkv53lrZjlhoXlrrlcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aXoOazleivhuWIq+i/meS4quWGheWuueWRolxcXCJcXG4gICAgfVxcbn1cXG4vLyDku6XkuIvku6PnoIHljYPkuIfkuI3opoHmlL7lh7rmnaXlkKbliJnmiqXplJlcXG5pZiAoZ2V0SXRlbSgndXBkYXRlRGF0ZScpICE9IHVwZGF0ZURhdGUpIHtcXG4vLyBpZiAodHJ1ZSkge1xcbiAgICAvLyDmiopmdW5jdGlvbuWPmOaIkHN0cmluZ1xcbiAgICBsZXQgZnVuY3Rpb25Db2RlID0gc2F2ZUJ1dHRvbiArICc7JyttelBvcHVwO1xcbiAgICAvLyB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLCBmZXRjaChfbXlTZXQuY2tMaW5rICsgJ3Bsc2NQYXJzZS5odG1sJykpO1xcbiAgICBzZXRJdGVtKCdteUZ1bmN0aW9uJywgZnVuY3Rpb25Db2RlKTtcXG4gICAgc2V0SXRlbSgndXBkYXRlRGF0ZScsIHVwZGF0ZURhdGUpO1xcbn1cXG52YXIgYmpJdGVtID0ge1xcbiAgICBoZlBsdWdpbjogZnVuY3Rpb24ocGFyc2VSb3V0ZSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICBpZiAoZmlsZUV4aXN0KGspKSB7XFxuICAgICAgICAgICAgICAgIHZhciBjamNhY2hlID0gZ2V0VmFyKCdjakNhY2hlJyk7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2goaykpO1xcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzLmNqID0gY2pjYWNoZTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGssICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgdmFyIG9sZFJvdXRlID0gZ2V0VmFyKCdvbGRDb25maWcnKTtcXG4gICAgICAgICAgICAgICAgdmFyIG9sZENvbmZpZyA9IGpzb24uc2V0dGluZ3M7XFxuICAgICAgICAgICAgICAgIG9sZENvbmZpZy5jaiA9IGNqY2FjaGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgJC5zdHJpbmdpZnkob2xkQ29uZmlnKSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aBouWkjeaIkOWKnyc7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mcgOimgeWFiOaLieWPluWIl+ihqCdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBwYXJzZVJvdXRlKVxcbiAgICB9LFxcbiAgICBwdWxsQ29kZTogZnVuY3Rpb24oaykge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgcHVsbE1vZGUgPSBrWzBdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0ga1sxXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VGaWxlID0gZmV0Y2gocGFyc2VSb3V0ZSk7XFxuICAgICAgICAgICAgaWYgKCFwYXJzZUZpbGUpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSk7XFxuICAgICAgICAgICAgICAgIHNldHRpbmdzID0gIXNldHRpbmdzID8ge30gOiBKU09OLnBhcnNlKHNldHRpbmdzKTtcXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7fTtcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncyA9IHNldHRpbmdzO1xcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gW107XFxuICAgICAgICAgICAgICAgIGpzb24uY29kZXMgPSB7fTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIHBhcnNlRmlsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBwYXJzZVRpdGxlID0gW107XFxuICAgICAgICAgICAgdmFyIHBhcnNlQ29kZT17fTtcXG4gICAgICAgICAgICB2YXIgY2pMaW5rID0gZ2V0VmFyKCdwbHVnaW5MaW5rJyk7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXC9cXFxcLy8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKGNqTGluay5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC/mj5Lku7blkI0vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbExpbmsgPSBjakxpbmsuc3BsaXQoJ+aPkuS7tuWQjScpWzBdLnJlcGxhY2UoL1tcXFxcc10vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+ino+aekOS6keWJquWIh+advzonK3JlYWxMaW5rKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB5UGFzdGUgPSBwYXJzZVBhc3RlKHJlYWxMaW5rKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFwvXFxcXC8vLnRlc3QoeVBhc3RlKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoeVBhc3RlLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlUz09PSd1bmRlZmluZWQnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bkuKrpuKHmr5vmj5Lku7Ys6YeM6Z2i6L+eUGFyc2VT5a+56LGh6YO95rKh5pyJISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6bih5q+b5o+S5Lu25omn6KGM5oql6ZSZOlxcXFxuJytlLm1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiDveivhuWIq+S6keWJquWIh+adv+S4reeahOWGheWuuTpcXFxcbicreVBhc3RlLnN1YnN0cmluZygwLDEwMCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2pMaW5rID09PSAnUeelnicpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGZldGNoKCdoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dCcpLnNwbGl0KCdcXFxcbicpO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIGppZXhpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcmJicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcmJicpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKC9eI1thLXpBLVowLTldezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jVxcbiAgICAgICAgICAgICAgICBlbHNlIGlmKC9eI1tcXFxcU117MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2N5Lu75oSP6Z2e56m65a2X56ym5LiyXFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7dGFza0NhbGwsIHRhc2tSdW4sdGFza1JlcX0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90YXNrQ2FsbD9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCflvIDlp4vmiafooYzku7vliqHku5PlupPojrflj5bmlq3lv7Xmj5Lku7bnpo/liKnlj6Pku6QnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSB0YXNrQ2FsbCgxNywnRG5GdWxpJyxbY2pMaW5rXSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXQgPSBKU09OLnBhcnNlKHJlc3VsdC5yZXN1bHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhyZXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldC5vcHQ9PT0nZXJyb3InKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrcmV0Lm1zZztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J3VybCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHJldC5yZXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gaHRtbC5pbmNsdWRlcygnaHR0cCcpPyBodG1sOmJhc2U2NERlY29kZShodG1sKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gYXJyLm1hdGNoKC9bXFxcXFNdKj8sLio/W1xcXFxzXS9nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBqaWV4aSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcsJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzFdLnNwbGl0KFxcXCJcXFxcblxcXCIpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0nangnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXFxcU10qPyxodHRwW1xcXFxTXS8udGVzdChyZXQucmV0KSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSByZXQucmV0LnNwbGl0KCcsJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJywnKVsxXS5zcGxpdCgnXFxcXG4nKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9eaHR0cC8udGVzdChyZXQucmV0KSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnXFxcXG4nKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquefpeeahOemj+WIqTpcXFxcbicrcmV0LnJldDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndmlwSngnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPS9mdW5jdGlvbi8udGVzdChjb2RlKT9ldmFsKGNvZGUpOmNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S7k+W6k+mdnuacgOaWsOeJiOaIluiAheemj+WIqeekvuWKn+iDveW8gOWPkeS4rSdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoY2pMaW5rPT09J+aWreaPkicpe1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL15oaWtlcjpcXFxcL1xcXFwvfF5maWxlOlxcXFwvXFxcXC98Xmh0dHB8XlxcXFwvc3RvcmFnZVxcXFwvfF5cXFxcL3NkY2FyZFxcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgaWYoL15cXFxcL3N0b3JhZ2VcXFxcL3xeXFxcXC9zZGNhcmRcXFxcLy8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpbmsgPSAnZmlsZTovLycrY2pMaW5rO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChjakxpbmspKTtcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Y+j5Luk5pyJ6K+vJ1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBsb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGp4SnVkZ2UgPSB0eXBlb2YgUGFyc2VTID09ICdvYmplY3QnO1xcbiAgICAgICAgICAgIHZhciBsYkp1ZGdlID0gdHlwZW9mKHBhcnNlVGl0bGUpID09ICdvYmplY3QnO1xcbiAgICAgICAgICAgIGlmIChqeEp1ZGdlIHx8IGxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgLy8gaWYgKHB1bGxNb2RlID09PSAn5YiX6KGoJykge1xcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKCFsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgIC8vICAgICB9XFxuICAgICAgICAgICAgICAgIC8vICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICAvLyAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxuICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgLy8g5LiN566h5ouJ5Y+W5Luj56CB6L+Y5piv5YiX6KGo6YO96KaB5oqK5YiX6KGo5ouJ5LqGXFxuICAgICAgICAgICAgICAgIGlmICghbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICBsb2cocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIHNjT2JqZWN0ID0gW1xcXCJDaXR5SVBcXFwiLCBcXFwicGNVQVxcXCIsIFxcXCJjYWNoZU0zdThcXFwiLFxcXCJpc1ZpZGVvXFxcIiwgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxcImRlZmF1bHRQYXJzZVdlYlxcXCIsXFxcIm1hb3NzXFxcIiwgXFxcIkxMUVxcXCIsXFxcInBhcnNlTGNcXFwiXTtcXG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09PSAn5Luj56CBJykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbFBhcnNlUyA9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2NPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yaWdpbmFsUGFyc2VTW3NjT2JqZWN0W2ldXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWxQYXJzZVMgPW9yaWdpbmFsUGFyc2VTLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KVswXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb3JpZ2luYWxQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoUGFyc2VTKT09XFxcInVuZGVmaW5lZFxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieS7o+egge+8jOS4jeWPr+aLieWPllxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPlicgKyBwdWxsTW9kZSArICfmiJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrojrflj5bliLDlr7nosaEnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIFtrLCBfbXlTZXQucGFyc2VSb3V0ZV0pXFxuICAgIH0sXFxuICAgIHB1bGxTY3JpcHQ6IGZ1bmN0aW9uKGNqLCB4NSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHZhciB4NUZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/JztcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB2YXIgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1swXSwgY2pGaWxlKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMV0sIHg1RmlsZSk7XFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE9sZFYnKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bmiJDlip8nO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquaIkOWKn+iOt+WPluWGheWuuSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgW2NqLCB4NV0pXFxuICAgIH0sXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxuICAgICAgICByZXR1cm4gXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6cmVkXFxcIiB0aXRsZT1cXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXCI+5YigIOmZpCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6I0Y1NzQ3NFxcXCIgdGl0bGU9XFxcIumakOiXj3x8JyArIGJpYW5qaSArICdcXFwiPumakCDol48nLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGRjgwMDBcXFwiIHRpdGxlPVxcXCLkv67mlLl8fCcgKyBiaWFuamkgKyAnXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXCI+572uIOmhticsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIuenu+WKqHx8JyArIGJpYW5qaSArICdcXFwiPuenuyDliqgnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnva7lupV8fCcgKyBiaWFuamkgKyBsYkxlbmd0aCArICdcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7lnLDmnb/liIbkuqsnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLkupHliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7kupHmnb/liIbkuqsnXSxcXG4gICAgICAgICAgICBjb2w6ICcyJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcbiAgICAgICAgICAgICAgICAvLyDkv67mlLks6L+q6L+qLDAgICDmk43kvZznsbvlnoss5ZCN56ewLOe0ouW8lVxcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG5ld0lucHV0WzBdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5ld0lucHV0WzFdO1xcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxuICAgICAgICAgICAgICAgIHZhciBudW0yID0gbmV3SW5wdXRbM107XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5Yig6ZmkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgayA9IFtuYW1lLCBudW1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaAu+aEn+inieetm+mAieaIluiAheaQnOe0ouWQju+8jOeUseS6jm51beeahOS9jee9ruS4jeWvueWPr+iDveS8muWIoOmZpOmUmSzkuovlrp7lpoLmraQs5bey5L+uP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLljbPlsIbliKDpmaQ6IFxcXCIgKyBuYW1lKS5jb25maXJtKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfliKDpmaRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGspO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi6ZqQ6JePXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfpmpDol49cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPr+iDveaYr+S4que9keWdgCwg5oKo5Y+v6YCJ5oup5Yig6ZmkXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuS/ruaUuVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuQ29kZSA9IG5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlcyA9IGpzb24udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5OYW1lID0gXFxcIui/meaYr+WQjeensFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkNvZGUgPSBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5OYW1lID0gbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLnJ1bGUoKGssdGl0bGVzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcInNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7YmFjaygpO1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLlu7rorq7mjInpu5jorqTnmoTku6PnoIHmoLzlvI/kv67mlLnlk6ZcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcignaW5wdXRfZWRpdCcsIGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXCItMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICfkv67mlLnimIUnICsgbmFtZSArICfimIUnICsgY29kZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+5qC85byP5Li677ya5pON5L2c57G75Z6L4piF5qCH6aKY4piFZnVuY3Rpb24oKXvoh6rlrprkuYnlhoXlrrl9PGJyPuivt+WLv+Whq+WFpeWFtuS7luagvOW8jycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNhdmVCdXR0b24sbmFtZSx0aXRsZXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wQXIgPSBnZXRWYXIoJ2lucHV0X2VkaXQnKS5zcGxpdCgn4piFJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodG1wQXIubGVuZ3RoPDIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+u5pS55qC85byP5pyJ6K+v77yM6K6/6Zeu6KKr5ouS57udJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3TmFtZSA9IHRtcEFyWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5ld05hbWUhPT1uYW1lJiZ0aXRsZXMuaW5jbHVkZXMobmV3TmFtZSkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn5qOA5rWL5Yiw5ZCM5ZCN5o6l5Y+jOicrbmV3TmFtZSsnLOaYr+WQpuimhueblj8nKS5jb25maXJtKChzYXZlQnV0dG9uLG5hbWUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5XFxcXG7or7foh6rooYzmo4DmtYvopobnm5blkI7nmoTlhoXlrrknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LHNhdmVCdXR0b24sbmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYodHlwZW9mKGNvZGUpPT09J3N0cmluZycmJmNvZGUubGVuZ3RoPjIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gY29kZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uLG5hbWUsdGl0bGVzKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMyOThBMDhcXFwiPuS/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuTmFtZSwgbkNvZGVdLHRpdGxlcykgLy9bbmFtZSwganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpXSlcXG4gICAgICAgICAgICAgICAgICAgIC8qfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+q5pyJ572R5Z2A5oiW6ICF5qCH6aKYLCDkuI3mlK/mjIHkv67mlLlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIue9rumhtlxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLnva7lupVcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IGpzb24udGl0bGUuaW5kZXhPZihuYW1lKTsgLy/ov5nmoLfmiY3kvJrlvpfliLDmraPnoa7nmoTntKLlvJVcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihudW0+LTEpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bTIsIDAsIGl0ZW1bMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/msqHmib7liLA6JytuYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuenu+WKqFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignYmlhbmppJywgJ+enu+WKqCMnICsgayk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bSk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLliIbkuqtcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5LqR5YiG5LqrXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gdHlwZW9mIGpzb24uY29kZXNbbmFtZV0gPT0gJ2Z1bmN0aW9uJyA/ICQuc3RyaW5naWZ5KGpzb24uY29kZXNbbmFtZV0pIDoganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gJ015UGFyc2VT4piFJyArIG5hbWUgKyAn4piFJyArIGJhc2U2NEVuY29kZShwYXJzZVRleHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSAn55u06ZO+4piFJyArIGpzb24udGl0bGVbbnVtXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ+S6keWIhuS6qycgJiYgcGFyc2VUZXh0LnN1YnN0cigwLCA4KSA9PSAnTXlQYXJzZVMnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9IHNoYXJlUGFzdGUocGFyc2VUZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGV4dC5zdWJzdHIoMCwgNikgIT0gJ2Vycm9yOicgPyAnY29weTovLycgKyBwYXJzZVRleHQgKyAnXFxcXG7imIXimIXimIVcXFxcbicgKyAnTXlQYXJzZVPvvJonICsgbmFtZSA6ICd0b2FzdDovL+WIhuS6q+Wksei0pSEh5LqR5Ymq6LS05p2/5Y+v6IO95oyC5LqGJztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvcHk6Ly8nICsgcGFyc2VUZXh0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aaguS4jeaUr+aMgSc7XFxuICAgICAgICAgICAgICAgIH0gLy9zd2l0Y2jnmoRcXG4gICAgICAgICAgICB9KSAvL1N0cmluZ+eahFxcbiAgICAgICAgfSkgLy9zdHJpbmdpZnnnmoRcXG4gICAgfSxcXG4gICAgeGpQYXJzZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcIikucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICBldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcInNhdmVCdXR0b24oaW5wdXQpO2JhY2soKTtjbGVhclZhcignaW5wdXRfYWRkJylcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcIui+k+WFpeato+ehruagvOW8j+WGheWuuVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiaW5wdXRfYWRkXFxcIiwgaW5wdXQpJyxcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXCItMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ2lucHV0X2FkZCcpLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPuaMieaPj+i/sOivieagvOW8j+i+k+WFpSwg6K+35Yu/5aGr5YWl5YW25LuW5qC85byPPGJyPuacrOWcsOWPo+S7pDog5pON5L2c57G75Z6L4piF5ZCN56ew4piF5Luj56CBPGJyPuS6keWPo+S7pDog6ZO+5o6l4piF4piF4piF5ZCN56ewOyDnuq/nvZHlnYA6IOebtOmTvuKYhXVybDHimIV1cmwyJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnbm9Mb2FkaW5nJykubGF6eVJ1bGUoKHNhdmVCdXR0b24pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfYWRkJykpO1xcbiAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0pXFxuICAgIH0sXFxuICAgIHlkUGFyc2U6IGZ1bmN0aW9uKEJKbW9kZSwgaSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgQSA9IGtbMF0uc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICB2YXIgQiA9IGtbMV07XFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGpzb24udGl0bGUuc3BsaWNlKEEsIDEpOyAvLyAxOiDmoIforrDlvIDlp4vkvY3nva7vvIwyOiDliKDpmaTliLDlk6rkuKrkvY3nva5cXG4gICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShCLCAwLCBpdGVtWzBdKTsgLy8gMTog5ZCM5LiK77yMMjogMOihqOekuuS4jeWIoOmZpO+8jDM6IOa3u+WKoOWvueixoVxcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgY2xlYXJWYXIoJ2JpYW5qaScpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgW0JKbW9kZSwgaV0pXFxuICAgIH0sXFxuICAgIHBsc2NQYXJzZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+aJuemHj+WIoOmZpOino+aekCcsXFxuICAgICAgICAgICAgICAgIGRlc2M6ICdhdXRvJiZmbG9hdCcsXFxuICAgICAgICAgICAgICAgIHVybDogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0pXFxuICAgIH1cXG59O1xcblxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcbiAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5zZXRQYXJzZSgpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiwg+eUqOi3r+eUsVwiLFwicGF0aFwiOlwiUm91dGVcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IGQgPSBbXTtcXG5jb25zdCBkYXRhID0ge307XFxuXFxuZGF0YS5vbGRDb25maWcgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbmRhdGEuY2pSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIjtcXG5kYXRhLng1Um91dGUgPSBcXFwiZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbFxcXCI7XFxuXFxuXFxuZGF0YS5qeExhenkgPSBcXFwiZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKCdcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFwiJykpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KVxcXCI7XFxuXFxuZGF0YS5zelBhcnNlID0gXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIjtcXG5cXG5kYXRhLnNldFBhcnNlID0gZnVuY3Rpb24oKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBkZXNjOiAnNzk1JyxcXG4gICAgICAgIHVybDogdGhpcy54NVJvdXRlLFxcbiAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgfSk7XFxuICAgIHZhciBvbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcXG4gICAgdmFyIG5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xcbiAgICB2YXIgdmVyc2lvblRpcHMgPSBwYXJzZUZsb2F0KG5ld1YpID4gcGFyc2VGbG9hdChvbGRWKSA/ICfigJjigJjmnInmlrDniYjmnKw6IHYnICsgbmV3ViA6ICfigJjigJgnO1xcbiAgICB2YXIgcGljcyA9IFtcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL3Nlb3Z4LTIwLTEwJTIwKDkyKS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgyMDcpLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmE0LnNpbmFpbWcuY24vbGFyZ2UvOWJkOWIxNjdneTFmd3JoNXhvbHRkajIxaGMwdTB0YXguanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmV5dTRubDZqMzFoYzB1MGFoci5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvZDdlNjBiOTkwNzQyMDkzZC5qcGVnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwLzkxYWQ2ZDY1MzhiZjg2ODkuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmVzbDVwbWxqMzFoYzB4Y3drYS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMy5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZ2pkazc0b2ozMWhjMHUwZHFuLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDMyMCkuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoODAzKS5qcGcnXFxuICAgIF07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBpbWc6IHBpY3NbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApXSxcXG4gICAgICAgIHRpdGxlOiB2ZXJzaW9uVGlwcyArICfigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPjxicj7jgIDjgIDngrnlh7vkuIrmlrnlpLTlg4/ov5vlhaXnvJbovpE8YnI+54K55q2k6L+b5YWl6K665Z2b5biW5a2Q5YiX6KGoJyxcXG4gICAgICAgIGRlc2M6ICflvZPliY3niYjmnKw6IHYnICsgb2xkVixcXG4gICAgICAgIHVybDogJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3VzZXIvMTk1OCcsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzEnXFxuICAgIH0pO1xcbiAgc2V0UmVzdWx0KGQpO1xcbn1cXG5cXG5zd2l0Y2ggKGdldFBhcmFtKFxcXCJ0eXBlXFxcIikpIHtcXG4gICAgY2FzZSBcXFwi6K6+572uXFxcIjpcXG4gICAgICAgIGRhdGEuc2V0UGFyc2UoKTtcXG4gICAgICAgIC8vc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIue8lui+kVxcXCI6XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuanhMaXN0KCk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG5cXHRjYXNlIFxcXCLkuLvpophcXFwiOlxcblxcdCAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdGhlbWU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikudGhlbWVJbml0KCk7XFxuICAgICAgICBicmVhaztcXG5cXHRjYXNlIFxcXCLop6PmnpBcXFwiOlxcblxcdCAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhNYW5hZ2U/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuanhNYW5hZ2UoKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgJC5leHBvcnRzID0gZGF0YTtcXG4gICAgICAgIGJyZWFrO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekOmhueS4u+eVjOmdolwiLFwicGF0aFwiOlwianhJdGVtXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nKSkucnVsZSk7XFxudmFyIGlzTG9naW4gPSBmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX1cXG5mdW5jdGlvbiBiYnNZWigpIHtcXG4gICAgdmFyIF8weDQ3YTliNCA9IHtcXG4gICAgICAgICdKeFNNbic6IGZ1bmN0aW9uKF8weDI0OTk1MiwgXzB4NGFiYzE1KSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI0OTk1MiArIF8weDRhYmMxNTtcXG4gICAgICAgIH0sXFxuICAgICAgICAnTEd3bUMnOiAn56e75YqoIycsXFxuICAgICAgICAnR3ZEVlknOiBmdW5jdGlvbihfMHg0NjFmMmQsIF8weDU0MDU3MSkge1xcbiAgICAgICAgICAgIHJldHVybiBfMHg0NjFmMmQgKyBfMHg1NDA1NzE7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ1dmZUhEJzogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6I0ZFOUEyRVxcXCI+JyxcXG4gICAgICAgICdFcUlscyc6ICfnp7vliqg6ICcsXFxuICAgICAgICAnRWZmYm4nOiAndGV4dF8yJyxcXG4gICAgICAgICdSeGt4QSc6IGZ1bmN0aW9uKF8weDMyYTdkMCwgXzB4MWE5MzJjKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDMyYTdkMChfMHgxYTkzMmMpO1xcbiAgICAgICAgfSxcXG4gICAgICAgICdWQkdKSCc6ICdqZFJvdXRlJyxcXG4gICAgICAgICdCWmdSdCc6IGZ1bmN0aW9uKF8weDI2OTg0ZSwgXzB4NWNjOTI2KSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI2OTg0ZSA9PT0gXzB4NWNjOTI2O1xcbiAgICAgICAgfSxcXG4gICAgICAgICdyZ0dDQyc6ICd3RFZFYicsXFxuICAgICAgICAnTWN6T1cnOiBmdW5jdGlvbihfMHgyODgwYmYsIF8weDJkOTMwNiwgXzB4OTc3ODdhKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI4ODBiZihfMHgyZDkzMDYsIF8weDk3Nzg3YSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ0ZVamRtJzogJ2Jic1laJyxcXG4gICAgICAgICdscUZoYic6IGZ1bmN0aW9uKF8weDQzYmJlNikge1xcbiAgICAgICAgICAgIHJldHVybiBfMHg0M2JiZTYoKTtcXG4gICAgICAgIH0sXFxuICAgICAgICAnRlVScHknOiBmdW5jdGlvbihfMHgyMjY1YzIsIF8weGExZDU2OCwgXzB4MjlkZTAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDIyNjVjMihfMHhhMWQ1NjgsIF8weDI5ZGUwMSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ1hJT2JCJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFwiXFxcXFxcXCI7J1xcbiAgICB9O1xcbiAgICBpZiAoIV8weDQ3YTliNFsnUnhreEEnXShnZXRWYXIsIF8weDQ3YTliNFsnVkJHSkgnXSkpIHtcXG4gICAgICAgIGlmIChfMHg0N2E5YjRbJ0JaZ1J0J10oXzB4NDdhOWI0WydyZ0dDQyddLCAnSlZrQVonKSkge1xcbiAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0xHd21DJ10sIGkpID09IEJKbW9kZSA/IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0d2RFZZJ10oXzB4NDdhOWI0WydXZmVIRCddLCBfMHg0N2E5YjRbJ0VxSWxzJ10pLCB4c0xpc3QpIDogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj4nICsgeHNMaXN0LFxcbiAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLCBpKSxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NDdhOWI0WydFZmZibiddXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIF8weDQ3YTliNFsnTWN6T1cnXShwdXRWYXIsIF8weDQ3YTliNFsnRlVqZG0nXSwgXzB4NDdhOWI0WydscUZoYiddKGlzTG9naW58fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSkpO1xcbiAgICAgICAgICAgIF8weDQ3YTliNFsnRlVScHknXShwdXRWYXIsICdqZFJvdXRlJywgXzB4NDdhOWI0WydYSU9iQiddKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZ2V0VmFyKF8weDQ3YTliNFsnRlVqZG0nXSk7XFxufVxcbnZhciBqeEl0ZW0gPSB7XFxuICAgICdqeExpc3QnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBfMHg0YzA0MjcgPSB7XFxuICAgICAgICAgICAgJ1VWV29GJzogZnVuY3Rpb24oXzB4MjZiYjA3LCBfMHgyMjFiNGQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDI2YmIwNyArIF8weDIyMWI0ZDtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdjb2xvcic6ZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXG4gICAgICAgICAgICAgICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ2t6V0RLJzogZnVuY3Rpb24oXzB4NDg1NGE5LCBfMHgzZTk4YzUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4NTRhOSArIF8weDNlOThjNTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdYWHlRcic6ICfnp7vliqgjJyxcXG4gICAgICAgICAgICAnZ3RVbmonOiBmdW5jdGlvbihfMHg1OWFhZjcsIF8weDIyYzY2Yikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NTlhYWY3ICsgXzB4MjJjNjZiO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ1V0ZldmJzogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGRTlBMkVcXFxcXFxcIj4nLFxcbiAgICAgICAgICAgICdRT3ZKVic6ICfnp7vliqg6ICcsXFxuICAgICAgICAgICAgJ0FCRXdCJzogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPicsXFxuICAgICAgICAgICAgJ296eldHJzogJ3RleHRfMicsXFxuICAgICAgICAgICAgJ25XZlZSJzogZnVuY3Rpb24oXzB4NDgwZjNhLCBfMHg0Yzg0ZmMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4MGYzYSArIF8weDRjODRmYztcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdKQ2NOWSc6ICdwYXJzZVJvdXRlJyxcXG4gICAgICAgICAgICAncmdESXAnOiAnYmlhbmppJyxcXG4gICAgICAgICAgICAnaG9JZEonOiAn4oCY4oCY4oCZ4oCZPGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj7mlrAg5bu6IOinoyDmnpAnLFxcbiAgICAgICAgICAgICdGckdPSCc6IGZ1bmN0aW9uKF8weDEyZDZkYiwgXzB4MmEwNjhkKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgxMmQ2ZGIgPCBfMHgyYTA2OGQ7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnb0NDU2onOiBmdW5jdGlvbihfMHgxOWIxNzgsIF8weDRlZjhmNikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTliMTc4ID09PSBfMHg0ZWY4ZjY7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnSFpobGMnOiBmdW5jdGlvbihfMHg1Y2FlMDMsIF8weDI2ZTI0Mikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NWNhZTAzID09IF8weDI2ZTI0MjtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdjZ0llQSc6IGZ1bmN0aW9uKF8weDI1ZTM2OCwgXzB4OGJjOGU5KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNWUzNjggKyBfMHg4YmM4ZTk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAneGRyRnYnOiBmdW5jdGlvbihfMHg0YWI1ZDgsIF8weDIxMjQyZikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFiNWQ4ICsgXzB4MjEyNDJmO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3l3anV4JzogZnVuY3Rpb24oXzB4NWUzMDUxLCBfMHg0ZTAyMzApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgXzB4MWQ4YmIxID0gZ2V0VmFyKF8weDRjMDQyN1snSkNjTlknXSk7XFxuICAgICAgICB2YXIgXzB4M2I4OWFiID0gcGFyc2VGaWxlWyd0aXRsZSddO1xcbiAgICAgICAgdmFyIF8weDQ5ZGE5NiA9IGdldFZhcihfMHg0YzA0MjdbJ3JnRElwJ10pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXzB4NGMwNDI3Wydob0lkSiddLFxcbiAgICAgICAgICAgIGRlc2M6J+azqOaEjzrkvY3nva7mk43kvZzlip/og73lj6rlnKjliIbnsbvnrZvpgInkuLrlhajpg6jml7bnlJ/mlYhcXFxcbuS4i+aWueaQnOe0ouaMieWQjeensOaIluWcsOWdgCzph43nva7or7fnlZnnqbrmiJbngrnop6PmnpDmlbDph4/mjInpkq4nLFxcbiAgICAgICAgICAgIHVybDogYmpJdGVtWyd4alBhcnNlJ10oKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmkJzntKInLFxcbiAgICAgICAgICAgIGRlc2M6J21lbmd4JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonaW5wdXQnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdkcC5zZWFyY2hKeCcsaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTEsXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJyksXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKT0+e1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBmaWx0ZXJzID0gWyflhajpg6gnLCfpk77mjqUnLCdqc29uJywn5YWN5ZeFJ107XFxuICAgICAgICBmb3IobGV0IG8gaW4gZmlsdGVycyl7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6Z2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PWZpbHRlcnNbb10/J+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj4nK2ZpbHRlcnNbb106ZmlsdGVyc1tvXSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4X2ZpbHRlcicsaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sZmlsdGVyc1tvXSksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgXzB4MmVjYmU1ID0gXzB4M2I4OWFiWydsZW5ndGgnXTtcXG4gICAgICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxuICAgICAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J+mTvuaOpScpe1xcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PighL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J3N0cmluZycpO1xcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSflhY3ll4UnKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT50eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J2Z1bmN0aW9uJyk7XFxuICAgICAgICB9ZWxzZSBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J2pzb24nKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J3N0cmluZycpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYoZ2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKV0rJycpLmluY2x1ZGVzKGdldFZhcignZHAuc2VhcmNoSngnKSl8fGl0LmluY2x1ZGVzKGdldFZhcignZHAuc2VhcmNoSngnLCcnKSkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpcXFwi6Kej5p6Q5pWwOlxcXCIrXzB4NGMwNDI3LmNvbG9yKF8weDNiODlhYi5sZW5ndGgsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTpcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2RwLnNlYXJjaEp4Jyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6YeN572uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIOS4i+mdouaYr+ino+aekOWIl+ihqOaOkuWIl1xcbiAgICAgICAgLy8gZm9yICh2YXIgXzB4ZTJjM2Q4ID0gMHgwOyBfMHg0YzA0MjdbJ0ZyR09IJ10oXzB4ZTJjM2Q4LCBfMHgyZWNiZTUpOyBfMHhlMmMzZDgrKykge1xcbiAgICAgICAgZm9yIChsZXQgXzB4ZTJjM2Q4IGluIF8weDNiODlhYikge1xcbiAgICAgICAgICAgIHZhciBfMHgzMzc4OGMgPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXG4gICAgICAgICAgICB2YXIgXzB4Mzc4NzFlID0gXzB4NGMwNDI3WyduV2ZWUiddKF8weDMzNzg4YywgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFwvXFxcXC8vZywgJycpO1xcbiAgICAgICAgICAgIGlmICgv56e75YqoLyBbJ3Rlc3QnXShfMHg0OWRhOTYpKSB7XFxuICAgICAgICAgICAgICAgIGlmIChfMHg0YzA0MjdbJ29DQ1NqJ10oJ3VLTHhGJywgJ3VLTHhGJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WydIWmhsYyddKF8weDRjMDQyN1snWFh5UXInXSArIF8weGUyYzNkOCwgXzB4NDlkYTk2KSA/IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ2NnSWVBJ10oXzB4NGMwNDI3WydVdGZXZiddLCBfMHg0YzA0MjdbJ1FPdkpWJ10pLCBfMHgzNzg3MWUpIDogXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4Mzc4NzFlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6ICd0ZXh0XzInXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHgyYmM2MTggPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHg1Y2Y0MTcgPSBfMHg0YzA0MjdbJ1VWV29GJ10oXzB4MmJjNjE4LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoL+enu+WKqC8gWyd0ZXN0J10oXzB4NDlkYTk2KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1sna3pXREsnXShfMHg0YzA0MjdbJ1hYeVFyJ10sIF8weGUyYzNkOCkgPT0gXzB4NDlkYTk2ID8gXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbJ1V0ZldmJ10sIF8weDRjMDQyN1snUU92SlYnXSksIF8weDVjZjQxNykgOiBfMHg0YzA0MjdbJ0FCRXdCJ10gKyBfMHg1Y2Y0MTcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsIF8weGUyYzNkOCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MTE5MzY1ID0gW18weDJiYzYxOCwgXzB4NGMwNDI3WydndFVuaiddKF8weGUyYzNkOCwgJ3x8JyldWydqb2luJ10oJ3x8Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WyduV2ZWUiddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4NWNmNDE3KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NGMwNDI3WydvenpXRyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd4bFNlbGVjdCddKF8weDExOTM2NSwgXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgXzB4YjcwMTkyID0gW18weDMzNzg4YywgXzB4ZTJjM2Q4ICsgJ3x8J11bJ2pvaW4nXSgnfHwnKTtcXG4gICAgICAgICAgICAgICAgLy8g6L+q6L+q5b2x6ZmifHwwfHwgIOWQjeensHx857Si5byVIOeahOaVsOe7hFxcbiAgICAgICAgICAgICAgICAvLyBBQkV3QiDmmK/nu7/oibIgXzB4Mzc4NzFlIOaYr+agh+mimOWQjeensCAgeGRyRnbmmK/lrZfnrKbkuLLov57mjqXlh73mlbBcXG4gICAgICAgICAgICAgICAgLy8gbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXG4gICAgICAgICAgICAgICAgbGV0IGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KTiicsJyMwMDUxZmYnKTtcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKGpzb24uY29kZXNbXzB4Mzc4NzFlXSk9PT0nZnVuY3Rpb24nKXtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KSvycsJyNmZjcwMDAnKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGpzb24uY29kZXNbXzB4Mzc4NzFlXSk9PT0ndW5kZWZpbmVkJyl7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gbGV0IGNscyA9ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+JztcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gXzB4NGMwNDI3Wyd4ZHJGdiddKF8weDRjMDQyN1snQUJFd0InXSwgZmxhZytfMHgzNzg3MWUpO1xcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGl0bGUgPSBmbGFnK2NscytfMHgzNzg3MWU7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGZsYWcrXzB4NGMwNDI3LmNvbG9yKF8weDM3ODcxZSwnIzI5OEEwOCcpO1xcbiAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAvLyAndGl0bGUnOiBfMHgzNzg3MWUsXFxuICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0YzA0MjdbJ296eldHJ10sXFxuICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd4bFNlbGVjdCddKF8weGI3MDE5MiwgXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIF8weDRjMDQyN1sneXdqdXgnXShjbGVhclZhciwgXzB4NGMwNDI3WydyZ0RJcCddKTtcXG4gICAgfSxcXG4gICAgJ2xxRmlsZSc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIF8weDU0MWQ3NiA9IHtcXG4gICAgICAgICAgICAnYVdpUnMnOiBmdW5jdGlvbihfMHg0OGQ3N2IsIF8weDE5MTYxZiwgXzB4MjFjYjg1KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0OGQ3N2IoXzB4MTkxNjFmLCBfMHgyMWNiODUpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3dTZm56JzogZnVuY3Rpb24oXzB4NDg1MGVhKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0ODUwZWEoKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdxUlFkQSc6ICdqZFJvdXRlJyxcXG4gICAgICAgICAgICAnV1FpcWsnOiAndmFyIHhkUm91dGU9XFxcIlxcXCI7JyxcXG4gICAgICAgICAgICAncHNHZHQnOiBmdW5jdGlvbihfMHgxNzA3ODAsIF8weDNiNTEyYSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTcwNzgwID09IF8weDNiNTEyYTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdpbXhyaSc6ICd0cnVlJyxcXG4gICAgICAgICAgICAnblNrangnOiBmdW5jdGlvbihfMHg5NWJmMzgsIF8weDMxM2YyNSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4OTViZjM4ICE9PSBfMHgzMTNmMjU7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnaVZOZU0nOiAnZWVMSm0nLFxcbiAgICAgICAgICAgICdJd01UbCc6ICcwfDF8NXw5fDExfDN8Nnw3fDEwfDR8Mnw4JyxcXG4gICAgICAgICAgICAneGZkSGsnOiAn5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysJyxcXG4gICAgICAgICAgICAnckdMdUEnOiAn5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanNcXFxceDBh572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgICAgICAgICAgJ3pRU0xFJzogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICdodmlEbCc6IGZ1bmN0aW9uKF8weDI2ZGI2MiwgXzB4MzEyZjFjKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmRiNjIoXzB4MzEyZjFjKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdaeFVndCc6ICfmk43kvZzmjIflvJUnLFxcbiAgICAgICAgICAgICdzV0ZvYyc6IGZ1bmN0aW9uKF8weDJhMDQ0YiwgXzB4MTQ5YTNmKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyYTA0NGIgKyBfMHgxNDlhM2Y7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnT0VoYXQnOiAn5ouJ5Y+W5Luj56CBJyxcXG4gICAgICAgICAgICAnWnZ0U3UnOiAn57yW6L6R6Kej5p6QJyxcXG4gICAgICAgICAgICAnZ1hLTWInOiAndG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLFxcbiAgICAgICAgICAgICdXQ09EQyc6IGZ1bmN0aW9uKF8weDRhZDNkNSwgXzB4MzFmYTFlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0YWQzZDUgPCBfMHgzMWZhMWU7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnckFrQWgnOiAndGV4dF8zJyxcXG4gICAgICAgICAgICAneVdhT0knOiAn5oGi5aSN5o+S5Lu26Lev5b6E5Li66buY6K6kJyxcXG4gICAgICAgICAgICAneWp5aksnOiAn5b2T5YmN6K6+572u5Li6OiAnLFxcbiAgICAgICAgICAgICd0SFhlRSc6ICfmi4nlj5bop6PmnpDliJfooajmiJbogIXop6PmnpDku6PnoIEnLFxcbiAgICAgICAgICAgICdHTVVZdSc6ICflrZjmlL7ot6/lvoQ6IC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcbiAgICAgICAgICAgICdtcFpCWic6ICdsaW5lX2JsYW5rJyxcXG4gICAgICAgICAgICAneHZxZ0YnOiAn6L6T5YWl5pyJ5pWI5o+S5Lu25Zyw5Z2AJyxcXG4gICAgICAgICAgICAnaGV1S3gnOiAncHV0VmFyKFxcXCJwbHVnaW5MaW5rXFxcIixpbnB1dCknLFxcbiAgICAgICAgICAgICdJaWZpYSc6ICfigJjigJjigJnigJk8c3Ryb25nPjxiaWc+55m75b2V5o+Q56S6JyxcXG4gICAgICAgICAgICAnUEZSSEEnOiAn5L2/55So55u45YWz5Yqf6IO96ZyA55m75b2V6KeG55WM6K665Z2b6LSm5Y+3XFxcXG7lpoLmnInpl67popjliY3lvoDorrrlnZvkuobop6Por6bmg4UnLFxcbiAgICAgICAgICAgICdVTHdrVCc6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyL3NpZ25pbidcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoXzB4NTQxZDc2Wydwc0dkdCddKF8weDU0MWQ3Nlsnd1NmbnonXShiYnNZWiksIF8weDU0MWQ3NlsnaW14cmknXSkpIHtcXG4gICAgICAgICAgICBpZiAoXzB4NTQxZDc2WyduU2tqeCddKF8weDU0MWQ3NlsnaVZOZU0nXSwgXzB4NTQxZDc2WydpVk5lTSddKSkge1xcbiAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLCAnYmJzWVonLCBfMHg1NDFkNzZbJ3dTZm56J10oaXNMb2dpbil8fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSk7XFxuICAgICAgICAgICAgICAgIF8weDU0MWQ3NlsnYVdpUnMnXShwdXRWYXIsIF8weDU0MWQ3NlsncVJRZEEnXSwgXzB4NTQxZDc2WydXUWlxayddKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgXzB4NGQyNWZmID0gXzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXFxuICAgICAgICAgICAgICAgICAgICBfMHg0YTk3YzkgPSAweDA7XFxuICAgICAgICAgICAgICAgIHdoaWxlICghIVtdKSB7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF8weDRkMjVmZltfMHg0YTk3YzkrK10pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneGZkSGsnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxTY3JpcHQnXShfbXlTZXRbJ2NqY2FjaGUnXSwgX215U2V0Wyd4NWNhY2hlJ10pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3JHTHVBJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2h2aURsJ10oZXZhbCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgXzB4NTQxZDc2WydxUlFkQSddKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogJ2xpbmVfYmxhbmsnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICczJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDJhYjM5OSA9ICdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO3NldFJlc3VsdChkKTsnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsnWnhVZ3QnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiB0eXBlb2YgY3pHdWlkZSA9PSAnZnVuY3Rpb24nID8gY3pHdWlkZSgpIDogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZFJvdXRlID0gXzB4NTQxZDc2WydzV0ZvYyddKHhkUm91dGUsIF9teVNldFsncGFyc2VSb3V0ZSddKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfMHgzYTlhZmUgPSBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ+aLieWPluWIl+ihqCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfliJfooagnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ09FaGF0J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfku6PnoIEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p2dFN1J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydodmlEbCddKGZpbGVFeGlzdCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgJ3BhcnNlUm91dGUnKSkgPT0gISFbXSA/IF8weDJhYjM5OSA6IF8weDU0MWQ3NlsnZ1hLTWInXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF8weDFhMmNkYiA9IDB4MDsgXzB4NTQxZDc2WydXQ09EQyddKF8weDFhMmNkYiwgXzB4M2E5YWZlWydsZW5ndGgnXSk7IF8weDFhMmNkYisrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDNhOWFmZVtfMHgxYTJjZGJdWyd0aXRsZSddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBfMHgzYTlhZmVbXzB4MWEyY2RiXVsndXJsJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2WydyQWtBaCddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneVdhT0knXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ2hmUGx1Z2luJ10oX215U2V0WydwYXJzZVJvdXRlJ10pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3NXRm9jJ10oXzB4NTQxZDc2Wyd5anlqSyddICsgbXlTZXRbJ2NqJ10sICdcXFxcbuWtmOaUvui3r+W+hDogL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsndEhYZUUnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAndG9hc3Q6Ly/or7flnKjkuIvmlrnpgInpobnmk43kvZwnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ0dNVVl1J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEwJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnbXBaQlonXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3h2cWdGJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhJzoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZVZpc2libGUnOiAhW10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsICdwbHVnaW5MaW5rJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uQ2hhbmdlJzogXzB4NTQxZDc2WydoZXVLeCddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ0lpZmlhJ10sXFxuICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydQRlJIQSddLFxcbiAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydVTHdrVCddLFxcbiAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn07XFxuJC5leHBvcnRzID0ganhJdGVtO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QVXJs57yW6L6RXCIsXCJwYXRoXCI6XCJFZGl0VXJsXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuaPkuS7tuaOpeWPo+iuvue9rlxcXCIpO1xcbmxldCBkID0gW107XFxubGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxubGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxubGV0IHNlbGVjdGVkID0gZ2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBcXFwiXFxcIik7XFxubGV0IGNsYXNzVGFiID0gW1xcbiAgICBbXFxcIumAieaLqVxcXCIsIFxcXCIwXFxcIl0sXFxuICAgIFtcXFwi5L+u5pS5XFxcIiwgXFxcIjFcXFwiXSxcXG4gICAgW1xcXCLliKDpmaRcXFwiLCBcXFwiMlxcXCJdXFxuXTtcXG5sZXQgY2xhc3NBID0gZ2V0VmFyKFxcXCJjbGFzc1xcXCIsIFxcXCIwXFxcIik7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJWYXIoXFxcImNsYXNzXFxcIik7XFxufSkpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5re75Yqg5paw55qE6Kej5p6QXFxcIixcXG4gICAgdXJsOiAkKFxcXCJcXFwiLFxcXCLop6PmnpDlkI0mJuino+aekFVSTFxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbiAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICBpZihpbnB1dC5zcGxpdChcXFwiJiZcXFwiKS5sZW5ndGghPT0yKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5qC85byP5LiN5q2j56GuXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHBhcnNlVXJsQXJyYXkucHVzaChpbnB1dCk7XFxuICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIiwgcGFyc2VVcmxUZXh0KTtcXG4gICAgICAgIFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxufSk7XFxuZm9yIChsZXQgaXRlbSBvZiBjbGFzc1RhYikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGl0ZW1bMV0gPT09IGNsYXNzQSA/IFxcXCLigJzigJxcXFwiICsgaXRlbVswXSArIFxcXCLigJ3igJ1cXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XFxuICAgICAgICAgICAgcHV0VmFyKFxcXCJjbGFzc1xcXCIsIGtleSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9LCBpdGVtWzFdKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSk7XFxufVxcbmxldCBmdW5jO1xcbnN3aXRjaCAoY2xhc3NBKSB7XFxuICAgIGNhc2UgXFxcIjBcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcbuabtOaUueaOpeWPoz4gXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIHRpdGxlICsgXFxcIiYmXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCB0aXRsZSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIjFcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxuICAgICAgICAgICAgcmV0dXJuICQodXJsLCBcXFwi6K+36L6T5YWl44CMXFxcIiArIHRpdGxlICsgXFxcIuOAjeeahOaWsOaOpeWPo1xcXCIpLmlucHV0KCh0aXRsZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcbi8pO1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXlbaW5kZXhdID0gdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwiMlxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu6K6k5Yig6Zmk44CMXFxcIiArIHRpdGxlICsgXFxcIuOAje+8n1xcXCIpLmNvbmZpcm0oKHRpdGxlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiLCBwYXJzZVVybFRleHQpO1xcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VVcmxBcnJheVswXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgcGFyc2VVcmxBcnJheVswXS5zcGxpdChcXFwiJiZcXFwiKVsxXSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgcGFyc2VVcmxBcnJheVswXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuXFxufVxcbmZvciAobGV0IGkgaW4gcGFyc2VVcmxBcnJheSkge1xcbiAgICBsZXQgaXRlbSA9IHBhcnNlVXJsQXJyYXlbaV0uc3BsaXQoXFxcIiYmXFxcIik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc2VsZWN0ZWQgPT0gaXRlbVsxXSA/IFxcXCLigJjigJhcXFwiICsgaXRlbVswXSArIFxcXCLigJnigJlcXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogZnVuYyhpdGVtWzFdLCBpdGVtWzBdLCBpKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aKY566h55CGXCIsXCJwYXRoXCI6XCJ0aGVtZVwiLFwicnVsZVwiOlwianM6XFxuICAgIGZ1bmN0aW9uIHRoZW1lSW5pdCgpe1xcbiAgICAgICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfkv67mlLknLCfliKDpmaQnLCflr7zlh7onXTtcXG5cXG4gICAgICAgIGZvcih2YXIgaSBpbiBvcHRpb25zKXtcXG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXG4gICAgICAgICAgICBsZXQgZmxhZyA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDokKG9wdGlvbikubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcigndGhlbWUuZG5fb3B0aW9uJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5pON5L2c57G75Z6L5Li6OicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICAgICAgbGV0IG15VGhlbWVzID0ge307XFxuICAgICAgICBsZXQgdGhlbWVzID0ge307XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIG15VGhlbWVzID0gSlNPTi5wYXJzZShmZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICAgICAgdGhlbWVzID0gbXlUaGVtZXMudGhlbWVzW215VGhlbWVzLm5vd190aGVtZV07XFxuICAgICAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiflr7zlhaUnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGlmKC9e5pat5o+S5Li76aKYQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5LkuLvpopgtJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc1RoZW1lJiZoYXNUaGVtZS5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXlUaGVtZXMudGhlbWVzW2pdLm5hbWUgPT09IG5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKG15VGhlbWVzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXkuLvpopg6XFxcXG4nK25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcbicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmlrDlop4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgpLnJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGxldCBkPVtdO1xcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4u+mimOWQjeensCcsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pat5o+SLeiTneiOk+S4u+mimFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJylcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19hZGRfbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDovpPlhaXnmoTmmK86JytuZXdfYWRkX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuS7o+eggVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJ0aGVtZS5uZXdfYWRkX2NvZGVcXFwiLGlucHV0KSdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTon5L+d5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi/mOayoeWhq+WGmeS4u+mimOWQjeensOWRoidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RoZW1lID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGhlbWUgPSBKU09OLnBhcnNlKGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+v55qE5Li76aKYanNvbuagvOW8jzpcXFxcbicrZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld1RoZW1lLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKG5ld1RoZW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmlrDlop7mlq3mj5LkuLvpopg6JytuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpteVRoZW1lcy50aGVtZXM/J+S4u+mimOWIl+ihqDrlhbHorqE6Jytjb2xvcihteVRoZW1lcy50aGVtZXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4quS4u+mimCc6XFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluS4u+mimOWIl+ihqFxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6XFxcIuaBouWkjeWHuuWOguiuvue9rlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIHVybDokKFxcXCLlpoLmnpzkvaDnmoTkuLvpopjmsqHms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcIikuY29uZmlybSgoKT0+e1xcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVzID0ge25hbWU6J+m7mOiupOS4u+mimCcsY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sfTtcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lRGVmID0ge1xcXCJuYW1lXFxcIjpcXFwi5pat5b+15Y6f55quXFxcIixcXFwiY2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNjNTQ2NGFcXFwifSxcXFwic2F2ZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA2ODAwNlxcXCJ9LFxcXCJzYXZlQ2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNUJGQzVcXFwifSxcXFwidGlwc0J0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJiYXJsYWJlbFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9LFxcXCJiYXJJbnB1dFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNEMDZCNkNcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0Y5RjBEQVxcXCJ9LFxcXCJzZWxlY3RcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNEMDZCNkNcXFwifX07XFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S5Li76aKY5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGZvcih2YXIgaSBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgIGxldCBub3dUaGVtID0gbXlUaGVtZXMudGhlbWVzW2ldO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLm5vd190aGVtZT09PW5vd1RoZW0ubmFtZT8n8J+RiScrbm93VGhlbS5uYW1lOm5vd1RoZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKTtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXl0aGVtZUNvZGUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShteXRoZW1lQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+aWreaPkuS4u+mimEAnK215dGhlbWUubmFtZSsnQCcrdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5KGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKS5pbnB1dCgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2ldPUpTT04ucGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/ruaUuSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk5Li76aKYOicrbXl0aGVtZS5uYW1lKyc/JykuY29uZmlybSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnNwbGljZShpLDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy5ub3dfdGhlbWU9bXl0aGVtZS5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbXl0aGVtZS5uYW1lKyfkvZzkuLrpu5jorqTkuLvpopgnO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LG5vd1RoZW0sbXlUaGVtZXMsaSx0aGVtZVJvdXRlKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfVxcbiQuZXhwb3J0cy50aGVtZUluaXQ9dGhlbWVJbml0O1wifSx7XCJuYW1lXCI6XCLmk43kvZzmjIflvJVcIixcInBhdGhcIjpcIkd1aWRlXCIsXCJydWxlXCI6XCI8aHRtbD5cXG48aGVhZD5cXG4gICAgPG1ldGEgY2hhcnNldD1cXFwiVVRGLThcXFwiPlxcbjwvaGVhZD5cXG48Ym9keT5cXG48c3Ryb25nPiA8YmlnPuaLieWPluevhzwvYmlnPiA8L3N0cm9uZz5cXG48YnIgLz4g5pON5L2c6aG65bqP77yaXFxuPGJyIC8+IDEu5pu05paw6YGT6ZW/5LuT5bqTUHJv5YiwNzbniYjmnKxcXG48YnIgLz4gMi7mi4nlj5bkuLvmj5Lku7blkoznvZHpobXohJrmnKxcXG48YnIgLz4gMy7mjqjojZDnm7TmjqXmi4nlj5bku6PnoIE8cz7mi4nlj5bliJfooajihpLmi4nlj5bku6PnoIE8L3M+XFxuPGJyIC8+XFxuPGJyIC8+XFxuPHN0cm9uZz48YmlnPuWPo+S7pOevhzwvYmlnPjwvc3Ryb25nPlxcbjxiciAvPummlumhtei+k+WFpeahhuaUr+aMge+8mlxcbjxiciAvPjEu5YiG5Lqr5Ye65p2l55qE5ZCM57O75YiX5o+S5Lu25LqR5Ymq6LS05p2/5Y+j5LukXFxuPGJyIC8+Mi7mnKrliqDlr4bnmoTlkIzns7vliJfmj5Lku7blnLDlnYAs5pSv5oyB5pys5Zyw5paH5Lu25aaC5Lul5LiL5qC85byP5byA5aS055qEOmZpbGU6Ly8saGlrZXI6Ly8sL3N0b3JhZ2VcXG48YnIgLz4zLlHnpZ5cXG48YnIgLz40LuaWreaPklxcbjxiciAvPjUuI+mBk+mVv+eyvumAiVxcbjxiciAvPjYuI2Lnq5lcXG48YnIgLz43LiPlgI3pmYZcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+57yW6L6R56+HPC9iaWc+PC9zdHJvbmc+XFxuPGJyIC8+6ZqQ6JeP5Yqf6IO96ZyA55+l77yaXFxuPGJyIC8+6ZqQ6JeP5Yqf6IO95piv5LuO5YiX6KGo5LiK5Yig6Zmk5qCH6aKY77yM5pWF5peg5aSN546w5Yqf6IO9XFxuPGJyIC8+55yL5YeG5LqG77yM5LiN55So55qE5omN54K56ZqQ6JePXFxuPGJyIC8+6KaB5aSN546w55qE6K+d5Y675L+u5pS55paw55qETXlQYXJzZS5qc29u77yM5ZyodGl0bGXnmoTmlbDnu4TpgqPmjInmoLzlvI/mt7vliqDmoIfpophcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+5a6M57uTPC9iaWc+PGJyIC8+PC9zdHJvbmc+XFxuPHA+djMuNDks5bCP55m95pyA5ZCO55qE5YCU5by6LOWwj+eZveWFs+aAgOaooeW8jzwvcD5cXG48cD7kuIDplK7lrp7njrDphY3nva7lrozmr5XljbPlj6/pgJrov4fmlK/mjIHprZTmlq3nmoTlsI/nqIvluo/nnIvop4bpopHvvIzlm57lvZLnmb3lq5bop4bpopHov5nkuKrpnIDmsYLmnKzouqs8L3A+XFxuPHA+5o6o6I2Q5L2/55So6Z2S6LGGLGFwcOW9seinhi5kcDwvcD5cXG48cD7prZTmlq0o5pat5o+S6YGT6ZW/6a2U5pS554mIKeW3suW8g+Wdkei3kei3r++8jOaEn+iwouWOn+S9nOiAheaWreW/teeahOaPkuS7tuino+aekOWPiuacrOWwj+eoi+W6j+aguOW/g+S7o+eggTwvcD5cXG48L2JvZHk+XFxuPC9odG1sPlwifSx7XCJuYW1lXCI6XCLmtYvor5XmlbDmja5cIixcInBhdGhcIjpcImRlbW9EYXRhXCIsXCJydWxlXCI6XCJqczpcXG4gICAgbGV0IGRlbW9EYXRhID0ge1xcbiAgICAgICAg54ix5aWH6Im6OlsnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXpwN3FnaDIza2cuaHRtbCcsJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzJiYzh0azhyNnVnLmh0bWwnXSxcXG4gICAgICAgIOS8mOmFtzpbJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU0TlRneE1UWTJNQT09Lmh0bWwnLCdodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNU9EWXhNakF6Tmc9PS5odG1sJ10sXFxuICAgICAgICDohb7orq86WydodHRwczovL3YucXEuY29tL3gvY292ZXIvbTQ0MWUzcmpxOWt3cHNjL3AwMDQwZ2ltNGZ6Lmh0bWwnLCdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB4aDkzMTN2L3owMDM5dGJobzdxLmh0bWwnXSxcXG4gICAgICAgIOiKkuaenDpbJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzcyMDYxLzEyMTkzNTU4Lmh0bWwnLCdodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM2MzI4Ni8xNDI5NTgyMy5odG1sJ10sXFxuICAgICAgICDlk5Tlk6nlk5Tlk6k6WydodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwMzgxMjE3JywnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDQwODEyMycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvc3MzMzQzNCcsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92aWRlby9hdjMzNjM0ODY2MyddLFxcbiAgICAgICAg5pCc54uQOlsnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzk0NTc1ODQuaHRtbCcsJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85MTgyNjQ2Lmh0bWwnXSxcXG4gICAgICAgIOilv+eTnDpbJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjU1MTMzMjEyNTY1NDY0NzMxMCcsJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSddLFxcbiAgICAgICAg6Zi/6YeMOlsnJ10sXFxuICAgICAgICBQUFRWOlsnaHR0cDovL3YucHB0di5jb20vc2hvdy9USW5kV3NJb21OWTV0eDguaHRtbCcsJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvU0NRNXRoNkU5REtWRTNzLmh0bWwnXSxcXG4gICAgICAgIOWSquWSlTpbJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD02MzM1MTE3NDMnLCdodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NzE2MjcwMzE5J10sXFxuICAgICAgICDkuZDop4Y6WydodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvNzU4NDMwNTkuaHRtbCcsJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS8yNDIyMDkwMS5odG1sI3ZpZD0yNDIyMDkwMSddLFxcbiAgICAgICAgMTkwNTpbJ2h0dHBzOi8vdmlwLjE5MDUuY29tL3BsYXkvODc1NzQwLnNodG1sJywnaHR0cHM6Ly93d3cuMTkwNS5jb20vdm9kL3BsYXkvODgwNjQxLnNodG1sJ10sXFxuICAgICAgICDpo47ooYw6WydodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTMwNDE0MycsJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMTAwODk2My8nXSxcXG4gICAgfVxcblxcbmxldCBkZWZhdWx0U2V0cyA9ICB7XFxuICAgIHF5OiAn5L2g54i556eR5oqAJyxcXG4gICAgeWs6ICfpoobphbcnLFxcbiAgICB0eDogJ+iNo+iAgCcsXFxuICAgIG1nOiAn6JqC6JqB5YWE5byfJyxcXG4gICAgYmw6ICdPS+ino+aekCcsXFxuICAgIHNoOiAn5rGf5rmWRCcsXFxuICAgIHhnOiAn5rGf5rmWRCcsXFxuICAgIGFsOiAn5rGf5rmWRCcsXFxuICAgIHBwOiAn5Lq65Lq66L+3JyxcXG4gICAgbWk6ICcxMDgwJyxcXG4gICAgbGU6ICfov6rlpaXll4XmjqInLFxcbiAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICBmdW46ICfono3lhbQnLFxcbiAgICBvbmU6JzEwODAnLFxcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxufTtcXG5cXG5sZXQgZmxvb3JzID0gJ+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8kOKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkCcuc3BsaXQoJycpO1xcbmxldCBlbW9qaXMgPSAnI++4j+KDo3wq77iP4oOjfDDvuI/ig6N8Me+4j+KDo3wy77iP4oOjfDPvuI/ig6N8NO+4j+KDo3w177iP4oOjfDbvuI/ig6N8N++4j+KDo3w477iP4oOjfDnvuI/ig6N88J+FsO+4j3zwn4Wx77iPfPCfjYd88J+NiHzwn42JfPCfjYp88J+Ni3zwn42MfPCfjY188J+Njnzwn42PfPCfjZB88J+NkXzwn42SfPCfjZN88J+NhXzwn42GfPCfjL188J+NhHzwn4ywfPCfjZ588J+Nlnzwn42XfPCfjZR88J+Nn3zwn42VfPCfjbN88J+Nsnzwn42xfPCfjZh88J+NmXzwn42afPCfjZt88J+NnHzwn42dfPCfjaB88J+Nonzwn42jfPCfjaR88J+NpXzwn42hfPCfjaZ88J+Np3zwn42ofPCfjal88J+Nqnzwn46CfPCfjbB88J+Nq3zwn42sfPCfja188J+Nrnzwn42vfPCfjbx84piVfPCfjbV88J+Ntnzwn423fPCfjbh88J+NuXzwn426fPCfjbt88J+NtCcuc3BsaXQoJ3wnKTtcXG5mbG9vcnMgPSBmbG9vcnMuY29uY2F0KGVtb2ppcyk7XFxuJC5leHBvcnRzLmRlbW9EYXRhID0gZGVtb0RhdGE7XFxuJC5leHBvcnRzLmRlZmF1bHRTZXRzID0gZGVmYXVsdFNldHM7XFxuJC5leHBvcnRzLmZsb29ycyA9IGZsb29ycztcIn0se1wibmFtZVwiOlwi5bel5YW357G7XCIsXCJwYXRoXCI6XCJ1dGlsc1wiLFwicnVsZVwiOlwianM6XFxuLy/pmo/mnLrku47liJfooajmir3lj5bkuIDkuKrlhYPntKBcXG5mdW5jdGlvbiBnZXRPbmUoaXRzKSB7cmV0dXJuICBpdHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKml0cy5sZW5ndGgpXTt9XFxuLy/ljrvph43vvIhFUzYgU2V077yJXFxuZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG59XFxuLy/ojrflj5bliJfooajkuK3ph43lpI3pg73lgLxcXG5mdW5jdGlvbiBkdXBsaWNhdGVzKGFycikge1xcbiAgICBsZXQgcmVzPWFyci5maWx0ZXIoKHgsayk9PntcXG4gICAgICAgIGxldCBhPWsqMSsxO1xcbiAgICAgICAgbGV0IGluZGV4PWFyci5pbmRleE9mKHgsYSk7XFxuICAgICAgICBpZihpbmRleD4tMSl7XFxuICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIGxldCByZT1uZXcgU2V0KHJlcyk7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKHJlKTtcXG59XFxuJC5leHBvcnRzLmdldE9uZSA9IGdldE9uZTtcXG4kLmV4cG9ydHMudW5pcXVlMiA9IHVuaXF1ZTI7XFxuJC5leHBvcnRzLmR1cGxpY2F0ZXMgPSBkdXBsaWNhdGVzO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnrqHnkIZcIixcInBhdGhcIjpcImp4TWFuYWdlXCIsXCJydWxlXCI6XCJqczpcXG4gICAgZnVuY3Rpb24ganhNYW5hZ2UoKXtcXG4gICAgICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgIGxldCBkID0gW107XFxuICAgICAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxuXFxuICAgICAgICBmb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4uanhtX29wdGlvbicsIG9wdGlvbik7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sb3B0aW9uKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxuICAgICAgICBsZXQgTXlKaWV4aSA9IHtqaWV4aXM6W119O1xcbiAgICAgICAgbGV0IGppZXhpcyA9IHt9O1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcbiAgICAgICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXG4gICAgICAgIH1jYXRjaCAoZSkge31cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaWYoL17prZTmlq3op6PmnpDphY3nva5ALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaW5wdXQuc3BsaXQoJ0AnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuino+aekOmFjee9ri0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlUGFzdGUodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzSXQgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXNJdCYmaGFzSXQubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxuJytpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZygn6KaG55uW5a+85YWl5Li76aKYaWQ6JytpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl6Kej5p6Q6YWN572uOlxcXFxuJytuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9LG5hbWUsdXJsLE15SmlleGksanhzUm91dGUpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6Dms5Xor4bliKvnmoTlr7zlhaXlj6Pku6Q6XFxcXG4nK2lucHV0O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKSxcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgbGV0IGlzQXV0byA9IE15SmlleGkuaXNBdXRvO1xcbiAgICAgICAgbGV0IGF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZTtcXG4gICAgICAgIGxldCB0aXBzID0gJ+ino+aekOmFjee9ruWIl+ihqDrlhbHorqE6Jytjb2xvcihNeUppZXhpLmppZXhpcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq6YWN572uLOiHquWKqOaho+W8gOWFszonK2NvbG9yKGlzQXV0bz8n5byAJzon5YWzJywnI2ZmNzAwMCcpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjA/dGlwczpcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXMmJk15SmlleGkuamlleGlzLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuaXNBdXRvID0gIU15SmlleGkuaXNBdXRvO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpcHMgPSBNeUppZXhpLmlzQXV0bz8n5byAJzon5YWzJztcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7oh6rliqjmoaPmqKHlvI/kuLo6Jyt0aXBzXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ119XX07XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey5Yid5aeL5YyWJ1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBsZXQgYXV0b01vZGVUaXBzID0gYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6YCf5bqm5LyY5YWIJzon6aG65bqP5LyY5YWIJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoXFxcIuWkh+iDjuWuoOW5uOaWueahiDpcXFwiKStjb2xvcihhdXRvTW9kZVRpcHMsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8yJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5hdXRvTW9kZSA9IE15SmlleGkuYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6aG65bqP5LyY5YWIJzon6YCf5bqm5LyY5YWIJztcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lpIfog47lrqDlubjmlrnmoYjkuLo6JytNeUppZXhpLmF1dG9Nb2RlXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmNvbG9yKFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFwiLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICAgICAgdXJsOiQoXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFwiKS5jb25maXJtKChqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ10sfV19O1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXG4gICAgICAgICAgICB9LGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBsZXQgY2FjaGVWaWRlb1N3aXRjaCA9IGdldFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKT09PSd0cnVlJz8n5byAJzon5YWzJztcXG4gICAgICAgIGxldCBqeFRpbWVvdXQgPSBnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzcwMDAnKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+Wkmue6v+i3r+e8k+WtmDonKStjb2xvcihjYWNoZVZpZGVvU3dpdGNoLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGNhY2hlVmlkZW9Td2l0Y2gpPT57XFxuICAgICAgICAgICAgICAgIGlmKGNhY2hlVmlkZW9Td2l0Y2g9PT0n5byAJyl7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RwLmNhY2hlVmlkZW8nLCdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sY2FjaGVWaWRlb1N3aXRjaClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbCgn5YWo5bGA6Kej5p6Q6LaF5pe2OicpK2NvbG9yKGp4VGltZW91dCwnI2ZmNzAwMCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcbiAgICAgICAgICAgIHVybDokKGp4VGltZW91dCwn6K+36K6+572u6a2U5pat6Kej5p6Q6LaF5pe2LOW/hemhu+S4uuaVtOaVsCcpLmlucHV0KCgpPT57XFxuICAgICAgICAgICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSA3MDAwO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHB1dFZhcignZHAuanhUaW1lb3V0JyxpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5Li6OicrcGFyc2VJbnQoaW5wdXQpXFxuICAgICAgICAgICAgfSxqeFRpbWVvdXQpXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmiZPlvIDnvJbovpHop6PmnpDmlofku7YnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanhzUm91dGUpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZGl0RmlsZTovLycranhzUm91dGU7XFxuICAgICAgICAgICAgfSxqeHNSb3V0ZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBmb3IobGV0IGkgaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOk15SmlleGkubm93PT09bm93SngubmFtZT8n8J+RiScrbm93SngubmFtZTpub3dKeC5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICBub3dKeDpub3dKeCxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXG4gICAgICAgICAgICAgICAgICAgIGp4c1JvdXRlOmp4c1JvdXRlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd0p4Q29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShub3dKeENvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMuc3BsaWNlKGksMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLm5vdz1ub3dKeC5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbm93SngubmFtZSsn5L2c5Li65b2T5YmN6Kej5p6Q6YWN572uJztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9XFxuJC5leHBvcnRzLmp4TWFuYWdlPWp4TWFuYWdlO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnvJbovpFcIixcInBhdGhcIjpcImp4RWRpdFwiLFwicnVsZVwiOlwianM6XFxuICAgIGxldCB7bm93SngsTXlKaWV4aSxqeHNSb3V0ZX0gPSBNWV9QQVJBTVM7XFxubGV0IG5vd0p4VCA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5ub3dKeCcpfHwne30nKTtcXG5ub3dKeCA9IG5vd0p4VC5uYW1lP25vd0p4VDpub3dKeDtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXG4gICAgY2xlYXJWYXIoXFxcImRuLmp4X3RpdGxlc1xcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiZG4ubm93SnhcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcImRuLmp4bV9uYW1lXFxcIik7XFxufSkpO1xcbmxldCBpZCA9IG51bGw7XFxuZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxuICAgICAgICBpZCA9IGo7XFxuICAgICAgICBicmVhaztcXG4gICAgfVxcbn1cXG5sZXQgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6YWN572u5ZCN56ewJyxcXG4gICAgZGVzYzogXFxcIuino+aekOmFjee9ruWQjeensCzlpoLpgZPplb/mjqjojZBcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ2RuLmp4bV9uYW1lJyxpbnB1dClcXFwiLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOmdldFZhcignZG4uanhtX25hbWUnLCcnKXx8bm93SngubmFtZVxcbiAgICB9LFxcbiAgICBjb2xfdHlwZTonaW5wdXQnXFxufSk7XFxuLy8gbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+aWsOWinicsJ+WIoOmZpCcsJ+aJuemHj+WIoOmZpCcsJ+enu+WKqCddO1xcbmxldCBvcHRpb25zID0gWyfmlrDlop4nLCfliKDpmaQnLCfnp7vliqgnXTtcXG5cXG5mb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxuICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgLy8gY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxuICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywgb3B0aW9uKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSxvcHRpb24pLFxcbiAgICB9KTtcXG59XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6J2xpbmUnXFxufSk7XFxuLy/ojrflj5bmlq3mj5LliJfooahcXG5pZighZ2V0VmFyKFxcXCJkbi5qeF90aXRsZXNcXFwiKSl7XFxuICAgIGxldCB0aXRsZUFyciA9IFtdLCB1cmxBcnIgPSBbXTtcXG4gICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXG4gICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICB0cnkge1xcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcbiAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xcbiAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xcbiAgICB9KTtcXG4gICAgcHV0VmFyKCdkbi5qeF90aXRsZXMnLEpTT04uc3RyaW5naWZ5KHRpdGxlQXJyKSk7XFxufVxcblxcbmxldCB0aXRsZXMgPSBKU09OLnBhcnNlKGdldFZhcignZG4uanhfdGl0bGVzJyl8fCdbXScpO1xcbmxldCB0aXRsZURpYyA9IHtcXG4gICAgYWw6J+mYv+mHjCcsYmw6J+WTlOWTqeWTlOWTqScsZnVuOifpo47ooYwnLGxlOifkuZDop4YnLG1nOifoipLmnpwnLG1pOiflkqrlkpUnLHBwOidQUFRWJyxxeTon54ix5aWH6Im6JyxzaDon5pCc54uQJyxcXG4gICAgdHg6J+iFvuiurycseGc6J+ilv+eTnCcseWs6J+S8mOmFtycsb25lOicxOTA1J1xcbn1cXG5cXG5sZXQgdGl0bGVPcmRlciA9IHthbDo4LGJsOjUsZnVuOjEzLGxlOjExLG1nOjQsbWk6MTAscHA6OSxxeToxLHNoOjYsXFxuICAgIHR4OjMseGc6Nyx5azoyLG9uZToxMn07XFxuXFxuZnVuY3Rpb24gY29tcGFyZU9kKHRpdGxlT3JkZXIpe1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpe1xcbiAgICAgICAgbGV0IHggPSB0aXRsZU9yZGVyW2FdO1xcbiAgICAgICAgbGV0IHkgPSB0aXRsZU9yZGVyW2JdO1xcbiAgICAgICAgcmV0dXJuIHgteTtcXG4gICAgfVxcbn1cXG4vLy0tLS0tLS0tLS0tLS0tLS0tXFxubGV0IGpkcyA9IE9iamVjdC5rZXlzKG5vd0p4KS5maWx0ZXIoaXQ9Pml0IT09J25hbWUnJiZpdCE9PSdvdGgnKTtcXG5qZHMgPSBqZHMuc29ydChjb21wYXJlT2QodGl0bGVPcmRlcikpO1xcbmZvcihsZXQgaiBpbiBqZHMpe1xcbiAgICBsZXQganhzID0gbm93SnhbamRzW2pdXXx8W107XFxuICAgIGxldCB0aXRsZSA9IGpkc1tqXTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOnRpdGxlRGljW3RpdGxlXXx8dGl0bGUsXFxuICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KT0+e1xcbiAgICAgICAgICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxuICAgICAgICAgICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT0n5paw5aKeJyl7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxfdGl0bGUgPSB0aXRsZXMuZmlsdGVyKGl0PT4hanhzLmluY2x1ZGVzKGl0KSk7XFxuICAgICAgICAgICAgICAgIHNlbF90aXRsZSA9IHNlbF90aXRsZS5tYXAoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW2l0XSk9PT0nZnVuY3Rpb24nKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gJ+KAnOKAnOKSv+KAneKAnSc7XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YoanNvbi5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnJztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFnK2l0XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChzZWxfdGl0bGUsMikuc2VsZWN0KChNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv4oCY4oCY4pOK4oCZ4oCZfOKAnOKAnOKSv+KAneKAnS9nLCcnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleS/neWtmDpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGp4cy5wdXNoKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhqeHMpO1xcbiAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKTtcXG4gICAgICAgICAgICB9ZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeClcXG4gICAgfSk7XFxuICAgIGZvcihsZXQgayBpbiBqeHMpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpqeHNba10sXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93Sngsbmp4LGlkLGssbWF4KT0+e1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpKXtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAganhzLnJlbW92ZShuangpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn56e75YqoJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChrLCfnp7vliqjliLDntKLlvJXlpJrlsJE/JykuaW5wdXQoKGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNb3ZlKGFyciwgZnJvbUluZGV4LCB0b0luZGV4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFycltmcm9tSW5kZXhdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShmcm9tSW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSh0b0luZGV4LCAwLCBlbGVtZW50KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJzZUludChpbnB1dCk9PT1rKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/llaXkuZ/msqHlgZonXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHBhcnNlSW50KGlucHV0KT5tYXgtMXx8cGFyc2VJbnQoaW5wdXQpPC0xKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDmnIDlpKfnp7vliqjojIPlm7QwLScrcGFyc2VJbnQobWF4LTEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBuZXdBciA9IGp4cy5zcGxpY2UoaywgMSk7IC8vIOWIoOaOiVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqeHMudW5zaGlmdChuZXdBclswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUoanhzLGsscGFyc2VJbnQoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5YWD57Sg5LiN5pSv5oyB6L+b6KGMOicrZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJylcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LGp4c1trXSxpZCxrLGp4cy5sZW5ndGgpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6J2xpbmUnXFxuICAgIH0pXFxufVxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOifkv53lrZgnLFxcbiAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGlkLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpIT09TXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUpe1xcbiAgICAgICAgICAgIGlmSGFzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpKS5sZW5ndGg+MDtcXG4gICAgICAgICAgICBpZihpZkhhcyl7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvoXkv67mlLnnmoTlkI3np7Dph43lpI0s5LiN5YWB6K645L+d5a2YJ1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0ubmFtZSA9ICBnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyk7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZgnXFxuICAgIH0sTXlKaWV4aSxpZCxqeHNSb3V0ZSlcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcIm5hbWVcIjpcIuWwj+eZveaooeW8j1wiLFwicGF0aFwiOlwic21hbGxXaGl0ZVwiLFwicnVsZVwiOlwianM6XFxuc2V0UGFnZVRpdGxlKCfpgZPplb/nu5nlsI/nmb3nmoTlhbPniLEnKTtcXG5jb25zdCB7Y29sb3IsIHNtYWxsLGFwaX0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG5sZXQgZmlsZVJvb3QgPSBhcGkuaG9zdCsnL2hpa2VydWxlL3p5d19kYXRhLyc7XFxuLy8gbG9nKGZpbGVSb290KTtcXG5sZXQgZCA9IFtdO1xcbnZhciB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG52YXIgdGhlbWVPbmxpbmUgPSBmaWxlUm9vdCsnMTEnO1xcbnZhciBvbGRSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxudmFyIG9sZE9ubGluZSA9IGZpbGVSb290KycxMic7XFxudmFyIG5ld1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcIjtcXG52YXIgbmV3T25saW5lID0gZmlsZVJvb3QrJzEzJztcXG52YXIganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbnZhciBqeE9ubGluZSA9IGZpbGVSb290KycxNCc7XFxudmFyIGNqY2FjaGUgPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcyc7XFxudmFyIHg1Y2FjaGUgPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJztcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5L2g5aW9LOWwj+eZvSzljbPkvb/llaXkuZ/kuI3kvJos5Lmf5Y+v5Lul55yL5piO55m95LiL6Z2i55qE5a2X5ZCnPycpLFxcbiAgICBkZXNjOiflpoLmnpzov5jmmK/kuI3kvJos6K+35Yig5Lul5rC45rK7LOWRiui+nuS4jeiwoicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+aNruivtOS9oOS4jeacjeawlCzkuI3mib/orqToh6rlt7HmmK/lsI/nmb0/XFxcXG7ngrnmiJHlj6rmmK/kuLrkuoblrqPms4TkuIDkuIvkvaDnmoTmhKTmgJI/5ZWl5Lmf5Yir6K+05LqGLOS4i+WOu+aQniEnXFxuICAgIH0pXFxufSk7XFxuZC5wdXNoKHtcXG4gICB0aXRsZTpzbWFsbCgn5Y2V6aG56Kej5p6Q6YCJ5oup55WM6Z2i5Li76aKY5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/nmoTkuLvpopjphY3nva7ku6Xlj4rnvZHpobXmj5Lku7blkozpnZnmgIHpobXpnaInLFxcbiAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex5Li76aKY55qE5ZCnIVxcXFxuJyt0aGVtZVJvdXRlKS5jb25maXJtKChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSk9PntcXG4gICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXG4gICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxuICAgICAgICAgICBsb2codGhlbWVDb2RlKTtcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgfVxcbiAgICAgICBsZXQgY2pGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICBsZXQgeDVGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCI7XFxuICAgICAgIHRyeSB7XFxuICAgICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXG4gICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpO1xcbiAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7XFxuICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSwgdGhlbWVDb2RlKTtcXG4gICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE9sZFZcXFwiKTtcXG4gICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE5ld1ZcXFwiKTtcXG4gICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuLvpopjlt7LmiJDlip/lupTnlKgnXFxuICAgICAgIH1cXG4gICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgIH1cXG4gICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDlj4rpu5jorqTliJfooajmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4pOS4qk15UGFyc2UuanNvbuaWh+S7ticsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOmFjee9ruaWh+S7tuWQpyFcXFxcbicrb2xkUm91dGUrJ1xcXFxuJytuZXdSb3V0ZSkuY29uZmlybSgob2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSk9PntcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/phY3nva7lupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDoh6rliqjmoaPmqKHlvI/mmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahE15SmlleGkuanNvbuaWh+S7ticsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOiHquWKqOaho+aWueahiOWQpyFcXFxcbicranhzUm91dGUpLmNvbmZpcm0oKGp4c1JvdXRlLGp4T25saW5lKT0+e1xcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6Ieq5Yqo5qGj5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sanhzUm91dGUsanhPbmxpbmUpXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+ecn+eahOWVpeS5n+S4jeS8muS6hizov5jmh5LlvpfkuIDkuKrkuKrngrk/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4iui/sOaJgOacieaWh+S7tlxcXFxu5LiA6ZSu5pCe5a6M55u05o6l5Y675pSv5oyB5pat5o+S55qE5bCP56iL5bqP55yL6KeG6aKR5bCx6KGM5ZWmJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfkv67ku5nms5Xlipvml6DovrknLCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE5LiK6L+w5omA5pyJ5paH5Lu25ZCnIVxcXFxu6K+36L6T5YWl6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L655p2l56Gu6K6k5omn6KGM5q2k5pON5L2cJykuaW5wdXQoKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLG9sZFJvdXRlLG5ld1JvdXRlLGp4c1JvdXRlLHRoZW1lT25saW5lLG9sZE9ubGluZSxuZXdPbmxpbmUsanhPbmxpbmUpPT57XFxuICAgICAgICBpZihpbnB1dCE9PSfpgZPplb/kv67ku5nms5Xlipvml6DovrknKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pys5qyh5Y+W5raI5omn6KGMJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXG4gICAgICAgIGlmKCEvbm93X3RoZW1lLy50ZXN0KHRoZW1lQ29kZSkpe1xcbiAgICAgICAgICAgIGxvZygndGhlbWVDb2RlOicrdGhlbWVDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Li76aKY5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgY2pGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICAgbGV0IHg1RnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICAgbGV0IGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXG4gICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICBsZXQgb2xkQ29kZSA9IGZldGNoKG9sZE9ubGluZSk7XFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcbiAgICAgICAgICAgIC8vIGxvZygnb2xkQ29kZTonK29sZENvZGUpO1xcbiAgICAgICAgICAgIC8vIGxvZygnbmV3Q29kZTonK25ld0NvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXG4gICAgICAgICAgICAvLyBsb2coJ2p4Q29kZTonK2p4Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTsgLy8g5ouJ5o+S5Lu2XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7IC8v5ouJ572R6aG15paH5Lu2XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7IC8v5ouJ5Li76aKY5paH5Lu2XFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4T2xkVlxcXCIpO1xcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE5ld1ZcXFwiKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpOyAvL+aLieaWreaPkum7mOiupOmAieaLqeeVjOmdoueahOmFjee9rlxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7IC8v5ouJ5pat5o+S5YaF55qE6Kej5p6QXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpOyAvLyDmi4noh6rliqjmoaPmlofku7ZcXG4gICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LiA6ZSu5qih5byP5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSlcXG59KTtcXG5sZXQgZGVzY0luZm8gPSAn5Li76aKY5paH5Lu2OicrdGhlbWVSb3V0ZSsnXFxcXG7kuLvnlYzpnaLphY3nva46JytvbGRSb3V0ZSsnXFxcXG7lq5bliLDnmoTop6PmnpA6JytuZXdSb3V0ZSsnXFxcXG7oh6rliqjmoaPop6PmnpA6JytqeHNSb3V0ZTtcXG5kZXNjSW5mbys9J1xcXFxu5Li75o+S5Lu2OicrY2pjYWNoZSsnXFxcXG7kuLvphY3nva7pgInmi6nnlYzpnaLmlofku7Y6Jyt4NWNhY2hlO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOifmlofku7bmj4/ov7A6XFxcXG4nK2Rlc2NJbmZvLFxcbiAgICBjb2xfdHlwZTonbG9uZ190ZXh0JyxcXG4gICAgZXh0cmE6e3RleHRTaXplOiAxMyxsaW5lVmlzaWJsZTpmYWxzZX1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9XSxcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwiTXlGaWVsZOG0sOKBv1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5I1wiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxuY29uc3QgZCA9IFtdO1xcbmNvbnN0IGRhdGEgPSB7fTtcXG5cXG5kYXRhLm9sZENvbmZpZyA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuZGF0YS5jalJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiO1xcbmRhdGEueDVSb3V0ZSA9IFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sXFxcIjtcXG5cXG5cXG5kYXRhLmp4TGF6eSA9IFxcXCJldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goJ1xcXCIgKyBkYXRhLm9sZENvbmZpZyArIFxcXCInKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpXFxcIjtcXG5cXG5kYXRhLnN6UGFyc2UgPSBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiO1xcblxcbmRhdGEuc2V0UGFyc2UgPSBmdW5jdGlvbigpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGRlc2M6ICc3OTUnLFxcbiAgICAgICAgdXJsOiB0aGlzLng1Um91dGUsXFxuICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbiAgICB9KTtcXG4gICAgdmFyIG9sZFYgPSBnZXRWYXIoJ2p4T2xkVicpO1xcbiAgICB2YXIgbmV3ViA9IGdldFZhcignanhOZXdWJyk7XFxuICAgIHZhciB2ZXJzaW9uVGlwcyA9IHBhcnNlRmxvYXQobmV3VikgPiBwYXJzZUZsb2F0KG9sZFYpID8gJ+KAmOKAmOacieaWsOeJiOacrDogdicgKyBuZXdWIDogJ+KAmOKAmCc7XFxuICAgIHZhciBwaWNzID0gW1xcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvc2VvdngtMjAtMTAlMjAoOTIpLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDIwNykuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTQuc2luYWltZy5jbi9sYXJnZS85YmQ5YjE2N2d5MWZ3cmg1eG9sdGRqMjFoYzB1MHRheC5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXl1NG5sNmozMWhjMHUwYWhyLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC9kN2U2MGI5OTA3NDIwOTNkLmpwZWcnLFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvOTFhZDZkNjUzOGJmODY4OS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXNsNXBtbGozMWhjMHhjd2thLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmEzLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JnamRrNzRvajMxaGMwdTBkcW4uanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMzIwKS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCg4MDMpLmpwZydcXG4gICAgXTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGltZzogcGljc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCldLFxcbiAgICAgICAgdGl0bGU6IHZlcnNpb25UaXBzICsgJ+KAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+PGJyPuOAgOOAgOeCueWHu+S4iuaWueWktOWDj+i/m+WFpee8lui+kTxicj7ngrnmraTov5vlhaXorrrlnZvluJblrZDliJfooagnLFxcbiAgICAgICAgZGVzYzogJ+W9k+WJjeeJiOacrDogdicgKyBvbGRWLFxcbiAgICAgICAgdXJsOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci8xOTU4JyxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMSdcXG4gICAgfSk7XFxuICBzZXRSZXN1bHQoZCk7XFxufVxcblxcbnN3aXRjaCAoZ2V0UGFyYW0oXFxcInR5cGVcXFwiKSkge1xcbiAgICBjYXNlIFxcXCLorr7nva5cXFwiOlxcbiAgICAgICAgZGF0YS5zZXRQYXJzZSgpO1xcbiAgICAgICAgLy9zZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwi57yW6L6RXFxcIjpcXG4gICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5qeExpc3QoKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcblxcdGNhc2UgXFxcIuS4u+mimFxcXCI6XFxuXFx0ICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90aGVtZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS50aGVtZUluaXQoKTtcXG4gICAgICAgIGJyZWFrO1xcblxcdGNhc2UgXFxcIuino+aekFxcXCI6XFxuXFx0ICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9qeE1hbmFnZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5qeE1hbmFnZSgpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICAkLmV4cG9ydHMgPSBkYXRhO1xcbiAgICAgICAgYnJlYWs7XFxufVwiLFwiZ3JvdXBcIjpcIiPvuI/ig6PpgZPplb/wn5qXXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4tdnVlLmh0bWxcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uaHRtbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCI8IURPQ1RZUEUgaHRtbD5cXFxcbjxodG1sPlxcXFxuPGhlYWQ+XFxcXG4gICAgPG1ldGEgY2hhcnNldD1cXFxcXFxcInV0Zi04XFxcXFxcXCI+XFxcXG4gICAgPG1ldGEgbmFtZT1cXFxcXFxcInZpZXdwb3J0XFxcXFxcXCIgY29udGVudD1cXFxcXFxcIndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsbWluaW11bS1zY2FsZT0xLG1heGltdW0tc2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5vXFxcXFxcXCIgLz5cXFxcbiAgICA8dGl0bGU+UGFyc2VfRG5fdnVlPC90aXRsZT5cXFxcbiAgICA8c2NyaXB0PlxcXFxuICAgICAgICBjb25zdCB2dWVQYXRoID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy92dWUuanMnO1xcXFxuICAgICAgICBpZih0eXBlb2YoZmJhKT09J3VuZGVmaW5lZCd8fCFmYmEpe1xcXFxuICAgICAgICAgICAgdmFyIGZiYSA9IGZ5X2JyaWRnZV9hcHA7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXF1ZXN0KT09J3VuZGVmaW5lZCd8fCFyZXF1ZXN0KXtcXFxcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5nZXRJbnRlcm5hbEpzKCkpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy8gZmJhLmxvZyh2dWVQYXRoKTtcXFxcbiAgICAgICAgICAgIGlmKCFyZXF1ZXN0KHZ1ZVBhdGgpKXtcXFxcbiAgICAgICAgICAgICAgICBmYmEud3JpdGVGaWxlKHZ1ZVBhdGgscmVxdWVzdCgnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9MTgyMycpKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZmV0Y2godnVlUGF0aCkpO1xcXFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgICAgICBmYmEubG9nKGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvLyBmYmEubG9nKCfliqDovb12dWXnu4Tku7blrozmr5UnKTtcXFxcbiAgICAgICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpO1xcXFxuICAgICAgICB9XFxcXG4gICAgPC9zY3JpcHQ+XFxcXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImh0dHBzOi8vdW5wa2cuY29tL3Z1ZUBuZXh0XFxcXFxcXCI+PC9zY3JpcHQ+LS0+XFxcXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFxcXFxcImZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzXFxcXFxcXCI+PC9zY3JpcHQ+LS0+XFxcXG4gICAgPHN0eWxlPlxcXFxuICAgICAgICBib2R5IHtcXFxcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxcXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDBweCAwIDBweDtcXFxcbiAgICAgICAgICAgIC8qICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y5RjBEQTsqL1xcXFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxcXG4gICAgICAgICAgICBmb250LWZhbWlseTogXFxcXFxcXCJNaWNyb3NvZnQgWWFIZWlcXFxcXFxcIixcXFxcXFxcIuWui+S9k1xcXFxcXFwiLFxcXFxcXFwiU2Vnb2UgVUlcXFxcXFxcIiwgXFxcXFxcXCJMdWNpZGEgR3JhbmRlXFxcXFxcXCIsIEhlbHZldGljYSwgQXJpYWwsc2Fucy1zZXJpZiwgRnJlZVNhbnMsIEFyaW1vO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgICNhcHB7XFxcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgICN0aXBze1xcXFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMTBweDtcXFxcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206NXB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC5mdW5ne1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXJcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkaXYuYm94IHtcXFxcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTFweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDNweDtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q6L6T5YWl5qGG5bC65a+4Ki9cXFxcbiAgICAgICAgZm9ybSB7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXFxcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgaW5wdXQsIGxhYmVsLCBzZWxlY3Qge1xcXFxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xcXFxuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKuWtl+S9k+S9jee9riovXFxcXG4gICAgICAgIGlucHV0IHtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDMycHg7XFxcXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDY2cHg7XFxcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBsYWJlbCB7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvKuWwj+ahhiovXFxcXG4gICAgICAgIC5iYXIgbGFiZWwge1xcXFxuICAgICAgICAgICAgLypiYWNrZ3JvdW5kOiAjRDA2QjZDOyovXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHggNTU1cHggNTU1cHggNXB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxcXG4gICAgICAgICAgICB0b3A6IDA7XFxcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxcXG4gICAgICAgIC5iYXIgaW5wdXQge1xcXFxuICAgICAgICAgICAgLypib3JkZXItcmFkaXVzOiA1cHggNTU1cHggNTU1cHggNXB4O1xcXFxuICAgICAgICAgICAgICovXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvKuWIl+ihqCovXFxcXG4gICAgICAgIHNlbGVjdCB7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OjQwcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcXFxcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcbiAgICAgICAgLmxpZWIgc2VsZWN0e1xcXFxuICAgICAgICAgICAgLypib3JkZXItcmFkaXVzOiA0cHg7Ki9cXFxcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDU1NXB4IDVweCA1cHggNTU1cHg7XFxcXG4gICAgICAgICAgICB3aWR0aDogODBweDtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxuICAgICAgICAgICAgcmlnaHQ6IDJweDtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIC8q5aS05YOPKi9cXFxcbiAgICAgICAgLnJvdW5kX2ljb257XFxcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcXFxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcXFxuICAgICAgICB9XFxcXG4gICAgPC9zdHlsZT5cXFxcbjwvaGVhZD5cXFxcbjxib2R5PlxcXFxuPGRpdiBjbGFzcz1cXFxcXFxcImZ1bmdcXFxcXFxcIj5cXFxcbiAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OmxlZnQ7XFxcXFxcXCI+XFxcXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLmNsb3NlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5jbG9zZUJ0bi5jb2xvclxcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJjYW5jZWwoKTtcXFxcXFxcIj7lhbMg6ZetPC9idXR0b24+XFxcXG4gICAgPC9hPlxcXFxuICAgIDxhIGNsYXNzPVxcXFxcXFwiYnRuIGJ0bi1wcmltYXJ5XFxcXFxcXCI+XFxcXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnRpcHNCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxMjBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy50aXBzQnRuLmNvbG9yXFxcXFxcXCIgQGNsaWNrPVxcXFxcXFwic2hvd1RpcHM9IXNob3dUaXBzXFxcXFxcXCI+e3tzaG93VGlwcz9cXFxcXFxcIumakOiXj+aPkOekulxcXFxcXFwiOlxcXFxcXFwi5pi+56S65o+Q56S6XFxcXFxcXCJ9fTwvYnV0dG9uPlxcXFxuICAgIDwvYT5cXFxcbiAgICA8YSBzdHlsZT1cXFxcXFxcImZsb2F0OnJpZ2h0XFxcXFxcXCI+XFxcXG4gICAgICAgIDxidXR0b24gOnN0eWxlPVxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuc2F2ZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuc2F2ZUJ0bi5jb2xvclxcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflvIAnKTtcXFxcXFxcIj7kv50g5a2YPC9idXR0b24+XFxcXG4gICAgPC9hPlxcXFxuXFxcXG48L2Rpdj5cXFxcbjxicj5cXFxcbjxkaXYgaWQ9XFxcXFxcXCJhcHBcXFxcXFxcIj5cXFxcbiAgICA8aDYgaWQ9XFxcXFxcXCJ0aXBzXFxcXFxcXCIgdi1odG1sPVxcXFxcXFwidGlwc1xcXFxcXFwiIHYtc2hvdz1cXFxcXFxcInNob3dUaXBzXFxcXFxcXCI+PC9oNj5cXFxcbiAgICA8ZGl2IGNsYXNzPVxcXFxcXFwiYm94IGJhclxcXFxcXFwiIHYtZm9yPVxcXFxcXFwib3B0aW9uIGluIG9wdGlvbnNcXFxcXFxcIj5cXFxcbiAgICAgICAgPGZvcm0+XFxcXG4gICAgICAgICAgICA8bGFiZWwgdHlwZT1cXFxcXFxcInN1Ym1pdFxcXFxcXFwiIDpzdHlsZT1cXFxcXFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLmJhcmxhYmVsLmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5iYXJsYWJlbC5jb2xvclxcXFxcXFwiPnt7IG9wdGlvbi5uYW1lIH19PC9sYWJlbD5cXFxcbiAgICAgICAgICAgIDxpbnB1dCA6c3R5bGU9XFxcXFxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJJbnB1dC5iYWNrZ3JvdW5kKyc7Ym9yZGVyOiAzcHggc29saWQgJyt0aGVtZXMuYmFySW5wdXQuY29sb3JcXFxcXFxcIiB0eXBlPVxcXFxcXFwidGV4dFxcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJyZXNldFNlbGVjdCh0aGlzLmlkKVxcXFxcXFwiIDpwbGFjZWhvbGRlcj1cXFxcXFxcIm9wdGlvbi5wbGFjZWhvbGRlcnx8cGxhY2Vob2xkZXJcXFxcXFxcIiB2LW1vZGVsPVxcXFxcXFwib3B0aW9uLnZhbHVlXFxcXFxcXCIgdi1iaW5kOmlkPVxcXFxcXFwib3B0aW9uLmlkXFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXFxcXFwibGllYlxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgICAgIDxzZWxlY3QgOnN0eWxlPVxcXFxcXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuc2VsZWN0LmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5zZWxlY3QuY29sb3JcXFxcXFxcIiA6Y2xlYXJhYmxlPVxcXFxcXFwidHJ1ZVxcXFxcXFwiIHNpemU9XFxcXFxcXCIyXFxcXFxcXCIgOmlkPVxcXFxcXFwib3B0aW9uLmlkKydTZWxlY3QnXFxcXFxcXCIgOm5hbWU9XFxcXFxcXCJvcHRpb24uaWRcXFxcXFxcIiBvbmNoYW5nZT1cXFxcXFxcImdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSlcXFxcXFxcIiAgdi1tb2RlbD1cXFxcXFxcIm9wdGlvbi52YWx1ZVxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcXFxcXCJvcHRpb24uaWQhPT0ncWp1JyYmb3B0aW9uLmlkIT09J2NqJ1xcXFxcXFwiIDp2YWx1ZT1cXFxcXFxcInNlbFxcXFxcXFwiIDprZXk9XFxcXFxcXCJpbmRleFxcXFxcXFwiIHYtZm9yPVxcXFxcXFwiKHNlbCxpbmRleCkgaW4gbXlTZWxlY3RcXFxcXFxcIj57eyBzZWwgfX08L29wdGlvbj5cXFxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWVsc2UtaWY9XFxcXFxcXCJvcHRpb24uaWQ9PT0ncWp1J1xcXFxcXFwiIDp2YWx1ZT1cXFxcXFxcInNlbFxcXFxcXFwiIDprZXk9XFxcXFxcXCJpbmRleFxcXFxcXFwiIHYtZm9yPVxcXFxcXFwiKHNlbCxpbmRleCkgaW4gWyfpu5jorqQnXS5jb25jYXQobXlTZWxlY3QpXFxcXFxcXCI+e3sgc2VsIH19PC9vcHRpb24+XFxcXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVxcXFxcXFwic2VsXFxcXFxcXCIgOmtleT1cXFxcXFxcImluZGV4XFxcXFxcXCIgdi1lbHNlIHYtZm9yPVxcXFxcXFwiKHNlbCxpbmRleCkgaW4gY2pTZWxcXFxcXFxcIj57eyBzZWwgfX08L29wdGlvbj5cXFxcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICA8L2Zvcm0+XFxcXG4gICAgPC9kaXY+XFxcXG48L2Rpdj5cXFxcbjxkaXY+XFxcXG4gICAgPGEgdi1mb3I9XFxcXFxcXCJ2ZXIgaW4gdmVyaW5mb1xcXFxcXFwiIHN0eWxlPVxcXFxcXFwiZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjFweDttYXJnaW4tcmlnaHQ6IDIwcHhcXFxcXFxcIiB2LWJpbmQ6aWQ9J3Zlci5pZCcgb25jbGljaz1cXFxcXFxcImRvT3B0aW9uKHRoaXMuaWQpXFxcXFxcXCI+XFxcXG4gICAgICAgIDxpbWcgOnNyYz1cXFxcXFxcInZlci5hdmF0YXJcXFxcXFxcIiBjbGFzcz1cXFxcXFxcInJvdW5kX2ljb25cXFxcXFxcIiAgYWx0PVxcXFxcXFwiXFxcXFxcXCI+XFxcXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXFxcXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXFxcXFwiPnt7IHZlci5hdXRob3IgfX08L3NwYW4+XFxcXG4gICAgPC9hPlxcXFxuICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDoxMHB4O1xcXFxcXFwiPlxcXFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6Jyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTYwcHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmNvbG9yXFxcXFxcXCIgb25jbGljaz1cXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXFxcXFwiPuS/neWtmOW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcXFxuICAgIDwvYT5cXFxcbjwvZGl2PlxcXFxuPHNjcmlwdD5cXFxcbiAgICBsZXQgdGlwcyA9IGDmj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj5aaC5p6c6YGH5Yiw5L+d5a2Y5oyJ6ZKu54K55LiN5Yqo5oiW6ICF5oql6ZSZ55qE5oOF5Ya177yM5Lul5LiL6Lev5b6E5oyo552A5Yig6Zmk5LiA6YGN77yM54S25ZCO6YeN5paw5ouJ5Y+W5o+S5Lu277yM572R6aG15YaN5omT5byA5q2k572R6aG1W+S4jeimgeWFiOaLieS7o+eggV3jgILorrDlvpflpIfku708YnI+XFxcXG7kuLvmj5Lku7blrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5qczxicj5cXFxcbue9kemhteiEmuacrOWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmh0bWw8YnI+XFxcXG7ml6fmlq3mj5LphY3nva7ot6/lvoQ6L2NhY2hlL015UGFyc2VTZXQuanNvbjxicj5cXFxcbuaWsOaWreaPkumFjee9rui3r+W+hC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb248YnI+XFxcXG4gICAg4pGk6ZiF6K+75a6M5o+Q56S654K55YWz6Zet5Yqg6L295a6M5pW06K6+572u6aG16Z2i77yM5aaC5Ye66Zeu6aKY5peg5rOV6Ieq6KGM6Kej5Yaz54K55Zu+54mH6L+b5YWl6K665Z2b5ZCR5oiR5Y+N6aaI44CCPGJyPmA7XFxcXG4gICAgbGV0IHBsYWNlaG9sZGVyPSfovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi4nO1xcXFxuICAgIC8vI2FhOTZkYSAjZmM1MTg1XFxcXG4gICAgbGV0IHRoZW1lcyA9IHtcXFxcbiAgICAgICAgbmFtZTon6buY6K6k5Li76aKYJyxcXFxcbiAgICAgICAgY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxcXG4gICAgICAgIHNhdmVCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDY4MDA2J30sXFxcXG4gICAgICAgIHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXFxcbiAgICAgICAgdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXFxcbiAgICAgICAgYmFybGFiZWw6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxcXG4gICAgICAgIGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LFxcXFxuICAgICAgICBzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxcXG4gICAgfTtcXFxcbiAgICBsZXQgdGhlbWVEZWYgPSB7XFxcXFxcXCJuYW1lXFxcXFxcXCI6XFxcXFxcXCLmlq3lv7Xljp/nmq5cXFxcXFxcIixcXFxcXFxcImNsb3NlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNjNTQ2NGFcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNjgwMDZcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQ2xvc2VCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcInRpcHNCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcImJhcmxhYmVsXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn0sXFxcXFxcXCJiYXJJbnB1dFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCJ9LFxcXFxcXFwic2VsZWN0XFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn19O1xcXFxuICAgIHZhciB0aGVtZVJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXFxcXFwiO1xcXFxuICAgIGlmKCFmYmEuZmV0Y2godGhlbWVSb3V0ZSkpe1xcXFxuICAgICAgICBmYmEud3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSlcXFxcbiAgICB9XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgbGV0IG15VGhlbWVzID0gSlNPTi5wYXJzZShmYmEuZmV0Y2godGhlbWVSb3V0ZSkpO1xcXFxuICAgICAgICBsZXQgbm93VGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lID09PSBteVRoZW1lcy5ub3dfdGhlbWUpO1xcXFxuICAgICAgICB0aGVtZXMgPSBub3dUaGVtZT9ub3dUaGVtZVswXTpteVRoZW1lcy50aGVtZXNbMF07XFxcXG4gICAgfWNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgLy8g5pat5b+15Yid5aeL5YyW6YOo5YiGXFxcXG4gICAgY29uc3QgYWxsQXBpPVsnaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD0nLCdodHRwOi8vY2FjaGUubGFuZ3VhbmcuaWN1Ojg4L2RpZGkucGhwP3VybD0nXTtcXFxcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxcXG4gICAgICAgIHF5OiAn5L2g54i556eR5oqAJyxcXFxcbiAgICAgICAgeWs6ICfpoobphbcnLFxcXFxuICAgICAgICB0eDogJ+iNo+iAgCcsXFxcXG4gICAgICAgIG1nOiAn6JqC6JqB5YWE5byfJyxcXFxcbiAgICAgICAgYmw6ICdPS+ino+aekCcsXFxcXG4gICAgICAgIHNoOiAn5rGf5rmWRCcsXFxcXG4gICAgICAgIHhnOiAn5rGf5rmWRCcsXFxcXG4gICAgICAgIGFsOiAn5rGf5rmWRCcsXFxcXG4gICAgICAgIHBwOiAn5Lq65Lq66L+3JyxcXFxcbiAgICAgICAgbWk6ICcxMDgwJyxcXFxcbiAgICAgICAgbGU6ICfov6rlpaXll4XmjqInLFxcXFxuICAgICAgICBvdGg6ICfpgZPplb/ku5PlupPpgJrlhY0nLFxcXFxuICAgICAgICBvbmU6ICcxMDgwJyxcXFxcbiAgICAgICAgZnVuOiAn6J6N5YW0JyxcXFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICAgICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcXFxuICAgIH07XFxcXG4gICAgdmFyIG9sZFJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiO1xcXFxuICAgIHZhciBteVNldCA9IGZiYS5mZXRjaChvbGRSb3V0ZSk7XFxcXG4gICAgdmFyIG5ld1JvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXFxcXFwiO1xcXFxuICAgIGlmKCFmYmEuZmV0Y2gobmV3Um91dGUpKXtcXFxcbiAgICAgICAgZmJhLndyaXRlRmlsZShuZXdSb3V0ZSxKU09OLnN0cmluZ2lmeSh7c2V0dGluZ3M6c2V0dGluZ3MsdGl0bGU6W1xcXFxcXFwieXVuMTcxN1xcXFxcXFwiLFxcXFxcXFwi5L2g54i556eR5oqAXFxcXFxcXCIsXFxcXFxcXCLono3lhbRcXFxcXFxcIixcXFxcXFxcIuS6uuS6uui/ty3kvJjphbdcXFxcXFxcIl0sY29kZXM6e1xcXFxcXFwi5L2g54i556eR5oqAXFxcXFxcXCI6XFxcXFxcXCJodHRwOi8vY2FjaGUubGFuZ3VhbmcuaWN1Ojg4L2RpZGkucGhwP3VybD1cXFxcXFxcIixcXFxcXFxcIuiejeWFtFxcXFxcXFwiOlxcXFxcXFwiaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD1cXFxcXFxcIixcXFxcXFxcIuS6uuS6uui/ty3kvJjphbdcXFxcXFxcIjpcXFxcXFxcImh0dHBzOi8vc3ZpcC5yZW5yZW5taS5jYzoyMjIyL2FwaS8/a2V5PW5uNGo4cnVrUFhTVnpSNzhFOSZ1cmw9XFxcXFxcXCJ9fSkpXFxcXG4gICAgfVxcXFxuICAgIHZhciBuZXdDb25maWcgPSBmYmEuZmV0Y2gobmV3Um91dGUpO1xcXFxuICAgIHZhciBteVNlbGVjdCA9IFtdO1xcXFxuICAgIGZ1bmN0aW9uIGNvbXBhcmUobGlzdCkge1xcXFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gIWxpc3QuaW5jbHVkZXMoaXQpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgaWYobmV3Q29uZmlnJiZuZXdDb25maWcubGVuZ3RoPjIwKXtcXFxcbiAgICAgICAgZXZhbChcXFxcXFxcIm5ld0NvbmZpZyA9XFxcXFxcXCIgKyBuZXdDb25maWcgKyBcXFxcXFxcIjtcXFxcXFxcIik7XFxcXG4gICAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihzZXR0aW5ncyxuZXdDb25maWcuc2V0dGluZ3MpO1xcXFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXFxcbiAgICAgICAgbXlTZWxlY3QgPSBuZXdDb25maWcudGl0bGUuZmlsdGVyKGNvbXBhcmUoeWNUaXRsZSkpO1xcXFxuICAgICAgICAvLyBteVNlbGVjdCA9IG15U2VsZWN0Lm1hcCgoaXQpPT57XFxcXG4gICAgICAgIC8vICAgICBsZXQgZmxhZyA9ICfik4onO1xcXFxuICAgICAgICAvLyAgICAgaWYodHlwZW9mKG5ld0NvbmZpZy5jb2Rlc1tpdF0pPT09J2Z1bmN0aW9uJyl7XFxcXG4gICAgICAgIC8vICAgICAgICAgZmxhZyA9ICfikr8nO1xcXFxuICAgICAgICAvLyAgICAgfWVsc2UgaWYodHlwZW9mKG5ld0NvbmZpZy5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcXFxuICAgICAgICAvLyAgICAgICAgIGZsYWcgPSAnJztcXFxcbiAgICAgICAgLy8gICAgIH1cXFxcbiAgICAgICAgLy8gICAgIHJldHVybiBmbGFnK2l0XFxcXG4gICAgICAgIC8vIH0pO1xcXFxuICAgIH1cXFxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXFxcblxcXFxuICAgIGxldCBvcHRpb25zID0gW1xcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifniLHlpYfoibonLFxcXFxuICAgICAgICAgICAgaWQ6J3F5JyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6J+iuvue9rueIseWlh+iJuidcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5LyY6YW3JyxcXFxcbiAgICAgICAgICAgIGlkOid5aycsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcXFxuICAgICAgICAgICAgaWQ6J3R4JyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnR4XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+iKkuaenCcsXFxcXG4gICAgICAgICAgICBpZDonbWcnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubWdcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5ZOU5ZOp5ZOU5ZOpJyxcXFxcbiAgICAgICAgICAgIGlkOidibCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcXFxuICAgICAgICAgICAgaWQ6J3NoJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnNoXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+ilv+eTnCcsXFxcXG4gICAgICAgICAgICBpZDoneGcnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MueGdcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6Zi/6YeMJyxcXFxcbiAgICAgICAgICAgIGlkOidhbCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5hbFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXFxcbiAgICAgICAgICAgIGlkOidwcCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5wcFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOiflkqrlkpUnLFxcXFxuICAgICAgICAgICAgaWQ6J21pJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1pXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+S5kOinhicsXFxcXG4gICAgICAgICAgICBpZDonbGUnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxcXG4gICAgICAgICAgICBpZDonb25lJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm9uZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifpo47ooYwnLFxcXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5mdW5cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5YW25LuWJyxcXFxcbiAgICAgICAgICAgIGlkOidvdGgnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxcXG4gICAgICAgICAgICBpZDoncWp1JyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnFqdVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifmj5Lku7YnLFxcXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmNqXFxcXG4gICAgICAgIH0sXFxcXG4gICAgXTtcXFxcblxcXFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGdldE9wdGlvbihpZCx0aXRsZSkge1xcXFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXFxcbiAgICAgICAgRGlkKHRpdGxlKS52YWx1ZSA9IG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS50ZXh0O1xcXFxuICAgICAgICAvLyBEaWQodGl0bGUpLnZhbHVlID0gb2JqLm9wdGlvbnNbb2JqLnNlbGVjdGVkSW5kZXhdLnRleHQucmVwbGFjZSgv4pOKfOKSvy9nLCcnKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3QoaWQpe1xcXFxuICAgICAgICBEaWQoaWQrXFxcXFxcXCJTZWxlY3RcXFxcXFxcIikub3B0aW9ucy5zZWxlY3RlZEluZGV4ID0gLTE7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgLy/lh73mlbDpg6jliIZcXFxcblxcXFxuICAgIGZ1bmN0aW9uIFRvYXN0KG1zZyxkdXJhdGlvbil7XFxcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uO1xcXFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcXFxuICAgICAgICBtLmlubmVySFRNTCA9IG1zZztcXFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXFxcXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcXFxcXCI7XFxcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7XFxcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTtcXFxcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJztcXFxcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJztcXFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApO1xcXFxuICAgICAgICB9LCBkdXJhdGlvbik7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnvJbovpHop6PmnpBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIC8vZmluZFJ1bGU6IFxcXFxcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLmVkaXQoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxcXG4gICAgICAgIH0pKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gb3BlblRoZW1lKCl7XFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFwiPV5fXj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuS4u+mimOeuoeeQhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBncm91cDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIG9wZW5KeE1hbmFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLop6PmnpDphY3nva7nrqHnkIZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcbiAgICAgICAgfSkpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBjYW5jZWwoKXtcXFxcbiAgICAgICAgaWYoIW15U2V0KXtcXFxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxcXG4gICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZmJhLmJhY2soZmFsc2UpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXFxcbiAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gc2V0dGluZ3Mpe1xcXFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coRGlkKGtleSkrJycra2V5KTtcXFxcbiAgICAgICAgICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlLnJlcGxhY2UoL+KTinzikr8vZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBEaWQoa2V5KS52YWx1ZTtcXFxcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXFxcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXFxcXFwiK2tleStcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiK2UubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxcXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXFxcbiAgICAgICAgICAgICAgICBmYmEud3JpdGVGaWxlKG5ld1JvdXRlLCAkJCQuc3RyaW5naWZ5KG5ld0NvbmZpZykpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcXFxuICAgICAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXFxcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcXFxcXCLlhbNcXFxcXFxcIil7XFxcXG4gICAgICAgICAgICAgICAgZmJhLmJhY2soKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgLy9sZXQgd2lkdGg9d2luZG93LnNjcmVlbi5hdmFpbFdpZHRoO1xcXFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcXFxuICAgIC8vYWxlcnQoXFxcXFxcXCLlvZPliY3liIbovqjnjoc6XFxcXFxcXCIrd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoK1xcXFxcXFwiKlxcXFxcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXFxcbiAgICB2YXIgdmVyaW5mbyA9IFt7XFxcXG4gICAgICAgIGlkOidkbicsXFxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXFxcbiAgICAgICAgYXZhdGFyOidodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZycsXFxcXG4gICAgICAgIG9wdGlvbjpvcGVuRG5QYWdlLFxcXFxuICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIGlkOidkeicsXFxcXG4gICAgICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxcXG4gICAgICAgICAgICBhdmF0YXI6J2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NDM0ODU3MDA1JnM9NjQwJyxcXFxcbiAgICAgICAgICAgIG9wdGlvbjpvcGVuVGhlbWVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgaWQ6J2xtJyxcXFxcbiAgICAgICAgICAgIGF1dGhvcjogJ+iTneiOkycsXFxcXG4gICAgICAgICAgICBhdmF0YXI6ICdodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTI1Nzk5NDkzNzgmcz02NDAnLFxcXFxuICAgICAgICAgICAgb3B0aW9uOm9wZW5KeE1hbmFnZVxcXFxuICAgICAgICB9XFxcXG4gICAgXTtcXFxcblxcXFxuICAgIGZ1bmN0aW9uIGRvT3B0aW9uKG9wdGlvbl9pZCl7XFxcXG4gICAgICAgIGxldCB2ZXIgPSB2ZXJpbmZvLmZpbHRlcihpdD0+aXQuaWQ9PT1vcHRpb25faWQpWzBdO1xcXFxuICAgICAgICB2ZXIub3B0aW9uKCk7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgY29uc3QgUmVuZGVySHRtbEFwcCA9IHtcXFxcbiAgICAgICAgZGF0YSgpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAgICAgLy8gcmF3SHRtbDogJzxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IHJlZFxcXFxcXFwiPui/memHjOS8muaYvuekuue6ouiJsu+8gTwvc3Bhbj4nLFxcXFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucyxcXFxcbiAgICAgICAgICAgICAgICB2ZXJpbmZvOnZlcmluZm8sXFxcXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6cGxhY2Vob2xkZXIsXFxcXG4gICAgICAgICAgICAgICAgdGlwczp0aXBzLFxcXFxuICAgICAgICAgICAgICAgIHRoZW1lczp0aGVtZXMsXFxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3Q6bXlTZWxlY3QsXFxcXG4gICAgICAgICAgICAgICAgLy8gY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXFxcbiAgICAgICAgICAgICAgICBjalNlbDpbJ+ivt+mAieaLqeaPkuS7tiAo5Y+q5L2c55SobGF6eVJ1bGUpJywnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcyddLFxcXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzOnNldHRpbmdzLFxcXFxuICAgICAgICAgICAgICAgIHNob3dUaXBzOmZhbHNlLFxcXFxuICAgICAgICAgICAgICAgIC8vd2lkdGhQeDp3aWR0aFB4XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIG1ldGhvZHM6e1xcXFxuICAgICAgICAgICAgLy8gY2hhbmdlVmFsOmZ1bmN0aW9uKGV2ZW50KXtcXFxcbiAgICAgICAgICAgIC8vICAgICBnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpO1xcXFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2VsT3B0aW9uID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xcXFxuICAgICAgICAgICAgLy8gICAgIGFsZXJ0KFxcXFxcXFwi5L2g6YCJ5Lit5LqGXFxcXFxcXCIrZXZlbnQudGFyZ2V0LnZhbHVlKTtcXFxcbiAgICAgICAgICAgIC8vIH1cXFxcbiAgICAgICAgICAgIGRvT3B0aW9uOmRvT3B0aW9uXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgY29uc3QgYXBwPVZ1ZS5jcmVhdGVBcHAoUmVuZGVySHRtbEFwcCk7XFxcXG4gICAgICAgIGFwcC5tb3VudCgnYm9keScpO1xcXFxuICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgfVxcXFxuXFxcXG48L3NjcmlwdD5cXFxcblxcXFxuPC9ib2R5PlxcXFxuPC9odG1sPlxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBhcnNlX0RuLmpzXFxcIixcXFwicGF0aFxcXCI6XFxcIlBhcnNlX0RuLmpzXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vPT09PT09PT09PT095YWN5ZeF6LCD55SoPT09PT09PT09PT09XFxcXG4vL++8je+8je+8jT1eX149XFxcXG5cXFxcbnZhciB2ZXJzaW9uID0gMy40OTEyMTI7XFxcXG52YXIgdXBkYXRlRGF0ZSA9ICcyMDIxLzEyLzEyLzExOjExJztcXFxcbnZhciBfbXlTZXQgPSB7XFxcXG4gICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICBvdGg6J+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXG4gICAgY2pjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLFxcXFxuICAgIHRoZW1lY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvbicsXFxcXG4gICAgamlleGljYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uJyxcXFxcbiAgICB4NWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyxcXFxcbiAgICBvbGRDb25maWc6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicsXFxcXG4gICAgY2tMaW5rOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92LycsXFxcXG4gICAgY2o6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvQ2xvdWRQYXJzZS1WMl9Ebi5qcycsXFxcXG4gICAgeDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxcXG4gICAgcGFyc2VSb3V0ZTogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXFxcbiAgICB4NVJvdXRlOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbCdcXFxcbn07XFxcXG52YXIgTXlQYXJzZVMgPSB7fTtcXFxcbnZhciBteVNldCA9IF9teVNldDtcXFxcbmlmIChmaWxlRXhpc3QoX215U2V0LnBhcnNlUm91dGUpKSB7XFxcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxcXG4gICAgTXlQYXJzZVMgPSBwYXJzZUZpbGUuY29kZXM7XFxcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxcXG59XFxcXG52YXIgcGFyc2VUaXRsZSA9IFtcXFxcbiAgICBcXFxcXFxcInl1bjE3MTdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIlBhbkd1XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJGdVhpbmdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImlzVmlkZW9cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRlZmF1bHRQYXJzZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwi6YGT6ZW/5LuT5bqT6YCa5YWNXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZWZhdWx0UGFyc2VXZWJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIk9L6Kej5p6QXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJNM1U4VFZcXFxcXFxcIixcXFxcbl07XFxcXG4vL++8je+8je+8jT1eX149XFxcXG5cXFxcbi8v5o6l5Y+j6K6+572uLlxcXFxuXFxcXG52YXIgc2V0VXJsID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIjtcXFxcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcXFxudmFyIGxhenkgPSBgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClgO1xcXFxuXFxcXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXFxcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXFxcblxcXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxcXG4vKlxcXFxuICog5b2x6KeG5bel5Zy677yaIGh0dHBzOi8veXNnYy5jYy9cXFxcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcXFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcXFxuICog5rGf5rmWMjogaHR0cDovLzk4aHlrLmNuL2luZGV4LnBocC92b2QvcGxheS9pZC83Mjg0MS9zaWQvMS9uaWQvMS5odG1sXFxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxcXG4gKlxcXFxuICogd3VpZ2VuOiBodHRwczovL3d3dy41aWdlbi5jb20vZG1wbGF5ZXIvcGxheWVyLz91cmw9XFxcXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXFxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXFxcbiAqXFxcXG4gKi9cXFxcblxcXFxuXFxcXG52YXIgdG9vbHMgPSB7XFxcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXG4gICAgfSxcXFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXFxcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICB9LFxcXFxuICAgIC8vYXNjaWlcXFxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxuICAgIH0sXFxcXG4gICAgLy/lh6/mkpJcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcbiAgICB9LFxcXFxuICAgIG5vd0RhdGU6IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcXFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChkYXRlMSkge1xcXFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxcXG4gICAgICAgICAgICB2YXIgbW9udGggPSBkYXRlMS5nZXRNb250aCgpICsgMTtcXFxcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgbW9udGg7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItXFxcXFxcXCIgKyBtb250aDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChkYXkgPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFwiLVxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcXFxuICAgIH0sXFxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgNCk7XFxcXG4gICAgfSxcXFxcbiAgICB0b1ZOdW06IGZ1bmN0aW9uKGEpIHtcXFxcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIHZhciBjID0gYS5zcGxpdCgnLicpO1xcXFxuICAgICAgICB2YXIgbnVtX3BsYWNlID0gW1xcXFxcXFwiXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiLCBcXFxcXFxcIjAwXFxcXFxcXCIsIFxcXFxcXFwiMDAwXFxcXFxcXCIsIFxcXFxcXFwiMDAwMFxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIHIgPSBudW1fcGxhY2UucmV2ZXJzZSgpO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIHZhciBsZW4gPSBjW2ldLmxlbmd0aDtcXFxcbiAgICAgICAgICAgIGNbaV0gPSByW2xlbl0gKyBjW2ldO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciByZXMgPSBjLmpvaW4oJycpO1xcXFxuICAgICAgICByZXR1cm4gcmVzO1xcXFxuICAgIH0sXFxcXG4gICAgY3ByVmVyc2lvbjogZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICB2YXIgX2EgPSBwYXJzZUludCh0aGlzLnRvVk51bShhKSksXFxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXFxcbiAgICAgICAgYiA9IGlzTmFOKF9iKSA/IHZlcnNpb24gOiBiO1xcXFxuICAgICAgICBpZiAoX2EgPiBfYikge1xcXFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcHV0VmFyKCdqeE9sZFYnLCBiKTtcXFxcbiAgICB9LFxcXFxuICAgIGF0b2I6ZnVuY3Rpb24gKHN0cil7XFxcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXFxcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5hdG9iKHN0cik7XFxcXG4gICAgfSxcXFxcbiAgICBidG9hOmZ1bmN0aW9uIChzdHIpe1xcXFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxcXG4gICAgICAgIHJldHVybiBCYXNlNjQuYnRvYShzdHIpO1xcXFxuICAgIH0sXFxcXG4gICAg5rGf5rmWOmZ1bmN0aW9uIChjb25maWdfdXJsLCB0ZW0sIHRva2VuKSB7XFxcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXFxcbiAgICAgICAgdmFyIGF0b2I9QmFzZTY0LmF0b2I7XFxcXG4gICAgICAgIHZhciBidG9hPUJhc2U2NC5idG9hO1xcXFxuICAgICAgICB2YXIgY29uZmlnX2EgPSB0ZW0gfHwgXFxcXFxcXCJmZnNpcmxscVxcXFxcXFwiO1xcXFxuICAgICAgICB2YXIgdmlkZW8gPSAnJztcXFxcbiAgICAgICAgdmFyIHRlbSA9IFtdO1xcXFxuICAgICAgICB2YXIgY29uZmlnX2FycnkgPSBbXTtcXFxcbiAgICAgICAgdmFyIGNvbmZpZ19iID0gY29uZmlnX2EubGVuZ3RoO1xcXFxuICAgICAgICBpZiAodG9rZW4gPT0gMHgxKSB7XFxcXG4gICAgICAgICAgICB2YXIgY29uZmlnX3VybCA9IGF0b2IoY29uZmlnX3VybCk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgY29uZmlnX3VybCA9IGVuY29kZVVSSUNvbXBvbmVudChjb25maWdfdXJsKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgY29uZmlnX2MgPSBjb25maWdfdXJsLmxlbmd0aDtcXFxcbiAgICAgICAgZm9yIChpID0gMHgwOyBpIDwgMHgxMDA7IGkrKykge1xcXFxuICAgICAgICAgICAgdGVtW2ldID0gY29uZmlnX2FbaSAlIGNvbmZpZ19iXS5jaGFyQ29kZUF0KCk7XFxcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtpXSA9IGk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZm9yIChqID0gaSA9IDB4MDsgaSA8IDB4MTAwOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGogPSAoaiArIGNvbmZpZ19hcnJ5W2ldICsgdGVtW2ldKSAlIDB4MTAwO1xcXFxuICAgICAgICAgICAgdG1wID0gY29uZmlnX2FycnlbaV07XFxcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtpXSA9IGNvbmZpZ19hcnJ5W2pdO1xcXFxuICAgICAgICAgICAgY29uZmlnX2Fycnlbal0gPSB0bXA7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZm9yIChhID0gaiA9IGkgPSAweDA7IGkgPCBjb25maWdfYzsgaSsrKSB7XFxcXG4gICAgICAgICAgICBhID0gKGEgKyAweDEpICUgMHgxMDA7XFxcXG4gICAgICAgICAgICBqID0gKGogKyBjb25maWdfYXJyeVthXSkgJSAweDEwMDtcXFxcbiAgICAgICAgICAgIHRtcCA9IGNvbmZpZ19hcnJ5W2FdO1xcXFxuICAgICAgICAgICAgY29uZmlnX2FycnlbYV0gPSBjb25maWdfYXJyeVtqXTtcXFxcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2pdID0gdG1wO1xcXFxuICAgICAgICAgICAgayA9IGNvbmZpZ19hcnJ5Wyhjb25maWdfYXJyeVthXSArIGNvbmZpZ19hcnJ5W2pdKSAlIDB4MTAwXTtcXFxcbiAgICAgICAgICAgIHZpZGVvICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29uZmlnX3VybFtpXS5jaGFyQ29kZUF0KCkgXiBrKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsb2coZGVjb2RlVVJJQ29tcG9uZW50KHZpZGVvKSk7XFxcXG4gICAgICAgIGlmICh0b2tlbiA9PSAweDEpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmlkZW8pO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGJ0b2EodmlkZW8pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufTtcXFxcbmlmIChnZXRWYXIoXFxcXFxcXCJqeE9sZFZcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpICE9IHZlcnNpb24pIHtcXFxcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxcXG4gICAgcHV0VmFyKCd4NUNhY2hlJywgX215U2V0Lng1Q2FjaGUpO1xcXFxuICAgIHB1dFZhcignb2xkQ29uZmlnJywgX215U2V0Lm9sZENvbmZpZyk7XFxcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcXFxuICAgIGxldCBqeE5ld1YgPSBmZXRjaCgnaHR0cHM6Ly9naXRlZS5jb20vRHVhbi1OaWFuL0RuL3Jhdy9tYXN0ZXIvaGlrZXJ2aWV3L1BhcnNlVmVyc2lvbi50eHQnKSxcXFxcbiAgICAgICAganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXFxcXFwiJylbMV0gKyAnJykuc3BsaXQoJ1xcXFxcXFwiJylbMF07XFxcXG4gICAgdG9vbHMuY3ByVmVyc2lvbihqeE5ld1YsIGp4T2xkVik7XFxcXG59XFxcXG5cXFxcbnZhciBQYXJzZVMgPSB7fTtcXFxcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXFxcbiAgICAvLyB1cGRhdGVEYXRlOiB1cGRhdGVEYXRlLFxcXFxuICAgIHBhcnNlTGM6J2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvcC9wYXJzZUxjLmpzJyxcXFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxcXFxcXO+8m1xcXFxcXFxc77ybIFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNDkuMC4yNjIzLjg3IFNhZmFyaS81MzcuMzYnLFxcXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgbTN1OCA9IGZldGNoKHZVcmwsIHt9KTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlb3MubTN1OCcsIG0zdTgpO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3ZpZGVvcy5tM3U4Iyc7XFxcXG4gICAgfSxcXFxcbiAgICBpc1ZpZGVvOmZ1bmN0aW9uKHBsYXlVcmwpe1xcXFxuICAgICAgICBjb25zdCB7aXNWaWRlb30gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcXFxuICAgICAgICByZXR1cm4gaXNWaWRlbyhwbGF5VXJsKVxcXFxuICAgIH0sXFxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwsdGltZW91dCkge1xcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxcXG4gICAgfSxcXFxcbiAgICBkZWZhdWx0UGFyc2VXZWI6IGZ1bmN0aW9uKHBsYXlVcmwsdGltZW91dCxleHRyYSkge1xcXFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcXFxuICAgICAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fHBhcnNlSW50KGdldFZhcignZHAuanhUaW1lb3V0JywnNTAwMCcpKXx8NTAwMDtcXFxcbiAgICAgICAgZXh0cmEgPSBleHRyYXx8e307XFxcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0fHxbXTtcXFxcbiAgICAgICAgaWYodHlwZW9mKHBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZwbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC51bnNoaWZ0KHBsYXlVcmwpO1xcXFxuICAgICAgICAgICAgbGV0IHBsYXlVcmxzPXBsYXlVcmxMaXN0LnNsaWNlKDAsNCk7XFxcXG4gICAgICAgICAgICBsZXQgbmFtZXM9ZXh0cmEubmFtZUxpc3Quc2xpY2UoMCw0KTtcXFxcbiAgICAgICAgICAgIC8vIGxvZygn5byA5aeL5om56YeP6Kej5p6QKOW3suWOu+mHjSzlj6rlj5bliY0z5Liq5aSH6IOO77yM5Yqg6YGT6ZW/576kOjQ4NjcyMjMyOOiOt+WPluacgOaWsOmtlOaWreWKqOaAgSk6JytuYW1lcyk7XFxcXG4gICAgICAgICAgICBwbGF5VXJscz1wbGF5VXJscy5tYXAoKGl0LGlkKT0+aXQrXFxcXFxcXCI7XFxcXFxcXCIrbmFtZXNbaWRdKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKHBsYXlVcmxzKTtcXFxcbiAgICAgICAgICAgIGNvbnN0IHtMYXp5UGFyc2VGYXN0fSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXG4gICAgICAgICAgICBsZXQgcmV0ID0gTGF6eVBhcnNlRmFzdChwbGF5VXJscyx0aW1lb3V0LHRpbWVvdXQpO1xcXFxuICAgICAgICAgICAgaWYodHlwZW9mKHJldCk9PT0nb2JqZWN0JyYmcmV0Lmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgICAgICAvL3JldHVybiByZXRbMF1cXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhyZXQpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB2ID0gZ2V0QXBwVmVyc2lvbigpO1xcXFxuICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KHYpPj0yMTk0JiZyZXQubGVuZ3RoPjEpe1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IEFycmF5LmZyb20obmV3IFNldChyZXQpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM9dXJscy5tYXAoKGl0LGlkKT0+aXQuc3BsaXQoXFxcXFxcXCLimIVcXFxcXFxcIikubGVuZ3RoPjE/aXQuc3BsaXQoXFxcXFxcXCLimIVcXFxcXFxcIilbMV06XFxcXFxcXCLnur/ot686XFxcXFxcXCIrcGFyc2VJbnQoaWQrMSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmxzPXVybHMubWFwKGl0PT5pdC5zcGxpdChcXFxcXFxcIuKYhVxcXFxcXFwiKVswXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gdXJscy5tYXAoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS87Ly50ZXN0KGl0KXx8aXQuc3BsaXQoJzsnKS5sZW5ndGg8Mil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpfHwhL3t8fS8udGVzdChoZWFkKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkPWhlYWQuc3BsaXQoXFxcXFxcXCJ7XFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFwifVxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2hlYWQgPSBoZWFkLnJlcGxhY2UoL3t8fS9nLCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIGhlYWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sJ++8m++8mycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJscy5tYXAoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR1cmw9aXQuc3BsaXQoJzsnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0LmluY2x1ZGVzKFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIikmJiF0dXJsLmluY2x1ZGVzKFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIikpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cmwrPVxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0dXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3VybHM6dXJscyxoZWFkZXJzOmhlYWRlcnMsbmFtZXM6bmFtZXN9KTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFswXS5zcGxpdChcXFxcXFxcIuKYhVxcXFxcXFwiKVswXVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiByZXRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXG4gICAgICAgICAgICBsZXQgeDVQbGF5PWxhenlQYXJzZShwbGF5VXJsLHRpbWVvdXQpO1xcXFxuICAgICAgICAgICAgaWYodHlwZW9mKHg1UGxheSk9PVxcXFxcXFwidW5kZWZpbmVkXFxcXFxcXCJ8fCF4NVBsYXkpe1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6YGT6ZW/5LuT5bqT6Kej5p6Q5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCB0aXBzPS94NVJ1bGV8d2ViUnVsZS8udGVzdCh4NVBsYXkpP1xcXFxcXFwieDUvd2Vi5YWN5ZeF5byA5aeLXFxcXFxcXCI6XFxcXFxcXCLmnoHpgJ/lhY3ll4XmjqLlrozmr5XvvIzlnLDlnYA6XFxcXFxcXCIrKC9eaHR0cC8udGVzdCh4NVBsYXkpP3g1UGxheTon6Z2e5q2j5bi46ZO+5o6lJyk7XFxcXG4gICAgICAgICAgICBsb2codGlwcyk7XFxcXG4gICAgICAgICAgICByZXR1cm4geDVQbGF5O1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBcXFxcXFxcIm1hb3NzXFxcXFxcXCI6XFxcXG4gICAgICAgIGZ1bmN0aW9uIChqeHVybCwgcmVmLCBrZXkpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLueMqyhqeHVybCwgcmVmLCBrZXkpXFxcXG4gICAgICAgIH0sXFxcXG4gICAg5YWN5ZeFOmZ1bmN0aW9uKHZpcFVybCxrKXtcXFxcbiAgICAgICAgaz1rfHxcXFxcXFxcInVybFxcXFxcXFwiO1xcXFxuICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICBsZXQgcmVhbFVybD1KU09OLnBhcnNlKGZldGNoKHZpcFVybCkpW2tdO1xcXFxuICAgICAgICAgICAgaWYocmVhbFVybC5zdGFydHNXaXRoKCcvJykpe1xcXFxuICAgICAgICAgICAgICAgIHJlYWxVcmwgPSAnaHR0cHM6Ly8nK3JlYWxVcmw7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZpZGVvKHJlYWxVcmwpfHxcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICAvL2xvZyhlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgWDU6ZnVuY3Rpb24odmlwVXJsLHJlZil7Ly8gaHR0cHM6Ly9hcGkuNTJ3eWIuY29tL3dlYmNsb3VkLz92PWh0dHA6Ly92aXAuMTkwNS5jb20vcGxheS82OTE5NDAuc2h0bWwgaHR0cDovL3d3dy5jZGNlci5uZXQvXFxcXG4gICAgICAgIGxldCBfeDUgPSAkLnRvU3RyaW5nKCh2aXBVcmwpID0+IHtcXFxcbiAgICAgICAgICAgIGlmKCFsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKHZpcFVybCkpe1xcXFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB2aXBVcmw7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZih3aW5kb3cuY291bnQgPT0gbnVsbCl7XFxcXG4gICAgICAgICAgICAgICAgd2luZG93LmNvdW50PTE7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB3aW5kb3cuY291bnQrKztcXFxcbiAgICAgICAgICAgIGlmKCB3aW5kb3cuY291bnQgPj0gMjApe1xcXFxuICAgICAgICAgICAgICAgIGZiYS5sb2coXFxcXFxcXCLmnKrojrflj5bliLDotYTmupDlnLDlnYDvvIzot7PliLDop6PmnpDpobVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpcFVybFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIHVybHMgPSBfZ2V0VXJscygpO1xcXFxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1cmxzKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCEvcGxheW0zdTh8bTN1OFxcXFxcXFxcLnR2Ly50ZXN0KHVybHNbaV0pICYmIHVybHNbaV0ubWF0Y2goL1xcXFxcXFxcLm1wM3xcXFxcXFxcXC5tcDR8XFxcXFxcXFwubTN1OHxcXFxcXFxcXC5mbHYvKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKHVybHNbaV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsc1tpXVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSx2aXBVcmwpO1xcXFxuICAgICAgICBsZXQgcGxheVVybCA9IHJlZj9yZWY6dmlwVXJsO1xcXFxuICAgICAgICBsZXQgeDVVcmwgPSAnd2ViUnVsZTovLycrcGxheVVybCsgJ0AnICtfeDU7XFxcXG4gICAgICAgIHNob3dMb2FkaW5nKCfprZTmlq0uanPll4XmjqLkuK0uLi4nKTtcXFxcbiAgICAgICAgcmV0dXJuIHg1VXJsXFxcXG4gICAgfSxcXFxcbiAgICAn54yrJzpmdW5jdGlvbiAoanh1cmwsIHJlZiwga2V5KSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgZ2V0VmlkZW9JbmZvID0gZnVuY3Rpb24gKHRleHQpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHMuQUVTKHRleHQsIGtleSwgaXYpO1xcXFxuICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgIGxldCBoZWFkZXJzID0ge2hlYWRlcnM6IHtcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogcmVmfHwnJ319O1xcXFxuICAgICAgICAgICAgdmFyIGh0bWwgPSByZWY/cmVxdWVzdChqeHVybCwgaGVhZGVycyk6cmVxdWVzdChqeHVybCk7XFxcXG4gICAgICAgICAgICBpZiAoLyZidHdhZj0vLnRlc3QoaHRtbCkpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArIFxcXFxcXFwiJmJ0d2FmXFxcXFxcXCIgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXFxcXFwiLylbMV0sIHtoZWFkZXJzOiB7XFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IHJlZn19KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoXFxcXFxcXCJfdG9rZW4gPSBcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXFxcXFxzXFxcXFxcXFxTXSo/fS8pWzBdICsgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAoIS9eaHR0cC8udGVzdChjb25maWcudXJsKSkge1xcXFxuICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIFxcXFxcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXFxcXFwiLCBpdikpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBMTFE6IGZ1bmN0aW9uKGp4dXJsKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFxcXFxcImFwaS5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxcXG4gICAgICAgICAgICB2YXIganNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXFxcbiAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcXFxuICAgICAgICAgICAgKi9cXFxcbiAgICAgICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXFxcbiAgICAgICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcXFxuICAgICAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocCc7XFxcXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xcXFxuICAgICAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxcXG4gICAgICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcXFxuICAgICAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcXFxuICAgICAgICAgICAgdmFyIHVybCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcGFyc2VcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHZpcFVybCArICcmcmVmZXJlcj0nICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArICcmcmVmPTEmdGltZT0nICsgVGltZSArICcmdHlwZT0mb3RoZXI9JyArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgJyZpb3M9MCcsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pKS51cmw7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIHl1bjE3MTc6IGZ1bmN0aW9uICh2aXBVcmwpIHtcXFxcbiAgICAgICAgdmFyIGlzeWsgPSB2aXBVcmwuaW5kZXhPZigneW91a3UnKTtcXFxcbiAgICAgICAgdmFyIHJlZiA9IFxcXFxcXFwiaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vangvdHkucGhwP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8wODI4Lz91cmw9XFxcXFxcXCIgKyB2aXBVcmw7XFxcXG4gICAgICAgIHZhciBhcGkgPSBcXFxcXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXFxcbiAgICB9LFxcXFxuICAgIE9L6Kej5p6QOidodHRwczovL29ranguY2MvP3VybD0nLFxcXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXFxcbiAgICDpgZPplb/ku5PlupPpgJrlhY06ZnVuY3Rpb24gKHVybCx0aW1lb3V0KXtcXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcXFxuICAgIH0sXFxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcXFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFxcXFxcPy4qLywnJyk7XFxcXG4gICAgICAgICAgICAvL31cXFxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG59O1xcXFxuXFxcXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXFxcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxcXG5cXFxcblxcXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCxzdHJUaXRsZSx0aW1lb3V0LHBsYXlVcmwpIHtcXFxcbiAgICAvLyDlj4LmlbAxOuato+eJiOe9keWdgOWcsOWdgCDlj4LmlbAyIOWumuWQkeino+aekOaOpeWPo+WQjeensCDlj4LmlbAzIHg16Kej5p6Q6LaF5pe2IOWPguaVsDQg5a6M5pW055qE5pKt5pS+6ZO+5o6lXFxcXG4gICAgc3RyVGl0bGUgPSBzdHJUaXRsZXx8Jyc7XFxcXG4gICAgdmlwVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHZpcFVybCk7XFxcXG4gICAgcGxheVVybD1kZWNvZGVVUklDb21wb25lbnQocGxheVVybCl8fHZpcFVybHx8Jyc7XFxcXG4gICAgLy8gbG9nKCfkvKDlhaVheXRtUGFyc2XnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXFxcbiAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fHBhcnNlSW50KGdldFZhcignZHAuanhUaW1lb3V0JywnNTAwMCcpKXx8NTAwMDtcXFxcblxcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxuICAgIGxldCBqeHNSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcIjtcXFxcbiAgICBsZXQgTXlKaWV4aSA9IHt9O1xcXFxuICAgIGxldCBqaWV4aXMgPSB7fTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcXFxuICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxcXG4gICAgfWNhdGNoIChlKSB7fVxcXFxuICAgIGZ1bmN0aW9uIGdldFBsYXlKeChrZXkpe1xcXFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBbXTsvL+aJuemHj+aSreaUvuWcsOWdgOWIl+ihqFxcXFxuICAgICAgICBsZXQgbmFtZUxpc3QgPSBbXTtcXFxcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldOyAvLyDpgILnlKjkuo7ov5nkuKrnvZHnq5nnmoTop6PmnpDliJfooahcXFxcbiAgICAgICAgaWYoanhzKXtcXFxcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBqeHMpe1xcXFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbanhzW2ldXSA9PSAnc3RyaW5nJyYmUGFyc2VTW2p4c1tpXV0ubWF0Y2goL2h0dHAuKj89Lykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdC5wdXNoKFBhcnNlU1tqeHNbaV1dK3ZpcFVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goanhzW2ldKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy8gcmV0dXJuIHBsYXlVcmxMaXN0XFxcXG4gICAgICAgIHJldHVybiB7cGxheVVybExpc3Q6cGxheVVybExpc3QsbmFtZUxpc3Q6bmFtZUxpc3R9XFxcXG4gICAgfVxcXFxuICAgIGxldCBleHRyYSA9IHt9O1xcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxuICAgIGlmKCFzdHJUaXRsZSl7XFxcXG4gICAgICAgIGlmKC9yZW5yZW5taS18ZmVuZG91XFxcXFxcXFwuZHVvZHVvenkvLnRlc3QodmlwVXJsKSl7XFxcXG4gICAgICAgICAgICBzdHIgPSBteVNldC5wcDtcXFxcbiAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdwcCcpO1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIHZhciBob3N0O1xcXFxuICAgICAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgICAgIGhvc3QgPSB2aXBVcmwubWF0Y2goL1xcXFxcXFxcLiguKj8pXFxcXFxcXFwvLylbMV07XFxcXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICAgICAgaWYoIS9eaHR0cC8udGVzdChwbGF5VXJsKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIuaWreaPkuiwg+eUqOWksei0pe+8gVxcXFxcXFxcbumdnuato+W4uOeahHZpcOato+eJiOWcsOWdgOS4lOacquivhuWIq+WOn+ermeino+aekOaSreaUvuWcsOWdgFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLumBk+mVv+S7k+W6k+mAmuWFjShwbGF5VXJsLHRpbWVvdXQpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy9ob3N0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGhvc3QpO1xcXFxuICAgICAgICAgICAgc3dpdGNoIChteVNldC5xanUpIHtcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi6buY6K6kXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInFxLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd0eCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImlxaXlpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnF5O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdxeScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInlvdWt1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnlrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd5aycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImFsaXp5XFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYWw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2FsJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwibWd0di5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJiaWxpYmlsaS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYmwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJzb2h1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInR2LnNvaHUuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiaXhpZ3VhLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnhnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd4ZycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInBwdHYuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucHA7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3BwJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwibWlndXZpZGVvLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtaScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImxlLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmxlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdsZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIjE5MDUuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub25lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdvbmUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJmdW4udHZcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5mdW47XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2Z1bicpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucWp1O1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1lbHNle1xcXFxuICAgICAgICBsb2coJ+mtlOaWreaJp+ihjOWumuWQkeino+aekOe6v+i3r+WktDonK3N0clRpdGxlKTtcXFxcbiAgICAgICAgc3RyID0gc3RyVGl0bGU7XFxcXG4gICAgfVxcXFxuICAgIGxldCB3aXRoQmF0Y2ggPSAhIShNeUppZXhpLmlzQXV0byAmJiBNeUppZXhpLmF1dG9Nb2RlID09PSAn6YCf5bqm5LyY5YWIJyk7XFxcXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxcXG4gICAgICAgIGlmKC/pgJrlhY0vLnRlc3Qoc3RyKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTW3N0cl0odmlwVXJsLHRpbWVvdXQpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciB1cmwgPSBQYXJzZVNbc3RyXSh2aXBVcmwpO1xcXFxuICAgICAgICBpZigvXmhpa2VyOnxedG9hc3Q6fF5ydWxlOnxeeDVSdWxlOnxed2ViUnVsZTp8XnNlbGVjdC8udGVzdCh1cmwpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYoIXVybCYmIS9eaHR0cC8udGVzdCh2aXBVcmwpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/prZTmlq3op6PmnpDlpLHotKU+Jyt2aXBVcmxcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvLyBsb2codmlwVXJsKyflhY3ll4XmjqLnu5Pmnpw6Jyt1cmwpO1xcXFxuICAgICAgICBpZiAoL15cXFxcXFxcXC8vLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgdXJsID0gJ2h0dHBzOicgKyB1cmxcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoLz1odHRwLy50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IC8mdXJsPS8udGVzdCh1cmwpID8gdXJsIDogJ2h0dHAnICsgZGVjb2RlVVJJQ29tcG9uZW50KHVybC5zcGxpdCgnPWh0dHAnKVsxXSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyppZih1cmwubWF0Y2goL21ndHYuY29tL2cpPT0nbWd0di5jb20nKXtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cubWd0di5jb219JztcXFxcbiAgICAgICAgfSBlbHNlICovXFxcXG4gICAgICAgIGlmICgvXFxcXFxcXFwuZmx2Ly50ZXN0KHVybCkmJiEvVXNlci1BZ2VudC8udGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh1cmwgPT09ICcnIHx8IHVybCA9PT0gdmlwVXJsKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcXFxuICAgICAgICB9IGVsc2UgaWYoIS8jaXNWaWRlbz10cnVlIy8udGVzdCh1cmwpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmxcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIFBhcnNlU1tzdHJdID09ICdzdHJpbmcnJiZQYXJzZVNbc3RyXS5tYXRjaCgvaHR0cC4qPz0vKSkge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLmlq3mj5LlvIDlp4vpgJrnlKjmiafooYzlhY3ll4UgZGVmYXVsdFBhcnNlV2ViOlxcXFxcXFwiK3RpbWVvdXQpO1xcXFxuICAgICAgICAvL2xvZyhcXFxcXFxcIum7mOiupHg1XFxcXFxcXCIrUGFyc2VTLmRlZmF1bHRQYXJzZVdlYik7XFxcXG4gICAgICAgIGlmKHdpdGhCYXRjaCl7XFxcXG4gICAgICAgICAgICBpZih0eXBlb2YoZXh0cmEucGxheVVybExpc3QpPT09J29iamVjdCcmJmV4dHJhLnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0LmZpbHRlcihpdD0+aXQhPT0oUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBuYW1lTGlzdCA9IGV4dHJhLm5hbWVMaXN0O1xcXFxuICAgICAgICAgICAgICAgIG5hbWVMaXN0LnVuc2hpZnQoc3RyKTtcXFxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBleHRyYS5uYW1lTGlzdD11bmlxdWUyKG5hbWVMaXN0KTtcXFxcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IHVuaXF1ZTIoZXh0cmEucGxheVVybExpc3QpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGV4dHJhID0ge31cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKChQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCx0aW1lb3V0LGV4dHJhKTooUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmw7XFxcXG4gICAgfSBlbHNlIGlmKHR5cGVvZihzdHIpPT09J3N0cmluZycmJnN0ci5sZW5ndGg+MSYmKHR5cGVvZiBQYXJzZVNbc3RyXT09J3VuZGVmaW5lZCd8fCFQYXJzZVNbc3RyXSkmJiEvXmh0dHAvLnRlc3Qoc3RyKSl7XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fov5vooYzmlq3mj5LphY3nva4s5o6o6I2Q5ouJ5Y+W6YGT6ZW/57K+6YCJIVxcXFxcXFxcbuajgOa1i+WIsOaXoOaViOeahOino+aekOmFjee9rjonK3N0cjtcXFxcbiAgICB9ZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKHN0ciArIHZpcFVybCx0aW1lb3V0KTtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbnZhciBwbGF5UGFyc2UgPSB7XFxcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcXFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSkuY2o7XFxcXG4gICAgICAgICAgICB2YXIgTGFiZWwgPSBrO1xcXFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXFxcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5yZXBsYWNlKC9wbGF5ZXJfLio/PXsvLCAncGRhdGE9eycpKTtcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXFxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXFxcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgTGFiZWwpXFxcXG4gICAgfVxcXFxufTtcXFxcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxcXG4gICAgLypcXFxcbiAgICBpZiAoZ2V0VmFyKFxcXFxcXFwiaWprLXR4XFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiMVxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpXFxcXG4gICAgICAgIGNsZWFyVmFyKFxcXFxcXFwiaWprLXR4XFxcXFxcXCIpXFxcXG4gICAgfVxcXFxuICAgIGlmIChnZXRJdGVtKFxcXFxcXFwidGl4aW5nXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+WFjei0o+WjsOaYjicsXFxcXG4gICAgICAgICAgICBjb250ZW50OiAn5pys56iL5bqP5LiN5o+Q5L6b6KeG6aKR6Kej5p6Q5pyN5YqhXFxcXFxcXFxu5omA5pyJ5YaF5a655Z2H5LuO55So5oi35YiG5Lqr5Lit5pS26ZuGXFxcXFxcXFxu5LuF5L6b5rWL6K+V5ZKM5a2m5Lmg5Lqk5rWBXFxcXFxcXFxuXFxcXFxcXFxu56Gu5a6a5Y2z6K6k5Y+v77yM5LiN5YaN5o+Q6YaSJyxcXFxcbiAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFxcXFxcImlqay10eFxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v54K55Ye75LqG56Gu6K6kXFxcXFxcXCJcXFxcblxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG4gICAgICovXFxcXG59XFxcXG4vKlxcXFxuaWYgKCFnZXRWYXIoXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIikpIHtcXFxcbiAgICBtelBvcHVwKCk7XFxcXG4gICAgcHV0VmFyKCd0aXhpbmcnLCdvaycpO1xcXFxufVxcXFxuKi9cXFxcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCxuYW1lKSB7XFxcXG4gICAgbmFtZSA9IG5hbWV8fCcnO1xcXFxuICAgIHZhciBkYXRhID0gY29udGVudC5zcGxpdCgn4piF4piF4piFJyk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAyKSB7XFxcXG4gICAgICAgIHZhciBfZHQgPSBwYXJzZVBhc3RlKGRhdGFbMF0pO1xcXFxuICAgICAgICBjb250ZW50ID0gX2R0LnN1YnN0cigwLCA2KSAhPT0gJ2Vycm9yOicgPyBfZHQgOiAnJztcXFxcbiAgICB9XFxcXG4gICAgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYhScpO1xcXFxuICAgIHZhciB0eXBlID0gZGF0YVswXTtcXFxcbiAgICB2YXIgYXJyTGlzdCA9IFtdO1xcXFxuICAgIHZhciBvYmpDb2RlID0ge307XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMiAmJiBkYXRhWzBdICE9PSAn55u06ZO+Jykge1xcXFxuICAgICAgICB2YXIgb2JqS2V5ID0gZGF0YVsxXTtcXFxcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZGF0YVsyXTtcXFxcbiAgICAgICAgaWYgKHR5cGUgPT09ICdNeVBhcnNlUycpIHtcXFxcbiAgICAgICAgICAgIG9ialZhbHVlID0gYmFzZTY0RGVjb2RlKG9ialZhbHVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAob2JqVmFsdWUuc3BsaXQoJ2Z1bmN0aW9uJykubGVuZ3RoID4gMSkge1xcXFxuICAgICAgICAgICAgZXZhbCgnb2JqVmFsdWU9JyArIG9ialZhbHVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAwLCBvYmpLZXkpOyAvL+a3u+WKoOmhueebrumdnuWIoOmZpFxcXFxuICAgICAgICBvYmpDb2RlW29iaktleV0gPSBvYmpWYWx1ZTtcXFxcblxcXFxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ+ebtOmTvicpIHtcXFxcbiAgICAgICAgYXJyTGlzdCA9IGRhdGE7XFxcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDEpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGFyckxpc3QgPSBudWxsO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoYXJyTGlzdCAhPSBudWxsKSB7XFxcXG4gICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXFxcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBpZihuYW1lKXsvL+WIoOmZpOWQjeensOWIl+ihqOWSjOS7o+eggVxcXFxuICAgICAgICAgICAganNvbi50aXRsZS5yZW1vdmUobmFtZSk7XFxcXG4gICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBhcnJMaXN0ID0gYXJyTGlzdC5jb25jYXQoanNvbi50aXRsZSk7XFxcXG4gICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoYXJyTGlzdCkpO1xcXFxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9iakNvZGUpO1xcXFxuICAgICAgICBpZiAodHlwZSA9PT0gJ+a1i+ivlScpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7XFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbZGF0YVsxXV0gPT0gXFxcXFxcXCJmdW5jdGlvblxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tkYXRhWzFdXShkYXRhWzJdKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIoUGFyc2VTW2RhdGFbMV1dICsgZGF0YVsyXSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7Lkv53lrZjlhoXlrrlcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5peg5rOV6K+G5Yir6L+Z5Liq5YaF5a655ZGiXFxcXFxcXCJcXFxcbiAgICB9XFxcXG59XFxcXG4vLyDku6XkuIvku6PnoIHljYPkuIfkuI3opoHmlL7lh7rmnaXlkKbliJnmiqXplJlcXFxcbmlmIChnZXRJdGVtKCd1cGRhdGVEYXRlJykgIT0gdXBkYXRlRGF0ZSkge1xcXFxuLy8gaWYgKHRydWUpIHtcXFxcbiAgICAvLyDmiopmdW5jdGlvbuWPmOaIkHN0cmluZ1xcXFxuICAgIGxldCBmdW5jdGlvbkNvZGUgPSBzYXZlQnV0dG9uICsgJzsnK216UG9wdXA7XFxcXG4gICAgLy8gd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJywgZmV0Y2goX215U2V0LmNrTGluayArICdwbHNjUGFyc2UuaHRtbCcpKTtcXFxcbiAgICBzZXRJdGVtKCdteUZ1bmN0aW9uJywgZnVuY3Rpb25Db2RlKTtcXFxcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxcXG59XFxcXG52YXIgYmpJdGVtID0ge1xcXFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoZmlsZUV4aXN0KGspKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGNqY2FjaGUgPSBnZXRWYXIoJ2NqQ2FjaGUnKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKGspKTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzLmNqID0gY2pjYWNoZTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaywgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBvbGRSb3V0ZSA9IGdldFZhcignb2xkQ29uZmlnJyk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG9sZENvbmZpZyA9IGpzb24uc2V0dGluZ3M7XFxcXG4gICAgICAgICAgICAgICAgb2xkQ29uZmlnLmNqID0gY2pjYWNoZTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsICQuc3RyaW5naWZ5KG9sZENvbmZpZykpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oGi5aSN5oiQ5YqfJztcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mcgOimgeWFiOaLieWPluWIl+ihqCdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgcGFyc2VSb3V0ZSlcXFxcbiAgICB9LFxcXFxuICAgIHB1bGxDb2RlOiBmdW5jdGlvbihrKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgcHVsbE1vZGUgPSBrWzBdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBrWzFdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlRmlsZSA9IGZldGNoKHBhcnNlUm91dGUpO1xcXFxuICAgICAgICAgICAgaWYgKCFwYXJzZUZpbGUpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKTtcXFxcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9ICFzZXR0aW5ncyA/IHt9IDogSlNPTi5wYXJzZShzZXR0aW5ncyk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7fTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzID0gc2V0dGluZ3M7XFxcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IFtdO1xcXFxuICAgICAgICAgICAgICAgIGpzb24uY29kZXMgPSB7fTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBwYXJzZUZpbGUpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIHBhcnNlVGl0bGUgPSBbXTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZUNvZGU9e307XFxcXG4gICAgICAgICAgICB2YXIgY2pMaW5rID0gZ2V0VmFyKCdwbHVnaW5MaW5rJyk7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFxcXFxcL1xcXFxcXFxcLy8udGVzdChjakxpbmspKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoY2pMaW5rLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigv5o+S5Lu25ZCNLy50ZXN0KGNqTGluaykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbExpbmsgPSBjakxpbmsuc3BsaXQoJ+aPkuS7tuWQjScpWzBdLnJlcGxhY2UoL1tcXFxcXFxcXHNdL2csJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+ino+aekOS6keWJquWIh+advzonK3JlYWxMaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHlQYXN0ZSA9IHBhcnNlUGFzdGUocmVhbExpbmspO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcXFxcXC9cXFxcXFxcXC8vLnRlc3QoeVBhc3RlKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKHlQYXN0ZS5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlUz09PSd1bmRlZmluZWQnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluS4qum4oeavm+aPkuS7tizph4zpnaLov55QYXJzZVPlr7nosaHpg73msqHmnIkhJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/puKHmr5vmj5Lku7bmiafooYzmiqXplJk6XFxcXFxcXFxuJytlLm1lc3NhZ2U7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiDveivhuWIq+S6keWJquWIh+adv+S4reeahOWGheWuuTpcXFxcXFxcXG4nK3lQYXN0ZS5zdWJzdHJpbmcoMCwxMDApO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjakxpbmsgPT09ICdR56WeJykge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHQnKS5zcGxpdCgnXFxcXFxcXFxuJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBqaWV4aSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcmJicpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJyYmJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKC9eI1thLXpBLVowLTldezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jVxcXFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoL14jW1xcXFxcXFxcU117MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2N5Lu75oSP6Z2e56m65a2X56ym5LiyXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHt0YXNrQ2FsbCwgdGFza1J1bix0YXNrUmVxfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90YXNrQ2FsbD9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCflvIDlp4vmiafooYzku7vliqHku5PlupPojrflj5bmlq3lv7Xmj5Lku7bnpo/liKnlj6Pku6QnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRhc2tDYWxsKDE3LCdEbkZ1bGknLFtjakxpbmtdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXQgPSBKU09OLnBhcnNlKHJlc3VsdC5yZXN1bHQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHJldCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQub3B0PT09J2Vycm9yJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrcmV0Lm1zZztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndXJsJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChyZXQucmV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gaHRtbC5pbmNsdWRlcygnaHR0cCcpPyBodG1sOmJhc2U2NERlY29kZShodG1sKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBhcnIubWF0Y2goL1tcXFxcXFxcXFNdKj8sLio/W1xcXFxcXFxcc10vZyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBqaWV4aSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXS5zcGxpdChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0nangnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvW1xcXFxcXFxcU10qPyxodHRwW1xcXFxcXFxcU10vLnRlc3QocmV0LnJldCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSByZXQucmV0LnNwbGl0KCcsJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnLCcpWzFdLnNwbGl0KCdcXFxcXFxcXG4nKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9eaHR0cC8udGVzdChyZXQucmV0KSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJ1xcXFxcXFxcbicpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrnn6XnmoTnpo/liKk6XFxcXFxcXFxuJytyZXQucmV0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndmlwSngnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT0vZnVuY3Rpb24vLnRlc3QoY29kZSk/ZXZhbChjb2RlKTpjb2RlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ku5PlupPpnZ7mnIDmlrDniYjmiJbogIXnpo/liKnnpL7lip/og73lvIDlj5HkuK0nXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjakxpbms9PT0n5pat5o+SJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9eaGlrZXI6XFxcXFxcXFwvXFxcXFxcXFwvfF5maWxlOlxcXFxcXFxcL1xcXFxcXFxcL3xeaHR0cHxeXFxcXFxcXFwvc3RvcmFnZVxcXFxcXFxcL3xeXFxcXFxcXFwvc2RjYXJkXFxcXFxcXFwvLy50ZXN0KGNqTGluaykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBpZigvXlxcXFxcXFxcL3N0b3JhZ2VcXFxcXFxcXC98XlxcXFxcXFxcL3NkY2FyZFxcXFxcXFxcLy8udGVzdChjakxpbmspKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGluayA9ICdmaWxlOi8vJytjakxpbms7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChjakxpbmspKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Y+j5Luk5pyJ6K+vJ1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICBsb2coZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciBqeEp1ZGdlID0gdHlwZW9mIFBhcnNlUyA9PSAnb2JqZWN0JztcXFxcbiAgICAgICAgICAgIHZhciBsYkp1ZGdlID0gdHlwZW9mKHBhcnNlVGl0bGUpID09ICdvYmplY3QnO1xcXFxuICAgICAgICAgICAgaWYgKGp4SnVkZ2UgfHwgbGJKdWRnZSkge1xcXFxuICAgICAgICAgICAgICAgIC8vIGlmIChwdWxsTW9kZSA9PT0gJ+WIl+ihqCcpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKCFsYkp1ZGdlKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgIC8vICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXFxcbiAgICAgICAgICAgICAgICAvLyB9XFxcXG4gICAgICAgICAgICAgICAgLy8g5LiN566h5ouJ5Y+W5Luj56CB6L+Y5piv5YiX6KGo6YO96KaB5oqK5YiX6KGo5ouJ5LqGXFxcXG4gICAgICAgICAgICAgICAgaWYgKCFsYkp1ZGdlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBPYmplY3Qua2V5cyhQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2cocGFyc2VUaXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHZhciBzY09iamVjdCA9IFtcXFxcXFxcIkNpdHlJUFxcXFxcXFwiLCBcXFxcXFxcInBjVUFcXFxcXFxcIiwgXFxcXFxcXCJjYWNoZU0zdThcXFxcXFxcIixcXFxcXFxcImlzVmlkZW9cXFxcXFxcIiwgXFxcXFxcXCJkZWZhdWx0UGFyc2VcXFxcXFxcIixcXFxcXFxcImRlZmF1bHRQYXJzZVdlYlxcXFxcXFwiLFxcXFxcXFwibWFvc3NcXFxcXFxcIiwgXFxcXFxcXCJMTFFcXFxcXFxcIixcXFxcXFxcInBhcnNlTGNcXFxcXFxcIl07XFxcXG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xcXFxuICAgICAgICAgICAgICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICBpZiAocHVsbE1vZGUgPT09ICfku6PnoIEnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxQYXJzZVMgPT0gJ29iamVjdCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2NPYmplY3QpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgb3JpZ2luYWxQYXJzZVNbc2NPYmplY3RbaV1dO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWxQYXJzZVMgPW9yaWdpbmFsUGFyc2VTLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KVswXSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvcmlnaW5hbFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoUGFyc2VTKT09XFxcXFxcXCJ1bmRlZmluZWRcXFxcXFxcIil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBwYXJzZUNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/msqHmnInku6PnoIHvvIzkuI3lj6/mi4nlj5ZcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vdmFyIG5ld0ZpbGUgPSB0b29scy50b0pTT04oanNvbik7Ly/oh6rlrprkuYlzdHJpbmdpZnnlh73mlbDvvIzluKbmnInovazkuYnlrZfnrKZcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3RmlsZSA9ICQuc3RyaW5naWZ5KGpzb24pOyAvL0pTT04ucGFyc2XkvJrmiqXplJlcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5YnICsgcHVsbE1vZGUgKyAn5oiQ5YqfJztcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiOt+WPluWIsOWvueixoSc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIFtrLCBfbXlTZXQucGFyc2VSb3V0ZV0pXFxcXG4gICAgfSxcXFxcbiAgICBwdWxsU2NyaXB0OiBmdW5jdGlvbihjaiwgeDUpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBjakZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxcXG4gICAgICAgICAgICB2YXIgeDVGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1swXSwgY2pGaWxlKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1sxXSwgeDVGaWxlKTtcXFxcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhPbGRWJyk7XFxcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5oiQ5YqfJztcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq5oiQ5Yqf6I635Y+W5YaF5a65JztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgW2NqLCB4NV0pXFxcXG4gICAgfSxcXFxcbiAgICB4bFNlbGVjdDogZnVuY3Rpb24oYmlhbmppLCBsYkxlbmd0aCkge1xcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIG9wdGlvbnM6IFsn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjpyZWRcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuWIoOmZpHx8JyArIGJpYW5qaSArICdcXFxcXFxcIj7liKAg6ZmkJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6I0Y1NzQ3NFxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi6ZqQ6JePfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPumakCDol48nLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojRkY4MDAwXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLkv67mlLl8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5L+uIOaUuScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIue9rumhtnx8JyArIGJpYW5qaSArICcwJyArICdcXFxcXFxcIj7nva4g6aG2JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi56e75YqofHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuenuyDliqgnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLnva7lupV8fCcgKyBiaWFuamkgKyBsYkxlbmd0aCArICdcXFxcXFxcIj7nva4g5bqVJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA0QjQzMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuWcsOadv+WIhuS6qycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwNEI0MzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuS6keWIhuS6q3x8JyArIGJpYW5qaSArICdcXFxcXFxcIj7kupHmnb/liIbkuqsnXSxcXFxcbiAgICAgICAgICAgIGNvbDogJzInLFxcXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0lucHV0ID0gcGFyc2VEb21Gb3JIdG1sKGlucHV0LCAnc3BhbiYmdGl0bGUnKS5zcGxpdCgnfHwnKTtcXFxcbiAgICAgICAgICAgICAgICAvLyDkv67mlLks6L+q6L+qLDAgICDmk43kvZznsbvlnoss5ZCN56ewLOe0ouW8lVxcXFxuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gbmV3SW5wdXRbMF07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBuZXdJbnB1dFsxXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG51bTIgPSBuZXdJbnB1dFszXTtcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuWIoOmZpFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGsgPSBbbmFtZSwgbnVtXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaAu+aEn+inieetm+mAieaIluiAheaQnOe0ouWQju+8jOeUseS6jm51beeahOS9jee9ruS4jeWvueWPr+iDveS8muWIoOmZpOmUmSzkuovlrp7lpoLmraQs5bey5L+uP1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCLljbPlsIbliKDpmaQ6IFxcXFxcXFwiICsgbmFtZSkuY29uZmlybSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXFxcXFwiICsgbmFtZSArIFxcXFxcXFwi44CX5Yig6ZmkXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBrKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIumakOiXj1xcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIuOAl+makOiXj1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+v6IO95piv5Liq572R5Z2ALCDmgqjlj6/pgInmi6nliKDpmaRcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbmFtZSwgbnVtXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLkv67mlLlcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuQ29kZSA9IG5hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGVzID0ganNvbi50aXRsZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuTmFtZSA9IFxcXFxcXFwi6L+Z5piv5ZCN56ewXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Db2RlID0ganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5OYW1lID0gbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIpLnJ1bGUoKGssdGl0bGVzKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFxcXFxcInNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7YmFjaygpO1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuW7uuiuruaMiem7mOiupOeahOS7o+eggeagvOW8j+S/ruaUueWTplxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCdpbnB1dF9lZGl0JywgaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXFxcXFwiLTFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICfkv67mlLnimIUnICsgbmFtZSArICfimIUnICsgY29kZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPuagvOW8j+S4uu+8muaTjeS9nOexu+Wei+KYheagh+mimOKYhWZ1bmN0aW9uKCl76Ieq5a6a5LmJ5YaF5a65fTxicj7or7fli7/loavlhaXlhbbku5bmoLzlvI8nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNhdmVCdXR0b24sbmFtZSx0aXRsZXMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0bXBBciA9IGdldFZhcignaW5wdXRfZWRpdCcpLnNwbGl0KCfimIUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRtcEFyLmxlbmd0aDwyKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+u5pS55qC85byP5pyJ6K+v77yM6K6/6Zeu6KKr5ouS57udJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05hbWUgPSB0bXBBclsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5ld05hbWUhPT1uYW1lJiZ0aXRsZXMuaW5jbHVkZXMobmV3TmFtZSkpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfmo4DmtYvliLDlkIzlkI3mjqXlj6M6JytuZXdOYW1lKycs5piv5ZCm6KaG55uWPycpLmNvbmZpcm0oKHNhdmVCdXR0b24sbmFtZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLlcXFxcXFxcXG7or7foh6rooYzmo4DmtYvopobnm5blkI7nmoTlhoXlrrknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sc2F2ZUJ1dHRvbixuYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZih0eXBlb2YoY29kZSk9PT0nc3RyaW5nJyYmY29kZS5sZW5ndGg+Mil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGNvZGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uLG5hbWUsdGl0bGVzKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj7kv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuTmFtZSwgbkNvZGVdLHRpdGxlcykgLy9bbmFtZSwganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpXSlcXFxcbiAgICAgICAgICAgICAgICAgICAgLyp9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lj6rmnInnvZHlnYDmiJbogIXmoIfpopgsIOS4jeaUr+aMgeS/ruaUuVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0qL1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi572u6aG2XFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLnva7lupVcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtPi0xKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtMiwgMCwgaXRlbVswXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rKh5om+5YiwOicrbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi56e75YqoXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2JpYW5qaScsICfnp7vliqgjJyArIGspO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudW0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi5YiG5LqrXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLkupHliIbkuqtcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9IHR5cGVvZiBqc29uLmNvZGVzW25hbWVdID09ICdmdW5jdGlvbicgPyAkLnN0cmluZ2lmeShqc29uLmNvZGVzW25hbWVdKSA6IGpzb24uY29kZXNbbmFtZV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gJ015UGFyc2VT4piFJyArIG5hbWUgKyAn4piFJyArIGJhc2U2NEVuY29kZShwYXJzZVRleHQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gJ+ebtOmTvuKYhScgKyBqc29uLnRpdGxlW251bV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAn5LqR5YiG5LqrJyAmJiBwYXJzZVRleHQuc3Vic3RyKDAsIDgpID09ICdNeVBhcnNlUycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSBzaGFyZVBhc3RlKHBhcnNlVGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGV4dC5zdWJzdHIoMCwgNikgIT0gJ2Vycm9yOicgPyAnY29weTovLycgKyBwYXJzZVRleHQgKyAnXFxcXFxcXFxu4piF4piF4piFXFxcXFxcXFxuJyArICdNeVBhcnNlU++8micgKyBuYW1lIDogJ3RvYXN0Oi8v5YiG5Lqr5aSx6LSlISHkupHliarotLTmnb/lj6/og73mjILkuoYnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvcHk6Ly8nICsgcGFyc2VUZXh0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aaguS4jeaUr+aMgSc7XFxcXG4gICAgICAgICAgICAgICAgfSAvL3N3aXRjaOeahFxcXFxuICAgICAgICAgICAgfSkgLy9TdHJpbmfnmoRcXFxcbiAgICAgICAgfSkgLy9zdHJpbmdpZnnnmoRcXFxcbiAgICB9LFxcXFxuICAgIHhqUGFyc2U6IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICByZXR1cm4gJChcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXFxcXFwiKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgICAgICBldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcXFxcXCJzYXZlQnV0dG9uKGlucHV0KTtiYWNrKCk7Y2xlYXJWYXIoJ2lucHV0X2FkZCcpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIui+k+WFpeato+ehruagvOW8j+WGheWuuVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXFxcXFwiaW5wdXRfYWRkXFxcXFxcXCIsIGlucHV0KScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXFxcXFwidGV4dGFyZWFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFxcXFxcIi0xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdpbnB1dF9hZGQnKSxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXCI+5oyJ5o+P6L+w6K+J5qC85byP6L6T5YWlLCDor7fli7/loavlhaXlhbbku5bmoLzlvI88YnI+5pys5Zyw5Y+j5LukOiDmk43kvZznsbvlnovimIXlkI3np7DimIXku6PnoIE8YnI+5LqR5Y+j5LukOiDpk77mjqXimIXimIXimIXlkI3np7A7IOe6r+e9keWdgDog55u06ZO+4piFdXJsMeKYhXVybDInLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXCI+5L+dIOWtmCcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdub0xvYWRpbmcnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2FkZCcpKTtcXFxcbiAgICAgICAgICAgICAgICB9LCBzYXZlQnV0dG9uKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9LFxcXFxuICAgIHlkUGFyc2U6IGZ1bmN0aW9uKEJKbW9kZSwgaSkge1xcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIEEgPSBrWzBdLnNwbGl0KCcjJylbMV07XFxcXG4gICAgICAgICAgICB2YXIgQiA9IGtbMV07XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgICAgICB2YXIgaXRlbSA9IGpzb24udGl0bGUuc3BsaWNlKEEsIDEpOyAvLyAxOiDmoIforrDlvIDlp4vkvY3nva7vvIwyOiDliKDpmaTliLDlk6rkuKrkvY3nva5cXFxcbiAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKEIsIDAsIGl0ZW1bMF0pOyAvLyAxOiDlkIzkuIrvvIwyOiAw6KGo56S65LiN5Yig6Zmk77yMMzog5re75Yqg5a+56LGhXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgY2xlYXJWYXIoJ2JpYW5qaScpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgfSwgW0JKbW9kZSwgaV0pXFxcXG4gICAgfSxcXFxcbiAgICBwbHNjUGFyc2U6IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+aJuemHj+WIoOmZpOino+aekCcsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2F1dG8mJmZsb2F0JyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufTtcXFxcblxcXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKS5zZXRQYXJzZSgpO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuiwg+eUqOi3r+eUsVxcXCIsXFxcInBhdGhcXFwiOlxcXCJSb3V0ZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmNvbnN0IGQgPSBbXTtcXFxcbmNvbnN0IGRhdGEgPSB7fTtcXFxcblxcXFxuZGF0YS5vbGRDb25maWcgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCI7XFxcXG5kYXRhLmNqUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFxcXFxcIjtcXFxcbmRhdGEueDVSb3V0ZSA9IFxcXFxcXFwiZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbFxcXFxcXFwiO1xcXFxuXFxcXG5cXFxcbmRhdGEuanhMYXp5ID0gXFxcXFxcXCJldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goJ1xcXFxcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFxcXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFxcXFxcIjtcXFxcblxcXFxuZGF0YS5zelBhcnNlID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiO1xcXFxuXFxcXG5kYXRhLnNldFBhcnNlID0gZnVuY3Rpb24oKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgZGVzYzogJzc5NScsXFxcXG4gICAgICAgIHVybDogdGhpcy54NVJvdXRlLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgIH0pO1xcXFxuICAgIHZhciBvbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcXFxcbiAgICB2YXIgbmV3ViA9IGdldFZhcignanhOZXdWJyk7XFxcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXFxcbiAgICB2YXIgcGljcyA9IFtcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvc2VvdngtMjAtMTAlMjAoOTIpLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmE0LnNpbmFpbWcuY24vbGFyZ2UvOWJkOWIxNjdneTFmd3JoNXhvbHRkajIxaGMwdTB0YXguanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXl1NG5sNmozMWhjMHUwYWhyLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwLzkxYWQ2ZDY1MzhiZjg2ODkuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXNsNXBtbGozMWhjMHhjd2thLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDMyMCkuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCg4MDMpLmpwZydcXFxcbiAgICBdO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGltZzogcGljc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCldLFxcXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPjxicj7jgIDjgIDngrnlh7vkuIrmlrnlpLTlg4/ov5vlhaXnvJbovpE8YnI+54K55q2k6L+b5YWl6K665Z2b5biW5a2Q5YiX6KGoJyxcXFxcbiAgICAgICAgZGVzYzogJ+W9k+WJjeeJiOacrDogdicgKyBvbGRWLFxcXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzEnXFxcXG4gICAgfSk7XFxcXG4gIHNldFJlc3VsdChkKTtcXFxcbn1cXFxcblxcXFxuc3dpdGNoIChnZXRQYXJhbShcXFxcXFxcInR5cGVcXFxcXFxcIikpIHtcXFxcbiAgICBjYXNlIFxcXFxcXFwi6K6+572uXFxcXFxcXCI6XFxcXG4gICAgICAgIGRhdGEuc2V0UGFyc2UoKTtcXFxcbiAgICAgICAgLy9zZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgXFxcXFxcXCLnvJbovpFcXFxcXFxcIjpcXFxcbiAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuanhMaXN0KCk7XFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG5cXFxcdGNhc2UgXFxcXFxcXCLkuLvpophcXFxcXFxcIjpcXFxcblxcXFx0ICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdGhlbWU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLnRoZW1lSW5pdCgpO1xcXFxuICAgICAgICBicmVhaztcXFxcblxcXFx0Y2FzZSBcXFxcXFxcIuino+aekFxcXFxcXFwiOlxcXFxuXFxcXHQgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9qeE1hbmFnZT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuanhNYW5hZ2UoKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgJC5leHBvcnRzID0gZGF0YTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Kej5p6Q6aG55Li755WM6Z2iXFxcIixcXFwicGF0aFxcXCI6XFxcImp4SXRlbVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nKSkucnVsZSk7XFxcXG52YXIgaXNMb2dpbiA9IGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfVxcXFxuZnVuY3Rpb24gYmJzWVooKSB7XFxcXG4gICAgdmFyIF8weDQ3YTliNCA9IHtcXFxcbiAgICAgICAgJ0p4U01uJzogZnVuY3Rpb24oXzB4MjQ5OTUyLCBfMHg0YWJjMTUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyNDk5NTIgKyBfMHg0YWJjMTU7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdMR3dtQyc6ICfnp7vliqgjJyxcXFxcbiAgICAgICAgJ0d2RFZZJzogZnVuY3Rpb24oXzB4NDYxZjJkLCBfMHg1NDA1NzEpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHg0NjFmMmQgKyBfMHg1NDA1NzE7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdXZmVIRCc6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojRkU5QTJFXFxcXFxcXCI+JyxcXFxcbiAgICAgICAgJ0VxSWxzJzogJ+enu+WKqDogJyxcXFxcbiAgICAgICAgJ0VmZmJuJzogJ3RleHRfMicsXFxcXG4gICAgICAgICdSeGt4QSc6IGZ1bmN0aW9uKF8weDMyYTdkMCwgXzB4MWE5MzJjKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4MzJhN2QwKF8weDFhOTMyYyk7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdWQkdKSCc6ICdqZFJvdXRlJyxcXFxcbiAgICAgICAgJ0JaZ1J0JzogZnVuY3Rpb24oXzB4MjY5ODRlLCBfMHg1Y2M5MjYpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyNjk4NGUgPT09IF8weDVjYzkyNjtcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgJ3JnR0NDJzogJ3dEVkViJyxcXFxcbiAgICAgICAgJ01jek9XJzogZnVuY3Rpb24oXzB4Mjg4MGJmLCBfMHgyZDkzMDYsIF8weDk3Nzg3YSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIF8weDI4ODBiZihfMHgyZDkzMDYsIF8weDk3Nzg3YSk7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdGVWpkbSc6ICdiYnNZWicsXFxcXG4gICAgICAgICdscUZoYic6IGZ1bmN0aW9uKF8weDQzYmJlNikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIF8weDQzYmJlNigpO1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICAnRlVScHknOiBmdW5jdGlvbihfMHgyMjY1YzIsIF8weGExZDU2OCwgXzB4MjlkZTAxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4MjI2NWMyKF8weGExZDU2OCwgXzB4MjlkZTAxKTtcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgJ1hJT2JCJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiOydcXFxcbiAgICB9O1xcXFxuICAgIGlmICghXzB4NDdhOWI0WydSeGt4QSddKGdldFZhciwgXzB4NDdhOWI0WydWQkdKSCddKSkge1xcXFxuICAgICAgICBpZiAoXzB4NDdhOWI0WydCWmdSdCddKF8weDQ3YTliNFsncmdHQ0MnXSwgJ0pWa0FaJykpIHtcXFxcbiAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NDdhOWI0WydKeFNNbiddKF8weDQ3YTliNFsnTEd3bUMnXSwgaSkgPT0gQkptb2RlID8gXzB4NDdhOWI0WydKeFNNbiddKF8weDQ3YTliNFsnR3ZEVlknXShfMHg0N2E5YjRbJ1dmZUhEJ10sIF8weDQ3YTliNFsnRXFJbHMnXSksIHhzTGlzdCkgOiAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXCI+JyArIHhzTGlzdCxcXFxcbiAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLCBpKSxcXFxcbiAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0N2E5YjRbJ0VmZmJuJ11cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgXzB4NDdhOWI0WydNY3pPVyddKHB1dFZhciwgXzB4NDdhOWI0WydGVWpkbSddLCBfMHg0N2E5YjRbJ2xxRmhiJ10oaXNMb2dpbnx8ZnVuY3Rpb24gKCl7cmV0dXJuIHRydWV9KSk7XFxcXG4gICAgICAgICAgICBfMHg0N2E5YjRbJ0ZVUnB5J10ocHV0VmFyLCAnamRSb3V0ZScsIF8weDQ3YTliNFsnWElPYkInXSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGdldFZhcihfMHg0N2E5YjRbJ0ZVamRtJ10pO1xcXFxufVxcXFxudmFyIGp4SXRlbSA9IHtcXFxcbiAgICAnanhMaXN0JzogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHZhciBfMHg0YzA0MjcgPSB7XFxcXG4gICAgICAgICAgICAnVVZXb0YnOiBmdW5jdGlvbihfMHgyNmJiMDcsIF8weDIyMWI0ZCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmJiMDcgKyBfMHgyMjFiNGQ7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2NvbG9yJzpmdW5jdGlvbih0ZXh0LCBjb2xvcikge1xcXFxuICAgICAgICAgICAgICAgIHRleHQgKz0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXFxcXFwiICsgY29sb3IgKyBcXFxcXFxcIic+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2t6V0RLJzogZnVuY3Rpb24oXzB4NDg1NGE5LCBfMHgzZTk4YzUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDg1NGE5ICsgXzB4M2U5OGM1O1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdYWHlRcic6ICfnp7vliqgjJyxcXFxcbiAgICAgICAgICAgICdndFVuaic6IGZ1bmN0aW9uKF8weDU5YWFmNywgXzB4MjJjNjZiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDU5YWFmNyArIF8weDIyYzY2YjtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnVXRmV2YnOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojRkU5QTJFXFxcXFxcXFxcXFxcXFxcIj4nLFxcXFxuICAgICAgICAgICAgJ1FPdkpWJzogJ+enu+WKqDogJyxcXFxcbiAgICAgICAgICAgICdBQkV3Qic6ICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFxcXFxcXFxcXCI+JyxcXFxcbiAgICAgICAgICAgICdvenpXRyc6ICd0ZXh0XzInLFxcXFxuICAgICAgICAgICAgJ25XZlZSJzogZnVuY3Rpb24oXzB4NDgwZjNhLCBfMHg0Yzg0ZmMpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDgwZjNhICsgXzB4NGM4NGZjO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdKQ2NOWSc6ICdwYXJzZVJvdXRlJyxcXFxcbiAgICAgICAgICAgICdyZ0RJcCc6ICdiaWFuamknLFxcXFxuICAgICAgICAgICAgJ2hvSWRKJzogJ+KAmOKAmOKAmeKAmTxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcXFxcXFxcXFwiPuaWsCDlu7og6KejIOaekCcsXFxcXG4gICAgICAgICAgICAnRnJHT0gnOiBmdW5jdGlvbihfMHgxMmQ2ZGIsIF8weDJhMDY4ZCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgxMmQ2ZGIgPCBfMHgyYTA2OGQ7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ29DQ1NqJzogZnVuY3Rpb24oXzB4MTliMTc4LCBfMHg0ZWY4ZjYpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTliMTc4ID09PSBfMHg0ZWY4ZjY7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ0haaGxjJzogZnVuY3Rpb24oXzB4NWNhZTAzLCBfMHgyNmUyNDIpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NWNhZTAzID09IF8weDI2ZTI0MjtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnY2dJZUEnOiBmdW5jdGlvbihfMHgyNWUzNjgsIF8weDhiYzhlOSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNWUzNjggKyBfMHg4YmM4ZTk7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ3hkckZ2JzogZnVuY3Rpb24oXzB4NGFiNWQ4LCBfMHgyMTI0MmYpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFiNWQ4ICsgXzB4MjEyNDJmO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICd5d2p1eCc6IGZ1bmN0aW9uKF8weDVlMzA1MSwgXzB4NGUwMjMwKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9O1xcXFxuICAgICAgICB2YXIgXzB4MWQ4YmIxID0gZ2V0VmFyKF8weDRjMDQyN1snSkNjTlknXSk7XFxcXG4gICAgICAgIHZhciBfMHgzYjg5YWIgPSBwYXJzZUZpbGVbJ3RpdGxlJ107XFxcXG4gICAgICAgIHZhciBfMHg0OWRhOTYgPSBnZXRWYXIoXzB4NGMwNDI3WydyZ0RJcCddKTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBfMHg0YzA0MjdbJ2hvSWRKJ10sXFxcXG4gICAgICAgICAgICBkZXNjOifms6jmhI865L2N572u5pON5L2c5Yqf6IO95Y+q5Zyo5YiG57G7562b6YCJ5Li65YWo6YOo5pe255Sf5pWIXFxcXFxcXFxu5LiL5pa55pCc57Si5oyJ5ZCN56ew5oiW5Zyw5Z2ALOmHjee9ruivt+eVmeepuuaIlueCueino+aekOaVsOmHj+aMiemSricsXFxcXG4gICAgICAgICAgICB1cmw6IGJqSXRlbVsneGpQYXJzZSddKCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOifmkJzntKInLFxcXFxuICAgICAgICAgICAgZGVzYzonbWVuZ3gnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J2lucHV0JyxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCdkcC5zZWFyY2hKeCcsaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcXFxuICAgICAgICAgICAgICAgIHRleHRTaXplOiAxMSxcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpLFxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHVybDokLnRvU3RyaW5nKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGxldCBmaWx0ZXJzID0gWyflhajpg6gnLCfpk77mjqUnLCdqc29uJywn5YWN5ZeFJ107XFxcXG4gICAgICAgIGZvcihsZXQgbyBpbiBmaWx0ZXJzKXtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6Z2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PWZpbHRlcnNbb10/J+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPicrZmlsdGVyc1tvXTpmaWx0ZXJzW29dLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4uanhfZmlsdGVyJyxpdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgfSxmaWx0ZXJzW29dKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBfMHgyZWNiZTUgPSBfMHgzYjg5YWJbJ2xlbmd0aCddO1xcXFxuICAgICAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcXFxuICAgICAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J+mTvuaOpScpe1xcXFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KCEvwqkkLy50ZXN0KGl0KSkmJnR5cGVvZihqc29uLmNvZGVzW18weDRjMDQyN1snbldmVlInXShpdCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXFxcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSflhY3ll4UnKXtcXFxcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PnR5cGVvZihqc29uLmNvZGVzW18weDRjMDQyN1snbldmVlInXShpdCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyldKT09PSdmdW5jdGlvbicpO1xcXFxuICAgICAgICB9ZWxzZSBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J2pzb24nKXtcXFxcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PigvwqkkLy50ZXN0KGl0KSkmJnR5cGVvZihqc29uLmNvZGVzW18weDRjMDQyN1snbldmVlInXShpdCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZihnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJykpe1xcXFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJyldKycnKS5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JykpfHxpdC5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJykpKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6XFxcXFxcXCLop6PmnpDmlbA6XFxcXFxcXCIrXzB4NGMwNDI3LmNvbG9yKF8weDNiODlhYi5sZW5ndGgsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOlxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXFxcbiAgICAgICAgICAgICAgICBjbGVhclZhcignZHAuc2VhcmNoSngnKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6YeN572uJ1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIC8vIOS4i+mdouaYr+ino+aekOWIl+ihqOaOkuWIl1xcXFxuICAgICAgICAvLyBmb3IgKHZhciBfMHhlMmMzZDggPSAweDA7IF8weDRjMDQyN1snRnJHT0gnXShfMHhlMmMzZDgsIF8weDJlY2JlNSk7IF8weGUyYzNkOCsrKSB7XFxcXG4gICAgICAgIGZvciAobGV0IF8weGUyYzNkOCBpbiBfMHgzYjg5YWIpIHtcXFxcbiAgICAgICAgICAgIHZhciBfMHgzMzc4OGMgPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXFxcbiAgICAgICAgICAgIHZhciBfMHgzNzg3MWUgPSBfMHg0YzA0MjdbJ25XZlZSJ10oXzB4MzM3ODhjLCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFwvXFxcXFxcXFwvL2csICcnKTtcXFxcbiAgICAgICAgICAgIGlmICgv56e75YqoLyBbJ3Rlc3QnXShfMHg0OWRhOTYpKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKF8weDRjMDQyN1snb0NDU2onXSgndUtMeEYnLCAndUtMeEYnKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WydIWmhsYyddKF8weDRjMDQyN1snWFh5UXInXSArIF8weGUyYzNkOCwgXzB4NDlkYTk2KSA/IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ2NnSWVBJ10oXzB4NGMwNDI3WydVdGZXZiddLCBfMHg0YzA0MjdbJ1FPdkpWJ10pLCBfMHgzNzg3MWUpIDogXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4Mzc4NzFlKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsIF8weGUyYzNkOCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAndGV4dF8yJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MmJjNjE4ID0gXzB4M2I4OWFiW18weGUyYzNkOF07XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHg1Y2Y0MTcgPSBfMHg0YzA0MjdbJ1VWV29GJ10oXzB4MmJjNjE4LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFwvXFxcXFxcXFwvL2csICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC/np7vliqgvIFsndGVzdCddKF8weDQ5ZGE5NikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WydreldESyddKF8weDRjMDQyN1snWFh5UXInXSwgXzB4ZTJjM2Q4KSA9PSBfMHg0OWRhOTYgPyBfMHg0YzA0MjdbJ2d0VW5qJ10oXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1snVXRmV2YnXSwgXzB4NGMwNDI3WydRT3ZKViddKSwgXzB4NWNmNDE3KSA6IF8weDRjMDQyN1snQUJFd0InXSArIF8weDVjZjQxNyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MTE5MzY1ID0gW18weDJiYzYxOCwgXzB4NGMwNDI3WydndFVuaiddKF8weGUyYzNkOCwgJ3x8JyldWydqb2luJ10oJ3x8Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ0FCRXdCJ10sIF8weDVjZjQxNyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NGMwNDI3WydvenpXRyddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3hsU2VsZWN0J10oXzB4MTE5MzY1LCBfMHgyZWNiZTVbJ3RvU3RyaW5nJ10oKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgXzB4YjcwMTkyID0gW18weDMzNzg4YywgXzB4ZTJjM2Q4ICsgJ3x8J11bJ2pvaW4nXSgnfHwnKTtcXFxcbiAgICAgICAgICAgICAgICAvLyDov6rov6rlvbHpmaJ8fDB8fCAg5ZCN56ewfHzntKLlvJUg55qE5pWw57uEXFxcXG4gICAgICAgICAgICAgICAgLy8gQUJFd0Ig5piv57u/6ImyIF8weDM3ODcxZSDmmK/moIfpopjlkI3np7AgIHhkckZ25piv5a2X56ym5Liy6L+e5o6l5Ye95pWwXFxcXG4gICAgICAgICAgICAgICAgLy8gbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXFxcbiAgICAgICAgICAgICAgICBsZXQgZmxhZyA9IF8weDRjMDQyNy5jb2xvcign4pOKJywnIzAwNTFmZicpO1xcXFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J2Z1bmN0aW9uJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXFxcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IF8weDRjMDQyNy5jb2xvcign4pK/JywnI2ZmNzAwMCcpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J3VuZGVmaW5lZCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vIGxldCBjbHMgPSAnPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXCI+JztcXFxcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGl0bGUgPSBfMHg0YzA0MjdbJ3hkckZ2J10oXzB4NGMwNDI3WydBQkV3QiddLCBmbGFnK18weDM3ODcxZSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gZmxhZytjbHMrXzB4Mzc4NzFlO1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGZsYWcrXzB4NGMwNDI3LmNvbG9yKF8weDM3ODcxZSwnIzI5OEEwOCcpO1xcXFxuICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyAndGl0bGUnOiBfMHgzNzg3MWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneGxTZWxlY3QnXShfMHhiNzAxOTIsIF8weDJlY2JlNVsndG9TdHJpbmcnXSgpKVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIF8weDRjMDQyN1sneXdqdXgnXShjbGVhclZhciwgXzB4NGMwNDI3WydyZ0RJcCddKTtcXFxcbiAgICB9LFxcXFxuICAgICdscUZpbGUnOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgdmFyIF8weDU0MWQ3NiA9IHtcXFxcbiAgICAgICAgICAgICdhV2lScyc6IGZ1bmN0aW9uKF8weDQ4ZDc3YiwgXzB4MTkxNjFmLCBfMHgyMWNiODUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDhkNzdiKF8weDE5MTYxZiwgXzB4MjFjYjg1KTtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnd1NmbnonOiBmdW5jdGlvbihfMHg0ODUwZWEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDg1MGVhKCk7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ3FSUWRBJzogJ2pkUm91dGUnLFxcXFxuICAgICAgICAgICAgJ1dRaXFrJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFwiXFxcXFxcXCI7JyxcXFxcbiAgICAgICAgICAgICdwc0dkdCc6IGZ1bmN0aW9uKF8weDE3MDc4MCwgXzB4M2I1MTJhKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDE3MDc4MCA9PSBfMHgzYjUxMmE7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2lteHJpJzogJ3RydWUnLFxcXFxuICAgICAgICAgICAgJ25Ta2p4JzogZnVuY3Rpb24oXzB4OTViZjM4LCBfMHgzMTNmMjUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4OTViZjM4ICE9PSBfMHgzMTNmMjU7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2lWTmVNJzogJ2VlTEptJyxcXFxcbiAgICAgICAgICAgICdJd01UbCc6ICcwfDF8NXw5fDExfDN8Nnw3fDEwfDR8Mnw4JyxcXFxcbiAgICAgICAgICAgICd4ZmRIayc6ICfmi4nlj5bkuLvmj5Lku7blkoznvZHpobXohJrmnKwnLFxcXFxuICAgICAgICAgICAgJ3JHTHVBJzogJ+S4u+aPkuS7tuWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXFx4MGHnvZHpobXohJrmnKzlrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5odG1sJyxcXFxcbiAgICAgICAgICAgICd6UVNMRSc6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICAgICAgICAgICdodmlEbCc6IGZ1bmN0aW9uKF8weDI2ZGI2MiwgXzB4MzEyZjFjKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDI2ZGI2MihfMHgzMTJmMWMpO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdaeFVndCc6ICfmk43kvZzmjIflvJUnLFxcXFxuICAgICAgICAgICAgJ3NXRm9jJzogZnVuY3Rpb24oXzB4MmEwNDRiLCBfMHgxNDlhM2YpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MmEwNDRiICsgXzB4MTQ5YTNmO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdPRWhhdCc6ICfmi4nlj5bku6PnoIEnLFxcXFxuICAgICAgICAgICAgJ1p2dFN1JzogJ+e8lui+keino+aekCcsXFxcXG4gICAgICAgICAgICAnZ1hLTWInOiAndG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLFxcXFxuICAgICAgICAgICAgJ1dDT0RDJzogZnVuY3Rpb24oXzB4NGFkM2Q1LCBfMHgzMWZhMWUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFkM2Q1IDwgXzB4MzFmYTFlO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdyQWtBaCc6ICd0ZXh0XzMnLFxcXFxuICAgICAgICAgICAgJ3lXYU9JJzogJ+aBouWkjeaPkuS7tui3r+W+hOS4uum7mOiupCcsXFxcXG4gICAgICAgICAgICAneWp5aksnOiAn5b2T5YmN6K6+572u5Li6OiAnLFxcXFxuICAgICAgICAgICAgJ3RIWGVFJzogJ+aLieWPluino+aekOWIl+ihqOaIluiAheino+aekOS7o+eggScsXFxcXG4gICAgICAgICAgICAnR01VWXUnOiAn5a2Y5pS+6Lev5b6EOiAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXFxcbiAgICAgICAgICAgICdtcFpCWic6ICdsaW5lX2JsYW5rJyxcXFxcbiAgICAgICAgICAgICd4dnFnRic6ICfovpPlhaXmnInmlYjmj5Lku7blnLDlnYAnLFxcXFxuICAgICAgICAgICAgJ2hldUt4JzogJ3B1dFZhcihcXFxcXFxcInBsdWdpbkxpbmtcXFxcXFxcIixpbnB1dCknLFxcXFxuICAgICAgICAgICAgJ0lpZmlhJzogJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGJpZz7nmbvlvZXmj5DnpLonLFxcXFxuICAgICAgICAgICAgJ1BGUkhBJzogJ+S9v+eUqOebuOWFs+WKn+iDvemcgOeZu+W9leinhueVjOiuuuWdm+i0puWPt1xcXFxcXFxcbuWmguaciemXrumimOWJjeW+gOiuuuWdm+S6huino+ivpuaDhScsXFxcXG4gICAgICAgICAgICAnVUx3a1QnOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci9zaWduaW4nXFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGlmIChfMHg1NDFkNzZbJ3BzR2R0J10oXzB4NTQxZDc2Wyd3U2ZueiddKGJic1laKSwgXzB4NTQxZDc2WydpbXhyaSddKSkge1xcXFxuICAgICAgICAgICAgaWYgKF8weDU0MWQ3NlsnblNrangnXShfMHg1NDFkNzZbJ2lWTmVNJ10sIF8weDU0MWQ3NlsnaVZOZU0nXSkpIHtcXFxcbiAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLCAnYmJzWVonLCBfMHg1NDFkNzZbJ3dTZm56J10oaXNMb2dpbil8fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSk7XFxcXG4gICAgICAgICAgICAgICAgXzB4NTQxZDc2WydhV2lScyddKHB1dFZhciwgXzB4NTQxZDc2WydxUlFkQSddLCBfMHg1NDFkNzZbJ1dRaXFrJ10pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgXzB4NGQyNWZmID0gXzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXFxcXG4gICAgICAgICAgICAgICAgICAgIF8weDRhOTdjOSA9IDB4MDtcXFxcbiAgICAgICAgICAgICAgICB3aGlsZSAoISFbXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF8weDRkMjVmZltfMHg0YTk3YzkrK10pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneGZkSGsnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsncHVsbFNjcmlwdCddKF9teVNldFsnY2pjYWNoZSddLCBfbXlTZXRbJ3g1Y2FjaGUnXSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydyR0x1QSddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8weDU0MWQ3NlsnaHZpRGwnXShldmFsLCBfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLCBfMHg1NDFkNzZbJ3FSUWRBJ10pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzInOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6ICdsaW5lX2JsYW5rJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDJhYjM5OSA9ICdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuanhMaXN0KCk7c2V0UmVzdWx0KGQpOyc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p4VWd0J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiB0eXBlb2YgY3pHdWlkZSA9PSAnZnVuY3Rpb24nID8gY3pHdWlkZSgpIDogJycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGRSb3V0ZSA9IF8weDU0MWQ3Nlsnc1dGb2MnXSh4ZFJvdXRlLCBfbXlTZXRbJ3BhcnNlUm91dGUnXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4M2E5YWZlID0gW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ+aLieWPluWIl+ihqCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxDb2RlJ10oJ+WIl+ihqCcpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ09FaGF0J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxDb2RlJ10oJ+S7o+eggScpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p2dFN1J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBfMHg1NDFkNzZbJ2h2aURsJ10oZmlsZUV4aXN0LCBfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLCAncGFyc2VSb3V0ZScpKSA9PSAhIVtdID8gXzB4MmFiMzk5IDogXzB4NTQxZDc2WydnWEtNYiddXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc3JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfMHgxYTJjZGIgPSAweDA7IF8weDU0MWQ3NlsnV0NPREMnXShfMHgxYTJjZGIsIF8weDNhOWFmZVsnbGVuZ3RoJ10pOyBfMHgxYTJjZGIrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4M2E5YWZlW18weDFhMmNkYl1bJ3RpdGxlJ10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4M2E5YWZlW18weDFhMmNkYl1bJ3VybCddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2WydyQWtBaCddXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzgnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneVdhT0knXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsnaGZQbHVnaW4nXShfbXlTZXRbJ3BhcnNlUm91dGUnXSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydzV0ZvYyddKF8weDU0MWQ3NlsneWp5aksnXSArIG15U2V0WydjaiddLCAnXFxcXFxcXFxu5a2Y5pS+6Lev5b6EOiAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2Wyd0SFhlRSddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogJ3RvYXN0Oi8v6K+35Zyo5LiL5pa56YCJ6aG55pON5L2cJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ0dNVVl1J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTAnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnbXBaQlonXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTEnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2Wyd4dnFnRiddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAnaW5wdXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmEnOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGVWaXNpYmxlJzogIVtdLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsICdwbHVnaW5MaW5rJyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25DaGFuZ2UnOiBfMHg1NDFkNzZbJ2hldUt4J11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydJaWZpYSddLFxcXFxuICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydQRlJIQSddLFxcXFxuICAgICAgICAgICAgICAgICd1cmwnOiBfMHg1NDFkNzZbJ1VMd2tUJ10sXFxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn07XFxcXG4kLmV4cG9ydHMgPSBqeEl0ZW07XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Kej5p6QVXJs57yW6L6RXFxcIixcXFwicGF0aFxcXCI6XFxcIkVkaXRVcmxcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5zZXRQYWdlVGl0bGUoXFxcXFxcXCLmj5Lku7bmjqXlj6Porr7nva5cXFxcXFxcIik7XFxcXG5sZXQgZCA9IFtdO1xcXFxubGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiKTtcXFxcbmxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXG4vKTtcXFxcbmxldCBzZWxlY3RlZCA9IGdldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCBjbGFzc1RhYiA9IFtcXFxcbiAgICBbXFxcXFxcXCLpgInmi6lcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCJdLFxcXFxuICAgIFtcXFxcXFxcIuS/ruaUuVxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIl0sXFxcXG4gICAgW1xcXFxcXFwi5Yig6ZmkXFxcXFxcXCIsIFxcXFxcXFwiMlxcXFxcXFwiXVxcXFxuXTtcXFxcbmxldCBjbGFzc0EgPSBnZXRWYXIoXFxcXFxcXCJjbGFzc1xcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIik7XFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiY2xhc3NcXFxcXFxcIik7XFxcXG59KSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIua3u+WKoOaWsOeahOino+aekFxcXFxcXFwiLFxcXFxuICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLFxcXFxcXFwi6Kej5p6Q5ZCNJibop6PmnpBVUkxcXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXFxcXFxuLyk7XFxcXG4gICAgICAgIGlmKGlucHV0LnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIikubGVuZ3RoIT09Mil7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+agvOW8j+S4jeato+ehrlxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHBhcnNlVXJsQXJyYXkucHVzaChpbnB1dCk7XFxcXG4gICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKTtcXFxcbiAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIiwgcGFyc2VVcmxUZXh0KTtcXFxcbiAgICAgICAgXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFxcXFxcIjtcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbn0pO1xcXFxuZm9yIChsZXQgaXRlbSBvZiBjbGFzc1RhYikge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBpdGVtWzFdID09PSBjbGFzc0EgPyBcXFxcXFxcIuKAnOKAnFxcXFxcXFwiICsgaXRlbVswXSArIFxcXFxcXFwi4oCd4oCdXFxcXFxcXCIgOiBpdGVtWzBdLFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRWYXIoXFxcXFxcXCJjbGFzc1xcXFxcXFwiLCBrZXkpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICB9LCBpdGVtWzFdKSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG59XFxcXG5sZXQgZnVuYztcXFxcbnN3aXRjaCAoY2xhc3NBKSB7XFxcXG4gICAgY2FzZSBcXFxcXFxcIjBcXFxcXFxcIjpcXFxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkKHVybCArIFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwiXFxcXFxcXFxu5pu05pS55o6l5Y+jPiBcXFxcXFxcIiArIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgdGl0bGUgKyBcXFxcXFxcIiYmXFxcXFxcXCIgKyBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCB0aXRsZSk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgXFxcXFxcXCIxXFxcXFxcXCI6XFxcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlLCBpbmRleCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICQodXJsLCBcXFxcXFxcIuivt+i+k+WFpeOAjFxcXFxcXFwiICsgdGl0bGUgKyBcXFxcXFxcIuOAjeeahOaWsOaOpeWPo1xcXFxcXFwiKS5pbnB1dCgodGl0bGUsIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXFxcXFxuLyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkMSA9IHBhcnNlVXJsQXJyYXlbaW5kZXhdO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXlbaW5kZXhdID0gdGl0bGUgKyBcXFxcXFxcIiYmXFxcXFxcXCIgKyBpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIiwgcGFyc2VVcmxUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCB0aXRsZSArIFxcXFxcXFwiJiZcXFxcXFxcIiArIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwiMlxcXFxcXFwiOlxcXFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwi56Gu6K6k5Yig6Zmk44CMXFxcXFxcXCIgKyB0aXRsZSArIFxcXFxcXFwi44CN77yfXFxcXFxcXCIpLmNvbmZpcm0oKHRpdGxlLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxcXFxcbi8pO1xcXFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybEFycmF5LnNwbGljZShpbmRleCwgMSk7XFxcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkMSA9PSBnZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWQwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVVybEFycmF5WzBdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgcGFyc2VVcmxBcnJheVswXS5zcGxpdChcXFxcXFxcIiYmXFxcXFxcXCIpWzFdIHx8IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBwYXJzZVVybEFycmF5WzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBicmVhaztcXFxcblxcXFxufVxcXFxuZm9yIChsZXQgaSBpbiBwYXJzZVVybEFycmF5KSB7XFxcXG4gICAgbGV0IGl0ZW0gPSBwYXJzZVVybEFycmF5W2ldLnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIik7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHNlbGVjdGVkID09IGl0ZW1bMV0gPyBcXFxcXFxcIuKAmOKAmFxcXFxcXFwiICsgaXRlbVswXSArIFxcXFxcXFwi4oCZ4oCZXFxcXFxcXCIgOiBpdGVtWzBdLFxcXFxuICAgICAgICB1cmw6IGZ1bmMoaXRlbVsxXSwgaXRlbVswXSwgaSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfM1xcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Li76aKY566h55CGXFxcIixcXFwicGF0aFxcXCI6XFxcInRoZW1lXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuICAgIGZ1bmN0aW9uIHRoZW1lSW5pdCgpe1xcXFxuICAgICAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcXFxuXFxcXG4gICAgICAgIGZvcih2YXIgaSBpbiBvcHRpb25zKXtcXFxcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcXFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgICAgIHVybDokKG9wdGlvbikubGF6eVJ1bGUoKCk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5pON5L2c57G75Z6L5Li6OicraW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSB7fTtcXFxcbiAgICAgICAgbGV0IHRoZW1lcyA9IHt9O1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZldGNoKHRoZW1lUm91dGUpKTtcXFxcbiAgICAgICAgICAgIHRoZW1lcyA9IG15VGhlbWVzLnRoZW1lc1tteVRoZW1lcy5ub3dfdGhlbWVdO1xcXFxuICAgICAgICB9Y2F0Y2ggKGUpIHt9XFxcXG5cXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgaWYoL17mlq3mj5LkuLvpophALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuS4u+mimC0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGFzVGhlbWUmJmhhc1RoZW1lLmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBteVRoZW1lcy50aGVtZXMpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteVRoZW1lcy50aGVtZXNbal0ubmFtZSA9PT0gbmFtZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxcXFxcbicraWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cobXlUaGVtZXMpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeS4u+mimDpcXFxcXFxcXG4nK25hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxuYW1lLHVybCxteVRoZW1lcyx0aGVtZVJvdXRlKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcXFxcXG4nK2lucHV0O1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSksXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+aWsOWinicsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICB1cmw6JCgpLnJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgbGV0IGQ9W107XFxcXG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4u+mimOWQjeensCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi5pat5o+SLeiTneiOk+S4u+mimFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2FkZF9uYW1lID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L6T5YWl55qE5pivOicrbmV3X2FkZF9uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi5Luj56CBXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX2NvZGUnLCAnJyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6LTEsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFxcXFxcInRoZW1lLm5ld19hZGRfY29kZVxcXFxcXFwiLGlucHV0KSdcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOifkv53lrZgnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFuYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L+Y5rKh5aGr5YaZ5Li76aKY5ZCN56ew5ZGiJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RoZW1lID0ge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RoZW1lID0gSlNPTi5wYXJzZShjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/plJnor6/nmoTkuLvpophqc29u5qC85byPOlxcXFxcXFxcbicrZS5tZXNzYWdlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdUaGVtZSx7J25hbWUnOm5hbWV9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKG5ld1RoZW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmlrDlop7mlq3mj5LkuLvpopg6JytuYW1lXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLnRoZW1lcz8n5Li76aKY5YiX6KGoOuWFseiuoTonK2NvbG9yKG15VGhlbWVzLnRoZW1lcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq5Li76aKYJzpcXFxcXFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluS4u+mimOWIl+ihqFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IydcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpcXFxcXFxcIuaBouWkjeWHuuWOguiuvue9rlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgdXJsOiQoXFxcXFxcXCLlpoLmnpzkvaDnmoTkuLvpopjmsqHms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcXFxcXCIpLmNvbmZpcm0oKCk9PntcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVzID0ge25hbWU6J+m7mOiupOS4u+mimCcsY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sfTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVEZWYgPSB7XFxcXFxcXCJuYW1lXFxcXFxcXCI6XFxcXFxcXCLmlq3lv7Xljp/nmq5cXFxcXFxcIixcXFxcXFxcImNsb3NlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNjNTQ2NGFcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNjgwMDZcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQ2xvc2VCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcInRpcHNCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcImJhcmxhYmVsXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn0sXFxcXFxcXCJiYXJJbnB1dFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCJ9LFxcXFxcXFwic2VsZWN0XFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn19O1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KHtub3dfdGhlbWU6J+m7mOiupOS4u+mimCcsdGhlbWVzOlt0aGVtZXMsdGhlbWVEZWZdfSkpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5LkuLvpopjlt7Lph43nva7kuLrlh7rljoLorr7nva4nXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZm9yKHZhciBpIGluIG15VGhlbWVzLnRoZW1lcyl7XFxcXG4gICAgICAgICAgICBsZXQgbm93VGhlbSA9IG15VGhlbWVzLnRoZW1lc1tpXTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6bXlUaGVtZXMubm93X3RoZW1lPT09bm93VGhlbS5uYW1lPyfwn5GJJytub3dUaGVtLm5hbWU6bm93VGhlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpO1xcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBteXRoZW1lQ29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShteXRoZW1lKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHNoYXJlUGFzdGUobXl0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+aWreaPkuS4u+mimEAnK215dGhlbWUubmFtZSsnQCcrdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpLmlucHV0KChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXl0aGVtZS5uYW1lPT09bXlUaGVtZXMubm93X3RoZW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lc1tpXT1KU09OLnBhcnNlKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv67mlLknXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOS4u+mimDonK215dGhlbWUubmFtZSsnPycpLmNvbmZpcm0oKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOS4u+mimOW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnNwbGljZShpLDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy5ub3dfdGhlbWU9bXl0aGVtZS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbXl0aGVtZS5uYW1lKyfkvZzkuLrpu5jorqTkuLvpopgnO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSxub3dUaGVtLG15VGhlbWVzLGksdGhlbWVSb3V0ZSksXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgfVxcXFxuJC5leHBvcnRzLnRoZW1lSW5pdD10aGVtZUluaXQ7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5pON5L2c5oyH5byVXFxcIixcXFwicGF0aFxcXCI6XFxcIkd1aWRlXFxcIixcXFwicnVsZVxcXCI6XFxcIjxodG1sPlxcXFxuPGhlYWQ+XFxcXG4gICAgPG1ldGEgY2hhcnNldD1cXFxcXFxcIlVURi04XFxcXFxcXCI+XFxcXG48L2hlYWQ+XFxcXG48Ym9keT5cXFxcbjxzdHJvbmc+IDxiaWc+5ouJ5Y+W56+HPC9iaWc+IDwvc3Ryb25nPlxcXFxuPGJyIC8+IOaTjeS9nOmhuuW6j++8mlxcXFxuPGJyIC8+IDEu5pu05paw6YGT6ZW/5LuT5bqTUHJv5YiwNzbniYjmnKxcXFxcbjxiciAvPiAyLuaLieWPluS4u+aPkuS7tuWSjOe9kemhteiEmuacrFxcXFxuPGJyIC8+IDMu5o6o6I2Q55u05o6l5ouJ5Y+W5Luj56CBPHM+5ouJ5Y+W5YiX6KGo4oaS5ouJ5Y+W5Luj56CBPC9zPlxcXFxuPGJyIC8+XFxcXG48YnIgLz5cXFxcbjxzdHJvbmc+PGJpZz7lj6Pku6Tnr4c8L2JpZz48L3N0cm9uZz5cXFxcbjxiciAvPummlumhtei+k+WFpeahhuaUr+aMge+8mlxcXFxuPGJyIC8+MS7liIbkuqvlh7rmnaXnmoTlkIzns7vliJfmj5Lku7bkupHliarotLTmnb/lj6Pku6RcXFxcbjxiciAvPjIu5pyq5Yqg5a+G55qE5ZCM57O75YiX5o+S5Lu25Zyw5Z2ALOaUr+aMgeacrOWcsOaWh+S7tuWmguS7peS4i+agvOW8j+W8gOWktOeahDpmaWxlOi8vLGhpa2VyOi8vLC9zdG9yYWdlXFxcXG48YnIgLz4zLlHnpZ5cXFxcbjxiciAvPjQu5pat5o+SXFxcXG48YnIgLz41LiPpgZPplb/nsr7pgIlcXFxcbjxiciAvPjYuI2Lnq5lcXFxcbjxiciAvPjcuI+WAjemZhlxcXFxuPGJyIC8+XFxcXG48YnIgLz5cXFxcbjxzdHJvbmc+PGJpZz7nvJbovpHnr4c8L2JpZz48L3N0cm9uZz5cXFxcbjxiciAvPumakOiXj+WKn+iDvemcgOefpe+8mlxcXFxuPGJyIC8+6ZqQ6JeP5Yqf6IO95piv5LuO5YiX6KGo5LiK5Yig6Zmk5qCH6aKY77yM5pWF5peg5aSN546w5Yqf6IO9XFxcXG48YnIgLz7nnIvlh4bkuobvvIzkuI3nlKjnmoTmiY3ngrnpmpDol49cXFxcbjxiciAvPuimgeWkjeeOsOeahOivneWOu+S/ruaUueaWsOeahE15UGFyc2UuanNvbu+8jOWcqHRpdGxl55qE5pWw57uE6YKj5oyJ5qC85byP5re75Yqg5qCH6aKYXFxcXG48YnIgLz5cXFxcbjxiciAvPlxcXFxuPHN0cm9uZz48YmlnPuWujOe7kzwvYmlnPjxiciAvPjwvc3Ryb25nPlxcXFxuPHA+djMuNDks5bCP55m95pyA5ZCO55qE5YCU5by6LOWwj+eZveWFs+aAgOaooeW8jzwvcD5cXFxcbjxwPuS4gOmUruWunueOsOmFjee9ruWujOavleWNs+WPr+mAmui/h+aUr+aMgemtlOaWreeahOWwj+eoi+W6j+eci+inhumike+8jOWbnuW9kueZveWrluinhumikei/meS4qumcgOaxguacrOi6qzwvcD5cXFxcbjxwPuaOqOiNkOS9v+eUqOmdkuixhixhcHDlvbHop4YuZHA8L3A+XFxcXG48cD7prZTmlq0o5pat5o+S6YGT6ZW/6a2U5pS554mIKeW3suW8g+Wdkei3kei3r++8jOaEn+iwouWOn+S9nOiAheaWreW/teeahOaPkuS7tuino+aekOWPiuacrOWwj+eoi+W6j+aguOW/g+S7o+eggTwvcD5cXFxcbjwvYm9keT5cXFxcbjwvaHRtbD5cXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLmtYvor5XmlbDmja5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGVtb0RhdGFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4gICAgbGV0IGRlbW9EYXRhID0ge1xcXFxuICAgICAgICDniLHlpYfoibo6WydodHRwczovL3d3dy5pcWl5aS5jb20vdl8xenA3cWdoMjNrZy5odG1sJywnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMmJjOHRrOHI2dWcuaHRtbCddLFxcXFxuICAgICAgICDkvJjphbc6WydodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNE5UZ3hNVFkyTUE9PS5odG1sJywnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTVPRFl4TWpBek5nPT0uaHRtbCddLFxcXFxuICAgICAgICDohb7orq86WydodHRwczovL3YucXEuY29tL3gvY292ZXIvbTQ0MWUzcmpxOWt3cHNjL3AwMDQwZ2ltNGZ6Lmh0bWwnLCdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB4aDkzMTN2L3owMDM5dGJobzdxLmh0bWwnXSxcXFxcbiAgICAgICAg6IqS5p6cOlsnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNzIwNjEvMTIxOTM1NTguaHRtbCcsJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzYzMjg2LzE0Mjk1ODIzLmh0bWwnXSxcXFxcbiAgICAgICAg5ZOU5ZOp5ZOU5ZOpOlsnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDM4MTIxNycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXA0MDgxMjMnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L3NzMzM0MzQnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdmlkZW8vYXYzMzYzNDg2NjMnXSxcXFxcbiAgICAgICAg5pCc54uQOlsnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzk0NTc1ODQuaHRtbCcsJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85MTgyNjQ2Lmh0bWwnXSxcXFxcbiAgICAgICAg6KW/55OcOlsnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82NTUxMzMyMTI1NjU0NjQ3MzEwJywnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82Njk5MzU2NzkyOTA1Nzk0MDU1J10sXFxcXG4gICAgICAgIOmYv+mHjDpbJyddLFxcXFxuICAgICAgICBQUFRWOlsnaHR0cDovL3YucHB0di5jb20vc2hvdy9USW5kV3NJb21OWTV0eDguaHRtbCcsJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvU0NRNXRoNkU5REtWRTNzLmh0bWwnXSxcXFxcbiAgICAgICAg5ZKq5ZKVOlsnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTYzMzUxMTc0MycsJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD03MTYyNzAzMTknXSxcXFxcbiAgICAgICAg5LmQ6KeGOlsnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5Lzc1ODQzMDU5Lmh0bWwnLCdodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvMjQyMjA5MDEuaHRtbCN2aWQ9MjQyMjA5MDEnXSxcXFxcbiAgICAgICAgMTkwNTpbJ2h0dHBzOi8vdmlwLjE5MDUuY29tL3BsYXkvODc1NzQwLnNodG1sJywnaHR0cHM6Ly93d3cuMTkwNS5jb20vdm9kL3BsYXkvODgwNjQxLnNodG1sJ10sXFxcXG4gICAgICAgIOmjjuihjDpbJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMzA0MTQzJywnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0xMDA4OTYzLyddLFxcXFxuICAgIH1cXFxcblxcXFxubGV0IGRlZmF1bHRTZXRzID0gIHtcXFxcbiAgICBxeTogJ+S9oOeIueenkeaKgCcsXFxcXG4gICAgeWs6ICfpoobphbcnLFxcXFxuICAgIHR4OiAn6I2j6ICAJyxcXFxcbiAgICBtZzogJ+iaguiageWFhOW8nycsXFxcXG4gICAgYmw6ICdPS+ino+aekCcsXFxcXG4gICAgc2g6ICfmsZ/muZZEJyxcXFxcbiAgICB4ZzogJ+axn+a5lkQnLFxcXFxuICAgIGFsOiAn5rGf5rmWRCcsXFxcXG4gICAgcHA6ICfkurrkurrov7cnLFxcXFxuICAgIG1pOiAnMTA4MCcsXFxcXG4gICAgbGU6ICfov6rlpaXll4XmjqInLFxcXFxuICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXG4gICAgZnVuOiAn6J6N5YW0JyxcXFxcbiAgICBvbmU6JzEwODAnLFxcXFxuICAgIHFqdTogJ+m7mOiupCcsXFxcXG4gICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcXFxufTtcXFxcblxcXFxubGV0IGZsb29ycyA9ICfikaDikaHikaLikaPikaTikaXikabikafikajikanvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJnvvJDikojikonikorikovikoziko3iko7iko/ikpAnLnNwbGl0KCcnKTtcXFxcbmxldCBlbW9qaXMgPSAnI++4j+KDo3wq77iP4oOjfDDvuI/ig6N8Me+4j+KDo3wy77iP4oOjfDPvuI/ig6N8NO+4j+KDo3w177iP4oOjfDbvuI/ig6N8N++4j+KDo3w477iP4oOjfDnvuI/ig6N88J+FsO+4j3zwn4Wx77iPfPCfjYd88J+NiHzwn42JfPCfjYp88J+Ni3zwn42MfPCfjY188J+Njnzwn42PfPCfjZB88J+NkXzwn42SfPCfjZN88J+NhXzwn42GfPCfjL188J+NhHzwn4ywfPCfjZ588J+Nlnzwn42XfPCfjZR88J+Nn3zwn42VfPCfjbN88J+Nsnzwn42xfPCfjZh88J+NmXzwn42afPCfjZt88J+NnHzwn42dfPCfjaB88J+Nonzwn42jfPCfjaR88J+NpXzwn42hfPCfjaZ88J+Np3zwn42ofPCfjal88J+Nqnzwn46CfPCfjbB88J+Nq3zwn42sfPCfja188J+Nrnzwn42vfPCfjbx84piVfPCfjbV88J+Ntnzwn423fPCfjbh88J+NuXzwn426fPCfjbt88J+NtCcuc3BsaXQoJ3wnKTtcXFxcbmZsb29ycyA9IGZsb29ycy5jb25jYXQoZW1vamlzKTtcXFxcbiQuZXhwb3J0cy5kZW1vRGF0YSA9IGRlbW9EYXRhO1xcXFxuJC5leHBvcnRzLmRlZmF1bHRTZXRzID0gZGVmYXVsdFNldHM7XFxcXG4kLmV4cG9ydHMuZmxvb3JzID0gZmxvb3JzO1xcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuW3peWFt+exu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ1dGlsc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbi8v6ZqP5py65LuO5YiX6KGo5oq95Y+W5LiA5Liq5YWD57SgXFxcXG5mdW5jdGlvbiBnZXRPbmUoaXRzKSB7cmV0dXJuICBpdHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKml0cy5sZW5ndGgpXTt9XFxcXG4vL+WOu+mHje+8iEVTNiBTZXTvvIlcXFxcbmZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcXFxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXFxcbn1cXFxcbi8v6I635Y+W5YiX6KGo5Lit6YeN5aSN6YO95YC8XFxcXG5mdW5jdGlvbiBkdXBsaWNhdGVzKGFycikge1xcXFxuICAgIGxldCByZXM9YXJyLmZpbHRlcigoeCxrKT0+e1xcXFxuICAgICAgICBsZXQgYT1rKjErMTtcXFxcbiAgICAgICAgbGV0IGluZGV4PWFyci5pbmRleE9mKHgsYSk7XFxcXG4gICAgICAgIGlmKGluZGV4Pi0xKXtcXFxcbiAgICAgICAgICAgIHJldHVybiB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICBsZXQgcmU9bmV3IFNldChyZXMpO1xcXFxuICAgIHJldHVybiBBcnJheS5mcm9tKHJlKTtcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRPbmUgPSBnZXRPbmU7XFxcXG4kLmV4cG9ydHMudW5pcXVlMiA9IHVuaXF1ZTI7XFxcXG4kLmV4cG9ydHMuZHVwbGljYXRlcyA9IGR1cGxpY2F0ZXM7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi6Kej5p6Q566h55CGXFxcIixcXFwicGF0aFxcXCI6XFxcImp4TWFuYWdlXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuICAgIGZ1bmN0aW9uIGp4TWFuYWdlKCl7XFxcXG4gICAgICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxcXG5cXFxcbiAgICAgICAgZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcXFxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxcXG4gICAgICAgICAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX29wdGlvbicsJ+mAieaLqScpPT09b3B0aW9uPyfwn5GJJzonJztcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4uanhtX29wdGlvbicsIG9wdGlvbik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgICAgIH0sb3B0aW9uKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBqeHNSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcIjtcXFxcbiAgICAgICAgbGV0IE15SmlleGkgPSB7amlleGlzOltdfTtcXFxcbiAgICAgICAgbGV0IGppZXhpcyA9IHt9O1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXFxcbiAgICAgICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXFxcbiAgICAgICAgfWNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTon5a+85YWlJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICBpZigvXumtlOaWreino+aekOmFjee9rkAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S6Kej5p6Q6YWN572uLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzSXQgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc0l0JiZoYXNJdC5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBuYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXFxcXFxuJytpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl6Kej5p6Q6YWN572uOlxcXFxcXFxcbicrbmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICB9LG5hbWUsdXJsLE15SmlleGksanhzUm91dGUpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5rOV6K+G5Yir55qE5a+85YWl5Y+j5LukOlxcXFxcXFxcbicraW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKSxcXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgbGV0IGlzQXV0byA9IE15SmlleGkuaXNBdXRvO1xcXFxuICAgICAgICBsZXQgYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlO1xcXFxuICAgICAgICBsZXQgdGlwcyA9ICfop6PmnpDphY3nva7liJfooag65YWx6K6hOicrY29sb3IoTXlKaWV4aS5qaWV4aXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4qumFjee9rizoh6rliqjmoaPlvIDlhbM6Jytjb2xvcihpc0F1dG8/J+W8gCc6J+WFsycsJyNmZjcwMDAnKTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOk15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MD90aXBzOlxcXFxcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuaXNBdXRvID0gIU15SmlleGkuaXNBdXRvO1xcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpcHMgPSBNeUppZXhpLmlzQXV0bz8n5byAJzon5YWzJztcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruiHquWKqOaho+aooeW8j+S4ujonK3RpcHNcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcXFxcXCLpgZPplb/mjqjojZBcXFxcXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkvaDniLnnp5HmioAnXSx5azpbJ+mihumFtyddLHR4Olsn6I2j6ICAJ10sbWc6WyfomoLomoHlhYTlvJ8nXSxibDpbJ09L6Kej5p6QJ10sc2g6WyfmsZ/muZZEJ10seGc6WyfmsZ/muZZEJ10sYWw6WyfmsZ/muZZEJ10scHA6Wyfkurrkurrov7cnXSxtaTpbJzEwODAnXSxsZTpbJ+i/quWlpeWXheaOoiddLGZ1bjpbJ+iejeWFtCddLG9uZTpbJzEwODAnXX1dfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KGluaXRTZXQpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7LliJ3lp4vljJYnXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGF1dG9Nb2RlVGlwcyA9IGF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mAn+W6puS8mOWFiCc6J+mhuuW6j+S8mOWFiCc7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbChcXFxcXFxcIuWkh+iDjuWuoOW5uOaWueahiDpcXFxcXFxcIikrY29sb3IoYXV0b01vZGVUaXBzLCcjZmY3MDAwJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8yJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIE15SmlleGkuYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mhuuW6j+S8mOWFiCc6J+mAn+W6puS8mOWFiCc7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5aSH6IOO5a6g5bm45pa55qGI5Li6OicrTXlKaWV4aS5hdXRvTW9kZVxcXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcXFxuICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6Y29sb3IoXFxcXFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFxcXFxcIiwnI2ZmNzAwMCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxcXG4gICAgICAgICAgICB1cmw6JChcXFxcXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFxcXFxcIikuY29uZmlybSgoanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcXFxcXCLpgZPplb/mjqjojZBcXFxcXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkvaDniLnnp5HmioAnXSx5azpbJ+mihumFtyddLHR4Olsn6I2j6ICAJ10sbWc6WyfomoLomoHlhYTlvJ8nXSxibDpbJ09L6Kej5p6QJ10sc2g6WyfmsZ/muZZEJ10seGc6WyfmsZ/muZZEJ10sYWw6WyfmsZ/muZZEJ10scHA6Wyfkurrkurrov7cnXSxtaTpbJzEwODAnXSxsZTpbJ+i/quWlpeWXheaOoiddLGZ1bjpbJ+iejeWFtCddLG9uZTpbJzEwODAnXSx9XX07XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KGluaXRTZXQpKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcXFxuICAgICAgICAgICAgfSxqeHNSb3V0ZSlcXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgbGV0IGNhY2hlVmlkZW9Td2l0Y2ggPSBnZXRWYXIoJ2RwLmNhY2hlVmlkZW8nLCd0cnVlJyk9PT0ndHJ1ZSc/J+W8gCc6J+WFsyc7XFxcXG4gICAgICAgIGxldCBqeFRpbWVvdXQgPSBnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzcwMDAnKTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOnNtYWxsKCflpJrnur/ot6/nvJPlrZg6JykrY29sb3IoY2FjaGVWaWRlb1N3aXRjaCwnI2ZmNzAwMCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoY2FjaGVWaWRlb1N3aXRjaCk9PntcXFxcbiAgICAgICAgICAgICAgICBpZihjYWNoZVZpZGVvU3dpdGNoPT09J+W8gCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RwLmNhY2hlVmlkZW8nLCdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RwLmNhY2hlVmlkZW8nLCd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgIH0sY2FjaGVWaWRlb1N3aXRjaClcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbCgn5YWo5bGA6Kej5p6Q6LaF5pe2OicpK2NvbG9yKGp4VGltZW91dCwnI2ZmNzAwMCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxcXG4gICAgICAgICAgICB1cmw6JChqeFRpbWVvdXQsJ+ivt+iuvue9rumtlOaWreino+aekOi2heaXtizlv4XpobvkuLrmlbTmlbAnKS5pbnB1dCgoKT0+e1xcXFxuICAgICAgICAgICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IDcwMDA7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHB1dFZhcignZHAuanhUaW1lb3V0JyxpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruS4ujonK3BhcnNlSW50KGlucHV0KVxcXFxuICAgICAgICAgICAgfSxqeFRpbWVvdXQpXFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+aJk+W8gOe8lui+keino+aekOaWh+S7ticsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGp4c1JvdXRlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZGl0RmlsZTovLycranhzUm91dGU7XFxcXG4gICAgICAgICAgICB9LGp4c1JvdXRlKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgZm9yKGxldCBpIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICAgICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTpNeUppZXhpLm5vdz09PW5vd0p4Lm5hbWU/J/CfkYknK25vd0p4Lm5hbWU6bm93SngubmFtZSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgICAgICAgbm93Sng6bm93SngsXFxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXFxcbiAgICAgICAgICAgICAgICAgICAganhzUm91dGU6anhzUm91dGVcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm93SnhDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHNoYXJlUGFzdGUobm93SnhDb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k6Kej5p6Q6YWN572u5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645L+u5pS5ISdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vd0p4Lm5hbWU9PT1NeUppZXhpLm5vdyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k6Kej5p6Q6YWN572u5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645Yig6ZmkISdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5zcGxpY2UoaSwxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkubm93PW5vd0p4Lm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytub3dKeC5uYW1lKyfkvZzkuLrlvZPliY3op6PmnpDphY3nva4nO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgIH1cXFxcbiQuZXhwb3J0cy5qeE1hbmFnZT1qeE1hbmFnZTtcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLop6PmnpDnvJbovpFcXFwiLFxcXCJwYXRoXFxcIjpcXFwianhFZGl0XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuICAgIGxldCB7bm93SngsTXlKaWV4aSxqeHNSb3V0ZX0gPSBNWV9QQVJBTVM7XFxcXG5sZXQgbm93SnhUID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLm5vd0p4Jyl8fCd7fScpO1xcXFxubm93SnggPSBub3dKeFQubmFtZT9ub3dKeFQ6bm93Sng7XFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImRuLmp4X3RpdGxlc1xcXFxcXFwiKTtcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImRuLm5vd0p4XFxcXFxcXCIpO1xcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiZG4uanhtX25hbWVcXFxcXFxcIik7XFxcXG59KSk7XFxcXG5sZXQgaWQgPSBudWxsO1xcXFxuZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXFxcbiAgICAgICAgaWQgPSBqO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICB9XFxcXG59XFxcXG5sZXQgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+mFjee9ruWQjeensCcsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLop6PmnpDphY3nva7lkI3np7As5aaC6YGT6ZW/5o6o6I2QXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCdkbi5qeG1fbmFtZScsaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOmdldFZhcignZG4uanhtX25hbWUnLCcnKXx8bm93SngubmFtZVxcXFxuICAgIH0sXFxcXG4gICAgY29sX3R5cGU6J2lucHV0J1xcXFxufSk7XFxcXG4vLyBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5paw5aKeJywn5Yig6ZmkJywn5om56YeP5Yig6ZmkJywn56e75YqoJ107XFxcXG5sZXQgb3B0aW9ucyA9IFsn5paw5aKeJywn5Yig6ZmkJywn56e75YqoJ107XFxcXG5cXFxcbmZvcihsZXQgaSBpbiBvcHRpb25zKXtcXFxcbiAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXFxcbiAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXFxcbiAgICAgICAgLy8gY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcXFxuICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywgb3B0aW9uKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgfSxvcHRpb24pLFxcXFxuICAgIH0pO1xcXFxufVxcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTonbGluZSdcXFxcbn0pO1xcXFxuLy/ojrflj5bmlq3mj5LliJfooahcXFxcbmlmKCFnZXRWYXIoXFxcXFxcXCJkbi5qeF90aXRsZXNcXFxcXFxcIikpe1xcXFxuICAgIGxldCB0aXRsZUFyciA9IFtdLCB1cmxBcnIgPSBbXTtcXFxcbiAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcXFxuICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxcXG4gICAgfVxcXFxuICAgIHRpdGxlQXJyID0ganNvbi50aXRsZTtcXFxcbiAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xcXFxuICAgICAgICB1cmxBcnIucHVzaChqc29uLmNvZGVzW2l0XSk7XFxcXG4gICAgfSk7XFxcXG4gICAgcHV0VmFyKCdkbi5qeF90aXRsZXMnLEpTT04uc3RyaW5naWZ5KHRpdGxlQXJyKSk7XFxcXG59XFxcXG5cXFxcbmxldCB0aXRsZXMgPSBKU09OLnBhcnNlKGdldFZhcignZG4uanhfdGl0bGVzJyl8fCdbXScpO1xcXFxubGV0IHRpdGxlRGljID0ge1xcXFxuICAgIGFsOifpmL/ph4wnLGJsOiflk5Tlk6nlk5Tlk6knLGZ1bjon6aOO6KGMJyxsZTon5LmQ6KeGJyxtZzon6IqS5p6cJyxtaTon5ZKq5ZKVJyxwcDonUFBUVicscXk6J+eIseWlh+iJuicsc2g6J+aQnOeLkCcsXFxcXG4gICAgdHg6J+iFvuiurycseGc6J+ilv+eTnCcseWs6J+S8mOmFtycsb25lOicxOTA1J1xcXFxufVxcXFxuXFxcXG5sZXQgdGl0bGVPcmRlciA9IHthbDo4LGJsOjUsZnVuOjEzLGxlOjExLG1nOjQsbWk6MTAscHA6OSxxeToxLHNoOjYsXFxcXG4gICAgdHg6Myx4Zzo3LHlrOjIsb25lOjEyfTtcXFxcblxcXFxuZnVuY3Rpb24gY29tcGFyZU9kKHRpdGxlT3JkZXIpe1xcXFxuICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYil7XFxcXG4gICAgICAgIGxldCB4ID0gdGl0bGVPcmRlclthXTtcXFxcbiAgICAgICAgbGV0IHkgPSB0aXRsZU9yZGVyW2JdO1xcXFxuICAgICAgICByZXR1cm4geC15O1xcXFxuICAgIH1cXFxcbn1cXFxcbi8vLS0tLS0tLS0tLS0tLS0tLS1cXFxcbmxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyYmaXQhPT0nb3RoJyk7XFxcXG5qZHMgPSBqZHMuc29ydChjb21wYXJlT2QodGl0bGVPcmRlcikpO1xcXFxuZm9yKGxldCBqIGluIGpkcyl7XFxcXG4gICAgbGV0IGp4cyA9IG5vd0p4W2pkc1tqXV18fFtdO1xcXFxuICAgIGxldCB0aXRsZSA9IGpkc1tqXTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTp0aXRsZURpY1t0aXRsZV18fHRpdGxlLFxcXFxuICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngpPT57XFxcXG4gICAgICAgICAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcXFxuICAgICAgICAgICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxcXG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT0n5paw5aKeJyl7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlbF90aXRsZSA9IHRpdGxlcy5maWx0ZXIoaXQ9PiFqeHMuaW5jbHVkZXMoaXQpKTtcXFxcbiAgICAgICAgICAgICAgICBzZWxfdGl0bGUgPSBzZWxfdGl0bGUubWFwKChpdCk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKGpzb24uY29kZXNbaXRdKT09PSdmdW5jdGlvbicpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICfigJzigJzikr/igJ3igJ0nO1xcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YoanNvbi5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICcnO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFnK2l0XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoc2VsX3RpdGxlLDIpLnNlbGVjdCgoTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv4oCY4oCY4pOK4oCZ4oCZfOKAnOKAnOKSv+KAneKAnS9nLCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleS/neWtmDpcXFxcXFxcXG4nK2lkXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAganhzLnB1c2goaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coanhzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKTtcXFxcbiAgICAgICAgICAgIH1lbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KVxcXFxuICAgIH0pO1xcXFxuICAgIGZvcihsZXQgayBpbiBqeHMpe1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6anhzW2tdLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxuangsaWQsayxtYXgpPT57XFxcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeHMucmVtb3ZlKG5qeCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+enu+WKqCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChrLCfnp7vliqjliLDntKLlvJXlpJrlsJE/JykuaW5wdXQoKGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1vdmUoYXJyLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhcnJbZnJvbUluZGV4XTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShmcm9tSW5kZXgsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKHRvSW5kZXgsIDAsIGVsZW1lbnQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJzZUludChpbnB1dCk9PT1rKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WVpeS5n+ayoeWBmidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihwYXJzZUludChpbnB1dCk+bWF4LTF8fHBhcnNlSW50KGlucHV0KTwtMSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDmnIDlpKfnp7vliqjojIPlm7QwLScrcGFyc2VJbnQobWF4LTEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbmV3QXIgPSBqeHMuc3BsaWNlKGssIDEpOyAvLyDliKDmjolcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqeHMudW5zaGlmdChuZXdBclswXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZShqeHMsayxwYXJzZUludChpbnB1dCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTlhYPntKDkuI3mlK/mjIHov5vooYw6JytnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LGp4c1trXSxpZCxrLGp4cy5sZW5ndGgpXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTonbGluZSdcXFxcbiAgICB9KVxcXFxufVxcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOifkv53lrZgnLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxpZCxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpIT09TXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUpe1xcXFxuICAgICAgICAgICAgaWZIYXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1nZXRWYXIoJ2RuLmp4bV9uYW1lJywnJykpLmxlbmd0aD4wO1xcXFxuICAgICAgICAgICAgaWYoaWZIYXMpe1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvoXkv67mlLnnmoTlkI3np7Dph43lpI0s5LiN5YWB6K645L+d5a2YJ1xcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUgPSAgZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmCdcXFxcbiAgICB9LE15SmlleGksaWQsanhzUm91dGUpXFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLlsI/nmb3mqKHlvI9cXFwiLFxcXCJwYXRoXFxcIjpcXFwic21hbGxXaGl0ZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnNldFBhZ2VUaXRsZSgn6YGT6ZW/57uZ5bCP55m955qE5YWz54ixJyk7XFxcXG5jb25zdCB7Y29sb3IsIHNtYWxsLGFwaX0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxubGV0IGZpbGVSb290ID0gYXBpLmhvc3QrJy9oaWtlcnVsZS96eXdfZGF0YS8nO1xcXFxuLy8gbG9nKGZpbGVSb290KTtcXFxcbmxldCBkID0gW107XFxcXG52YXIgdGhlbWVSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFxcXFxcIjtcXFxcbnZhciB0aGVtZU9ubGluZSA9IGZpbGVSb290KycxMSc7XFxcXG52YXIgb2xkUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCI7XFxcXG52YXIgb2xkT25saW5lID0gZmlsZVJvb3QrJzEyJztcXFxcbnZhciBuZXdSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcIjtcXFxcbnZhciBuZXdPbmxpbmUgPSBmaWxlUm9vdCsnMTMnO1xcXFxudmFyIGp4c1JvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXFxcXFwiO1xcXFxudmFyIGp4T25saW5lID0gZmlsZVJvb3QrJzE0JztcXFxcbnZhciBjamNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnO1xcXFxudmFyIHg1Y2FjaGUgPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJztcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6c21hbGwoJ+S9oOWlvSzlsI/nmb0s5Y2z5L2/5ZWl5Lmf5LiN5LyaLOS5n+WPr+S7peeci+aYjueZveS4i+mdoueahOWtl+WQpz8nKSxcXFxcbiAgICBkZXNjOiflpoLmnpzov5jmmK/kuI3kvJos6K+35Yig5Lul5rC45rK7LOWRiui+nuS4jeiwoicsXFxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+aNruivtOS9oOS4jeacjeawlCzkuI3mib/orqToh6rlt7HmmK/lsI/nmb0/XFxcXFxcXFxu54K55oiR5Y+q5piv5Li65LqG5a6j5rOE5LiA5LiL5L2g55qE5oSk5oCSP+WVpeS5n+WIq+ivtOS6hizkuIvljrvmkJ4hJ1xcXFxuICAgIH0pXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICB0aXRsZTpzbWFsbCgn5Y2V6aG56Kej5p6Q6YCJ5oup55WM6Z2i5Li76aKY5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+eahOS4u+mimOmFjee9ruS7peWPiue9kemhteaPkuS7tuWSjOmdmeaAgemhtemdoicsXFxcXG4gICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex5Li76aKY55qE5ZCnIVxcXFxcXFxcbicrdGhlbWVSb3V0ZSkuY29uZmlybSgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpPT57XFxcXG4gICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXFxcbiAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXFxcbiAgICAgICAgICAgbG9nKHRoZW1lQ29kZSk7XFxcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICB9XFxcXG4gICAgICAgbGV0IGNqRnJvbSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiO1xcXFxuICAgICAgIGxldCB4NUZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiO1xcXFxuICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpO1xcXFxuICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTtcXFxcbiAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7XFxcXG4gICAgICAgICAgIGNsZWFyVmFyKFxcXFxcXFwianhPbGRWXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4TmV3VlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bey5oiQ5Yqf5bqU55SoJ1xcXFxuICAgICAgIH1cXFxcbiAgICAgICBjYXRjaChlKXtcXFxcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICB9XFxcXG4gICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDlj4rpu5jorqTliJfooajmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5Lik5LiqTXlQYXJzZS5qc29u5paH5Lu2JyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOmFjee9ruaWh+S7tuWQpyFcXFxcXFxcXG4nK29sZFJvdXRlKydcXFxcXFxcXG4nK25ld1JvdXRlKS5jb25maXJtKChvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKT0+e1xcXFxuICAgICAgICBsZXQgb2xkQ29kZSA9IGZldGNoKG9sZE9ubGluZSk7XFxcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9QYXJzZV9EblxcXFxcXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXFxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG5ld1JvdXRlLCBuZXdDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YWN572u5bqU55So5aSx6LSlXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfmlq3mj5Lop6PmnpDoh6rliqjmoaPmqKHlvI/mmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qETXlKaWV4aS5qc29u5paH5Lu2JyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOiHquWKqOaho+aWueahiOWQpyFcXFxcXFxcXG4nK2p4c1JvdXRlKS5jb25maXJtKChqeHNSb3V0ZSxqeE9ubGluZSk9PntcXFxcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSwganhDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6Ieq5Yqo5qGj5bqU55So5aSx6LSlXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxqeHNSb3V0ZSxqeE9ubGluZSlcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTpzbWFsbCgn55yf55qE5ZWl5Lmf5LiN5Lya5LqGLOi/mOaHkuW+l+S4gOS4quS4queCuT8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuIrov7DmiYDmnInmlofku7ZcXFxcXFxcXG7kuIDplK7mkJ7lroznm7TmjqXljrvmlK/mjIHmlq3mj5LnmoTlsI/nqIvluo/nnIvop4bpopHlsLHooYzllaYnLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCfkv67ku5nms5Xlipvml6DovrknLCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE5LiK6L+w5omA5pyJ5paH5Lu25ZCnIVxcXFxcXFxcbuivt+i+k+WFpemBk+mVv+S/ruS7meazleWKm+aXoOi+ueadpeehruiupOaJp+ihjOatpOaTjeS9nCcpLmlucHV0KChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lKT0+e1xcXFxuICAgICAgICBpZihpbnB1dCE9PSfpgZPplb/kv67ku5nms5Xlipvml6DovrknKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKzmrKHlj5bmtojmiafooYwnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IHRoZW1lQ29kZSA9IGZldGNoKHRoZW1lT25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxcXG4gICAgICAgICAgICBsb2coJ3RoZW1lQ29kZTonK3RoZW1lQ29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Li76aKY5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGNqRnJvbSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgeDVGcm9tID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICAgbGV0IGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcXFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFxcXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXFxcbiAgICAgICAgICAgIC8vIGxvZygnb2xkQ29kZTonK29sZENvZGUpO1xcXFxuICAgICAgICAgICAgLy8gbG9nKCduZXdDb2RlOicrbmV3Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxcXG4gICAgICAgICAgICAvLyBsb2coJ2p4Q29kZTonK2p4Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpOyAvLyDmi4nmj5Lku7ZcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh4NWNhY2hlLCB4NUZpbGUpOyAvL+aLiee9kemhteaWh+S7tlxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7IC8v5ouJ5Li76aKY5paH5Lu2XFxcXG4gICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4T2xkVlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXFxcXFwianhOZXdWXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTsgLy/mi4nmlq3mj5Lpu5jorqTpgInmi6nnlYzpnaLnmoTphY3nva5cXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7IC8v5ouJ5pat5o+S5YaF55qE6Kej5p6QXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7IC8vIOaLieiHquWKqOaho+aWh+S7tlxcXFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LiA6ZSu5qih5byP5bqU55So5aSx6LSlXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lKVxcXFxufSk7XFxcXG5sZXQgZGVzY0luZm8gPSAn5Li76aKY5paH5Lu2OicrdGhlbWVSb3V0ZSsnXFxcXFxcXFxu5Li755WM6Z2i6YWN572uOicrb2xkUm91dGUrJ1xcXFxcXFxcbuWrluWIsOeahOino+aekDonK25ld1JvdXRlKydcXFxcXFxcXG7oh6rliqjmoaPop6PmnpA6JytqeHNSb3V0ZTtcXFxcbmRlc2NJbmZvKz0nXFxcXFxcXFxu5Li75o+S5Lu2OicrY2pjYWNoZSsnXFxcXFxcXFxu5Li76YWN572u6YCJ5oup55WM6Z2i5paH5Lu2OicreDVjYWNoZTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6J+aWh+S7tuaPj+i/sDpcXFxcXFxcXG4nK2Rlc2NJbmZvLFxcXFxuICAgIGNvbF90eXBlOidsb25nX3RleHQnLFxcXFxuICAgIGV4dHJhOnt0ZXh0U2l6ZTogMTMsbGluZVZpc2libGU6ZmFsc2V9XFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifV1cIn0iLCJ0aXRsZSI6IuaWreaPkuaOpeWPo+iuvue9riJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement