Advertisement
xiaomianao666

邀您一起看:登录阿里云盘

Aug 25th, 2023
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥登录阿里云盘@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeWIl+ihqFwiLFwicGF0aFwiOlwiZGF0YVwiLFwicnVsZVwiOlwidmFyIHdyYXB1ID0gKHUpID0+IHtcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXCLmnKzlnLDovaznoIFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZSdcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIkpvZeeJiOmYv+mHjOS6keebmFxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NoYXJlP3BhZ2U9ZnlwYWdlJnJ1bGU96Zi/6YeM5LqR55uYJnNoYXJlX3VybD0nICsgdTtcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIuS6keebmOaxh+W9sVxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnO1xcbiAgICB9XFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIHU7XFxufTtcXG5cXG52YXIgY2hlY2thbGkgPSAocmVhbHVybCkgPT4ge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSByZWFsdXJsLnNwbGl0KFxcXCJjb20vcy9cXFwiKVsxXS5zdWJzdHJpbmcoMCwgMTEpO1xcbiAgICAgICAgaWYgKHJlYWx1cmwuaW5jbHVkZXMoXFxcImNvbS9zL1xcXCIpICYmIHJlYWx1cmwgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgc2hhcmUgPSBmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9zaGFyZV9saW5rL2dldF9zaGFyZV9ieV9hbm9ueW1vdXNcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL1xcXCJcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChzaGFyZS5pbmNsdWRlcyhcXFwic2hhcmVfbGluayBpc1xcXCIpIHx8IHNoYXJlLmluY2x1ZGVzKFxcXCJzaGFyZV9saW5rIGNhbm5vdFxcXCIpKSByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIHJldHVybiB0cnVlO1xcbn1cXG5cXG5sZXQgcnVsZXMgPSBbe1xcbiAgICAgICAgbmFtZTogXFxcIuS6keebmOi1hOa6kFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9yZXMueXVucGFuLndpbi8/UGFnZUluZGV4PVxcXCIgKyBwYWdlICsgXFxcIiZQYWdlU2l6ZT0xMiZLZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZUeXBlPSZUYWc9XFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIm1haW4mJi5jYXJkXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiLmNhcmQtbGluaywxJiZvbmNsaWNrXFxcIikubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCIuY2FyZC10aXRsZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGQoaXQsIFxcXCJpbWcmJnNyY1xcXCIsIHVybCksXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5LqR55uY6LWE5rqQPC9mb250PiZuYnNwO1xcXCIgKyAocGRmaChpdCwgXFxcIi5jYXJkLXRleHQsLTEmJlRleHRcXFwiKSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCJVUOS6keaQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkudXB5dW5zbzIuY29tL3NlYXJjaD9rZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlICsgXFxcIiZzX3R5cGU9MVxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy51cHl1bnNvLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogXFxcImNvZGU9MTkxOVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vbG9nKGJhc2U2NERlY29kZShodG1sKSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGh0bWwpKS5yZXN1bHQuaXRlbXM7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBpdC5wYWdlX3VybDtcXG4gICAgICAgICAgICAgICAgLy91ID0gdS5sZW5ndGggPiAwID8gdVswXSA6IHVybDtcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCJhbGl5dW5kcml2ZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlVQ5LqR5pCcPC9mb250PiZuYnNwO1xcXCIgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLnjKvni7jnm5jmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tL3NlYXJjaD9rPVxcXCIgKyBzLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb20vc2VhcmNoP2s9XFxcIiArIHNcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIjYXBwJiZhXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IFxcXCI8ZGl2PlxcXCIgKyBhcnJbaV0gKyBcXFwiPC9kaXY+XFxcIjtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCIvcy9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tXFxcIiArIHUucmVwbGFjZShcXFwiL3MvXFxcIiwgXFxcIi9jdi9cXFwiKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFwidGVtcGxhdGUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IFxcXCJub19zaG93X2RvbmF0ZT0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogaW5wdXQucmVwbGFjZShcXFwiL2N2L1xcXCIsIFxcXCIvcy9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gcGFyc2VEb21Gb3JIdG1sKGh0bWwsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXC9cXFxcLyh3d3dcXFxcLmFsaXl1bmRyaXZlXFxcXC5jb21cXFxcL3N8YWx5d3BcXFxcLm5ldClcXFxcL1xcXFx3Ki9nKSB8fCBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodG1sLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoaHRtbCkgKyAnPz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwdSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwZGZoKGl0LCBcXFwidGVtcGxhdGUsMSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLmmJPmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGtleWVuKHN0cikge1xcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjRPVG9TY1VGT2FlVlRySEVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjlDTEdhbzF2SEtxbTE3T3pcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXG4gICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uoc3RyKVxcbiAgICAgICAgICAgICAgICB9LCBrZXksIHtcXG4gICAgICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXCJodHRwczovL3lpc28uZnVuL2FwaS9zZWFyY2g/bmFtZT1cXFwiICsgcyArIFxcXCImcGFnZU5vPVxcXCIgKyBwYWdlLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8veWlzby5mdW4vaW5mbz9zZWFyY2hLZXk9XFxcIiArIHMsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogZ2V0SXRlbSgneWlzb3Vjb29rZScsICcnKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5jbHVkZXMoJ+eZu+W9leeUqOaIt+aXoOmZkOWIticpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBpID0gMDtcXG4gICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5aW1nbGluID0gJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4vY2FwdGNoYT90PScgKyBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSkgKyAnJztcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBjb252ZXJ0QmFzZTY0SW1hZ2UodHlpbWdsaW4pLnNwbGl0KCcsJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29kID0gcmVxdWVzdCgnaHR0cHM6Ly9hcGkubm4uY2kvb2NyL2I2NC90ZXh0Jywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXIgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVmZXJlcic6ICdodHRwczovL3lpc28uZnVuL2xvZ2luJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IGdldENvb2tpZSh0eWltZ2xpbilcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVzZXJOYW1lXFxcIjogXFxcInR2Ym94MjAyM1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJwYXNzd29yZFxcXCI6IFxcXCJUdmJveDIwMjNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29kZVxcXCI6IGNvZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXIuY29kZSA9PSAyMDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+aYk+aQnOeZu+WFpemqjOivgeaIkOWKnycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3lpc291Y29va2UnLCBnZXRDb29raWUoJ2h0dHBzOi8veWlzby5mdW4nKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXCIgKyBzICsgXFxcIiZwYWdlTm89XFxcIiArIHBhZ2UsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly95aXNvLmZ1bi9pbmZvP3NlYXJjaEtleT1cXFwiICsgcyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBnZXRJdGVtKCd5aXNvdWNvb2tlJywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGkrKztcXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoaSA8IDQpO1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShodG1sKS5kYXRhLmxpc3Q7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBrZXllbihpdC51cmwpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCAhdS5pbmNsdWRlcyhcXFwiYWxpeXVuXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaYk+aQnDwvZm9udD4mbmJzcDtcXFwiICsgKGl0LmdtdFNoYXJlIHx8IGl0LmdtdENyZWF0ZSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLmib7otYTmupBcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRodG1sKCkge1xcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zbz9maWxlbmFtZT1cXFwiICsgcyArIFxcXCImcGFnZT1cXFwiICsgcGFnZSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zdG9wLmh0bWxcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJvcmlnaW5cXFwiOiBcXFwiaHR0cHM6Ly96aGFveml5dWFuLmxhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogZ2V0SXRlbShcXFwienp5Y29va2VcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHNcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRlbnQtdHlwZVxcXCI6IFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHZhciBodG1sID0gZ2V0aHRtbCgpO1xcbiAgICAgICAgICAgIGlmICghaHRtbC5pbmNsdWRlcyhcXFwic2VhcmNoX2JveFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyID0gJ2RYTmxjbTVoYldVOWVYQnFNakF5TXlad1lYTnpkMjl5WkQxNWNHb3lNREl6JztcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2sgPSBKU09OLnBhcnNlKGZldGNoQ29va2llKCdodHRwczovL3poYW96aXl1YW4ubGEvbG9naXUuaHRtbCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwczovL3poYW96aXl1YW4ubGEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vemhhb3ppeXVhbi5sYS9sb2dpbi5odG1sJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0c1xcXCI6IFxcXCIxXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGJhc2U2NERlY29kZSh1c2VyKSxcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICB9KSkuam9pbignOycpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJ6enljb29rZVxcXCIsIGNvb2spO1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIuaJvui1hOa6kOeZu+WFpVxcXCIpO1xcbiAgICAgICAgICAgICAgICBodG1sID0gZ2V0aHRtbCgpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLm5ld3NMaXN0JiZsaTpub3QoOmZpcnN0LWNoaWxkKVxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcImEmJmhyZWZcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3poYW96aXl1YW4ubGEvXFxcIiArIHU7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0LCBcXFwiLm5ld3NfdGV4dCYmaDMmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7mib7otYTmupA8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwZGZoKGl0LCBcXFwiLm5ld3NfdGV4dCYmcCYmVGV4dFxcXCIpKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KF9saW5rc1swXSkgKyAnPz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLlsI/nurjmnaFcXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0dG9rZW4oKSB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcigneHp5dG9rZW4nLCAnJykubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IEpTT04ucGFyc2UocG9zdCgnaHR0cHM6Ly9naXRjYWZlLm5ldC90b29sL2FsaXBhcGVyLycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2dldF90b2tlbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4enR0b2tlbicsIHRva2VuKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TXlWYXIoJ3h6dHRva2VuJywgJycpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBjYXRfY29kZShhKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkLCBlLCBiID0gW1xcXCLljY7or63nlLXop4ZcXFwiLCBcXFwi5pel6Z+p55S16KeGXFxcIiwgXFxcIuasp+e+jueUteinhlxcXCIsIFxcXCLlhbbku5bnlLXop4ZcXFwiLCBcXFwi5Y2O6K+t55S15b2xXFxcIiwgXFxcIuaXpemfqeeUteW9sVxcXCIsIFxcXCLmrKfnvo7nlLXlvbFcXFwiLCBcXFwi5YW25LuW55S15b2xXFxcIiwgXFxcIuWNjuivreWKqOa8q1xcXCIsIFxcXCLml6Xpn6nliqjmvKtcXFwiLCBcXFwi5qyn576O5Yqo5ryrXFxcIiwgXFxcIue6quW9leeJh1xcXCIsIFxcXCLnu7zoibrniYdcXFwiLCBcXFwi5pWZ6IKy5Z+56K6tXFxcIiwgXFxcIuWFtuS7luinhumikVxcXCIsIFxcXCLljY7or63pn7PkuZBcXFwiLCBcXFwi5pel6Z+p6Z+z5LmQXFxcIiwgXFxcIuasp+e+jumfs+S5kFxcXCIsIFxcXCLlhbbku5bpn7PkuZBcXFwiLCBcXFwi5aix5LmQ6L2v5Lu2XFxcIiwgXFxcIuezu+e7n+i9r+S7tlxcXCIsIFxcXCLnvZHnu5zova/ku7ZcXFwiLCBcXFwi5Yqe5YWs6L2v5Lu2XFxcIiwgXFxcIuWFtuS7lui9r+S7tlxcXCIsIFxcXCLmvKvnlLtcXFwiLCBcXFwi5bCP6K+0XFxcIiwgXFxcIuWHuueJiOS5plxcXCIsIFxcXCLnn6Xor4bln7norq1cXFwiLCBcXFwi5YW25LuW5paH5qGjXFxcIiwgXFxcIuWjgee6uFxcXCIsIFxcXCLkurrnialcXFwiLCBcXFwi6aOO5pmvXFxcIiwgXFxcIuWFtuS7luWbvueJh1xcXCIsIFxcXCLlhbbku5ZcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGMgPSBbXFxcImh5ZHNcXFwiLCBcXFwicmhkc1xcXCIsIFxcXCJvbWRzXFxcIiwgXFxcInF0ZHNcXFwiLCBcXFwiaHlkeVxcXCIsIFxcXCJyaGR5XFxcIiwgXFxcIm9tZHlcXFwiLCBcXFwicXRkeVxcXCIsIFxcXCJoeWRtXFxcIiwgXFxcInJoZG1cXFwiLCBcXFwib21kbVxcXCIsIFxcXCJqbHBcXFwiLCBcXFwienlwXFxcIiwgXFxcImp5cHhcXFwiLCBcXFwicXRzcFxcXCIsIFxcXCJoeXl5XFxcIiwgXFxcInJoeXlcXFwiLCBcXFwib215eVxcXCIsIFxcXCJxdHl5XFxcIiwgXFxcImtmcmpcXFwiLCBcXFwieHRyalxcXCIsIFxcXCJ3bHJqXFxcIiwgXFxcImJncmpcXFwiLCBcXFwicXRyalxcXCIsIFxcXCJtaFxcXCIsIFxcXCJ4c1xcXCIsIFxcXCJjYnNcXFwiLCBcXFwienNweFxcXCIsIFxcXCJxdHdkXFxcIiwgXFxcImJ6XFxcIiwgXFxcInJ3XFxcIiwgXFxcImZqXFxcIiwgXFxcInF0dHBcXFwiLCBcXFwicXRcXFwiXTtcXG4gICAgICAgICAgICAgICAgZm9yIChkID0gMCwgZSA9IGMubGVuZ3RoOyBlID4gZDsgZCsrKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNbZF0gPT0gYSkgcmV0dXJuIGJbZF07XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSBwb3N0KFxcXCJodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvXFxcIiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3UuZ2l0Y2FmZS5uZXQvJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFxcXCJzZWFyY2hcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogXFxcIndlYlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0b2tlbjogZ2V0dG9rZW4oKSxcXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IHNcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpO1xcbiAgICAgICAgICAgIGlmIChsaXN0LmRhdGEpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QuZGF0YTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQudGl0bGU7XFxuICAgICAgICAgICAgICAgIGxldCBtdXJsID0gJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBpdC5rZXlcXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja2FsaShtdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oiaIFxcXCIgKyB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5bCP57q45p2hPC9mb250PiZuYnNwO1xcXCIgKyBjYXRfY29kZShpdC5jYXQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczogaXQuZGVzXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBtdXJsICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KG11cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIG11cmwpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIueOqeWBtuWTpeWTpVxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cDovL3dvZ2cueHl6L2luZGV4LnBocC92b2RzZWFyY2gvXFxcIiArIHMgKyBcXFwiLS0tLS0tLS0tLVxcXCIgKyBwYWdlICsgXFxcIi0tLS5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5tb2R1bGUtaXRlbXMmJi5tb2R1bGUtc2VhcmNoLWl0ZW0nKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2gzJiZhJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyaWFsID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLnZpZGVvLXNlcmlhbCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBsZXQgdWltYWdlID0gcGFyc2VEb20oaXQsICcubGF6eWxvYWQmJmRhdGEtc3JjJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbShpdCwgJ2gzJiZhJiZocmVmJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXG4gICAgICAgICAgICAgICAgLy9sZXQgZGV0ID0gcmVxdWVzdCh1LCB7fSk7XFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGJldC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIGxldCBiZXRoID0gYmF0Y2hGZXRjaChiZXQpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJldGgubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShiZXRoW2ldLCAnLm1vZHVsZS1wbGF5ZXItbGlzdCYmcCcpXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAncCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiL3MvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGJldFtpXS5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPueOqeWBtuWTpeWTpTwvZm9udD4mbmJzcDtcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcbicgKyB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiBcXFwi6Zi/6YeM5LqR55uY572RXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL3d3dy5hbHlwdy5jbi9zZWFyY2gucGhwP3E9XFxcIiArIHMgKyBcXFwiJnBhZ2U9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcubGlzdCYmbGknKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJnRpdGxlJyk7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyaWFsID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLmZhLWNsb2NrLW8mJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHVpbWFnZSA9IHBhcnNlRG9tKGl0LCAnaW1nJiZzcmMnLCAnaHR0cHM6Ly93d3cuYWx5cHcuY24vJyk7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb20oaXQsICdhJiZocmVmJywgJ2h0dHBzOi8vd3d3LmFseXB3LmNuLycpO1xcbiAgICAgICAgICAgICAgICAvL2xldCBkZXQgPSByZXF1ZXN0KHUsIHt9KTtcXG4gICAgICAgICAgICAgICAgaWYgKCF1dGl0bGUuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9sb2coYmV0KTtcXG4gICAgICAgICAgICBpZiAoYmV0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmV0aC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGJldGhbaV0sICdib2R5JiZhW2hyZWZePWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zL10nKVxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2cobGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGJldFtpXS5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPumYv+mHjOS6keebmOe9kTwvZm9udD4mbmJzcDtcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcbicgKyB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiBcXFwi5Zyf5ouo6bygXFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9zZWFyY2guaHRtbD9rZXl3b3JkPScgKyBzICsgJyZjYXRlZ29yeT05ODM5MjAmZGF0YV90eXBlPTk4NzkxMCcsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5zZWFyY2hfcmVzdWx0X25ldGRpc2tfbGlzdCYmYScpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhpdCk7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLm5ldGRpc2tfaXRlbV9kZXRhaWxfbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXRpdC5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0LFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWcn+aLqOm8oOaQnDwvZm9udD4mbmJzcDtcXFwiICsgXFxcIlxcXFxuXFxcIiArIHUsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIumYv+mHjOaQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KCdodHRwczovL2FsaXNvLmNjL3MvJyArIHMgKyAnLScgKyBwYWdlICsgJy0wLmh0bWwnLCB7fSk7XFxuXFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcuc2VhcmNoLXJlc3VsdCYmLnJlc291cmNlLWl0ZW0nKTtcXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBsaXN0W2pdO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0ID0gcGFyc2VEb21Gb3JIdG1sKHUsICdoMyYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXRpdC5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXQsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGFyc2VEb20odSwgJ2gzJiZhJiZocmVmJywgJ2h0dHBzOi8vYWxpc28uY2MvJykpLmxhenlSdWxlKCh3cmFwdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjcnkoc3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiOUVCMjBEREZENkFGQkQ2OFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoc3RyLCBrZXksIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dCA9IHBhcnNlRG9tKGh0bWwsICcuYnV0dG9uJiZocmVmJywgJ2h0dHBzOi8vYWxpc28uY2MvJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coYnV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ290ID0gcmVxdWVzdChidXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGdvdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChwYXJzZURvbUZvckh0bWwoZ290LCAnaGVhZCYmc2NyaXB0LDEmJkh0bWwnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KGRlY3J5KGJhc2U2NC5zcGxpdCgnIScpWzBdKSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwdSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+6Zi/6YeM5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwYXJzZURvbUZvckh0bWwodSwgJy50aW1lJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwgLyp7XFxuICAgICAgICBuYW1lOiBcXFwi5Zyf54uX5pCcXFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly93d3cudHVnb3Vzb3UuY29tL3NlYXJjaCcsIHtcXG4gICAgICAgICAgICAgICAgYm9keTogJ2tleXdvcmQ9JyArIHMsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5sYXl1aS1jb250YWluZXIsMSYmLmxheXVpLXJvdzpoYXMoYSknKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiL3MvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7lnJ/ni5fmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIHBhcnNlRG9tRm9ySHRtbChpdCwgJ3AsLTEmJlRleHQnKSArIFxcXCJcXFxcblxcXCIgKyB1LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sICove1xcbiAgICAgICAgbmFtZTogXFxcIuS6keebmOWIhuS6q+ekvlxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5KHN0cikge1xcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjVGNkIyQUszM0RBU0QxMjNcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHN0ciwga2V5LCB7XFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vYXBpL2Jicy9hcGkvZ2V0ZGF0YT9rZXk9JyArIHMgKyAnJnR5cGU9dmlkZW8nLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3Lnl1bnBhbmZlbnhpYW5nLmNuL1xcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBqc29uID0gZGVjcnkoSlNPTi5wYXJzZShodG1sKS5kYXRhKTtcXG4gICAgICAgICAgICAvL2xvZyhqc29uKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShqc29uKTsgLy9bMF0ucmVzdWx0Lml0ZW1zO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXQucGlkO1xcbiAgICAgICAgICAgICAgICBiZXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9hcGkvYmJzL2FwaS9nZXRhcnRpY2xlP2lkPScgKyB1cmwsXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxuXFxuICAgICAgICAgICAgLy9sb2coYXJ0aWNsZSk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZXRoLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShiZXRoW2ldKS5kYXRhO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhqc29uKTtcXG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBqc29uLmRvd25sb2FkLnNwbGl0KCdAJyk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBsaXN0W2pdO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToganNvbi50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIHUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jliIbkuqvnpL48L2ZvbnQ+Jm5ic3A7XFxcIiArIChqc29uLmNyZWF0ZXRpbWUpICsgXFxcIlxcXFxuXFxcIiArICgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIHUpLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLnm5jmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBwYWdlID0gKHBhZ2UgLSAxKSAqIDEwO1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly93d3cucGFuc2VhcmNoLm1lL3NlYXJjaD9rZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZvZmZzZXQ9XFxcIiArIHBhZ2UgKyBcXFwiJnBhbj1hbGl5dW5kcml2ZVxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcblxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcuZ3JpZCYmLnNoYWRvdzpoYXMoYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dKScpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdCwgJy5icmVhay1hbGwmJlRleHQnKS5zcGxpdCgnaHR0cCcpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGFyc2VEb21Gb3JIdG1sKGl0LCAnaW1nJiZzcmMnKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7nm5jmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwYXJzZURvbUZvckh0bWwoaXQsICdwJiZUZXh0JykpICsgXFxcIlxcXFxuXFxcIiArICh1KSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwiRE9WWOaQnFxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vYXBpLmRvdngudGsvYWxpL3NlYXJjaD93ZD1cXFwiICsgcztcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuICAgICAgICAgICAgLy9sb2coYmFzZTY0RGVjb2RlKGh0bWwpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShodG1sKS5saXN0O1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gaXQudm9kX2NvbnRlbnQ7XFxuICAgICAgICAgICAgICAgIC8vdSA9IHUubGVuZ3RoID4gMCA/IHVbMF0gOiB1cmw7XFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja2FsaSh1KSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oiaIFxcXCIgKyBpdC52b2RfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnZvZF9waWMsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+RE9WWOaQnDwvZm9udD4mbmJzcDtcXFwiICsgXFxcIlxcXFxuXFxcIiArICh1KSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwi5b+F5bqUXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL2NuLmJpbmcuY29tL3NlYXJjaD9xPVxcXCIgKyBzICsgXFxcIithbGl5dW5kcml2ZSZxcz1kcyZmb3JtPVFCUkVcXFwiO1xcbiAgICAgICAgICAgIGlmIChwYWdlICE9IDEpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gZ2V0TXlWYXIoXFxcImJpbmdcXFwiLCB1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vY24uYmluZy5jb20vXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIC8vXFxcIlgtUmVxdWVzdGVkLVdpdGhcXFwiOiBcXFwiY29tLmV4YW1wbGUuaGlrZXJ2aWV3XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybCk7XFxuICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKGl0LmluY2x1ZGVzKFxcXCJOZXh0IHBhZ2VcXFwiKSB8fCBpdC5pbmNsdWRlcyhcXFwi5LiL5LiA6aG1XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1MiA9IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhcXFwibmV4dCBwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyh1Mik7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiYmluZ1xcXCIsIHUyKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodSA9PSBudWxsIHx8IHQgPT0gbnVsbCB8fCAhaXQuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICghaXQuaW5jbHVkZXMoXFxcIue9keebmFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFwi5LqR55uYXFxcIikgJiZcXG4gICAgICAgICAgICAgICAgICAgICFpdC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcInl1bnBhblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodS5zdGFydHNXaXRoKFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgZG9tID0gZ2V0SG9tZSh1KS5yZXBsYWNlKFxcXCJodHRwOi8vXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImh0dHBzOi8vXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2xpbmtzID0gdC5tYXRjaCgvaHR0cHM6XFxcXC9cXFxcLyh3d3dcXFxcLmFsaXl1bmRyaXZlXFxcXC5jb21cXFxcL3N8YWx5d3BcXFxcLm5ldClcXFxcL1xcXFx3Ki9nKSB8fCBbXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAvL2MgPSAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAvL2M9d3JhcHUoX2xpbmtzWzBdKVxcbiAgICAgICAgICAgICAgICAvL31cXG4gICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAxICYmIF9saW5rc1sxXS5yZXBsYWNlKF9saW5rc1swXSwgXFxcIlxcXCIpLnJlcGxhY2UoL1thLXpBLVowLTldKy9nLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBjID0gd3JhcHUoX2xpbmtzWzBdKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5b+F5bqUPC9mb250PiZuYnNwO1xcXCIgKyBkb20sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9saW5rcyA9IGh0bWwubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbGlua3MubGVuZ3RoID4gMSAmJiBfbGlua3NbMV0ucmVwbGFjZShfbGlua3NbMF0sIFxcXCJcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSBNWV9SVUxFLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnI9XFxcIiArIHJ1bGUgKyBcXFwiJm1vZGU9XFxcIiArIG1vZGUgKyBcXFwiIyNcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUsIGNvbmZpZy5tb2RlKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH1cXG5dO1xcblxcblxcbi8v5bm25Y+R6KeE5YiZ5pWwXFxubGV0IGNjb2YgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jY29mJylcXG5ydWxlcy5wdXNoKGNjb2YpXFxuLy/lubblj5Hop4TliJnmlbBcXG5sZXQgc2l6ZSA9IDEwO1xcblxcbiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhZ2UsIHJ1bGUpIHtcXG4gICAgaWYgKCFwYWdlICYmICFydWxlKSB7XFxuICAgICAgICByZXR1cm4gcnVsZXMubWFwKGl0ID0+IGl0Lm5hbWUpO1xcbiAgICB9XFxuICAgIGlmIChydWxlICE9IG51bGwpIHtcXG4gICAgICAgIGlmIChwYWdlICE9IG51bGwgJiYgcGFnZSA+IDEpIHtcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSk7XFxuICAgIH1cXG4gICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBzdGFydCArIDEpIHtcXG4gICAgICAgIHJldHVybiBbXTtcXG4gICAgfVxcbiAgICBsZXQgbGVuID0gc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxuICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydFxcbiAgICB9XFxuICAgIHJldHVybiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic291XCIsXCJydWxlXCI6XCJsZXQgciA9IGdldEl0ZW0oXFxcInJcXFwiLCBcXFwiXFxcIik7XFxubGV0IHMgPSBnZXRNeVZhcigncycsICcnKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGxldCBkbW9kZSA9IGdldEl0ZW0oXFxcImRtb2RlXFxcIiwgXFxcIuacrOWcsOi9rOeggVxcXCIpO1xcbiAgICBpbml0Q29uZmlnKHtcXG4gICAgICAgIG1vZGU6IGRtb2RlXFxuICAgIH0pO1xcbiAgICBpZiAoZG1vZGUgPT0gXFxcIuacrOWcsOi9rOeggVxcXCIpIHtcXG4gICAgICAgIGxldCBpY3kgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXFxcIjtcXG4gICAgICAgIGxldCBhID0gZmV0Y2goaWN5KTtcXG4gICAgICAgIGlmICghYSB8fCBhID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiIzEzQjYxQlxcXCI+4paQIDwvZm9udD48Yj7muKnppqjmj5DnpLo8Yj4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9sb2dpblxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmnKrmo4DmtYvliLDnmbvlvZXkv6Hmga/vvIzngrnmiJHot7PovaznmbvlvZXotKblj7fpobXpnaLvvIznmbvlvZXpmL/ph4zkupHnm5jotKblj7flkI7mlrnlj6/kvb/nlKjmnKzlnLDovaznoIHmqKHlvI9cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFwi55m75b2V6Zi/6YeM5LqR55uYXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInNcXFwiKTtcXG4gICAgfSkpO1xcbiAgICBsZXQgdGlwID0gXFxcIuS6keebmOaQnOe0ouWQmyDmo4DntKLlip/og73nlLHlr7nlupTnvZHnq5nmj5DkvpvvvIzmnKzop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrlcXFwiO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpcCxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGlwKSA9PiB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5L2/55So6K+05piOXFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogdGlwICsgXFxcIu+8jOacrOinhOWImeS7o+eggeWujOWFqOW8gOa6kO+8jOS7heS+m+WtpuS5oOWSjOeglOeptu+8m+WmguaenOaDs+imgeaSreaUvuWOn+Wni+aWh+S7tu+8jOWPr+S7peWwhuaooeW8j+WIh+aNouWIsEpvZeeJiOmYv+mHjOS6keebmO+8jOaIluiAheWIh+WIsOS6keebmOaxh+W9se+8m+eCueWHu+S4i+aWueehruWumuaMiemSrui3s+i9rOS6keebmOaxh+W9seWwj+eoi+W6j1xcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06IFxcXCInaGlrZXI6Ly9ob21lQOS6keebmOaxh+W9sSdcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgdGlwKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb24yXFxcIlxcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5qih5byP77yaXFxcIiArIGRtb2RlLFxcbiAgICAgICAgdXJsOiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIumAieaLqeaooeW8j1xcXCIsXFxuICAgICAgICAgICAgb3B0aW9uczogW1xcXCLmnKzlnLDovaznoIFcXFwiLCBcXFwiSm9l54mI6Zi/6YeM5LqR55uYXFxcIiwgXFxcIuS6keebmOaxh+W9sVxcXCIsIFxcXCLlrpjmlrlBUFBcXFwiLCBcXFwi55m75b2V6LSm5Y+3XFxcIl0sXFxuICAgICAgICAgICAgY29sOiAxLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKFxcXCLnmbvlvZXotKblj7dcXFwiID09IGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9sb2dpbj9wYWdlVGl0bGU955m75b2V6Zi/6YeM5LqR55uYXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcImRtb2RlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuWumOaWuUFQUFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzor7fnoa7kv53miYvmnLrmnInlronoo4XpmL/ph4zkupHnm5jlrpjmlrlBUFBcXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXCJKb2XniYjpmL/ph4zkupHnm5hcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcjEgPSBmZXRjaChcXFwiaGlrZXI6Ly9ob21lQOmYv+mHjOS6keebmFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyMSB8fCByMS5sZW5ndGggPD0gNSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBydSA9ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcIua1t+mYlOinhueVjOmmlumhtemikemBk+inhOWImeOAkOmYv+mHjOS6keebmOOAke+/pWhvbWVfcnVsZV91cmzvv6VodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD01NjU2XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogTVlfUlVMRS50aXRsZSArICfmj5DnpLonLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAn5pys6KeE5YiZ5L6d6LWW6Zi/6YeM5LqR55uY6KeE5YiZ77yM54K55Ye75LiL6Z2i55qE56Gu5a6a5oyJ6ZKu5a+85YWl77yM5rOo5oSP5a+85YWl5ZCO5LiA5a6a6KaB55m75b2V5LqR55uY6LSm5Y+377yM5ZCm5YiZ5LiN6IO955SoJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybTogcnUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogcnVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+35a+85YWl57y65aSx55qE6KeE5YiZXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzor7fnoa7kv53mnInnmbvlvZXotKblj7dcXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn++8jOazqOaEj+imgeWcqOS6keebmOaxh+W9seiuvue9rumHjOmdoueZu+W9lei0puWPt1xcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb24xXFxcIlxcbiAgICB9KTtcXG5cXG4gICAgbGV0IGlkID0gRGF0ZS5ub3coKSArIE1ZX1JVTEUudGl0bGU7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl5YWz6ZSu6K+NJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcigncycsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFwic3NcXFwiLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3MnLCAnJylcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKSgpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJcXFwiID09IHIgPyBcXFwi4oCc4oCc5YWo6YOo4oCd4oCdXFxcIiA6IFxcXCLlhajpg6hcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcInJcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCJcXG4gICAgfSk7XFxuICAgIGZvciAobGV0IGl0IG9mIHJ1bGVzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdCA9PSByID8gXFxcIuKAnOKAnFxcXCIgKyBpdCArIFxcXCLigJ3igJ1cXFwiIDogaXQsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChyKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInJcXFwiLCByKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgIH0sIGl0KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxuICAgIGlmICghcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCIjMTNCNjFCXFxcIj7ilpAgPC9mb250PjxiPuaQnOe0ouiusOW9lTxiPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBpZCArIFxcXCI6c2VhcmNoSGlzdG9yeVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIC8vbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgW10pO1xcbiAgICAgICAgbGV0IGkgPSAwO1xcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGhpc3RvcnkpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZToga2V5LFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGlkLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHRyYSA9IGZpbmRJdGVtKGlkICsgXFxcInNzXFxcIikuZXh0cmE7XFxuICAgICAgICAgICAgICAgICAgICBleHRyYS5kZWZhdWx0VmFsdWUgPSBrZXk7XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgfSwgaWQsIGtleSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjprZXk6XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaTlhbPplK7or406XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoaWQsIGtleSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3Rvcnkuc3BsaWNlKGksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgaGlzdG9yeSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oaWQgKyBcXFwiOmtleTpcXFwiICsga2V5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90b2FzdCgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlkLCBrZXksIGkpXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmuIXnqbrorrDlvZVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu5a6a5riF6Zmk5YWo6YOo5pCc57Si6K6w5b2V77yfXFxcIikuY29uZmlybSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKGlkICsgXFxcIjprZXlcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcihpZCArIFxcXCI6c2VhcmNoSGlzdG9yeVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaWQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaWQpLFxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGkrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6YO95rKh5pyJ5ZOmfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmUnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogJ3lwai1sJ1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgbGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgW10pO1xcbiAgICBsZXQgaWkgPSBoaXN0b3J5LmluZGV4T2Yocyk7XFxuICAgIGlmIChpaSA+IC0xKSB7XFxuICAgICAgICBoaXN0b3J5LnNwbGljZShpaSwgMSk7XFxuICAgIH1cXG4gICAgaWYgKGhpc3RvcnkubGVuZ3RoID4gMjApIHtcXG4gICAgICAgIGhpc3Rvcnkuc3BsaWNlKGhpc3RvcnkubGVuZ3RoIC0gMSwgMSk7XFxuICAgIH1cXG4gICAgaGlzdG9yeS51bnNoaWZ0KHMpO1xcbiAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgaGlzdG9yeSk7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikocCwgciAhPSBcXFwiXFxcIiA/IHIgOiBudWxsKTtcXG5cXG4gICAgbGV0IHBhZ2VpZCA9IFxcXCJ5cGotcGFnZVxcXCIgKyBwO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIHAgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFwiICsgZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIGxvZyhkYXRhLmxlbmd0aCk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIC8v5aSa57q/56iL5Yqg6L29ICAgICAgICBcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXCJcXFwiID09IHIgPyAxIDogcDtcXG4gICAgICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5maW5kKHMsIHJlYWxQYWdlKTtcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcbiAgICAgICAgICAgICAgICBpZDogXFxcInJ1bGVAXFxcIiArIGl0Lm5hbWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFwibGlzdGVuZXI6IFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxuICAgICAgICAgICAgICAgIHBhcmFtLmkgPSBwYXJhbS5pICsgMTtcXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IGl0LnRpdGxlIDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwiX19hcHBcXFwiICsgTVlfUEFHRSArIFxcXCJAXFxcIiArIHBhcmFtLmosXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLpobXpnaJcIixcInBhdGhcIjpcInNvdXBcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuaWYgKE1ZX1BBUkFNUy5rZXkpIHtcXG4gICAgcHV0TXlWYXIoXFxcInNcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG59XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uvc291XFxcIikpLnJ1bGUpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQ0NPRlwiLFwicGF0aFwiOlwiY2NvZlwiLFwicnVsZVwiOlwidmFyIHdyYXB1ID0gKHUpID0+IHtcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXCLmnKzlnLDovaznoIFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZSdcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIkpvZeeJiOmYv+mHjOS6keebmFxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NoYXJlP3BhZ2U9ZnlwYWdlJnJ1bGU96Zi/6YeM5LqR55uYJnNoYXJlX3VybD0nICsgdTtcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIuS6keebmOaxh+W9sVxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnO1xcbiAgICB9XFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIHU7XFxufTtcXG4kLmV4cG9ydHMgPSB7XFxuICAgIG5hbWU6ICdDQ09GJyxcXG4gICAgcGFnZTogdHJ1ZSxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgbGV0IGQgPSBbXVxcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGJ5dGVzVG9TaXplLFxcbiAgICAgICAgICAgIGNvbG9yXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdG9vbHMnKTtcXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vcGFuLmNjb2YuY2MvYXBpL3NlYXJjaCcsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vcGFuLmNjb2YuY2Mvc2VhcmNoP2tleXdvcmQ9JyArIHNcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgXFxcInBhZ2VTaXplXFxcIjogMjAsXFxuICAgICAgICAgICAgICAgIFxcXCJwYWdlTnVtXFxcIjogcGFnZSxcXG4gICAgICAgICAgICAgICAgXFxcImtleXdvcmRcXFwiOiBzLFxcbiAgICAgICAgICAgICAgICBcXFwiZnJvbU1vYmlsZVxcXCI6IHRydWVcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpXFxuICAgICAgICAgICAgLmRhdGEucm93c1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0LmZpbGVOYW1lXFxuICAgICAgICAgICAgbGV0IG11cmwgPSBpdC51cmxcXG4gICAgICAgICAgICBsZXQgdHlwZSA9IGl0LnR5cGUucmVwbGFjZSgvZm9sZGVyLywgJ+aWh+S7tuWkuScpLnJlcGxhY2UoL2ZpbGUvLCAn5paH5Lu2JylcXG4gICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5DQ09GPC9mb250PiZuYnNwOycgKyAn5paH5Lu257G75Z6L77yaJyArIHR5cGUgKyAn77yM5paH5Lu25aSn5bCP77yaJyArIGJ5dGVzVG9TaXplKGl0LnNpemUpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdShtdXJsKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBieXRlc1RvU2l6ZShzaXplKSB7XFxuICAgIGlmIChzaXplIDwgMC4xICogMTAyNCkge1xcbiAgICAgICAgLy/lsI/kuo4wLjFLQu+8jOWImei9rOWMluaIkEJcXG4gICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMikgKyBcXFwiQlxcXCI7XFxuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQgKiAxMDI0KSB7XFxuICAgICAgICAvLyDlsI/kuo4wLjFNQu+8jOWImei9rOWMluaIkEtCXFxuICAgICAgICBzaXplID0gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDIpICsgXFxcIktCXFxcIjtcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQgKiAxMDI0KSB7XFxuICAgICAgICAvLyDlsI/kuo4wLjFHQu+8jOWImei9rOWMluaIkE1CXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpICsgXFxcIk1CXFxcIjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOWFtuS7lui9rOWMluaIkEdCXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXCJHQlxcXCI7XFxuICAgIH1cXG4gICAgLy8g6L2s5oiQ5a2X56ym5LiyXFxuICAgIGxldCBzaXplU3RyID0gc2l6ZSArIFxcXCJcXFwiLFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55aSE55qE57Si5byVXFxuICAgICAgICBpbmRleCA9IHNpemVTdHIuaW5kZXhPZihcXFwiLlxcXCIpLFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55ZCO5Lik5L2N55qE5YC8XFxuICAgICAgICBkb3UgPSBzaXplU3RyLnN1YnN0cihpbmRleCArIDEsIDIpO1xcbiAgICAvLyDliKTmlq3lkI7kuKTkvY3mmK/lkKbkuLowMO+8jOWmguaenOaYr+WImeWIoOmZpDAwXFxuICAgIGlmIChkb3UgPT09IFxcXCIwMFxcXCIpIHJldHVybiBzaXplU3RyLnN1YnN0cmluZygwLCBpbmRleCkgKyBzaXplU3RyLnN1YnN0cihpbmRleCArIDMsIDIpO1xcbiAgICByZXR1cm4gc2l6ZTtcXG59XFxuJC5leHBvcnRzLmJ5dGVzVG9TaXplID0gYnl0ZXNUb1NpemU7XFxuJC5leHBvcnRzLmNvbG9yID0gZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXG4gICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbn1cXG5cXG4kLmV4cG9ydHMuc2xlZXAgPSBmdW5jdGlvbih0aW1lb3V0KSB7XFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAodGltZW91dCk7XFxufVxcblxcbmZ1bmN0aW9uIGh0bWxUYWcodGFnLCB0ZXh0KSB7XFxuICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwiPFxcXCIgKyB0YWcgKyBcXFwiPlxcXCIgKyB0ZXh0ICsgXFxcIjwvXFxcIiArIHRhZyArIFxcXCI+XFxcIjtcXG5cXG59XFxuJC5leHBvcnRzLmh0bWxUYWcgPSBodG1sVGFnO1xcbiQuZXhwb3J0cy5zbWFsbCA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgcmV0dXJuIGh0bWxUYWcoXFxcInNtYWxsXFxcIiwgdGV4dCk7XFxufVxcblxcbmZ1bmN0aW9uIGdldFRpbWUoZmlsZSxpc1N0YW5kYXJkKSB7XFxuICAgIGlzU3RhbmRhcmQgPSBpc1N0YW5kYXJkfHxmYWxzZTtcXG4gICAgbGV0IHRUaW1lID0gZmlsZS51cGRhdGVkX2F0IHx8IGZpbGUudGltZV9zdHIgfHwgXFxcIlxcXCI7XFxuICAgIHRUaW1lID0gdFRpbWUuc3BsaXQoXFxcIlRcXFwiKTtcXG4gICAgbGV0IGRhdGUgPSB0VGltZVswXTtcXG4gICAgaWYoaXNTdGFuZGFyZCl7XFxuICAgICAgICBkYXRlID0gZGF0ZS5yZXBsYWNlKC8tL2csXFxcIi9cXFwiKTtcXG4gICAgfVxcbiAgICB0VGltZSA9IHRUaW1lWzFdLnNwbGl0KC9afFxcXFwuLyk7XFxuICAgIGRhdGUgKz0gXFxcIiBcXFwiICsgdFRpbWVbMF07XFxuICAgIHJldHVybiBkYXRlO1xcbn1cXG5mdW5jdGlvbiBnZXRUaW1lSW50KHRpbWVTdHIpe1xcbiAgICByZXR1cm4gKG5ldyBEYXRlKHRpbWVTdHIpKS5nZXRUaW1lKClcXG59XFxuJC5leHBvcnRzLmdldFRpbWUgPSBnZXRUaW1lO1xcblxcbmxldCBjaG5OdW1DaGFyID0ge1xcbiAgICDpm7Y6IDAsXFxuICAgIOS4gDogMSxcXG4gICAg5LqMOiAyLFxcbiAgICDkuIk6IDMsXFxuICAgIOWbmzogNCxcXG4gICAg5LqUOiA1LFxcbiAgICDlha06IDYsXFxuICAgIOS4gzogNyxcXG4gICAg5YWrOiA4LFxcbiAgICDkuZ06IDlcXG59O1xcblxcbmxldCBjaG5OYW1lVmFsdWUgPSB7XFxuICAgIOWNgToge1xcbiAgICAgICAgdmFsdWU6IDEwLFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXG4gICAgfSxcXG4gICAg55m+OiB7XFxuICAgICAgICB2YWx1ZTogMTAwLFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXG4gICAgfSxcXG4gICAg5Y2DOiB7XFxuICAgICAgICB2YWx1ZTogMTAwMCxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxuICAgIH0sXFxuICAgIOS4hzoge1xcbiAgICAgICAgdmFsdWU6IDEwMDAwLFxcbiAgICAgICAgc2VjVW5pdDogdHJ1ZVxcbiAgICB9LFxcbiAgICDkur86IHtcXG4gICAgICAgIHZhbHVlOiAxMDAwMDAwMDAsXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gQ2hpbmVzZVRvTnVtYmVyKGNoblN0cikge1xcbiAgICBsZXQgcnRuID0gMDtcXG4gICAgbGV0IHNlY3Rpb24gPSAwO1xcbiAgICBsZXQgbnVtYmVyID0gMDtcXG4gICAgbGV0IHNlY1VuaXQgPSBmYWxzZTtcXG4gICAgbGV0IHN0ciA9IGNoblN0ci5zcGxpdCgnJyk7XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQgbnVtID0gY2huTnVtQ2hhcltzdHJbaV1dO1xcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgbnVtYmVyID0gbnVtO1xcbiAgICAgICAgICAgIGlmIChpID09PSBzdHIubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IG51bWJlcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0udmFsdWU7XFxuICAgICAgICAgICAgc2VjVW5pdCA9IGNobk5hbWVWYWx1ZVtzdHJbaV1dLnNlY1VuaXQ7XFxuICAgICAgICAgICAgaWYgKHNlY1VuaXQpIHtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IChzZWN0aW9uICsgbnVtYmVyKSAqIHVuaXQ7XFxuICAgICAgICAgICAgICAgIHJ0biArPSBzZWN0aW9uO1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gMDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IChudW1iZXIgKiB1bml0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbnVtYmVyID0gMDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcnRuICsgc2VjdGlvbjtcXG59XFxuXFxuZnVuY3Rpb24gbmFtZUNvbXBhcmUoYSwgYikge1xcbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcXG4gICAgICAgIHJldHVybiBhID09IG51bGwgPyBiID09IG51bGwgPyAwIDogLTEgOiAxO1xcblxcbiAgICBhID0gYS5yZXBsYWNlKC8oW+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5neWNgeeZvuWNg+S4h+S6v10pL2csIGZ1bmN0aW9uKG1hdGNoLCBwMSwgcDIsIHAzLCBvZmZzZXQsIHN0cmluZykge1xcbiAgICAgICAgLy8gcDEgaXMgbm9uZGlnaXRzLCBwMiBkaWdpdHMsIGFuZCBwMyBub24tYWxwaGFudW1lcmljc1xcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxuICAgIH0pXFxuICAgIGIgPSBiLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxuICAgICAgICAvLyBwMSBpcyBub25kaWdpdHMsIHAyIGRpZ2l0cywgYW5kIHAzIG5vbi1hbHBoYW51bWVyaWNzXFxuICAgICAgICByZXR1cm4gQ2hpbmVzZVRvTnVtYmVyKHAxKTtcXG4gICAgfSlcXG5cXG4gICAgbGV0IE5VTUJFUlMgPSBqYXZhLnV0aWwucmVnZXguUGF0dGVybi5jb21waWxlKFxcXCIoPzw9XFxcXFxcXFxEKSg/PVxcXFxcXFxcZCl8KD88PVxcXFxcXFxcZCkoPz1cXFxcXFxcXEQpXFxcIilcXG4gICAgbGV0IHNwbGl0MSA9IE5VTUJFUlMuc3BsaXQobmV3IGphdmEubGFuZy5TdHJpbmcoYSkpO1xcbiAgICBsZXQgc3BsaXQyID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhiKSk7XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oc3BsaXQxLmxlbmd0aCwgc3BsaXQyLmxlbmd0aCk7IGkrKykge1xcbiAgICAgICAgbGV0IGMxID0gc3BsaXQxW2ldLmNoYXJDb2RlQXQoMCk7XFxuICAgICAgICBsZXQgYzIgPSBzcGxpdDJbaV0uY2hhckNvZGVBdCgwKTtcXG4gICAgICAgIGxldCBjbXAgPSAwO1xcbiAgICAgICAgbGV0IHplcm9DaGFyQ29kZSA9ICcwJy5jaGFyQ29kZUF0KDApO1xcbiAgICAgICAgbGV0IG5pbmVDaGFyQ29kZSA9ICc5Jy5jaGFyQ29kZUF0KDApO1xcblxcbiAgICAgICAgaWYgKGMxID49IHplcm9DaGFyQ29kZSAmJiBjMSA8PSBuaW5lQ2hhckNvZGUgJiYgYzIgPj0gemVyb0NoYXJDb2RlICYmIGMyIDw9IG5pbmVDaGFyQ29kZSkge1xcbiAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDFbaV0pLmNvbXBhcmVUbyhuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoc3BsaXQyW2ldKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoY21wID09PSAwKSB7XFxuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gL1thLXpBLVowLTldL1xcbiAgICAgICAgICAgIGxldCBzMSA9IFN0cmluZyhzcGxpdDFbaV0pXFxuICAgICAgICAgICAgbGV0IHMyID0gU3RyaW5nKHNwbGl0MltpXSlcXG4gICAgICAgICAgICBpZiAocmVnZXgudGVzdChzMSkgfHwgcmVnZXgudGVzdChzMikpIHtcXG4gICAgICAgICAgICAgICAgY21wID0gbmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQxW2ldKS5jb21wYXJlVG8obmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQyW2ldKSk7XFxuICAgICAgICAgICAgICAgIC8vIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICdlbicpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ3poJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoY21wICE9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGNtcDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgbGVuZ3RoQ21wID0gc3BsaXQxLmxlbmd0aCAtIHNwbGl0Mi5sZW5ndGg7XFxuICAgIC8vIGlmIChsZW5ndGhDbXAgIT09IDApIGxlbmd0aENtcCA9IGxlbmd0aENtcCA+IDAgPyAtMSA6IDE7XFxuICAgIHJldHVybiBsZW5ndGhDbXA7XFxufVxcblxcbiQuZXhwb3J0cy5zb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIHNvcnQpIHtcXG4gICAgaWYgKHNvcnQgPT09IFxcXCLnsbvlnotcXFwiKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuexu+Wei+aOkuW6j1xcXCIpO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gYS50eXBlIC0gYi50eXBlXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFwi5ZCN56ewXFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLlkI3np7DmjpLluo9cXFwiKTtcXG4gICAgICAgIC8vIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAvLyAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSwgXFxcInpoXFxcIilcXG4gICAgICAgIC8vIH0pO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmFtZUNvbXBhcmUoYS5uYW1lfHxhLnRpdGxlLCBiLm5hbWV8fGIudGl0bGUpO1xcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSBpZiAoc29ydCA9PT0gXFxcIuWkp+Wwj1xcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5aSn5bCP5o6S5bqPXFxcIik7XFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHJldHVybiAoYS5zaXplIHx8IE51bWJlcihhLnNpemVfc3RyKSB8fCAwKSAtIChiLnNpemUgfHwgTnVtYmVyKGIuc2l6ZV9zdHIpIHx8IDApO1xcbiAgICAgICAgfSk7XFxuICAgIH1lbHNlIGlmIChzb3J0ID09PSBcXFwi5pe26Ze0XFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLml7bpl7TmjpLluo9cXFwiKTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGdldFRpbWVJbnQoZ2V0VGltZShhLHRydWUpKSAtIGdldFRpbWVJbnQoZ2V0VGltZShiLHRydWUpKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGxpc3RcXG59XFxuXFxuZnVuY3Rpb24gc2ltaWxhcihzLCB0LCBmKSB7Ly/liKTmlq3kuKTkuKrlrZfnrKbkuLLkuYvpl7TnmoTnm7jkvLzluqZcXG4gICAgaWYgKCFzIHx8ICF0KSB7XFxuICAgICAgICByZXR1cm4gMFxcbiAgICB9XFxuICAgIGlmKHMgPT09IHQpe1xcbiAgICAgICAgcmV0dXJuIDEwMDtcXG4gICAgfVxcbiAgICB2YXIgbCA9IHMubGVuZ3RoID4gdC5sZW5ndGggPyBzLmxlbmd0aCA6IHQubGVuZ3RoXFxuICAgIHZhciBuID0gcy5sZW5ndGhcXG4gICAgdmFyIG0gPSB0Lmxlbmd0aFxcbiAgICB2YXIgZCA9IFtdXFxuICAgIGYgPSBmIHx8IDJcXG4gICAgdmFyIG1pbiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XFxuICAgICAgICByZXR1cm4gYSA8IGIgPyAoYSA8IGMgPyBhIDogYykgOiAoYiA8IGMgPyBiIDogYylcXG4gICAgfVxcbiAgICB2YXIgaSwgaiwgc2ksIHRqLCBjb3N0XFxuICAgIGlmIChuID09PSAwKSByZXR1cm4gbVxcbiAgICBpZiAobSA9PT0gMCkgcmV0dXJuIG5cXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyBpKyspIHtcXG4gICAgICAgIGRbaV0gPSBbXVxcbiAgICAgICAgZFtpXVswXSA9IGlcXG4gICAgfVxcbiAgICBmb3IgKGogPSAwOyBqIDw9IG07IGorKykge1xcbiAgICAgICAgZFswXVtqXSA9IGpcXG4gICAgfVxcbiAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykge1xcbiAgICAgICAgc2kgPSBzLmNoYXJBdChpIC0gMSlcXG4gICAgICAgIGZvciAoaiA9IDE7IGogPD0gbTsgaisrKSB7XFxuICAgICAgICAgICAgdGogPSB0LmNoYXJBdChqIC0gMSlcXG4gICAgICAgICAgICBpZiAoc2kgPT09IHRqKSB7XFxuICAgICAgICAgICAgICAgIGNvc3QgPSAwXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY29zdCA9IDFcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZFtpXVtqXSA9IG1pbihkW2kgLSAxXVtqXSArIDEsIGRbaV1baiAtIDFdICsgMSwgZFtpIC0gMV1baiAtIDFdICsgY29zdClcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgcmVzID0gKDEgLSBkW25dW21dIC8gbCkgKjEwMFxcbiAgICByZXR1cm4gcmVzLnRvRml4ZWQoZilcXG59XFxuXFxuJC5leHBvcnRzLnNpbWlsYXIgPSBzaW1pbGFyO1xcbiQuZXhwb3J0cy5yZW1vdmVFeHQgPSBmdW5jdGlvbiAoZmlsZSl7XFxuICAgIHJldHVybiBmaWxlLnNwbGl0KCcuJykuc2xpY2UoMCwtMSkuam9pbignLicpXFxufTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInVcIixcInBhdGhcIjpcInVcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHJ1bGUsIG9yaWdpbiwgbW9kZSkge1xcbiAgICByZXR1cm4gJC50b1N0cmluZygocnVsZSwgb3JpZ2luLCBtb2RlKSA9PiB7XFxuICAgICAgICBsZXQgaG9zdCA9IG9yaWdpbi5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcImh0dHA6Ly98aHR0cHM6Ly9cXFwiKSwgXFxcIlxcXCIpLnNwbGl0KFxcXCIvXFxcIilbMF07XFxuICAgICAgICBsZXQgaG9zdHMgPSBob3N0LnNwbGl0KFxcXCIuXFxcIik7XFxuICAgICAgICBpZiAoaG9zdHMubGVuZ3RoID4gMikge1xcbiAgICAgICAgICAgIGhvc3QgPSBob3N0c1tob3N0cy5sZW5ndGggLSAyXSArIFxcXCIuXFxcIiArIGhvc3RzW2hvc3RzLmxlbmd0aCAtIDFdO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIm1hZ25ldFxcXCIpKSB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcIuajgOa1i+WIsOaWsOeahOejgemTvuWcsOWdgO+8jOeCueWHu+ehruWumuaMiemSruWNs+WPr+aSreaUvu+8jOeCueWHu+WPlua2iOaMiemSruWPr+S7peWkjeWItumTvuaOpVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hZztcXG4gICAgICAgICAgICAgICAgfSwgaW5wdXQpLFxcbiAgICAgICAgICAgICAgICBjYW5jZWw6ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIG1hZ1xcbiAgICAgICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmUuY29tXFxcIikgJiYgbW9kZSAhPSBcXFwi5a6Y5pa5QVBQXFxcIikge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKCdjaGVja3VybD91cmw9JykgJiYgaW5wdXQuaW5jbHVkZXMoJyZ1cmxyZWZlcicpKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnNwbGl0KCcmdXJscmVmZXInKVswXS5zcGxpdCgnY2hlY2t1cmw/dXJsPScpWzFdKTtcXG4gICAgICAgICAgICAgICAgLy9sb2coJ+i0tOWQpycraW5wdXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIumYv+mHjOS6keebmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD1cXFwiICsgdXJsICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxuICAgICAgICB9IGVsc2UgaWYgKC9cXFxcLihtcDN8ZmxhY3xtNGEpJC8udGVzdChpbnB1dCkpIHtcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8odXJsKTtcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LmluY2x1ZGVzKGhvc3QpICYmIGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLor6bmg4VcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3lzZng/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImcj1cXFwiICsgcnVsZSArIFxcXCImbW9kZT1cXFwiICsgbW9kZSArIFxcXCIjI1xcXCIgKyB1cmwsXFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlLCBtb2RlKTtcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgLy/og73llKTotbdBUFDnmoTnmb3lkI3ljZVcXG4gICAgICAgICAgICBsZXQgd2hpdGUgPSBbXFxuICAgICAgICAgICAgICAgIFxcXCJxa2xpbmtcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiYmRuZXRkaXNrXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcInh1bmxlaWFwcFxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJzbWFydGRyaXZlXFxcIlxcbiAgICAgICAgICAgIF07XFxuICAgICAgICAgICAgbGV0IGluV2hpdGUgPSB3aGl0ZS5maWx0ZXIoaXQgPT4gaW5wdXQuc3RhcnRzV2l0aChpdCkpLmxlbmd0aCA+IDA7XFxuICAgICAgICAgICAgaWYgKCFpbldoaXRlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCAmJiBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCh1cmwpO1xcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcbiAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgIH1cXG4gICAgfSwgcnVsZSwgb3JpZ2luLCBtb2RlKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ5c2Z4XCIsXCJwYXRoXCI6XCJ5c2Z4XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCBydWxlID0gZ2V0UGFyYW0oXFxcInJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgbW9kZSA9IChnZXRQYXJhbShcXFwibW9kZVxcXCIpIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdO1xcbmxldCBpdGUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91XFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLCBtb2RlKTtcXG5sZXQganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgciA9ICQkJCgpLmxhenlSdWxlKCh0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0KTtcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wYXJzZUxhenlSdWxlKHIpO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6IGl0ZSxcXG4gICAgICAgIGpzOiBqcyxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IHVybFxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Zi/6YeMbGF6eVwiLFwicGF0aFwiOlwiYWxpbGF6eVwiLFwicnVsZVwiOlwiZXZhbFByaXZhdGVKUyhcXFwick8rMzd1RytiMkpibDkxSlhlMUFMYWNBY1JLMXhpa0tOU2Z4M09KTnY5TlJIRjVlRldSZzV0ZC8yVndtUWNGVm1FRWM0UkpGU3RsSnFFbkZWbkFnV2ZuaE1tNENIZDk1a0FHdHp4YlRlQTh4bFdYZWhjUm0rbC9ONytoWUd2TzZaNUJkRHNZVmpINnVwbW9RQmNWYjB5WFdxMVBHNnBLNUJHWGtjSGZmdTF1V214ZEdqa3VpcFV0eEJMU1ArdFpMcnh6NGl0OWhEZmJyV3lTQ2lOZjhOeWo4ODB6LzQ3UjJBaW9wa2MxeG05YUtXRDRRdWx0aWx1dk1mVEh6L1l6SzJSVlcyZElJZ3JjNTEySjRwU281cktaSXFJdUVKcGw2eVBvTGliMVg5d0R6TG1Dd2RjdHZqTUNjVFk4bjVBQnVSR2xrVkpBQ2dNSnFZbFNWalhWZ1pwbXdQSVlRbkk0dlRJUUZMU1B5anpsb1M1M0lzazJBdXdjOXEyQklSN01GcjRENlJGU3lHMnBYbEVwWjkxVm1HbkNLeE9OSmczTDBuV0dzQnZTRXNnVGN4aDQ5dVFDZjk0RE5NakhUSysvTmxGMnlqMHN6U3dESWo5OS9wSmQwWlJVRjU1eVl0dnZ5UWVlTmd4YUlXdFkxcHF1RGhNdGdUUEd0ZW0xVUtsTTVuSzRJK0ZxaHZiQWN6WGxZaGhxM0QrQTlSQnNKaDV5RWtQUnV4UldYQTJOV1gyaGloZWVNV0NvZS85WjZVbTlzTFNNcU5lMGg3WVJIbUtnSkUwWnNBYTdIRmZYV3NDY2tJOEYxNVdZVHY3ZG50dzRSQmZMcU1CZm0ydnlIem10NzdtU0RqbkxPclZKenhEKy9VenYzQmF4YjlCVlZGTy9rVnFUTVNMa0ZncUtLTXdIaW1TcXBHaURZRFlMNXJFQm0zbWRJVjV6UVZOV1VSZUY5MERQS3JhSGhYWHVXUFRRb1MyZEFBYlhzRWxua2xpcUllbDNPb0x2ems3STg1b2xZYWRzVGl3TXpVd0JhRC8rN00raHVMK1A0Q3k4RTBGK0tvTmtpZ081bVFncUxNT2MrcE10WkRLRzl0L0RPWFJDOXVFL0hTTUdSTVZQUmJ0SDZXTkErbEhNM2hORFNQSENBbFYrOXRjSythQ2pQQjRDcmRub29jQnpuWml2NjZzZ2FSbFk0MGRrRFpNZWVsZWhVbG5qUVpBTXlZd1N0UldpWDY1bEEreUxLUkVkY04xaTlHV3UxajJrYS81ZXZSVHUrSlpjVW95eDlmRFRVbG1NT0FDSjZRdkgzT3BiWTNVQlBzY005cS9ZM2pqWFJGZm1yZy9ZcFA3VkFWYnpqTnZjT3pwUXkrdzc4ODdEa0p5dnYyd25PSjd6TnZEZ0h1dmRjRXl4ekFLZ0lDZ2d1Ly91L3VMY094TEMzTFVGRUFOQUhlUEI1ZjZyMmdGamthcTRzeFlpOHQrVC8zVnBzKzdQN3czQ1VyRXh5c2swSVFRZXJLZDlJMWNWcVVUdnIrMDBRZjRFbUhWYXZlYlY3c3FFMWZPQ09aTWVnRGQzUkFSRDhTSkwxa3ZMMURRUWVnSlpDODVCNEpWcU9XY3VlaXBOYTBoTng3UWhLbm5zWjlDMFQxVEl4NFIvL2xLNFVncjN1NWV1bnVwam1RK2RYRGNEOXBwYWZNK0lzdXZDRFo0VWRMWWtJRktMSms1Z2Q5RmVqVmlOTGRkYWdnTm03S3d6SkJoa1dHYWJzeTFydU1tcm5MNFlFa2ZlQ3N1RzlwR1Q1ZkxaNnpYaHNET1kwZHdrKzZqOUI3QjViYkpZV3NQeGI4MjVnbkVwV1U5YTg4VmhXak1qdlR0dEJFWDlWMEZVNys2aWRiU2JYcjErMVdTaXBkd1I0SXpoVTlJMzVoWnpvOGppRk1idFQyeHBEWk5BenczdngxeXZMNnk0UFBMZTN4TmxXcUEzbUdJQlpJV3puY1ZTTVFkL2todXNleU1zWmFRZ013Ryt0MkR3S2tRQVNMbnlsS3Z0R2E3dG9yV2RBc0ZPdGcxQTJZL21kZk9CM2RKcElqTHdqZmVIcjlyTG5FckQ4K09oTVByMG9rOXl1SkZNUzJRcXBCYy9qRDgxM2dqNDNmQlRLdTRSVkh0eGkvL3ZwZGV2QXlHRDlYbERFWVZRNy9CKzFTRWNsM3hqeE5PZXRLaVdSRE4vNy9SWlkyVUlKaWc1TXZkS1E3YzN2dG9oMmtXMDlDQXlBK2hvZGNXTm5qNFd4dmliV3JuVjNjcGdFMGI2UEthd0NYc1ZLWWFVYmpsUmEzbHhVcWl0NE8yYkRYQXltVWU0NiswQlVQdEF2RlorS2p5VEY3MmZGRWc4YUJ2THluWXhpY0dyN0VWMVhwSlYrckdHZHNpNTNuS01WZDRXRHNnUnFNNmN3K0Q5a0JJaE9CempzeXdLenh3ckloajRYYjBwL0lvQ2tZWEFMNlNNRCtPb0FzWXgzaGFxNmpvRWF6SmxoRE8rbWRHOC9GZUNaMTBJckhUbmdzeHhGei91blRlRTkyNlZVeXl2TFNOWldjL3NJbi92V1NBSFU5cC9VRjBXa1hVL2Q3ajRlenp1TXhGRzUycHIwNGRCMmVMMTBFVTBrSFBLeU51Vk9YTmxxVXRjVnZmMkVCdW1oMXB1Q0RhbVlESWNsbUt3STNXUEJmaUZZMWVOU3ZGU2NEbm1xV2dqeUIwNUJVbWJuUStTWW4wc01UVUhUd0xtVUdmU053NUNnUHRBMkt3NW01bkgwSy9TVVZzcGpNRDdOWWMrRFdqVUwyYjJzcThRNTJVb3p3TnNPQUl0N2lNY2ZZVXNpOXpXRGs5K2tyU0ZXWHRyS2lUMVFYS0U3V0wzSUo3VGlHOHBScy9MNGVrNUtoU0lUWTJmdkFhK2txblZvS3FtM1JwaFhid045SE5ZSU5NYmdoeVVkbG9LQnpqbWpEb3lXeW1CcVM4S2ViMWxTSHA4SmNjT09zNVp0bWlUa2VDVDVPbDBxMmRUYm9QNGhjWWhtVld4RkZ6emQ2T202c1RxWU9CNFZHRjFFdEFHN0dEUmNSdVhXRVlQU2szcUl1ZHp1RnZzRytnZk56MndnVWtDYWNsUU1pZnJvcVllanpHckJhTHpIc1JqdHpwUXkrdzc4ODdEa0p5dnYyd25PSnhhY2E1M1hiNERwcDdwMHcrazZCc1hrU1ZkampLeVRqZFNXdm5DZDlCd1dFVWRqb3JBSTdBWkVNZHc3TXJRY0l0L3dNeW1YSFNaU2hGN09la3g5bW5JYWE2RFFvWVZQYnlPSDNXSzdaQ00zL2VJd21hVjR3c1pQcjVGbXZMUkJTcTh5VlJpVFNXeWVMUEZQZG5iRjhOcmNEYWRZNnZka2YxTnc5ejljY25zN2Z0WVdlNGdBSWhVVkI2anBzUElMOGUzcDg5a0JkZWRWZ3RqbnBPYUlyK2tNTkhDcWxoazdHQUhPMjcya0Q4dVFIT0o2WWgxN0FyNEdDMlJkWGpCTTl4dUxzUEtYbXQ2WEJMLzl1MjkyY0l3NVZ3cFpTU0UwU09hUWZ2M1BNN1BrWnVuR2RIakdSNXdvaDVIeXpKUmFRT21zTjBpNG52SEUzd01lN2dTUmxKT1didGhhT1RFTSt2YUxUZ3A3WkZMVjN6Sm5pYmdWUEdFb2p4WjU3V1Y2ZDVldVV4ODNjZTF1ek5kLzNqa2pUZWdlNlZ2cVNJYXJZZzhHS3pobmMvMDBhTXdKMHdPRWlzTFhPUlh3UkExUy9IRVAwU3I2dkdUTG1NUFo1TzlSc0t5NE92S1AwQ2dCR2xxdGdlQnU0NDlsMlNVY0ZkajAyY2JmMVgwdFAxQlBMZTZ4ZjJIZmJ6MnF0RmhxdzZXVFhMRkpIL2lraXJWOGdVaFpyY0tWSGFiUUlMeTRSNmpZR3RFdkloNldCN0ZzWGxteko1Y2RxeGU3VDk1K0RxQjVkQjBZUlZYZkxFM2U3SjV1eTN4RWZaZDhIemcxN0gwTnVuV2tPREdxYjgrR2dpeWhjNHVyeWIyYlllVU1RekRNeDl6eUVuU3c4b0Z4RUVUeE94a0Y1MHBvWWVHazlPdTJBVXI2cmlaNldBYmlXMnlHSy8rOTl1OXo4NyszWU92Y3dRZ0RQcXJqeCt4K04zQVJhVWVtV2hBbWlyMUZkZ21mRHc2K01qVUlPaGZ0ZkdsUkZ5TjZpNlZPb1ZvTmNkUVJndGU3WkduMjVIT2UwYmF1M2Mva3Q2V1FFOXNsOEZhYkMweDJnOGMraFh0Nk5HR2pKakV2RUEvRXlKeDhuQ3R3SDNQRE1UbFpPeUUxN2FLcFY2cWpVWXZTcWJ4UzhtY3FIRFdvMjBuellCMzBDTm1NdHEybHBCa1pGNTJYRWJkeTl4U0FpaXlXRHVoRWE4R0hORDhxN29QRGpQYS8xelYrRWlOekFqZ3hrQ3dGajRpMWxKY0htcmVZTFlERk02R1JYUkI0Umh5ZHBtL1FUMlZiRXNXYjloK2w3NkwyMmd0WTdkMkNsSUwzQ2hsNXdzc3J5MGpXVm5QN0NKLzcxa2dCMVBZUDdtT01kd1Zsd1AvQTJ6b1pZS3l3RzJtSFk2U0xlcHIxUDVWK0QwTUZ1RkxWbWROYndKNndiN3RaaGtMRVk3L0xLOHRJMWxaeit3aWYrOVpJQWRUMlo1OEZEUnhWN3VaWlZXNjlUVjhBQUl2N0pJNklZZmNRTW5KNmkvcGprWWlHZG9XYy9hV2dBUGV1Y2tRa1UraFVrOFFPTFh4TWc4M2Q1TmpBMnRWaHU5SnFiOGErM2wxY3lnNnVXMDRtWm9FQmJJcGJjTnd5TUhqajMwbUZ0N0p3V05YalVyeFVuQTU1cWxvSThnZE9RY3NyeTBqV1ZuUDdDSi83MWtnQjFQWnZscXhKZVRWWko1QnZCUHc4S1JRcHdGaXRIU2grRUtKR0NNb1V1RkkyMUJwQlpacnVNbmNFbUtuV21XK09OQjMxVjdoWWlVYVc1Sm5VcVk5aHo4Q1FvejN4VG9WWEd4MnlDMzBxYWVGWEtvZFcxNEtIUlJGOUlwdStnR0NvTEFrcHBQY0VZWUJLQUNzQVA3QTNZZ2tVUnF0VWdGaGswMlRRc2xkTzJUb25JTU5mOVBLVDdER29vL0pUcnJsanhvZW1KeEtMSFJkSzZKaWxmUDhvU1FXa29MSnY3dHJBWmZ5WmV2Z2QrODVFL211R3o4YmMwS3gxOU1odTZQUG45U3FrRHYxdGd0SWwwWmthbTRkYjMxSHNQNyt6VVUxUVcwLzB5dlNLT0xEL3dvdTUzeFpZeVpaOUlYdis4ZTdxY2ZWdklMeG5QWDdYWVp2eWFaV2QxcElXOTd5M21XdXRBSENRODhyOGlZSU8xOFgzYWxPY1VQN2Q2aENwU1pCUkh1cE91N04veGxOakV5eEJNR2FmQkszYlRlQm9rdWNDbThrTWtrRXd0YlJtOG8zNXdud1F4N1J6RnpDazJXQldCNW1EemQzNjZyZ01Xa21KVlRxYVpwcm9jZmc3Tk9haXdMU1ZTOXIzaHJDcFBORlhXdjhld2FuUEl6ZTM3QVM5MzRpOG50SnRET1o0ZjB1bXdUTXVRRXhKOWhyRVZzMWtjdWJSd042MDU1bWdMd0pBSVY0QThmdXNuR0ZiS0pjSzdtdmVlZzBmZGpGbXoxMW1FT1hoeEhZK08raEtnWmRPWEFrYzhkU3VoVUs5eU02VU12c08vUE93NUNjcjc5c0p6aWNlNlZ2cVNJYXJZZzhHS3pobmMvMDBhTXdKMHdPRWlzTFhPUlh3UkExUy9DMHAxYTRuUkk0N3lXeiswMVhVTEY4dmt6LzNqQkNBMVpONVVYUzE1eHE1eEpQMDVJMXpFMnZPM3o2UHVXSmpiZ1IydGZMcCtZMjJnTVlKeWVuOVo3NHRFaGFPYUFxbEtCOHlYRFlKR1VjSTA5UnB5OWV2Z29vSGl4c3FzTFNac1lsVXA5bCtqaXZkRVh4S281QXY2eUZTcXAyczNVU05aMW1HWjRseVh1akx5eXZMU05aV2Mvc0luL3ZXU0FIVTlzb0xRUVpYbXFaRHpPQjhQYllYZEVUTEs4dEkxbFp6K3dpZis5WklBZFQyQ00yNHNBblZCeU9Ia2ZKNFo3SEpsb0J2TmtBNHlSeXN5Ry92VU5ZdE11L0xLOHRJMWxaeit3aWYrOVpJQWRUMk03dlpFd1Ric3NERWFQZS8rdjJLcVc5WW9NbnVwYTQzRi94bHZGMlFTRVE2WGFhTkpwQ1JiNVB5anZKRjdvMnNlTHg5N2V2SEt4WmdpcE5SUkd4SzY5N1FTOGxWNnRnSDFhVjg0L3hRSDJLZjhNdnNKaVBZMEE0MWl5V0syTWlKeXl2TFNOWldjL3NJbi92V1NBSFU5amJ3c0poTkJMakpGZS9UTlVZbFRWWExLOHRJMWxaeit3aWYrOVpJQWRUMnM5RS9FaVJRQTQ0VjArTm9EZEg2a2xuSFhpUlR6amNkUVpmYjIyakNQYW5zVWh3N2lYY3dJVEpTSlBaNm5FYm5hOStHMVhHN1Z0T0xyY3hiTUxpS0pzNlVNdnNPL1BPdzVDY3I3OXNKemlkYXVzQXoyckVHeVJRUG5xSXJXdkl5RXhLZURIQ2VpZUxITUNSQkI4UDFvZkMvV3NCdXczWStnYlc2OTdQSkMzTjI4YUVxc3NpUEpyWFhJR25Zc3kzTW9DUUppdG5ocmtqMTdpVDd5eHlkV0Q5clMyc1owSVpod05XL2VqcmNYelFWSHFUa1EvVlFObmdwb1hyemVwLzBiZXhKY0JVQTh3RzFJTU9ndDZJcFBjMlRDUTNMUnVGcWx2cEJld2M4cU5yTHUzQWg2NFZ5QmRwdkJYRkxTZi82SUhJaDFqcmEzQXBZejk3TWcvREhYUG1EM044UDJOd1hZOHFvekJ6TklwaGowQ05TQVIwUEZCZDBsNExTdVhIVEkyZi9rUjFZNllXNVdEOXBsV21EMW9SUHNrTUhhL1QrKzZDUW5uOWxVNkRrVmNKSU0xZXFON2tJK083T1FnK01GVGlGS0NJSS9LZXVkODJuUTIyVmd4ZVp1RVc3UStHNElaY3puTnJNZW15enhSWjZ4OGFjZXN5d21TcEZzZzE1aklIZENVaVZrS1p0SWtxUEJFZ25pT0dOZ3Zyc3VnS3A0bXIzY00vcjIyYXZIRjdzbE43ZS9qQWsxRkZVbzdOYkUwcW8xTjVOSmNUZFcwb2ovUnB3bkN4NWd6a0VEL3hLZkw0RUNkU3E1MHpYa1dpU1V2TE4wSitJSk51MWVSQ0dBdXdCYnRJZjJzVEFvcm5aLzVIemJhaWV0QmtKcnJFWlloQ1IvaGxtYS8weVI4ZTgxckJzQndRMDRTNVMvNjRBZVRGZEVpR0FlN0d2RytvTjd3dEFISnhNSkdqTUp0VGJUM0RqWW9QOXFrT3VLVkVYNUV0NmZvbHNmYmovVVU1cFV6RlpycUNuSktzb1ZuU0JKU2RUcWxNOUJ1WkQyWVp2OHFkV2Jtc2h2R3RRUmVjZS84L1p2OEhzalVGejRaRUdUWll6Z3NLQURUTXZPWGNRV3A5OUI1ZURiMUl2TVhyVWVHaVhQdXRQMXZGdCtvZEZMemMzdXM4VWRNYXd0cUt4dXVxQmxYcEVpenByY3FXeVIrQnEwbHlpRWxYckRNUytMdzBQYWZkTXVKZ0hGU1M5clBmNkR5a2lLNHRYaFlRK1Mzb2JjVlpCdW90U1ZQcFFadjRya2NzcnkwaldWblA3Q0ovNzFrZ0IxUGFackc2QWxZYzhzN25TbGhocjg5and5eXZMU05aV2Mvc0luL3ZXU0FIVTlvM2dSUHRHS25xaXhsclJmRXNQUDdOdldWSWVud2x4dzQ2emxtMmFKT1I0TW5ieUExVUVYSkFsNy80aytIdGFFY3NyeTBqV1ZuUDdDSi83MWtnQjFQWkZUV0tvSlRnOWRNQm1nNEc5djVvZHhxOWY2Rkk3QzRIMUZMYmIyRWdWaVFzOExPdTAwcENmRkI4c0JwTFVreVFlSVJnSUJMVVkwenBMWkY1eGVRV1VjUEk3VytLSDc4M1hvV3I0bXdqQTJYSFhiL00zK1RYNlpBU3M5MXhuUFYvTEs4dEkxbFp6K3dpZis5WklBZFQyYWVURlpJTjdkUjNMVFpQVG1tcGVmc1hPWllGa0JtMlNlMVlMUVRiUUp6N09sREw3RHZ6enNPUW5LKy9iQ2M0blZhWjhBQWdKeTZkWE9oTkxsWHJNNUV2OVpkYkViT1I4UW1MWlFWU0ljR05Sb1ZxSy9iSHBXYkh6RkNsekl6YWJHa04yejlEQUxxYm5RN3VGZ3YzczlqeFhOQjcxMUxHSnZyaklsaHV2MytsVmVxZyt4dkxLUHNyVWpUdktyNldCQ3p3czY3VFNrSjhVSHl3R2t0U1RKQWsvR1RYM3hKRlRBN0VxTDAxbHI3LzhIYTlBZ2d3VWtKRFBuMFV1djhTY2VMeDk3ZXZIS3haZ2lwTlJSR3hLNnpFYU9FUGNJQ0w1OFdMM1hGTkFNTCtsMTRiVjdVWjFqVjgva3JGRWpmeWg1SDBubEpoUTNaamhTcm9vYXQvdnJVU0lsMFQxS0dIR0FXeStrK3FBUHdDL1BTMXhsa3hBY0pLRWJicDg2MFZvNnF6TTExRWs1YWFjdUVwcjdISE1mcmlPTklQOW55Vzh2R1BmRnZ1UHVuNm5Ka1Uvekd6UCt1VG1uUzBIKy9UeFdNMnVnbi9udmljVUpvR1ZFcThVZ1lVM0lqUVRMby84ajZZWHpFdkdIZlZTWnVkRDVKaWZTd3hOUWRQQXVaUVo4bnNkcERxSE5xWE1IUVFzUzYzdHZTRFZRRFJteGpBOVdFSmFYS1A2OXdOMjhhRXFzc2lQSnJYWElHbllzeTNNK3c2ZVFhUG82SmZoUUdLbytKczFLNkZVSUFlbE5BQTR1cTd5d1lJQXVISTMwTjg4dGp5SXR2OUlvL1RJNXFHay9QYWdVWm90NWlsM2VBMUF6QXNxc2NzcnkwaldWblA3Q0ovNzFrZ0IxUGJ5bHBGdmxkWWVCN1NpeGgxVTM5bnY5UG0zeGNmSWUyQVlOTkFETE9uSWlrWnRPa2NGbndiTEFCQXN6ZlROc0haRC8vSEdZdzBBVk15d3VIS095bWR0WGg5bkdUQ0t4a0I4dWZwUUxXOFZqZmV3SXI1K0lQM3F6cWZ5bHRYY1cycWhSTDNiYzlrQjF2ZGtMdkFiUXVDbHRWZ0tETFNhVmEzc2kyR1FJbDFWU3BUbUVYdEJQUkZrMi96cVJUc2diUU1ML2xxRFhySjV4ZkV5cWdzYlJaTndFbEFBMWV5aXVjd0RLdUgyMXRLM3ZpeDVnemtFRC94S2ZMNEVDZFNxNTB6TEs4dEkxbFp6K3dpZis5WklBZFQya3JxNzZXWDR3NnNpUXRza0pSbHRrcy90NTc1bGlmSFBOQmh2WTI4eXVKS2x3cDlUb3JpV3FCYnF1RmQvODNZVHBmK3VMU3BLVlJYd0VVQUZMQmRIRm9LSm1DYWRBN09STW1pU3lLemRPa1VuTGp3S2VCak1pUExwUGxLQnRNVXBhZVhOTmxkUlFvbGk4bnRtcFgzeTVvWXdxcGpwUFdhMURPSFBsd1l5VDR3aktiNklFSlRuMjRXZmxyY2E2dVRzWXJsZCtrc3kvL3VhbHlQNkJsYXNXOC9YZCtzeFlKYVZCbU1TdkE4aXprN0xSOGh4eXhxQm5yNlRmeEx5N0w3NkxVU0R4RjVJY0dUNk9HREZFWEE0U09VQzVTbCtQcTZhZ2hyZUxlNXVGazk5VXlaUmQ4eE96MExSeHIzdmQyZnAxamJuRlRzam9kalYwZkhlWU9kdDUzYm1RanFjcExWRFZZV1IyVzdJbHp5bTdPRldZOUlXb1NRQ2R4bGRYVlJkRDdGT1ljMjRudkQvZjVNU0d2ODFOaHloajJvVnVtU21vQnoyd2pRZGoxOFJuWjhiSUozR3ozMHVHKzV3Z21UeW5qTUJrVHpBcG4zdWZ4VkxUNDZKN202U0tEZys0c2ltdlkxcHpsSmJ5UnhSMnpYbTR1aHZKOG5WK3F6K1FTOFd4VlJFNHFYeUl2R3llem5TaGhxV05KcGJ0azdFTmtRTHhIemVWSlhJRXA3YmZSM0k4K1laU0swL3p0bUkzVFl1Q09JM0dLSHNwQlNNMjRrOEV2U21FdFlWclZnOUFPWnZwWlh5b0MwblpMVTVsRXpST0lFY0QxejdNbFI3RkFzbEtUNWNidWRIb3l0bTZZNlliQk04TVk5bDdnWGprTEo1RUVEWHdLTE9YQkdVMS9NZHFFM1hzdkl5VmVoR3FHYmkydnJTeW9BNndCVFhUaytXaVN4RkVod3h5cGJFMkFteUZBTVBwWHMrWHFoQVlBWk8zYng2b21SbjN2aStrSVBIbGdNaVo5dlBnbHlrNWdFdHpaazFveDVjREwwQWd6eXpuaFNPVkVZeVYyd1ViRVc3alU0Rld5NWpBc094NFE5TkpXdy9WTWpCdVorb0xmei83dFlKOFpBT1VCZ29UMThTdC9kM2JVVDBRN09Wd3psR0VNdjQvb0ZNQzFnaXJTSWZoQW1NQStGS0RVR0dsU0dYVk4vcVVaaUpzVmdIR2ZRMzFoMWdMeEw0a084OXphbjhadEZJMjA5ZUM3bjNUNXF6TnJjRDBjNnpmbHhrcitSbDBBWW01dExGY0FJaW52TE9pS2hIbDJuaGFKcFRQUWJtUTltR2IvS25WbTVySWJ4cjU0WCt3aHBONks4VlpOZSt3TWVrdEdUNVBjSlR1NEVVdGpVZitlKzV5TVJxb1cvMHNtUkhMSUZobnJQN3dRaUtRV0dJQ0J3c05Nd05EcTF0ZjFjS0RPUTFjS1JhL2VhSER0bDkrbnU5QVJhbjE1S1ppb3U3Ui9iVHZXK2pQZGt0YzdScFljYzI2SFpHVnlyeEZhenYrekdSbmlhU2ZqN2JBT2VUdHlCVnp5NXJaOFViNFVlNEN1WHNNK1pqSmVJZHN3QjU5Y05NZG4zTWhGMy90MEwwTVNPQWJJRUxDeTBOd25pOHE3UThHWkxMSzh0STFsWnord2lmKzlaSUFkVDJWdi91aXM4bGJaVXR5TXdoVzVEajNjcEVna3hGWUJ4c2F5VFdQMi9XWjVMVWF0KzhxNDVnVXZGeFpURG4wTVl0Tm80aGlMZjhFdUZLRzlhME4wdHN6eTJrUTNzc3gxM0VydngwQ2pVdVpXcWU1VnptZ0FhbGxaMFNSNzV0eVFLUjFRU3JPTkdRaytZMVdRWlVKVkFFcnRHQTBZNXB4QVhGcDZ2bUswZW94TkF2K2tuOE1iVWh0WkNXNEZ6cWZYaUl5eXZMU05aV2Mvc0luL3ZXU0FIVTlycVZPa3FNbDhkTmlpTXJUN2hjc0ZiRXhZcE5jWlpDdUdIUmpOVkl2THZJTW9DWDVVS0JsdEZPbjZTZFozN3B3dnlBeEJSUGl6NEpWNld2MW9qUXBMOVVKQWZnTHBzSnNYWlJQK0U3SUtNbjNLanlzQjV1L2NqN3pMbTJYRzR3bmNXbHlwQW9RMTREWVZzWVpvUVdjYWxnbHFEbE5XZ3NZaGxGakZkN3BQSG9Cb3RxdWE1cUthMHBGUWZYS2lMeERLazdHZkwyeEszSUhqS3gzeWRVbDZ0dWJRcmV0ci9NbEVIcHNyVERzZklQeXl2TFNOWldjL3NJbi92V1NBSFU5c3pCM2RaS3dxTVFpWDhzdktkQWNDdmhnMUszTDNBM3ppcWIyKzYyOTM0VXl5dkxTTlpXYy9zSW4vdldTQUhVOWxXU3pJeXFFQTZXWXFTcVdRK2J5QjVIQmp5MjdCR3FjWU1jcm1mWnhocGx5eXZMU05aV2Mvc0luL3ZXU0FIVTlscTMxZ0hsYmkzcktLUnJjdFlTTWJtUk9ndmVaNGN6L21sOGNnaEpHZEc4eXl2TFNOWldjL3NJbi92V1NBSFU5c2ZJZG1NQWRqMHJqSm4vY3k2VjAwUFp4Rk1JeGgycGZoSmRCQlRoN2NsODg0WERuYkx2Kzg3K3oxa2pUdFdrQ2RQT3U4alJDNU9OdTZvUEQ2R3JybnJkNlNxY2h0Y3htRnloVnZDZG5ISVJ3SGVsRDFsb0Vlc0N5RDUwMUg3Ulk4c3J5MGpXVm5QN0NKLzcxa2dCMVBhUEl6ODIzNjR4VVhFTDNkVWJ4dTNWWlNXSWJNaFVWZFdXeXpSVklpYTRCMyt5T1NiMjFpVDhmcnltaXMxWml1a2h2ZDBUbW13Yk1BT2VhKzVhU2svZ3NTdmdxemxjZWo0UFN1UVA0bXd6VFdTVmlLNXFrYm9BcnlVQmtYT2ZveDM0UjhwQUpuUFpsS01jNmI1UUQ0NWx5eXZMU05aV2Mvc0luL3ZXU0FIVTltUlRVQXpOckFYWitISDJJSkdjVW1OQjZvL0dCbEwzOW4rM2dIZFpjOGdIeXl2TFNOWldjL3NJbi92V1NBSFU5cmdMdnhpWkxlbWp0REpkcUtKSEhLUExLOHRJMWxaeit3aWYrOVpJQWRUMktUMEg2TzhldnVOclJLQzlDY0pBejBkMnlWbEpEMWJLeTFZcmQxcnpzaWFjUGJhYjlrNmZudGRkdGg1b1BHOWVXR095dTdNOFlZaU1pTHB1TXBBNzFTRFZRRFJteGpBOVdFSmFYS1A2OXdQMTQ0OTNncytjSEc0R0ZuWjY3VWhjUHlqM0Zmdkc3R1VQaXJHWVhITVhBY21MWkJueit2VGU4eHNvVjRoVDlKazN3cUVydFBWTlRlRiswTENSbGZ5THRtNEgvR2RXcnhJb2F6QW9UbmJuOGhyWGN1OVQ4VTdscVFvYXRoeGVsSi9MSzh0STFsWnord2lmKzlaSUFkVDJRbDBvSGJSYlFBMjZXV2k1ZXk0NEczQjEvOHZRbzdIYnF2WXp5bU5LSDBUM2luanBTeitENks1WWNEYXgwZTRRUDcrelVVMVFXMC8weXZTS09MRC93b0d1K3dtL2lyWmFUUWozMytRc2pIUTJnaGZPWm5LSWlsdVNFYlZTdi9VbE5Cbmpxazd5QVRYelM4Rm5Bb3F1MTJ6THY3TUFEejFIcnV6VVNWOFgrSmorTVp2aEFPK0R5UlVQK3FUVjBQQ3pxRCsvTjJzTlIzcWFoeWNnN1c2YTFudGhEUElVMHJSWnB2RHFqeG9iSnFTTUlWWmtwdXc4bFJjbmx1VkNFOW9hWlZxUUZPVjdDNDJsbnA4V0tjWHdtTkVwaDVXMUdDNE80aFZOSUtDdTVoRUs3dUZEU1gwanlKUGFrOUowRVViekhLYVc3VDZkZ1NQUTlaS0pYRTIraUdISUkrZkt6V3RsR2pNYkRtTVRrdHJ2Y2w3L0pOSXJzRG0zYkdqbS9yNHBFVGZ6TDJxU3FRWEZJekdzYWkvaXZOcVJvclZYSXQvaGE5NEtjMndmVGN1WmQvV25RUUxVOE5ZeC9XRkNUaEVua2J6bG45WUd0NjBmUnhzSCs4dU1ESEJHWWVZWm42LzhIK2pVUDY0SllZWkxVbG1tVVdhb2hpVU55K3dPMXNkV1MwZHNyQmt4REd4VWgvUUl2cmhIdnFLZXBSODhXVStab0hMTjhoRXVEazlZZmtOYnVTM054d25qcktiU3g2SUoxd0VrUEh4MlVYOENQdmdUTTZyOTdtZzhKejJQUVdwTnlkRHVCdzFSSGNWeWhSOE5aZStvQklNWW52Z0RIUVFiMHlPN2VDNlBDVkRDdFB0eHFRMVl3eTRLaGU1K1RjMGt1cWtTaFdvU0d5NEpseG4xVDJkOVlBa0grS1VaR2ZKQU8rUlEzbkMxellhWFpXSjRDYk42bjZ2WkhqaWxsbkJud1A1RHhqMFZYZjlmL0pRUnhxZ2JYVUc2OHFEWnZCUE50UkNGT25QUjRHMlU4L1JLc0ZVWkh1M3p3dS9UeTBZNkpjZHpqa0xULzBUb1ZRSm1NbWxQcnlLRkJoVDFQaEJIRmN1bEdlRWdodmk0VjkyejlWNURJL29ZQWhOSm5Rb0dITElueVRQK3k4SUU0b0hGZ3YrK0tZd24yWUNDOVg5ZVMyTEZTVjB2RE5kS0tIdklEOHpLRWp4SE11dGc3WGdkcVhmQlVVVi9yazdmOExmdTZBT2JlcWxadk9OamY5cTJ2TWVwbTZEOFordVNDaCtwQ0o4NEUzQ2UrMnpCNmlMZitEWFlOY3FIQlNnS0ZyUnBlTzk3RzBNTGFWd2s0dFFxY1RjMEpOZkltRHpqaE9wTGpsUVhJREdwcUFwZDhuK2c4Nkg2dS9vL3pZdk1qM1J2cU9lYXdVVDVXZzRuU2VzZ2w1Y3JCMEJpWnR4Vmw1Y1NVYlYydGlzZE9lQ3pIRVhQKzZkTjRUM2JwVlRyZk5Wa0R0TUNxZENyeG9ReDRPNCt2WDVrZm1oWG1pZjlna0M0anJZZTFUbFhDbGxKSVRSSTVwQisvYzh6cytTMlErZ1NqZUJRcGpKcHprbzJCSlI3SjQ3b1hxQ2JXU2lSK2pzVVpoVCt2Q21pY3dNeDNGclJXdHJGMklVNEppQ2Y4TXZzSmlQWTBBNDFpeVdLMk1pSnVMSjk2S1hSMzZ4eXlwbUdpcEZ6Rk9TUDVJR0NFMmxLcXNJejZXQXZ0dVIzVFMzS0hKdXBEaTVvbC9RbXhXWnNMVURDcVhHSE51Y2VEdEtjNzhwdHJjUVNqbUhNZ1JMdlhkckx1cmFhSStrcjVOVVBnaHEwQTdNNk1aNmhxWFNZSHVsYjZraUdxMklQQmlzNFozUDlOR2pNQ2RNRGhJckMxemtWOEVRTlV2emt2clZTSlB5VGd0d0k4S0IvcWNhdGMzUTJLTFZjcjlad25rY3FVWHYvL1lhTkJuMThNY0lxRU8wOEl3aGVMSlhSRTREUDlqOFdmK2xrSHN2UEFEUllJWmVUMDhRMVFvemJCZjNTUnhxUUJXbHRtSWpIaFFEcUJPbGhCY1BES3F2RUxGU2M1djZXQUh6WDFZVnhrVENla3FBOXFINUIvU2ZtVXB5M3d5UlBOQ3NkT2VDekhFWFArNmRONFQzYnBWVExLOHRJMWxaeit3aWYrOVpJQWRUMkNNMjRzQW5WQnlPSGtmSjRaN0hKbG9Cdk5rQTR5UnlzeUcvdlVOWXRNdS9MSzh0STFsWnord2lmKzlaSUFkVDJ5Z2lvOGhVZUplRjd6SThlWUw4clpIMERCekV5S3FMZkFkWFF1VmRvTGRhYW01cWQrS2Vna2tFU09HOGtRUWVwaG5hRm5QMmxvQUQzcm5KRUpGUG9WRlE5MmZrTnJ4bjF6Z2FIdzFUNWw2Mkdkb1djL2FXZ0FQZXVja1FrVStoVU52Q3dtRTBFdU1rVjc5TTFSaVZOVlJuT0dSWkF4bTV1cVU5b2wxMUNiRnJYU3RuUmJjLzROR1RIOFViODhwYkFISUM3M1Yzd080S0RGbXRpQm9hWUJKSG4zVWNiUXdjL2tpbk9hM1NUbElUU3BFZEI1eG5HQ0JUbi80THlydGFtUlgvOUcxYjBCbE9ZWGdtR1locDNiTklmZ1hNWlh4QjMwSElRTmhOb3Rnbi9sQTlCaFNGU2huTC9OTjN5UDhSN0V5QWdmZlFJeVZKSHhDV3JKenBCbmFBa0NZclo0YTVJOWU0ays4c2NuVmcvYTB0ckdkQ0dZY0RWdjNvNjNGODBGUjZrNUVQMVVEWjRLYUY2ODNxZjlHM3NTWEFWQVBNQnRTRERvTGVpS1QyRTZxcnJOVmpPb3YxSUVtMHhsenVSaTQrNTJTUmVkc0I0aWk5TlBOSXZQTm1NdHEybHBCa1pGNTJYRWJkeTl4VFRSOHhBb3FrMkgrYTBVQ3E2UHlxREltQlBBdnloY2FmYmJ6bnBGMzNYaUVQRkJpNzVMS0w2V2l4cmU2cHBUdmpVdXhIOWFHY0xGeDIyN0RNazdocmhnM3pGSHQvaFE1RHdFNTZNcTBpL2hqbkV1WjF4eWd5cWMvdGhXYnd6bUhyL0JlM3VwZDZwNnNnR3RPTHdXd3A3eWIvS3lSUkdISHJQQUFhVlNBQ0JPcFZibmtwTHVBRlpOdVFkd1pNRXlqYXhhU1VBbHpwSDhJRTBJOVdzZXJMT1pNZnRPM3JuYUJxU2E0b09JK1p0OGtIdDk4WVVvaUJwTTRqUDhkdlk4NzE3RDRueC9PYXBuUHkvb2ZPTUhheHRZblZIMnNTV2R2VGFLd3lCZ1hURmovaWFLR1FHNG96VStuRG1jUTJVUUM2SU1ydktjdndmdm9pWjZ3ZmxhWDVCWnh5b0FZWUFCM0Z0b2JyamJKNTRpWUdsTEtQNnNBOUFZOUxLeFVpS09mWnFadzFZR2NqWEJHc1laeGtDNVRBa1dncTRjaWpWQkpYTFoyMUk0UGRCRStnZ09IZHh4WGpvU1hoWVlhcW42cjBpeVFYSllLeS81V3NraVNkaTUzOUd1K1Z3ZlB5UkxHMkQ3Q1VvMUw2U0lGKzBmWWYwb1RPV04xM1VQSVRvNSt2aFpTNDllczY0aGdvOHNuVSttdDNYeC8wUDNFZDlkbWR1SG90cnpCa0V0a1RTOEorM1VJdmxQbVlOVkdmdnYvcVhnS1Mrc0I3bWxjenNzTUlQTG55TDRoWS93aHNOQlBNeXpvWmp5TkNsd0ZHZ1Fja1pTOWVuN2laZ3JhWlZmMVVMMXBNZUNyZ1ZIZm1GN0k5L2Nmdk1kVkNYSHFCUzNXRlJYOURDSnZkV0E2eDBaRHRSeU8yaWtNV09oVFlMNzdjVlFJaGppM05RYkhJbFUrMzdidCtZNVIvdjVDOTFQTkVCYnp1cUFJMlZpblJVT1FIU2JLU1l0czc2VlhpUUNXNGp2VVhIVVdCOVNOcFR1V2JvbmdNZWZzZG5OcGZ0QU9Wc1FiY0k1emZNcWt6MU8ya3BZVUlydTE3ZWFMS0tpclBzUGFnRW1IWlNlNmxSUTFtQVBpcUUxZUZlak9QNGVDQWZVRUptVmhPL2hwL3lGQW01SmIzaTVXdzdwbjNaZjZZMU1FRllkaDJzRzFpdDdNVlNCZkRMSFBxM1owa2Z0ZDlqUnRzanl6MnlTNExncm1KN0pPaHE4RThWWFN0b3U2TVYxVjhGZ1lXdUxLUWtBUTE1djNILzlCQTRLZzdSa2VtWUd6Vjd4TGsrNzkyc1IvaUg4TnZ5SFk2dXpLTmdqTWFxeHprWWxUa2hDUVV0SDFlOStjamcwVmRhL3g3QnFjOGpON2ZzQkwzZmlPRDNLeGovRHlyQ1RKeHNSZWxIdW9ZM1M1N2hyUGMxeGtISjRGYnJuWkZFbXowd0NINE5iRkRwRFdnYnNKS3pTb1NvZW40MnRRakthVFFTMlZBbCt5UEZ5UHNtQXlDNFloemcrRUhveFZrejJkcm9YRlgveGcrNzB3YnpSTmNUdjBDcTg0UTRiM3BNY3BrVzJkY0Uwb2VLL0xPYTRWcytFN04yVitjdlYyWkk0emJHMXNoUHVWeWxIaElneGhQT29MUnA4aG5jV1RneC92bTdVTXNDZUdxU3g0UndqVE1tVVZGOXlPdis3czRXbXlSVjdNVUExZmo0cjRNQ2N2dk40Y3NyeTBqV1ZuUDdDSi83MWtnQjFQYTVCT2E1NEZuVlRoRE1hVzNGalJsem5WSTNhdXV0U0p4bElGZFpFQkFHNTdsYS9LVkM2RlFEL0VBNGk3c3BwYlFsMTFkRTB4Y0s1WGpzaUlmcVNNMEF6R1pHVXFvWk84aHF0K1hybGtIYzBqN2VZc3d3MDZIdWtRVHpVRjFQdHVSaGtoc2VCdisrelBxSk13eURQaGp3ZEdWUzZXUFlTa25iVE9qbXZHamNtNWNxMU5Zb0VSdUZYYlRWRm1UL0ZXZXhiREErZGxkUkR6R3hSdERUc2R1QXl5dkxTTlpXYy9zSW4vdldTQUhVOW5kVnVTWXgrd1dCd3hsWUFCNTQ3NzdPbERMN0R2enpzT1FuSysvYkNjNG5yREhhWmx6eWlDYk1QQkR4QzZhc3ljNlVNdnNPL1BPdzVDY3I3OXNKemljSmZUQkFTbjMrcXVDZkh4UVFMdWJUeXl2TFNOWldjL3NJbi92V1NBSFU5Z3F5UEMyVE9LQ2g5U2hwQ01IbFlISEdtSnlyMU5sU0RXeGRhc044TkliU1cxVjI2b2lsRll5WEZaK3Y3RUhFOEEwcStMb3VFTEl5RUJMaW5sbHNEUFBIbk1TbWdneFRSOGNUaDJJR3ZoMEsvOHcwVk5VUU1uRWVPM2xXUmFKZ1NNc3J5MGpXVm5QN0NKLzcxa2dCMVBZRkVLS0NiMkt3bXpnR3d2VGFqU2JYWFUwT3MrWU1tdmVGR0lnQkpDM1VjbmJ4b1NxeXlJOG10ZGNnYWRpekxjekxLOHRJMWxaeit3aWYrOVpJQWRUMit5dGFBaXJtZHdEZmxNSjRtM1k0YXY1ZWg3c3N2N1psb09qai9MS2VSVkhEWFZaUVFhMW5OZlZtZk5YWFMrSkR5eXZMU05aV2Mvc0luL3ZXU0FIVTlzc3J5MGpXVm5QN0NKLzcxa2dCMVBaNkRPbDNUQ1ZhWjlQZk43WW5KUVlneXl2TFNOWldjL3NJbi92V1NBSFU5c3NyeTBqV1ZuUDdDSi83MWtnQjFQYlJKa0RqMlNVSjRpM05sdnhGbkVaL0dLVlFYM29xcnBabTFlTlZ5UHRvSUlQMEc0SHJqV3U4YTF6NXdtUnlRY1BMSzh0STFsWnord2lmKzlaSUFkVDJ5eXZMU05aV2Mvc0luL3ZXU0FIVTl2Yk81SHhJZVJoL3BsZUJOKys5YWVyTEs4dEkxbFp6K3dpZis5WklBZFQyKys4a3lCcU91dHZLaFFCbUdtWmhPcEY4OEw1N3cxZmRGbW4yL2h0R3lLSExLOHRJMWxaeit3aWYrOVpJQWRUMko5ZlVFY1NIV3ZrOGZweW53K0JrWUlWM2pEcDgxZjRvV3JGa1pmOXQrcTNMSzh0STFsWnord2lmKzlaSUFkVDJ5eXZMU05aV2Mvc0luL3ZXU0FIVTloZnRNaHk1ZTY0c1NsT08xb01FazFzdDl4WXYvYnJldmE4azRUa3NMVkl2eXl2TFNOWldjL3NJbi92V1NBSFU5bXF1RUg3Z2VaZXdKYjFFRXVLNCtwL2w1MklaYmVjQzFvWWJ4ZWRkYndXVXl5dkxTTlpXYy9zSW4vdldTQUhVOWxTdG5Vbm02UGt2NDkxaTVvZjQ0eXpMSzh0STFsWnord2lmKzlaSUFkVDIyRVlSRzk4OFV2QTFFTlZsck5EZGpqdUM4UzNCRHRoL2hPa0RRTUpOWFJFMEdlT3FUdklCTmZOTHdXY0NpcTdYeXl2TFNOWldjL3NJbi92V1NBSFU5a3VuTVM4QStJcFFONG1lTVBsMndrN0pzTWdVZC83SC9LNXFGWXRVSmFQcDlQbTN4Y2ZJZTJBWU5OQURMT25JaWh0MnZlTjFLdjVRdmliVFVVWXR5bUJWd1EzQXVXOHlLT2F3ZWFRQnpEa1pvSmJzNUxZcnB6ZUJVYWo0ZGZVSFBvZkZ2ZlhtMDF3Smx3ekU1ZVNLNmVUR2Yvc21vNDZodzNVcmN5NjVTeDRQUmhDaTVURHNNbXFZaFhMMkNtdEQ3NTRUcG45bFRwTWRlMXpmMDUxL0VLVWNkWC9MeURnNjR5K1luZW84UjY1b2lvZXhpNG4xb2xvTUJJVjBhZWdpbVc1MTFvNFhoQjI0MVB0WndjdllwSkVURklXdkwwQkVlU0ZsZ0FNRTNscnJPTmNJV3p5T2dCMC91ZzZCRlpaV1RuWlVpdnl0cEFoTVc3UTZKUTk0d0szT2xETDdEdnp6c09RbksrL2JDYzRuakZvY2d2UjRWTVhZMFNrNlNXZVh3ZDFjRkh4Z2xKU0k3UGx5bmgyRUVhL0xLOHRJMWxaeit3aWYrOVpJQWRUMnBtOUttbTAvTncrcXAvMnR4cFI4aGlwUWx6MnVNc1MyR1Zvd0djYlZTenFPdm1xdFkrQlo0UzhZb3h6VFZpKzV5eXZMU05aV2Mvc0luL3ZXU0FIVTlxTlY0RzZFSkxwSjZyS2crSGxHYlJNdFBTZld2UHplUmdxZmRGM1B0MDFMWjVrYnhWajcwYTRBR0tvWmVFMDA0SnFibXAzNHA2Q1NRUkk0YnlSQkI2bXhSS2s4UlJTNkVqVW14bkdWUk9RSHl5dkxTTlpXYy9zSW4vdldTQUhVOWcxWTUyMGN4UDFQZUV6TElaRUhtZkh0NWxBY0VVRVlnUTZwNlZJbmpMU0x5eXZMU05aV2Mvc0luL3ZXU0FIVTlobml0bXhIdDlHbTBtWU5FdlUrK2h3MkFBYlJNMENUQ1cxTGE4YUMxV2M1enBReSt3Nzg4N0RrSnl2djJ3bk9Kd2Fod2p1K2hVUzZtcktHM050bXNmanU1M3UyeCtmSUU4aFRDZXhucjV4dlVjdTRnTzh6b0FsaURZRjZxamo1alhaUjdTcnFyeSt6WG5WcHRUS0lUVmJMSzh0STFsWnord2lmKzlaSUFkVDI5NHA0NlVzL2craXVXSEEyc2RIdUVDZlgxQkhFaDFyNVBINmNwOFBnWkdEa0NINDFoZnZkYk5kUGIrNXhiT3BGSU5WQU5HYkdNRDFZUWxwY28vcjNBOTJxOC9STnpGZXlQT0IyRFU4WjU1RExLOHRJMWxaeit3aWYrOVpJQWRUMmxXdWlRckgrdVp1N1dxVmIzUGVLcDZVbEtzNm1JV3JhOGtJSVdkYUJoNm5jZE9QMHpmcHBvcTJHNVJNQ3M0Z1R5amJvVkRzeUMwMmpGYUovRDd4ZktsS0ZFV2lWOW43YVNOc0laRGd5NFJOcGVzVHYzbHNDVXFNOHNGcldYRXVWTTlKMmxhL3VuZGtyMHhUSEFrNC9CM2J4b1NxeXlJOG10ZGNnYWRpekxjeTRYMDNxczNCL3cycGpqbUluNmJ2eXpwUXkrdzc4ODdEa0p5dnYyd25PSnh2YWU0RURQa0hzZW9YTk03NXhObkxjTGk0MEZyUHQ3L3hRZVJTYUt0T0lTZTd1WDhKaStFSjZoaG9NUVdQV2JyMzFsaXIxUlFURlB3dWJJU0Yvckx3UXpNbElicFE3YU9mVzFQS0Y3cjdyZ0Zzb0xDUnJxamErc3BhbkNQMStVazNwOTNVYWo2bUs5RjMrR2JKY09WYjVuMmJ4U2hycFFYSlI1ZmswSmdkTTBwQ1hlMzRERE5LaDFSM2Y1ckg3SldSMlEzZ1lVL05USnBGNzRtdS95dUJDelZSMHRpQXBieU1Ba25QYjJVTFp3ekRVMTFhMnRRVGlJY3QrYkJCbEdEUmtNbFBRVzhpZ1V5eFNXa1pneU0zTEs4dEkxbFp6K3dpZis5WklBZFQyK0VKaUJwZjdNbmxnK0lXNytDZlhURTR2bUJPVmwzN1FKSG5ad0VFd29qQlNmd1o5WCtNaWF2eTFpNUJxV2lISlJaL1RFeWhHQ09qVDFHRXE0QklJREVpN21MVFhhdE02K3pqSXdLSlltb2JPbERMN0R2enpzT1FuSysvYkNjNG5wTDdicXkxUEU0ZHFySWVUYkdiNnp0NWVTT0lNdTZNWUtvaVRQOHgxb1RnTkt2aTZMaEN5TWhBUzRwNVpiQXp6Z3JCRXJrdWZvemZ4SERjYmQrcHowVVFhMlByeHVCSE44U1dFVnJBTVFZTVJubVRiWmEwSkxiNW5PdmVBWU83MXl5dkxTTlpXYy9zSW4vdldTQUhVOXBFWnlpUVJ0NUNzR0d5Um1pQzBIeWxTU0tkUnhLbjkrZ0RITzI4dSt0STlON0x2ZmNleVJ2U2wxV2NOMkc1cDlUTU83WVdaN2FDSVFyRXBjaXM5RXZQTEs4dEkxbFp6K3dpZis5WklBZFQyVTF3WW94Vmo0VmlHUkRFYkFLV3VnamlnZnlVb1RUT2VDNlB4R2Vxa3YzL2ViamVJKzY1SUFBMUQra3NSRCtPV05BYTVPa2xBdXkwcmdLWGhrR3NhbDYwYzBweGg0bnhaSmJ1V0ZVN1M3cjM1cndGakR0RGhQK3l5cWNjY080bVlwczE0b05yOXphVHJkSUdmaytaOURFV1NjZ2VqR0Z0YWFYMldzVk1NaEZjcXpWa1hEL1ZTOTAzZkIybER1bjBweXl2TFNOWldjL3NJbi92V1NBSFU5bnR2Rm5DaXpkakFHZEpESXQvWFJMYkxLOHRJMWxaeit3aWYrOVpJQWRUMjF5UlcxZTlnVUpZOEZDdmVobGQya01zcnkwaldWblA3Q0ovNzFrZ0IxUFk2cFp0VDJlRkNOMHhXdnRyK0x3Ny9taDVRcWRybW5ZZ0RCeTNLSGdoR2Rjc3J5MGpXVm5QN0NKLzcxa2dCMVBhU3hscVBvcktJYURHMkg3ZjI4VkVqRnBBSUx0bFhZaDZPdG40VmF2clFNS1ZNV2htUUpJdmpYVTdqb3QwaElRVnpSdXVSekhickV2ZkJnNTVlZXdHcXl5dkxTTlpXYy9zSW4vdldTQUhVOXN2QVU1ejhSVW9RY1VNUzB2M0hlOVNlaUNOOFp2M25zWU9aaElDUENBVGhiZXhrTDNRYnV0UkJ2RmMzSDczb3dMVWtSQlk0V09CempwMGZLUVI0cFRjTkt2aTZMaEN5TWhBUzRwNVpiQXp6di96T0ljaEs5dmJTcytjY2g5dmhkU3JOV1JjUDlWTDNUZDhIYVVPNmZTblhrV2lTVXZMTjBKK0lKTnUxZVJDR3JmU21IbnN5VkFKK1RmRXNNZEZobUJHU2F3Yk9RZkdRd1pJMm4wT0xFYVh5TXRzK2NrVGlGMkdHVmpKUktBTmpuaGVxZ283RjIrZGtnamlsTEhIQzBUL3o2MU5Sd0R5TmlXUkdxZ1ZYWkhqd3JESUVvL0FPVlFrOHIzdStZbjF4d2lWTU5HVUtFbWN5Y3dsTnVFYStnTXNyeTBqV1ZuUDdDSi83MWtnQjFQYVFYaHpWRmF1ZWFQTG82ancwZWtpK3RXaW9KYjZzNVlaTGNFemlUVlpwZlB4ZUxPYWdXN0RLdnh6RkxBQ2d0S1hLdnB0UlJKamMwZVBrbDFzMjZvVDBzRHViSlJYNklEWlB6ajh0d1E2U2Nnbng0R2RFYjRPUlhYR3pwS3pNWGpwT09uejJFMVE3SHRERm51M3g0LytWVVZmVXZxdEIrcFg0NXdVNTJWYlVQY1IvZWV1OUszblZMY3d6WUhMMEN4T3dpSkJUUFhTNHpJL3hFaWVwelRTcnl5dkxTTlpXYy9zSW4vdldTQUhVOW1UNVBjSlR1NEVVdGpVZitlKzV5TVM1MVFpK29tSHptRHFyekRKeVdnQ0x0K0kvZUM2cXJaQ1FtbENHdXhZNklyb3lVRS95T2x2ZlVNQ1NPY0xrek16TEs4dEkxbFp6K3dpZis5WklBZFQydFJtSXREZXg3dFB0UFRnTkNZMzdVTVpNZGJkZzcveVpFL2ptUEw4MFJRczQrcUI2WVp3cnVnNDVHdDgyYkhZb3I5cXFoMEd4UHlvKy9zNHFTemw2WDhzcnkwaldWblA3Q0ovNzFrZ0IxUFpJRDZhSnVST2w3S21CSWYwQldDbGJYUERZZC9Bc3RHYjlXcmhUQmFZcVRJc2dTcHU5UHBRaUVWK0ZUcHJWOVBIMWVqb1lPQklWYU9yMUUzZGt6ZmxoRGtnWkNyMkdlTnNibGNBSVNFZlYxQWphOVBXZlpmNGwzc0NLdkdXMHZ2VlQ2SlE0RlNGS051dGI5QnYrUXlKYWJ0NkgyN29LeEVoeVlrMEs3YllWZzJUN1ZQQXc4RGxFQU5XdkwySnZ5bVRMSzh0STFsWnord2lmKzlaSUFkVDJ1ZUVmUWpxcTljdlAwVUwxZ1pkYmZvWjdBVjhueGVRUVROR0wrejJwdXFmTEs4dEkxbFp6K3dpZis5WklBZFQyVksyZFNlYm8rUy9qM1dMbWgvampMTXNyeTBqV1ZuUDdDSi83MWtnQjFQYlQvZHJDZ1BVaXZ2elI3S245ZHdqcnl5dkxTTlpXYy9zSW4vdldTQUhVOWxVdmxmZ1J4NFFsZ2JWbHVjZThDMTBZMjMydlpwYjVEem1vY1VtMkwwQjlQTzl5NWNnU3VDdlVQOCs2QVdhRTVRaHF5YTJhTnJjQzBabnFjWHZyVFdJT0hLc2VhS2Q1QkVuVHk3Vk9ZMDZweXl2TFNOWldjL3NJbi92V1NBSFU5dUE5MWRETFhzaGdURGFkb0k0ZU44bjhEUUxJRXNnRjRWV3pZZHdmR0w4Rnl5dkxTTlpXYy9zSW4vdldTQUhVOWorL3MxRk5VRnRQOU1yMGlqaXcvOExUbWdsRDhBKzNzVFpvMlcvVFBOYnJxbU5jUjE1Q3k1ZjZiZWhid1N2Y0o4NlVNdnNPL1BPdzVDY3I3OXNKemllbDdCSmVRZWlmY2JkbjBhWndPQ2ZqNGVVdEJiVVhUSFhkNExZME5UeVl1OHNyeTBqV1ZuUDdDSi83MWtnQjFQWVQ5VXBKaU9XMkFaZTBScHlmbHUwbXl5dkxTTlpXYy9zSW4vdldTQUhVOWdOdzdKVmRuc3gwSHc5Z2IrbjhPY3BQTWhOQmczZ0xzWTU1L24ySkVyYzN5eXZMU05aV2Mvc0luL3ZXU0FIVTlpMU01VmJpcFh0QTJmdVZkUFhXTEd6QnpNVDh1ZXB3TVd5T3BpU1Z1TUpaYUQvc3hwem1qaFlxeml1VXBhVjZCTXNyeTBqV1ZuUDdDSi83MWtnQjFQYjArYmZGeDhoN1lCZzAwQU1zNmNpS0lOVkFOR2JHTUQxWVFscGNvL3IzQTNieG9TcXl5SThtdGRjZ2FkaXpMY3pRVGFNVlMwTjBPa1V2TGpQMVVpdGpzRHViSlJYNklEWlB6ajh0d1E2U2Nza3V0MDBBV2R5UGlFaTJkTDhiV1dTNUEyU1h5T3N6aHNQdGlZb1dYZlFSTVo0QXlhcnVYNjJuVGhpOHZWb1Q5anFMWlJudzlDcVNpM3dwY1pmcjZDQUpXU3VaTmN5c3JLb3diL0JiQXRwUzF4OEpxSUd0T0Y2RTF5N1I3ZElxRWV3d1ZOYUN2cDJaaW9sVzhZa1ppVU5oMktKc0hGcmcyd0g3QVV0Vk1VOGRCcUhDTzc2RlJMcWFzb2JjMjJheCtEOU1ramYrWUJzTWhrWFlwNGxsZ1UzMCtiZkZ4OGg3WUJnMDBBTXM2Y2lLOHFJVStRNHNtTlhoekZpcFpvaXBIRDBoam01N3lnWFh6d01TRWUzakNPWkpoZVFzOGZGdmp4Y3kvb3UyMFhZdFhST0pCWnpmUHlsWmJncEJjWVdHck1Pa2R1L1Bybm1vUDNFbHJFS1hvVVg2aTdDSWkzVWR6VXFlUS9yd0pra0pjSmtodlErT1JTbVVLWGtBcVZ3OWFRazNMYmYvZFArcnJ5dWFaN0QwQWg1dGxIWnUrWE5HWi9zZ2EvLytBSDRHUk43TnhoVFc4dzBmVHBUS0t2cTVWc3J1OUlPRFNCRFlGYUNuVysxTVVBOENHaEtRbFRCWG9GUG5CUEIrSzAxQTIxaHhwVTlGQVg5Yy8wdkEyT2xVTmYyNWFSTi9pV2I3dWZYUldoYjNsTlNiZmRhczZ4eFZMa2psSGhndENPam5MdEV1YnMxWnNjM3JzUmlxNGYzV2RucXZraU5PcTJrb2UxcVU1T1RyYmZWV3FnOThERXc2QWFQMCs0aVNXYjJLaC9RVU5XTmw3RFBlc3U5MXFtM2FnczZVTXZzTy9QT3c1Q2NyNzlzSnppZlRsZ3o2enA0aEdlVUpTUGtXYTNqV2QvL1ZCRkx2MEZwejJ5UlRDZEJ3aTl0c0Y0NUtTWm45TkN1bThIQWxpZmkzVlk1bjBiMHRNM0VQTXc2a0dOQmZ4MkRxVnUySEJ4YjAxSlRUMU16N3BGdFZkdXFJcFJXTWx4V2ZyK3hCeFBBOWtxZ3QwUlhQTE5FanhXQU9HbDhrOW8rQW1VMGlrclJHM2l1S1QzcG50RnRWZHVxSXBSV01seFdmcit4QnhQRExheEY0NkcxOC9IOWhtVkZBSzZ2ZUUxRFJDQ2kwTDdnd0pSRVF6ejFGN25LRkh3MWw3NmdFZ3hpZStBTWRCQnZoRnpNQTZ1SThhNzFqQ0UyZXVwbEYxNlJldFBwM21KTXNrZ0ZRaTN0eU84c3J5MGpXVm5QN0NKLzcxa2dCMVBZcE1Xdi8wNkxhdldBVm5ZVmt2aitRTXZwRURDbUFqcU1JQTF1TkM0SWE5enVDOFMzQkR0aC9oT2tEUU1KTlhSRTBHZU9xVHZJQk5mTkx3V2NDaXE3WDBPcm1qQ0tWWFEvYmR6bURrL295amJiUnZ0eHF3SEtDSnZERjRHVm9rQnBCZUhCVUxhbmc2cnkrL2RSVjVOM0VJMmYva1IxWTZZVzVXRDlwbFdtRDFyMytmSGpjTWlsN3k3SGtjM2xRWm56cDd2ZnRyckszenl0VzNJTllvOHZZSW5DcHI2d0I5WnFha1lnTERCczdBdnR3UmEvWGl2UThla3VhN08zZjlKekNwbWpmeEU1MVNRM1FYQy8vcEsyMlNTcTJRaHAxVDZVaEs4WkxyZS8wNFNySUVCSC9IcVhNS0IvQUtSVnpseFZmNlZJVDFmc0t5MXBuRDdvQXo1WXRVY3U0Z084em9BbGlEWUY2cWpqNWpSUCtxV3Fxdy9wZVB2ZllWM215K3hBeGlSK3FFVi9TNnZvMzJrQ1h0cElmRWQxcnVRMVUxdXpXdjRKUUhoc1Q3czZVTXZzTy9QT3c1Q2NyNzlzSnppZDNCRHZZV2tvVXA1U3oxOENzL1Fiek5YQWlKZTNlV21INXN2dXNKLzdibG1qY1RCOUZMcDZGcTNpckk0QjluOXcxY0NJbDdkNWFZZm15KzZ3bi90dVdDRnZxNEdSOHJaYXhBaGhJSEphT2huaE96amYrbkRrNWtFcFBmam9QcEdra1BUdE5JeVkwbzQ2T1Y2UEpsdng2M0d6ODlya2NrNDdhMlY2eks4K0xaUlJ6aHFRbHR4ZGJoV3hmazhRS3ZJakxLOHRJMWxaeit3aWYrOVpJQWRUMnBtOUttbTAvTncrcXAvMnR4cFI4aGlwUWx6MnVNc1MyR1Zvd0djYlZTenFPdm1xdFkrQlo0UzhZb3h6VFZpKzVJTlZBTkdiR01EMVlRbHBjby9yM0EzYnhvU3F5eUk4bXRkY2dhZGl6TGN3czEzS2RjQVJiWjJ0NW4zSGVUajRUbzJYRkNvdkVOQkw2cnhWRkhDeVFPc3NyeTBqV1ZuUDdDSi83MWtnQjFQWTdmYms5RkhpcDljNXpLVkplc0hMa3l5dkxTTlpXYy9zSW4vdldTQUhVOXJ2Vm1FZFJPNUYzaVhmYnNyZmhlY1RPbERMN0R2enpzT1FuSysvYkNjNG5sMHl3T2RFcmVOM2I2ckdHdUtrSk4ya1ZrZEVaTndQWVBrQng4VTNYYUgrMXVhLytDU0U2TFNNYTVUVDBnKy9Kbk51WllhYkZmcUNLbDBDTHJ0bjhNWDZXdmliSS9HVUhXVDMyRUpYeHNnMFpRZ3RVRFlGQzZ0dXlSR2RrT3l0TGd3Y2tlQ0V0bDF2SW1uUmo3NlFTcXVIWTREVTVqdHBGVlZvOW94UjJYdXNnOWFsRnRLUkVubDJGaGcyeWN6aVVhSVRGUWwzcklTQk9ZNnY1SVc1ejgyeSs4d21qSHNFaytxUUtKN1FiR0ppMGp4US9CZWpieXJDTU1xYUROTUlKZGRKTGFrWDhXT1IyR0ZDbUcvbVAxNlBLaFM4Ti9LbHFaaFBMYkxhQ09aZUFUbTlJRDNKcjFvQkFyRTM1Q3lGR01HK0p3ZG1JMVpSbGFBdmc5VVBWd3BsKy9XblBNMjFJcVJ3enBuWVJRRGJZY0p5ckMybEc0ZTM4WitIRkhUaU92RlFvdjRpQ1RpUDJZNDBKS1BCSW1CVnlPNjduZ29ZVFpiUklEK2hCbUNQVG1nbEQ4QSszc1RabzJXL1RQTmJyZXR1V2FiRXk3dlc4eXpvWTA4ZmU5K3hWblVJZStSNVNXbUY2aUNrZXJrZmlLRC81a3dDMUFaS3VvUFE3WDNPNDRDeWtabzVXZFNGSVorenJja1dGMTcyaE1tTHRRY1VYakRQM0srNnlRcUFZMkdOcDJCTjJhek5QRGpSenBmK2hseldjdC9GZUltNVRUK1MxeHAvNjZqL1FNekpRL1QwaVlTWjJIYUVDVmk0ZmtqdDV5NDBIQW16elNBUk5aV3NPR3JQNFdOcXVYQmR2R2dua29BT2wwVFI5RFVjRmdDOUJjK1lUVFBFVS9sSG1TQU9tOFVsWlVBaCt3UTluSGREUnh6RzhGQ3d0ODRMK2hxYzlYbS9lbzJRZ1Flb3B5c1BVdjRTaGRSaHB2OEJvTm1qYmd5d0sxMytxbEZHMVZoeXF3a3RTUzJmTWdDWGlFNC90cnBUY252S0xBMHFlQ3c1MGlWWGxaZmh1dWRoUytxaTZMMDlNbU9tdHdWZ2duMUNHaGRHVWY4SEpJbUhRSlQzWDVFeTBpQT09XFxcIik7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpmL/ph4zkuIDnuqdcIixcInBhdGhcIjpcInNoYXJpZFwiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIGNsZWFyTXlWYXIoJ21vdW50emltdScpO1xcbn0pKVxcblxcbi8vdmFyIGl0ZW1zID0gW107XFxuZnVuY3Rpb24gZm9ybWF0RGF0ZShfZGF0ZSwgX2ZtdCkge1xcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXCI7XFxuICAgIGNvbnN0IGRhdGUgPSAhaXNOYU4oX2RhdGUpID8gbmV3IERhdGUoX2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKF9kYXRlKTtcXG4gICAgY29uc3QgbyA9IHtcXG4gICAgICAgIFxcXCJNK1xcXCI6IGRhdGUuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9IFxcbiAgICAgICAgXFxcImQrXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcbiAgICAgICAgXFxcImgrXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxuICAgICAgICBcXFwiSCtcXFwiOiBkYXRlLmdldEhvdXJzKCksIC8v5bCP5pe2IFxcbiAgICAgICAgXFxcIm0rXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcbiAgICAgICAgXFxcInMrXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcbiAgICAgICAgXFxcInErXFxcIjogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqYgXFxuICAgICAgICBcXFwiU1xcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxuICAgIH07XFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFwiXFxcIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7XFxuICAgIH1cXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxuICAgICAgICBpZiAobmV3IFJlZ0V4cChcXFwiKFxcXCIgKyBrICsgXFxcIilcXFwiKS50ZXN0KGZtdCkpIHtcXG4gICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKChcXFwiMDBcXFwiICsgb1trXSkuc3Vic3RyKChcXFwiXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZm10O1xcbn07XFxuXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxuICAgIGlmICghc2l6ZSkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XFxuICAgIGxldCBpID0gMDtcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcbiAgICAgICAgaSsrO1xcbiAgICB9XFxuICAgIHNpemUgPSBpID8gTnVtYmVyKHNpemUudG9GaXhlZCgyKSkgOiBzaXplO1xcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcbn1cXG4vL2xvZyhyZWFsdXJsKTtcXG5cXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxufVxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXG4gICAgbG9nKCfmsqHmnInkuIvkuIDpobUnKTtcXG59IGVsc2Uge1xcbiAgICB0cnkge1xcbiAgICAgICAgLy92YXIgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hbGl0b2tlbi5qc29uJywge30pKS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgdmFyIHNoYXJlSWQgPSBkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuc3BsaXQoJ2NvbS9zLycpWzFdLnN1YnN0cmluZygwLCAxMSk7XFxuICAgICAgICBsZXQgZ2V0c2hhciA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX2J5X2Fub255bW91cycsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIn0nLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBwdXNobmFtZSA9IEpTT04ucGFyc2UoZ2V0c2hhcikuZmlsZV9pbmZvc1swXS5maWxlX25hbWU7XFxuICAgICAgICAvL3ZhciBsaXN0eXAgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0udHlwZTtcXG4gICAgICAgIC8vdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9pZDtcXG5cXG4gICAgICAgIHZhciBzaGFyZXRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX3Rva2VuJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfcHdkXFxcIjpcXFwiXFxcIixcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwifScsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pKS5zaGFyZV90b2tlbjtcXG4gICAgICAgIC8vbG9nKHNoYXJldG9rZW4pO1xcblxcbiAgICAgICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXCJtYXJrZXJcXFwiOlxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcIicgOiAnJztcXG4gICAgICAgIGlmICghZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCcvZm9sZGVyLycpKSB7XFxuICAgICAgICAgICAgLy9pZighbGlzdHlwID09ICdmb2xkZXInKXtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCJyb290XFxcIixcXFwibGltaXRcXFwiOjEwMCxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vbG9nKHJlc2NvZCk7XFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtc1swXS50eXBlO1xcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLmZpbGVfaWQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSAnZm9sZGVyJztcXG4gICAgICAgICAgICB2YXIgcGZpbGVpZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnZm9sZGVyLycpWzFdXFxuXFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgIGlmIChsaXN0eXAgPT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCInICsgcGZpbGVpZCArICdcXFwiLFxcXCJsaW1pdFxcXCI6MTAwLFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXCIsXFxcImltYWdlX3VybF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2VcXFxcL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgfSAvL+WPluaWh+S7tuWkuVxcbiAgICAgICAgLy9sb2cocmVzY29kKTtcXG5cXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXIpIHtcXG4gICAgICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcbiAgICAgICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ25leHRwYWdlJywgbWFya2VyKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXG4gICAgICAgIHZhciB6aW11bGlzdCA9IFtdO1xcbiAgICAgICAgY29udHMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoaXRlbS5maWxlX2V4dGVuc2lvbikpIHtcXG4gICAgICAgICAgICAgICAgemltdWxpc3QucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBleHQ6IGl0ZW0uZmlsZV9leHRlbnNpb24sXFxuICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUucmVwbGFjZSgnLicgKyBpdGVtLmZpbGVfZXh0ZW5zaW9uLCAnJylcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIHR1aXNvbmcgPSBbXTtcXG4gICAgICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXG4gICAgICAgICAgICBpZiAobGlzdHlwICE9ICdmb2xkZXInKSB7XFxuICAgICAgICAgICAgICAgIHZhciB6aW11ID0ge307XFxuICAgICAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxuICAgICAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZm5hbWUucmVwbGFjZShjb250c1tpXS5maWxlX2V4dGVuc2lvbiwgJycpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gemltdWxpc3QuZmluZEluZGV4KHggPT4gbmFtZS5pbmNsdWRlcyh4Lm5hbWUpKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0gLTEgJiYgIWNvbmZpZy5zdWJzLmluY2x1ZGVzKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uKSkge1xcbiAgICAgICAgICAgICAgICAgICAgemltdWxpc3Quc3BsaWNlKGlkeCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB6aW11ID0gemltdWxpc3RbaWR4XTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICB2YXIgbG9uZ2MgPSBbXTtcXG4gICAgICAgICAgICAgICAgbGV0IHN1Ym5hbWUgPSBzdG9yYWdlMC5nZXRNeVZhcignbW91bnR6aW11JywgJycpO1xcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoY29udHNbaV0uZmlsZV9leHRlbnNpb24pKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGNvbnRzW2ldO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHptID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dDogaXRlbS5maWxlX2V4dGVuc2lvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLnJlcGxhY2UoJy4nICsgaXRlbS5maWxlX2V4dGVuc2lvbiwgJycpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsb25nYyA9IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmjILovb3lrZfluZU6IFxcXCIgKyAoc3VibmFtZSA9PSAnJyA/ICfml6AnIDogc3VibmFtZS5uYW1lKycuJytzdWJuYW1lLmV4dCksXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHptKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdtb3VudHppbXUnLCB6bSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mjILovb3lrozmiJDvvIzlvZPliY3lrZfluZXmlofku7Y6ICcgKyB6bS5uYW1lKycuJyt6bS5leHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgem0pLFxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdjID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuW9k+WJjeaMgui9veWtl+W5lTogXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB9XTtcXG4gICAgICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2RvYycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OWJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+WvCcgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ3ppcCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250c1tpXS5uYW1lXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbiwgemltdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hbGlsYXp5XFxcIikoc2hhcmVJZCwgaW5wdXQsIGNhdGUsIHppbXUpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuLCB6aW11KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGZvcm1hdERhdGUoY29udHNbaV0udXBkYXRlZF9hdCkgKyAnICAnICsgZm9ybWF0U2l6ZShjb250c1tpXS5zaXplKSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOmxvbmdjXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OCJyArIGNvbnRzW2ldLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknICsgY29udHNbaV0uZmlsZV9pZCArICc/Pz9meXBhZ2UnKS5ydWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBwdXNobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3J1bGVsb29wJywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNvbnRzW2ldLm5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfSAvL2VuZCBpZlxcbiAgICAgICAgfSAvL2VuZCBmb3IgaVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+asp+asp++8jOaKpemUmeS6huOAgicsXFxuICAgICAgICAgICAgdXJsOiBkZWNvZGVVUklDb21wb25lbnQoZ2V0UmVzQ29kZSgpLnNwbGl0KCcjIycpWzFdKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG4vKlxcbnNldEhvbWVSZXN1bHQoe1xcbiAgICBkYXRhOiBpdGVtc1xcbn0pO1xcbiovXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpmL/ph4zltYzlpZdcIixcInBhdGhcIjpcInJ1bGVsb29wXCIsXCJydWxlXCI6XCJ2YXIgaXRlbXMgPSBbXTtcXG5cXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxuICAgIGxldCBmbXQgPSBfZm10IHx8IFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcIjtcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcbiAgICBjb25zdCBvID0ge1xcbiAgICAgICAgXFxcIk0rXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxuICAgICAgICBcXFwiZCtcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxuICAgICAgICBcXFwiaCtcXFwiOiBkYXRlLmdldEhvdXJzKCkgJSAxMiA9PSAwID8gMTIgOiBkYXRlLmdldEhvdXJzKCkgJSAxMixcXG4gICAgICAgIFxcXCJIK1xcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxuICAgICAgICBcXFwibStcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxuICAgICAgICBcXFwicytcXFwiOiBkYXRlLmdldFNlY29uZHMoKSwgLy/np5IgXFxuICAgICAgICBcXFwicStcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXG4gICAgICAgIFxcXCJTXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXG4gICAgfTtcXG4gICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXCJcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXCIoXFxcIiArIGsgKyBcXFwiKVxcXCIpLnRlc3QoZm10KSkge1xcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXCIwMFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXCJcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBmbXQ7XFxufTtcXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcbi8vbGV0IHR2aXAgPSBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJycpO1xcblxcbi8vbG9nKGdldFJlc0NvZGUoKSk7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbn1cXG5pZiAoTVlfUEFHRSA+IDEgJiYgZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpID09ICcnKSB7XFxuICAgIGxvZygn5rKh5pyJ5LiL5LiA6aG1Jyk7XFxufSBlbHNlIHtcXG4gICAgbGV0IHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcblxcbiAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcIm1hcmtlclxcXCI6XFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFwiJyA6ICcnO1xcblxcbiAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJwYXJlbnRfZmlsZV9pZFxcXCI6XFxcIicgKyBnZXRSZXNDb2RlKCkuc3BsaXQoJz8/PycpWzBdICsgJ1xcXCIsXFxcImxpbWl0XFxcIjoxMDAsXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcIixcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZVxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXCIsXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFwiLFxcXCJvcmRlcl9ieVxcXCI6XFxcIm5hbWVcXFwiLFxcXCJvcmRlcl9kaXJlY3Rpb25cXFwiOlxcXCJBU0NcXFwiJyArIG5leHQgKyAnfScsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgLy9sb2cocmVzY29kKTtcXG4gICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcbiAgICAgICAgbGV0IG1hcmtlciA9IEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcjtcXG4gICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXG4gICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXG4gICAgdmFyIHppbXVsaXN0ID0gW107XFxuICAgIGNvbnRzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoaXRlbS5maWxlX2V4dGVuc2lvbikpIHtcXG4gICAgICAgICAgICB6aW11bGlzdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgZXh0OiBpdGVtLmZpbGVfZXh0ZW5zaW9uLFxcbiAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZS5yZXBsYWNlKCcuJyArIGl0ZW0uZmlsZV9leHRlbnNpb24sICcnKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHZhciB0dWlzb25nID0gW107XFxuICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXG4gICAgICAgIHZhciBsaXN0eXAgPSBjb250c1tpXS50eXBlO1xcbiAgICAgICAgaWYgKGxpc3R5cCAhPSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgIHZhciB6aW11ID0ge307XFxuICAgICAgICAgICAgdmFyIGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXG4gICAgICAgICAgICB2YXIgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gZm5hbWUucmVwbGFjZShjb250c1tpXS5maWxlX2V4dGVuc2lvbiwgJycpO1xcblxcbiAgICAgICAgICAgIHZhciBpZHggPSB6aW11bGlzdC5maW5kSW5kZXgoeCA9PiBuYW1lLmluY2x1ZGVzKHgubmFtZSkpO1xcbiAgICAgICAgICAgIGlmIChpZHggIT09IC0xICYmICFjb25maWcuc3Vicy5pbmNsdWRlcyhjb250c1tpXS5maWxlX2V4dGVuc2lvbikpIHtcXG4gICAgICAgICAgICAgICAgemltdWxpc3Quc3BsaWNlKGlkeCwgMSk7XFxuICAgICAgICAgICAgICAgIHppbXUgPSB6aW11bGlzdFtpZHhdO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcbiAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbG9uZ2MgPSBbXTtcXG4gICAgICAgICAgICBsZXQgc3VibmFtZSA9IHN0b3JhZ2UwLmdldE15VmFyKCdtb3VudHppbXUnLCAnJyk7XFxuICAgICAgICAgICAgaWYgKGNvbmZpZy5zdWJzLmluY2x1ZGVzKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGNvbnRzW2ldO1xcbiAgICAgICAgICAgICAgICB2YXIgem0gPSB7XFxuICAgICAgICAgICAgICAgICAgICBleHQ6IGl0ZW0uZmlsZV9leHRlbnNpb24sXFxuICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUucmVwbGFjZSgnLicgKyBpdGVtLmZpbGVfZXh0ZW5zaW9uLCAnJylcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsb25nYyA9IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaMgui9veWtl+W5lTogXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh6bSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdtb3VudHppbXUnLCB6bSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aMgui9veWujOaIkO+8jOW9k+WJjeWtl+W5leaWh+S7tjogJyArIHptLm5hbWUrJy4nK3ptLmV4dDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHptKSxcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsb25nYyA9IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuW9k+WJjeaMgui9veWtl+W5lTogXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbix6aW11KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWxpbGF6eVxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlLHppbXUpO1xcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4semltdSksXFxuICAgICAgICAgICAgICAgIGRlc2M6IGZvcm1hdERhdGUoY29udHNbaV0udXBkYXRlZF9hdCkgKyAnICAnICsgZm9ybWF0U2l6ZShjb250c1tpXS5zaXplKSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBjb250c1tpXS5maWxlX2lkLFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBsb25nY1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG5cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknICsgY29udHNbaV0uZmlsZV9pZCArICc/Pz9meXBhZ2UnKS5ydWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBwdXNobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcnVsZWxvb3AnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgIH0gLy9lbmQgaWZcXG5cXG4gICAgfVxcbn1cXG5zZXRSZXN1bHQoaXRlbXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Zi/6YeM5o6o6YCBXCIsXCJwYXRoXCI6XCJwdXNoXCIsXCJydWxlXCI6XCJqczpcXG4vL2xvZyhNWV9VUkwpO1xcbnZhciBpdGVtcyA9IFtdO1xcbnZhciByZWFsdXJsID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdLnNwbGl0KCc/Pz8nKVswXTtcXG5pZiAoZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCd3d3cuYWxpeXVuZHJpdmUnKSAmJiAhcmVhbHVybC5pbmNsdWRlcygnJTNCJTdCJykpIHtcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2Uvc2hhcmlkJywge30pKS5ydWxlKVxcbn1cXG5zZXRSZXN1bHQoaXRlbXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55m75b2VXCIsXCJwYXRoXCI6XCJsb2dpblwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gJ2h0dHBzOi8vYXV0aC5hbGl5dW5kcml2ZS5jb20vdjIvb2F1dGgvYXV0aG9yaXplP2xvZ2luX3R5cGU9Y3VzdG9tJnJlc3BvbnNlX3R5cGU9Y29kZSZyZWRpcmVjdF91cmk9aHR0cHMlM0ElMkYlMkZ3d3cuYWxpeXVuZHJpdmUuY29tJTJGc2lnbiUyRmNhbGxiYWNrJmNsaWVudF9pZD0yNWR6WDN2Yllxa3RWeHlYJnN0YXRlPSU3QiUyMm9yaWdpbiUyMiUzQSUyMiolMjIlN0QjL2xvZ2luJztcXG52YXIganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY29uc3QgdG9rZW5GdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIHRva2VuID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSlcXG4gICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi51c2VyX2lkKSB7XFxuICAgICAgICAgICAgbGV0IHRva2VuX3VybCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0pvZS9hbGkuanNvbic7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUodG9rZW5fdXJsLCBKU09OLnN0cmluZ2lmeSh0b2tlbikpO1xcbiAgICAgICAgICAgIGxldCBpY3kgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXFxcIjtcXG4gICAgICAgICAgICBsZXQgYSA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2goaWN5KTtcXG4gICAgICAgICAgICBpZiAoIWEgfHwgYSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBsZXQgYiA9IFtdO1xcbiAgICAgICAgICAgICAgICBiLnB1c2godG9rZW4pO1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShpY3ksIEpTT04uc3RyaW5naWZ5KGIpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKHRydWUpO1xcbiAgICAgICAgICAgIGFsZXJ0KCdUT0tFTuiOt+WPluaIkOWKn++8jOivt+WLv+azhOa8j+S4quS6uumakOenge+8geaJi+WKqOmAgOWHuuivpemhtemdouWQjuWIt+aWsOmHjeivleWNs+WPr++8gScpO1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdG9rZW5fdGltZXIoKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB2YXIgdG9rZW5fdGltZXIgPSBmdW5jdGlvbigpIHtcXG4gICAgICAgIHNldFRpbWVvdXQodG9rZW5GdW5jdGlvbiwgMzAwKVxcbiAgICB9O1xcbiAgICB0b2tlbl90aW1lcigpO1xcbiAgICB0b2tlbkZ1bmN0aW9uKCk7XFxufSlcXG5kLnB1c2goe1xcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxuICAgIGRlc2M6ICcxMDAlJiZmbG9hdCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcbiAgICAgICAganM6IGpzXFxuICAgIH1cXG59KVxcbnNldFJlc3VsdChkKTtcIn1dLFwicGFyYW1zXCI6XCJ7XFxcInBhZ2VUaXRsZVxcXCI6XFxcIueZu+W9lemYv+mHjOS6keebmFxcXCJ9XCIsXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIuS6keebmOWQm1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS9sb2dpblwiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gJ2h0dHBzOi8vYXV0aC5hbGl5dW5kcml2ZS5jb20vdjIvb2F1dGgvYXV0aG9yaXplP2xvZ2luX3R5cGU9Y3VzdG9tJnJlc3BvbnNlX3R5cGU9Y29kZSZyZWRpcmVjdF91cmk9aHR0cHMlM0ElMkYlMkZ3d3cuYWxpeXVuZHJpdmUuY29tJTJGc2lnbiUyRmNhbGxiYWNrJmNsaWVudF9pZD0yNWR6WDN2Yllxa3RWeHlYJnN0YXRlPSU3QiUyMm9yaWdpbiUyMiUzQSUyMiolMjIlN0QjL2xvZ2luJztcXG52YXIganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY29uc3QgdG9rZW5GdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIHRva2VuID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSlcXG4gICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi51c2VyX2lkKSB7XFxuICAgICAgICAgICAgbGV0IHRva2VuX3VybCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0pvZS9hbGkuanNvbic7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUodG9rZW5fdXJsLCBKU09OLnN0cmluZ2lmeSh0b2tlbikpO1xcbiAgICAgICAgICAgIGxldCBpY3kgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uXFxcIjtcXG4gICAgICAgICAgICBsZXQgYSA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2goaWN5KTtcXG4gICAgICAgICAgICBpZiAoIWEgfHwgYSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBsZXQgYiA9IFtdO1xcbiAgICAgICAgICAgICAgICBiLnB1c2godG9rZW4pO1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShpY3ksIEpTT04uc3RyaW5naWZ5KGIpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKHRydWUpO1xcbiAgICAgICAgICAgIGFsZXJ0KCdUT0tFTuiOt+WPluaIkOWKn++8jOivt+WLv+azhOa8j+S4quS6uumakOenge+8geaJi+WKqOmAgOWHuuivpemhtemdouWQjuWIt+aWsOmHjeivleWNs+WPr++8gScpO1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdG9rZW5fdGltZXIoKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB2YXIgdG9rZW5fdGltZXIgPSBmdW5jdGlvbigpIHtcXG4gICAgICAgIHNldFRpbWVvdXQodG9rZW5GdW5jdGlvbiwgMzAwKVxcbiAgICB9O1xcbiAgICB0b2tlbl90aW1lcigpO1xcbiAgICB0b2tlbkZ1bmN0aW9uKCk7XFxufSlcXG5kLnB1c2goe1xcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxuICAgIGRlc2M6ICcxMDAlJiZmbG9hdCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcbiAgICAgICAganM6IGpzXFxuICAgIH1cXG59KVxcbnNldFJlc3VsdChkKTtcIixcImdyb3VwXCI6XCLikaDnvZHnm5hcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcImluaXRDb25maWcoe1xcbiAgICBzdWJzOiBbJ2FzcycsICdzcnQnLCAndnR0JyxcXFwiU1JUXFxcIixcXFwiQVNTXFxcIixcXFwiVlRUXFxcIl1cXG59KTtcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6KeE5YiZ5YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImRhdGFcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIHdyYXB1ID0gKHUpID0+IHtcXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLmnKzlnLDovaznoIFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZSdcXFxcbiAgICB9XFxcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXFxcXFwiSm9l54mI6Zi/6YeM5LqR55uYXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2hhcmU/cGFnZT1meXBhZ2UmcnVsZT3pmL/ph4zkupHnm5gmc2hhcmVfdXJsPScgKyB1O1xcXFxuICAgIH1cXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXFxcbiAgICB9XFxcXG4gICAgaWYgKC9hbGl5dW5kcml2ZS8udGVzdCh1KSkge1xcXFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcXFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcXFxuICAgICAgICBsZXQgc2hhcmVfcHdkID0gKF9zaGFyZV9wd2QgfHwgJycpLnNwbGl0KCcjbmFtZT0nKVswXSB8fCAnJztcXFxcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCJ3ZWI6Ly9cXFxcXFxcIiArIHU7XFxcXG59O1xcXFxuXFxcXG52YXIgY2hlY2thbGkgPSAocmVhbHVybCkgPT4ge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGxldCBzaGFyZUlkID0gcmVhbHVybC5zcGxpdChcXFxcXFxcImNvbS9zL1xcXFxcXFwiKVsxXS5zdWJzdHJpbmcoMCwgMTEpO1xcXFxuICAgICAgICBpZiAocmVhbHVybC5pbmNsdWRlcyhcXFxcXFxcImNvbS9zL1xcXFxcXFwiKSAmJiByZWFsdXJsICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGxldCBzaGFyZSA9IGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9zaGFyZV9saW5rL2dldF9zaGFyZV9ieV9hbm9ueW1vdXNcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJzaGFyZV9pZFxcXFxcXFwiOiBzaGFyZUlkXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBpZiAoc2hhcmUuaW5jbHVkZXMoXFxcXFxcXCJzaGFyZV9saW5rIGlzXFxcXFxcXCIpIHx8IHNoYXJlLmluY2x1ZGVzKFxcXFxcXFwic2hhcmVfbGluayBjYW5ub3RcXFxcXFxcIikpIHJldHVybiBmYWxzZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgcmV0dXJuIHRydWU7XFxcXG59XFxcXG5cXFxcbmxldCBydWxlcyA9IFt7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi5LqR55uY6LWE5rqQXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vP1BhZ2VJbmRleD1cXFxcXFxcIiArIHBhZ2UgKyBcXFxcXFxcIiZQYWdlU2l6ZT0xMiZLZXl3b3JkPVxcXFxcXFwiICsgcyArIFxcXFxcXFwiJlR5cGU9JlRhZz1cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcXFxcXCJtYWluJiYuY2FyZFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFxcXFxcIi5jYXJkLWxpbmssMSYmb25jbGlja1xcXFxcXFwiKS5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFxcXFxcIi5jYXJkLXRpdGxlJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwZChpdCwgXFxcXFxcXCJpbWcmJnNyY1xcXFxcXFwiLCB1cmwpLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuS6keebmOi1hOa6kDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIChwZGZoKGl0LCBcXFxcXFxcIi5jYXJkLXRleHQsLTEmJlRleHRcXFxcXFxcIikpICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArICh1KSxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwge1xcXFxuICAgICAgICBuYW1lOiBcXFxcXFxcIlVQ5LqR5pCcXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vYXBpLnVweXVuc28yLmNvbS9zZWFyY2g/a2V5d29yZD1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZwYWdlPVxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwiJnNfdHlwZT0xXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy51cHl1bnNvLmNvbVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBcXFxcXFxcImNvZGU9MTkxOVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAvL2xvZyhiYXNlNjREZWNvZGUoaHRtbCkpO1xcXFxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGh0bWwpKS5yZXN1bHQuaXRlbXM7XFxcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gaXQucGFnZV91cmw7XFxcXG4gICAgICAgICAgICAgICAgLy91ID0gdS5sZW5ndGggPiAwID8gdVswXSA6IHVybDtcXFxcbiAgICAgICAgICAgICAgICBpZiAoIXUuaW5jbHVkZXMoXFxcXFxcXCJhbGl5dW5kcml2ZVxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlVQ5LqR5pCcPC9mb250PiZuYnNwO1xcXFxcXFwiICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArICh1KSxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi54yr54u455uY5pCcXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcXFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tL3NlYXJjaD9rPVxcXFxcXFwiICsgcywge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFxcXFxcIiArIHNcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXFxcXFwiI2FwcCYmYVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBcXFxcXFxcIjxkaXY+XFxcXFxcXCIgKyBhcnJbaV0gKyBcXFxcXFxcIjwvZGl2PlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcXFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFxcXFxcIi9zL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdSA9IFxcXFxcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbVxcXFxcXFwiICsgdS5yZXBsYWNlKFxcXFxcXFwiL3MvXFxcXFxcXCIsIFxcXFxcXFwiL2N2L1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdCwgXFxcXFxcXCJ0ZW1wbGF0ZSYmVGV4dFxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHUpLmxhenlSdWxlKCh3cmFwdSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBcXFxcXFxcIm5vX3Nob3dfZG9uYXRlPTFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IGlucHV0LnJlcGxhY2UoXFxcXFxcXCIvY3YvXFxcXFxcXCIsIFxcXFxcXFwiL3MvXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2VcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCAnYSYmaHJlZicpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodG1sLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIF9saW5rc1swXSArICc/P2Z5cGFnZSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KGh0bWwpICsgJz8/P2Z5cGFnZSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7njKvni7jnm5jmkJw8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyBwZGZoKGl0LCBcXFxcXFxcInRlbXBsYXRlLDEmJlRleHRcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLmmJPmkJxcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcblxcXFxuICAgICAgICAgICAgZnVuY3Rpb24ga2V5ZW4oc3RyKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiNE9Ub1NjVUZPYWVWVHJIRVxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIjlDTEdhbzF2SEtxbTE3T3pcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dDogQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZShzdHIpXFxcXG4gICAgICAgICAgICAgICAgfSwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGl2OiBpdixcXFxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxcXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jcnlwdGVkO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly95aXNvLmZ1bi9hcGkvc2VhcmNoP25hbWU9XFxcXFxcXCIgKyBzICsgXFxcXFxcXCImcGFnZU5vPVxcXFxcXFwiICsgcGFnZSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly95aXNvLmZ1bi9pbmZvP3NlYXJjaEtleT1cXFxcXFxcIiArIHMsXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGdldEl0ZW0oJ3lpc291Y29va2UnLCAnJylcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcXFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5jbHVkZXMoJ+eZu+W9leeUqOaIt+aXoOmZkOWIticpKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xcXFxuICAgICAgICAgICAgICAgIGRvIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5aW1nbGluID0gJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4vY2FwdGNoYT90PScgKyBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSkgKyAnJztcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGltZyA9IGNvbnZlcnRCYXNlNjRJbWFnZSh0eWltZ2xpbikuc3BsaXQoJywnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvZCA9IHJlcXVlc3QoJ2h0dHBzOi8vYXBpLm5uLmNpL29jci9iNjQvdGV4dCcsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW4nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogaW1nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXIgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4nLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVmZXJlcic6ICdodHRwczovL3lpc28uZnVuL2xvZ2luJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29va2llJzogZ2V0Q29va2llKHR5aW1nbGluKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInVzZXJOYW1lXFxcXFxcXCI6IFxcXFxcXFwidHZib3gyMDIzXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJwYXNzd29yZFxcXFxcXFwiOiBcXFxcXFxcIlR2Ym94MjAyM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY29kZVxcXFxcXFwiOiBjb2RcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXIuY29kZSA9PSAyMDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn5piT5pCc55m75YWl6aqM6K+B5oiQ5YqfJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCd5aXNvdWNvb2tlJywgZ2V0Q29va2llKCdodHRwczovL3lpc28uZnVuJykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QoXFxcXFxcXCJodHRwczovL3lpc28uZnVuL2FwaS9zZWFyY2g/bmFtZT1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZwYWdlTm89XFxcXFxcXCIgKyBwYWdlLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3lpc28uZnVuL2luZm8/c2VhcmNoS2V5PVxcXFxcXFwiICsgcyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogZ2V0SXRlbSgneWlzb3Vjb29rZScsICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xcXFxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGkgPCA0KTtcXFxcblxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YS5saXN0O1xcXFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGtleWVuKGl0LnVybCk7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2codSk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCAhdS5pbmNsdWRlcyhcXFxcXFxcImFsaXl1blxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBpdC5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaYk+aQnDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIChpdC5nbXRTaGFyZSB8fCBpdC5nbXRDcmVhdGUpICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArICh1KSxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi5om+6LWE5rqQXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldGh0bWwoKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly96aGFveml5dWFuLmxhL3NvP2ZpbGVuYW1lPVxcXFxcXFwiICsgcyArIFxcXFxcXFwiJnBhZ2U9XFxcXFxcXCIgKyBwYWdlLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zdG9wLmh0bWxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwib3JpZ2luXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly96aGFveml5dWFuLmxhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBnZXRJdGVtKFxcXFxcXFwienp5Y29va2VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHNcXFxcXFxcIjogXFxcXFxcXCIxXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNvbnRlbnQtdHlwZVxcXFxcXFwiOiBcXFxcXFxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IGdldGh0bWwoKTtcXFxcbiAgICAgICAgICAgIGlmICghaHRtbC5pbmNsdWRlcyhcXFxcXFxcInNlYXJjaF9ib3hcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXNlciA9ICdkWE5sY201aGJXVTllWEJxTWpBeU15WndZWE56ZDI5eVpEMTVjR295TURJeic7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2sgPSBKU09OLnBhcnNlKGZldGNoQ29va2llKCdodHRwczovL3poYW96aXl1YW4ubGEvbG9naXUuaHRtbCcsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBNT0JJTEVfVUEsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnT3JpZ2luJzogJ2h0dHBzOi8vemhhb3ppeXVhbi5sYScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3poYW96aXl1YW4ubGEvbG9naW4uaHRtbCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHNcXFxcXFxcIjogXFxcXFxcXCIxXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYmFzZTY0RGVjb2RlKHVzZXIpLFxcXFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxcXG4gICAgICAgICAgICAgICAgfSkpLmpvaW4oJzsnKTtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwienp5Y29va2VcXFxcXFxcIiwgY29vayk7XFxcXG4gICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwi5om+6LWE5rqQ55m75YWlXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGh0bWwgPSBnZXRodG1sKCk7XFxcXG4gICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmLm5ld3NMaXN0JiZsaTpub3QoOmZpcnN0LWNoaWxkKVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFxcXFxcImEmJmhyZWZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdSA9IFxcXFxcXFwiaHR0cHM6Ly96aGFveml5dWFuLmxhL1xcXFxcXFwiICsgdTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0LCBcXFxcXFxcIi5uZXdzX3RleHQmJmgzJiZUZXh0XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7mib7otYTmupA8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAocGRmaChpdCwgXFxcXFxcXCIubmV3c190ZXh0JiZwJiZUZXh0XFxcXFxcXCIpKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHUpLmxhenlSdWxlKCh3cmFwdSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcXFxcXC9cXFxcXFxcXC8od3d3XFxcXFxcXFwuYWxpeXVuZHJpdmVcXFxcXFxcXC5jb21cXFxcXFxcXC9zfGFseXdwXFxcXFxcXFwubmV0KVxcXFxcXFxcL1xcXFxcXFxcdyovZykgfHwgW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChfbGlua3NbMF0pICsgJz8/P2Z5cGFnZSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUpXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLlsI/nurjmnaFcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldHRva2VuKCkge1xcXFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcigneHp5dG9rZW4nLCAnJykubGVuZ3RoID09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gSlNPTi5wYXJzZShwb3N0KCdodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvJywge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2dldF90b2tlbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4enR0b2tlbicsIHRva2VuKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE15VmFyKCd4enR0b2tlbicsICcnKTtcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgZnVuY3Rpb24gY2F0X2NvZGUoYSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBkLCBlLCBiID0gW1xcXFxcXFwi5Y2O6K+t55S16KeGXFxcXFxcXCIsIFxcXFxcXFwi5pel6Z+p55S16KeGXFxcXFxcXCIsIFxcXFxcXFwi5qyn576O55S16KeGXFxcXFxcXCIsIFxcXFxcXFwi5YW25LuW55S16KeGXFxcXFxcXCIsIFxcXFxcXFwi5Y2O6K+t55S15b2xXFxcXFxcXCIsIFxcXFxcXFwi5pel6Z+p55S15b2xXFxcXFxcXCIsIFxcXFxcXFwi5qyn576O55S15b2xXFxcXFxcXCIsIFxcXFxcXFwi5YW25LuW55S15b2xXFxcXFxcXCIsIFxcXFxcXFwi5Y2O6K+t5Yqo5ryrXFxcXFxcXCIsIFxcXFxcXFwi5pel6Z+p5Yqo5ryrXFxcXFxcXCIsIFxcXFxcXFwi5qyn576O5Yqo5ryrXFxcXFxcXCIsIFxcXFxcXFwi57qq5b2V54mHXFxcXFxcXCIsIFxcXFxcXFwi57u86Im654mHXFxcXFxcXCIsIFxcXFxcXFwi5pWZ6IKy5Z+56K6tXFxcXFxcXCIsIFxcXFxcXFwi5YW25LuW6KeG6aKRXFxcXFxcXCIsIFxcXFxcXFwi5Y2O6K+t6Z+z5LmQXFxcXFxcXCIsIFxcXFxcXFwi5pel6Z+p6Z+z5LmQXFxcXFxcXCIsIFxcXFxcXFwi5qyn576O6Z+z5LmQXFxcXFxcXCIsIFxcXFxcXFwi5YW25LuW6Z+z5LmQXFxcXFxcXCIsIFxcXFxcXFwi5aix5LmQ6L2v5Lu2XFxcXFxcXCIsIFxcXFxcXFwi57O757uf6L2v5Lu2XFxcXFxcXCIsIFxcXFxcXFwi572R57uc6L2v5Lu2XFxcXFxcXCIsIFxcXFxcXFwi5Yqe5YWs6L2v5Lu2XFxcXFxcXCIsIFxcXFxcXFwi5YW25LuW6L2v5Lu2XFxcXFxcXCIsIFxcXFxcXFwi5ryr55S7XFxcXFxcXCIsIFxcXFxcXFwi5bCP6K+0XFxcXFxcXCIsIFxcXFxcXFwi5Ye654mI5LmmXFxcXFxcXCIsIFxcXFxcXFwi55+l6K+G5Z+56K6tXFxcXFxcXCIsIFxcXFxcXFwi5YW25LuW5paH5qGjXFxcXFxcXCIsIFxcXFxcXFwi5aOB57q4XFxcXFxcXCIsIFxcXFxcXFwi5Lq654mpXFxcXFxcXCIsIFxcXFxcXFwi6aOO5pmvXFxcXFxcXCIsIFxcXFxcXFwi5YW25LuW5Zu+54mHXFxcXFxcXCIsIFxcXFxcXFwi5YW25LuWXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgICAgICBjID0gW1xcXFxcXFwiaHlkc1xcXFxcXFwiLCBcXFxcXFxcInJoZHNcXFxcXFxcIiwgXFxcXFxcXCJvbWRzXFxcXFxcXCIsIFxcXFxcXFwicXRkc1xcXFxcXFwiLCBcXFxcXFxcImh5ZHlcXFxcXFxcIiwgXFxcXFxcXCJyaGR5XFxcXFxcXCIsIFxcXFxcXFwib21keVxcXFxcXFwiLCBcXFxcXFxcInF0ZHlcXFxcXFxcIiwgXFxcXFxcXCJoeWRtXFxcXFxcXCIsIFxcXFxcXFwicmhkbVxcXFxcXFwiLCBcXFxcXFxcIm9tZG1cXFxcXFxcIiwgXFxcXFxcXCJqbHBcXFxcXFxcIiwgXFxcXFxcXCJ6eXBcXFxcXFxcIiwgXFxcXFxcXCJqeXB4XFxcXFxcXCIsIFxcXFxcXFwicXRzcFxcXFxcXFwiLCBcXFxcXFxcImh5eXlcXFxcXFxcIiwgXFxcXFxcXCJyaHl5XFxcXFxcXCIsIFxcXFxcXFwib215eVxcXFxcXFwiLCBcXFxcXFxcInF0eXlcXFxcXFxcIiwgXFxcXFxcXCJrZnJqXFxcXFxcXCIsIFxcXFxcXFwieHRyalxcXFxcXFwiLCBcXFxcXFxcIndscmpcXFxcXFxcIiwgXFxcXFxcXCJiZ3JqXFxcXFxcXCIsIFxcXFxcXFwicXRyalxcXFxcXFwiLCBcXFxcXFxcIm1oXFxcXFxcXCIsIFxcXFxcXFwieHNcXFxcXFxcIiwgXFxcXFxcXCJjYnNcXFxcXFxcIiwgXFxcXFxcXCJ6c3B4XFxcXFxcXCIsIFxcXFxcXFwicXR3ZFxcXFxcXFwiLCBcXFxcXFxcImJ6XFxcXFxcXCIsIFxcXFxcXFwicndcXFxcXFxcIiwgXFxcXFxcXCJmalxcXFxcXFwiLCBcXFxcXFxcInF0dHBcXFxcXFxcIiwgXFxcXFxcXCJxdFxcXFxcXFwiXTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGQgPSAwLCBlID0gYy5sZW5ndGg7IGUgPiBkOyBkKyspXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChjW2RdID09IGEpIHJldHVybiBiW2RdO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcG9zdChcXFxcXFxcImh0dHBzOi8vZ2l0Y2FmZS5uZXQvdG9vbC9hbGlwYXBlci9cXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly91LmdpdGNhZmUubmV0LydcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBcXFxcXFxcInNlYXJjaFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBcXFxcXFxcIndlYlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB0b2tlbjogZ2V0dG9rZW4oKSxcXFxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogc1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoaHRtbCk7XFxcXG4gICAgICAgICAgICBpZiAobGlzdC5kYXRhKSB7XFxcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QuZGF0YTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdC50aXRsZTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgbXVybCA9ICdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgaXQua2V5XFxcXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja2FsaShtdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLiiJogXFxcXFxcXCIgKyB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5bCP57q45p2hPC9mb250PiZuYnNwO1xcXFxcXFwiICsgY2F0X2NvZGUoaXQuY2F0KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzOiBpdC5kZXNcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBtdXJsICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUobXVybClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBtdXJsKSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwge1xcXFxuICAgICAgICBuYW1lOiBcXFxcXFxcIueOqeWBtuWTpeWTpVxcXFxcXFwiLFxcXFxuICAgICAgICBwYWdlOiB0cnVlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcXFxcXCJodHRwOi8vd29nZy54eXovaW5kZXgucGhwL3ZvZHNlYXJjaC9cXFxcXFxcIiArIHMgKyBcXFxcXFxcIi0tLS0tLS0tLS1cXFxcXFxcIiArIHBhZ2UgKyBcXFxcXFxcIi0tLS5odG1sXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLm1vZHVsZS1pdGVtcyYmLm1vZHVsZS1zZWFyY2gtaXRlbScpO1xcXFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnaDMmJmEmJlRleHQnKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXNlcmlhbCA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJy52aWRlby1zZXJpYWwmJlRleHQnKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdWltYWdlID0gcGFyc2VEb20oaXQsICcubGF6eWxvYWQmJmRhdGEtc3JjJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tKGl0LCAnaDMmJmEmJmhyZWYnLCAnaHR0cDovL3dvZ2cueHl6LycpO1xcXFxuICAgICAgICAgICAgICAgIC8vbGV0IGRldCA9IHJlcXVlc3QodSwge30pO1xcXFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHV0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiB1c2VyaWFsXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoYmV0Lmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgYmV0aCA9IGJhdGNoRmV0Y2goYmV0KTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJldGgubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGJldGhbaV0sICcubW9kdWxlLXBsYXllci1saXN0JiZwJylcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAncCYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXFxcXFwiL3MvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogYmV0W2ldLmltYWdlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+546p5YG25ZOl5ZOlPC9mb250PiZuYnNwO1xcXFxcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcXFxcXG4nICsgdSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLpmL/ph4zkupHnm5jnvZFcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXFxcXFwiaHR0cHM6Ly93d3cuYWx5cHcuY24vc2VhcmNoLnBocD9xPVxcXFxcXFwiICsgcyArIFxcXFxcXFwiJnBhZ2U9XFxcXFxcXCIgKyBwYWdlO1xcXFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5saXN0JiZsaScpO1xcXFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmdGl0bGUnKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXNlcmlhbCA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJy5mYS1jbG9jay1vJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHVpbWFnZSA9IHBhcnNlRG9tKGl0LCAnaW1nJiZzcmMnLCAnaHR0cHM6Ly93d3cuYWx5cHcuY24vJyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbShpdCwgJ2EmJmhyZWYnLCAnaHR0cHM6Ly93d3cuYWx5cHcuY24vJyk7XFxcXG4gICAgICAgICAgICAgICAgLy9sZXQgZGV0ID0gcmVxdWVzdCh1LCB7fSk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCF1dGl0bGUuaW5jbHVkZXMocykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHV0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1LFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiB1c2VyaWFsXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvL2xvZyhiZXQpO1xcXFxuICAgICAgICAgICAgaWYgKGJldC5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZXRoLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShiZXRoW2ldLCAnYm9keSYmYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dJylcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2cobGlzdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwgJ2EmJmhyZWYnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJldFtpXS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBiZXRbaV0uaW1hZ2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7pmL/ph4zkupHnm5jnvZE8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAoYmV0W2ldLmRlc2MpICsgJ1xcXFxcXFxcbicgKyB1LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwge1xcXFxuICAgICAgICBuYW1lOiBcXFxcXFxcIuWcn+aLqOm8oFxcXFxcXFwiLFxcXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cudGJzZHkuY29tL3NlYXJjaC5odG1sP2tleXdvcmQ9JyArIHMgKyAnJmNhdGVnb3J5PTk4MzkyMCZkYXRhX3R5cGU9OTg3OTEwJywge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLnNlYXJjaF9yZXN1bHRfbmV0ZGlza19saXN0JiZhJyk7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coaXQpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmaHJlZicpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aXQgPSBwYXJzZURvbUZvckh0bWwoaXQsICcubmV0ZGlza19pdGVtX2RldGFpbF9uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCF0aXQuaW5jbHVkZXMocykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXQsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5Zyf5ouo6byg5pCcPC9mb250PiZuYnNwO1xcXFxcXFwiICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIHUsXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLpmL/ph4zmkJxcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly9hbGlzby5jYy9zLycgKyBzICsgJy0nICsgcGFnZSArICctMC5odG1sJywge30pO1xcXFxuXFxcXG4gICAgICAgICAgICBsZXQgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5zZWFyY2gtcmVzdWx0JiYucmVzb3VyY2UtaXRlbScpO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBsaXN0W2pdO1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aXQgPSBwYXJzZURvbUZvckh0bWwodSwgJ2gzJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCF0aXQuaW5jbHVkZXMocykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXQsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChwYXJzZURvbSh1LCAnaDMmJmEmJmhyZWYnLCAnaHR0cHM6Ly9hbGlzby5jYy8nKSkubGF6eVJ1bGUoKHdyYXB1KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNyeShzdHIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCI5RUIyMERERkQ2QUZCRDY4XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChzdHIsIGtleSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdjoga2V5LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnV0ID0gcGFyc2VEb20oaHRtbCwgJy5idXR0b24mJmhyZWYnLCAnaHR0cHM6Ly9hbGlzby5jYy8nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGJ1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ290ID0gcmVxdWVzdChidXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coZ290KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwocGFyc2VEb21Gb3JIdG1sKGdvdCwgJ2hlYWQmJnNjcmlwdCwxJiZIdG1sJykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KGRlY3J5KGJhc2U2NC5zcGxpdCgnIScpWzBdKSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPumYv+mHjOaQnDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIHBhcnNlRG9tRm9ySHRtbCh1LCAnLnRpbWUmJlRleHQnKSxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCAvKntcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLlnJ/ni5fmkJxcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly93d3cudHVnb3Vzb3UuY29tL3NlYXJjaCcsIHtcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAna2V5d29yZD0nICsgcyxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcubGF5dWktY29udGFpbmVyLDEmJi5sYXl1aS1yb3c6aGFzKGEpJyk7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwoaXQsICdhJiZocmVmJyk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXFxcXFwiL3MvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWcn+eLl+aQnDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIHBhcnNlRG9tRm9ySHRtbChpdCwgJ3AsLTEmJlRleHQnKSArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyB1LFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCAqL3tcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLkupHnm5jliIbkuqvnpL5cXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG5cXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5KHN0cikge1xcXFxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIjVGNkIyQUszM0RBU0QxMjNcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHN0ciwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuRUNCLFxcXFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICAgICAgICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vYXBpL2Jicy9hcGkvZ2V0ZGF0YT9rZXk9JyArIHMgKyAnJnR5cGU9dmlkZW8nLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgbGV0IGpzb24gPSBkZWNyeShKU09OLnBhcnNlKGh0bWwpLmRhdGEpO1xcXFxuICAgICAgICAgICAgLy9sb2coanNvbik7XFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShqc29uKTsgLy9bMF0ucmVzdWx0Lml0ZW1zO1xcXFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcblxcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGxldCBiZXQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdC5waWQ7XFxcXG4gICAgICAgICAgICAgICAgYmV0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9hcGkvYmJzL2FwaS9nZXRhcnRpY2xlP2lkPScgKyB1cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvL2xvZyh1KTtcXFxcbiAgICAgICAgICAgIGxldCBiZXRoID0gYmF0Y2hGZXRjaChiZXQpO1xcXFxuXFxcXG4gICAgICAgICAgICAvL2xvZyhhcnRpY2xlKTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmV0aC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShiZXRoW2ldKS5kYXRhO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKGpzb24pO1xcXFxuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0ganNvbi5kb3dubG9hZC5zcGxpdCgnQCcpO1xcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IGxpc3Rbal07XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToganNvbi50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jliIbkuqvnpL48L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAoanNvbi5jcmVhdGV0aW1lKSArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyAoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyB1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLnm5jmkJxcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgcGFnZSA9IChwYWdlIC0gMSkgKiAxMDtcXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vd3d3LnBhbnNlYXJjaC5tZS9zZWFyY2g/a2V5d29yZD1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZvZmZzZXQ9XFxcXFxcXCIgKyBwYWdlICsgXFxcXFxcXCImcGFuPWFsaXl1bmRyaXZlXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxcXG5cXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcuZ3JpZCYmLnNoYWRvdzpoYXMoYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dKScpO1xcXFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2FbaHJlZl49aHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvXSYmaHJlZicpO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwoaXQsICcuYnJlYWstYWxsJiZUZXh0Jykuc3BsaXQoJ2h0dHAnKVswXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGFyc2VEb21Gb3JIdG1sKGl0LCAnaW1nJiZzcmMnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7nm5jmkJw8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAocGFyc2VEb21Gb3JIdG1sKGl0LCAncCYmVGV4dCcpKSArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyAodSksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwiRE9WWOaQnFxcXFxcXFwiLFxcXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuZG92eC50ay9hbGkvc2VhcmNoP3dkPVxcXFxcXFwiICsgcztcXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHt9KTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGJhc2U2NERlY29kZShodG1sKSk7XFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShodG1sKS5saXN0O1xcXFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGl0LnZvZF9jb250ZW50O1xcXFxuICAgICAgICAgICAgICAgIC8vdSA9IHUubGVuZ3RoID4gMCA/IHVbMF0gOiB1cmw7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXFxcXFwiYWxpeXVuZHJpdmVcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmICghY2hlY2thbGkodSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuKImiBcXFxcXFxcIiArIGl0LnZvZF9uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC52b2RfcGljLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPkRPVljmkJw8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiICsgKHUpLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLlv4XlupRcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXFxcXFwiaHR0cHM6Ly9jbi5iaW5nLmNvbS9zZWFyY2g/cT1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIithbGl5dW5kcml2ZSZxcz1kcyZmb3JtPVFCUkVcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlICE9IDEpIHtcXFxcbiAgICAgICAgICAgICAgICB1cmwgPSBnZXRNeVZhcihcXFxcXFxcImJpbmdcXFxcXFxcIiwgdXJsKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vY24uYmluZy5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vXFxcXFxcXCJYLVJlcXVlc3RlZC1XaXRoXFxcXFxcXCI6IFxcXFxcXFwiY29tLmV4YW1wbGUuaGlrZXJ2aWV3XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQWNjZXB0XFxcXFxcXCI6IFxcXFxcXFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmYVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIsIHVybCk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCBcXFxcXFxcImEmJlRleHRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGl0LmluY2x1ZGVzKFxcXFxcXFwiTmV4dCBwYWdlXFxcXFxcXCIpIHx8IGl0LmluY2x1ZGVzKFxcXFxcXFwi5LiL5LiA6aG1XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1MiA9IHBkKGl0LCBcXFxcXFxcImEmJmhyZWZcXFxcXFxcIiwgdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJuZXh0IHBhZ2VcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHUyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJiaW5nXFxcXFxcXCIsIHUyKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCB0ID09IG51bGwgfHwgIWl0LmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoIWl0LmluY2x1ZGVzKFxcXFxcXFwi572R55uYXFxcXFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFxcXFxcIuS6keebmFxcXFxcXFwiKSAmJlxcXFxuICAgICAgICAgICAgICAgICAgICAhaXQuaW5jbHVkZXMoXFxcXFxcXCJhbGl5dW5kcml2ZVxcXFxcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcXFxcXCJ5dW5wYW5cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmICh1LnN0YXJ0c1dpdGgoXFxcXFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgbGV0IGRvbSA9IGdldEhvbWUodSkucmVwbGFjZShcXFxcXFxcImh0dHA6Ly9cXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZShcXFxcXFxcImh0dHBzOi8vXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBfbGlua3MgPSB0Lm1hdGNoKC9odHRwczpcXFxcXFxcXC9cXFxcXFxcXC8od3d3XFxcXFxcXFwuYWxpeXVuZHJpdmVcXFxcXFxcXC5jb21cXFxcXFxcXC9zfGFseXdwXFxcXFxcXFwubmV0KVxcXFxcXFxcL1xcXFxcXFxcdyovZykgfHwgW107XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgYyA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXFxcbiAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgIC8vYyA9ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChfbGlua3NbMF0pICsgJz8/P2Z5cGFnZSc7XFxcXG4gICAgICAgICAgICAgICAgLy9jPXdyYXB1KF9saW5rc1swXSlcXFxcbiAgICAgICAgICAgICAgICAvL31cXFxcbiAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICBjID0gd3JhcHUoX2xpbmtzWzFdKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMF0pO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdCxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7lv4XlupQ8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyBkb20sXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogYyAhPSBudWxsID8gYyA6ICQodSkubGF6eVJ1bGUoKHdyYXB1LCBtb2RlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9saW5rcyA9IGh0bWwubWF0Y2goL2h0dHBzOlxcXFxcXFxcL1xcXFxcXFxcLyh3d3dcXFxcXFxcXC5hbGl5dW5kcml2ZVxcXFxcXFxcLmNvbVxcXFxcXFxcL3N8YWx5d3BcXFxcXFxcXC5uZXQpXFxcXFxcXFwvXFxcXFxcXFx3Ki9nKSB8fCBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KF9saW5rc1swXSkgKyAnPz8/ZnlwYWdlJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbGlua3MubGVuZ3RoID4gMSAmJiBfbGlua3NbMV0ucmVwbGFjZShfbGlua3NbMF0sIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UoL1thLXpBLVowLTldKy9nLCBcXFxcXFxcIlxcXFxcXFwiKSA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1sxXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBydWxlID0gTVlfUlVMRS50aXRsZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UveXNmeD9ydWxlPVxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiJnI9XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCImbW9kZT1cXFxcXFxcIiArIG1vZGUgKyBcXFxcXFxcIiMjXFxcXFxcXCIgKyBpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUsIGNvbmZpZy5tb2RlKVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG5dO1xcXFxuXFxcXG5cXFxcbi8v5bm25Y+R6KeE5YiZ5pWwXFxcXG5sZXQgY2NvZiA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2Njb2YnKVxcXFxucnVsZXMucHVzaChjY29mKVxcXFxuLy/lubblj5Hop4TliJnmlbBcXFxcbmxldCBzaXplID0gMTA7XFxcXG5cXFxcbiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhZ2UsIHJ1bGUpIHtcXFxcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcXFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXFxcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxcXG4gICAgICAgIHJldHVybiBbXTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGxlbiA9IHNpemU7XFxcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0olxcXCIsXFxcInBhdGhcXFwiOlxcXCJzb3VcXFwiLFxcXCJydWxlXFxcIjpcXFwibGV0IHIgPSBnZXRJdGVtKFxcXFxcXFwiclxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCBzID0gZ2V0TXlWYXIoJ3MnLCAnJyk7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgbGV0IGRtb2RlID0gZ2V0SXRlbShcXFxcXFxcImRtb2RlXFxcXFxcXCIsIFxcXFxcXFwi5pys5Zyw6L2s56CBXFxcXFxcXCIpO1xcXFxuICAgIGluaXRDb25maWcoe1xcXFxuICAgICAgICBtb2RlOiBkbW9kZVxcXFxuICAgIH0pO1xcXFxuICAgIGlmIChkbW9kZSA9PSBcXFxcXFxcIuacrOWcsOi9rOeggVxcXFxcXFwiKSB7XFxcXG4gICAgICAgIGxldCBpY3kgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvblxcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgYSA9IGZldGNoKGljeSk7XFxcXG4gICAgICAgIGlmICghYSB8fCBhID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFxcXFxcIiMxM0I2MUJcXFxcXFxcIj7ilpAgPC9mb250PjxiPua4qemmqOaPkOekujxiPicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pyq5qOA5rWL5Yiw55m75b2V5L+h5oGv77yM54K55oiR6Lez6L2s55m75b2V6LSm5Y+36aG16Z2i77yM55m75b2V6Zi/6YeM5LqR55uY6LSm5Y+35ZCO5pa55Y+v5L2/55So5pys5Zyw6L2s56CB5qih5byPXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFxcXFxcIueZu+W9lemYv+mHjOS6keebmFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgYWRkTGlzdGVuZXIoXFxcXFxcXCJvbkNsb3NlXFxcXFxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICBjbGVhck15VmFyKFxcXFxcXFwic1xcXFxcXFwiKTtcXFxcbiAgICB9KSk7XFxcXG4gICAgbGV0IHRpcCA9IFxcXFxcXFwi5LqR55uY5pCc57Si5ZCbIOajgOe0ouWKn+iDveeUseWvueW6lOe9keermeaPkOS+m++8jOacrOinhOWImeS4jeaPkOS+m+S7u+S9leWGheWuuVxcXFxcXFwiO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB0aXAsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCh0aXApID0+IHtcXFxcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuS9v+eUqOivtOaYjlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRpcCArIFxcXFxcXFwi77yM5pys6KeE5YiZ5Luj56CB5a6M5YWo5byA5rqQ77yM5LuF5L6b5a2m5Lmg5ZKM56CU56m277yb5aaC5p6c5oOz6KaB5pKt5pS+5Y6f5aeL5paH5Lu277yM5Y+v5Lul5bCG5qih5byP5YiH5o2i5YiwSm9l54mI6Zi/6YeM5LqR55uY77yM5oiW6ICF5YiH5Yiw5LqR55uY5rGH5b2x77yb54K55Ye75LiL5pa556Gu5a6a5oyJ6ZKu6Lez6L2s5LqR55uY5rGH5b2x5bCP56iL5bqPXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29uZmlybTogXFxcXFxcXCInaGlrZXI6Ly9ob21lQOS6keebmOaxh+W9sSdcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSwgdGlwKSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl8yX3JvdW5kXFxcXFxcXCIsXFxcXG4gICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbjJcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5qih5byP77yaXFxcXFxcXCIgKyBkbW9kZSxcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcInNlbGVjdDovL1xcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6YCJ5oup5qih5byPXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBvcHRpb25zOiBbXFxcXFxcXCLmnKzlnLDovaznoIFcXFxcXFxcIiwgXFxcXFxcXCJKb2XniYjpmL/ph4zkupHnm5hcXFxcXFxcIiwgXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIiwgXFxcXFxcXCLlrpjmlrlBUFBcXFxcXFxcIiwgXFxcXFxcXCLnmbvlvZXotKblj7dcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICBjb2w6IDEsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKFxcXFxcXFwi55m75b2V6LSm5Y+3XFxcXFxcXCIgPT0gaW5wdXQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luP3BhZ2VUaXRsZT3nmbvlvZXpmL/ph4zkupHnm5hcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiZG1vZGVcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXFxcXFwi5a6Y5pa5QVBQXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzor7fnoa7kv53miYvmnLrmnInlronoo4XpmL/ph4zkupHnm5jlrpjmlrlBUFBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXFxcXFwiSm9l54mI6Zi/6YeM5LqR55uYXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHIxID0gZmV0Y2goXFxcXFxcXCJoaWtlcjovL2hvbWVA6Zi/6YeM5LqR55uYXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXIxIHx8IHIxLmxlbmd0aCA8PSA1KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcnUgPSAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCLmtbfpmJTop4bnlYzpppbpobXpopHpgZPop4TliJnjgJDpmL/ph4zkupHnm5jjgJHvv6Vob21lX3J1bGVfdXJs77+laHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9NTY1NlxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBNWV9SVUxFLnRpdGxlICsgJ+aPkOekuicsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ+acrOinhOWImeS+nei1lumYv+mHjOS6keebmOinhOWIme+8jOeCueWHu+S4i+mdoueahOehruWumuaMiemSruWvvOWFpe+8jOazqOaEj+WvvOWFpeWQjuS4gOWumuimgeeZu+W9leS6keebmOi0puWPt++8jOWQpuWImeS4jeiDveeUqCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybTogcnUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBydVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ivt+WvvOWFpee8uuWkseeahOinhOWImVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5Yqf77yM6K+356Gu5L+d5pyJ55m75b2V6LSm5Y+3XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzms6jmhI/opoHlnKjkupHnm5jmsYflvbHorr7nva7ph4zpnaLnmbvlvZXotKblj7dcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uXzJfcm91bmRcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJoaWtlcjovL2ltYWdlcy9pY29uMVxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBsZXQgaWQgPSBEYXRlLm5vdygpICsgTVlfUlVMRS50aXRsZTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXFxcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXlhbPplK7or40nLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCdzJywgaW5wdXQpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFxcXFxcInNzXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzJywgJycpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKSgpO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiID09IHIgPyBcXFxcXFxcIuKAnOKAnOWFqOmDqOKAneKAnVxcXFxcXFwiIDogXFxcXFxcXCLlhajpg6hcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXFxcXFwiclxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIlxcXFxuICAgIH0pO1xcXFxuICAgIGZvciAobGV0IGl0IG9mIHJ1bGVzKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogaXQgPT0gciA/IFxcXFxcXFwi4oCc4oCcXFxcXFxcXCIgKyBpdCArIFxcXFxcXFwi4oCd4oCdXFxcXFxcXCIgOiBpdCxcXFxcbiAgICAgICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKChyKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInJcXFxcXFxcIiwgcik7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0sIGl0KSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcXFxcXCJzZWFyY2hIaXN0b3J5XFxcXFxcXCIsIFtdKTtcXFxcbiAgICBpZiAoIXMpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcXFxcXCIjMTNCNjFCXFxcXFxcXCI+4paQIDwvZm9udD48Yj7mkJzntKLorrDlvZU8Yj4nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicmljaF90ZXh0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBpZCArIFxcXFxcXFwiOnNlYXJjaEhpc3RvcnlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAvL2xldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFxcXFxcInNlYXJjaEhpc3RvcnlcXFxcXFxcIiwgW10pO1xcXFxuICAgICAgICBsZXQgaSA9IDA7XFxcXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBoaXN0b3J5KSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBrZXksXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKGlkLCBrZXkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gZmluZEl0ZW0oaWQgKyBcXFxcXFxcInNzXFxcXFxcXCIpLmV4dHJhO1xcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYS5kZWZhdWx0VmFsdWUgPSBrZXk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSwgaWQsIGtleSksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFxcXFxcIjprZXk6XFxcXFxcXCIgKyBrZXksXFxcXG4gICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFxcXFxcIjprZXlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yig6Zmk5YWz6ZSu6K+NOlxcXFxcXFwiICsga2V5LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGlkLCBrZXksIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcXFxcXCJzZWFyY2hIaXN0b3J5XFxcXFxcXCIsIFtdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnNwbGljZShpLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXFxcXFwic2VhcmNoSGlzdG9yeVxcXFxcXFwiLCBoaXN0b3J5KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKGlkICsgXFxcXFxcXCI6a2V5OlxcXFxcXFwiICsga2V5KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RvYXN0KCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpZCwga2V5LCBpKVxcXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmuIXnqbrorrDlvZVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwi56Gu5a6a5riF6Zmk5YWo6YOo5pCc57Si6K6w5b2V77yfXFxcXFxcXCIpLmNvbmZpcm0oKGlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFxcXFxcInNlYXJjaEhpc3RvcnlcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZCArIFxcXFxcXFwiOmtleVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgXFxcXFxcXCI6c2VhcmNoSGlzdG9yeVxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBcXFxcXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXFxcXFwiLmZvbnRjb2xvcihcXFxcXFxcIkdyYXlcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFxcXFxcIjprZXlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBpZClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGlkKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGkrKztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoaGlzdG9yeS5sZW5ndGggPT09IDApIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBcXFxcXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXFxcXFwiLmZvbnRjb2xvcihcXFxcXFxcIkdyYXlcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBpZCArIFxcXFxcXFwiOmtleVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lJyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiAneXBqLWwnXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn1cXFxcbmlmIChzICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICBsZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcXFxcXCJzZWFyY2hIaXN0b3J5XFxcXFxcXCIsIFtdKTtcXFxcbiAgICBsZXQgaWkgPSBoaXN0b3J5LmluZGV4T2Yocyk7XFxcXG4gICAgaWYgKGlpID4gLTEpIHtcXFxcbiAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoaGlzdG9yeS5sZW5ndGggPiAyMCkge1xcXFxuICAgICAgICBoaXN0b3J5LnNwbGljZShoaXN0b3J5Lmxlbmd0aCAtIDEsIDEpO1xcXFxuICAgIH1cXFxcbiAgICBoaXN0b3J5LnVuc2hpZnQocyk7XFxcXG4gICAgc3RvcmFnZTAuc2V0SXRlbShcXFxcXFxcInNlYXJjaEhpc3RvcnlcXFxcXFxcIiwgaGlzdG9yeSk7XFxcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcXFxuICAgIGxldCBkYXRhID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFxcXFxcIikocCwgciAhPSBcXFxcXFxcIlxcXFxcXFwiID8gciA6IG51bGwpO1xcXFxuXFxcXG4gICAgbGV0IHBhZ2VpZCA9IFxcXFxcXFwieXBqLXBhZ2VcXFxcXFxcIiArIHA7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBwICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXFxcXFwiICsgZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgIGxvZyhkYXRhLmxlbmd0aCk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXFxcXFwiXFxcXFxcXCIgPT0gciA/IDEgOiBwO1xcXFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBwYXJhbTogaXQsXFxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXFxcXFwicnVsZUBcXFxcXFxcIiArIGl0Lm5hbWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFxcXFxcImxpc3RlbmVyOiBcXFxcXFxcIiArIChyZXN1bHQgfHwgW10pLmxlbmd0aClcXFxcbiAgICAgICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiKSA/IGl0LnRpdGxlIDogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIGl0LnRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIjxlbT58PC9lbT5cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcIiArIHMgKyBcXFxcXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXFxcXFwiX19hcHBcXFxcXFxcIiArIE1ZX1BBR0UgKyBcXFxcXFxcIkBcXFxcXFxcIiArIHBhcmFtLmosXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcXFxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcXFxcXCIvXFxcXFxcXCIgKyBwYXJhbS5hbGwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBwYXJhbToge1xcXFxuICAgICAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICAgICAgaTogMCxcXFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLpobXpnaJcXFwiLFxcXCJwYXRoXFxcIjpcXFwic291cFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5pZiAoTVlfUEFSQU1TLmtleSkge1xcXFxuICAgIHB1dE15VmFyKFxcXFxcXFwic1xcXFxcXFwiLCBNWV9QQVJBTVMua2V5KTtcXFxcbn1cXFxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9zb3VcXFxcXFxcIikpLnJ1bGUpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIkNDT0ZcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY2NvZlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgd3JhcHUgPSAodSkgPT4ge1xcXFxuICAgIGlmIChjb25maWcubW9kZSA9PSBcXFxcXFxcIuacrOWcsOi9rOeggVxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJ1xcXFxuICAgIH1cXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCJKb2XniYjpmL/ph4zkupHnm5hcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zaGFyZT9wYWdlPWZ5cGFnZSZydWxlPemYv+mHjOS6keebmCZzaGFyZV91cmw9JyArIHU7XFxcXG4gICAgfVxcXFxuICAgIGlmIChjb25maWcubW9kZSA9PSBcXFxcXFxcIuS6keebmOaxh+W9sVxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoL2FsaXl1bmRyaXZlLy50ZXN0KHUpKSB7XFxcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxcXG4gICAgICAgIGNvbnN0IFtfbGluaywgX2ZvbGRlcklEXSA9IGxpbmsuc3BsaXQoJy9mb2xkZXIvJyk7XFxcXG4gICAgICAgIGxldCBzaGFyZV9wd2QgPSAoX3NoYXJlX3B3ZCB8fCAnJykuc3BsaXQoJyNuYW1lPScpWzBdIHx8ICcnO1xcXFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXFxcbiAgICAgICAgcmV0dXJuICdzbWFydGRyaXZlOi8vc2hhcmUvYnJvd3NlP3NoYXJlSWQ9JyArIHNoYXJlSWQgKyAnJnNoYXJlUHdkPScgKyBzaGFyZV9wd2Q7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBcXFxcXFxcIndlYjovL1xcXFxcXFwiICsgdTtcXFxcbn07XFxcXG4kLmV4cG9ydHMgPSB7XFxcXG4gICAgbmFtZTogJ0NDT0YnLFxcXFxuICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICBsZXQgZCA9IFtdXFxcXG4gICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgIGJ5dGVzVG9TaXplLFxcXFxuICAgICAgICAgICAgY29sb3JcXFxcbiAgICAgICAgfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3Rvb2xzJyk7XFxcXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vcGFuLmNjb2YuY2MvYXBpL3NlYXJjaCcsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImNvbnRlbnQtdHlwZVxcXFxcXFwiOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly9wYW4uY2NvZi5jYy9zZWFyY2g/a2V5d29yZD0nICsgc1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInBhZ2VTaXplXFxcXFxcXCI6IDIwLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicGFnZU51bVxcXFxcXFwiOiBwYWdlLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwia2V5d29yZFxcXFxcXFwiOiBzLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZnJvbU1vYmlsZVxcXFxcXFwiOiB0cnVlXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpXFxcXG4gICAgICAgICAgICAuZGF0YS5yb3dzXFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcXFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQuZmlsZU5hbWVcXFxcbiAgICAgICAgICAgIGxldCBtdXJsID0gaXQudXJsXFxcXG4gICAgICAgICAgICBsZXQgdHlwZSA9IGl0LnR5cGUucmVwbGFjZSgvZm9sZGVyLywgJ+aWh+S7tuWkuScpLnJlcGxhY2UoL2ZpbGUvLCAn5paH5Lu2JylcXFxcbiAgICAgICAgICAgIGlmICh0aXRsZS5pbmNsdWRlcyhzKSkge1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPkNDT0Y8L2ZvbnQ+Jm5ic3A7JyArICfmlofku7bnsbvlnovvvJonICsgdHlwZSArICfvvIzmlofku7blpKflsI/vvJonICsgYnl0ZXNUb1NpemUoaXQuc2l6ZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUobXVybClcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkXFxcXG4gICAgfVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuW3peWFt1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ0b29sc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiBieXRlc1RvU2l6ZShzaXplKSB7XFxcXG4gICAgaWYgKHNpemUgPCAwLjEgKiAxMDI0KSB7XFxcXG4gICAgICAgIC8v5bCP5LqOMC4xS0LvvIzliJnovazljJbmiJBCXFxcXG4gICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMikgKyBcXFxcXFxcIkJcXFxcXFxcIjtcXFxcbiAgICB9IGVsc2UgaWYgKHNpemUgPCAwLjEgKiAxMDI0ICogMTAyNCkge1xcXFxuICAgICAgICAvLyDlsI/kuo4wLjFNQu+8jOWImei9rOWMluaIkEtCXFxcXG4gICAgICAgIHNpemUgPSAoc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMikgKyBcXFxcXFxcIktCXFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQgKiAxMDI0KSB7XFxcXG4gICAgICAgIC8vIOWwj+S6jjAuMUdC77yM5YiZ6L2s5YyW5oiQTUJcXFxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXFxcXFwiTUJcXFxcXFxcIjtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDlhbbku5bovazljJbmiJBHQlxcXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXFxcXFwiR0JcXFxcXFxcIjtcXFxcbiAgICB9XFxcXG4gICAgLy8g6L2s5oiQ5a2X56ym5LiyXFxcXG4gICAgbGV0IHNpemVTdHIgPSBzaXplICsgXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55aSE55qE57Si5byVXFxcXG4gICAgICAgIGluZGV4ID0gc2l6ZVN0ci5pbmRleE9mKFxcXFxcXFwiLlxcXFxcXFwiKSxcXFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55ZCO5Lik5L2N55qE5YC8XFxcXG4gICAgICAgIGRvdSA9IHNpemVTdHIuc3Vic3RyKGluZGV4ICsgMSwgMik7XFxcXG4gICAgLy8g5Yik5pat5ZCO5Lik5L2N5piv5ZCm5Li6MDDvvIzlpoLmnpzmmK/liJnliKDpmaQwMFxcXFxuICAgIGlmIChkb3UgPT09IFxcXFxcXFwiMDBcXFxcXFxcIikgcmV0dXJuIHNpemVTdHIuc3Vic3RyaW5nKDAsIGluZGV4KSArIHNpemVTdHIuc3Vic3RyKGluZGV4ICsgMywgMik7XFxcXG4gICAgcmV0dXJuIHNpemU7XFxcXG59XFxcXG4kLmV4cG9ydHMuYnl0ZXNUb1NpemUgPSBieXRlc1RvU2l6ZTtcXFxcbiQuZXhwb3J0cy5jb2xvciA9IGZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxcXG4gICAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPT09IDApIHtcXFxcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcXFxcXCIgKyBjb2xvciArIFxcXFxcXFwiJz5cXFxcXFxcIiArIHRleHQgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIjtcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzLnNsZWVwID0gZnVuY3Rpb24odGltZW91dCkge1xcXFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAodGltZW91dCk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIGh0bWxUYWcodGFnLCB0ZXh0KSB7XFxcXG4gICAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPT09IDApIHtcXFxcbiAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIFxcXFxcXFwiPFxcXFxcXFwiICsgdGFnICsgXFxcXFxcXCI+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L1xcXFxcXFwiICsgdGFnICsgXFxcXFxcXCI+XFxcXFxcXCI7XFxcXG5cXFxcbn1cXFxcbiQuZXhwb3J0cy5odG1sVGFnID0gaHRtbFRhZztcXFxcbiQuZXhwb3J0cy5zbWFsbCA9IGZ1bmN0aW9uKHRleHQpIHtcXFxcbiAgICByZXR1cm4gaHRtbFRhZyhcXFxcXFxcInNtYWxsXFxcXFxcXCIsIHRleHQpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBnZXRUaW1lKGZpbGUsaXNTdGFuZGFyZCkge1xcXFxuICAgIGlzU3RhbmRhcmQgPSBpc1N0YW5kYXJkfHxmYWxzZTtcXFxcbiAgICBsZXQgdFRpbWUgPSBmaWxlLnVwZGF0ZWRfYXQgfHwgZmlsZS50aW1lX3N0ciB8fCBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIHRUaW1lID0gdFRpbWUuc3BsaXQoXFxcXFxcXCJUXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkYXRlID0gdFRpbWVbMF07XFxcXG4gICAgaWYoaXNTdGFuZGFyZCl7XFxcXG4gICAgICAgIGRhdGUgPSBkYXRlLnJlcGxhY2UoLy0vZyxcXFxcXFxcIi9cXFxcXFxcIik7XFxcXG4gICAgfVxcXFxuICAgIHRUaW1lID0gdFRpbWVbMV0uc3BsaXQoL1p8XFxcXFxcXFwuLyk7XFxcXG4gICAgZGF0ZSArPSBcXFxcXFxcIiBcXFxcXFxcIiArIHRUaW1lWzBdO1xcXFxuICAgIHJldHVybiBkYXRlO1xcXFxufVxcXFxuZnVuY3Rpb24gZ2V0VGltZUludCh0aW1lU3RyKXtcXFxcbiAgICByZXR1cm4gKG5ldyBEYXRlKHRpbWVTdHIpKS5nZXRUaW1lKClcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRUaW1lID0gZ2V0VGltZTtcXFxcblxcXFxubGV0IGNobk51bUNoYXIgPSB7XFxcXG4gICAg6Zu2OiAwLFxcXFxuICAgIOS4gDogMSxcXFxcbiAgICDkuow6IDIsXFxcXG4gICAg5LiJOiAzLFxcXFxuICAgIOWbmzogNCxcXFxcbiAgICDkupQ6IDUsXFxcXG4gICAg5YWtOiA2LFxcXFxuICAgIOS4gzogNyxcXFxcbiAgICDlhas6IDgsXFxcXG4gICAg5LmdOiA5XFxcXG59O1xcXFxuXFxcXG5sZXQgY2huTmFtZVZhbHVlID0ge1xcXFxuICAgIOWNgToge1xcXFxuICAgICAgICB2YWx1ZTogMTAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxcXG4gICAgfSxcXFxcbiAgICDnmb46IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMCxcXFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXFxcbiAgICB9LFxcXFxuICAgIOWNgzoge1xcXFxuICAgICAgICB2YWx1ZTogMTAwMCxcXFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXFxcbiAgICB9LFxcXFxuICAgIOS4hzoge1xcXFxuICAgICAgICB2YWx1ZTogMTAwMDAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IHRydWVcXFxcbiAgICB9LFxcXFxuICAgIOS6vzoge1xcXFxuICAgICAgICB2YWx1ZTogMTAwMDAwMDAwLFxcXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBDaGluZXNlVG9OdW1iZXIoY2huU3RyKSB7XFxcXG4gICAgbGV0IHJ0biA9IDA7XFxcXG4gICAgbGV0IHNlY3Rpb24gPSAwO1xcXFxuICAgIGxldCBudW1iZXIgPSAwO1xcXFxuICAgIGxldCBzZWNVbml0ID0gZmFsc2U7XFxcXG4gICAgbGV0IHN0ciA9IGNoblN0ci5zcGxpdCgnJyk7XFxcXG5cXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBsZXQgbnVtID0gY2huTnVtQ2hhcltzdHJbaV1dO1xcXFxuICAgICAgICBpZiAodHlwZW9mIG51bSAhPT0gJ3VuZGVmaW5lZCcpIHtcXFxcbiAgICAgICAgICAgIG51bWJlciA9IG51bTtcXFxcbiAgICAgICAgICAgIGlmIChpID09PSBzdHIubGVuZ3RoIC0gMSkge1xcXFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gKz0gbnVtYmVyO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgbGV0IHVuaXQgPSBjaG5OYW1lVmFsdWVbc3RyW2ldXS52YWx1ZTtcXFxcbiAgICAgICAgICAgIHNlY1VuaXQgPSBjaG5OYW1lVmFsdWVbc3RyW2ldXS5zZWNVbml0O1xcXFxuICAgICAgICAgICAgaWYgKHNlY1VuaXQpIHtcXFxcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gKHNlY3Rpb24gKyBudW1iZXIpICogdW5pdDtcXFxcbiAgICAgICAgICAgICAgICBydG4gKz0gc2VjdGlvbjtcXFxcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gMDtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiArPSAobnVtYmVyICogdW5pdCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBudW1iZXIgPSAwO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBydG4gKyBzZWN0aW9uO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBuYW1lQ29tcGFyZShhLCBiKSB7XFxcXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpXFxcXG4gICAgICAgIHJldHVybiBhID09IG51bGwgPyBiID09IG51bGwgPyAwIDogLTEgOiAxO1xcXFxuXFxcXG4gICAgYSA9IGEucmVwbGFjZSgvKFvpm7bkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ3ljYHnmb7ljYPkuIfkur9dKS9nLCBmdW5jdGlvbihtYXRjaCwgcDEsIHAyLCBwMywgb2Zmc2V0LCBzdHJpbmcpIHtcXFxcbiAgICAgICAgLy8gcDEgaXMgbm9uZGlnaXRzLCBwMiBkaWdpdHMsIGFuZCBwMyBub24tYWxwaGFudW1lcmljc1xcXFxuICAgICAgICByZXR1cm4gQ2hpbmVzZVRvTnVtYmVyKHAxKTtcXFxcbiAgICB9KVxcXFxuICAgIGIgPSBiLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxcXG4gICAgICAgIC8vIHAxIGlzIG5vbmRpZ2l0cywgcDIgZGlnaXRzLCBhbmQgcDMgbm9uLWFscGhhbnVtZXJpY3NcXFxcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxcXG4gICAgfSlcXFxcblxcXFxuICAgIGxldCBOVU1CRVJTID0gamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4uY29tcGlsZShcXFxcXFxcIig/PD1cXFxcXFxcXFxcXFxcXFxcRCkoPz1cXFxcXFxcXFxcXFxcXFxcZCl8KD88PVxcXFxcXFxcXFxcXFxcXFxkKSg/PVxcXFxcXFxcXFxcXFxcXFxEKVxcXFxcXFwiKVxcXFxuICAgIGxldCBzcGxpdDEgPSBOVU1CRVJTLnNwbGl0KG5ldyBqYXZhLmxhbmcuU3RyaW5nKGEpKTtcXFxcbiAgICBsZXQgc3BsaXQyID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhiKSk7XFxcXG5cXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKHNwbGl0MS5sZW5ndGgsIHNwbGl0Mi5sZW5ndGgpOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IGMxID0gc3BsaXQxW2ldLmNoYXJDb2RlQXQoMCk7XFxcXG4gICAgICAgIGxldCBjMiA9IHNwbGl0MltpXS5jaGFyQ29kZUF0KDApO1xcXFxuICAgICAgICBsZXQgY21wID0gMDtcXFxcbiAgICAgICAgbGV0IHplcm9DaGFyQ29kZSA9ICcwJy5jaGFyQ29kZUF0KDApO1xcXFxuICAgICAgICBsZXQgbmluZUNoYXJDb2RlID0gJzknLmNoYXJDb2RlQXQoMCk7XFxcXG5cXFxcbiAgICAgICAgaWYgKGMxID49IHplcm9DaGFyQ29kZSAmJiBjMSA8PSBuaW5lQ2hhckNvZGUgJiYgYzIgPj0gemVyb0NoYXJDb2RlICYmIGMyIDw9IG5pbmVDaGFyQ29kZSkge1xcXFxuICAgICAgICAgICAgY21wID0gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHNwbGl0MVtpXSkuY29tcGFyZVRvKG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDJbaV0pKTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGlmIChjbXAgPT09IDApIHtcXFxcbiAgICAgICAgICAgIGxldCByZWdleCA9IC9bYS16QS1aMC05XS9cXFxcbiAgICAgICAgICAgIGxldCBzMSA9IFN0cmluZyhzcGxpdDFbaV0pXFxcXG4gICAgICAgICAgICBsZXQgczIgPSBTdHJpbmcoc3BsaXQyW2ldKVxcXFxuICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3QoczEpIHx8IHJlZ2V4LnRlc3QoczIpKSB7XFxcXG4gICAgICAgICAgICAgICAgY21wID0gbmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQxW2ldKS5jb21wYXJlVG8obmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQyW2ldKSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ2VuJylcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ3poJylcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGlmIChjbXAgIT09IDApIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBjbXA7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgbGV0IGxlbmd0aENtcCA9IHNwbGl0MS5sZW5ndGggLSBzcGxpdDIubGVuZ3RoO1xcXFxuICAgIC8vIGlmIChsZW5ndGhDbXAgIT09IDApIGxlbmd0aENtcCA9IGxlbmd0aENtcCA+IDAgPyAtMSA6IDE7XFxcXG4gICAgcmV0dXJuIGxlbmd0aENtcDtcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzLnNvcnRzID0gZnVuY3Rpb24obGlzdCwgc29ydCkge1xcXFxuICAgIGlmIChzb3J0ID09PSBcXFxcXFxcIuexu+Wei1xcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuexu+Wei+aOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBhLnR5cGUgLSBiLnR5cGVcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFxcXFxcIuWQjeensFxcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuWQjeensOaOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgLy8gbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgLy8gICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUsIFxcXFxcXFwiemhcXFxcXFxcIilcXFxcbiAgICAgICAgLy8gfSk7XFxcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gbmFtZUNvbXBhcmUoYS5uYW1lfHxhLnRpdGxlLCBiLm5hbWV8fGIudGl0bGUpO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9IGVsc2UgaWYgKHNvcnQgPT09IFxcXFxcXFwi5aSn5bCPXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgLy8gbG9nKFxcXFxcXFwi5aSn5bCP5o6S5bqPXFxcXFxcXCIpO1xcXFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIChhLnNpemUgfHwgTnVtYmVyKGEuc2l6ZV9zdHIpIHx8IDApIC0gKGIuc2l6ZSB8fCBOdW1iZXIoYi5zaXplX3N0cikgfHwgMCk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1lbHNlIGlmIChzb3J0ID09PSBcXFxcXFxcIuaXtumXtFxcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuaXtumXtOaOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBnZXRUaW1lSW50KGdldFRpbWUoYSx0cnVlKSkgLSBnZXRUaW1lSW50KGdldFRpbWUoYix0cnVlKSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBsaXN0XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIHNpbWlsYXIocywgdCwgZikgey8v5Yik5pat5Lik5Liq5a2X56ym5Liy5LmL6Ze055qE55u45Ly85bqmXFxcXG4gICAgaWYgKCFzIHx8ICF0KSB7XFxcXG4gICAgICAgIHJldHVybiAwXFxcXG4gICAgfVxcXFxuICAgIGlmKHMgPT09IHQpe1xcXFxuICAgICAgICByZXR1cm4gMTAwO1xcXFxuICAgIH1cXFxcbiAgICB2YXIgbCA9IHMubGVuZ3RoID4gdC5sZW5ndGggPyBzLmxlbmd0aCA6IHQubGVuZ3RoXFxcXG4gICAgdmFyIG4gPSBzLmxlbmd0aFxcXFxuICAgIHZhciBtID0gdC5sZW5ndGhcXFxcbiAgICB2YXIgZCA9IFtdXFxcXG4gICAgZiA9IGYgfHwgMlxcXFxuICAgIHZhciBtaW4gPSBmdW5jdGlvbiAoYSwgYiwgYykge1xcXFxuICAgICAgICByZXR1cm4gYSA8IGIgPyAoYSA8IGMgPyBhIDogYykgOiAoYiA8IGMgPyBiIDogYylcXFxcbiAgICB9XFxcXG4gICAgdmFyIGksIGosIHNpLCB0aiwgY29zdFxcXFxuICAgIGlmIChuID09PSAwKSByZXR1cm4gbVxcXFxuICAgIGlmIChtID09PSAwKSByZXR1cm4gblxcXFxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7XFxcXG4gICAgICAgIGRbaV0gPSBbXVxcXFxuICAgICAgICBkW2ldWzBdID0gaVxcXFxuICAgIH1cXFxcbiAgICBmb3IgKGogPSAwOyBqIDw9IG07IGorKykge1xcXFxuICAgICAgICBkWzBdW2pdID0galxcXFxuICAgIH1cXFxcbiAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykge1xcXFxuICAgICAgICBzaSA9IHMuY2hhckF0KGkgLSAxKVxcXFxuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IG07IGorKykge1xcXFxuICAgICAgICAgICAgdGogPSB0LmNoYXJBdChqIC0gMSlcXFxcbiAgICAgICAgICAgIGlmIChzaSA9PT0gdGopIHtcXFxcbiAgICAgICAgICAgICAgICBjb3N0ID0gMFxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBjb3N0ID0gMVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZFtpXVtqXSA9IG1pbihkW2kgLSAxXVtqXSArIDEsIGRbaV1baiAtIDFdICsgMSwgZFtpIC0gMV1baiAtIDFdICsgY29zdClcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBsZXQgcmVzID0gKDEgLSBkW25dW21dIC8gbCkgKjEwMFxcXFxuICAgIHJldHVybiByZXMudG9GaXhlZChmKVxcXFxufVxcXFxuXFxcXG4kLmV4cG9ydHMuc2ltaWxhciA9IHNpbWlsYXI7XFxcXG4kLmV4cG9ydHMucmVtb3ZlRXh0ID0gZnVuY3Rpb24gKGZpbGUpe1xcXFxuICAgIHJldHVybiBmaWxlLnNwbGl0KCcuJykuc2xpY2UoMCwtMSkuam9pbignLicpXFxcXG59O1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcInVcXFwiLFxcXCJwYXRoXFxcIjpcXFwidVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSBmdW5jdGlvbihydWxlLCBvcmlnaW4sIG1vZGUpIHtcXFxcbiAgICByZXR1cm4gJC50b1N0cmluZygocnVsZSwgb3JpZ2luLCBtb2RlKSA9PiB7XFxcXG4gICAgICAgIGxldCBob3N0ID0gb3JpZ2luLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcImh0dHA6Ly98aHR0cHM6Ly9cXFxcXFxcIiksIFxcXFxcXFwiXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiL1xcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgbGV0IGhvc3RzID0gaG9zdC5zcGxpdChcXFxcXFxcIi5cXFxcXFxcIik7XFxcXG4gICAgICAgIGlmIChob3N0cy5sZW5ndGggPiAyKSB7XFxcXG4gICAgICAgICAgICBob3N0ID0gaG9zdHNbaG9zdHMubGVuZ3RoIC0gMl0gKyBcXFxcXFxcIi5cXFxcXFxcIiArIGhvc3RzW2hvc3RzLmxlbmd0aCAtIDFdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXFxcXFwibWFnbmV0XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmuKnppqjmj5DnpLpcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcXFxcXFxcIuajgOa1i+WIsOaWsOeahOejgemTvuWcsOWdgO+8jOeCueWHu+ehruWumuaMiemSruWNs+WPr+aSreaUvu+8jOeCueWHu+WPlua2iOaMiemSruWPr+S7peWkjeWItumTvuaOpVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFnO1xcXFxuICAgICAgICAgICAgICAgIH0sIGlucHV0KSxcXFxcbiAgICAgICAgICAgICAgICBjYW5jZWw6ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJjb3B5Oi8vXFxcXFxcXCIgKyBtYWdcXFxcbiAgICAgICAgICAgICAgICB9LCBpbnB1dClcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXFxcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5pbmNsdWRlcyhcXFxcXFxcImFsaXl1bmRyaXZlLmNvbVxcXFxcXFwiKSAmJiBtb2RlICE9IFxcXFxcXFwi5a6Y5pa5QVBQXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQuaW5jbHVkZXMoJ2NoZWNrdXJsP3VybD0nKSAmJiBpbnB1dC5pbmNsdWRlcygnJnVybHJlZmVyJykpIHtcXFxcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGRlY29kZVVSSUNvbXBvbmVudChpbnB1dC5zcGxpdCgnJnVybHJlZmVyJylbMF0uc3BsaXQoJ2NoZWNrdXJsP3VybD0nKVsxXSk7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coJ+i0tOWQpycraW5wdXQpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIumYv+mHjOS6keebmFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9XFxcXFxcXCIgKyB1cmwgKyAnPz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgIH0pKVxcXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxcXG4gICAgICAgIH0gZWxzZSBpZiAoL1xcXFxcXFxcLihtcDN8ZmxhY3xtNGEpJC8udGVzdChpbnB1dCkpIHtcXFxcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8odXJsKTtcXFxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcXFxuICAgICAgICB9IGVsc2UgaWYgKCFpbnB1dC5pbmNsdWRlcyhob3N0KSAmJiBpbnB1dC5zdGFydHNXaXRoKFxcXFxcXFwiaHR0cFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgbG9nKGlucHV0KTtcXFxcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUsIG1vZGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLor6bmg4VcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU9XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCImcj1cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIiZtb2RlPVxcXFxcXFwiICsgbW9kZSArIFxcXFxcXFwiIyNcXFxcXFxcIiArIHVybCxcXFxcbiAgICAgICAgICAgICAgICB9KSlcXFxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlLCBtb2RlKTtcXFxcbiAgICAgICAgfSBlbHNlIGlmICghaW5wdXQuc3RhcnRzV2l0aChcXFxcXFxcImh0dHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxcXG4gICAgICAgICAgICAvL+iDveWUpOi1t0FQUOeahOeZveWQjeWNlVxcXFxuICAgICAgICAgICAgbGV0IHdoaXRlID0gW1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicWtsaW5rXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJiZG5ldGRpc2tcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInh1bmxlaWFwcFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwic21hcnRkcml2ZVxcXFxcXFwiXFxcXG4gICAgICAgICAgICBdO1xcXFxuICAgICAgICAgICAgbGV0IGluV2hpdGUgPSB3aGl0ZS5maWx0ZXIoaXQgPT4gaW5wdXQuc3RhcnRzV2l0aChpdCkpLmxlbmd0aCA+IDA7XFxcXG4gICAgICAgICAgICBpZiAoIWluV2hpdGUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuVGhpcmRBcHAgJiYgZnlfYnJpZGdlX2FwcC5vcGVuVGhpcmRBcHAodXJsKTtcXFxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBydWxlLCBvcmlnaW4sIG1vZGUpO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcInlzZnhcXFwiLFxcXCJwYXRoXFxcIjpcXFwieXNmeFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5sZXQgcnVsZSA9IGdldFBhcmFtKFxcXFxcXFwiclxcXFxcXFwiKS5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzBdO1xcXFxubGV0IG1vZGUgPSAoZ2V0UGFyYW0oXFxcXFxcXCJtb2RlXFxcXFxcXCIpIHx8IFxcXFxcXFwiXFxcXFxcXCIpLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilbMF07XFxcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilbMV07XFxcXG5sZXQgaXRlID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VcXFxcXFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLCBtb2RlKTtcXFxcbmxldCBqcyA9ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXFxcbiAgICAgICAgICAgIGxldCByID0gJCQkKCkubGF6eVJ1bGUoKHQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUodCk7XFxcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnBhcnNlTGF6eVJ1bGUocik7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKGUudG9TdHJpbmcoKSk7XFxcXG4gICAgfVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIHVybDogdXJsLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCIxMDAlJiZmbG9hdFxcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6IGl0ZSxcXFxcbiAgICAgICAganM6IGpzLFxcXFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxcXG4gICAgICAgIGZsb2F0VmlkZW86IHRydWVcXFxcbiAgICB9XFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwibGluZVxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGlkOiB1cmxcXFxcbiAgICB9XFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpmL/ph4xsYXp5XFxcIixcXFwicGF0aFxcXCI6XFxcImFsaWxhenlcXFwiLFxcXCJydWxlXFxcIjpcXFwiZXZhbFByaXZhdGVKUyhcXFxcXFxcInJPKzM3dUcrYjJKYmw5MUpYZTFBTGFjQWNSSzF4aWtLTlNmeDNPSk52OU5SSEY1ZUZXUmc1dGQvMlZ3bVFjRlZtRUVjNFJKRlN0bEpxRW5GVm5BZ1dmbmhNbTRDSGQ5NWtBR3R6eGJUZUE4eGxXWGVoY1JtK2wvTjcraFlHdk82WjVCZERzWVZqSDZ1cG1vUUJjVmIweVhXcTFQRzZwSzVCR1hrY0hmZnUxdVdteGRHamt1aXBVdHhCTFNQK3RaTHJ4ejRpdDloRGZicld5U0NpTmY4TnlqODgwei80N1IyQWlvcGtjMXhtOWFLV0Q0UXVsdGlsdXZNZlRIei9ZeksyUlZXMmRJSWdyYzUxMko0cFNvNXJLWklxSXVFSnBsNnlQb0xpYjFYOXdEekxtQ3dkY3R2ak1DY1RZOG41QUJ1Ukdsa1ZKQUNnTUpxWWxTVmpYVmdacG13UElZUW5JNHZUSVFGTFNQeWp6bG9TNTNJc2syQXV3YzlxMkJJUjdNRnI0RDZSRlN5RzJwWGxFcFo5MVZtR25DS3hPTkpnM0wwbldHc0J2U0VzZ1RjeGg0OXVRQ2Y5NEROTWpIVEsrL05sRjJ5ajBzelN3RElqOTkvcEpkMFpSVUY1NXlZdHZ2eVFlZU5neGFJV3RZMXBxdURoTXRnVFBHdGVtMVVLbE01bks0SStGcWh2YkFjelhsWWhocTNEK0E5UkJzSmg1eUVrUFJ1eFJXWEEyTldYMmhpaGVlTVdDb2UvOVo2VW05c0xTTXFOZTBoN1lSSG1LZ0pFMFpzQWE3SEZmWFdzQ2NrSThGMTVXWVR2N2RudHc0UkJmTHFNQmZtMnZ5SHptdDc3bVNEam5MT3JWSnp4RCsvVXp2M0JheGI5QlZWRk8va1ZxVE1TTGtGZ3FLS013SGltU3FwR2lEWURZTDVyRUJtM21kSVY1elFWTldVUmVGOTBEUEtyYUhoWFh1V1BUUW9TMmRBQWJYc0VsbmtsaXFJZWwzT29MdnprN0k4NW9sWWFkc1Rpd016VXdCYUQvKzdNK2h1TCtQNEN5OEUwRitLb05raWdPNW1RZ3FMTU9jK3BNdFpES0c5dC9ET1hSQzl1RS9IU01HUk1WUFJidEg2V05BK2xITTNoTkRTUEhDQWxWKzl0Y0srYUNqUEI0Q3Jkbm9vY0J6blppdjY2c2dhUmxZNDBka0RaTWVlbGVoVWxualFaQU15WXdTdFJXaVg2NWxBK3lMS1JFZGNOMWk5R1d1MWoya2EvNWV2UlR1K0paY1VveXg5ZkRUVWxtTU9BQ0o2UXZIM09wYlkzVUJQc2NNOXEvWTNqalhSRmZtcmcvWXBQN1ZBVmJ6ak52Y096cFF5K3c3ODg3RGtKeXZ2MnduT0o3ek52RGdIdXZkY0V5eHpBS2dJQ2dndS8vdS91TGNPeExDM0xVRkVBTkFIZVBCNWY2cjJnRmprYXE0c3hZaTh0K1QvM1Zwcys3UDd3M0NVckV4eXNrMElRUWVyS2Q5STFjVnFVVHZyKzAwUWY0RW1IVmF2ZWJWN3NxRTFmT0NPWk1lZ0RkM1JBUkQ4U0pMMWt2TDFEUVFlZ0paQzg1QjRKVnFPV2N1ZWlwTmEwaE54N1FoS25uc1o5QzBUMVRJeDRSLy9sSzRVZ3IzdTVldW51cGptUStkWERjRDlwcGFmTStJc3V2Q0RaNFVkTFlrSUZLTEprNWdkOUZlalZpTkxkZGFnZ05tN0t3ekpCaGtXR2Fic3kxcnVNbXJuTDRZRWtmZUNzdUc5cEdUNWZMWjZ6WGhzRE9ZMGR3ays2ajlCN0I1YmJKWVdzUHhiODI1Z25FcFdVOWE4OFZoV2pNanZUdHRCRVg5VjBGVTcrNmlkYlNiWHIxKzFXU2lwZHdSNEl6aFU5STM1aFp6bzhqaUZNYnRUMnhwRFpOQXp3M3Z4MXl2TDZ5NFBQTGUzeE5sV3FBM21HSUJaSVd6bmNWU01RZC9raHVzZXlNc1phUWdNd0crdDJEd0trUUFTTG55bEt2dEdhN3RvcldkQXNGT3RnMUEyWS9tZGZPQjNkSnBJakx3amZlSHI5ckxuRXJEOCtPaE1QcjBvazl5dUpGTVMyUXFwQmMvakQ4MTNnajQzZkJUS3U0UlZIdHhpLy92cGRldkF5R0Q5WGxERVlWUTcvQisxU0VjbDN4anhOT2V0S2lXUkROLzcvUlpZMlVJSmlnNU12ZEtRN2MzdnRvaDJrVzA5Q0F5QStob2RjV05uajRXeHZpYldyblYzY3BnRTBiNlBLYXdDWHNWS1lhVWJqbFJhM2x4VXFpdDRPMmJEWEF5bVVlNDYrMEJVUHRBdkZaK0tqeVRGNzJmRkVnOGFCdkx5bll4aWNHcjdFVjFYcEpWK3JHR2RzaTUzbktNVmQ0V0RzZ1JxTTZjdytEOWtCSWhPQnpqc3l3S3p4d3JJaGo0WGIwcC9Jb0NrWVhBTDZTTUQrT29Bc1l4M2hhcTZqb0VhekpsaERPK21kRzgvRmVDWjEwSXJIVG5nc3h4RnovdW5UZUU5MjZWVXl5dkxTTlpXYy9zSW4vdldTQUhVOXAvVUYwV2tYVS9kN2o0ZXp6dU14Rkc1MnByMDRkQjJlTDEwRVUwa0hQS3lOdVZPWE5scVV0Y1Z2ZjJFQnVtaDFwdUNEYW1ZREljbG1Ld0kzV1BCZmlGWTFlTlN2RlNjRG5tcVdnanlCMDVCVW1iblErU1luMHNNVFVIVHdMbVVHZlNOdzVDZ1B0QTJLdzVtNW5IMEsvU1VWc3BqTUQ3TlljK0RXalVMMmIyc3E4UTUyVW96d05zT0FJdDdpTWNmWVVzaTl6V0RrOStrclNGV1h0cktpVDFRWEtFN1dMM0lKN1RpRzhwUnMvTDRlazVLaFNJVFkyZnZBYStrcW5Wb0txbTNScGhYYndOOUhOWUlOTWJnaHlVZGxvS0J6am1qRG95V3ltQnFTOEtlYjFsU0hwOEpjY09PczVadG1pVGtlQ1Q1T2wwcTJkVGJvUDRoY1lobVZXeEZGenpkNk9tNnNUcVlPQjRWR0YxRXRBRzdHRFJjUnVYV0VZUFNrM3FJdWR6dUZ2c0crZ2ZOejJ3Z1VrQ2FjbFFNaWZyb3FZZWp6R3JCYUx6SHNSanR6cFF5K3c3ODg3RGtKeXZ2MnduT0p4YWNhNTNYYjREcHA3cDB3K2s2QnNYa1NWZGpqS3lUamRTV3ZuQ2Q5QndXRVVkam9yQUk3QVpFTWR3N01yUWNJdC93TXltWEhTWlNoRjdPZWt4OW1uSWFhNkRRb1lWUGJ5T0gzV0s3WkNNMy9lSXdtYVY0d3NaUHI1Rm12TFJCU3E4eVZSaVRTV3llTFBGUGRuYkY4TnJjRGFkWTZ2ZGtmMU53OXo5Y2NuczdmdFlXZTRnQUloVVZCNmpwc1BJTDhlM3A4OWtCZGVkVmd0am5wT2FJcitrTU5IQ3FsaGs3R0FITzI3MmtEOHVRSE9KNlloMTdBcjRHQzJSZFhqQk05eHVMc1BLWG10NlhCTC85dTI5MmNJdzVWd3BaU1NFMFNPYVFmdjNQTTdQa1p1bkdkSGpHUjV3b2g1SHl6SlJhUU9tc04waTRudkhFM3dNZTdnU1JsSk9XYnRoYU9URU0rdmFMVGdwN1pGTFYzekpuaWJnVlBHRW9qeFo1N1dWNmQ1ZXVVeDgzY2UxdXpOZC8zamtqVGVnZTZWdnFTSWFyWWc4R0t6aG5jLzAwYU13SjB3T0Vpc0xYT1JYd1JBMVMvSEVQMFNyNnZHVExtTVBaNU85UnNLeTRPdktQMENnQkdscXRnZUJ1NDQ5bDJTVWNGZGowMmNiZjFYMHRQMUJQTGU2eGYySGZiejJxdEZocXc2V1RYTEZKSC9pa2lyVjhnVWhacmNLVkhhYlFJTHk0UjZqWUd0RXZJaDZXQjdGc1hsbXpKNWNkcXhlN1Q5NStEcUI1ZEIwWVJWWGZMRTNlN0o1dXkzeEVmWmQ4SHpnMTdIME51bldrT0RHcWI4K0dnaXloYzR1cnliMmJZZVVNUXpETXg5enlFblN3OG9GeEVFVHhPeGtGNTBwb1llR2s5T3UyQVVyNnJpWjZXQWJpVzJ5R0svKzk5dTl6ODcrM1lPdmN3UWdEUHFyangreCtOM0FSYVVlbVdoQW1pcjFGZGdtZkR3NitNalVJT2hmdGZHbFJGeU42aTZWT29Wb05jZFFSZ3RlN1pHbjI1SE9lMGJhdTNjL2t0NldRRTlzbDhGYWJDMHgyZzhjK2hYdDZOR0dqSmpFdkVBL0V5Sng4bkN0d0gzUERNVGxaT3lFMTdhS3BWNnFqVVl2U3FieFM4bWNxSERXbzIwbnpZQjMwQ05tTXRxMmxwQmtaRjUyWEViZHk5eFNBaWl5V0R1aEVhOEdITkQ4cTdvUERqUGEvMXpWK0VpTnpBamd4a0N3Rmo0aTFsSmNIbXJlWUxZREZNNkdSWFJCNFJoeWRwbS9RVDJWYkVzV2I5aCtsNzZMMjJndFk3ZDJDbElMM0NobDV3c3NyeTBqV1ZuUDdDSi83MWtnQjFQWVA3bU9NZHdWbHdQL0Eyem9aWUt5d0cybUhZNlNMZXByMVA1VitEME1GdUZMVm1kTmJ3SjZ3Yjd0WmhrTEVZNy9MSzh0STFsWnord2lmKzlaSUFkVDJaNThGRFJ4Vjd1WlpWVzY5VFY4QUFJdjdKSTZJWWZjUU1uSjZpL3Bqa1lpR2RvV2MvYVdnQVBldWNrUWtVK2hVazhRT0xYeE1nODNkNU5qQTJ0Vmh1OUpxYjhhKzNsMWN5ZzZ1VzA0bVpvRUJiSXBiY053eU1IamozMG1GdDdKd1dOWGpVcnhVbkE1NXFsb0k4Z2RPUWNzcnkwaldWblA3Q0ovNzFrZ0IxUFp2bHF4SmVUVlpKNUJ2QlB3OEtSUXB3Rml0SFNoK0VLSkdDTW9VdUZJMjFCcEJaWnJ1TW5jRW1LbldtVytPTkIzMVY3aFlpVWFXNUpuVXFZOWh6OENRb3ozeFRvVlhHeDJ5QzMwcWFlRlhLb2RXMTRLSFJSRjlJcHUrZ0dDb0xBa3BwUGNFWVlCS0FDc0FQN0EzWWdrVVJxdFVnRmhrMDJUUXNsZE8yVG9uSU1OZjlQS1Q3REdvby9KVHJybGp4b2VtSnhLTEhSZEs2SmlsZlA4b1NRV2tvTEp2N3RyQVpmeVpldmdkKzg1RS9tdUd6OGJjMEt4MTlNaHU2UFBuOVNxa0R2MXRndElsMFprYW00ZGIzMUhzUDcrelVVMVFXMC8weXZTS09MRC93b3U1M3haWXlaWjlJWHYrOGU3cWNmVnZJTHhuUFg3WFladnlhWldkMXBJVzk3eTNtV3V0QUhDUTg4cjhpWUlPMThYM2FsT2NVUDdkNmhDcFNaQlJIdXBPdTdOL3hsTmpFeXhCTUdhZkJLM2JUZUJva3VjQ204a01ra0V3dGJSbThvMzV3bndReDdSekZ6Q2syV0JXQjVtRHpkMzY2cmdNV2ttSlZUcWFacHJvY2ZnN05PYWl3TFNWUzlyM2hyQ3BQTkZYV3Y4ZXdhblBJemUzN0FTOTM0aThudEp0RE9aNGYwdW13VE11UUV4SjlockVWczFrY3ViUndONjA1NW1nTHdKQUlWNEE4ZnVzbkdGYktKY0s3bXZlZWcwZmRqRm16MTFtRU9YaHhIWStPK2hLZ1pkT1hBa2M4ZFN1aFVLOXlNNlVNdnNPL1BPdzVDY3I3OXNKemljZTZWdnFTSWFyWWc4R0t6aG5jLzAwYU13SjB3T0Vpc0xYT1JYd1JBMVMvQzBwMWE0blJJNDd5V3orMDFYVUxGOHZrei8zakJDQTFaTjVVWFMxNXhxNXhKUDA1STF6RTJ2TzN6NlB1V0pqYmdSMnRmTHArWTIyZ01ZSnllbjlaNzR0RWhhT2FBcWxLQjh5WERZSkdVY0kwOVJweTlldmdvb0hpeHNxc0xTWnNZbFVwOWwraml2ZEVYeEtvNUF2NnlGU3FwMnMzVVNOWjFtR1o0bHlYdWpMeXl2TFNOWldjL3NJbi92V1NBSFU5c29MUVFaWG1xWkR6T0I4UGJZWGRFVExLOHRJMWxaeit3aWYrOVpJQWRUMkNNMjRzQW5WQnlPSGtmSjRaN0hKbG9Cdk5rQTR5UnlzeUcvdlVOWXRNdS9MSzh0STFsWnord2lmKzlaSUFkVDJNN3ZaRXdUYnNzREVhUGUvK3YyS3FXOVlvTW51cGE0M0YveGx2RjJRU0VRNlhhYU5KcENSYjVQeWp2SkY3bzJzZUx4OTdldkhLeFpnaXBOUlJHeEs2OTdRUzhsVjZ0Z0gxYVY4NC94UUgyS2Y4TXZzSmlQWTBBNDFpeVdLMk1pSnl5dkxTTlpXYy9zSW4vdldTQUhVOWpid3NKaE5CTGpKRmUvVE5VWWxUVlhMSzh0STFsWnord2lmKzlaSUFkVDJzOUUvRWlSUUE0NFYwK05vRGRINmtsbkhYaVJUempjZFFaZmIyMmpDUGFuc1VodzdpWGN3SVRKU0pQWjZuRWJuYTkrRzFYRzdWdE9McmN4Yk1MaUtKczZVTXZzTy9QT3c1Q2NyNzlzSnppZGF1c0F6MnJFR3lSUVBucUlyV3ZJeUV4S2VESENlaWVMSE1DUkJCOFAxb2ZDL1dzQnV3M1krZ2JXNjk3UEpDM04yOGFFcXNzaVBKclhYSUduWXN5M01vQ1FKaXRuaHJrajE3aVQ3eXh5ZFdEOXJTMnNaMElaaHdOVy9lanJjWHpRVkhxVGtRL1ZRTm5ncG9YcnplcC8wYmV4SmNCVUE4d0cxSU1PZ3Q2SXBQYzJUQ1EzTFJ1RnFsdnBCZXdjOHFOckx1M0FoNjRWeUJkcHZCWEZMU2YvNklISWgxanJhM0FwWXo5N01nL0RIWFBtRDNOOFAyTndYWThxb3pCek5JcGhqMENOU0FSMFBGQmQwbDRMU3VYSFRJMmYva1IxWTZZVzVXRDlwbFdtRDFvUlBza01IYS9UKys2Q1FubjlsVTZEa1ZjSklNMWVxTjdrSStPN09RZytNRlRpRktDSUkvS2V1ZDgyblEyMlZneGVadUVXN1ErRzRJWmN6bk5yTWVteXp4Ulo2eDhhY2VzeXdtU3BGc2cxNWpJSGRDVWlWa0tadElrcVBCRWduaU9HTmd2cnN1Z0twNG1yM2NNL3IyMmF2SEY3c2xON2UvakFrMUZGVW83TmJFMHFvMU41TkpjVGRXMG9qL1Jwd25DeDVnemtFRC94S2ZMNEVDZFNxNTB6WGtXaVNVdkxOMEorSUpOdTFlUkNHQXV3QmJ0SWYyc1RBb3JuWi81SHpiYWlldEJrSnJyRVpZaENSL2hsbWEvMHlSOGU4MXJCc0J3UTA0UzVTLzY0QWVURmRFaUdBZTdHdkcrb043d3RBSEp4TUpHak1KdFRiVDNEallvUDlxa091S1ZFWDVFdDZmb2xzZmJqL1VVNXBVekZacnFDbkpLc29WblNCSlNkVHFsTTlCdVpEMlladjhxZFdibXNodkd0UVJlY2UvOC9adjhIc2pVRno0WkVHVFpZemdzS0FEVE12T1hjUVdwOTlCNWVEYjFJdk1YclVlR2lYUHV0UDF2RnQrb2RGTHpjM3VzOFVkTWF3dHFLeHV1cUJsWHBFaXpwcmNxV3lSK0JxMGx5aUVsWHJETVMrTHcwUGFmZE11SmdIRlNTOXJQZjZEeWtpSzR0WGhZUStTM29iY1ZaQnVvdFNWUHBRWnY0cmtjc3J5MGpXVm5QN0NKLzcxa2dCMVBhWnJHNkFsWWM4czduU2xoaHI4OWp3eXl2TFNOWldjL3NJbi92V1NBSFU5bzNnUlB0R0tucWl4bHJSZkVzUFA3TnZXVkllbndseHc0NnpsbTJhSk9SNE1uYnlBMVVFWEpBbDcvNGsrSHRhRWNzcnkwaldWblA3Q0ovNzFrZ0IxUFpGVFdLb0pUZzlkTUJtZzRHOXY1b2R4cTlmNkZJN0M0SDFGTGJiMkVnVmlRczhMT3UwMHBDZkZCOHNCcExVa3lRZUlSZ0lCTFVZMHpwTFpGNXhlUVdVY1BJN1crS0g3ODNYb1dyNG13akEyWEhYYi9NMytUWDZaQVNzOTF4blBWL0xLOHRJMWxaeit3aWYrOVpJQWRUMmFlVEZaSU43ZFIzTFRaUFRtbXBlZnNYT1pZRmtCbTJTZTFZTFFUYlFKejdPbERMN0R2enpzT1FuSysvYkNjNG5WYVo4QUFnSnk2ZFhPaE5MbFhyTTVFdjlaZGJFYk9SOFFtTFpRVlNJY0dOUm9WcUsvYkhwV2JIekZDbHpJemFiR2tOMno5REFMcWJuUTd1Rmd2M3M5anhYTkI3MTFMR0p2cmpJbGh1djMrbFZlcWcreHZMS1BzclVqVHZLcjZXQkN6d3M2N1RTa0o4VUh5d0drdFNUSkFrL0dUWDN4SkZUQTdFcUwwMWxyNy84SGE5QWdnd1VrSkRQbjBVdXY4U2NlTHg5N2V2SEt4WmdpcE5SUkd4SzZ6RWFPRVBjSUNMNThXTDNYRk5BTUwrbDE0YlY3VVoxalY4L2tyRkVqZnloNUgwbmxKaFEzWmpoU3Jvb2F0L3ZyVVNJbDBUMUtHSEdBV3kraytxQVB3Qy9QUzF4bGt4QWNKS0ViYnA4NjBWbzZxek0xMUVrNWFhY3VFcHI3SEhNZnJpT05JUDlueVc4dkdQZkZ2dVB1bjZuSmtVL3pHelArdVRtblMwSCsvVHhXTTJ1Z24vbnZpY1VKb0dWRXE4VWdZVTNJalFUTG8vOGo2WVh6RXZHSGZWU1p1ZEQ1SmlmU3d4TlFkUEF1WlFaOG5zZHBEcUhOcVhNSFFRc1M2M3R2U0RWUURSbXhqQTlXRUphWEtQNjl3TjI4YUVxc3NpUEpyWFhJR25Zc3kzTSt3NmVRYVBvNkpmaFFHS28rSnMxSzZGVUlBZWxOQUE0dXE3eXdZSUF1SEkzME44OHRqeUl0djlJby9USTVxR2svUGFnVVpvdDVpbDNlQTFBekFzcXNjc3J5MGpXVm5QN0NKLzcxa2dCMVBieWxwRnZsZFllQjdTaXhoMVUzOW52OVBtM3hjZkllMkFZTk5BRExPbklpa1p0T2tjRm53YkxBQkFzemZUTnNIWkQvL0hHWXcwQVZNeXd1SEtPeW1kdFhoOW5HVENLeGtCOHVmcFFMVzhWamZld0lyNStJUDNxenFmeWx0WGNXMnFoUkwzYmM5a0IxdmRrTHZBYlF1Q2x0VmdLRExTYVZhM3NpMkdRSWwxVlNwVG1FWHRCUFJGazIvenFSVHNnYlFNTC9scURYcko1eGZFeXFnc2JSWk53RWxBQTFleWl1Y3dES3VIMjF0SzN2aXg1Z3prRUQveEtmTDRFQ2RTcTUwekxLOHRJMWxaeit3aWYrOVpJQWRUMmtycTc2V1g0dzZzaVF0c2tKUmx0a3MvdDU3NWxpZkhQTkJodlkyOHl1Sktsd3A5VG9yaVdxQmJxdUZkLzgzWVRwZit1TFNwS1ZSWHdFVUFGTEJkSEZvS0ptQ2FkQTdPUk1taVN5S3pkT2tVbkxqd0tlQmpNaVBMcFBsS0J0TVVwYWVYTk5sZFJRb2xpOG50bXBYM3k1b1l3cXBqcFBXYTFET0hQbHdZeVQ0d2pLYjZJRUpUbjI0V2ZscmNhNnVUc1lybGQra3N5Ly91YWx5UDZCbGFzVzgvWGQrc3hZSmFWQm1NU3ZBOGl6azdMUjhoeHl4cUJucjZUZnhMeTdMNzZMVVNEeEY1SWNHVDZPR0RGRVhBNFNPVUM1U2wrUHE2YWdocmVMZTV1Rms5OVV5WlJkOHhPejBMUnhyM3ZkMmZwMWpibkZUc2pvZGpWMGZIZVlPZHQ1M2JtUWpxY3BMVkRWWVdSMlc3SWx6eW03T0ZXWTlJV29TUUNkeGxkWFZSZEQ3Rk9ZYzI0bnZEL2Y1TVNHdjgxTmh5aGoyb1Z1bVNtb0J6MndqUWRqMThSblo4YklKM0d6MzB1Rys1d2dtVHluak1Ca1R6QXBuM3VmeFZMVDQ2SjdtNlNLRGcrNHNpbXZZMXB6bEpieVJ4UjJ6WG00dWh2SjhuVitxeitRUzhXeFZSRTRxWHlJdkd5ZXpuU2hocVdOSnBidGs3RU5rUUx4SHplVkpYSUVwN2JmUjNJOCtZWlNLMC96dG1JM1RZdUNPSTNHS0hzcEJTTTI0azhFdlNtRXRZVnJWZzlBT1p2cFpYeW9DMG5aTFU1bEV6Uk9JRWNEMXo3TWxSN0ZBc2xLVDVjYnVkSG95dG02WTZZYkJNOE1ZOWw3Z1hqa0xKNUVFRFh3S0xPWEJHVTEvTWRxRTNYc3ZJeVZlaEdxR2JpMnZyU3lvQTZ3QlRYVGsrV2lTeEZFaHd4eXBiRTJBbXlGQU1QcFhzK1hxaEFZQVpPM2J4Nm9tUm4zdmkra0lQSGxnTWlaOXZQZ2x5azVnRXR6Wmsxb3g1Y0RMMEFnenl6bmhTT1ZFWXlWMndVYkVXN2pVNEZXeTVqQXNPeDRROU5KV3cvVk1qQnVaK29MZnovN3RZSjhaQU9VQmdvVDE4U3QvZDNiVVQwUTdPVnd6bEdFTXY0L29GTUMxZ2lyU0lmaEFtTUErRktEVUdHbFNHWFZOL3FVWmlKc1ZnSEdmUTMxaDFnTHhMNGtPODl6YW44WnRGSTIwOWVDN24zVDVxek5yY0QwYzZ6Zmx4a3IrUmwwQVltNXRMRmNBSWludkxPaUtoSGwybmhhSnBUUFFibVE5bUdiL0tuVm01cklieHI1NFgrd2hwTjZLOFZaTmUrd01la3RHVDVQY0pUdTRFVXRqVWYrZSs1eU1ScW9XLzBzbVJITElGaG5yUDd3UWlLUVdHSUNCd3NOTXdORHExdGYxY0tET1ExY0tSYS9lYUhEdGw5K251OUFSYW4xNUtaaW91N1IvYlR2VytqUGRrdGM3UnBZY2MyNkhaR1Z5cnhGYXp2K3pHUm5pYVNmajdiQU9lVHR5QlZ6eTVyWjhVYjRVZTRDdVhzTStaakplSWRzd0I1OWNOTWRuM01oRjMvdDBMME1TT0FiSUVMQ3kwTnduaThxN1E4R1pMTEs4dEkxbFp6K3dpZis5WklBZFQyVnYvdWlzOGxiWlV0eU13aFc1RGozY3BFZ2t4RllCeHNheVRXUDIvV1o1TFVhdCs4cTQ1Z1V2RnhaVERuME1ZdE5vNGhpTGY4RXVGS0c5YTBOMHRzenkya1Ezc3N4MTNFcnZ4MENqVXVaV3FlNVZ6bWdBYWxsWjBTUjc1dHlRS1IxUVNyT05HUWsrWTFXUVpVSlZBRXJ0R0EwWTVweEFYRnA2dm1LMGVveE5BditrbjhNYlVodFpDVzRGenFmWGlJeXl2TFNOWldjL3NJbi92V1NBSFU5cnFWT2txTWw4ZE5paU1yVDdoY3NGYkV4WXBOY1paQ3VHSFJqTlZJdkx2SU1vQ1g1VUtCbHRGT242U2RaMzdwd3Z5QXhCUlBpejRKVjZXdjFvalFwTDlVSkFmZ0xwc0pzWFpSUCtFN0lLTW4zS2p5c0I1dS9jajd6TG0yWEc0d25jV2x5cEFvUTE0RFlWc1lab1FXY2FsZ2xxRGxOV2dzWWhsRmpGZDdwUEhvQm90cXVhNXFLYTBwRlFmWEtpTHhES2s3R2ZMMnhLM0lIakt4M3lkVWw2dHViUXJldHIvTWxFSHBzclREc2ZJUHl5dkxTTlpXYy9zSW4vdldTQUhVOXN6QjNkWkt3cU1RaVg4c3ZLZEFjQ3ZoZzFLM0wzQTN6aXFiMis2MjkzNFV5eXZMU05aV2Mvc0luL3ZXU0FIVTlsV1N6SXlxRUE2V1lxU3FXUStieUI1SEJqeTI3QkdxY1lNY3JtZlp4aHBseXl2TFNOWldjL3NJbi92V1NBSFU5bHEzMWdIbGJpM3JLS1JyY3RZU01ibVJPZ3ZlWjRjei9tbDhjZ2hKR2RHOHl5dkxTTlpXYy9zSW4vdldTQUhVOXNmSWRtTUFkajByakpuL2N5NlYwMFBaeEZNSXhoMnBmaEpkQkJUaDdjbDg4NFhEbmJMdis4Nyt6MWtqVHRXa0NkUE91OGpSQzVPTnU2b1BENkdycm5yZDZTcWNodGN4bUZ5aFZ2Q2RuSElSd0hlbEQxbG9FZXNDeUQ1MDFIN1JZOHNyeTBqV1ZuUDdDSi83MWtnQjFQYVBJejgyMzY0eFVYRUwzZFVieHUzVlpTV0liTWhVVmRXV3l6UlZJaWE0QjMreU9TYjIxaVQ4ZnJ5bWlzMVppdWtodmQwVG1td2JNQU9lYSs1YVNrL2dzU3ZncXpsY2VqNFBTdVFQNG13elRXU1ZpSzVxa2JvQXJ5VUJrWE9mb3gzNFI4cEFKblBabEtNYzZiNVFENDVseXl2TFNOWldjL3NJbi92V1NBSFU5bVJUVUF6TnJBWForSEgySUpHY1VtTkI2by9HQmxMMzluKzNnSGRaYzhnSHl5dkxTTlpXYy9zSW4vdldTQUhVOXJnTHZ4aVpMZW1qdERKZHFLSkhIS1BMSzh0STFsWnord2lmKzlaSUFkVDJLVDBINk84ZXZ1TnJSS0M5Q2NKQXowZDJ5VmxKRDFiS3kxWXJkMXJ6c2lhY1BiYWI5azZmbnRkZHRoNW9QRzllV0dPeXU3TThZWWlNaUxwdU1wQTcxU0RWUURSbXhqQTlXRUphWEtQNjl3UDE0NDkzZ3MrY0hHNEdGblo2N1VoY1B5ajNGZnZHN0dVUGlyR1lYSE1YQWNtTFpCbnordlRlOHhzb1Y0aFQ5Smszd3FFcnRQVk5UZUYrMExDUmxmeUx0bTRIL0dkV3J4SW9hekFvVG5ibjhoclhjdTlUOFU3bHFRb2F0aHhlbEovTEs4dEkxbFp6K3dpZis5WklBZFQyUWwwb0hiUmJRQTI2V1dpNWV5NDRHM0IxLzh2UW83SGJxdll6eW1OS0gwVDNpbmpwU3orRDZLNVljRGF4MGU0UVA3K3pVVTFRVzAvMHl2U0tPTEQvd29HdSt3bS9pclphVFFqMzMrUXNqSFEyZ2hmT1puS0lpbHVTRWJWU3YvVWxOQm5qcWs3eUFUWHpTOEZuQW9xdTEyekx2N01BRHoxSHJ1elVTVjhYK0pqK01admhBTytEeVJVUCtxVFYwUEN6cUQrL04yc05SM3FhaHljZzdXNmExbnRoRFBJVTByUlpwdkRxanhvYkpxU01JVlprcHV3OGxSY25sdVZDRTlvYVpWcVFGT1Y3QzQybG5wOFdLY1h3bU5FcGg1VzFHQzRPNGhWTklLQ3U1aEVLN3VGRFNYMGp5SlBhazlKMEVVYnpIS2FXN1Q2ZGdTUFE5WktKWEUyK2lHSElJK2ZLeld0bEdqTWJEbU1Ua3RydmNsNy9KTklyc0RtM2JHam0vcjRwRVRmekwycVNxUVhGSXpHc2FpL2l2TnFSb3JWWEl0L2hhOTRLYzJ3ZlRjdVpkL1duUVFMVThOWXgvV0ZDVGhFbmtiemxuOVlHdDYwZlJ4c0grOHVNREhCR1llWVpuNi84SCtqVVA2NEpZWVpMVWxtbVVXYW9oaVVOeSt3TzFzZFdTMGRzckJreERHeFVoL1FJdnJoSHZxS2VwUjg4V1UrWm9ITE44aEV1RGs5WWZrTmJ1UzNOeHduanJLYlN4NklKMXdFa1BIeDJVWDhDUHZnVE02cjk3bWc4SnoyUFFXcE55ZER1QncxUkhjVnloUjhOWmUrb0JJTVludmdESFFRYjB5TzdlQzZQQ1ZEQ3RQdHhxUTFZd3k0S2hlNStUYzBrdXFrU2hXb1NHeTRKbHhuMVQyZDlZQWtIK0tVWkdmSkFPK1JRM25DMXpZYVhaV0o0Q2JONm42dlpIamlsbG5CbndQNUR4ajBWWGY5Zi9KUVJ4cWdiWFVHNjhxRFp2QlBOdFJDRk9uUFI0RzJVOC9SS3NGVVpIdTN6d3UvVHkwWTZKY2R6amtMVC8wVG9WUUptTW1sUHJ5S0ZCaFQxUGhCSEZjdWxHZUVnaHZpNFY5Mno5VjVESS9vWUFoTkpuUW9HSExJbnlUUCt5OElFNG9IRmd2KytLWXduMllDQzlYOWVTMkxGU1YwdkROZEtLSHZJRDh6S0VqeEhNdXRnN1hnZHFYZkJVVVYvcms3ZjhMZnU2QU9iZXFsWnZPTmpmOXEydk1lcG02RDhaK3VTQ2grcENKODRFM0NlKzJ6QjZpTGYrRFhZTmNxSEJTZ0tGclJwZU85N0cwTUxhVndrNHRRcWNUYzBKTmZJbUR6amhPcExqbFFYSURHcHFBcGQ4bitnODZINnUvby96WXZNajNSdnFPZWF3VVQ1V2c0blNlc2dsNWNyQjBCaVp0eFZsNWNTVWJWMnRpc2RPZUN6SEVYUCs2ZE40VDNicFZUcmZOVmtEdE1DcWRDcnhvUXg0TzQrdlg1a2ZtaFhtaWY5Z2tDNGpyWWUxVGxYQ2xsSklUUkk1cEIrL2M4enMrUzJRK2dTamVCUXBqSnB6a28yQkpSN0o0N29YcUNiV1NpUitqc1VaaFQrdkNtaWN3TXgzRnJSV3RyRjJJVTRKaUNmOE12c0ppUFkwQTQxaXlXSzJNaUp1TEo5NktYUjM2eHl5cG1HaXBGekZPU1A1SUdDRTJsS3FzSXo2V0F2dHVSM1RTM0tISnVwRGk1b2wvUW14V1pzTFVEQ3FYR0hOdWNlRHRLYzc4cHRyY1FTam1ITWdSTHZYZHJMdXJhYUkra3I1TlVQZ2hxMEE3TTZNWjZocVhTWUh1bGI2a2lHcTJJUEJpczRaM1A5TkdqTUNkTURoSXJDMXprVjhFUU5VdnprdnJWU0pQeVRndHdJOEtCL3FjYXRjM1EyS0xWY3I5Wndua2NxVVh2Ly9ZYU5CbjE4TWNJcUVPMDhJd2hlTEpYUkU0RFA5ajhXZitsa0hzdlBBRFJZSVplVDA4UTFRb3piQmYzU1J4cVFCV2x0bUlqSGhRRHFCT2xoQmNQREtxdkVMRlNjNXY2V0FIelgxWVZ4a1RDZWtxQTlxSDVCL1NmbVVweTN3eVJQTkNzZE9lQ3pIRVhQKzZkTjRUM2JwVlRMSzh0STFsWnord2lmKzlaSUFkVDJDTTI0c0FuVkJ5T0hrZko0WjdISmxvQnZOa0E0eVJ5c3lHL3ZVTll0TXUvTEs4dEkxbFp6K3dpZis5WklBZFQyeWdpbzhoVWVKZUY3ekk4ZVlMOHJaSDBEQnpFeUtxTGZBZFhRdVZkb0xkYWFtNXFkK0tlZ2trRVNPRzhrUVFlcGhuYUZuUDJsb0FEM3JuSkVKRlBvVkZROTJma05yeG4xemdhSHcxVDVsNjJHZG9XYy9hV2dBUGV1Y2tRa1UraFVOdkN3bUUwRXVNa1Y3OU0xUmlWTlZSbk9HUlpBeG01dXFVOW9sMTFDYkZyWFN0blJiYy80TkdUSDhVYjg4cGJBSElDNzNWM3dPNEtERm10aUJvYVlCSkhuM1VjYlF3Yy9raW5PYTNTVGxJVFNwRWRCNXhuR0NCVG4vNEx5cnRhbVJYLzlHMWIwQmxPWVhnbUdZaHAzYk5JZmdYTVpYeEIzMEhJUU5oTm90Z24vbEE5QmhTRlNobkwvTk4zeVA4UjdFeUFnZmZRSXlWSkh4Q1dySnpwQm5hQWtDWXJaNGE1STllNGsrOHNjblZnL2EwdHJHZENHWWNEVnYzbzYzRjgwRlI2azVFUDFVRFo0S2FGNjgzcWY5RzNzU1hBVkFQTUJ0U0REb0xlaUtUMkU2cXJyTlZqT292MUlFbTB4bHp1Umk0KzUyU1JlZHNCNGlpOU5QTkl2UE5tTXRxMmxwQmtaRjUyWEViZHk5eFRUUjh4QW9xazJIK2EwVUNxNlB5cURJbUJQQXZ5aGNhZmJiem5wRjMzWGlFUEZCaTc1TEtMNldpeHJlNnBwVHZqVXV4SDlhR2NMRngyMjdETWs3aHJoZzN6Rkh0L2hRNUR3RTU2TXEwaS9oam5FdVoxeHlneXFjL3RoV2J3em1Ici9CZTN1cGQ2cDZzZ0d0T0x3V3dwN3liL0t5UlJHSEhyUEFBYVZTQUNCT3BWYm5rcEx1QUZaTnVRZHdaTUV5amF4YVNVQWx6cEg4SUUwSTlXc2VyTE9aTWZ0TzNybmFCcVNhNG9PSStadDhrSHQ5OFlVb2lCcE00alA4ZHZZODcxN0Q0bngvT2FwblB5L29mT01IYXh0WW5WSDJzU1dkdlRhS3d5QmdYVEZqL2lhS0dRRzRvelUrbkRtY1EyVVFDNklNcnZLY3Z3ZnZvaVo2d2ZsYVg1Qlp4eW9BWVlBQjNGdG9icmpiSjU0aVlHbExLUDZzQTlBWTlMS3hVaUtPZlpxWncxWUdjalhCR3NZWnhrQzVUQWtXZ3E0Y2lqVkJKWExaMjFJNFBkQkUrZ2dPSGR4eFhqb1NYaFlZYXFuNnIwaXlRWEpZS3kvNVdza2lTZGk1MzlHdStWd2ZQeVJMRzJEN0NVbzFMNlNJRiswZllmMG9UT1dOMTNVUElUbzUrdmhaUzQ5ZXM2NGhnbzhzblUrbXQzWHgvMFAzRWQ5ZG1kdUhvdHJ6QmtFdGtUUzhKKzNVSXZsUG1ZTlZHZnZ2L3FYZ0tTK3NCN21sY3pzc01JUExueUw0aFkvd2hzTkJQTXl6b1pqeU5DbHdGR2dRY2taUzllbjdpWmdyYVpWZjFVTDFwTWVDcmdWSGZtRjdJOS9jZnZNZFZDWEhxQlMzV0ZSWDlEQ0p2ZFdBNngwWkR0UnlPMmlrTVdPaFRZTDc3Y1ZRSWhqaTNOUWJISWxVKzM3YnQrWTVSL3Y1QzkxUE5FQmJ6dXFBSTJWaW5SVU9RSFNiS1NZdHM3NlZYaVFDVzRqdlVYSFVXQjlTTnBUdVdib25nTWVmc2RuTnBmdEFPVnNRYmNJNXpmTXFrejFPMmtwWVVJcnUxN2VhTEtLaXJQc1BhZ0VtSFpTZTZsUlExbUFQaXFFMWVGZWpPUDRlQ0FmVUVKbVZoTy9ocC95RkFtNUpiM2k1V3c3cG4zWmY2WTFNRUZZZGgyc0cxaXQ3TVZTQmZETEhQcTNaMGtmdGQ5alJ0c2p5ejJ5UzRMZ3JtSjdKT2hxOEU4VlhTdG91Nk1WMVY4RmdZV3VMS1FrQVExNXYzSC85QkE0S2c3UmtlbVlHelY3eExrKzc5MnNSL2lIOE52eUhZNnV6S05nak1hcXh6a1lsVGtoQ1FVdEgxZTkrY2pnMFZkYS94N0JxYzhqTjdmc0JMM2ZpT0QzS3hqL0R5ckNUSnhzUmVsSHVvWTNTNTdoclBjMXhrSEo0RmJyblpGRW16MHdDSDROYkZEcERXZ2JzSkt6U29Tb2VuNDJ0UWpLYVRRUzJWQWwreVBGeVBzbUF5QzRZaHpnK0VIb3hWa3oyZHJvWEZYL3hnKzcwd2J6Uk5jVHYwQ3E4NFE0YjNwTWNwa1cyZGNFMG9lSy9MT2E0VnMrRTdOMlYrY3ZWMlpJNHpiRzFzaFB1VnlsSGhJZ3hoUE9vTFJwOGhuY1dUZ3gvdm03VU1zQ2VHcVN4NFJ3alRNbVVWRjl5T3YrN3M0V215UlY3TVVBMWZqNHI0TUNjdnZONGNzcnkwaldWblA3Q0ovNzFrZ0IxUGE1Qk9hNTRGblZUaERNYVczRmpSbHpuVkkzYXV1dFNKeGxJRmRaRUJBRzU3bGEvS1ZDNkZRRC9FQTRpN3NwcGJRbDExZEUweGNLNVhqc2lJZnFTTTBBekdaR1Vxb1pPOGhxdCtYcmxrSGMwajdlWXN3dzA2SHVrUVR6VUYxUHR1UmhraHNlQnYrK3pQcUpNd3lEUGhqd2RHVlM2V1BZU2tuYlRPam12R2pjbTVjcTFOWW9FUnVGWGJUVkZtVC9GV2V4YkRBK2RsZFJEekd4UnREVHNkdUF5eXZMU05aV2Mvc0luL3ZXU0FIVTluZFZ1U1l4K3dXQnd4bFlBQjU0Nzc3T2xETDdEdnp6c09RbksrL2JDYzRuckRIYVpsenlpQ2JNUEJEeEM2YXN5YzZVTXZzTy9QT3c1Q2NyNzlzSnppY0pmVEJBU24zK3F1Q2ZIeFFRTHViVHl5dkxTTlpXYy9zSW4vdldTQUhVOWdxeVBDMlRPS0NoOVNocENNSGxZSEhHbUp5cjFObFNEV3hkYXNOOE5JYlNXMVYyNm9pbEZZeVhGWit2N0VIRThBMHErTG91RUxJeUVCTGlubGxzRFBQSG5NU21nZ3hUUjhjVGgySUd2aDBLLzh3MFZOVVFNbkVlTzNsV1JhSmdTTXNyeTBqV1ZuUDdDSi83MWtnQjFQWUZFS0tDYjJLd216Z0d3dlRhalNiWFhVME9zK1lNbXZlRkdJZ0JKQzNVY25ieG9TcXl5SThtdGRjZ2FkaXpMY3pMSzh0STFsWnord2lmKzlaSUFkVDIreXRhQWlybWR3RGZsTUo0bTNZNGF2NWVoN3NzdjdabG9PamovTEtlUlZIRFhWWlFRYTFuTmZWbWZOWFhTK0pEeXl2TFNOWldjL3NJbi92V1NBSFU5c3NyeTBqV1ZuUDdDSi83MWtnQjFQWjZET2wzVENWYVo5UGZON1luSlFZZ3l5dkxTTlpXYy9zSW4vdldTQUhVOXNzcnkwaldWblA3Q0ovNzFrZ0IxUGJSSmtEajJTVUo0aTNObHZ4Rm5FWi9HS1ZRWDNvcXJwWm0xZU5WeVB0b0lJUDBHNEhyald1OGExejV3bVJ5UWNQTEs4dEkxbFp6K3dpZis5WklBZFQyeXl2TFNOWldjL3NJbi92V1NBSFU5dmJPNUh4SWVSaC9wbGVCTisrOWFlckxLOHRJMWxaeit3aWYrOVpJQWRUMisrOGt5QnFPdXR2S2hRQm1HbVpoT3BGODhMNTd3MWZkRm1uMi9odEd5S0hMSzh0STFsWnord2lmKzlaSUFkVDJKOWZVRWNTSFd2azhmcHludytCa1lJVjNqRHA4MWY0b1dyRmtaZjl0K3EzTEs4dEkxbFp6K3dpZis5WklBZFQyeXl2TFNOWldjL3NJbi92V1NBSFU5aGZ0TWh5NWU2NHNTbE9PMW9NRWsxc3Q5eFl2L2JyZXZhOGs0VGtzTFZJdnl5dkxTTlpXYy9zSW4vdldTQUhVOW1xdUVIN2dlWmV3SmIxRUV1SzQrcC9sNTJJWmJlY0Mxb1lieGVkZGJ3V1V5eXZMU05aV2Mvc0luL3ZXU0FIVTlsU3RuVW5tNlBrdjQ5MWk1b2Y0NHl6TEs4dEkxbFp6K3dpZis5WklBZFQyMkVZUkc5ODhVdkExRU5WbHJORGRqanVDOFMzQkR0aC9oT2tEUU1KTlhSRTBHZU9xVHZJQk5mTkx3V2NDaXE3WHl5dkxTTlpXYy9zSW4vdldTQUhVOWt1bk1TOEErSXBRTjRtZU1QbDJ3azdKc01nVWQvN0gvSzVxRll0VUphUHA5UG0zeGNmSWUyQVlOTkFETE9uSWlodDJ2ZU4xS3Y1UXZpYlRVVVl0eW1CVndRM0F1Vzh5S09hd2VhUUJ6RGtab0piczVMWXJwemVCVWFqNGRmVUhQb2ZGdmZYbTAxd0psd3pFNWVTSzZlVEdmL3NtbzQ2aHczVXJjeTY1U3g0UFJoQ2k1VERzTW1xWWhYTDJDbXRENzU0VHBuOWxUcE1kZTF6ZjA1MS9FS1VjZFgvTHlEZzY0eStZbmVvOFI2NW9pb2V4aTRuMW9sb01CSVYwYWVnaW1XNTExbzRYaEIyNDFQdFp3Y3ZZcEpFVEZJV3ZMMEJFZVNGbGdBTUUzbHJyT05jSVd6eU9nQjAvdWc2QkZaWldUblpVaXZ5dHBBaE1XN1E2SlE5NHdLM09sREw3RHZ6enNPUW5LKy9iQ2M0bmpGb2NndlI0Vk1YWTBTazZTV2VYd2QxY0ZIeGdsSlNJN1BseW5oMkVFYS9MSzh0STFsWnord2lmKzlaSUFkVDJwbTlLbW0wL053K3FwLzJ0eHBSOGhpcFFsejJ1TXNTMkdWb3dHY2JWU3pxT3ZtcXRZK0JaNFM4WW94elRWaSs1eXl2TFNOWldjL3NJbi92V1NBSFU5cU5WNEc2RUpMcEo2cktnK0hsR2JSTXRQU2ZXdlB6ZVJncWZkRjNQdDAxTFo1a2J4Vmo3MGE0QUdLb1plRTAwNEpxYm1wMzRwNkNTUVJJNGJ5UkJCNm14UktrOFJSUzZFalVteG5HVlJPUUh5eXZMU05aV2Mvc0luL3ZXU0FIVTlnMVk1MjBjeFAxUGVFekxJWkVIbWZIdDVsQWNFVUVZZ1E2cDZWSW5qTFNMeXl2TFNOWldjL3NJbi92V1NBSFU5aG5pdG14SHQ5R20wbVlORXZVKytodzJBQWJSTTBDVENXMUxhOGFDMVdjNXpwUXkrdzc4ODdEa0p5dnYyd25PSndhaHdqdStoVVM2bXJLRzNOdG1zZmp1NTN1MngrZklFOGhUQ2V4bnI1eHZVY3U0Z084em9BbGlEWUY2cWpqNWpYWlI3U3JxcnkrelhuVnB0VEtJVFZiTEs4dEkxbFp6K3dpZis5WklBZFQyOTRwNDZVcy9nK2l1V0hBMnNkSHVFQ2ZYMUJIRWgxcjVQSDZjcDhQZ1pHRGtDSDQxaGZ2ZGJOZFBiKzV4Yk9wRklOVkFOR2JHTUQxWVFscGNvL3IzQTkycTgvUk56RmV5UE9CMkRVOFo1NURMSzh0STFsWnord2lmKzlaSUFkVDJsV3VpUXJIK3VadTdXcVZiM1BlS3A2VWxLczZtSVdyYThrSUlXZGFCaDZuY2RPUDB6ZnBwb3EyRzVSTUNzNGdUeWpib1ZEc3lDMDJqRmFKL0Q3eGZLbEtGRVdpVjluN2FTTnNJWkRneTRSTnBlc1R2M2xzQ1VxTThzRnJXWEV1Vk05SjJsYS91bmRrcjB4VEhBazQvQjNieG9TcXl5SThtdGRjZ2FkaXpMY3k0WDAzcXMzQi93MnBqam1JbjZidnl6cFF5K3c3ODg3RGtKeXZ2MnduT0p4dmFlNEVEUGtIc2VvWE5NNzV4Tm5MY0xpNDBGclB0Ny94UWVSU2FLdE9JU2U3dVg4SmkrRUo2aGhvTVFXUFdicjMxbGlyMVJRVEZQd3ViSVNGL3JMd1F6TWxJYnBRN2FPZlcxUEtGN3I3cmdGc29MQ1JycWphK3NwYW5DUDErVWszcDkzVWFqNm1LOUYzK0diSmNPVmI1bjJieFNocnBRWEpSNWZrMEpnZE0wcENYZTM0REROS2gxUjNmNXJIN0pXUjJRM2dZVS9OVEpwRjc0bXUveXVCQ3pWUjB0aUFwYnlNQWtuUGIyVUxad3pEVTExYTJ0UVRpSWN0K2JCQmxHRFJrTWxQUVc4aWdVeXhTV2taZ3lNM0xLOHRJMWxaeit3aWYrOVpJQWRUMitFSmlCcGY3TW5sZytJVzcrQ2ZYVEU0dm1CT1ZsMzdRSkhuWndFRXdvakJTZndaOVgrTWlhdnkxaTVCcVdpSEpSWi9URXloR0NPalQxR0VxNEJJSURFaTdtTFRYYXRNNit6akl3S0pZbW9iT2xETDdEdnp6c09RbksrL2JDYzRucEw3YnF5MVBFNGRxckllVGJHYjZ6dDVlU09JTXU2TVlLb2lUUDh4MW9UZ05Ldmk2TGhDeU1oQVM0cDVaYkF6emdyQkVya3Vmb3pmeEhEY2JkK3B6MFVRYTJQcnh1QkhOOFNXRVZyQU1RWU1Sbm1UYlphMEpMYjVuT3ZlQVlPNzF5eXZMU05aV2Mvc0luL3ZXU0FIVTlwRVp5aVFSdDVDc0dHeVJtaUMwSHlsU1NLZFJ4S245K2dESE8yOHUrdEk5TjdMdmZjZXlSdlNsMVdjTjJHNXA5VE1PN1lXWjdhQ0lRckVwY2lzOUV2UExLOHRJMWxaeit3aWYrOVpJQWRUMlUxd1lveFZqNFZpR1JERWJBS1d1Z2ppZ2Z5VW9UVE9lQzZQeEdlcWt2My9lYmplSSs2NUlBQTFEK2tzUkQrT1dOQWE1T2tsQXV5MHJnS1hoa0dzYWw2MGMwcHhoNG54WkpidVdGVTdTN3IzNXJ3RmpEdERoUCt5eXFjY2NPNG1ZcHMxNG9Ocjl6YVRyZElHZmsrWjlERVdTY2dlakdGdGFhWDJXc1ZNTWhGY3F6VmtYRC9WUzkwM2ZCMmxEdW4wcHl5dkxTTlpXYy9zSW4vdldTQUhVOW50dkZuQ2l6ZGpBR2RKREl0L1hSTGJMSzh0STFsWnord2lmKzlaSUFkVDIxeVJXMWU5Z1VKWThGQ3ZlaGxkMmtNc3J5MGpXVm5QN0NKLzcxa2dCMVBZNnBadFQyZUZDTjB4V3Z0citMdzcvbWg1UXFkcm1uWWdEQnkzS0hnaEdkY3NyeTBqV1ZuUDdDSi83MWtnQjFQYVN4bHFQb3JLSWFERzJIN2YyOFZFakZwQUlMdGxYWWg2T3RuNFZhdnJRTUtWTVdobVFKSXZqWFU3am90MGhJUVZ6UnV1UnpIYnJFdmZCZzU1ZWV3R3F5eXZMU05aV2Mvc0luL3ZXU0FIVTlzdkFVNXo4UlVvUWNVTVMwdjNIZTlTZWlDTjhadjNuc1lPWmhJQ1BDQVRoYmV4a0wzUWJ1dFJCdkZjM0g3M293TFVrUkJZNFdPQnpqcDBmS1FSNHBUY05Ldmk2TGhDeU1oQVM0cDVaYkF6enYvek9JY2hLOXZiU3MrY2NoOXZoZFNyTldSY1A5VkwzVGQ4SGFVTzZmU25Ya1dpU1V2TE4wSitJSk51MWVSQ0dyZlNtSG5zeVZBSitUZkVzTWRGaG1CR1Nhd2JPUWZHUXdaSTJuME9MRWFYeU10cytja1RpRjJHR1ZqSlJLQU5qbmhlcWdvN0YyK2RrZ2ppbExISEMwVC96NjFOUndEeU5pV1JHcWdWWFpIandyRElFby9BT1ZRazhyM3UrWW4xeHdpVk1OR1VLRW1jeWN3bE51RWErZ01zcnkwaldWblA3Q0ovNzFrZ0IxUGFRWGh6VkZhdWVhUExvNmp3MGVraSt0V2lvSmI2czVZWkxjRXppVFZacGZQeGVMT2FnVzdES3Z4ekZMQUNndEtYS3ZwdFJSSmpjMGVQa2wxczI2b1Qwc0R1YkpSWDZJRFpQemo4dHdRNlNjZ254NEdkRWI0T1JYWEd6cEt6TVhqcE9PbnoyRTFRN0h0REZudTN4NC8rVlVWZlV2cXRCK3BYNDV3VTUyVmJVUGNSL2VldTlLM25WTGN3ellITDBDeE93aUpCVFBYUzR6SS94RWllcHpUU3J5eXZMU05aV2Mvc0luL3ZXU0FIVTltVDVQY0pUdTRFVXRqVWYrZSs1eU1TNTFRaStvbUh6bURxcnpESnlXZ0NMdCtJL2VDNnFyWkNRbWxDR3V4WTZJcm95VUUveU9sdmZVTUNTT2NMa3pNekxLOHRJMWxaeit3aWYrOVpJQWRUMnRSbUl0RGV4N3RQdFBUZ05DWTM3VU1aTWRiZGc3L3laRS9qbVBMODBSUXM0K3FCNllad3J1ZzQ1R3Q4MmJIWW9yOXFxaDBHeFB5bysvczRxU3psNlg4c3J5MGpXVm5QN0NKLzcxa2dCMVBaSUQ2YUp1Uk9sN0ttQklmMEJXQ2xiWFBEWWQvQXN0R2I5V3JoVEJhWXFUSXNnU3B1OVBwUWlFVitGVHByVjlQSDFlam9ZT0JJVmFPcjFFM2RremZsaERrZ1pDcjJHZU5zYmxjQUlTRWZWMUFqYTlQV2ZaZjRsM3NDS3ZHVzB2dlZUNkpRNEZTRktOdXRiOUJ2K1F5SmFidDZIMjdvS3hFaHlZazBLN2JZVmcyVDdWUEF3OERsRUFOV3ZMMkp2eW1UTEs4dEkxbFp6K3dpZis5WklBZFQydWVFZlFqcXE5Y3ZQMFVMMWdaZGJmb1o3QVY4bnhlUVFUTkdMK3oycHVxZkxLOHRJMWxaeit3aWYrOVpJQWRUMlZLMmRTZWJvK1MvajNXTG1oL2pqTE1zcnkwaldWblA3Q0ovNzFrZ0IxUGJUL2RyQ2dQVWl2dnpSN0tuOWR3anJ5eXZMU05aV2Mvc0luL3ZXU0FIVTlsVXZsZmdSeDRRbGdiVmx1Y2U4QzEwWTIzMnZacGI1RHptb2NVbTJMMEI5UE85eTVjZ1N1Q3ZVUDgrNkFXYUU1UWhxeWEyYU5yY0MwWm5xY1h2clRXSU9IS3NlYUtkNUJFblR5N1ZPWTA2cHl5dkxTTlpXYy9zSW4vdldTQUhVOXVBOTFkRExYc2hnVERhZG9JNGVOOG44RFFMSUVzZ0Y0Vld6WWR3ZkdMOEZ5eXZMU05aV2Mvc0luL3ZXU0FIVTlqKy9zMUZOVUZ0UDlNcjBpaml3LzhMVG1nbEQ4QSszc1RabzJXL1RQTmJycW1OY1IxNUN5NWY2YmVoYndTdmNKODZVTXZzTy9QT3c1Q2NyNzlzSnppZWw3QkplUWVpZmNiZG4wYVp3T0NmajRlVXRCYlVYVEhYZDRMWTBOVHlZdThzcnkwaldWblA3Q0ovNzFrZ0IxUFlUOVVwSmlPVzJBWmUwUnB5Zmx1MG15eXZMU05aV2Mvc0luL3ZXU0FIVTlnTnc3SlZkbnN4MEh3OWdiK244T2NwUE1oTkJnM2dMc1k1NS9uMkpFcmMzeXl2TFNOWldjL3NJbi92V1NBSFU5aTFNNVZiaXBYdEEyZnVWZFBYV0xHekJ6TVQ4dWVwd01XeU9waVNWdU1KWmFEL3N4cHptamhZcXppdVVwYVY2Qk1zcnkwaldWblA3Q0ovNzFrZ0IxUGIwK2JmRng4aDdZQmcwMEFNczZjaUtJTlZBTkdiR01EMVlRbHBjby9yM0EzYnhvU3F5eUk4bXRkY2dhZGl6TGN6UVRhTVZTME4wT2tVdkxqUDFVaXRqc0R1YkpSWDZJRFpQemo4dHdRNlNjc2t1dDAwQVdkeVBpRWkyZEw4YldXUzVBMlNYeU9zemhzUHRpWW9XWGZRUk1aNEF5YXJ1WDYyblRoaTh2Vm9UOWpxTFpSbnc5Q3FTaTN3cGNaZnI2Q0FKV1N1Wk5jeXNyS293Yi9CYkF0cFMxeDhKcUlHdE9GNkUxeTdSN2RJcUVld3dWTmFDdnAyWmlvbFc4WWtaaVVOaDJLSnNIRnJnMndIN0FVdFZNVThkQnFIQ083NkZSTHFhc29iYzIyYXgrRDlNa2pmK1lCc01oa1hZcDRsbGdVMzArYmZGeDhoN1lCZzAwQU1zNmNpSzhxSVUrUTRzbU5YaHpGaXBab2lwSEQwaGptNTd5Z1hYendNU0VlM2pDT1pKaGVRczhmRnZqeGN5L291MjBYWXRYUk9KQlp6ZlB5bFpiZ3BCY1lXR3JNT2tkdS9Qcm5tb1AzRWxyRUtYb1VYNmk3Q0lpM1VkelVxZVEvcndKa2tKY0praHZRK09SU21VS1hrQXFWdzlhUWszTGJmL2RQK3JyeXVhWjdEMEFoNXRsSFp1K1hOR1ovc2dhLy8rQUg0R1JON054aFRXOHcwZlRwVEtLdnE1VnNydTlJT0RTQkRZRmFDblcrMU1VQThDR2hLUWxUQlhvRlBuQlBCK0swMUEyMWh4cFU5RkFYOWMvMHZBMk9sVU5mMjVhUk4vaVdiN3VmWFJXaGIzbE5TYmZkYXM2eHhWTGtqbEhoZ3RDT2puTHRFdWJzMVpzYzNyc1JpcTRmM1dkbnF2a2lOT3Eya29lMXFVNU9UcmJmVldxZzk4REV3NkFhUDArNGlTV2IyS2gvUVVOV05sN0RQZXN1OTFxbTNhZ3M2VU12c08vUE93NUNjcjc5c0p6aWZUbGd6NnpwNGhHZVVKU1BrV2EzaldkLy9WQkZMdjBGcHoyeVJUQ2RCd2k5dHNGNDVLU1puOU5DdW04SEFsaWZpM1ZZNW4wYjB0TTNFUE13NmtHTkJmeDJEcVZ1MkhCeGIwMUpUVDFNejdwRnRWZHVxSXBSV01seFdmcit4QnhQQTlrcWd0MFJYUExORWp4V0FPR2w4azlvK0FtVTBpa3JSRzNpdUtUM3BudEZ0VmR1cUlwUldNbHhXZnIreEJ4UERMYXhGNDZHMTgvSDlobVZGQUs2dmVFMURSQ0NpMEw3Z3dKUkVRenoxRjduS0ZIdzFsNzZnRWd4aWUrQU1kQkJ2aEZ6TUE2dUk4YTcxakNFMmV1cGxGMTZSZXRQcDNtSk1za2dGUWkzdHlPOHNyeTBqV1ZuUDdDSi83MWtnQjFQWXBNV3YvMDZMYXZXQVZuWVZrdmorUU12cEVEQ21BanFNSUExdU5DNElhOXp1QzhTM0JEdGgvaE9rRFFNSk5YUkUwR2VPcVR2SUJOZk5Md1djQ2lxN1gwT3JtakNLVlhRL2Jkem1Eay9veWpiYlJ2dHhxd0hLQ0p2REY0R1Zva0JwQmVIQlVMYW5nNnJ5Ky9kUlY1TjNFSTJmL2tSMVk2WVc1V0Q5cGxXbUQxcjMrZkhqY01pbDd5N0hrYzNsUVpuenA3dmZ0cnJLM3p5dFczSU5Zbzh2WUluQ3ByNndCOVpxYWtZZ0xEQnM3QXZ0d1JhL1hpdlE4ZWt1YTdPM2Y5SnpDcG1qZnhFNTFTUTNRWEMvL3BLMjJTU3EyUWhwMVQ2VWhLOFpMcmUvMDRTcklFQkgvSHFYTUtCL0FLUlZ6bHhWZjZWSVQxZnNLeTFwbkQ3b0F6NVl0VWN1NGdPOHpvQWxpRFlGNnFqajVqUlArcVdxcXcvcGVQdmZZVjNteSt4QXhpUitxRVYvUzZ2bzMya0NYdHBJZkVkMXJ1UTFVMXV6V3Y0SlFIaHNUN3M2VU12c08vUE93NUNjcjc5c0p6aWQzQkR2WVdrb1VwNVN6MThDcy9RYnpOWEFpSmUzZVdtSDVzdnVzSi83YmxtamNUQjlGTHA2RnEzaXJJNEI5bjl3MWNDSWw3ZDVhWWZteSs2d24vdHVXQ0Z2cTRHUjhyWmF4QWhoSUhKYU9obmhPempmK25EazVrRXBQZmpvUHBHa2tQVHROSXlZMG80Nk9WNlBKbHZ4NjNHejg5cmtjazQ3YTJWNnpLOCtMWlJSemhxUWx0eGRiaFd4Zms4UUt2SWpMSzh0STFsWnord2lmKzlaSUFkVDJwbTlLbW0wL053K3FwLzJ0eHBSOGhpcFFsejJ1TXNTMkdWb3dHY2JWU3pxT3ZtcXRZK0JaNFM4WW94elRWaSs1SU5WQU5HYkdNRDFZUWxwY28vcjNBM2J4b1NxeXlJOG10ZGNnYWRpekxjd3MxM0tkY0FSYloydDVuM0hlVGo0VG8yWEZDb3ZFTkJMNnJ4VkZIQ3lRT3NzcnkwaldWblA3Q0ovNzFrZ0IxUFk3ZmJrOUZIaXA5YzV6S1ZKZXNITGt5eXZMU05aV2Mvc0luL3ZXU0FIVTlydlZtRWRSTzVGM2lYZmJzcmZoZWNUT2xETDdEdnp6c09RbksrL2JDYzRubDB5d09kRXJlTjNiNnJHR3VLa0pOMmtWa2RFWk53UFlQa0J4OFUzWGFIKzF1YS8rQ1NFNkxTTWE1VFQwZysvSm5OdVpZYWJGZnFDS2wwQ0xydG44TVg2V3ZpYkkvR1VIV1QzMkVKWHhzZzBaUWd0VURZRkM2dHV5Ukdka095dExnd2NrZUNFdGwxdkltblJqNzZRU3F1SFk0RFU1anRwRlZWbzlveFIyWHVzZzlhbEZ0S1JFbmwyRmhnMnljemlVYUlURlFsM3JJU0JPWTZ2NUlXNXo4MnkrOHdtakhzRWsrcVFLSjdRYkdKaTBqeFEvQmVqYnlyQ01NcWFETk1JSmRkSkxha1g4V09SMkdGQ21HL21QMTZQS2hTOE4vS2xxWmhQTGJMYUNPWmVBVG05SUQzSnIxb0JBckUzNUN5RkdNRytKd2RtSTFaUmxhQXZnOVVQVndwbCsvV25QTTIxSXFSd3pwbllSUURiWWNKeXJDMmxHNGUzOForSEZIVGlPdkZRb3Y0aUNUaVAyWTQwSktQQkltQlZ5TzY3bmdvWVRaYlJJRCtoQm1DUFRtZ2xEOEErM3NUWm8yVy9UUE5icmV0dVdhYkV5N3ZXOHl6b1kwOGZlOSt4Vm5VSWUrUjVTV21GNmlDa2Vya2ZpS0QvNWt3QzFBWkt1b1BRN1gzTzQ0Q3lrWm81V2RTRklaK3pyY2tXRjE3MmhNbUx0UWNVWGpEUDNLKzZ5UXFBWTJHTnAyQk4yYXpOUERqUnpwZitobHpXY3QvRmVJbTVUVCtTMXhwLzY2ai9RTXpKUS9UMGlZU1oySGFFQ1ZpNGZranQ1eTQwSEFtenpTQVJOWldzT0dyUDRXTnF1WEJkdkdnbmtvQU9sMFRSOURVY0ZnQzlCYytZVFRQRVUvbEhtU0FPbThVbFpVQWgrd1E5bkhkRFJ4ekc4RkN3dDg0TCtocWM5WG0vZW8yUWdRZW9weXNQVXY0U2hkUmhwdjhCb05tamJneXdLMTMrcWxGRzFWaHlxd2t0U1MyZk1nQ1hpRTQvdHJwVGNudktMQTBxZUN3NTBpVlhsWmZodXVkaFMrcWk2TDA5TW1PbXR3VmdnbjFDR2hkR1VmOEhKSW1IUUpUM1g1RXkwaUE9PVxcXFxcXFwiKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpmL/ph4zkuIDnuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2hhcmlkXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxcXG4gICAgY2xlYXJNeVZhcignbW91bnR6aW11Jyk7XFxcXG59KSlcXFxcblxcXFxuLy92YXIgaXRlbXMgPSBbXTtcXFxcbmZ1bmN0aW9uIGZvcm1hdERhdGUoX2RhdGUsIF9mbXQpIHtcXFxcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFxcXFxcInl5eXktTU0tZGQgSEg6bW06c3NcXFxcXFxcIjtcXFxcbiAgICBjb25zdCBkYXRlID0gIWlzTmFOKF9kYXRlKSA/IG5ldyBEYXRlKF9kYXRlICogMTAwMCkgOiBuZXcgRGF0ZShfZGF0ZSk7XFxcXG4gICAgY29uc3QgbyA9IHtcXFxcbiAgICAgICAgXFxcXFxcXCJNK1xcXFxcXFwiOiBkYXRlLmdldE1vbnRoKCkgKyAxLCAvL+aciOS7vSBcXFxcbiAgICAgICAgXFxcXFxcXCJkK1xcXFxcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxcXG4gICAgICAgIFxcXFxcXFwiaCtcXFxcXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxcXG4gICAgICAgIFxcXFxcXFwiSCtcXFxcXFxcIjogZGF0ZS5nZXRIb3VycygpLCAvL+Wwj+aXtiBcXFxcbiAgICAgICAgXFxcXFxcXCJtK1xcXFxcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxcXG4gICAgICAgIFxcXFxcXFwicytcXFxcXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcXFxuICAgICAgICBcXFxcXFxcInErXFxcXFxcXCI6IE1hdGguZmxvb3IoKGRhdGUuZ2V0TW9udGgoKSArIDMpIC8gMyksIC8v5a2j5bqmIFxcXFxuICAgICAgICBcXFxcXFxcIlNcXFxcXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXFxcbiAgICB9O1xcXFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXFxcXFwiXFxcXFxcXCIpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xcXFxuICAgIH1cXFxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXFxcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAoXFxcXFxcXCIoXFxcXFxcXCIgKyBrICsgXFxcXFxcXCIpXFxcXFxcXCIpLnRlc3QoZm10KSkge1xcXFxuICAgICAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoUmVnRXhwLiQxLmxlbmd0aCA9PSAxKSA/IChvW2tdKSA6ICgoXFxcXFxcXCIwMFxcXFxcXFwiICsgb1trXSkuc3Vic3RyKChcXFxcXFxcIlxcXFxcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBmbXQ7XFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXFxcbiAgICBpZiAoIXNpemUpIHtcXFxcbiAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgIH1cXFxcbiAgICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xcXFxuICAgIGxldCBpID0gMDtcXFxcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXFxcbiAgICAgICAgaSsrO1xcXFxuICAgIH1cXFxcbiAgICBzaXplID0gaSA/IE51bWJlcihzaXplLnRvRml4ZWQoMikpIDogc2l6ZTtcXFxcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcXFxufVxcXFxuLy9sb2cocmVhbHVybCk7XFxcXG5cXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxufVxcXFxuaWYgKE1ZX1BBR0UgPiAxICYmIGdldE15VmFyKCduZXh0cGFnZScsICcnKSA9PSAnJykge1xcXFxuICAgIGxvZygn5rKh5pyJ5LiL5LiA6aG1Jyk7XFxcXG59IGVsc2Uge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIC8vdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYWxpdG9rZW4uanNvbicsIHt9KSkucmVmcmVzaF90b2tlbjtcXFxcbiAgICAgICAgdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcXFxuICAgICAgICB2YXIgc2hhcmVJZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnY29tL3MvJylbMV0uc3Vic3RyaW5nKDAsIDExKTtcXFxcbiAgICAgICAgbGV0IGdldHNoYXIgPSBmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9zaGFyZV9saW5rL2dldF9zaGFyZV9ieV9hbm9ueW1vdXMnLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIGJvZHk6ICd7XFxcXFxcXCJzaGFyZV9pZFxcXFxcXFwiOlxcXFxcXFwiJyArIHNoYXJlSWQgKyAnXFxcXFxcXCJ9JyxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBsZXQgcHVzaG5hbWUgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9uYW1lO1xcXFxuICAgICAgICAvL3ZhciBsaXN0eXAgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0udHlwZTtcXFxcbiAgICAgICAgLy92YXIgcGZpbGVpZCA9IEpTT04ucGFyc2UoZ2V0c2hhcikuZmlsZV9pbmZvc1swXS5maWxlX2lkO1xcXFxuXFxcXG4gICAgICAgIHZhciBzaGFyZXRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX3Rva2VuJywge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfcHdkXFxcXFxcXCI6XFxcXFxcXCJcXFxcXFxcIixcXFxcXFxcInNoYXJlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgc2hhcmVJZCArICdcXFxcXFxcIn0nLFxcXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgfSkpLnNoYXJlX3Rva2VuO1xcXFxuICAgICAgICAvL2xvZyhzaGFyZXRva2VuKTtcXFxcblxcXFxuICAgICAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcXFxcXCJtYXJrZXJcXFxcXFxcIjpcXFxcXFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFxcXFxcIicgOiAnJztcXFxcbiAgICAgICAgaWYgKCFkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJy9mb2xkZXIvJykpIHtcXFxcbiAgICAgICAgICAgIC8vaWYoIWxpc3R5cCA9PSAnZm9sZGVyJyl7XFxcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwiLFxcXFxcXFwicGFyZW50X2ZpbGVfaWRcXFxcXFxcIjpcXFxcXFxcInJvb3RcXFxcXFxcIixcXFxcXFxcImxpbWl0XFxcXFxcXCI6MTAwLFxcXFxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFxcXFxcIixcXFxcXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJ2aWRlby9zbmFwc2hvdCx0XzEwMDAsZl9qcGcsYXJfYXV0byx3XzMwMFxcXFxcXFwiLFxcXFxcXFwib3JkZXJfYnlcXFxcXFxcIjpcXFxcXFxcIm5hbWVcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2RpcmVjdGlvblxcXFxcXFwiOlxcXFxcXFwiQVNDXFxcXFxcXCInICsgbmV4dCArICd9JyxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAvL2xvZyhyZXNjb2QpO1xcXFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtc1swXS50eXBlO1xcXFxuICAgICAgICAgICAgdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXNbMF0uZmlsZV9pZDtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSAnZm9sZGVyJztcXFxcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLnNwbGl0KCdmb2xkZXIvJylbMV1cXFxcblxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8vbG9nKGh0bWwpO1xcXFxuICAgICAgICBpZiAobGlzdHlwID09ICdmb2xkZXInKSB7XFxcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwiLFxcXFxcXFwicGFyZW50X2ZpbGVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBwZmlsZWlkICsgJ1xcXFxcXFwiLFxcXFxcXFwibGltaXRcXFxcXFxcIjoxMDAsXFxcXFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2VcXFxcXFxcXC9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2J5XFxcXFxcXCI6XFxcXFxcXCJuYW1lXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9kaXJlY3Rpb25cXFxcXFxcIjpcXFxcXFxcIkFTQ1xcXFxcXFwiJyArIG5leHQgKyAnfScsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIH0gLy/lj5bmlofku7blpLlcXFxcbiAgICAgICAgLy9sb2cocmVzY29kKTtcXFxcblxcXFxuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyKSB7XFxcXG4gICAgICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcXFxuICAgICAgICAgICAgaWYgKG1hcmtlci5sZW5ndGggPiAxMCkge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCduZXh0cGFnZScsIG1hcmtlcik7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdmFyIGNvbnRzID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zO1xcXFxuICAgICAgICB2YXIgemltdWxpc3QgPSBbXTtcXFxcbiAgICAgICAgY29udHMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChjb25maWcuc3Vicy5pbmNsdWRlcyhpdGVtLmZpbGVfZXh0ZW5zaW9uKSkge1xcXFxuICAgICAgICAgICAgICAgIHppbXVsaXN0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBleHQ6IGl0ZW0uZmlsZV9leHRlbnNpb24sXFxcXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfaWQ6IGl0ZW0uZmlsZV9pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLnJlcGxhY2UoJy4nICsgaXRlbS5maWxlX2V4dGVuc2lvbiwgJycpXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcblxcXFxuICAgICAgICB2YXIgdHVpc29uZyA9IFtdO1xcXFxuICAgICAgICBmb3IgKHZhciBpIGluIGNvbnRzKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXFxcbiAgICAgICAgICAgIGlmIChsaXN0eXAgIT0gJ2ZvbGRlcicpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgemltdSA9IHt9O1xcXFxuICAgICAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGZuYW1lID0gY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGZuYW1lLnJlcGxhY2UoY29udHNbaV0uZmlsZV9leHRlbnNpb24sICcnKTtcXFxcblxcXFxuICAgICAgICAgICAgICAgIHZhciBpZHggPSB6aW11bGlzdC5maW5kSW5kZXgoeCA9PiBuYW1lLmluY2x1ZGVzKHgubmFtZSkpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChpZHggIT09IC0xICYmICFjb25maWcuc3Vicy5pbmNsdWRlcyhjb250c1tpXS5maWxlX2V4dGVuc2lvbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgemltdWxpc3Quc3BsaWNlKGlkeCwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHppbXUgPSB6aW11bGlzdFtpZHhdO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgICAgIHZhciBsb25nYyA9IFtdO1xcXFxuICAgICAgICAgICAgICAgIGxldCBzdWJuYW1lID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ21vdW50emltdScsICcnKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoY29udHNbaV0uZmlsZV9leHRlbnNpb24pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gY29udHNbaV07XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB6bSA9IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dDogaXRlbS5maWxlX2V4dGVuc2lvbixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfaWQ6IGl0ZW0uZmlsZV9pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZS5yZXBsYWNlKCcuJyArIGl0ZW0uZmlsZV9leHRlbnNpb24sICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdjID0gW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaMgui9veWtl+W5lTogXFxcXFxcXCIgKyAoc3VibmFtZSA9PSAnJyA/ICfml6AnIDogc3VibmFtZS5uYW1lKycuJytzdWJuYW1lLmV4dCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoem0pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignbW91bnR6aW11Jywgem0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mjILovb3lrozmiJDvvIzlvZPliY3lrZfluZXmlofku7Y6ICcgKyB6bS5uYW1lKycuJyt6bS5leHQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB6bSksXFxcXG4gICAgICAgICAgICAgICAgICAgIH1dXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ2MgPSBbe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5b2T5YmN5oyC6L295a2X5bmVOiBcXFxcXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgICAgIH1dO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcblxcXFxuXFxcXG4gICAgICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIFxcXFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJChjb250c1tpXS5maWxlX2lkKS5sYXp5UnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuLCB6aW11KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FsaWxhenlcXFxcXFxcIikoc2hhcmVJZCwgaW5wdXQsIGNhdGUsIHppbXUpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4sIHppbXUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBmb3JtYXREYXRlKGNvbnRzW2ldLnVwZGF0ZWRfYXQpICsgJyAgJyArIGZvcm1hdFNpemUoY29udHNbaV0uc2l6ZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogY29udHNbaV0uZmlsZV9pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazpsb25nY1xcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcblxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OCJyArIGNvbnRzW2ldLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBjb250c1tpXS5maWxlX2lkICsgJz8/P2Z5cGFnZScpLnJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIHB1c2huYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9ydWxlbG9vcCcsIHt9KSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNvbnRzW2ldLm5hbWUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICB9IC8vZW5kIGlmXFxcXG4gICAgICAgIH0gLy9lbmQgZm9yIGlcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfmrKfmrKfvvIzmiqXplJnkuobjgIInLFxcXFxuICAgICAgICAgICAgdXJsOiBkZWNvZGVVUklDb21wb25lbnQoZ2V0UmVzQ29kZSgpLnNwbGl0KCcjIycpWzFdKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxufVxcXFxuLypcXFxcbnNldEhvbWVSZXN1bHQoe1xcXFxuICAgIGRhdGE6IGl0ZW1zXFxcXG59KTtcXFxcbiovXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Zi/6YeM5bWM5aWXXFxcIixcXFwicGF0aFxcXCI6XFxcInJ1bGVsb29wXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBpdGVtcyA9IFtdO1xcXFxuXFxcXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxcXG4gICAgbGV0IGZtdCA9IF9mbXQgfHwgXFxcXFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcXFxcXCI7XFxcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcXFxuICAgIGNvbnN0IG8gPSB7XFxcXG4gICAgICAgIFxcXFxcXFwiTStcXFxcXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxcXG4gICAgICAgIFxcXFxcXFwiZCtcXFxcXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcXFxuICAgICAgICBcXFxcXFxcImgrXFxcXFxcXCI6IGRhdGUuZ2V0SG91cnMoKSAlIDEyID09IDAgPyAxMiA6IGRhdGUuZ2V0SG91cnMoKSAlIDEyLFxcXFxuICAgICAgICBcXFxcXFxcIkgrXFxcXFxcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxcXG4gICAgICAgIFxcXFxcXFwibStcXFxcXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcXFxuICAgICAgICBcXFxcXFxcInMrXFxcXFxcXCI6IGRhdGUuZ2V0U2Vjb25kcygpLCAvL+enkiBcXFxcbiAgICAgICAgXFxcXFxcXCJxK1xcXFxcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXFxcbiAgICAgICAgXFxcXFxcXCJTXFxcXFxcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxcXG4gICAgfTtcXFxcbiAgICBpZiAoLyh5KykvLnRlc3QoZm10KSkge1xcXFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFxcXFxcIlxcXFxcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXFxcbiAgICB9XFxcXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXFxcXFwiKFxcXFxcXFwiICsgayArIFxcXFxcXFwiKVxcXFxcXFwiKS50ZXN0KGZtdCkpIHtcXFxcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXFxcXFwiMDBcXFxcXFxcIiArIG9ba10pLnN1YnN0cigoXFxcXFxcXCJcXFxcXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gZm10O1xcXFxufTtcXFxcblxcXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxcXG4gICAgaWYgKCFzaXplKSB7XFxcXG4gICAgICAgIHJldHVybiAnJztcXFxcbiAgICB9XFxcXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXFxcbiAgICBsZXQgaSA9IDA7XFxcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcXFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxcXG4gICAgICAgIGkrKztcXFxcbiAgICB9XFxcXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXFxcbn1cXFxcbi8vbGV0IHR2aXAgPSBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJycpO1xcXFxuXFxcXG4vL2xvZyhnZXRSZXNDb2RlKCkpO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxcXG59XFxcXG5pZiAoTVlfUEFHRSA+IDEgJiYgZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpID09ICcnKSB7XFxcXG4gICAgbG9nKCfmsqHmnInkuIvkuIDpobUnKTtcXFxcbn0gZWxzZSB7XFxcXG4gICAgbGV0IHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcXFxuXFxcXG4gICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXFxcXFwibWFya2VyXFxcXFxcXCI6XFxcXFxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcXFxcXCInIDogJyc7XFxcXG5cXFxcbiAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcXFxuICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIGJvZHk6ICd7XFxcXFxcXCJzaGFyZV9pZFxcXFxcXFwiOlxcXFxcXFwiJyArIHNoYXJlSWQgKyAnXFxcXFxcXCIsXFxcXFxcXCJwYXJlbnRfZmlsZV9pZFxcXFxcXFwiOlxcXFxcXFwiJyArIGdldFJlc0NvZGUoKS5zcGxpdCgnPz8/JylbMF0gKyAnXFxcXFxcXCIsXFxcXFxcXCJsaW1pdFxcXFxcXFwiOjEwMCxcXFxcXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFxcXFxcIixcXFxcXFxcImltYWdlX3VybF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJpbWFnZVxcXFxcXFxcL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFxcXFxcIixcXFxcXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJ2aWRlby9zbmFwc2hvdCx0XzEwMDAsZl9qcGcsYXJfYXV0byx3XzMwMFxcXFxcXFwiLFxcXFxcXFwib3JkZXJfYnlcXFxcXFxcIjpcXFxcXFxcIm5hbWVcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2RpcmVjdGlvblxcXFxcXFwiOlxcXFxcXFwiQVNDXFxcXFxcXCInICsgbmV4dCArICd9JyxcXFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICB9KTtcXFxcbiAgICAvL2xvZyhyZXNjb2QpO1xcXFxuICAgIGlmIChKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXIpIHtcXFxcbiAgICAgICAgbGV0IG1hcmtlciA9IEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcjtcXFxcbiAgICAgICAgaWYgKG1hcmtlci5sZW5ndGggPiAxMCkge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoJ25leHRwYWdlJywgbWFya2VyKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgdmFyIGNvbnRzID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zO1xcXFxuICAgIHZhciB6aW11bGlzdCA9IFtdO1xcXFxuICAgIGNvbnRzLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgIGlmIChjb25maWcuc3Vicy5pbmNsdWRlcyhpdGVtLmZpbGVfZXh0ZW5zaW9uKSkge1xcXFxuICAgICAgICAgICAgemltdWxpc3QucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgZXh0OiBpdGVtLmZpbGVfZXh0ZW5zaW9uLFxcXFxuICAgICAgICAgICAgICAgIGZpbGVfaWQ6IGl0ZW0uZmlsZV9pZCxcXFxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUucmVwbGFjZSgnLicgKyBpdGVtLmZpbGVfZXh0ZW5zaW9uLCAnJylcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHZhciB0dWlzb25nID0gW107XFxcXG4gICAgZm9yICh2YXIgaSBpbiBjb250cykge1xcXFxuICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXFxcbiAgICAgICAgaWYgKGxpc3R5cCAhPSAnZm9sZGVyJykge1xcXFxuICAgICAgICAgICAgdmFyIHppbXUgPSB7fTtcXFxcbiAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxcXG4gICAgICAgICAgICB2YXIgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgdmFyIG5hbWUgPSBmbmFtZS5yZXBsYWNlKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uLCAnJyk7XFxcXG5cXFxcbiAgICAgICAgICAgIHZhciBpZHggPSB6aW11bGlzdC5maW5kSW5kZXgoeCA9PiBuYW1lLmluY2x1ZGVzKHgubmFtZSkpO1xcXFxuICAgICAgICAgICAgaWYgKGlkeCAhPT0gLTEgJiYgIWNvbmZpZy5zdWJzLmluY2x1ZGVzKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uKSkge1xcXFxuICAgICAgICAgICAgICAgIHppbXVsaXN0LnNwbGljZShpZHgsIDEpO1xcXFxuICAgICAgICAgICAgICAgIHppbXUgPSB6aW11bGlzdFtpZHhdO1xcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcXFxuICAgICAgICAgICAgdmFyIGZuYW1lID0gY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgIGlmIChjYXRlID09ICd2aWRlbycpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICdkb2MnKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk5YnICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/CflrwnICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnemlwJykge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGNvbnRzW2ldLm5hbWVcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgdmFyIGxvbmdjID0gW107XFxcXG4gICAgICAgICAgICBsZXQgc3VibmFtZSA9IHN0b3JhZ2UwLmdldE15VmFyKCdtb3VudHppbXUnLCAnJyk7XFxcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoY29udHNbaV0uZmlsZV9leHRlbnNpb24pKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBjb250c1tpXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgem0gPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dDogaXRlbS5maWxlX2V4dGVuc2lvbixcXFxcbiAgICAgICAgICAgICAgICAgICAgZmlsZV9pZDogaXRlbS5maWxlX2lkLFxcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUucmVwbGFjZSgnLicgKyBpdGVtLmZpbGVfZXh0ZW5zaW9uLCAnJylcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgbG9uZ2MgPSBbe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmjILovb3lrZfluZU6IFxcXFxcXFwiICsgKHN1Ym5hbWUgPT0gJycgPyAn5pegJyA6IHN1Ym5hbWUubmFtZSsnLicrc3VibmFtZS5leHQpLFxcXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoem0pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdtb3VudHppbXUnLCB6bSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oyC6L295a6M5oiQ77yM5b2T5YmN5a2X5bmV5paH5Lu2OiAnICsgem0ubmFtZSsnLicrem0uZXh0O1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCB6bSksXFxcXG4gICAgICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgbG9uZ2MgPSBbe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLlvZPliY3mjILovb3lrZfluZU6IFxcXFxcXFwiICsgKHN1Ym5hbWUgPT0gJycgPyAn5pegJyA6IHN1Ym5hbWUubmFtZSsnLicrc3VibmFtZS5leHQpLFxcXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICB9XTtcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJChjb250c1tpXS5maWxlX2lkKS5sYXp5UnVsZSgoc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuLHppbXUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hbGlsYXp5XFxcXFxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlLHppbXUpO1xcXFxuICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbix6aW11KSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBmb3JtYXREYXRlKGNvbnRzW2ldLnVwZGF0ZWRfYXQpICsgJyAgJyArIGZvcm1hdFNpemUoY29udHNbaV0uc2l6ZSksXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogbG9uZ2NcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScgKyBjb250c1tpXS5maWxlX2lkICsgJz8/P2Z5cGFnZScpLnJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIHB1c2huYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3J1bGVsb29wJywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgfSAvL2VuZCBpZlxcXFxuXFxcXG4gICAgfVxcXFxufVxcXFxuc2V0UmVzdWx0KGl0ZW1zKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLpmL/ph4zmjqjpgIFcXFwiLFxcXCJwYXRoXFxcIjpcXFwicHVzaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbi8vbG9nKE1ZX1VSTCk7XFxcXG52YXIgaXRlbXMgPSBbXTtcXFxcbnZhciByZWFsdXJsID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdLnNwbGl0KCc/Pz8nKVswXTtcXFxcbmlmIChkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJ3d3dy5hbGl5dW5kcml2ZScpICYmICFyZWFsdXJsLmluY2x1ZGVzKCclM0IlN0InKSkge1xcXFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3NoYXJpZCcsIHt9KSkucnVsZSlcXFxcbn1cXFxcbnNldFJlc3VsdChpdGVtcyk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi55m75b2VXFxcIixcXFwicGF0aFxcXCI6XFxcImxvZ2luXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmxldCB1cmwgPSAnaHR0cHM6Ly9hdXRoLmFsaXl1bmRyaXZlLmNvbS92Mi9vYXV0aC9hdXRob3JpemU/bG9naW5fdHlwZT1jdXN0b20mcmVzcG9uc2VfdHlwZT1jb2RlJnJlZGlyZWN0X3VyaT1odHRwcyUzQSUyRiUyRnd3dy5hbGl5dW5kcml2ZS5jb20lMkZzaWduJTJGY2FsbGJhY2smY2xpZW50X2lkPTI1ZHpYM3ZiWXFrdFZ4eVgmc3RhdGU9JTdCJTIyb3JpZ2luJTIyJTNBJTIyKiUyMiU3RCMvbG9naW4nO1xcXFxudmFyIGpzID0gJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgY29uc3QgdG9rZW5GdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgdG9rZW4gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpKVxcXFxuICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udXNlcl9pZCkge1xcXFxuICAgICAgICAgICAgbGV0IHRva2VuX3VybCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0pvZS9hbGkuanNvbic7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZSh0b2tlbl91cmwsIEpTT04uc3RyaW5naWZ5KHRva2VuKSk7XFxcXG4gICAgICAgICAgICBsZXQgaWN5ID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2ljeS9pY3ktYWxpLXRva2VuLmpzb25cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCBhID0gZnlfYnJpZGdlX2FwcC5mZXRjaChpY3kpO1xcXFxuICAgICAgICAgICAgaWYgKCFhIHx8IGEgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGxldCBiID0gW107XFxcXG4gICAgICAgICAgICAgICAgYi5wdXNoKHRva2VuKTtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShpY3ksIEpTT04uc3RyaW5naWZ5KGIpKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKHRydWUpO1xcXFxuICAgICAgICAgICAgYWxlcnQoJ1RPS0VO6I635Y+W5oiQ5Yqf77yM6K+35Yu/5rOE5ryP5Liq5Lq66ZqQ56eB77yB5omL5Yqo6YCA5Ye66K+l6aG16Z2i5ZCO5Yi35paw6YeN6K+V5Y2z5Y+v77yBJyk7XFxcXG4gICAgICAgICAgICByZXR1cm47XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB0b2tlbl90aW1lcigpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHZhciB0b2tlbl90aW1lciA9IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICBzZXRUaW1lb3V0KHRva2VuRnVuY3Rpb24sIDMwMClcXFxcbiAgICB9O1xcXFxuICAgIHRva2VuX3RpbWVyKCk7XFxcXG4gICAgdG9rZW5GdW5jdGlvbigpO1xcXFxufSlcXFxcbmQucHVzaCh7XFxcXG4gICAgdXJsOiB1cmwsXFxcXG4gICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXFxcXG4gICAgZGVzYzogJzEwMCUmJmZsb2F0JyxcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBjYW5CYWNrOiB0cnVlLFxcXFxuICAgICAgICBqczoganNcXFxcbiAgICB9XFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInRpdGxlIjoi55m75b2V6Zi/6YeM5LqR55uYIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement