xiaomianao666

小程序:磁力君.简

Apr 19th, 2024
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@磁力君.简@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56OB5Yqb5ZCbLueugCIsImF1dGhvciI6IuWwj+ajieiihPCfjJ4mQExveURnSWsiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyNmeXBhZ2UiLCJ2ZXJzaW9uIjoyMjMsImNvbF90eXBlIjoibW92aWVfMyIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoiYWxsIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6JC5yZXF1aXJlKFwiTWFpblwiKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eT9zZWFyY2hUZXJtcz0qKiIsImdyb3VwIjoi4pGgUiIsInNlYXJjaEZpbmQiOiJqczpcbmNsZWFyUHVibGljSXRlbShcIuejgeWKm+WQmy7nroDot7PovaxcIik7XG5sZXQga2V5ID0gZ2V0UGFyYW0oXCJzZWFyY2hUZXJtc1wiKTtcbnNldFJlc3VsdChbe1xuICAgIHRpdGxlOiBcIueCueaIkeW8gOWni+iBmuWQiOaQnOe0olwiICsga2V5LFxuICAgIHVybDogXCJoaWtlcjovL3BhZ2Uvc291I25vSGlzdG9yeSM/cD1meXBhZ2VcIixcbiAgICBleHRyYToge1xuICAgICAgICBwYWdlVGl0bGU6IFwi5pCc57SiXCIgKyBrZXksXG4gICAgICAgIHNlYXJjaFRlcm1zOiBrZXksXG4gICAgICAgIGhpZGVTZXR0aW5nOiB0cnVlXG4gICAgfVxufV0pOyIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnlpITnkIZcIixcInBhdGhcIjpcImRhdGFcIixcInJ1bGVcIjpcImpzOlxcbmZ1bmN0aW9uIGRvdWJsZVRyZWF0aW5nKGNvbmZpZywgZ2V0TW9kZVVybCkge1xcbiAgICBsZXQge1xcbiAgICAgICAgb3Blbk1vZGUsXFxuICAgICAgICBmaW5kQWxpVXJsLFxcbiAgICAgICAgYmFzaWNVcmwsXFxuICAgICAgICBuYW1lXFxuICAgIH0gPSBjb25maWc7XFxuICAgIGxldCBjaWxpVXJsID0gaW5wdXQ7XFxuICAgIGxldCBzaGFyZVB3ZDtcXG4gICAgaWYgKGZpbmRBbGlVcmwpIHtcXG4gICAgICAgIGxldCByZXN1bHQ7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRBbGlVcmwoY2lsaVVybCwgYmFzaWNVcmwpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCLmkJzntKLlvJXmk47jgIxcXFwiICsgbmFtZSArIFxcXCLjgI3lpLHmlYjor7fogZTns7vmkJzntKLlvJXmk47kvZzogIXkv67lpI3miJbliKDpmaRcXFxcblxcXFxu5byV5pOO5L2c6ICF5Y+v5Lul5Y675a6Y5pa56aKR6YGT6K+i6ZeuXFxcXG7ngrnlh7vnoa7lrprlv6vpgJ/liKDpmaRcXFwiKS5jb25maXJtKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmuKnppqjmj5DnpLpcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogXFxcIuehruWumuimgeWIoOmZpFxcXCIgKyBuYW1lICsgXFxcIuWQl++8n+azqOaEj+WIoOmZpOWQjuaXoOazleaBouWkjVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KHYgPT4gdi5uYW1lID09PSBuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwicnVsZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liKDpmaTmiJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgbmFtZSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSwgbmFtZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC5sZW5ndGggPT09IDEpIHtcXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbMF07XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXFxcInN0cmluZ1xcXCIpIHtcXG4gICAgICAgICAgICBjaWxpVXJsID0gcmVzdWx0O1xcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0Lmxlbmd0aCkge1xcbiAgICAgICAgICAgIGxldCBpc1N0ciA9IHR5cGVvZihyZXN1bHRbMF0pID09PSBcXFwic3RyaW5nXFxcIjtcXG4gICAgICAgICAgICBsZXQgc2VsZWN0ID0gcmVzdWx0O1xcbiAgICAgICAgICAgIGlmICghaXNTdHIpIHtcXG4gICAgICAgICAgICAgICAgc2VsZWN0ID0gcmVzdWx0Lm1hcCh2ID0+IHYuY2lsaVVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC5tYXAodiA9PiB2LnJlcGxhY2UoL2h0dHAuKj9cXFxcL3NcXFxcLy8sIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgcmV0dXJuICQoc2VsZWN0KS5zZWxlY3QoKGNvbmZpZywgZ2V0TW9kZVVybCwgaXNTdHIsIHJlc3VsdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgY2lsaVVybDtcXG4gICAgICAgICAgICAgICAgbGV0IHNoYXJlUHdkO1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzU3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgciA9IHJlc3VsdC5maW5kKHYgPT4gdi5jaWxpVXJsLmluY2x1ZGVzKGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICBjaWxpVXJsID0gci5jaWxpVXJsO1xcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVQd2QgPSByLnNoYXJlUHdkO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgY2lsaVVybCA9IHJlc3VsdC5maW5kKHYgPT4gdi5pbmNsdWRlcyhpbnB1dCkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRNb2RlVXJsKGNpbGlVcmwsIHNoYXJlUHdkLCBjb25maWcub3Blbk1vZGUpO1xcbiAgICAgICAgICAgIH0sIGNvbmZpZywgZ2V0TW9kZVVybCwgaXNTdHIsIHJlc3VsdCk7XFxuICAgICAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgdHlwZW9mKHJlc3VsdCkgPT09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgY2lsaVVybCA9IHJlc3VsdC5jaWxpVXJsLCBzaGFyZVB3ZCA9IHJlc3VsdC5zaGFyZVB3ZDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZ2V0TW9kZVVybChjaWxpVXJsLCBzaGFyZVB3ZCwgb3Blbk1vZGUpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRNb2RlVXJsKGNpbGlVcmwsIHNoYXJlUHdkLCBvcGVuTW9kZSkge1xcbiAgICBpZiAoY2lsaVVybC5zdGFydHNXaXRoKFxcXCJtYWduZXRcXFwiKSkge1xcbiAgICAgICAgaWYgKG9wZW5Nb2RlID09PSBcXFwi5rW36ZiU6KeG55WMXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBjaWxpVXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImRvd25sb2FkOi8vXFxcIiArIGNpbGlVcmw7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAoY2lsaVVybC5pbmNsdWRlcyhcXFwicGFuLnF1YXJrLmNuL3MvXFxcIikpIHtcXG4gICAgICAgIGxldCBoYXMgPSBmZXRjaChcXFwiaGlrZXI6Ly9ob21lQFF1YXJrLueugFxcXCIpIT1cXFwibnVsbFxcXCI7XFxuICAgICAgICBpZiAoaGFzKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0P3J1bGU9UXVhcmsu566AJnJlYWx1cmw9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChjaWxpVXJsKSArIFxcXCImc2hhcmVQd2Q9XFxcIiArIChzaGFyZVB3ZCB8fCBcXFwiXFxcIik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBjaWxpVXJsO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKC9hbGkocGFufHl1bmRyaXZlKVxcXFwuY29tLy50ZXN0KGNpbGlVcmwpKXtcXG4gICAgICAgIGxldCBoYXMgPSBmZXRjaChcXFwiaGlrZXI6Ly9ob21lQOS6keebmOWQmy7nroBcXFwiKSE9XFxcIm51bGxcXFwiO1xcbiAgICAgICAgaWYgKGhhcykge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL2FsaXl1bj9ydWxlPeS6keebmOWQmy7nroAmcGFnZT1meXBhZ2UmcmVhbHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KSArIFxcXCImc2hhcmVQd2Q9XFxcIjtcXG4gICAgICAgICB9XFxuICAgIH1lbHNlIGlmIChjaWxpVXJsLnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgcmV0dXJuIFxcXCJ3ZWI6Ly9cXFwiICsgY2lsaVVybDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBjaWxpVXJsO1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGdldENvbXBsZXRlUnVsZShydWxlKSB7XFxuICAgIGxldCBmaW5kID0gbmV3IEZ1bmN0aW9uKFxcXCJzXFxcIiwgXFxcInBhZ2VcXFwiLCBcXFwidXNlclxcXCIsIFxcXCJiYXNpY1VybFxcXCIsIHJ1bGUuZmluZCk7XFxuICAgIHJ1bGUuZmluZCA9IChzLCBwYWdlKSA9PiBmaW5kKHMsIHBhZ2UsIHJ1bGUudXNlciB8fCB7fSwgcnVsZS5iYXNpY1VybCB8fCBcXFwiXFxcIik7XFxuICAgIGlmIChydWxlLmZpbmRBbGlVcmwpIHtcXG4gICAgICAgIHJ1bGUuZmluZEFsaVVybCA9IG5ldyBGdW5jdGlvbihcXFwiaW5wdXRcXFwiLCBcXFwiYmFzaWNVcmxcXFwiLCBydWxlLmZpbmRBbGlVcmwpO1xcbiAgICB9XFxuICAgIHJldHVybiBydWxlO1xcbn1cXG4kLmV4cG9ydHMuY2FycnlSdWxlID0gZnVuY3Rpb24ocnVsZSwgcywgcGFnZSwgc2VhcmNoTW9kZSwgb3Blbk1vZGUpIHtcXG4gICAgcnVsZSA9IGdldENvbXBsZXRlUnVsZShydWxlKTtcXG4gICAgbGV0IGxpc3QgPSBydWxlLmZpbmQocywgcGFnZSk7XFxuICAgIGlmICghbGlzdCkgcmV0dXJuIFtdO1xcbiAgICBsZXQgdXJsTGF6eSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGRvdWJsZVRyZWF0aW5nLCB7XFxuICAgICAgICBvcGVuTW9kZTogb3Blbk1vZGUsXFxuICAgICAgICBmaW5kQWxpVXJsOiBydWxlLmZpbmRBbGlVcmwsXFxuICAgICAgICBiYXNpY1VybDogcnVsZS5iYXNpY1VybCxcXG4gICAgICAgIG5hbWU6IHJ1bGUubmFtZVxcbiAgICB9LCBnZXRNb2RlVXJsKTtcXG4gICAgbGV0IGRlc2NUaXBzID0gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBydWxlLm5hbWUuZm9udGNvbG9yKFxcXCIjZjEzYjY2YVxcXCIpICsgXFxcIiZuYnNwO1xcXCI7XFxuICAgIGxldCByZXNMaXN0ID0gW107XFxuXFxuLy/lhbPplK7or43pq5jkuq5cXG5mdW5jdGlvbiBoaWdobGlnaHRLZXl3b3Jkcyh0ZXh0LCBrZXl3b3Jkcykge1xcbiAga2V5d29yZHMgPSBrZXl3b3Jkcy5zcGxpdChcXFwiXFxcIik7XFxuICBrZXl3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKGtleXdvcmQpIHtcXG4gICAgLy8g5a+55YWz6ZSu5a2X6L+b6KGM6L2s5LmJ5Lul6YG/5YWN54m55q6K5a2X56ym5Zyo5q2j5YiZ5Lit55qE6Zeu6aKY77yM54S25ZCO5bu656uL55So5LqO5Yy56YWN55qE5q2j5YiZ6KGo6L6+5byPXFxuICAgIHZhciBlc2NhcGVkS2V5d29yZCA9IGtleXdvcmQucmVwbGFjZSgvWy1cXFxcL1xcXFxcXFxcXiQqKz8uKCl8W1xcXFxde31dL2csICdcXFxcXFxcXCQmJyk7XFxuICAgIC8vIOmrmOS6ruWFs+mUruivje+8jOaOkumZpEhUTUzmoIfnrb7lhoXnmoTljLnphY1cXG4gICAgdmFyIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCcoPyE8W148Pl0qKSgnICsgZXNjYXBlZEtleXdvcmQgKyAnKSg/IVtePD5dKj4pJywgJ2dpJyk7XFxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocGF0dGVybiwgZnVuY3Rpb24obWF0Y2gpIHtcXG4gICAgICByZXR1cm4gJ+KAnOKAnOKAneKAnScgKyBtYXRjaC5mb250Y29sb3IoJyNGRjAwRkYnKTtcXG4gICAgfSk7XFxuICB9KTtcXG4gIHJldHVybiB0ZXh0O1xcbn1cXG4gICAgZm9yIChsZXQgaXQgb2YgbGlzdCkge1xcbiAgICAgICAgaWYgKGl0LnNraXApIHtcXG4gICAgICAgICAgICByZXNMaXN0LnB1c2goaXQpO1xcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHNlYXJjaE1vZGUgJiYgIXNlYXJjaENvbnRhaW5zKGl0LnRpdGxlLCBzLCB0cnVlKSkgY29udGludWU7XFxuICAgICAgICBpdC51cmwgPSBydWxlLmZpbmRBbGlVcmwgPyBpdC51cmwgKyB1cmxMYXp5IDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShnZXRNb2RlVXJsLCBpdC51cmwsIGl0LnNoYXJlUHdkIHx8IFxcXCJcXFwiLCBvcGVuTW9kZSk7XFxuICAgICAgICByZXNMaXN0LnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyBpdC50aXRsZSA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgaGlnaGxpZ2h0S2V5d29yZHMoaXQudGl0bGUsIHMpLFxcbiAgICAgICAgICAgIGRlc2M6IGRlc2NUaXBzICsgKGl0LmRlc2MgfHwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHVybDogaXQudXJsLFxcbiAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IE9iamVjdC5hc3NpZ24oe1xcbiAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICBub1BpYzogdHJ1ZVxcbiAgICAgICAgICAgIH0sIGl0LmV4dHJhKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc0xpc3Q7XFxufVxcbmxldCBzaXplID0gMTA7XFxuXFxubGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0VXNlZnVsSnNvbigpO1xcblxcbiQuZXhwb3J0cy5nZXREYXRhID0gZnVuY3Rpb24ocGFnZSwgcnVsZSkge1xcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT09IC0xKSB7XFxuICAgICAgICByZXR1cm4gcnVsZXMubWFwKGl0ID0+IFtpdC5uYW1lLCBpdC5iYXNpY1VybF0pO1xcbiAgICB9XFxuICAgIGlmIChydWxlICE9IG51bGwpIHtcXG4gICAgICAgIGlmIChwYWdlICE9IG51bGwgJiYgcGFnZSA+IDEpIHtcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSk7XFxuICAgIH1cXG4gICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBzdGFydCArIDEpIHtcXG4gICAgICAgIHJldHVybiBbXTtcXG4gICAgfVxcbiAgICBsZXQgbGVuID0gc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxuICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydDtcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLpobXpnaJcIixcInBhdGhcIjpcInNvdVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgY29kZXRlc3QgPSAkLnJlcXVpcmUoXFxcImNvZGV0ZXN0XFxcIik7XFxuXFxuZnVuY3Rpb24gc2V0Q2xpcCgpIHtcXG4gICAgZnVuY3Rpb24gZ2V0Q29weSgpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgY29uc3QgQ29udGV4dCA9IGFuZHJvaWQuY29udGVudC5Db250ZXh0O1xcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb20uZXhhbXBsZS5oaWtlcnZpZXcudWkuQXBwbGljYXRpb24oKS5nZXRDb250ZXh0KCk7XFxuICAgICAgICAgICAgLy8g6I635Y+W57O757uf5Ymq6LS05p2/XFxuICAgICAgICAgICAgbGV0IGNsaXBib2FyZCA9IGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNMSVBCT0FSRF9TRVJWSUNFKTtcXG4gICAgICAgICAgICAvLyDov5Tlm57mlbDmja5cXG4gICAgICAgICAgICBsZXQgY2xpcERhdGEgPSBjbGlwYm9hcmQuZ2V0UHJpbWFyeUNsaXAoKTtcXG4gICAgICAgICAgICBpZiAoY2xpcERhdGEgIT0gbnVsbCAmJiBjbGlwRGF0YS5nZXRJdGVtQ291bnQoKSA+IDApIHtcXG4gICAgICAgICAgICAgICAgLy8g5LuO5pWw5o2u6ZuG5Lit6I635Y+W77yI57KY6LS077yJ56ys5LiA5p2h5paH5pys5pWw5o2uXFxuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gY2xpcERhdGEuZ2V0SXRlbUF0KDApLmdldFRleHQoKTtcXG4gICAgICAgICAgICAgICAgaWYgKHRleHQgIT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0LnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGxldCB0ZXh0ID0gZ2V0Q29weSgpIHx8IFxcXCJcXFwiO1xcbiAgICBsZXQgdXJsID0gY29kZXRlc3QubWF0Y2hDb2RlKHRleHQpO1xcbiAgICBpZiAodXJsKSB7XFxuICAgICAgICBsZXQgY2FjaGUgPSBnZXRJdGVtKFxcXCJjbGlwYm9hcmRDYWNoZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlmICh1cmwgIT09IGNhY2hlKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiIzEzQjYxQlxcXCI+4paQIDwvZm9udD48Yj7muKnppqjmj5DnpLo8Yj4nLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5qOA5rWL5Yiw5Ymq6LS05p2/5ZCr5pyJ55Wq5Y+35piv5ZCm5omT5byAP1xcXFxuXFxcIiArIHVybCxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChpbnB1dCwgaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oaWQgKyBcXFwiY2xpcGJvYXJkXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zb3U/cD1meXBhZ2Umc2VhcmNoVGVybXM9XFxcIiArIGlucHV0O1xcbiAgICAgICAgICAgICAgICB9LCB1cmwsIGlkKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcImNsaXBib2FyZFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IFxcXCLmiZPlvIDpk77mjqVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJjbGlwYm9hcmRDYWNoZVxcXCIsIHVybCk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gc2V0SGVhZCgpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57Si77yaXFxcIiArIFtcXFwi6buY6K6kXFxcIiwgXFxcIueyvuWHhlxcXCJdW3NlYXJjaE1vZGVdLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBzZXRTZWFyY2hNb2RlKGdldFNlYXJjaE1vZGUoKSA/IDAgOiAxKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3NlYXJjaDZcXFwiXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmqKHlvI/vvJpcXFwiICsgb3Blbk1vZGUsXFxuICAgICAgICB1cmw6IFxcXCJzZWxlY3Q6Ly9cXFwiICsgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi56OB5Yqb5ZCbLueugOiuvue9rlxcXCIsXFxuICAgICAgICAgICAgb3B0aW9uczogW1xcXCLmqKHlvI/vvJrmtbfpmJTop4bnlYxcXFwiLCBcXFwi5qih5byP77ya56ys5LiJ5pa5QVBQXFxcIiwgXFxcIuinhOWImeeuoeeQhlxcXCIsIFxcXCLmlK/mjIHkvZzogIVcXFwiXSxcXG4gICAgICAgICAgICBjb2w6IDEsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoXFxcIuinhOWImeeuoeeQhlxcXCIgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVNYW5hZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoXFxcIuaUr+aMgeS9nOiAhVxcXCIgPT0gaW5wdXQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL0RvbmF0ZS52I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFxcXCLmqKHlvI/vvJpcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIm9wZW5Nb2RlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuesrOS4ieaWuUFQUFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdOS/ruaUueaIkOWKn1xcXFxu6K+356Gu5L+d5omL5py65pyJ5a6J6KOF5YW25LuW56OB6ZO+QVBQXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl8yX3JvdW5kXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fbWVudTZcXFwiXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfwn5SOJyxcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXlhbPplK7or40v6ZO+5o6lJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcXG4gICAgICAgICAgICBpZiAoL2FsaShwYW58eXVuZHJpdmUpXFxcXC5jb20vLnRlc3QoaW5wdXQpKSB7XFxuICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcInNcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvYWxpeXVuP3J1bGU95LqR55uY5ZCbLueugCZwYWdlPWZ5cGFnZSZyZWFsdXJsPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpICsgXFxcIiZzaGFyZVB3ZD1cXFwiO1xcbiAgICAgICAgICAgIH1lbHNlIGlmKGlucHV0LnN0YXJ0c1dpdGgoXFxcIm1hZ25ldDo/XFxcIikpe1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJzXFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBwdXRNeVZhcigncycsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dE15VmFyKCdyZWZzJyxpbnB1dClcXFwiLFxcbiAgICAgICAgICAgIGlkOiBpZCArIFxcXCJzc1xcXCIsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBzLFxcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogXFxcIuaJk+W8gOmTvuaOpVxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcblxcbmZ1bmN0aW9uIHNldFJ1bGVJdGVtKCkge1xcbiAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikuZ2V0RGF0YSgtMSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIvCfjJ9cXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9jb2xsZWN0aW9uP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogXFxcIlxcXCIgPT0gciA/IFxcXCLigJzigJzlhajpg6jigJ3igJ1cXFwiIDogXFxcIuWFqOmDqFxcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHMsIGlkKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHFyID0gZ2V0SXRlbShcXFwicnVsZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcInJ1bGVcXFwiKTtcXG4gICAgICAgICAgICBpZiAocykge1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcIuWFqOmDqFxcXCIgKyBpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzlhajpg6jigJ3igJ1cXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBpZiAocXIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oaWQgKyBxciwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBxclxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSwgcywgaWQpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IFxcXCLlhajpg6hcXFwiICsgaWRcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGZvciAobGV0IFtpdCwgYmFzaWNVcmxdIG9mIHJ1bGVzKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdCA9PSByID8gXFxcIuKAnOKAnFxcXCIgKyBpdCArIFxcXCLigJ3igJ1cXFwiIDogaXQsXFxuICAgICAgICAgICAgdXJsOiAkKChiYXNpY1VybCB8fCBcXFwiXFxcIikgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgociwgcywgaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHFyID0gZ2V0SXRlbShcXFwicnVsZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwicnVsZVxcXCIsIHIpO1xcbiAgICAgICAgICAgICAgICBpZiAocykge1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0ocXIgPyAoaWQgKyBxcikgOiAoXFxcIuWFqOmDqFxcXCIgKyBpZCksIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcXIgfHwgXFxcIuWFqOmDqFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbShpZCArIHIsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnFxcXCIgKyByICsgXFxcIuKAneKAnVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBpdCwgcywgaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IGlkICsgaXRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcblxcbn1cXG5cXG5mdW5jdGlvbiByZWNvcmQoKSB7XFxuICAgIGxldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIFtdKTtcXG4gICAgbGV0IGlpID0gaGlzdG9yeS5pbmRleE9mKHMpO1xcbiAgICBpZiAoaWkgPiAtMSkge1xcbiAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcbiAgICB9XFxuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA+IDIwKSB7XFxuICAgICAgICBoaXN0b3J5LnNwbGljZShoaXN0b3J5Lmxlbmd0aCAtIDEsIDEpO1xcbiAgICB9XFxuICAgIGhpc3RvcnkudW5zaGlmdChzKTtcXG4gICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIGhpc3RvcnkpO1xcbn1cXG5cXG5mdW5jdGlvbiBzZWFyY2hFbmQoKSB7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikuZ2V0RGF0YShwLCByICE9IFxcXCJcXFwiID8gciA6IG51bGwpO1xcbiAgICBsZXQgcGFnZWlkID0gaWQgKyBcXFwieXBqLXBhZ2VcXFwiICsgcDtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBwICsgXFxcIumhteS4re+8jOi/m+W6pu+8mjEvXFxcIiArIGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFwiXFxcIiA9PSByID8gMSA6IHA7XFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJkYXRhXFxcIikuY2FycnlSdWxlKHJ1bGUsIHMsIHJlYWxQYWdlLCBzZWFyY2hNb2RlLCBvcGVuTW9kZSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKHJ1bGUubmFtZSArIFxcXCI6XFxcIiArIGUudG9TdHJpbmcoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLyppZihkYXRhLmxlbmd0aD09PTEmJnA9PT0xKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpcXFwi4oCc4oCcXFxcIitydWxlLm5hbWUrXFxcIiBFUlJPUuKAneKAnVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBlLnRvU3RyaW5nKCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTpcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6XFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHBhcmFtOiBpdCxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXCJydWxlQFxcXCIgKyBpdC5uYW1lXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSArPSAxO1xcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJfbm90aGF2ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHJlc3VsdCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPT09IHBhcmFtLmFsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5sZW5ndGgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJfbm90aGF2ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6LWE5rqQ6YO95rKh5pyJ5ZOmfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwiX25vdGhhdmVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0ocGFnZWlkKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0ocGFnZWlkLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgTVlfUEFHRSArIFxcXCLpobXkuK3vvIzov5vluqbvvJpcXFwiICsgKHBhcmFtLmkgKyAxKSArIFxcXCIvXFxcIiArIHBhcmFtLmFsbCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgaTogMCxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHNldEhpc3RvcnkoKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJzxzcGFuIHN0eWxlPVxcXCJjb2xvcjojZmY2NjAxXFxcIj48Yj7ljoblj7LorrDlvZU8L2I+PC9zcGFuPicsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9jbG9ja1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICB1cmw6ICQoW1xcXCLmuIXpmaTmkJzntKLorrDlvZVcXFwiLCBcXFwi5omT5byA6KeC55yL6K6w5b2VXFxcIl0pLnNlbGVjdCgoaWQpID0+IHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFxcXCLmuIXpmaTmkJzntKLorrDlvZVcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLnoa7lrprmuIXpmaTlhajpg6jmkJzntKLorrDlvZXvvJ9cXFwiKS5jb25maXJtKChpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoaWQgKyBcXFwiOmtleVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBpZCArIFxcXCI6a2V5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0sIGlkKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vaGlzdG9yeT9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGlkKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpzZWFyY2hIaXN0b3J5XFxcIixcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIGxldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIFtdKTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICBmb3IgKGxldCBrZXkgb2YgaGlzdG9yeSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZToga2V5LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaWQsIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgZXh0cmEgPSBmaW5kSXRlbShpZCArIFxcXCJzc1xcXCIpLmV4dHJhO1xcbiAgICAgICAgICAgICAgICBleHRyYS5kZWZhdWx0VmFsdWUgPSBrZXk7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIH0sIGlkLCBrZXkpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBpZCArIFxcXCI6a2V5OlxcXCIgKyBrZXksXFxuICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCIsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yig6Zmk5YWz6ZSu6K+NOlxcXCIgKyBrZXksXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoaWQsIGtleSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIFtdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnNwbGljZShpLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hIaXN0b3J5XFxcIiwgaGlzdG9yeSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShpZCArIFxcXCI6a2V5OlxcXCIgKyBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG9hc3QoKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIGlkLCBrZXksIGkpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgaWYgKGhpc3RvcnkubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgY2xzOiBpZCArIFxcXCI6a2V5XFxcIixcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gc2V0VHJlbmRpbmdUYWJFbmQoKSB7XFxuICAgIGxldCBob3RDbGFzcyA9IHtcXG4gICAgICAgIFxcXCLnmb7luqZcXFwiOiB7XFxuICAgICAgICAgICAgXFxcIueUteinhuWJp1xcXCI6IFxcXCJ0ZWxlcGxheVxcXCIsXFxuICAgICAgICAgICAgXFxcIueUteW9sVxcXCI6IFxcXCJtb3ZpZVxcXCJcXG4gICAgICAgIH0sXFxuICAgICAgICBcXFwi5aS45YWLXFxcIjoge1xcbiAgICAgICAgICAgIFxcXCLnlLXop4bliadcXFwiOiBcXFwi55S16KeG5YmnXFxcIixcXG4gICAgICAgICAgICBcXFwi55S15b2xXFxcIjogXFxcIueUteW9sVxcXCIsXFxuICAgICAgICAgICAgXFxcIuWKqOa8q1xcXCI6IFxcXCLliqjmvKtcXFwiLFxcbiAgICAgICAgICAgIFxcXCLnu7zoibpcXFwiOiBcXFwi57u86Im6XFxcIlxcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICBsZXQgZGF0YVNvdXJjZSA9IE9iamVjdC5rZXlzKGhvdENsYXNzKTtcXG4gICAgbGV0IHNlbGVjdHNvdXJjZSA9IGdldEl0ZW0oXFxcImRhdGFTb3VyY2VcXFwiLCBkYXRhU291cmNlWzBdKTtcXG4gICAgbGV0IGhvdGtleXMgPSBPYmplY3Qua2V5cyhob3RDbGFzc1tzZWxlY3Rzb3VyY2VdKTtcXG4gICAgbGV0IHNlbGVjdGtleSA9IGdldEl0ZW0oXFxcImhvdGtleVxcXCIsIGhvdGtleXNbMF0pO1xcbiAgICBsZXQgdGFia2V5ID0gaG90Q2xhc3Nbc2VsZWN0c291cmNlXVtzZWxlY3RrZXldO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6I2ZmNjYwMVxcXCI+PGI+JyArIHNlbGVjdHNvdXJjZSArIHNlbGVjdGtleSArICfng63mkJw8L2I+PC9zcGFuPicsXFxuICAgICAgICB1cmw6ICQoaG90a2V5cywgMSwgXFxcIuWIh+aNoueDreaQnFxcXCIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwiaG90a2V5XFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5YiH5o2i5Li6XFxcIiArIGlucHV0O1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9maXJlXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWIh+aNouaVsOaNrua6kFxcXCIsXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChkYXRhU291cmNlKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChkYXRhU291cmNlLCAxLCBcXFwi5YiH5o2i5pWw5o2u5rqQXFxcIikuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJkYXRhU291cmNlXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwiaG90a2V5XFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LliIfmjaLkuLpcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSwgZGF0YVNvdXJjZSlcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5q2j5Zyo5Yqg6L29Li4uXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjpob3RrZXlcXFwiLFxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgICBsZXQgc2QgPSBbXTtcXG4gICAgbGV0IHNldFNlYXJjaEtleSA9IG5hbWUgPT4ge1xcbiAgICAgICAgcHV0TXlWYXIoJ3MnLCBuYW1lKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH07XFxuXFxuICAgIGxldCBnZXRUaXRsZSA9IChpLCBuYW1lKSA9PiB7XFxuICAgICAgICBsZXQgY29sb3I7XFxuICAgICAgICBzd2l0Y2ggKGkpIHtcXG4gICAgICAgICAgICBjYXNlIDA6XFxuICAgICAgICAgICAgICAgIGNvbG9yID0gXFxcIiNmZjMzMDBcXFwiO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIDE6XFxuICAgICAgICAgICAgICAgIGNvbG9yID0gXFxcIiNmZjY2MDBcXFwiO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIDI6XFxuICAgICAgICAgICAgICAgIGNvbG9yID0gXFxcIiNmZjk5MDBcXFwiXFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgIGNvbG9yID0gXFxcImJsYWNrXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFN0cmluZyhpICsgMSkuZm9udGNvbG9yKGNvbG9yKSArIFxcXCJcXFxcdFxcXFx0XFxcXHRcXFwiICsgbmFtZTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgc3dpdGNoIChzZWxlY3Rzb3VyY2UpIHtcXG4gICAgICAgICAgICBjYXNlIFxcXCLnmb7luqZcXFwiOlxcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vdG9wLmJhaWR1LmNvbS9hcGkvYm9hcmQ/cGxhdGZvcm09d2lzZSZ0YWI9JyArIHRhYmtleSArICcmdGFnPSU3QiUyMmNhdGVnb3J5JTIyOiUyMiVFNSU4NSVBOCVFOSU4MyVBOCVFNyVCMSVCQiVFNSU5RSU4QiUyMiU3RCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgNi4wOyBOZXh1cyA1IEJ1aWxkL01SQTU4TikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzk5LjAuNDg0NC41MSBNb2JpbGUgU2FmYXJpLzUzNy4zNicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0hvc3QnOiAndG9wLmJhaWR1LmNvbScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiAnemgtQ04semg7cT0wLjksZW4tVVM7cT0wLjgsZW47cT0wLjcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCwgZGVmbGF0ZSwgYnInLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdG9wLmJhaWR1LmNvbS9ib2FyZD90YWI9bm92ZWwnLFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcyA9IERhdGUubm93KCk7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gSlNPTi5wYXJzZShqc29uKS5kYXRhLmNhcmRzWzBdLmNvbnRlbnQ7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBsaXN0W2ldO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpdGVtLndvcmQgKyAnICgnICsgaXRlbS5zaG93WzJdICsgJyknO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlcyA9IGl0ZW0uZGVzYztcXG4gICAgICAgICAgICAgICAgICAgIHNkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRUaXRsZShpLCBuYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoc2V0U2VhcmNoS2V5LCBpdGVtLndvcmQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlcyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIFxcXCLlpLjlhYtcXFwiOlxcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IHJlcXVlc3QoXFxcImh0dHBzOi8vbmV3cy5teXF1YXJrLmNuL3YyL3RvcGxpc3QvbW92aWU/JmNoYW5uZWw9XFxcIiArIHRhYmtleSArIFxcXCImcmFua190eXBlPSVFNiU5QyU4MCVFNyU4MyVBRFxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgeG1sRGF0YSA9IChKU09OLnBhcnNlKGpzb24pLmRhdGEgfHwgXFxcIlxcXCIpLnJlcGxhY2UoL3RpdGxlPi9nLCBcXFwiaF90aXRsZT5cXFwiKS5yZXBsYWNlKC9zcmM+L2csIFxcXCJoX3NyYz5cXFwiKS5yZXBsYWNlKC9hcmVhPi9nLCBcXFwiaF9hcmVhXFxcIik7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gcGRmYSh4bWxEYXRhLCBcXFwiYm9keSYmaXRlbVxcXCIpO1xcbiAgICAgICAgICAgICAgICB2YXIgZ2V0VGV4dCA9IHQgPT4gdDtcXG4gICAgICAgICAgICAgICAgdmFyIHRyZW5kID0gW1xcXCLjhKdcXFwiLCBcXFwi4oaRXFxcIiwgXFxcIuKGk1xcXCJdO1xcbiAgICAgICAgICAgICAgICAvL3ZhciBzID0gRGF0ZS5ub3coKTtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IGxpc3RbaV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXRlbSwgXFxcImhfdGl0bGUmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXMgPSBcXFwi54Ot5bqm77yaXFxcIiArIHBkZmgoaXRlbSwgXFxcImhvdF9zY29yZSYmVGV4dFxcXCIpICsgXFxcIiBcXFwiICsgdHJlbmQuYXQocGRmaChpdGVtLCBcXFwiaG90X3RyZW5kJiZUZXh0XFxcIikpICtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiXFxcXG7or4TliIbvvJpcXFwiICsgcGRmaChpdGVtLCBcXFwic2NvcmVfYXZnJiZUZXh0XFxcIikucmVwbGFjZSgvXjAkLywgXFxcIuaaguaXoOivhOWIhlxcXCIpICtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiXFxcXG5cXFwiICsgcGRmaChpdGVtLCBcXFwieWVhciYmVGV4dFxcXCIpICsgXFxcIsK3XFxcIiArIHBkZmgoaXRlbSwgXFxcImhfYXJlYSYmVGV4dFxcXCIpICsgXFxcIsK3XFxcIiArIHBkZmgoaXRlbSwgXFxcImNhdGVnb3J5JiZUZXh0XFxcIikucmVwbGFjZShcXFwiLFxcXCIsIFxcXCLCt1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgc2QucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldFRpdGxlKGksIG5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZShzZXRTZWFyY2hLZXksIG5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlcyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkZmgoaXRlbSwgXFxcImhfc3JjJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgXFxcIjpob3RrZXlcXFwiLCBzZCk7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICB9IGZpbmFsbHkge1xcbiAgICAgICAgZGVsZXRlSXRlbShpZCArIFxcXCI6aG90a2V5XFxcIik7XFxuICAgIH1cXG59XFxubGV0IHIgPSBnZXRJdGVtKFxcXCJydWxlXFxcIiwgXFxcIlxcXCIpO1xcbmxldCBoaWRlU2V0dGluZyA9IE1ZX1BBUkFNUy5oaWRlU2V0dGluZyB8fCBnZXRQYXJhbShcXFwic2VhcmNoVGVybXNcXFwiLCBcXFwiXFxcIikgPT09IFxcXCJ0cnVlXFxcIjtcXG5sZXQgcyA9IGdldE15VmFyKCdzJywgJycpIHx8IE1ZX1BBUkFNUy5zZWFyY2hUZXJtcyB8fCBkZWNvZGVVUklDb21wb25lbnQoZ2V0UGFyYW0oXFxcInNlYXJjaFRlcm1zXFxcIiwgXFxcIlxcXCIpKTtcXG5sZXQgc2VhcmNoTW9kZSA9IGdldFNlYXJjaE1vZGUoKTtcXG5sZXQgb3Blbk1vZGUgPSBnZXRJdGVtKFxcXCJvcGVuTW9kZVxcXCIsIFxcXCLmtbfpmJTop4bnlYxcXFwiKTtcXG5sZXQgaWQgPSBEYXRlLm5vdygpICsgTVlfUlVMRS50aXRsZTtcXG5sZXQgZCA9IFtdO1xcbmlmIChNWV9QQUdFID09PSAxKSB7XFxuICAgLy8gc2V0UHJlcG9zZSgpO1xcbiAgICBpZiAoIWhpZGVTZXR0aW5nKSB7XFxuICAgICAgICBzZXRDbGlwKCk7XFxuICAgICAgICBzZXRIZWFkKCk7XFxuICAgIH1cXG4gICAgc2V0UnVsZUl0ZW0oKTtcXG4gICAgaWYgKCFzKSB7XFxuICAgICAgICBzZXRIaXN0b3J5KCk7XFxuICAgIH1cXG59XFxuaWYgKHMpIHtcXG4gICAgcmVjb3JkKCk7XFxuICAgIHNlYXJjaEVuZCgpO1xcbn0gZWxzZSBpZiAoTVlfUEFHRSA9PT0gMSkge1xcbiAgICBzZXRUcmVuZGluZ1RhYkVuZCgpO1xcbn0gZWxzZSB7XFxuICAgIHNldFJlc3VsdChbXSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi572R6aG15rWP6KeIXCIsXCJwYXRoXCI6XCJ5c2Z4XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcblxcbmxldCBvcGVuTW9kZSA9IGdldEl0ZW0oXFxcIm9wZW5Nb2RlXFxcIik7XFxubGV0IHJ1bGUgPSBNWV9SVUxFLnRpdGxlO1xcbmxldCB1cmwgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0UGFyYW0oXFxcIndlYlVybFxcXCIsXFxcIlxcXCIpKTtcXG5cXG5mdW5jdGlvbiBpbnRlcmNlcHQocnVsZSwgb3JpZ2luLCBvcGVuTW9kZSkge1xcbiAgICBsZXQgaG9zdCA9IG9yaWdpbi5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcImh0dHA6Ly98aHR0cHM6Ly9cXFwiKSwgXFxcIlxcXCIpLnNwbGl0KFxcXCIvXFxcIilbMF07XFxuICAgIGxldCBob3N0cyA9IGhvc3Quc3BsaXQoXFxcIi5cXFwiKTtcXG4gICAgaWYgKGhvc3RzLmxlbmd0aCA+IDIpIHtcXG4gICAgICAgIGhvc3QgPSBob3N0c1tob3N0cy5sZW5ndGggLSAyXSArIFxcXCIuXFxcIiArIGhvc3RzW2hvc3RzLmxlbmd0aCAtIDFdO1xcbiAgICB9XFxuICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJtYWduZXRcXFwiKSkge1xcbiAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmuKnppqjmj5DnpLpcXFwiLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLmo4DmtYvliLDmlrDnmoTno4Hpk77lnLDlnYDvvIzngrnlh7vnoa7lrprmjInpkq7ljbPlj6/mkq3mlL7vvIzngrnlh7vlj5bmtojmjInpkq7lj6/ku6XlpI3liLbpk77mjqVcXFwiLFxcbiAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFnO1xcbiAgICAgICAgICAgIH0sIGlucHV0KSxcXG4gICAgICAgICAgICBjYW5jZWw6ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly9cXFwiICsgbWFnXFxuICAgICAgICAgICAgfSwgaW5wdXQpXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9ICBlbHNlIGlmICgvXFxcXC4obXAzfGZsYWN8bTRhKSQvLnRlc3QoaW5wdXQpKSB7XFxuICAgICAgICBsb2coaW5wdXQpO1xcbiAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucGxheVZpZGVvKHVybCk7XFxuICAgICAgICB9LCBpbnB1dCwgcnVsZSk7XFxuICAgIH0gZWxzZSBpZiAoIWlucHV0LmluY2x1ZGVzKGhvc3QpICYmIGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgbG9nKGlucHV0KTtcXG4gICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuivpuaDhVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS95c2Z4P3dlYlVybD1cXFwiK2VuY29kZVVSSUNvbXBvbmVudCh1cmwpK1xcXCImcnVsZT1cXFwiK3J1bGUsXFxuICAgICAgICAgICAgfSkpXFxuICAgICAgICB9LCBpbnB1dCwgcnVsZSk7XFxuICAgIH0gZWxzZSBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgbG9nKGlucHV0KTtcXG4gICAgICAgIC8v6IO95ZSk6LW3QVBQ55qE55m95ZCN5Y2VXFxuICAgICAgICBsZXQgd2hpdGUgPSBbXFxuICAgICAgICAgICAgXFxcInFrbGlua1xcXCIsXFxuICAgICAgICAgICAgXFxcImJkbmV0ZGlza1xcXCIsXFxuICAgICAgICAgICAgXFxcInh1bmxlaWFwcFxcXCIsXFxuICAgICAgICAgICAgXFxcInNtYXJ0ZHJpdmVcXFwiXFxuICAgICAgICBdO1xcbiAgICAgICAgbGV0IGluV2hpdGUgPSB3aGl0ZS5maWx0ZXIoaXQgPT4gaW5wdXQuc3RhcnRzV2l0aChpdCkpLmxlbmd0aCA+IDA7XFxuICAgICAgICBpZiAoIWluV2hpdGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuVGhpcmRBcHAgJiYgZnlfYnJpZGdlX2FwcC5vcGVuVGhpcmRBcHAodXJsKTtcXG4gICAgICAgIH0sIGlucHV0LCBydWxlKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBsb2FkSnMoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAoZG9jdW1lbnQudGl0bGUgJiYgZG9jdW1lbnQudGl0bGUubGVuZ3RoKSB7XFxuICAgICAgICAgICAgbGV0IHIgPSAkJCQoKS5sYXp5UnVsZSgodCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUodCk7XFxuICAgICAgICAgICAgfSwgZG9jdW1lbnQudGl0bGUpO1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucGFyc2VMYXp5UnVsZShyKTtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2coZS50b1N0cmluZygpKTtcXG4gICAgfVxcbn1cXG5cXG5kLnB1c2goe1xcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB1cmxJbnRlcmNlcHRvcjogJC50b1N0cmluZyhpbnRlcmNlcHQsIHJ1bGUsIGdldEhvbWUodXJsKSwgb3Blbk1vZGUpLFxcbiAgICAgICAganM6ICQudG9TdHJpbmcobG9hZEpzKSxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlXFxuICAgIH1cXG59KTtcXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuLvpobXlpITnkIZcIixcInBhdGhcIjpcIk1haW5cIixcInJ1bGVcIjpcImlmIChnZXRJdGVtKFxcXCJmaXJzdFxcXCIpID09IE1ZX1JVTEUudmVyc2lvbikge1xcbiAgICAkLnJlcXVpcmUoXFxcInNvdVxcXCIpO1xcbn0gZWxzZSBpZiAoTVlfUEFHRSA9PT0gMSkge1xcbiAgICBsZXQgZCA9IFtdXFxuICAgIGxldCB0aW1lID0gZ2V0SXRlbShcXFwiZmlyc3RcXFwiLCBcXFwiXFxcIikgPyA2IDogMjA7XFxuICAgIGxldCBpZCA9IERhdGUubm93KCk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzdHJvbmc+5L2/55So5YmN6aG755+lPC9zdHJvbmc+XFxcIi5iaWcoKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCIxLiDmnKzlsI/nqIvluo/miYDmnInku6PnoIHlhajpg6jlvIDmupDvvIzkuJTmnKzop4TliJnkuLrlrabkuaDnm67nmoTvvIzor7fkuo7lr7zlhaUyNOWwj+aXtuWGheWIoOmZpO+8ge+8ge+8gTxicj4yLiDmnKzlsI/nqIvluo88Yj7lrozlhajlhY3otLk8L2I+77yM5aaC5p6c5L2g5piv5LuY6LS56LSt5Lmw55qE5oGt5Zac5L2g6KKr6aqX5LqG44CCPGJyPuW9k+eEtuWmguaenOacieiDveWKm+aDs+m8k+WKseS9nOiAheeahOWPr+S7pTxhIGhyZWY9J2hpa2VyOi8vcGFnZS9Eb25hdGUudiNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMnPuaUr+aMgeS4gOS4izwvYT4oPHNtYWxsPueCueWHu+WPr+i/m+WFpeaNkOi1oO+8jOWPr+WcqOS4u+mhteiPnOWNlei/m+WFpTwvc21hbGw+KeOAgjxicj4zLiDmnKzlsI/nqIvluo/mmK/lnKjljp/niYjjgIzkupHnm5jlkJsu566A44CN55qE5Z+656GA6L+b6KGM55qE5LqM5qyh5L+u5pS577yM6K+35pSv5oyB5Y6f54mI44CCPGJyPjQuIOivt+OAjOejgeWKm+WQmy7nroDjgI3nmoTkuozmrKHkv67mlLnlsIrph43kuIDkuIvljp/niYjvvIzosKLosKLjgII8YnI+PGJyPjxiPuW8gOWni+S9v+eUqOacrOinhOWImeWNs+S7o+ihqOmBteWuiOinhOWImeadoeS+izwvYj48YnI+5b2T5YmN54mI5pys77yaXFxcIiArIE1ZX1JVTEUudmVyc2lvbixcXG4gICAgICAgIFxcXCJjb2xfdHlwZVxcXCI6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgIH0sIHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IHRpbWUgKyBcXFwi56eS5ZCO57un57utXFxcIixcXG4gICAgICAgIHVybDogXFxcInRvYXN0Oi8v6K+36K6k55yf6ZiF6K+75Lul5LiK5YaF5a65XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBpZCArIFxcXCJ0aW1lclxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHNldFJlc3VsdChkKTtcXG4gICAgd2hpbGUgKHRpbWUgIT0gMCkge1xcbiAgICAgICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgxMDAwKTtcXG4gICAgICAgIHRpbWUgLT0gMTtcXG4gICAgICAgIHVwZGF0ZUl0ZW0oaWQgKyBcXFwidGltZXJcXFwiLCB7XFxuICAgICAgICAgICAgdGl0bGU6IHRpbWUgKyBcXFwi56eS5ZCO57un57utXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgdXBkYXRlSXRlbShpZCArIFxcXCJ0aW1lclxcXCIsIHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc5oiR5ZCM5oSP5Lul5LiK6KaB5rGC4oCd4oCdXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodikgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcImZpcnN0XFxcIiwgU3RyaW5nKHYpKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mhJ/osKLmgqjnmoTnkIbop6NcXFwiO1xcbiAgICAgICAgfSwgTVlfUlVMRS52ZXJzaW9uKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5o2Q6LWgXCIsXCJwYXRoXCI6XCJEb25hdGUudlwiLFwicnVsZVwiOlwianM6XFxubGV0IGQgPSBbXTtcXG5zZXRQYWdlVGl0bGUoXFxcIuaNkOi1oC/mlK/mjIFcXFwiKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuaNkOi1oC/mlK/mjIFcXFwiLFxcbiAgICBkZXNjOiBcXFwi6L+Z5Liq5o2Q6LWg5LiN6IO95Li65L2g5bim5p2l54m55p2D77yM5L2G5oKo55qE5pSv5oyB5piv5oiR5pu05paw5Yib5L2c55qE5Yqo5Yqb44CCXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdXJsOiBcXFwidG9hc3Q6Ly/mhJ/osKLmgqjnmoTmlK/mjIFcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJwaWNfMV9mdWxsXFxcIixcXG4gICAgdXJsOiBcXFwiaHR0cHM6Ly9naXRlZS5jb20vTG95RGdJay9Mb3lEZ0lrX1J1bGUvcmF3L21hc3Rlci82N2Q4ZjAxODdmMDE4NmMxLnBuZ1xcXCIsXFxuICAgIHBpY191cmw6IFxcXCJodHRwczovL2dpdGVlLmNvbS9Mb3lEZ0lrL0xveURnSWtfUnVsZS9yYXcvbWFzdGVyLzY3ZDhmMDE4N2YwMTg2YzEucG5nXFxcIlxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCLlm77niYfliqDovb3nvJPmhaLor7fnqI3nrYlcXFwiLnNtYWxsKCkuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnmlofku7ZcIixcInBhdGhcIjpcImNvbmZpZ3NcIixcInJ1bGVcIjpcImNvbnN0IHBhdGggPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9Mb3lEZ0lrL2NpbGlTaW1wbGVSdWxlcy5qc29uXFxcIjtcXG5cXG5cXG5mdW5jdGlvbiBnZXRKc29uKCkge1xcbiAgICB0cnkge1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGUocGF0aCkgfHwgXFxcIltdXFxcIik7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGRlbGV0ZUZpbGUocGF0aCk7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gc2F2ZUpzb24oanNvbikge1xcbiAgICBzYXZlRmlsZShwYXRoLCBKU09OLnN0cmluZ2lmeShqc29uKSk7XFxufVxcblxcbmZ1bmN0aW9uIGdldFVzZWZ1bEpzb24oKSB7XFxuICAgIHJldHVybiBnZXRKc29uKCkuZmlsdGVyKHYgPT4gIXYuZm9yYmlkZGVuKTtcXG59XFxuZnVuY3Rpb24gZ2V0Rm9yYmlkZGVuSnNvbigpe1xcbiAgICByZXR1cm4gZ2V0SnNvbigpLmZpbHRlcih2ID0+IHYuZm9yYmlkZGVuKTtcXG59XFxuXFxuaWYoIWZpbGVFeGlzdChwYXRoKSYmTVlfUlVMRSl7XFxuICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFwicnVsZXNcXFwiKTtcXG4gICAgJC5oaWtlci53aW5kb3cgPSB7fTtcXG4gICAgZXZhbC5jYWxsKG51bGwsIGZldGNoKCdoaWtlcjovL2Fzc2V0cy9iZWF1dGlmeS5qcycpKTtcXG4gICAgcnVsZXMgPSBydWxlcy5tYXAoKHYpPT57XFxuICAgICAgICB2LmZpbmQgPSB3aW5kb3cuanNfYmVhdXRpZnkodi5maW5kLnRvU3RyaW5nKCkucmVwbGFjZSgvZnVuY3Rpb24uKj9cXFxcKHMuKj9wYWdlXFxcXCkuKj9cXFxcey8sIFxcXCJcXFwiKS5yZXBsYWNlKC8oXFxcXH1bXFxcXHNcXFxcU10uKj8pJC8sXFxcIlxcXCIpKTtcXG4gICAgICAgIGlmKHYuZmluZEFsaVVybCl7XFxuICAgICAgICAgICAgdi5maW5kQWxpVXJsID0gd2luZG93LmpzX2JlYXV0aWZ5KHYuZmluZEFsaVVybC50b1N0cmluZygpLnJlcGxhY2UoL2Z1bmN0aW9uLio/XFxcXChpbnB1dFxcXFwpLio/XFxcXHsvLCBcXFwiXFxcIikucmVwbGFjZSgvKFxcXFx9W1xcXFxzXFxcXFNdLio/KSQvLFxcXCJcXFwiKSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdjtcXG4gICAgfSk7XFxuICAgIHNhdmVKc29uKHJ1bGVzKTtcXG4gICAgdG9hc3QoXFxcIuW3suWIneWni+WMllxcXCIpO1xcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIGdldEpzb246IGdldEpzb24sXFxuICAgIHNhdmVKc29uOiBzYXZlSnNvbixcXG4gICAgZ2V0VXNlZnVsSnNvbjogZ2V0VXNlZnVsSnNvbixcXG4gICAgZ2V0Rm9yYmlkZGVuSnNvbjogZ2V0Rm9yYmlkZGVuSnNvbixcXG4gICAgcGF0aDogcGF0aFxcbn07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnnrqHnkIZcIixcInBhdGhcIjpcInJ1bGVNYW5hZ2VcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuc2V0UGFnZVRpdGxlKFxcXCLop4TliJnnrqHnkIZcXFwiKTtcXG5sZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbmxldCBsZW5ndGggPSBhcnIubGVuZ3RoO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5paw5aKeXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9yb3VuZF9zbWFsbF80XFxcIixcXG4gICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fZG9tYWluX2NvbmZpZ1xcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBwYWdlVGl0bGU6IFxcXCLmlrDlop7op4TliJlcXFwiXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuWIhuS6q1xcXCIsXFxuICAgIHVybDogJChcXFwiLTFcXFwiLCBcXFwi6L6T5YWl5L2g6KaB5YiG5Lqr6KeE5YiZ55qE5bqP5Y+3XFxcXG4tMeWFqOmDqO+8jC0y5bey5ZCv55So55qE77yMLTPlt7LnpoHnlKjnmoTvvIzlpJrkuKrnlKgn77yMJ+malOW8gFxcXCIpLmlucHV0KChsZW5ndGgpID0+IHtcXG4gICAgICAgIGxldCBpbmRleGMgPSBpbnB1dC5zcGxpdCgvLHzvvIwvKTtcXG4gICAgICAgIGxldCBpbmRleHMgPSBbXTtcXG4gICAgICAgIGxldCBtbyA9IHBhcnNlSW50KGluZGV4Y1swXSk7XFxuICAgICAgICBpZiAoIShpbmRleGMubGVuZ3RoID09PSAxICYmIG1vIDwgMCAmJiBtbyA+IC00KSkge1xcbiAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGluZGV4Yykge1xcbiAgICAgICAgICAgICAgICBsZXQgbnVtID0gcGFyc2VJbnQoaXQpO1xcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bSkgfHwgbnVtID49IGxlbmd0aCB8fCBudW0gPCAwKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pWw5a2X5LiN5ZCI5rOVXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpbmRleHMucHVzaChudW0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiAkKFtcXFwiSElLRVJcXFwiLCBcXFwiVFhUXFxcIl0uY29uY2F0KGdldFBhc3RlcygpKSwgMiwgXFxcIuWIhuS6q+aWueW8j1xcXCIpLnNlbGVjdCgobW8sIGluZGV4cykgPT4ge1xcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVwKHJ1bGVzKSB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlYjY0ID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHJ1bGVzKSk7XFxuICAgICAgICAgICAgICAgIGxldCBnZXRQYXNzID0gKGxlbmd0aCwgcnVsZSwgdHlwZSkgPT4gXFxcIua1t+mYlOinhueVjOejgeWKm+WQmy7nroDmkJzntKLlvJXmk47vvIzlhbHjgIxcXFwiICsgbGVuZ3RoICsgXFxcIuOAjeadoe+8jOWkjeWItuaVtOadoeWPo+S7pOaJk+W8gOi9r+S7tuWwseS8muiHquWKqOWvvOWFpSRcXFwiICsgcnVsZSArIFxcXCIkXFxcIiArIHR5cGUgKyBcXFwiQGltcG9ydD1qczokLnJlcXVpcmUoJ2ltcG9ydD9ydWxlPScrXFxcIiArIEpTT04uc3RyaW5naWZ5KE1ZX1JVTEUudGl0bGUpICsgXFxcIikoaW5wdXQpXFxcIjtcXG4gICAgICAgICAgICAgICAgaWYgKGdldFBhc3RlcygpLmluY2x1ZGVzKGlucHV0KSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBzaGFyZVBhc3RlKHJ1bGViNjQsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBnZXRQYXNzKHJ1bGVzLmxlbmd0aCwgdSwgXFxcImJcXFwiKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvTG95RGdJay9zaGFyZS/kupHnroDmkJzntKLlvJXmk47op4TliJnjgIxcXFwiICsgcnVsZXMubGVuZ3RoICsgXFxcIuOAjeadoS5cXFwiICsgKGlucHV0ID09PSBcXFwiSElLRVJcXFwiID8gXFxcImhpa2VyXFxcIiA6IFxcXCJ0eHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXRoLCBnZXRQYXNzKHJ1bGVzLmxlbmd0aCwgcnVsZWI2NCwgXFxcImFcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInNoYXJlOi8vXFxcIiArIHBhdGg7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHJ1bGVzO1xcbiAgICAgICAgICAgIGlmIChtbyA9PT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChtbyA9PT0gLTIpIHtcXG4gICAgICAgICAgICAgICAgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRVc2VmdWxKc29uKCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChtbyA9PT0gLTMpIHtcXG4gICAgICAgICAgICAgICAgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRGb3JiaWRkZW5Kc29uKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCkuZmlsdGVyKCh2LCBpKSA9PiBpbmRleHMuaW5jbHVkZXMoaSkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBydWxlcyA9IHJ1bGVzLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgICAgICB2LnVzZXIgPSB1bmRlZmluZWQ7XFxuICAgICAgICAgICAgICAgIHYuZm9yYmlkZGVuID0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gdXAocnVsZXMpO1xcbiAgICAgICAgfSwgbW8sIGluZGV4cyk7XFxuXFxuICAgIH0sIGxlbmd0aCksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9yb3VuZF9zbWFsbF80XFxcIixcXG4gICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fc2hhcmVfZ3JlZW5cXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLph43nva5cXFwiLFxcbiAgICB1cmw6ICQoXFxcIuS9oOehruWumumHjee9ru+8n1xcXFxu6K+l5pON5L2c5Lya5Yig6Zmk546w5pyJ6KeE5YiZ77yM5oGi5aSN6Ieq5bim6KeE5YiZ44CCXFxcIikuY29uZmlybSgocGF0aCkgPT4ge1xcbiAgICAgICAgZGVsZXRlRmlsZShwYXRoKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgIH0sICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnBhdGgpLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fcm91bmRfc21hbGxfNFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3JlZnJlc2hcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmuIXnqbpcXFwiLFxcbiAgICB1cmw6ICQoXFxcIuS9oOehruWumuWFqOmDqOWIoOmZpO+8n1xcXFxu6K+l5pON5L2c5Lya5Yig6Zmk546w5pyJ6KeE5YiZ44CCXFxcIikuY29uZmlybSgocGF0aCkgPT4ge1xcbiAgICAgICAgd3JpdGVGaWxlKHBhdGgsIFxcXCJbXVxcXCIpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgfSwgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikucGF0aCksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9yb3VuZF9zbWFsbF80XFxcIixcXG4gICAgcGljX3VybDogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fY29kZV92aWV3XFxcIlxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcIiMxM0I2MUJcXFwiPuKWkCA8L2ZvbnQ+PGI+6KeE5YiZ5YiX6KGoPGI+ICgnICsgU3RyaW5nKGxlbmd0aCkuZm9udGNvbG9yKFxcXCIjZmY2NjAxXFxcIikgKyBcXFwiKVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG59KTtcXG5cXG5mb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XFxuICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgbGV0IHVzZXIgPSBpdC51c2VyIHx8IHt9O1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ1bJyArIGkgKyAnXTxiPiAgJyArIGl0Lm5hbWUgKyAnPGI+JyArIChpdC5mb3JiaWRkZW4gPyBcXFwiICPigJzigJznpoHnlKjigJ3igJ1cXFwiLnNtYWxsKCkgOiBcXFwiXFxcIikgKyAoaXQucmVnaXN0ZXJVcmwgJiYgISh1c2VyLnBhc3N3b3JkIHx8IHVzZXIuYWNjb3VudCB8fCB1c2VyLmV4dHJhKSA/IFxcXCIgI+mcgOimgeeZu+W9lVxcXCIuc21hbGwoKSA6IFxcXCJcXFwiKSxcXG4gICAgICAgIHVybDogJChbXFxcIue8lui+kVxcXCIsIFxcXCLotKblj7dcXFwiLCBcXFwi5YiG5LqrXFxcIiwgXFxcIuemgeeUqC/lkK/nlKhcXFwiLCBcXFwi56e75YqoXFxcIiwgXFxcIue9rumhtlxcXCJdLCAxLCBcXFwi5pON5L2c77yaXFxcIiArIGl0Lm5hbWUpLnNlbGVjdCgoaW5kZXgsIGxlbmd0aCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIue8lui+kVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcnVsZUVkaXQjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi6LSm5Y+3XFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9wYXNzd29yZCNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLliIbkuqtcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxldCBvcHMgPSBnZXRQYXN0ZXMoKTtcXG4gICAgICAgICAgICAgICAgb3BzLnVuc2hpZnQoXFxcIuWujOaVtOWPo+S7pFxcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChvcHMsIDIsIFxcXCLliIbkuqvmlrnlvI9cXFwiKS5zZWxlY3QoKGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZSA9ICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLmdldEpzb24oKVtpbmRleF07XFxuICAgICAgICAgICAgICAgICAgICBydWxlLnVzZXIgPSB1bmRlZmluZWQ7XFxuICAgICAgICAgICAgICAgICAgICBydWxlLmZvcmJpZGRlbiA9IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBydWxlYjY0ID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHJ1bGUpKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRQYXNzID0gKG5hbWUsIHJ1bGUsIHR5cGUpID0+IFxcXCLmtbfpmJTop4bnlYzvvIzjgIxcXFwiICsgbmFtZSArIFxcXCLjgI3no4HlipvlkJsu566A5pCc57Si5byV5pOO77yM5aSN5Yi25pW05p2h5Y+j5Luk5omT5byA6L2v5Lu25bCx5Lya6Ieq5Yqo5a+85YWlJFxcXCIgKyBydWxlICsgXFxcIiRcXFwiICsgdHlwZSArIFxcXCJAaW1wb3J0PWpzOiQucmVxdWlyZSgnaW1wb3J0P3J1bGU9JytcXFwiICsgSlNPTi5zdHJpbmdpZnkoTVlfUlVMRS50aXRsZSkgKyBcXFwiKShpbnB1dClcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLlrozmlbTlj6Pku6RcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIGdldFBhc3MocnVsZS5uYW1lLCBydWxlYjY0LCBcXFwiYVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHNoYXJlUGFzdGUocnVsZWI2NCwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBnZXRQYXNzKHJ1bGUubmFtZSwgdSwgXFxcImJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgaW5kZXgpO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLnp7vliqhcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKGluZGV4ICsgXFxcIlxcXCIsIFxcXCLovpPlhaXkvY3nva5cXFwiKS5pbnB1dCgoaW5kZXgsIGxlbmd0aCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0luZGV4ID0gTnVtYmVyKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4obmV3SW5kZXgpIHx8IG5ld0luZGV4ID49IGxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuI3lkozop4TnmoTkvY3nva5cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSBydWxlcy5zcGxpY2UoaW5kZXgsIDEpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMuc3BsaWNlKG5ld0luZGV4LCAwLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnNhdmVKc29uKHJ1bGVzKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgfSwgaW5kZXgsIGxlbmd0aCk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcIue9rumhtlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IG5ld0luZGV4ID0gMDtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IHJ1bGVzLnNwbGljZShpbmRleCwgMSlbMF07XFxuICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZSk7XFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnNhdmVKc29uKHJ1bGVzKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlID0gYXJyW2luZGV4XTtcXG4gICAgICAgICAgICAgICAgcnVsZS5mb3JiaWRkZW4gPSAhcnVsZS5mb3JiaWRkZW47XFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFwiY29uZmlnc1xcXCIpLnNhdmVKc29uKGFycik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgLy9yZXR1cm4gXFxcInRvYXN0Oi8vXFxcIiArIChydWxlLmZvcmJpZGRlbiA/IFxcXCLnpoHnlKhcXFwiIDogXFxcIuWQr+eUqFxcXCIpICsgcnVsZS5uYW1lO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGksIGxlbmd0aCksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGk6IGksXFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBpdC5uYW1lXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnnvJbovpFcIixcInBhdGhcIjpcInJ1bGVFZGl0XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcInBzX25hbWVcXFwiKTtcXG4gICAgY2xlYXJNeVZhcihcXFwicHNfZmluZFxcXCIpO1xcbiAgICBjbGVhck15VmFyKFxcXCJwc19maW5kQWxpVXJsXFxcIik7XFxuICAgIGNsZWFyTXlWYXIoXFxcInBzX3BhZ2VcXFwiKTtcXG4gICAgY2xlYXJNeVZhcihcXFwicHNfcmVnaXN0ZXJVcmxcXFwiKTtcXG4gICAgY2xlYXJNeVZhcihcXFwicHNfYmFzaWNVcmxcXFwiKTtcXG59KSk7XFxubGV0IHVybEluZGV4ID0gcGFyc2VJbnQoZ2V0UGFyYW0oXFxcImluZGV4XFxcIiwgXFxcIlxcXCIpKTtcXG51cmxJbmRleCA9IE51bWJlci5pc05hTih1cmxJbmRleCkgPyB2b2lkKDApIDogdXJsSW5kZXg7XFxubGV0IGluZGV4ID0gdm9pZCgwKSA9PT0gdXJsSW5kZXggPyBNWV9QQVJBTVMuaSA6IHVybEluZGV4O1xcblxcbmxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxubGV0IG9iajtcXG5pZiAoZ2V0UGFyYW0oXFxcImlzSW1wb3J0XFxcIiwgXFxcIlxcXCIpKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBvYmogPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vZmlsZXMvX2NhY2hlL2NpbGlTaW1wbGVJbXBvcnQuanNvblxcXCIpO1xcbiAgICAgICAgbGV0IHRpcCA9IGluZGV4ICE9PSB2b2lkKDApID8gXFxcIuabtOaWsOinhOWImVxcXCIgOiBcXFwi5a+85YWl6KeE5YiZXFxcIjtcXG4gICAgICAgIHNldFBhZ2VUaXRsZSh0aXAgKyBcXFwiOlxcXCIgKyBvYmoubmFtZSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCY4oCYXFxcIiArIHRpcCArIFxcXCLigJnigJlcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIG9iaiA9IHt9O1xcbiAgICAgICAgYmFjaygpO1xcbiAgICAgICAgdG9hc3QoXFxcIuWvvOWFpemUmeivr1xcXCIpO1xcbiAgICB9XFxufSBlbHNlIGlmIChpbmRleCAhPT0gdm9pZCgwKSkge1xcbiAgICBvYmogPSBhcnJbaW5kZXhdO1xcbiAgICBzZXRQYWdlVGl0bGUoXFxcIue8lui+keinhOWImTpcXFwiICsgb2JqLm5hbWUpO1xcbiAgICBpZiAob2JqLmxhc3RNb2RpZnkpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLkuIrmrKHkv67mlLnvvJpcXFwiICsgJC5kYXRlRm9ybWF0KG9iai5sYXN0TW9kaWZ5LCBcXFwieXl5eS1NTS1kZMKgSEg6bW06c3NcXFwiKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxufSBlbHNlIHtcXG4gICAgb2JqID0ge1xcbiAgICAgICAgcGFnZTogdHJ1ZVxcbiAgICB9O1xcbiAgICBzZXRQYWdlVGl0bGUoXFxcIuaWsOW7uuinhOWImVxcXCIpO1xcbn1cXG5cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZGVzYzogXFxcIuWQjeWtlyjlv4XloaspXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfbmFtZVxcXCIsIGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmoubmFtZSxcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2VcXG4gICAgfVxcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi5pCc57Si6KeE5YiZKOW/heWhqylcXFxcbuWGhee9ruWPmOmHj++8mnPmkJzntKLlhbPplK7or43vvIxwYWdl6aG15pWw77yMYmFzaWNVcmzln7rmnKzpk77mjqXvvIx1c2Vy55So5oi36LSm5Y+35L+h5oGvKHVzZXIuYWNjb3VudCx1c2VyLnBhc3N3b3JkKVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgaGVpZ2h0OiAzLFxcbiAgICAgICAgaGlnaGxpZ2h0OiB0cnVlLFxcbiAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19maW5kXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgfSksXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5maW5kLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwiVVJM6KeE5YiZKOmAieWhqylcXFxcbuWGhee9ruWPmOmHj++8mmlucHV06ZO+5o6l77yMYmFzaWNVcmzln7rmnKzpk77mjqVcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgIGhlaWdodDogMyxcXG4gICAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcXG4gICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfZmluZEFsaVVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmouZmluZEFsaVVybCxcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZGVzYzogXFxcIuWfuuacrOmTvuaOpSjpgInloaspIOS7o+eggeS4reeUqGJhc2ljVXJs5byV55SoXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfYmFzaWNVcmxcXFwiLCBpbnB1dCk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLmJhc2ljVXJsLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICBkZXNjOiBcXFwi5rOo5YaM5Zyw5Z2AKOmAieWhqylcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19yZWdpc3RlclVybFxcXCIsIGlucHV0KTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBvYmoucmVnaXN0ZXJVcmwsXFxuICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLmmK/lkKblj6/ku6Xnv7vpobXvvJpcXFwiICsgb2JqLnBhZ2UsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChwYWdlKSA9PiB7XFxuICAgICAgICBsZXQgaXNQYWdlID0gISFnZXRNeVZhcihcXFwicHNfcGFnZVxcXCIsIHBhZ2UgPyBcXFwiMVxcXCIgOiBcXFwiXFxcIik7XFxuICAgICAgICBwdXRNeVZhcihcXFwicHNfcGFnZVxcXCIsIGlzUGFnZSA/IFxcXCJcXFwiIDogXFxcIjFcXFwiKTtcXG4gICAgICAgIHVwZGF0ZUl0ZW0oXFxcInJ1bGVlZHBzX3BhZ2VcXFwiLCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmmK/lkKblj6/ku6Xnv7vpobXvvJpcXFwiICsgIWlzUGFnZVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICB9LCBvYmoucGFnZSksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogXFxcInJ1bGVlZHBzX3BhZ2VcXFwiXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuWIoOmZpFxcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaW5kZXgsIHVybEluZGV4KSA9PiB7XFxuICAgICAgICBpZiAoaW5kZXggPT09IHZvaWQoMCkpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5q2k6aG55peg5rOV5Yig6ZmkXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmxJbmRleCAhPT0gdm9pZCgwKSkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mraPlnKjmm7TmlrDop4TliJnvvIzliKDpmaTor7fku47op4TliJnnrqHnkIbov5vlhaVcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmuKnppqjmj5DnpLpcXFwiLFxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFxcXCLnoa7lrpropoHliKDpmaTmraTop4TliJnlkJfvvJ/ms6jmhI/liKDpmaTlkI7ml6Dms5XmgaLlpI1cXFwiLFxcbiAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihhcnIpO1xcbiAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Yig6Zmk5oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCBpbmRleClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICB9LCBpbmRleCwgdXJsSW5kZXgpLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxufSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLkv53lrZhcXFwiLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGluZGV4LCBwYWdlKSA9PiB7XFxuICAgICAgICBsZXQgbmFtZSA9IGdldE15VmFyKFxcXCJwc19uYW1lXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgaWYgKG5hbWUgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5ZCN5a2X5b6X5pyJ5LiA5Liq5ZCnXFxcIlxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGZpbmQgPSBnZXRNeVZhcihcXFwicHNfZmluZFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlmIChmaW5kID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aQnOe0ouinhOWImeS4jeiDveS4uuepulxcXCJcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICBsZXQgb2JqMSA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZpbmQ6IGZpbmQsXFxuICAgICAgICAgICAgYmFzaWNVcmw6IGdldE15VmFyKFxcXCJwc19iYXNpY1VybFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBmaW5kQWxpVXJsOiBnZXRNeVZhcihcXFwicHNfZmluZEFsaVVybFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBwYWdlOiAhIWdldE15VmFyKFxcXCJwc19wYWdlXFxcIiwgcGFnZSA/IFxcXCIxXFxcIiA6IFxcXCJcXFwiKSxcXG4gICAgICAgICAgICByZWdpc3RlclVybDogZ2V0TXlWYXIoXFxcInBzX3JlZ2lzdGVyVXJsXFxcIiwgXFxcIlxcXCIpIHx8IHVuZGVmaW5lZCxcXG4gICAgICAgICAgICBsYXN0TW9kaWZ5OiBEYXRlLm5vdygpXFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkKDApKSB7XFxuICAgICAgICAgICAgaWYgKGFyci5zb21lKHYgPT4gdi5uYW1lID09PSBuYW1lKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5a2Y5Zyo6K+l6KeE5YiZXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnVuc2hpZnQob2JqMSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCBuYW1leSA9IGFycltpbmRleF0ubmFtZTtcXG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gbmFtZXkpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGFyci5zb21lKHYgPT4gdi5uYW1lID09PSBuYW1lKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+WtmOWcqOivpeinhOWImVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgb2JqMSA9IE9iamVjdC5hc3NpZ24oYXJyW2luZGV4XSwgb2JqMSk7XFxuICAgICAgICAgICAgYXJyLnNwbGljZShpbmRleCwgMSwgb2JqMSk7XFxuICAgICAgICB9XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5zYXZlSnNvbihhcnIpO1xcbiAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv53lrZjmiJDlip9cXFwiO1xcbiAgICB9LCBpbmRleCwgb2JqLnBhZ2UpLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxufSk7XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ6LSm5Y+3XCIsXCJwYXRoXCI6XCJwYXNzd29yZFwiLFwicnVsZVwiOlwianM6XFxuKGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgZCA9IFtdO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicHNfYWNjb3VudFxcXCIpO1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicHNfcGFzc3dvcmRcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInBzX2V4dHJhXFxcIik7XFxuICAgIH0pKTtcXG4gICAgbGV0IGluZGV4ID0gTVlfUEFSQU1TLmk7XFxuICAgIGxldCBhcnIgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3NcXFwiKS5nZXRKc29uKCk7XFxuICAgIGxldCBvYmogPSBhcnJbaW5kZXhdIHx8IHt9O1xcbiAgICBzZXRQYWdlVGl0bGUoXFxcIuiuvue9rui0puWPtzpcXFwiICsgb2JqLm5hbWUpO1xcbiAgICBsZXQgcmVnaXN0ZXJVcmwgPSBvYmoucmVnaXN0ZXJVcmw7XFxuICAgIGlmIChyZWdpc3RlclVybCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5YmN5b6A5rOo5YaMXFxcIixcXG4gICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIikucnVsZSgocmVnaXN0ZXJVcmwpPT57XFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChbe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6XFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDpyZWdpc3RlclVybCxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6XFxcImZsb2F0JiYxMDAlXFxcIlxcbiAgICAgICAgICAgICAgICB9XSk7XFxuICAgICAgICAgICAgfSwgcmVnaXN0ZXJVcmwpLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBcXFwi5rOo5YaM6LSm5Y+3OlxcXCIgKyBvYmoubmFtZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIG9iaiA9IG9iai51c2VyIHx8IHt9O1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi55So5oi35ZCNXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgb25DaGFuZ2U6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwicHNfYWNjb3VudFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5hY2NvdW50LFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLlr4bnoIFcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0eXBlOiBcXFwicGFzc3dvcmRcXFwiLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInBzX3Bhc3N3b3JkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogb2JqLnBhc3N3b3JkLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6aKd5aSWXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJwc19leHRyYVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IG9iai5leHRyYSxcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGhlaWdodDogLTFcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuS/neWtmFxcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgbGV0IGFjY291bnQgPSBnZXRNeVZhcihcXFwicHNfYWNjb3VudFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBsZXQgcGFzc3dvcmQgPSBnZXRNeVZhcihcXFwicHNfcGFzc3dvcmRcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgbGV0IGV4dHJhID0gZ2V0TXlWYXIoXFxcInBzX2V4dHJhXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIC8qaWYgKCEoYWNjb3VudHx8cGFzc3dvcmR8fGV4dHJhKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN6IO95YWo6YOo5Li656m6XFxcIjtcXG4gICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICBsZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgICAgIGxldCBpdGVtID0gYXJyW2luZGV4XTtcXG4gICAgICAgICAgICBpdGVtLnVzZXIgPSB7fTtcXG4gICAgICAgICAgICBpdGVtLnVzZXIuYWNjb3VudCA9IGFjY291bnRcXG4gICAgICAgICAgICBpdGVtLnVzZXIucGFzc3dvcmQgPSBwYXNzd29yZDtcXG4gICAgICAgICAgICBpdGVtLnVzZXIuZXh0cmEgPSBleHRyYTtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHZvaWQoMCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL2lk6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxLCBpdGVtKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJjb25maWdzXFxcIikuc2F2ZUpzb24oYXJyKTtcXG4gICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv53lrZjmiJDlip9cXFwiO1xcbiAgICAgICAgfSwgaW5kZXgpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgfSk7XFxuICAgIHNldFJlc3VsdChkKTtcXG59KSgpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnlr7zlhaVcIixcInBhdGhcIjpcImltcG9ydFwiLFwicnVsZVwiOlwianM6XFxuZnVuY3Rpb24gc2F2ZUNhY2hlKGpzb24pIHtcXG4gICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL19jYWNoZS9jaWxpU2ltcGxlSW1wb3J0Lmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShqc29uKSk7XFxufVxcbiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhc3MpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCBbXywgcnVsZSwgdHlwZV0gPSBwYXNzLnNwbGl0KFxcXCIkXFxcIik7XFxuICAgICAgICBpZiAodHlwZSA9PT0gXFxcImJcXFwiKSB7XFxuICAgICAgICAgICAgcnVsZSA9IHBhcnNlUGFzdGUocnVsZSk7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKGJhc2U2NERlY29kZShydWxlKSk7XFxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocnVsZXMpKSB7XFxuICAgICAgICAgICAgcnVsZXMgPSBbcnVsZXNdO1xcbiAgICAgICAgfVxcbiAgICAgICAgcnVsZXMucmV2ZXJzZSgpO1xcbiAgICAgICAgTVlfVVJMID0gbW9kdWxlLmlkO1xcbiAgICAgICAgbGV0IHJ1bGVUaXRsZSA9IGdldFBhcmFtKFxcXCJydWxlXFxcIik7XFxuICAgICAgICBsZXQgYXJyID0gJC5yZXF1aXJlKFxcXCJjb25maWdzP3J1bGU9XFxcIiArIHJ1bGVUaXRsZSkuZ2V0SnNvbigpO1xcbiAgICAgICAgbGV0IG5ld0kgPSAwO1xcbiAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBydWxlcykge1xcbiAgICAgICAgICAgIGxldCBpbmRleCA9IGFyci5maW5kSW5kZXgodiA9PiB2Lm5hbWUgPT09IHJ1bGUubmFtZSk7XFxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgcnVsZSA9IE9iamVjdC5hc3NpZ24oYXJyW2luZGV4XSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEsIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICBpZiAocnVsZXMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBzYXZlQ2FjaGUocnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9ydWxlRWRpdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/aXNJbXBvcnQ9dHJ1ZSZpbmRleD1cXFwiICsgaW5kZXggKyBcXFwiJnJ1bGU9XFxcIiArIHJ1bGVUaXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIC8vdG9hc3QoXFxcIuW3suabtOaWsOinhOWIme+8mlxcXCIgKyBydWxlLm5hbWUpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLlt7Lmm7TmlrDop4TliJnvvJpcXFwiICsgcnVsZS5uYW1lKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgbmV3SSsrO1xcbiAgICAgICAgICAgICAgICBhcnIudW5zaGlmdChydWxlKTtcXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA9PT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUNhY2hlKHJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcnVsZUVkaXQjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP2lzSW1wb3J0PXRydWUmcnVsZT1cXFwiICsgcnVsZVRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgLy90b2FzdChcXFwi5bey5a+85YWl6KeE5YiZ77yaXFxcIiArIHJ1bGUubmFtZSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coXFxcIuW3suWvvOWFpeinhOWIme+8mlxcXCIgKyBydWxlLm5hbWUpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBpZiAocnVsZXMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICQucmVxdWlyZShcXFwiY29uZmlncz9ydWxlPVxcXCIgKyBydWxlVGl0bGUpLnNhdmVKc29uKGFycik7XFxuICAgICAgICAgICAgdG9hc3QoXFxcIuaWsOWinu+8mlxcXCIgKyBuZXdJICsgXFxcIiDopobnm5bmm7TmlrDvvJpcXFwiICsgKHJ1bGVzLmxlbmd0aCAtIG5ld0kpKTtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxuICAgICAgICB0b2FzdChcXFwi5a+85YWl5aSx6LSlXFxcIik7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop4TliJnliJfooahcIixcInBhdGhcIjpcInJ1bGVzXCIsXCJydWxlXCI6XCJqczpcXG4kLmV4cG9ydHMgPSBbe1xcbiAgICAgICAgbmFtZTogXFxcIkJUU09XXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vYnRzb3cubW90b3JjeWNsZXNcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaC9cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIi9wYWdlL1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIi5kYXRhLWxpc3QmJi5yb3c6bm90KC5oaWRkZW4teHMpXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICBcXG4gICAgICAgICAgICAgdmFyIHVybGwgPSBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKTsgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZ0aXRsZVxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLnNpemUtZGF0ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybGwuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpP3VybGw6IFxcXCJodHRwczpcXFwiICsgdXJsbCxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0LCB7fSksICcjbWFnbmV0T3BlbiYmYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCJCVOWQg+WKm1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovLzIyMy5zb2trMjMuYnV6elxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoL1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiL3BhZ2UtXFxcIiArIHBhZ2UgKyBcXFwiLmh0bWxcXFwiO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIi5saXN0LXZpZXcmJi5pdGVtOm5vdCg6bWF0Y2hlcyjlnKjnur/mkq3mlL4pKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiaDQtLS5sYWJlbCYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwicCYmVGV4dFxcXCIpLm1hdGNoKC8o5paH5Lu25aSn5bCPLio/KeaWh+S7tuaVsOmHjy8pWzFdLnNsaWNlKDAsLTkpLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgIFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCksICcubGlzdC11bnN0eWxlZCYmYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCLno4HmkJwuY29tXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8v56OB5pCcLmNvbVxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoLnBocD9rZXk9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImcD1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5zc2JveFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLnNiYXImJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQsIHt9KSwgJ3NwYW4mJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb5pCc57SiXFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2NpbGlzb3VzdW8uY29tXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/cT1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIi5saXN0JiYuaXRlbVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiLmZpbGVuYW1lJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuc2l6ZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCwge30pLCAnYm9keSYmLm1hZ25ldC1ib3gmJmlucHV0JiZ2YWx1ZScpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCLlj6Pooovno4HliptcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9rZC5jbGtkLnh5elxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoL1xcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiL1xcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcInRib2R5JiZ0clxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvXFxcXGQrXFxcXC1cXFxcZCtcXFxcLVxcXFxkKy4qLylbMF0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCJhLDEmJmhyZWZcXFwiKSwgICAgICAgIFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICB9LHtcXG4gICAgICAgIC8v5rC45LmF5Zyw5Z2A77yaaHR0cHM6Ly9kZGNsLm1lL1xcbiAgICAgICAgbmFtZTogXFxcIua7tOa7tOejgeWKm1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2c3MDgwYXBtZ3dvMXM1a24ueHl6XFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gvXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCJfY2xpY2tfXFxcIiArIHBhZ2UgKyBcXFwiLmh0bWxcXFwiO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5wYW5lbFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwidGJvZHkmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCBcXFwiLmRvd25idXR0b24mJmEmJmhyZWZcXFwiKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHA6Ly9qajkxNS50b3AvXFxuICAgICAgICBuYW1lOiBcXFwi6IiF6IiF56OB5YqbXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHA6Ly9qajM0ODgudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/c29ydD1yZWxlJndvcmQ9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYubGlzdC1ncm91cC1pdGVtXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuYWxpZ24tc2VsZi1jZW50ZXImJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnLmJ0LWJveCYmYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xcbiAgICAgICAgICAgfVxcbiAgICB9LHtcXG4gICAgICAgIC8v5rC45LmF5Zyw5Z2A77yaaHR0cHM6Ly9zb2Zhbi5jbHViL1xcbiAgICAgICAgbmFtZTogXFxcIuaQnOeVqlxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2Nkbi5zb2Zhbi5vbmU6NjU1MzNcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3M/d29yZD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSx7XFxuICAgICAgICAgICAgaGVhZGVyczp7XFxuICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2RuLnNvZmFuLm9uZS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5saXN0LXVuc3R5bGVkXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIucmVzdWx0LXJlc291cmNlLW1ldGEtaW5mby0tLmNvbW1vbi1saW5rJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0LHtcXG4gICAgICAgICAgICBoZWFkZXJzOnsgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2RuLnNvZmFuLm9uZS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSksICcjbWFnbmV0LWxpbmsmJmEmJmhyZWYnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mnpob25nemliYS5jYyAgc2VlZDgub3JnXFxuICAgICAgICBuYW1lOiBcXFwi56eN5a2Q5ZCnXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHA6Ly96emIwMC5jbHViXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/d2Q9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImc29ydD1yZWwmcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRsID0gcGRmaChyZXF1ZXN0KGJhc2ljVXJsICsgYXBpKSxcXFwic2NyaXB0JiZIdG1sXFxcIikucmVwbGFjZSgvZG9jdW1lbnQud3JpdGVcXFxcKCguKj8pXFxcXClcXFxcOy8sXFxcIiQxXFxcIikucmVwbGFjZShcXFwid2luZG93XFxcIixcXFwid2luZG93MFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gZXZhbChodGwpXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIi5tZWRpYS1saXN0JiYubWVkaWEtYm9keVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLnNlYXJjaC1pbmZvJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIGxldCBodGwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLFxcXCJzY3JpcHQmJkh0bWxcXFwiKS5yZXBsYWNlKC9kb2N1bWVudC53cml0ZVxcXFwoKC4qPylcXFxcKVxcXFw7LyxcXFwiJDFcXFwiKS5yZXBsYWNlKFxcXCJ3aW5kb3dcXFwiLFxcXCJ3aW5kb3cwXFxcIik7XFxuICAgICAgICAgICBsZXQgaHRtbCA9IHBkZmgoZXZhbChodGwpLFxcXCIuYnQtb3B0JiZhJiZocmVmXFxcIilcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8v56OB5Yqb5pCcLnh5ei8gaHR0cHM6Ly/no4HlipvmkJwuY29tLyAgIGh0dHBzOi8vY2xzY2xzLnRvcC9cXG4gICAgICAgIG5hbWU6IFxcXCLno4HlipvmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jbHMwNzEuYnV6elxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoLVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiLTAtMC1cXFwiICsgcGFnZSArIFxcXCIuaHRtbFxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLnNzYm94XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCIudGl0bGUmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5zYmFyJiZUZXh0XFxcIikubWF0Y2goLyjmt7vliqDml7bpl7QuKj8p5pyA6L+RLylbMV0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCIuc2JhciYmYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICB9LHtcXG4gICAgICAgIG5hbWU6IFxcXCLno4HlipvniYdcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9tLmJ0YXBwLmNjXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zby5waHA/cGFnZT1cXFwiICsgcGFnZSArIFxcXCImd29yZD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcInRib2R5JiYuZGVmYXVsdDpoYXMoYVtocmVmXj0vXSlcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvXFxcXGQrKD86XFxcXC5cXFxcZCspPyg/OlxcXFxzKyk/W2dta2JdKy4qPyg/OlxcXFwtXFxcXGQrXFxcXHMpL2kpWzBdLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCwge30pLCAnI21hZ25ldCYmdGl0bGUnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgIC8v5rC45LmF5Zyw5Z2A77yaaHR0cHM6Ly9jaWxpZHVvLm9yZy9cXG4gICAgICAgIG5hbWU6IFxcXCLno4HlipvlpJpcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9kb2MuaHRtY2RuLmNvbVxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoLVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiLXJlbC1cXFwiICtwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkse1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVyOiBcXFwiaHR0cHM6Ly9kb2MuaHRtY2RuLmNvbVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJib2R5JiYuc3Nib3g6aGFzKGEpXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJoMyYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC/mt7vliqDml7bpl7QuKi8pWzBdLnNwbGl0KFxcXCLmlofku7bmlbBcXFwiKVswXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZGZoKGFycltpXSwgXFxcImE6bWF0Y2hlcyjno4Hlipvpk77mjqUpJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8vaGFpdHV0dS52aXAvXFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb5rW3XFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHBzOi8vNWV3M2RyYzcudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gtXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCItMC0wLVxcXCIgKyBwYWdlICsgXFxcIi5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIuc2VhcmNoX2xpc3QmJmRsXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIuaW5mbyYmVGV4dFxcXCIpLm1hdGNoKC8o5pS25b2V5pe26Ze0Lio/KeejgeWKmy8pWzFdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiLmluZm8mJmEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb6YW3XFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vY2lsaWt1Lm5ldC90b1NlYXJjaFxcXCI7XFxuICAgICAgICAgICAgbGV0IGpzb24gPSBwb3N0KHVybCwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IFxcXCJodHRwczovL2NpbGlrdS5uZXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2lsaWt1Lm5ldC9cXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwia2V5d29yZFxcXCI6IHMsXFxuICAgICAgICAgICAgICAgICAgICBcXFwicGFnZVxcXCI6IHBhZ2UtMSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJzaXplXFxcIjogMTVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIGxldCBsaXN0ID0ganNvbi5kYXRhLmNvbnRlbnQ7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XFxuICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDApIHJldHVybiAnMCBCeXRlcyc7XFxuICAgICAgICAgICAgICAgICAgdmFyIHVuaXRzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICAgICAgICAgICAgICAgIHZhciBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDEwMjQpKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7KHNpemUgLyBNYXRoLnBvdygxMDI0LCBpKSkudG9GaXhlZCgyKX0gJHt1bml0c1tpXX1gO1xcbn1cXG4gICAgICAgICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgIHZhciBkYXRlID0gbmV3IERhdGUoaXQudGltZXN0YW1wKTtcXG4gICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xcbiAgICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcXG4gICAgIHZhciBkYXkgPSBkYXRlLmdldERhdGUoKTtcXG4gICAgIHZhciBmb3JtYXR0ZWREYXRlID0gYCR7eWVhcn0tJHttb250aCA8IDEwID8gJzAnICsgbW9udGggOiBtb250aH0tJHtkYXkgPCAxMCA/ICcwJyArIGRheSA6IGRheX1gO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0Lm5hbWUuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcIm1hZ25ldDo/eHQ9dXJuOmJ0aWg6XFxcIiArIGl0LmJ0aWgsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5paH5Lu25aSn5bCP77yaXFxcIiArIGZvcm1hdEZpbGVTaXplKGl0LnNpemUpICsgXFxcIlxcXFx0XFxcXHTmlLblvZXml7bpl7TvvJpcXFwiICsgZm9ybWF0dGVkRGF0ZSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICAvL+awuOS5heWcsOWdgO+8mmh0dHBzOi8vYnRmb3gub25lL1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+eLkFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2NhY2hlLmZveHMudG9wXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2g/d29yZD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSx7XFxuICAgICAgICAgICAgaGVhZGVyczp7XFxuICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgUmVmZXJlcjogXFxcImh0dHBzOi8vY2FjaGUuZm94cy50b3BcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5zZWFyY2gtYm94XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJhJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCIubGF5dWktc2hvdyYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IGJhc2ljVXJsICsgcGRmaChhcnJbaV0sIFxcXCJhJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgICAgICBmaW5kQWxpVXJsKGlucHV0KSB7XFxuICAgICAgICAgICB2YXIgaHRtbCA9IHBkZmgocmVxdWVzdChpbnB1dCx7XFxuICAgICAgICAgICAgaGVhZGVyczp7ICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwczovL2NhY2hlLmZveHMudG9wXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgIH0pLCAnI2xpbmstdXJsJiZhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgLy/msLjkuYXlnLDlnYDvvJpodHRwczovL2NsZ291LmN5b3UvIGh0dHBzOi8v6a2U5rOV54yr5ZKqLmxvbC9cXG4gICAgICAgIG5hbWU6IFxcXCLno4Hlipvni5fnjKtcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jbGcxNjIuYnV6elxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvc2VhcmNoLVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocykgKyBcXFwiLTAtMC1cXFwiICsgcGFnZSArIFxcXCIuaHRtbFxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLnNzYm94XFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCIudGl0bGUmJlRleHRcXFwiKS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIi5zYmFyJiZUZXh0XFxcIikubWF0Y2goLyjmt7vliqDml7bpl7QuKj8p5pyA6L+RLylbMV0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCIuc2JhciYmYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICB9LHtcXG4gICAgICAgIC8v5Y+R5biD5Zyw5Z2A77yaaHR0cDovL2ZiLmNpbGlnb3VmYWJ1eWUxLnh5ejoxMjM0L1xcbiAgICAgICAgbmFtZTogXFxcIuejgeWKm+eMq+eLl1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcblxcdCAgICAgICAgICAgdmFyIHdvcmQxMTE9IHNcXHJcXG5cXHQgICAgICAgICAgIHZhciBlbmNvZGViZWZvcmUgPSBiYXNlNjRFbmNvZGUod29yZDExMSk7IFxcclxcbiAgICAgICAgICAgIFxcdGVuY29kZWJlZm9yZT0gJ1ZqZHd3VzI5JytlbmNvZGViZWZvcmUrJ05qZHd3VzI0JzsgXFxyXFxuXFx0XFx0ICAgICAgICAgIHZhciBlbmNvZGViZWZvcmUxMTExID1lbmNvZGViZWZvcmUucmVwbGFjZSgvXFxcXCsvZywgXFxcImpHWVhXZ3gxM1xcXCIpOyBcXHJcXG4gICAgICAgICAgICBtZDVwd2QgPSBlbmNvZGViZWZvcmUxMTExO1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2NsbTEuY2xtYXBwMS54eXpcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL2NsbGoucGhwP25hbWU9XFxcIiArIG1kNXB3ZCArIFxcXCImc29ydD0mcGFnZT1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIjU2VhcmNoX2xpc3Rfd3JhcHBlciYmbGk6aGFzKC5TZWFyY2hfbGlzdF9pbmZvKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLlNlYXJjaF9saXN0X2luZm8mJlRleHRcXFwiKS5tYXRjaCgvKOWkp+Wwjy4qPynng63luqYvKVsxXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBiYXNpY1VybCArIHBkZmgoYXJyW2ldLCBcXFwiYSYmaHJlZlxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9LFxcbiAgICAgICAgZmluZEFsaVVybChpbnB1dCkge1xcbiAgICAgICAgICAgdmFyIGh0bWwgPSBwZGZoKHJlcXVlc3QoaW5wdXQpLCAnI0luZm9ybWF0aW9uX2NvcHlfdGV4dCYmdmFsdWUnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwi56OB5Yqb6JyY6JubXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGJhc2ljVXJsID0gXFxcImh0dHA6Ly93d3cuYnRtb3ZpLmNsaWNrXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zby9cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpICsgXFxcIl9yZWxfXFxcIiArIHBhZ2UgKyBcXFwiLmh0bWxcXFwiO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJi5zZWFyY2gtaXRlbVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSYmVGV4dFxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiLml0ZW0tYmFyJiZUZXh0XFxcIiksXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgJyNtX2xpbmsmJnZhbHVlJyk7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxuICAgICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIuaXoOaegeejgemTvlxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly8wY2lsaS50b3BcXFwiO1xcbiAgICAgICAgICAgIGxldCBhcGkgPSBcXFwiL3NlYXJjaD9xPVxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQocyk7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwidGFibGUmJnRyXFxcIik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChhcnJbaV0sIFxcXCJwJiZUZXh0XFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goL1xcXFxkKyhcXFxcLj9cXFxcZCspP1tnbWtiXSsvaSlbMF0sXFxuICAgICAgICAgICAgICAgIHVybDogYmFzaWNVcmwgKyBwZGZoKGFycltpXSwgXFxcImEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGZpbmRBbGlVcmwoaW5wdXQpIHtcXG4gICAgICAgICAgIHZhciBodG1sID0gcGRmaChyZXF1ZXN0KGlucHV0KSwgJy5tYWduZXQtYm94JiZpbnB1dCYmdmFsdWUnKTtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICBuYW1lOiBcXFwiVTNDM1xcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBiYXNpY1VybCA9IFxcXCJodHRwczovL2EudTNjMy5saWZlXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi8/cD1cXFwiICsgcGFnZSArIFxcXCImc2VhcmNoMj1lZWxqYTNsZmVhJnNlYXJjaD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHMpO1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChiYXNpY1VybCArIGFwaSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcInRib2R5JiYuZGVmYXVsdFxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiYSwxJiZ0aXRsZVxcXCIpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC8oXFxcXGQrKD86XFxcXC5cXFxcZCspP1tnbWtiXSsuKj8p5pqX572RL2kpWzFdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiYSwzJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIlU5QTlcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly91OWE5Lm9uZVxcXCI7XFxuICAgICAgICAgICAgbGV0IGFwaSA9IFxcXCIvP3R5cGU9MiZzZWFyY2g9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCImcD1cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoYmFzaWNVcmwgKyBhcGkpO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCJ0YWJsZSYmLmRlZmF1bHRcXFwiKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGFycltpXSwgXFxcImEmJnRpdGxlXFxcIikuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcGRmaChhcnJbaV0sIFxcXCJUZXh0XFxcIikubWF0Y2goL1xcXFxkKyhcXFxcLj9cXFxcZCspP1xcXFxzW2dta2JdKy4qL2kpWzBdLFxcbiAgICAgICAgICAgICAgICB1cmw6IHBkZmgoYXJyW2ldLCBcXFwiYSwyJiZocmVmXFxcIiksXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH0sXFxuICAgIH0se1xcbiAgICAgICAgbmFtZTogXFxcIlRvcnJlbnQgS2l0dHlcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgYmFzaWNVcmwgPSBcXFwiaHR0cHM6Ly9jbi50b3JyZW50a2l0dHkuaW5rXFxcIjtcXG4gICAgICAgICAgICBsZXQgYXBpID0gXFxcIi9zZWFyY2gvXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzKSArIFxcXCIvXFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGJhc2ljVXJsICsgYXBpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiI2FyY2hpdmVSZXN1bHQmJnRyOmhhcyhhKVxcXCIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoYXJyW2ldLCBcXFwiVGV4dFxcXCIpLm1hdGNoKC8oLio/KVxcXFxkKyg/OlxcXFwuXFxcXGQrKT9cXFxccys/W2dta2JdKy9pKVsxXS5zbWFsbCgpLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBwZGZoKGFycltpXSwgXFxcIlRleHRcXFwiKS5tYXRjaCgvKFxcXFxkKyg/OlxcXFwuXFxcXGQrKT9cXFxccys/W2dta2JdKy4qPynor6bmg4UvaSlbMV0sXFxuICAgICAgICAgICAgICAgIHVybDogcGRmaChhcnJbaV0sIFxcXCJhLDEmJmhyZWZcXFwiKSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfSxcXG4gICAgfVxcbl07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnlarlj7fljLnphY1cIixcInBhdGhcIjpcImNvZGV0ZXN0XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgbWF0Y2hSZWcgPSAvW2EtekEtWjAtOV0rKFxcXFwtfFxcXFxffFxcXFxzKVxcXFxkKy87XFxubGV0IG1hdGNoUmVnRyA9IC9bYS16QS1aMC05XSsoXFxcXC18XFxcXF98XFxcXHMpXFxcXGQrL2c7XFxubGV0IHRlc3RSZWcgPSAvXFxcXC18XFxcXF98XFxcXHMvO1xcbiQuZXhwb3J0cyA9IHtcXG4gICAgbWF0Y2hDb2RlKHRleHQsIGlzRykge1xcbiAgICAgICAgaWYgKGlzRykge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSB0ZXh0Lm1hdGNoKG1hdGNoUmVnRyk7XFxuICAgICAgICAgICAgaWYgKHVybCkgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICBlbHNlIHJldHVybiBbXTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IHRleHQubWF0Y2gobWF0Y2hSZWcpO1xcbiAgICAgICAgICAgIHJldHVybiB1cmwgPSB1cmwgJiYgdXJsWzBdIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB0ZXN0KHRleHQpe1xcbiAgICAgICAgcmV0dXJuIHRlc3RSZWcudGVzdCh0ZXh0KTtcXG4gICAgfVxcbn1cXG5cIn1dIiwiaWNvbiI6ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSUFBQUFDQUNBWUFBQUREUG1ITEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFWUUVsRVFWUjRuTzJkQzF4VFY1N0hyZFZPMTlySDdrN2JiVCt6bi9heis1bHh0OTBKa0FSSUFFMGdFZDhvSTNud0VHMVZKQUZsdEE4LzI1MmRPdTNzakcxblo4ZTF6dGJXaWdRZlUxOGRVU3NDOGxEUkFnWjVoZkFVQkF3aHZBUU0rSUs3NTBTaU56YzN5YjNKdlpkN2JlN0gvd2ZJNDNmK09kL2ZQZmVjYzgrSjArUnk2Vk1nWm9LWTVzMEIzemY1L3FkUTRkZmppaDZuay9mcithN0g2ZVQ5ZXJUcE1WcVlYNDlkZW93VzV0ZGpseDZqaGZuMTJLWEhhR0YrUFhicE1WcVlYNDlkZW93VzV0ZGpseDZqaGZuMTJLZkhhR0YrUGZicGNUcDV2NTd2ZXB4TzNxL251eDZuay9mcithN0g2ZVQ5ZXI3cmNUcDV2eDRGZXB4T251Q0JJTWpEM2k0Yjg1dFNQVTRuNytHQTRDMld2b3llbnQ1QjhGTjMvZnIxbDltVUh5djBPSjI4bThOczdwTUQ4QVlBSG9FQmZrZE1wdTZSOXZhT2ozZnMrSjlucHpvLzF1aHhPbm1jbzZlbjUyY0EvaWs3K0Vmd3pjaU5HOTMyYUc1cnU2NStIRDZ2ejNxY1RoNTFBUEN6QWVodEFQaHREL0J0ZjhQSGUzcjZ6b0gzQlhEeDgxS214K25rcDltdTgwOEFrTWtBdGhrTjNoTjgxR3ZHWWYvQWJEYS96SVhQUzdrZWw1UHY3ZTBOdGxoNkwyUEJFNFdQaVJIWWdqUTJOdjZJclorWFNUMUdDeU9yQjhDL0NzOWFBR3lDSXZpbzkvWTFXU3o5Q2paOVhxYjFHQzJNakI1bzdwOTZNS3pyRzNZTjBIdjRHQ09jTTVzSGVHeUg5WU9CMzZKNE82TzlUTi9sSGhvMThPMWhObHZ1ZDNiZStPTGN1VXV2c0JIV0R3TCttRXoxczFHWjZ2U1lYSVVNTEV5WXFONzZtNWJ1RzkzMzZZYVAxdXZxTWcyMnQzZDhzR3ZYNTdQWkF1dXhoejhvV2Y3Q21FeTVIY0MvQStHam8ydDU4bGo5Z1NPdFRNQzNSMmRubDk1b05MN0xsZnFqN0dBNmVXVGF0Q2RHWmNya01iblNqQVdQalNiRnVzSFcwdkp1T3VHRHM3K3RvYUh4Y2sxTkRRTGl0Mnl2UDBvUHBwTzN5dFZDME9SZjlnVGVIcU55SlRJd1g0M29OZSsxZHpSZEc2VzQyYi9WM054YVVsbFplUnZDcjYydEpXMEF0c04zK3o0bWs3KzFJUEVWQUhNM09QUEh5Y0FmUm9WcFVjSjkvVWVmTlhXYnpMaERRNkx3QWZqeDl2YnJwZFhWVlphclY2OGlkdmhrRGNBRitQRDlVNXA4Ui9DYW1iZmxxZ3lyVERsRUZEd2VmSHZBeDl0aTN4cHBQSjNiN2gzOExrTk5UYTBCZ3NmQ0oyTUFyc0NIT2xPVy9DMlpRbTZWcXd4a3dIdUMvK2cxS3NTWW9PbTVYbTNvSndLL3E2dmIxTmpZV0FxYSt3bFg4SWthZ0V2d25RekFSUEp0Y3NXL1d1V0trMlRCRTRXUGpvRUZDUk0xVzM3VmF1NHkzWEVCMzlyU2NxMmtxcXBxMUE3ZUZYd2lCdUFhZkFjRDBGM1lXWG5zM3c3S0ZCK0I1djQyRS9EUllWcWFkTmZ3UldZakN2ekVqUnVtUzlYVk5WMW84TzdnZXpJQUYrRS83QVBRV1ZoU1dPaVBMTEtWYTRkbENoTVJXRlREZHhnMkt0Y050Rnk0ckFmRHVsb3NlRS93M1JtQXEvQnRlblFXMWhhMU1uUklycmprRFN5cTRROHVURUN1TG8xSEN0TGVhL0lHdmlzRGNCcis1QXNvTCt5aWJNay9ETWdWTzRka3l2dFREZDg2WDQzVXhpUWhkVUk1VWg4Z1JjNW90alI3QXgvUEFKeUhQL2tpeWdyN01pSjJWcjljc1dWSXJyenA3WmxLSmZ4ck1hdVFxbm5MRUNNQUQrSFg0aGlBS0h5c0FSNEwrSk12cEtRd3Mxd1pmVk91TVBqU1RGTUZ2M2N4YU80WHFXemcwZkN4QmlBREgyMkF4d2IrNUl0OUttdzRVdm5QTjJXS0hGK3YwVlRBSDQ2T1J5cVhyMElNQWprdWZMUUJ5TUszRytDeGdqLzVCcThLUXlTU0dRQkt4cEJNY1lzTjhKdEJjMThkdnZnaGVEejRkZ040QXg5R2RYWDFieDhyK1BZM2tUM3VSQ3NEUm1XS0NpcDY1NzdDTnkxSlFpcm54em1BZHdVZlJwNzJuV1p2NEVQVFZGUlUvTzZ4Z3UvTk1TcFRiYkhLbGZlbUdqNGMxbFV1UzBUcWd5SUp3NGVQNTZlOVM5b0FFRDY4YkFBRC9KNk5zQmlCajBoV1B3MHFmaDlWNDNKdjRkdm0rVUZ6WHhPNndBbThKL2hHTHd4Z2g0OHhBR3RnTVFKL2VLSGl4VEdaNnVwVXc3KytiQldpajF5QkM1NElmTElHUU1OSEdXREtZUFgyOWo1THBSNmhZMlIrMGt2Z3JLdVpVdmd5Vlg5N1pHeHpmUkErZUtMd3lSZ0FDMy9TQUwrYkN2aHdreXVBbjJLeDlQYUMrTDY3dXkrVW1UTi9YdnlQNFMzYnFZSVAvcjU3Yzk2S29vWUE2WkFyOEdUZ0V6VUFIbndZY0JUZ1RUMzZBZ3R1Y2dYUWF6R3JsY2U3dWt6N0wxdzQveFA2cnZrZmZqZ2RkUGh5cHdyK1NKVGlhcXRBM3V3T1BGbjRSQXpnQ2o3VGF3TGhKdGVlbnI2VGRLOVdkbm1NeVpXZlRnMThwY2trWG5MUkUzaHY0SHN5Z0R2NGVQY0NQQjNld0I4Y0hId0JnTjV1d1d4eWRiZjYyV3p1YmJSWUxFdklNbmFaeDZoY0lRRkR2UWttNFlQV3h0by9kM2xlWTBEa0NGM3czUm5BRTN3UTV3MEd3NXRrS3BjTWZIQ2RuejY1eWJXSDZGSjE1d1d3dmZtZ3IvQUdtZnljRTVGSVpsaGx5bG9tNFk5RXhWVTA4V1dFem5wZjRMc3lnSWRtdnhPOEpobnVRcVlMUG9BbUJmQ3F5T3hUY0xYNkdUeDJGN1FJT3dZR0JwNG5rcC9UazFhWllpTlQ4T0dtajI3eDB2TTJxRHhwR2QzdzhRemdCcjRWUEwrOXJxNXVObEh3Wk9IMzkvZi9JNENtSTd0SmhkalNkMHNmK0pjQmpQdWt1L3djRXJxWW5qWjlTSzVvWlFhKzB0b2V2S0RtSVZnQ0J2QVZQdFlBZVBEaHdsRHcrR0hRM0w5R0Jqd1orTjNkM2M5TWZwbkZHRDN3MFJwOStwNmVnUWhYK1Rra2I1SEh4VEFDWDY2NkIrRFhPOEQxWUFBcTRLTU5nSC9tVityQlVDK0NMSGlpOENVZkZzMkllZS8wWjFYMXJkMWtkeWo1c3VrRnJvRUVsNFg5bFpYNjE3SDVPU1IvVTY0OHlNUTEzeHkrck1JSnNCc0RVQVhmYmdBc2ZGQXhwdkx5Y3MzRml4ZW0wd1UvVEZNY0tkYVcxSWpUU3BDb1RkOU5mTHdycDdhN3UrY2UzZkF4ZWxiNEpWbTdkLy9mY3cvelF5Y1BtdjlPdXVIZmtpbmJHL0FndXpBQWxmQmh3THVCcU9iK3pwVXJWM1llTzNiMDcrbWE0UXRKTC9xSktLMUVCOEZqWTlubWI2M2ZuaW10WndpK2JkZFRRMFBqQmIxZW4vYnc4OXFUYjVJcDVqQXh6amVGTERiaWdzWXhBTlh3MFdzQ0FmaFQrZmw1YzN5WlFYTUhYNUJ5WlJhQXZFMnNMUjdGZzIrUHNMUWlSUG4rVVhObFRWTVhuZkRiMnRvTndQRDJYVStiMFIvQ2xuaTNMRzRoM2ZEaDNyK0dvTWh4SWdhZ0E3NXRQY0Q2akF1bHBhWHpmWjArZFFkZnBDbGVCdUMydVFPUERVbjYyUW50UjM5cGFtbHRINkVTL3ZYcm5hYnE2cHFIdTU3ZzVRLzBjNXdOWUpHdmpLZDlibCttdU9FU0VNb0FOTUVmcU9SSnQveDZVZlRmMEFWZm5GYndMNkZweFdmSmdMZUZ0aGhFSVloemlEdzk1KzZmOXA2cEFjMzFoQy93NGZXK3JzNVFBcUNQWWllMThBd3cweHFsMkVBbmZOdjFQekt1MVpNQnFJWnZDSkNNVndkSTkzOG5qSGlWekZ3OEdmanpWbWU5Sk5JVzd4QnBTKzc1QWg4ZE1adVBEK1VXWFdrZ0M5OXN0a3cwTjdkY0JtZDhGM1pTQzdXMHpjRUF0c29Za3NTdG94TStER0N5Ym5jR29CdytUMXArT1ZBYVRuUkdqaXg4WVd6NjA2S1UzTGRFbWlJTGFmQXU0UmMrZUJ3OEg1RldpQ1IvY0xTanNibmRRZ1IrWjJkWC9kV3JWVTY3bnJCcklMRUdzUDNzbTd0c0RaM3c3WDJBeGtEbkpWeVRzTW9vZzgrVG11cDQwdVRWWVNGUDBRVmZ2UDYwVEpSYVVHMkhSVFY4ZEVSdHpCM2Yrb2ZqQmpCc2RMcEJCTU5rc3BpTlJ1TjVjTmFQRTluMDRtQUErOUVVSWs4Zmxhc202SUp2ajQ2UWhialg2R3B3dHZvTW55ZTlXeDhnMlZFVnN1QTViRE5ORmZ5d05kbXZpelQ1K3dHd0NTYmdvMk5SUnM1WTV1SENLdFMxL2c3OEZoTUFkSmpNZGpkY0E0Q0syM3dyU3RsTUozd1lRNUtWaURIUXVYZU9OWUFYOFBQckFxUGVJRG9kU3hiKzNPVC9mbDZjbXJkTnJDbXdFb0ZGTlh6MHNESCsvU1BkbDh1cnp0ZlYxWFVRdUl0SjNBRDlraFhuNllSdmp4dWhpNXg2KzJnRGtJRVA4bTVwQ0pRb3NHY3FsZkJGS2Fkanhha0YxOGpDb2hxK3JSWFlkQUtKWHArSi9PcXp3NDNld0hkcmdCWkI5RFc2NFUvMkJaQVdnZHlodWJjYmdEQjhuc1JxREpCc2EzdE44alJkOE1QWDVyd0p6dmhjYjJGUkNWKzJNUmVKMFdZaXdRbFppQ0JlaC96SHA5ODBlcnZMMmFVQllNWGVpbExVMGduZnJqY1VwVUFhaFRJSEE1QTQ4MDhhZ2lKZlE4T2lFcjRrUGZjRlVXcitwd0QrbmFtR0QwY0NNWnNPSWVLa1RCdDRXNml6a0E4K09lUmtBS0k3bnR3YW9ETjA0Vlc2NGRzMWJzb1VTR3RJdE0wQUJpSzNnM2xTWTMzZ3ZQbllNNVV5K0I4aTAwV3BoY2tpYlVHUEw4MDBOZkNMa1NVWnh4SFpXaFQ0U2ZnQ2RTYnl3ZmFEamQ3QTkyZ0FHTVBTT0QzZDhORmhpWWhCYW9NWFZidUJQMkQ4dVRTalNDS1pRUmQ4VWZyNWNMR21TTy9yTlpvSytOR2JUaUhMdEhzUklSbzhDajdXQUdUM090b040RkJQYUFPMEJNbTZySExsS0JQd1d4ZXNSalluN1Vha3FYbmoyNWR0US9TQ1JlZ09Icnh2b0dzS0RIOFJDNHdxK09IcEZ3SkVhVVYvcGFLRDVpdDh5Y1lDSkdaak5oS2F1TThSUEFZKzJnRGViSFNGQnJEWEg2NEI0TFc0VGJSWVR5ZjhYbmtDOHFlNDN5TlNUWUZqSllDL3Q4YjlFVGtrVFdrb0Z5NE93NFBtSzN4QlN2N3pJbTFSdkVoYmZJNnEzcmx2OEl1Um1JeHZFTWxibWM3Z2NlRGJEQUQ2QU43dWNvWjNBKzMxNTJRQTlORE1QRzk1S1Izd2o4VzhoeXhabitPeElrVnB4UU5pVGNtQjBQUVNWZWlHb3RlblRVT2U4QWErSU9YS3pIRHRoVGRGMnBKMHNiWWtIMVQ0WGFwNjU3N0NYNWlSZ3l6ZThEVStlQmZ3WWNCUmdEZndvV25LeTh2ZXRkZWRnd0d3Yy9GMVBPbTkvc2lWbFZUQkwxdWNPckI2VFpiWGxRdk8ybUhRTXk4VHArWjliWnVVU2MzZElrNDlzMDZzS1k0TDA1UkVpOU9MRldIYW92VkEveDBBK2pjaVRmRWgyeW9jYmZFZGFqdG92c09QM0ppSHJFalB3bS91UGNDSGo4TjVBRy9ndzh0R1dSbU9BZXFBQVZ6TXhkOGZqb3lyOEFWKzUvemtvYTJKTy92RFlYTS9oWk1vck5EVEZvOHZ6VGlNUkt4eTBkd1RnQStmSjJzQTlLUVJ5Z0NQMWdSV0JrcmVkVFVYM3hBUWVSZVlvSndzL0FHNSt0NnV1SS9iWkJ0T1RYQVNGc1Y2b005UkdyN21RSmRiOEFUZ2t6VUFkc1p3MGdDT2F3S3hCc0JPeW9DL0ozckNZNG85ZmFPM0hmNTNNZSswcmxoNzVCNVhZVkdwQi9veXJjTFYzeDRSeEdmZG9RSStHUVBnVFJkUDlnRWU5cWh0SFNxMEFkek55SFdFTENvZmxhdHV1b0xmRlAyMlJadjA1U0JYWVZHcEJ6cWR0MEpUem40THdQZDRCRThDUGxFRHVMcFhnTHNtMEc0QUl0T3h6WHlaZVNScXBjT01ZYjg4M3ZxeCtvOWRjelZuT1FtTFdyM2lpVkJOWWI0dzZhQ2VFSGlTOElrWXdOMk5JdHcxZ2RBQVpHL0Jkb29XWDdMS1ZQMkhZdit6ZWNHNkUrUGNoRVd4bnFhb1JyRDZ5QkdCV2pkT0YzeFBCbkR6L1FZVDRQa0RScVB4VmF3Qlp0YWhKb0xJeEVsSndwWFk1Q3drUXBQSFBWZ1U2b0VoNnZXUXQzT09BMmhYQ1lQM0VyNDdBN2c1ODYvVTFkVTU3M3F5OXdicnZUQUFiREZPaDhkV3dJVEY4WmxJYkxJTytlRU45YzcxaXRhZE9RYWdtQ0dZb1Bpc1dycmh1ektBaTcyT3BxcXFxcFREaHc4LzZRVGZQZ1JFendTU2dWK0xNb0E5d3VQM0lYR2dSWkNsbm1VaExBcjFOaFEwaDY0OWNaS3YxamtNNndnYndBZjRlQWJBZ1g5WHI5ZnZCUENmY3psRmlqN3FBNlZhc3ZDZERmQW8rZUNFYkdSRjRsNWsrZHBqU0ZpYWgwcm5DbnhOd2Fnb0piY29PUG1iQW9GNjd4MDhXSVFNNENOOHJBR3c4T0d1cDhMQ3dqbWtib3daZUZJVldmaU9CbkNkZkFSc0ZWWmxBak1jZFRZRHkrR0x0TVgzUlJ2eUx3ZXZQbllhRE9kTW5tQjVOQUFGOE5FR1FNTUh6WDNEOTk5Zlh1clZMZkVHWG1RVVdmaVBERUE4ZVVsaUZoS1h1QWRScnRtUHlEYWNZU2Q4YlhHTEtDVXZMM2pOOFhPTzBEM0RjbXNBaXVEYkRXQ0hEOEQzVjFTVWI5bXk1WmV6dkY0TUErKzV3OWsrTXZCaDVJYkhscE5OSGwwWjg5VmZBa1BzUm1Scmp4bkZHL0xxUlpyaTIwekNCMmY0VFZGcVlVWG91dHg4QUx5SW4zU3dBVUNmOEJhV1N3TlFDQi9HNUpwQWNKMi84dFhKa3ptdkVMa3I2dkV3OHVZWnlNQ0hqNThOL3dWNUE3aXBESDY4N2o2QTBCRzgrcmcrZU8ycEM2SU51UmRFcVFVVllrMmhBY0RzQkdFbEE5OEdPSzJvRmZ4ZExkSVdsSWF1enkwSVhwdFRHTHo2YUprdzhlQTFmbnpXUFNwaDRScUFZdmp3ZmUvLzE0RVRoWVhuZms3RkdzaUhCOXhVUVFhKzBSc0RVRkVaQ2RtM2hlcjlnOEtFQXlaQnd2NE9RZEwrYXdDbVVaaTR2MFdRb09zQXIra1Vxck1IK2Vyc01Tck5TZVQ5VGdhZ0dyNXFYNU5RL1pXYXFnV3dEb2NoSVBKTjlHV0F5RjQ5VWdhZzRVeGdtNTZEQVNqTkwydEVvTjYzalIrZFBwdktwZTlPQjRCNm5paDhVZ1pnSVN3NjlCNGFnS3I4MUxweGNGblVoYXAwTDlPeDZjWHBpUWFlWkNHWlhicUVETUJTV0hUbzJReEFrUjVmclNzVHFIU1VmekUwV2cvM3lScWU5SzlFTjJwNk5BQ0xZZEdoeDFmdnE2VkFEODR1Sm51N0JwSW9mQ2NEMko4czVFdCtDcUNQRUZrZjROWUFMSWRGaHg1ZnZSZkhBSVQxckh4MTF2WTNGSWRuNDhHaUdyNkRBYkJQVmdUT1U5U0FEcUduVzhRdURjQUJXSFRvQVFQVWVhV24xcDBNVUdXKzdnNFcxZkFkMWdUaVBWblBrM3ppYVhZUTF3QWNnVVdIbnFNQmlPaGw2Zm1xN0xsRVlGRU4zMkZOSU42VGlFTHhKR2dCRHBFeUFJZGcwYUgzeUFEdTlVQUhyNDhmbjUyaFVCeDIrMTIrdE1LZmZJSGJ3cUFKakx4NSt3Z1pnR093Nk5CNzBBZHdvNmZXM1FWbi9RNkI0ckRUdDNrekRuL3lSUjRMUTZaTm13NHVCMSs0TlFBSFlkR2haeHNGdUQ3cjh3TVRzM0cvejM5SzRHTU00TEd3ZWw1a2NqMVBPdXBrQUk3Q29rTVA3MTRBUDE3WEtGQm51L3dmUGFZTVBzb0FoQXN6QmttRXdBUnRkZ1BZN2daeUZCWWRlcGlwNEVGQmdtNHJHTlk1VDdpd0FmN2tHMGdYZGtXd2RKYVJKOWx1NEVudVk1ZUVjUWtXSFhvUFpnSWZUTi95a25RdlVRckx3K0dWbmkrRmZjK1hpRTZFSy83Q1ZWaDA2QVdwc3JJRGxib0FXbUF4cUVlNHNJaGZwRHdqVU8zNXRVQ1ZPY2cxV0ZUcThlT3pSc0hQUDRTOXZlZFpNdlhIYWZqb3dzTFcvUGxaZUwzanE3T0cyQTZMVWowd3JJUE5QWG9XajBsWXJJQ1BMa3dRZitESDBBaWdndHBaQjR0Q1BRQzlINXoxbndRbDdDZjhmd3M5OXZEUkI1emhBbVBpV0hDRzVJS0t1djhZd2E4QXJkeDZ3ZExkcytpc1A2YjFhQzFNcFBqcTcwQ2xKc01iSHJZMWVGeURyOXBiTDFEditVaVlzRy9PVk5RZjNYcU1GZ1pYdG9CT1k3SkE5WFVXcU53dU5zTG5xL1lPZ1RnaFVPN1pKRkRzZW9OTnNEZ05IMDh2V1BtLy93WmFoVFdnV2QwSldvaExrNzFweHVERHl4TzRudGVCMy9jSlZQczJDdFM3STZLaWJPdnJXUWVMRGoxR0N5T2lKNUVVelJBbVpzK0JVNmZBRkw4VXhHZDl6bGZyVGdOSWxlRHZUdkQ3R0JuNER3Qm5tVzJRMWJwQzhQeGVvUEh2b0tPcUVLcXpnbmhKdW1lbTh2Tk90UjRuazRkRFRwRjY1MDlEbEovUENWbTVLMGlvMmlVU3FQNGN5by9mSzRCUWhRa0gvZ2xHb09MckYrR3lLcWJ6NDVJZXA1UDM2L211eCtuay9YcSs2M0U2ZWIrZTczcWNUdDZ2UjRFZXA1UDM2L211eCtuay9YcSs2M0U2ZWIrZTczcWNUdDZ2NTdzZXA1UDM2L211eCtuay9YcSs2M0U2ZWI4ZWJYcU1GdWJYWTVjZW80WDU5ZGlseDJoaGZqMTI2VEZhbUYrUFhYcU1GdWJYWTQvZS93TVNqTFhlbXRjaUpnQUFBQUJKUlU1RXJrSmdnZz09IiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment