Advertisement
xiaomianao666

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

Nov 23rd, 2021
63
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+3LeS8mOmFt1xcXCJdLGNvZGVzOntcXFwi5L2g54i556eR5oqAXFxcIjpcXFwiaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9XFxcIixcXFwi6J6N5YW0XFxcIjpcXFwiaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD1cXFwiLFxcXCLkurrkurrov7ct5LyY6YW3XFxcIjpcXFwiaHR0cHM6Ly9zdmlwLnJlbnJlbm1pLmNjOjIyMjIvYXBpLz9rZXk9bm40ajhydWtQWFNWelI3OEU5JnVybD1cXFwifX0pKVxcbiAgICB9XFxuICAgIHZhciBuZXdDb25maWcgPSBmYmEuZmV0Y2gobmV3Um91dGUpO1xcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXG4gICAgZnVuY3Rpb24gY29tcGFyZShsaXN0KSB7XFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XFxuICAgICAgICAgICAgcmV0dXJuICFsaXN0LmluY2x1ZGVzKGl0KVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmKG5ld0NvbmZpZyYmbmV3Q29uZmlnLmxlbmd0aD4yMCl7XFxuICAgICAgICBldmFsKFxcXCJuZXdDb25maWcgPVxcXCIgKyBuZXdDb25maWcgKyBcXFwiO1xcXCIpO1xcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXG4gICAgfVxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXG5cXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXG4gICAgICAgICAgICBpZDoncXknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXG4gICAgICAgICAgICBpZDonbWcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXG4gICAgICAgICAgICBpZDoneGcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mYv+mHjCcsXFxuICAgICAgICAgICAgaWQ6J2FsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5hbFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXG4gICAgICAgICAgICBpZDoncHAnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnBwXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WSquWSlScsXFxuICAgICAgICAgICAgaWQ6J21pJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5taVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkuZDop4YnLFxcbiAgICAgICAgICAgIGlkOidsZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxuICAgICAgICAgICAgaWQ6J29uZScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub25lXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+mjjuihjCcsXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuZnVuXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFtuS7licsXFxuICAgICAgICAgICAgaWQ6J290aCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxuICAgICAgICAgICAgaWQ6J3FqdScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucWp1XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+aPkuS7ticsXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5jalxcbiAgICAgICAgfSxcXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gZ2V0T3B0aW9uKGlkLHRpdGxlKSB7XFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXG4gICAgICAgIERpZCh0aXRsZSkudmFsdWUgPSBvYmoub3B0aW9uc1tvYmouc2VsZWN0ZWRJbmRleF0udGV4dDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiByZXNldFNlbGVjdChpZCl7XFxuICAgICAgICBEaWQoaWQrXFxcIlNlbGVjdFxcXCIpLm9wdGlvbnMuc2VsZWN0ZWRJbmRleCA9IC0xO1xcbiAgICB9XFxuXFxuICAgIC8v5Ye95pWw6YOo5YiGXFxuXFxuICAgIGZ1bmN0aW9uIFRvYXN0KG1zZyxkdXJhdGlvbil7XFxuICAgICAgICBkdXJhdGlvbj1pc05hTihkdXJhdGlvbik/MjAwMDpkdXJhdGlvbjtcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XFxuICAgICAgICBtLmlubmVySFRNTCA9IG1zZztcXG4gICAgICAgIG0uc3R5bGUuY3NzVGV4dD1cXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcIjtcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7XFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xcbiAgICAgICAgICAgIHZhciBkID0gMC41O1xcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJztcXG4gICAgICAgICAgICBtLnN0eWxlLm9wYWNpdHkgPSAnMCc7XFxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKSB9LCBkICogMTAwMCk7XFxuICAgICAgICB9LCBkdXJhdGlvbik7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLnvJbovpHop6PmnpBcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIC8vZmluZFJ1bGU6IFxcXCJqczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKS5lZGl0KCk7c2V0UmVzdWx0KGQpO1xcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gb3BlblRoZW1lKCl7XFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgcnVsZTogXFxcIj1eX149XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuS4u+mimOeuoeeQhlxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeS4u+mimCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gb3Blbkp4TWFuYWdlKCl7XFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgcnVsZTogXFxcIj1eX149XFxcIixcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuino+aekOmFjee9rueuoeeQhlxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeino+aekCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxuICAgICAgICB9KSk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2FuY2VsKCl7XFxuICAgICAgICBpZighbXlTZXQpe1xcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxuICAgICAgICAgICAgZmJhLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZmJhLmJhY2soZmFsc2UpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBzZXR0aW5ncyl7XFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coRGlkKGtleSkrJycra2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgICAgICAgICBhbGVydChcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXCIra2V5K1xcXCJcXFxcblxcXCIrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3Q29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsICQkJC5zdHJpbmdpZnkoc2V0dGluZ3MpKTtcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcIuWFs1xcXCIpe1xcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSlcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcbiAgICAvL2FsZXJ0KFxcXCLlvZPliY3liIbovqjnjoc6XFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcIipcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXG4gICAgdmFyIHZlcmluZm8gPSBbe1xcbiAgICAgICAgaWQ6J2RuJyxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXG4gICAgICAgIGF2YXRhcjonaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGcnLFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGlkOidkeicsXFxuICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxuICAgICAgICBhdmF0YXI6J2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NDM0ODU3MDA1JnM9NjQwJyxcXG4gICAgICAgIG9wdGlvbjpvcGVuVGhlbWVcXG4gICAgfSxcXG4gICAge1xcbiAgICBpZDonbG0nLFxcbiAgICAgICAgYXV0aG9yOiAn6JOd6I6TJyxcXG4gICAgICAgIGF2YXRhcjogJ2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9MjU3OTk0OTM3OCZzPTY0MCcsXFxuICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxuICAgIH1cXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gZG9PcHRpb24ob3B0aW9uX2lkKXtcXG4gICAgICAgIGxldCB2ZXIgPSB2ZXJpbmZvLmZpbHRlcihpdD0+aXQuaWQ9PT1vcHRpb25faWQpWzBdO1xcbiAgICAgICAgdmVyLm9wdGlvbigpO1xcbiAgICB9XFxuXFxuICAgIGNvbnN0IFJlbmRlckh0bWxBcHAgPSB7XFxuICAgICAgICBkYXRhKCkge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIC8vIHJhd0h0bWw6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IHJlZFxcXCI+6L+Z6YeM5Lya5pi+56S657qi6Imy77yBPC9zcGFuPicsXFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucyxcXG4gICAgICAgICAgICAgICAgdmVyaW5mbzp2ZXJpbmZvLFxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpwbGFjZWhvbGRlcixcXG4gICAgICAgICAgICAgICAgdGlwczp0aXBzLFxcbiAgICAgICAgICAgICAgICB0aGVtZXM6dGhlbWVzLFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdDpteVNlbGVjdCxcXG4gICAgICAgICAgICAgICAgLy8gY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxuICAgICAgICAgICAgICAgIHNob3dUaXBzOmZhbHNlLFxcbiAgICAgICAgICAgICAgICAvL3dpZHRoUHg6d2lkdGhQeFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2RzOntcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcbiAgICAgICAgICAgIC8vICAgICBnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpO1xcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbE9wdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcIuS9oOmAieS4reS6hlxcXCIrZXZlbnQudGFyZ2V0LnZhbHVlKTtcXG4gICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgY29uc3QgYXBwPVZ1ZS5jcmVhdGVBcHAoUmVuZGVySHRtbEFwcCk7XFxuICAgICAgICBhcHAubW91bnQoJ2JvZHknKTtcXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG5cXG48L3NjcmlwdD5cXG5cXG48L2JvZHk+XFxuPC9odG1sPlwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiUGFyc2VfRG4uanNcIixcInBhdGhcIjpcIlBhcnNlX0RuLmpzXCIsXCJydWxlXCI6XCIvLz09PT09PT09PT09PeWFjeWXheiwg+eUqD09PT09PT09PT09PVxcbi8v77yN77yN77yNPV5fXj1cXG5cXG52YXIgdmVyc2lvbiA9IDMuNDk7XFxudmFyIHVwZGF0ZURhdGUgPSAnMjAyMS8xMC8yOS8xMDozNSc7XFxudmFyIF9teVNldCA9IHtcXG4gICAgcWp1OiAn6buY6K6kJyxcXG4gICAgb3RoOifpgZPplb/ku5PlupPpgJrlhY0nLFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxuICAgIHRoZW1lY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvbicsXFxuICAgIGppZXhpY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvbicsXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcbiAgICBvbGRDb25maWc6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicsXFxuICAgIGNrTGluazogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi8nLFxcbiAgICBjajogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9DbG91ZFBhcnNlLVYyX0RuLmpzJyxcXG4gICAgeDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxuICAgIHBhcnNlUm91dGU6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcbn07XFxudmFyIE15UGFyc2VTID0ge307XFxudmFyIG15U2V0ID0gX215U2V0O1xcbmlmIChmaWxlRXhpc3QoX215U2V0LnBhcnNlUm91dGUpKSB7XFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChfbXlTZXQucGFyc2VSb3V0ZSkpO1xcbiAgICBNeVBhcnNlUyA9IHBhcnNlRmlsZS5jb2RlcztcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxufVxcbnZhciBwYXJzZVRpdGxlID0gW1xcbiAgICBcXFwieXVuMTcxN1xcXCIsXFxuICAgIFxcXCJQYW5HdVxcXCIsXFxuICAgIFxcXCJGdVhpbmdcXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlXFxcIixcXG4gICAgXFxcIumBk+mVv+S7k+W6k+mAmuWFjVxcXCIsXFxuICAgIFxcXCJkZWZhdWx0UGFyc2VXZWJcXFwiLFxcbiAgICBcXFwiT0vop6PmnpBcXFwiLFxcbiAgICBcXFwiTTNVOFRWXFxcIixcXG5dO1xcbi8v77yN77yN77yNPV5fXj1cXG5cXG4vL+aOpeWPo+iuvue9ri5cXG5cXG52YXIgc2V0VXJsID0gXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxudmFyIGxhenkgPSBgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClgO1xcblxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXG5cXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXG4vKlxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXG4gKlxcbiAqIHd1aWdlbjogaHR0cHM6Ly93d3cuNWlnZW4uY29tL2RtcGxheWVyL3BsYXllci8/dXJsPVxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXG4gKlxcbiAqL1xcblxcblxcbnZhciB0b29scyA9IHtcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLk1ENShkYXRhKS50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXG4gICAgfSxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXG4gICAgICAgIGlmIChpc0VuY3J5cHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgfSxcXG4gICAgLy9hc2NpaVxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzICsgayk7XFxuICAgIH0sXFxuICAgIC8v5Yev5pKSXFxuICAgIGNhZXNhckNpcGhlcjogZnVuY3Rpb24oc3RyaW5nVmFsdWUsIGspIHtcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xcbiAgICB9LFxcbiAgICBub3dEYXRlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBkYXRlMSA9IG5ldyBEYXRlKCk7XFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGRhdGUxKSB7XFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxuICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZTEuZ2V0TW9udGgoKSArIDE7XFxuICAgICAgICAgICAgdmFyIGRheSA9IGRhdGUxLmdldERhdGUoKTtcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItMFxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIG1vbnRoO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZGF5IDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi1cXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcbiAgICB9LFxcbiAgICB0b0pTT046IGZ1bmN0aW9uKGpzb24pIHtcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgNCk7XFxuICAgIH0sXFxuICAgIHRvVk51bTogZnVuY3Rpb24oYSkge1xcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxuICAgICAgICB2YXIgYyA9IGEuc3BsaXQoJy4nKTtcXG4gICAgICAgIHZhciBudW1fcGxhY2UgPSBbXFxcIlxcXCIsIFxcXCIwXFxcIiwgXFxcIjAwXFxcIiwgXFxcIjAwMFxcXCIsIFxcXCIwMDAwXFxcIl0sXFxuICAgICAgICAgICAgciA9IG51bV9wbGFjZS5yZXZlcnNlKCk7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICB2YXIgbGVuID0gY1tpXS5sZW5ndGg7XFxuICAgICAgICAgICAgY1tpXSA9IHJbbGVuXSArIGNbaV07XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcmVzID0gYy5qb2luKCcnKTtcXG4gICAgICAgIHJldHVybiByZXM7XFxuICAgIH0sXFxuICAgIGNwclZlcnNpb246IGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgIHZhciBfYSA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGEpKSxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXG4gICAgICAgIGIgPSBpc05hTihfYikgPyB2ZXJzaW9uIDogYjtcXG4gICAgICAgIGlmIChfYSA+IF9iKSB7XFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHB1dFZhcignanhPbGRWJywgYik7XFxuICAgIH1cXG59O1xcbmlmIChnZXRWYXIoXFxcImp4T2xkVlxcXCIsIFxcXCIwXFxcIikgIT0gdmVyc2lvbikge1xcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcbiAgICBsZXQganhOZXdWID0gZmV0Y2goJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy9QYXJzZVZlcnNpb24udHh0JyksXFxuICAgICAgICBqeE9sZFYgPSAoZmV0Y2goX215U2V0LmNqY2FjaGUpLnNwbGl0KCd2ZXJzaW9uID0gXFxcIicpWzFdICsgJycpLnNwbGl0KCdcXFwiJylbMF07XFxuICAgIHRvb2xzLmNwclZlcnNpb24oanhOZXdWLCBqeE9sZFYpO1xcbn1cXG5cXG52YXIgUGFyc2VTID0ge307XFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcbiAgICAvLyB1cGRhdGVEYXRlOiB1cGRhdGVEYXRlLFxcbiAgICBwYXJzZUxjOidodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3AvcGFyc2VMYy5qcycsXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxc77ybXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG0zdTggPSBmZXRjaCh2VXJsLCB7fSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvcy5tM3U4JywgbTN1OCk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgcmV0dXJuICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS92aWRlb3MubTN1OCMnO1xcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2U6IGZ1bmN0aW9uKHVybCx0aW1lb3V0KSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZVdlYjogZnVuY3Rpb24ocGxheVVybCx0aW1lb3V0LGV4dHJhKSB7XFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICAgICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHw1MDAwO1xcbiAgICAgICAgZXh0cmEgPSBleHRyYXx8e307XFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBleHRyYS5wbGF5VXJsTGlzdHx8W107XFxuICAgICAgICBpZih0eXBlb2YocGxheVVybExpc3QpPT09J29iamVjdCcmJnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC51bnNoaWZ0KHBsYXlVcmwpO1xcbiAgICAgICAgICAgIGxldCBwbGF5VXJscz1wbGF5VXJsTGlzdC5zbGljZSgwLDQpO1xcbiAgICAgICAgICAgIGxldCBuYW1lcz1leHRyYS5uYW1lTGlzdC5zbGljZSgwLDQpO1xcbiAgICAgICAgICAgIGxvZygn5byA5aeL5om56YeP6Kej5p6QKOW3suWOu+mHjSzlj6rlj5bliY0z5Liq5aSH6IOOKTonK25hbWVzKTtcXG4gICAgICAgICAgICBjb25zdCB7TGF6eVBhcnNlRmFzdH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcbiAgICAgICAgICAgIGxldCByZXQgPSBMYXp5UGFyc2VGYXN0KHBsYXlVcmxzLHRpbWVvdXQsdGltZW91dCk7XFxuICAgICAgICAgICAgaWYodHlwZW9mKHJldCk9PT0nb2JqZWN0JyYmcmV0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgLy9yZXR1cm4gcmV0WzBdXFxuICAgICAgICAgICAgICAgIC8vbG9nKHJldCk7XFxuICAgICAgICAgICAgICAgIGxldCB2ID0gZ2V0QXBwVmVyc2lvbigpO1xcbiAgICAgICAgICAgICAgICBpZihwYXJzZUludCh2KT49MjE5NCYmcmV0Lmxlbmd0aD4xKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gQXJyYXkuZnJvbShuZXcgU2V0KHJldCkpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB1cmxzLm1hcCgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS87Ly50ZXN0KGl0KXx8aXQuc3BsaXQoJzsnKS5sZW5ndGg8Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvQC8udGVzdChoZWFkKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5yZXBsYWNlKC97fH0vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KCcmJicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBoZWFkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sJ++8m++8mycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJscy5tYXAoaXQ9Pml0LnNwbGl0KCc7JylbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHt1cmxzOnVybHMsaGVhZGVyczpoZWFkZXJzfSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFswXVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIHJldHVybiByZXRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICAgICAgbGV0IHg1UGxheT1sYXp5UGFyc2UocGxheVVybCx0aW1lb3V0KTtcXG4gICAgICAgICAgICBpZih0eXBlb2YoeDVQbGF5KT09XFxcInVuZGVmaW5lZFxcXCJ8fCF4NVBsYXkpe1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6YGT6ZW/5LuT5bqT6Kej5p6Q5aSx6LSlXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdGlwcz0veDVSdWxlLy50ZXN0KHg1UGxheSk/XFxcIng15YWN5ZeF5byA5aeLXFxcIjpcXFwi5p6B6YCf5YWN5ZeF5o6i5a6M5q+V77yM5Zyw5Z2AOlxcXCIrKC9eaHR0cC8udGVzdCh4NVBsYXkpP3g1UGxheTon6Z2e5q2j5bi46ZO+5o6lJyk7XFxuICAgICAgICAgICAgbG9nKHRpcHMpO1xcbiAgICAgICAgICAgIHJldHVybiB4NVBsYXk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIG1hb3NzOiBmdW5jdGlvbihqeHVybCwgcmVmKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAocmVmKSB7XFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJyZidHdhZj0nKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArICcmYnR3YWYnICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFwiLylbMV0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KCdidF90b2tlbiA9IFxcXCInKVsxXS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXHNcXFxcU10qP30vKVswXSArICcnKTtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnVybC5zbGljZSgwLCA0KSAhPSAnaHR0cCcpIHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwgXFxcImR2eVlSUWxuUFJDTWRRU2VcXFwiLCBpdikpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcImFwaS5waHBcXFwiO1xcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvKnZhciByZWYgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vJztcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXG4gICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXG4gICAgICAgICAgICAvL3ZhciBwYXJzZSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvaW5kZXgucGhwP3VybD0nICsgdGFpbFVybDtcXG4gICAgICAgICAgICAvL3ZhciBhcGkgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2FwaS5waHAnO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvcGFuZ3UyMDIxL2FwaS5waHAnO1xcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XFxuICAgICAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxuICAgICAgICAgICAgICAgIHBhcnNlID0gZGF0YVsxXTtcXG4gICAgICAgICAgICAgICAgYXBpID0gZGF0YVsyXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIFRpbWUgPSAoTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApICogMSkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHBhcnNlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHZpcFVybCArICcmcmVmZXJlcj0nICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArICcmcmVmPTEmdGltZT0nICsgVGltZSArICcmdHlwZT0mb3RoZXI9JyArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgJyZpb3M9MCcsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24gKHZpcFVybCkge1xcbiAgICAgICAgdmFyIGlzeWsgPSB2aXBVcmwuaW5kZXhPZigneW91a3UnKTtcXG4gICAgICAgIHZhciByZWYgPSBcXFwiaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vangvdHkucGhwP3VybD1cXFwiICsgdmlwVXJsO1xcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzA4MjgvP3VybD1cXFwiICsgdmlwVXJsO1xcbiAgICAgICAgdmFyIGFwaSA9IFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8xMDA0Ly4uaW5kZXguLnBocFxcXCI7XFxuICAgICAgICByZXR1cm4gaXN5ayA9PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArICcsdmlwOicsIHBhcnNlICsgJyx2aXA6JywgYXBpXSk7XFxuICAgIH0sXFxuICAgIE9L6Kej5p6QOidodHRwczovL29ranguY2MvP3VybD0nLFxcbiAgICBNM1U4VFY6J2h0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPScsXFxuICAgIOmBk+mVv+S7k+W6k+mAmuWFjTpmdW5jdGlvbiAodXJsLHRpbWVvdXQpe1xcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcbiAgICB9LFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvL2lmKHZpcFVybC5pbmRleE9mKCd2LnlvdWt1JykhPS0xKXtcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXD8uKi8sJycpO1xcbiAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gcmVmO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuXFxuT2JqZWN0LmFzc2lnbihQYXJzZVMsIG9yaWdpbmFsUGFyc2VTLCBNeVBhcnNlUyk7XFxuLy/opobnm5bpobrluo/vvIznrKzkuInkuKropobnm5bnrKzkuozkuKrnhLblkI7opobnm5bnrKzkuIDkuKpcXG5cXG5cXG5mdW5jdGlvbiBheXRtUGFyc2UodmlwVXJsLHN0clRpdGxlLHRpbWVvdXQscGxheVVybCkge1xcbiAgICAvLyDlj4LmlbAxOuato+eJiOe9keWdgOWcsOWdgCDlj4LmlbAyIOWumuWQkeino+aekOaOpeWPo+WQjeensCDlj4LmlbAzIHg16Kej5p6Q6LaF5pe2IOWPguaVsDQg5a6M5pW055qE5pKt5pS+6ZO+5o6lXFxuICAgIHN0clRpdGxlID0gc3RyVGl0bGV8fCcnO1xcbiAgICBwbGF5VXJsPXBsYXlVcmx8fCcnO1xcbiAgICAvLyBsb2coJ+S8oOWFpWF5dG1QYXJzZeeahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fDUwMDA7XFxuXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgICBsZXQganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbiAgICBsZXQgTXlKaWV4aSA9IHt9O1xcbiAgICBsZXQgamlleGlzID0ge307XFxuICAgIHRyeSB7XFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuICAgIGZ1bmN0aW9uIGdldFBsYXlKeChrZXkpe1xcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gW107Ly/mibnph4/mkq3mlL7lnLDlnYDliJfooahcXG4gICAgICAgIGxldCBuYW1lTGlzdCA9IFtdO1xcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldOyAvLyDpgILnlKjkuo7ov5nkuKrnvZHnq5nnmoTop6PmnpDliJfooahcXG4gICAgICAgIGlmKGp4cyl7XFxuICAgICAgICAgICAgZm9yKGxldCBpIGluIGp4cyl7XFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbanhzW2ldXSA9PSAnc3RyaW5nJyYmUGFyc2VTW2p4c1tpXV0ubWF0Y2goL2h0dHAuKj89Lykpe1xcbiAgICAgICAgICAgICAgICAgICAgcGxheVVybExpc3QucHVzaChQYXJzZVNbanhzW2ldXSt2aXBVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaChqeHNbaV0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy8gcmV0dXJuIHBsYXlVcmxMaXN0XFxuICAgICAgICByZXR1cm4ge3BsYXlVcmxMaXN0OnBsYXlVcmxMaXN0LG5hbWVMaXN0Om5hbWVMaXN0fVxcbiAgICB9XFxuICAgIGxldCBleHRyYSA9IHt9O1xcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICAgaWYoIXN0clRpdGxlKXtcXG4gICAgICAgIHZhciBob3N0O1xcbiAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgIGhvc3QgPSB2aXBVcmwubWF0Y2goL1xcXFwuKC4qPylcXFxcLy8pWzFdO1xcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIGlmKCEvXmh0dHAvLnRlc3QocGxheVVybCkpe1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcIuaWreaPkuiwg+eUqOWksei0pe+8gVxcXFxu6Z2e5q2j5bi455qEdmlw5q2j54mI5Zyw5Z2A5LiU5pyq6K+G5Yir5Y6f56uZ6Kej5p6Q5pKt5pS+5Zyw5Z2AXFxcIjtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy7pgZPplb/ku5PlupPpgJrlhY0ocGxheVVybCx0aW1lb3V0KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGhvc3QpO1xcbiAgICAgICAgc3dpdGNoIChteVNldC5xanUpIHtcXG4gICAgICAgICAgICBjYXNlIFxcXCLpu5jorqRcXFwiOlxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInFxLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQudHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3R4Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJpcWl5aS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnF5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdxeScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwieW91a3UuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgneWsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImFsaXp5XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5hbDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYWwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIm1ndHYuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImJpbGliaWxpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2JsJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJzb2h1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJ0di5zb2h1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJpeGlndWEuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC54ZztcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgneGcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBwdHYuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5wcDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncHAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIm1pZ3V2aWRlby5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtaScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibGUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5sZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIjE5MDUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vbmU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ29uZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiZnVuLnR2XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5mdW47XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2Z1bicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucWp1O1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfWVsc2V7XFxuICAgICAgICBsb2coJ+auteaPkuaJp+ihjOWumuWQkeino+aekOe6v+i3r+WktDonK3N0clRpdGxlKTtcXG4gICAgICAgIHN0ciA9IHN0clRpdGxlO1xcbiAgICB9XFxuICAgIGxldCB3aXRoQmF0Y2ggPSAhIShNeUppZXhpLmlzQXV0byAmJiBNeUppZXhpLmF1dG9Nb2RlID09PSAn6YCf5bqm5LyY5YWIJyk7XFxuICAgIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgaWYoL+mAmuWFjS8udGVzdChzdHIpKXtcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTW3N0cl0odmlwVXJsLHRpbWVvdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHVybCA9IFBhcnNlU1tzdHJdKHZpcFVybCk7XFxuICAgICAgICBpZiAoL15cXFxcLy8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gJ2h0dHBzOicgKyB1cmxcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgvPWh0dHAvLnRlc3QodXJsKSkge1xcbiAgICAgICAgICAgIHVybCA9IC8mdXJsPS8udGVzdCh1cmwpID8gdXJsIDogJ2h0dHAnICsgZGVjb2RlVVJJQ29tcG9uZW50KHVybC5zcGxpdCgnPWh0dHAnKVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICAvKmlmKHVybC5tYXRjaCgvbWd0di5jb20vZyk9PSdtZ3R2LmNvbScpe1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cubWd0di5jb219JztcXG4gICAgICAgIH0gZWxzZSAqL1xcbiAgICAgICAgaWYgKC9cXFxcLmZsdi8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHAmJlJlZmVyZXJAJyArIHZpcFVybCArICd9JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmwgPT09ICcnIHx8IHVybCA9PT0gdmlwVXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHZpcFVybDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIFBhcnNlU1tzdHJdID09ICdzdHJpbmcnJiZQYXJzZVNbc3RyXS5tYXRjaCgvaHR0cC4qPz0vKSkge1xcbiAgICAgICAgLy8gbG9nKFxcXCLmlq3mj5LlvIDlp4vpgJrnlKjmiafooYzlhY3ll4UgZGVmYXVsdFBhcnNlV2ViOlxcXCIrdGltZW91dCk7XFxuICAgICAgICAvL2xvZyhcXFwi6buY6K6keDVcXFwiK1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIpO1xcbiAgICAgICAgaWYod2l0aEJhdGNoKXtcXG4gICAgICAgICAgICBpZih0eXBlb2YoZXh0cmEucGxheVVybExpc3QpPT09J29iamVjdCcmJmV4dHJhLnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSBleHRyYS5wbGF5VXJsTGlzdC5maWx0ZXIoaXQ9Pml0IT09KFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsKTtcXG4gICAgICAgICAgICAgICAgbGV0IG5hbWVMaXN0ID0gZXh0cmEubmFtZUxpc3Q7XFxuICAgICAgICAgICAgICAgIG5hbWVMaXN0LnVuc2hpZnQoc3RyKTtcXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZXh0cmEubmFtZUxpc3Q9dW5pcXVlMihuYW1lTGlzdCk7XFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gdW5pcXVlMihleHRyYS5wbGF5VXJsTGlzdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZXh0cmEgPSB7fVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWI/UGFyc2VTLmRlZmF1bHRQYXJzZVdlYigoUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwsdGltZW91dCxleHRyYSk6KFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsO1xcbiAgICB9IGVsc2UgaWYodHlwZW9mKHN0cik9PT0nc3RyaW5nJyYmc3RyLmxlbmd0aD4xJiYodHlwZW9mIFBhcnNlU1tzdHJdPT0ndW5kZWZpbmVkJ3x8IVBhcnNlU1tzdHJdKSYmIS9eaHR0cC8udGVzdChzdHIpKXtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fov5vooYzmlq3mj5LphY3nva4s5o6o6I2Q5ouJ5Y+W6YGT6ZW/57K+6YCJIVxcXFxu5qOA5rWL5Yiw5peg5pWI55qE6Kej5p6Q6YWN572uOicrc3RyO1xcbiAgICB9ZWxzZSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZShzdHIgKyB2aXBVcmwsdGltZW91dCk7XFxuICAgIH1cXG59XFxuXFxudmFyIHBsYXlQYXJzZSA9IHtcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcbiAgICAgICAgcmV0dXJuICQoanVybCkubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIganNVcmwgPSBKU09OLnBhcnNlKGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKS5jajtcXG4gICAgICAgICAgICB2YXIgTGFiZWwgPSBrO1xcbiAgICAgICAgICAgIHZhciBmYSA9IFsnbGV0dicsICdwcHR2JywgJ3FxJywgJ3lvdWt1JywgJ3FpeWknLCAnaXFpeWknLCAnbWd0dicsICdiaWxpYmlsaScsICdzb2h1JywgJ21pZ3UnLCAnbTE5MDUnLCAndmlwJ107XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBwYXJzZURvbShyZXF1ZXN0KGlucHV0KSwgTGFiZWwpO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5yZXBsYWNlKC9wbGF5ZXJfLio/PXsvLCAncGRhdGE9eycpKTtcXG4gICAgICAgICAgICBldmFsKGZldGNoKGpzVXJsKSk7XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykpIHtcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZmEuaW5jbHVkZXMocGRhdGEuZnJvbSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBwZGF0YS51cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIExhYmVsKVxcbiAgICB9XFxufTtcXG5mdW5jdGlvbiBtelBvcHVwKCkge1xcbiAgICBpZiAoZ2V0VmFyKFxcXCJpamstdHhcXFwiLCBcXFwiXFxcIikgPT0gXFxcIjFcXFwiKSB7XFxuICAgICAgICBzZXRJdGVtKFxcXCJ0aXhpbmdcXFwiLCBcXFwiMVxcXCIpXFxuICAgICAgICBjbGVhclZhcihcXFwiaWprLXR4XFxcIilcXG4gICAgfVxcbiAgICBpZiAoZ2V0SXRlbShcXFwidGl4aW5nXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WFjei0o+WjsOaYjicsXFxuICAgICAgICAgICAgY29udGVudDogJ+acrOeoi+W6j+S4jeaPkOS+m+inhumikeino+aekOacjeWKoVxcXFxu5omA5pyJ5YaF5a655Z2H5LuO55So5oi35YiG5Lqr5Lit5pS26ZuGXFxcXG7ku4XkvpvmtYvor5XlkozlrabkuaDkuqTmtYFcXFxcblxcXFxu56Gu5a6a5Y2z6K6k5Y+v77yM5LiN5YaN5o+Q6YaSJyxcXG4gICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXCJpamstdHhcXFwiLCBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ngrnlh7vkuobnoa7orqRcXFwiXFxuXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuaWYgKCFnZXRWYXIoXFxcInRpeGluZ1xcXCIpKSB7XFxuICAgIG16UG9wdXAoKTtcXG4gICAgcHV0VmFyKCd0aXhpbmcnLCdvaycpO1xcbn1cXG5cXG5mdW5jdGlvbiBzYXZlQnV0dG9uKGNvbnRlbnQsbmFtZSkge1xcbiAgICBuYW1lID0gbmFtZXx8Jyc7XFxuICAgIHZhciBkYXRhID0gY29udGVudC5zcGxpdCgn4piF4piF4piFJyk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMikge1xcbiAgICAgICAgdmFyIF9kdCA9IHBhcnNlUGFzdGUoZGF0YVswXSk7XFxuICAgICAgICBjb250ZW50ID0gX2R0LnN1YnN0cigwLCA2KSAhPT0gJ2Vycm9yOicgPyBfZHQgOiAnJztcXG4gICAgfVxcbiAgICBkYXRhID0gY29udGVudC5zcGxpdCgn4piFJyk7XFxuICAgIHZhciB0eXBlID0gZGF0YVswXTtcXG4gICAgdmFyIGFyckxpc3QgPSBbXTtcXG4gICAgdmFyIG9iakNvZGUgPSB7fTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMiAmJiBkYXRhWzBdICE9PSAn55u06ZO+Jykge1xcbiAgICAgICAgdmFyIG9iaktleSA9IGRhdGFbMV07XFxuICAgICAgICB2YXIgb2JqVmFsdWUgPSBkYXRhWzJdO1xcbiAgICAgICAgaWYgKHR5cGUgPT09ICdNeVBhcnNlUycpIHtcXG4gICAgICAgICAgICBvYmpWYWx1ZSA9IGJhc2U2NERlY29kZShvYmpWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAob2JqVmFsdWUuc3BsaXQoJ2Z1bmN0aW9uJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgIGV2YWwoJ29ialZhbHVlPScgKyBvYmpWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAwLCBvYmpLZXkpOyAvL+a3u+WKoOmhueebrumdnuWIoOmZpFxcbiAgICAgICAgb2JqQ29kZVtvYmpLZXldID0gb2JqVmFsdWU7XFxuXFxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ+ebtOmTvicpIHtcXG4gICAgICAgIGFyckxpc3QgPSBkYXRhO1xcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBhcnJMaXN0ID0gbnVsbDtcXG4gICAgfVxcbiAgICBpZiAoYXJyTGlzdCAhPSBudWxsKSB7XFxuICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH07XFxuICAgICAgICBpZihuYW1lKXsvL+WIoOmZpOWQjeensOWIl+ihqOWSjOS7o+eggVxcbiAgICAgICAgICAgIGpzb24udGl0bGUucmVtb3ZlKG5hbWUpO1xcbiAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgfVxcbiAgICAgICAgYXJyTGlzdCA9IGFyckxpc3QuY29uY2F0KGpzb24udGl0bGUpO1xcbiAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChhcnJMaXN0KSk7XFxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9iakNvZGUpO1xcbiAgICAgICAgaWYgKHR5cGUgPT09ICfmtYvor5UnKSB7XFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUGFyc2VTW2RhdGFbMV1dID09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tkYXRhWzFdXShkYXRhWzJdKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYihQYXJzZVNbZGF0YVsxXV0gKyBkYXRhWzJdKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suS/neWtmOWGheWuuVxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5peg5rOV6K+G5Yir6L+Z5Liq5YaF5a655ZGiXFxcIlxcbiAgICB9XFxufVxcbi8vIOS7peS4i+S7o+eggeWNg+S4h+S4jeimgeaUvuWHuuadpeWQpuWImeaKpemUmVxcbmlmIChnZXRJdGVtKCd1cGRhdGVEYXRlJykgIT0gdXBkYXRlRGF0ZSkge1xcbi8vIGlmICh0cnVlKSB7XFxuICAgIC8vIOaKimZ1bmN0aW9u5Y+Y5oiQc3RyaW5nXFxuICAgIGxldCBmdW5jdGlvbkNvZGUgPSBzYXZlQnV0dG9uICsgJzsnK216UG9wdXA7XFxuICAgIC8vIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcsIGZldGNoKF9teVNldC5ja0xpbmsgKyAncGxzY1BhcnNlLmh0bWwnKSk7XFxuICAgIHNldEl0ZW0oJ215RnVuY3Rpb24nLCBmdW5jdGlvbkNvZGUpO1xcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxufVxcbnZhciBiakl0ZW0gPSB7XFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoaykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGNqY2FjaGUgPSBnZXRWYXIoJ2NqQ2FjaGUnKTtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChrKSk7XFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MuY2ogPSBjamNhY2hlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaywgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2xkUm91dGUgPSBnZXRWYXIoJ29sZENvbmZpZycpO1xcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uZmlnID0ganNvbi5zZXR0aW5ncztcXG4gICAgICAgICAgICAgICAgb2xkQ29uZmlnLmNqID0gY2pjYWNoZTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCAkLnN0cmluZ2lmeShvbGRDb25maWcpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oGi5aSN5oiQ5YqfJztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZyA6KaB5YWI5ouJ5Y+W5YiX6KGoJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHBhcnNlUm91dGUpXFxuICAgIH0sXFxuICAgIHB1bGxDb2RlOiBmdW5jdGlvbihrKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBwdWxsTW9kZSA9IGtbMF07XFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBrWzFdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZUZpbGUgPSBmZXRjaChwYXJzZVJvdXRlKTtcXG4gICAgICAgICAgICBpZiAoIXBhcnNlRmlsZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKTtcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MgPSAhc2V0dGluZ3MgPyB7fSA6IEpTT04ucGFyc2Uoc2V0dGluZ3MpO1xcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHt9O1xcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzID0gc2V0dGluZ3M7XFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBbXTtcXG4gICAgICAgICAgICAgICAganNvbi5jb2RlcyA9IHt9O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgcGFyc2VGaWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHBhcnNlVGl0bGUgPSBbXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VDb2RlPXt9O1xcbiAgICAgICAgICAgIHZhciBjakxpbmsgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcL1xcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoY2pMaW5rLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL+aPkuS7tuWQjS8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsTGluayA9IGNqTGluay5zcGxpdCgn5o+S5Lu25ZCNJylbMF0ucmVwbGFjZSgvW1xcXFxzXS9nLCcnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn6Kej5p6Q5LqR5Ymq5YiH5p2/OicrcmVhbExpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHlQYXN0ZSA9IHBhcnNlUGFzdGUocmVhbExpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXC9cXFxcLy8udGVzdCh5UGFzdGUpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZSh5UGFzdGUuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluS4qum4oeavm+aPkuS7tizph4zpnaLov55QYXJzZVPlr7nosaHpg73msqHmnIkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/puKHmr5vmj5Lku7bmiafooYzmiqXplJk6XFxcXG4nK2UubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6IO96K+G5Yir5LqR5Ymq5YiH5p2/5Lit55qE5YaF5a65OlxcXFxuJyt5UGFzdGUuc3Vic3RyaW5nKDAsMTAwKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjakxpbmsgPT09ICdR56WeJykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGppZXhpID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0Jykuc3BsaXQoJ1xcXFxuJyk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4gamlleGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJyYmJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJyYmJylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gfWVsc2UgaWYoL14jW2EtekEtWjAtOV17MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2NXFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoL14jW1xcXFxTXXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY3ku7vmhI/pnZ7nqbrlrZfnrKbkuLJcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHt0YXNrQ2FsbCwgdGFza1J1bix0YXNrUmVxfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rhc2tDYWxsP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJp+ihjOS7u+WKoeS7k+W6k+iOt+WPluaWreW/teaPkuS7tuemj+WIqeWPo+S7pCcpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRhc2tDYWxsKDE3LCdEbkZ1bGknLFtjakxpbmtdKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IEpTT04ucGFyc2UocmVzdWx0LnJlc3VsdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHJldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmV0Lm9wdD09PSdlcnJvcicpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytyZXQubXNnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndXJsJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2gocmV0LnJldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBodG1sLmluY2x1ZGVzKCdodHRwJyk/IGh0bWw6YmFzZTY0RGVjb2RlKGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBhcnIubWF0Y2goL1tcXFxcU10qPywuKj9bXFxcXHNdL2cpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGppZXhpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlPWppZXhpW2ldLnNwbGl0KCcsJylbMV0uc3BsaXQoXFxcIlxcXFxuXFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSdqeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvW1xcXFxTXSo/LGh0dHBbXFxcXFNdLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHJldC5yZXQuc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnLCcpWzFdLnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL15odHRwLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq55+l55qE56aP5YipOlxcXFxuJytyZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd2aXBKeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT6Z2e5pyA5paw54mI5oiW6ICF56aP5Yip56S+5Yqf6IO95byA5Y+R5LitJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjakxpbms9PT0n5pat5o+SJyl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmhpa2VyOlxcXFwvXFxcXC98XmZpbGU6XFxcXC9cXFxcL3xeaHR0cHxeXFxcXC9zdG9yYWdlXFxcXC98XlxcXFwvc2RjYXJkXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBpZigvXlxcXFwvc3RvcmFnZVxcXFwvfF5cXFxcL3NkY2FyZFxcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGluayA9ICdmaWxlOi8vJytjakxpbms7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNqTGluaykpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blj6Pku6TmnInor68nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIganhKdWRnZSA9IHR5cGVvZiBQYXJzZVMgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgdmFyIGxiSnVkZ2UgPSB0eXBlb2YocGFyc2VUaXRsZSkgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgaWYgKGp4SnVkZ2UgfHwgbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAvLyBpZiAocHVsbE1vZGUgPT09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIC8vICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAvLyDkuI3nrqHmi4nlj5bku6PnoIHov5jmmK/liJfooajpg73opoHmiorliJfooajmi4nkuoZcXG4gICAgICAgICAgICAgICAgaWYgKCFsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgc2NPYmplY3QgPSBbXFxcIkNpdHlJUFxcXCIsIFxcXCJwY1VBXFxcIiwgXFxcImNhY2hlTTN1OFxcXCIsIFxcXCJkZWZhdWx0UGFyc2VcXFwiLFxcXCJkZWZhdWx0UGFyc2VXZWJcXFwiLFxcXCJtYW9zc1xcXCIsIFxcXCJMTFFcXFwiLFxcXCJwYXJzZUxjXFxcIl07XFxuICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBwYXJzZVRpdGxlP3BhcnNlVGl0bGUuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoaXQpKTpbXTtcXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxuXFxuICAgICAgICAgICAgICAgIGlmIChwdWxsTW9kZSA9PT0gJ+S7o+eggScpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxQYXJzZVMgPT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIHNjT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvcmlnaW5hbFBhcnNlU1tzY09iamVjdFtpXV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsUGFyc2VTID1vcmlnaW5hbFBhcnNlUy5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdClbMF0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9yaWdpbmFsUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKFBhcnNlUyk9PVxcXCJ1bmRlZmluZWRcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBwYXJzZUNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBcXFwidG9hc3Q6Ly/msqHmnInku6PnoIHvvIzkuI3lj6/mi4nlj5ZcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy92YXIgbmV3RmlsZSA9IHRvb2xzLnRvSlNPTihqc29uKTsvL+iHquWumuS5iXN0cmluZ2lmeeWHveaVsO+8jOW4puaciei9rOS5ieWtl+esplxcbiAgICAgICAgICAgICAgICB2YXIgbmV3RmlsZSA9ICQuc3RyaW5naWZ5KGpzb24pOyAvL0pTT04ucGFyc2XkvJrmiqXplJlcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsIG5ld0ZpbGUpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5YnICsgcHVsbE1vZGUgKyAn5oiQ5YqfJztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6I635Y+W5Yiw5a+56LGhJztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBbaywgX215U2V0LnBhcnNlUm91dGVdKVxcbiAgICB9LFxcbiAgICBwdWxsU2NyaXB0OiBmdW5jdGlvbihjaiwgeDUpIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGNqRnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/JztcXG4gICAgICAgICAgICB2YXIgeDVGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgdmFyIGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXG4gICAgICAgICAgICAgICAgdmFyIHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMF0sIGNqRmlsZSk7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzFdLCB4NUZpbGUpO1xcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhPbGRWJyk7XFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5oiQ5YqfJztcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrmiJDlip/ojrflj5blhoXlrrknO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIFtjaiwgeDVdKVxcbiAgICB9LFxcbiAgICB4bFNlbGVjdDogZnVuY3Rpb24oYmlhbmppLCBsYkxlbmd0aCkge1xcbiAgICAgICAgcmV0dXJuIFxcXCJzZWxlY3Q6Ly9cXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIG9wdGlvbnM6IFsn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOnJlZFxcXCIgdGl0bGU9XFxcIuWIoOmZpHx8JyArIGJpYW5qaSArICdcXFwiPuWIoCDpmaQnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGNTc0NzRcXFwiIHRpdGxlPVxcXCLpmpDol498fCcgKyBiaWFuamkgKyAnXFxcIj7pmpAg6JePJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojRkY4MDAwXFxcIiB0aXRsZT1cXFwi5L+u5pS5fHwnICsgYmlhbmppICsgJ1xcXCI+5L+uIOaUuScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIue9rumhtnx8JyArIGJpYW5qaSArICcwJyArICdcXFwiPue9riDpobYnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnp7vliqh8fCcgKyBiaWFuamkgKyAnXFxcIj7np7sg5YqoJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi572u5bqVfHwnICsgYmlhbmppICsgbGJMZW5ndGggKyAnXFxcIj7nva4g5bqVJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDRCNDMxXFxcIiB0aXRsZT1cXFwi5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXCI+5Zyw5p2/5YiG5LqrJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDRCNDMxXFxcIiB0aXRsZT1cXFwi5LqR5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXCI+5LqR5p2/5YiG5LqrJ10sXFxuICAgICAgICAgICAgY29sOiAnMicsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0lucHV0ID0gcGFyc2VEb21Gb3JIdG1sKGlucHV0LCAnc3BhbiYmdGl0bGUnKS5zcGxpdCgnfHwnKTtcXG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBuZXdJbnB1dFswXTtcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBuZXdJbnB1dFsxXTtcXG4gICAgICAgICAgICAgICAgdmFyIG51bSA9IG5ld0lucHV0WzJdO1xcbiAgICAgICAgICAgICAgICB2YXIgbnVtMiA9IG5ld0lucHV0WzNdO1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuWIoOmZpFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuWNs+WwhuWIoOmZpDogXFxcIiArIG5hbWUpLmNvbmZpcm0oKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfliKDpmaRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIumakOiXj1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcIiArIG5hbWUgKyBcXFwi44CX6ZqQ6JePXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj6/og73mmK/kuKrnvZHlnYAsIOaCqOWPr+mAieaLqeWIoOmZpFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbmFtZSwgbnVtXSk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLkv67mlLlcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbkNvZGUgPSBuYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuTmFtZSA9IFxcXCLov5nmmK/lkI3np7BcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Db2RlID0ganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTmFtZSA9IG5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFwiKS5ydWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcInNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7YmFjaygpO1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLlu7rorq7mjInpu5jorqTnmoTku6PnoIHmoLzlvI/kv67mlLnlk6ZcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcignaW5wdXRfZWRpdCcsIGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXCItMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICfkv67mlLnimIUnICsgbmFtZSArICfimIUnICsgY29kZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+5qC85byP5Li677ya5pON5L2c57G75Z6L4piF5qCH6aKY4piFZnVuY3Rpb24oKXvoh6rlrprkuYnlhoXlrrl9PGJyPuivt+WLv+Whq+WFpeWFtuS7luagvOW8jycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNhdmVCdXR0b24sbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuVxcXFxu6K+36Ieq6KGM5qOA5rWL6Kej5p6Q5piv5ZCm5pyJ6KKr6KaG55uW55qE5YaF5a65JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZih0eXBlb2YoY29kZSk9PT0nc3RyaW5nJyYmY29kZS5sZW5ndGg+Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBjb2RlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24sbmFtZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj7kv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbk5hbWUsIG5Db2RlXSkgLy9bbmFtZSwganNvbi5jb2Rlc1tuYW1lXS50b1N0cmluZygpXSlcXG4gICAgICAgICAgICAgICAgICAgIC8qfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+q5pyJ572R5Z2A5oiW6ICF5qCH6aKYLCDkuI3mlK/mjIHkv67mlLlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIue9rumhtlxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLnva7lupVcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0yLCAwLCBpdGVtWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuenu+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+eVjOmdolwiLFwicGF0aFwiOlwianhJdGVtXCIsXCJydWxlXCI6XCJ2YXIgXzB4b2RSPSdqc2ppYW1pLmNvbS52NicsXzB4NDg1NT1bXzB4b2RSLCd3N0ZMdzdraUpRPT0nLCdBOEt2SkMvRGlRPT0nLCdSOEt0dzVIRHE4S1NRY09PJywndzUvQ2dWdkNyaTlGd3JsNFhCUld3NnJDaWc9PScsJ0lUVENtY093d3AzQ3FBPT0nLCdHUWhHWThLSicsJ0dNSzFVc0svVkE9PScsJ3dwakN2aVJIJywnSEFNUVN3ND0nLCdBc0tOSER2RHFnPT0nLCdaY0tSd29YQ2t3PT0nLCd3cC9DbXc1K3dvRT0nLCdJTU8vUEFuRGpnPT0nLCd3b3hudzVIRG1DWT0nLCd3b0xDdFFCRndvUT0nLCdkOE9vTlcvQ2x3PT0nLCdlUkhDb1NBaScsJ0pjT21iY09vQU1PcycsJ0o4Szh3NVREa3h3eUFnPT0nLCd3N1l6QVNNPScsJ3dxY0p3cHJDakZVPScsJ2ZRTEN2U3NKJywnT01PQndwd1Z3Nm89JywndzZERHJjT1ZEY091JywnTnNLRUZUVERyZz09JywnVk1PdlA4SzdLZz09JywnT0E1VVFzS3InLCdQOEsydzQzRGtRPT0nLCdJM1BEbThLQScsJ0djS1JOaFhEdmc9PScsJ3c0UENsMjVxdzZNPScsJ1BzTzViOE9MR0E9PScsJ0syckR1OEtOYWpKdWNnPT0nLCdFTUtwdzVYQ3NzT1l3by9Ea2NPTicsJ3c2azJ3cFlJJywnTlRYQ2hjT1J3cDg9JywnZXNPWEFNS2JMdz09Jywnd3Joc0ZWMXAnLCd3cFRDdHdSV3dwOUN3cVBEalE9PScsJ0tuSERnc0tkZmc9PScsJ1UwWERrMXh6JywnUnNPZlB3dDJ3ckxEbGc9PScsJ3dyb1N3ci9EcUdiQ3FzT2xVQ3ZEa01LWnc2YkRpR3NwJywnRThLSGVNS2phdz09JywnWGNPSnc0cyt3cm5Eam1EQ244S21UOE9TdzRUQ2hSWEN1TU96d3IzQ2xzS1pIY0szdzZYRGg4TzBNZz09JywnNW9tQjVZKzY1TGlwNW8yQTVMdXg1WksrNTcyRTZhSzc2SWVRNXA2SScsJ0oyUERrTUtjV1RSb2FCc0FKeTFZJywnNXBPLzVMeXU1b3kyNWI2cScsJzVvdTY1WTJBNUxxbDU2QzcnLCc1NyswNkw2aDZLV1U1cHllJywnS3g5NVdNS2VBUT09JywnNW9PazVhV0w1bzZnNUxxOTZMZUM1Ynl6NUxxbDZidVo2SzZ2JywnSHlrOWZUdkRrZ25EdEg5cCcsJzZMMkU1WWFrNXAydjVwV2E1b3l3NUxxeDVaNmc1WjJyJywnQXpVblRnWERnazNDdDJGdVZzT2pTRjlvVmhQQ24ySENyakZxREROQnc0Yz0nLCc0b090NG9HSzRvR3k0b0tWd3BIRHEydEdWTUtrd3BwV1NCakRwOE9sTE9lWmsrVzl1dWFObWVlbnJnPT0nLCc1THljNTVhMjU1aWc1WVdTNVlpVDZJQ1A2WjZDNTVpSTVieUY2S1dsNTVhUTZLNms1WnloNkxTMjVZNjNET1ducU9hZnBlbVVnZW1odk9XSW4rVzlwdWl0dCtXZmsrUzVwT2lscmVpdHR1YUFwdz09Jywnd3AzRG9zS3F3NHZDaDhPZWFNSytXbHJDczNVZ1I4S2lWMzNEajFwTXc3d3l3NWthUU1PdFN3TkJ3NEZ1dzdRUVRNS3EnLCdJY093VXNPNEt3PT0nLCd3cHZDaURGZHdvaz0nLCd3NFhDdDBqQ3NBZz0nLCd3NFhEcVU3Q3JjT3UnLCd3NHJDczByQ2lBTT0nLCdJTUttUFVIQ2pBPT0nLCdGY0tVdzVmQ29zT3InLCdDeVkzVUE4PScsJ1kyZkR1UmxCJywnSEczRHQ4T2Rmdz09JywnVzhPZ0wzN0Rwdz09JywnVGNPMUh3NWknLCd3cEpGdzRURHBnPT0nLCd3N1Vxd29zRlo4S213Ny9EbDI0VicsJ1dodGF3NW9rdzYzRGlXRm53cVRDc2NPdFB5NVB3b1VvdzZyQ2d3Vmt3cXNjTkhSRUljTzB3cUxDczhLK1VzT2h3NjdDczBERGhzT1p3cGZEc2x3WUVnekR2Y09hVVN2Q3BNT1hQRmZDcHNPd0E4S1Z3clIwdzZ4Snc1TERuRkhEbWNLNXdyN0Nnc0twdzdRdXdxYkNtUVE4d3JIRHZYTjBXMzdEdE1LZkdjT21Kc09qNGJhNDRvRzJ3b1ZJd3A3Q2xuY2xLUTBISFRWa0pNT0dQY09Wd3FuRG5BakNvbFVidzZiRGlNT3onLCd3NUpVUjhPMWN3PT0nLCd3NHRidzZGRXdxSnRYMFE9JywnS1ZmRHU4S2tRdz09JywndzVROXdwUVdHdz09JywnUWhORHc0d3p3b1hDaVR0Mndxdz0nLCc1b3FlNVl5ajVZbU02S0dIJywndzdoWmZzTytSRjF4d3FzPScsJ3dxMTF3NS9EcndBPScsJ0pNS0NXQTl5Tk1Lak5BPT0nLCdVVVBEcFdabXc2dkRuMVpxdzdBPScsJ3c0QXl3cGswR2c9PScsJ2NjT2tER0hDZ2c9PScsJ1hNT09IZ3c9JywndzV3K3dybkRvenc9JywndzU5dnc2Um13cjQ9Jywnd29BZkVXbz0nLCdHc09Kd3JsdXc0VT0nLCd3b1RDdlFkZndvWkF3cW5EbHc9PScsJ1RNT0dQQmxHVWNLM1l5ekR2Zz09JywnWHVXdXIrYVVpdWkyak9XK3RXSERwMzdDdFJnMXc3TmNPOEszd3FCcXdvSENoZ0pqUXhyQ3ZzT21aOEtuUlg4TUY4T0hZc094VUE9PScsJ0o4S0FLRWM9JywnRXNLVXc3SERwZ2c9JywnWE1PMkVHbkNoQT09JywnUzhPZ04xM0RqUT09Jywnd29UQ3JUNTN3cDg9Jywnd3FmQ3JSTjF3b3NwdzV4Q0Mwaz0nLCd3NkxDalVYQ3N4RT0nLCd3b2RRUFVKdicsJ053RENwTU9id3F3PScsJ0JzT213cWhPdzc3Q2hzT3gnLCd3b0FMRUhGSScsJ09jT3Fmc081TGNPa0Z5ekN1WFhDaWNLU3c3WjhQanBnUFhYRGluWjJ3N2pDck1LbE9TVENrOEtWd3JnYVJqVERvTUtpdzdJWTRiZUY0b09pJywnNG9HTjRvT0I0b0s5NG9LbVFTSUt3NDdEcGNLVUdNT0NDY0trZjhLZXdyTU93cHJEZ01LT0FzT3l3NDVMQzI4andyRERwQlBDdU1PTU9jTzh3cWNRZWw0PScsJ3dvRTNFOE80dzdMQ3FnPT0nLCdUTU9SRThLcER3PT0nLCd3cGN3R01PVnc3Yz0nLCdEUUpxVk1LQScsJ0d4UENzTU9kd3FFPScsJ3c0cDJkY09BY3c9PScsJ0g4T1N3cjBCdzQ4PScsJ1czYkRuaTFhJywndzdoWlljTzYnLCd3Nkl2d3A3RGdqYz0nLCdmOE9STVZmRGlBPT0nLCd3cWJDb3dSK3dwMD0nLCd3b3NGd29uQ25rYz0nLCdjY09CSm0zQ2hRPT0nLCdFc0tFRWtQQ2hRPT0nLCc0b09vNG9HeTRvRzc0b0NiRWNPQkI4T2V3NnMzd3BuQ3ZzS2t3ckhEa1JyQ3MzTVV3NkFEYzhPYXc1dFZGc09Ld3JjR3dyOUZ3NUE9JywnR3NLV0lXRENvUT09Jywnd3J0bktXSk0nLCdmY09BRjhLY0ZBPT0nLCdaTU91QVFoaCcsJzU2ZUg1WWlQYlE9PScsJzU2Vzk1WXV1U0dzPScsJ3c0WUF3NU1idzQ3Q29BPT0nLCdlQi9DaVNzSkhBPT0nLCd1anNBU09qVE9pbmF4Wm1pcnouY29tSy5MdjY9PSddOyhmdW5jdGlvbihfMHgzMTUyZGEsXzB4MmY3MWRmLF8weDIyOTM5Nil7dmFyIF8weDQxMDM5OT1mdW5jdGlvbihfMHg0YTgyMzgsXzB4MTQ2N2E1LF8weGUwNDIwNSxfMHgxN2NmZDcsXzB4MzgyNDE0KXtfMHgxNDY3YTU9XzB4MTQ2N2E1Pj4weDgsXzB4MzgyNDE0PSdwbyc7dmFyIF8weDk2ZDI3ND0nc2hpZnQnLF8weDcxOTM0Mj0ncHVzaCc7aWYoXzB4MTQ2N2E1PF8weDRhODIzOCl7d2hpbGUoLS1fMHg0YTgyMzgpe18weDE3Y2ZkNz1fMHgzMTUyZGFbXzB4OTZkMjc0XSgpO2lmKF8weDE0NjdhNT09PV8weDRhODIzOCl7XzB4MTQ2N2E1PV8weDE3Y2ZkNztfMHhlMDQyMDU9XzB4MzE1MmRhW18weDM4MjQxNCsncCddKCk7fWVsc2UgaWYoXzB4MTQ2N2E1JiZfMHhlMDQyMDVbJ3JlcGxhY2UnXSgvW3VBU09UT254WnJ6S0w9XS9nLCcnKT09PV8weDE0NjdhNSl7XzB4MzE1MmRhW18weDcxOTM0Ml0oXzB4MTdjZmQ3KTt9fV8weDMxNTJkYVtfMHg3MTkzNDJdKF8weDMxNTJkYVtfMHg5NmQyNzRdKCkpO31yZXR1cm4gMHhhZTkxMTt9O3JldHVybiBfMHg0MTAzOTkoKytfMHgyZjcxZGYsXzB4MjI5Mzk2KT4+XzB4MmY3MWRmXl8weDIyOTM5Njt9KF8weDQ4NTUsMHgxNmIsMHgxNmIwMCkpO3ZhciBfMHg0YjVhPWZ1bmN0aW9uKF8weDRmNWZhZCxfMHgzZWFhZjMpe18weDRmNWZhZD1+ficweCdbJ2NvbmNhdCddKF8weDRmNWZhZCk7dmFyIF8weDJiNDQ0ZD1fMHg0ODU1W18weDRmNWZhZF07aWYoXzB4NGI1YVsnWmlFZWNvJ109PT11bmRlZmluZWQpeyhmdW5jdGlvbigpe3ZhciBfMHgxYWVkMDU9dHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnP3dpbmRvdzp0eXBlb2YgcHJvY2Vzcz09PSdvYmplY3QnJiZ0eXBlb2YgcmVxdWlyZT09PSdmdW5jdGlvbicmJnR5cGVvZiBnbG9iYWw9PT0nb2JqZWN0Jz9nbG9iYWw6dGhpczt2YXIgXzB4MTI2MGNmPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7XzB4MWFlZDA1WydhdG9iJ118fChfMHgxYWVkMDVbJ2F0b2InXT1mdW5jdGlvbihfMHgxNmNjMTQpe3ZhciBfMHg1NDg4MWQ9U3RyaW5nKF8weDE2Y2MxNClbJ3JlcGxhY2UnXSgvPSskLywnJyk7Zm9yKHZhciBfMHg0YTdmMTk9MHgwLF8weDI0NWYxNixfMHgyYTI5MjUsXzB4MTgzYTNjPTB4MCxfMHgxZjdkOTM9Jyc7XzB4MmEyOTI1PV8weDU0ODgxZFsnY2hhckF0J10oXzB4MTgzYTNjKyspO35fMHgyYTI5MjUmJihfMHgyNDVmMTY9XzB4NGE3ZjE5JTB4ND9fMHgyNDVmMTYqMHg0MCtfMHgyYTI5MjU6XzB4MmEyOTI1LF8weDRhN2YxOSsrJTB4NCk/XzB4MWY3ZDkzKz1TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKDB4ZmYmXzB4MjQ1ZjE2Pj4oLTB4MipfMHg0YTdmMTkmMHg2KSk6MHgwKXtfMHgyYTI5MjU9XzB4MTI2MGNmWydpbmRleE9mJ10oXzB4MmEyOTI1KTt9cmV0dXJuIF8weDFmN2Q5Mzt9KTt9KCkpO3ZhciBfMHgxNTEwN2Y9ZnVuY3Rpb24oXzB4M2E5N2VhLF8weDNlYWFmMyl7dmFyIF8weDJkNGVlYT1bXSxfMHgxM2Q3MGI9MHgwLF8weDEwYzEyYixfMHgzMzYwNGU9JycsXzB4MTU3YTU1PScnO18weDNhOTdlYT1hdG9iKF8weDNhOTdlYSk7Zm9yKHZhciBfMHgzNWFlYzM9MHgwLF8weDFmZTJlYT1fMHgzYTk3ZWFbJ2xlbmd0aCddO18weDM1YWVjMzxfMHgxZmUyZWE7XzB4MzVhZWMzKyspe18weDE1N2E1NSs9JyUnKygnMDAnK18weDNhOTdlYVsnY2hhckNvZGVBdCddKF8weDM1YWVjMylbJ3RvU3RyaW5nJ10oMHgxMCkpWydzbGljZSddKC0weDIpO31fMHgzYTk3ZWE9ZGVjb2RlVVJJQ29tcG9uZW50KF8weDE1N2E1NSk7Zm9yKHZhciBfMHg0M2EwYWM9MHgwO18weDQzYTBhYzwweDEwMDtfMHg0M2EwYWMrKyl7XzB4MmQ0ZWVhW18weDQzYTBhY109XzB4NDNhMGFjO31mb3IoXzB4NDNhMGFjPTB4MDtfMHg0M2EwYWM8MHgxMDA7XzB4NDNhMGFjKyspe18weDEzZDcwYj0oXzB4MTNkNzBiK18weDJkNGVlYVtfMHg0M2EwYWNdK18weDNlYWFmM1snY2hhckNvZGVBdCddKF8weDQzYTBhYyVfMHgzZWFhZjNbJ2xlbmd0aCddKSklMHgxMDA7XzB4MTBjMTJiPV8weDJkNGVlYVtfMHg0M2EwYWNdO18weDJkNGVlYVtfMHg0M2EwYWNdPV8weDJkNGVlYVtfMHgxM2Q3MGJdO18weDJkNGVlYVtfMHgxM2Q3MGJdPV8weDEwYzEyYjt9XzB4NDNhMGFjPTB4MDtfMHgxM2Q3MGI9MHgwO2Zvcih2YXIgXzB4ODU0YWIwPTB4MDtfMHg4NTRhYjA8XzB4M2E5N2VhWydsZW5ndGgnXTtfMHg4NTRhYjArKyl7XzB4NDNhMGFjPShfMHg0M2EwYWMrMHgxKSUweDEwMDtfMHgxM2Q3MGI9KF8weDEzZDcwYitfMHgyZDRlZWFbXzB4NDNhMGFjXSklMHgxMDA7XzB4MTBjMTJiPV8weDJkNGVlYVtfMHg0M2EwYWNdO18weDJkNGVlYVtfMHg0M2EwYWNdPV8weDJkNGVlYVtfMHgxM2Q3MGJdO18weDJkNGVlYVtfMHgxM2Q3MGJdPV8weDEwYzEyYjtfMHgzMzYwNGUrPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oXzB4M2E5N2VhWydjaGFyQ29kZUF0J10oXzB4ODU0YWIwKV5fMHgyZDRlZWFbKF8weDJkNGVlYVtfMHg0M2EwYWNdK18weDJkNGVlYVtfMHgxM2Q3MGJdKSUweDEwMF0pO31yZXR1cm4gXzB4MzM2MDRlO307XzB4NGI1YVsnWk1GSm1NJ109XzB4MTUxMDdmO18weDRiNWFbJ2d4dlpTaCddPXt9O18weDRiNWFbJ1ppRWVjbyddPSEhW107fXZhciBfMHg0Y2JhOTE9XzB4NGI1YVsnZ3h2WlNoJ11bXzB4NGY1ZmFkXTtpZihfMHg0Y2JhOTE9PT11bmRlZmluZWQpe2lmKF8weDRiNWFbJ0liaFZ0SyddPT09dW5kZWZpbmVkKXtfMHg0YjVhWydJYmhWdEsnXT0hIVtdO31fMHgyYjQ0NGQ9XzB4NGI1YVsnWk1GSm1NJ10oXzB4MmI0NDRkLF8weDNlYWFmMyk7XzB4NGI1YVsnZ3h2WlNoJ11bXzB4NGY1ZmFkXT1fMHgyYjQ0NGQ7fWVsc2V7XzB4MmI0NDRkPV8weDRjYmE5MTt9cmV0dXJuIF8weDJiNDQ0ZDt9O2V2YWwoSlNPTltfMHg0YjVhKCcwJywndGsmWicpXShmZXRjaChfMHg0YjVhKCcxJywnU3VIZScpKSlbJ3J1bGUnXSk7ZnVuY3Rpb24gYmJzWVooKXt2YXIgXzB4NDdhOWI0PXsnSnhTTW4nOmZ1bmN0aW9uKF8weDI0OTk1MixfMHg0YWJjMTUpe3JldHVybiBfMHgyNDk5NTIrXzB4NGFiYzE1O30sJ0xHd21DJzon56e75YqoIycsJ0d2RFZZJzpmdW5jdGlvbihfMHg0NjFmMmQsXzB4NTQwNTcxKXtyZXR1cm4gXzB4NDYxZjJkK18weDU0MDU3MTt9LCdXZmVIRCc6XzB4NGI1YSgnMicsJ3ppMV0nKSwnRXFJbHMnOifnp7vliqg6XFxcXHgyMCcsJ0VmZmJuJzpfMHg0YjVhKCczJywnVSNdNScpLCdSeGt4QSc6ZnVuY3Rpb24oXzB4MzJhN2QwLF8weDFhOTMyYyl7cmV0dXJuIF8weDMyYTdkMChfMHgxYTkzMmMpO30sJ1ZCR0pIJzonamRSb3V0ZScsJ0JaZ1J0JzpmdW5jdGlvbihfMHgyNjk4NGUsXzB4NWNjOTI2KXtyZXR1cm4gXzB4MjY5ODRlPT09XzB4NWNjOTI2O30sJ3JnR0NDJzpfMHg0YjVhKCc0JywnXihOKScpLCdNY3pPVyc6ZnVuY3Rpb24oXzB4Mjg4MGJmLF8weDJkOTMwNixfMHg5Nzc4N2Epe3JldHVybiBfMHgyODgwYmYoXzB4MmQ5MzA2LF8weDk3Nzg3YSk7fSwnRlVqZG0nOl8weDRiNWEoJzUnLCdVI101JyksJ2xxRmhiJzpmdW5jdGlvbihfMHg0M2JiZTYpe3JldHVybiBfMHg0M2JiZTYoKTt9LCdGVVJweSc6ZnVuY3Rpb24oXzB4MjI2NWMyLF8weGExZDU2OCxfMHgyOWRlMDEpe3JldHVybiBfMHgyMjY1YzIoXzB4YTFkNTY4LF8weDI5ZGUwMSk7fSwnWElPYkInOid2YXJcXFxceDIweGRSb3V0ZT1cXFxceDIyXFxcXHgyMjsnfTtpZighXzB4NDdhOWI0W18weDRiNWEoJzYnLCdiXSpjJyldKGdldFZhcixfMHg0N2E5YjRbXzB4NGI1YSgnNycsJ3NhS3cnKV0pKXtpZihfMHg0N2E5YjRbXzB4NGI1YSgnOCcsJzdGQXInKV0oXzB4NDdhOWI0W18weDRiNWEoJzknLCdUJSRYJyldLF8weDRiNWEoJ2EnLCdhMXJrJykpKXtkW18weDRiNWEoJ2InLCc3RkFyJyldKHsndGl0bGUnOl8weDQ3YTliNFtfMHg0YjVhKCdjJywnQjBjdScpXShfMHg0N2E5YjRbXzB4NGI1YSgnZCcsJ0V1KnQnKV0saSk9PUJKbW9kZT9fMHg0N2E5YjRbXzB4NGI1YSgnZScsJyp4MDUnKV0oXzB4NDdhOWI0W18weDRiNWEoJ2YnLCdhRXY5JyldKF8weDQ3YTliNFtfMHg0YjVhKCcxMCcsJyVZXjgnKV0sXzB4NDdhOWI0W18weDRiNWEoJzExJywnI0x4cycpXSkseHNMaXN0KTpfMHg0YjVhKCcxMicsJ3RrJlonKSt4c0xpc3QsJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLGkpLCdjb2xfdHlwZSc6XzB4NDdhOWI0WydFZmZibiddfSk7fWVsc2V7XzB4NDdhOWI0W18weDRiNWEoJzEzJywnI0x4cycpXShwdXRWYXIsXzB4NDdhOWI0WydGVWpkbSddLF8weDQ3YTliNFtfMHg0YjVhKCcxNCcsJ0taUmEnKV0oaXNMb2dpbikpO18weDQ3YTliNFtfMHg0YjVhKCcxNScsJ14oTiknKV0ocHV0VmFyLCdqZFJvdXRlJyxfMHg0N2E5YjRbXzB4NGI1YSgnMTYnLCd6RE81JyldKTt9fXJldHVybiBnZXRWYXIoXzB4NDdhOWI0WydGVWpkbSddKTt9dmFyIGp4SXRlbT17J2p4TGlzdCc6ZnVuY3Rpb24oKXt2YXIgXzB4NGMwNDI3PXsnVVZXb0YnOmZ1bmN0aW9uKF8weDI2YmIwNyxfMHgyMjFiNGQpe3JldHVybiBfMHgyNmJiMDcrXzB4MjIxYjRkO30sJ2t6V0RLJzpmdW5jdGlvbihfMHg0ODU0YTksXzB4M2U5OGM1KXtyZXR1cm4gXzB4NDg1NGE5K18weDNlOThjNTt9LCdYWHlRcic6XzB4NGI1YSgnMTcnLCd6RE81JyksJ2d0VW5qJzpmdW5jdGlvbihfMHg1OWFhZjcsXzB4MjJjNjZiKXtyZXR1cm4gXzB4NTlhYWY3K18weDIyYzY2Yjt9LCdVdGZXZic6J+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhblxcXFx4MjBzdHlsZT1cXFxceDIyY29sb3I6I0ZFOUEyRVxcXFx4MjI+JywnUU92SlYnOl8weDRiNWEoJzE4JywnckwlMCcpLCdBQkV3Qic6J+KAmOKAmOKAmeKAmTxzcGFuXFxcXHgyMHN0eWxlPVxcXFx4MjJjb2xvcjojMjk4QTA4XFxcXHgyMj4nLCdvenpXRyc6XzB4NGI1YSgnMTknLCdSRWU4JyksJ25XZlZSJzpmdW5jdGlvbihfMHg0ODBmM2EsXzB4NGM4NGZjKXtyZXR1cm4gXzB4NDgwZjNhK18weDRjODRmYzt9LCdKQ2NOWSc6J3BhcnNlUm91dGUnLCdyZ0RJcCc6XzB4NGI1YSgnMWEnLCdmb1ZrJyksJ2hvSWRKJzon4oCY4oCY4oCZ4oCZPGJpZz48c3BhblxcXFx4MjBzdHlsZT1cXFxceDIyY29sb3I6IzZFQjg5N1xcXFx4MjI+5pawXFxcXHgyMOW7ulxcXFx4MjDop6NcXFxceDIw5p6QJywnRnJHT0gnOmZ1bmN0aW9uKF8weDEyZDZkYixfMHgyYTA2OGQpe3JldHVybiBfMHgxMmQ2ZGI8XzB4MmEwNjhkO30sJ29DQ1NqJzpmdW5jdGlvbihfMHgxOWIxNzgsXzB4NGVmOGY2KXtyZXR1cm4gXzB4MTliMTc4PT09XzB4NGVmOGY2O30sJ0haaGxjJzpmdW5jdGlvbihfMHg1Y2FlMDMsXzB4MjZlMjQyKXtyZXR1cm4gXzB4NWNhZTAzPT1fMHgyNmUyNDI7fSwnY2dJZUEnOmZ1bmN0aW9uKF8weDI1ZTM2OCxfMHg4YmM4ZTkpe3JldHVybiBfMHgyNWUzNjgrXzB4OGJjOGU5O30sJ3hkckZ2JzpmdW5jdGlvbihfMHg0YWI1ZDgsXzB4MjEyNDJmKXtyZXR1cm4gXzB4NGFiNWQ4K18weDIxMjQyZjt9LCd5d2p1eCc6ZnVuY3Rpb24oXzB4NWUzMDUxLF8weDRlMDIzMCl7cmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO319O3ZhciBfMHgxZDhiYjE9Z2V0VmFyKF8weDRjMDQyN1tfMHg0YjVhKCcxYicsJ3VJUFcnKV0pO3ZhciBfMHgzYjg5YWI9cGFyc2VGaWxlW18weDRiNWEoJzFjJywnNGltNScpXTt2YXIgXzB4NDlkYTk2PWdldFZhcihfMHg0YzA0MjdbJ3JnRElwJ10pO2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHg0YzA0MjdbJ2hvSWRKJ10sJ3VybCc6YmpJdGVtW18weDRiNWEoJzFkJywnTE1aVCcpXSgpLCdjb2xfdHlwZSc6XzB4NGI1YSgnMWUnLCdFOWU4Jyl9KTt2YXIgXzB4MmVjYmU1PV8weDNiODlhYltfMHg0YjVhKCcxZicsJ3NhS3cnKV07Zm9yKHZhciBfMHhlMmMzZDg9MHgwO18weDRjMDQyN1tfMHg0YjVhKCcyMCcsJ2JdKmMnKV0oXzB4ZTJjM2Q4LF8weDJlY2JlNSk7XzB4ZTJjM2Q4Kyspe3ZhciBfMHgzMzc4OGM9XzB4M2I4OWFiW18weGUyYzNkOF07dmFyIF8weDM3ODcxZT1fMHg0YzA0MjdbXzB4NGI1YSgnMjEnLCdaZTJWJyldKF8weDMzNzg4YywnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCcnKTtpZigv56e75YqoL1tfMHg0YjVhKCcyMicsJyp4MDUnKV0oXzB4NDlkYTk2KSl7aWYoXzB4NGMwNDI3W18weDRiNWEoJzIzJywnT0RXaicpXShfMHg0YjVhKCcyNCcsJzRpbTUnKSwndUtMeEYnKSl7ZFtfMHg0YjVhKCcyNScsJylhVE4nKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzI2JywnTDhWbScpXShfMHg0YzA0MjdbXzB4NGI1YSgnMjcnLCdORTZRJyldK18weGUyYzNkOCxfMHg0OWRhOTYpP18weDRjMDQyN1tfMHg0YjVhKCcyOCcsJ3l2d2wnKV0oXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1tfMHg0YjVhKCcyOScsJ0w4Vm0nKV0sXzB4NGMwNDI3W18weDRiNWEoJzJhJywnJVleOCcpXSksXzB4Mzc4NzFlKTpfMHg0YzA0MjdbXzB4NGI1YSgnMmInLCdmb1ZrJyldKF8weDRjMDQyN1snQUJFd0InXSxfMHgzNzg3MWUpLCd1cmwnOmJqSXRlbVsneWRQYXJzZSddKF8weDQ5ZGE5NixfMHhlMmMzZDgpLCdjb2xfdHlwZSc6XzB4NGI1YSgnMmMnLCdTdUhlJyl9KTt9ZWxzZXt2YXIgXzB4MmJjNjE4PV8weDNiODlhYltfMHhlMmMzZDhdO3ZhciBfMHg1Y2Y0MTc9XzB4NGMwNDI3WydVVldvRiddKF8weDJiYzYxOCwnJylbXzB4NGI1YSgnMmQnLCd6aTFdJyldKC9odHRwLipcXFxcL1xcXFwvL2csJycpO2lmKC/np7vliqgvWyd0ZXN0J10oXzB4NDlkYTk2KSl7ZFtfMHg0YjVhKCcyZScsJ3JMJTAnKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzJmJywnYUV2OScpXShfMHg0YzA0MjdbJ1hYeVFyJ10sXzB4ZTJjM2Q4KT09XzB4NDlkYTk2P18weDRjMDQyN1tfMHg0YjVhKCczMCcsJ2ZvVmsnKV0oXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1tfMHg0YjVhKCczMScsJ1QlJFgnKV0sXzB4NGMwNDI3W18weDRiNWEoJzMyJywnbURsRCcpXSksXzB4NWNmNDE3KTpfMHg0YzA0MjdbXzB4NGI1YSgnMzMnLCc0aW01JyldK18weDVjZjQxNywndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsXzB4ZTJjM2Q4KSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCczNCcsJ14oTiknKV19KTt9ZWxzZXt2YXIgXzB4MTE5MzY1PVtfMHgyYmM2MTgsXzB4NGMwNDI3W18weDRiNWEoJzM1JywnYl0qYycpXShfMHhlMmMzZDgsJ3x8JyldW18weDRiNWEoJzM2JywnemkxXScpXSgnfHwnKTtkW18weDRiNWEoJzM3Jywnc0JwXicpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMzgnLCc0aW01JyldKF8weDRjMDQyN1tfMHg0YjVhKCczOScsJ1FxQ3onKV0sXzB4NWNmNDE3KSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCczYScsJ1N1SGUnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzNiJywnc0JwXicpXShfMHgxMTkzNjUsXzB4MmVjYmU1W18weDRiNWEoJzNjJywnOVFMNicpXSgpKX0pO319fWVsc2V7dmFyIF8weGI3MDE5Mj1bXzB4MzM3ODhjLF8weGUyYzNkOCsnfHwnXVsnam9pbiddKCd8fCcpO2RbXzB4NGI1YSgnM2QnLCdCKUlvJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCczZScsJ3NhS3cnKV0oXzB4NGMwNDI3W18weDRiNWEoJzNmJywnXihOKScpXSxfMHgzNzg3MWUpLCdjb2xfdHlwZSc6XzB4NGMwNDI3W18weDRiNWEoJzQwJywnS1pSYScpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnNDEnLCcqeDA1JyldKF8weGI3MDE5MixfMHgyZWNiZTVbJ3RvU3RyaW5nJ10oKSl9KTt9fV8weDRjMDQyN1tfMHg0YjVhKCc0MicsJ3NCcF4nKV0oY2xlYXJWYXIsXzB4NGMwNDI3W18weDRiNWEoJzQzJywnUndsSycpXSk7fSwnbHFGaWxlJzpmdW5jdGlvbigpe3ZhciBfMHg1NDFkNzY9eydhV2lScyc6ZnVuY3Rpb24oXzB4NDhkNzdiLF8weDE5MTYxZixfMHgyMWNiODUpe3JldHVybiBfMHg0OGQ3N2IoXzB4MTkxNjFmLF8weDIxY2I4NSk7fSwnd1NmbnonOmZ1bmN0aW9uKF8weDQ4NTBlYSl7cmV0dXJuIF8weDQ4NTBlYSgpO30sJ3FSUWRBJzpfMHg0YjVhKCc0NCcsJyM2czMnKSwnV1FpcWsnOl8weDRiNWEoJzQ1JywnYUV2OScpLCdwc0dkdCc6ZnVuY3Rpb24oXzB4MTcwNzgwLF8weDNiNTEyYSl7cmV0dXJuIF8weDE3MDc4MD09XzB4M2I1MTJhO30sJ2lteHJpJzondHJ1ZScsJ25Ta2p4JzpmdW5jdGlvbihfMHg5NWJmMzgsXzB4MzEzZjI1KXtyZXR1cm4gXzB4OTViZjM4IT09XzB4MzEzZjI1O30sJ2lWTmVNJzpfMHg0YjVhKCc0NicsJ1plMlYnKSwnSXdNVGwnOl8weDRiNWEoJzQ3JywnVCUkWCcpLCd4ZmRIayc6XzB4NGI1YSgnNDgnLCc3RkFyJyksJ3JHTHVBJzon5Li75o+S5Lu25a2Y5pS+6Lev5b6EOlxcXFx4MjAvY2FjaGUvUGFyc2VfRG4uanNcXFxceDBh572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOlxcXFx4MjAvY2FjaGUvUGFyc2VfRG4uaHRtbCcsJ3pRU0xFJzpfMHg0YjVhKCc0OScsJ3NCcF4nKSwnaHZpRGwnOmZ1bmN0aW9uKF8weDI2ZGI2MixfMHgzMTJmMWMpe3JldHVybiBfMHgyNmRiNjIoXzB4MzEyZjFjKTt9LCdaeFVndCc6XzB4NGI1YSgnNGEnLCcmTk1wJyksJ3NXRm9jJzpmdW5jdGlvbihfMHgyYTA0NGIsXzB4MTQ5YTNmKXtyZXR1cm4gXzB4MmEwNDRiK18weDE0OWEzZjt9LCdPRWhhdCc6XzB4NGI1YSgnNGInLCdFdSp0JyksJ1p2dFN1JzpfMHg0YjVhKCc0YycsJ3l2d2wnKSwnZ1hLTWInOid0b2FzdDovL+ivt+WFiOaLieWPluWIl+ihqCcsJ1dDT0RDJzpmdW5jdGlvbihfMHg0YWQzZDUsXzB4MzFmYTFlKXtyZXR1cm4gXzB4NGFkM2Q1PF8weDMxZmExZTt9LCdyQWtBaCc6XzB4NGI1YSgnNGQnLCdiXSpjJyksJ3lXYU9JJzpfMHg0YjVhKCc0ZScsJ3JMJTAnKSwneWp5aksnOiflvZPliY3orr7nva7kuLo6XFxcXHgyMCcsJ3RIWGVFJzon5ouJ5Y+W6Kej5p6Q5YiX6KGo5oiW6ICF6Kej5p6Q5Luj56CBJywnR01VWXUnOiflrZjmlL7ot6/lvoQ6XFxcXHgyMC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLCdtcFpCWic6XzB4NGI1YSgnNGYnLCdPRFdqJyksJ3h2cWdGJzpfMHg0YjVhKCc1MCcsJ0w4Vm0nKSwnaGV1S3gnOl8weDRiNWEoJzUxJywnT0RXaicpLCdJaWZpYSc6XzB4NGI1YSgnNTInLCdVI101JyksJ1BGUkhBJzpfMHg0YjVhKCc1MycsJ3hWZiUnKSwnVUx3a1QnOl8weDRiNWEoJzU0JywnXUQxMycpfTtpZihfMHg1NDFkNzZbXzB4NGI1YSgnNTUnLCdTdUhlJyldKF8weDU0MWQ3NltfMHg0YjVhKCc1NicsJyp4MDUnKV0oYmJzWVopLF8weDU0MWQ3NlsnaW14cmknXSkpe2lmKF8weDU0MWQ3NltfMHg0YjVhKCc1NycsJ0U5ZTgnKV0oXzB4NTQxZDc2WydpVk5lTSddLF8weDU0MWQ3NltfMHg0YjVhKCc1OCcsJzM2NmUnKV0pKXtfMHg1NDFkNzZbXzB4NGI1YSgnNTknLCdFOWU4JyldKHB1dFZhciwnYmJzWVonLF8weDU0MWQ3NltfMHg0YjVhKCc1YScsJyNMeHMnKV0oaXNMb2dpbikpO18weDU0MWQ3NlsnYVdpUnMnXShwdXRWYXIsXzB4NTQxZDc2W18weDRiNWEoJzViJywnOVFMNicpXSxfMHg1NDFkNzZbJ1dRaXFrJ10pO31lbHNle3ZhciBfMHg0ZDI1ZmY9XzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXzB4NGE5N2M5PTB4MDt3aGlsZSghIVtdKXtzd2l0Y2goXzB4NGQyNWZmW18weDRhOTdjOSsrXSl7Y2FzZScwJzpkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzVjJywnT0RXaicpXSwndXJsJzpiakl0ZW1bJ3B1bGxTY3JpcHQnXShfbXlTZXRbJ2NqY2FjaGUnXSxfbXlTZXRbJ3g1Y2FjaGUnXSksJ2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc1ZCcsJ2ExcmsnKV0sJ2NvbF90eXBlJzpfMHg1NDFkNzZbJ3pRU0xFJ119KTtjb250aW51ZTtjYXNlJzEnOl8weDU0MWQ3NltfMHg0YjVhKCc1ZScsJzUjTCMnKV0oZXZhbCxfMHg1NDFkNzZbXzB4NGI1YSgnNWYnLCdFdSp0JyldKGdldFZhcixfMHg1NDFkNzZbXzB4NGI1YSgnNjAnLCd6RE81JyldKSk7Y29udGludWU7Y2FzZScyJzpkW18weDRiNWEoJzYxJywneXZ3bCcpXSh7J2NvbF90eXBlJzpfMHg0YjVhKCc2MicsJ0IpSW8nKX0pO2NvbnRpbnVlO2Nhc2UnMyc6dmFyIF8weDJhYjM5OT1fMHg0YjVhKCc2MycsJyZOTXAnKTtjb250aW51ZTtjYXNlJzQnOmRbJ3B1c2gnXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNjQnLCc3RkFyJyldLCd1cmwnOnR5cGVvZiBjekd1aWRlPT1fMHg0YjVhKCc2NScsJ0Z1NFQnKT9jekd1aWRlKCk6JycsJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNjYnLCdzQnBeJyldfSk7Y29udGludWU7Y2FzZSc1Jzp4ZFJvdXRlPV8weDU0MWQ3NltfMHg0YjVhKCc2NycsJ3o0c1MnKV0oeGRSb3V0ZSxfbXlTZXRbXzB4NGI1YSgnNjgnLCcmTk1wJyldKTtjb250aW51ZTtjYXNlJzYnOnZhciBfMHgzYTlhZmU9W3sndGl0bGUnOl8weDRiNWEoJzY5JywnI0x4cycpLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc2YScsJzdGQXInKV0oJ+WIl+ihqCcpfSx7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNmInLCd5dndsJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc2YycsJ0pRdXonKV0oJ+S7o+eggScpfSx7J3RpdGxlJzpfMHg1NDFkNzZbJ1p2dFN1J10sJ3VybCc6XzB4NTQxZDc2WydodmlEbCddKGZpbGVFeGlzdCxfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLF8weDRiNWEoJzZkJywnUndsSycpKSk9PSEhW10/XzB4MmFiMzk5Ol8weDU0MWQ3NltfMHg0YjVhKCc2ZScsJ3o0c1MnKV19XTtjb250aW51ZTtjYXNlJzcnOmZvcih2YXIgXzB4MWEyY2RiPTB4MDtfMHg1NDFkNzZbXzB4NGI1YSgnNmYnLCclWV44JyldKF8weDFhMmNkYixfMHgzYTlhZmVbJ2xlbmd0aCddKTtfMHgxYTJjZGIrKyl7ZFtfMHg0YjVhKCc3MCcsJyM2czMnKV0oeyd0aXRsZSc6XzB4M2E5YWZlW18weDFhMmNkYl1bXzB4NGI1YSgnNzEnLCdCMGN1JyldLCd1cmwnOl8weDNhOWFmZVtfMHgxYTJjZGJdWyd1cmwnXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3MicsJ0Z1NFQnKV19KTt9Y29udGludWU7Y2FzZSc4JzpkW18weDRiNWEoJzczJywndGsmWicpXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNzQnLCd4VmYlJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc3NScsJyp4MDUnKV0oX215U2V0W18weDRiNWEoJzc2JywnekRPNScpXSksJ2Rlc2MnOl8weDU0MWQ3Nlsnc1dGb2MnXShfMHg1NDFkNzZbJ3lqeWpLJ10rbXlTZXRbJ2NqJ10sXzB4NGI1YSgnNzcnLCdKUXV6JykpLCdjb2xfdHlwZSc6XzB4NTQxZDc2Wyd6UVNMRSddfSk7Y29udGludWU7Y2FzZSc5JzpkW18weDRiNWEoJzc4JywnI0x4cycpXSh7J3RpdGxlJzpfMHg1NDFkNzZbJ3RIWGVFJ10sJ3VybCc6J3RvYXN0Oi8v6K+35Zyo5LiL5pa56YCJ6aG55pON5L2cJywnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzc5JywnemkxXScpXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3YScsJyVZXjgnKV19KTtjb250aW51ZTtjYXNlJzEwJzpkWydwdXNoJ10oeydjb2xfdHlwZSc6XzB4NTQxZDc2WydtcFpCWiddfSk7Y29udGludWU7Y2FzZScxMSc6ZFsncHVzaCddKHsnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzdiJywnRXUqdCcpXSwnY29sX3R5cGUnOidpbnB1dCcsJ2V4dHJhJzp7J3RpdGxlVmlzaWJsZSc6IVtdLCdkZWZhdWx0VmFsdWUnOl8weDU0MWQ3NltfMHg0YjVhKCc3YycsJyp4MDUnKV0oZ2V0VmFyLF8weDRiNWEoJzdkJywnTDhWbScpKSwnb25DaGFuZ2UnOl8weDU0MWQ3NlsnaGV1S3gnXX19KTtjb250aW51ZTt9YnJlYWs7fX19ZWxzZXtkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzdlJywnRTllOCcpXSwnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzdmJywnS1pSYScpXSwndXJsJzpfMHg1NDFkNzZbJ1VMd2tUJ10sJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnODAnLCdzYUt3JyldfSk7fX19OyRbXzB4NGI1YSgnODEnLCd4VmYlJyldPWp4SXRlbTs7XzB4b2RSPSdqc2ppYW1pLmNvbS52Nic7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBVcmznvJbovpFcIixcInBhdGhcIjpcIkVkaXRVcmxcIixcInJ1bGVcIjpcImpzOlxcbnNldFBhZ2VUaXRsZShcXFwi5o+S5Lu25o6l5Y+j6K6+572uXFxcIik7XFxubGV0IGQgPSBbXTtcXG5sZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG5sZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXG4vKTtcXG5sZXQgc2VsZWN0ZWQgPSBnZXRJdGVtKFxcXCJzZWxlY3RlZFxcXCIsIFxcXCJcXFwiKTtcXG5sZXQgY2xhc3NUYWIgPSBbXFxuICAgIFtcXFwi6YCJ5oupXFxcIiwgXFxcIjBcXFwiXSxcXG4gICAgW1xcXCLkv67mlLlcXFwiLCBcXFwiMVxcXCJdLFxcbiAgICBbXFxcIuWIoOmZpFxcXCIsIFxcXCIyXFxcIl1cXG5dO1xcbmxldCBjbGFzc0EgPSBnZXRWYXIoXFxcImNsYXNzXFxcIiwgXFxcIjBcXFwiKTtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhclZhcihcXFwiY2xhc3NcXFwiKTtcXG59KSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmt7vliqDmlrDnmoTop6PmnpBcXFwiLFxcbiAgICB1cmw6ICQoXFxcIlxcXCIsXFxcIuino+aekOWQjSYm6Kej5p6QVVJMXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxuICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXG4vKTtcXG4gICAgICAgIGlmKGlucHV0LnNwbGl0KFxcXCImJlxcXCIpLmxlbmd0aCE9PTIpe1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/moLzlvI/kuI3mraPnoa5cXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgcGFyc2VVcmxBcnJheS5wdXNoKGlucHV0KTtcXG4gICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiLCBwYXJzZVVybFRleHQpO1xcbiAgICAgICAgXFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG59KTtcXG5mb3IgKGxldCBpdGVtIG9mIGNsYXNzVGFiKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaXRlbVsxXSA9PT0gY2xhc3NBID8gXFxcIuKAnOKAnFxcXCIgKyBpdGVtWzBdICsgXFxcIuKAneKAnVxcXCIgOiBpdGVtWzBdLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChrZXkpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoXFxcImNsYXNzXFxcIiwga2V5KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0sIGl0ZW1bMV0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG59XFxubGV0IGZ1bmM7XFxuc3dpdGNoIChjbGFzc0EpIHtcXG4gICAgY2FzZSBcXFwiMFxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSkge1xcbiAgICAgICAgICAgIHJldHVybiAkKHVybCArIFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIlxcXFxu5pu05pS55o6l5Y+jPiBcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIHRpdGxlKTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwiMVxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwsIFxcXCLor7fovpPlhaXjgIxcXFwiICsgdGl0bGUgKyBcXFwi44CN55qE5paw5o6l5Y+jXFxcIikuaW5wdXQoKHRpdGxlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheVtpbmRleF0gPSB0aXRsZSArIFxcXCImJlxcXCIgKyBpbnB1dDtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIiwgcGFyc2VVcmxUZXh0KTtcXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkMSA9PSBnZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiLCB0aXRsZSArIFxcXCImJlxcXCIgKyBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCIyXFxcIjpcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlLCBpbmRleCkge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7orqTliKDpmaTjgIxcXFwiICsgdGl0bGUgKyBcXFwi44CN77yfXFxcIikuY29uZmlybSgodGl0bGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXG4vKTtcXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkMSA9IHBhcnNlVXJsQXJyYXlbaW5kZXhdO1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybEFycmF5LnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVVybEFycmF5WzBdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBwYXJzZVVybEFycmF5WzBdLnNwbGl0KFxcXCImJlxcXCIpWzFdIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiLCBwYXJzZVVybEFycmF5WzBdKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG5cXG59XFxuZm9yIChsZXQgaSBpbiBwYXJzZVVybEFycmF5KSB7XFxuICAgIGxldCBpdGVtID0gcGFyc2VVcmxBcnJheVtpXS5zcGxpdChcXFwiJiZcXFwiKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzZWxlY3RlZCA9PSBpdGVtWzFdID8gXFxcIuKAmOKAmFxcXCIgKyBpdGVtWzBdICsgXFxcIuKAmeKAmVxcXCIgOiBpdGVtWzBdLFxcbiAgICAgICAgdXJsOiBmdW5jKGl0ZW1bMV0sIGl0ZW1bMF0sIGkpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuLvpopjnrqHnkIZcIixcInBhdGhcIjpcInRoZW1lXCIsXCJydWxlXCI6XCJqczpcXG4gICAgZnVuY3Rpb24gdGhlbWVJbml0KCl7XFxuICAgICAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcblxcbiAgICAgICAgZm9yKHZhciBpIGluIG9wdGlvbnMpe1xcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICAgICAgICAgIGxldCBmbGFnID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQob3B0aW9uKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7mk43kvZznsbvlnovkuLo6JytpbnB1dDtcXG4gICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZXQgdGhlbWVSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXCI7XFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSB7fTtcXG4gICAgICAgIGxldCB0aGVtZXMgPSB7fTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZldGNoKHRoZW1lUm91dGUpKTtcXG4gICAgICAgICAgICB0aGVtZXMgPSBteVRoZW1lcy50aGVtZXNbbXlUaGVtZXMubm93X3RoZW1lXTtcXG4gICAgICAgIH1jYXRjaCAoZSkge31cXG5cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaWYoL17mlq3mj5LkuLvpophALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaW5wdXQuc3BsaXQoJ0AnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuS4u+mimC0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlUGFzdGUodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzVGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGFzVGhlbWUmJmhhc1RoZW1lLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIG15VGhlbWVzLnRoZW1lcyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteVRoZW1lcy50aGVtZXNbal0ubmFtZSA9PT0gbmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxuJytpZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZygn6KaG55uW5a+85YWl5Li76aKYaWQ6JytpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lc1tpZF0gPSBPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cobXlUaGVtZXMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeS4u+mimDpcXFxcbicrbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSxuYW1lLHVybCxteVRoZW1lcyx0aGVtZVJvdXRlKTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5rOV6K+G5Yir55qE5a+85YWl5Y+j5LukOlxcXFxuJytpbnB1dDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSksXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+aWsOWinicsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCkucnVsZSgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGQ9W107XFxuICAgICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Li76aKY5ZCN56ewJyxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmlq3mj5It6JOd6I6T5Li76aKYXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKVxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2FkZF9uYW1lID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi+k+WFpeeahOaYrzonK25ld19hZGRfbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5Luj56CBXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX2NvZGUnLCAnJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6LTEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcInRoZW1lLm5ld19hZGRfY29kZVxcXCIsaW5wdXQpJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOifkv53lrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L+Y5rKh5aGr5YaZ5Li76aKY5ZCN56ew5ZGiJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3VGhlbWUgPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUaGVtZSA9IEpTT04ucGFyc2UoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/plJnor6/nmoTkuLvpophqc29u5qC85byPOlxcXFxuJytlLm1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3VGhlbWUseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnB1c2gobmV3VGhlbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaWsOWinuaWreaPkuS4u+mimDonK25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLnRoZW1lcz8n5Li76aKY5YiX6KGoOuWFseiuoTonK2NvbG9yKG15VGhlbWVzLnRoZW1lcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq5Li76aKYJzpcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW5Li76aKY5YiX6KGoXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxuICAgICAgICAgICAgdXJsOiQoXFxcIuWmguaenOS9oOeahOS4u+mimOayoeazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFwiKS5jb25maXJtKCgpPT57XFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZXMgPSB7bmFtZTon6buY6K6k5Li76aKYJyxjbG9zZUJ0bjp7Y29sb3I6JyNmNmY2ZjYnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxzYXZlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA2ODAwNid9LHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSx0aXBzQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LGJhcmxhYmVsOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LHNlbGVjdDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSx9O1xcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVEZWYgPSB7XFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xljp/nmq5cXFwiLFxcXCJjbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI2M1NDY0YVxcXCJ9LFxcXCJzYXZlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDY4MDA2XFxcIn0sXFxcInNhdmVDbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJ0aXBzQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcImJhcmxhYmVsXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn0sXFxcImJhcklucHV0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0QwNkI2Q1xcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRjlGMERBXFxcIn0sXFxcInNlbGVjdFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9fTtcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5LkuLvpopjlt7Lph43nva7kuLrlh7rljoLorr7nva4nXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZm9yKHZhciBpIGluIG15VGhlbWVzLnRoZW1lcyl7XFxuICAgICAgICAgICAgbGV0IG5vd1RoZW0gPSBteVRoZW1lcy50aGVtZXNbaV07XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6bXlUaGVtZXMubm93X3RoZW1lPT09bm93VGhlbS5uYW1lPyfwn5GJJytub3dUaGVtLm5hbWU6bm93VGhlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgpLmxhenlSdWxlKChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpO1xcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WvvOWHuic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBteXRoZW1lQ29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShteXRoZW1lKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG15dGhlbWVDb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAn5pat5o+S5Li76aKYQCcrbXl0aGVtZS5uYW1lKydAJyt1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpLmlucHV0KChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15dGhlbWUubmFtZT09PW15VGhlbWVzLm5vd190aGVtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOS4u+mimOW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaV09SlNPTi5wYXJzZShpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+u5pS5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTkuLvpopg6JytteXRoZW1lLm5hbWUrJz8nKS5jb25maXJtKChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15dGhlbWUubmFtZT09PW15VGhlbWVzLm5vd190aGVtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOS4u+mimOW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMuc3BsaWNlKGksMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLm5vd190aGVtZT1teXRoZW1lLm5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytteXRoZW1lLm5hbWUrJ+S9nOS4uum7mOiupOS4u+mimCc7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sbm93VGhlbSxteVRoZW1lcyxpLHRoZW1lUm91dGUpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9XFxuJC5leHBvcnRzLnRoZW1lSW5pdD10aGVtZUluaXQ7XCJ9LHtcIm5hbWVcIjpcIuaTjeS9nOaMh+W8lVwiLFwicGF0aFwiOlwiR3VpZGVcIixcInJ1bGVcIjpcIjxodG1sPlxcbjxoZWFkPlxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXCJVVEYtOFxcXCI+XFxuPC9oZWFkPlxcbjxib2R5PlxcbjxzdHJvbmc+IDxiaWc+5ouJ5Y+W56+HPC9iaWc+IDwvc3Ryb25nPlxcbjxiciAvPiDmk43kvZzpobrluo/vvJpcXG48YnIgLz4gMS7mm7TmlrDpgZPplb/ku5PlupNQcm/liLA3NueJiOacrFxcbjxiciAvPiAyLuaLieWPluS4u+aPkuS7tuWSjOe9kemhteiEmuacrFxcbjxiciAvPiAzLuaOqOiNkOebtOaOpeaLieWPluS7o+eggTxzPuaLieWPluWIl+ihqOKGkuaLieWPluS7o+eggTwvcz5cXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+5Y+j5Luk56+HPC9iaWc+PC9zdHJvbmc+XFxuPGJyIC8+6aaW6aG16L6T5YWl5qGG5pSv5oyB77yaXFxuPGJyIC8+MS7liIbkuqvlh7rmnaXnmoTlkIzns7vliJfmj5Lku7bkupHliarotLTmnb/lj6Pku6RcXG48YnIgLz4yLuacquWKoOWvhueahOWQjOezu+WIl+aPkuS7tuWcsOWdgCzmlK/mjIHmnKzlnLDmlofku7blpoLku6XkuIvmoLzlvI/lvIDlpLTnmoQ6ZmlsZTovLyxoaWtlcjovLywvc3RvcmFnZVxcbjxiciAvPjMuUeelnlxcbjxiciAvPjQu5pat5o+SXFxuPGJyIC8+NS4j6YGT6ZW/57K+6YCJXFxuPGJyIC8+Ni4jYuermVxcbjxiciAvPjcuI+WAjemZhlxcbjxiciAvPlxcbjxiciAvPlxcbjxzdHJvbmc+PGJpZz7nvJbovpHnr4c8L2JpZz48L3N0cm9uZz5cXG48YnIgLz7pmpDol4/lip/og73pnIDnn6XvvJpcXG48YnIgLz7pmpDol4/lip/og73mmK/ku47liJfooajkuIrliKDpmaTmoIfpopjvvIzmlYXml6DlpI3njrDlip/og71cXG48YnIgLz7nnIvlh4bkuobvvIzkuI3nlKjnmoTmiY3ngrnpmpDol49cXG48YnIgLz7opoHlpI3njrDnmoTor53ljrvkv67mlLnmlrDnmoRNeVBhcnNlLmpzb27vvIzlnKh0aXRsZeeahOaVsOe7hOmCo+aMieagvOW8j+a3u+WKoOagh+mimFxcbjxiciAvPlxcbjxiciAvPlxcbjxzdHJvbmc+PGJpZz7lroznu5M8L2JpZz48YnIgLz48L3N0cm9uZz5cXG48cD52My40OSzlsI/nmb3mnIDlkI7nmoTlgJTlvLos5bCP55m95YWz5oCA5qih5byPPC9wPlxcbjxwPuS4gOmUruWunueOsOmFjee9ruWujOavleWNs+WPr+mAmui/h+aUr+aMgemtlOaWreeahOWwj+eoi+W6j+eci+inhumike+8jOWbnuW9kueZveWrluinhumikei/meS4qumcgOaxguacrOi6qzwvcD5cXG48cD7mjqjojZDkvb/nlKjpnZLosYYsYXBw5b2x6KeGLmRwPC9wPlxcbjxwPumtlOaWrSjmlq3mj5LpgZPplb/prZTmlLnniYgp5bey5byD5Z2R6LeR6Lev77yM5oSf6LCi5Y6f5L2c6ICF5pat5b+155qE5o+S5Lu26Kej5p6Q5Y+K5pys5bCP56iL5bqP5qC45b+D5Luj56CBPC9wPlxcbjwvYm9keT5cXG48L2h0bWw+XCJ9LHtcIm5hbWVcIjpcIua1i+ivleaVsOaNrlwiLFwicGF0aFwiOlwiZGVtb0RhdGFcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkZW1vRGF0YSA9IHtcXG4gICAg54ix5aWH6Im6OlsnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXpwN3FnaDIza2cuaHRtbCcsJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzJiYzh0azhyNnVnLmh0bWwnXSxcXG4gICAg5LyY6YW3OlsnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTROVGd4TVRZMk1BPT0uaHRtbCcsJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU1T0RZeE1qQXpOZz09Lmh0bWwnXSxcXG4gICAg6IW+6K6vOlsnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL200NDFlM3JqcTlrd3BzYy9wMDA0MGdpbTRmei5odG1sJywnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL216YzAwMjAweGg5MzEzdi96MDAzOXRiaG83cS5odG1sJ10sXFxuICAgIOiKkuaenDpbJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzcyMDYxLzEyMTkzNTU4Lmh0bWwnLCdodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM2MzI4Ni8xNDI5NTgyMy5odG1sJ10sXFxuICAgIOWTlOWTqeWTlOWTqTpbJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXAzODEyMTcnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwNDA4MTIzJ10sXFxuICAgIOaQnOeLkDpbJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85NDU3NTg0Lmh0bWwnLCdodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTE4MjY0Ni5odG1sJ10sXFxuICAgIOilv+eTnDpbJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjU1MTMzMjEyNTY1NDY0NzMxMCcsJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSddLFxcbiAgICDpmL/ph4w6WycnXSxcXG4gICAgUFBUVjpbJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvVEluZFdzSW9tTlk1dHg4Lmh0bWwnLCdodHRwOi8vdi5wcHR2LmNvbS9zaG93L1NDUTV0aDZFOURLVkUzcy5odG1sJ10sXFxuICAgIOWSquWSlTpbJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD02MzM1MTE3NDMnLCdodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NzE2MjcwMzE5J10sXFxuICAgIOS5kOinhjpbJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS83NTg0MzA1OS5odG1sJywnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5LzI0MjIwOTAxLmh0bWwjdmlkPTI0MjIwOTAxJ10sXFxuICAgIDE5MDU6WydodHRwczovL3ZpcC4xOTA1LmNvbS9wbGF5Lzg3NTc0MC5zaHRtbCcsJ2h0dHBzOi8vd3d3LjE5MDUuY29tL3ZvZC9wbGF5Lzg4MDY0MS5zaHRtbCddLFxcbiAgICDpo47ooYw6WydodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTMwNDE0MycsJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMTAwODk2My8nXSxcXG59XFxuXFxubGV0IGRlZmF1bHRTZXRzID0gIHtcXG4gICAgICAgIHF5OiAn5L2g54i556eR5oqAJyxcXG4gICAgICAgIHlrOiAn6aKG6YW3JyxcXG4gICAgICAgIHR4OiAn6I2j6ICAJyxcXG4gICAgICAgIG1nOiAn6JqC6JqB5YWE5byfJyxcXG4gICAgICAgIGJsOiAnT0vop6PmnpAnLFxcbiAgICAgICAgc2g6ICfmsZ/muZZEJyxcXG4gICAgICAgIHhnOiAn5rGf5rmWRCcsXFxuICAgICAgICBhbDogJ+axn+a5lkQnLFxcbiAgICAgICAgcHA6ICfkurrkurrov7cnLFxcbiAgICAgICAgbWk6ICcxMDgwJyxcXG4gICAgICAgIGxlOiAn6L+q5aWl5ZeF5o6iJyxcXG4gICAgICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxuICAgICAgICBmdW46ICfono3lhbQnLFxcbiAgICAgICAgb25lOicxMDgwJyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuXFxubGV0IGZsb29ycyA9ICfikaDikaHikaLikaPikaTikaXikabikafikajikanvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJnvvJDikojikonikorikovikoziko3iko7iko/ikpAnLnNwbGl0KCcnKTtcXG5sZXQgZW1vamlzID0gJyPvuI/ig6N8Ku+4j+KDo3ww77iP4oOjfDHvuI/ig6N8Mu+4j+KDo3wz77iP4oOjfDTvuI/ig6N8Ne+4j+KDo3w277iP4oOjfDfvuI/ig6N8OO+4j+KDo3w577iP4oOjfPCfhbDvuI988J+Fse+4j3zwn42HfPCfjYh88J+NiXzwn42KfPCfjYt88J+NjHzwn42NfPCfjY588J+Nj3zwn42QfPCfjZF88J+Nknzwn42TfPCfjYV88J+Nhnzwn4y9fPCfjYR88J+MsHzwn42efPCfjZZ88J+Nl3zwn42UfPCfjZ988J+NlXzwn42zfPCfjbJ88J+NsXzwn42YfPCfjZl88J+Nmnzwn42bfPCfjZx88J+NnXzwn42gfPCfjaJ88J+No3zwn42kfPCfjaV88J+NoXzwn42mfPCfjad88J+NqHzwn42pfPCfjap88J+Ognzwn42wfPCfjat88J+NrHzwn42tfPCfja588J+Nr3zwn428fOKYlXzwn421fPCfjbZ88J+Nt3zwn424fPCfjbl88J+Nunzwn427fPCfjbQnLnNwbGl0KCd8Jyk7XFxuZmxvb3JzID0gZmxvb3JzLmNvbmNhdChlbW9qaXMpO1xcbiQuZXhwb3J0cy5kZW1vRGF0YSA9IGRlbW9EYXRhO1xcbiQuZXhwb3J0cy5kZWZhdWx0U2V0cyA9IGRlZmF1bHRTZXRzO1xcbiQuZXhwb3J0cy5mbG9vcnMgPSBmbG9vcnM7XCJ9LHtcIm5hbWVcIjpcIuW3peWFt+exu1wiLFwicGF0aFwiOlwidXRpbHNcIixcInJ1bGVcIjpcImpzOlxcbi8v6ZqP5py65LuO5YiX6KGo5oq95Y+W5LiA5Liq5YWD57SgXFxuZnVuY3Rpb24gZ2V0T25lKGl0cykge3JldHVybiAgaXRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSppdHMubGVuZ3RoKV07fVxcbi8v5Y676YeN77yIRVM2IFNldO+8iVxcbmZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxufVxcbi8v6I635Y+W5YiX6KGo5Lit6YeN5aSN6YO95YC8XFxuZnVuY3Rpb24gZHVwbGljYXRlcyhhcnIpIHtcXG4gICAgbGV0IHJlcz1hcnIuZmlsdGVyKCh4LGspPT57XFxuICAgICAgICBsZXQgYT1rKjErMTtcXG4gICAgICAgIGxldCBpbmRleD1hcnIuaW5kZXhPZih4LGEpO1xcbiAgICAgICAgaWYoaW5kZXg+LTEpe1xcbiAgICAgICAgICAgIHJldHVybiB4O1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICBsZXQgcmU9bmV3IFNldChyZXMpO1xcbiAgICByZXR1cm4gQXJyYXkuZnJvbShyZSk7XFxufVxcbiQuZXhwb3J0cy5nZXRPbmUgPSBnZXRPbmU7XFxuJC5leHBvcnRzLnVuaXF1ZTIgPSB1bmlxdWUyO1xcbiQuZXhwb3J0cy5kdXBsaWNhdGVzID0gZHVwbGljYXRlcztcIn0se1wibmFtZVwiOlwi6Kej5p6Q566h55CGXCIsXCJwYXRoXCI6XCJqeE1hbmFnZVwiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24ganhNYW5hZ2UoKXtcXG4gICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICBsZXQgZCA9IFtdO1xcbiAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxuXFxuICAgIGZvcihsZXQgaSBpbiBvcHRpb25zKXtcXG4gICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV9vcHRpb24nLCBvcHRpb24pO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LG9wdGlvbiksXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBsZXQganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbiAgICBsZXQgTXlKaWV4aSA9IHtqaWV4aXM6W119O1xcbiAgICBsZXQgamlleGlzID0ge307XFxuICAgIHRyeSB7XFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTon5a+85YWlJyxcXG4gICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcnLCfor7fovpPlhaXlr7zlhaXlj6Pku6QnKS5pbnB1dCgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICBpZigvXumtlOaWreino+aekOmFjee9rkAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpbnB1dC5zcGxpdCgnQCcpWzJdO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S6Kej5p6Q6YWN572uLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzSXQgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc0l0JiZoYXNJdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXG4nK2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZygn6KaG55uW5a+85YWl5Li76aKYaWQ6JytpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXop6PmnpDphY3nva46XFxcXG4nK25hbWVcXG4gICAgICAgICAgICAgICAgfSxuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcbicraW5wdXQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKSxcXG4gICAgfSk7XFxuXFxuICAgIGxldCBpc0F1dG8gPSBNeUppZXhpLmlzQXV0bztcXG4gICAgbGV0IGF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZTtcXG4gICAgbGV0IHRpcHMgPSAn6Kej5p6Q6YWN572u5YiX6KGoOuWFseiuoTonK2NvbG9yKE15SmlleGkuamlleGlzLmxlbmd0aCwnI2ZmNzAwMCcpKyfkuKrphY3nva4s6Ieq5Yqo5qGj5byA5YWzOicrY29sb3IoaXNBdXRvPyflvIAnOiflhbMnLCcjZmY3MDAwJyk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjA/dGlwczpcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcIixcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXMmJk15SmlleGkuamlleGlzLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5pc0F1dG8gPSAhTXlKaWV4aS5pc0F1dG87XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICBsZXQgdGlwcyA9IE15SmlleGkuaXNBdXRvPyflvIAnOiflhbMnO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u6Ieq5Yqo5qGj5qih5byP5Li6OicrdGlwc1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBsZXQgaW5pdFNldCA9IHsnbm93JzpcXFwi6YGT6ZW/5o6o6I2QXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkvaDniLnnp5HmioAnXSx5azpbJ+mihumFtyddLHR4Olsn6I2j6ICAJ10sbWc6WyfomoLomoHlhYTlvJ8nXSxibDpbJ09L6Kej5p6QJ10sc2g6WyfmsZ/muZZEJ10seGc6WyfmsZ/muZZEJ10sYWw6WyfmsZ/muZZEJ10scHA6Wyfkurrkurrov7cnXSxtaTpbJzEwODAnXSxsZTpbJ+i/quWlpeWXheaOoiddLGZ1bjpbJ+iejeWFtCddLG9uZTpbJzEwODAnXX1dfTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KGluaXRTZXQpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7LliJ3lp4vljJYnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICB9KTtcXG4gICAgbGV0IGF1dG9Nb2RlVGlwcyA9IGF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mAn+W6puS8mOWFiCc6J+mhuuW6j+S8mOWFiCc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpzbWFsbChcXFwi5aSH6IOO5a6g5bm45pa55qGIOlxcXCIpK2NvbG9yKGF1dG9Nb2RlVGlwcywnI2ZmNzAwMCcpLFxcbiAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICBNeUppZXhpLmF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZT09PSfpgJ/luqbkvJjlhYgnPyfpobrluo/kvJjlhYgnOifpgJ/luqbkvJjlhYgnO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruWkh+iDjuWuoOW5uOaWueahiOS4ujonK015SmlleGkuYXV0b01vZGVcXG4gICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXG4gICAgfSk7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpjb2xvcihcXFwi5oGi5aSN5Ye65Y6C6K6+572uXFxcIiwnI2ZmNzAwMCcpLFxcbiAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICB1cmw6JChcXFwi5aaC5p6c5L2g55qE6Kej5p6Q566h55CG5peg5rOV5q2j5bi455So5LqG77yM5q2k5pa55rOV5Y+v5Lul5pWR56CW77yM56Gu6K6k5oGi5aSNP1xcXCIpLmNvbmZpcm0oKGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXCLpgZPplb/mjqjojZBcXFwiLCdqaWV4aXMnOlt7bmFtZTon6YGT6ZW/5o6o6I2QJyxxeTpbJ+S9oOeIueenkeaKgCddLHlrOlsn6aKG6YW3J10sdHg6WyfojaPogIAnXSxtZzpbJ+iaguiageWFhOW8nyddLGJsOlsnT0vop6PmnpAnXSxzaDpbJ+axn+a5lkQnXSx4ZzpbJ+axn+a5lkQnXSxhbDpbJ+axn+a5lkQnXSxwcDpbJ+S6uuS6uui/tyddLG1pOlsnMTA4MCddLGxlOlsn6L+q5aWl5ZeF5o6iJ10sZnVuOlsn6J6N5YW0J10sb25lOlsnMTA4MCddLH1dfTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7Lph43nva7kuLrlh7rljoLorr7nva4nXFxuICAgICAgICB9LGp4c1JvdXRlKVxcbiAgICB9KTtcXG5cXG4gICAgZm9yKGxldCBpIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpNeUppZXhpLm5vdz09PW5vd0p4Lm5hbWU/J/CfkYknK25vd0p4Lm5hbWU6bm93SngubmFtZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgbm93Sng6bm93SngsXFxuICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXG4gICAgICAgICAgICAgICAganhzUm91dGU6anhzUm91dGVcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKTtcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pe1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm93SnhDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHNoYXJlUGFzdGUobm93SnhDb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k6Kej5p6Q6YWN572u5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645L+u5pS5ISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vd0p4Lm5hbWU9PT1NeUppZXhpLm5vdyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k6Kej5p6Q6YWN572u5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645Yig6ZmkISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5zcGxpY2UoaSwxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkubm93PW5vd0p4Lm5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytub3dKeC5uYW1lKyfkvZzkuLrlvZPliY3op6PmnpDphY3nva4nO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbn1cXG4kLmV4cG9ydHMuanhNYW5hZ2U9anhNYW5hZ2U7XCJ9LHtcIm5hbWVcIjpcIuino+aekOe8lui+kVwiLFwicGF0aFwiOlwianhFZGl0XCIsXCJydWxlXCI6XCJqczpcXG5sZXQge25vd0p4LE15SmlleGksanhzUm91dGV9ID0gTVlfUEFSQU1TO1xcbmxldCBub3dKeFQgPSBKU09OLnBhcnNlKGdldFZhcignZG4ubm93SngnKXx8J3t9Jyk7XFxubm93SnggPSBub3dKeFQubmFtZT9ub3dKeFQ6bm93Sng7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5qeF90aXRsZXNcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcImRuLm5vd0p4XFxcIik7XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5qeG1fbmFtZVxcXCIpO1xcbn0pKTtcXG5sZXQgaWQgPSBudWxsO1xcbmZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcbiAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIH1cXG59XFxubGV0IGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+mFjee9ruWQjeensCcsXFxuICAgIGRlc2M6IFxcXCLop6PmnpDphY3nva7lkI3np7As5aaC6YGT6ZW/5o6o6I2QXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdkbi5qeG1fbmFtZScsaW5wdXQpXFxcIixcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyl8fG5vd0p4Lm5hbWVcXG4gICAgfSxcXG4gICAgY29sX3R5cGU6J2lucHV0J1xcbn0pO1xcbi8vIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfmlrDlop4nLCfliKDpmaQnLCfmibnph4/liKDpmaQnLCfnp7vliqgnXTtcXG5sZXQgb3B0aW9ucyA9IFsn5paw5aKeJywn5Yig6ZmkJywn56e75YqoJ107XFxuXFxuZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcbiAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXG4gICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXG4gICAgICAgIC8vIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcbiAgICAgICAgICAgIHB1dFZhcignZG4uanhtX3dyaXRlTW9kZScsIG9wdGlvbik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sb3B0aW9uKSxcXG4gICAgfSk7XFxufVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOidsaW5lJ1xcbn0pO1xcbi8v6I635Y+W5pat5o+S5YiX6KGoXFxuaWYoIWdldFZhcihcXFwiZG4uanhfdGl0bGVzXFxcIikpe1xcbiAgICBsZXQgdGl0bGVBcnIgPSBbXSwgdXJsQXJyID0gW107XFxuICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxuICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRpdGxlQXJyID0ganNvbi50aXRsZTtcXG4gICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcXG4gICAgICAgIHVybEFyci5wdXNoKGpzb24uY29kZXNbaXRdKTtcXG4gICAgfSk7XFxuICAgIHB1dFZhcignZG4uanhfdGl0bGVzJyxKU09OLnN0cmluZ2lmeSh0aXRsZUFycikpO1xcbn1cXG5cXG5sZXQgdGl0bGVzID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLmp4X3RpdGxlcycpfHwnW10nKTtcXG5sZXQgdGl0bGVEaWMgPSB7XFxuICAgIGFsOifpmL/ph4wnLGJsOiflk5Tlk6nlk5Tlk6knLGZ1bjon6aOO6KGMJyxsZTon5LmQ6KeGJyxtZzon6IqS5p6cJyxtaTon5ZKq5ZKVJyxwcDonUFBUVicscXk6J+eIseWlh+iJuicsc2g6J+aQnOeLkCcsXFxuICAgIHR4Oifohb7orq8nLHhnOifopb/nk5wnLHlrOifkvJjphbcnLG9uZTonMTkwNSdcXG59XFxuXFxuLy8tLS0tLS0tLS0tLS0tLS0tLVxcbmxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyYmaXQhPT0nb3RoJyk7XFxuZm9yKGxldCBqIGluIGpkcyl7XFxuICAgIGxldCBqeHMgPSBub3dKeFtqZHNbal1dfHxbXTtcXG4gICAgbGV0IHRpdGxlID0gamRzW2pdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6dGl0bGVEaWNbdGl0bGVdfHx0aXRsZSxcXG4gICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngpPT57XFxuICAgICAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT0n5paw5aKeJyl7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxfdGl0bGUgPSB0aXRsZXMuZmlsdGVyKGl0PT4hanhzLmluY2x1ZGVzKGl0KSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbF90aXRsZSwzKS5zZWxlY3QoKE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV5L+d5a2YOlxcXFxuJytpZFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAganhzLnB1c2goaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGp4cyk7XFxuICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpO1xcbiAgICAgICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KVxcbiAgICB9KTtcXG4gICAgZm9yKGxldCBrIGluIGp4cyl7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmp4c1trXSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxuangsaWQsayxtYXgpPT57XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJykpe1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeHMucmVtb3ZlKG5qeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGssJ+enu+WKqOWIsOe0ouW8leWkmuWwkT8nKS5pbnB1dCgoayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1vdmUoYXJyLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYXJyW2Zyb21JbmRleF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGZyb21JbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKHRvSW5kZXgsIDAsIGVsZW1lbnQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KGlucHV0KT09PWspe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WVpeS5n+ayoeWBmidcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocGFyc2VJbnQoaW5wdXQpPm1heC0xfHxwYXJzZUludChpbnB1dCk8LTEpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOacgOWkp+enu+WKqOiMg+WbtDAtJytwYXJzZUludChtYXgtMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IG5ld0FyID0ganhzLnNwbGljZShrLCAxKTsgLy8g5Yig5o6JXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp4cy51bnNoaWZ0KG5ld0FyWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZShqeHMsayxwYXJzZUludChpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTlhYPntKDkuI3mlK/mjIHov5vooYw6JytnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSx0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngsanhzW2tdLGlkLGssanhzLmxlbmd0aClcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTonbGluZSdcXG4gICAgfSlcXG59XFxuXFxuZC5wdXNoKHtcXG4gICB0aXRsZTon5L+d5a2YJyxcXG4gICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxuICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksaWQsanhzUm91dGUpPT57XFxuICAgICAgIGlmKGdldFZhcignZG4uanhtX25hbWUnLCcnKSE9PU15SmlleGkuamlleGlzW2lkXS5uYW1lKXtcXG4gICAgICAgICAgIGlmSGFzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpKS5sZW5ndGg+MDtcXG4gICAgICAgICAgIGlmKGlmSGFzKXtcXG4gICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5b6F5L+u5pS555qE5ZCN56ew6YeN5aSNLOS4jeWFgeiuuOS/neWtmCdcXG4gICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXS5uYW1lID0gIGdldFZhcignZG4uanhtX25hbWUnLCcnKTtcXG4gICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgfVxcbiAgICAgICB9XFxuICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZgnXFxuICAgfSxNeUppZXhpLGlkLGp4c1JvdXRlKVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wibmFtZVwiOlwi5bCP55m95qih5byPXCIsXCJwYXRoXCI6XCJzbWFsbFdoaXRlXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoJ+mBk+mVv+e7meWwj+eZveeahOWFs+eIsScpO1xcbmNvbnN0IHtjb2xvciwgc21hbGwsYXBpfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbmxldCBmaWxlUm9vdCA9IGFwaS5ob3N0KycvaGlrZXJ1bGUvenl3X2RhdGEvJztcXG4vLyBsb2coZmlsZVJvb3QpO1xcbmxldCBkID0gW107XFxudmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbnZhciB0aGVtZU9ubGluZSA9IGZpbGVSb290KycxMSc7XFxudmFyIG9sZFJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG52YXIgb2xkT25saW5lID0gZmlsZVJvb3QrJzEyJztcXG52YXIgbmV3Um91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFwiO1xcbnZhciBuZXdPbmxpbmUgPSBmaWxlUm9vdCsnMTMnO1xcbnZhciBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxudmFyIGp4T25saW5lID0gZmlsZVJvb3QrJzE0JztcXG52YXIgY2pjYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJztcXG52YXIgeDVjYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfkvaDlpb0s5bCP55m9LOWNs+S9v+WVpeS5n+S4jeS8mizkuZ/lj6/ku6XnnIvmmI7nmb3kuIvpnaLnmoTlrZflkKc/JyksXFxuICAgIGRlc2M6J+WmguaenOi/mOaYr+S4jeS8mizor7fliKDku6XmsLjmsrss5ZGK6L6e5LiN6LCiJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5o2u6K+05L2g5LiN5pyN5rCULOS4jeaJv+iupOiHquW3seaYr+Wwj+eZvT9cXFxcbueCueaIkeWPquaYr+S4uuS6huWuo+azhOS4gOS4i+S9oOeahOaEpOaAkj/llaXkuZ/liKvor7TkuoYs5LiL5Y675pCeISdcXG4gICAgfSlcXG59KTtcXG5kLnB1c2goe1xcbiAgIHRpdGxlOnNtYWxsKCfljZXpobnop6PmnpDpgInmi6nnlYzpnaLkuLvpopjmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+eahOS4u+mimOmFjee9ruS7peWPiue9kemhteaPkuS7tuWSjOmdmeaAgemhtemdoicsXFxuICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HkuLvpopjnmoTlkKchXFxcXG4nK3RoZW1lUm91dGUpLmNvbmZpcm0oKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKT0+e1xcbiAgICAgICBsZXQgdGhlbWVDb2RlID0gZmV0Y2godGhlbWVPbmxpbmUpO1xcbiAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXG4gICAgICAgICAgIGxvZyh0aGVtZUNvZGUpO1xcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICB9XFxuICAgICAgIGxldCBjakZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCI7XFxuICAgICAgIGxldCB4NUZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgdHJ5IHtcXG4gICAgICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgd3JpdGVGaWxlKGNqY2FjaGUsIGNqRmlsZSk7XFxuICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTtcXG4gICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpO1xcbiAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4T2xkVlxcXCIpO1xcbiAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4TmV3VlxcXCIpO1xcbiAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW3suaIkOWKn+W6lOeUqCdcXG4gICAgICAgfVxcbiAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuLvpopjlupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgfVxcbiAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+aWreaPkuino+aekOWPium7mOiupOWIl+ihqOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5Lik5LiqTXlQYXJzZS5qc29u5paH5Lu2JyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE6YWN572u5paH5Lu25ZCnIVxcXFxuJytvbGRSb3V0ZSsnXFxcXG4nK25ld1JvdXRlKS5jb25maXJtKChvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKT0+e1xcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9QYXJzZV9EblxcXFwuanMvLnRlc3Qob2xkQ29kZSl8fCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgb2xkQ29kZSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKG5ld1JvdXRlLCBuZXdDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mFjee9ruW6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LG9sZFJvdXRlLG9sZE9ubGluZSxuZXdSb3V0ZSxuZXdPbmxpbmUpXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+aWreaPkuino+aekOiHquWKqOaho+aooeW8j+aYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qETXlKaWV4aS5qc29u5paH5Lu2JyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE6Ieq5Yqo5qGj5pa55qGI5ZCnIVxcXFxuJytqeHNSb3V0ZSkuY29uZmlybSgoanhzUm91dGUsanhPbmxpbmUpPT57XFxuICAgICAgICBsZXQganhDb2RlID0gZmV0Y2goanhPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/oh6rliqjmoaPlupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxqeHNSb3V0ZSxqeE9ubGluZSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn55yf55qE5ZWl5Lmf5LiN5Lya5LqGLOi/mOaHkuW+l+S4gOS4quS4queCuT8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5LiK6L+w5omA5pyJ5paH5Lu2XFxcXG7kuIDplK7mkJ7lroznm7TmjqXljrvmlK/mjIHmlq3mj5LnmoTlsI/nqIvluo/nnIvop4bpopHlsLHooYzllaYnLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgdXJsOiQoJ+S/ruS7meazleWKm+aXoOi+uScsJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoTkuIrov7DmiYDmnInmlofku7blkKchXFxcXG7or7fovpPlhaXpgZPplb/kv67ku5nms5Xlipvml6DovrnmnaXnoa7orqTmiafooYzmraTmk43kvZwnKS5pbnB1dCgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSk9PntcXG4gICAgICAgIGlmKGlucHV0IT09J+mBk+mVv+S/ruS7meazleWKm+aXoOi+uScpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKzmrKHlj5bmtojmiafooYwnXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdGhlbWVDb2RlID0gZmV0Y2godGhlbWVPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxuICAgICAgICAgICAgbG9nKCd0aGVtZUNvZGU6Jyt0aGVtZUNvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nkuLvpopjlpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBjakZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCI7XFxuICAgICAgICBsZXQgeDVGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCI7XFxuICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxuICAgICAgICAgICAgLy8gbG9nKCdvbGRDb2RlOicrb2xkQ29kZSk7XFxuICAgICAgICAgICAgLy8gbG9nKCduZXdDb2RlOicrbmV3Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcbiAgICAgICAgICAgIC8vIGxvZygnanhDb2RlOicranhDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpOyAvLyDmi4nmj5Lku7ZcXG4gICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTsgLy/mi4nnvZHpobXmlofku7ZcXG4gICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSwgdGhlbWVDb2RlKTsgLy/mi4nkuLvpopjmlofku7ZcXG4gICAgICAgICAgICBjbGVhclZhcihcXFwianhPbGRWXFxcIik7XFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4TmV3VlxcXCIpO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgb2xkQ29kZSk7IC8v5ouJ5pat5o+S6buY6K6k6YCJ5oup55WM6Z2i55qE6YWN572uXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG5ld1JvdXRlLCBuZXdDb2RlKTsgLy/mi4nmlq3mj5LlhoXnmoTop6PmnpBcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7IC8vIOaLieiHquWKqOaho+aWh+S7tlxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuIDplK7mqKHlvI/lupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lKVxcbn0pO1xcbmxldCBkZXNjSW5mbyA9ICfkuLvpopjmlofku7Y6Jyt0aGVtZVJvdXRlKydcXFxcbuS4u+eVjOmdoumFjee9rjonK29sZFJvdXRlKydcXFxcbuWrluWIsOeahOino+aekDonK25ld1JvdXRlKydcXFxcbuiHquWKqOaho+ino+aekDonK2p4c1JvdXRlO1xcbmRlc2NJbmZvKz0nXFxcXG7kuLvmj5Lku7Y6JytjamNhY2hlKydcXFxcbuS4u+mFjee9rumAieaLqeeVjOmdouaWh+S7tjonK3g1Y2FjaGU7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6J+aWh+S7tuaPj+i/sDpcXFxcbicrZGVzY0luZm8sXFxuICAgIGNvbF90eXBlOidsb25nX3RleHQnLFxcbiAgICBleHRyYTp7dGV4dFNpemU6IDEzLGxpbmVWaXNpYmxlOmZhbHNlfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn1dLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCJNeUZpZWxk4bSw4oG/XCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG5jb25zdCBkID0gW107XFxuY29uc3QgZGF0YSA9IHt9O1xcblxcbmRhdGEub2xkQ29uZmlnID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG5kYXRhLmNqUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXCI7XFxuZGF0YS54NVJvdXRlID0gXFxcImZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL1BhcnNlX0RuLmh0bWxcXFwiO1xcblxcblxcbmRhdGEuanhMYXp5ID0gXFxcImV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaCgnXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFwiO1xcblxcbmRhdGEuc3pQYXJzZSA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxuXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgZGVzYzogJzc5NScsXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgIH0pO1xcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXG4gICAgdmFyIHBpY3MgPSBbXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcbiAgICBdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcbiAgICB9KTtcXG4gIHNldFJlc3VsdChkKTtcXG59XFxuXFxuc3dpdGNoIChnZXRQYXJhbShcXFwidHlwZVxcXCIpKSB7XFxuICAgIGNhc2UgXFxcIuiuvue9rlxcXCI6XFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxuICAgICAgICAvL3NldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCLnvJbovpFcXFwiOlxcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi5Li76aKYXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnRoZW1lSW5pdCgpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi6Kej5p6QXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TWFuYWdlKCk7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxuICAgICAgICBicmVhaztcXG59XCIsXCJncm91cFwiOlwi4pGg5o6o6I2QXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4tdnVlLmh0bWxcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uaHRtbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCI8IURPQ1RZUEUgaHRtbD5cXFxcbjxodG1sPlxcXFxuPGhlYWQ+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/a2V5PW5uNGo4cnVrUFhTVnpSNzhFOSZ1cmw9XFxcXFxcXCJ9fSkpXFxcXG4gICAgfVxcXFxuICAgIHZhciBuZXdDb25maWcgPSBmYmEuZmV0Y2gobmV3Um91dGUpO1xcXFxuICAgIHZhciBteVNlbGVjdCA9IFtdO1xcXFxuICAgIGZ1bmN0aW9uIGNvbXBhcmUobGlzdCkge1xcXFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gIWxpc3QuaW5jbHVkZXMoaXQpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgaWYobmV3Q29uZmlnJiZuZXdDb25maWcubGVuZ3RoPjIwKXtcXFxcbiAgICAgICAgZXZhbChcXFxcXFxcIm5ld0NvbmZpZyA9XFxcXFxcXCIgKyBuZXdDb25maWcgKyBcXFxcXFxcIjtcXFxcXFxcIik7XFxcXG4gICAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihzZXR0aW5ncyxuZXdDb25maWcuc2V0dGluZ3MpO1xcXFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXFxcbiAgICAgICAgbXlTZWxlY3QgPSBuZXdDb25maWcudGl0bGUuZmlsdGVyKGNvbXBhcmUoeWNUaXRsZSkpO1xcXFxuICAgIH1cXFxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXFxcblxcXFxuICAgIGxldCBvcHRpb25zID0gW1xcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifniLHlpYfoibonLFxcXFxuICAgICAgICAgICAgaWQ6J3F5JyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6J+iuvue9rueIseWlh+iJuidcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5LyY6YW3JyxcXFxcbiAgICAgICAgICAgIGlkOid5aycsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcXFxuICAgICAgICAgICAgaWQ6J3R4JyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnR4XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+iKkuaenCcsXFxcXG4gICAgICAgICAgICBpZDonbWcnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubWdcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5ZOU5ZOp5ZOU5ZOpJyxcXFxcbiAgICAgICAgICAgIGlkOidibCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcXFxuICAgICAgICAgICAgaWQ6J3NoJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnNoXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+ilv+eTnCcsXFxcXG4gICAgICAgICAgICBpZDoneGcnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MueGdcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6Zi/6YeMJyxcXFxcbiAgICAgICAgICAgIGlkOidhbCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5hbFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXFxcbiAgICAgICAgICAgIGlkOidwcCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5wcFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOiflkqrlkpUnLFxcXFxuICAgICAgICAgICAgaWQ6J21pJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1pXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+S5kOinhicsXFxcXG4gICAgICAgICAgICBpZDonbGUnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxcXG4gICAgICAgICAgICBpZDonb25lJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm9uZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifpo47ooYwnLFxcXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5mdW5cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5YW25LuWJyxcXFxcbiAgICAgICAgICAgIGlkOidvdGgnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxcXG4gICAgICAgICAgICBpZDoncWp1JyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnFqdVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifmj5Lku7YnLFxcXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmNqXFxcXG4gICAgICAgIH0sXFxcXG4gICAgXTtcXFxcblxcXFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGdldE9wdGlvbihpZCx0aXRsZSkge1xcXFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXFxcbiAgICAgICAgRGlkKHRpdGxlKS52YWx1ZSA9IG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS50ZXh0O1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiByZXNldFNlbGVjdChpZCl7XFxcXG4gICAgICAgIERpZChpZCtcXFxcXFxcIlNlbGVjdFxcXFxcXFwiKS5vcHRpb25zLnNlbGVjdGVkSW5kZXggPSAtMTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICAvL+WHveaVsOmDqOWIhlxcXFxuXFxcXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXtcXFxcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247XFxcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XFxcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnO1xcXFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcXFxcXCJ3aWR0aDo0NSU7IG1pbi13aWR0aDoxNTBweDsgYmFja2dyb3VuZDojMzExOyBvcGFjaXR5OjAuNjsgaGVpZ2h0OmF1dG87bWluLWhlaWdodDogNDVweDsgY29sb3I6I2ZmZjsgbGluZS1oZWlnaHQ6NDVweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6MTBweDsgcG9zaXRpb246Zml4ZWQ7IHRvcDo2MCU7IGxlZnQ6MjYlOyB6LWluZGV4Ojk5OTk5OTtcXFxcXFxcIjtcXFxcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtKTtcXFxcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgICAgIHZhciBkID0gMC41O1xcXFxuICAgICAgICAgICAgbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJy13ZWJraXQtdHJhbnNmb3JtICcgKyBkICsgJ3MgZWFzZS1pbiwgb3BhY2l0eSAnICsgZCArICdzIGVhc2UtaW4nO1xcXFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xcXFxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtKSB9LCBkICogMTAwMCk7XFxcXG4gICAgICAgIH0sIGR1cmF0aW9uKTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBvcGVuRG5QYWdlKCl7XFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFwiPV5fXj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIue8lui+keino+aekFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBncm91cDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgLy9maW5kUnVsZTogXFxcXFxcXCJqczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXFxcXFxcXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXFxcXFxcXFxcIikuZWRpdCgpO3NldFJlc3VsdChkKTtcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcbiAgICAgICAgfSkpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBvcGVuVGhlbWUoKXtcXFxcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgcnVsZTogXFxcXFxcXCI9Xl9ePVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Li76aKY566h55CGXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeS4u+mimCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGdyb3VwOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxcXG4gICAgICAgIH0pKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gb3Blbkp4TWFuYWdlKCl7XFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFwiPV5fXj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuino+aekOmFjee9rueuoeeQhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBncm91cDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcXFxuICAgICAgICBpZighbXlTZXQpe1xcXFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXFxcbiAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICBmYmEuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcXFxuICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICBmb3IobGV0IGtleSBpbiBzZXR0aW5ncyl7XFxcXG4gICAgICAgICAgICAgICAgLy8gZmJhLmxvZyhEaWQoa2V5KSsnJytrZXkpO1xcXFxuICAgICAgICAgICAgICAgIHRyeXtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlO1xcXFxuICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXFxcXFxcXCLmnKrojrflj5bliLDoioLngrk6XFxcXFxcXCIra2V5K1xcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIrZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmKG15U2VsZWN0KXtcXFxcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld0NvbmZpZy5zZXR0aW5ncywgc2V0dGluZ3MpO1xcXFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkobmV3Q29uZmlnKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBmYmEud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxcXG4gICAgICAgICAgICBUb2FzdChtc2csZHVyYXRpb24pO1xcXFxuICAgICAgICAgICAgaWYodGl0bGU9PT1cXFxcXFxcIuWFs1xcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgICAgICBmYmEuYmFjaygpO1xcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgZmJhLnJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG5cXFxcbiAgICAvL2xldCB3aWR0aD13aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGg7XFxcXG4gICAgLy9sZXQgd2lkdGhQeD13aWR0aC0zOTMrNTI7XFxcXG4gICAgLy9hbGVydChcXFxcXFxcIuW9k+WJjeWIhui+qOeOhzpcXFxcXFxcIit3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGgrXFxcXFxcXCIqXFxcXFxcXCIrd2luZG93LnNjcmVlbi5oZWlnaHQpO1xcXFxuICAgIHZhciB2ZXJpbmZvID0gW3tcXFxcbiAgICAgICAgaWQ6J2RuJyxcXFxcbiAgICAgICAgYXV0aG9yOifmlq3lv7UnLFxcXFxuICAgICAgICBhdmF0YXI6J2h0dHBzOi8vczMuYXgxeC5jb20vMjAyMS8wMi8yMi95N3diOU8uanBnJyxcXFxcbiAgICAgICAgb3B0aW9uOm9wZW5EblBhZ2UsXFxcXG4gICAgfSxcXFxcbiAgICB7XFxcXG4gICAgICAgIGlkOidkeicsXFxcXG4gICAgICAgIGF1dGhvcjon6YGT6ZW/JyxcXFxcbiAgICAgICAgYXZhdGFyOidodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTQzNDg1NzAwNSZzPTY0MCcsXFxcXG4gICAgICAgIG9wdGlvbjpvcGVuVGhlbWVcXFxcbiAgICB9LFxcXFxuICAgIHtcXFxcbiAgICBpZDonbG0nLFxcXFxuICAgICAgICBhdXRob3I6ICfok53ojpMnLFxcXFxuICAgICAgICBhdmF0YXI6ICdodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTI1Nzk5NDkzNzgmcz02NDAnLFxcXFxuICAgICAgICBvcHRpb246b3Blbkp4TWFuYWdlXFxcXG4gICAgfVxcXFxuICAgIF07XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBkb09wdGlvbihvcHRpb25faWQpe1xcXFxuICAgICAgICBsZXQgdmVyID0gdmVyaW5mby5maWx0ZXIoaXQ9Pml0LmlkPT09b3B0aW9uX2lkKVswXTtcXFxcbiAgICAgICAgdmVyLm9wdGlvbigpO1xcXFxuICAgIH1cXFxcblxcXFxuICAgIGNvbnN0IFJlbmRlckh0bWxBcHAgPSB7XFxcXG4gICAgICAgIGRhdGEoKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgIC8vIHJhd0h0bWw6ICc8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiByZWRcXFxcXFxcIj7ov5nph4zkvJrmmL7npLrnuqLoibLvvIE8L3NwYW4+JyxcXFxcbiAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnMsXFxcXG4gICAgICAgICAgICAgICAgdmVyaW5mbzp2ZXJpbmZvLFxcXFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOnBsYWNlaG9sZGVyLFxcXFxuICAgICAgICAgICAgICAgIHRpcHM6dGlwcyxcXFxcbiAgICAgICAgICAgICAgICB0aGVtZXM6dGhlbWVzLFxcXFxuICAgICAgICAgICAgICAgIG15U2VsZWN0Om15U2VsZWN0LFxcXFxuICAgICAgICAgICAgICAgIC8vIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzJ10sXFxcXG4gICAgICAgICAgICAgICAgY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXSxcXFxcbiAgICAgICAgICAgICAgICBzZXR0aW5nczpzZXR0aW5ncyxcXFxcbiAgICAgICAgICAgICAgICBzaG93VGlwczpmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAvL3dpZHRoUHg6d2lkdGhQeFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBtZXRob2RzOntcXFxcbiAgICAgICAgICAgIC8vIGNoYW5nZVZhbDpmdW5jdGlvbihldmVudCl7XFxcXG4gICAgICAgICAgICAvLyAgICAgZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKTtcXFxcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbE9wdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcXFxcbiAgICAgICAgICAgIC8vICAgICBhbGVydChcXFxcXFxcIuS9oOmAieS4reS6hlxcXFxcXFwiK2V2ZW50LnRhcmdldC52YWx1ZSk7XFxcXG4gICAgICAgICAgICAvLyB9XFxcXG4gICAgICAgICAgICBkb09wdGlvbjpkb09wdGlvblxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGNvbnN0IGFwcD1WdWUuY3JlYXRlQXBwKFJlbmRlckh0bWxBcHApO1xcXFxuICAgICAgICBhcHAubW91bnQoJ2JvZHknKTtcXFxcbiAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgY29uc29sZS5sb2coZS5tZXNzYWdlKVxcXFxuICAgIH1cXFxcblxcXFxuPC9zY3JpcHQ+XFxcXG5cXFxcbjwvYm9keT5cXFxcbjwvaHRtbD5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJQYXJzZV9Ebi5qc1xcXCIsXFxcInBhdGhcXFwiOlxcXCJQYXJzZV9Ebi5qc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCIvLz09PT09PT09PT09PeWFjeWXheiwg+eUqD09PT09PT09PT09PVxcXFxuLy/vvI3vvI3vvI09Xl9ePVxcXFxuXFxcXG52YXIgdmVyc2lvbiA9IDMuNDk7XFxcXG52YXIgdXBkYXRlRGF0ZSA9ICcyMDIxLzEwLzI5LzEwOjM1JztcXFxcbnZhciBfbXlTZXQgPSB7XFxcXG4gICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICBvdGg6J+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXG4gICAgY2pjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLFxcXFxuICAgIHRoZW1lY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvbicsXFxcXG4gICAgamlleGljYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uJyxcXFxcbiAgICB4NWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyxcXFxcbiAgICBvbGRDb25maWc6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicsXFxcXG4gICAgY2tMaW5rOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92LycsXFxcXG4gICAgY2o6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvQ2xvdWRQYXJzZS1WMl9Ebi5qcycsXFxcXG4gICAgeDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxcXG4gICAgcGFyc2VSb3V0ZTogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXFxcbiAgICB4NVJvdXRlOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbCdcXFxcbn07XFxcXG52YXIgTXlQYXJzZVMgPSB7fTtcXFxcbnZhciBteVNldCA9IF9teVNldDtcXFxcbmlmIChmaWxlRXhpc3QoX215U2V0LnBhcnNlUm91dGUpKSB7XFxcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxcXG4gICAgTXlQYXJzZVMgPSBwYXJzZUZpbGUuY29kZXM7XFxcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxcXG59XFxcXG52YXIgcGFyc2VUaXRsZSA9IFtcXFxcbiAgICBcXFxcXFxcInl1bjE3MTdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIlBhbkd1XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJGdVhpbmdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRlZmF1bHRQYXJzZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwi6YGT6ZW/5LuT5bqT6YCa5YWNXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZWZhdWx0UGFyc2VXZWJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIk9L6Kej5p6QXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJNM1U4VFZcXFxcXFxcIixcXFxcbl07XFxcXG4vL++8je+8je+8jT1eX149XFxcXG5cXFxcbi8v5o6l5Y+j6K6+572uLlxcXFxuXFxcXG52YXIgc2V0VXJsID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIjtcXFxcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcXFxudmFyIGxhenkgPSBgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClgO1xcXFxuXFxcXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXFxcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXFxcblxcXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxcXG4vKlxcXFxuICog5b2x6KeG5bel5Zy677yaIGh0dHBzOi8veXNnYy5jYy9cXFxcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcXFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcXFxuICog5rGf5rmWMjogaHR0cDovLzk4aHlrLmNuL2luZGV4LnBocC92b2QvcGxheS9pZC83Mjg0MS9zaWQvMS9uaWQvMS5odG1sXFxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxcXG4gKlxcXFxuICogd3VpZ2VuOiBodHRwczovL3d3dy41aWdlbi5jb20vZG1wbGF5ZXIvcGxheWVyLz91cmw9XFxcXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXFxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXFxcbiAqXFxcXG4gKi9cXFxcblxcXFxuXFxcXG52YXIgdG9vbHMgPSB7XFxcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXG4gICAgfSxcXFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXFxcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICB9LFxcXFxuICAgIC8vYXNjaWlcXFxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxuICAgIH0sXFxcXG4gICAgLy/lh6/mkpJcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcbiAgICB9LFxcXFxuICAgIG5vd0RhdGU6IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcXFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChkYXRlMSkge1xcXFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxcXG4gICAgICAgICAgICB2YXIgbW9udGggPSBkYXRlMS5nZXRNb250aCgpICsgMTtcXFxcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgbW9udGg7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItXFxcXFxcXCIgKyBtb250aDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChkYXkgPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFwiLVxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcXFxuICAgIH0sXFxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgNCk7XFxcXG4gICAgfSxcXFxcbiAgICB0b1ZOdW06IGZ1bmN0aW9uKGEpIHtcXFxcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIHZhciBjID0gYS5zcGxpdCgnLicpO1xcXFxuICAgICAgICB2YXIgbnVtX3BsYWNlID0gW1xcXFxcXFwiXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiLCBcXFxcXFxcIjAwXFxcXFxcXCIsIFxcXFxcXFwiMDAwXFxcXFxcXCIsIFxcXFxcXFwiMDAwMFxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIHIgPSBudW1fcGxhY2UucmV2ZXJzZSgpO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIHZhciBsZW4gPSBjW2ldLmxlbmd0aDtcXFxcbiAgICAgICAgICAgIGNbaV0gPSByW2xlbl0gKyBjW2ldO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciByZXMgPSBjLmpvaW4oJycpO1xcXFxuICAgICAgICByZXR1cm4gcmVzO1xcXFxuICAgIH0sXFxcXG4gICAgY3ByVmVyc2lvbjogZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICB2YXIgX2EgPSBwYXJzZUludCh0aGlzLnRvVk51bShhKSksXFxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXFxcbiAgICAgICAgYiA9IGlzTmFOKF9iKSA/IHZlcnNpb24gOiBiO1xcXFxuICAgICAgICBpZiAoX2EgPiBfYikge1xcXFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcHV0VmFyKCdqeE9sZFYnLCBiKTtcXFxcbiAgICB9XFxcXG59O1xcXFxuaWYgKGdldFZhcihcXFxcXFxcImp4T2xkVlxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikgIT0gdmVyc2lvbikge1xcXFxuICAgIHB1dFZhcignY2pDYWNoZScsIF9teVNldC5jamNhY2hlKTtcXFxcbiAgICBwdXRWYXIoJ3g1Q2FjaGUnLCBfbXlTZXQueDVDYWNoZSk7XFxcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXFxcbiAgICBwdXRWYXIoJ3BhcnNlUm91dGUnLCBfbXlTZXQucGFyc2VSb3V0ZSk7XFxcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKCdodHRwczovL2dpdGVlLmNvbS9EdWFuLU5pYW4vRG4vcmF3L21hc3Rlci9oaWtlcnZpZXcvUGFyc2VWZXJzaW9uLnR4dCcpLFxcXFxuICAgICAgICBqeE9sZFYgPSAoZmV0Y2goX215U2V0LmNqY2FjaGUpLnNwbGl0KCd2ZXJzaW9uID0gXFxcXFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcXFxcXCInKVswXTtcXFxcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXFxcbn1cXFxcblxcXFxudmFyIFBhcnNlUyA9IHt9O1xcXFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcXFxuICAgIC8vIHVwZGF0ZURhdGU6IHVwZGF0ZURhdGUsXFxcXG4gICAgcGFyc2VMYzonaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci9wL3BhcnNlTGMuanMnLFxcXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxcXG4gICAgcGNVQTogJ1VzZXItQWdlbnRATW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMFxcXFxcXFxc77ybXFxcXFxcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBtM3U4ID0gZmV0Y2godlVybCwge30pO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3ZpZGVvcy5tM3U4JywgbTN1OCk7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgIHJldHVybiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvdmlkZW9zLm0zdTgjJztcXFxcbiAgICB9LFxcXFxuICAgIGRlZmF1bHRQYXJzZTogZnVuY3Rpb24odXJsLHRpbWVvdXQpIHtcXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcXFxuICAgIH0sXFxcXG4gICAgZGVmYXVsdFBhcnNlV2ViOiBmdW5jdGlvbihwbGF5VXJsLHRpbWVvdXQsZXh0cmEpIHtcXFxcbiAgICAgICAgLy8gbG9nKCfkvKDlhaVkZWZhdWx0UGFyc2VXZWLnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXFxcbiAgICAgICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHw1MDAwO1xcXFxuICAgICAgICBleHRyYSA9IGV4dHJhfHx7fTtcXFxcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3R8fFtdO1xcXFxuICAgICAgICBpZih0eXBlb2YocGxheVVybExpc3QpPT09J29iamVjdCcmJnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgIHBsYXlVcmxMaXN0LnVuc2hpZnQocGxheVVybCk7XFxcXG4gICAgICAgICAgICBsZXQgcGxheVVybHM9cGxheVVybExpc3Quc2xpY2UoMCw0KTtcXFxcbiAgICAgICAgICAgIGxldCBuYW1lcz1leHRyYS5uYW1lTGlzdC5zbGljZSgwLDQpO1xcXFxuICAgICAgICAgICAgbG9nKCflvIDlp4vmibnph4/op6PmnpAo5bey5Y676YeNLOWPquWPluWJjTPkuKrlpIfog44pOicrbmFtZXMpO1xcXFxuICAgICAgICAgICAgY29uc3Qge0xhenlQYXJzZUZhc3R9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXFxcbiAgICAgICAgICAgIGxldCByZXQgPSBMYXp5UGFyc2VGYXN0KHBsYXlVcmxzLHRpbWVvdXQsdGltZW91dCk7XFxcXG4gICAgICAgICAgICBpZih0eXBlb2YocmV0KT09PSdvYmplY3QnJiZyZXQubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIHJldFswXVxcXFxuICAgICAgICAgICAgICAgIC8vbG9nKHJldCk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBnZXRBcHBWZXJzaW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgaWYocGFyc2VJbnQodik+PTIxOTQmJnJldC5sZW5ndGg+MSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gQXJyYXkuZnJvbShuZXcgU2V0KHJldCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IHVybHMubWFwKChpdCk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvOy8udGVzdChpdCl8fGl0LnNwbGl0KCc7JykubGVuZ3RoPDIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWQgPSBpdC5zcGxpdCgnOycpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvQC8udGVzdChoZWFkKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5yZXBsYWNlKC97fH0vZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoJyYmJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHt9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBoZWFkKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaGVhZFtpXS5zcGxpdCgnQCcpWzFdLnJlcGxhY2UoLzsvLCfvvJvvvJsnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJscyA9IHVybHMubWFwKGl0PT5pdC5zcGxpdCgnOycpWzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHt1cmxzOnVybHMsaGVhZGVyczpoZWFkZXJzfSk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRbMF1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgY29uc3Qge2xhenlQYXJzZX0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcXFxuICAgICAgICAgICAgbGV0IHg1UGxheT1sYXp5UGFyc2UocGxheVVybCx0aW1lb3V0KTtcXFxcbiAgICAgICAgICAgIGlmKHR5cGVvZih4NVBsYXkpPT1cXFxcXFxcInVuZGVmaW5lZFxcXFxcXFwifHwheDVQbGF5KXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+mBk+mVv+S7k+W6k+ino+aekOWksei0pVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgdGlwcz0veDVSdWxlLy50ZXN0KHg1UGxheSk/XFxcXFxcXCJ4NeWFjeWXheW8gOWni1xcXFxcXFwiOlxcXFxcXFwi5p6B6YCf5YWN5ZeF5o6i5a6M5q+V77yM5Zyw5Z2AOlxcXFxcXFwiKygvXmh0dHAvLnRlc3QoeDVQbGF5KT94NVBsYXk6J+mdnuato+W4uOmTvuaOpScpO1xcXFxuICAgICAgICAgICAgbG9nKHRpcHMpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHg1UGxheTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgbWFvc3M6IGZ1bmN0aW9uKGp4dXJsLCByZWYpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbih0ZXh0KSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICBpZiAocmVmKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJyZidHdhZj0nKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXFxcXFwiLylbMV0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KCdidF90b2tlbiA9IFxcXFxcXFwiJylbMV0uc3BsaXQoJ1xcXFxcXFwiJylbMF07XFxcXG4gICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxcXFxcc1xcXFxcXFxcU10qP30vKVswXSArICcnKTtcXFxcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcXFxuICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIFxcXFxcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXFxcXFwiLCBpdikpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcXFxcXCJhcGkucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB2YXIgYjY0aWQgPSBiYXNlNjRFbmNvZGUoanh1cmwuc3BsaXQoJ3VybD0nKVsxXSk7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcXFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxcXG4gICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICB1cmwgPSAoanNvbi5jb2RlID09IDIwMCA/IGJhc2U2NERlY29kZSh0b29scy5jYWVzYXJDaXBoZXIoanNvbi51cmwsIC0xKSkgOiAnJyk7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIFBhbkd1OiBmdW5jdGlvbih2aXBVcmwsIGRhdGEpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIC8qdmFyIHJlZiA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS8nO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXFxcbiAgICAgICAgICAgICovXFxcXG4gICAgICAgICAgICAvL3ZhciByZWYgPSAnaHR0cHM6Ly94bXlzdHYuY29tLyc7XFxcXG4gICAgICAgICAgICAvL3ZhciBwYXJzZSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvaW5kZXgucGhwP3VybD0nICsgdGFpbFVybDtcXFxcbiAgICAgICAgICAgIC8vdmFyIGFwaSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvYXBpLnBocCc7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vcGFuZ3UvP3VybD0nICsgdmlwVXJsO1xcXFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvcGFuZ3UyMDIxL2FwaS5waHAnO1xcXFxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcXFxcbiAgICAgICAgICAgICAgICByZWYgPSBkYXRhWzBdO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlID0gZGF0YVsxXTtcXFxcbiAgICAgICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIFRpbWUgPSAoTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApICogMSkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgICAgIHZhciB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHBhcnNlXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyB2aXBVcmwgKyAnJnJlZmVyZXI9JyArIGJhc2U2NEVuY29kZShwYXJzZSkgKyAnJnJlZj0xJnRpbWU9JyArIFRpbWUgKyAnJnR5cGU9Jm90aGVyPScgKyBiYXNlNjRFbmNvZGUodmlwVXJsKSArICcmaW9zPTAnLFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgICAgICB9KSkudXJsO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICB5dW4xNzE3OiBmdW5jdGlvbiAodmlwVXJsKSB7XFxcXG4gICAgICAgIHZhciBpc3lrID0gdmlwVXJsLmluZGV4T2YoJ3lvdWt1Jyk7XFxcXG4gICAgICAgIHZhciByZWYgPSBcXFxcXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcXFxcXCIgKyB2aXBVcmw7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8xMDA0Ly4uaW5kZXguLnBocFxcXFxcXFwiO1xcXFxuICAgICAgICByZXR1cm4gaXN5ayA9PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArICcsdmlwOicsIHBhcnNlICsgJyx2aXA6JywgYXBpXSk7XFxcXG4gICAgfSxcXFxcbiAgICBPS+ino+aekDonaHR0cHM6Ly9va2p4LmNjLz91cmw9JyxcXFxcbiAgICBNM1U4VFY6J2h0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPScsXFxcXG4gICAg6YGT6ZW/5LuT5bqT6YCa5YWNOmZ1bmN0aW9uICh1cmwsdGltZW91dCl7XFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKHVybCx0aW1lb3V0KTtcXFxcbiAgICB9LFxcXFxuICAgIEZ1WGluZzogZnVuY3Rpb24odmlwVXJsKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAvL2lmKHZpcFVybC5pbmRleE9mKCd2LnlvdWt1JykhPS0xKXtcXFxcbiAgICAgICAgICAgIC8vICAgIHZpcFVybCA9IChKU09OLnBhcnNlKHJlcXVlc3QodmlwVXJsLCB7cmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSkuaGVhZGVycy5sb2NhdGlvbiArICcnKS5yZXBsYWNlKC9cXFxcXFxcXD8uKi8sJycpO1xcXFxuICAgICAgICAgICAgLy99XFxcXG4gICAgICAgICAgICB2YXIgcmVmID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvP3VybD0nICsgdmlwVXJsO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gcmVmO1xcXFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpL2FwaXVfZngucGhwJztcXFxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxufTtcXFxcblxcXFxuT2JqZWN0LmFzc2lnbihQYXJzZVMsIG9yaWdpbmFsUGFyc2VTLCBNeVBhcnNlUyk7XFxcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcXFxuXFxcXG5cXFxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsc3RyVGl0bGUsdGltZW91dCxwbGF5VXJsKSB7XFxcXG4gICAgLy8g5Y+C5pWwMTrmraPniYjnvZHlnYDlnLDlnYAg5Y+C5pWwMiDlrprlkJHop6PmnpDmjqXlj6PlkI3np7Ag5Y+C5pWwMyB4Neino+aekOi2heaXtiDlj4LmlbA0IOWujOaVtOeahOaSreaUvumTvuaOpVxcXFxuICAgIHN0clRpdGxlID0gc3RyVGl0bGV8fCcnO1xcXFxuICAgIHBsYXlVcmw9cGxheVVybHx8Jyc7XFxcXG4gICAgLy8gbG9nKCfkvKDlhaVheXRtUGFyc2XnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXFxcbiAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fDUwMDA7XFxcXG5cXFxcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXFxcbiAgICBsZXQganhzUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcXFxcXCI7XFxcXG4gICAgbGV0IE15SmlleGkgPSB7fTtcXFxcbiAgICBsZXQgamlleGlzID0ge307XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXFxcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcXFxuICAgIH1jYXRjaCAoZSkge31cXFxcbiAgICBmdW5jdGlvbiBnZXRQbGF5Sngoa2V5KXtcXFxcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gW107Ly/mibnph4/mkq3mlL7lnLDlnYDliJfooahcXFxcbiAgICAgICAgbGV0IG5hbWVMaXN0ID0gW107XFxcXG4gICAgICAgIGxldCBqeHMgPSBqaWV4aXNba2V5XTsgLy8g6YCC55So5LqO6L+Z5Liq572R56uZ55qE6Kej5p6Q5YiX6KGoXFxcXG4gICAgICAgIGlmKGp4cyl7XFxcXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4ganhzKXtcXFxcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTW2p4c1tpXV0gPT0gJ3N0cmluZycmJlBhcnNlU1tqeHNbaV1dLm1hdGNoKC9odHRwLio/PS8pKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGxheVVybExpc3QucHVzaChQYXJzZVNbanhzW2ldXSt2aXBVcmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKGp4c1tpXSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8vIHJldHVybiBwbGF5VXJsTGlzdFxcXFxuICAgICAgICByZXR1cm4ge3BsYXlVcmxMaXN0OnBsYXlVcmxMaXN0LG5hbWVMaXN0Om5hbWVMaXN0fVxcXFxuICAgIH1cXFxcbiAgICBsZXQgZXh0cmEgPSB7fTtcXFxcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXFxcbiAgICBpZighc3RyVGl0bGUpe1xcXFxuICAgICAgICB2YXIgaG9zdDtcXFxcbiAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXFxcXFwuKC4qPylcXFxcXFxcXC8vKVsxXTtcXFxcbiAgICAgICAgfWNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgaWYoIS9eaHR0cC8udGVzdChwbGF5VXJsKSl7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwi5pat5o+S6LCD55So5aSx6LSl77yBXFxcXFxcXFxu6Z2e5q2j5bi455qEdmlw5q2j54mI5Zyw5Z2A5LiU5pyq6K+G5Yir5Y6f56uZ6Kej5p6Q5pKt5pS+5Zyw5Z2AXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLumBk+mVv+S7k+W6k+mAmuWFjShwbGF5VXJsLHRpbWVvdXQpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy9sb2coaG9zdCk7XFxcXG4gICAgICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxcXG4gICAgICAgICAgICBjYXNlIFxcXFxcXFwi6buY6K6kXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChob3N0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJxcS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3R4Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImlxaXlpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncXknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwieW91a3UuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd5aycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJhbGl6eVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYWw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYWwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwibWd0di5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21nJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImJpbGliaWxpLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYmwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwic29odS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInR2LnNvaHUuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJpeGlndWEuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC54ZztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd4ZycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJwcHR2LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucHA7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncHAnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwibWlndXZpZGVvLmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwibGUuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5sZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdsZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCIxOTA1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub25lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ29uZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJmdW4udHZcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmZ1bjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdmdW4nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub3RoO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9ZWxzZXtcXFxcbiAgICAgICAgbG9nKCfmrrXmj5LmiafooYzlrprlkJHop6PmnpDnur/ot6/lpLQ6JytzdHJUaXRsZSk7XFxcXG4gICAgICAgIHN0ciA9IHN0clRpdGxlO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgd2l0aEJhdGNoID0gISEoTXlKaWV4aS5pc0F1dG8gJiYgTXlKaWV4aS5hdXRvTW9kZSA9PT0gJ+mAn+W6puS8mOWFiCcpO1xcXFxuICAgIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ2Z1bmN0aW9uJykge1xcXFxuICAgICAgICBpZigv6YCa5YWNLy50ZXN0KHN0cikpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tzdHJdKHZpcFVybCx0aW1lb3V0KTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgdXJsID0gUGFyc2VTW3N0cl0odmlwVXJsKTtcXFxcbiAgICAgICAgaWYgKC9eXFxcXFxcXFwvLy50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgIHVybCA9ICdodHRwczonICsgdXJsXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKC89aHR0cC8udGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSAvJnVybD0vLnRlc3QodXJsKSA/IHVybCA6ICdodHRwJyArIGRlY29kZVVSSUNvbXBvbmVudCh1cmwuc3BsaXQoJz1odHRwJylbMV0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8qaWYodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKT09J21ndHYuY29tJyl7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vd3d3Lm1ndHYuY29tfSc7XFxcXG4gICAgICAgIH0gZWxzZSAqL1xcXFxuICAgICAgICBpZiAoL1xcXFxcXFxcLmZsdi8udGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh1cmwgPT09ICcnIHx8IHVybCA9PT0gdmlwVXJsKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnc3RyaW5nJyYmUGFyc2VTW3N0cl0ubWF0Y2goL2h0dHAuKj89LykpIHtcXFxcbiAgICAgICAgLy8gbG9nKFxcXFxcXFwi5pat5o+S5byA5aeL6YCa55So5omn6KGM5YWN5ZeFIGRlZmF1bHRQYXJzZVdlYjpcXFxcXFxcIit0aW1lb3V0KTtcXFxcbiAgICAgICAgLy9sb2coXFxcXFxcXCLpu5jorqR4NVxcXFxcXFwiK1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIpO1xcXFxuICAgICAgICBpZih3aXRoQmF0Y2gpe1xcXFxuICAgICAgICAgICAgaWYodHlwZW9mKGV4dHJhLnBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZleHRyYS5wbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSBleHRyYS5wbGF5VXJsTGlzdC5maWx0ZXIoaXQ9Pml0IT09KFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgbmFtZUxpc3QgPSBleHRyYS5uYW1lTGlzdDtcXFxcbiAgICAgICAgICAgICAgICBuYW1lTGlzdC51bnNoaWZ0KHN0cik7XFxcXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgZXh0cmEubmFtZUxpc3Q9dW5pcXVlMihuYW1lTGlzdCk7XFxcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSB1bmlxdWUyKGV4dHJhLnBsYXlVcmxMaXN0KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICBleHRyYSA9IHt9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWI/UGFyc2VTLmRlZmF1bHRQYXJzZVdlYigoUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwsdGltZW91dCxleHRyYSk6KFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsO1xcXFxuICAgIH0gZWxzZSBpZih0eXBlb2Yoc3RyKT09PSdzdHJpbmcnJiZzdHIubGVuZ3RoPjEmJih0eXBlb2YgUGFyc2VTW3N0cl09PSd1bmRlZmluZWQnfHwhUGFyc2VTW3N0cl0pJiYhL15odHRwLy50ZXN0KHN0cikpe1xcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+36L+b6KGM5pat5o+S6YWN572uLOaOqOiNkOaLieWPlumBk+mVv+eyvumAiSFcXFxcXFxcXG7mo4DmtYvliLDml6DmlYjnmoTop6PmnpDphY3nva46JytzdHI7XFxcXG4gICAgfWVsc2Uge1xcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZShzdHIgKyB2aXBVcmwsdGltZW91dCk7XFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG52YXIgcGxheVBhcnNlID0ge1xcXFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCwgTGFiZWwpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoanVybCkubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBqc1VybCA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpLmNqO1xcXFxuICAgICAgICAgICAgdmFyIExhYmVsID0gaztcXFxcbiAgICAgICAgICAgIHZhciBmYSA9IFsnbGV0dicsICdwcHR2JywgJ3FxJywgJ3lvdWt1JywgJ3FpeWknLCAnaXFpeWknLCAnbWd0dicsICdiaWxpYmlsaScsICdzb2h1JywgJ21pZ3UnLCAnbTE5MDUnLCAndmlwJ107XFxcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxcXG4gICAgICAgICAgICBldmFsKGh0bWwucmVwbGFjZSgvcGxheWVyXy4qPz17LywgJ3BkYXRhPXsnKSk7XFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKGpzVXJsKSk7XFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSkge1xcXFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IGJhc2U2NERlY29kZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gdW5lc2NhcGUocGRhdGEudXJsKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChmYS5pbmNsdWRlcyhwZGF0YS5mcm9tKSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocGRhdGEudXJsKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBkYXRhLnVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIExhYmVsKVxcXFxuICAgIH1cXFxcbn07XFxcXG5mdW5jdGlvbiBtelBvcHVwKCkge1xcXFxuICAgIGlmIChnZXRWYXIoXFxcXFxcXCJpamstdHhcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCIxXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgc2V0SXRlbShcXFxcXFxcInRpeGluZ1xcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIilcXFxcbiAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJpamstdHhcXFxcXFxcIilcXFxcbiAgICB9XFxcXG4gICAgaWYgKGdldEl0ZW0oXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5YWN6LSj5aOw5piOJyxcXFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKznqIvluo/kuI3mj5Dkvpvop4bpopHop6PmnpDmnI3liqFcXFxcXFxcXG7miYDmnInlhoXlrrnlnYfku47nlKjmiLfliIbkuqvkuK3mlLbpm4ZcXFxcXFxcXG7ku4XkvpvmtYvor5XlkozlrabkuaDkuqTmtYFcXFxcXFxcXG5cXFxcXFxcXG7noa7lrprljbPorqTlj6/vvIzkuI3lho3mj5DphpInLFxcXFxuICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXFxcXFwiaWprLXR4XFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/ngrnlh7vkuobnoa7orqRcXFxcXFxcIlxcXFxuXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn1cXFxcbmlmICghZ2V0VmFyKFxcXFxcXFwidGl4aW5nXFxcXFxcXCIpKSB7XFxcXG4gICAgbXpQb3B1cCgpO1xcXFxuICAgIHB1dFZhcigndGl4aW5nJywnb2snKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gc2F2ZUJ1dHRvbihjb250ZW50LG5hbWUpIHtcXFxcbiAgICBuYW1lID0gbmFtZXx8Jyc7XFxcXG4gICAgdmFyIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIXimIXimIUnKTtcXFxcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDIpIHtcXFxcbiAgICAgICAgdmFyIF9kdCA9IHBhcnNlUGFzdGUoZGF0YVswXSk7XFxcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9PSAnZXJyb3I6JyA/IF9kdCA6ICcnO1xcXFxuICAgIH1cXFxcbiAgICBkYXRhID0gY29udGVudC5zcGxpdCgn4piFJyk7XFxcXG4gICAgdmFyIHR5cGUgPSBkYXRhWzBdO1xcXFxuICAgIHZhciBhcnJMaXN0ID0gW107XFxcXG4gICAgdmFyIG9iakNvZGUgPSB7fTtcXFxcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAyICYmIGRhdGFbMF0gIT09ICfnm7Tpk74nKSB7XFxcXG4gICAgICAgIHZhciBvYmpLZXkgPSBkYXRhWzFdO1xcXFxuICAgICAgICB2YXIgb2JqVmFsdWUgPSBkYXRhWzJdO1xcXFxuICAgICAgICBpZiAodHlwZSA9PT0gJ015UGFyc2VTJykge1xcXFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBiYXNlNjREZWNvZGUob2JqVmFsdWUpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChvYmpWYWx1ZS5zcGxpdCgnZnVuY3Rpb24nKS5sZW5ndGggPiAxKSB7XFxcXG4gICAgICAgICAgICBldmFsKCdvYmpWYWx1ZT0nICsgb2JqVmFsdWUpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDAsIG9iaktleSk7IC8v5re75Yqg6aG555uu6Z2e5Yig6ZmkXFxcXG4gICAgICAgIG9iakNvZGVbb2JqS2V5XSA9IG9ialZhbHVlO1xcXFxuXFxcXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAn55u06ZO+Jykge1xcXFxuICAgICAgICBhcnJMaXN0ID0gZGF0YTtcXFxcbiAgICAgICAgYXJyTGlzdC5zcGxpY2UoMCwgMSk7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgYXJyTGlzdCA9IG51bGw7XFxcXG4gICAgfVxcXFxuICAgIGlmIChhcnJMaXN0ICE9IG51bGwpIHtcXFxcbiAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXFxcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcXFxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGlmKG5hbWUpey8v5Yig6Zmk5ZCN56ew5YiX6KGo5ZKM5Luj56CBXFxcXG4gICAgICAgICAgICBqc29uLnRpdGxlLnJlbW92ZShuYW1lKTtcXFxcbiAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGFyckxpc3QgPSBhcnJMaXN0LmNvbmNhdChqc29uLnRpdGxlKTtcXFxcbiAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChhcnJMaXN0KSk7XFxcXG4gICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb2JqQ29kZSk7XFxcXG4gICAgICAgIGlmICh0eXBlID09PSAn5rWL6K+VJykge1xcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICBpZiAodHlwZW9mIFBhcnNlU1tkYXRhWzFdXSA9PSBcXFxcXFxcImZ1bmN0aW9uXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTW2RhdGFbMV1dKGRhdGFbMl0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYihQYXJzZVNbZGF0YVsxXV0gKyBkYXRhWzJdKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+W3suS/neWtmOWGheWuuVxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/ml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaJcXFxcXFxcIlxcXFxuICAgIH1cXFxcbn1cXFxcbi8vIOS7peS4i+S7o+eggeWNg+S4h+S4jeimgeaUvuWHuuadpeWQpuWImeaKpemUmVxcXFxuaWYgKGdldEl0ZW0oJ3VwZGF0ZURhdGUnKSAhPSB1cGRhdGVEYXRlKSB7XFxcXG4vLyBpZiAodHJ1ZSkge1xcXFxuICAgIC8vIOaKimZ1bmN0aW9u5Y+Y5oiQc3RyaW5nXFxcXG4gICAgbGV0IGZ1bmN0aW9uQ29kZSA9IHNhdmVCdXR0b24gKyAnOycrbXpQb3B1cDtcXFxcbiAgICAvLyB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLCBmZXRjaChfbXlTZXQuY2tMaW5rICsgJ3Bsc2NQYXJzZS5odG1sJykpO1xcXFxuICAgIHNldEl0ZW0oJ215RnVuY3Rpb24nLCBmdW5jdGlvbkNvZGUpO1xcXFxuICAgIHNldEl0ZW0oJ3VwZGF0ZURhdGUnLCB1cGRhdGVEYXRlKTtcXFxcbn1cXFxcbnZhciBiakl0ZW0gPSB7XFxcXG4gICAgaGZQbHVnaW46IGZ1bmN0aW9uKHBhcnNlUm91dGUpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChmaWxlRXhpc3QoaykpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2pjYWNoZSA9IGdldFZhcignY2pDYWNoZScpO1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2goaykpO1xcXFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MuY2ogPSBjamNhY2hlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG9sZFJvdXRlID0gZ2V0VmFyKCdvbGRDb25maWcnKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgb2xkQ29uZmlnID0ganNvbi5zZXR0aW5ncztcXFxcbiAgICAgICAgICAgICAgICBvbGRDb25maWcuY2ogPSBjamNhY2hlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgJC5zdHJpbmdpZnkob2xkQ29uZmlnKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3miJDlip8nO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZyA6KaB5YWI5ouJ5Y+W5YiX6KGoJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBwYXJzZVJvdXRlKVxcXFxuICAgIH0sXFxcXG4gICAgcHVsbENvZGU6IGZ1bmN0aW9uKGspIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBwdWxsTW9kZSA9IGtbMF07XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGtbMV07XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VGaWxlID0gZmV0Y2gocGFyc2VSb3V0ZSk7XFxcXG4gICAgICAgICAgICBpZiAoIXBhcnNlRmlsZSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpO1xcXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzID0gIXNldHRpbmdzID8ge30gOiBKU09OLnBhcnNlKHNldHRpbmdzKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHt9O1xcXFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MgPSBzZXR0aW5ncztcXFxcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gW107XFxcXG4gICAgICAgICAgICAgICAganNvbi5jb2RlcyA9IHt9O1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIHBhcnNlRmlsZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VUaXRsZSA9IFtdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlQ29kZT17fTtcXFxcbiAgICAgICAgICAgIHZhciBjakxpbmsgPSBnZXRWYXIoJ3BsdWdpbkxpbmsnKTtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgaWYoL0BiYXNlNjQ6XFxcXFxcXFwvXFxcXFxcXFwvLy50ZXN0KGNqTGluaykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZShjakxpbmsuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC/mj5Lku7blkI0vLnRlc3QoY2pMaW5rKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsTGluayA9IGNqTGluay5zcGxpdCgn5o+S5Lu25ZCNJylbMF0ucmVwbGFjZSgvW1xcXFxcXFxcc10vZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn6Kej5p6Q5LqR5Ymq5YiH5p2/OicrcmVhbExpbmspO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgeVBhc3RlID0gcGFyc2VQYXN0ZShyZWFsTGluayk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFxcXFxcL1xcXFxcXFxcLy8udGVzdCh5UGFzdGUpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoeVBhc3RlLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTPT09J3VuZGVmaW5lZCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Liq6bih5q+b5o+S5Lu2LOmHjOmdoui/nlBhcnNlU+WvueixoemDveayoeaciSEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+m4oeavm+aPkuS7tuaJp+ihjOaKpemUmTpcXFxcXFxcXG4nK2UubWVzc2FnZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6IO96K+G5Yir5LqR5Ymq5YiH5p2/5Lit55qE5YaF5a65OlxcXFxcXFxcbicreVBhc3RlLnN1YnN0cmluZygwLDEwMCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNqTGluayA9PT0gJ1HnpZ4nKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGZldGNoKCdoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dCcpLnNwbGl0KCdcXFxcXFxcXG4nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIGppZXhpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJyYmJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy8gfWVsc2UgaWYoL14jW2EtekEtWjAtOV17MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2NXFxcXG4gICAgICAgICAgICAgICAgZWxzZSBpZigvXiNbXFxcXFxcXFxTXXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY3ku7vmhI/pnZ7nqbrlrZfnrKbkuLJcXFxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Rhc2tDYWxsLCB0YXNrUnVuLHRhc2tSZXF9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Rhc2tDYWxsP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJp+ihjOS7u+WKoeS7k+W6k+iOt+WPluaWreW/teaPkuS7tuemj+WIqeWPo+S7pCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGFza0NhbGwoMTcsJ0RuRnVsaScsW2NqTGlua10pO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldCA9IEpTT04ucGFyc2UocmVzdWx0LnJlc3VsdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cocmV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldC5vcHQ9PT0nZXJyb3InKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytyZXQubXNnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd1cmwnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGZldGNoKHJldC5yZXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBodG1sLmluY2x1ZGVzKCdodHRwJyk/IGh0bWw6YmFzZTY0RGVjb2RlKGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGFyci5tYXRjaCgvW1xcXFxcXFxcU10qPywuKj9bXFxcXFxcXFxzXS9nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGppZXhpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzFdLnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSdqeCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC9bXFxcXFxcXFxTXSo/LGh0dHBbXFxcXFxcXFxTXS8udGVzdChyZXQucmV0KSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHJldC5yZXQuc3BsaXQoJywnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCcsJylbMV0uc3BsaXQoJ1xcXFxcXFxcbicpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL15odHRwLy50ZXN0KHJldC5yZXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnXFxcXFxcXFxuJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquefpeeahOemj+WIqTpcXFxcXFxcXG4nK3JldC5yZXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd2aXBKeCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPS9mdW5jdGlvbi8udGVzdChjb2RlKT9ldmFsKGNvZGUpOmNvZGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S7k+W6k+mdnuacgOaWsOeJiOaIluiAheemj+WIqeekvuWKn+iDveW8gOWPkeS4rSdcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGNqTGluaz09PSfmlq3mj5InKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL15oaWtlcjpcXFxcXFxcXC9cXFxcXFxcXC98XmZpbGU6XFxcXFxcXFwvXFxcXFxcXFwvfF5odHRwfF5cXFxcXFxcXC9zdG9yYWdlXFxcXFxcXFwvfF5cXFxcXFxcXC9zZGNhcmRcXFxcXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9eXFxcXFxcXFwvc3RvcmFnZVxcXFxcXFxcL3xeXFxcXFxcXFwvc2RjYXJkXFxcXFxcXFwvLy50ZXN0KGNqTGluaykpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaW5rID0gJ2ZpbGU6Ly8nK2NqTGluaztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNqTGluaykpO1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blj6Pku6TmnInor68nXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIGp4SnVkZ2UgPSB0eXBlb2YgUGFyc2VTID09ICdvYmplY3QnO1xcXFxuICAgICAgICAgICAgdmFyIGxiSnVkZ2UgPSB0eXBlb2YocGFyc2VUaXRsZSkgPT0gJ29iamVjdCc7XFxcXG4gICAgICAgICAgICBpZiAoanhKdWRnZSB8fCBsYkp1ZGdlKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8gaWYgKHB1bGxNb2RlID09PSAn5YiX6KGoJykge1xcXFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWxiSnVkZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHBhcnNlVGl0bGUgPSBPYmplY3Qua2V5cyhQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgIC8vICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcXFxuICAgICAgICAgICAgICAgIC8vIH1cXFxcbiAgICAgICAgICAgICAgICAvLyDkuI3nrqHmi4nlj5bku6PnoIHov5jmmK/liJfooajpg73opoHmiorliJfooajmi4nkuoZcXFxcbiAgICAgICAgICAgICAgICBpZiAoIWxiSnVkZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhwYXJzZVRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdmFyIHNjT2JqZWN0ID0gW1xcXFxcXFwiQ2l0eUlQXFxcXFxcXCIsIFxcXFxcXFwicGNVQVxcXFxcXFwiLCBcXFxcXFxcImNhY2hlTTN1OFxcXFxcXFwiLCBcXFxcXFxcImRlZmF1bHRQYXJzZVxcXFxcXFwiLFxcXFxcXFwiZGVmYXVsdFBhcnNlV2ViXFxcXFxcXCIsXFxcXFxcXCJtYW9zc1xcXFxcXFwiLCBcXFxcXFxcIkxMUVxcXFxcXFwiLFxcXFxcXFwicGFyc2VMY1xcXFxcXFwiXTtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gcGFyc2VUaXRsZT9wYXJzZVRpdGxlLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKGl0KSk6W107XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXFxcblxcXFxuICAgICAgICAgICAgICAgIGlmIChwdWxsTW9kZSA9PT0gJ+S7o+eggScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbFBhcnNlUyA9PSAnb2JqZWN0Jykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBzY09iamVjdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvcmlnaW5hbFBhcnNlU1tzY09iamVjdFtpXV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbFBhcnNlUyA9b3JpZ2luYWxQYXJzZVMuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaXQpWzBdKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9yaWdpbmFsUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihQYXJzZVMpPT1cXFxcXFxcInVuZGVmaW5lZFxcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ayoeacieS7o+egge+8jOS4jeWPr+aLieWPllxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy92YXIgbmV3RmlsZSA9IHRvb2xzLnRvSlNPTihqc29uKTsvL+iHquWumuS5iXN0cmluZ2lmeeWHveaVsO+8jOW4puaciei9rOS5ieWtl+esplxcXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPlicgKyBwdWxsTW9kZSArICfmiJDlip8nO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq6I635Y+W5Yiw5a+56LGhJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgW2ssIF9teVNldC5wYXJzZVJvdXRlXSlcXFxcbiAgICB9LFxcXFxuICAgIHB1bGxTY3JpcHQ6IGZ1bmN0aW9uKGNqLCB4NSkge1xcXFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGNqRnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/JztcXFxcbiAgICAgICAgICAgIHZhciB4NUZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/JztcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzBdLCBjakZpbGUpO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzFdLCB4NUZpbGUpO1xcXFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE9sZFYnKTtcXFxcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bmiJDlip8nO1xcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrmiJDlip/ojrflj5blhoXlrrknO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBbY2osIHg1XSlcXFxcbiAgICB9LFxcXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOnJlZFxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuWIoCDpmaQnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojRjU3NDc0XFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLpmpDol498fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+6ZqQIOiXjycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGRjgwMDBcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuS/ruaUuXx8JyArIGJpYW5qaSArICdcXFxcXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXFxcXFwiPue9riDpobYnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLnp7vliqh8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+56e7IOWKqCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIue9ruW6lXx8JyArIGJpYW5qaSArIGxiTGVuZ3RoICsgJ1xcXFxcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDRCNDMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5Zyw5p2/5YiG5LqrJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA0QjQzMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5LqR5YiG5LqrfHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuS6keadv+WIhuS6qyddLFxcXFxuICAgICAgICAgICAgY29sOiAnMicsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcXFxuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gbmV3SW5wdXRbMF07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBuZXdJbnB1dFsxXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG51bTIgPSBuZXdJbnB1dFszXTtcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuWIoOmZpFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCLljbPlsIbliKDpmaQ6IFxcXFxcXFwiICsgbmFtZSkuY29uZmlybSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCLjgJfliKDpmaRcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIumakOiXj1xcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCLjgJfpmpDol49cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WPr+iDveaYr+S4que9keWdgCwg5oKo5Y+v6YCJ5oup5Yig6ZmkXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi5L+u5pS5XFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbkNvZGUgPSBuYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5OYW1lID0gXFxcXFxcXCLov5nmmK/lkI3np7BcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkNvZGUgPSBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5hbWUgPSBuYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIikucnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGtbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcXFxcXCJzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO2JhY2soKTtcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLlu7rorq7mjInpu5jorqTnmoTku6PnoIHmoLzlvI/kv67mlLnlk6ZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dFZhcignaW5wdXRfZWRpdCcsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXCJ0ZXh0YXJlYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFxcXFxcIi0xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAn5L+u5pS54piFJyArIG5hbWUgKyAn4piFJyArIGNvZGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj7moLzlvI/kuLrvvJrmk43kvZznsbvlnovimIXmoIfpopjimIVmdW5jdGlvbigpe+iHquWumuS5ieWGheWuuX08YnI+6K+35Yu/5aGr5YWl5YW25LuW5qC85byPJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzYXZlQnV0dG9uLG5hbWUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLlcXFxcXFxcXG7or7foh6rooYzmo4DmtYvop6PmnpDmmK/lkKbmnInooqvopobnm5bnmoTlhoXlrrknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYodHlwZW9mKGNvZGUpPT09J3N0cmluZycmJmNvZGUubGVuZ3RoPjIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBjb2RlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbixuYW1lKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj7kv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuTmFtZSwgbkNvZGVdKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcXFxuICAgICAgICAgICAgICAgICAgICAvKn0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WPquaciee9keWdgOaIluiAheagh+mimCwg5LiN5pSv5oyB5L+u5pS5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSovXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLnva7pobZcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIue9ruW6lVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtMiwgMCwgaXRlbVswXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLnp7vliqhcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignYmlhbmppJywgJ+enu+WKqCMnICsgayk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLliIbkuqtcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuS6keWIhuS6q1xcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gdHlwZW9mIGpzb24uY29kZXNbbmFtZV0gPT0gJ2Z1bmN0aW9uJyA/ICQuc3RyaW5naWZ5KGpzb24uY29kZXNbbmFtZV0pIDoganNvbi5jb2Rlc1tuYW1lXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSAn55u06ZO+4piFJyArIGpzb24udGl0bGVbbnVtXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICfkupHliIbkuqsnICYmIHBhcnNlVGV4dC5zdWJzdHIoMCwgOCkgPT0gJ015UGFyc2VTJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9IHNoYXJlUGFzdGUocGFyc2VUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcXFxcXG7imIXimIXimIVcXFxcXFxcXG4nICsgJ015UGFyc2VT77yaJyArIG5hbWUgOiAndG9hc3Q6Ly/liIbkuqvlpLHotKUhIeS6keWJqui0tOadv+WPr+iDveaMguS6hic7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXFxcbiAgICAgICAgICAgICAgICB9IC8vc3dpdGNo55qEXFxcXG4gICAgICAgICAgICB9KSAvL1N0cmluZ+eahFxcXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcXFxuICAgIH0sXFxcXG4gICAgeGpQYXJzZTogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHJldHVybiAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcXFxcXCIpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFxcXFxcInNhdmVCdXR0b24oaW5wdXQpO2JhY2soKTtjbGVhclZhcignaW5wdXRfYWRkJylcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcXFxcXCJpbnB1dF9hZGRcXFxcXFxcIiwgaW5wdXQpJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXCJ0ZXh0YXJlYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXFxcXFwiLTFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ2lucHV0X2FkZCcpLFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj7mjInmj4/ov7Dor4nmoLzlvI/ovpPlhaUsIOivt+WLv+Whq+WFpeWFtuS7luagvOW8jzxicj7mnKzlnLDlj6Pku6Q6IOaTjeS9nOexu+Wei+KYheWQjeensOKYheS7o+eggTxicj7kupHlj6Pku6Q6IOmTvuaOpeKYheKYheKYheWQjeensDsg57qv572R5Z2AOiDnm7Tpk77imIV1cmwx4piFdXJsMicsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj7kv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ25vTG9hZGluZycpLmxhenlSdWxlKChzYXZlQnV0dG9uKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfYWRkJykpO1xcXFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICB9KVxcXFxuICAgIH0sXFxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgQSA9IGtbMF0uc3BsaXQoJyMnKVsxXTtcXFxcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcXFxuICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UoQiwgMCwgaXRlbVswXSk7IC8vIDE6IOWQjOS4iu+8jDI6IDDooajnpLrkuI3liKDpmaTvvIwzOiDmt7vliqDlr7nosaFcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXFxcbiAgICB9LFxcXFxuICAgIHBsc2NQYXJzZTogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5Yig6Zmk6Kej5p6QJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnYXV0byYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJyxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBzZXRQYXJzZSgpIHtcXFxcbiAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLnNldFBhcnNlKCk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6LCD55So6Lev55SxXFxcIixcXFwicGF0aFxcXCI6XFxcIlJvdXRlXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuY29uc3QgZCA9IFtdO1xcXFxuY29uc3QgZGF0YSA9IHt9O1xcXFxuXFxcXG5kYXRhLm9sZENvbmZpZyA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIjtcXFxcbmRhdGEuY2pSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFwiO1xcXFxuZGF0YS54NVJvdXRlID0gXFxcXFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sXFxcXFxcXCI7XFxcXG5cXFxcblxcXFxuZGF0YS5qeExhenkgPSBcXFxcXFxcImV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaCgnXFxcXFxcXCIgKyBkYXRhLm9sZENvbmZpZyArIFxcXFxcXFwiJykpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KVxcXFxcXFwiO1xcXFxuXFxcXG5kYXRhLnN6UGFyc2UgPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCI7XFxcXG5cXFxcbmRhdGEuc2V0UGFyc2UgPSBmdW5jdGlvbigpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBkZXNjOiAnNzk1JyxcXFxcbiAgICAgICAgdXJsOiB0aGlzLng1Um91dGUsXFxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgfSk7XFxcXG4gICAgdmFyIG9sZFYgPSBnZXRWYXIoJ2p4T2xkVicpO1xcXFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXFxcbiAgICB2YXIgdmVyc2lvblRpcHMgPSBwYXJzZUZsb2F0KG5ld1YpID4gcGFyc2VGbG9hdChvbGRWKSA/ICfigJjigJjmnInmlrDniYjmnKw6IHYnICsgbmV3ViA6ICfigJjigJgnO1xcXFxuICAgIHZhciBwaWNzID0gW1xcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgyMDcpLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTQuc2luYWltZy5jbi9sYXJnZS85YmQ5YjE2N2d5MWZ3cmg1eG9sdGRqMjFoYzB1MHRheC5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvZDdlNjBiOTkwNzQyMDkzZC5qcGVnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvOTFhZDZkNjUzOGJmODY4OS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMy5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZ2pkazc0b2ozMWhjMHUwZHFuLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMzIwKS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcXFxuICAgIF07XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxcXG4gICAgICAgIHRpdGxlOiB2ZXJzaW9uVGlwcyArICfigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXCI+PGJyPuOAgOOAgOeCueWHu+S4iuaWueWktOWDj+i/m+WFpee8lui+kTxicj7ngrnmraTov5vlhaXorrrlnZvluJblrZDliJfooagnLFxcXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxcXG4gICAgICAgIHVybDogJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3VzZXIvMTk1OCcsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMSdcXFxcbiAgICB9KTtcXFxcbiAgc2V0UmVzdWx0KGQpO1xcXFxufVxcXFxuXFxcXG5zd2l0Y2ggKGdldFBhcmFtKFxcXFxcXFwidHlwZVxcXFxcXFwiKSkge1xcXFxuICAgIGNhc2UgXFxcXFxcXCLorr7nva5cXFxcXFxcIjpcXFxcbiAgICAgICAgZGF0YS5zZXRQYXJzZSgpO1xcXFxuICAgICAgICAvL3NldFJlc3VsdChkKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSBcXFxcXFxcIue8lui+kVxcXFxcXFwiOlxcXFxuICAgICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKS5qeExpc3QoKTtcXFxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICBicmVhaztcXFxcblxcXFx0Y2FzZSBcXFxcXFxcIuS4u+mimFxcXFxcXFwiOlxcXFxuXFxcXHQgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90aGVtZT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikudGhlbWVJbml0KCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuXFxcXHRjYXNlIFxcXFxcXFwi6Kej5p6QXFxcXFxcXCI6XFxcXG5cXFxcdCAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiKS5qeE1hbmFnZSgpO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBkZWZhdWx0OlxcXFxuICAgICAgICAkLmV4cG9ydHMgPSBkYXRhO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLop6PmnpDpobnkuLvnlYzpnaJcXFwiLFxcXCJwYXRoXFxcIjpcXFwianhJdGVtXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBfMHhvZFI9J2pzamlhbWkuY29tLnY2JyxfMHg0ODU1PVtfMHhvZFIsJ3c3Rkx3N2tpSlE9PScsJ0E4S3ZKQy9EaVE9PScsJ1I4S3R3NUhEcThLU1FjT08nLCd3NS9DZ1Z2Q3JpOUZ3cmw0WEJSV3c2ckNpZz09JywnSVRUQ21jT3d3cDNDcUE9PScsJ0dRaEdZOEtKJywnR01LMVVzSy9WQT09Jywnd3BqQ3ZpUkgnLCdIQU1RU3c0PScsJ0FzS05IRHZEcWc9PScsJ1pjS1J3b1hDa3c9PScsJ3dwL0NtdzUrd29FPScsJ0lNTy9QQW5Eamc9PScsJ3dveG53NUhEbUNZPScsJ3dvTEN0UUJGd29RPScsJ2Q4T29OVy9DbHc9PScsJ2VSSENvU0FpJywnSmNPbWJjT29BTU9zJywnSjhLOHc1VERreHd5QWc9PScsJ3c3WXpBU009Jywnd3FjSndwckNqRlU9JywnZlFMQ3ZTc0onLCdPTU9Cd3B3Vnc2bz0nLCd3NkREcmNPVkRjT3UnLCdOc0tFRlRURHJnPT0nLCdWTU92UDhLN0tnPT0nLCdPQTVVUXNLcicsJ1A4SzJ3NDNEa1E9PScsJ0kzUERtOEtBJywnR2NLUk5oWER2Zz09JywndzRQQ2wyNXF3Nk09JywnUHNPNWI4T0xHQT09JywnSzJyRHU4S05hakp1Y2c9PScsJ0VNS3B3NVhDc3NPWXdvL0RrY09OJywndzZrMndwWUknLCdOVFhDaGNPUndwOD0nLCdlc09YQU1LYkx3PT0nLCd3cmhzRlYxcCcsJ3dwVEN0d1JXd3A5Q3dxUERqUT09JywnS25IRGdzS2RmZz09JywnVTBYRGsxeHonLCdSc09mUHd0MndyTERsZz09Jywnd3JvU3dyL0RxR2JDcXNPbFVDdkRrTUtadzZiRGlHc3AnLCdFOEtIZU1LamF3PT0nLCdYY09KdzRzK3dybkRqbURDbjhLbVQ4T1N3NFRDaFJYQ3VNT3p3cjNDbHNLWkhjSzN3NlhEaDhPME1nPT0nLCc1b21CNVkrNjVMaXA1bzJBNUx1eDVaSys1NzJFNmFLNzZJZVE1cDZJJywnSjJQRGtNS2NXVFJvYUJzQUp5MVknLCc1cE8vNUx5dTVveTI1YjZxJywnNW91NjVZMkE1THFsNTZDNycsJzU3KzA2TDZoNktXVTVweWUnLCdLeDk1V01LZUFRPT0nLCc1b09rNWFXTDVvNmc1THE5NkxlQzVieXo1THFsNmJ1WjZLNnYnLCdIeWs5ZlR2RGtnbkR0SDlwJywnNkwyRTVZYWs1cDJ2NXBXYTVveXc1THF4NVo2ZzVaMnInLCdBelVuVGdYRGdrM0N0MkZ1VnNPalNGOW9WaFBDbjJIQ3JqRnFERE5CdzRjPScsJzRvT3Q0b0dLNG9HeTRvS1Z3cEhEcTJ0R1ZNS2t3cHBXU0JqRHA4T2xMT2VaaytXOXV1YU5tZWVucmc9PScsJzVMeWM1NWEyNTVpZzVZV1M1WWlUNklDUDZaNkM1NWlJNWJ5RjZLV2w1NWFRNks2azVaeWg2TFMyNVk2M0RPV25xT2FmcGVtVWdlbWh2T1dJbitXOXB1aXR0K1dmaytTNXBPaWxyZWl0dHVhQXB3PT0nLCd3cDNEb3NLcXc0dkNoOE9lYU1LK1dsckNzM1VnUjhLaVYzM0RqMXBNdzd3eXc1a2FRTU90U3dOQnc0RnV3N1FRVE1LcScsJ0ljT3dVc080S3c9PScsJ3dwdkNpREZkd29rPScsJ3c0WEN0MGpDc0FnPScsJ3c0WERxVTdDcmNPdScsJ3c0ckNzMHJDaUFNPScsJ0lNS21QVUhDakE9PScsJ0ZjS1V3NWZDb3NPcicsJ0N5WTNVQTg9JywnWTJmRHVSbEInLCdIRzNEdDhPZGZ3PT0nLCdXOE9nTDM3RHB3PT0nLCdUY08xSHc1aScsJ3dwSkZ3NFREcGc9PScsJ3c3VXF3b3NGWjhLbXc3L0RsMjRWJywnV2h0YXc1b2t3NjNEaVdGbndxVENzY090UHk1UHdvVW93NnJDZ3dWa3dxc2NOSFJFSWNPMHdxTENzOEsrVXNPaHc2N0NzMEREaHNPWndwZkRzbHdZRWd6RHZjT2FVU3ZDcE1PWFBGZkNwc093QThLVndyUjB3NnhKdzVMRG5GSERtY0s1d3I3Q2dzS3B3N1F1d3FiQ21RUTh3ckhEdlhOMFczN0R0TUtmR2NPbUpzT2o0YmE0NG9HMndvVkl3cDdDbG5jbEtRMEhIVFZrSk1PR1BjT1Z3cW5EbkFqQ29sVWJ3NmJEaU1PeicsJ3c1SlVSOE8xY3c9PScsJ3c0dGJ3NkZFd3FKdFgwUT0nLCdLVmZEdThLa1F3PT0nLCd3NVE5d3BRV0d3PT0nLCdRaE5EdzR3endvWENpVHQyd3F3PScsJzVvcWU1WXlqNVltTTZLR0gnLCd3N2haZnNPK1JGMXh3cXM9Jywnd3ExMXc1L0Ryd0E9JywnSk1LQ1dBOXlOTUtqTkE9PScsJ1VVUERwV1ptdzZ2RG4xWnF3N0E9JywndzRBeXdwazBHZz09JywnY2NPa0RHSENnZz09JywnWE1PT0hndz0nLCd3NXcrd3JuRG96dz0nLCd3NTl2dzZSbXdyND0nLCd3b0FmRVdvPScsJ0dzT0p3cmx1dzRVPScsJ3dvVEN2UWRmd29aQXdxbkRsdz09JywnVE1PR1BCbEdVY0szWXl6RHZnPT0nLCdYdVd1cithVWl1aTJqT1crdFdIRHAzN0N0UmcxdzdOY084SzN3cUJxd29IQ2hnSmpReHJDdnNPbVo4S25SWDhNRjhPSFlzT3hVQT09JywnSjhLQUtFYz0nLCdFc0tVdzdIRHBnZz0nLCdYTU8yRUduQ2hBPT0nLCdTOE9nTjEzRGpRPT0nLCd3b1RDclQ1M3dwOD0nLCd3cWZDclJOMXdvc3B3NXhDQzBrPScsJ3c2TENqVVhDc3hFPScsJ3dvZFFQVUp2JywnTndEQ3BNT2J3cXc9JywnQnNPbXdxaE93NzdDaHNPeCcsJ3dvQUxFSEZJJywnT2NPcWZzTzVMY09rRnl6Q3VYWENpY0tTdzdaOFBqcGdQWFhEaW5aMnc3akNyTUtsT1NUQ2s4S1Z3cmdhUmpURG9NS2l3N0lZNGJlRjRvT2knLCc0b0dONG9PQjRvSzk0b0ttUVNJS3c0N0RwY0tVR01PQ0NjS2tmOEtld3JNT3dwckRnTUtPQXNPeXc0NUxDMjhqd3JERHBCUEN1TU9NT2NPOHdxY1FlbDQ9Jywnd29FM0U4TzR3N0xDcWc9PScsJ1RNT1JFOEtwRHc9PScsJ3dwY3dHTU9WdzdjPScsJ0RRSnFWTUtBJywnR3hQQ3NNT2R3cUU9JywndzRwMmRjT0Fjdz09JywnSDhPU3dyMEJ3NDg9JywnVzNiRG5pMWEnLCd3N2haWWNPNicsJ3c2SXZ3cDdEZ2pjPScsJ2Y4T1JNVmZEaUE9PScsJ3dxYkNvd1Ird3AwPScsJ3dvc0Z3b25DbmtjPScsJ2NjT0JKbTNDaFE9PScsJ0VzS0VFa1BDaFE9PScsJzRvT280b0d5NG9HNzRvQ2JFY09CQjhPZXc2czN3cG5DdnNLa3dySERrUnJDczNNVXc2QURjOE9hdzV0VkZzT0t3cmNHd3I5Rnc1QT0nLCdHc0tXSVdEQ29RPT0nLCd3cnRuS1dKTScsJ2ZjT0FGOEtjRkE9PScsJ1pNT3VBUWhoJywnNTZlSDVZaVBiUT09JywnNTZXOTVZdXVTR3M9JywndzRZQXc1TWJ3NDdDb0E9PScsJ2VCL0NpU3NKSEE9PScsJ3Vqc0FTT2pUT2luYXhabWlyei5jb21LLkx2Nj09J107KGZ1bmN0aW9uKF8weDMxNTJkYSxfMHgyZjcxZGYsXzB4MjI5Mzk2KXt2YXIgXzB4NDEwMzk5PWZ1bmN0aW9uKF8weDRhODIzOCxfMHgxNDY3YTUsXzB4ZTA0MjA1LF8weDE3Y2ZkNyxfMHgzODI0MTQpe18weDE0NjdhNT1fMHgxNDY3YTU+PjB4OCxfMHgzODI0MTQ9J3BvJzt2YXIgXzB4OTZkMjc0PSdzaGlmdCcsXzB4NzE5MzQyPSdwdXNoJztpZihfMHgxNDY3YTU8XzB4NGE4MjM4KXt3aGlsZSgtLV8weDRhODIzOCl7XzB4MTdjZmQ3PV8weDMxNTJkYVtfMHg5NmQyNzRdKCk7aWYoXzB4MTQ2N2E1PT09XzB4NGE4MjM4KXtfMHgxNDY3YTU9XzB4MTdjZmQ3O18weGUwNDIwNT1fMHgzMTUyZGFbXzB4MzgyNDE0KydwJ10oKTt9ZWxzZSBpZihfMHgxNDY3YTUmJl8weGUwNDIwNVsncmVwbGFjZSddKC9bdUFTT1RPbnhacnpLTD1dL2csJycpPT09XzB4MTQ2N2E1KXtfMHgzMTUyZGFbXzB4NzE5MzQyXShfMHgxN2NmZDcpO319XzB4MzE1MmRhW18weDcxOTM0Ml0oXzB4MzE1MmRhW18weDk2ZDI3NF0oKSk7fXJldHVybiAweGFlOTExO307cmV0dXJuIF8weDQxMDM5OSgrK18weDJmNzFkZixfMHgyMjkzOTYpPj5fMHgyZjcxZGZeXzB4MjI5Mzk2O30oXzB4NDg1NSwweDE2YiwweDE2YjAwKSk7dmFyIF8weDRiNWE9ZnVuY3Rpb24oXzB4NGY1ZmFkLF8weDNlYWFmMyl7XzB4NGY1ZmFkPX5+JzB4J1snY29uY2F0J10oXzB4NGY1ZmFkKTt2YXIgXzB4MmI0NDRkPV8weDQ4NTVbXzB4NGY1ZmFkXTtpZihfMHg0YjVhWydaaUVlY28nXT09PXVuZGVmaW5lZCl7KGZ1bmN0aW9uKCl7dmFyIF8weDFhZWQwNT10eXBlb2Ygd2luZG93IT09J3VuZGVmaW5lZCc/d2luZG93OnR5cGVvZiBwcm9jZXNzPT09J29iamVjdCcmJnR5cGVvZiByZXF1aXJlPT09J2Z1bmN0aW9uJyYmdHlwZW9mIGdsb2JhbD09PSdvYmplY3QnP2dsb2JhbDp0aGlzO3ZhciBfMHgxMjYwY2Y9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztfMHgxYWVkMDVbJ2F0b2InXXx8KF8weDFhZWQwNVsnYXRvYiddPWZ1bmN0aW9uKF8weDE2Y2MxNCl7dmFyIF8weDU0ODgxZD1TdHJpbmcoXzB4MTZjYzE0KVsncmVwbGFjZSddKC89KyQvLCcnKTtmb3IodmFyIF8weDRhN2YxOT0weDAsXzB4MjQ1ZjE2LF8weDJhMjkyNSxfMHgxODNhM2M9MHgwLF8weDFmN2Q5Mz0nJztfMHgyYTI5MjU9XzB4NTQ4ODFkWydjaGFyQXQnXShfMHgxODNhM2MrKyk7fl8weDJhMjkyNSYmKF8weDI0NWYxNj1fMHg0YTdmMTklMHg0P18weDI0NWYxNioweDQwK18weDJhMjkyNTpfMHgyYTI5MjUsXzB4NGE3ZjE5KyslMHg0KT9fMHgxZjdkOTMrPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oMHhmZiZfMHgyNDVmMTY+PigtMHgyKl8weDRhN2YxOSYweDYpKToweDApe18weDJhMjkyNT1fMHgxMjYwY2ZbJ2luZGV4T2YnXShfMHgyYTI5MjUpO31yZXR1cm4gXzB4MWY3ZDkzO30pO30oKSk7dmFyIF8weDE1MTA3Zj1mdW5jdGlvbihfMHgzYTk3ZWEsXzB4M2VhYWYzKXt2YXIgXzB4MmQ0ZWVhPVtdLF8weDEzZDcwYj0weDAsXzB4MTBjMTJiLF8weDMzNjA0ZT0nJyxfMHgxNTdhNTU9Jyc7XzB4M2E5N2VhPWF0b2IoXzB4M2E5N2VhKTtmb3IodmFyIF8weDM1YWVjMz0weDAsXzB4MWZlMmVhPV8weDNhOTdlYVsnbGVuZ3RoJ107XzB4MzVhZWMzPF8weDFmZTJlYTtfMHgzNWFlYzMrKyl7XzB4MTU3YTU1Kz0nJScrKCcwMCcrXzB4M2E5N2VhWydjaGFyQ29kZUF0J10oXzB4MzVhZWMzKVsndG9TdHJpbmcnXSgweDEwKSlbJ3NsaWNlJ10oLTB4Mik7fV8weDNhOTdlYT1kZWNvZGVVUklDb21wb25lbnQoXzB4MTU3YTU1KTtmb3IodmFyIF8weDQzYTBhYz0weDA7XzB4NDNhMGFjPDB4MTAwO18weDQzYTBhYysrKXtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHg0M2EwYWM7fWZvcihfMHg0M2EwYWM9MHgwO18weDQzYTBhYzwweDEwMDtfMHg0M2EwYWMrKyl7XzB4MTNkNzBiPShfMHgxM2Q3MGIrXzB4MmQ0ZWVhW18weDQzYTBhY10rXzB4M2VhYWYzWydjaGFyQ29kZUF0J10oXzB4NDNhMGFjJV8weDNlYWFmM1snbGVuZ3RoJ10pKSUweDEwMDtfMHgxMGMxMmI9XzB4MmQ0ZWVhW18weDQzYTBhY107XzB4MmQ0ZWVhW18weDQzYTBhY109XzB4MmQ0ZWVhW18weDEzZDcwYl07XzB4MmQ0ZWVhW18weDEzZDcwYl09XzB4MTBjMTJiO31fMHg0M2EwYWM9MHgwO18weDEzZDcwYj0weDA7Zm9yKHZhciBfMHg4NTRhYjA9MHgwO18weDg1NGFiMDxfMHgzYTk3ZWFbJ2xlbmd0aCddO18weDg1NGFiMCsrKXtfMHg0M2EwYWM9KF8weDQzYTBhYysweDEpJTB4MTAwO18weDEzZDcwYj0oXzB4MTNkNzBiK18weDJkNGVlYVtfMHg0M2EwYWNdKSUweDEwMDtfMHgxMGMxMmI9XzB4MmQ0ZWVhW18weDQzYTBhY107XzB4MmQ0ZWVhW18weDQzYTBhY109XzB4MmQ0ZWVhW18weDEzZDcwYl07XzB4MmQ0ZWVhW18weDEzZDcwYl09XzB4MTBjMTJiO18weDMzNjA0ZSs9U3RyaW5nWydmcm9tQ2hhckNvZGUnXShfMHgzYTk3ZWFbJ2NoYXJDb2RlQXQnXShfMHg4NTRhYjApXl8weDJkNGVlYVsoXzB4MmQ0ZWVhW18weDQzYTBhY10rXzB4MmQ0ZWVhW18weDEzZDcwYl0pJTB4MTAwXSk7fXJldHVybiBfMHgzMzYwNGU7fTtfMHg0YjVhWydaTUZKbU0nXT1fMHgxNTEwN2Y7XzB4NGI1YVsnZ3h2WlNoJ109e307XzB4NGI1YVsnWmlFZWNvJ109ISFbXTt9dmFyIF8weDRjYmE5MT1fMHg0YjVhWydneHZaU2gnXVtfMHg0ZjVmYWRdO2lmKF8weDRjYmE5MT09PXVuZGVmaW5lZCl7aWYoXzB4NGI1YVsnSWJoVnRLJ109PT11bmRlZmluZWQpe18weDRiNWFbJ0liaFZ0SyddPSEhW107fV8weDJiNDQ0ZD1fMHg0YjVhWydaTUZKbU0nXShfMHgyYjQ0NGQsXzB4M2VhYWYzKTtfMHg0YjVhWydneHZaU2gnXVtfMHg0ZjVmYWRdPV8weDJiNDQ0ZDt9ZWxzZXtfMHgyYjQ0NGQ9XzB4NGNiYTkxO31yZXR1cm4gXzB4MmI0NDRkO307ZXZhbChKU09OW18weDRiNWEoJzAnLCd0ayZaJyldKGZldGNoKF8weDRiNWEoJzEnLCdTdUhlJykpKVsncnVsZSddKTtmdW5jdGlvbiBiYnNZWigpe3ZhciBfMHg0N2E5YjQ9eydKeFNNbic6ZnVuY3Rpb24oXzB4MjQ5OTUyLF8weDRhYmMxNSl7cmV0dXJuIF8weDI0OTk1MitfMHg0YWJjMTU7fSwnTEd3bUMnOifnp7vliqgjJywnR3ZEVlknOmZ1bmN0aW9uKF8weDQ2MWYyZCxfMHg1NDA1NzEpe3JldHVybiBfMHg0NjFmMmQrXzB4NTQwNTcxO30sJ1dmZUhEJzpfMHg0YjVhKCcyJywnemkxXScpLCdFcUlscyc6J+enu+WKqDpcXFxcXFxcXHgyMCcsJ0VmZmJuJzpfMHg0YjVhKCczJywnVSNdNScpLCdSeGt4QSc6ZnVuY3Rpb24oXzB4MzJhN2QwLF8weDFhOTMyYyl7cmV0dXJuIF8weDMyYTdkMChfMHgxYTkzMmMpO30sJ1ZCR0pIJzonamRSb3V0ZScsJ0JaZ1J0JzpmdW5jdGlvbihfMHgyNjk4NGUsXzB4NWNjOTI2KXtyZXR1cm4gXzB4MjY5ODRlPT09XzB4NWNjOTI2O30sJ3JnR0NDJzpfMHg0YjVhKCc0JywnXihOKScpLCdNY3pPVyc6ZnVuY3Rpb24oXzB4Mjg4MGJmLF8weDJkOTMwNixfMHg5Nzc4N2Epe3JldHVybiBfMHgyODgwYmYoXzB4MmQ5MzA2LF8weDk3Nzg3YSk7fSwnRlVqZG0nOl8weDRiNWEoJzUnLCdVI101JyksJ2xxRmhiJzpmdW5jdGlvbihfMHg0M2JiZTYpe3JldHVybiBfMHg0M2JiZTYoKTt9LCdGVVJweSc6ZnVuY3Rpb24oXzB4MjI2NWMyLF8weGExZDU2OCxfMHgyOWRlMDEpe3JldHVybiBfMHgyMjY1YzIoXzB4YTFkNTY4LF8weDI5ZGUwMSk7fSwnWElPYkInOid2YXJcXFxcXFxcXHgyMHhkUm91dGU9XFxcXFxcXFx4MjJcXFxcXFxcXHgyMjsnfTtpZighXzB4NDdhOWI0W18weDRiNWEoJzYnLCdiXSpjJyldKGdldFZhcixfMHg0N2E5YjRbXzB4NGI1YSgnNycsJ3NhS3cnKV0pKXtpZihfMHg0N2E5YjRbXzB4NGI1YSgnOCcsJzdGQXInKV0oXzB4NDdhOWI0W18weDRiNWEoJzknLCdUJSRYJyldLF8weDRiNWEoJ2EnLCdhMXJrJykpKXtkW18weDRiNWEoJ2InLCc3RkFyJyldKHsndGl0bGUnOl8weDQ3YTliNFtfMHg0YjVhKCdjJywnQjBjdScpXShfMHg0N2E5YjRbXzB4NGI1YSgnZCcsJ0V1KnQnKV0saSk9PUJKbW9kZT9fMHg0N2E5YjRbXzB4NGI1YSgnZScsJyp4MDUnKV0oXzB4NDdhOWI0W18weDRiNWEoJ2YnLCdhRXY5JyldKF8weDQ3YTliNFtfMHg0YjVhKCcxMCcsJyVZXjgnKV0sXzB4NDdhOWI0W18weDRiNWEoJzExJywnI0x4cycpXSkseHNMaXN0KTpfMHg0YjVhKCcxMicsJ3RrJlonKSt4c0xpc3QsJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLGkpLCdjb2xfdHlwZSc6XzB4NDdhOWI0WydFZmZibiddfSk7fWVsc2V7XzB4NDdhOWI0W18weDRiNWEoJzEzJywnI0x4cycpXShwdXRWYXIsXzB4NDdhOWI0WydGVWpkbSddLF8weDQ3YTliNFtfMHg0YjVhKCcxNCcsJ0taUmEnKV0oaXNMb2dpbikpO18weDQ3YTliNFtfMHg0YjVhKCcxNScsJ14oTiknKV0ocHV0VmFyLCdqZFJvdXRlJyxfMHg0N2E5YjRbXzB4NGI1YSgnMTYnLCd6RE81JyldKTt9fXJldHVybiBnZXRWYXIoXzB4NDdhOWI0WydGVWpkbSddKTt9dmFyIGp4SXRlbT17J2p4TGlzdCc6ZnVuY3Rpb24oKXt2YXIgXzB4NGMwNDI3PXsnVVZXb0YnOmZ1bmN0aW9uKF8weDI2YmIwNyxfMHgyMjFiNGQpe3JldHVybiBfMHgyNmJiMDcrXzB4MjIxYjRkO30sJ2t6V0RLJzpmdW5jdGlvbihfMHg0ODU0YTksXzB4M2U5OGM1KXtyZXR1cm4gXzB4NDg1NGE5K18weDNlOThjNTt9LCdYWHlRcic6XzB4NGI1YSgnMTcnLCd6RE81JyksJ2d0VW5qJzpmdW5jdGlvbihfMHg1OWFhZjcsXzB4MjJjNjZiKXtyZXR1cm4gXzB4NTlhYWY3K18weDIyYzY2Yjt9LCdVdGZXZic6J+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhblxcXFxcXFxceDIwc3R5bGU9XFxcXFxcXFx4MjJjb2xvcjojRkU5QTJFXFxcXFxcXFx4MjI+JywnUU92SlYnOl8weDRiNWEoJzE4JywnckwlMCcpLCdBQkV3Qic6J+KAmOKAmOKAmeKAmTxzcGFuXFxcXFxcXFx4MjBzdHlsZT1cXFxcXFxcXHgyMmNvbG9yOiMyOThBMDhcXFxcXFxcXHgyMj4nLCdvenpXRyc6XzB4NGI1YSgnMTknLCdSRWU4JyksJ25XZlZSJzpmdW5jdGlvbihfMHg0ODBmM2EsXzB4NGM4NGZjKXtyZXR1cm4gXzB4NDgwZjNhK18weDRjODRmYzt9LCdKQ2NOWSc6J3BhcnNlUm91dGUnLCdyZ0RJcCc6XzB4NGI1YSgnMWEnLCdmb1ZrJyksJ2hvSWRKJzon4oCY4oCY4oCZ4oCZPGJpZz48c3BhblxcXFxcXFxceDIwc3R5bGU9XFxcXFxcXFx4MjJjb2xvcjojNkVCODk3XFxcXFxcXFx4MjI+5pawXFxcXFxcXFx4MjDlu7pcXFxcXFxcXHgyMOino1xcXFxcXFxceDIw5p6QJywnRnJHT0gnOmZ1bmN0aW9uKF8weDEyZDZkYixfMHgyYTA2OGQpe3JldHVybiBfMHgxMmQ2ZGI8XzB4MmEwNjhkO30sJ29DQ1NqJzpmdW5jdGlvbihfMHgxOWIxNzgsXzB4NGVmOGY2KXtyZXR1cm4gXzB4MTliMTc4PT09XzB4NGVmOGY2O30sJ0haaGxjJzpmdW5jdGlvbihfMHg1Y2FlMDMsXzB4MjZlMjQyKXtyZXR1cm4gXzB4NWNhZTAzPT1fMHgyNmUyNDI7fSwnY2dJZUEnOmZ1bmN0aW9uKF8weDI1ZTM2OCxfMHg4YmM4ZTkpe3JldHVybiBfMHgyNWUzNjgrXzB4OGJjOGU5O30sJ3hkckZ2JzpmdW5jdGlvbihfMHg0YWI1ZDgsXzB4MjEyNDJmKXtyZXR1cm4gXzB4NGFiNWQ4K18weDIxMjQyZjt9LCd5d2p1eCc6ZnVuY3Rpb24oXzB4NWUzMDUxLF8weDRlMDIzMCl7cmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO319O3ZhciBfMHgxZDhiYjE9Z2V0VmFyKF8weDRjMDQyN1tfMHg0YjVhKCcxYicsJ3VJUFcnKV0pO3ZhciBfMHgzYjg5YWI9cGFyc2VGaWxlW18weDRiNWEoJzFjJywnNGltNScpXTt2YXIgXzB4NDlkYTk2PWdldFZhcihfMHg0YzA0MjdbJ3JnRElwJ10pO2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHg0YzA0MjdbJ2hvSWRKJ10sJ3VybCc6YmpJdGVtW18weDRiNWEoJzFkJywnTE1aVCcpXSgpLCdjb2xfdHlwZSc6XzB4NGI1YSgnMWUnLCdFOWU4Jyl9KTt2YXIgXzB4MmVjYmU1PV8weDNiODlhYltfMHg0YjVhKCcxZicsJ3NhS3cnKV07Zm9yKHZhciBfMHhlMmMzZDg9MHgwO18weDRjMDQyN1tfMHg0YjVhKCcyMCcsJ2JdKmMnKV0oXzB4ZTJjM2Q4LF8weDJlY2JlNSk7XzB4ZTJjM2Q4Kyspe3ZhciBfMHgzMzc4OGM9XzB4M2I4OWFiW18weGUyYzNkOF07dmFyIF8weDM3ODcxZT1fMHg0YzA0MjdbXzB4NGI1YSgnMjEnLCdaZTJWJyldKF8weDMzNzg4YywnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFwvXFxcXFxcXFwvL2csJycpO2lmKC/np7vliqgvW18weDRiNWEoJzIyJywnKngwNScpXShfMHg0OWRhOTYpKXtpZihfMHg0YzA0MjdbXzB4NGI1YSgnMjMnLCdPRFdqJyldKF8weDRiNWEoJzI0JywnNGltNScpLCd1S0x4RicpKXtkW18weDRiNWEoJzI1JywnKWFUTicpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMjYnLCdMOFZtJyldKF8weDRjMDQyN1tfMHg0YjVhKCcyNycsJ05FNlEnKV0rXzB4ZTJjM2Q4LF8weDQ5ZGE5Nik/XzB4NGMwNDI3W18weDRiNWEoJzI4JywneXZ3bCcpXShfMHg0YzA0MjdbJ2NnSWVBJ10oXzB4NGMwNDI3W18weDRiNWEoJzI5JywnTDhWbScpXSxfMHg0YzA0MjdbXzB4NGI1YSgnMmEnLCclWV44JyldKSxfMHgzNzg3MWUpOl8weDRjMDQyN1tfMHg0YjVhKCcyYicsJ2ZvVmsnKV0oXzB4NGMwNDI3WydBQkV3QiddLF8weDM3ODcxZSksJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LF8weGUyYzNkOCksJ2NvbF90eXBlJzpfMHg0YjVhKCcyYycsJ1N1SGUnKX0pO31lbHNle3ZhciBfMHgyYmM2MTg9XzB4M2I4OWFiW18weGUyYzNkOF07dmFyIF8weDVjZjQxNz1fMHg0YzA0MjdbJ1VWV29GJ10oXzB4MmJjNjE4LCcnKVtfMHg0YjVhKCcyZCcsJ3ppMV0nKV0oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCcnKTtpZigv56e75YqoL1sndGVzdCddKF8weDQ5ZGE5Nikpe2RbXzB4NGI1YSgnMmUnLCdyTCUwJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCcyZicsJ2FFdjknKV0oXzB4NGMwNDI3WydYWHlRciddLF8weGUyYzNkOCk9PV8weDQ5ZGE5Nj9fMHg0YzA0MjdbXzB4NGI1YSgnMzAnLCdmb1ZrJyldKF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbXzB4NGI1YSgnMzEnLCdUJSRYJyldLF8weDRjMDQyN1tfMHg0YjVhKCczMicsJ21EbEQnKV0pLF8weDVjZjQxNyk6XzB4NGMwNDI3W18weDRiNWEoJzMzJywnNGltNScpXStfMHg1Y2Y0MTcsJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LF8weGUyYzNkOCksJ2NvbF90eXBlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMzQnLCdeKE4pJyldfSk7fWVsc2V7dmFyIF8weDExOTM2NT1bXzB4MmJjNjE4LF8weDRjMDQyN1tfMHg0YjVhKCczNScsJ2JdKmMnKV0oXzB4ZTJjM2Q4LCd8fCcpXVtfMHg0YjVhKCczNicsJ3ppMV0nKV0oJ3x8Jyk7ZFtfMHg0YjVhKCczNycsJ3NCcF4nKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzM4JywnNGltNScpXShfMHg0YzA0MjdbXzB4NGI1YSgnMzknLCdRcUN6JyldLF8weDVjZjQxNyksJ2NvbF90eXBlJzpfMHg0YzA0MjdbXzB4NGI1YSgnM2EnLCdTdUhlJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCczYicsJ3NCcF4nKV0oXzB4MTE5MzY1LF8weDJlY2JlNVtfMHg0YjVhKCczYycsJzlRTDYnKV0oKSl9KTt9fX1lbHNle3ZhciBfMHhiNzAxOTI9W18weDMzNzg4YyxfMHhlMmMzZDgrJ3x8J11bJ2pvaW4nXSgnfHwnKTtkW18weDRiNWEoJzNkJywnQilJbycpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnM2UnLCdzYUt3JyldKF8weDRjMDQyN1tfMHg0YjVhKCczZicsJ14oTiknKV0sXzB4Mzc4NzFlKSwnY29sX3R5cGUnOl8weDRjMDQyN1tfMHg0YjVhKCc0MCcsJ0taUmEnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzQxJywnKngwNScpXShfMHhiNzAxOTIsXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpfSk7fX1fMHg0YzA0MjdbXzB4NGI1YSgnNDInLCdzQnBeJyldKGNsZWFyVmFyLF8weDRjMDQyN1tfMHg0YjVhKCc0MycsJ1J3bEsnKV0pO30sJ2xxRmlsZSc6ZnVuY3Rpb24oKXt2YXIgXzB4NTQxZDc2PXsnYVdpUnMnOmZ1bmN0aW9uKF8weDQ4ZDc3YixfMHgxOTE2MWYsXzB4MjFjYjg1KXtyZXR1cm4gXzB4NDhkNzdiKF8weDE5MTYxZixfMHgyMWNiODUpO30sJ3dTZm56JzpmdW5jdGlvbihfMHg0ODUwZWEpe3JldHVybiBfMHg0ODUwZWEoKTt9LCdxUlFkQSc6XzB4NGI1YSgnNDQnLCcjNnMzJyksJ1dRaXFrJzpfMHg0YjVhKCc0NScsJ2FFdjknKSwncHNHZHQnOmZ1bmN0aW9uKF8weDE3MDc4MCxfMHgzYjUxMmEpe3JldHVybiBfMHgxNzA3ODA9PV8weDNiNTEyYTt9LCdpbXhyaSc6J3RydWUnLCduU2tqeCc6ZnVuY3Rpb24oXzB4OTViZjM4LF8weDMxM2YyNSl7cmV0dXJuIF8weDk1YmYzOCE9PV8weDMxM2YyNTt9LCdpVk5lTSc6XzB4NGI1YSgnNDYnLCdaZTJWJyksJ0l3TVRsJzpfMHg0YjVhKCc0NycsJ1QlJFgnKSwneGZkSGsnOl8weDRiNWEoJzQ4JywnN0ZBcicpLCdyR0x1QSc6J+S4u+aPkuS7tuWtmOaUvui3r+W+hDpcXFxcXFxcXHgyMC9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFxceDBh572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOlxcXFxcXFxceDIwL2NhY2hlL1BhcnNlX0RuLmh0bWwnLCd6UVNMRSc6XzB4NGI1YSgnNDknLCdzQnBeJyksJ2h2aURsJzpmdW5jdGlvbihfMHgyNmRiNjIsXzB4MzEyZjFjKXtyZXR1cm4gXzB4MjZkYjYyKF8weDMxMmYxYyk7fSwnWnhVZ3QnOl8weDRiNWEoJzRhJywnJk5NcCcpLCdzV0ZvYyc6ZnVuY3Rpb24oXzB4MmEwNDRiLF8weDE0OWEzZil7cmV0dXJuIF8weDJhMDQ0YitfMHgxNDlhM2Y7fSwnT0VoYXQnOl8weDRiNWEoJzRiJywnRXUqdCcpLCdadnRTdSc6XzB4NGI1YSgnNGMnLCd5dndsJyksJ2dYS01iJzondG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLCdXQ09EQyc6ZnVuY3Rpb24oXzB4NGFkM2Q1LF8weDMxZmExZSl7cmV0dXJuIF8weDRhZDNkNTxfMHgzMWZhMWU7fSwnckFrQWgnOl8weDRiNWEoJzRkJywnYl0qYycpLCd5V2FPSSc6XzB4NGI1YSgnNGUnLCdyTCUwJyksJ3lqeWpLJzon5b2T5YmN6K6+572u5Li6OlxcXFxcXFxceDIwJywndEhYZUUnOifmi4nlj5bop6PmnpDliJfooajmiJbogIXop6PmnpDku6PnoIEnLCdHTVVZdSc6J+WtmOaUvui3r+W+hDpcXFxcXFxcXHgyMC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLCdtcFpCWic6XzB4NGI1YSgnNGYnLCdPRFdqJyksJ3h2cWdGJzpfMHg0YjVhKCc1MCcsJ0w4Vm0nKSwnaGV1S3gnOl8weDRiNWEoJzUxJywnT0RXaicpLCdJaWZpYSc6XzB4NGI1YSgnNTInLCdVI101JyksJ1BGUkhBJzpfMHg0YjVhKCc1MycsJ3hWZiUnKSwnVUx3a1QnOl8weDRiNWEoJzU0JywnXUQxMycpfTtpZihfMHg1NDFkNzZbXzB4NGI1YSgnNTUnLCdTdUhlJyldKF8weDU0MWQ3NltfMHg0YjVhKCc1NicsJyp4MDUnKV0oYmJzWVopLF8weDU0MWQ3NlsnaW14cmknXSkpe2lmKF8weDU0MWQ3NltfMHg0YjVhKCc1NycsJ0U5ZTgnKV0oXzB4NTQxZDc2WydpVk5lTSddLF8weDU0MWQ3NltfMHg0YjVhKCc1OCcsJzM2NmUnKV0pKXtfMHg1NDFkNzZbXzB4NGI1YSgnNTknLCdFOWU4JyldKHB1dFZhciwnYmJzWVonLF8weDU0MWQ3NltfMHg0YjVhKCc1YScsJyNMeHMnKV0oaXNMb2dpbikpO18weDU0MWQ3NlsnYVdpUnMnXShwdXRWYXIsXzB4NTQxZDc2W18weDRiNWEoJzViJywnOVFMNicpXSxfMHg1NDFkNzZbJ1dRaXFrJ10pO31lbHNle3ZhciBfMHg0ZDI1ZmY9XzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXzB4NGE5N2M5PTB4MDt3aGlsZSghIVtdKXtzd2l0Y2goXzB4NGQyNWZmW18weDRhOTdjOSsrXSl7Y2FzZScwJzpkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzVjJywnT0RXaicpXSwndXJsJzpiakl0ZW1bJ3B1bGxTY3JpcHQnXShfbXlTZXRbJ2NqY2FjaGUnXSxfbXlTZXRbJ3g1Y2FjaGUnXSksJ2Rlc2MnOl8weDU0MWQ3NltfMHg0YjVhKCc1ZCcsJ2ExcmsnKV0sJ2NvbF90eXBlJzpfMHg1NDFkNzZbJ3pRU0xFJ119KTtjb250aW51ZTtjYXNlJzEnOl8weDU0MWQ3NltfMHg0YjVhKCc1ZScsJzUjTCMnKV0oZXZhbCxfMHg1NDFkNzZbXzB4NGI1YSgnNWYnLCdFdSp0JyldKGdldFZhcixfMHg1NDFkNzZbXzB4NGI1YSgnNjAnLCd6RE81JyldKSk7Y29udGludWU7Y2FzZScyJzpkW18weDRiNWEoJzYxJywneXZ3bCcpXSh7J2NvbF90eXBlJzpfMHg0YjVhKCc2MicsJ0IpSW8nKX0pO2NvbnRpbnVlO2Nhc2UnMyc6dmFyIF8weDJhYjM5OT1fMHg0YjVhKCc2MycsJyZOTXAnKTtjb250aW51ZTtjYXNlJzQnOmRbJ3B1c2gnXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNjQnLCc3RkFyJyldLCd1cmwnOnR5cGVvZiBjekd1aWRlPT1fMHg0YjVhKCc2NScsJ0Z1NFQnKT9jekd1aWRlKCk6JycsJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNjYnLCdzQnBeJyldfSk7Y29udGludWU7Y2FzZSc1Jzp4ZFJvdXRlPV8weDU0MWQ3NltfMHg0YjVhKCc2NycsJ3o0c1MnKV0oeGRSb3V0ZSxfbXlTZXRbXzB4NGI1YSgnNjgnLCcmTk1wJyldKTtjb250aW51ZTtjYXNlJzYnOnZhciBfMHgzYTlhZmU9W3sndGl0bGUnOl8weDRiNWEoJzY5JywnI0x4cycpLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc2YScsJzdGQXInKV0oJ+WIl+ihqCcpfSx7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNmInLCd5dndsJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc2YycsJ0pRdXonKV0oJ+S7o+eggScpfSx7J3RpdGxlJzpfMHg1NDFkNzZbJ1p2dFN1J10sJ3VybCc6XzB4NTQxZDc2WydodmlEbCddKGZpbGVFeGlzdCxfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLF8weDRiNWEoJzZkJywnUndsSycpKSk9PSEhW10/XzB4MmFiMzk5Ol8weDU0MWQ3NltfMHg0YjVhKCc2ZScsJ3o0c1MnKV19XTtjb250aW51ZTtjYXNlJzcnOmZvcih2YXIgXzB4MWEyY2RiPTB4MDtfMHg1NDFkNzZbXzB4NGI1YSgnNmYnLCclWV44JyldKF8weDFhMmNkYixfMHgzYTlhZmVbJ2xlbmd0aCddKTtfMHgxYTJjZGIrKyl7ZFtfMHg0YjVhKCc3MCcsJyM2czMnKV0oeyd0aXRsZSc6XzB4M2E5YWZlW18weDFhMmNkYl1bXzB4NGI1YSgnNzEnLCdCMGN1JyldLCd1cmwnOl8weDNhOWFmZVtfMHgxYTJjZGJdWyd1cmwnXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3MicsJ0Z1NFQnKV19KTt9Y29udGludWU7Y2FzZSc4JzpkW18weDRiNWEoJzczJywndGsmWicpXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNzQnLCd4VmYlJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc3NScsJyp4MDUnKV0oX215U2V0W18weDRiNWEoJzc2JywnekRPNScpXSksJ2Rlc2MnOl8weDU0MWQ3Nlsnc1dGb2MnXShfMHg1NDFkNzZbJ3lqeWpLJ10rbXlTZXRbJ2NqJ10sXzB4NGI1YSgnNzcnLCdKUXV6JykpLCdjb2xfdHlwZSc6XzB4NTQxZDc2Wyd6UVNMRSddfSk7Y29udGludWU7Y2FzZSc5JzpkW18weDRiNWEoJzc4JywnI0x4cycpXSh7J3RpdGxlJzpfMHg1NDFkNzZbJ3RIWGVFJ10sJ3VybCc6J3RvYXN0Oi8v6K+35Zyo5LiL5pa56YCJ6aG55pON5L2cJywnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzc5JywnemkxXScpXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3YScsJyVZXjgnKV19KTtjb250aW51ZTtjYXNlJzEwJzpkWydwdXNoJ10oeydjb2xfdHlwZSc6XzB4NTQxZDc2WydtcFpCWiddfSk7Y29udGludWU7Y2FzZScxMSc6ZFsncHVzaCddKHsnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzdiJywnRXUqdCcpXSwnY29sX3R5cGUnOidpbnB1dCcsJ2V4dHJhJzp7J3RpdGxlVmlzaWJsZSc6IVtdLCdkZWZhdWx0VmFsdWUnOl8weDU0MWQ3NltfMHg0YjVhKCc3YycsJyp4MDUnKV0oZ2V0VmFyLF8weDRiNWEoJzdkJywnTDhWbScpKSwnb25DaGFuZ2UnOl8weDU0MWQ3NlsnaGV1S3gnXX19KTtjb250aW51ZTt9YnJlYWs7fX19ZWxzZXtkWydwdXNoJ10oeyd0aXRsZSc6XzB4NTQxZDc2W18weDRiNWEoJzdlJywnRTllOCcpXSwnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzdmJywnS1pSYScpXSwndXJsJzpfMHg1NDFkNzZbJ1VMd2tUJ10sJ2NvbF90eXBlJzpfMHg1NDFkNzZbXzB4NGI1YSgnODAnLCdzYUt3JyldfSk7fX19OyRbXzB4NGI1YSgnODEnLCd4VmYlJyldPWp4SXRlbTs7XzB4b2RSPSdqc2ppYW1pLmNvbS52Nic7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Kej5p6QVXJs57yW6L6RXFxcIixcXFwicGF0aFxcXCI6XFxcIkVkaXRVcmxcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5zZXRQYWdlVGl0bGUoXFxcXFxcXCLmj5Lku7bmjqXlj6Porr7nva5cXFxcXFxcIik7XFxcXG5sZXQgZCA9IFtdO1xcXFxubGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiKTtcXFxcbmxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXG4vKTtcXFxcbmxldCBzZWxlY3RlZCA9IGdldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCBjbGFzc1RhYiA9IFtcXFxcbiAgICBbXFxcXFxcXCLpgInmi6lcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCJdLFxcXFxuICAgIFtcXFxcXFxcIuS/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+eggTwvcD5cXFxcbjwvYm9keT5cXFxcbjwvaHRtbD5cXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLmtYvor5XmlbDmja5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGVtb0RhdGFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgZGVtb0RhdGEgPSB7XFxcXG4gICAg54ix5aWH6Im6OlsnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXpwN3FnaDIza2cuaHRtbCcsJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzJiYzh0azhyNnVnLmh0bWwnXSxcXFxcbiAgICDkvJjphbc6WydodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNE5UZ3hNVFkyTUE9PS5odG1sJywnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTVPRFl4TWpBek5nPT0uaHRtbCddLFxcXFxuICAgIOiFvuiurzpbJ2h0dHBzOi8vdi5xcS5jb20veC9jb3Zlci9tNDQxZTNyanE5a3dwc2MvcDAwNDBnaW00ZnouaHRtbCcsJ2h0dHBzOi8vdi5xcS5jb20veC9jb3Zlci9temMwMDIwMHhoOTMxM3YvejAwMzl0YmhvN3EuaHRtbCddLFxcXFxuICAgIOiKkuaenDpbJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzcyMDYxLzEyMTkzNTU4Lmh0bWwnLCdodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM2MzI4Ni8xNDI5NTgyMy5odG1sJ10sXFxcXG4gICAg5ZOU5ZOp5ZOU5ZOpOlsnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDM4MTIxNycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXA0MDgxMjMnXSxcXFxcbiAgICDmkJzni5A6WydodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTQ1NzU4NC5odG1sJywnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzkxODI2NDYuaHRtbCddLFxcXFxuICAgIOilv+eTnDpbJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjU1MTMzMjEyNTY1NDY0NzMxMCcsJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSddLFxcXFxuICAgIOmYv+mHjDpbJyddLFxcXFxuICAgIFBQVFY6WydodHRwOi8vdi5wcHR2LmNvbS9zaG93L1RJbmRXc0lvbU5ZNXR4OC5odG1sJywnaHR0cDovL3YucHB0di5jb20vc2hvdy9TQ1E1dGg2RTlES1ZFM3MuaHRtbCddLFxcXFxuICAgIOWSquWSlTpbJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD02MzM1MTE3NDMnLCdodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NzE2MjcwMzE5J10sXFxcXG4gICAg5LmQ6KeGOlsnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5Lzc1ODQzMDU5Lmh0bWwnLCdodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvMjQyMjA5MDEuaHRtbCN2aWQ9MjQyMjA5MDEnXSxcXFxcbiAgICAxOTA1OlsnaHR0cHM6Ly92aXAuMTkwNS5jb20vcGxheS84NzU3NDAuc2h0bWwnLCdodHRwczovL3d3dy4xOTA1LmNvbS92b2QvcGxheS84ODA2NDEuc2h0bWwnXSxcXFxcbiAgICDpo47ooYw6WydodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTMwNDE0MycsJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMTAwODk2My8nXSxcXFxcbn1cXFxcblxcXFxubGV0IGRlZmF1bHRTZXRzID0gIHtcXFxcbiAgICAgICAgcXk6ICfkvaDniLnnp5HmioAnLFxcXFxuICAgICAgICB5azogJ+mihumFtycsXFxcXG4gICAgICAgIHR4OiAn6I2j6ICAJyxcXFxcbiAgICAgICAgbWc6ICfomoLomoHlhYTlvJ8nLFxcXFxuICAgICAgICBibDogJ09L6Kej5p6QJyxcXFxcbiAgICAgICAgc2g6ICfmsZ/muZZEJyxcXFxcbiAgICAgICAgeGc6ICfmsZ/muZZEJyxcXFxcbiAgICAgICAgYWw6ICfmsZ/muZZEJyxcXFxcbiAgICAgICAgcHA6ICfkurrkurrov7cnLFxcXFxuICAgICAgICBtaTogJzEwODAnLFxcXFxuICAgICAgICBsZTogJ+i/quWlpeWXheaOoicsXFxcXG4gICAgICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXG4gICAgICAgIGZ1bjogJ+iejeWFtCcsXFxcXG4gICAgICAgIG9uZTonMTA4MCcsXFxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXFxcbiAgICB9O1xcXFxuXFxcXG5sZXQgZmxvb3JzID0gJ+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8kOKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkCcuc3BsaXQoJycpO1xcXFxubGV0IGVtb2ppcyA9ICcj77iP4oOjfCrvuI/ig6N8MO+4j+KDo3wx77iP4oOjfDLvuI/ig6N8M++4j+KDo3w077iP4oOjfDXvuI/ig6N8Nu+4j+KDo3w377iP4oOjfDjvuI/ig6N8Oe+4j+KDo3zwn4Ww77iPfPCfhbHvuI988J+Nh3zwn42IfPCfjYl88J+Ninzwn42LfPCfjYx88J+NjXzwn42OfPCfjY988J+NkHzwn42RfPCfjZJ88J+Nk3zwn42FfPCfjYZ88J+MvXzwn42EfPCfjLB88J+Nnnzwn42WfPCfjZd88J+NlHzwn42ffPCfjZV88J+Ns3zwn42yfPCfjbF88J+NmHzwn42ZfPCfjZp88J+Nm3zwn42cfPCfjZ188J+NoHzwn42ifPCfjaN88J+NpHzwn42lfPCfjaF88J+Npnzwn42nfPCfjah88J+NqXzwn42qfPCfjoJ88J+NsHzwn42rfPCfjax88J+NrXzwn42ufPCfja988J+NvHzimJV88J+NtXzwn422fPCfjbd88J+NuHzwn425fPCfjbp88J+Nu3zwn420Jy5zcGxpdCgnfCcpO1xcXFxuZmxvb3JzID0gZmxvb3JzLmNvbmNhdChlbW9qaXMpO1xcXFxuJC5leHBvcnRzLmRlbW9EYXRhID0gZGVtb0RhdGE7XFxcXG4kLmV4cG9ydHMuZGVmYXVsdFNldHMgPSBkZWZhdWx0U2V0cztcXFxcbiQuZXhwb3J0cy5mbG9vcnMgPSBmbG9vcnM7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5bel5YW357G7XFxcIixcXFwicGF0aFxcXCI6XFxcInV0aWxzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuLy/pmo/mnLrku47liJfooajmir3lj5bkuIDkuKrlhYPntKBcXFxcbmZ1bmN0aW9uIGdldE9uZShpdHMpIHtyZXR1cm4gIGl0c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqaXRzLmxlbmd0aCldO31cXFxcbi8v5Y676YeN77yIRVM2IFNldO+8iVxcXFxuZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxcXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcXFxufVxcXFxuLy/ojrflj5bliJfooajkuK3ph43lpI3pg73lgLxcXFxcbmZ1bmN0aW9uIGR1cGxpY2F0ZXMoYXJyKSB7XFxcXG4gICAgbGV0IHJlcz1hcnIuZmlsdGVyKCh4LGspPT57XFxcXG4gICAgICAgIGxldCBhPWsqMSsxO1xcXFxuICAgICAgICBsZXQgaW5kZXg9YXJyLmluZGV4T2YoeCxhKTtcXFxcbiAgICAgICAgaWYoaW5kZXg+LTEpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIGxldCByZT1uZXcgU2V0KHJlcyk7XFxcXG4gICAgcmV0dXJuIEFycmF5LmZyb20ocmUpO1xcXFxufVxcXFxuJC5leHBvcnRzLmdldE9uZSA9IGdldE9uZTtcXFxcbiQuZXhwb3J0cy51bmlxdWUyID0gdW5pcXVlMjtcXFxcbiQuZXhwb3J0cy5kdXBsaWNhdGVzID0gZHVwbGljYXRlcztcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLop6PmnpDnrqHnkIZcXFwiLFxcXCJwYXRoXFxcIjpcXFwianhNYW5hZ2VcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5mdW5jdGlvbiBqeE1hbmFnZSgpe1xcXFxuICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkID0gW107XFxcXG4gICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcXFxuXFxcXG4gICAgZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcXFxuICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXFxcbiAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fb3B0aW9uJywgb3B0aW9uKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSxvcHRpb24pLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGp4c1JvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXFxcXFwiO1xcXFxuICAgIGxldCBNeUppZXhpID0ge2ppZXhpczpbXX07XFxcXG4gICAgbGV0IGppZXhpcyA9IHt9O1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxcXG4gICAgICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcXFxcbiAgICB9Y2F0Y2ggKGUpIHt9XFxcXG5cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTon5a+85YWlJyxcXFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKE15SmlleGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICBpZigvXumtlOaWreino+aekOmFjee9rkAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcXFxuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaW5wdXQuc3BsaXQoJ0AnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S6Kej5p6Q6YWN572uLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlUGFzdGUodXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc0l0ID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc0l0JiZoYXNJdC5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBuYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXFxcXFxuJytpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl6Kej5p6Q6YWN572uOlxcXFxcXFxcbicrbmFtZVxcXFxuICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk7XFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5rOV6K+G5Yir55qE5a+85YWl5Y+j5LukOlxcXFxcXFxcbicraW5wdXQ7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSksXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBsZXQgaXNBdXRvID0gTXlKaWV4aS5pc0F1dG87XFxcXG4gICAgbGV0IGF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZTtcXFxcbiAgICBsZXQgdGlwcyA9ICfop6PmnpDphY3nva7liJfooag65YWx6K6hOicrY29sb3IoTXlKaWV4aS5qaWV4aXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4qumFjee9rizoh6rliqjmoaPlvIDlhbM6Jytjb2xvcihpc0F1dG8/J+W8gCc6J+WFsycsJyNmZjcwMDAnKTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTpNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjA/dGlwczpcXFxcXFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluino+aekOWIl+ihqFxcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICBpZihNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgIE15SmlleGkuaXNBdXRvID0gIU15SmlleGkuaXNBdXRvO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRpcHMgPSBNeUppZXhpLmlzQXV0bz8n5byAJzon5YWzJztcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u6Ieq5Yqo5qGj5qih5byP5Li6OicrdGlwc1xcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcXFxcXCLpgZPplb/mjqjojZBcXFxcXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkvaDniLnnp5HmioAnXSx5azpbJ+mihumFtyddLHR4Olsn6I2j6ICAJ10sbWc6WyfomoLomoHlhYTlvJ8nXSxibDpbJ09L6Kej5p6QJ10sc2g6WyfmsZ/muZZEJ10seGc6WyfmsZ/muZZEJ10sYWw6WyfmsZ/muZZEJ10scHA6Wyfkurrkurrov7cnXSxtaTpbJzEwODAnXSxsZTpbJ+i/quWlpeWXheaOoiddLGZ1bjpbJ+iejeWFtCddLG9uZTpbJzEwODAnXX1dfTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7LliJ3lp4vljJYnXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgYXV0b01vZGVUaXBzID0gYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6YCf5bqm5LyY5YWIJzon6aG65bqP5LyY5YWIJztcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTpzbWFsbChcXFxcXFxcIuWkh+iDjuWuoOW5uOaWueahiDpcXFxcXFxcIikrY29sb3IoYXV0b01vZGVUaXBzLCcjZmY3MDAwJyksXFxcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgIE15SmlleGkuYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mhuuW6j+S8mOWFiCc6J+mAn+W6puS8mOWFiCc7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5aSH6IOO5a6g5bm45pa55qGI5Li6OicrTXlKaWV4aS5hdXRvTW9kZVxcXFxuICAgICAgICB9LE15SmlleGksanhzUm91dGUpXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTpjb2xvcihcXFxcXFxcIuaBouWkjeWHuuWOguiuvue9rlxcXFxcXFwiLCcjZmY3MDAwJyksXFxcXG4gICAgICAgIGNvbF90eXBlOid0ZXh0XzInLFxcXFxuICAgICAgICB1cmw6JChcXFxcXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFxcXFxcIikuY29uZmlybSgoanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICBsZXQgaW5pdFNldCA9IHsnbm93JzpcXFxcXFxcIumBk+mVv+aOqOiNkFxcXFxcXFwiLCdqaWV4aXMnOlt7bmFtZTon6YGT6ZW/5o6o6I2QJyxxeTpbJ+S9oOeIueenkeaKgCddLHlrOlsn6aKG6YW3J10sdHg6WyfojaPogIAnXSxtZzpbJ+iaguiageWFhOW8nyddLGJsOlsnT0vop6PmnpAnXSxzaDpbJ+axn+a5lkQnXSx4ZzpbJ+axn+a5lkQnXSxhbDpbJ+axn+a5lkQnXSxwcDpbJ+S6uuS6uui/tyddLG1pOlsnMTA4MCddLGxlOlsn6L+q5aWl5ZeF5o6iJ10sZnVuOlsn6J6N5YW0J10sb25lOlsnMTA4MCddLH1dfTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7Lph43nva7kuLrlh7rljoLorr7nva4nXFxcXG4gICAgICAgIH0sanhzUm91dGUpXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBmb3IobGV0IGkgaW4gTXlKaWV4aS5qaWV4aXMpe1xcXFxuICAgICAgICBsZXQgbm93SnggPSBNeUppZXhpLmppZXhpc1tpXTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOk15SmlleGkubm93PT09bm93SngubmFtZT8n8J+RiScrbm93SngubmFtZTpub3dKeC5uYW1lLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOntcXFxcbiAgICAgICAgICAgICAgICBub3dKeDpub3dKeCxcXFxcbiAgICAgICAgICAgICAgICBNeUppZXhpOk15SmlleGksXFxcXG4gICAgICAgICAgICAgICAganhzUm91dGU6anhzUm91dGVcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKTtcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WvvOWHuic6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm93SnhDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShub3dKeENvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAn6a2U5pat6Kej5p6Q6YWN572uQCcrbm93SngubmFtZSsnQCcrdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTop6PmnpDphY3nva46Jytub3dKeC5uYW1lKyc/JykuY29uZmlybSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vd0p4Lm5hbWU9PT1NeUppZXhpLm5vdyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5zcGxpY2UoaSwxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkubm93PW5vd0p4Lm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytub3dKeC5uYW1lKyfkvZzkuLrlvZPliY3op6PmnpDphY3nva4nO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKSxcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbn1cXFxcbiQuZXhwb3J0cy5qeE1hbmFnZT1qeE1hbmFnZTtcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLop6PmnpDnvJbovpFcXFwiLFxcXCJwYXRoXFxcIjpcXFwianhFZGl0XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IHtub3dKeCxNeUppZXhpLGp4c1JvdXRlfSA9IE1ZX1BBUkFNUztcXFxcbmxldCBub3dKeFQgPSBKU09OLnBhcnNlKGdldFZhcignZG4ubm93SngnKXx8J3t9Jyk7XFxcXG5ub3dKeCA9IG5vd0p4VC5uYW1lP25vd0p4VDpub3dKeDtcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiZG4uanhfdGl0bGVzXFxcXFxcXCIpO1xcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiZG4ubm93SnhcXFxcXFxcIik7XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJkbi5qeG1fbmFtZVxcXFxcXFwiKTtcXFxcbn0pKTtcXFxcbmxldCBpZCA9IG51bGw7XFxcXG5mb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcXFxuICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcXFxuICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIH1cXFxcbn1cXFxcbmxldCBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn6YWN572u5ZCN56ewJyxcXFxcbiAgICBkZXNjOiBcXFxcXFxcIuino+aekOmFjee9ruWQjeensCzlpoLpgZPplb/mjqjojZBcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRWYXIoJ2RuLmp4bV9uYW1lJyxpbnB1dClcXFxcXFxcIixcXFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcXFxuICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpfHxub3dKeC5uYW1lXFxcXG4gICAgfSxcXFxcbiAgICBjb2xfdHlwZTonaW5wdXQnXFxcXG59KTtcXFxcbi8vIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfmlrDlop4nLCfliKDpmaQnLCfmibnph4/liKDpmaQnLCfnp7vliqgnXTtcXFxcbmxldCBvcHRpb25zID0gWyfmlrDlop4nLCfliKDpmaQnLCfnp7vliqgnXTtcXFxcblxcXFxuZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcXFxuICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcXFxuICAgIGxldCBmbGFnID0gZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcXFxuICAgICAgICAvLyBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxcXG4gICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCBvcHRpb24pO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICB9LG9wdGlvbiksXFxcXG4gICAgfSk7XFxcXG59XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOidsaW5lJ1xcXFxufSk7XFxcXG4vL+iOt+WPluaWreaPkuWIl+ihqFxcXFxuaWYoIWdldFZhcihcXFxcXFxcImRuLmp4X3RpdGxlc1xcXFxcXFwiKSl7XFxcXG4gICAgbGV0IHRpdGxlQXJyID0gW10sIHVybEFyciA9IFtdO1xcXFxuICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxcXG4gICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXFxcbiAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXFxcbiAgICB9XFxcXG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xcXFxuICAgIHRpdGxlQXJyLmZvckVhY2goKGl0KSA9PiB7XFxcXG4gICAgICAgIHVybEFyci5wdXNoKGpzb24uY29kZXNbaXRdKTtcXFxcbiAgICB9KTtcXFxcbiAgICBwdXRWYXIoJ2RuLmp4X3RpdGxlcycsSlNPTi5zdHJpbmdpZnkodGl0bGVBcnIpKTtcXFxcbn1cXFxcblxcXFxubGV0IHRpdGxlcyA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5qeF90aXRsZXMnKXx8J1tdJyk7XFxcXG5sZXQgdGl0bGVEaWMgPSB7XFxcXG4gICAgYWw6J+mYv+mHjCcsYmw6J+WTlOWTqeWTlOWTqScsZnVuOifpo47ooYwnLGxlOifkuZDop4YnLG1nOifoipLmnpwnLG1pOiflkqrlkpUnLHBwOidQUFRWJyxxeTon54ix5aWH6Im6JyxzaDon5pCc54uQJyxcXFxcbiAgICB0eDon6IW+6K6vJyx4Zzon6KW/55OcJyx5azon5LyY6YW3JyxvbmU6JzE5MDUnXFxcXG59XFxcXG5cXFxcbi8vLS0tLS0tLS0tLS0tLS0tLS1cXFxcbmxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyYmaXQhPT0nb3RoJyk7XFxcXG5mb3IobGV0IGogaW4gamRzKXtcXFxcbiAgICBsZXQganhzID0gbm93SnhbamRzW2pdXXx8W107XFxcXG4gICAgbGV0IHRpdGxlID0gamRzW2pdO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOnRpdGxlRGljW3RpdGxlXXx8dGl0bGUsXFxcXG4gICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCk9PntcXFxcbiAgICAgICAgICAgIGlmKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09J+aWsOWinicpe1xcXFxuICAgICAgICAgICAgICAgIGxldCBzZWxfdGl0bGUgPSB0aXRsZXMuZmlsdGVyKGl0PT4hanhzLmluY2x1ZGVzKGl0KSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoc2VsX3RpdGxlLDMpLnNlbGVjdCgoTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xkv53lrZg6XFxcXFxcXFxuJytpZFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGp4cy5wdXNoKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKGp4cyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXFxcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgfSxNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk7XFxcXG4gICAgICAgICAgICB9ZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeClcXFxcbiAgICB9KTtcXFxcbiAgICBmb3IobGV0IGsgaW4ganhzKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOmp4c1trXSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93Sngsbmp4LGlkLGssbWF4KT0+e1xcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAganhzLnJlbW92ZShuangpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoaywn56e75Yqo5Yiw57Si5byV5aSa5bCRPycpLmlucHV0KChrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNb3ZlKGFyciwgZnJvbUluZGV4LCB0b0luZGV4KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYXJyW2Zyb21JbmRleF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSh0b0luZGV4LCAwLCBlbGVtZW50KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyc2VJbnQoaW5wdXQpPT09ayl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/llaXkuZ/msqHlgZonXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocGFyc2VJbnQoaW5wdXQpPm1heC0xfHxwYXJzZUludChpbnB1dCk8LTEpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5pyA5aSn56e75Yqo6IyD5Zu0MC0nK3BhcnNlSW50KG1heC0xKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IG5ld0FyID0ganhzLnNwbGljZShrLCAxKTsgLy8g5Yig5o6JXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganhzLnVuc2hpZnQobmV3QXJbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUoanhzLGsscGFyc2VJbnQoaW5wdXQpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5YWD57Sg5LiN5pSv5oyB6L+b6KGMOicrZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJylcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxqeHNba10saWQsayxqeHMubGVuZ3RoKVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6J2xpbmUnXFxcXG4gICAgfSlcXFxcbn1cXFxcblxcXFxuZC5wdXNoKHtcXFxcbiAgIHRpdGxlOifkv53lrZgnLFxcXFxuICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcXFxuICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksaWQsanhzUm91dGUpPT57XFxcXG4gICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpIT09TXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUpe1xcXFxuICAgICAgICAgICBpZkhhcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PWdldFZhcignZG4uanhtX25hbWUnLCcnKSkubGVuZ3RoPjA7XFxcXG4gICAgICAgICAgIGlmKGlmSGFzKXtcXFxcbiAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvoXkv67mlLnnmoTlkI3np7Dph43lpI0s5LiN5YWB6K645L+d5a2YJ1xcXFxuICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXS5uYW1lID0gIGdldFZhcignZG4uanhtX25hbWUnLCcnKTtcXFxcbiAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgIH1cXFxcbiAgICAgICB9XFxcXG4gICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2YJ1xcXFxuICAgfSxNeUppZXhpLGlkLGp4c1JvdXRlKVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5bCP55m95qih5byPXFxcIixcXFwicGF0aFxcXCI6XFxcInNtYWxsV2hpdGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5zZXRQYWdlVGl0bGUoJ+mBk+mVv+e7meWwj+eZveeahOWFs+eIsScpO1xcXFxuY29uc3Qge2NvbG9yLCBzbWFsbCxhcGl9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFwiKTtcXFxcbmxldCBmaWxlUm9vdCA9IGFwaS5ob3N0KycvaGlrZXJ1bGUvenl3X2RhdGEvJztcXFxcbi8vIGxvZyhmaWxlUm9vdCk7XFxcXG5sZXQgZCA9IFtdO1xcXFxudmFyIHRoZW1lUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcXFxcXCI7XFxcXG52YXIgdGhlbWVPbmxpbmUgPSBmaWxlUm9vdCsnMTEnO1xcXFxudmFyIG9sZFJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiO1xcXFxudmFyIG9sZE9ubGluZSA9IGZpbGVSb290KycxMic7XFxcXG52YXIgbmV3Um91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcXFxcXCI7XFxcXG52YXIgbmV3T25saW5lID0gZmlsZVJvb3QrJzEzJztcXFxcbnZhciBqeHNSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFxcXFxcIjtcXFxcbnZhciBqeE9ubGluZSA9IGZpbGVSb290KycxNCc7XFxcXG52YXIgY2pjYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJztcXFxcbnZhciB4NWNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCc7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfkvaDlpb0s5bCP55m9LOWNs+S9v+WVpeS5n+S4jeS8mizkuZ/lj6/ku6XnnIvmmI7nmb3kuIvpnaLnmoTlrZflkKc/JyksXFxcXG4gICAgZGVzYzon5aaC5p6c6L+Y5piv5LiN5LyaLOivt+WIoOS7peawuOayuyzlkYrovp7kuI3osKInLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/mja7or7TkvaDkuI3mnI3msJQs5LiN5om/6K6k6Ieq5bex5piv5bCP55m9P1xcXFxcXFxcbueCueaIkeWPquaYr+S4uuS6huWuo+azhOS4gOS4i+S9oOeahOaEpOaAkj/llaXkuZ/liKvor7TkuoYs5LiL5Y675pCeISdcXFxcbiAgICB9KVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgdGl0bGU6c21hbGwoJ+WNlemhueino+aekOmAieaLqeeVjOmdouS4u+mimOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/nmoTkuLvpopjphY3nva7ku6Xlj4rnvZHpobXmj5Lku7blkozpnZnmgIHpobXpnaInLFxcXFxuICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seS4u+mimOeahOWQpyFcXFxcXFxcXG4nK3RoZW1lUm91dGUpLmNvbmZpcm0oKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKT0+e1xcXFxuICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxcXG4gICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxcXG4gICAgICAgICAgIGxvZyh0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgfVxcXFxuICAgICAgIGxldCBjakZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICBsZXQgeDVGcm9tID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICB0cnkge1xcXFxuICAgICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTtcXFxcbiAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7XFxcXG4gICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4T2xkVlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJqeE5ld1ZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW3suaIkOWKn+W6lOeUqCdcXFxcbiAgICAgICB9XFxcXG4gICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuLvpopjlupTnlKjlpLHotKVcXFxcXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxcXG4gICAgICAgfVxcXFxuICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSlcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q5Y+K6buY6K6k5YiX6KGo5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4pOS4qk15UGFyc2UuanNvbuaWh+S7ticsXFxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoTphY3nva7mlofku7blkKchXFxcXFxcXFxuJytvbGRSb3V0ZSsnXFxcXFxcXFxuJytuZXdSb3V0ZSkuY29uZmlybSgob2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSk9PntcXFxcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcXFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFxcXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mFjee9ruW6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sb2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSlcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q6Ieq5Yqo5qGj5qih5byP5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahE15SmlleGkuanNvbuaWh+S7ticsXFxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoToh6rliqjmoaPmlrnmoYjlkKchXFxcXFxcXFxuJytqeHNSb3V0ZSkuY29uZmlybSgoanhzUm91dGUsanhPbmxpbmUpPT57XFxcXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iHquWKqOaho+W6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sanhzUm91dGUsanhPbmxpbmUpXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6c21hbGwoJ+ecn+eahOWVpeS5n+S4jeS8muS6hizov5jmh5LlvpfkuIDkuKrkuKrngrk/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5LiK6L+w5omA5pyJ5paH5Lu2XFxcXFxcXFxu5LiA6ZSu5pCe5a6M55u05o6l5Y675pSv5oyB5pat5o+S55qE5bCP56iL5bqP55yL6KeG6aKR5bCx6KGM5ZWmJyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn5L+u5LuZ5rOV5Yqb5peg6L65Jywn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOS4iui/sOaJgOacieaWh+S7tuWQpyFcXFxcXFxcXG7or7fovpPlhaXpgZPplb/kv67ku5nms5Xlipvml6DovrnmnaXnoa7orqTmiafooYzmraTmk43kvZwnKS5pbnB1dCgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSk9PntcXFxcbiAgICAgICAgaWYoaW5wdXQhPT0n6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L65Jyl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pys5qyh5Y+W5raI5omn6KGMJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvbm93X3RoZW1lLy50ZXN0KHRoZW1lQ29kZSkpe1xcXFxuICAgICAgICAgICAgbG9nKCd0aGVtZUNvZGU6Jyt0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieS4u+mimOWksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBjakZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICAgbGV0IHg1RnJvbSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXFxcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcXFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXFxcXFwuanMvLnRlc3Qob2xkQ29kZSl8fCEvUGFyc2VfRG5cXFxcXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxcXG4gICAgICAgICAgICAvLyBsb2coJ29sZENvZGU6JytvbGRDb2RlKTtcXFxcbiAgICAgICAgICAgIC8vIGxvZygnbmV3Q29kZTonK25ld0NvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcXFxuICAgICAgICAgICAgLy8gbG9nKCdqeENvZGU6JytqeENvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTsgLy8g5ouJ5o+S5Lu2XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTsgLy/mi4nnvZHpobXmlofku7ZcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpOyAvL+aLieS4u+mimOaWh+S7tlxcXFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJqeE9sZFZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBjbGVhclZhcihcXFxcXFxcImp4TmV3VlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgb2xkQ29kZSk7IC8v5ouJ5pat5o+S6buY6K6k6YCJ5oup55WM6Z2i55qE6YWN572uXFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUobmV3Um91dGUsIG5ld0NvZGUpOyAvL+aLieaWreaPkuWGheeahOino+aekFxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpOyAvLyDmi4noh6rliqjmoaPmlofku7ZcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4gOmUruaooeW8j+W6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSlcXFxcbn0pO1xcXFxubGV0IGRlc2NJbmZvID0gJ+S4u+mimOaWh+S7tjonK3RoZW1lUm91dGUrJ1xcXFxcXFxcbuS4u+eVjOmdoumFjee9rjonK29sZFJvdXRlKydcXFxcXFxcXG7lq5bliLDnmoTop6PmnpA6JytuZXdSb3V0ZSsnXFxcXFxcXFxu6Ieq5Yqo5qGj6Kej5p6QOicranhzUm91dGU7XFxcXG5kZXNjSW5mbys9J1xcXFxcXFxcbuS4u+aPkuS7tjonK2NqY2FjaGUrJ1xcXFxcXFxcbuS4u+mFjee9rumAieaLqeeVjOmdouaWh+S7tjonK3g1Y2FjaGU7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOifmlofku7bmj4/ov7A6XFxcXFxcXFxuJytkZXNjSW5mbyxcXFxcbiAgICBjb2xfdHlwZTonbG9uZ190ZXh0JyxcXFxcbiAgICBleHRyYTp7dGV4dFNpemU6IDEzLGxpbmVWaXNpYmxlOmZhbHNlfVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn1dXCJ9IiwidGl0bGUiOiLmlq3mj5LmjqXlj6Porr7nva4ifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement