Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥冰属性男子和酷酷女同事-妹妹登场!滑雪场的圣诞节@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImFwaVwiLFwicGF0aFwiOlwiYXBpXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMuZ2V0RmVlZCA9IGZ1bmN0aW9uKCkge1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2luZGV4L3RvcC9mZWVkL3JjbWRcXFwiXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QodSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pKVxcbiAgICByZXR1cm4gcmVzLmRhdGEuaXRlbVxcbn1cXG4kLmV4cG9ydHMuZ2V0VXNlckluZm8gPSBmdW5jdGlvbigpIHtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFwiXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KHUsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmRhdGFcXG59XFxuJC5leHBvcnRzLmdldFVybCA9IGZ1bmN0aW9uKGF2aWQsIGNpZCwgcW4pIHtcXG4gICAgbGV0IHUgPSByZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3BsYXllci9wbGF5dXJsXFxcIiwge1xcbiAgICAgICAgXFxcImF2aWRcXFwiOiBhdmlkLFxcbiAgICAgICAgXFxcImNpZFxcXCI6IGNpZCxcXG4gICAgICAgIFxcXCJxblxcXCI6IHFuLFxcbiAgICAgICAgXFxcImZvdXJrXFxcIjogMVxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh1KS5kYXRhXFxufVxcbiQuZXhwb3J0cy5nZXRIaXN0b3J5ID0gZnVuY3Rpb24ocGFnZSkge1xcbiAgICBsZXQgdSA9IGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnlcXFwiLCB7XFxuICAgICAgICBcXFwicG5cXFwiOiBwYWdlLFxcbiAgICAgICAgXFxcInBzXFxcIjogMjBcXG4gICAgfSlcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmRhdGFcXG59XFxuJC5leHBvcnRzLnJlcG9ydFByb2Nlc3MgPSBmdW5jdGlvbihhdmlkLCBjaWQpIHtcXG4gICAgbGV0IGNzcmYgPSByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXVxcbiAgICBsZXQgcmVzID0gcG9zdChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9oaXN0b3J5L3JlcG9ydFxcXCIsIHtcXG4gICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICBcXFwiYWlkXFxcIjogYXZpZCxcXG4gICAgICAgICAgICBcXFwiY2lkXFxcIjogY2lkLFxcbiAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgICAgICAgICBcXFwicHJvZ3Jlc3NcXFwiOiAwXFxuICAgICAgICB9LFxcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cXG4kLmV4cG9ydHMuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbihpZCwgc29ydGJ5LCBwYWdlKSB7XFxuICAgIGxldCB1ID0gYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvcmVwbHlcXFwiLCB7XFxuICAgICAgICBcXFwidHlwZVxcXCI6IDEsXFxuICAgICAgICBcXFwib2lkXFxcIjogaWQsXFxuICAgICAgICBcXFwicG5cXFwiOiBwYWdlLFxcbiAgICAgICAgXFxcInNvcnRcXFwiOiBzb3J0YnkgPT0gXFxcIueDreW6plxcXCIgPyAxIDogMFxcbiAgICB9KVxcbiAgICBsZXQgcmVzID0gcmVxdWVzdCh1LCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgQ29va2llOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuZGF0YS5yZXBsaWVzXFxufVxcbiQuZXhwb3J0cy51cFZpZGVvcyA9IGZ1bmN0aW9uKG1pZCwgcGFnZSkge1xcbiAgICBsZXQgdmlkZW9zID0gcmVxdWVzdChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYXJjL3NlYXJjaD9taWQ9XFxcIiArIG1pZCArIFxcXCImcG49XFxcIiArIHBhZ2UsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh2aWRlb3MpXFxufVxcbiQuZXhwb3J0cy5nZXRzbGlzdCA9IGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzP2pzb25wPWpzb25wXFxcIiwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhXFxufVxcbiQuZXhwb3J0cy5nZXRTdWJzcmliZXMgPSBmdW5jdGlvbihpZCwgcGFnZSkge1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWc/cG49XFxcIiArIHBhZ2UgKyBcXFwiJnBzPTIwJmpzb25wPWpzb25wJnRhZ2lkPVxcXCIgKyBpZFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdCh1LCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIilcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhXFxufVxcbiQuZXhwb3J0cy5nZXRmYXZ0ZWFtID0gZnVuY3Rpb24oKSB7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YzL2Zhdi9mb2xkZXIvbGlzdDRuYXZpZ2F0ZVxcXCIsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YVxcbn1cXG4kLmV4cG9ydHMuZ2V0RmF2b3VyID0gZnVuY3Rpb24oaWQsIHBhZ2UpIHtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L3Jlc291cmNlL2xpc3Q/bWVkaWFfaWQ9XFxcIiArIGlkICsgXFxcIiZwbj1cXFwiICsgcGFnZSArIFxcXCImcHM9MjAmb3JkZXI9bXRpbWUmdHlwZT0wJnRpZD0wXFxcIlxcbiAgICBsZXQgcmVzID0gcmVxdWVzdCh1LCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIilcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhXFxufVxcbiQuZXhwb3J0cy5nZXRNb3ZpZXMgPSBmdW5jdGlvbih0eXBlLCBiZWZvcmUsIGFmdGVyKSB7XFxuICAgIGxldCB1ID0gYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy93ZWIvdGltZWxpbmVcXFwiLCB7XFxuICAgICAgICBcXFwidHlwZXNcXFwiOiB0eXBlLFxcbiAgICAgICAgXFxcImJlZm9yZVxcXCI6IGJlZm9yZSxcXG4gICAgICAgIFxcXCJhZnRlclxcXCI6IGFmdGVyXFxuICAgIH0pXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QodSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KSlcXG4gICAgcmV0dXJuIHJlcy5yZXN1bHRcXG59XFxuJC5leHBvcnRzLmxhenkgPSBmdW5jdGlvbihpZCwgY2lkLCBxbikge1xcbiAgICBsZXQgZCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFVybChpZCwgY2lkLCBxbilcXG4gICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikucmVwb3J0UHJvY2VzcyhpZCwgY2lkKVxcbiAgICBsZXQgdSA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIFxcXCJ1cmxzXFxcIjogW2QuZHVybFswXS51cmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiXSxcXG4gICAgICAgIFxcXCJoZWFkZXJzXFxcIjogW3tcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFwiLFxcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgIH1dLFxcbiAgICAgICAgXFxcImRhbm11XFxcIjogYGh0dHBzOi8vY29tbWVudC5iaWxpYmlsaS5jb20vJHtjaWR9LnhtbGAsXFxuICAgICAgICBcXFwiZXh0cmFcXFwiOiB7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogY2lkXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHJldHVybiB1XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clwiLFwibmFtZVwiOlwi6KeG6aKR6K+m5oOFXCIsXCJwYXRoXCI6XCJkZXRhaWxcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudHJ5IHtcXG4gICAgdmFyIGlkID0gTVlfUEFSQU1TLmlkICsgXFxcIlxcXCJcXG4gICAgdmFyIGNpZCA9IE1ZX1BBUkFNUy5jaWQgKyBcXFwiXFxcIlxcbiAgICB2YXIgYnZpZCA9IE1ZX1BBUkFNUy5idmlkXFxuICAgIC8v6KeG6aKR5L+h5oGvXFxuICAgIHZhciByID0gcmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXdcXFwiLCB7XFxuICAgICAgICBcXFwiYWlkXFxcIjogaWRcXG4gICAgfSkpXFxuICAgIGxldCBsID0gSlNPTi5wYXJzZShyKS5kYXRhXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogbC50aXRsZSxcXG4gICAgICAgIGltZzogbC5waWMsXFxuICAgICAgICBkZXNjOiBsLmRlc2MsXFxuICAgICAgICB1cmw6ICQoKS5ydWxlKChpbmZvKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHN0YXQgPSBpbmZvLnN0YXRcXG4gICAgICAgICAgICBsZXQgaW5mb3MgPSBgYXblj7fvvJoke2luZm8uYWlkfVxcXFxuYnblj7fvvJoke2luZm8uYnZpZH1cXFxcbuaSreaUvumHj++8miR7c3RhdC52aWV3fVxcXFxu54K56LWe77yaJHtzdGF0Lmxpa2V9XFxcXG7mipXluIHvvJoke3N0YXQuY29pbn1cXFxcbuaUtuiXj++8miR7c3RhdC5mYXZvcml0ZX1cXFxcblxcXFxuJHtpbmZvLmRlc2N9YFxcbiAgICAgICAgICAgIHNldFJlc3VsdChbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaW5mb3MsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIlxcbiAgICAgICAgICAgIH1dKVxcbiAgICAgICAgfSwgbCksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGdyYWRpZW50OiB0cnVlXFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBsLm93bmVyLm5hbWUsXFxuICAgICAgICBpbWc6IGwub3duZXIuZmFjZSxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cHM/bWlkPVxcXCIgKyBsLm93bmVyLm1pZCArIFxcXCImcD1meXBhZ2UjaW1tZXJzaXZlVGhlbWUjXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICB9LCB7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgIH0pXFxuICAgIC8v6KeG6aKR5pON5L2cXFxuICAgIGZ1bmN0aW9uIGNvbG9yKHRleHQsIGNvbG9yKSB7XFxuICAgICAgICB0ZXh0ICs9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbiAgICB9XFxuICAgIGxldCBzdGF0ID0gbC5zdGF0XFxuICAgIGxldCBsaWtlID0gc3RhdC5saWtlXFxuICAgIGxldCBjb2luID0gc3RhdC5jb2luXFxuICAgIGxldCBmYXZvdXJpdGUgPSBzdGF0LmZhdm9yaXRlXFxuICAgIGxldCBoYXNMaWtlID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvYXJjaGl2ZS9oYXMvbGlrZVxcXCIsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBpZFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhID09IDFcXG4gICAgbGV0IGhhc0NvaW4gPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9hcmNoaXZlL2NvaW5zXFxcIiwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGlkXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIilcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGEubXVsdGlwbHkgIT0gMFxcbiAgICBsZXQgaGFzRmF2b3VyID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2Zhdi92aWRlby9mYXZvdXJlZFxcXCIsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBpZFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhLmZhdm91cmVkXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogKGhhc0xpa2UgPyBjb2xvcihsaWtlLCBcXFwiI0ZBNzI5OFxcXCIpIDogbGlrZSksXFxuICAgICAgICBpbWc6IFxcXCJodHRwczovL2docHJveHkuY29tL2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Tb2NpYWxTaXN0ZXJZaS9iaWxpYmlsaS1BUEktY29sbGVjdC9tYXN0ZXIvaW1ncy9saWtlLnN2Z1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQsIGhhc0xpa2UpID0+IHtcXG4gICAgICAgICAgICBsZXQgY3NyZiA9IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIikubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdXFxuICAgICAgICAgICAgbGV0IHJlcyA9IHBvc3QoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9hcmNoaXZlL2xpa2VcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJhaWRcXFwiOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJsaWtlXFxcIjogKGhhc0xpa2UgPyAyIDogMSksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgKGhhc0xpa2UgPyBcXFwi5Y+W5raI54K56LWeXFxcIiA6IFxcXCLngrnotZ7miJDlip9cXFwiKVxcbiAgICAgICAgfSwgaWQsIGhhc0xpa2UpXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAoaGFzQ29pbiA/IGNvbG9yKGNvaW4sIFxcXCIjRkE3Mjk4XFxcIikgOiBjb2luKSxcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1NvY2lhbFNpc3RlcllpL2JpbGliaWxpLUFQSS1jb2xsZWN0L21hc3Rlci9pbWdzL2NvaW4uc3ZnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIHVybDogJChbXFxcIjFcXFwiLCBcXFwiMlxcXCJdLCAyLCBcXFwi5oqV5biB5pWw6YePXFxcIikuc2VsZWN0KChpZCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjc3JmID0gcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV1cXG4gICAgICAgICAgICBsZXQgcmVzID0gcG9zdChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2NvaW4vYWRkXFxcIiwge1xcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiYWlkXFxcIjogaWQsXFxuICAgICAgICAgICAgICAgICAgICBcXFwibXVsdGlwbHlcXFwiOiBpbnB1dCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aKleS6hlxcXCIgKyBpbnB1dCArIFxcXCLkuKrluIFcXFwiXFxuICAgICAgICB9LCBpZClcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IChoYXNGYXZvdXIgPyBjb2xvcihmYXZvdXJpdGUsIFxcXCIjRkE3Mjk4XFxcIikgOiBmYXZvdXJpdGUpLFxcbiAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9naHByb3h5LmNvbS9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vU29jaWFsU2lzdGVyWWkvYmlsaWJpbGktQVBJLWNvbGxlY3QvbWFzdGVyL2ltZ3MvZmF2LnN2Z1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQsIGhhc0Zhdm91cikgPT4ge1xcbiAgICAgICAgICAgIGxldCBib2R5ID0gaGFzRmF2b3VyID8ge1xcbiAgICAgICAgICAgICAgICBcXFwicmlkXFxcIjogaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMixcXG4gICAgICAgICAgICAgICAgXFxcImRlbF9tZWRpYV9pZHNcXFwiOiAwLFxcbiAgICAgICAgICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgICAgICAgICB9IDoge1xcbiAgICAgICAgICAgICAgICBcXFwicmlkXFxcIjogaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMixcXG4gICAgICAgICAgICAgICAgXFxcImFkZF9tZWRpYV9pZHNcXFwiOiAwLFxcbiAgICAgICAgICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGNzcmYgPSByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXVxcbiAgICAgICAgICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS9tZWRpYWxpc3QvZ2F0ZXdheS9jb2xsL3Jlc291cmNlL2RlYWxcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyAoaGFzRmF2b3VyID8gXFxcIuWPlua2iOaUtuiXj1xcXCIgOiBcXFwi5pS26JeP5oiQ5YqfXFxcIilcXG4gICAgICAgIH0sIGlkLCBoYXNGYXZvdXIpXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6K+E6K66XFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXCIsXFxuICAgICAgICBpbWc6IFxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS80MS5wbmdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBcXFwiaWRcXFwiOiBpZFxcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICAvL+iOt+WPluinhumikeWIhlDkv6Hmga9cXG4gICAgdmFyIHAgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcGxheWVyL3BhZ2VsaXN0XFxcIiwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGlkXFxuICAgIH0pKSkuZGF0YVxcbiAgICBpZiAocC5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgLy/op4bpopHpk77mjqVcXG4gICAgICAgIGxldCBhID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0VXJsKGlkLCBjaWQsIDEyMClcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmmbrog73mkq3mlL5cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGlkLCBjaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmxhenkoaWQsIGNpZCwgMTIwKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKVxcbiAgICAgICAgICAgIH0sIGlkLCBjaWQpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJsb25nQ2xpY2tcXFwiOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmjqjpgIFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGlkLCBjaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vSm9lL1RWYm94LmpzXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g5o6o6YCBdHZib3goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcXFwi5o6o6YCBIGJ5IEpvZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvZDogW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFxcXCJiaWxpYmlsaVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiBKU09OLnBhcnNlKCQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmxhenkoaWQsIGNpZCwgMTIwKS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKSkudXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSwgaWQsIGNpZClcXG4gICAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJxblxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgYS5zdXBwb3J0X2Zvcm1hdHMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uZXdfZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgY2lkLCBxbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmxhenkoaWQsIGNpZCwgcW4pLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpXFxuICAgICAgICAgICAgICAgIH0sIGlkICsgXFxcIlxcXCIsIGNpZCArIFxcXCJcXFwiLCBpdGVtLnF1YWxpdHkgKyBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnBhcnQsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgY2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGF6eShpZCwgY2lkLCAxMjApLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpXFxuICAgICAgICAgICAgICAgIH0sIGlkLCBpdGVtLmNpZCArIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImNpZFxcXCI6IGl0ZW0uY2lkLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImlkXFxcIjogaWQsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiYnZpZFxcXCI6IGJ2aWRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB0b2FzdChcXFwi56iL5bqP5Ye6546w6Zeu6aKY77yM6K+35omT5byA5pel5b+X5p+l55yLXFxcIilcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aG1XCIsXCJwYXRoXCI6XCJob21lcGFnZVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICBjb25zdCB7XFxuICAgICAgICBnZXRGZWVkLFxcbiAgICAgICAgZ2V0VXNlckluZm9cXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpXFxuICAgIGlmIChmaWxlRXhpc3QoXFxcIkNvb2tpZS50eHRcXFwiKSkge1xcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgIGxldCBpID0gZ2V0VXNlckluZm8oKVxcbiAgICAgICAgICAgIGQudW5zaGlmdCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpLnVuYW1lLFxcbiAgICAgICAgICAgICAgICBpbWc6IGkuZmFjZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXNlckluZm9cXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImRhdGFcXFwiOiBpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbG9yKHRleHQsIGNvbG9yKSB7XFxuICAgICAgICAgICAgICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgY29sb3IgKyBcXFwiJz5cXFwiICsgdGV4dCArIFxcXCI8L2ZvbnQ+XFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHRhYnMgPSB7XFxuICAgICAgICAgICAgICAgIFxcXCLmjqjojZBcXFwiOiBcXFwiaGlrZXI6Ly9pbWFnZXMvY29sbGVjdGlvblxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCLliIbnsbtcXFwiOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzY5LnN2Z1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCLmlrDnlapcXFwiOiBcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzg0LnN2Z1xcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCLmiJHnmoRcXFwiOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbjNcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRhYnMpLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbVswXSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaXRlbVsxXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCh0YWIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwibW9kZVxcXCIsIHRhYilcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwgaXRlbVswXSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fcm91bmRfc21hbGxfNFxcXCJcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IG1vZGUgPSBnZXRNeVZhcihcXFwibW9kZVxcXCIsIFxcXCLmjqjojZBcXFwiKVxcbiAgICAgICAgaWYgKG1vZGUgPT0gXFxcIuaOqOiNkFxcXCIpIHtcXG4gICAgICAgICAgICBnZXRGZWVkKCkuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShpdGVtKVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0ucGljLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogaXRlbS5zdGF0LnZpZXcgKyBcXFwi5pKt5pS+4oC7XFxcIiArIGl0ZW0uc3RhdC5saWtlICsgXFxcIueCuei1nlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsI2dhbWVUaGVtZSNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBpdGVtLmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJidmlkXFxcIjogaXRlbS5idmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBpdGVtLmNpZFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gXFxcIuaIkeeahFxcXCIpIHtcXG4gICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoXFxcIndkXFxcIiwgXFxcImhpc3RvcnlcXFwiKSA9PSBcXFwiaGlzdG9yeVxcXCIgPyBjb2xvcihcXFwi6KeC55yL5Y6G5Y+yXFxcIiwgXFxcInJlZFxcXCIpIDogXFxcIuingueci+WOhuWPslxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIndkXFxcIiwgXFxcImhpc3RvcnlcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIlxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoXFxcIndkXFxcIiwgXFxcImhpc3RvcnlcXFwiKSA9PSBcXFwiZmF2XFxcIiA/IGNvbG9yKFxcXCLmlLbol49cXFwiLCBcXFwicmVkXFxcIikgOiBcXFwi5pS26JePXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwid2RcXFwiLCBcXFwiZmF2XFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCJcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKFxcXCJ3ZFxcXCIsIFxcXCJoaXN0b3J5XFxcIikgPT0gXFxcInN1YlxcXCIgPyBjb2xvcihcXFwi5YWz5rOoXFxcIiwgXFxcInJlZFxcXCIpIDogXFxcIuWFs+azqFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIndkXFxcIiwgXFxcInN1YlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcihcXFwid2RcXFwiLCBcXFwiaGlzdG9yeVxcXCIpID09IFxcXCJoaXN0b3J5XFxcIikge1xcbiAgICAgICAgICAgICAgICBjb25zdCB7XFxuICAgICAgICAgICAgICAgICAgICBnZXRIaXN0b3J5XFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKVxcbiAgICAgICAgICAgICAgICBnZXRIaXN0b3J5KE1ZX1BBR0UpLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5waWMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGl0ZW0uYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiYnZpZFxcXCI6IGl0ZW0uYnZpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNpZFxcXCI6IGl0ZW0uY2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdldE15VmFyKFxcXCJ3ZFxcXCIsIFxcXCJoaXN0b3J5XFxcIikgPT0gXFxcImZhdlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRlYW1zID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0ZmF2dGVhbSgpWzBdLm1lZGlhTGlzdFJlc3BvbnNlLmxpc3RcXG4gICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdGVhbXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKFxcXCJmYXZvXFxcIiwgdGVhbXNbMF0uaWQgKyBcXFwiXFxcIikgPT0gaXRlbS5pZCA/IGNvbG9yKGl0ZW0udGl0bGUsIFxcXCJyZWRcXFwiKSA6IGl0ZW0udGl0bGUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJmYXZvXFxcIiwgaWQgKyBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXRlbS5pZClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRGYXZvdXIoZ2V0TXlWYXIoXFxcImZhdm9cXFwiLCB0ZWFtc1swXS5pZCArIFxcXCJcXFwiKSwgTVlfUEFHRSkubWVkaWFzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5jb3ZlcixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsI2dhbWVUaGVtZSNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGl0ZW0uaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBpdGVtLnVnYy5maXJzdF9jaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJidmlkXFxcIjogaXRlbS5idmlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRzbGlzdCgpLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChnZXRNeVZhcihcXFwic3ViXFxcIiwgXFxcIjBcXFwiKSA9PSBpdGVtLnRhZ2lkID8gY29sb3IoaXRlbS5uYW1lLCBcXFwicmVkXFxcIikgOiBpdGVtLm5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzdWJcXFwiLCBpZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXRlbS50YWdpZCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRTdWJzcmliZXMoZ2V0TXlWYXIoXFxcInN1YlxcXCIsIFxcXCIwXFxcIiksIE1ZX1BBR0UpLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnVuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5mYWNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cHM/bWlkPVxcXCIgKyBpdGVtLm1pZCArIFxcXCImcD1meXBhZ2UjaW1tZXJzaXZlVGhlbWUjXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFxcXCLmlrDnlapcXFwiKSB7XFxuICAgICAgICAgICAgdmFyIHRhYnMgPSB7XFxuICAgICAgICAgICAgICAgIFxcXCLnlarliadcXFwiOiAxLFxcbiAgICAgICAgICAgICAgICBcXFwi55S15b2xXFxcIjogMyxcXG4gICAgICAgICAgICAgICAgXFxcIuWbveWIm1xcXCI6IDRcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0YWJzKS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKFxcXCJqdWppXFxcIiwgXFxcIueVquWJp1xcXCIpID09IGl0ZW0gPyBjb2xvcihpdGVtLCBcXFwicmVkXFxcIikgOiBpdGVtKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwianVqaVxcXCIsIGEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouaIkOWKn1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpdGVtKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBsZXQgZGF5cyA9IDdcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXlzICsgMTsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcImZyb21cXFwiLCBcXFwiMVxcXCIpID09IGkgKyBcXFwiXFxcIiA/IGNvbG9yKGkgKyBcXFwi5aSp5YmNXFxcIiwgXFxcInJlZFxcXCIpIDogaSArIFxcXCLlpKnliY1cXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZnJvbVxcXCIsIGkgKyBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGRheXM7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKFxcXCJ0b1xcXCIsIFxcXCIxXFxcIikgPT0gaSArIFxcXCJcXFwiID8gY29sb3IoaSArIFxcXCLlpKnlkI5cXFwiLCBcXFwicmVkXFxcIikgOiBpICsgXFxcIuWkqeWQjlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ0b1xcXCIsIGkgKyBcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRNb3ZpZXModGFic1tnZXRNeVZhcihcXFwianVqaVxcXCIsIFxcXCLnlarliadcXFwiKV0sIGdldE15VmFyKFxcXCJmcm9tXFxcIiwgXFxcIjFcXFwiKSwgZ2V0TXlWYXIoXFxcInRvXFxcIiwgXFxcIjFcXFwiKSkuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZGF0ZSArIFxcXCIg5ZGoXFxcIiArIGl0ZW0uZGF5X29mX3dlZWssXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5lcGlzb2Rlcy5mb3JFYWNoKGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGkuY292ZXIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9kZXRhaWxhI2dhbWVUaGVtZSNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInNzaWRcXFwiOiBpLnNlYXNvbl9pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJlcGlkXFxcIjogaS5lcGlzb2RlX2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPSBcXFwi5YiG57G7XFxcIikge1xcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2NhdFxcXCIpKS5ydWxlKVxcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaWYgKGdldEl0ZW0oXFxcImZzXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgYSA9IFtdXFxuICAgICAgICAgICAgbGV0IHRpbWUgPSAxMFxcbiAgICAgICAgICAgIGEucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBgICAgICAgICAgICAgICAgICAgICAg5L2/55So5YmN6aG755+lXFxu5pys6KeE5YiZ6LCD55SoaHR0cHM6Ly9naXRodWIuY29tL1NvY2lhbFNpc3RlcllpL2JpbGliaWxpLUFQSS1jb2xsZWN055qEYXBp77yM5omA5pyJ5Luj56CB5YWo6YOo5byA5rqQ77yM5bm25LiU5LiN5a2Y5Zyo5LiK5Lyg55So5oi35L+h5oGv55qE6KGM5Li6XFxu5pys6KeE5YiZ5Li65a2m5Lmg55uu55qE77yM6K+35LqO5a+85YWlMjTlsI/ml7blhoXliKDpmaTvvIHvvIHvvIEgICAgICAgICAgICAgICAgICAgICAgICBcXG7lvIDlp4vkvb/nlKjmnKzop4TliJnljbPku6PooajpgbXlrojop4TliJkgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgIGAsXFxuICAgICAgICAgICAgICAgIFxcXCJjb2xfdHlwZVxcXCI6IFxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJ0ZXh0XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGltZSArIFxcXCLnp5LlkI7nu6fnu61cXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogXFxcInRpbWVyXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBzZXRSZXN1bHQoYSlcXG4gICAgICAgICAgICB3aGlsZSAodGltZSAhPSAwKSB7XFxuICAgICAgICAgICAgICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoMTAwMClcXG4gICAgICAgICAgICAgICAgdGltZSAtPSAxXFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcInRpbWVyXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpbWUgKyBcXFwi56eS5ZCO57un57utXFxcIlxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB1cGRhdGVJdGVtKFxcXCJ0aW1lclxcXCIsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmiJHlt7Lnn6XmmZNcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJmc1xcXCIsIFxcXCIxXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kvaDlt7Lnoa7orqRcXFwiXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbG9naW5cXFwiKVxcbiAgICAgICAgfVxcbiAgICB9XFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Y2VudGVyPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICM5OTk5OTlcXFwiPu+9nu+9nu+9nuaIkeaYr+acieW6lee6v+eahO+9nu+9nu+9njwvc3Bhbj48L3NtYWxsPjwvY2VudGVyPicsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJpY29uXzJfcm91bmRcIixcIm5hbWVcIjpcIueUqOaIt+ivpuaDhVwiLFwicGF0aFwiOlwidXNlckluZm9cIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxubGV0IGluZm8gPSBNWV9QQVJBTVMuZGF0YVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBpbmZvLnVuYW1lLFxcbiAgICBpbWc6IGluZm8uZmFjZSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG59LCB7XFxuICAgIHRpdGxlOiBcXFwi5rOo6ZSAXFxcIixcXG4gICAgdXJsOiAkKFxcXCLnoa7orqTms6jplIDnmbvpmYbvvJ9cXFwiKS5jb25maXJtKCgpID0+IHtcXG4gICAgICAgIGRlbGV0ZUZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgYmFjaygpXFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0pLFxcbiAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy/lvIDlhbNcXFwiXFxufSlcXG5pZiAoaW5mby5pc0xvZ2luICE9IGZhbHNlKSB7XFxuICAgIGxldCBsZXZlbCA9IGluZm8ubGV2ZWxfaW5mb1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGDlvZPliY0ke2xldmVsLmN1cnJlbnRfbGV2ZWx957qn77yM57uP6aqMJHtsZXZlbC5jdXJyZW50X2V4cH1cXFxcbui3neemuyR7bGV2ZWwuY3VycmVudF9sZXZlbCsxfee6p++8jOi/mOW3riR7bGV2ZWwubmV4dF9leHAtbGV2ZWwuY3VycmVudF9leHB9XFxcXG7noazluIHvvJoke2luZm8ubW9uZXl95LiqYCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIlxcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzJcIixcIm5hbWVcIjpcIueZu+mZhlwiLFwicGF0aFwiOlwibG9naW5cIixcInJ1bGVcIjpcImxldCBkID0gW11cXG5sZXQgayA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaHR0cDovL3Bhc3Nwb3J0LmJpbGliaWxpLmNvbS94L3Bhc3Nwb3J0LWxvZ2luL3dlYi9xcmNvZGUvZ2VuZXJhdGVcXFwiKSkuZGF0YVxcbmxldCBrZXkgPSBrLnFyY29kZV9rZXlcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIueCueaIkeeZu+mZhlxcXCIsXFxuICAgIHVybDogay51cmwsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIlxcbn0sIHtcXG4gICAgdGl0bGU6IFxcXCLovpPlhaVDb29raWXnmbvpmYZcXFwiLFxcbiAgICB1cmw6ICQoXFxcIlxcXCIsIFxcXCLovpPlhaXmipPlj5bliLDnmoRDb29raWVcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcIlNFU1NEQVRBXFxcIikgJiYgaW5wdXQuaW5jbHVkZXMoXFxcImJpbGlfamN0XFxcIikpIHtcXG4gICAgICAgICAgICBzYXZlRmlsZShcXFwiQ29va2llLnR4dFxcXCIsIGlucHV0KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdG9hc3QoXFxcIuivt+i+k+WFpeato+ehrmNvb2tpZe+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCJcXG59KVxcbnNldFJlc3VsdChkKVxcbmxldCBub0xvZ2luID0gdHJ1ZVxcbnZhciBDb29raWUgPSBcXFwiXFxcIlxcbndoaWxlIChub0xvZ2luKSB7XFxuICAgIGxldCBzdGEgPSBmZXRjaENvb2tpZShidWlsZFVybChcXFwiaHR0cDovL3Bhc3Nwb3J0LmJpbGliaWxpLmNvbS94L3Bhc3Nwb3J0LWxvZ2luL3dlYi9xcmNvZGUvcG9sbFxcXCIsIHtcXG4gICAgICAgIFxcXCJxcmNvZGVfa2V5XFxcIjoga2V5XFxuICAgIH0pKVxcbiAgICBpZiAoc3RhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIEpTT04ucGFyc2Uoc3RhKS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIENvb2tpZSArPSBpdGVtLnNwbGl0KFxcXCI7XFxcIilbMF0gKyBcXFwiO1xcXCJcXG4gICAgICAgIH0pXFxuICAgICAgICBzYXZlRmlsZShcXFwiQ29va2llLnR4dFxcXCIsIENvb2tpZSlcXG4gICAgICAgIHRvYXN0KFxcXCLnmbvpmYbmiJDlip/vvIzov5Tlm57liLfmlrDljbPlj69cXFwiKVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgYnJlYWtcXG4gICAgfVxcbiAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDMwMDApXFxufVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLor4TorrpcIixcInBhdGhcIjpcIkNvbW1lbnRzXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCBpZCA9IE1ZX1BBUkFNUy5pZFxcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC51bnNoaWZ0KHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5Y+R5p2h6K+E6K665ZCnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChpZCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjc3JmID0gcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV1cXG4gICAgICAgICAgICBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL3JlcGx5L2FkZFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAxLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIm9pZFxcXCI6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIm1lc3NhZ2VcXFwiOiBpbnB1dFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICB9LCBpZClcXG4gICAgfSlcXG59XFxudmFyIHRhYnMgPSBbXFxcIueDreW6plxcXCIsIFxcXCLml7bpl7RcXFwiXVxcbnRhYnMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpdGVtLFxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwic29ydGJ5XFxcIiwgaSlcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgaXRlbSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pXFxufSlcXG5sZXQgZGF0YSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldENvbW1lbnRzKGlkLCBnZXRNeVZhcihcXFwic29ydGJ5XFxcIiwgXFxcIueDreW6plxcXCIpLCBNWV9QQUdFKVxcbmRhdGEuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpdGVtLm1lbWJlci51bmFtZSxcXG4gICAgICAgIGltZzogaXRlbS5tZW1iZXIuYXZhdGFyLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3Vwcz9taWQ9XFxcIiArIGl0ZW0ubWVtYmVyLm1pZCArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGl0ZW0uY29udGVudC5tZXNzYWdlLFxcbiAgICAgICAgZGVzYzogaXRlbS5yZXBseV9jb250cm9sLmxvY2F0aW9uICsgXFxcIiBcXFwiICsgaXRlbS5yZXBseV9jb250cm9sLnRpbWVfZGVzYyxcXG4gICAgICAgIHVybDogJCgpLnJ1bGUoKHRleHQsIG9pZCwgcnBpZCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBkID0gW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRleHQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIlxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgbGV0IHJlcGx5ID0gcmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9yZXBseS9yZXBseVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAxLFxcbiAgICAgICAgICAgICAgICBcXFwib2lkXFxcIjogb2lkLFxcbiAgICAgICAgICAgICAgICBcXFwicm9vdFxcXCI6IHJwaWRcXG4gICAgICAgICAgICB9KSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHJlcGx5KS5kYXRhLnJlcGxpZXMuZm9yRWFjaChpdGVtID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWVtYmVyLnVuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5tZW1iZXIuYXZhdGFyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cHM/bWlkPVxcXCIgKyBpdGVtLm1lbWJlci5taWQgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uY29udGVudC5tZXNzYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0ZW0ucmVwbHlfY29udHJvbC5sb2NhdGlvbiArIFxcXCIgXFxcIiArIGl0ZW0ucmVwbHlfY29udHJvbC50aW1lX2Rlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpXFxuICAgICAgICB9LCBpdGVtLmNvbnRlbnQubWVzc2FnZSwgaWQsIGl0ZW0ucnBpZCArIFxcXCJcXFwiKVxcbiAgICB9KVxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwiVVDkuLvpobVcIixcInBhdGhcIjpcInVwc1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG52YXIgbWlkID0gZ2V0UGFyYW0oXFxcIm1pZFxcXCIpXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICB2YXIgaW5mbyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS9hY2MvaW5mb1xcXCIsIHtcXG4gICAgICAgIFxcXCJtaWRcXFwiOiBtaWRcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBDb29raWU6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIilcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGFcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpbmZvLm5hbWUsXFxuICAgICAgICBpbWc6IGluZm8uZmFjZSxcXG4gICAgICAgIGRlc2M6IGluZm8uc2lnbixcXG4gICAgICAgIHVybDogJCgpLnJ1bGUoKGluZm8pID0+IHtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGluZm8sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIlxcbiAgICAgICAgICAgIH1dKVxcbiAgICAgICAgfSwgaW5mby5zaWduKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IChpbmZvLmlzX2ZvbGxvd2VkID8gXFxcIuWPlua2iOWFs+azqFxcXCIgOiBcXFwi5YWz5rOoXFxcIiksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGlzX2ZvbGxvd2VkLCBtaWQpID0+IHtcXG4gICAgICAgICAgICBsZXQgY3NyZiA9IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIikubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdXFxuICAgICAgICAgICAgcG9zdChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vbW9kaWZ5XFxcIiwge1xcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiZmlkXFxcIjogbWlkLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImFjdFxcXCI6IGlzX2ZvbGxvd2VkID8gMiA6IDEsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgQ29va2llOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBpbmZvLmlzX2ZvbGxvd2VkLCBtaWQpXFxuICAgIH0pXFxufVxcbiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnVwVmlkZW9zKG1pZCwgTVlfUEFHRSkuZGF0YS5saXN0LnZsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgIGxldCBpZCA9IGl0ZW0uYWlkICsgXFxcIlxcXCJcXG4gICAgbGV0IGJ2aWQgPSBpdGVtLmJ2aWRcXG4gICAgbGV0IHAgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcGxheWVyL3BhZ2VsaXN0XFxcIiwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGlkXFxuICAgIH0pKSkuZGF0YVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNnYW1lVGhlbWUjXFxcIixcXG4gICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgaW1nOiBpdGVtLnBpYyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogaWQsXFxuICAgICAgICAgICAgXFxcImNpZFxcXCI6IHBbMF0uY2lkLFxcbiAgICAgICAgICAgIFxcXCJidmlkXFxcIjogYnZpZFxcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5pCc57SiXCIsXCJwYXRoXCI6XCJzZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbnRyeSB7XFxuICAgIHZhciBkID0gW107XFxuICAgIHZhciBrdyA9IGdldFBhcmFtKFxcXCJrd1xcXCIpXFxuICAgIHZhciB0eXBlID0gZ2V0UGFyYW0oXFxcInR5cGVcXFwiKVxcbiAgICB2YXIgY29va2llID0gSlNPTi5wYXJzZShmZXRjaENvb2tpZShcXFwiaHR0cHM6Ly9iaWxpYmlsaS5jb21cXFwiKSkuam9pbihcXFwiO1xcXCIpXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9zZWFyY2gvdHlwZT9zZWFyY2hfdHlwZT1cXFwiICsgdHlwZSArIFxcXCIma2V5d29yZD1cXFwiICsga3cgKyBcXFwiJnBhZ2U9XFxcIiArIE1ZX1BBR0UsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhLnJlc3VsdFxcbiAgICBpZiAodHlwZSA9PSBcXFwiYmlsaV91c2VyXFxcIikge1xcbiAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udW5hbWUsXFxuICAgICAgICAgICAgICAgIGltZzogXFxcImh0dHBzOlxcXCIgKyBpdGVtLnVwaWMsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cHM/bWlkPVxcXCIgKyBpdGVtLm1pZCArIFxcXCIjZ2FtZVRoZW1lI1xcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgaWYgKGl0ZW0uaXNfYXZpZCAhPSBmYWxzZSkge1xcbiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC9wbGF5ZXIvcGFnZWxpc3RcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiYWlkXFxcIjogaXRlbS5haWRcXG4gICAgICAgICAgICAgICAgfSkpKS5kYXRhXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZS5yZXBsYWNlKC88W14+XSo+fDxcXFxcL1tePl0qPi9nbSwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBcXFwiaHR0cHM6XFxcIiArIGl0ZW0ucGljLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNnYW1lVGhlbWUjXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImlkXFxcIjogaXRlbS5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImJ2aWRcXFwiOiBpdGVtLmJ2aWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNpZFxcXCI6IHBbMF0uY2lkXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLnJlcGxhY2UoLzxbXj5dKj58PFxcXFwvW14+XSo+L2dtLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsYSNnYW1lVGhlbWUjXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInNzaWRcXFwiOiBpdGVtLnNlYXNvbl9pZFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHNldFJlc3VsdChbe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Y2VudGVyPjxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICM5OTk5OTlcXFwiPu+9nu+9nu+9nuaIkeaYr+acieW6lee6v+eahO+9nu+9nu+9njwvc3Bhbj48L3NtYWxsPjwvY2VudGVyPicsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9XSlcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMlwiLFwibmFtZVwiOlwi5Ymn6ZuG6K+m5oOFXCIsXCJwYXRoXCI6XCJkZXRhaWxhXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciBzZWFzb25faWQgPSBNWV9QQVJBTVMuc3NpZCArIFxcXCJcXFwiXFxudmFyIGVwaXNvZGVfaWQgPSBNWV9QQVJBTVMuZXBpZCArIFxcXCJcXFwiXFxubGV0IGluZm8gPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy92aWV3L3dlYi9zZWFzb24/c2Vhc29uX2lkPVxcXCIgKyBzZWFzb25faWQpKS5yZXN1bHRcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogaW5mby5zZWFzb25fdGl0bGUsXFxuICAgIGltZzogaW5mby5jb3ZlcixcXG4gICAgZGVzYzogaW5mby5ldmFsdWF0ZSxcXG4gICAgdXJsOiAkKCkucnVsZSgodGV4dCkgPT4ge1xcbiAgICAgICAgc2V0UmVzdWx0KFt7XFxuICAgICAgICAgICAgdGl0bGU6IHRleHQsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiXFxuICAgICAgICB9XSlcXG4gICAgfSwgaW5mby5ldmFsdWF0ZSksXFxuICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXCJcXG59KVxcbmluZm8uZXBpc29kZXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpdGVtLmxvbmdfdGl0bGUgPyBpdGVtLmxvbmdfdGl0bGUgOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgaW1nOiBpdGVtLmNvdmVyLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNnYW1lVGhlbWUjXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgXFxcImlkXFxcIjogaXRlbS5haWQsXFxuICAgICAgICAgICAgXFxcImNpZFxcXCI6IGl0ZW0uY2lkLFxcbiAgICAgICAgICAgIFxcXCJidmlkXFxcIjogaXRlbS5idmlkXFxuICAgICAgICB9XFxuICAgIH0pXFxufSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbnsbtcIixcInBhdGhcIjpcImNhdGVnb3JpZXMtaGVhZGVyXCIsXCJydWxlXCI6XCJqczpcXG4vKipcXG4gKiDkvb/nlKjor7TmmI7vvJpcXG4gKiAxLuaPkOWJjeW7uueri+WlvSDliIbnsbvmiYDlsZ7nsbvlnovlkozliIbnsbvliJfooagg55qE5a+55bqU5YWz57O777yM5Y2zIGdldCDlh73mlbDkuK3nmoQgY2F0ZWdvcmllc1xcbiAqIDIu6K6+572u5a2Q5YiG57G75pWw5o2u55qEIGtlee+8jOiwg+eUqCBzZXRTdWJDYXRlZ29yaWVzSXRlbUtleSh0aXRsZUtleSwgdXJsS2V5KVxcbiAqIDMu54S25ZCO6LCD55SoIENhdGVnb3JpZXNIZWFkZXIuZ2V0KGxheW91dCwgY2F0ZWdvcmllcywgcGFnZSlcXG4gKlxcbiAqIOaUr+aMgemTvuW8j+iwg+eUqO+8jOS4gOWPpeivneWNs+WPr+iwg+eUqOeUn+aIkOWIhuexu++8jOWNs++8mlxcbiAqIENhdGVnb3JpZXNIZWFkZXJcXG4gKiAgICAuc2V0U3ViQ2F0ZWdvcmllc0l0ZW1LZXkodGl0bGVLZXksIHVybEtleSlcXG4gKiAgICAuZ2V0KGxheW91dCwgY2F0ZWdvcmllcywgcGFnZSlcXG4gKlxcbiAqIEB0eXBlIHt7c2V0U3ViQ2F0ZWdvcmllc0l0ZW1LZXk6IENhdGVnb3JpZXNIZWFkZXIuc2V0U3ViQ2F0ZWdvcmllc0l0ZW1LZXksIGdldDogQ2F0ZWdvcmllc0hlYWRlci5nZXQsIGNhdGVnb3JpZXNLZXk6IHt0aXRsZTogc3RyaW5nLCB1cmw6IHN0cmluZ319fVxcbiAqL1xcbmxldCBDYXRlZ29yaWVzSGVhZGVyID0ge1xcbiAgICBjYXRlZ29yaWVzS2V5OiB7XFxuICAgICAgICBzdWJfY2F0ZWdvcmllczogJycsXFxuICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICB1cmw6ICcnLFxcbiAgICB9LFxcbiAgICAvKipcXG4gICAgICogMS7orr7nva7ku47liIbnsbvliJfooajkuK3mi7/nmoTlrZDliIbnsbvnmoTmlbDmja4ga2V577yMXFxuICAgICAqICAg5qC55o2uIGtleSDmi7/liLDmlbDmja7lkI7vvIxcXG4gICAgICogICDkvJroh6rliqjotYvlgLznu5kgc2Nyb2xsX2J1dHRvbiDnmoQgeyB0aXRsZTogaXRlbVt0aXRsZUtleV0sIHVybDogaXRlbVt1cmxLZXldIH1cXG4gICAgICpcXG4gICAgICogQHBhcmFtIHRpdGxlX2tleSB0aXRsZSDnmoQga2V5XFxuICAgICAqIEBwYXJhbSB1cmxfa2V5IHVybCDnmoQga2V5XFxuICAgICAqL1xcbiAgICBzZXRTdWJDYXRlZ29yaWVzSXRlbUtleSA6ICh0aXRsZV9rZXksIHVybF9rZXkpID0+IHtcXG4gICAgICAgIENhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS50aXRsZSA9IHRpdGxlX2tleVxcbiAgICAgICAgQ2F0ZWdvcmllc0hlYWRlci5jYXRlZ29yaWVzS2V5LnVybCA9IHVybF9rZXlcXG4gICAgICAgIHJldHVybiBDYXRlZ29yaWVzSGVhZGVyO1xcbiAgICB9LFxcbiAgICBzZXRTdWJDYXRlZ29yaWVzS2V5OiAoc3ViX2NhdGVnb3JpZXNfa2V5KSA9PiB7XFxuICAgICAgICBDYXRlZ29yaWVzSGVhZGVyLmNhdGVnb3JpZXNLZXkuc3ViX2NhdGVnb3JpZXMgPSBzdWJfY2F0ZWdvcmllc19rZXlcXG4gICAgICAgIHJldHVybiBDYXRlZ29yaWVzSGVhZGVyO1xcbiAgICB9LFxcbiAgICAvKipcXG4gICAgICogMi7ojrflj5bliIbnsbvlpLTpg6hcXG4gICAgICpcXG4gICAgICogQHBhcmFtIGxheW91dCDlvZPliY3nlYzpnaLvvIzljbPluLjnlKjnmoQgZC5wdXNoIOeahCBkXFxuICAgICAqIEBwYXJhbSBjYXRlZ29yaWVzIOWIhuexu+aJgOWxnuexu+Wei+WSjOWIhuexu+WIl+ihqOeahOWvueW6lOWFs+ezu+ihqO+8jFxcbiAgICAgKiAgICAgICAg5aaC77yaXFxuICAgICAqICAgICAgICB7XFxuICAgICAqICAgICAgICAgICBcXFwi5bm05Lu9XFxcIjogW3sgXFxcIm5hbWVcXFwiOiBcXFwiMjAyMVxcXCIsIFxcXCJ2YWx1ZVxcXCI6IFxcXCIyMDIxXFxcIiB9LCB7IFxcXCJuYW1lXFxcIjogXFxcIjIwMjBcXFwiLCBcXFwidmFsdWVcXFwiOiBcXFwiMjAyMFxcXCIgfS4uLl0sXFxuICAgICAqICAgICAgICAgICBcXFwi5o6S5bqPXFxcIjogW3sgXFxcIm5hbWVcXFwiOiBcXFwi54Ot5bqmXFxcIiwgXFxcInZhbHVlXFxcIjogXFxcImhvdFxcXCIgfSwgeyBcXFwibmFtZVxcXCI6IFxcXCLml7bpl7RcXFwiLCBcXFwidmFsdWVcXFwiOiBcXFwidGltZVxcXCIgfS4uLl0sXFxuICAgICAqICAgICAgICB9XFxuICAgICAqIEBwYXJhbSBwYWdlIOmhteeggVxcbiAgICAgKiBAcGFyYW0gdXJsTGlzdGVuZXIg6aKd5aSW5aSE55CGIGJ1dHRvbiDnmoQgdXJs77yM6ZyA6KaBIHJldHVyblxcbiAgICAgKi9cXG4gICAgZ2V0OiAobGF5b3V0LCBjYXRlZ29yaWVzLCBwYWdlLCB1cmxMaXN0ZW5lcikgPT4ge1xcbiAgICAgICAgLy8gbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAvLyDliIbnsbvmiYDlsZ7nsbvlnovnmoTliJfooajvvIzlpoLvvJpbIFxcXCLlubTku71cXFwiLCBcXFwi5o6S5bqPXFxcIiBdXFxuICAgICAgICBsZXQgY2F0ZWdvcnlfbmFtZXMgPSBPYmplY3Qua2V5cyhjYXRlZ29yaWVzKVxcbiAgICAgICAgbGV0IHR5cGVzID0gW11cXG4gICAgICAgIC8vIOagueaNruWvueW6lOWFs+ezu+ihqOaLv+WIhuexu+WIl+ihqFxcbiAgICAgICAgY2F0ZWdvcnlfbmFtZXMubWFwKGNhdGVnb3J5X25hbWUgPT4ge1xcbiAgICAgICAgICAgIC8vIOi/memHjOS8muaLv+WIsCDlubTku70g5o6S5bqPLi4uIOWFtuS4reS4gOS4qlxcbiAgICAgICAgICAgIHR5cGVzLnB1c2goY2F0ZWdvcmllc1tjYXRlZ29yeV9uYW1lXSk7XFxuICAgICAgICAgICAgLy8g6L+Z6YeM5LiL6Z2i5a+5IHR5cGVzIOeahOWAvOi/m+ihjOWkhOeQhlxcbiAgICAgICAgfSlcXG4gICAgICAgIGNhdGVnb3JpZXMgPSB0eXBlcztcXG4gICAgICAgIGxldCBpbml0X2NhdGUgPSBbXVxcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuICAgICAgICAgICAgaW5pdF9jYXRlLnB1c2goXFxcIjBcXFwiKVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wX2pzb24gPSBnZXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG4gICAgICAgIGNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pXFxuXFxuICAgICAgICBpZiAocGFyc2VJbnQocGFnZSkgPT09IDEpIHtcXG4gICAgICAgICAgICAvKipcXG4gICAgICAgICAgICAgKiDpgY3ljobnrKwgaW5kZXgg5bGC5YiG57G7XFxuICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yeV9uYW1lID0gY2F0ZWdvcnlfbmFtZXNbaW5kZXhdXFxuICAgICAgICAgICAgICAgIGxldCBzdWJfY2F0ZWdvcmllc19rZXkgPSBDYXRlZ29yaWVzSGVhZGVyLmNhdGVnb3JpZXNLZXkuc3ViX2NhdGVnb3JpZXNcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gc3ViX2NhdGVnb3JpZXNfa2V5ID8gY2F0ZWdvcnlbc3ViX2NhdGVnb3JpZXNfa2V5XSA6IGNhdGVnb3J5O1xcbiAgICAgICAgICAgICAgICAvLyBsb2coY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAgICAgKiDlnKjnrKwgaW5kZXgg5bGC5YiG57G75Lit6YGN5Y6G6K+l5bGC5omA5pyJ5a2Q5YiG57G7XFxuICAgICAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0ZW1bQ2F0ZWdvcmllc0hlYWRlci5jYXRlZ29yaWVzS2V5LnRpdGxlXVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGVzY2FwZShpdGVtW0NhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS51cmxdKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybExpc3RlbmVyKSB1cmwgPSB1cmxMaXN0ZW5lci5vbkRlYWwoaXRlbSwgc3ViX2NhdGVnb3J5X25hbWUsIHVybClcXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkE3Mjk4XFxcIj4nICsgdGl0bGUgKyAnPC9zcGFuPjwvYj4nIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudGl0bGUsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS51cmwgKyBcXFwiI1xcXCIgKyBwYXJhbXMuc3ViX2NhdGVnb3J5X25hbWUsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3J5X25hbWU6IHN1Yl9jYXRlZ29yeV9uYW1lXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIGxheW91dC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuJC5leHBvcnRzLkNhdGVnb3JpZXNIZWFkZXI9Q2F0ZWdvcmllc0hlYWRlclwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YiG57G7IEJ5IFJ4XCIsXCJwYXRoXCI6XCJjYXRcIixcInJ1bGVcIjpcImNvbnN0IHtcXG4gICAgQ2F0ZWdvcmllc0hlYWRlclxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9jYXRlZ29yaWVzLWhlYWRlclxcXCIpXFxubGV0IG1DYXRlZ29yaWVzID0ge31cXG5sZXQgY2F0VXJsID0gJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9hbmltZS9pbmRleC8nXFxubGV0IGNhdFNyYyA9IHJlcXVlc3QoY2F0VXJsKVxcbi8vIGxvZyhjYXRTcmMpXFxubGV0IGNhdFJlZ2V4ID0gL3dpbmRvd1xcXFwuX19JTklUSUFMX1NUQVRFX189KC4qPyk7XFxcXChmdW5jdGlvblxcXFwoXFxcXClcXFxcey9cXG5pZiAoY2F0UmVnZXgudGVzdChjYXRTcmMpKSB7XFxuICAgIC8vIGxvZyhSZWdFeHAuJDEpXFxuICAgIGxldCBjYXRlZ29yeSA9IEpTT04ucGFyc2UoUmVnRXhwLiQxKVxcbiAgICBsZXQgbUZpbHRlcnMgPSBjYXRlZ29yeS5maWx0ZXJzO1xcbiAgICAvLyBsb2cobUZpbHRlcnMpXFxuICAgIG1GaWx0ZXJzLm1hcChmaWx0ZXIgPT4gbUNhdGVnb3JpZXNbZmlsdGVyLmtleV0gPSBmaWx0ZXIubGlzdClcXG4gICAgbGV0IG9yZGVycyA9IGNhdGVnb3J5Lm9yZGVyc1xcbiAgICBsZXQgbU9yZGVycyA9IFtdXFxuICAgIG9yZGVycy5tYXAob3JkZXIgPT4ge1xcbiAgICAgICAgbGV0IG1PcmRlciA9IHt9XFxuICAgICAgICBtT3JkZXIubmFtZSA9IG9yZGVyLnRpdGxlXFxuICAgICAgICBtT3JkZXIudmFsdWUgPSBvcmRlci5rZXlcXG4gICAgICAgIG1PcmRlcnMucHVzaChtT3JkZXIpXFxuICAgIH0pXFxuICAgIC8vIGxvZyhtT3JkZXJzKVxcbiAgICBtQ2F0ZWdvcmllc1snb3JkZXInXSA9IG1PcmRlcnNcXG59XFxucHV0VmFyKE1ZX1JVTEUudXJsICsgXFxcIiNjYXRlZ29yaWVzXFxcIiwgSlNPTi5zdHJpbmdpZnkobUNhdGVnb3JpZXMpKVxcblxcbmxldCBrZXlzID0gT2JqZWN0LmtleXMobUNhdGVnb3JpZXMpXFxuLy8gbG9nKG1DYXRlZ29yaWVzKVxcbi8vIGxvZyhrZXlzKVxcbi8qKlxcbiAqIOe7hOWQiOW9k+WJjeWIhuexu+mTvuaOpVxcbiAqL1xcbmxldCB0cnVlX3VybCA9IGdldFZhcihNWV9SVUxFLnVybCwgTVlfVVJMKVxcbnRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD8nXFxuZm9yIChsZXQgaXQgb2Yga2V5cykge1xcbiAgICBsZXQgY2F0X3VybCA9IGdldFZhcihNWV9SVUxFLnVybCArIFxcXCIjXFxcIiArIGl0LCBpdCA9PT0gJ29yZGVycycgPyAnMycgOiAnLTEnKVxcbiAgICB0cnVlX3VybCArPSAoY2F0X3VybCA/ICcmJyArIGl0ICsgJz0nICsgY2F0X3VybCA6ICcnKVxcbn1cXG4vLyBsZXQgcGFnZSA9IDFcXG5jb25zdCBwYWdlID0gTVlfUEFHRVxcbnRydWVfdXJsID0gdHJ1ZV91cmwgK1xcbiAgICAnJnN0PTEmc29ydD0wJnNlYXNvbl90eXBlPTEmcGFnZXNpemU9MjAmdHlwZT0xJyArXFxuICAgICcmcGFnZT0nICsgcGFnZVxcbi8vIGxvZyh0cnVlX3VybClcXG5cXG5jb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcblxcbkNhdGVnb3JpZXNIZWFkZXJcXG4gICAgLnNldFN1YkNhdGVnb3JpZXNJdGVtS2V5KCduYW1lJywgJ3ZhbHVlJylcXG4gICAgLmdldChkLCBtQ2F0ZWdvcmllcywgcGFnZSlcXG4vKipcXG4gKiDojrflj5blvZPliY3liIbnsbvpobXpnaLmupDnoIFcXG4gKi9cXG50cnkge1xcbiAgICB2YXIgc3lsaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KHRydWVfdXJsLCB7fSkpLmRhdGEubGlzdDtcXG5cXG4gICAgLyoqXFxuICAgICAqIOWIl+ihqOaVsOaNrua6kFxcbiAgICAgKi9cXG4gICAgZm9yIChsZXQgZGF0YSBvZiBzeWxpc3QpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUgLyorICcvJyArIGRhdGEuaW5kZXhfc2hvdyovICxcXG4gICAgICAgICAgICBkZXNjOiBkYXRhLm9yZGVyLFxcbiAgICAgICAgICAgIGltZzogZGF0YS5jb3ZlcixcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsYSNnYW1lVGhlbWUjJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJtZWRpYV9pZFxcXCI6IGRhdGEubWVkaWFfaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJzc2lkXFxcIjogZGF0YS5zZWFzb25faWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG59XCJ9XSxcInBhcmFtc1wiOlwie1xcXCJidmlkXFxcIjpcXFwiQlYxa1Q0MTFSN2dYXFxcIixcXFwiY2lkXFxcIjoxMDAxMzA2NzQ2LFxcXCJpZFxcXCI6NDc5MTk2OTY4fVwiLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCJiaWxpYmlsaVwiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS9kZXRhaWwjZ2FtZVRoZW1lI1wiLFwiY29sX3R5cGVcIjpcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcIixcImZpbmRfcnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG50cnkge1xcbiAgICB2YXIgaWQgPSBNWV9QQVJBTVMuaWQgKyBcXFwiXFxcIlxcbiAgICB2YXIgY2lkID0gTVlfUEFSQU1TLmNpZCArIFxcXCJcXFwiXFxuICAgIHZhciBidmlkID0gTVlfUEFSQU1TLmJ2aWRcXG4gICAgLy/op4bpopHkv6Hmga9cXG4gICAgdmFyIHIgPSByZXF1ZXN0KGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlld1xcXCIsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBpZFxcbiAgICB9KSlcXG4gICAgbGV0IGwgPSBKU09OLnBhcnNlKHIpLmRhdGFcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBsLnRpdGxlLFxcbiAgICAgICAgaW1nOiBsLnBpYyxcXG4gICAgICAgIGRlc2M6IGwuZGVzYyxcXG4gICAgICAgIHVybDogJCgpLnJ1bGUoKGluZm8pID0+IHtcXG4gICAgICAgICAgICBsZXQgc3RhdCA9IGluZm8uc3RhdFxcbiAgICAgICAgICAgIGxldCBpbmZvcyA9IGBhduWPt++8miR7aW5mby5haWR9XFxcXG5iduWPt++8miR7aW5mby5idmlkfVxcXFxu5pKt5pS+6YeP77yaJHtzdGF0LnZpZXd9XFxcXG7ngrnotZ7vvJoke3N0YXQubGlrZX1cXFxcbuaKleW4ge+8miR7c3RhdC5jb2lufVxcXFxu5pS26JeP77yaJHtzdGF0LmZhdm9yaXRlfVxcXFxuXFxcXG4ke2luZm8uZGVzY31gXFxuICAgICAgICAgICAgc2V0UmVzdWx0KFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpbmZvcyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiXFxuICAgICAgICAgICAgfV0pXFxuICAgICAgICB9LCBsKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgZ3JhZGllbnQ6IHRydWVcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IGwub3duZXIubmFtZSxcXG4gICAgICAgIGltZzogbC5vd25lci5mYWNlLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3Vwcz9taWQ9XFxcIiArIGwub3duZXIubWlkICsgXFxcIiZwPWZ5cGFnZSNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxuICAgIH0sIHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgfSlcXG4gICAgLy/op4bpopHmk43kvZxcXG4gICAgZnVuY3Rpb24gY29sb3IodGV4dCwgY29sb3IpIHtcXG4gICAgICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAodGV4dC5pbmRleE9mKFxcXCLigJzigJzigJ3igJ1cXFwiKSA9PT0gMCkge1xcbiAgICAgICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcIiArIGNvbG9yICsgXFxcIic+XFxcIiArIHRleHQgKyBcXFwiPC9mb250PlxcXCI7XFxuICAgIH1cXG4gICAgbGV0IHN0YXQgPSBsLnN0YXRcXG4gICAgbGV0IGxpa2UgPSBzdGF0Lmxpa2VcXG4gICAgbGV0IGNvaW4gPSBzdGF0LmNvaW5cXG4gICAgbGV0IGZhdm91cml0ZSA9IHN0YXQuZmF2b3JpdGVcXG4gICAgbGV0IGhhc0xpa2UgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9hcmNoaXZlL2hhcy9saWtlXFxcIiwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGlkXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIilcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGEgPT0gMVxcbiAgICBsZXQgaGFzQ29pbiA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2FyY2hpdmUvY29pbnNcXFwiLCB7XFxuICAgICAgICBcXFwiYWlkXFxcIjogaWRcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YS5tdWx0aXBseSAhPSAwXFxuICAgIGxldCBoYXNGYXZvdXIgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvZmF2L3ZpZGVvL2Zhdm91cmVkXFxcIiwge1xcbiAgICAgICAgXFxcImFpZFxcXCI6IGlkXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIilcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGEuZmF2b3VyZWRcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAoaGFzTGlrZSA/IGNvbG9yKGxpa2UsIFxcXCIjRkE3Mjk4XFxcIikgOiBsaWtlKSxcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1NvY2lhbFNpc3RlcllpL2JpbGliaWxpLUFQSS1jb2xsZWN0L21hc3Rlci9pbWdzL2xpa2Uuc3ZnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgaGFzTGlrZSkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjc3JmID0gcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV1cXG4gICAgICAgICAgICBsZXQgcmVzID0gcG9zdChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2FyY2hpdmUvbGlrZVxcXCIsIHtcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImFpZFxcXCI6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImxpa2VcXFwiOiAoaGFzTGlrZSA/IDIgOiAxKSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogcmVhZEZpbGUoXFxcIkNvb2tpZS50eHRcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyAoaGFzTGlrZSA/IFxcXCLlj5bmtojngrnotZ5cXFwiIDogXFxcIueCuei1nuaIkOWKn1xcXCIpXFxuICAgICAgICB9LCBpZCwgaGFzTGlrZSlcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IChoYXNDb2luID8gY29sb3IoY29pbiwgXFxcIiNGQTcyOThcXFwiKSA6IGNvaW4pLFxcbiAgICAgICAgaW1nOiBcXFwiaHR0cHM6Ly9naHByb3h5LmNvbS9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vU29jaWFsU2lzdGVyWWkvYmlsaWJpbGktQVBJLWNvbGxlY3QvbWFzdGVyL2ltZ3MvY29pbi5zdmdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgdXJsOiAkKFtcXFwiMVxcXCIsIFxcXCIyXFxcIl0sIDIsIFxcXCLmipXluIHmlbDph49cXFwiKS5zZWxlY3QoKGlkKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGNzcmYgPSByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXVxcbiAgICAgICAgICAgIGxldCByZXMgPSBwb3N0KFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvY29pbi9hZGRcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJhaWRcXFwiOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJtdWx0aXBseVxcXCI6IGlucHV0LFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiByZWFkRmlsZShcXFwiQ29va2llLnR4dFxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5oqV5LqGXFxcIiArIGlucHV0ICsgXFxcIuS4quW4gVxcXCJcXG4gICAgICAgIH0sIGlkKVxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogKGhhc0Zhdm91ciA/IGNvbG9yKGZhdm91cml0ZSwgXFxcIiNGQTcyOThcXFwiKSA6IGZhdm91cml0ZSksXFxuICAgICAgICBpbWc6IFxcXCJodHRwczovL2docHJveHkuY29tL2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Tb2NpYWxTaXN0ZXJZaS9iaWxpYmlsaS1BUEktY29sbGVjdC9tYXN0ZXIvaW1ncy9mYXYuc3ZnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgaGFzRmF2b3VyKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGJvZHkgPSBoYXNGYXZvdXIgPyB7XFxuICAgICAgICAgICAgICAgIFxcXCJyaWRcXFwiOiBpZCxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAyLFxcbiAgICAgICAgICAgICAgICBcXFwiZGVsX21lZGlhX2lkc1xcXCI6IDAsXFxuICAgICAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICAgICAgICAgIH0gOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJyaWRcXFwiOiBpZCxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAyLFxcbiAgICAgICAgICAgICAgICBcXFwiYWRkX21lZGlhX2lkc1xcXCI6IDAsXFxuICAgICAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgY3NyZiA9IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIikubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdXFxuICAgICAgICAgICAgbGV0IHJlcyA9IHBvc3QoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL21lZGlhbGlzdC9nYXRld2F5L2NvbGwvcmVzb3VyY2UvZGVhbFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IHJlYWRGaWxlKFxcXCJDb29raWUudHh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIiArIChoYXNGYXZvdXIgPyBcXFwi5Y+W5raI5pS26JePXFxcIiA6IFxcXCLmlLbol4/miJDlip9cXFwiKVxcbiAgICAgICAgfSwgaWQsIGhhc0Zhdm91cilcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLor4TorrpcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIixcXG4gICAgICAgIGltZzogXFxcImh0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9tb3JlLzQxLnBuZ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIFxcXCJpZFxcXCI6IGlkXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIC8v6I635Y+W6KeG6aKR5YiGUOS/oeaBr1xcbiAgICB2YXIgcCA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC9wbGF5ZXIvcGFnZWxpc3RcXFwiLCB7XFxuICAgICAgICBcXFwiYWlkXFxcIjogaWRcXG4gICAgfSkpKS5kYXRhXFxuICAgIGlmIChwLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAvL+inhumikemTvuaOpVxcbiAgICAgICAgbGV0IGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRVcmwoaWQsIGNpZCwgMTIwKVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaZuuiDveaSreaUvlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQsIGNpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGF6eShpZCwgY2lkLCAxMjApLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpXFxuICAgICAgICAgICAgfSwgaWQsIGNpZCksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgXFxcImxvbmdDbGlja1xcXCI6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaOqOmAgVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoaWQsIGNpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS9Kb2UvVFZib3guanNcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiDmjqjpgIF0dmJveCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFxcXCLmjqjpgIEgYnkgSm9lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9kOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXFxcImJpbGliaWxpXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHM6IEpTT04ucGFyc2UoJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGF6eShpZCwgY2lkLCAxMjApLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpKS51cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9LCBpZCwgY2lkKVxcbiAgICAgICAgICAgICAgICB9XSxcXG4gICAgICAgICAgICAgICAgXFxcImlkXFxcIjogXFxcInFuXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICBhLnN1cHBvcnRfZm9ybWF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5ld19kZXNjcmlwdGlvbixcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGlkLCBjaWQsIHFuKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGF6eShpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIilcXG4gICAgICAgICAgICAgICAgfSwgaWQgKyBcXFwiXFxcIiwgY2lkICsgXFxcIlxcXCIsIGl0ZW0ucXVhbGl0eSArIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzJcXFwiXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBwLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ucGFydCxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGlkLCBjaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5sYXp5KGlkLCBjaWQsIDEyMCkucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIilcXG4gICAgICAgICAgICAgICAgfSwgaWQsIGl0ZW0uY2lkICsgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiY2lkXFxcIjogaXRlbS5jaWQsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJidmlkXFxcIjogYnZpZFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIHRvYXN0KFxcXCLnqIvluo/lh7rnjrDpl67popjvvIzor7fmiZPlvIDml6Xlv5fmn6XnnItcXFwiKVxcbn1cXG5zZXRSZXN1bHQoZCk7XCIsXCJncm91cFwiOlwi6KeG6aKRXCIsXCJ1YVwiOlwicGNcIixcInByZVJ1bGVcIjpcIlwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJhcGlcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYXBpXFxcIixcXFwicnVsZVxcXCI6XFxcIiQuZXhwb3J0cy5nZXRGZWVkID0gZnVuY3Rpb24oKSB7XFxcXG4gICAgbGV0IHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvaW5kZXgvdG9wL2ZlZWQvcmNtZFxcXFxcXFwiXFxcXG4gICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCh1LCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpXFxcXG4gICAgcmV0dXJuIHJlcy5kYXRhLml0ZW1cXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRVc2VySW5mbyA9IGZ1bmN0aW9uKCkge1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdlxcXFxcXFwiXFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0VXJsID0gZnVuY3Rpb24oYXZpZCwgY2lkLCBxbikge1xcXFxuICAgIGxldCB1ID0gcmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcGxheWVyL3BsYXl1cmxcXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcImF2aWRcXFxcXFxcIjogYXZpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJjaWRcXFxcXFxcIjogY2lkLFxcXFxuICAgICAgICBcXFxcXFxcInFuXFxcXFxcXCI6IHFuLFxcXFxuICAgICAgICBcXFxcXFxcImZvdXJrXFxcXFxcXCI6IDFcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBDb29raWU6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh1KS5kYXRhXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0SGlzdG9yeSA9IGZ1bmN0aW9uKHBhZ2UpIHtcXFxcbiAgICBsZXQgdSA9IGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9oaXN0b3J5XFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJwblxcXFxcXFwiOiBwYWdlLFxcXFxuICAgICAgICBcXFxcXFxcInBzXFxcXFxcXCI6IDIwXFxcXG4gICAgfSlcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdCh1LCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIENvb2tpZTogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuZGF0YVxcXFxufVxcXFxuJC5leHBvcnRzLnJlcG9ydFByb2Nlc3MgPSBmdW5jdGlvbihhdmlkLCBjaWQpIHtcXFxcbiAgICBsZXQgY3NyZiA9IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV1cXFxcbiAgICBsZXQgcmVzID0gcG9zdChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvaGlzdG9yeS9yZXBvcnRcXFxcXFxcIiwge1xcXFxuICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBhdmlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjaWRcXFxcXFxcIjogY2lkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmYsXFxcXG4gICAgICAgICAgICBcXFxcXFxcInByb2dyZXNzXFxcXFxcXCI6IDBcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgQ29va2llOiByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbihpZCwgc29ydGJ5LCBwYWdlKSB7XFxcXG4gICAgbGV0IHUgPSBidWlsZFVybChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvcmVwbHlcXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogMSxcXFxcbiAgICAgICAgXFxcXFxcXCJvaWRcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgIFxcXFxcXFwicG5cXFxcXFxcIjogcGFnZSxcXFxcbiAgICAgICAgXFxcXFxcXCJzb3J0XFxcXFxcXCI6IHNvcnRieSA9PSBcXFxcXFxcIueDreW6plxcXFxcXFwiID8gMSA6IDBcXFxcbiAgICB9KVxcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KHUsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgQ29va2llOiByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhLnJlcGxpZXNcXFxcbn1cXFxcbiQuZXhwb3J0cy51cFZpZGVvcyA9IGZ1bmN0aW9uKG1pZCwgcGFnZSkge1xcXFxuICAgIGxldCB2aWRlb3MgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYXJjL3NlYXJjaD9taWQ9XFxcXFxcXCIgKyBtaWQgKyBcXFxcXFxcIiZwbj1cXFxcXFxcIiArIHBhZ2UsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHZpZGVvcylcXFxcbn1cXFxcbiQuZXhwb3J0cy5nZXRzbGlzdCA9IGZ1bmN0aW9uKCkge1xcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzP2pzb25wPWpzb25wXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YVxcXFxufVxcXFxuJC5leHBvcnRzLmdldFN1YnNyaWJlcyA9IGZ1bmN0aW9uKGlkLCBwYWdlKSB7XFxcXG4gICAgbGV0IHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3RhZz9wbj1cXFxcXFxcIiArIHBhZ2UgKyBcXFxcXFxcIiZwcz0yMCZqc29ucD1qc29ucCZ0YWdpZD1cXFxcXFxcIiArIGlkXFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0ZmF2dGVhbSA9IGZ1bmN0aW9uKCkge1xcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2xpc3Q0bmF2aWdhdGVcXFxcXFxcIiwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKS5kYXRhXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0RmF2b3VyID0gZnVuY3Rpb24oaWQsIHBhZ2UpIHtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L3Jlc291cmNlL2xpc3Q/bWVkaWFfaWQ9XFxcXFxcXCIgKyBpZCArIFxcXFxcXFwiJnBuPVxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwiJnBzPTIwJm9yZGVyPW10aW1lJnR5cGU9MCZ0aWQ9MFxcXFxcXFwiXFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIilcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0TW92aWVzID0gZnVuY3Rpb24odHlwZSwgYmVmb3JlLCBhZnRlcikge1xcXFxuICAgIGxldCB1ID0gYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvd2ViL3RpbWVsaW5lXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJ0eXBlc1xcXFxcXFwiOiB0eXBlLFxcXFxuICAgICAgICBcXFxcXFxcImJlZm9yZVxcXFxcXFwiOiBiZWZvcmUsXFxcXG4gICAgICAgIFxcXFxcXFwiYWZ0ZXJcXFxcXFxcIjogYWZ0ZXJcXFxcbiAgICB9KVxcXFxuICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlcXVlc3QodSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBDb29raWU6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpXFxcXG4gICAgcmV0dXJuIHJlcy5yZXN1bHRcXFxcbn1cXFxcbiQuZXhwb3J0cy5sYXp5ID0gZnVuY3Rpb24oaWQsIGNpZCwgcW4pIHtcXFxcbiAgICBsZXQgZCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0VXJsKGlkLCBjaWQsIHFuKVxcXFxuICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikucmVwb3J0UHJvY2VzcyhpZCwgY2lkKVxcXFxuICAgIGxldCB1ID0gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICBcXFxcXFxcInVybHNcXFxcXFxcIjogW2QuZHVybFswXS51cmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICBcXFxcXFxcImhlYWRlcnNcXFxcXFxcIjogW3tcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBXFxcXG4gICAgICAgIH1dLFxcXFxuICAgICAgICBcXFxcXFxcImRhbm11XFxcXFxcXCI6IGBodHRwczovL2NvbW1lbnQuYmlsaWJpbGkuY29tLyR7Y2lkfS54bWxgLFxcXFxuICAgICAgICBcXFxcXFxcImV4dHJhXFxcXFxcXCI6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogY2lkXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiB1XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6KeG6aKR6K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcImRldGFpbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG50cnkge1xcXFxuICAgIHZhciBpZCA9IE1ZX1BBUkFNUy5pZCArIFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICB2YXIgY2lkID0gTVlfUEFSQU1TLmNpZCArIFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICB2YXIgYnZpZCA9IE1ZX1BBUkFNUy5idmlkXFxcXG4gICAgLy/op4bpopHkv6Hmga9cXFxcbiAgICB2YXIgciA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlld1xcXFxcXFwiLCB7XFxcXG4gICAgICAgIFxcXFxcXFwiYWlkXFxcXFxcXCI6IGlkXFxcXG4gICAgfSkpXFxcXG4gICAgbGV0IGwgPSBKU09OLnBhcnNlKHIpLmRhdGFcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogbC50aXRsZSxcXFxcbiAgICAgICAgaW1nOiBsLnBpYyxcXFxcbiAgICAgICAgZGVzYzogbC5kZXNjLFxcXFxuICAgICAgICB1cmw6ICQoKS5ydWxlKChpbmZvKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgc3RhdCA9IGluZm8uc3RhdFxcXFxuICAgICAgICAgICAgbGV0IGluZm9zID0gYGF25Y+377yaJHtpbmZvLmFpZH1cXFxcXFxcXG5iduWPt++8miR7aW5mby5idmlkfVxcXFxcXFxcbuaSreaUvumHj++8miR7c3RhdC52aWV3fVxcXFxcXFxcbueCuei1nu+8miR7c3RhdC5saWtlfVxcXFxcXFxcbuaKleW4ge+8miR7c3RhdC5jb2lufVxcXFxcXFxcbuaUtuiXj++8miR7c3RhdC5mYXZvcml0ZX1cXFxcXFxcXG5cXFxcXFxcXG4ke2luZm8uZGVzY31gXFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoW3tcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaW5mb3MsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibG9uZ190ZXh0XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1dKVxcXFxuICAgICAgICB9LCBsKSxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGdyYWRpZW50OiB0cnVlXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIHRpdGxlOiBsLm93bmVyLm5hbWUsXFxcXG4gICAgICAgIGltZzogbC5vd25lci5mYWNlLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Vwcz9taWQ9XFxcXFxcXCIgKyBsLm93bmVyLm1pZCArIFxcXFxcXFwiJnA9ZnlwYWdlI2ltbWVyc2l2ZVRoZW1lI1xcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIlxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibGluZV9ibGFua1xcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICAvL+inhumikeaTjeS9nFxcXFxuICAgIGZ1bmN0aW9uIGNvbG9yKHRleHQsIGNvbG9yKSB7XFxcXG4gICAgICAgIHRleHQgKz0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKHRleHQuaW5kZXhPZihcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiKSA9PT0gMCkge1xcXFxuICAgICAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFxcXFxcIiArIGNvbG9yICsgXFxcXFxcXCInPlxcXFxcXFwiICsgdGV4dCArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgc3RhdCA9IGwuc3RhdFxcXFxuICAgIGxldCBsaWtlID0gc3RhdC5saWtlXFxcXG4gICAgbGV0IGNvaW4gPSBzdGF0LmNvaW5cXFxcbiAgICBsZXQgZmF2b3VyaXRlID0gc3RhdC5mYXZvcml0ZVxcXFxuICAgIGxldCBoYXNMaWtlID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2FyY2hpdmUvaGFzL2xpa2VcXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBpZFxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpLmRhdGEgPT0gMVxcXFxuICAgIGxldCBoYXNDb2luID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2FyY2hpdmUvY29pbnNcXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBpZFxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpLmRhdGEubXVsdGlwbHkgIT0gMFxcXFxuICAgIGxldCBoYXNGYXZvdXIgPSBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2Zhdi92aWRlby9mYXZvdXJlZFxcXFxcXFwiLCB7XFxcXG4gICAgICAgIFxcXFxcXFwiYWlkXFxcXFxcXCI6IGlkXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YS5mYXZvdXJlZFxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAoaGFzTGlrZSA/IGNvbG9yKGxpa2UsIFxcXFxcXFwiI0ZBNzI5OFxcXFxcXFwiKSA6IGxpa2UpLFxcXFxuICAgICAgICBpbWc6IFxcXFxcXFwiaHR0cHM6Ly9naHByb3h5LmNvbS9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vU29jaWFsU2lzdGVyWWkvYmlsaWJpbGktQVBJLWNvbGxlY3QvbWFzdGVyL2ltZ3MvbGlrZS5zdmdcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgaGFzTGlrZSkgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IGNzcmYgPSByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIikubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdXFxcXG4gICAgICAgICAgICBsZXQgcmVzID0gcG9zdChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9hcmNoaXZlL2xpa2VcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwibGlrZVxcXFxcXFwiOiAoaGFzTGlrZSA/IDIgOiAxKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmZcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXCIgKyAoaGFzTGlrZSA/IFxcXFxcXFwi5Y+W5raI54K56LWeXFxcXFxcXCIgOiBcXFxcXFxcIueCuei1nuaIkOWKn1xcXFxcXFwiKVxcXFxuICAgICAgICB9LCBpZCwgaGFzTGlrZSlcXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIHRpdGxlOiAoaGFzQ29pbiA/IGNvbG9yKGNvaW4sIFxcXFxcXFwiI0ZBNzI5OFxcXFxcXFwiKSA6IGNvaW4pLFxcXFxuICAgICAgICBpbWc6IFxcXFxcXFwiaHR0cHM6Ly9naHByb3h5LmNvbS9odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vU29jaWFsU2lzdGVyWWkvYmlsaWJpbGktQVBJLWNvbGxlY3QvbWFzdGVyL2ltZ3MvY29pbi5zdmdcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChbXFxcXFxcXCIxXFxcXFxcXCIsIFxcXFxcXFwiMlxcXFxcXFwiXSwgMiwgXFxcXFxcXCLmipXluIHmlbDph49cXFxcXFxcIikuc2VsZWN0KChpZCkgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IGNzcmYgPSByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIikubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdXFxcXG4gICAgICAgICAgICBsZXQgcmVzID0gcG9zdChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9jb2luL2FkZFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJtdWx0aXBseVxcXFxcXFwiOiBpbnB1dCxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmZcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5oqV5LqGXFxcXFxcXCIgKyBpbnB1dCArIFxcXFxcXFwi5Liq5biBXFxcXFxcXCJcXFxcbiAgICAgICAgfSwgaWQpXFxcXG4gICAgfSwge1xcXFxuICAgICAgICB0aXRsZTogKGhhc0Zhdm91ciA/IGNvbG9yKGZhdm91cml0ZSwgXFxcXFxcXCIjRkE3Mjk4XFxcXFxcXCIpIDogZmF2b3VyaXRlKSxcXFxcbiAgICAgICAgaW1nOiBcXFxcXFxcImh0dHBzOi8vZ2hwcm94eS5jb20vaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1NvY2lhbFNpc3RlcllpL2JpbGliaWxpLUFQSS1jb2xsZWN0L21hc3Rlci9pbWdzL2Zhdi5zdmdcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpZCwgaGFzRmF2b3VyKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgYm9keSA9IGhhc0Zhdm91ciA/IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInJpZFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogMixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImRlbF9tZWRpYV9pZHNcXFxcXFxcIjogMCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZlxcXFxuICAgICAgICAgICAgfSA6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInJpZFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogMixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImFkZF9tZWRpYV9pZHNcXFxcXFxcIjogMCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbGV0IGNzcmYgPSByZWFkRmlsZShcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIikubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdXFxcXG4gICAgICAgICAgICBsZXQgcmVzID0gcG9zdChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL21lZGlhbGlzdC9nYXRld2F5L2NvbGwvcmVzb3VyY2UvZGVhbFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcIiArIChoYXNGYXZvdXIgPyBcXFxcXFxcIuWPlua2iOaUtuiXj1xcXFxcXFwiIDogXFxcXFxcXCLmlLbol4/miJDlip9cXFxcXFxcIilcXFxcbiAgICAgICAgfSwgaWQsIGhhc0Zhdm91cilcXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuivhOiuulxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcXFxcXCIsXFxcXG4gICAgICAgIGltZzogXFxcXFxcXCJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW9yZS80MS5wbmdcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IGlkXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIC8v6I635Y+W6KeG6aKR5YiGUOS/oeaBr1xcXFxuICAgIHZhciBwID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC9wbGF5ZXIvcGFnZWxpc3RcXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBpZFxcXFxuICAgIH0pKSkuZGF0YVxcXFxuICAgIGlmIChwLmxlbmd0aCA9PSAxKSB7XFxcXG4gICAgICAgIC8v6KeG6aKR6ZO+5o6lXFxcXG4gICAgICAgIGxldCBhID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRVcmwoaWQsIGNpZCwgMTIwKVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pm66IO95pKt5pS+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQsIGNpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmxhenkoaWQsIGNpZCwgMTIwKS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9LCBpZCwgY2lkKSxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJsb25nQ2xpY2tcXFxcXFxcIjogW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5o6o6YCBXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpZCwgY2lkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFxcXFxcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL0pvZS9UVmJveC5qc1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIOaOqOmAgXR2Ym94KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcXFxcXFxcIuaOqOmAgSBieSBKb2VcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2Q6IFt7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFxcXFxcXFwiYmlsaWJpbGlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogSlNPTi5wYXJzZSgkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmxhenkoaWQsIGNpZCwgMTIwKS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpKS51cmxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgaWQsIGNpZClcXFxcbiAgICAgICAgICAgICAgICB9XSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IFxcXFxcXFwicW5cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBhLnN1cHBvcnRfZm9ybWF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5uZXdfZGVzY3JpcHRpb24sXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGlkLCBjaWQsIHFuKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmxhenkoaWQsIGNpZCwgcW4pLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICB9LCBpZCArIFxcXFxcXFwiXFxcXFxcXCIsIGNpZCArIFxcXFxcXFwiXFxcXFxcXCIsIGl0ZW0ucXVhbGl0eSArIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMlxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHAuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ucGFydCxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQsIGNpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5sYXp5KGlkLCBjaWQsIDEyMCkucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIH0sIGlkLCBpdGVtLmNpZCArIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY2lkXFxcXFxcXCI6IGl0ZW0uY2lkLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImJ2aWRcXFxcXFxcIjogYnZpZFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufSBjYXRjaCAoZSkge1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgdG9hc3QoXFxcXFxcXCLnqIvluo/lh7rnjrDpl67popjvvIzor7fmiZPlvIDml6Xlv5fmn6XnnItcXFxcXFxcIilcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuLvpobVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaG9tZXBhZ2VcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGQgPSBbXTtcXFxcbnRyeSB7XFxcXG4gICAgY29uc3Qge1xcXFxuICAgICAgICBnZXRGZWVkLFxcXFxuICAgICAgICBnZXRVc2VySW5mb1xcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpXFxcXG4gICAgaWYgKGZpbGVFeGlzdChcXFxcXFxcIkNvb2tpZS50eHRcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICAgICAgICAgbGV0IGkgPSBnZXRVc2VySW5mbygpXFxcXG4gICAgICAgICAgICBkLnVuc2hpZnQoe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpLnVuYW1lLFxcXFxuICAgICAgICAgICAgICAgIGltZzogaS5mYWNlLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXNlckluZm9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImRhdGFcXFxcXFxcIjogaVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG5cXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbG9yKHRleHQsIGNvbG9yKSB7XFxcXG4gICAgICAgICAgICAgICAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPT09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcXFxcXCIgKyBjb2xvciArIFxcXFxcXFwiJz5cXFxcXFxcIiArIHRleHQgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCB0YWJzID0ge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwi5o6o6I2QXFxcXFxcXCI6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvY29sbGVjdGlvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwi5YiG57G7XFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzY5LnN2Z1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwi5paw55WqXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzg0LnN2Z1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwi5oiR55qEXFxcXFxcXCI6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbjNcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGFicykuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbVswXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtWzFdLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgodGFiKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcIm1vZGVcXFxcXFxcIiwgdGFiKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIGl0ZW1bMF0pLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3JvdW5kX3NtYWxsXzRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJsaW5lXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IG1vZGUgPSBnZXRNeVZhcihcXFxcXFxcIm1vZGVcXFxcXFxcIiwgXFxcXFxcXCLmjqjojZBcXFxcXFxcIilcXFxcbiAgICAgICAgaWYgKG1vZGUgPT0gXFxcXFxcXCLmjqjojZBcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgZ2V0RmVlZCgpLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShpdGVtKVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0ucGljLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdGVtLnN0YXQudmlldyArIFxcXFxcXFwi5pKt5pS+4oC7XFxcXFxcXCIgKyBpdGVtLnN0YXQubGlrZSArIFxcXFxcXFwi54K56LWeXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsI2dhbWVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogaXRlbS5pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiYnZpZFxcXFxcXFwiOiBpdGVtLmJ2aWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNpZFxcXFxcXFwiOiBpdGVtLmNpZFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcXFxcXFxcIuaIkeeahFxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKFxcXFxcXFwid2RcXFxcXFxcIiwgXFxcXFxcXCJoaXN0b3J5XFxcXFxcXCIpID09IFxcXFxcXFwiaGlzdG9yeVxcXFxcXFwiID8gY29sb3IoXFxcXFxcXCLop4LnnIvljoblj7JcXFxcXFxcIiwgXFxcXFxcXCJyZWRcXFxcXFxcIikgOiBcXFxcXFxcIuingueci+WOhuWPslxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcIndkXFxcXFxcXCIsIFxcXFxcXFwiaGlzdG9yeVxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzNcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKFxcXFxcXFwid2RcXFxcXFxcIiwgXFxcXFxcXCJoaXN0b3J5XFxcXFxcXCIpID09IFxcXFxcXFwiZmF2XFxcXFxcXCIgPyBjb2xvcihcXFxcXFxcIuaUtuiXj1xcXFxcXFwiLCBcXFxcXFxcInJlZFxcXFxcXFwiKSA6IFxcXFxcXFwi5pS26JePXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwid2RcXFxcXFxcIiwgXFxcXFxcXCJmYXZcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8zXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcihcXFxcXFxcIndkXFxcXFxcXCIsIFxcXFxcXFwiaGlzdG9yeVxcXFxcXFwiKSA9PSBcXFxcXFxcInN1YlxcXFxcXFwiID8gY29sb3IoXFxcXFxcXCLlhbPms6hcXFxcXFxcIiwgXFxcXFxcXCJyZWRcXFxcXFxcIikgOiBcXFxcXFxcIuWFs+azqFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcIndkXFxcXFxcXCIsIFxcXFxcXFwic3ViXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfM1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChnZXRNeVZhcihcXFxcXFxcIndkXFxcXFxcXCIsIFxcXFxcXFwiaGlzdG9yeVxcXFxcXFwiKSA9PSBcXFxcXFxcImhpc3RvcnlcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGNvbnN0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlzdG9yeVxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgZ2V0SGlzdG9yeShNWV9QQUdFKS5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0ucGljLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9kZXRhaWwjaW1tZXJzaXZlVGhlbWUjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogaXRlbS5haWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJidmlkXFxcXFxcXCI6IGl0ZW0uYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNpZFxcXFxcXFwiOiBpdGVtLmNpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdldE15VmFyKFxcXFxcXFwid2RcXFxcXFxcIiwgXFxcXFxcXCJoaXN0b3J5XFxcXFxcXCIpID09IFxcXFxcXFwiZmF2XFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGVhbXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldGZhdnRlYW0oKVswXS5tZWRpYUxpc3RSZXNwb25zZS5saXN0XFxcXG4gICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0ZWFtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKFxcXFxcXFwiZmF2b1xcXFxcXFwiLCB0ZWFtc1swXS5pZCArIFxcXFxcXFwiXFxcXFxcXCIpID09IGl0ZW0uaWQgPyBjb2xvcihpdGVtLnRpdGxlLCBcXFxcXFxcInJlZFxcXFxcXFwiKSA6IGl0ZW0udGl0bGUpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJmYXZvXFxcXFxcXCIsIGlkICsgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBpdGVtLmlkKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRGYXZvdXIoZ2V0TXlWYXIoXFxcXFxcXCJmYXZvXFxcXFxcXCIsIHRlYW1zWzBdLmlkICsgXFxcXFxcXCJcXFxcXFxcIiksIE1ZX1BBR0UpLm1lZGlhcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNnYW1lVGhlbWUjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogaXRlbS5pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNpZFxcXFxcXFwiOiBpdGVtLnVnYy5maXJzdF9jaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJidmlkXFxcXFxcXCI6IGl0ZW0uYnZpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRzbGlzdCgpLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcXFxcXCJzdWJcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpID09IGl0ZW0udGFnaWQgPyBjb2xvcihpdGVtLm5hbWUsIFxcXFxcXFwicmVkXFxcXFxcXCIpIDogaXRlbS5uYW1lKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJzdWJcXFxcXFxcIiwgaWQpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXRlbS50YWdpZCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldFN1YnNyaWJlcyhnZXRNeVZhcihcXFxcXFxcInN1YlxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIiksIE1ZX1BBR0UpLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS51bmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5mYWNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS91cHM/bWlkPVxcXFxcXFwiICsgaXRlbS5taWQgKyBcXFxcXFxcIiZwPWZ5cGFnZSNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFxcXFxcXFwi5paw55WqXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHZhciB0YWJzID0ge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwi55Wq5YmnXFxcXFxcXCI6IDEsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCLnlLXlvbFcXFxcXFxcIjogMyxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIuWbveWIm1xcXFxcXFwiOiA0XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGFicykuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcXFxcXCJqdWppXFxcXFxcXCIsIFxcXFxcXFwi55Wq5YmnXFxcXFxcXCIpID09IGl0ZW0gPyBjb2xvcihpdGVtLCBcXFxcXFxcInJlZFxcXFxcXFwiKSA6IGl0ZW0pLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGEpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcImp1amlcXFxcXFxcIiwgYSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXRlbSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImxpbmVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgbGV0IGRheXMgPSA3XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXlzICsgMTsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKFxcXFxcXFwiZnJvbVxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIikgPT0gaSArIFxcXFxcXFwiXFxcXFxcXCIgPyBjb2xvcihpICsgXFxcXFxcXCLlpKnliY1cXFxcXFxcIiwgXFxcXFxcXCJyZWRcXFxcXFxcIikgOiBpICsgXFxcXFxcXCLlpKnliY1cXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwiZnJvbVxcXFxcXFwiLCBpICsgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJsaW5lXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGdldE15VmFyKFxcXFxcXFwidG9cXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpID09IGkgKyBcXFxcXFxcIlxcXFxcXFwiID8gY29sb3IoaSArIFxcXFxcXFwi5aSp5ZCOXFxcXFxcXCIsIFxcXFxcXFwicmVkXFxcXFxcXCIpIDogaSArIFxcXFxcXFwi5aSp5ZCOXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInRvXFxcXFxcXCIsIGkgKyBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGkpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRNb3ZpZXModGFic1tnZXRNeVZhcihcXFxcXFxcImp1amlcXFxcXFxcIiwgXFxcXFxcXCLnlarliadcXFxcXFxcIildLCBnZXRNeVZhcihcXFxcXFxcImZyb21cXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpLCBnZXRNeVZhcihcXFxcXFxcInRvXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKSkuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLmRhdGUgKyBcXFxcXFxcIiDlkahcXFxcXFxcIiArIGl0ZW0uZGF5X29mX3dlZWssXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5lcGlzb2Rlcy5mb3JFYWNoKGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGkuY292ZXIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9kZXRhaWxhI2dhbWVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInNzaWRcXFxcXFxcIjogaS5zZWFzb25faWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiZXBpZFxcXFxcXFwiOiBpLmVwaXNvZGVfaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9IFxcXFxcXFwi5YiG57G7XFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9jYXRcXFxcXFxcIikpLnJ1bGUpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBpZiAoZ2V0SXRlbShcXFxcXFxcImZzXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSA9PSBcXFxcXFxcIjBcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgbGV0IGEgPSBbXVxcXFxuICAgICAgICAgICAgbGV0IHRpbWUgPSAxMFxcXFxuICAgICAgICAgICAgYS5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogYCAgICAgICAgICAgICAgICAgICAgIOS9v+eUqOWJjemhu+efpVxcXFxu5pys6KeE5YiZ6LCD55SoaHR0cHM6Ly9naXRodWIuY29tL1NvY2lhbFNpc3RlcllpL2JpbGliaWxpLUFQSS1jb2xsZWN055qEYXBp77yM5omA5pyJ5Luj56CB5YWo6YOo5byA5rqQ77yM5bm25LiU5LiN5a2Y5Zyo5LiK5Lyg55So5oi35L+h5oGv55qE6KGM5Li6XFxcXG7mnKzop4TliJnkuLrlrabkuaDnm67nmoTvvIzor7fkuo7lr7zlhaUyNOWwj+aXtuWGheWIoOmZpO+8ge+8ge+8gSAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxu5byA5aeL5L2/55So5pys6KeE5YiZ5Y2z5Luj6KGo6YG15a6I6KeE5YiZICAgICAgICAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgIGAsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJjb2xfdHlwZVxcXFxcXFwiOiBcXFxcXFxcImxvbmdfdGV4dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcInRleHRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGltZSArIFxcXFxcXFwi56eS5ZCO57un57utXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXFxcXFwidGltZXJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoYSlcXFxcbiAgICAgICAgICAgIHdoaWxlICh0aW1lICE9IDApIHtcXFxcbiAgICAgICAgICAgICAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDEwMDApXFxcXG4gICAgICAgICAgICAgICAgdGltZSAtPSAxXFxcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShcXFxcXFxcInRpbWVyXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpbWUgKyBcXFxcXFxcIuenkuWQjue7p+e7rVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcXFxcXCJ0aW1lclxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5oiR5bey55+l5pmTXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiZnNcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kvaDlt7Lnoa7orqRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxjZW50ZXI+PHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICM5OTk5OTlcXFxcXFxcIj7vvZ7vvZ7vvZ7miJHmmK/mnInlupXnur/nmoTvvZ7vvZ7vvZ48L3NwYW4+PC9zbWFsbD48L2NlbnRlcj4nLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcImljb25fMl9yb3VuZFxcXCIsXFxcIm5hbWVcXFwiOlxcXCLnlKjmiLfor6bmg4VcXFwiLFxcXCJwYXRoXFxcIjpcXFwidXNlckluZm9cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxubGV0IGluZm8gPSBNWV9QQVJBTVMuZGF0YVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogaW5mby51bmFtZSxcXFxcbiAgICBpbWc6IGluZm8uZmFjZSxcXFxcbiAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi5rOo6ZSAXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKFxcXFxcXFwi56Gu6K6k5rOo6ZSA55m76ZmG77yfXFxcXFxcXCIpLmNvbmZpcm0oKCkgPT4ge1xcXFxuICAgICAgICBkZWxldGVGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICBiYWNrKClcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgfSksXFxcXG4gICAgaW1nOiBcXFxcXFxcImhpa2VyOi8vaW1hZ2VzL+W8gOWFs1xcXFxcXFwiXFxcXG59KVxcXFxuaWYgKGluZm8uaXNMb2dpbiAhPSBmYWxzZSkge1xcXFxuICAgIGxldCBsZXZlbCA9IGluZm8ubGV2ZWxfaW5mb1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBg5b2T5YmNJHtsZXZlbC5jdXJyZW50X2xldmVsfee6p++8jOe7j+mqjCR7bGV2ZWwuY3VycmVudF9leHB9XFxcXFxcXFxu6Led56a7JHtsZXZlbC5jdXJyZW50X2xldmVsKzF957qn77yM6L+Y5beuJHtsZXZlbC5uZXh0X2V4cC1sZXZlbC5jdXJyZW50X2V4cH1cXFxcXFxcXG7noazluIHvvJoke2luZm8ubW9uZXl95LiqYCxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibG9uZ190ZXh0XFxcXFxcXCJcXFxcbiAgICB9KVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi55m76ZmGXFxcIixcXFwicGF0aFxcXCI6XFxcImxvZ2luXFxcIixcXFwicnVsZVxcXCI6XFxcImxldCBkID0gW11cXFxcbmxldCBrID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaHR0cDovL3Bhc3Nwb3J0LmJpbGliaWxpLmNvbS94L3Bhc3Nwb3J0LWxvZ2luL3dlYi9xcmNvZGUvZ2VuZXJhdGVcXFxcXFxcIikpLmRhdGFcXFxcbmxldCBrZXkgPSBrLnFyY29kZV9rZXlcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi54K55oiR55m76ZmGXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBrLnVybCxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIlxcXFxufSwge1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIui+k+WFpUNvb2tpZeeZu+mZhlxcXFxcXFwiLFxcXFxuICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIui+k+WFpeaKk+WPluWIsOeahENvb2tpZVxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcXFxcXFxcIlNFU1NEQVRBXFxcXFxcXCIpICYmIGlucHV0LmluY2x1ZGVzKFxcXFxcXFwiYmlsaV9qY3RcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIHNhdmVGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiLCBpbnB1dClcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHRvYXN0KFxcXFxcXFwi6K+36L6T5YWl5q2j56GuY29va2ll77yBXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIlxcXFxufSlcXFxcbnNldFJlc3VsdChkKVxcXFxubGV0IG5vTG9naW4gPSB0cnVlXFxcXG52YXIgQ29va2llID0gXFxcXFxcXCJcXFxcXFxcIlxcXFxud2hpbGUgKG5vTG9naW4pIHtcXFxcbiAgICBsZXQgc3RhID0gZmV0Y2hDb29raWUoYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vcGFzc3BvcnQuYmlsaWJpbGkuY29tL3gvcGFzc3BvcnQtbG9naW4vd2ViL3FyY29kZS9wb2xsXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJxcmNvZGVfa2V5XFxcXFxcXCI6IGtleVxcXFxuICAgIH0pKVxcXFxuICAgIGlmIChzdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICBKU09OLnBhcnNlKHN0YSkuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIENvb2tpZSArPSBpdGVtLnNwbGl0KFxcXFxcXFwiO1xcXFxcXFwiKVswXSArIFxcXFxcXFwiO1xcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIHNhdmVGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiLCBDb29raWUpXFxcXG4gICAgICAgIHRvYXN0KFxcXFxcXFwi55m76ZmG5oiQ5Yqf77yM6L+U5Zue5Yi35paw5Y2z5Y+vXFxcXFxcXCIpXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgYnJlYWtcXFxcbiAgICB9XFxcXG4gICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgzMDAwKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzFcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K+E6K66XFxcIixcXFwicGF0aFxcXCI6XFxcIkNvbW1lbnRzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbmxldCBpZCA9IE1ZX1BBUkFNUy5pZFxcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGQudW5zaGlmdCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuWPkeadoeivhOiuuuWQp1xcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKGlkKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgY3NyZiA9IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV1cXFxcbiAgICAgICAgICAgIHBvc3QoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL3JlcGx5L2FkZFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogMSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJvaWRcXFxcXFxcIjogaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIm1lc3NhZ2VcXFxcXFxcIjogaW5wdXRcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgfSwgaWQpXFxcXG4gICAgfSlcXFxcbn1cXFxcbnZhciB0YWJzID0gW1xcXFxcXFwi54Ot5bqmXFxcXFxcXCIsIFxcXFxcXFwi5pe26Ze0XFxcXFxcXCJdXFxcXG50YWJzLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGl0ZW0sXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpKSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcInNvcnRieVxcXFxcXFwiLCBpKVxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgIH0sIGl0ZW0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxufSlcXFxcbmxldCBkYXRhID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRDb21tZW50cyhpZCwgZ2V0TXlWYXIoXFxcXFxcXCJzb3J0YnlcXFxcXFxcIiwgXFxcXFxcXCLng63luqZcXFxcXFxcIiksIE1ZX1BBR0UpXFxcXG5kYXRhLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGl0ZW0ubWVtYmVyLnVuYW1lLFxcXFxuICAgICAgICBpbWc6IGl0ZW0ubWVtYmVyLmF2YXRhcixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS91cHM/bWlkPVxcXFxcXFwiICsgaXRlbS5tZW1iZXIubWlkICsgXFxcXFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogaXRlbS5jb250ZW50Lm1lc3NhZ2UsXFxcXG4gICAgICAgIGRlc2M6IGl0ZW0ucmVwbHlfY29udHJvbC5sb2NhdGlvbiArIFxcXFxcXFwiIFxcXFxcXFwiICsgaXRlbS5yZXBseV9jb250cm9sLnRpbWVfZGVzYyxcXFxcbiAgICAgICAgdXJsOiAkKCkucnVsZSgodGV4dCwgb2lkLCBycGlkKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFt7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRleHQsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibG9uZ190ZXh0XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1dXFxcXG4gICAgICAgICAgICBsZXQgcmVwbHkgPSByZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9yZXBseS9yZXBseVxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IDEsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJvaWRcXFxcXFxcIjogb2lkLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicm9vdFxcXFxcXFwiOiBycGlkXFxcXG4gICAgICAgICAgICB9KSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogcmVhZEZpbGUoXFxcXFxcXCJDb29raWUudHh0XFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibGluZVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHJlcGx5KS5kYXRhLnJlcGxpZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWVtYmVyLnVuYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtLm1lbWJlci5hdmF0YXIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Vwcz9taWQ9XFxcXFxcXCIgKyBpdGVtLm1lbWJlci5taWQgKyBcXFxcXFxcIiNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLmNvbnRlbnQubWVzc2FnZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0ZW0ucmVwbHlfY29udHJvbC5sb2NhdGlvbiArIFxcXFxcXFwiIFxcXFxcXFwiICsgaXRlbS5yZXBseV9jb250cm9sLnRpbWVfZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZClcXFxcbiAgICAgICAgfSwgaXRlbS5jb250ZW50Lm1lc3NhZ2UsIGlkLCBpdGVtLnJwaWQgKyBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgIH0pXFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIlVQ5Li76aG1XFxcIixcXFwicGF0aFxcXCI6XFxcInVwc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG52YXIgbWlkID0gZ2V0UGFyYW0oXFxcXFxcXCJtaWRcXFxcXFxcIilcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICB2YXIgaW5mbyA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYWNjL2luZm9cXFxcXFxcIiwge1xcXFxuICAgICAgICBcXFxcXFxcIm1pZFxcXFxcXFwiOiBtaWRcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBDb29raWU6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpLmRhdGFcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogaW5mby5uYW1lLFxcXFxuICAgICAgICBpbWc6IGluZm8uZmFjZSxcXFxcbiAgICAgICAgZGVzYzogaW5mby5zaWduLFxcXFxuICAgICAgICB1cmw6ICQoKS5ydWxlKChpbmZvKSA9PiB7XFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoW3tcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaW5mbyxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJsb25nX3RleHRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfV0pXFxcXG4gICAgICAgIH0sIGluZm8uc2lnbiksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFxcXFxcIlxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6IChpbmZvLmlzX2ZvbGxvd2VkID8gXFxcXFxcXCLlj5bmtojlhbPms6hcXFxcXFxcIiA6IFxcXFxcXFwi5YWz5rOoXFxcXFxcXCIpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJCgpLmxhenlSdWxlKChpc19mb2xsb3dlZCwgbWlkKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgY3NyZiA9IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV1cXFxcbiAgICAgICAgICAgIHBvc3QoXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi9tb2RpZnlcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJmaWRcXFxcXFxcIjogbWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImFjdFxcXFxcXFwiOiBpc19mb2xsb3dlZCA/IDIgOiAxLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZlxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBDb29raWU6IHJlYWRGaWxlKFxcXFxcXFwiQ29va2llLnR4dFxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSwgaW5mby5pc19mb2xsb3dlZCwgbWlkKVxcXFxuICAgIH0pXFxcXG59XFxcXG4kLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnVwVmlkZW9zKG1pZCwgTVlfUEFHRSkuZGF0YS5saXN0LnZsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgbGV0IGlkID0gaXRlbS5haWQgKyBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgbGV0IGJ2aWQgPSBpdGVtLmJ2aWRcXFxcbiAgICBsZXQgcCA9IEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcGxheWVyL3BhZ2VsaXN0XFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogaWRcXFxcbiAgICB9KSkpLmRhdGFcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNnYW1lVGhlbWUjXFxcXFxcXCIsXFxcXG4gICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcXFxuICAgICAgICBpbWc6IGl0ZW0ucGljLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJpZFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY2lkXFxcXFxcXCI6IHBbMF0uY2lkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJidmlkXFxcXFxcXCI6IGJ2aWRcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59KVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8yXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0olxcXCIsXFxcInBhdGhcXFwiOlxcXCJzZWFyY2hcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG50cnkge1xcXFxuICAgIHZhciBkID0gW107XFxcXG4gICAgdmFyIGt3ID0gZ2V0UGFyYW0oXFxcXFxcXCJrd1xcXFxcXFwiKVxcXFxuICAgIHZhciB0eXBlID0gZ2V0UGFyYW0oXFxcXFxcXCJ0eXBlXFxcXFxcXCIpXFxcXG4gICAgdmFyIGNvb2tpZSA9IEpTT04ucGFyc2UoZmV0Y2hDb29raWUoXFxcXFxcXCJodHRwczovL2JpbGliaWxpLmNvbVxcXFxcXFwiKSkuam9pbihcXFxcXFxcIjtcXFxcXFxcIilcXFxcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3NlYXJjaC90eXBlP3NlYXJjaF90eXBlPVxcXFxcXFwiICsgdHlwZSArIFxcXFxcXFwiJmtleXdvcmQ9XFxcXFxcXCIgKyBrdyArIFxcXFxcXFwiJnBhZ2U9XFxcXFxcXCIgKyBNWV9QQUdFLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpLmRhdGEucmVzdWx0XFxcXG4gICAgaWYgKHR5cGUgPT0gXFxcXFxcXCJiaWxpX3VzZXJcXFxcXFxcIikge1xcXFxuICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udW5hbWUsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBcXFxcXFxcImh0dHBzOlxcXFxcXFwiICsgaXRlbS51cGljLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXBzP21pZD1cXFxcXFxcIiArIGl0ZW0ubWlkICsgXFxcXFxcXCIjZ2FtZVRoZW1lI1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGl0ZW0uaXNfYXZpZCAhPSBmYWxzZSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShyZXF1ZXN0KGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC9wbGF5ZXIvcGFnZWxpc3RcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImFpZFxcXFxcXFwiOiBpdGVtLmFpZFxcXFxuICAgICAgICAgICAgICAgIH0pKSkuZGF0YVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLnJlcGxhY2UoLzxbXj5dKj58PFxcXFxcXFxcL1tePl0qPi9nbSwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogXFxcXFxcXCJodHRwczpcXFxcXFxcIiArIGl0ZW0ucGljLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNnYW1lVGhlbWUjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IGl0ZW0uYWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJidmlkXFxcXFxcXCI6IGl0ZW0uYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY2lkXFxcXFxcXCI6IHBbMF0uY2lkXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZS5yZXBsYWNlKC88W14+XSo+fDxcXFxcXFxcXC9bXj5dKj4vZ20sIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsYSNnYW1lVGhlbWUjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInNzaWRcXFxcXFxcIjogaXRlbS5zZWFzb25faWRcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufSBjYXRjaCAoZSkge1xcXFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxcXG4gICAgc2V0UmVzdWx0KFt7XFxcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGNlbnRlcj48c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzk5OTk5OVxcXFxcXFwiPu+9nu+9nu+9nuaIkeaYr+acieW6lee6v+eahO+9nu+9nu+9njwvc3Bhbj48L3NtYWxsPjwvY2VudGVyPicsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuICAgICAgICB9XFxcXG4gICAgfV0pXFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Ymn6ZuG6K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcImRldGFpbGFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudmFyIHNlYXNvbl9pZCA9IE1ZX1BBUkFNUy5zc2lkICsgXFxcXFxcXCJcXFxcXFxcIlxcXFxudmFyIGVwaXNvZGVfaWQgPSBNWV9QQVJBTVMuZXBpZCArIFxcXFxcXFwiXFxcXFxcXCJcXFxcbmxldCBpbmZvID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9zZWFzb25faWQ9XFxcXFxcXCIgKyBzZWFzb25faWQpKS5yZXN1bHRcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IGluZm8uc2Vhc29uX3RpdGxlLFxcXFxuICAgIGltZzogaW5mby5jb3ZlcixcXFxcbiAgICBkZXNjOiBpbmZvLmV2YWx1YXRlLFxcXFxuICAgIHVybDogJCgpLnJ1bGUoKHRleHQpID0+IHtcXFxcbiAgICAgICAgc2V0UmVzdWx0KFt7XFxcXG4gICAgICAgICAgICB0aXRsZTogdGV4dCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImxvbmdfdGV4dFxcXFxcXFwiXFxcXG4gICAgICAgIH1dKVxcXFxuICAgIH0sIGluZm8uZXZhbHVhdGUpLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFxcXFxcIlxcXFxufSlcXFxcbmluZm8uZXBpc29kZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogaXRlbS5sb25nX3RpdGxlID8gaXRlbS5sb25nX3RpdGxlIDogaXRlbS50aXRsZSxcXFxcbiAgICAgICAgaW1nOiBpdGVtLmNvdmVyLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RldGFpbCNnYW1lVGhlbWUjXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IGl0ZW0uYWlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjaWRcXFxcXFxcIjogaXRlbS5jaWQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImJ2aWRcXFxcXFxcIjogaXRlbS5idmlkXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxufSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliIbnsbtcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY2F0ZWdvcmllcy1oZWFkZXJcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4vKipcXFxcbiAqIOS9v+eUqOivtOaYju+8mlxcXFxuICogMS7mj5DliY3lu7rnq4vlpb0g5YiG57G75omA5bGe57G75Z6L5ZKM5YiG57G75YiX6KGoIOeahOWvueW6lOWFs+ezu++8jOWNsyBnZXQg5Ye95pWw5Lit55qEIGNhdGVnb3JpZXNcXFxcbiAqIDIu6K6+572u5a2Q5YiG57G75pWw5o2u55qEIGtlee+8jOiwg+eUqCBzZXRTdWJDYXRlZ29yaWVzSXRlbUtleSh0aXRsZUtleSwgdXJsS2V5KVxcXFxuICogMy7nhLblkI7osIPnlKggQ2F0ZWdvcmllc0hlYWRlci5nZXQobGF5b3V0LCBjYXRlZ29yaWVzLCBwYWdlKVxcXFxuICpcXFxcbiAqIOaUr+aMgemTvuW8j+iwg+eUqO+8jOS4gOWPpeivneWNs+WPr+iwg+eUqOeUn+aIkOWIhuexu++8jOWNs++8mlxcXFxuICogQ2F0ZWdvcmllc0hlYWRlclxcXFxuICogICAgLnNldFN1YkNhdGVnb3JpZXNJdGVtS2V5KHRpdGxlS2V5LCB1cmxLZXkpXFxcXG4gKiAgICAuZ2V0KGxheW91dCwgY2F0ZWdvcmllcywgcGFnZSlcXFxcbiAqXFxcXG4gKiBAdHlwZSB7e3NldFN1YkNhdGVnb3JpZXNJdGVtS2V5OiBDYXRlZ29yaWVzSGVhZGVyLnNldFN1YkNhdGVnb3JpZXNJdGVtS2V5LCBnZXQ6IENhdGVnb3JpZXNIZWFkZXIuZ2V0LCBjYXRlZ29yaWVzS2V5OiB7dGl0bGU6IHN0cmluZywgdXJsOiBzdHJpbmd9fX1cXFxcbiAqL1xcXFxubGV0IENhdGVnb3JpZXNIZWFkZXIgPSB7XFxcXG4gICAgY2F0ZWdvcmllc0tleToge1xcXFxuICAgICAgICBzdWJfY2F0ZWdvcmllczogJycsXFxcXG4gICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgdXJsOiAnJyxcXFxcbiAgICB9LFxcXFxuICAgIC8qKlxcXFxuICAgICAqIDEu6K6+572u5LuO5YiG57G75YiX6KGo5Lit5ou/55qE5a2Q5YiG57G755qE5pWw5o2uIGtlee+8jFxcXFxuICAgICAqICAg5qC55o2uIGtleSDmi7/liLDmlbDmja7lkI7vvIxcXFxcbiAgICAgKiAgIOS8muiHquWKqOi1i+WAvOe7mSBzY3JvbGxfYnV0dG9uIOeahCB7IHRpdGxlOiBpdGVtW3RpdGxlS2V5XSwgdXJsOiBpdGVtW3VybEtleV0gfVxcXFxuICAgICAqXFxcXG4gICAgICogQHBhcmFtIHRpdGxlX2tleSB0aXRsZSDnmoQga2V5XFxcXG4gICAgICogQHBhcmFtIHVybF9rZXkgdXJsIOeahCBrZXlcXFxcbiAgICAgKi9cXFxcbiAgICBzZXRTdWJDYXRlZ29yaWVzSXRlbUtleSA6ICh0aXRsZV9rZXksIHVybF9rZXkpID0+IHtcXFxcbiAgICAgICAgQ2F0ZWdvcmllc0hlYWRlci5jYXRlZ29yaWVzS2V5LnRpdGxlID0gdGl0bGVfa2V5XFxcXG4gICAgICAgIENhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS51cmwgPSB1cmxfa2V5XFxcXG4gICAgICAgIHJldHVybiBDYXRlZ29yaWVzSGVhZGVyO1xcXFxuICAgIH0sXFxcXG4gICAgc2V0U3ViQ2F0ZWdvcmllc0tleTogKHN1Yl9jYXRlZ29yaWVzX2tleSkgPT4ge1xcXFxuICAgICAgICBDYXRlZ29yaWVzSGVhZGVyLmNhdGVnb3JpZXNLZXkuc3ViX2NhdGVnb3JpZXMgPSBzdWJfY2F0ZWdvcmllc19rZXlcXFxcbiAgICAgICAgcmV0dXJuIENhdGVnb3JpZXNIZWFkZXI7XFxcXG4gICAgfSxcXFxcbiAgICAvKipcXFxcbiAgICAgKiAyLuiOt+WPluWIhuexu+WktOmDqFxcXFxuICAgICAqXFxcXG4gICAgICogQHBhcmFtIGxheW91dCDlvZPliY3nlYzpnaLvvIzljbPluLjnlKjnmoQgZC5wdXNoIOeahCBkXFxcXG4gICAgICogQHBhcmFtIGNhdGVnb3JpZXMg5YiG57G75omA5bGe57G75Z6L5ZKM5YiG57G75YiX6KGo55qE5a+55bqU5YWz57O76KGo77yMXFxcXG4gICAgICogICAgICAgIOWmgu+8mlxcXFxuICAgICAqICAgICAgICB7XFxcXG4gICAgICogICAgICAgICAgIFxcXFxcXFwi5bm05Lu9XFxcXFxcXCI6IFt7IFxcXFxcXFwibmFtZVxcXFxcXFwiOiBcXFxcXFxcIjIwMjFcXFxcXFxcIiwgXFxcXFxcXCJ2YWx1ZVxcXFxcXFwiOiBcXFxcXFxcIjIwMjFcXFxcXFxcIiB9LCB7IFxcXFxcXFwibmFtZVxcXFxcXFwiOiBcXFxcXFxcIjIwMjBcXFxcXFxcIiwgXFxcXFxcXCJ2YWx1ZVxcXFxcXFwiOiBcXFxcXFxcIjIwMjBcXFxcXFxcIiB9Li4uXSxcXFxcbiAgICAgKiAgICAgICAgICAgXFxcXFxcXCLmjpLluo9cXFxcXFxcIjogW3sgXFxcXFxcXCJuYW1lXFxcXFxcXCI6IFxcXFxcXFwi54Ot5bqmXFxcXFxcXCIsIFxcXFxcXFwidmFsdWVcXFxcXFxcIjogXFxcXFxcXCJob3RcXFxcXFxcIiB9LCB7IFxcXFxcXFwibmFtZVxcXFxcXFwiOiBcXFxcXFxcIuaXtumXtFxcXFxcXFwiLCBcXFxcXFxcInZhbHVlXFxcXFxcXCI6IFxcXFxcXFwidGltZVxcXFxcXFwiIH0uLi5dLFxcXFxuICAgICAqICAgICAgICB9XFxcXG4gICAgICogQHBhcmFtIHBhZ2Ug6aG156CBXFxcXG4gICAgICogQHBhcmFtIHVybExpc3RlbmVyIOmineWkluWkhOeQhiBidXR0b24g55qEIHVybO+8jOmcgOimgSByZXR1cm5cXFxcbiAgICAgKi9cXFxcbiAgICBnZXQ6IChsYXlvdXQsIGNhdGVnb3JpZXMsIHBhZ2UsIHVybExpc3RlbmVyKSA9PiB7XFxcXG4gICAgICAgIC8vIGxvZyhjYXRlZ29yaWVzKVxcXFxuICAgICAgICAvLyDliIbnsbvmiYDlsZ7nsbvlnovnmoTliJfooajvvIzlpoLvvJpbIFxcXFxcXFwi5bm05Lu9XFxcXFxcXCIsIFxcXFxcXFwi5o6S5bqPXFxcXFxcXCIgXVxcXFxuICAgICAgICBsZXQgY2F0ZWdvcnlfbmFtZXMgPSBPYmplY3Qua2V5cyhjYXRlZ29yaWVzKVxcXFxuICAgICAgICBsZXQgdHlwZXMgPSBbXVxcXFxuICAgICAgICAvLyDmoLnmja7lr7nlupTlhbPns7vooajmi7/liIbnsbvliJfooahcXFxcbiAgICAgICAgY2F0ZWdvcnlfbmFtZXMubWFwKGNhdGVnb3J5X25hbWUgPT4ge1xcXFxuICAgICAgICAgICAgLy8g6L+Z6YeM5Lya5ou/5YiwIOW5tOS7vSDmjpLluo8uLi4g5YW25Lit5LiA5LiqXFxcXG4gICAgICAgICAgICB0eXBlcy5wdXNoKGNhdGVnb3JpZXNbY2F0ZWdvcnlfbmFtZV0pO1xcXFxuICAgICAgICAgICAgLy8g6L+Z6YeM5LiL6Z2i5a+5IHR5cGVzIOeahOWAvOi/m+ihjOWkhOeQhlxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBjYXRlZ29yaWVzID0gdHlwZXM7XFxcXG4gICAgICAgIGxldCBpbml0X2NhdGUgPSBbXVxcXFxuXFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcXFxuICAgICAgICAgICAgaW5pdF9jYXRlLnB1c2goXFxcXFxcXCIwXFxcXFxcXCIpXFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBjb25zdCBjYXRlX3RlbXBfanNvbiA9IGdldFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcXFxuICAgICAgICBjb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKGNhdGVfdGVtcF9qc29uKVxcXFxuXFxcXG4gICAgICAgIGlmIChwYXJzZUludChwYWdlKSA9PT0gMSkge1xcXFxuICAgICAgICAgICAgLyoqXFxcXG4gICAgICAgICAgICAgKiDpgY3ljobnrKwgaW5kZXgg5bGC5YiG57G7XFxcXG4gICAgICAgICAgICAgKi9cXFxcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yeV9uYW1lID0gY2F0ZWdvcnlfbmFtZXNbaW5kZXhdXFxcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzX2tleSA9IENhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS5zdWJfY2F0ZWdvcmllc1xcXFxuICAgICAgICAgICAgICAgIGxldCBzdWJfY2F0ZWdvcmllcyA9IHN1Yl9jYXRlZ29yaWVzX2tleSA/IGNhdGVnb3J5W3N1Yl9jYXRlZ29yaWVzX2tleV0gOiBjYXRlZ29yeTtcXFxcbiAgICAgICAgICAgICAgICAvLyBsb2coY2F0ZWdvcnkpXFxcXG4gICAgICAgICAgICAgICAgLyoqXFxcXG4gICAgICAgICAgICAgICAgICog5Zyo56ysIGluZGV4IOWxguWIhuexu+S4remBjeWOhuivpeWxguaJgOacieWtkOWIhuexu1xcXFxuICAgICAgICAgICAgICAgICAqL1xcXFxuICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdGVtW0NhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS50aXRsZV1cXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGVzY2FwZShpdGVtW0NhdGVnb3JpZXNIZWFkZXIuY2F0ZWdvcmllc0tleS51cmxdKVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsTGlzdGVuZXIpIHVybCA9IHVybExpc3RlbmVyLm9uRGVhbChpdGVtLCBzdWJfY2F0ZWdvcnlfbmFtZSwgdXJsKVxcXFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogI0ZBNzI5OFxcXFxcXFwiPicgKyB0aXRsZSArICc8L3NwYW4+PC9iPicgOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS51cmwgKyBcXFxcXFxcIiNcXFxcXFxcIiArIHBhcmFtcy5zdWJfY2F0ZWdvcnlfbmFtZSwgaW5wdXQpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcnlfbmFtZTogc3ViX2NhdGVnb3J5X25hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIGxheW91dC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn1cXFxcbiQuZXhwb3J0cy5DYXRlZ29yaWVzSGVhZGVyPUNhdGVnb3JpZXNIZWFkZXJcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliIbnsbsgQnkgUnhcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY2F0XFxcIixcXFwicnVsZVxcXCI6XFxcImNvbnN0IHtcXFxcbiAgICBDYXRlZ29yaWVzSGVhZGVyXFxcXG59ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NhdGVnb3JpZXMtaGVhZGVyXFxcXFxcXCIpXFxcXG5sZXQgbUNhdGVnb3JpZXMgPSB7fVxcXFxubGV0IGNhdFVybCA9ICdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYW5pbWUvaW5kZXgvJ1xcXFxubGV0IGNhdFNyYyA9IHJlcXVlc3QoY2F0VXJsKVxcXFxuLy8gbG9nKGNhdFNyYylcXFxcbmxldCBjYXRSZWdleCA9IC93aW5kb3dcXFxcXFxcXC5fX0lOSVRJQUxfU1RBVEVfXz0oLio/KTtcXFxcXFxcXChmdW5jdGlvblxcXFxcXFxcKFxcXFxcXFxcKVxcXFxcXFxcey9cXFxcbmlmIChjYXRSZWdleC50ZXN0KGNhdFNyYykpIHtcXFxcbiAgICAvLyBsb2coUmVnRXhwLiQxKVxcXFxuICAgIGxldCBjYXRlZ29yeSA9IEpTT04ucGFyc2UoUmVnRXhwLiQxKVxcXFxuICAgIGxldCBtRmlsdGVycyA9IGNhdGVnb3J5LmZpbHRlcnM7XFxcXG4gICAgLy8gbG9nKG1GaWx0ZXJzKVxcXFxuICAgIG1GaWx0ZXJzLm1hcChmaWx0ZXIgPT4gbUNhdGVnb3JpZXNbZmlsdGVyLmtleV0gPSBmaWx0ZXIubGlzdClcXFxcbiAgICBsZXQgb3JkZXJzID0gY2F0ZWdvcnkub3JkZXJzXFxcXG4gICAgbGV0IG1PcmRlcnMgPSBbXVxcXFxuICAgIG9yZGVycy5tYXAob3JkZXIgPT4ge1xcXFxuICAgICAgICBsZXQgbU9yZGVyID0ge31cXFxcbiAgICAgICAgbU9yZGVyLm5hbWUgPSBvcmRlci50aXRsZVxcXFxuICAgICAgICBtT3JkZXIudmFsdWUgPSBvcmRlci5rZXlcXFxcbiAgICAgICAgbU9yZGVycy5wdXNoKG1PcmRlcilcXFxcbiAgICB9KVxcXFxuICAgIC8vIGxvZyhtT3JkZXJzKVxcXFxuICAgIG1DYXRlZ29yaWVzWydvcmRlciddID0gbU9yZGVyc1xcXFxufVxcXFxucHV0VmFyKE1ZX1JVTEUudXJsICsgXFxcXFxcXCIjY2F0ZWdvcmllc1xcXFxcXFwiLCBKU09OLnN0cmluZ2lmeShtQ2F0ZWdvcmllcykpXFxcXG5cXFxcbmxldCBrZXlzID0gT2JqZWN0LmtleXMobUNhdGVnb3JpZXMpXFxcXG4vLyBsb2cobUNhdGVnb3JpZXMpXFxcXG4vLyBsb2coa2V5cylcXFxcbi8qKlxcXFxuICog57uE5ZCI5b2T5YmN5YiG57G76ZO+5o6lXFxcXG4gKi9cXFxcbmxldCB0cnVlX3VybCA9IGdldFZhcihNWV9SVUxFLnVybCwgTVlfVVJMKVxcXFxudHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0PydcXFxcbmZvciAobGV0IGl0IG9mIGtleXMpIHtcXFxcbiAgICBsZXQgY2F0X3VybCA9IGdldFZhcihNWV9SVUxFLnVybCArIFxcXFxcXFwiI1xcXFxcXFwiICsgaXQsIGl0ID09PSAnb3JkZXJzJyA/ICczJyA6ICctMScpXFxcXG4gICAgdHJ1ZV91cmwgKz0gKGNhdF91cmwgPyAnJicgKyBpdCArICc9JyArIGNhdF91cmwgOiAnJylcXFxcbn1cXFxcbi8vIGxldCBwYWdlID0gMVxcXFxuY29uc3QgcGFnZSA9IE1ZX1BBR0VcXFxcbnRydWVfdXJsID0gdHJ1ZV91cmwgK1xcXFxuICAgICcmc3Q9MSZzb3J0PTAmc2Vhc29uX3R5cGU9MSZwYWdlc2l6ZT0yMCZ0eXBlPTEnICtcXFxcbiAgICAnJnBhZ2U9JyArIHBhZ2VcXFxcbi8vIGxvZyh0cnVlX3VybClcXFxcblxcXFxuY29uc3QgZW1wdHkgPSBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuXFxcXG5DYXRlZ29yaWVzSGVhZGVyXFxcXG4gICAgLnNldFN1YkNhdGVnb3JpZXNJdGVtS2V5KCduYW1lJywgJ3ZhbHVlJylcXFxcbiAgICAuZ2V0KGQsIG1DYXRlZ29yaWVzLCBwYWdlKVxcXFxuLyoqXFxcXG4gKiDojrflj5blvZPliY3liIbnsbvpobXpnaLmupDnoIFcXFxcbiAqL1xcXFxudHJ5IHtcXFxcbiAgICB2YXIgc3lsaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KHRydWVfdXJsLCB7fSkpLmRhdGEubGlzdDtcXFxcblxcXFxuICAgIC8qKlxcXFxuICAgICAqIOWIl+ihqOaVsOaNrua6kFxcXFxuICAgICAqL1xcXFxuICAgIGZvciAobGV0IGRhdGEgb2Ygc3lsaXN0KSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSAvKisgJy8nICsgZGF0YS5pbmRleF9zaG93Ki8gLFxcXFxuICAgICAgICAgICAgZGVzYzogZGF0YS5vcmRlcixcXFxcbiAgICAgICAgICAgIGltZzogZGF0YS5jb3ZlcixcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWxhI2dhbWVUaGVtZSMnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJtZWRpYV9pZFxcXFxcXFwiOiBkYXRhLm1lZGlhX2lkLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwic3NpZFxcXFxcXFwiOiBkYXRhLnNlYXNvbl9pZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgbG9nKGUubWVzc2FnZSlcXFxcbn1cXFwifV1cIixcInByb3h5XCI6XCJcIn0iLCJwaWNVcmwiOiJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlL2FjZDVlYjdhMzIzYjQ0YmVkNWNhYmNjMTdlNDg3MDBmYTlhYzRmOWMucG5nIiwidGl0bGUiOiLlhrDlsZ7mgKfnlLflrZDlkozphbfphbflpbPlkIzkuost5aa55aa555m75Zy677yB5ruR6Zuq5Zy655qE5Zyj6K+e6IqCIn0=
Add Comment
Please, Sign In to add comment