Advertisement
xiaomianao666

邀您一起看:文字教程

Dec 12th, 2021
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥文字教程@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5Liq5Lq66YWN572uXCIsXCJwYXRoXCI6XCJzZXR0aW5nc1wiLFwicnVsZVwiOlwianM6XFxuLy8g5piv5ZCm5pi+56S65biW5a2Q5YiG57G777yM5pi+56S6LzEg5LiN5pi+56S6LzBcXG52YXIgc2hvd01ldGEgPSAxO1xcbi8vIOW4luWtkOWIhuexu+Wtl+S9k+Wkp+WwjyBiaWcv5aSnIHNwYW4v5LitIHNtYWxsL+Wwj1xcbnZhciBtZXRhU2l6ZSA9ICdzbWFsbCc7XFxuLy8g5biW5a2Q5YiG57G76aKc6ImyXFxudmFyIG5vZGVDb2xvciA9IFxcXCIjMjk3OUZGXFxcIjtcXG4vLyDmmK/lkKbmmL7npLrmraPmlofvvIzmmL7npLovMSDkuI3mmL7npLovMFxcbnZhciBzaG93Q29udGVudCA9IDE7XFxuLy8g5piv5ZCm5pi+56S66K+E6K6677yM5pi+56S6LzEg5LiN5pi+56S6LzBcXG52YXIgc2hvd0NvbW1lbnQgPSAxO1xcbi8vIOaYr+WQpumakOiXj+WbvueJh++8jOmakOiXjy8xIOS4jemakOiXjy8wXFxudmFyIGhpZGVJbWcgPSAwO1xcbi8vIOS9v+eUqCBlbW9qaSDlm77moIfmm7/mjaLmlofmnKzvvIzkvb/nlKgvMSDkuI3kvb/nlKgvMFxcbnZhciB1c2VFbW9qaSA9IDE7XFxuLy8g6K+E6K6655So5oi36aKc6ImyXFxudmFyIHVzZXJDb2xvciA9IFxcXCIjMjk3OUZGXFxcIjtcXG4vLyDor4Torrrlm57lpI3lvJXnlKjnlKjmiLfpopzoibJcXG52YXIgcXVvdGVVc2VyQ29sb3IgPSBcXFwiYmxhY2tcXFwiO1xcblxcbi8vIOaYr+WQpuaYvuekuuWhq+WGmSBUb2tlbiDmj5DnpLrvvIzmmL7npLovMSDkuI3mmL7npLovMFxcbnZhciBzaG93SW5wdXRUb2tlblRpcHMgPSAxO1xcbi8vIOaYr+WQpuW8gOWQr+aUtuiXjy/ngrnotZ7nu5Pmnpzmj5DnpLrvvIzmmK8vMSDlkKYvMFxcbnZhciByZXN1bHRUaXBzID0gMTtcXG4vLyDnrKzlh6DlpZflm77moIfvvIwtMeS4uumaj+acuu+8jOS7juS4i+mdouS4ieS4quaVsOe7hOaMkemAiVxcbnZhciBpY29uSW5kZXggPSAtMTtcXG4vLyDmlLbol4/lm77moIdcXG52YXIgc3Rhckljb25zID0gWyBcXG4gICAgXFxcImhpa2VyOi8vZmlsZXMvaWNvbi9iYnPmlLbol48uc3ZnXFxcIixcXG4vKidodHRwczovL3d3dy5lYXN5aWNvbi5uZXQvYXBpL3Jlc2l6ZUFwaS5waHA/aWQ9MTI4NjIxNyZzaXplPTEyOCcsKi9cXG5dO1xcbnZhciBzdGFySWNvbnNXZWJNYXBwaW5nID0gW1xcbiAgICBcXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL1JlYm9yblEvY2RuLmhpa2VyL2ljb25zL2Jic+aUtuiXjy5zdmdcXFwiXFxuXTtcXG4vLyDngrnotZ7lm77moIdcXG52YXIgbGlrZUljb25zID0gWyBcXG4gICAgXFxcImhpa2VyOi8vZmlsZXMvaWNvbi9iYnPngrnotZ4uc3ZnXFxcIixcXG4vKidodHRwczovL3d3dy5lYXN5aWNvbi5uZXQvYXBpL3Jlc2l6ZUFwaS5waHA/aWQ9MTI4ODIxNyZzaXplPTEyOCcsXFxuICAgICdodHRwczovL3d3dy5lYXN5aWNvbi5uZXQvYXBpL3Jlc2l6ZUFwaS5waHA/aWQ9MTIxMTUwNyZzaXplPTEyOCcsXFxuICAgICdodHRwczovL3d3dy5lYXN5aWNvbi5uZXQvYXBpL3Jlc2l6ZUFwaS5waHA/aWQ9MTIzOTUxMSZzaXplPTEyOCcqL1xcbl07XFxudmFyIGxpa2VJY29uc1dlYk1hcHBpbmcgPSBbXFxuICAgIFxcXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvUmVib3JuUS9jZG4uaGlrZXIvaWNvbnMvYmJz54K56LWeLnN2Z1xcXCJcXG5dO1xcbi8vIOWbnuWkjeWbvuagh1xcbnZhciBjb21tZW50SWNvbnMgPSBbIFxcbiAgICBcXFwiaGlrZXI6Ly9maWxlcy9pY29uL2Jic+WbnuWkjS5zdmdcXFwiLFxcbi8qJ2h0dHBzOi8vd3d3LmVhc3lpY29uLm5ldC9hcGkvcmVzaXplQXBpLnBocD9pZD0xMjM5NDk1JnNpemU9MTI4JywqL1xcbl07XFxudmFyIGNvbW1lbnRJY29uc1dlYk1hcHBpbmcgPSBbXFxuICAgIFxcXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvUmVib3JuUS9jZG4uaGlrZXIvaWNvbnMvYmJz5Zue5aSNLnN2Z1xcXCJcXG5dO1xcbi8vIOWOn+aWh+eroOWbvuagh1xcbi8qdmFyIGFydGljbGVJY29ucyA9IFsgJ2h0dHBzOi8vd3d3LmVhc3lpY29uLm5ldC9hcGkvcmVzaXplQXBpLnBocD9pZD0xMjM4NTIyJnNpemU9MTI4JyxcXG5dOyovXFxuaWYgKCFmaWxlRXhpc3Qoc3Rhckljb25zWzBdKSkge1xcbiAgICB3cml0ZUZpbGUoc3Rhckljb25zWzBdLCByZXF1ZXN0KHN0YXJJY29uc1dlYk1hcHBpbmdbMF0pKTtcXG59XFxuaWYgKCFmaWxlRXhpc3QobGlrZUljb25zWzBdKSkge1xcbiAgICB3cml0ZUZpbGUobGlrZUljb25zWzBdLCByZXF1ZXN0KGxpa2VJY29uc1dlYk1hcHBpbmdbMF0pKTtcXG59XFxuaWYgKCFmaWxlRXhpc3QoY29tbWVudEljb25zWzBdKSkge1xcbiAgICB3cml0ZUZpbGUoY29tbWVudEljb25zWzBdLCByZXF1ZXN0KGNvbW1lbnRJY29uc1dlYk1hcHBpbmdbMF0pKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIuWvjOaWh+acrOmAmueUqOWHveaVsFwiLFwicGF0aFwiOlwicmljaHRleHRcIixcInJ1bGVcIjpcImpzOlxcbmxldCBpbWdFcnJvciA9ICc8cD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+5Zu+54mH5pqC5pe25peg5rOV5pi+56S677yM6Iul6KaB5p+l55yL6K+3PGEgaHJlZj1cXFwiJyArIE1ZX1VSTCArICdcXFwiPuiuv+mXruWOn+aWhzwvYT48L2ZvbnQ+PC9wPic7XFxuU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlV2l0aENvbmZpcm0gPSBmdW5jdGlvbiAoY29uZmlybVZhbHVlLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9IHRoaXM7XFxuICAgIGlmIChjb25maXJtVmFsdWUpIHtcXG4gICAgICAgIHJldHVyblZhbHVlID0gdGhpcy5yZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpXFxuICAgIH1cXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xcbn07XFxuU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlV2l0aENhbGxiYWNrID0gZnVuY3Rpb24gKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUsIGNhbGxiYWNrKSB7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9IHRoaXM7XFxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7XFxuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKHRoaXMsIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXG59O1xcbmZ1bmN0aW9uIGltZ1RhZyhjb250ZXh0LCBpbWdVcmwpIHtcXG4gICAgbGV0IHJlcGxhY2VTdHJpbmcgPSBpbWdVcmwgPT09ICcnID8gaW1nRXJyb3IgOiAnPHA+PHNob3dpbWcgc3JjPVxcXCInICsgKGltZ1VybCArICdAUmVmZXJlcj1odHRwczovL2hhaWt1b3NoaWppZS5jbicpICsgJ1xcXCI+PC9wPic7XFxuICAgIGlmIChoaWRlSW1nKSB7XFxuICAgICAgICByZXBsYWNlU3RyaW5nID0gaW1nVXJsID09PSAnJyA/IGltZ0Vycm9yIDogJzxwPjxhIGhyZWY9XFxcIicgKyBpbWdVcmwgKyAnXFxcIj5b54K55Ye75p+l55yL5aSn5Zu+XTwvYT48L3A+JztcXG4gICAgfVxcbiAgICByZXR1cm4gY29udGV4dC5yZXBsYWNlKC88aW1nIGRhdGEtdj4vZywgcmVwbGFjZVN0cmluZyk7XFxufVxcbmZ1bmN0aW9uIGltZ1RhZ1JlcGxhY2VtZW50Mihjb250ZXh0LCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XFxuICAgIGxldCBtYXRjaEFycmF5ID0gY29udGV4dC5tYXRjaChzZWFyY2hWYWx1ZSk7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9IGNvbnRleHQ7XFxuICAgIGlmIChtYXRjaEFycmF5ICE9IG51bGwpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hBcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdGVtID0gbWF0Y2hBcnJheVtpXTtcXG4gICAgICAgICAgICAvPGltZyAoc3JjfGRhdGEtc3JjKT1cXFwiKC4qPylcXFwiKFtcXFxcc1xcXFxTXSo/KT4vLnRlc3QoaXRlbSk7XFxuICAgICAgICAgICAgbGV0IGltZ1VybCA9IFJlZ0V4cC4kMjtcXG4gICAgICAgICAgICBpZiAoaW1nVXJsICE9PSAnJykge1xcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlLnJlcGxhY2UoaXRlbSwgcmVwbGFjZVZhbHVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBpbWdUYWcocmV0dXJuVmFsdWUsIGltZ1VybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXG59XFxuZnVuY3Rpb24gYWJicmV2aWF0ZVJlcGx5VGV4dChjb250ZXh0LCB0ZXh0QXJyYXkpIHtcXG4gICAgbGV0IGNvbnRlbnQgPSBjb250ZXh0O1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRBcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IHRleHQgPSBwYXJzZURvbUZvckh0bWwodGV4dEFycmF5W2ldLCBcXFwicCYmVGV4dFxcXCIpO1xcbiAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gMzApIHtcXG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKHRleHQsIHRleHQuc3Vic3RyaW5nKDAsIDMwKSArIFxcXCIuLi4uLi5cXFwiKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY29udGVudDtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLluJblrZDor6bmg4VcIixcInBhdGhcIjpcImRldGFpbFwiLFwicnVsZVwiOlwianM6XFxudmFyIHJlcyA9IHt9O1xcbnZhciBkID0gW107XFxudmFyIHVybFNwbGl0cyA9IE1ZX1VSTC5zcGxpdChcXFwiI1xcXCIpO1xcbnZhciBtVXJsID0gdXJsU3BsaXRzWzBdO1xcbnZhciBwYWdlID0gdXJsU3BsaXRzWzFdO1xcbnZhciBjb2xUeXBlID0gJ3JpY2hfdGV4dCc7XFxuLy8gbVVybCA9IE1ZX1BBUkFNUy5saW5rXFxuLy8gbG9nKE1ZX1VSTClcXG5cXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3NldHRpbmdzJykpLnJ1bGUpXFxuLyoqXFxuICog55So5oi3IFRva2VuICjpnIDopoHlhYjnmbvlvZXmiY3og73ojrflj5YpXFxuICpcXG4gKiDmipPljIUgQ29va2llIOS4reeahCB1c2VyVG9rZW49IOWQjumdoumCo+S4suS4nOilv1xcbiAqIOaIllxcbiAqIOS4jeWhq+WGmeWbuuWumuWAvCDliJnpnIDphY3lkIjkuJPnlKjmj5Lku7boh6rliqjojrflj5ZcXG4gKiDkvYbmr4/mrKHov5DooYzop4bnlYzpg73pnIDmiZPlvIDkuIDmrKHorrrlnZtcXG4gKi9cXG52YXIgdG9rZW4gPSBnZXRJdGVtKCdoaWtlcmJic190b2tlbicsICcnKTtcXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3JpY2h0ZXh0JykpLnJ1bGUpXFxuXFxuaWYgKHBhZ2UgPiAxKSB7XFxuXFxuICAgIGxldCBjdXJzb3IgPSBnZXRWYXIoXFxcImN1cnNvclxcXCIpO1xcbiAgICBpZiAocGFnZSA9PT0gJzInKSBjdXJzb3IgPSBnZXRWYXIoXFxcImZpcnN0X3BhZ2VfY3Vyc29yXFxcIik7XFxuICAgIGN1cnNvciA9IGN1cnNvciA9PT0gJycgPyAnMCcgOiBjdXJzb3I7XFxuXFxuICAgIGxldCB1cmxUZW1wbGF0ZSA9IFxcXCJodHRwOi8vaGFpa3Vvc2hpamllLmNuL2FwaS9jb21tZW50L2xpc3Q/ZW50aXR5VHlwZT10b3BpYyZlbnRpdHlJZD17ZW50aXR5SWR9JmN1cnNvcj17Y3Vyc29yfVxcXCI7XFxuICAgIGlmICgvdG9waWNcXFxcLyhcXFxcZCspLy50ZXN0KE1ZX1VSTCkgPT09IHRydWUpIHtcXG4gICAgICAgIGxldCBlbnRpdHlJZCA9IFJlZ0V4cC4kMTtcXG4gICAgICAgIGlmIChlbnRpdHlJZCAhPSBudWxsICYmIGVudGl0eUlkICE9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGxldCBub01vcmUgPSBnZXRWYXIoXFxcIm5vTW9yZVxcXCIgKyBlbnRpdHlJZCk7XFxuICAgICAgICAgICAgbm9Nb3JlID0gbm9Nb3JlID09PSAnJyA/ICcwJyA6IG5vTW9yZTtcXG4gICAgICAgICAgICB1cmxUZW1wbGF0ZSA9IHVybFRlbXBsYXRlLnJlcGxhY2UoXFxcIntlbnRpdHlJZH1cXFwiLCBlbnRpdHlJZCk7XFxuICAgICAgICAgICAgdXJsID0gdXJsVGVtcGxhdGUucmVwbGFjZShcXFwie2N1cnNvcn1cXFwiLCBjdXJzb3IpO1xcbiAgICAgICAgICAgIC8vIHVybCA9IFxcXCJodHRwOi8vaGFpa3Vvc2hpamllLmNuL2FwaS9jb21tZW50L2xpc3Q/ZW50aXR5VHlwZT10b3BpYyZlbnRpdHlJZD0zOTgmY3Vyc29yPTkxODNcXFwiO1xcbiAgICAgICAgICAgIGxldCBqc29uID0ge307XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UoZmV0Y2godXJsLCB7fSkpO1xcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGpzb24uZGF0YTtcXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBkYXRhLnJlc3VsdHM7XFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzICE9IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBub3dUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2N1cnNvcicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRhdGEuY3Vyc29yXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRpbWVEaWZmKG5vd1RpbWUsIGNyZWF0ZVRpbWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRlLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbihmbXQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG8gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiTStcXFwiOiB0aGlzLmdldE1vbnRoKCkgKyAxLCAvL+aciOS7vVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImQrXFxcIjogdGhpcy5nZXREYXRlKCksIC8v5pelXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiaCtcXFwiOiB0aGlzLmdldEhvdXJzKCksIC8v5bCP5pe2XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibStcXFwiOiB0aGlzLmdldE1pbnV0ZXMoKSwgLy/liIZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJzK1xcXCI6IHRoaXMuZ2V0U2Vjb25kcygpLCAvL+enklxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInErXFxcIjogTWF0aC5mbG9vcigodGhpcy5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJTXFxcIjogdGhpcy5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enklxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLyh5KykvLnRlc3QoZm10KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAodGhpcy5nZXRGdWxsWWVhcigpICsgXFxcIlxcXCIpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgaW4gbykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoXFxcIihcXFwiICsgayArIFxcXCIpXFxcIikudGVzdChmbXQpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoUmVnRXhwLiQxLmxlbmd0aCA9PT0gMSkgPyAob1trXSkgOiAoKFxcXCIwMFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXCJcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlKGNyZWF0ZVRpbWUpLmZvcm1hdChcXFwieXl5eS1NTS1kZCBoaDptbTpzc1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lRGlmZiA9IG5vd1RpbWUgLSBjcmVhdGVUaW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXlzID0gTWF0aC5mbG9vcih0aW1lRGlmZiAvICgyNCAqIDM2MDAgKiAxMDAwKSk7IC8vIOiuoeeul+WHuuWkqeaVsFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXlMZWF2ZSA9IHRpbWVEaWZmICUgKDI0ICogMzYwMCAqIDEwMDApOyAvLyDorqHnrpflpKnmlbDlkI7liankvZnnmoTml7bpl7RcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaG91cnMgPSBNYXRoLmZsb29yKGRheUxlYXZlIC8gKDM2MDAgKiAxMDAwKSk7IC8vIOiuoeeul+WkqeaVsOWQjuWJqeS9meeahOWwj+aXtuaVsFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBob3VyTGVhdmUgPSB0aW1lRGlmZiAlICgzNjAwICogMTAwMCk7IC8vIOiuoeeul+WJqeS9meWwj+aXtuWQjuWJqeS9meeahOavq+enkuaVsFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihob3VyTGVhdmUgLyAoNjAgKiAxMDAwKSk7IC8vIOiuoeeul+WJqeS9meeahOWIhumSn+aVsFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwIDwgZGF5cyAmJiBkYXlzIDwgMzEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSA9IGRheXMgKyBcXFwi5aSp5YmNXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvdXJzID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSA9IGhvdXJzICsgXFxcIuWwj+aXtuWJjVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lID0gbWludXRlcyArIFxcXCLliIbpkp/liY1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3VsdHNbaV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF1b3RlQ29udGVudCA9ICcnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucXVvdGUgIT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGUgPSByZXN1bHQucXVvdGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VEb21Gb3JIdG1sKHF1b3RlLmNvbnRlbnQsICdib2R5JiZIdG1sJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuaWNrbmFtZSA9IHF1b3RlLnVzZXIubmlja25hbWU7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYmxvZy5jc2RuLm5ldC9Hcm9vdEJhYnkvYXJ0aWNsZS9kZXRhaWxzLzk5OTgwMzk1XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjcmVhdGVUaW1lID0gcXVvdGUudXNlci5jcmVhdGVUaW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZSA9IHRpbWVEaWZmKG5vd1RpbWUsIGNyZWF0ZVRpbWUpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFbXFxcXHNcXFxcU10uKj88XFxcXC9hPi9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tbWVudFJlcGx5VGV4dEFycmF5ID0gY29udGVudC5tYXRjaCgvPHBbXFxcXHNcXFxcU10uKj88XFxcXC9wPi9nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhYmJyZXZpYXRlUmVwbHlUZXh0KGNvbnRlbnQsIGNvbW1lbnRSZXBseVRleHRBcnJheSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlQ29udGVudCA9ICc8YmxvY2txdW90ZSBjbGFzcz1cXFwiY29tbWVudC1xdW90ZVxcXCI+PGRpdiBjbGFzcz1cXFwiY29tbWVudC1xdW90ZS11c2VyXFxcIj48YSBjbGFzcz1cXFwicXVvdGUtbmlja25hbWVcXFwiPjxmb250IGNvbG9yPVxcXCInICsgcXVvdGVVc2VyQ29sb3IgKyAnXFxcIj4nICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pY2tuYW1lICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2ZvbnQ+PC9hPjxzcGFuIGNsYXNzPVxcXCJxdW90ZS10aW1lXFxcIj48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxcXHRcXFxcdCcgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9mb250Pjwvc3Bhbj48L2Rpdj48ZGl2IGl0ZW1wcm9wPVxcXCJ0ZXh0XFxcIj4nICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PjwvYmxvY2txdW90ZT4nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9ICc8cD4nICsgcmVzdWx0LmNvbnRlbnQgKyAnPC9wPic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1ldGEgPSAnPGJyPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiJyArIHVzZXJDb2xvciArICdcXFwiPicgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudXNlci5uaWNrbmFtZSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2ZvbnQ+XFxcXHRcXFxcdDxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZURpZmYobm93VGltZSwgcmVzdWx0LmNyZWF0ZVRpbWUpICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcXFx0XFxcXHTlm57lpI0nICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZm9udD48L3NtYWxsPic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRDb250ZW50ID0gcXVvdGVDb250ZW50ICsgY29udGVudCArIG1ldGE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY29tbWVudENvbnRlbnRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxpbWcgY2xhc3M9XFxcImF2YXRhcihbXFxcXHNcXFxcU10qPyk+L2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDwocCkoW1xcXFxzXFxcXFNdKj8pPil8PHA+fDxcXFxcL3A+L2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZVdpdGhDYWxsYmFjaygvPGltZyAoc3JjfGRhdGEtc3JjKT1cXFwiKC4qPylcXFwiKFtcXFxcc1xcXFxTXSo/KT4vZywgXFxcIjxpbWcgZGF0YS12PlxcXCIsIGltZ1RhZ1JlcGxhY2VtZW50MilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxpbWcoW1xcXFxzXFxcXFNdKj8pPi9nLCBpbWdFcnJvcilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxzaG93aW1nL2csICc8aW1nJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBNWV9VUkwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vTW9yZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPHA+PC9wPlxcXCIgKyAnPGNlbnRlcj48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+5bey5peg5pu05aSa6K+E6K66PC9mb250PjwvY2VudGVyPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnbm9Nb3JlJyArIGVudGl0eUlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIH1cXG4gICAgfVxcbn0gZWxzZSB7XFxuICAgIHZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGpzID0gcGFyc2VEb20oaHRtbCwgJy5tYWluLWNvbnRlbnQmJkh0bWwnKTtcXG4gICAgICAgIHZhciBoYXNSdWxlID0gMDtcXG5cXG4gICAgICAgIC8vIHNldEVycm9yKGh0bWwpO1xcblxcbiAgICAgICAgdHJ5IHtcXG5cXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSAnPHA+PC9wPjxiaWcgc3R5bGU9XFxcInBhZGRpbmctbGVmdDogMTVweFxcXCI+PHN0cm9uZz4nICsgcGFyc2VEb21Gb3JIdG1sKGh0bWwsICcudG9waWMtaGVhZGVyLWNlbnRlciYmaDEmJkh0bWwnKSArIFxcXCI8L3N0cm9uZz48L2JpZz5cXFwiO1xcbiAgICAgICAgICAgIGxldCBtZXRhID0gJyc7XFxuICAgICAgICAgICAgLy8gcGFyc2VEb21Gb3JIdG1sKGh0bWwsJy50b3BpYy1oZWFkZXItY2VudGVyJiYudG9waWMtbWV0YSYmSHRtbCcpXFxuICAgICAgICAgICAgbGV0IGNvdW50ID0gJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjogZ3JleVxcXCI+JyArIHBhcnNlRG9tRm9ySHRtbChodG1sLCAnLnRvcGljLWhlYWRlci1jZW50ZXImJi50b3BpYy1oZWFkZXItcmlnaHQmJlRleHQnKSArIFxcXCI8L3NwYW4+XFxcIjtcXG5cXG4gICAgICAgICAgICBpZiAoc2hvd01ldGEpIHtcXG4gICAgICAgICAgICAgICAgbGV0IG1ldGFJdGVtcyA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy50b3BpYy1tZXRhJiYubWV0YS1pdGVtJyk7XFxuICAgICAgICAgICAgICAgIC8vIHNldEVycm9yKEpTT04uc3RyaW5naWZ5KG1ldGFJdGVtcykpO1xcbiAgICAgICAgICAgICAgICBsZXQgbWV0YU5vZGUgPSBwYXJzZURvbUZvckh0bWwobWV0YUl0ZW1zWzJdLCAnVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBtZXRhID0gJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgcGFyc2VEb21Gb3JIdG1sKG1ldGFJdGVtc1swXSwgJ1RleHQnKSArXFxuICAgICAgICAgICAgICAgICAgICAnICAnICtcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChtZXRhSXRlbXNbMV0sICdUZXh0JykgK1xcbiAgICAgICAgICAgICAgICAgICAgJyAgJyArXFxuICAgICAgICAgICAgICAgICAgICAnPC9mb250Pjxmb250IGNvbG9yPVxcXCInICsgbm9kZUNvbG9yICsgJ1xcXCI+JyArIG1ldGFOb2RlICsgJzwvZm9udD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JztcXG4gICAgICAgICAgICAgICAgbGV0IG1ldGFUYWdzID0gcGFyc2VEb21Gb3JBcnJheSgnPGRpdj4nICsgbWV0YUl0ZW1zWzNdICsgJzwvZGl2PicsICdkaXYmJi50YWcnKTtcXG4gICAgICAgICAgICAgICAgLy8gc2V0RXJyb3IoSlNPTi5zdHJpbmdpZnkobWV0YVRhZ3MpKTtcXG4gICAgICAgICAgICAgICAgbGV0IG1ldGFUYWcgPSAnJztcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhVGFncy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbWV0YVRhZyA9IChtZXRhVGFnID09PSAnJyA/IG1ldGFUYWcgOiAobWV0YVRhZyArICcgICcpKSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKG1ldGFUYWdzW2ldLCAnVGV4dCcpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gbWV0YVRhZyA9IG1ldGFUYWcucmVwbGFjZSgn572u6aG2JywgJ+KAnOKAnOe9rumhtuKAneKAnScpO1xcbiAgICAgICAgICAgICAgICBtZXRhU2l6ZSA9IG1ldGFTaXplID09PSAnJyA/ICdzbWFsbCcgOiBtZXRhU2l6ZTtcXG4gICAgICAgICAgICAgICAgbWV0YSA9ICc8JyArIG1ldGFTaXplICsgJz4nICsgbWV0YSArICcgICcgKyBtZXRhVGFnICsgJzwvZm9udD48LycgKyBtZXRhU2l6ZSArICc+JyArICc8YnI+JztcXG4gICAgICAgICAgICAgICAgLy8gc2V0RXJyb3IobWV0YSk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIC8vIPCfkY3wn4+74p2k77iP8J+noeKZoeKZpfCfkqzwn5GB77iP4p6/8JOBulxcbiAgICAgICAgICAgIGlmICh1c2VFbW9qaSlcXG4gICAgICAgICAgICAgICAgY291bnQgPSBjb3VudC5yZXBsYWNlKFxcXCLojrfotZ7vvJpcXFwiLCBcXFwi4p2k77iPIFxcXCIpXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxcXCLor4TorrrvvJpcXFwiLCBcXFwi8J+SrCBcXFwiKVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcXFwi5p+l55yL77yaXFxcIiwgXFxcIvCfkYHvuI8gXFxcIik7XFxuXFxuICAgICAgICAgICAgbGV0IGhlYWRlciA9IFxcXCJcXFwiICsgdGl0bGUgKyAnXFxcXHQ8c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxhIGhyZWY9XFxcIicgKyBNWV9VUkwgKyAnXFxcIj5b5p+l55yL5Y6f5paHXTwvYT48L2ZvbnQ+PC9zbWFsbD4nICsgXFxcIjxicj5cXFwiICsgbWV0YSArIGNvdW50ICsgJyc7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGhlYWRlcixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKylcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgaWYgKHNob3dDb250ZW50KSB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCAnLmNvbnRlbnQmJkh0bWwnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2VXaXRoQ2FsbGJhY2soLzxpbWcgKHNyY3xkYXRhLXNyYyk9XFxcIiguKj8pXFxcIihbXFxcXHNcXFxcU10qPyk+L2csIFxcXCI8aW1nIGRhdGEtdj5cXFwiLCBpbWdUYWdSZXBsYWNlbWVudDIpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGltZyhbXFxcXHNcXFxcU10qPyk+L2csIGltZ0Vycm9yKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxzaG93aW1nL2csICc8aW1nJylcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oPChkaXYpKFtcXFxcc1xcXFxTXSo/KT4pfDxkaXY+fDxcXFxcL2Rpdj4vZywgJycpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCI8cD48L3A+XFxcIiArIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJycsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4qPynvv6UoLio/Ke+/pSguKikvO1xcbiAgICAgICAgICAgIGlmIChqcy5pbmRleE9mKCc+5rW36ZiUJykgIT09IC0xKSB7XFxuXFxuICAgICAgICAgICAgICAgIC8qaWYgKHNob3dDb250ZW50KSB7XFxuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAyOyBpKyspXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0qL1xcblxcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gXFxcInRleHRfMVxcXCI7XFxuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0ganMubWF0Y2goLz7mtbfpmJRbXFxcXHNcXFxcU10qPzxcXFxcLy9nKTtcXG4gICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCAmJiBsaXN0Lmxlbmd0aCAhPT0gMCkgaGFzUnVsZSA9IDE7XFxuICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwgJiYgbGlzdC5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPHA+PC9wPlxcXCIgKyBcXFwiPGJpZz48Yj7mnKzmlofmiYDmnInop4TliJnkuIDplK7lr7zlhaU8L2I+PC9iaWc+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBsaXN0W2pdLnNwbGl0KCc+JylbMV0uc3BsaXQoJzwvJylbMF07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbVRpdGxlID0gdGl0bGU7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVnRXhwLnRlc3QodGl0bGUpID09PSB0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gXFxcInRleHRfM1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSBtVGl0bGUgPSBcXFwi5LiA6ZSu5a+85YWlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhciByZWdFeHAxID0gLyh0aXRsZVxcXCI6XFxcIiguKj8pXFxcIil8KGJhc2U2NDpcXFxcL1xcXFwvQCguKj8pQCl8KCguKj8pQCkvO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXRFcnJvciAoUmVnRXhwLiQyKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBSZWdFeHAuJDM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZSA9IChtVGl0bGUgIT0gbnVsbCAmJiBtVGl0bGUgIT09ICcnKSA/IG1UaXRsZSA6IHRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFJlZ0V4cC4kMikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaG9tZV9ydWxlXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvdGl0bGVcXFwiOlxcXCIoLio/KVxcXCIvLnRlc3QobVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBSZWdFeHAuJDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJob21lX3J1bGVfdjJcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9iYXNlNjQ6XFxcXC9cXFxcL0AoLio/KUAvLnRlc3QobVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBSZWdFeHAuJDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJqc191cmxcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8oLio/KUAvLnRlc3QobVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBSZWdFeHAuJDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJob21lX3J1bGVfdXJsXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBcXFwi6aaW6aG15ZCI6ZuGXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImJvb2ttYXJrX3VybFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gXFxcIuS5puetvuWQiOmbhlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IChtVGl0bGUgIT0gbnVsbCAmJiBtVGl0bGUgIT09ICcnKSA/IG1UaXRsZSA6IHRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA+IDE0KSBjb2wgPSBcXFwidGV4dF8yXFxcIjtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfwn5SU4oCY4oCY4oCZ4oCZPGI+IOeCueWHu+WvvOWFpSA8L2I+8J+UlCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KGxpc3Rbal0uc3BsaXQoJz4nKVsxXS5zcGxpdCgnPC8nKVswXS5yZXBsYWNlKC9hbXA7L2csICcnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJmx0Oy9nLCAnPCcpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csICc+JykpKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZVxcbiAgICAgICAgICAgIGlmIChqcy5pbmRleE9mKCc8Y29kZT7mlrnlnIYnKSAhPT0gLTEpIHtcXG5cXG4gICAgICAgICAgICAgICAgLyppZiAoc2hvd0NvbnRlbnQpIHtcXG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDI7IGkrKylcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0ganMubWF0Y2goLzxjb2RlPuaWueWchltcXFxcc1xcXFxTXSo/PFxcXFwvY29kZS9nKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gbnVsbCAmJiBsaXN0Lmxlbmd0aCAhPT0gMCkgaGFzUnVsZSA9IDE7XFxuICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwgJiYgbGlzdC5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPHA+PC9wPlxcXCIgKyBcXFwiPGJpZz48Yj7mnKzmlofmiYDmnInop4TliJnkuIDplK7lr7zlhaU8L2I+PC9iaWc+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwgJ2NvZGUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtVGl0bGUgPSB0aXRsZTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWdFeHAudGVzdCh0aXRsZSkgPT09IHRydWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBcXFwidGV4dF8zXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIG1UaXRsZSA9IFxcXCLkuIDplK7lr7zlhaVcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSAobVRpdGxlICE9IG51bGwgJiYgbVRpdGxlICE9PSAnJykgPyBtVGl0bGUgOiB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChSZWdFeHAuJDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInNvdXJjZVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3RpdGxlXFxcIjpcXFwiKC4qPylcXFwiLy50ZXN0KG1UaXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAobVRpdGxlICE9IG51bGwgJiYgbVRpdGxlICE9PSAnJykgPyBtVGl0bGUgOiB0aXRsZTtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfngrnlh7vlr7zlhaUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChsaXN0W2pdLnNwbGl0KCc+JylbMV0uc3BsaXQoJzwvJylbMF0ucmVwbGFjZSgvYW1wOy9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcblxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpZiAodG9rZW4gIT09ICcnKSB7XFxuICAgICAgICAgICAgICAgIGxldCBzdGFySWNvbiA9IHN0YXJJY29uc1swXTtcXG4gICAgICAgICAgICAgICAgbGV0IGxpa2VJY29uID0gbGlrZUljb25zWzBdO1xcbiAgICAgICAgICAgICAgICBsZXQgY29tbWVudEljb24gPSBjb21tZW50SWNvbnNbMF07XFxuICAgICAgICAgICAgICAgIC8vIGxldCBhcnRpY2xlSWNvbiA9IGFydGljbGVJY29uc1swXTtcXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJJY29uTWF4ID0gc3Rhckljb25zLmxlbmd0aCAtIDE7XFxuICAgICAgICAgICAgICAgIGxldCBsaWtlSWNvbk1heCA9IGxpa2VJY29ucy5sZW5ndGggLSAxO1xcbiAgICAgICAgICAgICAgICBsZXQgY29tbWVudEljb25NYXggPSBjb21tZW50SWNvbnMubGVuZ3RoIC0gMTtcXG4gICAgICAgICAgICAgICAgLy8gbGV0IGFydGljbGVJY29uTWF4ID0gYXJ0aWNsZUljb25zLmxlbmd0aC0xO1xcbiAgICAgICAgICAgICAgICBpZiAoaWNvbkluZGV4ID09PSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1heExlbiA9IE1hdGgubWF4KHN0YXJJY29uTWF4LCBsaWtlSWNvbk1heCwgY29tbWVudEljb25NYXggLyosIGFydGljbGVJY29uTWF4Ki8gKTtcXG4gICAgICAgICAgICAgICAgICAgIGljb25JbmRleCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAobWF4TGVuICsgMSkpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBzdGFySWNvbiA9IHN0YXJJY29uc1tpY29uSW5kZXggPiBzdGFySWNvbk1heCA/IHN0YXJJY29uTWF4IDogaWNvbkluZGV4XTtcXG4gICAgICAgICAgICAgICAgbGlrZUljb24gPSBsaWtlSWNvbnNbaWNvbkluZGV4ID4gbGlrZUljb25NYXggPyBsaWtlSWNvbk1heCA6IGljb25JbmRleF07XFxuICAgICAgICAgICAgICAgIGNvbW1lbnRJY29uID0gY29tbWVudEljb25zW2ljb25JbmRleCA+IGNvbW1lbnRJY29uTWF4ID8gY29tbWVudEljb25NYXggOiBpY29uSW5kZXhdO1xcbiAgICAgICAgICAgICAgICAvLyBhcnRpY2xlSWNvbiA9IGFydGljbGVJY29uc1tpY29uSW5kZXggPiBhcnRpY2xlSWNvbk1heCA/IGFydGljbGVJY29uTWF4IDogaWNvbkluZGV4XTtcXG4gICAgICAgICAgICAgICAgbGV0IGlzU3RhcnJlZCA9IDA7XFxuICAgICAgICAgICAgICAgIGxldCBzdGFyU3RhdHVzID0gJyc7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBzdGFyU3RhdHVzID0gcGFyc2VEb21Gb3JIdG1sKGh0bWwsIFxcXCIuZmF2b3JpdGUuYWN0aXZlJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN0YXJTdGF0dXMgPSAnJ1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChzdGFyU3RhdHVzICE9PSAnJykgaXNTdGFycmVkID0gMTtcXG4gICAgICAgICAgICAgICAgLy8gc2V0RXJyb3Ioc3RhclN0YXR1cyk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHsgLy8gIHRleHRfY2VudGVyXzEgaWNvbl9zbWFsbF8zXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXNTdGFycmVkID09PSAwID8gJ+aUtuiXjycgOiAn5bey5pS26JePJyxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHN0YXJJY29uLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKG1VcmwpLmxhenlSdWxlKCh0b2tlbiwgcmVzdWx0VGlwcywgaXNTdGFycmVkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRva2VuID0gIGdldEl0ZW0oJ2hpa2VyYmJzX3Rva2VuJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtVXJsID0gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL3RvcGljXFxcXC8oXFxcXGQrKS8udGVzdChtVXJsKSA9PT0gdHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5SWQgPSBSZWdFeHAuJDE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRpdHlJZCAhPSBudWxsICYmIGVudGl0eUlkICE9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJVcmwgPSAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vYXBpL3RvcGljL2Zhdm9yaXRlLycgKyBlbnRpdHlJZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N0YXJyZWQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFyVXJsID0gJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL2FwaS9mYXZvcml0ZS9kZWxldGU/ZW50aXR5VHlwZT10b3BpYyZlbnRpdHlJZD0nICsgZW50aXR5SWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLVVzZXItVG9rZW4nOiB0b2tlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2V0RXJyb3IgKG9wdGlvbnMpOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RhclJlc3VsdCA9IGZldGNoKHN0YXJVcmwsIG9wdGlvbnMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzZXRFcnJvciAoc3RhclJlc3VsdCk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRUaXBzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhclJlc3VsdCA9IEpTT04ucGFyc2Uoc3RhclJlc3VsdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHN0YXJSZXN1bHQubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhclJlc3VsdC5tZXNzYWdlID09PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhclJlc3VsdC5zdWNjZXNzID09PSB0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gaXNTdGFycmVkID09PSAxID8gJ+W3suWPlua2iOaUtuiXjycgOiAn5pS26JeP5oiQ5YqfJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhclJlc3VsdC5tZXNzYWdlID09PSAn6K+35YWI55m75b2VJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdoaWtlcmJic190b2tlbicsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICfor7flhYjnmbvlvZUnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ3RvYXN0Oi8vJyArIG1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRva2VuLCByZXN1bHRUaXBzLCBpc1N0YXJyZWQpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goeyAvLyAgdGV4dF9jZW50ZXJfMSBpY29uX3NtYWxsXzNcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn54K56LWeJyxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGxpa2VJY29uLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKG1VcmwpLmxhenlSdWxlKCh0b2tlbiwgcmVzdWx0VGlwcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtVXJsID0gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHRva2VuID0gIGdldEl0ZW0oJ2hpa2VyYmJzX3Rva2VuJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gJyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC90b3BpY1xcXFwvKFxcXFxkKykvLnRlc3QobVVybCkgPT09IHRydWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVudGl0eUlkID0gUmVnRXhwLiQxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXR5SWQgIT0gbnVsbCAmJiBlbnRpdHlJZCAhPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaWtlVXJsID0gJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL2FwaS90b3BpYy9saWtlLycgKyBlbnRpdHlJZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtVXNlci1Ub2tlbic6IHRva2VuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2V0RXJyb3IgKG9wdGlvbnMpOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlrZVJlc3VsdCA9IGZldGNoKGxpa2VVcmwsIG9wdGlvbnMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGxpa2VSZXN1bHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFRpcHMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlUmVzdWx0ID0gSlNPTi5wYXJzZShsaWtlUmVzdWx0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbGlrZVJlc3VsdC5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWtlUmVzdWx0Lm1lc3NhZ2UgPT09ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWtlUmVzdWx0LnN1Y2Nlc3MgPT09IHRydWUpIG1lc3NhZ2UgPSAn54K56LWe5oiQ5YqfJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGlrZVJlc3VsdC5tZXNzYWdlID09PSAn6K+35YWI55m75b2VJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdoaWtlcmJic190b2tlbicsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICfor7flhYjnmbvlvZUnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ3RvYXN0Oi8vJyArIG1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VcXG4gICAgICAgICAgICAgICAgICAgIH0sIHRva2VuLCByZXN1bHRUaXBzKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Zue5aSNJyxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGNvbW1lbnRJY29uLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBtVXJsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvKmQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WOn+aWhycsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBhcnRpY2xlSWNvbixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogbVVybFxcbiAgICAgICAgICAgICAgICB9KTsqL1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFnZXRJdGVtKFxcXCJoaWtlcmJic190b2tlblxcXCIsIFxcXCJcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvZ2luUGFnZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3ZlcmlmeT9ydWxlPVxcXCIgKyBcXFwi6KeG55WM6K665Z2bUlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9naW5QYWdlID0gJ2Jhc2U2NDovLycgKyBiYXNlNjRFbmNvZGUobG9naW5QYWdlKHsgb25TdWNjZXNzKHVzZXJJbmZvKSB7IC8qbG9nKHVzZXJJbmZvKSovIH19KSlcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZyhsb2dpblBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPHA+PC9wPlxcXCIgKyAnPHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgJ+WmgumcgOaUtuiXj+aIlueCuei1nuWKn+iDve+8jOmcgOWFiCcgKyAnPGEgaHJlZj1cXFwiJyArIGxvZ2luUGFnZSArICdcXFwiPueZu+W9lTwvYT7kuIDmrKHlho3ov5Tlm57liLfmlrAnICsgXFxcIjwvZm9udD48L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChzaG93Q29tbWVudCkge1xcbiAgICAgICAgICAgICAgICAvKmlmIChoYXNSdWxlKSB7XFxuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAyOyBpKyspXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0qL1xcblxcbiAgICAgICAgICAgICAgICAvY3Vyc29yOlxcXCIoLio/KVxcXCIvLnRlc3QoaHRtbCk7XFxuICAgICAgICAgICAgICAgIGxldCBjdXJzb3JUZW1wID0gUmVnRXhwLiQxO1xcbiAgICAgICAgICAgICAgICBsZXQgY3Vyc29yID0gKGN1cnNvclRlbXAgIT0gbnVsbCAmJiBjdXJzb3JUZW1wICE9PSAnJykgPyBjdXJzb3JUZW1wIDogJzAnO1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoe1xcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnY3Vyc29yJyxcXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjdXJzb3JcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih7XFxuICAgICAgICAgICAgICAgICAgICBrZXk6ICdmaXJzdF9wYWdlX2N1cnNvcicsXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3Vyc29yXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCI8cD48L3A+XFxcIiArIFxcXCI8YmlnPjxiPlxcXCIgKyBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy5jb21tZW50LXRpdGxlJiZIdG1sJykgKyBcXFwiPC9iPjwvYmlnPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgdmFyIHBsID0gcGFyc2VEb20oaHRtbCwgJy5jb21tZW50cyYmSHRtbCcpXFxuICAgICAgICAgICAgICAgICAgICAubWF0Y2goLzxsaVtcXFxcc1xcXFxTXSo/PFxcXFwvbGkvZyk7XFxuICAgICAgICAgICAgICAgIGlmIChwbCA9PSBudWxsIHx8IHBsLmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIjxwPjwvcD5cXFwiICsgJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj7mmoLml6Dor4Torro8L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBsLmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gLyg8KGRpdnxwKShbXFxcXHNcXFxcU10qPyk+KXw8ZGl2Pnw8cD58PFxcXFwvZGl2Pnw8XFxcXC9wPi9nXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRDb250ZW50ID0gcGFyc2VEb21Gb3JIdG1sKHBsW2pdLCAnLmNvbW1lbnQtY29udGVudCYmSHRtbCcpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nIGNsYXNzPVxcXCJhdmF0YXIoW1xcXFxzXFxcXFNdKj8pPi9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyg8KHApKFtcXFxcc1xcXFxTXSo/KT4pfDxwPnw8XFxcXC9wPi9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2VXaXRoQ2FsbGJhY2soLzxpbWcgKHNyY3xkYXRhLXNyYyk9XFxcIiguKj8pXFxcIihbXFxcXHNcXFxcU10qPyk+L2csIFxcXCI8aW1nIGRhdGEtdj5cXFwiLCBpbWdUYWdSZXBsYWNlbWVudDIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nKFtcXFxcc1xcXFxTXSo/KT4vZywgaW1nRXJyb3IpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88c2hvd2ltZy9nLCAnPGltZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50UmVwbHlUZXh0ID0gcGFyc2VEb21Gb3JIdG1sKHBsW2pdLCAnLmNvbW1lbnQtcXVvdGUmJkh0bWwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRRdW90ZVVzZXJuYW1lID0gcGFyc2VEb21Gb3JIdG1sKGNvbW1lbnRSZXBseVRleHQsIFxcXCIucXVvdGUtbmlja25hbWUmJkh0bWxcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRRdW90ZVRpbWUgPSBwYXJzZURvbUZvckh0bWwoY29tbWVudFJlcGx5VGV4dCwgXFxcIi5xdW90ZS10aW1lJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRSZXBseVRleHQgPSBjb21tZW50UmVwbHlUZXh0XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFbXFxcXHNcXFxcU10uKj88XFxcXC9hPi9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50UmVwbHlUZXh0QXJyYXkgPSBjb21tZW50UmVwbHlUZXh0Lm1hdGNoKC88cFtcXFxcc1xcXFxTXS4qPzxcXFxcL3A+L2cpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50Q29udGVudCA9IGFiYnJldmlhdGVSZXBseVRleHQoY29tbWVudENvbnRlbnQsIGNvbW1lbnRSZXBseVRleHRBcnJheSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRRdW90ZVVzZXJuYW1lLCAnPGZvbnQgY29sb3I9XFxcIicgKyBxdW90ZVVzZXJDb2xvciArICdcXFwiPicgKyBjb21tZW50UXVvdGVVc2VybmFtZSArICc8L2ZvbnQ+JylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRRdW90ZVRpbWUsICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIGNvbW1lbnRRdW90ZVRpbWUgKyAnPC9mb250PicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHsgLy8gcCwtMlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIjxwPjwvcD5cXFwiICsgY29tbWVudENvbnRlbnQgKyAnPGJyPjxzbWFsbD4nICsgcGFyc2VEb21Gb3JIdG1sKHBsW2pdLCAnLmNvbW1lbnQtbmlja25hbWUmJkh0bWwnKS5yZXBsYWNlKC88YVtcXFxcc1xcXFxTXS4qPz4vZywgJzxmb250IGNvbG9yPVxcXCInICsgdXNlckNvbG9yICsgJ1xcXCI+JykucmVwbGFjZSgvPFxcXFwvYT4vZywgXFxcIjwvZm9udD5cXFwiKSArICdcXFxcdFxcXFx0PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyBwYXJzZURvbUZvckh0bWwocGxbal0sICcuY29tbWVudC1tZXRhLS1zcGFuJiZUZXh0JykgKyAnPC9mb250Pjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8cCBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+6K+l6aG16Z2i5peg5rOV6Kej5p6Q5oiW6K+d6aKY5LiN5a2Y5ZyoPC9wPjxwIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcIj48YSBocmVmPVxcXCInICsgTVlfVVJMICsgJ1xcXCI+5p+l55yL5Y6f5paHPC9hPjwvcD4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5cXG5yZXMuZGF0YSA9IGQ7XFxuc2V0SG9tZVJlc3VsdChyZXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aqM6K+B6aG16Z2iXCIsXCJwYXRoXCI6XCJ2ZXJpZnlcIixcInJ1bGVcIjpcImV2YWxQcml2YXRlSlMoXFxcIjNjTFhqdEJDMEczZElBZjMyRVkwblFNNmhpMjVvY0h5TjBaY2NvUXA5cnZWNnpKOTlrSDBicnRFUnNjenVXK2NjczJ5UXlWSVU2aTJnR0dHQnRzZzNJNEoxUVRCeUxqT1ZBR0Vhb0hvVHFLMHA1YkY1YTZXQy9FQVZHRVFob2tvSVl4WFgrUGdDZWN1cWx1N0F0U2tueHd3R2RlNVU3RHhSSnRXWEhjS1dvMjBMVHhZQjhSM3JkeEVsbnV6T2ZFOXhocFU1K25GWmZZVWNZUnQwOC9xVGZMWW54eEpsN3M4R2hYT2ZLeDB6aFA1WUw5V0RtVHFUaHlrSjNXaVNqQmxpNnhJQ1dKclNQUWgzcm9YRnBhZ2owckRwbFZjTHZhMEIrS1YvcEc1Q1BSWXdQSzVJV0xtZng5WmJQa1ZMd1NPYUxuZ0NUcjhLMWNZVFZOYUhOUk5pWGJ5dU5QUWdMOFEwcHRxanl3QnhFb3AyaTVKbjVDdy8wUE1NY0lZazV2QUdDcGJlSVJCQm1NZGFDcU9UYUFvTUI4WDdRTTNxTWs0YkV5R3Q3OFRuS2ZKa0NhTU9RdUErbG8zYW0xak52WllrQ0o0ak9SakkxWmdUUXFFN1BmTFpOUlRQQ3RkKzMvdW9vNEF1VTM2eVdYWHhpamlrb2phVGJzdlZpRnl2djhLT3NCTWlvTGZuL1g0dVRMYVZSRENDYnBEc1RJZXRkbFFoQTBPQW5FOGw3MHRWNTg3S25CWnNhR1o5UE1rdk0zOHNRd0x4OXo4bE1WZzlSQmJBZS9lYjhzVnArTHRvNDdFVHZNekI1dHEzN25Ud1h1anREWVdIbnMrbEh5dm1qYU42NG5TMzRCWDBBZVZtVzcwa0NtNFg5UDkyc0tBOVNLKy9OSHNxZjEzQ092NzNSOWpvU1hxTGsyUG5sNDVmcGUvRWdsUTZKSDFmWkIrUW9EeGdSSjFXc0dnanJQK09Sb3owRGNPTFYyZ3BwUjBTUEFzWWpkbkJrTzFjQ1E2eCtXdWZRcjdKVzlsZUdHRFUyYXZNUU4wcUxPRlZFZEZldGhQZStiK0x3YlNmM3o2NVVvR2hGcmJWSXRGQU8vazV3L1RXMVYyNm9pbEZZeVhGWit2N0VIRThONVhicVBmTEc1QUFVRXZyY2hTNFdaQ25Dd2thMW9CUTcxOTYvUU9qalEyRjNzTVI5ZDREcjdVK1VZUW1IaDNGc0hMNzdOY2dYMmtaRVN3bnpGWjNiOHMvbUtnYWU3cDgvbGhNRmNCeVp4QUM3TGRXSHlkeDBoWitRdHJVL052ejRKRTVDM251WVdzNlBJOGZqMnFuM3NXeVQyOFBoVS9VbG1qRjVhQStlcHlWQytjWExmLzVzSkpDTmJiUklYcndDcDRXM3RwMHM3YzBoOWRmTmw4K29VOWxUakhuWU5aNmtRMktXY05rOWErUGlmMGNZckxHRytxY2ZXQURPVjA5ZlJ4NGliWUczK3d0cHBwMEk1TUVHemUzL3lHb1lwc0xUNXV5cjZDS1dRVm5qeHhjODBRd3JLT0ZrZ3haN21mcGszUUdab2FMQzM2THc0KzNKcUIwZlVzMk44MUU3RGRvMHVzeGU3SEdyLzltc0QrdmhEalYrOGJudER5TzU1eFVLNmlkT1BROGp3TTFuSjFkdTJsbVhwQnhiMFE1enhseUZwVlk1MG5kd2Z1aE55dWlZUWk1YTh4V0ZIV3J5SUJ2SnFibngwK0VGYktjemJyV21PUTNJUFMzK3NaZGprRlVQeE9XQk1FMDljaVgvcStNZzFFQWhmcmg3Y3pESUg1cnpnVzdaVnFHMGFVZEIxcEE5aG9jcGQrYlowLzR1akl3K01yT0dPTkhteHl2cTFjTFJEUU16NWk4L0kwVzNacFNoVWdzNkpQRStjaEQ1QWY1d3JoVjEzOTk5YnhpTGFNa1JtVGozUnUzVXRDeXl2TFNOWldjL3NJbi92V1NBSFU5blFVRUJHVXBsYnFNNkpkajJXaDNNM3loNnlLSmpkTGNZQVNlMWVOVFdzK2FlNWpvV0NZOEx6dXBuLzYvR0FpaThTN2hndE9mZmZleHA2ZEZHMnQ3dGJ6M3kzSGhBUTlHdU1DM2J6VDFiWlh1Nzg1VFlpblpKakFNNzIyVC9mVkNidFhPRW1Gc2N3aEdJS0ZPazJxOFZjVWM0YWtKYmNYVzRWc1g1UEVDcnlJVDhGVFovOW1hME9sWHdNNHcxU2k2dGlQOWpxVUZlOXNtaTd0dmltampkbWU4LzhXK2pTcjBvWHhIdzVnWHpqbE85RVJkd0E4UjViYXdFcjFLekdMeUFwYjlrM2tlVnJiYzI5cFI4Vjg4eldmV1IwbE10NHRFYVQxdHBjMjZhTVZ5SERLVzBjMTc3R2loYk5EN1d6WDNIdzVBQ3dVY2NLcHpQZXU4TEFhSGplbFNjdGRVNWp2V2tNaHJSZ0I1SUlxc3pLVU5HWUJXaVV4K1JLK2tNQXdoUktEcWlMbGVXQ3V5b2pwNk5SRmtIWkZGakJuZUZPNnFjNzZIU3c0emtpTlFKck8wS2dyR2JUZXYreGhtck84WDA2bSt0a2swZWNzRjRRYVRxUmpKRkEwcmladFRwYmMwYkwwdjBxdHh4cWRsRVc4dmlFcEV1K1M3bkFXeUo2bDJYaThmZTNyeHlzV1lJcVRVVVJzU3V1TlFlMzN1NWhEbXZnNnJveHJnYzhMN3BSSDZJREhDdkJMWHcrSjJ6dHRDeFdvZk1CNVhJY1k0dmE3ZnlBa1UvU0kxUTcwQ295OHQ0ZkZCakI0RGJ2VlNhK2FNbHVxS29QYUEvTVFNdHF1aUdKM1Z5aVJIamRLbG1PSmh1SFEzTVVUdXhDMGhEYVZPR0I1OW1tRlM5M2JsRmJLWXpBK3pXSFBnMW8xQzltOXJKZU5hcGY4RUEzOVFpTnZuVjdrckNJekFleGdVOWdNS05ZZEorNlhTdVUrNkJLRGU1TXozdkFWMjdZa0pDd216dCtCcGFlL09xbjEyOWdzWm1md1J5TDNVR3lpQWRaZTNNK1krMlpxd0d5THZRYTJnd0NGTVdxU1RKMmxtT1FIcWV6anI2NDhrd205WGpVRkV6WThIbG5MSzh0STFsWnord2lmKzlaSUFkVDJQSGJ2QWJNck5BV2lOUy91aDRpMlJreVJveDdoUFNmeVVmd3hRZnFMYVE2U0l5QjFuNGRlTmRQQlBzbmE2RWtPamxjVWZwY0hjbzVMR1RvU2E5UEN4WVpOUHV4M0lCaXR6eVVWd1QxT1M3V01XRG1xV293UDRBVG5LY1E5UnRKZ0hTUzY2bGhxZGtXSytvSnA1RFlMSHFHRmI5eDlTVENjY2N6Yk82RDF4ZFREOEd3bEtDSVFrV2ZxdjBJdmdDWnlzdEdFZTJFMnhGYjl5Y21sZjZuMFdxWkdFOHZVeXZuMDNmR3NkYndRT003T2xETDdEdnp6c09RbksrL2JDYzRuUlBpb0o2dUlsMWpGNXhFNU1uMk1JWEFOM1hWZVAyYlcyK3RBZEIwWnQ3MzNVR3lpQWRaZTNNK1krMlpxd0d5THZRYTJnd0NGTVdxU1RKMmxtT1FIcVJzTlZjdzFvelFYZklQVzJMUXNsdFVvM3NHVVZjbE1sMFlFU25qY21EejhQVm5WTCt6MS92ZEZDOHplV3JFdE5tZm1MbC9NeEJyRUdQRkcxK2N0QkYvOWFrVEZ3ZU9oWEM1VGYzeW5IcktQUFhIOVp6VHc0T2Q5L2JlMjZidU53Q1VpWFEzanlEWHVxOEhnM3pmZDVBbmtkSW43aHUwQmRkZlNZTDRTaER2V2tqVVVKa3BYYS8vWEZ0YXhNUXQ4RFArY1Fhb2ppeU1KTU84RzFxbCtnOEdzckFuZWJmV0ZraUlWNDROVmdnZW5lMVVHQ1dTM2Qxc1BJYUhuckF0RW9VQ3QrQVJySGdMWldpWjZPZHRxWWVTSXY3ajYrT0o5U0U3TkFFSkFJa2gvUmhsVTdpdng3RzFLUGFzSWlucnNpZ1dvbjdmSnhVMUpNRWx0NEVSNHdDK3dPNXNsRmZvZ05rL09QeTNCRHBKeURXbGFBTm8wL05YTldXenI1eWxUK0ZqSXZUN29OR1hKMFdYaU9RMU5iTjlaOG5mazMyRzlEdklwMWxBa2wyblJDN0xkV0h5ZHgwaForUXRyVS9Odno0U1ppSzhlUjltM0MyMzArZjBKakNEQUZ0cWtOU1ZUL0ZZK3YrajAwYjNzNDRQS0R1TXJvWmpQWEg0KzcyYkpQWEhPcURrVW95d0hmdnQvNHN6MmlZRndCRzFZVEJaeHhlcDRWY1orSGNPQ3l5dkxTTlpXYy9zSW4vdldTQUhVOXBPZUt0SkdYM1puVXd4YWNxbyt0V2E3dUw4QWJOMDlOV1FuMTBreGQzMjNTZnU1UmJJY25MRUczeWVxVUlOK1pKNVdxZVR6QU5uQTlFZTZ3ZUcyL3cyVXJ4MkVHMi8zakJqS2lJV3MyTlhQSmxhQ3pwaWRSYTBpczJGSlBWbGgvTXNyeTBqV1ZuUDdDSi83MWtnQjFQYmhaUzQ5ZXM2NGhnbzhzblUrbXQzWHgvMFAzRWQ5ZG1kdUhvdHJ6QmtFdGxnYUJpQyt6MlNwY3hCOWdaNkdYeXBMU1hXYWorcUVVYkdKS0V4K2pLL3Z5eXZMU05aV2Mvc0luL3ZXU0FIVTl2Yk81SHhJZVJoL3BsZUJOKys5YWVxOWdmQWNwTzdTT09FNmh2MzNwSmQyTlhXbzd5d3JoR2RjSk41Vnl0QXJ6alBFSnYyUExCZW11WDh1eEF0RDBVTDQ0U1VPeGtnbDI4dVAzZzRSR0N3L1IzbFV5cjdWaTVaMkM0RTdVK0ViaU5NK0xvT3NDSVZLUExJek1ZOVVJNTRaV0FuOFBDOE9BU25VbUt0NXM0VEx2aDhXK3UxbEwvMnVLTVFoZlQyZFBQQllzbkVlczViYWJFYnRHeEphR29VMWl6bkJIS3h2RnR0b1ZaczRSVVQ3Y2tHRXNROXAxRWpCZ2N2V2hlREVJeWJhQ3A3MXYxMUp2RDRheG9VMDFzQmg1T1RDbDdEdm9acUR3b2l4cDBPNW1NN3JHV0JoUTNOOUQ5Uks0RkRXVlpvZVVLbmE1cDJJQXdjdHloNElSbld0NjlOZzJKQlRUUDBkMjFRcnB5L2dheGVDbjlOVDdvbmk0UEJPamd4YkJlVWFLTzdEY0ZvL1VyZStpR2pzRG1Bek5oa2JERnlRUXZCUlFVcVdaSUxSN21UZG5ZSjNXRkowR250R1R2RW0rME9SaGEvdEt1dzBTcUxJaElYeENVeW4xNmhVbEFDUVRoMkdqSnd3RUFqMHl5dkxTTlpXYy9zSW4vdldTQUhVOW9TWFgvMEVWejJucENyNXNLWVZRbDA4aTE0QVBHNzA1aWhxbmJQY1hVTE5jL0hWTTFDZVpvUGt3L2ZKOVZsd1NnT29UZGdWUmM3NXZVeVNNT1lDcjZZdU1VYTNUdGt1Z2hWdDBJcXJLb1N6ZVl5QkZmM2RZK3U0Q2gyQTljeUwvaFlMNXFsTXNMZTdGemZDMG8yOVlFWW8rYjVxcVR2aEJPREdCQ2ZiVVN5d3l5dkxTTlpXYy9zSW4vdldTQUhVOXQwZXpxNkF0cFU0RldwRUxvVXJKanNEcUUzWUZVWE8rYjFNa2pEbUFxK21vM3NZbFlhTFMzTUZHNVc4R1hKbG5jc3J5MGpXVm5QN0NKLzcxa2dCMVBZNDk5bXA4U3MvQzN4OG1XaWpjVWVoOVI3TDF5REp3elhNNzBWV1NCZDFwaVl3Rm1XcVhuOGZYb2grSmo2bkpFNVNvM0dTOXcrSmZGaC9Ib09BODRxQ1czVjUrRG9zV1Q3ZVFSY0pCLzZVY204dnVHSWlraFhiOUtpeUtJWUJSdy9aejltd2hhdGM0aFN0T1h4NUtSMGRLWVB5WFFUNm9wd3dmL3l5cS9iWDJKWlVDekZWYVErbnp5QThOQis1SnBQT2xETDdEdnp6c09RbksrL2JDYzRuMGVkQ1R4UWIvT3R2U1NFSlR1WUh4RWZVdU1Ia1JYbkplRjJlMHlUcVRucmRXL1d3K2theVplczBDS0pzREgyTDZEek5hWU9HajRkV3FrVDZTNWVmZWJkbFpSVWFtZVFJalEvTmVxQk5nZFZuM05SanBzRW9yOG5KNWMydzNjM0R5eXZMU05aV2Mvc0luL3ZXU0FIVTlrODVHMGV1OG94T1d1ZUJMY3docFV2SHNwMVBqUFNrY0dsSm4rWHhWK2NSS0NvaDVUd05rUkNTWjdjVmQ0Vk12dEJOb3hWTFEzUTZSUzh1TS9WU0syTW4xOVFSeElkYStUeCtuS2ZENEdSZ0MvaVBmZWxDWXV1OUJ4Uis4VlBCRWZYamozZUN6NXdjYmdZV2RucnRTRnhHTzhGUDJnUE1zV1NzZmZmaCtjN2NveWpNaVBXKzBDa01BSUxWTktvR0dPZVJZNFlEY3UwcStFZUU1M0F2Ym9uQWQ2VVBXV2dSNndMSVBuVFVmdEZqRloxNzF6WDJlTnRjNkVXQUExZlpwQWtHdDR3K2VxR2gyU2txd0l6VmZIWUM3Ym96Y0JuWUZDbGQ5RlhPT2hmZjdTSlYwSk1ScEU1VGFBZ1VkODQzUkd1Q0ZscEhSM1Fqc2hxRlBwWDZPNnBmZ0tEYnBBTHZzMWg4VHpUVmc0enZWSmE4SjlxMXNKeXdxczJQNURKNDQzK2hURjdlUFVTUEJCYy81TGlnaWprPVxcXCIpXCJ9XSxcInBhcmFtc1wiOlwie1xcXCJ1cmxcXFwiOlxcXCJodHRwczovL2hhaWt1b3NoaWppZS5jbi90b3BpYy84NDQwI2Z5cGFnZSNub0hpc3RvcnkjXFxcIn1cIixcInNhdmVkXCI6ZmFsc2UsXCJ0aXRsZVwiOlwi6KeG55WM6K665Z2bUlwiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImh0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3RvcGljLzg0NDAjZnlwYWdlI25vSGlzdG9yeSNcIixcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbnZhciByZXMgPSB7fTtcXG52YXIgZCA9IFtdO1xcbnZhciB1cmxTcGxpdHMgPSBNWV9VUkwuc3BsaXQoXFxcIiNcXFwiKTtcXG52YXIgbVVybCA9IHVybFNwbGl0c1swXTtcXG52YXIgcGFnZSA9IHVybFNwbGl0c1sxXTtcXG52YXIgY29sVHlwZSA9ICdyaWNoX3RleHQnO1xcbi8vIG1VcmwgPSBNWV9QQVJBTVMubGlua1xcbi8vIGxvZyhNWV9VUkwpXFxuXFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9zZXR0aW5ncycpKS5ydWxlKVxcbi8qKlxcbiAqIOeUqOaItyBUb2tlbiAo6ZyA6KaB5YWI55m75b2V5omN6IO96I635Y+WKVxcbiAqXFxuICog5oqT5YyFIENvb2tpZSDkuK3nmoQgdXNlclRva2VuPSDlkI7pnaLpgqPkuLLkuJzopb9cXG4gKiDmiJZcXG4gKiDkuI3loavlhpnlm7rlrprlgLwg5YiZ6ZyA6YWN5ZCI5LiT55So5o+S5Lu26Ieq5Yqo6I635Y+WXFxuICog5L2G5q+P5qyh6L+Q6KGM6KeG55WM6YO96ZyA5omT5byA5LiA5qyh6K665Z2bXFxuICovXFxudmFyIHRva2VuID0gZ2V0SXRlbSgnaGlrZXJiYnNfdG9rZW4nLCAnJyk7XFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9yaWNodGV4dCcpKS5ydWxlKVxcblxcbmlmIChwYWdlID4gMSkge1xcblxcbiAgICBsZXQgY3Vyc29yID0gZ2V0VmFyKFxcXCJjdXJzb3JcXFwiKTtcXG4gICAgaWYgKHBhZ2UgPT09ICcyJykgY3Vyc29yID0gZ2V0VmFyKFxcXCJmaXJzdF9wYWdlX2N1cnNvclxcXCIpO1xcbiAgICBjdXJzb3IgPSBjdXJzb3IgPT09ICcnID8gJzAnIDogY3Vyc29yO1xcblxcbiAgICBsZXQgdXJsVGVtcGxhdGUgPSBcXFwiaHR0cDovL2hhaWt1b3NoaWppZS5jbi9hcGkvY29tbWVudC9saXN0P2VudGl0eVR5cGU9dG9waWMmZW50aXR5SWQ9e2VudGl0eUlkfSZjdXJzb3I9e2N1cnNvcn1cXFwiO1xcbiAgICBpZiAoL3RvcGljXFxcXC8oXFxcXGQrKS8udGVzdChNWV9VUkwpID09PSB0cnVlKSB7XFxuICAgICAgICBsZXQgZW50aXR5SWQgPSBSZWdFeHAuJDE7XFxuICAgICAgICBpZiAoZW50aXR5SWQgIT0gbnVsbCAmJiBlbnRpdHlJZCAhPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgbm9Nb3JlID0gZ2V0VmFyKFxcXCJub01vcmVcXFwiICsgZW50aXR5SWQpO1xcbiAgICAgICAgICAgIG5vTW9yZSA9IG5vTW9yZSA9PT0gJycgPyAnMCcgOiBub01vcmU7XFxuICAgICAgICAgICAgdXJsVGVtcGxhdGUgPSB1cmxUZW1wbGF0ZS5yZXBsYWNlKFxcXCJ7ZW50aXR5SWR9XFxcIiwgZW50aXR5SWQpO1xcbiAgICAgICAgICAgIHVybCA9IHVybFRlbXBsYXRlLnJlcGxhY2UoXFxcIntjdXJzb3J9XFxcIiwgY3Vyc29yKTtcXG4gICAgICAgICAgICAvLyB1cmwgPSBcXFwiaHR0cDovL2hhaWt1b3NoaWppZS5jbi9hcGkvY29tbWVudC9saXN0P2VudGl0eVR5cGU9dG9waWMmZW50aXR5SWQ9Mzk4JmN1cnNvcj05MTgzXFxcIjtcXG4gICAgICAgICAgICBsZXQganNvbiA9IHt9O1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGZldGNoKHVybCwge30pKTtcXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBqc29uLmRhdGE7XFxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRzID0gZGF0YS5yZXN1bHRzO1xcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cyAhPSBudWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbm93VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjdXJzb3InLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLmN1cnNvclxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0aW1lRGlmZihub3dUaW1lLCBjcmVhdGVUaW1lKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oZm10KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIk0rXFxcIjogdGhpcy5nZXRNb250aCgpICsgMSwgLy/mnIjku71cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJkK1xcXCI6IHRoaXMuZ2V0RGF0ZSgpLCAvL+aXpVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImgrXFxcIjogdGhpcy5nZXRIb3VycygpLCAvL+Wwj+aXtlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm0rXFxcIjogdGhpcy5nZXRNaW51dGVzKCksIC8v5YiGXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicytcXFwiOiB0aGlzLmdldFNlY29uZHMoKSwgLy/np5JcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJxK1xcXCI6IE1hdGguZmxvb3IoKHRoaXMuZ2V0TW9udGgoKSArIDMpIC8gMyksIC8v5a2j5bqmXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiU1xcXCI6IHRoaXMuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5JcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKHRoaXMuZ2V0RnVsbFllYXIoKSArIFxcXCJcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrIGluIG8pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXCIoXFxcIiArIGsgKyBcXFwiKVxcXCIpLnRlc3QoZm10KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT09IDEpID8gKG9ba10pIDogKChcXFwiMDBcXFwiICsgb1trXSkuc3Vic3RyKChcXFwiXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm10O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZShjcmVhdGVUaW1lKS5mb3JtYXQoXFxcInl5eXktTU0tZGQgaGg6bW06c3NcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZURpZmYgPSBub3dUaW1lIC0gY3JlYXRlVGltZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF5cyA9IE1hdGguZmxvb3IodGltZURpZmYgLyAoMjQgKiAzNjAwICogMTAwMCkpOyAvLyDorqHnrpflh7rlpKnmlbBcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF5TGVhdmUgPSB0aW1lRGlmZiAlICgyNCAqIDM2MDAgKiAxMDAwKTsgLy8g6K6h566X5aSp5pWw5ZCO5Ymp5L2Z55qE5pe26Ze0XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhvdXJzID0gTWF0aC5mbG9vcihkYXlMZWF2ZSAvICgzNjAwICogMTAwMCkpOyAvLyDorqHnrpflpKnmlbDlkI7liankvZnnmoTlsI/ml7bmlbBcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaG91ckxlYXZlID0gdGltZURpZmYgJSAoMzYwMCAqIDEwMDApOyAvLyDorqHnrpfliankvZnlsI/ml7blkI7liankvZnnmoTmr6vnp5LmlbBcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWludXRlcyA9IE1hdGguZmxvb3IoaG91ckxlYXZlIC8gKDYwICogMTAwMCkpOyAvLyDorqHnrpfliankvZnnmoTliIbpkp/mlbBcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8IGRheXMgJiYgZGF5cyA8IDMxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgPSBkYXlzICsgXFxcIuWkqeWJjVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRheXMgPCAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3VycyA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgPSBob3VycyArIFxcXCLlsI/ml7bliY1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSA9IG1pbnV0ZXMgKyBcXFwi5YiG6ZKf5YmNXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSByZXN1bHRzW2ldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdW90ZUNvbnRlbnQgPSAnJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnF1b3RlICE9IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF1b3RlID0gcmVzdWx0LnF1b3RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlRG9tRm9ySHRtbChxdW90ZS5jb250ZW50LCAnYm9keSYmSHRtbCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmlja25hbWUgPSBxdW90ZS51c2VyLm5pY2tuYW1lO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2Jsb2cuY3Nkbi5uZXQvR3Jvb3RCYWJ5L2FydGljbGUvZGV0YWlscy85OTk4MDM5NVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3JlYXRlVGltZSA9IHF1b3RlLnVzZXIuY3JlYXRlVGltZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWUgPSB0aW1lRGlmZihub3dUaW1lLCBjcmVhdGVUaW1lKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxhW1xcXFxzXFxcXFNdLio/PFxcXFwvYT4vZywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRSZXBseVRleHRBcnJheSA9IGNvbnRlbnQubWF0Y2goLzxwW1xcXFxzXFxcXFNdLio/PFxcXFwvcD4vZyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gYWJicmV2aWF0ZVJlcGx5VGV4dChjb250ZW50LCBjb21tZW50UmVwbHlUZXh0QXJyYXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZUNvbnRlbnQgPSAnPGJsb2NrcXVvdGUgY2xhc3M9XFxcImNvbW1lbnQtcXVvdGVcXFwiPjxkaXYgY2xhc3M9XFxcImNvbW1lbnQtcXVvdGUtdXNlclxcXCI+PGEgY2xhc3M9XFxcInF1b3RlLW5pY2tuYW1lXFxcIj48Zm9udCBjb2xvcj1cXFwiJyArIHF1b3RlVXNlckNvbG9yICsgJ1xcXCI+JyArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWNrbmFtZSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9mb250PjwvYT48c3BhbiBjbGFzcz1cXFwicXVvdGUtdGltZVxcXCI+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcXFx0XFxcXHQnICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZm9udD48L3NwYW4+PC9kaXY+PGRpdiBpdGVtcHJvcD1cXFwidGV4dFxcXCI+JyArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj48L2Jsb2NrcXVvdGU+JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAnPHA+JyArIHJlc3VsdC5jb250ZW50ICsgJzwvcD4nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXRhID0gJzxicj48c21hbGw+PGZvbnQgY29sb3I9XFxcIicgKyB1c2VyQ29sb3IgKyAnXFxcIj4nICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVzZXIubmlja25hbWUgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9mb250PlxcXFx0XFxcXHQ8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVEaWZmKG5vd1RpbWUsIHJlc3VsdC5jcmVhdGVUaW1lKSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXFxcdFxcXFx05Zue5aSNJyArXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2ZvbnQ+PC9zbWFsbD4nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50Q29udGVudCA9IHF1b3RlQ29udGVudCArIGNvbnRlbnQgKyBtZXRhO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNvbW1lbnRDb250ZW50XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nIGNsYXNzPVxcXCJhdmF0YXIoW1xcXFxzXFxcXFNdKj8pPi9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyg8KHApKFtcXFxcc1xcXFxTXSo/KT4pfDxwPnw8XFxcXC9wPi9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2VXaXRoQ2FsbGJhY2soLzxpbWcgKHNyY3xkYXRhLXNyYyk9XFxcIiguKj8pXFxcIihbXFxcXHNcXFxcU10qPyk+L2csIFxcXCI8aW1nIGRhdGEtdj5cXFwiLCBpbWdUYWdSZXBsYWNlbWVudDIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nKFtcXFxcc1xcXFxTXSo/KT4vZywgaW1nRXJyb3IpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88c2hvd2ltZy9nLCAnPGltZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChub01vcmUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIjxwPjwvcD5cXFwiICsgJzxjZW50ZXI+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPuW3suaXoOabtOWkmuivhOiuujwvZm9udD48L2NlbnRlcj4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcih7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ25vTW9yZScgKyBlbnRpdHlJZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICB9XFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICB2YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIHZhciBqcyA9IHBhcnNlRG9tKGh0bWwsICcubWFpbi1jb250ZW50JiZIdG1sJyk7XFxuICAgICAgICB2YXIgaGFzUnVsZSA9IDA7XFxuXFxuICAgICAgICAvLyBzZXRFcnJvcihodG1sKTtcXG5cXG4gICAgICAgIHRyeSB7XFxuXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gJzxwPjwvcD48YmlnIHN0eWxlPVxcXCJwYWRkaW5nLWxlZnQ6IDE1cHhcXFwiPjxzdHJvbmc+JyArIHBhcnNlRG9tRm9ySHRtbChodG1sLCAnLnRvcGljLWhlYWRlci1jZW50ZXImJmgxJiZIdG1sJykgKyBcXFwiPC9zdHJvbmc+PC9iaWc+XFxcIjtcXG4gICAgICAgICAgICBsZXQgbWV0YSA9ICcnO1xcbiAgICAgICAgICAgIC8vIHBhcnNlRG9tRm9ySHRtbChodG1sLCcudG9waWMtaGVhZGVyLWNlbnRlciYmLnRvcGljLW1ldGEmJkh0bWwnKVxcbiAgICAgICAgICAgIGxldCBjb3VudCA9ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IGdyZXlcXFwiPicgKyBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy50b3BpYy1oZWFkZXItY2VudGVyJiYudG9waWMtaGVhZGVyLXJpZ2h0JiZUZXh0JykgKyBcXFwiPC9zcGFuPlxcXCI7XFxuXFxuICAgICAgICAgICAgaWYgKHNob3dNZXRhKSB7XFxuICAgICAgICAgICAgICAgIGxldCBtZXRhSXRlbXMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcudG9waWMtbWV0YSYmLm1ldGEtaXRlbScpO1xcbiAgICAgICAgICAgICAgICAvLyBzZXRFcnJvcihKU09OLnN0cmluZ2lmeShtZXRhSXRlbXMpKTtcXG4gICAgICAgICAgICAgICAgbGV0IG1ldGFOb2RlID0gcGFyc2VEb21Gb3JIdG1sKG1ldGFJdGVtc1syXSwgJ1RleHQnKTtcXG4gICAgICAgICAgICAgICAgbWV0YSA9ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIHBhcnNlRG9tRm9ySHRtbChtZXRhSXRlbXNbMF0sICdUZXh0JykgK1xcbiAgICAgICAgICAgICAgICAgICAgJyAgJyArXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckh0bWwobWV0YUl0ZW1zWzFdLCAnVGV4dCcpICtcXG4gICAgICAgICAgICAgICAgICAgICcgICcgK1xcbiAgICAgICAgICAgICAgICAgICAgJzwvZm9udD48Zm9udCBjb2xvcj1cXFwiJyArIG5vZGVDb2xvciArICdcXFwiPicgKyBtZXRhTm9kZSArICc8L2ZvbnQ+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPic7XFxuICAgICAgICAgICAgICAgIGxldCBtZXRhVGFncyA9IHBhcnNlRG9tRm9yQXJyYXkoJzxkaXY+JyArIG1ldGFJdGVtc1szXSArICc8L2Rpdj4nLCAnZGl2JiYudGFnJyk7XFxuICAgICAgICAgICAgICAgIC8vIHNldEVycm9yKEpTT04uc3RyaW5naWZ5KG1ldGFUYWdzKSk7XFxuICAgICAgICAgICAgICAgIGxldCBtZXRhVGFnID0gJyc7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YVRhZ3MubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIG1ldGFUYWcgPSAobWV0YVRhZyA9PT0gJycgPyBtZXRhVGFnIDogKG1ldGFUYWcgKyAnICAnKSkgK1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChtZXRhVGFnc1tpXSwgJ1RleHQnKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIG1ldGFUYWcgPSBtZXRhVGFnLnJlcGxhY2UoJ+e9rumhticsICfigJzigJznva7pobbigJ3igJ0nKTtcXG4gICAgICAgICAgICAgICAgbWV0YVNpemUgPSBtZXRhU2l6ZSA9PT0gJycgPyAnc21hbGwnIDogbWV0YVNpemU7XFxuICAgICAgICAgICAgICAgIG1ldGEgPSAnPCcgKyBtZXRhU2l6ZSArICc+JyArIG1ldGEgKyAnICAnICsgbWV0YVRhZyArICc8L2ZvbnQ+PC8nICsgbWV0YVNpemUgKyAnPicgKyAnPGJyPic7XFxuICAgICAgICAgICAgICAgIC8vIHNldEVycm9yKG1ldGEpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAvLyDwn5GN8J+Pu+KdpO+4j/Cfp6HimaHimaXwn5Ks8J+Rge+4j+Kev/CTgbpcXG4gICAgICAgICAgICBpZiAodXNlRW1vamkpXFxuICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQucmVwbGFjZShcXFwi6I636LWe77yaXFxcIiwgXFxcIuKdpO+4jyBcXFwiKVxcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcXFwi6K+E6K6677yaXFxcIiwgXFxcIvCfkqwgXFxcIilcXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXFxcIuafpeeci++8mlxcXCIsIFxcXCLwn5GB77iPIFxcXCIpO1xcblxcbiAgICAgICAgICAgIGxldCBoZWFkZXIgPSBcXFwiXFxcIiArIHRpdGxlICsgJ1xcXFx0PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48YSBocmVmPVxcXCInICsgTVlfVVJMICsgJ1xcXCI+W+afpeeci+WOn+aWh108L2E+PC9mb250Pjwvc21hbGw+JyArIFxcXCI8YnI+XFxcIiArIG1ldGEgKyBjb3VudCArICcnO1xcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBoZWFkZXIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIGlmIChzaG93Q29udGVudCkge1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy5jb250ZW50JiZIdG1sJylcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88aW1nIChzcmN8ZGF0YS1zcmMpPVxcXCIoLio/KVxcXCIoW1xcXFxzXFxcXFNdKj8pPi9nLCBcXFwiPGltZyBkYXRhLXY+XFxcIiwgaW1nVGFnUmVwbGFjZW1lbnQyKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxpbWcoW1xcXFxzXFxcXFNdKj8pPi9nLCBpbWdFcnJvcilcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88c2hvd2ltZy9nLCAnPGltZycpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDwoZGl2KShbXFxcXHNcXFxcU10qPyk+KXw8ZGl2Pnw8XFxcXC9kaXY+L2csICcnKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPHA+PC9wPlxcXCIgKyB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgcmVnRXhwID0gLyguKj8p77+lKC4qPynvv6UoLiopLztcXG4gICAgICAgICAgICBpZiAoanMuaW5kZXhPZignPua1t+mYlCcpICE9PSAtMSkge1xcblxcbiAgICAgICAgICAgICAgICAvKmlmIChzaG93Q29udGVudCkge1xcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMjsgaSsrKVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IFxcXCJ0ZXh0XzFcXFwiO1xcbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IGpzLm1hdGNoKC8+5rW36ZiUW1xcXFxzXFxcXFNdKj88XFxcXC8vZyk7XFxuICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwgJiYgbGlzdC5sZW5ndGggIT09IDApIGhhc1J1bGUgPSAxO1xcbiAgICAgICAgICAgICAgICBpZiAobGlzdCAhPSBudWxsICYmIGxpc3QubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIjxwPjwvcD5cXFwiICsgXFxcIjxiaWc+PGI+5pys5paH5omA5pyJ6KeE5YiZ5LiA6ZSu5a+85YWlPC9iPjwvYmlnPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gbGlzdFtqXS5zcGxpdCgnPicpWzFdLnNwbGl0KCc8LycpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1UaXRsZSA9IHRpdGxlO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ0V4cC50ZXN0KHRpdGxlKSA9PT0gdHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IFxcXCJ0ZXh0XzNcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkgbVRpdGxlID0gXFxcIuS4gOmUruWvvOWFpVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YXIgcmVnRXhwMSA9IC8odGl0bGVcXFwiOlxcXCIoLio/KVxcXCIpfChiYXNlNjQ6XFxcXC9cXFxcL0AoLio/KUApfCgoLio/KUApLztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0RXJyb3IgKFJlZ0V4cC4kMilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSAobVRpdGxlICE9IG51bGwgJiYgbVRpdGxlICE9PSAnJykgPyBtVGl0bGUgOiB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChSZWdFeHAuJDIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImhvbWVfcnVsZVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3RpdGxlXFxcIjpcXFwiKC4qPylcXFwiLy50ZXN0KG1UaXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaG9tZV9ydWxlX3YyXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvYmFzZTY0OlxcXFwvXFxcXC9AKC4qPylALy50ZXN0KG1UaXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwianNfdXJsXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKC4qPylALy50ZXN0KG1UaXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaG9tZV9ydWxlX3VybFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gXFxcIummlumhteWQiOmbhlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJib29rbWFya191cmxcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZSA9IFxcXCLkuabnrb7lkIjpm4ZcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAobVRpdGxlICE9IG51bGwgJiYgbVRpdGxlICE9PSAnJykgPyBtVGl0bGUgOiB0aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAxNCkgY29sID0gXFxcInRleHRfMlxcXCI7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn8J+UlOKAmOKAmOKAmeKAmTxiPiDngrnlh7vlr7zlhaUgPC9iPvCflJQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChsaXN0W2pdLnNwbGl0KCc+JylbMV0uc3BsaXQoJzwvJylbMF0ucmVwbGFjZSgvYW1wOy9nLCAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2VcXG4gICAgICAgICAgICBpZiAoanMuaW5kZXhPZignPGNvZGU+5pa55ZyGJykgIT09IC0xKSB7XFxuXFxuICAgICAgICAgICAgICAgIC8qaWYgKHNob3dDb250ZW50KSB7XFxuICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAyOyBpKyspXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0qL1xcblxcbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IGpzLm1hdGNoKC88Y29kZT7mlrnlnIZbXFxcXHNcXFxcU10qPzxcXFxcL2NvZGUvZyk7XFxuXFxuICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwgJiYgbGlzdC5sZW5ndGggIT09IDApIGhhc1J1bGUgPSAxO1xcbiAgICAgICAgICAgICAgICBpZiAobGlzdCAhPSBudWxsICYmIGxpc3QubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIjxwPjwvcD5cXFwiICsgXFxcIjxiaWc+PGI+5pys5paH5omA5pyJ6KeE5YiZ5LiA6ZSu5a+85YWlPC9iPjwvYmlnPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICdjb2RlJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbVRpdGxlID0gdGl0bGU7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVnRXhwLnRlc3QodGl0bGUpID09PSB0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gXFxcInRleHRfM1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSBtVGl0bGUgPSBcXFwi5LiA6ZSu5a+85YWlXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZSA9IFJlZ0V4cC4kMztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gKG1UaXRsZSAhPSBudWxsICYmIG1UaXRsZSAhPT0gJycpID8gbVRpdGxlIDogdGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoUmVnRXhwLiQyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJzb3VyY2VcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC90aXRsZVxcXCI6XFxcIiguKj8pXFxcIi8udGVzdChtVGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZSA9IFJlZ0V4cC4kMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gKG1UaXRsZSAhPSBudWxsICYmIG1UaXRsZSAhPT0gJycpID8gbVRpdGxlIDogdGl0bGU7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn54K55Ye75a+85YWlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdydWxlOi8vJyArIGJhc2U2NEVuY29kZShkZWNvZGVVUklDb21wb25lbnQobGlzdFtqXS5zcGxpdCgnPicpWzFdLnNwbGl0KCc8LycpWzBdLnJlcGxhY2UoL2FtcDsvZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mbHQ7L2csICc8JylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaWYgKHRva2VuICE9PSAnJykge1xcbiAgICAgICAgICAgICAgICBsZXQgc3Rhckljb24gPSBzdGFySWNvbnNbMF07XFxuICAgICAgICAgICAgICAgIGxldCBsaWtlSWNvbiA9IGxpa2VJY29uc1swXTtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRJY29uID0gY29tbWVudEljb25zWzBdO1xcbiAgICAgICAgICAgICAgICAvLyBsZXQgYXJ0aWNsZUljb24gPSBhcnRpY2xlSWNvbnNbMF07XFxuICAgICAgICAgICAgICAgIGxldCBzdGFySWNvbk1heCA9IHN0YXJJY29ucy5sZW5ndGggLSAxO1xcbiAgICAgICAgICAgICAgICBsZXQgbGlrZUljb25NYXggPSBsaWtlSWNvbnMubGVuZ3RoIC0gMTtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRJY29uTWF4ID0gY29tbWVudEljb25zLmxlbmd0aCAtIDE7XFxuICAgICAgICAgICAgICAgIC8vIGxldCBhcnRpY2xlSWNvbk1heCA9IGFydGljbGVJY29ucy5sZW5ndGgtMTtcXG4gICAgICAgICAgICAgICAgaWYgKGljb25JbmRleCA9PT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBtYXhMZW4gPSBNYXRoLm1heChzdGFySWNvbk1heCwgbGlrZUljb25NYXgsIGNvbW1lbnRJY29uTWF4IC8qLCBhcnRpY2xlSWNvbk1heCovICk7XFxuICAgICAgICAgICAgICAgICAgICBpY29uSW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogKG1heExlbiArIDEpKSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgc3Rhckljb24gPSBzdGFySWNvbnNbaWNvbkluZGV4ID4gc3Rhckljb25NYXggPyBzdGFySWNvbk1heCA6IGljb25JbmRleF07XFxuICAgICAgICAgICAgICAgIGxpa2VJY29uID0gbGlrZUljb25zW2ljb25JbmRleCA+IGxpa2VJY29uTWF4ID8gbGlrZUljb25NYXggOiBpY29uSW5kZXhdO1xcbiAgICAgICAgICAgICAgICBjb21tZW50SWNvbiA9IGNvbW1lbnRJY29uc1tpY29uSW5kZXggPiBjb21tZW50SWNvbk1heCA/IGNvbW1lbnRJY29uTWF4IDogaWNvbkluZGV4XTtcXG4gICAgICAgICAgICAgICAgLy8gYXJ0aWNsZUljb24gPSBhcnRpY2xlSWNvbnNbaWNvbkluZGV4ID4gYXJ0aWNsZUljb25NYXggPyBhcnRpY2xlSWNvbk1heCA6IGljb25JbmRleF07XFxuICAgICAgICAgICAgICAgIGxldCBpc1N0YXJyZWQgPSAwO1xcbiAgICAgICAgICAgICAgICBsZXQgc3RhclN0YXR1cyA9ICcnO1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgc3RhclN0YXR1cyA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCBcXFwiLmZhdm9yaXRlLmFjdGl2ZSYmSHRtbFxcXCIpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICBzdGFyU3RhdHVzID0gJydcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoc3RhclN0YXR1cyAhPT0gJycpIGlzU3RhcnJlZCA9IDE7XFxuICAgICAgICAgICAgICAgIC8vIHNldEVycm9yKHN0YXJTdGF0dXMpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7IC8vICB0ZXh0X2NlbnRlcl8xIGljb25fc21hbGxfM1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGlzU3RhcnJlZCA9PT0gMCA/ICfmlLbol48nIDogJ+W3suaUtuiXjycsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBzdGFySWNvbixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChtVXJsKS5sYXp5UnVsZSgodG9rZW4sIHJlc3VsdFRpcHMsIGlzU3RhcnJlZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCB0b2tlbiA9ICBnZXRJdGVtKCdoaWtlcmJic190b2tlbicsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbVVybCA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gJyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC90b3BpY1xcXFwvKFxcXFxkKykvLnRlc3QobVVybCkgPT09IHRydWUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVudGl0eUlkID0gUmVnRXhwLiQxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXR5SWQgIT0gbnVsbCAmJiBlbnRpdHlJZCAhPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFyVXJsID0gJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL2FwaS90b3BpYy9mYXZvcml0ZS8nICsgZW50aXR5SWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdGFycmVkKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhclVybCA9ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi9hcGkvZmF2b3JpdGUvZGVsZXRlP2VudGl0eVR5cGU9dG9waWMmZW50aXR5SWQ9JyArIGVudGl0eUlkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWC1Vc2VyLVRva2VuJzogdG9rZW5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNldEVycm9yIChvcHRpb25zKTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJSZXN1bHQgPSBmZXRjaChzdGFyVXJsLCBvcHRpb25zKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2V0RXJyb3IgKHN0YXJSZXN1bHQpOyovXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VGlwcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJSZXN1bHQgPSBKU09OLnBhcnNlKHN0YXJSZXN1bHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzdGFyUmVzdWx0Lm1lc3NhZ2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJSZXN1bHQubWVzc2FnZSA9PT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJSZXN1bHQuc3VjY2VzcyA9PT0gdHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGlzU3RhcnJlZCA9PT0gMSA/ICflt7Llj5bmtojmlLbol48nIDogJ+aUtuiXj+aIkOWKnyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJSZXN1bHQubWVzc2FnZSA9PT0gJ+ivt+WFiOeZu+W9lScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaGlrZXJiYnNfdG9rZW4nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAn6K+35YWI55m75b2VJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICd0b2FzdDovLycgKyBtZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlXFxuICAgICAgICAgICAgICAgICAgICB9LCB0b2tlbiwgcmVzdWx0VGlwcywgaXNTdGFycmVkKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHsgLy8gIHRleHRfY2VudGVyXzEgaWNvbl9zbWFsbF8zXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eCuei1nicsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBsaWtlSWNvbixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChtVXJsKS5sYXp5UnVsZSgodG9rZW4sIHJlc3VsdFRpcHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbVVybCA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCB0b2tlbiA9ICBnZXRJdGVtKCdoaWtlcmJic190b2tlbicsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvdG9waWNcXFxcLyhcXFxcZCspLy50ZXN0KG1VcmwpID09PSB0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHlJZCA9IFJlZ0V4cC4kMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eUlkICE9IG51bGwgJiYgZW50aXR5SWQgIT09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlrZVVybCA9ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi9hcGkvdG9waWMvbGlrZS8nICsgZW50aXR5SWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLVVzZXItVG9rZW4nOiB0b2tlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnNldEVycm9yIChvcHRpb25zKTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpa2VSZXN1bHQgPSBmZXRjaChsaWtlVXJsLCBvcHRpb25zKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhsaWtlUmVzdWx0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRUaXBzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZVJlc3VsdCA9IEpTT04ucGFyc2UobGlrZVJlc3VsdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGxpa2VSZXN1bHQubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlrZVJlc3VsdC5tZXNzYWdlID09PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlrZVJlc3VsdC5zdWNjZXNzID09PSB0cnVlKSBtZXNzYWdlID0gJ+eCuei1nuaIkOWKnyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpa2VSZXN1bHQubWVzc2FnZSA9PT0gJ+ivt+WFiOeZu+W9lScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaGlrZXJiYnNfdG9rZW4nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAn6K+35YWI55m75b2VJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICd0b2FzdDovLycgKyBtZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlXFxuICAgICAgICAgICAgICAgICAgICB9LCB0b2tlbiwgcmVzdWx0VGlwcylcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WbnuWkjScsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBjb21tZW50SWNvbixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogbVVybFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLypkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfljp/mlocnLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogYXJ0aWNsZUljb24sXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMycsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IG1VcmxcXG4gICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICghZ2V0SXRlbShcXFwiaGlrZXJiYnNfdG9rZW5cXFwiLCBcXFwiXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBsb2dpblBhZ2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS92ZXJpZnk/cnVsZT1cXFwiICsgXFxcIuinhueVjOiuuuWdm1JcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZ2luUGFnZSA9ICdiYXNlNjQ6Ly8nICsgYmFzZTY0RW5jb2RlKGxvZ2luUGFnZSh7IG9uU3VjY2Vzcyh1c2VySW5mbykgeyAvKmxvZyh1c2VySW5mbykqLyB9fSkpXFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2cobG9naW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIjxwPjwvcD5cXFwiICsgJzxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArICflpoLpnIDmlLbol4/miJbngrnotZ7lip/og73vvIzpnIDlhYgnICsgJzxhIGhyZWY9XFxcIicgKyBsb2dpblBhZ2UgKyAnXFxcIj7nmbvlvZU8L2E+5LiA5qyh5YaN6L+U5Zue5Yi35pawJyArIFxcXCI8L2ZvbnQ+PC9zbWFsbD5cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpZiAoc2hvd0NvbW1lbnQpIHtcXG4gICAgICAgICAgICAgICAgLyppZiAoaGFzUnVsZSkge1xcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMjsgaSsrKVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9Ki9cXG5cXG4gICAgICAgICAgICAgICAgL2N1cnNvcjpcXFwiKC4qPylcXFwiLy50ZXN0KGh0bWwpO1xcbiAgICAgICAgICAgICAgICBsZXQgY3Vyc29yVGVtcCA9IFJlZ0V4cC4kMTtcXG4gICAgICAgICAgICAgICAgbGV0IGN1cnNvciA9IChjdXJzb3JUZW1wICE9IG51bGwgJiYgY3Vyc29yVGVtcCAhPT0gJycpID8gY3Vyc29yVGVtcCA6ICcwJztcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHtcXG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2N1cnNvcicsXFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3Vyc29yXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoe1xcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnZmlyc3RfcGFnZV9jdXJzb3InLFxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGN1cnNvclxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiPHA+PC9wPlxcXCIgKyBcXFwiPGJpZz48Yj5cXFwiICsgcGFyc2VEb21Gb3JIdG1sKGh0bWwsICcuY29tbWVudC10aXRsZSYmSHRtbCcpICsgXFxcIjwvYj48L2JpZz5cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHZhciBwbCA9IHBhcnNlRG9tKGh0bWwsICcuY29tbWVudHMmJkh0bWwnKVxcbiAgICAgICAgICAgICAgICAgICAgLm1hdGNoKC88bGlbXFxcXHNcXFxcU10qPzxcXFxcL2xpL2cpO1xcbiAgICAgICAgICAgICAgICBpZiAocGwgPT0gbnVsbCB8fCBwbC5sZW5ndGggPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCI8cD48L3A+XFxcIiArICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+5pqC5peg6K+E6K66PC9mb250PicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwbC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8oPChkaXZ8cCkoW1xcXFxzXFxcXFNdKj8pPil8PGRpdj58PHA+fDxcXFxcL2Rpdj58PFxcXFwvcD4vZ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50Q29udGVudCA9IHBhcnNlRG9tRm9ySHRtbChwbFtqXSwgJy5jb21tZW50LWNvbnRlbnQmJkh0bWwnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGltZyBjbGFzcz1cXFwiYXZhdGFyKFtcXFxcc1xcXFxTXSo/KT4vZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oPChwKShbXFxcXHNcXFxcU10qPyk+KXw8cD58PFxcXFwvcD4vZywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88aW1nIChzcmN8ZGF0YS1zcmMpPVxcXCIoLio/KVxcXCIoW1xcXFxzXFxcXFNdKj8pPi9nLCBcXFwiPGltZyBkYXRhLXY+XFxcIiwgaW1nVGFnUmVwbGFjZW1lbnQyKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGltZyhbXFxcXHNcXFxcU10qPyk+L2csIGltZ0Vycm9yKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPHNob3dpbWcvZywgJzxpbWcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tbWVudFJlcGx5VGV4dCA9IHBhcnNlRG9tRm9ySHRtbChwbFtqXSwgJy5jb21tZW50LXF1b3RlJiZIdG1sJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50UXVvdGVVc2VybmFtZSA9IHBhcnNlRG9tRm9ySHRtbChjb21tZW50UmVwbHlUZXh0LCBcXFwiLnF1b3RlLW5pY2tuYW1lJiZIdG1sXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50UXVvdGVUaW1lID0gcGFyc2VEb21Gb3JIdG1sKGNvbW1lbnRSZXBseVRleHQsIFxcXCIucXVvdGUtdGltZSYmSHRtbFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50UmVwbHlUZXh0ID0gY29tbWVudFJlcGx5VGV4dFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxhW1xcXFxzXFxcXFNdLio/PFxcXFwvYT4vZywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tbWVudFJlcGx5VGV4dEFycmF5ID0gY29tbWVudFJlcGx5VGV4dC5tYXRjaCgvPHBbXFxcXHNcXFxcU10uKj88XFxcXC9wPi9nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudENvbnRlbnQgPSBhYmJyZXZpYXRlUmVwbHlUZXh0KGNvbW1lbnRDb250ZW50LCBjb21tZW50UmVwbHlUZXh0QXJyYXkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UXVvdGVVc2VybmFtZSwgJzxmb250IGNvbG9yPVxcXCInICsgcXVvdGVVc2VyQ29sb3IgKyAnXFxcIj4nICsgY29tbWVudFF1b3RlVXNlcm5hbWUgKyAnPC9mb250PicpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UXVvdGVUaW1lLCAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyBjb21tZW50UXVvdGVUaW1lICsgJzwvZm9udD4nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7IC8vIHAsLTJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCI8cD48L3A+XFxcIiArIGNvbW1lbnRDb250ZW50ICsgJzxicj48c21hbGw+JyArIHBhcnNlRG9tRm9ySHRtbChwbFtqXSwgJy5jb21tZW50LW5pY2tuYW1lJiZIdG1sJykucmVwbGFjZSgvPGFbXFxcXHNcXFxcU10uKj8+L2csICc8Zm9udCBjb2xvcj1cXFwiJyArIHVzZXJDb2xvciArICdcXFwiPicpLnJlcGxhY2UoLzxcXFxcL2E+L2csIFxcXCI8L2ZvbnQ+XFxcIikgKyAnXFxcXHRcXFxcdDxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nICsgcGFyc2VEb21Gb3JIdG1sKHBsW2pdLCAnLmNvbW1lbnQtbWV0YS0tc3BhbiYmVGV4dCcpICsgJzwvZm9udD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPHAgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjtcXFwiPuivpemhtemdouaXoOazleino+aekOaIluivnemimOS4jeWtmOWcqDwvcD48cCBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXCI+PGEgaHJlZj1cXFwiJyArIE1ZX1VSTCArICdcXFwiPuafpeeci+WOn+aWhzwvYT48L3A+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuXFxucmVzLmRhdGEgPSBkO1xcbnNldEhvbWVSZXN1bHQocmVzKTtcIixcImdyb3VwXCI6XCLikaDluLjnlKhcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcImxldCBvbGRUb2tlbkZpbGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9qcy9oaWtlcmJic190b2tlbi5qcyc7XFxuaWYgKGZpbGVFeGlzdChvbGRUb2tlbkZpbGUpKSB7XFxuICAgIGxldCBmaWxlVG9rZW4gPSBmZXRjaChvbGRUb2tlbkZpbGUsIHt9KTtcXG4gICAgaWYgKGZpbGVUb2tlbiAhPSBudWxsICYmIGZpbGVUb2tlbiAhPSAnJykge1xcbiAgICAgICAgd3JpdGVGaWxlKG9sZFRva2VuRmlsZSwgJycpO1xcbiAgICB9XFxufVwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8xXFxcIixcXFwibmFtZVxcXCI6XFxcIuS4quS6uumFjee9rlxcXCIsXFxcInBhdGhcXFwiOlxcXCJzZXR0aW5nc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbi8vIOaYr+WQpuaYvuekuuW4luWtkOWIhuexu++8jOaYvuekui8xIOS4jeaYvuekui8wXFxcXG52YXIgc2hvd01ldGEgPSAxO1xcXFxuLy8g5biW5a2Q5YiG57G75a2X5L2T5aSn5bCPIGJpZy/lpKcgc3Bhbi/kuK0gc21hbGwv5bCPXFxcXG52YXIgbWV0YVNpemUgPSAnc21hbGwnO1xcXFxuLy8g5biW5a2Q5YiG57G76aKc6ImyXFxcXG52YXIgbm9kZUNvbG9yID0gXFxcXFxcXCIjMjk3OUZGXFxcXFxcXCI7XFxcXG4vLyDmmK/lkKbmmL7npLrmraPmlofvvIzmmL7npLovMSDkuI3mmL7npLovMFxcXFxudmFyIHNob3dDb250ZW50ID0gMTtcXFxcbi8vIOaYr+WQpuaYvuekuuivhOiuuu+8jOaYvuekui8xIOS4jeaYvuekui8wXFxcXG52YXIgc2hvd0NvbW1lbnQgPSAxO1xcXFxuLy8g5piv5ZCm6ZqQ6JeP5Zu+54mH77yM6ZqQ6JePLzEg5LiN6ZqQ6JePLzBcXFxcbnZhciBoaWRlSW1nID0gMDtcXFxcbi8vIOS9v+eUqCBlbW9qaSDlm77moIfmm7/mjaLmlofmnKzvvIzkvb/nlKgvMSDkuI3kvb/nlKgvMFxcXFxudmFyIHVzZUVtb2ppID0gMTtcXFxcbi8vIOivhOiuuueUqOaIt+minOiJslxcXFxudmFyIHVzZXJDb2xvciA9IFxcXFxcXFwiIzI5NzlGRlxcXFxcXFwiO1xcXFxuLy8g6K+E6K665Zue5aSN5byV55So55So5oi36aKc6ImyXFxcXG52YXIgcXVvdGVVc2VyQ29sb3IgPSBcXFxcXFxcImJsYWNrXFxcXFxcXCI7XFxcXG5cXFxcbi8vIOaYr+WQpuaYvuekuuWhq+WGmSBUb2tlbiDmj5DnpLrvvIzmmL7npLovMSDkuI3mmL7npLovMFxcXFxudmFyIHNob3dJbnB1dFRva2VuVGlwcyA9IDE7XFxcXG4vLyDmmK/lkKblvIDlkK/mlLbol48v54K56LWe57uT5p6c5o+Q56S677yM5pivLzEg5ZCmLzBcXFxcbnZhciByZXN1bHRUaXBzID0gMTtcXFxcbi8vIOesrOWHoOWll+Wbvuagh++8jC0x5Li66ZqP5py677yM5LuO5LiL6Z2i5LiJ5Liq5pWw57uE5oyR6YCJXFxcXG52YXIgaWNvbkluZGV4ID0gLTE7XFxcXG4vLyDmlLbol4/lm77moIdcXFxcbnZhciBzdGFySWNvbnMgPSBbIFxcXFxuICAgIFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9pY29uL2Jic+aUtuiXjy5zdmdcXFxcXFxcIixcXFxcbi8qJ2h0dHBzOi8vd3d3LmVhc3lpY29uLm5ldC9hcGkvcmVzaXplQXBpLnBocD9pZD0xMjg2MjE3JnNpemU9MTI4JywqL1xcXFxuXTtcXFxcbnZhciBzdGFySWNvbnNXZWJNYXBwaW5nID0gW1xcXFxuICAgIFxcXFxcXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL1JlYm9yblEvY2RuLmhpa2VyL2ljb25zL2Jic+aUtuiXjy5zdmdcXFxcXFxcIlxcXFxuXTtcXFxcbi8vIOeCuei1nuWbvuagh1xcXFxudmFyIGxpa2VJY29ucyA9IFsgXFxcXG4gICAgXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ljb24vYmJz54K56LWeLnN2Z1xcXFxcXFwiLFxcXFxuLyonaHR0cHM6Ly93d3cuZWFzeWljb24ubmV0L2FwaS9yZXNpemVBcGkucGhwP2lkPTEyODgyMTcmc2l6ZT0xMjgnLFxcXFxuICAgICdodHRwczovL3d3dy5lYXN5aWNvbi5uZXQvYXBpL3Jlc2l6ZUFwaS5waHA/aWQ9MTIxMTUwNyZzaXplPTEyOCcsXFxcXG4gICAgJ2h0dHBzOi8vd3d3LmVhc3lpY29uLm5ldC9hcGkvcmVzaXplQXBpLnBocD9pZD0xMjM5NTExJnNpemU9MTI4JyovXFxcXG5dO1xcXFxudmFyIGxpa2VJY29uc1dlYk1hcHBpbmcgPSBbXFxcXG4gICAgXFxcXFxcXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvUmVib3JuUS9jZG4uaGlrZXIvaWNvbnMvYmJz54K56LWeLnN2Z1xcXFxcXFwiXFxcXG5dO1xcXFxuLy8g5Zue5aSN5Zu+5qCHXFxcXG52YXIgY29tbWVudEljb25zID0gWyBcXFxcbiAgICBcXFxcXFxcImhpa2VyOi8vZmlsZXMvaWNvbi9iYnPlm57lpI0uc3ZnXFxcXFxcXCIsXFxcXG4vKidodHRwczovL3d3dy5lYXN5aWNvbi5uZXQvYXBpL3Jlc2l6ZUFwaS5waHA/aWQ9MTIzOTQ5NSZzaXplPTEyOCcsKi9cXFxcbl07XFxcXG52YXIgY29tbWVudEljb25zV2ViTWFwcGluZyA9IFtcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9SZWJvcm5RL2Nkbi5oaWtlci9pY29ucy9iYnPlm57lpI0uc3ZnXFxcXFxcXCJcXFxcbl07XFxcXG4vLyDljp/mlofnq6Dlm77moIdcXFxcbi8qdmFyIGFydGljbGVJY29ucyA9IFsgJ2h0dHBzOi8vd3d3LmVhc3lpY29uLm5ldC9hcGkvcmVzaXplQXBpLnBocD9pZD0xMjM4NTIyJnNpemU9MTI4JyxcXFxcbl07Ki9cXFxcbmlmICghZmlsZUV4aXN0KHN0YXJJY29uc1swXSkpIHtcXFxcbiAgICB3cml0ZUZpbGUoc3Rhckljb25zWzBdLCByZXF1ZXN0KHN0YXJJY29uc1dlYk1hcHBpbmdbMF0pKTtcXFxcbn1cXFxcbmlmICghZmlsZUV4aXN0KGxpa2VJY29uc1swXSkpIHtcXFxcbiAgICB3cml0ZUZpbGUobGlrZUljb25zWzBdLCByZXF1ZXN0KGxpa2VJY29uc1dlYk1hcHBpbmdbMF0pKTtcXFxcbn1cXFxcbmlmICghZmlsZUV4aXN0KGNvbW1lbnRJY29uc1swXSkpIHtcXFxcbiAgICB3cml0ZUZpbGUoY29tbWVudEljb25zWzBdLCByZXF1ZXN0KGNvbW1lbnRJY29uc1dlYk1hcHBpbmdbMF0pKTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8xXFxcIixcXFwibmFtZVxcXCI6XFxcIuWvjOaWh+acrOmAmueUqOWHveaVsFxcXCIsXFxcInBhdGhcXFwiOlxcXCJyaWNodGV4dFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCBpbWdFcnJvciA9ICc8cD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj7lm77niYfmmoLml7bml6Dms5XmmL7npLrvvIzoi6XopoHmn6XnnIvor7c8YSBocmVmPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIj7orr/pl67ljp/mloc8L2E+PC9mb250PjwvcD4nO1xcXFxuU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlV2l0aENvbmZpcm0gPSBmdW5jdGlvbiAoY29uZmlybVZhbHVlLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XFxcXG4gICAgbGV0IHJldHVyblZhbHVlID0gdGhpcztcXFxcbiAgICBpZiAoY29uZmlybVZhbHVlKSB7XFxcXG4gICAgICAgIHJldHVyblZhbHVlID0gdGhpcy5yZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpXFxcXG4gICAgfVxcXFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXFxcbn07XFxcXG5TdHJpbmcucHJvdG90eXBlLnJlcGxhY2VXaXRoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSwgY2FsbGJhY2spIHtcXFxcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSB0aGlzO1xcXFxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7XFxcXG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2sodGhpcywgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXFxcbn07XFxcXG5mdW5jdGlvbiBpbWdUYWcoY29udGV4dCwgaW1nVXJsKSB7XFxcXG4gICAgbGV0IHJlcGxhY2VTdHJpbmcgPSBpbWdVcmwgPT09ICcnID8gaW1nRXJyb3IgOiAnPHA+PHNob3dpbWcgc3JjPVxcXFxcXFwiJyArIChpbWdVcmwgKyAnQFJlZmVyZXI9aHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24nKSArICdcXFxcXFxcIj48L3A+JztcXFxcbiAgICBpZiAoaGlkZUltZykge1xcXFxuICAgICAgICByZXBsYWNlU3RyaW5nID0gaW1nVXJsID09PSAnJyA/IGltZ0Vycm9yIDogJzxwPjxhIGhyZWY9XFxcXFxcXCInICsgaW1nVXJsICsgJ1xcXFxcXFwiPlvngrnlh7vmn6XnnIvlpKflm75dPC9hPjwvcD4nO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gY29udGV4dC5yZXBsYWNlKC88aW1nIGRhdGEtdj4vZywgcmVwbGFjZVN0cmluZyk7XFxcXG59XFxcXG5mdW5jdGlvbiBpbWdUYWdSZXBsYWNlbWVudDIoY29udGV4dCwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xcXFxuICAgIGxldCBtYXRjaEFycmF5ID0gY29udGV4dC5tYXRjaChzZWFyY2hWYWx1ZSk7XFxcXG4gICAgbGV0IHJldHVyblZhbHVlID0gY29udGV4dDtcXFxcbiAgICBpZiAobWF0Y2hBcnJheSAhPSBudWxsKSB7XFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hBcnJheS5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBtYXRjaEFycmF5W2ldO1xcXFxuICAgICAgICAgICAgLzxpbWcgKHNyY3xkYXRhLXNyYyk9XFxcXFxcXCIoLio/KVxcXFxcXFwiKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pPi8udGVzdChpdGVtKTtcXFxcbiAgICAgICAgICAgIGxldCBpbWdVcmwgPSBSZWdFeHAuJDI7XFxcXG4gICAgICAgICAgICBpZiAoaW1nVXJsICE9PSAnJykge1xcXFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShpdGVtLCByZXBsYWNlVmFsdWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gaW1nVGFnKHJldHVyblZhbHVlLCBpbWdVcmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXFxcbn1cXFxcbmZ1bmN0aW9uIGFiYnJldmlhdGVSZXBseVRleHQoY29udGV4dCwgdGV4dEFycmF5KSB7XFxcXG4gICAgbGV0IGNvbnRlbnQgPSBjb250ZXh0O1xcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEFycmF5Lmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgIGxldCB0ZXh0ID0gcGFyc2VEb21Gb3JIdG1sKHRleHRBcnJheVtpXSwgXFxcXFxcXCJwJiZUZXh0XFxcXFxcXCIpO1xcXFxuICAgICAgICBpZiAodGV4dC5sZW5ndGggPiAzMCkge1xcXFxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh0ZXh0LCB0ZXh0LnN1YnN0cmluZygwLCAzMCkgKyBcXFxcXFxcIi4uLi4uLlxcXFxcXFwiKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gY29udGVudDtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLluJblrZDor6bmg4VcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGV0YWlsXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIHJlcyA9IHt9O1xcXFxudmFyIGQgPSBbXTtcXFxcbnZhciB1cmxTcGxpdHMgPSBNWV9VUkwuc3BsaXQoXFxcXFxcXCIjXFxcXFxcXCIpO1xcXFxudmFyIG1VcmwgPSB1cmxTcGxpdHNbMF07XFxcXG52YXIgcGFnZSA9IHVybFNwbGl0c1sxXTtcXFxcbnZhciBjb2xUeXBlID0gJ3JpY2hfdGV4dCc7XFxcXG4vLyBtVXJsID0gTVlfUEFSQU1TLmxpbmtcXFxcbi8vIGxvZyhNWV9VUkwpXFxcXG5cXFxcblxcXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9zZXR0aW5ncycpKS5ydWxlKVxcXFxuLyoqXFxcXG4gKiDnlKjmiLcgVG9rZW4gKOmcgOimgeWFiOeZu+W9leaJjeiDveiOt+WPlilcXFxcbiAqXFxcXG4gKiDmipPljIUgQ29va2llIOS4reeahCB1c2VyVG9rZW49IOWQjumdoumCo+S4suS4nOilv1xcXFxuICog5oiWXFxcXG4gKiDkuI3loavlhpnlm7rlrprlgLwg5YiZ6ZyA6YWN5ZCI5LiT55So5o+S5Lu26Ieq5Yqo6I635Y+WXFxcXG4gKiDkvYbmr4/mrKHov5DooYzop4bnlYzpg73pnIDmiZPlvIDkuIDmrKHorrrlnZtcXFxcbiAqL1xcXFxudmFyIHRva2VuID0gZ2V0SXRlbSgnaGlrZXJiYnNfdG9rZW4nLCAnJyk7XFxcXG5cXFxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvcmljaHRleHQnKSkucnVsZSlcXFxcblxcXFxuaWYgKHBhZ2UgPiAxKSB7XFxcXG5cXFxcbiAgICBsZXQgY3Vyc29yID0gZ2V0VmFyKFxcXFxcXFwiY3Vyc29yXFxcXFxcXCIpO1xcXFxuICAgIGlmIChwYWdlID09PSAnMicpIGN1cnNvciA9IGdldFZhcihcXFxcXFxcImZpcnN0X3BhZ2VfY3Vyc29yXFxcXFxcXCIpO1xcXFxuICAgIGN1cnNvciA9IGN1cnNvciA9PT0gJycgPyAnMCcgOiBjdXJzb3I7XFxcXG5cXFxcbiAgICBsZXQgdXJsVGVtcGxhdGUgPSBcXFxcXFxcImh0dHA6Ly9oYWlrdW9zaGlqaWUuY24vYXBpL2NvbW1lbnQvbGlzdD9lbnRpdHlUeXBlPXRvcGljJmVudGl0eUlkPXtlbnRpdHlJZH0mY3Vyc29yPXtjdXJzb3J9XFxcXFxcXCI7XFxcXG4gICAgaWYgKC90b3BpY1xcXFxcXFxcLyhcXFxcXFxcXGQrKS8udGVzdChNWV9VUkwpID09PSB0cnVlKSB7XFxcXG4gICAgICAgIGxldCBlbnRpdHlJZCA9IFJlZ0V4cC4kMTtcXFxcbiAgICAgICAgaWYgKGVudGl0eUlkICE9IG51bGwgJiYgZW50aXR5SWQgIT09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGxldCBub01vcmUgPSBnZXRWYXIoXFxcXFxcXCJub01vcmVcXFxcXFxcIiArIGVudGl0eUlkKTtcXFxcbiAgICAgICAgICAgIG5vTW9yZSA9IG5vTW9yZSA9PT0gJycgPyAnMCcgOiBub01vcmU7XFxcXG4gICAgICAgICAgICB1cmxUZW1wbGF0ZSA9IHVybFRlbXBsYXRlLnJlcGxhY2UoXFxcXFxcXCJ7ZW50aXR5SWR9XFxcXFxcXCIsIGVudGl0eUlkKTtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybFRlbXBsYXRlLnJlcGxhY2UoXFxcXFxcXCJ7Y3Vyc29yfVxcXFxcXFwiLCBjdXJzb3IpO1xcXFxuICAgICAgICAgICAgLy8gdXJsID0gXFxcXFxcXCJodHRwOi8vaGFpa3Vvc2hpamllLmNuL2FwaS9jb21tZW50L2xpc3Q/ZW50aXR5VHlwZT10b3BpYyZlbnRpdHlJZD0zOTgmY3Vyc29yPTkxODNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCBqc29uID0ge307XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGZldGNoKHVybCwge30pKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGpzb24uZGF0YTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IGRhdGEucmVzdWx0cztcXFxcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cyAhPSBudWxsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBub3dUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcih7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjdXJzb3InLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRhdGEuY3Vyc29yXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRpbWVEaWZmKG5vd1RpbWUsIGNyZWF0ZVRpbWUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIERhdGUucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKGZtdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvID0ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIk0rXFxcXFxcXCI6IHRoaXMuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiZCtcXFxcXFxcIjogdGhpcy5nZXREYXRlKCksIC8v5pelXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiaCtcXFxcXFxcIjogdGhpcy5nZXRIb3VycygpLCAvL+Wwj+aXtlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIm0rXFxcXFxcXCI6IHRoaXMuZ2V0TWludXRlcygpLCAvL+WIhlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInMrXFxcXFxcXCI6IHRoaXMuZ2V0U2Vjb25kcygpLCAvL+enklxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInErXFxcXFxcXCI6IE1hdGguZmxvb3IoKHRoaXMuZ2V0TW9udGgoKSArIDMpIC8gMyksIC8v5a2j5bqmXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiU1xcXFxcXFwiOiB0aGlzLmdldE1pbGxpc2Vjb25kcygpIC8v5q+r56eSXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLyh5KykvLnRlc3QoZm10KSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsICh0aGlzLmdldEZ1bGxZZWFyKCkgKyBcXFxcXFxcIlxcXFxcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBvKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXFxcXFwiKFxcXFxcXFwiICsgayArIFxcXFxcXFwiKVxcXFxcXFwiKS50ZXN0KGZtdCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT09IDEpID8gKG9ba10pIDogKChcXFxcXFxcIjAwXFxcXFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXFxcXFwiXFxcXFxcXCIgKyBvW2tdKS5sZW5ndGgpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZtdDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlKGNyZWF0ZVRpbWUpLmZvcm1hdChcXFxcXFxcInl5eXktTU0tZGQgaGg6bW06c3NcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZURpZmYgPSBub3dUaW1lIC0gY3JlYXRlVGltZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXlzID0gTWF0aC5mbG9vcih0aW1lRGlmZiAvICgyNCAqIDM2MDAgKiAxMDAwKSk7IC8vIOiuoeeul+WHuuWkqeaVsFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRheUxlYXZlID0gdGltZURpZmYgJSAoMjQgKiAzNjAwICogMTAwMCk7IC8vIOiuoeeul+WkqeaVsOWQjuWJqeS9meeahOaXtumXtFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhvdXJzID0gTWF0aC5mbG9vcihkYXlMZWF2ZSAvICgzNjAwICogMTAwMCkpOyAvLyDorqHnrpflpKnmlbDlkI7liankvZnnmoTlsI/ml7bmlbBcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBob3VyTGVhdmUgPSB0aW1lRGlmZiAlICgzNjAwICogMTAwMCk7IC8vIOiuoeeul+WJqeS9meWwj+aXtuWQjuWJqeS9meeahOavq+enkuaVsFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKGhvdXJMZWF2ZSAvICg2MCAqIDEwMDApKTsgLy8g6K6h566X5Ymp5L2Z55qE5YiG6ZKf5pWwXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8IGRheXMgJiYgZGF5cyA8IDMxKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSA9IGRheXMgKyBcXFxcXFxcIuWkqeWJjVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRheXMgPCAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvdXJzID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lID0gaG91cnMgKyBcXFxcXFxcIuWwj+aXtuWJjVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgPSBtaW51dGVzICsgXFxcXFxcXCLliIbpkp/liY1cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3VsdHNbaV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGVDb250ZW50ID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnF1b3RlICE9IG51bGwpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXVvdGUgPSByZXN1bHQucXVvdGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZURvbUZvckh0bWwocXVvdGUuY29udGVudCwgJ2JvZHkmJkh0bWwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmlja25hbWUgPSBxdW90ZS51c2VyLm5pY2tuYW1lO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dyb290QmFieS9hcnRpY2xlL2RldGFpbHMvOTk5ODAzOTVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3JlYXRlVGltZSA9IHF1b3RlLnVzZXIuY3JlYXRlVGltZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZSA9IHRpbWVEaWZmKG5vd1RpbWUsIGNyZWF0ZVRpbWUpO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YVtcXFxcXFxcXHNcXFxcXFxcXFNdLio/PFxcXFxcXFxcL2E+L2csICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRSZXBseVRleHRBcnJheSA9IGNvbnRlbnQubWF0Y2goLzxwW1xcXFxcXFxcc1xcXFxcXFxcU10uKj88XFxcXFxcXFwvcD4vZyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhYmJyZXZpYXRlUmVwbHlUZXh0KGNvbnRlbnQsIGNvbW1lbnRSZXBseVRleHRBcnJheSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZUNvbnRlbnQgPSAnPGJsb2NrcXVvdGUgY2xhc3M9XFxcXFxcXCJjb21tZW50LXF1b3RlXFxcXFxcXCI+PGRpdiBjbGFzcz1cXFxcXFxcImNvbW1lbnQtcXVvdGUtdXNlclxcXFxcXFwiPjxhIGNsYXNzPVxcXFxcXFwicXVvdGUtbmlja25hbWVcXFxcXFxcIj48Zm9udCBjb2xvcj1cXFxcXFxcIicgKyBxdW90ZVVzZXJDb2xvciArICdcXFxcXFxcIj4nICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlja25hbWUgK1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9mb250PjwvYT48c3BhbiBjbGFzcz1cXFxcXFxcInF1b3RlLXRpbWVcXFxcXFxcIj48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcXFxcXFxcdFxcXFxcXFxcdCcgK1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZm9udD48L3NwYW4+PC9kaXY+PGRpdiBpdGVtcHJvcD1cXFxcXFxcInRleHRcXFxcXFxcIj4nICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCArXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj48L2Jsb2NrcXVvdGU+JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gJzxwPicgKyByZXN1bHQuY29udGVudCArICc8L3A+JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXRhID0gJzxicj48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCInICsgdXNlckNvbG9yICsgJ1xcXFxcXFwiPicgK1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51c2VyLm5pY2tuYW1lICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9mb250PlxcXFxcXFxcdFxcXFxcXFxcdDxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPicgK1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVEaWZmKG5vd1RpbWUsIHJlc3VsdC5jcmVhdGVUaW1lKSArXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcXFxcXFxcdFxcXFxcXFxcdOWbnuWkjScgK1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2ZvbnQ+PC9zbWFsbD4nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRDb250ZW50ID0gcXVvdGVDb250ZW50ICsgY29udGVudCArIG1ldGE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjb21tZW50Q29udGVudFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nIGNsYXNzPVxcXFxcXFwiYXZhdGFyKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pPi9nLCAnJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDwocCkoW1xcXFxcXFxcc1xcXFxcXFxcU10qPyk+KXw8cD58PFxcXFxcXFxcL3A+L2csICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88aW1nIChzcmN8ZGF0YS1zcmMpPVxcXFxcXFwiKC4qPylcXFxcXFxcIihbXFxcXFxcXFxzXFxcXFxcXFxTXSo/KT4vZywgXFxcXFxcXCI8aW1nIGRhdGEtdj5cXFxcXFxcIiwgaW1nVGFnUmVwbGFjZW1lbnQyKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pPi9nLCBpbWdFcnJvcilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPHNob3dpbWcvZywgJzxpbWcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogTVlfVVJMLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAobm9Nb3JlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIjxwPjwvcD5cXFxcXFxcIiArICc8Y2VudGVyPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPuW3suaXoOabtOWkmuivhOiuujwvZm9udD48L2NlbnRlcj4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcih7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnbm9Nb3JlJyArIGVudGl0eUlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIHZhciBqcyA9IHBhcnNlRG9tKGh0bWwsICcubWFpbi1jb250ZW50JiZIdG1sJyk7XFxcXG4gICAgICAgIHZhciBoYXNSdWxlID0gMDtcXFxcblxcXFxuICAgICAgICAvLyBzZXRFcnJvcihodG1sKTtcXFxcblxcXFxuICAgICAgICB0cnkge1xcXFxuXFxcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSAnPHA+PC9wPjxiaWcgc3R5bGU9XFxcXFxcXCJwYWRkaW5nLWxlZnQ6IDE1cHhcXFxcXFxcIj48c3Ryb25nPicgKyBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy50b3BpYy1oZWFkZXItY2VudGVyJiZoMSYmSHRtbCcpICsgXFxcXFxcXCI8L3N0cm9uZz48L2JpZz5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCBtZXRhID0gJyc7XFxcXG4gICAgICAgICAgICAvLyBwYXJzZURvbUZvckh0bWwoaHRtbCwnLnRvcGljLWhlYWRlci1jZW50ZXImJi50b3BpYy1tZXRhJiZIdG1sJylcXFxcbiAgICAgICAgICAgIGxldCBjb3VudCA9ICc8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiBncmV5XFxcXFxcXCI+JyArIHBhcnNlRG9tRm9ySHRtbChodG1sLCAnLnRvcGljLWhlYWRlci1jZW50ZXImJi50b3BpYy1oZWFkZXItcmlnaHQmJlRleHQnKSArIFxcXFxcXFwiPC9zcGFuPlxcXFxcXFwiO1xcXFxuXFxcXG4gICAgICAgICAgICBpZiAoc2hvd01ldGEpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgbWV0YUl0ZW1zID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLnRvcGljLW1ldGEmJi5tZXRhLWl0ZW0nKTtcXFxcbiAgICAgICAgICAgICAgICAvLyBzZXRFcnJvcihKU09OLnN0cmluZ2lmeShtZXRhSXRlbXMpKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgbWV0YU5vZGUgPSBwYXJzZURvbUZvckh0bWwobWV0YUl0ZW1zWzJdLCAnVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgIG1ldGEgPSAnPGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+JyArIHBhcnNlRG9tRm9ySHRtbChtZXRhSXRlbXNbMF0sICdUZXh0JykgK1xcXFxuICAgICAgICAgICAgICAgICAgICAnICAnICtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKG1ldGFJdGVtc1sxXSwgJ1RleHQnKSArXFxcXG4gICAgICAgICAgICAgICAgICAgICcgICcgK1xcXFxuICAgICAgICAgICAgICAgICAgICAnPC9mb250Pjxmb250IGNvbG9yPVxcXFxcXFwiJyArIG5vZGVDb2xvciArICdcXFxcXFxcIj4nICsgbWV0YU5vZGUgKyAnPC9mb250Pjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPic7XFxcXG4gICAgICAgICAgICAgICAgbGV0IG1ldGFUYWdzID0gcGFyc2VEb21Gb3JBcnJheSgnPGRpdj4nICsgbWV0YUl0ZW1zWzNdICsgJzwvZGl2PicsICdkaXYmJi50YWcnKTtcXFxcbiAgICAgICAgICAgICAgICAvLyBzZXRFcnJvcihKU09OLnN0cmluZ2lmeShtZXRhVGFncykpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBtZXRhVGFnID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhVGFncy5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICBtZXRhVGFnID0gKG1ldGFUYWcgPT09ICcnID8gbWV0YVRhZyA6IChtZXRhVGFnICsgJyAgJykpICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9tRm9ySHRtbChtZXRhVGFnc1tpXSwgJ1RleHQnKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvLyBtZXRhVGFnID0gbWV0YVRhZy5yZXBsYWNlKCfnva7pobYnLCAn4oCc4oCc572u6aG24oCd4oCdJyk7XFxcXG4gICAgICAgICAgICAgICAgbWV0YVNpemUgPSBtZXRhU2l6ZSA9PT0gJycgPyAnc21hbGwnIDogbWV0YVNpemU7XFxcXG4gICAgICAgICAgICAgICAgbWV0YSA9ICc8JyArIG1ldGFTaXplICsgJz4nICsgbWV0YSArICcgICcgKyBtZXRhVGFnICsgJzwvZm9udD48LycgKyBtZXRhU2l6ZSArICc+JyArICc8YnI+JztcXFxcbiAgICAgICAgICAgICAgICAvLyBzZXRFcnJvcihtZXRhKTtcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgLy8g8J+RjfCfj7vinaTvuI/wn6eh4pmh4pml8J+SrPCfkYHvuI/inr/wk4G6XFxcXG4gICAgICAgICAgICBpZiAodXNlRW1vamkpXFxcXG4gICAgICAgICAgICAgICAgY291bnQgPSBjb3VudC5yZXBsYWNlKFxcXFxcXFwi6I636LWe77yaXFxcXFxcXCIsIFxcXFxcXFwi4p2k77iPIFxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxcXFxcXFwi6K+E6K6677yaXFxcXFxcXCIsIFxcXFxcXFwi8J+SrCBcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcXFxcXFxcIuafpeeci++8mlxcXFxcXFwiLCBcXFxcXFxcIvCfkYHvuI8gXFxcXFxcXCIpO1xcXFxuXFxcXG4gICAgICAgICAgICBsZXQgaGVhZGVyID0gXFxcXFxcXCJcXFxcXFxcIiArIHRpdGxlICsgJ1xcXFxcXFxcdDxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj48YSBocmVmPVxcXFxcXFwiJyArIE1ZX1VSTCArICdcXFxcXFxcIj5b5p+l55yL5Y6f5paHXTwvYT48L2ZvbnQ+PC9zbWFsbD4nICsgXFxcXFxcXCI8YnI+XFxcXFxcXCIgKyBtZXRhICsgY291bnQgKyAnJztcXFxcblxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaGVhZGVyLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxcXG4gICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICBpZiAoc2hvd0NvbnRlbnQpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwgJy5jb250ZW50JiZIdG1sJylcXFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2VXaXRoQ2FsbGJhY2soLzxpbWcgKHNyY3xkYXRhLXNyYyk9XFxcXFxcXCIoLio/KVxcXFxcXFwiKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pPi9nLCBcXFxcXFxcIjxpbWcgZGF0YS12PlxcXFxcXFwiLCBpbWdUYWdSZXBsYWNlbWVudDIpXFxcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pPi9nLCBpbWdFcnJvcilcXFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxzaG93aW1nL2csICc8aW1nJylcXFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyg8KGRpdikoW1xcXFxcXFxcc1xcXFxcXFxcU10qPyk+KXw8ZGl2Pnw8XFxcXFxcXFwvZGl2Pi9nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiPHA+PC9wPlxcXFxcXFwiICsgdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4qPynvv6UoLio/Ke+/pSguKikvO1xcXFxuICAgICAgICAgICAgaWYgKGpzLmluZGV4T2YoJz7mtbfpmJQnKSAhPT0gLTEpIHtcXFxcblxcXFxuICAgICAgICAgICAgICAgIC8qaWYgKHNob3dDb250ZW50KSB7XFxcXG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDI7IGkrKylcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9Ki9cXFxcblxcXFxuICAgICAgICAgICAgICAgIGxldCBjb2wgPSBcXFxcXFxcInRleHRfMVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0ganMubWF0Y2goLz7mtbfpmJRbXFxcXFxcXFxzXFxcXFxcXFxTXSo/PFxcXFxcXFxcLy9nKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAobGlzdCAhPSBudWxsICYmIGxpc3QubGVuZ3RoICE9PSAwKSBoYXNSdWxlID0gMTtcXFxcbiAgICAgICAgICAgICAgICBpZiAobGlzdCAhPSBudWxsICYmIGxpc3QubGVuZ3RoID4gMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiPHA+PC9wPlxcXFxcXFwiICsgXFxcXFxcXCI8YmlnPjxiPuacrOaWh+aJgOacieinhOWImeS4gOmUruWvvOWFpTwvYj48L2JpZz5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gbGlzdFtqXS5zcGxpdCgnPicpWzFdLnNwbGl0KCc8LycpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbVRpdGxlID0gdGl0bGU7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ0V4cC50ZXN0KHRpdGxlKSA9PT0gdHJ1ZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkgbVRpdGxlID0gXFxcXFxcXCLkuIDplK7lr7zlhaVcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YXIgcmVnRXhwMSA9IC8odGl0bGVcXFxcXFxcIjpcXFxcXFxcIiguKj8pXFxcXFxcXCIpfChiYXNlNjQ6XFxcXFxcXFwvXFxcXFxcXFwvQCguKj8pQCl8KCguKj8pQCkvO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldEVycm9yIChSZWdFeHAuJDIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQzO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZSA9IChtVGl0bGUgIT0gbnVsbCAmJiBtVGl0bGUgIT09ICcnKSA/IG1UaXRsZSA6IHRpdGxlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoUmVnRXhwLiQyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJob21lX3J1bGVcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC90aXRsZVxcXFxcXFwiOlxcXFxcXFwiKC4qPylcXFxcXFxcIi8udGVzdChtVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQxO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJob21lX3J1bGVfdjJcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9iYXNlNjQ6XFxcXFxcXFwvXFxcXFxcXFwvQCguKj8pQC8udGVzdChtVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gUmVnRXhwLiQxO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJqc191cmxcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8oLio/KUAvLnRlc3QobVRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZSA9IFJlZ0V4cC4kMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiaG9tZV9ydWxlX3VybFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gXFxcXFxcXCLpppbpobXlkIjpm4ZcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiYm9va21hcmtfdXJsXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBcXFxcXFxcIuS5puetvuWQiOmbhlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gKG1UaXRsZSAhPSBudWxsICYmIG1UaXRsZSAhPT0gJycpID8gbVRpdGxlIDogdGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZS5sZW5ndGggPiAxNCkgY29sID0gXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIjtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ/CflJTigJjigJjigJnigJk8Yj4g54K55Ye75a+85YWlIDwvYj7wn5SUJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChsaXN0W2pdLnNwbGl0KCc+JylbMV0uc3BsaXQoJzwvJylbMF0ucmVwbGFjZSgvYW1wOy9nLCAnJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJmx0Oy9nLCAnPCcpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGVsc2VcXFxcbiAgICAgICAgICAgIGlmIChqcy5pbmRleE9mKCc8Y29kZT7mlrnlnIYnKSAhPT0gLTEpIHtcXFxcblxcXFxuICAgICAgICAgICAgICAgIC8qaWYgKHNob3dDb250ZW50KSB7XFxcXG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDI7IGkrKylcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9Ki9cXFxcblxcXFxuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0ganMubWF0Y2goLzxjb2RlPuaWueWchltcXFxcXFxcXHNcXFxcXFxcXFNdKj88XFxcXFxcXFwvY29kZS9nKTtcXFxcblxcXFxuICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwgJiYgbGlzdC5sZW5ndGggIT09IDApIGhhc1J1bGUgPSAxO1xcXFxuICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IG51bGwgJiYgbGlzdC5sZW5ndGggPiAxKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCI8cD48L3A+XFxcXFxcXCIgKyBcXFxcXFxcIjxiaWc+PGI+5pys5paH5omA5pyJ6KeE5YiZ5LiA6ZSu5a+85YWlPC9iPjwvYmlnPlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnY29kZSYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbVRpdGxlID0gdGl0bGU7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ0V4cC50ZXN0KHRpdGxlKSA9PT0gdHJ1ZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkgbVRpdGxlID0gXFxcXFxcXCLkuIDplK7lr7zlhaVcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBSZWdFeHAuJDM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRpdGxlID0gKG1UaXRsZSAhPSBudWxsICYmIG1UaXRsZSAhPT0gJycpID8gbVRpdGxlIDogdGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChSZWdFeHAuJDIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcInNvdXJjZVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3RpdGxlXFxcXFxcXCI6XFxcXFxcXCIoLio/KVxcXFxcXFwiLy50ZXN0KG1UaXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGl0bGUgPSBSZWdFeHAuJDE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAobVRpdGxlICE9IG51bGwgJiYgbVRpdGxlICE9PSAnJykgPyBtVGl0bGUgOiB0aXRsZTtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+eCueWHu+WvvOWFpScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdydWxlOi8vJyArIGJhc2U2NEVuY29kZShkZWNvZGVVUklDb21wb25lbnQobGlzdFtqXS5zcGxpdCgnPicpWzFdLnNwbGl0KCc8LycpWzBdLnJlcGxhY2UoL2FtcDsvZywgJycpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csICc+JykpKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcblxcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICBpZiAodG9rZW4gIT09ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJJY29uID0gc3Rhckljb25zWzBdO1xcXFxuICAgICAgICAgICAgICAgIGxldCBsaWtlSWNvbiA9IGxpa2VJY29uc1swXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgY29tbWVudEljb24gPSBjb21tZW50SWNvbnNbMF07XFxcXG4gICAgICAgICAgICAgICAgLy8gbGV0IGFydGljbGVJY29uID0gYXJ0aWNsZUljb25zWzBdO1xcXFxuICAgICAgICAgICAgICAgIGxldCBzdGFySWNvbk1heCA9IHN0YXJJY29ucy5sZW5ndGggLSAxO1xcXFxuICAgICAgICAgICAgICAgIGxldCBsaWtlSWNvbk1heCA9IGxpa2VJY29ucy5sZW5ndGggLSAxO1xcXFxuICAgICAgICAgICAgICAgIGxldCBjb21tZW50SWNvbk1heCA9IGNvbW1lbnRJY29ucy5sZW5ndGggLSAxO1xcXFxuICAgICAgICAgICAgICAgIC8vIGxldCBhcnRpY2xlSWNvbk1heCA9IGFydGljbGVJY29ucy5sZW5ndGgtMTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoaWNvbkluZGV4ID09PSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4TGVuID0gTWF0aC5tYXgoc3Rhckljb25NYXgsIGxpa2VJY29uTWF4LCBjb21tZW50SWNvbk1heCAvKiwgYXJ0aWNsZUljb25NYXgqLyApO1xcXFxuICAgICAgICAgICAgICAgICAgICBpY29uSW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogKG1heExlbiArIDEpKSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHN0YXJJY29uID0gc3Rhckljb25zW2ljb25JbmRleCA+IHN0YXJJY29uTWF4ID8gc3Rhckljb25NYXggOiBpY29uSW5kZXhdO1xcXFxuICAgICAgICAgICAgICAgIGxpa2VJY29uID0gbGlrZUljb25zW2ljb25JbmRleCA+IGxpa2VJY29uTWF4ID8gbGlrZUljb25NYXggOiBpY29uSW5kZXhdO1xcXFxuICAgICAgICAgICAgICAgIGNvbW1lbnRJY29uID0gY29tbWVudEljb25zW2ljb25JbmRleCA+IGNvbW1lbnRJY29uTWF4ID8gY29tbWVudEljb25NYXggOiBpY29uSW5kZXhdO1xcXFxuICAgICAgICAgICAgICAgIC8vIGFydGljbGVJY29uID0gYXJ0aWNsZUljb25zW2ljb25JbmRleCA+IGFydGljbGVJY29uTWF4ID8gYXJ0aWNsZUljb25NYXggOiBpY29uSW5kZXhdO1xcXFxuICAgICAgICAgICAgICAgIGxldCBpc1N0YXJyZWQgPSAwO1xcXFxuICAgICAgICAgICAgICAgIGxldCBzdGFyU3RhdHVzID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RhclN0YXR1cyA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCBcXFxcXFxcIi5mYXZvcml0ZS5hY3RpdmUmJkh0bWxcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBzdGFyU3RhdHVzID0gJydcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJTdGF0dXMgIT09ICcnKSBpc1N0YXJyZWQgPSAxO1xcXFxuICAgICAgICAgICAgICAgIC8vIHNldEVycm9yKHN0YXJTdGF0dXMpO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHsgLy8gIHRleHRfY2VudGVyXzEgaWNvbl9zbWFsbF8zXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpc1N0YXJyZWQgPT09IDAgPyAn5pS26JePJyA6ICflt7LmlLbol48nLFxcXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBzdGFySWNvbixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQobVVybCkubGF6eVJ1bGUoKHRva2VuLCByZXN1bHRUaXBzLCBpc1N0YXJyZWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCB0b2tlbiA9ICBnZXRJdGVtKCdoaWtlcmJic190b2tlbicsICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtVXJsID0gaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC90b3BpY1xcXFxcXFxcLyhcXFxcXFxcXGQrKS8udGVzdChtVXJsKSA9PT0gdHJ1ZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHlJZCA9IFJlZ0V4cC4kMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXR5SWQgIT0gbnVsbCAmJiBlbnRpdHlJZCAhPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RhclVybCA9ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi9hcGkvdG9waWMvZmF2b3JpdGUvJyArIGVudGl0eUlkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdGFycmVkKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFyVXJsID0gJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL2FwaS9mYXZvcml0ZS9kZWxldGU/ZW50aXR5VHlwZT10b3BpYyZlbnRpdHlJZD0nICsgZW50aXR5SWQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtVXNlci1Ub2tlbic6IHRva2VuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogJycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2V0RXJyb3IgKG9wdGlvbnMpOyovXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFyUmVzdWx0ID0gZmV0Y2goc3RhclVybCwgb3B0aW9ucyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qc2V0RXJyb3IgKHN0YXJSZXN1bHQpOyovXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRUaXBzKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFyUmVzdWx0ID0gSlNPTi5wYXJzZShzdGFyUmVzdWx0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzdGFyUmVzdWx0Lm1lc3NhZ2U7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhclJlc3VsdC5tZXNzYWdlID09PSAnJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFyUmVzdWx0LnN1Y2Nlc3MgPT09IHRydWUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGlzU3RhcnJlZCA9PT0gMSA/ICflt7Llj5bmtojmlLbol48nIDogJ+aUtuiXj+aIkOWKnyc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJSZXN1bHQubWVzc2FnZSA9PT0gJ+ivt+WFiOeZu+W9lScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdoaWtlcmJic190b2tlbicsICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ+ivt+WFiOeZu+W9lSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ3RvYXN0Oi8vJyArIG1lc3NhZ2U7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZVxcXFxuICAgICAgICAgICAgICAgICAgICB9LCB0b2tlbiwgcmVzdWx0VGlwcywgaXNTdGFycmVkKVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7IC8vICB0ZXh0X2NlbnRlcl8xIGljb25fc21hbGxfM1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eCuei1nicsXFxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGxpa2VJY29uLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMycsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChtVXJsKS5sYXp5UnVsZSgodG9rZW4sIHJlc3VsdFRpcHMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtVXJsID0gaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgdG9rZW4gPSAgZ2V0SXRlbSgnaGlrZXJiYnNfdG9rZW4nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC90b3BpY1xcXFxcXFxcLyhcXFxcXFxcXGQrKS8udGVzdChtVXJsKSA9PT0gdHJ1ZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHlJZCA9IFJlZ0V4cC4kMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50aXR5SWQgIT0gbnVsbCAmJiBlbnRpdHlJZCAhPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlrZVVybCA9ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi9hcGkvdG9waWMvbGlrZS8nICsgZW50aXR5SWQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID0ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLVVzZXItVG9rZW4nOiB0b2tlblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzZXRFcnJvciAob3B0aW9ucyk7Ki9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpa2VSZXN1bHQgPSBmZXRjaChsaWtlVXJsLCBvcHRpb25zKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGxpa2VSZXN1bHQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VGlwcykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZVJlc3VsdCA9IEpTT04ucGFyc2UobGlrZVJlc3VsdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbGlrZVJlc3VsdC5tZXNzYWdlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpa2VSZXN1bHQubWVzc2FnZSA9PT0gJycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlrZVJlc3VsdC5zdWNjZXNzID09PSB0cnVlKSBtZXNzYWdlID0gJ+eCuei1nuaIkOWKnyc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaWtlUmVzdWx0Lm1lc3NhZ2UgPT09ICfor7flhYjnmbvlvZUnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaGlrZXJiYnNfdG9rZW4nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICfor7flhYjnmbvlvZUnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICd0b2FzdDovLycgKyBtZXNzYWdlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgdG9rZW4sIHJlc3VsdFRpcHMpXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflm57lpI0nLFxcXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBjb21tZW50SWNvbixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IG1VcmxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAvKmQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Y6f5paHJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogYXJ0aWNsZUljb24sXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBtVXJsXFxcXG4gICAgICAgICAgICAgICAgfSk7Ki9cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoIWdldEl0ZW0oXFxcXFxcXCJoaWtlcmJic190b2tlblxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbG9naW5QYWdlID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZlcmlmeT9ydWxlPVxcXFxcXFwiICsgXFxcXFxcXCLop4bnlYzorrrlnZtSXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2dpblBhZ2UgPSAnYmFzZTY0Oi8vJyArIGJhc2U2NEVuY29kZShsb2dpblBhZ2UoeyBvblN1Y2Nlc3ModXNlckluZm8pIHsgLypsb2codXNlckluZm8pKi8gfX0pKVxcXFxuICAgICAgICAgICAgICAgICAgICAvLyBsb2cobG9naW5QYWdlKVxcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiPHA+PC9wPlxcXFxcXFwiICsgJzxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nICsgJ+WmgumcgOaUtuiXj+aIlueCuei1nuWKn+iDve+8jOmcgOWFiCcgKyAnPGEgaHJlZj1cXFxcXFxcIicgKyBsb2dpblBhZ2UgKyAnXFxcXFxcXCI+55m75b2VPC9hPuS4gOasoeWGjei/lOWbnuWIt+aWsCcgKyBcXFxcXFxcIjwvZm9udD48L3NtYWxsPlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICBpZiAoc2hvd0NvbW1lbnQpIHtcXFxcbiAgICAgICAgICAgICAgICAvKmlmIChoYXNSdWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDI7IGkrKylcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9Ki9cXFxcblxcXFxuICAgICAgICAgICAgICAgIC9jdXJzb3I6XFxcXFxcXCIoLio/KVxcXFxcXFwiLy50ZXN0KGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBjdXJzb3JUZW1wID0gUmVnRXhwLiQxO1xcXFxuICAgICAgICAgICAgICAgIGxldCBjdXJzb3IgPSAoY3Vyc29yVGVtcCAhPSBudWxsICYmIGN1cnNvclRlbXAgIT09ICcnKSA/IGN1cnNvclRlbXAgOiAnMCc7XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKHtcXFxcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnY3Vyc29yJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGN1cnNvclxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHB1dFZhcih7XFxcXG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2ZpcnN0X3BhZ2VfY3Vyc29yJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGN1cnNvclxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwiPHA+PC9wPlxcXFxcXFwiICsgXFxcXFxcXCI8YmlnPjxiPlxcXFxcXFwiICsgcGFyc2VEb21Gb3JIdG1sKGh0bWwsICcuY29tbWVudC10aXRsZSYmSHRtbCcpICsgXFxcXFxcXCI8L2I+PC9iaWc+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHBsID0gcGFyc2VEb20oaHRtbCwgJy5jb21tZW50cyYmSHRtbCcpXFxcXG4gICAgICAgICAgICAgICAgICAgIC5tYXRjaCgvPGxpW1xcXFxcXFxcc1xcXFxcXFxcU10qPzxcXFxcXFxcXC9saS9nKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAocGwgPT0gbnVsbCB8fCBwbC5sZW5ndGggPT09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIjxwPjwvcD5cXFxcXFxcIiArICc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj7mmoLml6Dor4Torro8L2ZvbnQ+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGwubGVuZ3RoOyBqKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8oPChkaXZ8cCkoW1xcXFxcXFxcc1xcXFxcXFxcU10qPyk+KXw8ZGl2Pnw8cD58PFxcXFxcXFxcL2Rpdj58PFxcXFxcXFxcL3A+L2dcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50Q29udGVudCA9IHBhcnNlRG9tRm9ySHRtbChwbFtqXSwgJy5jb21tZW50LWNvbnRlbnQmJkh0bWwnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nIGNsYXNzPVxcXFxcXFwiYXZhdGFyKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pPi9nLCAnJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDwocCkoW1xcXFxcXFxcc1xcXFxcXFxcU10qPyk+KXw8cD58PFxcXFxcXFxcL3A+L2csICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88aW1nIChzcmN8ZGF0YS1zcmMpPVxcXFxcXFwiKC4qPylcXFxcXFxcIihbXFxcXFxcXFxzXFxcXFxcXFxTXSo/KT4vZywgXFxcXFxcXCI8aW1nIGRhdGEtdj5cXFxcXFxcIiwgaW1nVGFnUmVwbGFjZW1lbnQyKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88aW1nKFtcXFxcXFxcXHNcXFxcXFxcXFNdKj8pPi9nLCBpbWdFcnJvcilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPHNob3dpbWcvZywgJzxpbWcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRSZXBseVRleHQgPSBwYXJzZURvbUZvckh0bWwocGxbal0sICcuY29tbWVudC1xdW90ZSYmSHRtbCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21tZW50UXVvdGVVc2VybmFtZSA9IHBhcnNlRG9tRm9ySHRtbChjb21tZW50UmVwbHlUZXh0LCBcXFxcXFxcIi5xdW90ZS1uaWNrbmFtZSYmSHRtbFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tbWVudFF1b3RlVGltZSA9IHBhcnNlRG9tRm9ySHRtbChjb21tZW50UmVwbHlUZXh0LCBcXFxcXFxcIi5xdW90ZS10aW1lJiZIdG1sXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRSZXBseVRleHQgPSBjb21tZW50UmVwbHlUZXh0XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YVtcXFxcXFxcXHNcXFxcXFxcXFNdLio/PFxcXFxcXFxcL2E+L2csICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tbWVudFJlcGx5VGV4dEFycmF5ID0gY29tbWVudFJlcGx5VGV4dC5tYXRjaCgvPHBbXFxcXFxcXFxzXFxcXFxcXFxTXS4qPzxcXFxcXFxcXC9wPi9nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50Q29udGVudCA9IGFiYnJldmlhdGVSZXBseVRleHQoY29tbWVudENvbnRlbnQsIGNvbW1lbnRSZXBseVRleHRBcnJheSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tbWVudFF1b3RlVXNlcm5hbWUsICc8Zm9udCBjb2xvcj1cXFxcXFxcIicgKyBxdW90ZVVzZXJDb2xvciArICdcXFxcXFxcIj4nICsgY29tbWVudFF1b3RlVXNlcm5hbWUgKyAnPC9mb250PicpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRRdW90ZVRpbWUsICc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nICsgY29tbWVudFF1b3RlVGltZSArICc8L2ZvbnQ+Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHsgLy8gcCwtMlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIjxwPjwvcD5cXFxcXFxcIiArIGNvbW1lbnRDb250ZW50ICsgJzxicj48c21hbGw+JyArIHBhcnNlRG9tRm9ySHRtbChwbFtqXSwgJy5jb21tZW50LW5pY2tuYW1lJiZIdG1sJykucmVwbGFjZSgvPGFbXFxcXFxcXFxzXFxcXFxcXFxTXS4qPz4vZywgJzxmb250IGNvbG9yPVxcXFxcXFwiJyArIHVzZXJDb2xvciArICdcXFxcXFxcIj4nKS5yZXBsYWNlKC88XFxcXFxcXFwvYT4vZywgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCIpICsgJ1xcXFxcXFxcdFxcXFxcXFxcdDxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPicgKyBwYXJzZURvbUZvckh0bWwocGxbal0sICcuY29tbWVudC1tZXRhLS1zcGFuJiZUZXh0JykgKyAnPC9mb250Pjwvc21hbGw+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnPHAgc3R5bGU9XFxcXFxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7XFxcXFxcXCI+6K+l6aG16Z2i5peg5rOV6Kej5p6Q5oiW6K+d6aKY5LiN5a2Y5ZyoPC9wPjxwIHN0eWxlPVxcXFxcXFwidGV4dC1hbGlnbjogY2VudGVyO1xcXFxcXFwiPjxhIGhyZWY9XFxcXFxcXCInICsgTVlfVVJMICsgJ1xcXFxcXFwiPuafpeeci+WOn+aWhzwvYT48L3A+JyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxucmVzLmRhdGEgPSBkO1xcXFxuc2V0SG9tZVJlc3VsdChyZXMpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIumqjOivgemhtemdolxcXCIsXFxcInBhdGhcXFwiOlxcXCJ2ZXJpZnlcXFwiLFxcXCJydWxlXFxcIjpcXFwiZXZhbFByaXZhdGVKUyhcXFxcXFxcIjNjTFhqdEJDMEczZElBZjMyRVkwblFNNmhpMjVvY0h5TjBaY2NvUXA5cnZWNnpKOTlrSDBicnRFUnNjenVXK2NjczJ5UXlWSVU2aTJnR0dHQnRzZzNJNEoxUVRCeUxqT1ZBR0Vhb0hvVHFLMHA1YkY1YTZXQy9FQVZHRVFob2tvSVl4WFgrUGdDZWN1cWx1N0F0U2tueHd3R2RlNVU3RHhSSnRXWEhjS1dvMjBMVHhZQjhSM3JkeEVsbnV6T2ZFOXhocFU1K25GWmZZVWNZUnQwOC9xVGZMWW54eEpsN3M4R2hYT2ZLeDB6aFA1WUw5V0RtVHFUaHlrSjNXaVNqQmxpNnhJQ1dKclNQUWgzcm9YRnBhZ2owckRwbFZjTHZhMEIrS1YvcEc1Q1BSWXdQSzVJV0xtZng5WmJQa1ZMd1NPYUxuZ0NUcjhLMWNZVFZOYUhOUk5pWGJ5dU5QUWdMOFEwcHRxanl3QnhFb3AyaTVKbjVDdy8wUE1NY0lZazV2QUdDcGJlSVJCQm1NZGFDcU9UYUFvTUI4WDdRTTNxTWs0YkV5R3Q3OFRuS2ZKa0NhTU9RdUErbG8zYW0xak52WllrQ0o0ak9SakkxWmdUUXFFN1BmTFpOUlRQQ3RkKzMvdW9vNEF1VTM2eVdYWHhpamlrb2phVGJzdlZpRnl2djhLT3NCTWlvTGZuL1g0dVRMYVZSRENDYnBEc1RJZXRkbFFoQTBPQW5FOGw3MHRWNTg3S25CWnNhR1o5UE1rdk0zOHNRd0x4OXo4bE1WZzlSQmJBZS9lYjhzVnArTHRvNDdFVHZNekI1dHEzN25Ud1h1anREWVdIbnMrbEh5dm1qYU42NG5TMzRCWDBBZVZtVzcwa0NtNFg5UDkyc0tBOVNLKy9OSHNxZjEzQ092NzNSOWpvU1hxTGsyUG5sNDVmcGUvRWdsUTZKSDFmWkIrUW9EeGdSSjFXc0dnanJQK09Sb3owRGNPTFYyZ3BwUjBTUEFzWWpkbkJrTzFjQ1E2eCtXdWZRcjdKVzlsZUdHRFUyYXZNUU4wcUxPRlZFZEZldGhQZStiK0x3YlNmM3o2NVVvR2hGcmJWSXRGQU8vazV3L1RXMVYyNm9pbEZZeVhGWit2N0VIRThONVhicVBmTEc1QUFVRXZyY2hTNFdaQ25Dd2thMW9CUTcxOTYvUU9qalEyRjNzTVI5ZDREcjdVK1VZUW1IaDNGc0hMNzdOY2dYMmtaRVN3bnpGWjNiOHMvbUtnYWU3cDgvbGhNRmNCeVp4QUM3TGRXSHlkeDBoWitRdHJVL052ejRKRTVDM251WVdzNlBJOGZqMnFuM3NXeVQyOFBoVS9VbG1qRjVhQStlcHlWQytjWExmLzVzSkpDTmJiUklYcndDcDRXM3RwMHM3YzBoOWRmTmw4K29VOWxUakhuWU5aNmtRMktXY05rOWErUGlmMGNZckxHRytxY2ZXQURPVjA5ZlJ4NGliWUczK3d0cHBwMEk1TUVHemUzL3lHb1lwc0xUNXV5cjZDS1dRVm5qeHhjODBRd3JLT0ZrZ3haN21mcGszUUdab2FMQzM2THc0KzNKcUIwZlVzMk44MUU3RGRvMHVzeGU3SEdyLzltc0QrdmhEalYrOGJudER5TzU1eFVLNmlkT1BROGp3TTFuSjFkdTJsbVhwQnhiMFE1enhseUZwVlk1MG5kd2Z1aE55dWlZUWk1YTh4V0ZIV3J5SUJ2SnFibngwK0VGYktjemJyV21PUTNJUFMzK3NaZGprRlVQeE9XQk1FMDljaVgvcStNZzFFQWhmcmg3Y3pESUg1cnpnVzdaVnFHMGFVZEIxcEE5aG9jcGQrYlowLzR1akl3K01yT0dPTkhteHl2cTFjTFJEUU16NWk4L0kwVzNacFNoVWdzNkpQRStjaEQ1QWY1d3JoVjEzOTk5YnhpTGFNa1JtVGozUnUzVXRDeXl2TFNOWldjL3NJbi92V1NBSFU5blFVRUJHVXBsYnFNNkpkajJXaDNNM3loNnlLSmpkTGNZQVNlMWVOVFdzK2FlNWpvV0NZOEx6dXBuLzYvR0FpaThTN2hndE9mZmZleHA2ZEZHMnQ3dGJ6M3kzSGhBUTlHdU1DM2J6VDFiWlh1Nzg1VFlpblpKakFNNzIyVC9mVkNidFhPRW1Gc2N3aEdJS0ZPazJxOFZjVWM0YWtKYmNYVzRWc1g1UEVDcnlJVDhGVFovOW1hME9sWHdNNHcxU2k2dGlQOWpxVUZlOXNtaTd0dmltampkbWU4LzhXK2pTcjBvWHhIdzVnWHpqbE85RVJkd0E4UjViYXdFcjFLekdMeUFwYjlrM2tlVnJiYzI5cFI4Vjg4eldmV1IwbE10NHRFYVQxdHBjMjZhTVZ5SERLVzBjMTc3R2loYk5EN1d6WDNIdzVBQ3dVY2NLcHpQZXU4TEFhSGplbFNjdGRVNWp2V2tNaHJSZ0I1SUlxc3pLVU5HWUJXaVV4K1JLK2tNQXdoUktEcWlMbGVXQ3V5b2pwNk5SRmtIWkZGakJuZUZPNnFjNzZIU3c0emtpTlFKck8wS2dyR2JUZXYreGhtck84WDA2bSt0a2swZWNzRjRRYVRxUmpKRkEwcmladFRwYmMwYkwwdjBxdHh4cWRsRVc4dmlFcEV1K1M3bkFXeUo2bDJYaThmZTNyeHlzV1lJcVRVVVJzU3V1TlFlMzN1NWhEbXZnNnJveHJnYzhMN3BSSDZJREhDdkJMWHcrSjJ6dHRDeFdvZk1CNVhJY1k0dmE3ZnlBa1UvU0kxUTcwQ295OHQ0ZkZCakI0RGJ2VlNhK2FNbHVxS29QYUEvTVFNdHF1aUdKM1Z5aVJIamRLbG1PSmh1SFEzTVVUdXhDMGhEYVZPR0I1OW1tRlM5M2JsRmJLWXpBK3pXSFBnMW8xQzltOXJKZU5hcGY4RUEzOVFpTnZuVjdrckNJekFleGdVOWdNS05ZZEorNlhTdVUrNkJLRGU1TXozdkFWMjdZa0pDd216dCtCcGFlL09xbjEyOWdzWm1md1J5TDNVR3lpQWRaZTNNK1krMlpxd0d5THZRYTJnd0NGTVdxU1RKMmxtT1FIcWV6anI2NDhrd205WGpVRkV6WThIbG5MSzh0STFsWnord2lmKzlaSUFkVDJQSGJ2QWJNck5BV2lOUy91aDRpMlJreVJveDdoUFNmeVVmd3hRZnFMYVE2U0l5QjFuNGRlTmRQQlBzbmE2RWtPamxjVWZwY0hjbzVMR1RvU2E5UEN4WVpOUHV4M0lCaXR6eVVWd1QxT1M3V01XRG1xV293UDRBVG5LY1E5UnRKZ0hTUzY2bGhxZGtXSytvSnA1RFlMSHFHRmI5eDlTVENjY2N6Yk82RDF4ZFREOEd3bEtDSVFrV2ZxdjBJdmdDWnlzdEdFZTJFMnhGYjl5Y21sZjZuMFdxWkdFOHZVeXZuMDNmR3NkYndRT003T2xETDdEdnp6c09RbksrL2JDYzRuUlBpb0o2dUlsMWpGNXhFNU1uMk1JWEFOM1hWZVAyYlcyK3RBZEIwWnQ3MzNVR3lpQWRaZTNNK1krMlpxd0d5THZRYTJnd0NGTVdxU1RKMmxtT1FIcVJzTlZjdzFvelFYZklQVzJMUXNsdFVvM3NHVVZjbE1sMFlFU25qY21EejhQVm5WTCt6MS92ZEZDOHplV3JFdE5tZm1MbC9NeEJyRUdQRkcxK2N0QkYvOWFrVEZ3ZU9oWEM1VGYzeW5IcktQUFhIOVp6VHc0T2Q5L2JlMjZidU53Q1VpWFEzanlEWHVxOEhnM3pmZDVBbmtkSW43aHUwQmRkZlNZTDRTaER2V2tqVVVKa3BYYS8vWEZ0YXhNUXQ4RFArY1Fhb2ppeU1KTU84RzFxbCtnOEdzckFuZWJmV0ZraUlWNDROVmdnZW5lMVVHQ1dTM2Qxc1BJYUhuckF0RW9VQ3QrQVJySGdMWldpWjZPZHRxWWVTSXY3ajYrT0o5U0U3TkFFSkFJa2gvUmhsVTdpdng3RzFLUGFzSWlucnNpZ1dvbjdmSnhVMUpNRWx0NEVSNHdDK3dPNXNsRmZvZ05rL09QeTNCRHBKeURXbGFBTm8wL05YTldXenI1eWxUK0ZqSXZUN29OR1hKMFdYaU9RMU5iTjlaOG5mazMyRzlEdklwMWxBa2wyblJDN0xkV0h5ZHgwaForUXRyVS9Odno0U1ppSzhlUjltM0MyMzArZjBKakNEQUZ0cWtOU1ZUL0ZZK3YrajAwYjNzNDRQS0R1TXJvWmpQWEg0KzcyYkpQWEhPcURrVW95d0hmdnQvNHN6MmlZRndCRzFZVEJaeHhlcDRWY1orSGNPQ3l5dkxTTlpXYy9zSW4vdldTQUhVOXBPZUt0SkdYM1puVXd4YWNxbyt0V2E3dUw4QWJOMDlOV1FuMTBreGQzMjNTZnU1UmJJY25MRUczeWVxVUlOK1pKNVdxZVR6QU5uQTlFZTZ3ZUcyL3cyVXJ4MkVHMi8zakJqS2lJV3MyTlhQSmxhQ3pwaWRSYTBpczJGSlBWbGgvTXNyeTBqV1ZuUDdDSi83MWtnQjFQYmhaUzQ5ZXM2NGhnbzhzblUrbXQzWHgvMFAzRWQ5ZG1kdUhvdHJ6QmtFdGxnYUJpQyt6MlNwY3hCOWdaNkdYeXBMU1hXYWorcUVVYkdKS0V4K2pLL3Z5eXZMU05aV2Mvc0luL3ZXU0FIVTl2Yk81SHhJZVJoL3BsZUJOKys5YWVxOWdmQWNwTzdTT09FNmh2MzNwSmQyTlhXbzd5d3JoR2RjSk41Vnl0QXJ6alBFSnYyUExCZW11WDh1eEF0RDBVTDQ0U1VPeGtnbDI4dVAzZzRSR0N3L1IzbFV5cjdWaTVaMkM0RTdVK0ViaU5NK0xvT3NDSVZLUExJek1ZOVVJNTRaV0FuOFBDOE9BU25VbUt0NXM0VEx2aDhXK3UxbEwvMnVLTVFoZlQyZFBQQllzbkVlczViYWJFYnRHeEphR29VMWl6bkJIS3h2RnR0b1ZaczRSVVQ3Y2tHRXNROXAxRWpCZ2N2V2hlREVJeWJhQ3A3MXYxMUp2RDRheG9VMDFzQmg1T1RDbDdEdm9acUR3b2l4cDBPNW1NN3JHV0JoUTNOOUQ5Uks0RkRXVlpvZVVLbmE1cDJJQXdjdHloNElSbld0NjlOZzJKQlRUUDBkMjFRcnB5L2dheGVDbjlOVDdvbmk0UEJPamd4YkJlVWFLTzdEY0ZvL1VyZStpR2pzRG1Bek5oa2JERnlRUXZCUlFVcVdaSUxSN21UZG5ZSjNXRkowR250R1R2RW0rME9SaGEvdEt1dzBTcUxJaElYeENVeW4xNmhVbEFDUVRoMkdqSnd3RUFqMHl5dkxTTlpXYy9zSW4vdldTQUhVOW9TWFgvMEVWejJucENyNXNLWVZRbDA4aTE0QVBHNzA1aWhxbmJQY1hVTE5jL0hWTTFDZVpvUGt3L2ZKOVZsd1NnT29UZGdWUmM3NXZVeVNNT1lDcjZZdU1VYTNUdGt1Z2hWdDBJcXJLb1N6ZVl5QkZmM2RZK3U0Q2gyQTljeUwvaFlMNXFsTXNMZTdGemZDMG8yOVlFWW8rYjVxcVR2aEJPREdCQ2ZiVVN5d3l5dkxTTlpXYy9zSW4vdldTQUhVOXQwZXpxNkF0cFU0RldwRUxvVXJKanNEcUUzWUZVWE8rYjFNa2pEbUFxK21vM3NZbFlhTFMzTUZHNVc4R1hKbG5jc3J5MGpXVm5QN0NKLzcxa2dCMVBZNDk5bXA4U3MvQzN4OG1XaWpjVWVoOVI3TDF5REp3elhNNzBWV1NCZDFwaVl3Rm1XcVhuOGZYb2grSmo2bkpFNVNvM0dTOXcrSmZGaC9Ib09BODRxQ1czVjUrRG9zV1Q3ZVFSY0pCLzZVY204dnVHSWlraFhiOUtpeUtJWUJSdy9aejltd2hhdGM0aFN0T1h4NUtSMGRLWVB5WFFUNm9wd3dmL3l5cS9iWDJKWlVDekZWYVErbnp5QThOQis1SnBQT2xETDdEdnp6c09RbksrL2JDYzRuMGVkQ1R4UWIvT3R2U1NFSlR1WUh4RWZVdU1Ia1JYbkplRjJlMHlUcVRucmRXL1d3K2theVplczBDS0pzREgyTDZEek5hWU9HajRkV3FrVDZTNWVmZWJkbFpSVWFtZVFJalEvTmVxQk5nZFZuM05SanBzRW9yOG5KNWMydzNjM0R5eXZMU05aV2Mvc0luL3ZXU0FIVTlrODVHMGV1OG94T1d1ZUJMY3docFV2SHNwMVBqUFNrY0dsSm4rWHhWK2NSS0NvaDVUd05rUkNTWjdjVmQ0Vk12dEJOb3hWTFEzUTZSUzh1TS9WU0syTW4xOVFSeElkYStUeCtuS2ZENEdSZ0MvaVBmZWxDWXV1OUJ4Uis4VlBCRWZYamozZUN6NXdjYmdZV2RucnRTRnhHTzhGUDJnUE1zV1NzZmZmaCtjN2NveWpNaVBXKzBDa01BSUxWTktvR0dPZVJZNFlEY3UwcStFZUU1M0F2Ym9uQWQ2VVBXV2dSNndMSVBuVFVmdEZqRloxNzF6WDJlTnRjNkVXQUExZlpwQWtHdDR3K2VxR2gyU2txd0l6VmZIWUM3Ym96Y0JuWUZDbGQ5RlhPT2hmZjdTSlYwSk1ScEU1VGFBZ1VkODQzUkd1Q0ZscEhSM1Fqc2hxRlBwWDZPNnBmZ0tEYnBBTHZzMWg4VHpUVmc0enZWSmE4SjlxMXNKeXdxczJQNURKNDQzK2hURjdlUFVTUEJCYy81TGlnaWprPVxcXFxcXFwiKVxcXCJ9XVwifSIsInRpdGxlIjoi5paH5a2X5pWZ56iLIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement