diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js index 8519035..86af898 100644 --- a/BetterDiscordApp/js/main.js +++ b/BetterDiscordApp/js/main.js @@ -2291,7 +2291,10 @@ Core.prototype.initObserver = function () { if (!classNameModal) classNameModal = BDModules.get(e => e.modal && typeof e.modal === "string" && e.inner && typeof e.inner === "string" && !e.responsiveWidthMobile)[0].modal; if (node.classList.contains(classNameLayer)) { - if (node.getElementsByClassName("guild-settings-base-section").length) node.setAttribute("layer-id", "server-settings"); + if (node.getAttribute("aria-label") === "GUILD_SETTINGS") { + node.setAttribute("layer-id", "server-settings"); + node.setAttribute("id", "server-settings"); + } if (node.getElementsByClassName(classNameSocialLinks).length) { node.setAttribute("layer-id", "user-settings"); @@ -4533,6 +4536,7 @@ function checkViruses(hash, data, resultCallback, removeCallback, filename) { for (let keyword of data.split(/[^\w\d]+/g)) { for (let oof of ["token", "email", "phone", "MFA", "2fa", "process", "child_process", "localStorage", "eval", "getGlobal", "BrowserWindow"]) { if (keyword.toLowerCase().includes(oof.toLowerCase())) { + console.log(oof, keyword); isHarmful = "token stealer/virus"; break; } @@ -8189,6 +8193,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _modules_themeModule__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../modules/themeModule */ "./src/modules/themeModule.js"); /* harmony import */ var _modules_webpackModules__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../modules/webpackModules */ "./src/modules/webpackModules.js"); /* harmony import */ var _modules_bdApi__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../modules/bdApi */ "./src/modules/bdApi.js"); +/* harmony import */ var _modules_utils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../modules/utils */ "./src/modules/utils.js"); +/* harmony import */ var _tooltipWrap__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./tooltipWrap */ "./src/ui/tooltipWrap.js"); function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } @@ -8206,6 +8212,8 @@ function _extends() { _extends = Object.assign || function (target) { for (var i + + const Tooltip = _modules_webpackModules__WEBPACK_IMPORTED_MODULE_13__["default"].findByDisplayName("Tooltip"); const React = _modules_v2__WEBPACK_IMPORTED_MODULE_10__["default"].react; class CardList extends _modules_v2__WEBPACK_IMPORTED_MODULE_10__["default"].reactComponent { @@ -8379,6 +8387,49 @@ class CardList extends _modules_v2__WEBPACK_IMPORTED_MODULE_10__["default"].reac return this.getString(addon.plugin ? addon.plugin.getVersion() : addon.version); } + renderCheckUpdates() { + if (!window.ZeresPluginLibrary) return null; + if (!window.PluginUpdates) return null; + if (typeof window.PluginUpdates.checkAll !== "function") return null; + if (!this.isPlugins) return null; + return React.createElement("tooltipWrap", { + text: "Checks for updates of plugins that support this feature. Right-click for a list." + }, React.createElement("span", { + style: { + marginLeft: "10px" + } + }, React.createElement(Lightcord.Api.Components.inputs.Button, { + color: "brand", + look: "filled", + size: "min", + hoverColor: "default", + onClick: () => { + try { + _modules_utils__WEBPACK_IMPORTED_MODULE_15__["default"].showToast("Plugin update check in progress.", { + type: "info" + }); + window.PluginUpdates.checkAll().then(() => { + _modules_utils__WEBPACK_IMPORTED_MODULE_15__["default"].showToast("Plugin update check complete.", { + type: "success" + }); + }).catch(err => { + console.error(err); + _modules_utils__WEBPACK_IMPORTED_MODULE_15__["default"].showToast("An error occured while checking update.", { + type: "error" + }); + }); + } catch (e) { + console.error(e); + _modules_utils__WEBPACK_IMPORTED_MODULE_15__["default"].showToast("An error occured while checking update.", { + type: "error" + }); + } + }, + wrapper: false, + disabled: false + }, "Check for Updates"))); + } + render() { const refreshIcon = React.createElement(Tooltip, { color: "black", @@ -8399,7 +8450,7 @@ class CardList extends _modules_v2__WEBPACK_IMPORTED_MODULE_10__["default"].reac key: "folder-button", className: "bd-button bd-pfbtn", onClick: this.openFolder.bind(this) - }, "Open ", this.isPlugins ? "Plugin" : "Theme", " Folder"), !_0globals__WEBPACK_IMPORTED_MODULE_8__["settingsCookie"]["fork-ps-5"] && refreshIcon, React.createElement("div", { + }, "Open ", this.isPlugins ? "Plugin" : "Theme", " Folder"), this.renderCheckUpdates(), !_0globals__WEBPACK_IMPORTED_MODULE_8__["settingsCookie"]["fork-ps-5"] && refreshIcon, React.createElement("div", { className: "bd-controls bd-addon-controls" }, React.createElement(_components_search__WEBPACK_IMPORTED_MODULE_7__["default"], { onChange: this.search, @@ -12286,4 +12337,4 @@ module.exports = require("yauzl"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJlcXVlc3RcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicmltcmFmXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInlhdXpsXCIiXSwibmFtZXMiOlsibWluaW11bURpc2NvcmRWZXJzaW9uIiwiY3VycmVudERpc2NvcmRWZXJzaW9uIiwid2luZG93IiwiRGlzY29yZE5hdGl2ZSIsInJlbW90ZUFwcCIsImdldFZlcnNpb24iLCJtaW5TdXBwb3J0ZWRWZXJzaW9uIiwiYmJkVmVyc2lvbiIsIkxDQ2hhbmVsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsIml0ZW1zIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsInJlbW90ZSIsImdldEdsb2JhbCIsInZlcnNpb24iLCJmb290ZXIiLCJUZXh0RWxlbWVudCIsIldlYnBhY2tNb2R1bGVzIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJNb2RhbFN0YWNrIiwiZmluZEJ5UHJvcHMiLCJBbmNob3IiLCJmaW5kIiwibSIsImRpc3BsYXlOYW1lIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsImNsaWNrIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3AiLCJCRFYyIiwiam9pbkxDIiwic3VwcG9ydExpbmsiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJvbkNsaWNrIiwiY2xhc3NOYW1lIiwic2l6ZSIsIlNpemVzIiwiU01BTEwiLCJjb2xvciIsIkNvbG9ycyIsIlNUQU5EQVJEIiwiYmJkQ2hhbmdlbG9nIiwidHlwZSIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwicGx1Z2luTW9kdWxlIiwidGhlbWVNb2R1bGUiLCJCREV2ZW50cyIsInNldHRpbmdzUGFuZWwiLCJEYXRhU3RvcmUiLCJDb250ZW50TWFuYWdlciIsIkNsYXNzTm9ybWFsaXplciIsIkJkQXBpIiwiQ29yZSIsIkNvcmVXcmFwcGVyIiwiY29uc3RydWN0b3IiLCJzZXRDb25maWciLCJpbml0IiwicmVxdWlyZSIsInYyTG9hZGVyIiwiZG9jdW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwiRGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiQWN0aW9uVHlwZXMiLCJzb2NrZXRJZCIsInBpZCIsInByb2Nlc3MiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0RE9NIiwiUmVhY3REb20iLCJSZWFjdENvbXBvbmVudCIsIldpbmRvd0NvbmZpZ0ZpbGUiLCJlbW90ZXMiLCJzY3JlZW5XaWR0aCIsIk1hdGgiLCJtYXgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsImlubmVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpbm5lckhlaWdodCIsImdldEFsbFdpbmRvd1ByZWZlcmVuY2VzIiwiZ2V0V2luZG93UHJlZmVyZW5jZSIsInNldFdpbmRvd1ByZWZlcmVuY2UiLCJpbmplY3RDU1MiLCJjc3MiLCJET00iLCJhZGRTdHlsZSIsImVzY2FwZUlEIiwiY2xlYXJDU1MiLCJyZW1vdmVTdHlsZSIsImxpbmtKUyIsImFkZFNjcmlwdCIsInVubGlua0pTIiwicmVtb3ZlU2NyaXB0IiwiZ2V0UGx1Z2luIiwiaGFzT3duUHJvcGVydHkiLCJwbHVnaW4iLCJnZXRDb3JlIiwibWFpbkNvcmUiLCJhbGVydCIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImNhbmNlbFRleHQiLCJvcHRpb25zIiwiZmluZE1vZHVsZSIsImZpbHRlciIsImZpbmRBbGxNb2R1bGVzIiwiZmluZEFsbCIsImZpbmRNb2R1bGVCeVByb3BzIiwicHJvcHMiLCJmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzIiwiZmluZE1vZHVsZUJ5UHJvdG90eXBlcyIsInByb3RvcyIsImZpbmRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsImdldEludGVybmFsSW5zdGFuY2UiLCJub2RlIiwialF1ZXJ5IiwiRWxlbWVudCIsImxvYWREYXRhIiwicGx1Z2luTmFtZSIsImdldFBsdWdpbkRhdGEiLCJnZXREYXRhIiwic2F2ZURhdGEiLCJzZXRQbHVnaW5EYXRhIiwic2V0RGF0YSIsImRlbGV0ZURhdGEiLCJkZWxldGVQbHVnaW5EYXRhIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsInN1cHByZXNzRXJyb3JzIiwibWV0aG9kIiwidGVzdEpTT04iLCJpc1BsdWdpbkVuYWJsZWQiLCJpc1RoZW1lRW5hYmxlZCIsImlzU2V0dGluZ0VuYWJsZWQiLCJlbmFibGVTZXR0aW5nIiwib25DaGFuZ2UiLCJkaXNhYmxlU2V0dGluZyIsInRvZ2dsZVNldHRpbmciLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJtYWtlQWRkb25BUEkiLCJjb29raWUiLCJsaXN0IiwibWFuYWdlciIsIkFkZG9uQVBJIiwiZm9sZGVyIiwiaXNFbmFibGVkIiwidG9nZ2xlIiwicmVsb2FkIiwiZ2V0QWxsIiwiayIsImEiLCJQbHVnaW5zIiwiVGhlbWVzIiwiQmV0dGVyRGlzY29yZCIsIkV2ZW50RW1pdHRlciIsImV2ZW50TmFtZSIsImFyZ3MiLCJlbWl0Iiwib2ZmIiwiZXZlbnRBY3Rpb24iLCJyZW1vdmVMaXN0ZW5lciIsInNlbGVjdG9ycyIsInJlbW92ZURhIiwiZ2V0U2VsZWN0b3JzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsImRlZmF1bHRDbGFzc05hbWUiLCJzZWxlY3RzIiwicHVzaCIsInBheW1lbnRTb3VyY2VSb3ciLCJzdWJUZXh0IiwiZGVzY3JpcHRpb25XcmFwcGVyIiwidXNlclNldHRpbmdzQWNjb3VudCIsInZpZXdCb2R5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwibm9ybWFsaXplZFByZWZpeCIsInJhbmRDbGFzcyIsInN0b3AiLCJoYXNQYXRjaGVkIiwidW5wYXRjaENsYXNzTW9kdWxlcyIsIm1vZHVsZUZpbHRlciIsInJldmVydEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicGF0Y2hDbGFzc01vZHVsZXMiLCJub3JtYWxpemVFbGVtZW50IiwicGF0Y2hET01NZXRob2RzIiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJpc05hTiIsImVuZHNXaXRoIiwic3RhcnRzV2l0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9fZXNNb2R1bGUiLCJiYXNlQ2xhc3NOYW1lIiwic3BsaXQiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwiY2FtZWxDYXNlIiwicyIsImkiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiam9pbiIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJyZW1vdmUiLCJjb250YWlucyIsIkRPTVRva2VuTGlzdCIsInRva2VuIiwidG9rZW5zIiwidCIsIkNvbG9yZWRUZXh0IiwiaW5qZWN0Q29sb3JlZFRleHQiLCJjYW5jZWxDb2xvcmVkVGV4dCIsIk1lc3NhZ2VDb21wb25lbnQiLCJiZWZvcmUiLCJtZXRob2RBcmd1bWVudHMiLCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50IiwibWVzc2FnZUNvbnRlbnQiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImFzc2lnbiIsInJlbW92ZUNvbG9yZWRUZXh0IiwiY2xhc3NOYW1lTWFya3VwIiwibWFya3VwIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiLCJwYXRoIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInJlc29sdmUiLCJhcHAiLCJnZXRBcHBQYXRoIiwiTWV0YUVycm9yIiwib3JpZ2luYWxKU1JlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIm9yaWdpbmFsQ1NTUmVxdWlyZSIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsImFkZG9uQ2FjaGUiLCJ0aW1lQ2FjaGUiLCJ3YXRjaGVycyIsImdldENvbnRlbnRSZXF1aXJlIiwicGx1Z2luc0ZvbGRlciIsIl9wbHVnaW5zRm9sZGVyIiwicmVhbHBhdGhTeW5jIiwiZGF0YVBhdGgiLCJ0aGVtZXNGb2xkZXIiLCJfdGhlbWVzRm9sZGVyIiwibG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUiLCJkYXRhU3RvcmUiLCJnZXRTZXR0aW5nR3JvdXAiLCJzZXRTZXR0aW5nR3JvdXAiLCJlbmNyeXB0U2V0dGluZ3NDYWNoZSIsIkpTT04iLCJwYXJzZSIsImRlY3J5cHRTZXR0aW5nc0NhY2hlIiwiaGFzaCIsInJlc3VsdCIsInN1c3BlY3QiLCJzYXZlQWRkb25DYWNoZSIsInN0cmluZ2lmeSIsIndhdGNoQ29udGVudCIsImNvbnRlbnRUeXBlIiwiaXNQbHVnaW4iLCJiYXNlRm9sZGVyIiwiZmlsZUVuZGluZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkUGx1Z2luIiwidW5sb2FkVGhlbWUiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRQbHVnaW4iLCJsb2FkVGhlbWUiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRUaGVtZSIsInVud2F0Y2hDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsImhhc09sZE1ldGEiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwibWV0YSIsInJhd01ldGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJwYXJzZWQiLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwiY2hhckF0IiwibCIsInN1YnN0ciIsInNlbGYiLCJvcmlnaW5hbFJlcXVpcmUiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsImFkZGVkIiwiYXRpbWVNcyIsIm1vZGlmaWVkIiwibXRpbWVNcyIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImZsYXQiLCJFRCIsIldlYlNvY2tldCIsInBhdGNoQXR0cmlidXRlcyIsImluaXRTZXR0aW5ncyIsImNoZWNrRm9yR3VpbGRzIiwiaW5pdGlhbGl6ZSIsImluaXRpYWxpemVTZXR0aW5ncyIsImNvbnRlbnRNYW5hZ2VyIiwiYXRvYiIsImFkZEV2ZW50TGlzdGVuZXIiLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsIm9yaWdpbmFsIiwic2F2ZVNldHRpbmdzIiwibG9hZFNldHRpbmdzIiwic2V0dGluZyIsIkFwaSIsImdldFByZWRpY2F0ZVNlY3Rpb25zIiwic2V0dGluZ01vZHVsZSIsImNhbGwiLCJzZWN0aW9uIiwicG9wZWQiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImxheWVyIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImNoYXQiLCJuZXh0VGljayIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGROb2RlcyIsImJsb2NrRGl2IiwiZGlzdGFudCIsImdldEJhZGdlcyIsImJhZGdlcyIsInN2ZyIsIndpZHRoIiwic2NvcGVzIiwic2NvcGUiLCJjb21wb25lbnQiLCJkaXYyIiwicmVhY3REb20iLCJyZW5kZXIiLCJtZW1iZXJMaXN0UGF0Y2giLCJNZW1iZXJMaXN0SXRlbSIsInJlbmRlckRlY29yYXRvcnMiLCJ1cGRhdGVJbmplY3RvciIsImluamVjdGlvblBhdGgiLCJybXJmIiwieWF1emwiLCJta2RpcnAiLCJyZXF1ZXN0IiwicGFyZW50UGF0aCIsImZvbGRlck5hbWUiLCJ6aXBMaW5rIiwic2F2ZWRaaXAiLCJleHRyYWN0ZWRGb2xkZXIiLCJzdWNjZXNzIiwiZW5jb2RpbmciLCJyZXNwb25zZSIsInN0YXR1c0NvZGUiLCJhbHJlYWR5RXhpc3RzIiwicmVzIiwiZXhpc3RzIiwicmVuYW1lIiwicm91bmQiLCJwZXJmb3JtYW5jZSIsIndyaXRlRmlsZSIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsInppcCIsIm9uIiwiZW50cnkiLCJmaWxlTmFtZSIsInJlYWRFbnRyeSIsImZ1bGxQYXRoIiwic3luYyIsImRpcm5hbWUiLCJvcGVuUmVhZFN0cmVhbSIsInJlYWRTdHJlYW0iLCJwaXBlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJvbmNlIiwiYmFja3VwRm9sZGVyIiwidW5saW5rIiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJyZWxlYXNlQ2hhbm5lbCIsImdsb2JhbHMiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsInN0YWJsZSIsImNhbmFyeSIsInB0YiIsInBsdWdpbkRhdGEiLCJCREZpbGUiLCJ3cml0ZUZpbGVTeW5jIiwic2V0dGluZ3NGaWxlIiwidW5saW5rU3luYyIsIl9pbmplY3Rpb25QYXRoIiwiYmFzZSIsInJvYW1pbmdCYXNlIiwiZ2V0UGF0aCIsInJvYW1pbmdMb2NhdGlvbiIsInJlYWxMb2NhdGlvbiIsImNvbmZpZ0ZpbGUiLCJfY29uZmlnRmlsZSIsIl9CREZpbGUiLCJfc2V0dGluZ3NGaWxlIiwiZ2V0UGx1Z2luRmlsZSIsIkRldk1vZGUiLCJkZWJ1Z0xpc3RlbmVyIiwiY29weVNlbGVjdG9yTGlzdGVuZXIiLCJzdGFydERlYnVnTGlzdGVuZXIiLCJzdGFydENvcHlTZWxlY3RvciIsInN0b3BEZWJ1Z0xpc3RlbmVyIiwic3RvcENvcHlTZWxlY3RvciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ3aGljaCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJjbGFzc0xheWVyIiwiY2xhc3NJdGVtcyIsImRpc2FibGVkUG9pbnRlckV2ZW50cyIsIm1lbnUiLCJhdHRhY2giLCJjbSIsInF1ZXJ5IiwiY29udGFpbmVyIiwibGF5ZXJDb250YWluZXIiLCJjbVdyYXAiLCJzdHlsZUZsZXhpYmxlIiwiYWNjb21tb2RhdGVTY3JvbGxiYXIiLCJhcHBlbmQiLCJjbGllbnRZIiwibGVmdCIsImNsaWVudFgiLCJzY3JvbGxlckNsYXNzZXMiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyIiwicmVtb3ZlQ00iLCJrZXlDb2RlIiwiY21nIiwiY21pIiwiaXRlbSIsImxhYmVsQ29udGFpbmVyIiwiY29sb3JEZWZhdWx0IiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5IiwiZWxlbWVudHMiLCJxdWVyeUFsbCIsImZvY3VzZWQiLCJzZXBhcmF0b3IiLCJzY3JvbGxIZWlnaHQiLCJlbCIsIm5hbWVzIiwicGFyZW50Tm9kZSIsInVuc2hpZnQiLCJvd25lckRvY3VtZW50IiwidGFnTmFtZSIsImZyb20iLCJlbnRyaWVzIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImdldFJ1bGVzIiwic3R5bGVTaGVldHMiLCJzaGVldHMiLCJydWxlcyIsImNzc1J1bGVzIiwiZWxlbWVudFJ1bGVzIiwic2VsZWN0b3JUZXh0IiwibWF0Y2hlcyIsIkRpc2FibGVUeXBpbmciLCJzdGFydFR5cGluZyIsInR5cGluZ01vZHVsZSIsImRpc2FibGVkIiwic3RvcFR5cGluZyIsInJhbmRvbSIsInYiLCJhd2FpdGluZ0JhZGdlc1Byb21pc2VzIiwiYmFkZ2VzVG9GZXRjaCIsIkRpc3RhbnRTZXJ2ZXIiLCJfY2FjaGUiLCJuZXdQcm9taXNlIiwiQ29uc3RhbnRzIiwiZGVmYXVsdFVzZXJzIiwiZmV0Y2hlZEJhZGdlcyIsInVzZXJzIiwiaGFuZGxlUmVxdWVzdCIsIlJvdXRlcyIsInN0YXR1cyIsInJlc3BvbnNlQm9keSIsImpzb24iLCJwcm9taXNlIiwidXNlcl9pZCIsImNhdGNoIiwiTGlnaHRjb3JkRXJyb3IiLCJyb3V0ZSIsInJlamVjdCIsIm5vZGVGZXRjaCIsIlNFUlZFUl9VUkwiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkJ1Z0h1bnRlckJhZGdlIiwiQ2lyY3VzIiwiaGVhZCIsInNjcmlwdCIsInNyYyIsIm9ubG9hZCIsImFuaW1hdGUiLCJ0aW1pbmciLCJfIiwidXBkYXRlIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJodG1sIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImNsb25lTm9kZSIsImVzY2FwZUhUTUwiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwic3BhbkVsZW1lbnQiLCJub2RlVmFsdWUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJjbGFzc25hbWUiLCJpbmRpY2F0b3IiLCJoYXNDbGFzcyIsImV2ZXJ5IiwicmVwbGFjZUNsYXNzIiwib2xkTmFtZSIsIm5ld05hbWUiLCJhcHBlbmRUbyIsInRoaXNOb2RlIiwidGhhdE5vZGUiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJ0YXJnZXROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJuZXdOb2RlIiwibmV4dCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJwcmV2aW91cyIsInByZXZpb3VzQWxsIiwicHJldmlvdXNVbnRpbCIsImluZGV4SW5QYXJlbnQiLCJudW0iLCJpbmRleCIsInBhcmVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJhdHRyaWJ1dGUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0IiwidGV4dENvbnRlbnQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJldmVudCIsImRlbGVnYXRlIiwibmFtZXNwYWNlIiwiaGFzRGVsZWdhdGUiLCJldmVudEZ1bmMiLCJjYW5jZWwiLCJuZXdDYW5jZWwiLCJmaW5kSW5kZXgiLCJfX29mZkFsbCIsIm1hdGNoRmlsdGVyIiwibGlzdGVuZXIiLCJkZWZhdWx0RmlsdGVyIiwib25Nb3VudENoYW5nZSIsIm9uTW91bnQiLCJ3cmFwcGVkQ2FsbGJhY2siLCJvYnNlcnZlciIsIm5vZGVzIiwicmVtb3ZlZE5vZGVzIiwiZGlyZWN0TWF0Y2giLCJwYXJlbnRNYXRjaCIsIm9uVW5tb3VudCIsIm9uQWRkZWQiLCJ3cmFwIiwiZG9tV3JhcHBlciIsInJlc29sdmVFbGVtZW50IiwiRW1vamlSZWdleCIsIkN1c3RvbUVtb2ppTW9kdWxlIiwiQ3VzdG9tRW1vamkiLCJFbW9qaU1vZHVsZUFwaSIsImdldEN1c3RvbUVtb2ppQnlJZCIsIkF1dG9jb21wbGV0ZU1vZHVsZSIsIkF1dG9Db21wbGV0aW9uVGVtcGxhdGVzIiwiZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyIsIkVtb2ppTW9kdWxlUXVlcnkiLCJxdWVyeUVtb2ppUmVzdWx0cyIsIk1lc3NhZ2VzIiwiRU1PSklfTUFUQ0hJTkciLCJndWlsZE1vZHVsZSIsImdldEd1aWxkIiwiZ2V0R3VpbGRzIiwiaXNGZXRjaGluZyIsImVtb2ppU2VhcmNoIiwiZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uSG92ZXIiLCJSIiwicHJlZml4IiwiVGl0bGUiLCJFbW9qaUZpbHRlck1vZHVsZSIsImlzRW1vamlEaXNhYmxlZCIsImlzVXNhYmxlIiwidXNhYmxlIiwic3Vycm9nYXRlcyIsImRpdmVyc2l0eSIsImNhY2hlMiIsInByb2Nlc3NBdHRhY2htZW50IiwiaXNUcnVzdGVkIiwiY2hlY2tWaXJ1c2VzIiwicmVzdWx0Q2FsbGJhY2siLCJyZW1vdmVDYWxsYmFjayIsImlzSGFybWZ1bCIsImtleXdvcmQiLCJvb2YiLCJub19jb21tZW50cyIsInJlZ2V4cHMiLCJyZWdleCIsImhhc2hUb1VybCIsImNoZWNrSGFzaCIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsInVzZXJBZ2VudCIsIl9fcGF0aCIsImlzRnJvbUxvYWRlciIsImNyeXB0byIsIkJ1ZmZlciIsImFsbG9jIiwiY3JlYXRlUmVhZFN0cmVhbSIsImNodW5rIiwiY29uY2F0IiwiaGFzaFJlc3VsdCIsImRpZ2VzdCIsInJlbmRlclRvRWxlbWVudHMiLCJmbG93ZXJTdGFyTW9kdWxlIiwiZmxvd2VyU3RhckNvbnRhaW5lciIsImNoaWxkTW9kdWxlIiwiY2hpbGRDb250YWluZXIiLCJib3JkZXJDb2xvciIsIm5leHROb2RlIiwiY29uZmlybVRleHQiLCJkYW5nZXIiLCJvbkNhbmNlbCIsIm9uQ29uZmlybSIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwidG9vbHRpcFdyYXAiLCJ2aWV3Qm94IiwieCIsInkiLCJtYXNrIiwiZmlsbCIsInBvaW50ZXJFdmVudHMiLCJvZmZpY2lhbCIsInNwYW4iLCJmbG9hdCIsImZsb3dlclN0YXIiLCJnZXRLZXllZEFycmF5IiwiYnVmZmVyIiwiaW5zdGFsbFBhdGgiLCJjdXJzb3IiLCJzdHJva2UiLCJzYXZlIiwiT2JqZWN0U3RvcmFnZSIsImxvY2FsU3RvcmFnZU1vZHVsZSIsImxvY2FsU3RvcmFnZSIsImltcGwiLCJidG9hIiwic2V0SW50ZXJ2YWwiLCJzYWZlSlNPTlBhcnNlIiwiZ2VuZXJhdGVLZXkiLCJkZWNpcGhlciIsImRlY3J5cHRlZCIsImZpbmFsIiwiY2lwaGVyIiwiZW5jcnlwdGVkIiwiUGx1Z2luTW9kdWxlIiwibG9hZFBsdWdpbkRhdGEiLCJsb2FkIiwic2F2ZVBsdWdpbkRhdGEiLCJjaGFubmVsU3dpdGNoIiwic3RhcnRQbHVnaW4iLCJzdG9wUGx1Z2luIiwiZW5hYmxlUGx1Z2luIiwiZGlzYWJsZVBsdWdpbiIsInRvZ2dsZVBsdWdpbiIsInAiLCJmaWxlbmFtZU9yTmFtZSIsImJkcGx1Z2luIiwiZGVsZXRlIiwiZWRpdCIsIm9wZW5JdGVtIiwidXBkYXRlUGx1Z2luTGlzdCIsInNhdmVkIiwibmV3TWVzc2FnZSIsIm9uTWVzc2FnZSIsIm9uU3dpdGNoIiwiVjJfUHVibGljU2VydmVycyIsIl9hcHBlbmRCdXR0b24iLCJMYXllciIsInJvb3RJZCIsIlYyQ19QdWJsaWNTZXJ2ZXJzIiwicm9vdCIsIl9yb290IiwiaW5qZWN0Um9vdCIsImNsYXNzTmFtZUxheWVycyIsImxheWVycyIsImJ1dHRvbiIsImJ0biIsImNpcmNsZUJ1dHRvbk1hc2siLCJjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lciIsImRvd25sb2FkUHJvZ3Jlc3MiLCJ0dXRvcmlhbENvbnRhaW5lciIsImFkZEJ1dHRvbiIsImd1aWxkUGF0Y2giLCJHdWlsZExpc3QiLCJ3ZWJwYWNrTW9kdWxlcyIsIkd1aWxkTGlzdE9sZCIsInJlbW92ZUJ1dHRvbiIsIkJEU2lkZWJhckhlYWRlciIsIlB1cmVDb21wb25lbnQiLCJzaWRlYmFyQ29tcG9uZW50cyIsIkhlYWRlciIsIkl0ZW0iLCJjaGFuZ2Vsb2dCdXR0b24iLCJIaXN0b3J5IiwicmVuZGVyZWQiLCJWMl9TZXR0aW5nc1BhbmVsIiwidXBkYXRlU2V0dGluZ3MiLCJzaWRlYmFyIiwiVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIiwicmVnaXN0ZXJDb21wb25lbnRzIiwicmVnaXN0ZXIiLCJtYWtlQ29tcG9uZW50IiwibGlnaHRjb3JkQ29tcG9uZW50IiwiUHJlc2VuY2VDb21wb25lbnQiLCJBY2NvdW50SW5mb3NDb21wb25lbnQiLCJBcGlQcmV2aWV3Q29tcG9uZW50IiwiY29yZUNvbXBvbmVudCIsImN1c3RvbUNzc0NvbXBvbmVudCIsInJlbmRlckFkZG9uUGFuZSIsImNsYXNzU2lkZWJhciIsImNvbnRlbnRSZWdpb24iLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiY29yZVNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJjYXRlZ29yaWVzIiwiU2V0Iiwic2VjdGlvbnMiLCJsaWdodGNvcmRTZXR0aW5ncyIsIlByZXNlbmNlU2V0dGluZ3MiLCJNc2dMb2dTZXR0aW5ncyIsImNoZWNrZWQiLCJwdWJsaWNTZXJ2ZXJzTW9kdWxlIiwidm9pY2VNb2RlIiwidGZIb3VyIiwiY29sb3JlZFRleHQiLCJkTW9kZSIsIlNldHRpbmdzIiwiZGV2TW9kZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImdldEN1cnJlbnRXaW5kb3ciLCJzZXRBbHdheXNPblRvcCIsIkFudGlBZERNIiwiYmx1clByaXZhdGUiLCJkaXNhYmxlVHlwaW5nIiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsInJlbGF1bmNoIiwiYXJndiIsInF1aXQiLCJWMkNfUHJlc2VuY2VTZXR0aW5ncyIsIlYyQ19BY2NvdW50SW5mb3MiLCJBcGlQcmV2aWV3IiwiQ3NzRWRpdG9yIiwiQ29udGVudExpc3QiLCJDb21wb25lbnQiLCJvcmlnaW5hbFJlbmRlciIsImVudW1lcmFibGUiLCJDYXJkTGlzdCIsIlNldHRpbmdDb21wb25lbnQiLCJwYW5lbHMiLCJwYW5lbCIsImdldENvbXBvbmVudCIsIkxDaXRlbXMiLCJUaGVtZU1vZHVsZSIsImxvYWRUaGVtZURhdGEiLCJ0aGVtZSIsInVuZXNjYXBlIiwic2F2ZVRoZW1lRGF0YSIsImVuYWJsZVRoZW1lIiwiZGlzYWJsZVRoZW1lIiwidG9nZ2xlVGhlbWUiLCJiZHRoZW1lIiwidXBkYXRlVGhlbWVMaXN0IiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJ0cmFuc3BhcmVudCIsImZyYW1lIiwiY2hhckNvZGVBdCIsImdldFRleHRBcmVhIiwiY2hhbm5lbFRleHRBcmVhIiwidGl0bGVXcmFwcGVyIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwiZm9jdXMiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImV4ZWNDb21tYW5kIiwibW9kdWxlTmFtZSIsImdyb3VwQ29sbGFwc2VkIiwiZ3JvdXBFbmQiLCJlc2NhcGUiLCJwYXJhbXMiLCJpbnN0ZWFkIiwic2lsZW50IiwiZm9yY2UiLCJvcmlnTWV0aG9kIiwiY2FuY2VsZWQiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwidGVtcFJldCIsIl9fbW9ua2V5UGF0Y2hlZCIsImRpc2Nvbm5lY3QiLCJoYXNOb3RpY2UiLCJtZW1iZXJsaXN0IiwibWVtYmVyc1dyYXAiLCJmb3JtIiwicmlnaHQiLCJib3R0b20iLCJ0b2FzdFdyYXBwZXIiLCJpY29uIiwidGltZW91dCIsInRvYXN0RWxlbSIsImlubmVyVGV4dCIsIm1vZGFsTW9kdWxlIiwiaGlkZU9uRnVsbHNjcmVlbiIsImhlYWRlck1vZHVsZSIsImhlYWRlciIsImZvb3RlcjJNb2R1bGUiLCJmb2N1c0xvY2siLCJiYWNrZHJvcCIsImJhY2tkcm9wV2l0aExheWVyIiwiY2xvc2luZ0xpc3RlbmVycyIsInBsdWdpbkVycm9ycyIsInRoZW1lRXJyb3JzIiwiZ2VuZXJhdGVUYWIiLCJ0YWJzIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIkZsZXhDaGlsZCIsIlRpdGxlcyIsIkNoYW5nZWxvZyIsImRlZmF1bHRQcm9wcyIsInNlbGVjdGFibGUiLCJNYXJrZG93blBhcnNlciIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJtYXJnaW4iLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiam9pbkJEMiIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwicmVkIiwiVjIiLCJlZGl0b3JEZXRhY2hlZCIsInJlcSIsIndlYnBhY2tKc29ucCIsIl9fZXh0cmFfaWRfXyIsInNob3VsZFByb3RlY3QiLCJ0aGVNb2R1bGUiLCJjbGVhciIsInNvcnQiLCJnZXRUb2tlbiIsImdldEVtYWlsIiwic2hvd1Rva2VuIiwicHJvdGVjdCIsInByb3h5IiwiZnVuYyIsInByb3BOYW1lcyIsInByb3RvTmFtZXMiLCJwcm90b1Byb3AiLCJpbnRlcm5hbCIsImpvaW5CRDEiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsImxlYXZlQkQxIiwiR3VpbGRBY3Rpb25zIiwibGVhdmVHdWlsZCIsImxlYXZlQkQyIiwibGVhdmVMQyIsInJlYWN0Q29tcG9uZW50IiwiYW5jaG9yQ2xhc3NlcyIsInNsYXRlRWRpdG9yQ2xhc3NlcyIsIm1lc3NhZ2VDbGFzc2VzIiwidW5yZWFkTWVudGlvbnNCYXIiLCJndWlsZHNFcnJvciIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiVG9vbHRpcFdyYXBwZXIiLCJUb29sdGlwcyIsImhpZGUiLCJzaG93Iiwic3VibWl0IiwiYWN0aXZhdGVSYWdpbmdEZW1vbiIsImRpc21pc3MiLCJLZXlHZW5lcmF0b3IiLCJMYXllclN0YWNrIiwiVXNlclN0b3JlIiwiQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJvcGVuRE0iLCJ1c2VySWQiLCJzZWxmSWQiLCJwcml2YXRlQ2hhbm5lbElkIiwiZ2V0RE1Gcm9tVXNlcklkIiwic2VsZWN0UHJpdmF0ZUNoYW5uZWwiLCJvcGVuUHJpdmF0ZUNoYW5uZWwiLCJwYXJzZVNldHRpbmdzIiwiVm9pY2VNb2RlIiwibW9kIiwicHJvZmlsTW9kdWxlIiwiZmV0Y2hNdXR1YWxGcmllbmRzIiwiTGlnaHRjb3JkVXNlckJhZGdlIiwibWFyZ2luTW9kdWxlMiIsImRlZmF1bHRNYXJnaW5oNSIsImNvbG9yTW9kdWxlIiwiY29sb3JTdGFuZGFyZCIsInNpemVNb2R1bGUiLCJzY3JvbGxiYXJNb2R1bGUxIiwic2Nyb2xsYmFyR2hvc3RIYWlybGluZSIsIkd1aWxkTW9kdWxlIiwiZ2V0UmVsYXRpb25zaGlwcyIsInNlc3Npb25Nb2R1bGUiLCJnZXRTZXNzaW9ucyIsInNpemUxNCIsImg1IiwiZ2V0UHJvZmlsZVZhbHVlIiwiZ2V0U3RhdGlzdGljcyIsImdldFNlc3Npb25WYWx1ZSIsIm1hcmdpbkJvdHRvbTIwIiwic2Vzc2lvbnNSYXciLCJzZXNzaW9ucyIsInNlc3Npb25JZCIsImNsaWVudEluZm8iLCJvcyIsImNsaWVudCIsImFjdGl2ZSIsImFjdGl2aXRpZXMiLCJyZXBlYXQiLCJjcmVhdGVkQXQiLCJhdmF0YXIiLCJnZXREYXRlIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJmbGFncyIsImhhc1ByZW1pdW1TdWJzY3JpcHRpb24iLCJlbWFpbCIsIm1mYUVuYWJsZWQiLCJtb2JpbGUiLCJwaG9uZSIsInZlcmlmaWVkIiwicmVsYXRpb25zIiwiZnJpZW5kcyIsImlzRnJpZW5kIiwiaXNCbG9ja2VkIiwiaGlnaHRsaWdodEpTIiwiaGlnaGxpZ2h0IiwibWVzc2FnZU1vZHVsZTEiLCJtZXNzYWdlTW9kdWxlMiIsIkNvZGVDb250ZW50IiwiX19odG1sIiwibGFuZ3VhZ2UiLCJtYXJnaW5Cb3R0b204Iiwic2V0dGluZ1RpdGxlIiwiZm9ybU1vZHVsZSIsInN0YXRlcyIsIkZvcm1TZWN0aW9uIiwiYWxsQ29tcG9uZW50cyIsImNvbXAiLCJBbGxQcmV2aWV3cyIsInRhYiIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJnZXRQcm9wcyIsInJlbmRlclByZXZpZXciLCJiYWNrZ3JvdW5kQ29sb3IiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwicmVuZGVyQ29kZSIsImdlbmVyYXRlQ29kZSIsImdldFN0ckZvclByb3AiLCJjb21wUGF0aCIsImxhbmciLCJTdHJpbmciLCIkJHR5cGVvZiIsIlN5bWJvbCIsImZvciIsImNvbXBOYW1lIiwiY29tcENhdGVnb3J5IiwicHJvcFN0cmluZ3MiLCJjaGlsZHJlblByb3AiLCJzdHIiLCJvcGVuVGFnIiwiY2xvc2VUYWciLCJ2aXNpYmxlS2V5IiwicHJvcE9iamVjdCIsImlzTGFzdCIsImlzRmlyc3QiLCJjaGlsZHJlbkRhdGEiLCJtYXJnaW5Cb3R0b20iLCJyZW5kZXJzIiwiVjJDX1BsdWdpbkNhcmQiLCJzaG93U2V0dGluZ3MiLCJzZXRJbml0aWFsU3RhdGUiLCJoYXNTZXR0aW5ncyIsImFkZG9uIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInJlbG9hZHMiLCJ0cnVzdGVkIiwiY2xvc2VTZXR0aW5ncyIsInBhbmVsUmVmIiwic2V0dGluZ3NPcGVuIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVmcyIsInNldHRpbmdzcGFuZWwiLCJzZXRJbW1lZGlhdGUiLCJpc0hpZGRlbiIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJjYXJkTm9kZSIsInRoaXNOb2RlT2Zmc2V0IiwiY29udGFpbmVyT2Zmc2V0IiwiZW5kUG9pbnQiLCJnZXRTdHJpbmciLCJzZXR0aW5nc0NvbXBvbmVudCIsInJlZiIsIlhTdmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lSW5kZXgiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsInBvcExheWVyIiwibWFrZUxpbmsiLCJtYWtlQnV0dG9uIiwiYWN0aW9uIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bm1vdW50ZWQiLCJsaW5rcyIsImludml0ZSIsInRlc3RlciIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJpc1NjYW5uaW5nIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvcGVuRm9sZGVyIiwic2hvdWxkRGVsZXRlIiwiY29uZmlybURlbGV0ZSIsInNvcnRPcHRpb25zIiwiZGlyZWN0aW9ucyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0QWRkb25zIiwic29ydGVkQWRkb25zIiwiYiIsImNhcCIsImZpcnN0Iiwic2Vjb25kIiwibG9jYWxlQ29tcGFyZSIsInJlZnJlc2hJY29uIiwiZm9yY2VVcGRhdGUiLCJhZGRvbkNhcmRzIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsIm9wYWNpdHkiLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsIlYyQ19Db250ZW50Q29sdW1uIiwiY29udGVudE1vZHVsZSIsImNvbnRlbnRDb2x1bW4iLCJjb250ZW50Q29sdW1uRGVmYXVsdCIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiY29tcG9uZW50RGlkTW91bnQiLCJlZGl0b3IiLCJhY2UiLCJzZXRUaGVtZSIsInNlc3Npb24iLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwibWFyZ2luTGVmdCIsImFyZyIsImdldFZhbHVlIiwiZHJvb3QiLCJpbmplY3REZXRhY2hlZFJvb3QiLCJCREVycm9yQm91bmRhcnkiLCJoYXNFcnJvciIsImNvbXBvbmVudERpZENhdGNoIiwiRGVsZXRlIiwiRG93bkFycm93IiwiRWRpdCIsIm1hcmdpbk1vZHVsZSIsIm1hcmdpblRvcDYwIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIiwicHJldmlldyIsImlzZmV0Y2hpbmciLCJhc3NldENvbXBvbmVudHMiLCJ1cGRhdGVXaGVuRmV0Y2hlZCIsImRlZmF1bHRTZXR0aW5nIiwiUlBDUHJvcHMiLCJhc3NldCIsInVwZGF0ZVByZXZpZXciLCJvcHRpb25zQ29tcG9uZW50cyIsIm9oZ29kb2hmdWNrIiwiX29wdGlvbnNDb21wb25lbnRzIiwiYXJyYXkiLCJpbnB1dFRleHRNb2R1bGVzIiwiSW5wdXRUZXh0IiwicmVtb3ZlS2V5YmluZCIsIl9ob3Jpem9udGFsIiwiaW5wdXRNaW5pIiwic2l6ZTE2Iiwic2l6ZTIwIiwiaW5wdXQiLCJsYXN0RWRpdGVkIiwiaXNUaW1pbmciLCJyb3dNb2R1bGUiLCJmbGV4TW9kdWxlIiwiaW5wdXRNb2R1bGUiLCJzaXplTW9kdWxlMiIsInJvdyIsImZsZXhDaGlsZCIsIklucHV0TnVtYmVyTW9kdWxlcyIsIklucHV0TnVtYmVyIiwiY29sb3JUcmFuc3BhcmVudCIsInNldFZhbHVlIiwiY2xpcGJvYXJkIiwiSW5wdXRDaG9pY2VNb2R1bGVzIiwiSW5wdXRDaG9pY2UiLCJEaXZpZGVyTW9kdWxlcyIsIkRpdmlkZXIiLCJkaXZpZGVyIiwiZGl2aWRlckRlZmF1bHQiLCJEaXNjb3JkQnV0dG9uIiwiUnBjUHJldmlldyIsImNoYW5nZVRhYiIsImFuY2llbnRUYWIiLCJzZXRBY3RpdmUiLCJycGMiLCJmbGV4IiwiaXNBY3RpdmUiLCJQcm9maWxlIiwiUG9wb3V0IiwiVGFiIiwicG9wb3V0TW9kdWxlIiwidXNlclBvcG91dCIsInZlcnRpY2FsIiwiYWxpZ25TdHJldGNoIiwic3RyZWFtZXJNb2RlRW5hYmxlZEJ0biIsImFjdGl2aXR5VXNlclBvcG91dCIsIm11dGVkIiwidGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMiLCJub3RlIiwicHJvIiwiaW5saW5lIiwicm9vdE1vZHVsZTEiLCJmbGV4TW9kdWxlMSIsInN0eWxpbmdNb2R1bGUxIiwibmFtZVRhZ01vZHVsZTEiLCJhY3Rpdml0eU1vZHVsZTEiLCJ0ZXh0TW9kdWxlMSIsInNpemVNb2R1bGUxIiwic2Nyb2xsZXJNb2R1bGUxIiwibm90ZU1vZHVsZTEiLCJwcm90aXBNb2R1bGUxIiwiY29sb3JNb2R1bGUxIiwiYXZhdGFyTW9kdWxlMSIsInVzZXJNb2R1bGUxIiwiYXZhdGFyVVJMIiwiZ2V0QXZhdGFyVVJMIiwidGltZXN0YW1wQ2xhc3MiLCJpbWFnZXMiLCJhc3NldHNMYXJnZUltYWdlVXNlclBvcG91dCIsImFzc2V0c0xhcmdlTWFza1VzZXJQb3BvdXQiLCJhc3NldHNTbWFsbEltYWdlVXNlclBvcG91dCIsImhlYWRlclBsYXlpbmciLCJqdXN0aWZ5Q2VudGVyIiwiYWxpZ25DZW50ZXIiLCJub1dyYXAiLCJoZWFkZXJUb3AiLCJhdmF0YXJXcmFwcGVyTm9ybWFsIiwiYXZhdGFySGludCIsImF2YXRhckhpbnRJbm5lciIsIlZJRVdfUFJPRklMRSIsImhlYWRlclRleHQiLCJob3Jpem9udGFsIiwianVzdGlmeVN0YXJ0IiwiaGVhZGVyVGFnTm9OaWNrbmFtZSIsIm5hbWVUYWciLCJoZWFkZXJUYWdVc2VybmFtZU5vTmlja25hbWUiLCJoZWFkZXJUZXh0Tm9ybWFsIiwiVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlORyIsImJvZHlOb3JtYWwiLCJjb250ZW50SW1hZ2VzVXNlclBvcG91dCIsImNvbnRlbnROb0ltYWdlc1VzZXJQb3BvdXQiLCJuYW1lTm9ybWFsIiwiYWN0aXZpdHlOYW1lIiwidGltZUNvbXBvbmVudCIsInRpbWVzdGFtcFJlbmRlciIsIlRpbWVzdGFtcCIsImVuZCIsInNjcm9sbGVyRmFkZSIsImJvZHlJbm5lciIsImJvZHlUaXRsZSIsIk5PVEUiLCJOT1RFX1BMQUNFSE9MREVSIiwicHJvdGlwIiwiUElOTkVEX01FU1NBR0VTX1BST19USVAiLCJ0aXAiLCJDT05URVhUX01FTlVfSElOVCIsIlN0YXR1c01vZHVsZXMiLCJTdGF0dXMiLCJnZXRQcmVzZW5jZSIsIlByb2ZpbGVNb2R1bGVzIiwidG9wU2VjdGlvblN0cmVhbWluZyIsImFjdGl2aXR5UHJvZmlsZSIsImFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlIiwiYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSIsImFzc2V0c1NtYWxsSW1hZ2VQcm9maWxlIiwidG9wU2VjdGlvblBsYXlpbmciLCJoZWFkZXJJbmZvIiwicHJvZmlsZUJhZGdlcyIsImhlYWRlckZpbGwiLCJjb250ZW50SW1hZ2VzUHJvZmlsZSIsInVzZXJJbmZvU2VjdGlvbiIsInVzZXJJbmZvU2VjdGlvbkhlYWRlciIsIkNvbm5lY3RlZEFjY291bnRzIiwiYWNjb3VudHMiLCJBY2NvdW50TW9kdWxlMSIsImdldEFjY291bnRzIiwiYWNjcyIsInZpc2liaWxpdHkiLCJhY2MiLCJjb25uZWN0ZWRBY2NvdW50cyIsIkNvbm5lY3RlZEFjY291bnQiLCJmbG93ZXJNb2R1bGUxIiwiYW5jaG9yTW9kdWxlMSIsIlNvY2lhbENvbnN0YW50cyIsImNvbnN0YW50c1NvY2lhbCIsImNvbm5lY3RlZEFjY291bnQiLCJjb25uZWN0ZWRBY2NvdW50SWNvbiIsIndoaXRlIiwiZ3JleSIsImNvbm5lY3RlZEFjY291bnROYW1lSW5uZXIiLCJjb25uZWN0ZWRBY2NvdW50TmFtZSIsImNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb24iLCJjb25uZWN0ZWRBY2NvdW50T3Blbkljb24iLCJCYWRnZXMiLCJyb290TW9kdWxlIiwiVXNlckZsYWdzIiwic2VyaWFsaXplZCIsImZsYWdOYW1lIiwiaGFzRmxhZyIsInNlYXJjaGFibGUiLCJCYWRnZSIsInByb2ZpbGVCYWRnZVdyYXBwZXIiLCJwcm9maWxlQmFkZ2UiLCJWMkNfTGF5ZXIiLCJrZXl1cExpc3RlbmVyIiwidHJhbnNmb3JtIiwiY29tcG9uZW50V2lsbE1vdW50IiwiY2hhbmdlQ2F0ZWdvcnkiLCJzZWFyY2hLZXlEb3duIiwiY2hlY2tDb25uZWN0aW9uIiwiY29ubmVjdCIsIkd1aWxkU3RvcmUiLCJBdmF0YXJEZWZhdWx0cyIsIlNvcnRlZEd1aWxkU3RvcmUiLCJzZWxlY3RlZENhdGVnb3J5IiwibG9hZGluZyIsInNlcnZlcnMiLCJjb25uZWN0aW9uIiwiZmV0Y2giLCJzZXJ2ZXIiLCJqb2luZWQiLCJ0ZXJtIiwiY2F0ZWdvcnlCdXR0b25zIiwidG90YWwiLCJzYnYiLCJjb250ZW50U2Nyb2xsZXIiLCJzZXJ2ZXJDYXJkIiwicGlubmVkIiwiYWNjZXB0SW52aXRlIiwiaW52aXRlX2NvZGUiLCJqb2luRW5kUG9pbnQiLCJpZGVudGlmaWVyIiwiY3JlZGVudGlhbHMiLCJ3aW5kb3dPcHRpb25zIiwic2NyZWVuWCIsInNjcmVlblkiLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInJlc2l6YWJsZSIsIm1heGltaXphYmxlIiwibWluaW1pemFibGUiLCJhbHdheXNPblRvcCIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJvbmxpbmUiLCJtZW1iZXJzIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJzZXJ2ZXIyIiwiZ3VpbGRMaXN0IiwiZ2V0RmxhdHRlbmVkR3VpbGRJZHMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsIlNlcnZlckNhcmQiLCJmYWxsYmFjayIsImZsb29yIiwiY29ubmVjdEVuZFBvaW50IiwiU2lkZWJhclZpZXciLCJ0b29scyIsIlRvb2xzIiwiVGFiQmFyU2VwYXJhdG9yIiwic2VhcmNoSW5wdXQiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXJJdGVtIiwibWF4TGVuZ3RoIiwic2VhcmNoaW5wdXQiLCJub3RDb25uZWN0ZWQiLCJjb2x1bW5Nb2R1bGUiLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiVjJDX1NlcnZlckNhcmQiLCJpbWFnZUVycm9yIiwiY2FyZE1vZHVsZSIsImNhcmQiLCJjYXJkUHJpbWFyeSIsIl9ob3Jpem9udGFsUmV2ZXJzZSIsIndyYXBNb2R1bGUiLCJzdHJlYW1lck1vZGVFbmFibGVkIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiZHJhZ2dhYmxlIiwiVjJDX1NpZGViYXJWaWV3IiwiU2Nyb2xsZXIiLCJmYWRlIiwiZGFyayIsIlYyQ19SZWxvYWRJY29uIiwieG1sbnMiLCJWMkNfU2Nyb2xsZXIiLCJzY3JvbGxlckhvcml6b250YWwiLCJzY3JvbGxlck1vZHVsZTIiLCJzaWRlYmFyUmVnaW9uU2Nyb2xsZXIiLCJ3cmFwcGVyQ2xhc3MiLCJzY3JvbGxlckNsYXNzIiwiY29udGVudFJlZ2lvblNjcm9sbGVyIiwiY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcCIsInRoZW1lR2hvc3QiLCJzY3JvbGxlclRyYWNrIiwiVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwiLCJTZXR0aW5nc0dyb3VwIiwiVjJDX1NldHRpbmdzR3JvdXAiLCJidXR0b25Db21wb25lbnQiLCJWMkNfU2V0dGluZ3NUaXRsZSIsIlN3aXRjaEl0ZW0iLCJWMkNfVGFiQmFySGVhZGVyIiwiVjJDX1RhYkJhckl0ZW0iLCJWMkNfVGFiQmFyU2VwYXJhdG9yIiwiaW50ZXJ2YWxNb2R1bGUxIiwiSW50ZXJ2YWwiLCJUaW1lUmVuZGVyIiwiX2ludGVydmFsIiwiZ2V0VXBkYXRlZFRpbWUiLCJnZXREaWZmIiwiY2hlY2tVbml4IiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsInJlbmRlclRpbWUiLCJudW1iZXIiLCJyZW1vdmVaZXJvIiwidXNlZFByb3BzIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfRU5EIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfU1RBUlQiLCJWMkNfVG9vbHMiLCJ0b29sc01vZHVsZSIsInRvb2xzQ29udGFpbmVyIiwiY29udGFpbmVyTW9kdWxlIiwiY2xvc2VCdXR0b24iLCJjbG9zZUJ1dHRvbkJvbGQiLCJrZXliaW5kIiwia2V5YmluZEJvbGQiLCJUb29sdGlwQ2xhc3NlcyIsImdldFRvb2x0aXBDbGFzc2VzIiwiVG9vbHRpcExheWVycyIsImdldFRvb2x0aXBMYXllcnMiLCJnZXRDbGFzcyIsInNpZGVPckNvbG9yIiwidXBwZXJDYXNlIiwidG9vbHRpcENsYXNzIiwiY2xhc3NFeGlzdHMiLCJ0b1B4IiwiRW11bGF0ZWRUb29sdGlwIiwicHJldmVudEZsaXAiLCJ0b29sdGlwRWxlbWVudCIsInRvb2x0aXAiLCJsYWJlbEVsZW1lbnQiLCJ0b29sdGlwQ29udGVudCIsInBvaW50ZXJFbGVtZW50IiwidG9vbHRpcFBvaW50ZXIiLCJwb3BvdXRzIiwiY2FuU2hvd0Fib3ZlIiwiY2FuU2hvd0JlbG93IiwiY2FuU2hvd0xlZnQiLCJjYW5TaG93UmlnaHQiLCJfY2xhc3NOYW1lIiwic2hvd0Fib3ZlIiwic2hvd0JlbG93Iiwic2hvd0xlZnQiLCJzaG93UmlnaHQiLCJjZW50ZXJIb3Jpem9udGFsbHkiLCJjZW50ZXJWZXJ0aWNhbGx5Iiwibm9kZWNlbnRlciIsImZpbmRET01Ob2RlIiwiVjJDX1hTdmciXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9E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dCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcblxyXG4vLyB2YXIgc2V0dGluZ3NQYW5lbCwgdm9pY2VNb2RlLCBwbHVnaW5Nb2R1bGUsIHRoZW1lTW9kdWxlLCBkTW9kZSwgcHVibGljU2VydmVyc01vZHVsZSwgbWFpbkNvcmUsIEJEVjI7XHJcbmV4cG9ydCBjb25zdCBtaW5pbXVtRGlzY29yZFZlcnNpb24gPSBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBtaW5TdXBwb3J0ZWRWZXJzaW9uID0gXCIwLjMuMFwiO1xyXG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjRcIjtcclxuZXhwb3J0IGNvbnN0IExDQ2hhbmVsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJMaWdodGNvcmQncyBjaGFuZ2Vsb2dcIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCBpcyBub3cgYXZhaWxhYmxlICFcIixcclxuICAgICAgICAgICAgICAgIFwiV2UgcmVtb3ZlZCBlbW90ZXMuIFRoYXQncyBzYWQgZm9yIHBlb3BsZSB3aG8gd2VyZSBhY3R1YWxseSB1c2luZyBpdCwgYnV0IGl0IHdhcyBsZWFkaW5nIHRvIG1vcmUgbG9hZGluZyB0aW1lIGFuZCBzb21lIGJhc2ljIHdvcmRzIHdlcmUgZW1vdGUuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBpbWFnZTogXCJodHRwczovL2kuaW1ndXIuY29tL3NmTmhxd1AucG5nXCIsXHJcbiAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcclxuICAgIHN1YnRpdGxlOiBcInZcIityZW1vdGUuZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb24sXHJcbiAgICBmb290ZXI6IChmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGlmKCFUZXh0RWxlbWVudCB8fCAhTW9kYWxTdGFjaylyZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBCRFYyLmpvaW5MQygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0RWxlbWVudCwge3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICB9KSgpXHJcbn1cclxuZXhwb3J0IGNvbnN0IGJiZENoYW5nZWxvZyA9IHtcclxuICAgIGRlc2NyaXB0aW9uOiBcIkJCRCdzIGNoYW5nZWxvZy5cIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIioqTGlnaHRjb3JkKiogaXMgbm93IHVzaW5nIEJhbmRhZ2VkQkQuIFRoYXQgbWVhbnMgYWxsIHBsdWdpbnMgeW91IHdlcmUgdXNpbmcgY2FuIGJlIHVzZWQgdG9vICFcIixcclxuICAgICAgICAgICAgICAgIFwiKipXaW5kb3cgVHJhbnNwYXJlbmN5KiogY2hhbmdlcyB3ZXJlIG1hZGUgdG8gbW9yZSBjb21wYXRpYmxlIHdpdGggZXh0ZXJuYWwgd2luZG93IG1hbmFnZXJzIGFuZCBhZGRvbnMgbGlrZSBHbGFzc2NvcmQuXCIsXHJcbiAgICAgICAgICAgICAgICBcIkluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGhhcyBvbmNlIGFnYWluIGJlZW4gY2hhbmdlZCBzbGlnaHRseSB0byBob3BlZnVsbHkgaW1wcm92ZSBsb2FkaW5nIHRpbWVzLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICBdXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XHJcbiAgICBcIkN1c3RvbSBjc3MgbGl2ZSB1cGRhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTBcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXHJcbiAgICBcIkN1c3RvbSBjc3MgYXV0byB1ZHBhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTFcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXHJcbiAgICBcIkJldHRlckRpc2NvcmQgQmx1ZVwiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtYlwiLCAgaW5mbzogXCJSZXBsYWNlIERpc2NvcmQgYmx1ZSB3aXRoIEJEIEJsdWVcIiwgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiBmYWxzZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCJ9LFxyXG5cclxuICAgIC8qIENvcmUgKi9cclxuICAgIC8qID09PT09PSAqL1xyXG4gICAgXCJQdWJsaWMgU2VydmVyc1wiOiAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTFcIiwgIGluZm86IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIk1pbmltYWwgTW9kZVwiOiAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMlwiLCAgaW5mbzogXCJIaWRlIGVsZW1lbnRzIGFuZCByZWR1Y2UgdGhlIHNpemUgb2YgZWxlbWVudHMuXCIsICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiVm9pY2UgTW9kZVwiOiAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy00XCIsICBpbmZvOiBcIk9ubHkgc2hvdyB2b2ljZSBjaGF0XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJIaWRlIENoYW5uZWxzXCI6ICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTNcIiwgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkRhcmsgTW9kZVwiOiAgICAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtNVwiLCAgaW5mbzogXCJNYWtlIGNlcnRhaW4gZWxlbWVudHMgZGFyayBieSBkZWZhdWx0KHdpcClcIiwgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiVm9pY2UgRGlzY29ubmVjdFwiOiAgICAgICAgICAge2lkOiBcImJkYS1kYy0wXCIsICBpbmZvOiBcIkRpc2Nvbm5lY3QgZnJvbSB2b2ljZSBzZXJ2ZXIgd2hlbiBjbG9zaW5nIERpc2NvcmRcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCIyNCBIb3VyIFRpbWVzdGFtcHNcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLTZcIiwgIGluZm86IFwiUmVwbGFjZSAxMmhyIHRpbWVzdGFtcHMgd2l0aCBwcm9wZXIgb25lc1wiLCAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkNvbG9yZWQgVGV4dFwiOiAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtN1wiLCAgaW5mbzogXCJNYWtlIHRleHQgY29sb3IgdGhlIHNhbWUgYXMgcm9sZSBjb2xvclwiLCAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTm9ybWFsaXplIENsYXNzZXNcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNFwiLCBpbmZvOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuXHJcbiAgICAvKiBDb250ZW50ICovXHJcbiAgICBcIkNvbnRlbnQgRXJyb3IgTW9kYWxcIjogICAgICAgIHtpZDogXCJmb3JrLXBzLTFcIiwgaW5mbzogXCJTaG93cyBhIG1vZGFsIHdpdGggcGx1Z2luL3RoZW1lIGVycm9yc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2NhbiBQbHVnaW5zXCI6ICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtNlwiLCBpbmZvOiBcIlNjYW4gcGx1Z2lucyBmb3IgYW55IHRocmVhdCB0aGF0IGNhbiBiZSBoaWRkZW4gaW5zaWRlLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjcm9sbCBUbyBTZXR0aW5nc1wiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTNcIiwgaW5mbzogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkF1dG9tYXRpYyBMb2FkaW5nXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTVcIiwgaW5mbzogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcblxyXG4gICAgLyogRGV2ZWxvcGVyICovXHJcbiAgICBcIkRldmVsb3BlciBNb2RlXCI6ICAgICAgICAgXHQgIHtpZDogXCJiZGEtZ3MtOFwiLCBpbmZvOiBcIkRldmVsb3BlciBNb2RlIFRvZ2dsZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJSZWFjdCBEZXZUb29sc1wiOlx0XHRcdCAge2lkOiBcInJlYWN0RGV2VG9vbHNcIiwgaW5mbzogXCJBZGRzIHJlYWN0IGRldmVsb3BlciB0b29scyB0byB0aGUgZGV2dG9vbHMuIE11c3QgYmUgaW5zdGFsbGVkIGluIEdvb2dsZSBDaHJvbWUgb24geW91ciBwYy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiAgICAgIHtpZDogXCJiZC1kaXNhYmxlXCIsICBpbmZvOiBcIkRpc2FibGUgQmV0dGVyZGlzY29yZCAocGx1Z2lucywgdGhlbWVzLCBldGMpIChOb3QgaW1wbGVtZW50ZWQpLlwiLCBpbXBsZW1lbnRlZDogZmFsc2UsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJCbHVyIFBlcnNvbm5hbCBJbmZvcm1hdGlvbnNcIjp7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTJcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzIHNwZWNpYWwgY2FsbGluZyBiZWF0LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRldmVsb3BlciBPcHRpb25zXCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMVwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgJiBMaWdodGNvcmQncyBJbnRlcm5hbCBEZXZlbG9wZXIgT3B0aW9ucy4gVGhpcyBhbGxvdyB0aGUgXFxcIkV4cGVyaW1lbnRzXFxcIiB0YWIsIHRoZSBcXFwiRGV2ZWxvcGVyIE9wdGlvbnNcXFwiIHRhYiBhbmQgdGhlIFxcXCJBcGkgQ29tcG9uZW50c1xcXCIgdGFiLiAobXVzdCByZW9wZW4gc2V0dGluZ3MpXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQWQgQmxvY2tcIjogICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC00XCIsIGluZm86IFwiQmxvY2sgYW55IEJPVCB0aGF0IGRtcyB5b3Ugd2l0aCBhbiBpbnZpdGUgbGluay4gRXZlbiBpbiBhbiBlbWJlZC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJFbmFibGUgTGlnaHRjb3JkIFNlcnZlcnNcIjogICB7aWQ6IFwibGlnaHRjb3JkLTVcIiwgaW5mbzogXCJFbmFibGUgTGlnaHRjb3JkJ3Mgc2VydmVycy4gRGlzYWJsaW5nIHRoaXMgd2lsbCBkaXNhYmxlIGN1c3RvbSBiYWRnZXMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRGlzYWJsZSB0eXBpbmdcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC03XCIsIGluZm86IFwiRG9uJ3QgbGV0IG90aGVyIHNlZSB5b3UncmUgdHlwaW5nLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cclxuICAgIFwiQWx3YXlzLW9uLVRvcFwiOiAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0zXCIsIGluZm86IFwiRW5hYmxlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFxyXG4gICAgLyoqIFJpY2hQcmVzZW5jZSAqL1xyXG4gICAgXCJFbmFibGVcIjogICAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIiwgaW5mbzogXCJFbmFibGUgUmljaFByZXNlbmNlIGJlbG93LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcInN0YXR1c1wifVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb29raWUgPSB7XHJcbiAgICBcImJkYS1ncy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy0yXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtM1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy01XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy02XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtN1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTBcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTFcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTJcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy02XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy03XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy1iXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZGMtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtY3NzLTFcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy05XCI6IHRydWUsXHJcbiAgICBcImZvcmstZG0tMVwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1wcy0xXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtMlwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy00XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTZcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1lcy0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXdwLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstYmV0YVwiOiB0cnVlLFxyXG4gICAgXCJyZWFjdERldlRvb2xzXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTJcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNFwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTdcIjogZmFsc2UsXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XHJcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcclxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcclxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXHJcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXHJcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcclxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXHJcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xyXG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblxyXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcclxuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcclxuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XHJcbmxvY2FsU3RvcmFnZUZpeCgpO1xyXG5sb2FkaW5nSWNvbigpO1xyXG5cclxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcclxuICAgIC8vIHZhbHVlID0gdHlwZW9mKHZhbHVlKSAhPT0gXCJvYmplY3RcIiA/IHZhbHVlIDogbmV3IFByb3h5KHZhbHVlLCB7XHJcbiAgICAvLyAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gb2JqW21vZF07XHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIFV0aWxzLmVycihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIFwiVHJ5aW5nIHRvIG92ZXJ3cml0ZSBkZXByZWNhdGVkIEJEIGdsb2JhbHNcIik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBrZXksIHtcclxuICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTsgIFxyXG59O1xyXG5cclxuXHJcbmltcG9ydCAqIGFzIEdsb2JhbHMgZnJvbSBcIi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcclxuZm9yIChjb25zdCBrZXkgb2YgZ2xvYmFsS2V5cykgZGVwcmVjYXRlR2xvYmFsKGtleSwgR2xvYmFsc1trZXldKTtcclxuXHJcblxyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9tb2R1bGVzL2NsYXNzTm9ybWFsaXplclwiO1xyXG5cclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwicGx1Z2luTW9kdWxlXCIsIHBsdWdpbk1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInRoZW1lTW9kdWxlXCIsIHRoZW1lTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJCREV2ZW50c1wiLCBCREV2ZW50cyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInNldHRpbmdzUGFuZWxcIiwgc2V0dGluZ3NQYW5lbCk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDb250ZW50TWFuYWdlclwiLCBDb250ZW50TWFuYWdlcik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNsYXNzTm9ybWFsaXplclwiLCBDbGFzc05vcm1hbGl6ZXIpO1xyXG5cclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcblxyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgQ29yZSk7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgLy8gZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgdGhpcy5tYWluQ29yZSk7XHJcbiAgICAgICAgQ29yZS5pbml0KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIGZ1bmN0aW9uIHBhdGNoTW9kdWxlTG9hZCgpIHtcclxuLy8gICAgIGNvbnN0IG5hbWVzcGFjZSA9IFwiYmV0dGVyZGlzY29yZFwiO1xyXG4vLyAgICAgY29uc3QgcHJlZml4ID0gYCR7bmFtZXNwYWNlfS9gO1xyXG4vLyAgICAgY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKTtcclxuLy8gICAgIGNvbnN0IGxvYWQgPSBNb2R1bGUuX2xvYWQ7XHJcbi8vICAgICAvLyBjb25zdCByZXNvbHZlRmlsZW5hbWUgPSBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZTtcclxuXHJcbi8vICAgICBNb2R1bGUuX2xvYWQgPSBmdW5jdGlvbihyZXF1ZXN0KSB7XHJcbi8vICAgICAgICAgaWYgKHJlcXVlc3QgPT09IG5hbWVzcGFjZSB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4vLyAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ZWQgPSByZXF1ZXN0LnN1YnN0cihwcmVmaXgubGVuZ3RoKTtcclxuLy8gICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA9PSBcImFwaVwiKSByZXR1cm4gQmRBcGk7XHJcbi8vICAgICAgICAgfVxyXG5cclxuLy8gICAgICAgICByZXR1cm4gbG9hZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgfTtcclxuXHJcbi8vICAgICAvLyBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZSA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBwYXJlbnQsIGlzTWFpbikge1xyXG4vLyAgICAgLy8gICAgIGlmIChyZXF1ZXN0ID09PSBcImJldHRlcmRpc2NvcmRcIiB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgoXCJiZXR0ZXJkaXNjb3JkL1wiKSkge1xyXG4vLyAgICAgLy8gICAgICAgICBjb25zdCBjb250ZW50UGF0aCA9IFBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luUGF0aEJ5TW9kdWxlKHBhcmVudCk7XHJcbi8vICAgICAvLyAgICAgICAgIGlmIChjb250ZW50UGF0aCkgcmV0dXJuIHJlcXVlc3Q7XHJcbi8vICAgICAvLyAgICAgfVxyXG5cclxuLy8gICAgIC8vICAgICByZXR1cm4gcmVzb2x2ZUZpbGVuYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbi8vICAgICAvLyB9O1xyXG5cclxuLy8gICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuLy8gICAgICAgICBNb2R1bGUuX2xvYWQgPSBsb2FkO1xyXG4vLyAgICAgfTtcclxuLy8gfVxyXG5cclxuLy8gcGF0Y2hNb2R1bGVMb2FkKCk7XHJcblxyXG4vLyB2YXIgc2V0dGluZ3NQYW5lbCwgdm9pY2VNb2RlLCwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGU7XHJcbi8vIHZhciBiZENvbmZpZyA9IG51bGw7XHJcblxyXG5yZXF1aXJlKFwicmVxdWVzdFwiKS8vIGp1c3QgaW4gY2FjaGUgc28gcGx1Z2luIGNhbiByZXF1aXJlIGl0IHRvbyIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHYyTG9hZGVyLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxuICAgIHYyTG9hZGVyLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xyXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgY29udGVudFdpbmRvd0dldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIikuZ2V0O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IFJlZmxlY3QuYXBwbHkoY29udGVudFdpbmRvd0dldHRlciwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWwuYmluZChvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdCwgXCJhcHBseVwiLCB7dmFsdWU6IFJlZmxlY3QuYXBwbHksIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgXCJiaW5kXCIsIHt2YWx1ZTogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG5cclxuICAgIGNvbnN0IG9PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47XHJcbiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICBpZiAodXJsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkvd2ViaG9va3NcIikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG9PcGVuLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBURkhvdXIge1xyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvbXBhY3QgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyID0gKCkgPT4ge2NhbmNlbENvenkoKTsgY2FuY2VsQ29tcGFjdCgpO307IC8vIENhbmNlbCBib3RoXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlMjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbCAmJiBlLmRlZmF1bHQuaGFzQ2hhbm5lbClbMF0uZGVmYXVsdFxyXG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG5sZXQgRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG5cclxuY29uc3QgYmxvY2tlZCA9IHt9XHJcblxyXG5sZXQgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xyXG4gICAgaWYodXNlck1vZHVsZSlyZXR1cm4gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBBbnRpQm90RE0ge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmFudGlETSA9IHRoaXMuYW50aURNLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci51bnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGFudGlETShldil7XHJcbiAgICAgICAgaWYoIWV2Lm1lc3NhZ2UuYXV0aG9yLmJvdClyZXR1cm5cclxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcclxuICAgICAgICBpZihldi5tZXNzYWdlLmd1aWxkX2lkKXJldHVyblxyXG5cclxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcclxuICAgICAgICBpZighY2hhbm5lbClyZXR1cm4gLy8gbWlnaHQgYmUgYnJva2VuXHJcblxyXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cclxuXHJcbiAgICAgICAgaWYoYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0pcmV0dXJuIC8vIElmIHRoZSB1c2VyIHVuYmxvY2sgdGhlIGJvdCwgRG9uJ3QgYmxvY2sgaXQgYWdhaW4uXHJcblxyXG4gICAgICAgIGlmKHNjYW5NZXNzYWdlKGV2Lm1lc3NhZ2UpKXtcclxuICAgICAgICAgICAgYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0gPSB0cnVlXHJcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ3YXJuaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbiAgICAgICAgICAgIHJlbGF0aW9uU2hpcE1vZHVsZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcChldi5tZXNzYWdlLmF1dGhvci5pZCwge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwiQ29udGV4dE1lbnVcIlxyXG4gICAgICAgICAgICB9LCAyKVxyXG4gICAgICAgICAgICBpZighRE1Nb2R1bGUpRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG4gICAgICAgICAgICBETU1vZHVsZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwoY2hhbm5lbC5pZCwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzY2FuTWVzc2FnZShtZXNzYWdlKXtcclxuICAgIGlmKC8oZGlzY29yZFxcLmdnfGRpc2NvcmRcXC5jb21cXC9pbnZpdGVcXC98ZGlzY29yZGFwcFxcLmNvbVxcL2ludml0ZVxcLykvZy50ZXN0KG1lc3NhZ2UuY29udGVudCkpcmV0dXJuIHRydWVcclxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG59XHJcbmZ1bmN0aW9uIEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIHNlYXJjaCl7XHJcbiAgICBsZXQgZW1iZWRzID0gbWVzc2FnZS5lbWJlZHNcclxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gZW1iZWRzLm1hcChlbWJlZCA9PiB7XHJcbiAgICAgICAgaWYoZW1iZWQudHlwZSAhPT0gXCJyaWNoXCIpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZGVzY3JpcHRpb24gfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKCgoZW1iZWQuZm9vdGVyIHx8IFwiXCIpICYmIGVtYmVkLmZvb3Rlci50ZXh0IHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZihlbWJlZC5maWVsZHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZS52YWx1ZS5pbmNsdWRlcyhzZWFyY2gpIHx8IGUubmFtZS5pbmNsdWRlcyhzZWFyY2gpXHJcbiAgICAgICAgfSkuaW5jbHVkZXModHJ1ZSkpcmV0dXJuIHRydWVcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9KS5pbmNsdWRlcyh0cnVlKVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc1JQQywgZGVmYXVsdFJQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gQkRNb2R1bGVzLmdldChtPT5tLkRpc3BhdGNoZXImJm0uZGVmYXVsdCYmbS5kZWZhdWx0LmRpc3BhdGNoKVswXS5kZWZhdWx0XHJcbmNvbnN0IEFjdGlvblR5cGVzID0gQkRNb2R1bGVzLmdldChtPT5tLkFjdGlvblR5cGVzKVswXS5BY3Rpb25UeXBlc1xyXG5cclxuY29uc3Qgc29ja2V0SWQgPSBcImxpZ2h0Y29yZC1zcG9vZi1zb2NrZXRcIlxyXG5jb25zdCBwaWQgPSBwcm9jZXNzLnBpZFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEN1c3RvbVJpY2hQcmVzZW5jZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IHNldHRpbmdzUlBDXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBmb3JtYXRlZEdhbWUoKXtcclxuICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkID09PSBmYWxzZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGxldCBnYW1lID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcclxuICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgIH1cclxuXHJcbiAgICBzZW5kR2FtZSgpe1xyXG4gICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0NBTF9BQ1RJVklUWV9VUERBVEUsXHJcbiAgICAgICAgICAgIHNvY2tldElkLFxyXG4gICAgICAgICAgICBwaWQsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiB0aGlzLmZvcm1hdGVkR2FtZVxyXG4gICAgICAgIH0pICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCkge1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFbmFibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0KHNldHRpbmdzUlBDIHx8IE9iamVjdC5jcmVhdGUoZGVmYXVsdFJQQykpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGlzYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmV0Y2hBc3NldHMoYXBwbGljYXRpb25JZCl7XHJcbiAgICAgICAgbGV0IGFzc2V0cyA9IGF3YWl0IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEFzc2V0cylbMF0uZ2V0QXNzZXRzKGFwcGxpY2F0aW9uSWQpXHJcbiAgICAgICAgaWYoYXNzZXRzLnVuZGVmaW5lZCAmJiB0eXBlb2YgYXNzZXRzLnVuZGVmaW5lZCA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQXBwbGljYXRpb25cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0c1xyXG4gICAgfVxyXG5cclxuICAgIHNldChhY3Rpdml0eSl7XHJcbiAgICAgICAgdGhpcy5nYW1lID0gYWN0aXZpdHlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3BsdWdpbkNvb2tpZSwgdGhlbWVDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBtYWluQ29yZSBmcm9tIFwiLi9jb3JlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBCZEFwaSA9IHtcclxuICAgIGdldCBSZWFjdCgpIHsgcmV0dXJuIEJEVjIuUmVhY3Q7IH0sXHJcbiAgICBnZXQgUmVhY3RET00oKSB7IHJldHVybiBCRFYyLlJlYWN0RG9tOyB9LFxyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiBCRFYyLlJlYWN0Q29tcG9uZW50O30sXHJcbiAgICBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtyZXR1cm4gVXRpbHMuV2luZG93Q29uZmlnRmlsZTt9LFxyXG4gICAgZ2V0IHNldHRpbmdzKCkge3JldHVybiBzZXR0aW5nczt9LFxyXG4gICAgZ2V0IGVtb3RlcygpIHtyZXR1cm4ge319LCAvLyBkZXByZWNhdGVkLCBkZWxldGVkIGFsbCBlbW90ZXMgZnJvbSBiZXR0ZXJkaXNjb3JkLlxyXG4gICAgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfSxcclxuICAgIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxufTtcclxuXHJcbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRXaW5kb3dQcmVmZXJlbmNlKGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkuaW5qZWN0Q1NTID0gZnVuY3Rpb24gKGlkLCBjc3MpIHtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQoaWQpLCBjc3MpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLmNsZWFyQ1NTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIERPTS5hZGRTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NLnJlbW92ZVNjcmlwdChET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vR2V0IGFub3RoZXIgcGx1Z2luXHJcbi8vbmFtZSA9IG5hbWUgb2YgcGx1Z2luXHJcbkJkQXBpLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBpZiAoYmRwbHVnaW5zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGJkcGx1Z2luc1tuYW1lXS5wbHVnaW47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbi8vR2V0IEJldHRlckRpc2NvcmQgQ29yZVxyXG5CZEFwaS5nZXRDb3JlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgVXRpbHMud2FybihcIkRlcHJlY2F0aW9uIE5vdGljZVwiLCBgQmRBcGkuZ2V0Q29yZSgpIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuYCk7XHJcbiAgICByZXR1cm4gbWFpbkNvcmU7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBtb2RhbC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxyXG4gKi9cclxuQmRBcGkuYWxlcnQgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIHtjYW5jZWxUZXh0OiBudWxsfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcclxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICovXHJcbkJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vU2hvdyB0b2FzdCBhbGVydFxyXG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIFV0aWxzLnNob3dUb2FzdChjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRBbGwoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKHByb3BzKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3RvdHlwZXMgPSBmdW5jdGlvbiguLi5wcm90b3MpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3RvdHlwZXMocHJvdG9zKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeURpc3BsYXlOYW1lID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUobmFtZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIHJlYWN0IGluc3RhbmNlXHJcbkJkQXBpLmdldEludGVybmFsSW5zdGFuY2UgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2Ygd2luZG93LmpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgbm9kZSA9IG5vZGVbMF07XHJcbiAgICByZXR1cm4gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKG5vZGUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmxvYWREYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXREYXRhID0gQmRBcGkuc2F2ZURhdGE7XHJcblxyXG4vLyBEZWxldGVzIGRhdGFcclxuQmRBcGkuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5kZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG4vLyBQYXRjaGVzIG90aGVyIGZ1bmN0aW9uc1xyXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBVdGlscy5tb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXHJcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gVXRpbHMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcclxufTtcclxuXHJcbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcclxuQmRBcGkuc3VwcHJlc3NFcnJvcnMgPSBmdW5jdGlvbihtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBVdGlscy5zdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpO1xyXG59O1xyXG5cclxuLy8gVGVzdHMgZm9yIHZhbGlkIEpTT05cclxuQmRBcGkudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICByZXR1cm4gVXRpbHMudGVzdEpTT04oZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gISFwbHVnaW5Db29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1RoZW1lRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXRoZW1lQ29va2llW25hbWVdO1xyXG59O1xyXG5cclxuQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gISFzZXR0aW5nc0Nvb2tpZVtpZF07XHJcbn07XHJcblxyXG5CZEFwaS5lbmFibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCB0cnVlKTtcclxufTtcclxuXHJcbkJkQXBpLmRpc2FibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XHJcbn07XHJcblxyXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCAhc2V0dGluZ3NDb29raWVbaWRdKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuXHJcblxyXG5jb25zdCBtYWtlQWRkb25BUEkgPSAoY29va2llLCBsaXN0LCBtYW5hZ2VyKSA9PiBuZXcgY2xhc3MgQWRkb25BUEkge1xyXG5cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIG1hbmFnZXIuZm9sZGVyO31cclxuXHJcbiAgICBpc0VuYWJsZWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhIWNvb2tpZVtuYW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5kaXNhYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZShuYW1lKSB7XHJcbiAgICAgICAgaWYgKGNvb2tpZVtuYW1lXSkgdGhpcy5kaXNhYmxlKG5hbWUpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5lbmFibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5yZWxvYWQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KG5hbWUpIHtcclxuICAgICAgICBpZiAobGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtuYW1lXS5wbHVnaW4pIHJldHVybiBsaXN0W25hbWVdLnBsdWdpbjtcclxuICAgICAgICAgICAgcmV0dXJuIGxpc3RbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobGlzdCkubWFwKGsgPT4gdGhpcy5nZXQoaykpLmZpbHRlcihhID0+IGEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQmRBcGkuUGx1Z2lucyA9IG1ha2VBZGRvbkFQSShwbHVnaW5Db29raWUsIGJkcGx1Z2lucywgcGx1Z2luTW9kdWxlKTtcclxuQmRBcGkuVGhlbWVzID0gbWFrZUFkZG9uQVBJKHRoZW1lQ29va2llLCBiZHRoZW1lcywgdGhlbWVNb2R1bGUpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQmRBcGkgPSBCZEFwaSIsIi8qIEJERXZlbnRzICovXHJcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIik7XHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCREV2ZW50cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQkRFdmVudHMgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBkaXNwYXRjaChldmVudE5hbWUsIC4uLmFyZ3MpIHt0aGlzLmVtaXQoZXZlbnROYW1lLCAuLi5hcmdzKTt9XHJcbiAgICBvZmYoZXZlbnROYW1lLCBldmVudEFjdGlvbikge3RoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEFjdGlvbik7fVxyXG59OyIsIi8qKlxyXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xyXG4gKi9cclxuXHJcbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5sZXQgc2VsZWN0b3JzXHJcbmNvbnN0IHJlbW92ZURhID0gVXRpbHMucmVtb3ZlRGFcclxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCl7XHJcbiAgICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXHJcbiAgICBpZighc3RhbmRhcmRTaWRlYmFyVmlldylyZXR1cm4gbnVsbFxyXG4gICAgbGV0IGRlZmF1bHRDbGFzc05hbWUgPSByZW1vdmVEYShzdGFuZGFyZFNpZGViYXJWaWV3LnN0YW5kYXJkU2lkZWJhclZpZXcpXHJcbiAgICBsZXQgc2VsZWN0cyA9IFtdXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLnBheW1lbnQtaW5mbyAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZXNjcmlwdGlvbiAmJiB0eXBlb2YgZS5kZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIiAmJiBlLmRlc2NyaXB0aW9uLmluY2x1ZGVzKFwiZm9ybVRleHRcIikpWzBdLmRlc2NyaXB0aW9uKX1gKVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnBheW1lbnRTb3VyY2VSb3cpWzBdLnBheW1lbnRTb3VyY2VSb3cpfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdWJUZXh0ICYmIGUuZGVzY3JpcHRpb25XcmFwcGVyKVswXS5zdWJUZXh0KX1gKVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJTZXR0aW5nc0FjY291bnQpWzBdLnVzZXJTZXR0aW5nc0FjY291bnQpfSBkaXY6bnRoLWNoaWxkKDIpPmRpdjpudGgtY2hpbGQoMik+LiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUudmlld0JvZHkpWzBdLnZpZXdCb2R5KX1gKVxyXG4gICAgcmV0dXJuIHNlbGVjdHNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9ycyB8fCBnZXRTZWxlY3RvcnMoKVxyXG5cclxuICAgICAgICBpZighc2VsZWN0b3JzKWNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzZWxlY3RvcnMgdG8gYmx1ciBwZXJzb25uYWwgaW5mb3JtYXRpb25zLlwiKSlcclxuICAgICAgICBET01Ub29scy5hZGRTdHlsZShcImJsdXJQcml2YXRlXCIsIGBcclxuJHtzZWxlY3RvcnNbMF19LCAke3NlbGVjdG9yc1sxXX0sICR7c2VsZWN0b3JzWzJdfSB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDg1LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBibHVyKDRweCk7XHJcbiAgICBvcGFjaXR5OiAuODtcclxufVxyXG5cclxuJHtzZWxlY3RvcnNbMF19OmhvdmVyLCAke3NlbGVjdG9yc1sxXX06aG92ZXIsICR7c2VsZWN0b3JzWzJdfTpob3ZlciB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDksLjY4LC41Myk7XHJcbiAgICBmaWx0ZXI6IG5vbmU7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG59YClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIilcclxuICAgIH1cclxufSIsImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcclxuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJERXZlbnRzID0gdGhpc1xyXG4gICAgfVxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLnJldmVydEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZElnbm9yZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoXCJweFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImNoXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiZW1cIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJsYXllckNvbnRhaW5lci1cIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCJjYWxjKFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcInJnYmFcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGVGaWx0ZXIobW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhtb2R1bGUpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2R1bGVbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zcGxpdChcIi1cIikubGVuZ3RoID09PSAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QodmFsdWUuc3BsaXQoXCIgXCIpWzBdKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBub3JtYWxDbGFzcy5tYXRjaChyYW5kQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaFsxXS5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaERPTU1ldGhvZHMoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbnMgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICAvLyBjb25zdCB0b2tlbnMgPSB0b2tlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbnRhaW5zLCB0aGlzLCBbdG9rZW4uc3BsaXQoXCIgXCIpWzBdXSk7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0b2tlbnMuZXZlcnkodCA9PiBjb250YWlucy5jYWxsKHRoaXMsIHQpKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBhZGQgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZDtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhZGQsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocmVtb3ZlLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCB7XHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxDb2xvcmVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ29sb3JlZFRleHQgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50ID0gcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZUNvbnRlbnQudHlwZSB8fCAhbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlIHx8IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5kaXNwbGF5TmFtZSAhPSBcIk1lc3NhZ2VDb250ZW50XCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlO1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxUeXBlLl9fb3JpZ2luYWxNZXRob2QpIHJldHVybjsgLy8gRG9uJ3QgcGF0Y2ggYWdhaW5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlID0gZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxUeXBlKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvbGVDb2xvciA9IHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0gPyBwcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nIHx8IFwiXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsVHlwZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtZXNzYWdlQ29udGVudC50eXBlLnR5cGUsIG9yaWdpbmFsVHlwZSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGxldCBjbGFzc05hbWVNYXJrdXAgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdLm1hcmt1cFxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIrY2xhc3NOYW1lTWFya3VwLnNwbGl0KFwiIFwiKVswXSkuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgZWxlbS5zdHlsZS5zZXRQcm9wZXJ0eShcImNvbG9yXCIsIFwiXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCB7YmRDb25maWcsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXHJcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBwbHVnaW5DZXJ0aWZpZXIsIHsgZW5jcnlwdFNldHRpbmdzQ2FjaGUsIGRlY3J5cHRTZXR0aW5nc0NhY2hlLCBwcm9jZXNzRmlsZSB9IGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xyXG5pbXBvcnQgeyBjYXB0dXJlUmVqZWN0aW9uU3ltYm9sIH0gZnJvbSBcImV2ZW50c1wiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XHJcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcC5nZXRBcHBQYXRoKCksIFwibm9kZV9tb2R1bGVzXCIpKTtcclxuY2xhc3MgTWV0YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTWV0YUVycm9yXCI7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb3JpZ2luYWxKU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl07XHJcbmNvbnN0IG9yaWdpbmFsQ1NTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPyBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdIDogKCkgPT4ge3JldHVybiBudWxsO307XHJcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj8oPzpcXHJcXG58XFxuKVteXFxTXFxyXFxuXSo/XFwqW15cXFNcXHJcXG5dPy87XHJcbmNvbnN0IGVzY2FwZWRBdFJlZ2V4ID0gL15cXFxcQC87XHJcblxyXG5leHBvcnQgbGV0IGFkZG9uQ2FjaGUgPSB7fVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnMgPSB7fTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwicGx1Z2luXCIpO1xyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwidGhlbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBsdWdpbnNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3BsdWdpbnNGb2xkZXIgfHwgKHRoaXMuX3BsdWdpbnNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJwbHVnaW5zL1wiKSkpO31cclxuICAgIGdldCB0aGVtZXNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3RoZW1lc0ZvbGRlciB8fCAodGhpcy5fdGhlbWVzRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwidGhlbWVzL1wiKSkpO31cclxuXHJcbiAgICBsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpICE9PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0gSlNPTi5wYXJzZShkZWNyeXB0U2V0dGluZ3NDYWNoZShkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpKSlcclxuICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IHt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYWRkb25DYWNoZSlcclxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgaWYoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlyZXR1cm4gZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG5cclxuICAgICAgICAgICAgbGV0IHByb3BzID0gW3tcclxuICAgICAgICAgICAgICAgIGtleTogXCJ0aW1lc3RhbXBcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcInJlc3VsdFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwiaGFzaFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIlxyXG4gICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIShwcm9wLmtleSBpbiB2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlW3Byb3Aua2V5XSAhPT0gcHJvcC50eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodmFsdWUuaGFzaCAhPT0ga2V5KXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnJlc3VsdC5zdXNwZWN0KXsgLy8gcmVmZXRjaCBmcm9tIHJlbW90ZSB0byBiZSBzdXJlIHlvdSdyZSB1cCB0byBkYXRlLlxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgfVxyXG5cclxuICAgIHNhdmVBZGRvbkNhY2hlKCl7XHJcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShKU09OLnN0cmluZ2lmeShhZGRvbkNhY2hlKSkpXHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSBjb250ZW50VHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdID0gZnMud2F0Y2goYmFzZUZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgcmV0dXJuIHBsdWdpbk1vZHVsZS51bmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZW1lTW9kdWxlLnVubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLnJlbG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLnJlbG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVud2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCByYXdNZXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xyXG4gICAgICAgIGlmIChtZXRhLmluZGV4T2YoXCJNRVRBXCIpIDwgMCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbHMudGVzdEpTT04ocmF3TWV0YSk7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xyXG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcclxuICAgICAgICBwYXJzZWQuZm9ybWF0ID0gXCJqc29uXCI7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICBvdXQuZm9ybWF0ID0gXCJqc2RvY1wiO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFJlcXVpcmUodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBpc1BsdWdpbiA/IG9yaWdpbmFsSlNSZXF1aXJlIDogb3JpZ2luYWxDU1NSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHNlbGYucGx1Z2luc0ZvbGRlciA6IHNlbGYudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgY29udGVudCA9IFV0aWxzLnN0cmlwQk9NKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcclxuICAgICAgICAgICAgaWYgKCFpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGEuZm9ybWF0ID09IFwianNvblwiKSBtZXRhLmNzcyA9IG1ldGEuY3NzLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEpLmpvaW4oXCJcXG5cIik7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gYG1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGEudHlwZSA9IG1vZHVsZS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFV0aWxzLndhcm4oXCJNb2R1bGUgTm90IEV4cG9ydGVkXCIsIGAke21ldGEubmFtZX0sIHBsZWFzZSBzdGFydCBzZXR0aW5nIG1vZHVsZS5leHBvcnRzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGxhY2Vob2xkZXJQbHVnaW4oZGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7cGx1Z2luOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICBnZXROYW1lOiAoKSA9PiB7cmV0dXJuIGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lO30sXHJcbiAgICAgICAgICAgICAgICBnZXRBdXRob3I6ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246ICgpID0+IHtyZXR1cm4gZGF0YS5tZXNzYWdlID8gZGF0YS5tZXNzYWdlIDogXCJUaGlzIHBsdWdpbiB3YXMgdW5hYmxlIHRvIGJlIGxvYWRlZC4gQ2hlY2sgdGhlIGF1dGhvcidzIHBhZ2UgZm9yIHVwZGF0ZXMuXCI7fSxcclxuICAgICAgICAgICAgICAgIGdldFZlcnNpb246ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgc291cmNlOiBkYXRhLnNvdXJjZSA/IGRhdGEuc291cmNlIDogXCJcIixcclxuICAgICAgICAgICAgd2Vic2l0ZTogZGF0YS53ZWJzaXRlID8gZGF0YS53ZWJzaXRlIDogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcclxuICAgICAgICAgICAgICAgIH0sIChoYXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sIHRydWUpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlW3Jlc3VsdC5oYXNoXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogcmVzdWx0Lmhhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHt3aW5kb3cucmVxdWlyZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICBjb25zdCBjb250ZW50ID0gd2luZG93LnJlcXVpcmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgaWYoIWNvbnRlbnQubmFtZSlyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDYW5ub3QgZXNjYXBlIHRoZSBJRC5cIiwgZXJyb3I6IHttZXNzYWdlOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIiwgc3RhY2s6IFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwifX1cclxuICAgICAgICBjb250ZW50LmlkID0gVXRpbHMuZXNjYXBlSUQoY29udGVudC5uYW1lKTtcclxuICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZW50LnR5cGUpIHJldHVybjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gbmV3IGNvbnRlbnQudHlwZSgpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldO1xyXG4gICAgICAgICAgICAgICAgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV0gPSBjb250ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYmR0aGVtZXNbY29udGVudC5uYW1lXTtcclxuICAgICAgICAgICAgYmR0aGVtZXNbY29udGVudC5uYW1lXSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSAgIFxyXG5cclxuICAgIHVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGVsZXRlIHdpbmRvdy5yZXF1aXJlLmNhY2hlW3dpbmRvdy5yZXF1aXJlLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIHVubG9hZGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX07fVxyXG4gICAgfVxyXG5cclxuICAgIGlzTG9hZGVkKGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7d2luZG93LnJlcXVpcmUuY2FjaGVbd2luZG93LnJlcXVpcmUucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07fVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4gZmFsc2U7fVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBjYW50VW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICBpZiAoY2FudFVubG9hZCkgcmV0dXJuIGNhbnRVbmxvYWQ7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWROZXdDb250ZW50KHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMaXN0ID0gT2JqZWN0LnZhbHVlcyhpc1BsdWdpbiA/IGJkcGx1Z2lucyA6IGJkdGhlbWVzKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkID0gY29udGVudExpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBpc1BsdWdpbiA/IGMucGx1Z2luLmdldE5hbWUoKSA6IGMubmFtZSk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhY29udGVudExpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aChmaWxlRW5kaW5nKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZikpLmlzRmlsZSgpKTtcclxuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQWxsQ29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikgZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGx1Z2lucygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInBsdWdpblwiKTt9XHJcbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb250ZW50TWFuYWdlciAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XHJcbiAqLyIsImltcG9ydCB7YmRDb25maWcsIG1pblN1cHBvcnRlZFZlcnNpb24sIGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbkVycm9ycywgYmR0aGVtZUVycm9ycywgYmJkQ2hhbmdlbG9nLCBkZWZhdWx0Q29va2llLCBjdXJyZW50RGlzY29yZFZlcnNpb24sIGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvYmRMb2dvXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcclxuaW1wb3J0IFBsdWdpbkNlcnRpZmllciBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xyXG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIlxyXG5pbXBvcnQge3JlbW90ZSBhcyBlbGVjdHJvbn0gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0IHYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbiAgICAvLyBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhEYXRhU3RvcmUuY29uZmlnRmlsZSkpO1xyXG4gICAgLy8gdGhpcy5pbml0KCk7XHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihiZENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmZsYXQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJiZFZlcnNpb24gKyBcIiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb2xkIHZlcnNpb24gKFwiICsgY3VycmVudERpc2NvcmRWZXJzaW9uICsgXCIpIG9mIERpc2NvcmQuIFBsZWFzZSB1cGRhdGUgeW91ciBEaXNjb3JkIGluc3RhbGxhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiZENvbmZpZy52ZXJzaW9uIDwgbWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmRDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBQb3dlcmNvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0cmlidXRlcy5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcclxuXHJcbiAgICAvKlxyXG4gICAgY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gYmRDb25maWcudXBkYXRlciA/IGJkQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IGJkQ29uZmlnLmxhdGVzdFZlcnNpb247XHJcbiAgICBpZiAobGF0ZXN0TG9jYWxWZXJzaW9uID4gYmRDb25maWcudmVyc2lvbikge1xyXG4gICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcIlVwZGF0ZSBBdmFpbGFibGVcIiwgW2BUaGVyZSBpcyBhbiB1cGRhdGUgYXZhaWxhYmxlIGZvciBCYW5kYWdlZEJEJ3MgSW5qZWN0b3IgKCR7bGF0ZXN0TG9jYWxWZXJzaW9ufSkuYCwgXCJZb3UgY2FuIGVpdGhlciB1cGRhdGUgYW5kIHJlc3RhcnQgbm93LCBvciBsYXRlci5cIl0sIHtcclxuICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiVXBkYXRlIE5vd1wiLFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBcIk1heWJlIExhdGVyXCIsXHJcbiAgICAgICAgICAgIG9uQ29uZmlybTogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25VcGRhdGVGYWlsZWQgPSAoKSA9PiB7VXRpbHMuYWxlcnQoXCJDb3VsZCBOb3QgVXBkYXRlXCIsIGBVbmFibGUgdG8gdXBkYXRlIGF1dG9tYXRpY2FsbHksIHBsZWFzZSBkb3dubG9hZCB0aGUgaW5zdGFsbGVyIGFuZCByZWluc3RhbGwgbm9ybWFsbHkuPGJyIC8+PGJyIC8+PGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5Eb3dubG9hZCBJbnN0YWxsZXI8L2E+YCk7fTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlkVXBkYXRlID0gYXdhaXQgdGhpcy51cGRhdGVJbmplY3RvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlkVXBkYXRlKSByZXR1cm4gb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHAgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICAgICAgICAgICAgICBhcHAucmVsYXVuY2goKTtcclxuICAgICAgICAgICAgICAgICAgICBhcHAuZXhpdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlRmFpbGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0qL1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICB0aGlzLmluaXRTZXR0aW5ncygpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgc2V0dGluZ3NQYW5lbC5pbml0aWFsaXplU2V0dGluZ3MoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBBZGRvbnMgQ2FjaGVcIilcclxuICAgIGF3YWl0IGNvbnRlbnRNYW5hZ2VyLmxvYWRBZGRvbkNlcnRpZmllckNhY2hlKClcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW5zKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgVGhlbWVzXCIpO1xyXG4gICAgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lcygpO1xyXG5cclxuICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCBhdG9iKERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKSkpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1kYy0wXCJdKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi5idG4tZGlzY29ubmVjdFwiKS5jbGljaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgUGx1Z2luQ2VydGlmaWVyLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKS5sZW5ndGgpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSB7XHJcbiAgICAgICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IGJkcGx1Z2luRXJyb3JzLCB0aGVtZXM6IGJkdGhlbWVFcnJvcnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcclxuICAgIGlmIChiYmRWZXJzaW9uID4gcHJldmlvdXNWZXJzaW9uKSB7XHJcbiAgICAgICAgaWYgKGJiZENoYW5nZWxvZykgdGhpcy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwidmVyc2lvblwiLCBiYmRWZXJzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBFbW9qaU1vZHVsZS5zdGFydCgpXHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVzc2FnZUhlYWRlci5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIENoYXQgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZW1iZXJMaXN0LmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgTWVtYmVyIExpc3QgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIGlmKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KXtcclxuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGFsZXJ0Lm9uQ2xvc2UocmVzb2x2ZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIilcclxuICAgIGlmKGxvZ28pe1xyXG4gICAgICAgIGxvZ28uc3R5bGUudG9wID0gXCIzcHhcIlxyXG4gICAgICAgIGxvZ28uaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCI3MFwiIHZpZXdCb3g9XCIwIDAgNzIuNTQgMTBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4LCBtYXJnaW4tdG9wOiAxMHB4XCI+XHJcbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjAgOS45NyA2LjUgMTAgNi41IDcuNjMgMi40MSA3LjYzIDIuNDEgMC4yNiAwIDIuMjYgMCA5Ljk3XCIvPlxyXG48L3N2Zz5gXHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEF0dHJpYnV0ZXMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGxldCBhdHRyaWJzUGF0Y2hzID0gW11cclxuICAgIHRoaXMuY2FuY2VsUGF0Y2hBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgYXR0cmlic1BhdGNocy5mb3JFYWNoKGUgPT4gZSgpKVxyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlKCF2Mi5NZXNzYWdlQ29tcG9uZW50KWF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKVxyXG4gICAgXHJcbiAgICAvLyBUT0RPOiB0cnkgdG8gcGF0Y2ggY29ycmVjdGx5IHRoZSB1c2VyIHBvcG91dCBvbiBhIG5leHQgdXBkYXRlXHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJEaXNjb3JkVGFnXCIpXHJcbiAgICAudGhlbihEaXNjb3JkVGFnID0+IHtcclxuICAgICAgICBsZXQgRGlzY29yZFRhZ0NvbXAgPSBEaXNjb3JkVGFnLmRlZmF1bHRcclxuICAgICAgICBEaXNjb3JkVGFnLmRlZmF1bHQgPSBmdW5jdGlvbihwcm9wcyl7XHJcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IERpc2NvcmRUYWdDb21wKHByb3BzKVxyXG5cclxuICAgICAgICAgICAgbGV0IGlkID0gdXVpZHY0KClcclxuXHJcbiAgICAgICAgICAgIGxldCBiYWRnZURpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiBcIjVweFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpXHJcblxyXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbcmV0dXJuVmFsdWVdXHJcblxyXG4gICAgICAgICAgICBpZiAocHJvcHMudXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgcHJvcHMudXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChiYWRnZURpdilcclxuICAgICAgICAgICAgbGV0IGRpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBjaGlsZHJlbilcclxuICAgICAgICAgICAgYXBwbHlCYWRnZXMoaWQsIHByb3BzLnVzZXIsIGZhbHNlKVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRpdlxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlKXsgLy8gdGhpcyBjYW4gYmUgYSBibG9ja2VkIG1lc3NhZ2UgKG5vdCBvcGVuZWQpXHJcbiAgICAgICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJkYXRhLW1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcclxuICAgICAgICB9XHJcbiAgICB9fSkpXHJcbiAgICAgICAgLypcclxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJtZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXHJcbiAgICB9fSkpKi9cclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUuY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgIGxldCB0aW1lc0NoZWNrZWQgPSAwO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSBCRFYyLmd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9YCkubGVuZ3RoID4gMCkgdGltZXNDaGVja2VkKys7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lc0NoZWNrZWQgPj0gNTApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPSBcImxvYWRpbmdcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7c2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTt9KTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5qZWN0RXh0ZXJuYWxzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBhd2FpdCBET00uYWRkU2NyaXB0KFwiYWNlLXNjcmlwdFwiLCBcImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2FjZS8xLjIuOS9hY2UuanNcIik7XHJcbiAgICBpZiAod2luZG93LnJlcXVpcmUub3JpZ2luYWwpIHdpbmRvdy5yZXF1aXJlID0gd2luZG93LnJlcXVpcmUub3JpZ2luYWw7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xyXG4gICAgaWYoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSAmJiAhRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSl7XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgZGVmYXVsdENvb2tpZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBkZWZhdWx0UlBDKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5sb2FkU2V0dGluZ3MoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gZGVmYXVsdENvb2tpZSkge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9IGRlZmF1bHRDb29raWVbc2V0dGluZ107XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnByb3RvdHlwZSAmJiBlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zKVxyXG4gICAgLnRoZW4oc2V0dGluZ01vZHVsZSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBnZXRQcmVkaWNhdGVTZWN0aW9ucyA9IHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnNcclxuICAgICAgICBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldFByZWRpY2F0ZVNlY3Rpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG5cclxuICAgICAgICAgICAgaWYocmVzdWx0WzFdLnNlY3Rpb24gPT09IFwiTXkgQWNjb3VudFwiKXsgLy8gdXNlciBzZXR0aW5ncywgbm90IGd1aWxkIHNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICBsZXQgcG9wZWQgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5zZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIoKSlcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZShwb3BlZFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9wZWQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn07XHJcblxyXG5cclxubGV0IGNsYXNzTmFtZUxheWVyXHJcbmxldCBjbGFzc05hbWVTb2NpYWxMaW5rc1xyXG5sZXQgY2xhc3NOYW1lTW9kYWxcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IG1haW5PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luTW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBwbHVnaW5Nb2R1bGUucmF3T2JzZXJ2ZXIobXV0YXRpb24pO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vdGhpbmcgYWRkZWQsIHNraXBcclxuICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVMYXllciljbGFzc05hbWVMYXllciA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVTb2NpYWxMaW5rcyljbGFzc05hbWVTb2NpYWxMaW5rcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVNb2RhbCljbGFzc05hbWVNb2RhbCA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubW9kYWwgJiYgdHlwZW9mIGUubW9kYWwgPT09IFwic3RyaW5nXCIgJiYgZS5pbm5lciAmJiB0eXBlb2YgZS5pbm5lciA9PT0gXCJzdHJpbmdcIiAmJiAhZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUpWzBdLm1vZGFsXHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZ3VpbGQtc2V0dGluZ3MtYmFzZS1zZWN0aW9uXCIpLmxlbmd0aCkgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZVNvY2lhbExpbmtzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xyXG5cclxuICAgICAgICAgICAgLy8gRW1vamkgUGlja2VyXHJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcclxuICAgICAgICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuYWxlcnQgPSBmdW5jdGlvbih0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoU29jaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghVGFiQmFyKSByZXR1cm47XHJcbiAgICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAzXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChBbmNob3IpIHtcclxuICAgICAgICAgICAgbGV0IHNvY2lhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcylbMF1cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVDb2xvck11dGVkLFxyXG4gICAgICAgICAgICBzaXplcyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvck11dGVkKVswXS5jb2xvck11dGVkLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJzaW9uSGFzaClbMF0udmVyc2lvbkhhc2hcclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBMaWdodGNvcmQgJHtlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikudmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgYCgkeyhlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikuY29tbWl0IHx8IFwiVW5rbm93blwiKS5zbGljZSgwLCA3KX0pYCkpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcclxuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICB9O1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBndWlsZHNXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkTGlzdEl0ZW1zID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcclxuICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgYmxvYkNsYXNzID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XHJcbiAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWVcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudW5yZWFkKSBjbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuc2VsZWN0ZWQpIGNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmF1ZGlvKSBjbGFzc05hbWUgKz0gXCIgYmQtYXVkaW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS52aWRlbykgY2xhc3NOYW1lICs9IFwiIGJkLXZpZGVvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYmFkZ2UpIGNsYXNzTmFtZSArPSBcIiBiZC1iYWRnZVwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmFuaW1hdGFibGUpIGNsYXNzTmFtZSArPSBcIiBiZC1hbmltYXRhYmxlXCI7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkUGlsbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZC1zZXBhcmF0b3JcIjtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXJldHVyblxyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSB8fCBudWxsXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XHJcblxyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF0dGFjaG1lbnQgfHwgIWF0dGFjaG1lbnQudXJsKXJldHVyblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgIGlkOiBcImNlcnRpZmllZC1cIitpZFxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIFBsdWdpbkNlcnRpZmllci5wYXRjaChhdHRhY2htZW50LCBcImNlcnRpZmllZC1cIitpZClcclxuICAgIH19KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVzc2FnZUhlYWRlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiTWVzc2FnZVRpbWVzdGFtcFwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lc3NhZ2VIZWFkZXIgfHwgIU1lc3NhZ2VIZWFkZXIuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZXNzYWdlSGVhZGVyLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwibWVzc2FnZS5hdXRob3JcIik7XHJcbiAgICAgICAgLy8gY29uc3QgaGVhZGVyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHNcIik7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF1dGhvciB8fCAhYXV0aG9yLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAoYXV0aG9yLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGF1dGhvci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBhdXRob3IuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIGF1dGhvciwgdHJ1ZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBjaGF0KXtcclxuICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFkZ2VzLVwiK2lkKVxyXG4gICAgICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm5cclxuICAgICAgICBpZihkaXYuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuXHJcbiAgICAgICAgbGV0IGJsb2NrRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgIGJsb2NrRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChibG9ja0RpdilcclxuXHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcblxyXG4gICAgICAgIGRpc3RhbnQuZ2V0QmFkZ2VzKHVzZXIuaWQpXHJcbiAgICAgICAgLnRoZW4oYmFkZ2VzID0+IHtcclxuICAgICAgICAgICAgYmFkZ2VzLmZvckVhY2goYmFkZ2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYWRnZS5zY29wZXMuZm9yRWFjaChzY29wZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NvcGUgPT09IFwidXNlclwiKXsvLyByZXF1aXJlIHVzZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudXNlciA9IHVzZXJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSBcclxuICAgICAgICAgICAgICAgIGlmKCFiYWRnZS5ocmVmKXtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5BbmNob3IgPSBBbmNob3JcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5ocmVmID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBiYWRnZS5uYW1lfSxcclxuICAgICAgICAgICAgICAgICAgICBiYWRnZS5ocmVmID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBiYWRnZS5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKSkgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihlbGVtZW50LCBkaXYyKVxyXG4gICAgICAgICAgICAgICAgZGl2Mi5jaGlsZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lbWJlckxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lbWJlckxpc3RQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVtYmVyTGlzdEl0ZW0gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1lbWJlckxpc3RJdGVtXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVtYmVyTGlzdEl0ZW0gfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLnJlbmRlckRlY29yYXRvcnMpIHJldHVybjtcclxuICAgIHRoaXMubWVtYmVyTGlzdFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLCBcInJlbmRlckRlY29yYXRvcnNcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEudGhpc09iamVjdCwgXCJwcm9wcy51c2VyXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIXVzZXIgfHwgIXVzZXIuaWQpcmV0dXJuXHJcbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh1c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCB1c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJhZGdlcy1cIitpZH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBmYWxzZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnVwZGF0ZUluamVjdG9yID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBpbmplY3Rpb25QYXRoID0gRGF0YVN0b3JlLmluamVjdGlvblBhdGg7XHJcbiAgICBpZiAoIWluamVjdGlvblBhdGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuICAgIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xyXG4gICAgY29uc3QgeWF1emwgPSByZXF1aXJlKFwieWF1emxcIik7XHJcbiAgICBjb25zdCBta2RpcnAgPSByZXF1aXJlKFwibWtkaXJwXCIpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IC8qcmVxdWlyZShcInJlcXVlc3RcIik7Ki8gbnVsbFxyXG5cclxuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLnJlc29sdmUoaW5qZWN0aW9uUGF0aCwgXCIuLlwiKTtcclxuICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xyXG4gICAgY29uc3QgemlwTGluayA9IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9hcmNoaXZlL2luamVjdG9yLnppcFwiO1xyXG4gICAgY29uc3Qgc2F2ZWRaaXAgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJpbmplY3Rvci56aXBcIik7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpO1xyXG5cclxuICAgIC8vIERvd25sb2FkIHRoZSBpbmplY3RvciB6aXAgZmlsZVxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIldyaXRpbmcgXCIgKyBzYXZlZFppcCk7XHJcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZShzYXZlZFppcCwgYm9keSwgZXJyID0+IHJlc29sdmUoIWVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzO1xyXG5cclxuICAgIC8vIENoZWNrIGFuZCBkZWxldGUgcmVuYW1lIGV4dHJhY3Rpb25cclxuICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKGV4dHJhY3RlZEZvbGRlciwgcmVzKSk7XHJcbiAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGAke2V4dHJhY3RlZEZvbGRlcn0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcclxuICAgIFxyXG4gICAgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcclxuICAgIGNvbnN0IHppcGZpbGUgPSBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHlhdXpsLm9wZW4oc2F2ZWRaaXAsIHtsYXp5RW50cmllczogdHJ1ZX0sIChlcnIsIHppcCkgPT4gIHIoemlwKSkpO1xyXG4gICAgemlwZmlsZS5vbihcImVudHJ5XCIsIGZ1bmN0aW9uKGVudHJ5KSB7XHJcbiAgICAgICAgLy8gU2tpcCBkaXJlY3RvcmllcywgdGhleSBhcmUgaGFuZGxlZCB3aXRoIG1rZGlycFxyXG4gICAgICAgIGlmIChlbnRyeS5maWxlTmFtZS5lbmRzV2l0aChcIi9cIikpIHJldHVybiB6aXBmaWxlLnJlYWRFbnRyeSgpO1xyXG5cclxuICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgLy8gTWFrZSBhbnkgbmVlZGVkIHBhcmVudCBkaXJlY3Rvcmllc1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcclxuICAgICAgICB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCBmdW5jdGlvbihlcnIsIHJlYWRTdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbigpIHt6aXBmaWxlLnJlYWRFbnRyeSgpO30pOyAvLyBHbyB0byBuZXh0IGZpbGUgYWZ0ZXIgdGhpc1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLnBpcGUoZnMuY3JlYXRlV3JpdGVTdHJlYW0oZnVsbFBhdGgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgemlwZmlsZS5yZWFkRW50cnkoKTsgLy8gU3RhcnQgcmVhZGluZ1xyXG5cclxuICAgIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB6aXBmaWxlLm9uY2UoXCJlbmRcIiwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxyXG4gICAgY29uc3QgYmFja3VwRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGAke2ZvbGRlck5hbWV9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShpbmplY3Rpb25QYXRoLCBiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBSZW5hbWUgdGhlIGV4dHJhY3RlZCBmb2xkZXIgdG8gd2hhdCBpdCBzaG91bGQgYmVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiRmFpbGVkIHRvIHJlbmFtZSB0aGUgZmluYWwgZGlyZWN0b3J5XCIpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHJlbmFtZSBoYWQgaXNzdWVzLCBkZWxldGUgd2hhdCB3ZSB0cmllZCB0byByZW5hbWUgYW5kIHJlc3RvcmUgYmFja3VwXHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIlNvbWV0aGluZyB3ZW50IHdyb25nLi4uIHJlc3RvcmluZyBiYWNrdXBzLlwiKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoZXh0cmFjdGVkRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoYmFja3VwRm9sZGVyLCBpbmplY3Rpb25QYXRoLCByZXNvbHZlKSk7XHJcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgd2UndmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhdmUgZ29uZSBzbW9vdGhseS5cclxuICAgIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy51bmxpbmsoc2F2ZWRaaXAsIHJlc29sdmUpKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpO1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb3JlIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiY29uc3QgX19ub25fd2VicGFja19yZXF1aXJlX18gPSB3aW5kb3cucmVxdWlyZVxyXG5cclxuaW1wb3J0IHtiZENvbmZpZ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuXHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IHJlbGVhc2VDaGFubmVsID0gRGlzY29yZE5hdGl2ZS5nbG9iYWxzID8gRGlzY29yZE5hdGl2ZS5nbG9iYWxzLnJlbGVhc2VDaGFubmVsIDogRGlzY29yZE5hdGl2ZS5hcHAgPyBEaXNjb3JkTmF0aXZlLmFwcC5nZXRSZWxlYXNlQ2hhbm5lbCgpIDogXCJzdGFibGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXRhU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0ge3NldHRpbmdzOiB7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX19O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EYXRhU3RvcmUgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcImJpbmFyeVwiKSlcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwge1tyZWxlYXNlQ2hhbm5lbF06IHNldHRpbmdzfSk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJERGF0YShcInNldHRpbmdzXCIsIHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIFV0aWxzLmFsZXJ0KFwiQ29ycnVwdCBTdG9yYWdlXCIsIFwiVGhlIGJkIHN0b3JhZ2UgaGFzIHNvbWVob3cgYmVjb21lIGNvcnJ1cHQuIFlvdSBtYXkgZWl0aGVyIHRyeSB0byBzYWx2YWdlIHRoZSBmaWxlIG9yIGRlbGV0ZSBpdCB0aGVuIHJlbG9hZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0aW9uUGF0aCkgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGg7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBiYXNlID0gZWxlY3Ryb24uZ2V0QXBwUGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdCYXNlID0gZWxlY3Ryb24uZ2V0UGF0aChcInVzZXJEYXRhXCIpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdMb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShyb2FtaW5nQmFzZSwgZWxlY3Ryb24uZ2V0VmVyc2lvbigpLCBcIm1vZHVsZXNcIiwgXCJkaXNjb3JkX2Rlc2t0b3BfY29yZVwiLCBcImluamVjdG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnRmlsZSgpIHtyZXR1cm4gdGhpcy5fY29uZmlnRmlsZSB8fCAodGhpcy5fY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmluamVjdGlvblBhdGgsIFwiYmV0dGVyZGlzY29yZFwiLCBcImNvbmZpZy5qc29uXCIpKTt9XHJcbiAgICBnZXQgQkRGaWxlKCkge3JldHVybiB0aGlzLl9CREZpbGUgfHwgKHRoaXMuX0JERmlsZSA9IHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCwgXCJiZHN0b3JhZ2UuanNvblwiKSk7fVxyXG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZXR0aW5nR3JvdXAoa2V5LCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldID0gZGF0YTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCRERhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZNb2RlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGVidWdMaXN0ZW5lciA9IHRoaXMuZGVidWdMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIgPSB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIHRoaXMuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnREZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BEZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlYnVnTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAxMTkgfHwgZS53aGljaCA9PSAxMTgpIHsvL0Y4XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbJWNEZXZNb2RlJWNdICVjQnJlYWsvUmVzdW1lXCIsIFwiY29sb3I6IHJlZDtcIiwgXCJjb2xvcjogIzMwMzAzMDsgZm9udC13ZWlnaHQ6NzAwO1wiLCBcImNvbG9yOnJlZDtcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvcHlTZWxlY3Rvckxpc3RlbmVyKGUpIHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgICAgIGNsYXNzTGF5ZXIsIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xyXG4gICAgICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1lbnUpWzBdXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcclxuICAgICAgICAgICAgICAgIGlmKCFjbGFzc0l0ZW1zIHx8ICFjbGFzc0xheWVyLmxheWVyKXJldHVybiBjb25zb2xlLmxvZyhjbGFzc0l0ZW1zLCBjbGFzc0xheWVyLmxheWVyKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbSA9IERPTS5xdWVyeShcIi5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLm1lbnUpKTtcclxuICAgICAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50ID4gLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzTGF5ZXIubGF5ZXJDb250YWluZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NMYXllci5sYXllcn1cIj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLm1lbnV9ICR7Y2xhc3NJdGVtcy5zdHlsZUZsZXhpYmxlfSAke2NsYXNzSXRlbXMuYWNjb21tb2RhdGVTY3JvbGxiYXJ9IGJkLWNvbnRleHQtbWVudVwiIHN0eWxlPVwiXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmFwcGVuZChjbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChjbVdyYXApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJtZW51XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIilcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuaWQgPSBcImJkLWNvcHktc2VsZWN0b3ItY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJDb3B5IFNlbGVjdG9yIEFjdGlvbnNcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDbGFzc2VzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zY3JvbGxlcldyYXApWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJXcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyQ2xhc3Nlcy50aGVtZUdob3N0SGFpcmxpbmV9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlcilbMF0uc2Nyb2xsZXJ9ICR7Y2xhc3NJdGVtcy5zY3JvbGxlcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyV3JhcC5hcHBlbmQoc2Nyb2xsZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgY20uYXBwZW5kKHNjcm9sbGVyV3JhcClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IGNtLnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBjbS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJncm91cFwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5sYWJlbENvbnRhaW5lcn0gJHtjbGFzc0l0ZW1zLmNvbG9yRGVmYXVsdH1cIiByb2xlPVwibWVudWl0ZW1cIiBpZD1cImJkLWNvcHktc2VsZWN0b3ItaXRlbS1jbVwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY21pLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5sYWJlbH1cIj5Db3B5IFNlbGVjdG9yPC9kaXY+YCkpO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5OYXRpdmVNb2R1bGUuY29weShzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IERPTS5xdWVyeUFsbChcImRpdltyb2xlPW1lbnVpdGVtXS5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzLmZvckVhY2goZWxlbSA9PiBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LmFkZChjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjbWcuYXBwZW5kKGNtaSk7XHJcbiAgICAgICAgICAgICAgICBpZihzY3JvbGxlci5jaGlsZE5vZGVzLmxlbmd0aCl7IC8vIGFwZW5kIGEgc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIGNsYXNzPVwiJHtjbGFzc0l0ZW1zLnNlcGFyYXRvcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChzZXBhcmF0b3IpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoY21nKTtcclxuICAgICAgICAgICAgICAgIGlmKGNtV3JhcC5jbGllbnRIZWlnaHQgPCBjbVdyYXAuc2Nyb2xsSGVpZ2h0KXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nIFwiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IChjbVdyYXAuc3R5bGUudG9wIC0gY21nLmNsaWVudEhlaWdodCkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZ1wiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGFjaCwgMSk7XHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gZnVsbFBhdGgoZWwpe1xyXG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKGVsLnBhcmVudE5vZGUpe1xyXG4gICAgICAgICAgICAgIGlmIChlbC5pZCl7XHJcbiAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KCcjJytlbC5pZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmIChlbD09ZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LmZyb20oZWwuY2xhc3NMaXN0LmVudHJpZXMoKSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTEsZT1lbDtlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7ZT1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYysrKTtcclxuICAgICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrKCh0eXBlb2YgZWwuY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsLmNsYXNzTmFtZSkgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICEhZSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKStcIjpudGgtY2hpbGQoXCIrYytcIilcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbD1lbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmFtZXMuam9pbihcIiA+IFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bGxQYXRoKGVsZW1lbnQpXHJcbiAgICAgICAgLypcclxuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0UnVsZSA9IHJ1bGVzW3J1bGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmIChsYXRlc3RSdWxlKSByZXR1cm4gbGF0ZXN0UnVsZS5zZWxlY3RvclRleHQ7XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoKSByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7XHJcbiAgICAgICAgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7Ki9cclxuICAgIH1cclxuXHJcbiAgICBnZXRSdWxlcyhlbGVtZW50LCBjc3MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHMpIHtcclxuICAgICAgICAvL2lmICh3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKSByZXR1cm4gd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG59OyIsImV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXNhYmxlVHlwaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnN0YXJ0VHlwaW5nKVxyXG4gICAgICAgIC50aGVuKHR5cGluZ01vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0YXJ0VHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3BUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RvcFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc2FibGVUeXBpbmcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQnVnSHVudGVyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9idWdfaHVudGVyXCJcclxuaW1wb3J0IExpZ2h0Y29yZFVzZXJCYWRnZSBmcm9tIFwiLi4vc3ZnL0xpZ2h0Y29yZFVzZXJcIjtcclxuaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCB7IHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDaXJjdXMgZnJvbSBcIi4uL3N2Zy9jaXJjdXNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7IC8vIEdlbmVyYXRlIFVVSUQgKE5vIGNyeXB0byBybmcpXHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG59ICBcclxuXHJcbmNvbnN0IGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXMgPSB7fVxyXG5sZXQgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzdGFudFNlcnZlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2NhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc3RhbnRTZXJ2ZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhY2hlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNhY2hlKGRhdGEpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gXCJvYmplY3RcIilyZXR1cm4gdGhpcy5fY2FjaGUgPSBkYXRhXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jYWNoZSwgZGF0YSlcclxuICAgIH0vKlxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZSgpe1xyXG4gICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkRlbGV0aW5nIGFsbCBpbmZvcyBhYm91dCB5b3Ugb24gTGlnaHRjb3JkIFNlcnZlcnMuLi5cIiwge3R5cGU6IFwid2FyblwifSlcclxuICAgICAgICByZXR1cm4gaGFuZGxlUmVxdWVzdChSb3V0ZXMuZGVsZXRlLCBcImRlbGV0ZVwiKVxyXG4gICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7KHJlcy5zdGF0dXMrXCIgXCIrcmVzLnN0YXR1c1RleHQrXCIgXCIrYXdhaXQgcmVzLnRleHQoKSl9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zLmApXHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIlN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXHJcbiAgICAgICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gPSBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpXHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBkZWxldGUgYWxsIGluZm9ybWF0aW9uczogJHtlcnIuc3RhY2t9YClcclxuICAgICAgICB9KVxyXG4gICAgfSovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgY3VzdG9tIGJhZGdlcyBmcm9tIHRoZSB1c2VyIElELlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXIgVGhlIHVzZXIgSUQgXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb25zdGFudHNbXCJiYWRnZXNcIl0+fVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRCYWRnZXModXNlcil7XHJcbiAgICAgICAgaWYodGhpcy5jYWNoZS5iYWRnZXNbdXNlcl0pcmV0dXJuIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXHJcbiAgICAgICAgaWYoYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSlyZXR1cm4gYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG5cclxuICAgICAgICBsZXQgcmVzb2x2ZVxyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzKSA9PiAocmVzb2x2ZSA9IHJlcykpXHJcbiAgICAgICAgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSA9IG5ld1Byb21pc2VcclxuXHJcbiAgICAgICAgY29uc3QgYmFkZ2VzID0gW11cclxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIENvbnN0YW50cy5iYWRnZXMpe1xyXG4gICAgICAgICAgICBpZihiYWRnZS5kZWZhdWx0VXNlcnMuaW5jbHVkZXModXNlcikpYmFkZ2VzLnB1c2goYmFkZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZldGNoZWRCYWRnZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSlyZXR1cm4gcmVzb2x2ZShbXSlcclxuICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaC5wdXNoKFt1c2VyLCByZXNvbHZlXSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlcnMgPSBiYWRnZXNUb0ZldGNoXHJcbiAgICAgICAgICAgICAgICBpZih1c2Vycy5sZW5ndGggPT09IDApcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBiYWRnZXNUb0ZldGNoID0gW11cclxuICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3QoUm91dGVzLmJhZGdlcywgXCJQT1NUXCIsIEpTT04uc3RyaW5naWZ5KHVzZXJzLm1hcChlID0+IGVbMF0pKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IHNlcnZlciBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlQm9keSlcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHVzZXIgb2YgcmVzcG9uc2VCb2R5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB1c2Vycy5maW5kKHByb21pc2UgPT4gcHJvbWlzZVswXSA9PT0gdXNlci51c2VyX2lkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlWzFdKHVzZXIuYmFkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIShlcnIgaW5zdGFuY2VvZiBMaWdodGNvcmRFcnJvcikpY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgZmV0Y2hlZEJhZGdlcyl7XHJcbiAgICAgICAgICAgIGlmKCFDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gV2UgZG8gbm90IGhhdmUgdGhlIENvbXBvbmVudCwgc2tpcCBpdC5cclxuICAgICAgICAgICAgaWYoYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gQWxyZWFkeSBpbnNlcnRlZC5cclxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IE9iamVjdC5hc3NpZ24odGhpcy5jYWNoZS5iYWRnZXMsIHtbdXNlcl06IGJhZGdlc30pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cclxuICAgICAgICB9LCA2MDAwMDApO1xyXG5cclxuICAgICAgICByZXNvbHZlKGJhZGdlcylcclxuICAgICAgICBkZWxldGUgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG4gICAgICAgIHJldHVybiBiYWRnZXNcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHJvdXRlLCBtZXRob2QsIGRhdGEpe1xyXG4gICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pe1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgQ2FuY2VsaW5nIHJlcXVlc3Qgb24gJHtyb3V0ZX0gd2l0aCBtZXRob2QgJHttZXRob2R9IGFuZCBib2R5YCwgZGF0YSwgXCJiZWNhdXNlIG9mIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgTGlnaHRjb3JkRXJyb3IoXCJUaGUgY3VycmVudCBzZXR0aW5ncyBibG9ja2VkIHRoZSByZXF1ZXN0LlwiKSlcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKGBTZW5kaW5nIHJlcXVlc3Qgb24gJHtyb3V0ZX0gd2l0aCBtZXRob2QgJHttZXRob2R9IGFuZCBib2R5YCwgZGF0YSlcclxuICAgIHJldHVybiBub2RlRmV0Y2goYCR7Q29uc3RhbnRzLlNFUlZFUl9VUkx9L2FwaS92MSR7cm91dGV9YCwge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ0xJRU5UXCI6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uIHx8IFwiTm9uZTo6QW5vbnltb3VzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLihkYXRhID8ge1xyXG4gICAgICAgICAgICBib2R5OiBkYXRhXHJcbiAgICAgICAgfSA6IHt9KVxyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgTGlnaHRjb3JkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkxpZ2h0Y29yZEVycm9yXCJcclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIFNFUlZFUl9VUkw6IFwiaHR0cHM6Ly9saWdodGNvcmQuZGVyb2t1Lnh5ei9cIixcclxuICAgIGJhZGdlczogWyAvLyBUT0RPOiBcclxuICAgICAgICAvKntcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgVXNlclwiLFxyXG4gICAgICAgICAgICBpZDogXCIwMWNmYTdiMC03Y2RiLTRiMGUtODI1OC05YzZhNzgyMzVjOTNcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXSxcclxuICAgICAgICAgICAgc2NvcGVzOiBbXHJcbiAgICAgICAgICAgICAgICBcInVzZXJcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IExpZ2h0Y29yZFVzZXJCYWRnZVxyXG4gICAgICAgIH0sICove1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZCBCdWcgSHVudGVyXCIsXHJcbiAgICAgICAgICAgIGlkOiBcImYwNDY5OGY1LTgxNmItNDFlMy1iZDAxLTkyMjkxMTkzZDdhNVwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIsXHJcbiAgICAgICAgICAgICAgICBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQnVnSHVudGVyQmFkZ2UsXHJcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9iYWRnZXMjYnVnX2h1bnRlclwiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJ1ZmZvb25cIixcclxuICAgICAgICAgICAgaWQ6IFwiMDY5MDRkMzEtNjViNC00MWVjLWE1MGMtODY1OGJiZDFhZjk2XCIsXHJcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xyXG4gICAgICAgICAgICAgICAgXCIzODkwMTY4OTU1NDM3MDU2MDJcIixcclxuICAgICAgICAgICAgICAgIFwiNjY0NjAwMTM0NTI4NjYzNTY1XCIsXHJcbiAgICAgICAgICAgICAgICBcIjYyNTM1MDY1NzgyOTg5NjIyNFwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ2lyY3VzLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8veW91dHUuYmUvRUp0YjZ6LWRsVDg/dD0xNDVcIlxyXG4gICAgICAgIH1cclxuICAgIF1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJvdXRlcyA9IHtcclxuICAgIGJhZGdlczogYC91c2Vycy9iYWRnZXNgXHJcbn0iLCIvKipcclxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcclxuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXHJcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXHJcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcclxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxyXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxyXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXHJcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxyXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcclxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqIFxyXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZVxyXG4gKiBAbmFtZSBPZmZzZXRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKi9cclxuXHJcbiAvKipcclxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcclxuICovXHJcbiBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xyXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XHJcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XHJcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cclxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xyXG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcclxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XHJcbiAgICAgIFxyXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcclxuICAgICAgXHJcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XHJcbiAgICAgIFxyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXHJcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxyXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XHJcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXHJcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cclxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcclxuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XHJcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXHJcbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XHJcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcclxuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XHJcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBsZXQgbnVtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXHJcbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xyXG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxyXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXHJcbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcclxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXHJcbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xyXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cclxuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcclxuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcclxuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cclxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xyXG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5ET00gPSBET01Ub29scyIsImltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgRW1vamlSZWdleDogLzxhP1xcLihcXHcrKVxcLihcXGQrKT4vZ1xyXG59XHJcblxyXG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxubGV0IEVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG5sZXQgQXV0b2NvbXBsZXRlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpWzBdXHJcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdXHJcbmxldCBFbW9qaU1vZHVsZVF1ZXJ5ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpWzBdXHJcbmxldCBNZXNzYWdlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylbMF1cclxubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdXHJcbmxldCBlbW9qaVNlYXJjaCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmluaXQoKS5jYXRjaChlcnIgPT4gVXRpbHMuZXJyKFwiRW1vamlNb2R1bGVcIiwgXCJBbiBlcnJvciBvY2N1cmVkXCIsIGVycikpIC8vIGJldHRlciBsb2dnaW5nXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cclxuICAgICAgICBpZighQXV0b2NvbXBsZXRlTW9kdWxlKUF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilcclxuICAgICAgICBpZighQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylcclxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxyXG4gICAgICAgIGlmKCFNZXNzYWdlcylNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpXHJcbiAgICAgICAgaWYoIWd1aWxkTW9kdWxlKWd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVxyXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuICAgICAgICBpZihBdXRvY29tcGxldGVNb2R1bGUgJiYgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgJiYgRW1vamlNb2R1bGVRdWVyeSAmJiBNZXNzYWdlcyAmJiBndWlsZE1vZHVsZSAmJiBlbW9qaVNlYXJjaCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIGNvbnN0IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zXHJcbiAgICAgICAgICAgIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBmdW5jdGlvbihlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIHZhbHVlLkxJR0hUQ09SRF9FTU9KSVMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBcIi5cIiA9PT0gYXJnMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFbW9qaVVzYWJsZShjb25kaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0cyh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBFbW9qaU1vZHVsZVF1ZXJ5LmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHModCwgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclJlc3VsdHMoZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEKGUsIHQsIGEuZW1vamlzLCBuLCByLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJLCBBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5FbW9qaSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWxkOiBudWxsICE9IGUuZ3VpbGRJZCA/IGd1aWxkTW9kdWxlLmRlZmF1bHQuZ2V0R3VpbGQoZS5ndWlsZElkKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIuXCIgKyBlICsgXCIuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRQbGFpblRleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIEVtb2ppIGRpc3BsYXkgKi9cclxuICAgICAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vamlSZW5kZXIpeyAvLyBUT0RPOiBQcm9wZXIgZW1vamkgZm9ybWF0dGluZyAvIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIW1lc3NhZ2UpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgIGlmKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAgICAgICAgICogIHJhdzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGFuaW1hdGVkOiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICAgKiB9W119XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBlbW9qaXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gW11cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbm9kZSBvZiBjb250ZW50KXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2VcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcnNlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFFbW9qaU1vZHVsZUFwaSlFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1vamkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbW9qaS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc1BhcnNlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdChcIiBcIikubWFwKCh3b3JkLCBpbmRleCwgYXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZW1vamkpcmV0dXJuIHdvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJldmlvdXMubGVuZ3RoID09PSAwKXJldHVybiBbY3VycmVudF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSArPSBgICR7Y3VycmVudH1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiK2N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiLCBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0vKlxyXG4gICAgICAgIGxldCB1c2VyTW9kdWxlXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiKVxyXG4gICAgICAgIC50aGVuKEVtb2ppUGlja2VyTGlzdFJvdyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc3MgPSBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdFxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdCA9IGNsYXNzIEVtb2ppUGlja2VyTGlzdFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbilyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW9qaURlc2NyaXB0b3JzOiB0aGlzLnByb3BzLmVtb2ppRGVzY3JpcHRvcnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pc0Rpc2FibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KSkgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIlxyXG4gICAgICAgIH0pKi9cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEQoZSwgdCwgbiwgciwgbywgaSwgcywgdSwgbCwgYykge1xyXG4gICAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgZCA9IG4ubWFwKChmdW5jdGlvbihlLCBuKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodSwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6IG8sXHJcbiAgICAgICAgICAgIG9uSG92ZXI6IHIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0ID09PSBuLFxyXG4gICAgICAgICAgICBpbmRleDogblxyXG4gICAgICAgIH0sIGwoZSwgbikpKVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIFtSKGksIHMsIGUsIGMpLCBkXVxyXG59XHJcblxyXG5mdW5jdGlvbiBSKGUsIHQsIG4sIHIpIHtcclxuICAgIHZhciBhID0gKG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcclxuICAgICAgICBwcmVmaXg6IHIobilcclxuICAgIH0pIDogdClcclxuICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xyXG4gICAgICAgIGEudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIHt9LCBcIltMaWdodGNvcmRdIFwiKSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGEgPSBcIltMSUdIVENPUkRdIFwiK2FcclxuICAgIH1cclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LlRpdGxlLCB7XHJcbiAgICAgICAgdGl0bGU6IGFcclxuICAgIH0sIGEpXHJcbn1cclxuUi5kaXNwbGF5TmFtZSA9IFwicmVuZGVySGVhZGVyXCI7XHJcblxyXG5sZXQgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbmxldCBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZSAmJiBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5sZXQgaXNVc2FibGUgPSBmYWxzZVxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcblxyXG5mdW5jdGlvbiBzZXRFbW9qaVVzYWJsZSh1c2FibGUpe1xyXG4gICAgaXNVc2FibGUgPSB1c2FibGVcclxuICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpcmV0dXJuXHJcbiAgICBpZighaXNFbW9qaURpc2FibGVkKWlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcblxyXG4gICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkID0gZnVuY3Rpb24oZW1vamkpe1xyXG4gICAgICAgIGlmKGlzVXNhYmxlKXtcclxuICAgICAgICAgICAgaWYoZW1vamkuc3Vycm9nYXRlcyB8fCBlbW9qaS5kaXZlcnNpdHkpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0Vtb2ppRGlzYWJsZWQuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcclxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiXHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcbmltcG9ydCB7IGFkZG9uQ2FjaGUgfSBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcblxyXG5jb25zdCBjYWNoZSA9IHt9XHJcbmNvbnN0IGNhY2hlMiA9IHt9XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luQ2VydGlmaWVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbkNlcnRpZmllciA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XHJcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaXNUcnVzdGVkKGhhc2gpe1xyXG4gICAgICAgIHJldHVybiBjYWNoZVtoYXNoXSAmJiAhY2FjaGVbaGFzaF0uc3VzcGVjdFxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpe1xyXG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICBsZXQgaXNIYXJtZnVsID0gZmFsc2VcclxuICAgIGZvcihsZXQga2V5d29yZCBvZiBkYXRhLnNwbGl0KC9bXlxcd1xcZF0rL2cpKXtcclxuICAgICAgICBmb3IobGV0IG9vZiBvZiBbXHJcbiAgICAgICAgICAgIFwidG9rZW5cIixcclxuICAgICAgICAgICAgXCJlbWFpbFwiLFxyXG4gICAgICAgICAgICBcInBob25lXCIsXHJcbiAgICAgICAgICAgIFwiTUZBXCIsXHJcbiAgICAgICAgICAgIFwiMmZhXCIsXHJcbiAgICAgICAgICAgIFwicHJvY2Vzc1wiLFxyXG4gICAgICAgICAgICBcImNoaWxkX3Byb2Nlc3NcIixcclxuICAgICAgICAgICAgXCJsb2NhbFN0b3JhZ2VcIixcclxuICAgICAgICAgICAgXCJldmFsXCIsXHJcbiAgICAgICAgICAgIFwiZ2V0R2xvYmFsXCIsXHJcbiAgICAgICAgICAgIFwiQnJvd3NlcldpbmRvd1wiXHJcbiAgICAgICAgXSl7XHJcbiAgICAgICAgICAgIGlmKGtleXdvcmQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhvb2YudG9Mb3dlckNhc2UoKSkpe1xyXG4gICAgICAgICAgICAgICAgaXNIYXJtZnVsID0gXCJ0b2tlbiBzdGVhbGVyL3ZpcnVzXCJcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3Qgbm9fY29tbWVudHMgPSBkYXRhLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98KFteXFxcXDpdfF4pXFwvXFwvLiokL2dtLCBcIlwiKS50cmltKCkvLyByZW1vdmluZyB0aGUgTUVUQSBjb21tZW50IGZyb20gcGx1Z2luc1xyXG4gICAgICAgIGlmKCgvdmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpKS50ZXN0KG5vX2NvbW1lbnRzKSl7XHJcbiAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwib2JmdXNjYXRpb24vaGlkZGVuIGNvZGVcIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIWlzSGFybWZ1bCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4cHMgPSBbXHJcbiAgICAgICAgICAgICAgICAvKiogaGV4YWRlY2ltYWwgKi9cclxuICAgICAgICAgICAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2csIC8vIF8weDhkYjcoJzB4MCcsICd4MV1mJylcclxuICAgICAgICAgICAgICAgIC8qKiBtYW5nbGVkICovXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydcXCkvZywgLy8gYignMHgwJylcclxuICAgICAgICAgICAgICAgIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2csIC8vIGIoJzB4MCcsICd4MV1mJylcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBmb3IobGV0IHJlZ2V4IG9mIHJlZ2V4cHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoaXNIYXJtZnVsKWJyZWFrXHJcbiAgICAgICAgICAgICAgICBpc0hhcm1mdWwgPSByZWdleC50ZXN0KG5vX2NvbW1lbnRzKSA/IFwib2JmdXNjYXRpb24vaGlkZGVuIGNvZGVcIiA6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bClyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcclxuICAgIGNhY2hlW2hhc2hdID0ge1xyXG4gICAgICAgIHN1c3BlY3Q6IHRydWUsXHJcbiAgICAgICAgbmFtZTogaGFzaFRvVXJsW2hhc2hdLnNwbGl0KFwiL1wiKS5wb3AoKSxcclxuICAgICAgICB0eXBlOiBoYXNoVG9VcmxbaGFzaF0uZW5kc1dpdGgoXCIuanNcIikgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwiLFxyXG4gICAgICAgIGhhcm06IGlzSGFybWZ1bCxcclxuICAgICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAgIGZpbGVuYW1lXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKGBGb3VuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgJHtjYWNoZVtoYXNoXS50eXBlLnRvTG93ZXJDYXNlKCl9OiAke2NhY2hlW2hhc2hdLm5hbWV9YClcclxuXHJcbiAgICByZXN1bHRDYWxsYmFjayhjYWNoZVtoYXNoXSlcclxufVxyXG5cclxuY29uc3QgaGFzaFRvVXJsID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc2goaGFzaCwgZGF0YSwgZmlsZW5hbWUsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayl7XHJcbiAgICBjb25zb2xlLmxvZyhgRmlsZTogJHtmaWxlbmFtZX0gaGFzaDogJHtoYXNofWApXHJcbiAgICBpZighY2FjaGVbaGFzaF0pe1xyXG4gICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnVzZXJBZ2VudCAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICAgICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgcmVzdWx0Lmhhc2ggPSBoYXNoXHJcbiAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSA9IGZpbGVuYW1lXHJcblxyXG4gICAgICAgICAgICBjYWNoZVtoYXNoXSA9IHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBjYWNoZVtoYXNoXVxyXG5cclxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZShfX3BhdGgsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayA9IChoYXNoKSA9PiB7fSwgaXNGcm9tTG9hZGVyID0gZmFsc2UpeyAgICBcclxuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKVxyXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuXHJcbiAgICBjcmVhdGVSZWFkU3RyZWFtKF9fcGF0aCkub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgfSkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxyXG5cclxuICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBfX3BhdGhcclxuXHJcbiAgICAgICAgaWYoaXNGcm9tTG9hZGVyICYmIGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF0pe1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgICAgICBjb250ZW50TWFuYWdlci5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2sodmFsdWUucmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXHJcbiAgICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpe1xyXG4gICAgaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSlyZXR1cm5cclxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuICAgIGlmKCFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSAmJiAhYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxyXG5cclxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcclxuICAgICAgICB9XHJcbiAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcclxuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXHJcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgICAgIGNhY2hlMlthdHRhY2htZW50LnVybF0gPSBoYXNoUmVzdWx0XHJcbiAgICAgICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IGF0dGFjaG1lbnQudXJsXHJcblxyXG4gICAgICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYXR0YWNobWVudC5maWxlbmFtZSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgaWYoZWxlbSllbGVtLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pLmNhdGNoKCgpPT57fSlcclxufVxyXG5cclxubGV0IGZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cclxuXHJcbi8qKlxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudFtdfSBlbGVtZW50cyBcclxuICogQHBhcmFtIHt7dHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgb2ZmaWNpYWw/OiBib29sZWFufXx7c3VzcGVjdDp0cnVlLCB0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBoYXJtOiBzdHJpbmd9fSByZXN1bHRcclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgZmlsZW5hbWUpe1xyXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXHJcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxyXG5cclxuICAgIGlmKCFmbG93ZXJTdGFyTW9kdWxlKWZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcbiAgICBcclxuICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFxyXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGQudGFnTmFtZSA9PT0gXCJBXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIEFueXdheVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24ucmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChjaGlsZC5ocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUoY2hpbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHROb2RlKGRpdi5wYXJlbnROb2RlKVxyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdmcpWzBdLnN2ZywgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCA0MCAzMlwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTMyKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6QkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9ZWxzZSBpZighcmVzdWx0Lm9mZmljaWFsKXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiM0ZjU0NWNcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiI2ZmZmZmZlwiLGQ6XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIGFuZCBsYXVuY2ggdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkby5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkkndmUgY2hhbmdlZCBteSBtaW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGluc3RhbGxQYXRoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCIsc3Ryb2tlOlwiIzM2MzkzZlwiLHN0eWxlOntjb2xvcjpcIiM0MDg3ZWRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBkb3dubG9hZCBhbmQgbG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBtdXN0IGVuYWJsZSBpdCBpbiB0aGUgc2V0dGluZ3MuXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YWxsUGF0aCA9IGpvaW4ocmVzdWx0LnR5cGUgPT09IFwiUGx1Z2luXCIgPyBjb250ZW50TWFuYWdlci5fcGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLl90aGVtZXNGb2xkZXIsIHJlc3VsdC5maWxlbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChyZXN1bHQudHlwZStcIiBzdWNjZXNmdWxseSBpbnN0YWxsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoZXJyLm1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEtleWVkQXJyYXkob2JqKXtcclxuICAgIGxldCBhcnIgPSBbXVxyXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKFtrLCBvYmpba11dKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBhcnJcclxufVxyXG5cclxubGV0IGtleSA9IG51bGxcclxubGV0IHNhdmUgPSBudWxsXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChtPT5tLk9iamVjdFN0b3JhZ2UpXHJcbi50aGVuKGxvY2FsU3RvcmFnZU1vZHVsZSA9PiB7XHJcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcclxuICAgIHNhdmUgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIiwgYnRvYShKU09OLnN0cmluZ2lmeShrZXkpKSlcclxuICAgIH1cclxuICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBzYXZlKClcclxuICAgIH0sIDEwMDAwMCk7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IHZhbCA9IHNhZmVKU09OUGFyc2UoYXRvYihsb2NhbFN0b3JhZ2UuZ2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIpKSlcclxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlS2V5KClcclxuICAgICAgICAgICAgc2F2ZSgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBrZXkgPSB2YWxcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9XHJcbn0pXHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xyXG4gICAga2V5ID0gW2NyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJiYXNlNjRcIiksIGNyeXB0by5yYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJiYXNlNjRcIildXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNhZmVKU09OUGFyc2UoanNvbil7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gbmV3IEVycm9yKGUpIDogZVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoXCJhZXMtMjU2LWNiY1wiLCBCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpKVxyXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xyXG4gICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWQudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIFwie31cIlxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcclxuICAgIGxldCBhcmdzID0gW0J1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIildXHJcbiAgICBcclxuICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgLi4uYXJncyk7XHJcbiAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhLCBcInV0ZjhcIikpO1xyXG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZyhcImJhc2U2NFwiKVxyXG59IiwiaW1wb3J0IHtiZHBsdWdpbkVycm9ycywgcGx1Z2luQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5zfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNsYXNzIFBsdWdpbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5Nb2R1bGUgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyO31cclxufVxyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2lucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMubG9hZFBsdWdpbkRhdGEoKTtcclxuICAgIGJkcGx1Z2luRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFBsdWdpbnMoKSkpO1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcGx1Z2luLCBuYW1lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xyXG4gICAgICAgICAgICBuYW1lID0gcGx1Z2luLmdldE5hbWUoKTtcclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIGxvYWRlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcImxvYWQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbbmFtZV0pIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAocGx1Z2luQ29va2llW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XHJcbiAgICAgICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcclxuXHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLm9uKFwiZGlkLW5hdmlnYXRlLWluLXBhZ2VcIiwgdGhpcy5jaGFubmVsU3dpdGNoLmJpbmQodGhpcykpO1xyXG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0YXJ0UGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0YXJ0ZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xyXG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgcGx1Z2luICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0b3BQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdG9wKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RvcHBlZC5gKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCkgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xyXG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xyXG4gICAgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcclxuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XHJcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XHJcbiAgICB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7XHJcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4pO1xyXG4gICAgZWxzZSB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4pO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInBsdWdpblwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gKGNvbnNvbGUubG9nKHAuZmlsZW5hbWUsIGZpbGVuYW1lKSkgfHwgcC5maWxlbmFtZSA9PSBmaWxlbmFtZSkucGx1Z2luO1xyXG4gICAgdHJ5IHsgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO31cclxuICAgIGNhdGNoIChlcnIpIHtpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyXX0pO31cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tbG9hZGVkXCIsIHBsdWdpbi5nZXROYW1lKCkpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51bmxvYWRQbHVnaW4gPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XHJcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xyXG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XHJcbiAgICBkZWxldGUgYmRwbHVnaW5zW3BsdWdpbl07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tdW5sb2FkZWRcIiwgcGx1Z2luKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgdGhpcy51bmxvYWRQbHVnaW4oYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZU9yTmFtZSk7XHJcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xyXG4gICAgY29uc3QgZW5hYmxlZCA9IHBsdWdpbkNvb2tpZVtwbHVnaW5dO1xyXG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHRydWUpO1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIGlmIChiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCAmJiB0eXBlb2YoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQoKTtcclxuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tcmVsb2FkZWRcIiwgcGx1Z2luKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkUGx1Z2luKG5hbWUpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZpbGVuYW1lT3JOYW1lKTtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZ1bGxQYXRoKTtcclxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlUGx1Z2luTGlzdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRQbHVnaW4obmFtZSk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiKTtcclxuICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luQ29va2llLCBzYXZlZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnNhdmVQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInBsdWdpbnNcIiwgcGx1Z2luQ29va2llKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubmV3TWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcclxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25NZXNzYWdlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uTWVzc2FnZSgpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uTWVzc2FnZSBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmNoYW5uZWxTd2l0Y2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uU3dpdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uU3dpdGNoKCk7IH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yYXdPYnNlcnZlciA9IGZ1bmN0aW9uKGUpIHtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcclxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIoZSk7IH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbk1vZHVsZSgpOyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBWMkNfUHVibGljU2VydmVycyBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzXCI7XHJcbmltcG9ydCBMYXllciBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9sYXllclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1B1YmxpY1NlcnZlcnMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbiA9IHRoaXMuX2FwcGVuZEJ1dHRvbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5WMl9QdWJsaWNTZXJ2ZXJzID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChMYXllciwge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCIsIGlkOiBcInB1YnNsYXllclwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QdWJsaWNTZXJ2ZXJzLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHVic2xheWVycm9vdFwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcnNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllcnMgJiYgZS5sYXllcilbMF0ubGF5ZXJzLnNwbGl0KFwiIFwiKVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBsYXllcnMgPSBET00ucXVlcnkoXCIubGF5ZXJzLCAuXCIrY2xhc3NOYW1lTGF5ZXJzKTtcclxuICAgICAgICBpZiAoIWxheWVycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGxheWVycy5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoXCI8ZGl2IGlkPSdwdWJzbGF5ZXJyb290Jz5cIikpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCBidG4gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1saVwiIGNsYXNzPVwiJHtCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbX1cIj5gKTtcclxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIGJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1idXR0b25cIiBjbGFzcz1cIiR7XCJ3cmFwcGVyLTI1ZVZJbiBcIiArIEJEVjIuZ3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+cHVibGljPC9kaXY+YCk7XHJcbiAgICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHt0aGlzLnJlbmRlcigpO30pO1xyXG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xyXG4gICAgICAgIHJldHVybiBidG47XHJcbiAgICB9XHJcblxyXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lclxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIFV0aWxzLnJlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRvd25sb2FkUHJvZ3Jlc3MgJiYgZS50dXRvcmlhbENvbnRhaW5lcilbMF0udHV0b3JpYWxDb250YWluZXIpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGlmIChET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gRE9NLnF1ZXJ5KGBkaXYuJHtjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lcn0gPiBkaXZgKTtcclxuICAgICAgICBET00uYWZ0ZXIoZ3VpbGRzLCB0aGlzLmJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQnV0dG9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3QgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk5hdmlnYWJsZUd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3RPbGQgPSB3ZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBpZiAoIUd1aWxkTGlzdCAmJiAhR3VpbGRMaXN0T2xkKSBVdGlscy53YXJuKFwiUHVibGljU2VydmVyXCIsIFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkTGlzdCA/IEd1aWxkTGlzdCA6IEd1aWxkTGlzdE9sZC5wcm90b3R5cGUsIEd1aWxkTGlzdCA/IFwiZGVmYXVsdFwiIDogXCJyZW5kZXJcIiwge2FmdGVyOiB0aGlzLl9hcHBlbmRCdXR0b259KTtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVCdXR0b24oKSB7XHJcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZ3VpbGRQYXRjaDtcclxuICAgICAgICBET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCB7c2V0dGluZ3MsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc1JQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFNpZGViYXJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgY29sb3JlZFRleHQgZnJvbSBcIi4vY29sb3JlZFRleHRcIjtcclxuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IHB1YmxpY1NlcnZlcnNNb2R1bGUgZnJvbSBcIi4vcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgdm9pY2VNb2RlIGZyb20gXCIuL3ZvaWNlTW9kZVwiO1xyXG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL2NsYXNzTm9ybWFsaXplclwiO1xyXG5pbXBvcnQgZE1vZGUgZnJvbSBcIi4vZGV2TW9kZVwiO1xyXG5cclxuaW1wb3J0IFNlY3Rpb25lZFNldHRpbmdzUGFuZWwgZnJvbSBcIi4uL3VpL3NlY3Rpb25lZFNldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XHJcbmltcG9ydCBDYXJkTGlzdCBmcm9tIFwiLi4vdWkvYWRkb25saXN0XCI7XHJcbmltcG9ydCBWMkNfUHJlc2VuY2VTZXR0aW5ncyBmcm9tIFwiLi4vdWkvcHJlc2VuY2VTZXR0aW5nc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xyXG5pbXBvcnQgVjJDX0FjY291bnRJbmZvcyBmcm9tIFwiLi4vdWkvQWNjb3VudEluZm9zXCI7XHJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xyXG5pbXBvcnQgQW50aUFkRE0gZnJvbSBcIi4vQW50aUFkRE1cIjtcclxuaW1wb3J0IGJsdXJQcml2YXRlIGZyb20gXCIuL2JsdXJQcml2YXRlXCI7XHJcbmltcG9ydCBkaXNhYmxlVHlwaW5nIGZyb20gXCIuL2Rpc2FibGVUeXBpbmdcIjtcclxuaW1wb3J0IEFwaVByZXZpZXcgZnJvbSBcIi4uL3VpL0FwaVByZXZpZXdcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi4vdWkvc3dpdGNoXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4uL3VpL21hcmdpbnRvcFwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IHRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgSGlzdG9yeSBmcm9tIFwiLi4vdWkvaWNvbnMvaGlzdG9yeVwiO1xyXG5cclxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2lkZWJhckNvbXBvbmVudHMgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5TZXBhcmF0b3IgJiYgZS5IZWFkZXIgJiYgZS5JdGVtKVxyXG5cclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dCdXR0b24gPSBSZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJDaGFuZ2Vsb2dcIn0sIFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtmbG9hdDogXCJyaWdodFwiLCBjdXJzb3I6IFwicG9pbnRlclwifSwgY2xhc3NOYW1lOiBcImJkLWNoYW5nZWxvZy1idXR0b25cIiwgb25DbGljazogKCkgPT4ge1V0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO319LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcclxuICAgICAgICAgICAgY2hpbGRyZW46IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiQmFuZGFnZWQgQkRcIiwgY2hhbmdlbG9nQnV0dG9uKSxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiByZW5kZXJlZFxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzID0gdGhpcy51cGRhdGVTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2lkZWJhciA9IG5ldyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudHMoKVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ29tcG9uZW50cygpe1xyXG4gICAgICAgIC8qKiBMaWdodGNvcmQgKi9cclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJzdGF0dXNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLlByZXNlbmNlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImFjY291bnRpbmZvXCIsIG1ha2VDb21wb25lbnQodGhpcy5BY2NvdW50SW5mb3NDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxyXG5cclxuICAgICAgICAvKiBCYW5kYWdlZCBCRCAqL1xyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQkRTaWRlYmFySGVhZGVyKCkucmVuZGVyKClcclxuICAgICAgICB9KSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImN1c3RvbWNzc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuY3VzdG9tQ3NzQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInBsdWdpbnNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLnJlbmRlckFkZG9uUGFuZShcInBsdWdpbnNcIikpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyLFxyXG4gICAgICAgICAgICBjbGFzc1NpZGViYXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIuc3BsaXQoXCIgXCIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBzaWRlYmFyID0gRE9NLnF1ZXJ5KFwiLlwiK2NsYXNzTmFtZUxheWVyK1wiIC5cIitjbGFzc1NpZGViYXIuc3RhbmRhcmRTaWRlYmFyVmlldy5zcGxpdChcIiBcIilbMF0rXCIsIC5cIitjbGFzc05hbWVMYXllcitcIiAudWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCIpO1xyXG4gICAgICAgIGlmICghc2lkZWJhcikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXNldHRpbmdzcGFuZS1jb250YWluZXJcIiBjbGFzcz1cIiR7Y2xhc3NTaWRlYmFyLmNvbnRlbnRSZWdpb259IGNvbnRlbnQtcmVnaW9uXCI+YCk7XHJcbiAgICAgICAgc2lkZWJhci5hcHBlbmQocm9vdCk7XHJcblxyXG4gICAgICAgIFV0aWxzLm9uUmVtb3ZlZChyb290LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShyb290KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29yZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaWdodGNvcmRTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwic3RhdHVzXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1zZ0xvZ1NldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwibXNnbG9nXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3MoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7fVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQpIHtcclxuICAgICAgICBzZXR0aW5nc0Nvb2tpZVtpZF0gPSBlbmFibGVkO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2Ugdm9pY2VNb2RlLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZWQgJiYgaWQgPT0gXCJiZGEtZ3MtNlwiKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgY29sb3JlZFRleHQucmVtb3ZlQ29sb3JlZFRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSBDbGFzc05vcm1hbGl6ZXIuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy01XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xyXG4gICAgICAgICAgICBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIG51bGwpO1xyXG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy04XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKmlmIChpZCA9PT0gXCJyZWFjdERldlRvb2xzXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlYWN0RGV2VG9vbHMuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSByZWFjdERldlRvb2xzLnN0b3AoKTtcclxuICAgICAgICB9Ki9cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgICAgICBlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKClcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXHJcbiAgICAgICAgICAgICAgICBpZihzZXR0aW5nc1N0b3JlICYmICFzZXR0aW5nc1N0b3JlLmRlZmF1bHQuc2hvd0N1cnJlbnRHYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncylbMF0uZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBDdXN0b21SaWNoUHJlc2VuY2UuZGlzYWJsZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpXHJcbiAgICAgICAgICAgIGVsc2UgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcChmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC00XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNlwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUeXBpbmcuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHlwaW5nLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcclxuICAgICAgICAvL2lmIChzZXR0aW5nc0Nvb2tpZS5yZWFjdERldlRvb2xzKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiXSkgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNFwiXSkgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNlwiXSkgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIHtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFNldHRpbmdzKCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyU2lkZWJhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyLnJlbmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcmVDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uZWRTZXR0aW5nc1BhbmVsLCB7a2V5OiBcImNzcGFuZWxcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc30pXHJcbiAgICB9XHJcblxyXG4gICAgbGlnaHRjb3JkQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRjb3JkU2V0dGluZ3MubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIChpID09PSAwID8gbnVsbCA6IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChNYXJnaW5Ub3ApKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHNlY3Rpb24udGl0bGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGlkLCBjaGVja2VkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSksIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU2hvdWxkIHJlbGF1bmNoXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHJlbW90ZS5wcm9jZXNzLmFyZ3Yuc2xpY2UoMSkuY29uY2F0KFtcIi0tZGlzYWJsZS1iZXR0ZXJkaXNjb3JkXCJdKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5xdWl0KClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlXHJcbiAgICAgICAgICAgIH0sIFwiUmVsYXVuY2ggd2l0aG91dCBCZXR0ZXJEaXNjb3JkXCIpXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIFByZXNlbmNlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1ByZXNlbmNlU2V0dGluZ3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxwcGFubmVsXCIsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBcclxuICAgICAgICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQWNjb3VudEluZm9zQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xyXG4gICAgICAgICAgICBrZXk6IFwibGFwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQXBpUHJldmlld0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFwaVByZXZpZXcsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGlwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tQ3NzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJBZGRvblBhbmUodHlwZSkge1xyXG4gICAgICAgIC8vIEkga25vdyB0aGlzIHNob3VsZG4ndCBiZSBoZXJlLCBidXQgd2hlbiBpdCBpc24ndCxcclxuICAgICAgICAvLyBSZWFjdCByZWZ1c2VzIHRvIGNoYW5nZSB0aGUgYnV0dG9uIHdoZW4gZ29pbmdcclxuICAgICAgICAvLyBiZXR3ZWVuIHBsdWdpbnMgYW5kIHRoZW1lcyBwYWdlLi4uIHNvbWV0aGluZ1xyXG4gICAgICAgIC8vIHRvIGRlYnVnIGxhdGVyLlxyXG4gICAgICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyKCkge3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO31cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICAgICAgICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwge3R5cGV9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FyZExpc3QsIHt0eXBlfSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vIG5lZWQgdG8gZXhwb3J0IHNldHRpbmdzUGFuZWwgb24gd2luZG93XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWFrZUNvbXBvbmVudChjaGlsZHJlbil7XHJcbiAgICBjbGFzcyBTZXR0aW5nQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU2V0dGluZ0NvbXBvbmVudFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnBhbmVscyA9IHt9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIocGFuZWwsIGNvbXBvbmVudCl7XHJcbiAgICAgICAgdGhpcy5wYW5lbHNbcGFuZWxdID0gY29tcG9uZW50XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50KHBhbmVsKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbHNbcGFuZWxdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkJldHRlckRpc2NvcmQgU2V0dGluZ3NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImNvcmVcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJQbHVnaW5zXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJwbHVnaW5zXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlbWVzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJ0aGVtZXNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJDdXN0b20gQ1NTXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjdXN0b21jc3NcIlxyXG4gICAgICAgIH1dO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ2l0ZW1zKCl7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIiwgXHJcbiAgICAgICAgICAgICAgICBpZDogXCJzdGF0dXNcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYWNjb3VudGluZm9cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICAgIGlmKHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSlpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgdGV4dDogXCJBcGkgQ29tcG9uZW50cyBQcmV2aWV3XCIsXHJcbiAgICAgICAgICAgIGlkOiBcImxjYXBpcHJldmlld1wiXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gaXRlbXNcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnRoaXMuTENpdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KFwiQkRDaGFuZ2Vsb2dUaXRsZVwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbFNpZGViYXIgb24gd2luZG93XHJcbiAqLyIsImltcG9ydCB7YmR0aGVtZUVycm9ycywgdGhlbWVDb29raWUsIHNldHRpbmdzQ29va2llLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNsYXNzIFRoZW1lTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlRoZW1lTW9kdWxlID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyO31cclxufVxyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxvYWRUaGVtZURhdGEoKTtcclxuICAgIGJkdGhlbWVFcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkVGhlbWVzKCkpKTtcclxuICAgIGNvbnN0IHRoZW1lcyA9IE9iamVjdC5rZXlzKGJkdGhlbWVzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbdGhlbWVzW2ldXTtcclxuICAgICAgICBpZiAoIXRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSB0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG5cclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHRoZW1lIGluIHRoZW1lQ29va2llKSB7XHJcbiAgICAgICAgaWYgKCFiZHRoZW1lc1t0aGVtZV0pIGRlbGV0ZSB0aGVtZUNvb2tpZVt0aGVtZV07XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBhcHBsaWVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gZGlzYWJsZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlVGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUpO1xyXG4gICAgZWxzZSB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC4gSXQgbWF5IG5vdCBoYXZlIGJlZW4gbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZSk7XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtbG9hZGVkXCIsIHRoZW1lLm5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVubG9hZFRoZW1lID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBkZWxldGUgYmR0aGVtZXNbdGhlbWVdO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXVubG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgdGhpcy51bmxvYWRUaGVtZShiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm4gdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWVPck5hbWUpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpLCB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXJlbG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51cGRhdGVUaGVtZUxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInRoZW1lXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZURhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInRoZW1lc1wiKTtcclxuICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhlbWVDb29raWUsIHNhdmVkKTtcclxuICAgIH1cclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5zYXZlVGhlbWVEYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb24sIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzIHtcclxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cclxuICAgIHN0YXRpYyBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9XHJcbiAgICAvKiogRG9jdW1lbnQvd2luZG93IGhlaWdodCAqL1xyXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KSB7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHN0cmlwQk9NKGNvbnRlbnQpIHtcclxuICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcclxuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhLnNwbGl0KFwiIFwiKVswXStcIiB0ZXh0YXJlYVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xyXG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XHJcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSAwO1xyXG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydFRleHRcIiwgZmFsc2UsIHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBsb2cobW9kdWxlTmFtZSwgbWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjRThBNDAwOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjRThBNDAwO1wiLCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZXJyKG1vZHVsZU5hbWUsIG1lc3NhZ2UsIGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogcmVkO1wiLCBcIlwiKTtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZChcIiVjRXJyb3I6IFwiICsgZXJyb3IubWVzc2FnZSwgXCJjb2xvcjogcmVkO1wiKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZShzKSB7XHJcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHRlc3RKU09OKGRhdGEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0VtcHR5KG9iaikge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiAoLi4ucGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiBtZXRob2QoLi4ucGFyYW1zKTtcdH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXSkge1xyXG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xyXG4gICAgICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xyXG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlXHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgLy93aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcclxuICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlIC8vIHRoaXMgYWxsb3cgdG8gbW9ua2V5cGF0Y2ggbW9yZSB0aGFuIG9uZSB0aW1lLlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZihjYW5jZWxlZCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcclxuICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3VtZW50czogYXJndW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcclxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsTWV0aG9kOiAoKSA9PiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5vcmlnaW5hbE1ldGhvZC5hcHBseShkYXRhLnRoaXNPYmplY3QsIGRhdGEubWV0aG9kQXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJldCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVtcFJldCAhPT0gdW5kZWZpbmVkKSBkYXRhLnJldHVyblZhbHVlID0gdGVtcFJldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYWZ0ZXIsIFwiYGFmdGVyYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19tb25rZXlQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XHJcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcclxuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcclxuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge3JldHVybiBvcmlnTWV0aG9kLnRvU3RyaW5nKCk7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1ttXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgvXFxzP1xcLlxccz8vKS5yZWR1Y2UoZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqW3Byb3BdO1xyXG4gICAgICAgIH0sIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aW1lb3V0IEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhciAmJiBlLmhhc05vdGljZSlbMF0uc2lkZWJhci5zcGxpdChcIiBcIilbOV0rXCIgKyBkaXZcIikgfHwgbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgbWVtYmVybGlzdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLm1lbWJlcnNXcmFwKVswXS5tZW1iZXJzV3JhcCkgOiBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJmb3JtXCIpIDogbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMzEwO1xyXG4gICAgICAgICAgICBjb25zdCByaWdodCA9IG1lbWJlcmxpc3QgPyBtZW1iZXJsaXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiAwO1xyXG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0ID8gcmlnaHQgLSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IFV0aWxzLnNjcmVlbldpZHRoIC0gbGVmdCAtIDI0MDtcclxuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gZm9ybSA/IGZvcm0ub2Zmc2V0SGVpZ2h0IDogODA7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RzXCIpO1xyXG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIGxlZnQgKyBcInB4XCIpO1xyXG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XHJcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20gKyBcInB4XCIpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmRDaGlsZCh0b2FzdFdyYXBwZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7dHlwZSA9IFwiXCIsIGljb24gPSB0cnVlLCB0aW1lb3V0ID0gMzAwMH0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHRvYXN0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcclxuICAgICAgICBpZiAodHlwZSkgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJ0b2FzdC1cIiArIHR5cGUpO1xyXG4gICAgICAgIGlmICh0eXBlICYmIGljb24pIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiaWNvblwiKTtcclxuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5hcHBlbmRDaGlsZCh0b2FzdEVsZW0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdG9hc3RFbGVtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJkLXRvYXN0cyAuYmQtdG9hc3RcIikubGVuZ3RoKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYWxlcnQodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXHJcbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXHJcbiAgICAgICAgbGV0IGZvb3RlcjJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5mb2N1c0xvY2spWzBdXHJcbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBmYWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcclxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcclxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcclxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcclxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcclxuICAgICAgICBjb25zdCBjbG9zaW5nTGlzdGVuZXJzID0gW11cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25DbG9zZTogKGxpc3RlbmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMgPSBbXSwgdGhlbWVzOiB0aGVtZUVycm9ycyA9IFtdfSkge1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxyXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxyXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj48ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250ZW50IEVycm9yczwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXIgVE9QXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1pdGVtXCI+VGhlbWVzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj5OYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj5FcnJvcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xyXG4gICAgXHJcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVUYWIoZXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj4ke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+PGEgY2xhc3M9XCJlcnJvci1saW5rXCIgaHJlZj1cIlwiPiR7ZXJyLmVycm9yID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBcIlwifTwvYT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYEVycm9yIGRldGFpbHMgZm9yICR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfS5gLCBlcnIuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHRhYnMgPSBbZ2VuZXJhdGVUYWIocGx1Z2luRXJyb3JzKSwgZ2VuZXJhdGVUYWIodGhlbWVFcnJvcnMpXTtcclxuICAgIFxyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBET00ucmVtb3ZlQ2xhc3Moc2VsZWN0ZWQsIFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhlLnRhcmdldCwgXCJzZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xyXG4gICAgICAgICAgICBzY3JvbGxlci5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQodGFic1tET00uaW5kZXgoZS50YXJnZXQpXSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgXHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcclxuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW1cIikuY2xpY2soKTtcclxuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcclxuICAgICAgICBjb25zdCBDaGFuZ2Vsb2dDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJmaXhlZFwiLCBcImltcHJvdmVkXCIpO1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IEZsZXhDaGlsZCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiQ2hpbGRcIik7XHJcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJUYWdzXCIsIFwiZGVmYXVsdFwiKTtcclxuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgTWFya2Rvd25QYXJzZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImRlZmF1bHRSdWxlc1wiLCBcInBhcnNlXCIpO1xyXG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm47XHJcbiAgICBcclxuICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgIGltYWdlID0gXCJodHRwczovL3JlcG9zaXRvcnktaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMDU0NzM1MzcvOTU3YjU0ODAtN2MyNi0xMWU5LTg0MDEtNTBmYTgyMGNiYWU1XCIsIFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxyXG4gICAgICAgICAgICBjaGFuZ2VzID0gW10sIFxyXG4gICAgICAgICAgICB0aXRsZSA9IFwiQmFuZGFnZWRCRFwiLCBcclxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcclxuICAgICAgICAgICAgZm9vdGVyXHJcbiAgICAgICAgfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nSXRlbXMgPSBbY2UoXCJpbWdcIiwge3NyYzogaW1hZ2V9KV07XHJcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBjaGFuZ2VzW2NdO1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA/IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gOiBDaGFuZ2Vsb2dDbGFzc2VzLmFkZGVkO1xyXG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJoMVwiLCB7Y2xhc3NOYW1lOiBgJHt0eXBlfSAke21hcmdpbn1gLH0sIGVudHJ5LnRpdGxlKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XHJcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcclxuICAgICAgICAgICAgICAgIGNlKFRpdGxlcy5kZWZhdWx0LCB7dGFnOiBUaXRsZXMuVGFncy5INH0sIHRpdGxlKSxcclxuICAgICAgICAgICAgICAgIGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRCwgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmRhdGV9LCBzdWJ0aXRsZSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcclxuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcclxuICAgICAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLmpvaW5CRDIoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Rm9vdGVyID0gY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LCBmb290ZXIgPyBmb290ZXIgOiBkZWZhdWx0Rm9vdGVyKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxyXG4gICAgICAgICAgICAgICAgb25DbG9zZTogXyA9PiBfLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySGVhZGVyOiByZW5kZXJIZWFkZXIsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjaGFuZ2Vsb2dJdGVtc1xyXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGNvbnN0IE1hcmtkb3duID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTtcclxuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmtleSAmJiBtLmtleSgpID09IFwiY29uZmlybS1tb2RhbFwiKTtcclxuICAgICAgICBpZiAoIU1vZGFsU3RhY2sgfHwgIUNvbmZpcm1hdGlvbk1vZGFsIHx8ICFNYXJrZG93bikgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgZW1wdHlGdW5jdGlvbiA9ICgpID0+IHt9O1xyXG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0gPSBlbXB0eUZ1bmN0aW9uLCBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sIGNvbmZpcm1UZXh0ID0gXCJPa2F5XCIsIGNhbmNlbFRleHQgPSBcIkNhbmNlbFwiLCBkYW5nZXIgPSBmYWxzZSwga2V5ID0gdW5kZWZpbmVkfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb250ZW50KSkgY29udGVudCA9IFtjb250ZW50XTtcclxuICAgICAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YoYykgPT09IFwic3RyaW5nXCIgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFya2Rvd24sIG51bGwsIGMpIDogYyk7XHJcbiAgICAgICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChDb25maXJtYXRpb25Nb2RhbCwge1xyXG4gICAgICAgICAgICBoZWFkZXI6IHRpdGxlLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogY29udGVudCxcclxuICAgICAgICAgICAgcmVkOiBkYW5nZXIsXHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcclxuICAgICAgICAgICAgb25Db25maXJtOiBvbkNvbmZpcm0sXHJcbiAgICAgICAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbFxyXG4gICAgICAgIH0sIGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlbW92ZURhKGNsYXNzTmFtZSl7XHJcbiAgICAgICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXHJcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcclxuICAgIH1cclxufVxyXG5cclxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5VdGlscyA9IFV0aWxzIiwiaW1wb3J0IHtzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLldlYnBhY2tNb2R1bGVzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5yZW1vdmUgJiYgdGhlTW9kdWxlLnNldCAmJiB0aGVNb2R1bGUuY2xlYXIgJiYgdGhlTW9kdWxlLmdldCAmJiAhdGhlTW9kdWxlLnNvcnQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5nZXRUb2tlbiB8fCB0aGVNb2R1bGUuZ2V0RW1haWwgfHwgdGhlTW9kdWxlLnNob3dUb2tlbikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gdGhlTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhlTW9kdWxlLmdldFRva2VuICYmICF0aGVNb2R1bGUuZ2V0RW1haWwgJiYgIXRoZU1vZHVsZS5zaG93VG9rZW4pIHJldHVybiB0aGVNb2R1bGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0aGVNb2R1bGUsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJnZXRUb2tlblwiIHx8IHByb3AgPT09IFwiZ2V0RW1haWxcIiB8fCBwcm9wID09PSBcInNob3dUb2tlblwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIGZ1bmMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRUb2tlblwiKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0RW1haWxcIikgcmV0dXJuICgpID0+IFwicHVwcGV0MTExMTJAZ21haWwuY29tXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIpIHJldHVybiAoKSA9PiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiKSByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZnVuY107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gcHJvdGVjdChtLmRlZmF1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLmRlZmF1bHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlcztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMgPSAocHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKHByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XHJcbiAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbCA9IHtcclxuICAgICAgICAgICAgcmVhY3Q6IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJDb21wb25lbnRcIiwgXCJQdXJlQ29tcG9uZW50XCIsIFwiQ2hpbGRyZW5cIiwgXCJjcmVhdGVFbGVtZW50XCIsIFwiY2xvbmVFbGVtZW50XCJdKSxcclxuICAgICAgICAgICAgcmVhY3REb206IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJmaW5kRE9NTm9kZVwiXSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGUgPT4gZVtPYmplY3Qua2V5cyhlKS5maW5kKGsgPT4gay5zdGFydHNXaXRoKFwiX19yZWFjdEludGVybmFsSW5zdGFuY2VcIikpXTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgam9pbkJEMSgpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjBUbWZvNVpiT1JDUnFiQWRcIik7fVxyXG4gICAgbGVhdmVCRDEoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIpO31cclxuXHJcbiAgICBqb2luQkQyKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMkhTY204alwiKTt9XHJcbiAgICBsZWF2ZUJEMigpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiMjgwODA2NDcyOTI4MTk4NjU2XCIpO31cclxuXHJcbiAgICBqb2luTEMoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCI3ZUZmZjJBXCIpO31cclxuICAgIGxlYXZlTEMoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjcwNTkwODM1MDIxODY2NjExN1wiKTt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3QoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3Q7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3QoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3Q7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3QuQ29tcG9uZW50O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxyXG5cclxuICAgIGdldCBhbmNob3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiXSkgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07fVxyXG4gICAgZ2V0IHNsYXRlRWRpdG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNsYXRlVGV4dEFyZWFcIl0pO31cclxuICAgIGdldCBtZXNzYWdlQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm1lc3NhZ2VcIiwgXCJjb250YWluZXJDb3p5XCJdKTt9XHJcbiAgICBnZXQgZ3VpbGRDbGFzc2VzKCkge1xyXG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLndyYXBwZXIgJiYgZS51bnJlYWRNZW50aW9uc0JhcilbMF07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ3VpbGRzRXJyb3IgJiYgZS5zZWxlY3RlZClbMF1cclxuICAgICAgICBjb25zdCBwaWxsID0gQkRNb2R1bGVzLmdldChlID0+IGUuYmxvYkNvbnRhaW5lcilbMF1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcclxuXHR9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcbiAgICBnZXQgTWVzc2FnZUNvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJNZXNzYWdlXCIpO31cclxuICAgIGdldCBUaW1lRm9ybWF0dGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZGF0ZUZvcm1hdFwiXSk7fVxyXG4gICAgZ2V0IFRvb2x0aXBXcmFwcGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTt9XHJcbiAgICBnZXQgTmF0aXZlTW9kdWxlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2V0QmFkZ2VcIl0pO31cclxuICAgIGdldCBJbnZpdGVBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTt9XHJcbiAgICBnZXQgR3VpbGRBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibGVhdmVHdWlsZFwiXSk7fVxyXG4gICAgZ2V0IFRvb2x0aXBzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmhpZGUgJiYgbS5zaG93ICYmICFtLnNlYXJjaCAmJiAhbS5zdWJtaXQgJiYgIW0uc2VhcmNoICYmICFtLmFjdGl2YXRlUmFnaW5nRGVtb24gJiYgIW0uZGlzbWlzcyk7fVxyXG4gICAgZ2V0IEtleUdlbmVyYXRvcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS50b1N0cmluZyAmJiAvXCJiaW5hcnlcIi8udGVzdChtLnRvU3RyaW5nKCkpKTt9XHJcbiAgICBnZXQgTGF5ZXJTdGFjaygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInBvcExheWVyXCJdKTt9XHJcbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q3VycmVudFVzZXJcIl0pO31cclxuICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRDaGFubmVsXCJdKTt9XHJcbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJvcGVuUHJpdmF0ZUNoYW5uZWxcIl0pO31cclxuICAgIGdldCBQcml2YXRlQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZWxlY3RQcml2YXRlQ2hhbm5lbFwiXSk7fVxyXG5cclxuICAgIG9wZW5ETSh1c2VySWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmSWQgPSB0aGlzLlVzZXJTdG9yZS5nZXRDdXJyZW50VXNlcigpLmlkO1xyXG4gICAgICAgIGlmIChzZWxmSWQgPT0gdXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcHJpdmF0ZUNoYW5uZWxJZCA9IHRoaXMuQ2hhbm5lbFN0b3JlLmdldERNRnJvbVVzZXJJZCh1c2VySWQpO1xyXG4gICAgICAgIGlmIChwcml2YXRlQ2hhbm5lbElkKSByZXR1cm4gdGhpcy5Qcml2YXRlQ2hhbm5lbEFjdGlvbnMuc2VsZWN0UHJpdmF0ZUNoYW5uZWwocHJpdmF0ZUNoYW5uZWxJZCk7XHJcbiAgICAgICAgdGhpcy5DaGFubmVsQWN0aW9ucy5vcGVuUHJpdmF0ZUNoYW5uZWwoc2VsZklkLCB1c2VySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlU2V0dGluZ3MoY2F0KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdCAmJiBzZXR0aW5nLmltcGxlbWVudGVkICYmICFzZXR0aW5nLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2V0dGluZyk7XHJcbiAgICAgICAgICAgIH0gcmV0dXJuIGFycjtcclxuICAgICAgICB9LCBbXSk7XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IHN0eWxlID0gYFxyXG4gICAgLmNvbnRhaW5lci0yUmwwMXUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5jaGF0LTNiUnh4dSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnNpZGViYXItMks4cEZoIHtcclxuICAgICAgICBmbGV4LWdyb3c6IDEhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFZvaWNlTW9kZSB7XHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJWb2ljZU1vZGVcIiwgc3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiVm9pY2VNb2RlXCIpO1xyXG4gICAgfVxyXG59OyIsImNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbmRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbmRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcbmNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBtLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChtLmRlZmF1bHQpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKG0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2R1bGVzO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEJ5UHJvcHMgPSAoLi4ucHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKC4uLnByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxubGV0IG1vZCA9ICB7ZmluZCwgZmluZEFsbCwgZmluZEJ5UHJvcHMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuZXhwb3J0IGRlZmF1bHQgbW9kXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuV2VicGFja01vZHVsZXMgPSBtb2QiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiXHJcblxyXG5sZXQgcHJvZmlsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQub3BlbiAmJiBlLmRlZmF1bHQuZmV0Y2hNdXR1YWxGcmllbmRzKVswXVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRjb3JkVXNlckJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICBkZWxldGUgcHJvcHMuaHJlZi50YXJnZXRcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cocHJvcHMpXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxwcm9wcy5BbmNob3IgaHJlZj17XCIvdXNlcnMvXCIrcHJvcHMudXNlci5pZH0gey4uLnByb3BzLmhyZWZ9IG9uQ2xpY2s9eyhldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgaWYoIXByb2ZpbE1vZHVsZSlwcm9maWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5vcGVuICYmIGUuZGVmYXVsdC5mZXRjaE11dHVhbEZyaWVuZHMpWzBdXHJcbiAgICAgICAgICAgICAgICBwcm9maWxNb2R1bGUuZGVmYXVsdC5vcGVuKHByb3BzLnVzZXIuaWQpXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9wcm9wcy5BbmNob3I+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1Z0h1bnRlckJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzEuMyAyOS41XCIgey4uLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi44IDFzMTIgOC4yIDcuNCAxOS43UzE2LjYgMjkgMjAgMjUuNnMtNC01LjYtOC43LTEwTDIyLjggMVwiIGZpbGw9XCJyZ2JhKDIyNyw2LDE5LC42KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBDaXJjdXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICg8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgIHsuLi50aGlzLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0REMkU0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zMyAzM2EyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJsMS0xMmgyOGwxIDEyelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0VBNTk2RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMyAzNWMtLjc5Mi0xLjg3NS0xLjc1LTMuMjkxLTMuNDE3LTQuNjY2IDEuNzUtMS40NTkgNC41NDItNS41IDUuMjUtOC4yOTJzMi43NSA4LjEyNSAyLjA0MiAxMC42MjVTMTMgMzUgMTMgMzV6bTEwLjMwMyAwYy43OTEtMS44NzUgMS43NS0zLjI5MSAzLjQxNi00LjY2Ni0xLjc1LTEuNDU5LTQuNTQxLTUuNS01LjI1LTguMjkyLS43MDctMi43OTItMi43NSA4LjEyNS0yLjA0IDEwLjYyNS43MDggMi41IDMuODc0IDIuMzMzIDMuODc0IDIuMzMzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0JFMTkzMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjcyOCAyNC4yNjNBMi41IDIuNSAwIDAwOCAyMi41YzAtLjU2NS0uMTk1LTEuMDgxLS41MTEtMS41SDRsLS4yNzIgMy4yNjN6bTI4LjU0NCAwTDMyIDIxaC0zLjQ4OUEyLjQ4MiAyLjQ4MiAwIDAwMjggMjIuNWEyLjUgMi41IDAgMDA0LjI3MiAxLjc2M3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjJcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyNlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIzIDM1SDEzczItNiAyLTEzaDZjMCA3IDIgMTMgMiAxM3pNMTcgMmgydjdoLTJ6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzU1QUNFRVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOC44MzguMjA2QzE3LjY2Ny4wNDIgMTcgLjMxOCAxNyAxLjQxOHYxYzAgMS4xLjg2NSAxLjc1MyAxLjkyMyAxLjQ1MWw1LjE1NC0uOTAxYzEuNzE1LS4zNDMgMS41NDgtMS41OTMuMDg1LTEuODg0TDE4LjgzOC4yMDZ6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQ0NENkREXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDZsLS4wODEuMTIzQzEwLjkzOCAxNi45ODEgMyAxNS4wMTUgMyAxOXYyLjVhMi41IDIuNSAwIDAwNC45NS41SDEyYTIgMiAwIDAwNCAwaDRhMiAyIDAgMDA0IDBoNC4wNWEyLjUgMi41IDAgMDA0Ljk1LS41VjE5YzAtNC04LTItMTUtMTN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8ZyBmaWxsPVwiI0Y1RjhGQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuOTQ4IDYuMDc4bC0uMDMuMDQ1QzE3LjEzMiAxMS42MTkgMTAuODExIDE2LjEyNiA4IDE4djRhMiAyIDAgMDA0IDB2LTRjLjk4Mi0uOTgyIDUuODEzLTYuNzg3IDUuOTg0LTExLjczMi0uMDEtLjA2NC0uMDI3LS4xMjYtLjAzNi0uMTl6bS4wOC4zOThDMTguMzI0IDExLjM3NCAyMy4wMzEgMTcuMDMxIDI0IDE4djRhMiAyIDAgMDA0IDB2LTRjLTIuNzUtMS44MzMtOC45NTMtNi4xOS05Ljk3Mi0xMS41MjR6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuOTg0IDYuMjdDMTcuOTIyIDguMzQ2IDE3LjYwNiAxNi4zOTQgMTYgMTh2NGEyIDIgMCAwMDQgMHYtNGMtMS41NjQtMS41NjQtMS45MDUtOS4yNDEtMS45NzktMTEuNTU5LS4wMTEtLjA1Ny0uMDI3LS4xMTMtLjAzNy0uMTcxelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZExvZ28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2OCAxNjguNjlcIiB7Li4ucHJvcHN9IGhlaWdodD1cIjEwMCVcIiB3aWR0aD17cHJvcHMuc2l6ZX0+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2FcIiB4MT17NjYuN30geTE9ey00ODcuN30geDI9ezY2Ljd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2JcIiB4MT17MTAxLjd9IHkxPXstNDg3Ljd9IHgyPXsxMDEuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTIwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fY1wiIHgxPXs4NH0geTE9ey00MDh9IHgyPXs4NH0geTI9ey01NzYuNjl9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmZmZcIiBkPVwiTTE0LjkgMzUuM2gxMzkuMlYxMzNIMTQuOXpcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ni43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2EpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAxLjcgNzkuN2MtNS40IDAtOS44IDQuNy05LjggMTAuNXM0LjQgMTAuNSA5LjggMTAuNSA5LjgtNC43IDkuOC0xMC41LTQuNC0xMC41LTkuOC0xMC41elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDB2MTY4bDE2OCAuNjlWMHptMTExLjMgMTI0LjFzLTMuNC00LjEtNi4zLTcuN2MxMi42LTMuNSAxNy40LTExLjMgMTcuNC0xMS4zYTUyLjUyIDUyLjUyIDAgMDEtMTEuMSA1LjYgNjguNjMgNjguNjMgMCAwMS0zOC45IDQgNzAuMTIgNzAuMTIgMCAwMS0xNC4xLTQuMSA0OC44OCA0OC44OCAwIDAxLTcuMS0zLjNjLS4zLS4yLS42LS4zLS45LS41YS43Ni43NiAwIDAwLS40LS4yYy0xLjctMS0yLjYtMS42LTIuNi0xLjZzNC42IDcuNiAxNi44IDExLjJjLTIuOSAzLjYtNi40IDcuOS02LjQgNy45LTIxLjItLjYtMjkuMy0xNC41LTI5LjMtMTQuNSAwLTMwLjYgMTMuOC01NS40IDEzLjgtNTUuNCAxMy44LTEwLjMgMjYuOS0xMCAyNi45LTEwbDEgMS4xQzUyLjggNTAuMyA0NSA1Ny45IDQ1IDU3LjlhNTYuMiA1Ni4yIDAgMDE1LjctMi43IDcyLjE5IDcyLjE5IDAgMDEyMS44LTYgOC43NSA4Ljc1IDAgMDExLjYtLjIgODkuMSA4OS4xIDAgMDExOS40LS4yIDc4LjQ1IDc4LjQ1IDAgMDEyOC45IDkuMXMtNy41LTcuMi0yMy45LTEyLjFsMS4zLTEuNXMxMy4xLS4zIDI2LjkgMTBjMCAwIDEzLjggMjQuOCAxMy44IDU1LjQuMS0uMS04IDEzLjgtMjkuMiAxNC40elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYylcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3RcIil9XHJcbiAqL1xyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxubGV0IGNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxubGV0IHNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbmxldCBzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cclxuY29uc3QgR3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMpWzBdLmRlZmF1bHRcclxuY29uc3QgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UmVsYXRpb25zaGlwcylbMF0uZGVmYXVsdFxyXG5jb25zdCBzZXNzaW9uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0U2Vzc2lvbnMpWzBdLmRlZmF1bHRcclxuY29uc3QgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQWNjb3VudEluZm9zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlMiltYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG4gICAgICAgIGlmKCFjb2xvck1vZHVsZSljb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbiAgICAgICAgaWYoIXNpemVNb2R1bGUpc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIkFjY291bnQgSW5mb3NcIi8+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBQcm9maWxlXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0UHJvZmlsZVZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRpc3RpY3NcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTdGF0aXN0aWNzKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBTZXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFNlc3Npb25WYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0ubWFyZ2luQm90dG9tMjB9PjwvZGl2PlxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTZXNzaW9uVmFsdWUoKXtcclxuICAgICAgICBjb25zdCBzZXNzaW9uc1JhdyA9IHNlc3Npb25Nb2R1bGUuZ2V0U2Vzc2lvbnMoKVxyXG4gICAgICAgIGNvbnN0IHNlc3Npb25zID0gT2JqZWN0LmtleXMoc2Vzc2lvbnNSYXcpLmZpbHRlcihlID0+IGUgIT09IFwiYWxsXCIpLm1hcChlID0+IHNlc3Npb25zUmF3W2VdKVxyXG5cclxuICAgICAgICBpZihzZXNzaW9ucy5sZW5ndGggPT09IDApcmV0dXJuIFwiLSBObyBzZXNzaW9uIGRldGVjdGVkLiBQbGVhc2UgdHJ5IGluIGEgZmV3IHNlY29uZHNcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBzZXNzaW9ucy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBgKyBpZDogJHtlLnNlc3Npb25JZH1cclxuKyBvczogJHtlLmNsaWVudEluZm8ub3NbMF0udG9VcHBlckNhc2UoKStlLmNsaWVudEluZm8ub3Muc2xpY2UoMSl9XHJcbisgY2xpZW50OiAke2UuY2xpZW50SW5mby5jbGllbnR9XHJcbisgc3RhdHVzOiAke2Uuc3RhdHVzfVxyXG4rIGFjdGl2ZTogJHtlLmFjdGl2ZSA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbisgQWN0aXZpdGllczogJHtlLmFjdGl2aXRpZXMubGVuZ3RofWBcclxuICAgICAgICB9KS5qb2luKFwiXFxuXCIrXCItXCIucmVwZWF0KDM4KStcIlxcblwiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2ZpbGVWYWx1ZSgpe1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7RGF0ZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkQXQgPSB1c2VyLmNyZWF0ZWRBdFxyXG5cclxuICAgICAgICByZXR1cm4gYCsgVXNlcm5hbWU6ICR7dXNlci51c2VybmFtZX1cclxuKyBEaXNjcmltaW5hdG9yOiAke3VzZXIuZGlzY3JpbWluYXRvcn1cclxuKyBUYWc6ICR7dXNlci50YWd9XHJcbisgSUQ6ICR7dXNlci5pZH1cclxuKyBBdmF0YXI6ICR7dXNlci5hdmF0YXJ9XHJcbisgQXZhdGFyIFVSTDogaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXZhdGFycy8ke3VzZXIuaWR9LyR7dXNlci5hdmF0YXJ9LiR7dXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCJ9P3NpemU9NDA5NlxyXG4rIENyZWF0aW9uIERhdGU6ICR7KGNyZWF0ZWRBdC5nZXREYXRlKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0TW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldEZ1bGxZZWFyKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfSAke2NyZWF0ZWRBdC5nZXRIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfWggJHtjcmVhdGVkQXQuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfW1pbiAke2NyZWF0ZWRBdC5nZXRTZWNvbmRzKCl9c1xyXG4rIEZsYWdzOiAke3VzZXIuZmxhZ3N9XHJcbisgSGFzIE5pdHJvOiAke3VzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gRW1haWw6ICR7dXNlci5lbWFpbH1cclxuLSAyRkE6ICR7dXNlci5tZmFFbmFibGVkID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBIYXMgQmVlbiBPbiBNb2JpbGU6ICR7dXNlci5tb2JpbGUgPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIFBob25lOiAke3VzZXIucGhvbmUgfHwgXCJOb25lXCJ9XHJcbi0gVmVyaWZpZWQ6ICR7dXNlci52ZXJpZmllZH1gXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGlzdGljcygpe1xyXG5cclxuICAgICAgICBjb25zdCBndWlsZHMgPSBPYmplY3QudmFsdWVzKEd1aWxkTW9kdWxlLmdldEd1aWxkcygpKVxyXG4gICAgICAgIGNvbnN0IHJlbGF0aW9ucyA9IE9iamVjdC5rZXlzKHJlbGF0aW9uU2hpcE1vZHVsZS5nZXRSZWxhdGlvbnNoaXBzKCkpXHJcbiAgICAgICAgY29uc3QgZnJpZW5kcyA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNGcmllbmQoZSkpXHJcbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNCbG9ja2VkKGUpKVxyXG5cclxuICAgICAgICByZXR1cm4gYCsgU2VydmVyIENvdW50OiAke2d1aWxkcy5sZW5ndGh9IHNlcnZlcnNcclxuKyBSZWxhdGlvbnM6ICR7cmVsYXRpb25zLmxlbmd0aH0gcmVsYXRpb25zXHJcbisgRnJpZW5kcyBDb3VudDogJHtmcmllbmRzLmxlbmd0aH0gZnJpZW5kc1xyXG4tIEJsb2NrZWQgVXNlcnMgQ291bnQ6ICR7YmxvY2tlZC5sZW5ndGh9IGJsb2NrZWQgdXNlcnNgXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5sZXQgaGlnaHRsaWdodEpTID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGlnaGxpZ2h0KVswXVxyXG5sZXQgbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1lc3NhZ2VDb250ZW50KVswXVxyXG5cclxuY2xhc3MgQ29kZUNvbnRlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUxKW1lc3NhZ2VNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXVxyXG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMiltZXNzYWdlTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1lc3NhZ2VDb250ZW50KVswXVxyXG4gICAgICAgIGlmKCFzY3JvbGxiYXJNb2R1bGUxKXNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxyXG4gICAgICAgIGlmKCFoaWdodGxpZ2h0SlMpaGlnaHRsaWdodEpTID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGlnaGxpZ2h0KVswXVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YCR7bWVzc2FnZU1vZHVsZTEubWFya3VwfSAke21lc3NhZ2VNb2R1bGUyLm1lc3NhZ2VDb250ZW50fWB9PlxyXG4gICAgICAgICAgICA8cHJlPlxyXG4gICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9e2Ake3Njcm9sbGJhck1vZHVsZTEuc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gaGxqc2B9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBoaWdodGxpZ2h0SlMuaGlnaGxpZ2h0KHRoaXMucHJvcHMubGFuZ3VhZ2UsIHRoaXMucHJvcHMuY29udGVudCkudmFsdWV9fT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2NvZGU+XHJcbiAgICAgICAgICAgIDwvcHJlPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59IiwiLy8gR29vZCBsdWNrIHRvIHJlYWQgbXkgY29kZSwgRXZlbiBtZSBjYW4ndCByZWFkIGl0IHByb3Blcmx5LlxyXG5cclxuaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJmc1wiXHJcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuLi9tb2R1bGVzL2Rpc3RhbnRcIlxyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIlxyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiXHJcblxyXG5jb25zdCBrZXlzID0ge1xyXG4gICAgc2V0dGluZ1RpdGxlOiB1dWlkdjQoKVxyXG59XHJcbmxldCBmb3JtTW9kdWxlXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaVByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXRlczogW11cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIWZvcm1Nb2R1bGUpZm9ybU1vZHVsZSA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLkZvcm1TZWN0aW9uKVxyXG4gICAgICAgIC8qKiBcclxuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb25bXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBhbGxDb21wb25lbnRzID0gWy4uLm5ldyBTZXQoT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cykubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXSkubWFwKGsgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtrXSlcclxuICAgICAgICB9KS5mbGF0KCkpXVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9XCJMaWdodGNvcmQncyBBcGkgQXZhaWxsYWJsZSBjb21wb25lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtVGV4dCB0eXBlPVwiZGVzY3JpcHRpb25cIiBjbGFzc05hbWU9XCJcIiBzZWxlY3RhYmxlPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29tcG9uZW50cyBhcmUgaGVyZSBmb3IgdGhlIHBsdWdpbiBkZXZzLiBUaGV5IGNhbiBxdWlja2x5IGVtYmVkIGFueSBjb21wb25lbnQgYmVsb3cgd2l0aCB0aGlzIHBhbmVsLlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1UZXh0PlxyXG4gICAgICAgICAgICAgICAgPE1hcmdpblRvcD48L01hcmdpblRvcD5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cIm91dGxpbmVkXCIgc2l6ZT1cIm1lZGl1bVwiIGhvdmVyQ29sb3I9XCJncmVlblwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9BcGlzXCIpXHJcbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvblxyXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1TZWN0aW9uPixcclxuICAgICAgICAgICAgYWxsQ29tcG9uZW50cy5tYXAoY29tcCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgQWxsUHJldmlld3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoY29tcC5BbGxQcmV2aWV3cylBbGxQcmV2aWV3cyA9IGNvbXAuQWxsUHJldmlld3NcclxuICAgICAgICAgICAgICAgIGxldCBvbkNoYW5nZSA9ICh0YWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYlxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgc2V0U3RhdGUgPSAobmV3U3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzOiBbT2JqZWN0LmFzc2lnbihzdGF0ZSwgbmV3U3RhdGUpXS5jb25jYXQodGhpcy5zdGF0ZS5zdGF0ZXMuZmlsdGVyKGUgPT4gZS5lbGVtICE9PSBjb21wKSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5zdGF0ZXMuZmluZChlID0+IGUuZWxlbSA9PT0gY29tcClcclxuICAgICAgICAgICAgICAgIGlmKCFzdGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYjogXCJwcmV2aWV3XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW06IGNvbXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3RhdGVzLnB1c2goc3RhdGUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0UHJvcHMgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmFsID0ge31cclxuICAgICAgICAgICAgICAgICAgICBBbGxQcmV2aWV3cy5mb3JFYWNoKGNhdGVnb3J5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxbT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXSA9IGNhdGVnb3J5WzBdW09iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXV1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlLm9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxba2V5XSA9IEFsbFByZXZpZXdzLmZpbmQoZSA9PiBlLmZpbmQoZSA9PiBlW2tleV0pKVtzdGF0ZS5vcHRpb25zW2tleV1dW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHJlbmRlclByZXZpZXcgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMjBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXByaW1hcnkpXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXAsIGdldFByb3BzKCkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCByZW5kZXJDb2RlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjIwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianN4XCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwianN4XCIpfS8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianNcIiBjb250ZW50PXtnZW5lcmF0ZUNvZGUoXCJyZWFjdFwiKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRTdHJGb3JQcm9wID0gKHZhbHVlLCBjb21wUGF0aCwgbGFuZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbXBQYXRoID09PSBcIkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG4gICAgbWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxyXG59fSxcclxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIixcclxuICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLFxyXG4gICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgfSwgY2xhc3NOYW1lOiBcImxjLXRhYi1ib3gtc2hhZG93XCIgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlLCBudWxsLCBcIlByZXZpZXcgdGFic1wiKVxyXG4gICAgKVxyXG4pYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwianN4XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgc3R5bGU9e3tcclxuICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiLCBtYXJnaW5Cb3R0b206IFwiMjBweFwiXHJcbiAgICB9fT5cclxuICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXByaW1hcnkpXCIsIFxyXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgfX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlByZXZpZXcgdGFiczwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiWW91ciBjb21wb25lbnRzIGhlcmUuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIFwiICAgIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2VuZXJhdGVDb2RlID0gZnVuY3Rpb24obGFuZyl7IC8vIGNvZGUgZm9ybWF0dGluZyBpcyBoYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcE5hbWUgPSBjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYXRlZ29yaWVzID0gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cylcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzLmZpbmQoZSA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2NvbXBOYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wUGF0aCA9IGBMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuJHtjb21wQ2F0ZWdvcnl9LiR7Y29tcE5hbWV9YFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZ2V0UHJvcHMoKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZihsYW5nID09PSBcImpzeFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuUHJvcCA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGtleSA9PSBcImNoaWxkcmVuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuUHJvcCA9IGdldFN0ckZvclByb3AocHJvcHNba2V5XSwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0ga2V5K1wiPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb3BzW2tleV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGB7JHtnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKX19YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wZW5UYWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5Qcm9wKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UYWcgPSBgPCR7Y29tcFBhdGh9ICR7cHJvcFN0cmluZ3Muam9pbihcIiBcIil9PmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbG9zZVRhZyA9IGA8LyR7Y29tcFBhdGh9PmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtvcGVuVGFnfVxcbiAgICAke2NoaWxkcmVuUHJvcH1cXG4ke2Nsb3NlVGFnfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfS8+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW5UYWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuIHx8IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuICYmIGNoaWxkcmVuLiQkdHlwZW9mICYmIChjaGlsZHJlbi4kJHR5cGVvZiA9PT0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgfHwgY2hpbGRyZW4uJCR0eXBlb2YgPT09IDB4ZWFjNykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBnZXRTdHJGb3JQcm9wKGNoaWxkcmVuLCBjb21wUGF0aCwgbGFuZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcFN0cmluZ3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZpc2libGVLZXkgPSAvW15cXHdcXGRfXS9nLnRlc3Qoa2V5KSA/IEpTT04uc3RyaW5naWZ5KGtleSkgOiBrZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSB2aXNpYmxlS2V5K1wiOiBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb3BzW2tleV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGdldFN0ckZvclByb3AocHJvcHNba2V5XSwgY29tcFBhdGgsIGxhbmcpLnNwbGl0KFwiXFxuXCIpLm1hcCgoc3RyLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkgPT09IDApcmV0dXJuIHN0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIgICAgXCIgKyBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKFwiXFxuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BPYmplY3QgPSBcIntcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9wU3RyaW5ncy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MuZm9yRWFjaCgoc3RyLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzTGFzdCA9IGkgPT09IHByb3BTdHJpbmdzLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IGkgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaXNGaXJzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCIsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIlxcbiAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNMYXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPVwiXFxufVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwifVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuRGF0YSA9IHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJzdHJpbmdcIiAmJiBjaGlsZHJlbi5zdGFydHNXaXRoKFwiUmVhY3QuY3JlYXRlRWxlbWVudFwiKSA/IGNoaWxkcmVuIDogSlNPTi5zdHJpbmdpZnkoY2hpbGRyZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgUmVhY3QuY3JlYXRlRWxlbWVudCgke2NvbXBQYXRofSwgJHtwcm9wT2JqZWN0fSwgJHtjaGlsZHJlbkRhdGF9KWBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nc1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICB7QWxsUHJldmlld3MubWFwKGNhdGVnb3J5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0ub25DbGljaylyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS50ZXh0KXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLmNoaWxkcmVuKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5Lmxlbmd0aCA9PT0gMSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2tleX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gb3B0aW9ucz17Y2F0ZWdvcnkubWFwKChlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm9wdC1cIitpbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IEpTT04uc3RyaW5naWZ5KGVbT2JqZWN0LmtleXMoZSlbMF1dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfSB2YWx1ZT17XCJvcHQtXCIrKHN0YXRlLm9wdGlvbnNba2V5XSB8fCBcIjBcIil9IG9uQ2hhbmdlPXsodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLm9wdGlvbnMsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiAodmFsdWUudmFsdWUgfHwgXCIwXCIpLnJlcGxhY2UoXCJvcHQtXCIsIFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IHNlYXJjaGFibGU9e3RydWV9Lz4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luQm90dG9tOiBcIjhweFwifX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnMgdGFicz17W3tsYWJlbDogXCJQcmV2aWV3XCIsIGlkOiBcInByZXZpZXdcIn0sIHtsYWJlbDogXCJDb2RlXCIsIGlkOiBcImNvZGVcIn1dfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXtzdGF0ZS50YWJ9IGNoaWxkcmVuPXtzdGF0ZS50YWIgPT09IFwicHJldmlld1wiID8gcmVuZGVyUHJldmlldygpIDogcmVuZGVyQ29kZSgpfSBvbkNoYW5nZT17b25DaGFuZ2V9Lz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlbmRlcnMoKXtcclxuXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBYU3ZnIGZyb20gXCIuL3hTdmdcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4vcmVsb2FkSWNvblwiO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIi4vaWNvbnMvZWRpdFwiO1xyXG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi9pY29ucy9kZWxldGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4vdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IHsgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5jb25zdCBhbmNob3JDbGFzc2VzID0gQkRWMi5hbmNob3JDbGFzc2VzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1BsdWdpbkNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgPSB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiAmJiB0eXBlb2YodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG5cclxuICAgICAgICB0aGlzLmVkaXQgPSB0aGlzLmVkaXQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZSA9IHRoaXMuZGVsZXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmVuYWJsZWQsXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVsb2FkczogMCxcclxuICAgICAgICAgICAgdHJ1c3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzU2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5hcHBlbmRDaGlsZCh0aGlzLnNldHRpbmdzUGFuZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCJkaXZbY2xhc3MqPVxcXCJzY3JvbGxlci1cXFwiXVwiKVxyXG4gICAgICAgICAgICBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lciwgdGhpc05vZGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlT2Zmc2V0ID0gRE9NLm9mZnNldCh0aGlzTm9kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldCA9IERPTS5vZmZzZXQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXNOb2RlT2Zmc2V0LnRvcCAtIGNvbnRhaW5lck9mZnNldC50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wIC0gMzA7XHJcbiAgICAgICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFBvaW50ID4gb3JpZ2luYWwpIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCArIChwcm9ncmVzcyAqIChlbmRQb2ludCAtIG9yaWdpbmFsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgLSAocHJvZ3Jlc3MgKiAob3JpZ2luYWwgLSBlbmRQb2ludCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXR0aW5nc0NvbXBvbmVudCgpIHtcclxuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIHRoaXMubmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkIGJkLWFkZG9uLWNhcmQgc2V0dGluZ3Mtb3BlbiB1aS1zd2l0Y2gtaXRlbVwiLCByZWY6IFwiY2FyZE5vZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XCJmbG9hdFwiOiBcInJpZ2h0XCIsIFwiY3Vyc29yXCI6IFwicG9pbnRlclwifSwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsID09PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwifSksXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgIT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCIsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7X19odG1sOiB0aGlzLnNldHRpbmdzUGFuZWx9fSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSBcInt7bmFtZX19IHZ7e3ZlcnNpb259fSBieSB7e2F1dGhvcn19XCIuc3BsaXQoLyh7e1tBLVphLXpdK319KS8pO1xyXG4gICAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e25hbWV9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVtuYW1lSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJuYW1lIGJkYS1uYW1lXCJ9LCBuYW1lKTtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3t2ZXJzaW9ufX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbdmVyc2lvbkluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwidmVyc2lvbiBiZGEtdmVyc2lvblwifSwgdmVyc2lvbik7XHJcbiAgICAgICAgY29uc3QgYXV0aG9ySW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3thdXRob3J9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJhdXRob3IgYmRhLWF1dGhvclwifTtcclxuICAgICAgICAgICAgaWYgKGF1dGhvci5saW5rIHx8IGF1dGhvci5pZCkge1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuY2xhc3NOYW1lICs9IGAgJHthbmNob3JDbGFzc2VzLmFuY2hvcn0gJHthbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YDtcclxuICAgICAgICAgICAgICAgIHByb3BzLnRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5saW5rKSBwcm9wcy5ocmVmID0gYXV0aG9yLmxpbms7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmlkKSBwcm9wcy5vbkNsaWNrID0gKCkgPT4ge0JEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpOyBCRFYyLm9wZW5ETShhdXRob3IuaWQpO307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGl0bGVbYXV0aG9ySW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChhdXRob3IubGluayB8fCBhdXRob3IuaWQgPyBcImFcIiA6IFwic3BhblwiLCBwcm9wcywgYXV0aG9yLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGUuZmxhdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VMaW5rKHRpdGxlLCB1cmwpIHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYmRhLWxpbmsgYmRhLWxpbmstd2Vic2l0ZVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9O1xyXG4gICAgICAgIGlmICh0eXBlb2YodXJsKSA9PSBcInN0cmluZ1wiKSBwcm9wcy5ocmVmID0gdXJsO1xyXG4gICAgICAgIGlmICh0eXBlb2YodXJsKSA9PSBcImZ1bmN0aW9uXCIpIHByb3BzLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHtldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdXJsKCk7fTtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBwcm9wcywgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VCdXR0b24odGl0bGUsIGNoaWxkcmVuLCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gPFRvb2x0aXBXcmFwIGNvbG9yPVwiYmxhY2tcIiBzaWRlPVwidG9wXCIgdGV4dD17dGl0bGV9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWJ1dHRvblwiIG9uQ2xpY2s9e2FjdGlvbn0+e2NoaWxkcmVufTwvZGl2PlxyXG4gICAgICAgIDwvVG9vbHRpcFdyYXA+O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgdGhpcy51bm1vdW50ZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxpbmtzKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW107XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGlmIChhZGRvbi53ZWJzaXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJXZWJzaXRlXCIsIGFkZG9uLndlYnNpdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24uc291cmNlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTb3VyY2VcIiwgYWRkb24uc291cmNlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLmludml0ZSkge1xyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTdXBwb3J0IFNlcnZlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ZXIgPSAvXFwuZ2dcXC8oLiopJC87XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGFkZG9uLmludml0ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0ZXIudGVzdChjb2RlKSkgY29kZSA9IGNvZGUubWF0Y2godGVzdGVyKVsxXTtcclxuICAgICAgICAgICAgICAgIEJEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoY29kZSk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFkZG9uLmRvbmF0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiRG9uYXRlXCIsIGFkZG9uLmRvbmF0ZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5wYXRyZW9uKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJQYXRyZW9uXCIsIGFkZG9uLnBhdHJlb24pKTtcclxuICAgICAgICByZXR1cm4gbGlua3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZvb3RlcigpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IHRoaXMubGlua3M7XHJcbiAgICAgICAgcmV0dXJuIChsaW5rcy5sZW5ndGggfHwgdGhpcy5oYXNTZXR0aW5ncykgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC1mb290ZXIgYmRhLWZvb3RlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWxpbmtzIGJkYS1saW5rc1wifSxcclxuICAgICAgICAgICAgICAgIC4uLihsaW5rcy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiBpbmRleCA8IGxpbmtzLmxlbmd0aCAtIDEgPyBbZWxlbWVudCwgXCIgfCBcIl0gOiBlbGVtZW50KS5mbGF0KCkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtvbkNsaWNrOiB0aGlzLnNob3dTZXR0aW5ncywgY2xhc3NOYW1lOiBcImJkLWJ1dHRvbiBiZGEtc2V0dGluZ3MtYnV0dG9uXCIsIGRpc2FibGVkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSwgXCJTZXR0aW5nc1wiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy50b2dnbGUgJiYgdGhpcy5wcm9wcy50b2dnbGUodGhpcy5uYW1lKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdCgpIHt0aGlzLnByb3BzLmVkaXQodGhpcy5uYW1lKTt9XHJcbiAgICBkZWxldGUoKSB7dGhpcy5wcm9wcy5yZW1vdmUodGhpcy5uYW1lKTt9XHJcbiAgICByZWxvYWQoKSB7dGhpcy5wcm9wcy5yZWxvYWQodGhpcy5uYW1lKTt9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogdGhpcy5wcm9wcy5hZGRvbi5uYW1lKTt9XHJcbiAgICBnZXQgYXV0aG9yKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogdGhpcy5wcm9wcy5hZGRvbi5hdXRob3IpO31cclxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogdGhpcy5wcm9wcy5hZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0IHZlcnNpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogdGhpcy5wcm9wcy5hZGRvbi52ZXJzaW9uKTt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICBjb25zdCB7YXV0aG9ySWQsIGF1dGhvckxpbmt9ID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuXHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB7fVxyXG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuaXNTY2FubmluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nhbm5pbmcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShyZXNvbHZlKHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUuZW5kc1dpdGgoXCIucGx1Z2luLmpzXCIpID8gY29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgdGhpcy5wcm9wcy5hZGRvbi5maWxlbmFtZSksIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnVubW91bnRlZClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RydXN0ZWQ6IHJlc3VsdC5zdXNwZWN0ID8gXCJzdXNwZWN0XCIgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sICgpID0+IHt9KVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuaXNUcnVzdGVkID09PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gXCJzdXNwZWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLWNsb3NlZCB1aS1zd2l0Y2gtaXRlbVwiLCBzdHlsZX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWhlYWRlciBiZGEtaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtdGl0bGUgYmRhLWhlYWRlci10aXRsZVwifSwgdGhpcy5idWlsZFRpdGxlKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB7bmFtZTogdGhpcy5hdXRob3IsIGlkOiBhdXRob3JJZCwgbGluazogYXV0aG9yTGlua30pKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1jb250cm9scyBiZGEtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZWRpdCAmJiB0aGlzLm1ha2VCdXR0b24oXCJFZGl0XCIsIDxFZGl0SWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZWRpdCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVtb3ZlICYmIHRoaXMubWFrZUJ1dHRvbihcIkRlbGV0ZVwiLCA8RGVsZXRlSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZGVsZXRlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZWxvYWQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiUmVsb2FkXCIsIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5yZWxvYWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge29uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWR9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXItd3JhcCBiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1zY3JvbGxlciBiZC1hZGRvbi1kZXNjcmlwdGlvbiBiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIn0sIHRoaXMuZGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuZm9vdGVyXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBWMkNfUGx1Z2luQ2FyZC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsiLCJpbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tIFwiLi9lcnJvckJvdW5kYXJ5XCI7XHJcbmltcG9ydCBDb250ZW50Q29sdW1uIGZyb20gXCIuL2NvbnRlbnRDb2x1bW5cIjtcclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuL3Rvb2xzXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IFNjcm9sbGVyIGZyb20gXCIuL3Njcm9sbGVyXCI7XHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCBTZWFyY2ggZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2hcIjtcclxuXHJcbmltcG9ydCB7c2V0dGluZ3NDb29raWUsIHBsdWdpbkNvb2tpZSwgdGhlbWVDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4uL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4uL21vZHVsZXMvYmRBcGlcIjtcclxuXHJcbmNvbnN0IFRvb2x0aXAgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5pc1BsdWdpbnMgPSB0aGlzLnByb3BzLnR5cGUgPT0gXCJwbHVnaW5zXCI7XHJcbiAgICAgICAgdGhpcy5jb29raWUgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbkNvb2tpZSA6IHRoZW1lQ29va2llO1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XHJcblxyXG4gICAgICAgIHRoaXMuc29ydCA9IHRoaXMuc29ydC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRm9sZGVyKCkge1xyXG4gICAgICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbSh0aGlzLmlzUGx1Z2lucyA/IENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQobmFtZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5lZGl0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkRGVsZXRlID0gYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlKG5hbWUpO1xyXG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmRlbGV0ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbChcIkFyZSBZb3UgU3VyZT9cIiwgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJHtuYW1lfT9gLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEZWxldGVcIixcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge3Jlc29sdmUodHJ1ZSk7fSxcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7cmVzb2x2ZShmYWxzZSk7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBcIk5hbWVcIiwgdmFsdWU6IFwibmFtZVwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkF1dGhvclwiLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJWZXJzaW9uXCIsIHZhbHVlOiBcInZlcnNpb25cIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJSZWNlbnRseSBBZGRlZFwiLCB2YWx1ZTogXCJhZGRlZFwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkxhc3QgTW9kaWZpZWRcIiwgdmFsdWU6IFwibW9kaWZpZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJGaWxlIFNpemVcIiwgdmFsdWU6IFwic2l6ZVwifSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkaXJlY3Rpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBc2NlbmRpbmdcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRGVzY2VuZGluZ1wiLCB2YWx1ZTogZmFsc2V9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb3BzKGFkZG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmdldE5hbWUoYWRkb24pLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNvb2tpZVt0aGlzLmdldE5hbWUoYWRkb24pXSxcclxuICAgICAgICAgICAgdG9nZ2xlOiB0aGlzLm1hbmFnZXIudG9nZ2xlLmJpbmQodGhpcy5tYW5hZ2VyKSxcclxuICAgICAgICAgICAgLy9lZGl0OiB0aGlzLmVkaXQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVtb3ZlOiB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBhZGRvbjogYWRkb24sXHJcbiAgICAgICAgICAgIGhhc2g6IGFkZG9uLmhhc2hcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlzdCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnR5cGUgPT09IFwicGx1Z2luc1wiID8gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpIDogT2JqZWN0LnZhbHVlcyhiZHRoZW1lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEFkZG9ucyA9IHRoaXMubGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IHRoaXMuc3RhdGUuc29ydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoaXMuc3RhdGUuc29ydC5zbGljZSgxKTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBhLnBsdWdpbiAmJiBhLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhhLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgOiBhW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IGIucGx1Z2luICYmIGIucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGIucGx1Z2luW2BnZXQke2NhcH1gXSgpKSAgOiBiW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZmlyc3QpID09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoc2Vjb25kLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QgPiBzZWNvbmQpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoc2Vjb25kID4gZmlyc3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmFzY2VuZGluZykgc29ydGVkQWRkb25zLnJldmVyc2UoKTtcclxuICAgICAgICBjb25zdCByZW5kZXJlZCA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGEgPSAwOyBhIDwgc29ydGVkQWRkb25zLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uID0gc29ydGVkQWRkb25zW2FdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5xdWVyeSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZShhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEF1dGhvcihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0RGVzY3JpcHRpb24oYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0VmVyc2lvbihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkgbWF0Y2hlcyA9IG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IpIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGF1dGhvci50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBkZXNjcmlwdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IHZlcnNpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKGFkZG9uKTtcclxuICAgICAgICAgICAgcmVuZGVyZWQucHVzaCg8RXJyb3JCb3VuZGFyeT48QWRkb25DYXJkIHsuLi5wcm9wc30gcmVsb2FkPXshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgdGhpcy5tYW5hZ2VyLnJlbG9hZC5iaW5kKHRoaXMubWFuYWdlcil9IC8+PC9FcnJvckJvdW5kYXJ5Pik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZW5kZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXROYW1lKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiBhZGRvbi5uYW1lKTt9XHJcbiAgICBnZXRBdXRob3IoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXREZXNjcmlwdGlvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IGFkZG9uLmRlc2NyaXB0aW9uKTt9XHJcbiAgICBnZXRWZXJzaW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiBhZGRvbi52ZXJzaW9uKTt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHJlZnJlc2hJY29uID0gPFRvb2x0aXAgY29sb3I9XCJibGFja1wiIHBvc2l0aW9uPVwidG9wXCIgdGV4dD1cIlJlbG9hZCBMaXN0XCI+XHJcbiAgICAgICAgICAgIHsocHJvcHMpID0+IFxyXG4gICAgICAgICAgICA8UmVsb2FkSWNvbiB7Li4ucHJvcHN9IGNsYXNzTmFtZT1cImJkLWljb24gYmQtcmVsb2FkIGJkLXJlbG9hZC1oZWFkZXJcIiBzaXplPVwiMThweFwiIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGx1Z2lucykgcGx1Z2luTW9kdWxlLnVwZGF0ZVBsdWdpbkxpc3QoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhlbWVNb2R1bGUudXBkYXRlVGhlbWVMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgIH08L1Rvb2x0aXA+O1xyXG4gICAgICAgIGNvbnN0IGFkZG9uQ2FyZHMgPSB0aGlzLmdldEFkZG9ucygpO1xyXG5cclxuICAgICAgICByZXR1cm4gPENvbnRlbnRDb2x1bW4gdGl0bGU9e2Ake3RoaXMucHJvcHMudHlwZS50b1VwcGVyQ2FzZSgpfeKAlCR7YWRkb25DYXJkcy5sZW5ndGh9YH0+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2V5PVwiZm9sZGVyLWJ1dHRvblwiIGNsYXNzTmFtZT1cImJkLWJ1dHRvbiBiZC1wZmJ0blwiIG9uQ2xpY2s9e3RoaXMub3BlbkZvbGRlci5iaW5kKHRoaXMpfT5PcGVuIHt0aGlzLmlzUGx1Z2lucyA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCJ9IEZvbGRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICB7IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHJlZnJlc2hJY29ufVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzIGJkLWFkZG9uLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICA8U2VhcmNoIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH0gcGxhY2Vob2xkZXI9e2BTZWFyY2ggJHt0aGlzLnByb3BzLnR5cGV9Li4uYH0gLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tZHJvcGRvd25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5Tb3J0IGJ5OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLnNvcnRPcHRpb25zfSBvbkNoYW5nZT17dGhpcy5zb3J0fSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPk9yZGVyOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLmRpcmVjdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnJldmVyc2V9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkYS1zbGlzdCBiZC1hZGRvbi1saXN0XCI+e2FkZG9uQ2FyZHN9PC9kaXY+XHJcbiAgICAgICAgPC9Db250ZW50Q29sdW1uPlxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IENhcmRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYXJkTGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRMb2dvIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge2hlaWdodDogXCIxMDAlXCIsIHdpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7ZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIiwgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIn0sIHZpZXdCb3g6IFwiMCAwIDIwMDAgMjAwMFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwibWV0YWRhdGFcIiwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MVwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMjBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxNVwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzNcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjEwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzMpXCJ9LCBkOiBcIk0xMTk1LjQ0KzEzNS40NDJMMTE5NS40NCsxMzUuNDQyTDk5Ny42KzEzNi40NDJDMTAyNC4yKzE0OS43NDIrMTE3MC4zNCsxNjMuNTQyKzExOTMuNjQrMTc5Ljc0MkMxMjY0LjM0KzIyOC44NDIrMTMxOS43NCsyOTEuMjQyKzEzNTguMjQrMzY1LjA0MkMxMzk4LjE0KzQ0MS42NDIrMTQxOS43NCs1MzAuNjQyKzE0MjIuNTQrNjI5LjY0MkwxNDIyLjU0KzYzMC44NDJMMTQyMi41NCs2MzIuMDQyQzE0MjIuNTQrNzczLjE0MisxNDIyLjU0KzEyMjguMTQrMTQyMi41NCsxMzY5LjE0TDE0MjIuNTQrMTM3MC4zNEwxNDIyLjU0KzEzNzEuNTRDMTQxOS44NCsxNDcwLjU0KzEzOTguMjQrMTU1OS41NCsxMzU4LjI0KzE2MzYuMTRDMTMxOS43NCsxNzA5Ljk0KzEyNjQuNDQrMTc3Mi4zNCsxMTkzLjY0KzE4MjEuNDRDMTE3MS4wNCsxODM3LjE0KzEwMjUuNysxODUwLjU0KzEwMDArMTg2My41NEwxMTkzLjU0KzE4NjQuNTRDMTUzOS43NCsxODY2LjQ0KzE4NjQuNTQrMTY5My4zNCsxODY0LjU0KzEyOTYuNjRMMTg2NC41NCs3MTYuOTQyQzE4NjYuNDQrMzEyLjQ0MisxNTQxLjY0KzEzNS40NDIrMTE5NS40NCsxMzUuNDQyWlwiLCBmaWxsOiBcIiMxNzE3MTdcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MilcIn0sIGQ6IFwiTTE2OTUuNTQrNjMxLjQ0MkMxNjg1Ljg0KzI3OC4wNDIrMTQwOS4zNCsxMzUuNDQyKzEwNTIuOTQrMTM1LjQ0MkwzNjEuNzQrMTM2LjQ0Mkw4MDMuNzQrNDkwLjQ0MkwxMDYwLjc0KzQ5MC40NDJDMTMzNS4yNCs0OTAuNDQyKzEzMzUuMjQrODM1LjM0MisxMDYwLjc0KzgzNS4zNDJMMTA2MC43NCsxMTY0Ljg0QzExNTAuMjIrMTE2NC44NCsxMjEwLjUzKzEyMDEuNDgrMTI0MS42OCsxMjUwLjg3QzEzMDYuMDcrMTM1MysxMjQ1Ljc2KzE1MDkuNjQrMTA2MC43NCsxNTA5LjY0TDM2MS43NCsxODYzLjU0TDEwNTIuOTQrMTg2NC41NEMxNDA5LjI0KzE4NjQuNTQrMTY4NS43NCsxNzIxLjk0KzE2OTUuNTQrMTM2OC41NEMxNjk1LjU0KzEyMDUuOTQrMTY1MS4wNCsxMDg0LjQ0KzE1NzIuNjQrOTk5Ljk0MkMxNjUxLjA0KzkxNS41NDIrMTY5NS41NCs3OTQuMDQyKzE2OTUuNTQrNjMxLjQ0MlpcIiwgZmlsbDogXCIjM0U4MkU1XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzEpXCJ9LCBkOiBcIk0xNDY5LjI1KzYzMS40NDJDMTQ1OS41NSsyNzguMDQyKzExODMuMDUrMTM1LjQ0Mis4MjYuNjUrMTM1LjQ0MkwxMzUuNDUrMTM1LjQ0MkwxMzUuNDUrMTAwNEMxMzUuNDUrMTAwNCsxMzUuNDI3KzEyNTUuMjErMzU1LjYyNisxMjU1LjIxQzU3NS44MjUrMTI1NS4yMSs1NzUuODQ4KzEwMDQrNTc1Ljg0OCsxMDA0TDU3Ny40NSs0OTAuNDQyTDgzNC40NSs0OTAuNDQyQzExMDguOTUrNDkwLjQ0MisxMTA4Ljk1KzgzNS4zNDIrODM0LjQ1KzgzNS4zNDJMNjY0LjY1KzgzNS4zNDJMNjY0LjY1KzExNjQuODRMODM0LjQ1KzExNjQuODRDOTIzLjkzMisxMTY0Ljg0Kzk4NC4yNDQrMTIwMS40OCsxMDE1LjM5KzEyNTAuODdDMTA3OS43OCsxMzUzKzEwMTkuNDcrMTUwOS42NCs4MzQuNDUrMTUwOS42NEwxMzUuNDUrMTUwOS42NEwxMzUuNDUrMTg2NC41NEw4MjYuNjUrMTg2NC41NEMxMTgyLjk1KzE4NjQuNTQrMTQ1OS40NSsxNzIxLjk0KzE0NjkuMjUrMTM2OC41NEMxNDY5LjI1KzEyMDUuOTQrMTQyNC43NSsxMDg0LjQ0KzEzNDYuMzUrOTk5Ljk0MkMxNDI0Ljc1KzkxNS41NDIrMTQ2OS4yNSs3OTQuMDQyKzE0NjkuMjUrNjMxLjQ0MlpcIiwgZmlsbDogXCIjRkZGRkZGXCIsIG9wYWNpdHk6IFwiMVwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NoZWNrYm94IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImxpXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94IFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3gsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWlubmVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94SW5uZXIpWzBdLmNoZWNrYm94SW5uZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3hFbGVtZW50LCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJjaGVja2JveFwifSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgIXRoaXMuc3RhdGUuY2hlY2tlZCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBBcnJvdyBmcm9tIFwiLi4vaWNvbnMvZG93bmFycm93XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7b3BlbjogZmFsc2UsIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMub3B0aW9uc1swXS52YWx1ZX07XHJcbiAgICAgICAgdGhpcy5kcm9wZG93biA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVudSA9IHRoaXMuc2hvd01lbnUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhpZGVNZW51ID0gdGhpcy5oaWRlTWVudS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNZW51KGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiB0cnVlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogZmFsc2V9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3RlZCgpIHtyZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQobyA9PiBvLnZhbHVlID09IHRoaXMuc3RhdGUudmFsdWUpO31cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LW9wdGlvbnNcIj5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAob3B0ID0+IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qtb3B0aW9uJHtzZWxlY3RlZC52YWx1ZSA9PSBvcHQudmFsdWUgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gfSBvbkNsaWNrPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcywgb3B0LnZhbHVlKX0+e29wdC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5wcm9wcy5zdHlsZSA9PSBcInRyYW5zcGFyZW50XCIgPyBcIiBiZC1zZWxlY3QtdHJhbnNwYXJlbnRcIiA6IFwiXCI7XHJcbiAgICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5zdGF0ZS5vcGVuID8gXCIgbWVudS1vcGVuXCIgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuLy8gcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBcIj5cclxuLy8gPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e3RoaXMucHJvcHMubGFiZWx9PC9sYWJlbD5cclxuLy8gPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbi8vICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1jb250cm9sc1wiPlxyXG4vLyAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbi8vICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbi8vICAgICA8L2Rpdj5cclxuLy8gPC9kaXY+XHJcbi8vIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4vLyA8L2Rpdj47IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIi4uL2ljb25zL3NlYXJjaFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWFyY2gtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0gb25LZXlEb3duPXt0aGlzLnByb3BzLm9uS2V5RG93bn0gdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJiZC1zZWFyY2hcIiBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn0gbWF4TGVuZ3RoPVwiNTBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxTZWFyY2hJY29uIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7Y2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuU3dpdGNoIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5zdGF0ZS5jaGVja2VkfSAvPlxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Db250ZW50Q29sdW1uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGRpc3BsYXlOYW1lKCkge3JldHVybiBcIkNvbnRlbnRDb2x1bW5cIjt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vbGV0IGNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMucHJvcHMudGl0bGUgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHRoaXMucHJvcHMudGl0bGUpIDogbnVsbFxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbiArIFwiIFwiK2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwiLCBzdHlsZToge3BhZGRpbmc6IFwiNjBweCA0MHB4IDBweFwifX0sXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5pbXBvcnQgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGZyb20gXCIuL2Nzc0VkaXRvckRldGFjaGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5wcm9wcy5saW5lcyA9IDA7XHJcbiAgICAgICAgc2VsZi5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICBzZWxmLmF0dGFjaCA9IHNlbGYuYXR0YWNoLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2hlZEVkaXRvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQ3NzRWRpdG9yRGV0YWNoZWQsIHthdHRhY2g6IHNlbGYuYXR0YWNofSk7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuZGV0YWNoID0gc2VsZi5kZXRhY2guYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRoaXMucHJvcHMuZGV0YWNoZWQgfHwgQkRWMi5lZGl0b3JEZXRhY2hlZFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChwcmV2U3RhdGUuZGV0YWNoZWQgJiYgIXNlbGYuc3RhdGUuZGV0YWNoZWQpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYuZGV0YWNoZWRSb290KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZU1pcnJvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGNvbnN0IHtkZXRhY2hlZH0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIGRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7aWQ6IFwiZWRpdG9yLWRldGFjaGVkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImgzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcIkVkaXRvciBEZXRhY2hlZFwiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdHRhY2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAhZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJkZXRhY2hcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBkZXRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJoZWxwLXRleHRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlByZXNzIFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiY29kZVwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCJjdHJsXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcIixcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiB3aXRoIHRoZSBlZGl0b3IgZm9jdXNlZCB0byBhY2Nlc3MgdGhlIGVkaXRvcidzIHNldHRpbmdzLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhhcmcpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzd2l0Y2ggKGFyZykge1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZGV0YWNoXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNzcygpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgYnRvYSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBkZXRhY2goKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZHJvb3QgPSBzZWxmLmRldGFjaGVkUm9vdDtcclxuICAgICAgICBpZiAoIWRyb290KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRkFJTEVEIFRPIElOSkVDVCBST09UOiAuYXBwXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNlbGYuZGV0YWNoZWRFZGl0b3IsIGRyb290KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGV0YWNoZWRSb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdERldGFjaGVkUm9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0RGV0YWNoZWRSb290KCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcC5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRhY2goKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYub25DaGFuZ2UgPSBzZWxmLm9uQ2hhbmdlLmJpbmQoc2VsZik7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xyXG4gICAgICAgIEJEVjIuZWRpdG9yRGV0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlTGluZUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaW5lQ291bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gdGhpcy5yZWZzLmVkaXRvci52YWx1ZS5zcGxpdChcIlxcblwiKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZzLmxpbmVzLnRleHRDb250ZW50ID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobGluZUNvdW50KSwgKF8sIGkpID0+IGkgKyAxKS5qb2luKFwiLlxcblwiKSArIFwiLlwiO1xyXG4gICAgICAgIHRoaXMucHJvcHMubGluZXMgPSBsaW5lQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY3NzXCIsXHJcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXHJcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXHJcbiAgICAgICAgICAgIHNjcm9sbGJhclN0eWxlOiBcInNpbXBsZVwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3NzKCkge1xyXG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIGxldCBjY3NzID0gXCJcIjtcclxuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgY2NzcyA9IGF0b2IoX2Njc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2NzcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcC5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiZC1kZXRhY2hlZC1jc3MtZWRpdG9yXCIsIGlkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtZWRpdG9yXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1pbm5lcnBhbmVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogc2VsZi5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImF0dGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soaWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhdHRhY2hcIjpcclxuICAgICAgICAgICAgICAgIGlmIChET00ucXVlcnkoXCIjZWRpdG9yLWRldGFjaGVkXCIpKSBzZWxmLnByb3BzLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYucm9vdCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJvb3QucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJERXJyb3JCb3VuZGFyeSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICB0aGlzLnN0YXRlID0ge2hhc0Vycm9yOiBmYWxzZX07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2hhc0Vycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInJlYWN0LWVycm9yXCJ9LCBcIkNvbXBvbmVudCBFcnJvclwiKTsgIFxyXG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjsgXHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCREVycm9yQm91bmRhcnkucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsgIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbGV0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCIjRkZGRkZGXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCIjRkZGRkZGXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCIjRkZGRkZGXCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzelwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59Iiwiey8qIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwid2hpdGVcIiB3aWR0aD1cIjE4cHhcIiBoZWlnaHQ9XCIxOHB4XCI+XHJcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxyXG48L3N2Zz4gKi99XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGlzdG9yeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE4cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIiNGRkZGRkZcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cIiNGRkZGRkZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHJlc2VuY2VTZXR0aW5ncyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxyXG4gICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByZXZpZXcgPSBudWxsXHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzID0gbmV3IFNldCgpXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlV2hlbkZldGNoZWQoY29tcCl7XHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuYWRkKGNvbXApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SW5wdXRUZXh0fSBzZXR0aW5nIFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRTZXR0aW5nID0gUlBDUHJvcHMuZmluZChlID0+IGUuaWQgPT09IHNldHRpbmcucHJvcHMuaWQpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCB0aGlzLnN0YXRlLmRhdGEsIHtcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0U2V0dGluZy5pZF06ICEhdmFsdWUgPyB2YWx1ZSA6IG51bGxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5zdGF0ZS5hc3NldHNcclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHNldHRpbmcucHJvcHMuaWQgPT09IFwiYXBwbGljYXRpb25faWRcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3LmZvcmNlVXBkYXRlKClcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKVxyXG4gICAgfVxyXG5cclxuICAgIGZldGNoQXNzZXRzKCl7XHJcbiAgICAgICAgaWYodGhpcy5pc2ZldGNoaW5nID09PSB0cnVlKXtcclxuICAgICAgICAgICAgbGV0IGFwcCA9IHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCAhPT0gYXBwKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IHRydWVcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZmV0Y2hBc3NldHModGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKVxyXG4gICAgICAgIC50aGVuKGFzc2V0cyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBPYmplY3Qua2V5cyhhc3NldHMpLm1hcChrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzZXQgPSBhc3NldHNba11cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYXNzZXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzc2V0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByZXZpZXcoZGF0YSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyB8fCAoVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlJlcmVuZGVyaW5nIHJwYyBtYW5hZ2VyXCIpXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NHcm91cCB0aXRsZT1cIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiIHNldHRpbmdzPXt0aGlzLnByb3BzLnNldHRpbmdzfSBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0vPixcclxuICAgICAgICAgICAgPE1hcmdpblRvcCAvPixcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJSaWNoUHJlc2VuY2VcIi8+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgey8qKiBvcHRpb25zICovfVxyXG4gICAgICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbXBvbmVudHN9XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz5cclxuICAgICAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUHJldmlld1wiLz5cclxuICAgICAgICAgICAgICAgIHsvKiogcHJldmlldyAqL31cclxuICAgICAgICAgICAgICAgIDxScGNQcmV2aWV3IHNldHRpbmdzPXt0aGlzfS8+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+LFxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9e3dpbmRvdy5vaGdvZG9oZnVja30+XHJcbiAgICAgICAgICAgICAgICBPaCBnb2QgT2ggZnVja1xyXG4gICAgICAgICAgICA8L2J1dHRvbj4sXHJcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIilcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICBTZWUgPyBJIHB1bGxlZCBhIGxpdGxlIHNuZWFreSBvbiB5YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnNDb21wb25lbnRzKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNDb21wb25lbnRzIHx8ICh0aGlzLl9vcHRpb25zQ29tcG9uZW50cyA9IFJQQ1Byb3BzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYoZS50eXBlID09PSBcInRleHRcIil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0VGV4dCBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPlxyXG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gWzxJbnB1dE51bWJlciBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPl0vKlxyXG4gICAgICAgICAgICAgICAgaWYoZS5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoPERpc2NvcmRCdXR0b24gdGl0bGU9XCJDb3B5IEN1cnJlbnQgVGltZXN0YW1wXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICAgICAgICAgICAgICB9fSAvPilcclxuICAgICAgICAgICAgICAgIH0qL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJjaG9pY2VcIil7XHJcbiAgICAgICAgICAgICAgICBpZihbXCJhc3NldHMuc21hbGxcIiwgXCJhc3NldHMubGFyZ2VcIl0uaW5jbHVkZXMoZS5pZCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRDaG9pY2Ugc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9IGNob2ljZXM9e1t7dmFsdWU6IFwibm9uZVwiLCBsYWJlbDogXCJObyBhc3NldHNcIn1dLmNvbmNhdCh0aGlzLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpfS8+XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJVbmtub3duIGNob2ljZS5cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICB9XHJcbn1cclxuY29uc3QgUlBDUHJvcHMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiQXBwbGljYXRpb24gSURcIixcclxuICAgICAgICBpZDogXCJhcHBsaWNhdGlvbl9pZFwiLFxyXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxyXG4gICAgICAgIGlkOiBcIm5hbWVcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJMaWdodGNvcmRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJEZXRhaWxzXCIsXHJcbiAgICAgICAgaWQ6IFwiZGV0YWlsc1wiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkJyb3dzaW5nIERpc2NvcmRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJTdGF0ZVwiLFxyXG4gICAgICAgIGlkOiBcInN0YXRlXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkIENsaWVudFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlRpbWVzdGFtcCBTdGFydFwiLFxyXG4gICAgICAgIGlkOiBcInRpbWVzdGFtcHMuc3RhcnRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgIGdldCBwbGFjZWhvbGRlcigpe1xyXG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTGFyZ2VBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5sYXJnZVwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU21hbGxBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5zbWFsbFwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbl1cclxuXHJcbmxldCBpbnB1dFRleHRNb2R1bGVzXHJcbmNsYXNzIElucHV0VGV4dCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICBpZihpbnB1dFRleHRNb2R1bGVzICYmIGlucHV0VGV4dE1vZHVsZXNbMF0pcmV0dXJuIGlucHV0VGV4dE1vZHVsZXNcclxuICAgICAgICByZXR1cm4gaW5wdXRUZXh0TW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxyXG4gICAgICAgICAgICBpbnB1dE1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTIsXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgSW5wdXROdW1iZXJNb2R1bGVzXHJcbmNsYXNzIElucHV0TnVtYmVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBJbnB1dE51bWJlck1vZHVsZXMgfHwgKElucHV0TnVtYmVyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JUcmFuc3BhcmVudClbMF0sXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQgcGxhY2Vob2xkZXI9e3NldHRpbmcucGxhY2Vob2xkZXJ9IG5hbWU9e3NldHRpbmcuaWR9IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IHR5cGU9XCJudW1iZXJcIiBvbkNoYW5nZT17KHZhbHVlLCBuYW1lLCBpbnB1dCkgPT4ge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkXSsvZywgXCJcIilcclxuICAgICAgICAgICAgaWYodmFsdWUgPT0gdGhpcy5zdGF0ZS5kYXRhKXtcclxuICAgICAgICAgICAgICAgIGlucHV0LnNldFZhbHVlKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dH1cclxuICAgICAgICAgICAgICAgIHtzZXR0aW5nLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIiA/IFxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICAgICAgICAgIH19IGNvbG9yPVwiYnJhbmRcIj5Db3B5IGN1cnJlbnQgdGltZXN0YW1wPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj4gOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IElucHV0Q2hvaWNlTW9kdWxlc1xyXG5jbGFzcyBJbnB1dENob2ljZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0gPyBcImFzc2V0LVwiK3RoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdIDogXCJub25lXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLnVwZGF0ZVdoZW5GZXRjaGVkKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoZGF0YSl7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZGF0YS52YWx1ZVxyXG5cclxuICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUgPT09IFwibm9uZVwiID8gbnVsbCA6IHZhbHVlLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXHJcbiAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEgPT09IFwibm9uZVwiID8gbnVsbCA6IHRoaXMuc3RhdGUuZGF0YS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gSW5wdXRDaG9pY2VNb2R1bGVzIHx8IChJbnB1dENob2ljZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICBcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIG9wdGlvbnMudW5zaGlmdCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBcIm5vbmVcIixcclxuICAgICAgICAgICAgbGFiZWw6IFwiTm8gYXNzZXRzXCJcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9wdGlvbnM9e29wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IC8+XHJcbiAgICAgICAgICAgICAgICB7Lyo8U2VsZWN0IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IG9wdGlvbnM9e29wdGlvbnN9Lz4qL31cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBEaXZpZGVyTW9kdWxlcyA9IFtdXHJcbmNsYXNzIERpdmlkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIERpdmlkZXJNb2R1bGVzJiZEaXZpZGVyTW9kdWxlc1swXSA/IERpdmlkZXJNb2R1bGVzIDogKERpdmlkZXJNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZGl2aWRlcixcclxuICAgICAgICAgICAgZGl2aWRlckRlZmF1bHRcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXtgJHtkaXZpZGVyLmRpdmlkZXJ9ICR7ZGl2aWRlckRlZmF1bHQuZGl2aWRlckRlZmF1bHR9YH0+PC9kaXY+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIERpc2NvcmRCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdXHJcbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gY29sb3I9XCJicmFuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBScGNQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzID0ge30pe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogXCJwcm9maWxlXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJzID0gW11cclxuXHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXR0aW5ncy5wcmV2aWV3ID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVRhYih0YWIpe1xyXG4gICAgICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmVcclxuICAgICAgICBpZihhbmNpZW50VGFiID09PSB0YWIucHJvcHMuaWQpcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBlLnNldEFjdGl2ZShmYWxzZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSlcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiB0YWIucHJvcHMuaWRcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBwcmV2aWV3ID0gbmV3IHRoaXMucHJldmlldyh7XHJcbiAgICAgICAgICAgIHByZXZpZXc6IHRoaXNcclxuICAgICAgICB9KVxyXG4gICAgICAgIHByZXZpZXcuc2V0U3RhdGUodGhpcy5zdGF0ZS5ycGMpXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYldyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJuYXZcIiBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIkZ1bGwgUHJvZmlsZVwiIGlkPVwicHJvZmlsZVwiLz5cclxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJVc2VyIFBvcG91dFwiIGlkPVwicG9wb3V0XCIvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge3ByZXZpZXcucmVuZGVyKCl9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfSAgIFxyXG5cclxuICAgIGlzQWN0aXZlKHRhYil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlID09PSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJldmlldygpe1xyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxyXG4gICAgICAgIHJldHVybiBQb3BvdXRcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgVGFiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlKXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUluYWN0aXZlYFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMucHJldmlldy5jaGFuZ2VUYWIodGhpcylcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcG9wb3V0TW9kdWxlXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7IC8vIFRPRE86IFByb2JhYmx5IHVzZSBpbnRlcm5hbCBDb21wb25lbnRzIGluc3RlYWQgb2YgbWFraW5nIGl0IGZyb20gc2NyYXRjaC5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZSB8fCAocG9wb3V0TW9kdWxlID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlVc2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRoZW1lR2hvc3RIYWlybGluZUNoYW5uZWxzKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wcm8gJiYgZS5pbmxpbmUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm9vdE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUxLFxyXG4gICAgICAgICAgICBzdHlsaW5nTW9kdWxlMSxcclxuICAgICAgICAgICAgbmFtZVRhZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5TW9kdWxlMSxcclxuICAgICAgICAgICAgdGV4dE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUxLFxyXG4gICAgICAgICAgICBzY3JvbGxlck1vZHVsZTEsXHJcbiAgICAgICAgICAgIG5vdGVNb2R1bGUxLFxyXG4gICAgICAgICAgICBwcm90aXBNb2R1bGUxLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICB1c2VyTW9kdWxlMVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUxLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwodXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCIpXHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgdGltZXN0YW1wQ2xhc3MgPSB0aW1lc3RhbXBDbGFzcyB8fCBhY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wXHJcblxyXG4gICAgICAgIGxldCBpbWFnZXMgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZighZGF0YVtcImFzc2V0cy5sYXJnZVwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICBsZXQgaW1hZ2VzID0gW11cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5sYXJnZVwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMubGFyZ2VcIl19LnBuZ2B9IGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VJbWFnZVVzZXJQb3BvdXR9ICR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXSA/IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZU1hc2tVc2VyUG9wb3V0IDogXCJcIn1gfSAvPilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihkYXRhW1wiYXNzZXRzLnNtYWxsXCJdKXtcclxuICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKDxpbWcgYWx0PVwiXCIgc3JjPXtgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXX0ucG5nYH0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHNTbWFsbEltYWdlVXNlclBvcG91dH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWltYWdlcy5sZW5ndGgpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHN9PlxyXG4gICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfSkoKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJsYy11c2VyUG9wb3V0IGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJQb3BvdXR9IHJvbGU9XCJkaWFsb2dcIiB0YWJpbmRleD1cIi0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJQbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLnZlcnRpY2FsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlDZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRvcH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJXcmFwcGVyTm9ybWFsfSByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthdmF0YXJNb2R1bGUxfSByb2xlPVwiaW1nXCIgc3R5bGU9e3t3aWR0aDogXCI4MHB4XCIsIGhlaWdodDogXCI4MHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiOTJcIiBoZWlnaHQ9XCI4MFwiIHZpZXdCb3g9XCIwIDAgOTIgODBcIiBjbGFzcz17YCR7YXZhdGFyTW9kdWxlMS5tYXNrfSAke2F2YXRhck1vZHVsZTEuc3ZnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgbWFzaz1cInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXthdmF0YXJVUkx9IGFsdD1cIiBcIiBjbGFzcz17YXZhdGFyTW9kdWxlMS5hdmF0YXJ9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1cyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50fSB2aWV3Qm94PVwiMCAwIDgwIDgwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmF2YXRhckhpbnRJbm5lcn0+e01lc3NhZ2VzLlZJRVdfUFJPRklMRX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmhlYWRlclRleHR9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnbkNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5oZWFkZXJUYWdOb05pY2tuYW1lfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtuYW1lVGFnTW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS5oZWFkZXJUYWdVc2VybmFtZU5vTmlja25hbWV9YH0+e3VzZXIudXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5VXNlclBvcG91dH0gJHtyb290TW9kdWxlMS5hY3Rpdml0eX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT57TWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlOR308L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW1hZ2VzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17aW1hZ2VzID8gYWN0aXZpdHlNb2R1bGUxLmNvbnRlbnRJbWFnZXNVc2VyUG9wb3V0IDogYWN0aXZpdHlNb2R1bGUxLmNvbnRlbnROb0ltYWdlc1VzZXJQb3BvdXR9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLm5hbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLm5hbWVOb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTR9YH0gdGl0bGU9e2RhdGEubmFtZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEuZGV0YWlscylyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiB0aXRsZT17ZGF0YS50aXRsZX0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5kZXRhaWxzfT57ZGF0YS5kZXRhaWxzfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLnN0YXRlKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9e2RhdGEuc3RhdGV9PntkYXRhLnN0YXRlfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQodGltZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7cm9vdE1vZHVsZTEuYm9keX0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3RIYWlybGluZX0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcn0gJHtyb290TW9kdWxlMS5ib2R5SW5uZXJ9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmJvZHlUaXRsZX0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake25vdGVNb2R1bGUxLm5vdGV9ICR7cm9vdE1vZHVsZTEubm90ZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBwbGFjZWhvbGRlcj17TWVzc2FnZXMuTk9URV9QTEFDRUhPTERFUn0gbWF4bGVuZ3RoPVwiMjU2XCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBjbGFzcz17QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF0uc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gc3R5bGU9e3toZWlnaHQ6IFwiMzZweFwifX0gZGlzYWJsZWQ+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmZvb3Rlcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEucHJvdGlwfSAke3Byb3RpcE1vZHVsZTEuaW5saW5lfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9e2Ake3Byb3RpcE1vZHVsZTEucHJvfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWB9IHN0eWxlPXt7Y29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIn19PntNZXNzYWdlcy5QSU5ORURfTUVTU0FHRVNfUFJPX1RJUH08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtjb2xvck1vZHVsZTEuY29sb3JTdGFuZGFyZH0gJHtzaXplTW9kdWxlMS5zaXplMTR9ICR7cHJvdGlwTW9kdWxlMS50aXB9YH0+e01lc3NhZ2VzLkNPTlRFWFRfTUVOVV9ISU5UfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IFN0YXR1c01vZHVsZXNcclxuY2xhc3MgU3RhdHVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFN0YXR1c01vZHVsZXMgfHwgKFN0YXR1c01vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFByZXNlbmNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZ2V0UHJlc2VuY2UsXHJcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHNcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgbGV0IHN0YXR1cyA9IGdldFByZXNlbmNlLmRlZmF1bHQuZ2V0UHJlc2VuY2UoKS5zdGF0dXNcclxuICAgICAgICBpZihzdGF0dXMgPT09IFwiaW52aXNpYmxlXCIpc3RhdHVzID0gXCJvZmZsaW5lXCJcclxuICAgICAgICByZXR1cm4gPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgeD1cIjYwXCIgeT1cIjYwXCIgZmlsbD1cIiNmZmZmZmZcIiBtYXNrPXtgdXJsKCNzdmctbWFzay1zdGF0dXMtJHtzdGF0dXN9KWB9IGNsYXNzTmFtZT17cG9pbnRlckV2ZW50c30+PC9yZWN0PlxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgdGltZXN0YW1wQ2xhc3MgPSBcIlwiXHJcblxyXG5sZXQgUHJvZmlsZU1vZHVsZXNcclxuY2xhc3MgUHJvZmlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7IC8vIFRPRE86IFByb2JhYmx5IHVzZSBpbnRlcm5hbCBDb21wb25lbnRzIGluc3RlYWQgb2YgbWFraW5nIGl0IGZyb20gc2NyYXRjaC5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFByb2ZpbGVNb2R1bGVzIHx8IChQcm9maWxlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlQcm9maWxlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyRmFkZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vdGUgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXNcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTCh1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikgPyBcImdpZlwiIDogXCJwbmdcIilcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlfSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVByb2ZpbGV9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucm9vdH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnRvcFNlY3Rpb25QbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YH0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVySW5mb31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5uYW1lVGFnfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtyb290TW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS51c2VybmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtyb290TW9kdWxlMS5kaXNjcmltaW5hdG9yfT4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtmbGV4TW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZXN9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlcyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJGaWxsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVByb2ZpbGV9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzUHJvZmlsZSA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5fT5cclxuXHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcblx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbkhlYWRlcn0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubm90ZX0gJHtub3RlTW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjQwcHhcIn19IGRpc2FibGVkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25uZWN0ZWRBY2NvdW50cyAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBhY2NvdW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF1cclxuICAgICAgICBsZXQgQWNjb3VudE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRBY2NvdW50cylbMF0uZGVmYXVsdFxyXG5cclxuICAgICAgICBsZXQgYWNjcyA9IEFjY291bnRNb2R1bGUxLmdldEFjY291bnRzKCkuZmlsdGVyKGUgPT4gZS52aXNpYmlsaXR5ID09PSAxKVxyXG4gICAgICAgIGZvcihsZXQgYWNjIG9mIGFjY3Mpe1xyXG4gICAgICAgICAgICBhY2NvdW50cy5wdXNoKDxDb25uZWN0ZWRBY2NvdW50IGFjYz17YWNjfSAvPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGFjY291bnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50c30+XHJcbiAgICAgICAgICAgICAgICAgICAge2FjY291bnRzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBmbG93ZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBhbmNob3JNb2R1bGUxLFxyXG4gICAgICAgICAgICBTb2NpYWxDb25zdGFudHNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hbmNob3IpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXQgJiYgZS5kZWZhdWx0Lm1hcClbMF0uZGVmYXVsdFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgYWNjID0gdGhpcy5wcm9wcy5hY2NcclxuICAgICAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSlcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgPGltZyBhbHQ9e2BMb2dvICR7Y29uc3RhbnRzU29jaWFsLm5hbWV9YH0gY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRJY29ufSBzcmM9e2NvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXl9IC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lSW5uZXJ9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWV9PnthY2MubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIHthY2MudmVyaWZpZWQgPyAoPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyQ29udGFpbmVyfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb259YH0gc3R5bGU9e3t3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNGY1NDVjXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17Zmxvd2VyTW9kdWxlMS5jaGlsZENvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTUuMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9e2Ake2FuY2hvck1vZHVsZTEuYW5jaG9yfSAke2FuY2hvck1vZHVsZTEuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE9wZW5JY29ufSB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IFVzZXJGbGFncyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLlVzZXJGbGFncylbMF0uVXNlckZsYWdzXHJcbiAgICAgICAgbGV0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBbXVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIGluIFVzZXJGbGFncyl7XHJcbiAgICAgICAgICAgIGlmKHVzZXIuaGFzRmxhZyhVc2VyRmxhZ3NbZmxhZ05hbWVdKSlzZXJpYWxpemVkLnB1c2goZmxhZ05hbWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIG9mIHNlcmlhbGl6ZWQpe1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoYWJsZSA9IGBwcm9maWxlQmFkZ2Uke2ZsYWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcChlID0+IGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWBcclxuICAgICAgICAgICAgc2VhcmNoYWJsZSA9IHNlYXJjaGFibGUucmVwbGFjZShcIkh5cGVzcXVhZE9ubGluZVwiLCBcIkh5cGVTcXVhZE9ubGluZVwiKVxyXG4gICAgICAgICAgICBpZighcm9vdE1vZHVsZVtzZWFyY2hhYmxlXSljb250aW51ZVxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT17c2VhcmNoYWJsZX0vPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbil7XHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKDxCYWRnZSBuYW1lPVwicHJvZmlsZUJhZGdlUHJlbWl1bVwiIC8+KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlV3JhcHBlcn0+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uLy4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19MYXllciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMua2V5dXBMaXN0ZW5lciA9IHRoaXMua2V5dXBMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGtleXVwTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAyNykge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yZWZzLnJvb3QucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5rZXl1cExpc3RlbmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGhpc05vZGUgPSBET00ucXVlcnkoYCMke3RoaXMucHJvcHMuaWR9YCk7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHsxLjEgLSAwLjEgKiBwcm9ncmVzc30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqICgxIC0gcHJvZ3Jlc3MpfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSAxIC0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiLnB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5yZW1vdmUoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiBwcm9ncmVzcyArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsYXllciA9IERPTS5xdWVyeShcIltjbGFzcyo9XFxcImxheWVyLVxcXCJdXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5hZGQoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiAoMSAtIHByb2dyZXNzKSArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImxheWVyIGJkLWxheWVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyICYmIGUuYW5pbWF0aW5nKVswXS5sYXllciwgaWQ6IHRoaXMucHJvcHMuaWQsIHJlZjogXCJyb290XCIsIHN0eWxlOiB7b3BhY2l0eTogMCwgdHJhbnNmb3JtOiBcInNjYWxlKDEuMSkgdHJhbnNsYXRlWigwcHgpXCJ9fSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi90b29sc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVGFiQmFyU2VwYXJhdG9yIGZyb20gXCIuLi90YWJCYXJTZXBhcmF0b3JcIjtcclxuaW1wb3J0IFRhYkJhckhlYWRlciBmcm9tIFwiLi4vdGFiQmFySGVhZGVyXCI7XHJcbmltcG9ydCBUYWJCYXJJdGVtIGZyb20gXCIuLi90YWJCYXJJdGVtXCI7XHJcblxyXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9zZXJ2ZXJDYXJkXCI7XHJcbmltcG9ydCBTaWRlYmFyVmlldyBmcm9tIFwiLi9zaWRlYmFyVmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1B1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VDYXRlZ29yeSA9IHRoaXMuY2hhbmdlQ2F0ZWdvcnkuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24gPSB0aGlzLmNoZWNrQ29ubmVjdGlvbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuam9pbiA9IHRoaXMuam9pbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdCA9IHRoaXMuY29ubmVjdC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLkd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0R3VpbGRzXCJdKTtcclxuICAgICAgICB0aGlzLkF2YXRhckRlZmF1bHRzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJERUZBVUxUX0FWQVRBUlNcIl0pO1xyXG4gICAgICAgIHRoaXMuSW52aXRlQWN0aW9ucyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO1xyXG4gICAgICAgIHRoaXMuU29ydGVkR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRTb3J0ZWRHdWlsZHNcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZXJ2ZXJzOiBbXSxcclxuICAgICAgICAgICAgbmV4dDogbnVsbCxcclxuICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IDAsXHJcbiAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnByb3BzLnJvb3RJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChxdWVyeSwgY2xlYXIpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBmZXRjaChgJHtzZWxmLmVuZFBvaW50fSR7cXVlcnl9JHtxdWVyeSA/IFwiJnNjaGVtYT1uZXdcIiA6IFwiP3NjaGVtYT1uZXdcIn1gLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IGF3YWl0IHJlcy50ZXh0KClcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgc2VydmVycyA9IGRhdGEucmVzdWx0cy5yZWR1Y2UoKGFyciwgc2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuam9pbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgLy8gYXJyLnB1c2goPFNlcnZlckNhcmQgc2VydmVyPXtzZXJ2ZXJ9IGpvaW49e3NlbGYuam9pbn0vPik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzID0gc2VsZi5zdGF0ZS5zZXJ2ZXJzLmNvbmNhdChzZXJ2ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vc2VydmVycy51bnNoaWZ0KHNlbGYuYmRTZXJ2ZXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZW5kID0gZGF0YS5zaXplICsgZGF0YS5mcm9tO1xyXG4gICAgICAgICAgICBkYXRhLm5leHQgPSBgP2Zyb209JHtlbmR9YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgZGF0YS5uZXh0ICs9IGAmdGVybT0ke3NlbGYuc3RhdGUudGVybX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5KSBkYXRhLm5leHQgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICAgICAgaWYgKGVuZCA+PSBkYXRhLnRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5uZXh0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gYFNob3dpbmcgMS0ke2VuZH0gb2YgJHtkYXRhLnRvdGFsfSByZXN1bHRzIGluICR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSB0aXRsZSArPSBgIGZvciAke3NlbGYuc3RhdGUudGVybX1gO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IHNlcnZlcnMsXHJcbiAgICAgICAgICAgICAgICBuZXh0OiBkYXRhLm5leHRcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coc2VsZik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlZnMuc2J2LnJlZnMuY29udGVudFNjcm9sbGVyLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkZhaWxlZCB0byBsb2FkIHNlcnZlcnMuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHNcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGpvaW4oc2VydmVyQ2FyZCkge1xyXG4gICAgICAgIGlmIChzZXJ2ZXJDYXJkLnByb3BzLnBpbm5lZCkgcmV0dXJuIHRoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGUoc2VydmVyQ2FyZC5wcm9wcy5pbnZpdGVfY29kZSk7XHJcblxyXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMuam9pbkVuZFBvaW50fS8ke3NlcnZlckNhcmQucHJvcHMuc2VydmVyLmlkZW50aWZpZXJ9YCx7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNlcnZlckNhcmQuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGYud2luZG93T3B0aW9ucztcclxuICAgICAgICBvcHRpb25zLnggPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5YICsgd2luZG93LmlubmVyV2lkdGggLyAyIC0gb3B0aW9ucy53aWR0aCAvIDIpO1xyXG4gICAgICAgIG9wdGlvbnMueSA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gb3B0aW9ucy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93ID0gbmV3ICh3aW5kb3cucmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5Ccm93c2VyV2luZG93KShvcHRpb25zKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9aHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCI7XHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1cmwgIT0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBzZWxmLmpvaW5XaW5kb3cuY2xvc2UoKTtcclxuICAgICAgICAgICAgc2VsZi5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cubG9hZFVSTCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB3aW5kb3dPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgIGhlaWdodDogNTUwLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzI4MmIzMFwiLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1pbmltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgYWx3YXlzT25Ub3A6IHRydWUsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgY2VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcclxuICAgICAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJkU2VydmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCI3NTAwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjIwMDAwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIEJldHRlckRpc2NvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc2VydmVyMiA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjMwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjUwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIExpZ2h0Y29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2F2YXRhcnMzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzY1NjkwMDU4P3M9MjAwJnY9NFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCI3ZUZmZjJBXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyMiwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vam9pbi5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9gLHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IDAsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJWaWV3LCB7cmVmOiBcInNidlwifSwgdGhpcy5jb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2lkZWJhcjoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLnNpZGViYXJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLmNvbnRlbnRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9vbHM6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7a2V5OiBcInB0XCIsIHJlZjogXCJ0b29sc1wiLCBvbkNsaWNrOiB0aGlzLmNsb3NlfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpZGViYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyXCIsIGtleTogXCJwc1wifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhciBTSURFXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiLCBzdHlsZToge2ZvbnRTaXplOiBcIjE2cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiUHVibGljIFNlcnZlcnNcIlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhckhlYWRlciwge3RleHQ6IFwiQ2F0ZWdvcmllc1wifSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5QnV0dG9ucy5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySXRlbSwge2lkOiBpbmRleCwgb25DbGljazogdGhpcy5jaGFuZ2VDYXRlZ29yeSwga2V5OiBpbmRleCwgdGV4dDogdmFsdWUsIHNlbGVjdGVkOiB0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgPT09IGluZGV4fSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10ZXh0LWlucHV0IGZsZXgtdmVydGljYWxcIiwgc3R5bGU6IHt3aWR0aDogXCIxNzJweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge3JlZjogXCJzZWFyY2hpbnB1dFwiLCBvbktleURvd246IHRoaXMuc2VhcmNoS2V5RG93biwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcInRleHRcIiwgY2xhc3NOYW1lOiBcImlucHV0IGRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiU2VhcmNoLi4uXCIsIG1heExlbmd0aDogXCI1MFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoS2V5RG93bihlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYD90ZXJtPSR7ZS50YXJnZXQudmFsdWV9YDtcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKHF1ZXJ5LCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2F0ZWdvcnlCdXR0b25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXCJBbGxcIiwgXCJGUFMgR2FtZXNcIiwgXCJNTU8gR2FtZXNcIiwgXCJTdHJhdGVneSBHYW1lc1wiLCBcIk1PQkEgR2FtZXNcIiwgXCJSUEcgR2FtZXNcIiwgXCJUYWJsZXRvcCBHYW1lc1wiLCBcIlNhbmRib3ggR2FtZXNcIiwgXCJTaW11bGF0aW9uIEdhbWVzXCIsIFwiTXVzaWNcIiwgXCJDb21tdW5pdHlcIiwgXCJMYW5ndWFnZVwiLCBcIlByb2dyYW1taW5nXCIsIFwiT3RoZXJcIl07XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlQ2F0ZWdvcnkoaWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5yZWZzLnNlYXJjaGlucHV0LnZhbHVlID0gXCJcIjtcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogaWQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnNlYXJjaChgP2NhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbaWRdfWAsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHRoaXMuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuY29ubmVjdGlvbi5zdGF0ZSA9PT0gMSkgcmV0dXJuIHNlbGYubm90Q29ubmVjdGVkO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge3JlZjogXCJjb250ZW50XCIsIGtleTogXCJwY1wiLCBjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pLFxyXG4gICAgICAgICAgICBzZWxmLmJkU2VydmVyLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubWFwKChzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luOiBzZWxmLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLm5leHQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtzZWxmLnNldFN0YXRlKHtsb2FkaW5nOiB0cnVlfSk7IHNlbGYuc2VhcmNoKHNlbGYuc3RhdGUubmV4dCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIiwgc3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1hcmdpblRvcDogXCIxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUubG9hZGluZyA/IFwiTG9hZGluZ1wiIDogXCJMb2FkIE1vcmVcIlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KVxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3RDb25uZWN0ZWQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy9yZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHsgdGV4dDogc2VsZi5zdGF0ZS50aXRsZSB9KTtcclxuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwibmNjXCIsIHJlZjogXCJjb250ZW50XCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogc2VsZi5jb25uZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjE4cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiMTBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb25uZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksIHNlbGYuYmRTZXJ2ZXJcclxuICAgICAgICApXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYVwiLFxyXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgIFwiRGlzY29yZHNlcnZlcnMuY29tXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gc2VsZi5zdGF0ZTtcclxuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCk7XHJcblxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtjb2xvcjogXCIjYjliYmJlXCIsIGZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIFwiQ29ubmVjdGVkIGFzOiBcIixcclxuICAgICAgICAgICAgICAgIGAke2Nvbm5lY3Rpb24udXNlci51c2VybmFtZX0jJHtjb25uZWN0aW9uLnVzZXIuZGlzY3JpbWluYXRvcn1gXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwYWRkaW5nOiBcIjVweCAxMHB4IDAgMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1pbkhlaWdodDogXCIyMHB4XCJ9LCB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIiwgb25DbGljazogc2VsZi5jb25uZWN0fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbn1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VydmVyQ2FyZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsKSB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBpbWFnZUVycm9yOiBmYWxzZSxcclxuICAgICAgICAgICAgam9pbmVkOiB0aGlzLnByb3BzLmd1aWxkTGlzdC5pbmNsdWRlcyh0aGlzLnByb3BzLnNlcnZlci5pZGVudGlmaWVyKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzZXJ2ZXJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBsZXQgY2FyZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNhcmQgJiYgZS5jYXJkUHJpbWFyeSlbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXhDaGlsZCAmJiBlLl9ob3Jpem9udGFsUmV2ZXJzZSlbMF1cclxuICAgICAgICBsZXQgd3JhcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vV3JhcCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsIC8vIGNhcmRQcmltYXJ5LTFIdi10b1xyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBgJHtjYXJkTW9kdWxlLmNhcmR9ICR7Y2FyZE1vZHVsZS5jYXJkUHJpbWFyeX0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fSBiZC1zZXJ2ZXItY2FyZCR7c2VydmVyLnBpbm5lZCA/IFwiIGJkLXNlcnZlci1jYXJkLXBpbm5lZFwiIDogXCJcIn1gfSxcclxuICAgICAgICAgICAgLy8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgLy8gXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIC8vIHsgY2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGZsZXgtMU8xR0tZIGRpcmVjdGlvblJvdy0zdjN0ZkcganVzdGlmeVN0YXJ0LTJ5SVpvMCBhbGlnblN0cmV0Y2gtMWh3eE1hIG5vV3JhcC0zanludjZcIiB9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtyZWY6IFwiaW1nXCIsIGNsYXNzTmFtZTogXCJiZC1zZXJ2ZXItaW1hZ2VcIiwgc3JjOiBzZXJ2ZXIuaWNvblVybCwgb25FcnJvcjogdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpLCBkcmFnZ2FibGU6IGZhbHNlfSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmZsZXhDaGlsZCtcIiBiZC1zZXJ2ZXItY29udGVudFwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcCtcIiBiZC1zZXJ2ZXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1tZW1iZXItY291bnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubWVtYmVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIE1lbWJlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eSBiZC1zZXJ2ZXItZGVzY3JpcHRpb24tY29udGFpbmVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgc2Nyb2xsZXIgYmQtc2VydmVyLWRlc2NyaXB0aW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGRpcmVjdGlvblJvdy0zdjN0Zkcgbm9XcmFwLTNqeW52NiBiZC1zZXJ2ZXItZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4Q2hpbGQtZmFvVlczIGJkLXNlcnZlci10YWdzXCIsIHN0eWxlOiB7ZmxleDogXCIxIDEgYXV0b1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuY2F0ZWdvcmllcy5qb2luKFwiLCBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBjb2xvckdyZWVuLTI5aUFLWVwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiMzYWMxNWNcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZXJyb3IgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBkaXNhYmxlZC05YUYydWdcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjYzEzYTNhXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VydmVyLmVycm9yICYmICF0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwifSwgb25DbGljazogKCkgPT4ge3RoaXMuam9pbigpO319LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGpvaW4oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5qb2luKHRoaXMpO1xyXG4gICAgICAgIC8vdGhpcy5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNjcm9sbGVyIGZyb20gXCIuLi9zY3JvbGxlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NpZGViYXJWaWV3IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzaWRlYmFyLCBjb250ZW50LCB0b29sc30gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2kgdWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyUmVnaW9uLVZGVFVrTiBzaWRlYmFyLXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2tleTogXCJzaWRlYmFyU2Nyb2xsZXJcIiwgcmVmOiBcInNpZGViYXJTY3JvbGxlclwiLCBzaWRlYmFyOiB0cnVlLCBmYWRlOiBzaWRlYmFyLmZhZGUgfHwgdHJ1ZSwgZGFyazogc2lkZWJhci5kYXJrIHx8IHRydWV9LCBzaWRlYmFyLmNvbXBvbmVudClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudFJlZ2lvbi0zbkR1WXkgY29udGVudC1yZWdpb25cIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50VHJhbnNpdGlvbldyYXAtM2hxT0VXIGNvbnRlbnQtdHJhbnNpdGlvbi13cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2QgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAtM1laWGRtIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3QtMjhNU24wIHNjcm9sbGVyVHJhY2stMVpJcHN2XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlci0yNm5jMWUgY29udGVudC1yZWdpb24tc2Nyb2xsZXIgc2Nyb2xsZXJcIiwgcmVmOiBcImNvbnRlbnRTY3JvbGxlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRDb2x1bW4tMmhySVlIIGNvbnRlbnRDb2x1bW5EZWZhdWx0LTFWUWtHTSBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LCBjb250ZW50LmNvbXBvbmVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29scy5jb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1JlbG9hZEljb24gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcclxuICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCIjZGNkZGRlXCIsXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtcmVsb2FkIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnByb3BzLm9uQ2xpY2ssXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge3dpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCIsIGhlaWdodDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwifVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXpcIn0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOiBcIm5vbmVcIiwgZDogXCJNMCAwaDI0djI0SDB6XCJ9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Njcm9sbGVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vc2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5XHJcbiAgICAgICAgbGV0IHNjcm9sbGVyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVySG9yaXpvbnRhbClbMF1cclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhclJlZ2lvblNjcm9sbGVyKVswXVxyXG4gICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSR7dGhpcy5wcm9wcy5mYWRlID8gXCIgXCIrc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZSA6IFwiXCJ9YDtcclxuICAgICAgICBsZXQgc2Nyb2xsZXJDbGFzcyA9IHNjcm9sbGVyTW9kdWxlMS5zY3JvbGxlcitcIiBzY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1Y2sgKi9cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5zaWRlYmFyKSBzY3JvbGxlckNsYXNzICs9IGAgJHtzY3JvbGxlck1vZHVsZTIuc2lkZWJhclJlZ2lvblNjcm9sbGVyfSBzaWRlYmFyLXJlZ2lvbi1zY3JvbGxlcmBcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jb250ZW50Q29sdW1uKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyQ2xhc3MgKz0gXCIgXCIrc2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcitcIiBjb250ZW50LXJlZ2lvbi1zY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMi5jb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwfSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlci13cmFwICAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUcmFja31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyd3JhcFwiLCBjbGFzc05hbWU6IHdyYXBwZXJDbGFzc30sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyXCIsIHJlZjogXCJzY3JvbGxlclwiLCBjbGFzc05hbWU6IHNjcm9sbGVyQ2xhc3N9LFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VjdGlvbnMubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICBpICE9PSAwID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCwge30pIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2V9KSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbXBvbmVudCA9IGJ1dHRvbiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7a2V5OiBcInRpdGxlLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogYnV0dG9uLm9uQ2xpY2t9LCBidXR0b24udGl0bGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgICAgIH0pXTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NUaXRsZSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaEl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9ICF0aGlzLnByb3BzLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCB0aGlzLnByb3BzLmNoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgzIG1hcmdpbi1yZXNldCBtYXJnaW4tcmVzZXQgdWktZmxleC1jaGlsZFwifSwgdGV4dCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3RcclxuXHJcbmNvbnN0IGludGVydmFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkludGVydmFsKVswXVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBvbmVudCwgTWVzc2FnZXMpIHtcclxuICAgIGNsYXNzIFRpbWVSZW5kZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG5ldyBpbnRlcnZhbE1vZHVsZTEuSW50ZXJ2YWwoKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RhcnQoMWUzLCAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZShzZWxmLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RvcCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnREaWRVcGRhdGUoYWN0aXZpdHkpe1xyXG4gICAgICAgICAgICBpZihhY3Rpdml0eS50aW1lc3RhbXBzLmVuZCA9PT0gdGhpcy5wcm9wcy50aW1lc3RhbXBzLmVuZCAmJiBhY3Rpdml0eS50aW1lc3RhbXBzLnN0YXJ0ID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuc3RhcnQpcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0VXBkYXRlZFRpbWUoKXtcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLnByb3BzLnRpbWVzdGFtcHNcclxuICAgICAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCkgLyAxZTM7XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gdGltZXN0YW1wcy5lbmQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihub3csIGNoZWNrVW5peCh0aW1lc3RhbXBzLmVuZCkgLyAxZTMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLnN0YXJ0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZmYoY2hlY2tVbml4KHRpbWVzdGFtcHMuc3RhcnQpIC8gMWUzLCBub3cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogMCxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGltZShudW1iZXIsIHJlbW92ZVplcm8pe1xyXG4gICAgICAgICAgICBpZihyZW1vdmVaZXJvID09PSB1bmRlZmluZWQpcmVtb3ZlWmVybyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gJiYgbnVtYmVyIDw9IDApcmV0dXJuIC0xXHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDEwKXJldHVybiBcIjBcIitudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0RGlmZih0aW1lc3RhbXAsIG5vdyl7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IE1hdGgubWF4KG5vdyAtIHRpbWVzdGFtcCwgMClcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKGhvdXJzKSAlIDYwXHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAvIDYwKSAlIDYwXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogTWF0aC5mbG9vcihob3VycyAvIDM2MDApICUgMjQsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHByb3BzLnRpbWVzdGFtcHNcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VkUHJvcHMgPSBmdW5jdGlvbihwcm9wcywgaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChudWxsID09IHByb3BzKSByZXR1cm4ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB7fVxyXG4gICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5c1tpXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpdGVtcy5pbmRleE9mKGtleSkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHNba2V5XSA9IHByb3BzW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHNcclxuICAgICAgICAgICAgfShwcm9wcywgW1widGltZXN0YW1wc1wiXSlcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gc3RhdGUuaG91cnNcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBzdGF0ZS5taW51dGVzXHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gc3RhdGUuc2Vjb25kc1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnJlbmRlclRpbWUoaG91cnMsICEwKSxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRoaXMucmVuZGVyVGltZShtaW51dGVzKSxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IHRoaXMucmVuZGVyVGltZShzZWNvbmRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZih0aW1lc3RhbXBzLmVuZCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuc3RhcnQgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB1c2VkUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRpbWVSZW5kZXJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrVW5peChlKSB7XHJcbiAgICByZXR1cm4gKFwiXCIgKyBlKS5sZW5ndGggPCAxMyA/IDFlMyAqIGUgOiBlXHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbi8vPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkaXNhYmxlZFBvaW50ZXJFdmVudHMtMXB0Z1RCXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDIzN3B4OyBib3R0b206IDUxcHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwRGlzYWJsZVBvaW50ZXJFdmVudHMtM2VhQkdOXCIgc3R5bGU9XCJvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7XCI+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcktcIj48L2Rpdj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBDb250ZW50LWJxVkxXS1wiPlVzZXIgU2V0dGluZ3M8L2Rpdj5cclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljXCIgc3R5bGU9XCJ0b3A6IDg2MHB4OyBsZWZ0OiA2MzIuNXB4O1wiPlxyXG4vL1x0PGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIHRvb2x0aXBCbGFjay1QUEc0N3ogdG9vbHRpcFRvcC1YRERTeHhcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHRDaGFuZ2Vsb2dcclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5sZXQgVG9vbHRpcENsYXNzZXNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcclxuXHRpZihUb29sdGlwQ2xhc3NlcylyZXR1cm4gVG9vbHRpcENsYXNzZXNcclxuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XHJcbn1cclxubGV0IFRvb2x0aXBMYXllcnNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xyXG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcclxuXHRyZXR1cm4gVG9vbHRpcExheWVycyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwibGF5ZXJcIiwgXCJsYXllckNvbnRhaW5lclwiKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q2xhc3MgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xyXG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xyXG4gICAgaWYgKHRvb2x0aXBDbGFzcykgcmV0dXJuIHRvb2x0aXBDbGFzcztcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcclxufTtcclxuXHJcbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfXB4YDtcclxufTtcclxuXHJcbi8qIDxkaXYgY2xhc3M9XCJsYXllci12OUh5WWMgZGEtbGF5ZXJcIiBzdHlsZT1cImxlZnQ6IDIzNC41cHg7IGJvdHRvbTogNTFweDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyBkYS10b29sdGlwIHRvb2x0aXBUb3AtWEREU3h4IHRvb2x0aXBCbGFjay1QUEc0N3pcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLIGRhLXRvb2x0aXBQb2ludGVyXCI+PC9kaXY+XHJcbiAgICAgICAgVXNlciBTZXR0aW5nc1xyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBjb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpcCAtIHN0cmluZyB0byBzaG93IGluIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zaWRlPXRvcF0gLSBjYW4gYmUgYW55IG9mIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XHJcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLm5vZGUgPSBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHR0aGlzLnNpZGUgPSBzaWRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRcclxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcclxuXHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XHJcblxyXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XHJcblx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMudG9vbHRpcEVsZW1lbnQpO1xyXG5cclxuXHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG5cclxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyh0aGlzLm5vZGUpKTtcclxuXHRcdFx0XHRcdGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXHJcbiAgICBnZXQgY29udGFpbmVyKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzLnNwbGl0KFwiIFwiKVswXStcIiB+IC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdKTsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHRleHQgPSBcIlwifSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gQkRWMi5yZWFjdERvbS5maW5kRE9NTm9kZSh0aGlzKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh0aGlzLm5vZGUsIHRleHQsIHtzdHlsZSwgc2lkZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMudG9vbHRpcDtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1hTdmcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7eG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMTIgMTJcIiwgc3R5bGU6IHt3aWR0aDogXCIxOHB4XCIsIGhlaWdodDogXCIxOHB4XCJ9fSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJnXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJhY2tncm91bmRcIiwgZmlsbDogXCJub25lXCIsIGZpbGxSdWxlOiBcImV2ZW5vZGRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0wIDBoMTJ2MTJIMFwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtjbGFzc05hbWU6IFwiZmlsbFwiLCBmaWxsOiBcIiNkY2RkZGVcIiwgZDogXCJNOS41IDMuMjA1TDguNzk1IDIuNSA2IDUuMjk1IDMuMjA1IDIuNWwtLjcwNS43MDVMNS4yOTUgNiAyLjUgOC43OTVsLjcwNS43MDVMNiA2LjcwNSA4Ljc5NSA5LjVsLjcwNS0uNzA1TDYuNzA1IDZcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJta2RpcnBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9kdWxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJpbXJhZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5YXV6bFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJlcXVlc3RcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicmltcmFmXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInlhdXpsXCIiXSwibmFtZXMiOlsibWluaW11bURpc2NvcmRWZXJzaW9uIiwiY3VycmVudERpc2NvcmRWZXJzaW9uIiwid2luZG93IiwiRGlzY29yZE5hdGl2ZSIsInJlbW90ZUFwcCIsImdldFZlcnNpb24iLCJtaW5TdXBwb3J0ZWRWZXJzaW9uIiwiYmJkVmVyc2lvbiIsIkxDQ2hhbmVsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsIml0ZW1zIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsInJlbW90ZSIsImdldEdsb2JhbCIsInZlcnNpb24iLCJmb290ZXIiLCJUZXh0RWxlbWVudCIsIldlYnBhY2tNb2R1bGVzIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJNb2RhbFN0YWNrIiwiZmluZEJ5UHJvcHMiLCJBbmNob3IiLCJmaW5kIiwibSIsImRpc3BsYXlOYW1lIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsImNsaWNrIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3AiLCJCRFYyIiwiam9pbkxDIiwic3VwcG9ydExpbmsiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJvbkNsaWNrIiwiY2xhc3NOYW1lIiwic2l6ZSIsIlNpemVzIiwiU01BTEwiLCJjb2xvciIsIkNvbG9ycyIsIlNUQU5EQVJEIiwiYmJkQ2hhbmdlbG9nIiwidHlwZSIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwicGx1Z2luTW9kdWxlIiwidGhlbWVNb2R1bGUiLCJCREV2ZW50cyIsInNldHRpbmdzUGFuZWwiLCJEYXRhU3RvcmUiLCJDb250ZW50TWFuYWdlciIsIkNsYXNzTm9ybWFsaXplciIsIkJkQXBpIiwiQ29yZSIsIkNvcmVXcmFwcGVyIiwiY29uc3RydWN0b3IiLCJzZXRDb25maWciLCJpbml0IiwicmVxdWlyZSIsInYyTG9hZGVyIiwiZG9jdW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwiRGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiQWN0aW9uVHlwZXMiLCJzb2NrZXRJZCIsInBpZCIsInByb2Nlc3MiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0RE9NIiwiUmVhY3REb20iLCJSZWFjdENvbXBvbmVudCIsIldpbmRvd0NvbmZpZ0ZpbGUiLCJlbW90ZXMiLCJzY3JlZW5XaWR0aCIsIk1hdGgiLCJtYXgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsImlubmVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpbm5lckhlaWdodCIsImdldEFsbFdpbmRvd1ByZWZlcmVuY2VzIiwiZ2V0V2luZG93UHJlZmVyZW5jZSIsInNldFdpbmRvd1ByZWZlcmVuY2UiLCJpbmplY3RDU1MiLCJjc3MiLCJET00iLCJhZGRTdHlsZSIsImVzY2FwZUlEIiwiY2xlYXJDU1MiLCJyZW1vdmVTdHlsZSIsImxpbmtKUyIsImFkZFNjcmlwdCIsInVubGlua0pTIiwicmVtb3ZlU2NyaXB0IiwiZ2V0UGx1Z2luIiwiaGFzT3duUHJvcGVydHkiLCJwbHVnaW4iLCJnZXRDb3JlIiwibWFpbkNvcmUiLCJhbGVydCIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsImNhbmNlbFRleHQiLCJvcHRpb25zIiwiZmluZE1vZHVsZSIsImZpbHRlciIsImZpbmRBbGxNb2R1bGVzIiwiZmluZEFsbCIsImZpbmRNb2R1bGVCeVByb3BzIiwicHJvcHMiLCJmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzIiwiZmluZE1vZHVsZUJ5UHJvdG90eXBlcyIsInByb3RvcyIsImZpbmRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsImdldEludGVybmFsSW5zdGFuY2UiLCJub2RlIiwialF1ZXJ5IiwiRWxlbWVudCIsImxvYWREYXRhIiwicGx1Z2luTmFtZSIsImdldFBsdWdpbkRhdGEiLCJnZXREYXRhIiwic2F2ZURhdGEiLCJzZXRQbHVnaW5EYXRhIiwic2V0RGF0YSIsImRlbGV0ZURhdGEiLCJkZWxldGVQbHVnaW5EYXRhIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsInN1cHByZXNzRXJyb3JzIiwibWV0aG9kIiwidGVzdEpTT04iLCJpc1BsdWdpbkVuYWJsZWQiLCJpc1RoZW1lRW5hYmxlZCIsImlzU2V0dGluZ0VuYWJsZWQiLCJlbmFibGVTZXR0aW5nIiwib25DaGFuZ2UiLCJkaXNhYmxlU2V0dGluZyIsInRvZ2dsZVNldHRpbmciLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJtYWtlQWRkb25BUEkiLCJjb29raWUiLCJsaXN0IiwibWFuYWdlciIsIkFkZG9uQVBJIiwiZm9sZGVyIiwiaXNFbmFibGVkIiwidG9nZ2xlIiwicmVsb2FkIiwiZ2V0QWxsIiwiayIsImEiLCJQbHVnaW5zIiwiVGhlbWVzIiwiQmV0dGVyRGlzY29yZCIsIkV2ZW50RW1pdHRlciIsImV2ZW50TmFtZSIsImFyZ3MiLCJlbWl0Iiwib2ZmIiwiZXZlbnRBY3Rpb24iLCJyZW1vdmVMaXN0ZW5lciIsInNlbGVjdG9ycyIsInJlbW92ZURhIiwiZ2V0U2VsZWN0b3JzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsImRlZmF1bHRDbGFzc05hbWUiLCJzZWxlY3RzIiwicHVzaCIsInBheW1lbnRTb3VyY2VSb3ciLCJzdWJUZXh0IiwiZGVzY3JpcHRpb25XcmFwcGVyIiwidXNlclNldHRpbmdzQWNjb3VudCIsInZpZXdCb2R5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwibm9ybWFsaXplZFByZWZpeCIsInJhbmRDbGFzcyIsInN0b3AiLCJoYXNQYXRjaGVkIiwidW5wYXRjaENsYXNzTW9kdWxlcyIsIm1vZHVsZUZpbHRlciIsInJldmVydEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicGF0Y2hDbGFzc01vZHVsZXMiLCJub3JtYWxpemVFbGVtZW50IiwicGF0Y2hET01NZXRob2RzIiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJpc05hTiIsImVuZHNXaXRoIiwic3RhcnRzV2l0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9fZXNNb2R1bGUiLCJiYXNlQ2xhc3NOYW1lIiwic3BsaXQiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwiY2FtZWxDYXNlIiwicyIsImkiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiam9pbiIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJyZW1vdmUiLCJjb250YWlucyIsIkRPTVRva2VuTGlzdCIsInRva2VuIiwidG9rZW5zIiwidCIsIkNvbG9yZWRUZXh0IiwiaW5qZWN0Q29sb3JlZFRleHQiLCJjYW5jZWxDb2xvcmVkVGV4dCIsIk1lc3NhZ2VDb21wb25lbnQiLCJiZWZvcmUiLCJtZXRob2RBcmd1bWVudHMiLCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50IiwibWVzc2FnZUNvbnRlbnQiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImFzc2lnbiIsInJlbW92ZUNvbG9yZWRUZXh0IiwiY2xhc3NOYW1lTWFya3VwIiwibWFya3VwIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiLCJwYXRoIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInJlc29sdmUiLCJhcHAiLCJnZXRBcHBQYXRoIiwiTWV0YUVycm9yIiwib3JpZ2luYWxKU1JlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIm9yaWdpbmFsQ1NTUmVxdWlyZSIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsImFkZG9uQ2FjaGUiLCJ0aW1lQ2FjaGUiLCJ3YXRjaGVycyIsImdldENvbnRlbnRSZXF1aXJlIiwicGx1Z2luc0ZvbGRlciIsIl9wbHVnaW5zRm9sZGVyIiwicmVhbHBhdGhTeW5jIiwiZGF0YVBhdGgiLCJ0aGVtZXNGb2xkZXIiLCJfdGhlbWVzRm9sZGVyIiwibG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUiLCJkYXRhU3RvcmUiLCJnZXRTZXR0aW5nR3JvdXAiLCJzZXRTZXR0aW5nR3JvdXAiLCJlbmNyeXB0U2V0dGluZ3NDYWNoZSIsIkpTT04iLCJwYXJzZSIsImRlY3J5cHRTZXR0aW5nc0NhY2hlIiwiaGFzaCIsInJlc3VsdCIsInN1c3BlY3QiLCJzYXZlQWRkb25DYWNoZSIsInN0cmluZ2lmeSIsIndhdGNoQ29udGVudCIsImNvbnRlbnRUeXBlIiwiaXNQbHVnaW4iLCJiYXNlRm9sZGVyIiwiZmlsZUVuZGluZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkUGx1Z2luIiwidW5sb2FkVGhlbWUiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRQbHVnaW4iLCJsb2FkVGhlbWUiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRUaGVtZSIsInVud2F0Y2hDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsImhhc09sZE1ldGEiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwibWV0YSIsInJhd01ldGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJwYXJzZWQiLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwiY2hhckF0IiwibCIsInN1YnN0ciIsInNlbGYiLCJvcmlnaW5hbFJlcXVpcmUiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsImFkZGVkIiwiYXRpbWVNcyIsIm1vZGlmaWVkIiwibXRpbWVNcyIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImZsYXQiLCJFRCIsIldlYlNvY2tldCIsInBhdGNoQXR0cmlidXRlcyIsImluaXRTZXR0aW5ncyIsImNoZWNrRm9yR3VpbGRzIiwiaW5pdGlhbGl6ZSIsImluaXRpYWxpemVTZXR0aW5ncyIsImNvbnRlbnRNYW5hZ2VyIiwiYXRvYiIsImFkZEV2ZW50TGlzdGVuZXIiLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsIm9yaWdpbmFsIiwic2F2ZVNldHRpbmdzIiwibG9hZFNldHRpbmdzIiwic2V0dGluZyIsIkFwaSIsImdldFByZWRpY2F0ZVNlY3Rpb25zIiwic2V0dGluZ01vZHVsZSIsImNhbGwiLCJzZWN0aW9uIiwicG9wZWQiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImxheWVyIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImNoYXQiLCJuZXh0VGljayIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGROb2RlcyIsImJsb2NrRGl2IiwiZGlzdGFudCIsImdldEJhZGdlcyIsImJhZGdlcyIsInN2ZyIsIndpZHRoIiwic2NvcGVzIiwic2NvcGUiLCJjb21wb25lbnQiLCJkaXYyIiwicmVhY3REb20iLCJyZW5kZXIiLCJtZW1iZXJMaXN0UGF0Y2giLCJNZW1iZXJMaXN0SXRlbSIsInJlbmRlckRlY29yYXRvcnMiLCJ1cGRhdGVJbmplY3RvciIsImluamVjdGlvblBhdGgiLCJybXJmIiwieWF1emwiLCJta2RpcnAiLCJyZXF1ZXN0IiwicGFyZW50UGF0aCIsImZvbGRlck5hbWUiLCJ6aXBMaW5rIiwic2F2ZWRaaXAiLCJleHRyYWN0ZWRGb2xkZXIiLCJzdWNjZXNzIiwiZW5jb2RpbmciLCJyZXNwb25zZSIsInN0YXR1c0NvZGUiLCJhbHJlYWR5RXhpc3RzIiwicmVzIiwiZXhpc3RzIiwicmVuYW1lIiwicm91bmQiLCJwZXJmb3JtYW5jZSIsIndyaXRlRmlsZSIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsInppcCIsIm9uIiwiZW50cnkiLCJmaWxlTmFtZSIsInJlYWRFbnRyeSIsImZ1bGxQYXRoIiwic3luYyIsImRpcm5hbWUiLCJvcGVuUmVhZFN0cmVhbSIsInJlYWRTdHJlYW0iLCJwaXBlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJvbmNlIiwiYmFja3VwRm9sZGVyIiwidW5saW5rIiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJyZWxlYXNlQ2hhbm5lbCIsImdsb2JhbHMiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsInN0YWJsZSIsImNhbmFyeSIsInB0YiIsInBsdWdpbkRhdGEiLCJCREZpbGUiLCJ3cml0ZUZpbGVTeW5jIiwic2V0dGluZ3NGaWxlIiwidW5saW5rU3luYyIsIl9pbmplY3Rpb25QYXRoIiwiYmFzZSIsInJvYW1pbmdCYXNlIiwiZ2V0UGF0aCIsInJvYW1pbmdMb2NhdGlvbiIsInJlYWxMb2NhdGlvbiIsImNvbmZpZ0ZpbGUiLCJfY29uZmlnRmlsZSIsIl9CREZpbGUiLCJfc2V0dGluZ3NGaWxlIiwiZ2V0UGx1Z2luRmlsZSIsIkRldk1vZGUiLCJkZWJ1Z0xpc3RlbmVyIiwiY29weVNlbGVjdG9yTGlzdGVuZXIiLCJzdGFydERlYnVnTGlzdGVuZXIiLCJzdGFydENvcHlTZWxlY3RvciIsInN0b3BEZWJ1Z0xpc3RlbmVyIiwic3RvcENvcHlTZWxlY3RvciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ3aGljaCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJjbGFzc0xheWVyIiwiY2xhc3NJdGVtcyIsImRpc2FibGVkUG9pbnRlckV2ZW50cyIsIm1lbnUiLCJhdHRhY2giLCJjbSIsInF1ZXJ5IiwiY29udGFpbmVyIiwibGF5ZXJDb250YWluZXIiLCJjbVdyYXAiLCJzdHlsZUZsZXhpYmxlIiwiYWNjb21tb2RhdGVTY3JvbGxiYXIiLCJhcHBlbmQiLCJjbGllbnRZIiwibGVmdCIsImNsaWVudFgiLCJzY3JvbGxlckNsYXNzZXMiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyIiwicmVtb3ZlQ00iLCJrZXlDb2RlIiwiY21nIiwiY21pIiwiaXRlbSIsImxhYmVsQ29udGFpbmVyIiwiY29sb3JEZWZhdWx0IiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5IiwiZWxlbWVudHMiLCJxdWVyeUFsbCIsImZvY3VzZWQiLCJzZXBhcmF0b3IiLCJzY3JvbGxIZWlnaHQiLCJlbCIsIm5hbWVzIiwicGFyZW50Tm9kZSIsInVuc2hpZnQiLCJvd25lckRvY3VtZW50IiwidGFnTmFtZSIsImZyb20iLCJlbnRyaWVzIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImdldFJ1bGVzIiwic3R5bGVTaGVldHMiLCJzaGVldHMiLCJydWxlcyIsImNzc1J1bGVzIiwiZWxlbWVudFJ1bGVzIiwic2VsZWN0b3JUZXh0IiwibWF0Y2hlcyIsIkRpc2FibGVUeXBpbmciLCJzdGFydFR5cGluZyIsInR5cGluZ01vZHVsZSIsImRpc2FibGVkIiwic3RvcFR5cGluZyIsInJhbmRvbSIsInYiLCJhd2FpdGluZ0JhZGdlc1Byb21pc2VzIiwiYmFkZ2VzVG9GZXRjaCIsIkRpc3RhbnRTZXJ2ZXIiLCJfY2FjaGUiLCJuZXdQcm9taXNlIiwiQ29uc3RhbnRzIiwiZGVmYXVsdFVzZXJzIiwiZmV0Y2hlZEJhZGdlcyIsInVzZXJzIiwiaGFuZGxlUmVxdWVzdCIsIlJvdXRlcyIsInN0YXR1cyIsInJlc3BvbnNlQm9keSIsImpzb24iLCJwcm9taXNlIiwidXNlcl9pZCIsImNhdGNoIiwiTGlnaHRjb3JkRXJyb3IiLCJyb3V0ZSIsInJlamVjdCIsIm5vZGVGZXRjaCIsIlNFUlZFUl9VUkwiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkJ1Z0h1bnRlckJhZGdlIiwiQ2lyY3VzIiwiaGVhZCIsInNjcmlwdCIsInNyYyIsIm9ubG9hZCIsImFuaW1hdGUiLCJ0aW1pbmciLCJfIiwidXBkYXRlIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJodG1sIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImNsb25lTm9kZSIsImVzY2FwZUhUTUwiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwic3BhbkVsZW1lbnQiLCJub2RlVmFsdWUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJjbGFzc25hbWUiLCJpbmRpY2F0b3IiLCJoYXNDbGFzcyIsImV2ZXJ5IiwicmVwbGFjZUNsYXNzIiwib2xkTmFtZSIsIm5ld05hbWUiLCJhcHBlbmRUbyIsInRoaXNOb2RlIiwidGhhdE5vZGUiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJ0YXJnZXROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJuZXdOb2RlIiwibmV4dCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJwcmV2aW91cyIsInByZXZpb3VzQWxsIiwicHJldmlvdXNVbnRpbCIsImluZGV4SW5QYXJlbnQiLCJudW0iLCJpbmRleCIsInBhcmVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJhdHRyaWJ1dGUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0IiwidGV4dENvbnRlbnQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJldmVudCIsImRlbGVnYXRlIiwibmFtZXNwYWNlIiwiaGFzRGVsZWdhdGUiLCJldmVudEZ1bmMiLCJjYW5jZWwiLCJuZXdDYW5jZWwiLCJmaW5kSW5kZXgiLCJfX29mZkFsbCIsIm1hdGNoRmlsdGVyIiwibGlzdGVuZXIiLCJkZWZhdWx0RmlsdGVyIiwib25Nb3VudENoYW5nZSIsIm9uTW91bnQiLCJ3cmFwcGVkQ2FsbGJhY2siLCJvYnNlcnZlciIsIm5vZGVzIiwicmVtb3ZlZE5vZGVzIiwiZGlyZWN0TWF0Y2giLCJwYXJlbnRNYXRjaCIsIm9uVW5tb3VudCIsIm9uQWRkZWQiLCJ3cmFwIiwiZG9tV3JhcHBlciIsInJlc29sdmVFbGVtZW50IiwiRW1vamlSZWdleCIsIkN1c3RvbUVtb2ppTW9kdWxlIiwiQ3VzdG9tRW1vamkiLCJFbW9qaU1vZHVsZUFwaSIsImdldEN1c3RvbUVtb2ppQnlJZCIsIkF1dG9jb21wbGV0ZU1vZHVsZSIsIkF1dG9Db21wbGV0aW9uVGVtcGxhdGVzIiwiZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyIsIkVtb2ppTW9kdWxlUXVlcnkiLCJxdWVyeUVtb2ppUmVzdWx0cyIsIk1lc3NhZ2VzIiwiRU1PSklfTUFUQ0hJTkciLCJndWlsZE1vZHVsZSIsImdldEd1aWxkIiwiZ2V0R3VpbGRzIiwiaXNGZXRjaGluZyIsImVtb2ppU2VhcmNoIiwiZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uSG92ZXIiLCJSIiwicHJlZml4IiwiVGl0bGUiLCJFbW9qaUZpbHRlck1vZHVsZSIsImlzRW1vamlEaXNhYmxlZCIsImlzVXNhYmxlIiwidXNhYmxlIiwic3Vycm9nYXRlcyIsImRpdmVyc2l0eSIsImNhY2hlMiIsInByb2Nlc3NBdHRhY2htZW50IiwiaXNUcnVzdGVkIiwiY2hlY2tWaXJ1c2VzIiwicmVzdWx0Q2FsbGJhY2siLCJyZW1vdmVDYWxsYmFjayIsImlzSGFybWZ1bCIsImtleXdvcmQiLCJvb2YiLCJub19jb21tZW50cyIsInJlZ2V4cHMiLCJyZWdleCIsImhhc2hUb1VybCIsImNoZWNrSGFzaCIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsInVzZXJBZ2VudCIsIl9fcGF0aCIsImlzRnJvbUxvYWRlciIsImNyeXB0byIsIkJ1ZmZlciIsImFsbG9jIiwiY3JlYXRlUmVhZFN0cmVhbSIsImNodW5rIiwiY29uY2F0IiwiaGFzaFJlc3VsdCIsImRpZ2VzdCIsInJlbmRlclRvRWxlbWVudHMiLCJmbG93ZXJTdGFyTW9kdWxlIiwiZmxvd2VyU3RhckNvbnRhaW5lciIsImNoaWxkTW9kdWxlIiwiY2hpbGRDb250YWluZXIiLCJib3JkZXJDb2xvciIsIm5leHROb2RlIiwiY29uZmlybVRleHQiLCJkYW5nZXIiLCJvbkNhbmNlbCIsIm9uQ29uZmlybSIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwidG9vbHRpcFdyYXAiLCJ2aWV3Qm94IiwieCIsInkiLCJtYXNrIiwiZmlsbCIsInBvaW50ZXJFdmVudHMiLCJvZmZpY2lhbCIsInNwYW4iLCJmbG9hdCIsImZsb3dlclN0YXIiLCJnZXRLZXllZEFycmF5IiwiYnVmZmVyIiwiaW5zdGFsbFBhdGgiLCJjdXJzb3IiLCJzdHJva2UiLCJzYXZlIiwiT2JqZWN0U3RvcmFnZSIsImxvY2FsU3RvcmFnZU1vZHVsZSIsImxvY2FsU3RvcmFnZSIsImltcGwiLCJidG9hIiwic2V0SW50ZXJ2YWwiLCJzYWZlSlNPTlBhcnNlIiwiZ2VuZXJhdGVLZXkiLCJkZWNpcGhlciIsImRlY3J5cHRlZCIsImZpbmFsIiwiY2lwaGVyIiwiZW5jcnlwdGVkIiwiUGx1Z2luTW9kdWxlIiwibG9hZFBsdWdpbkRhdGEiLCJsb2FkIiwic2F2ZVBsdWdpbkRhdGEiLCJjaGFubmVsU3dpdGNoIiwic3RhcnRQbHVnaW4iLCJzdG9wUGx1Z2luIiwiZW5hYmxlUGx1Z2luIiwiZGlzYWJsZVBsdWdpbiIsInRvZ2dsZVBsdWdpbiIsInAiLCJmaWxlbmFtZU9yTmFtZSIsImJkcGx1Z2luIiwiZGVsZXRlIiwiZWRpdCIsIm9wZW5JdGVtIiwidXBkYXRlUGx1Z2luTGlzdCIsInNhdmVkIiwibmV3TWVzc2FnZSIsIm9uTWVzc2FnZSIsIm9uU3dpdGNoIiwiVjJfUHVibGljU2VydmVycyIsIl9hcHBlbmRCdXR0b24iLCJMYXllciIsInJvb3RJZCIsIlYyQ19QdWJsaWNTZXJ2ZXJzIiwicm9vdCIsIl9yb290IiwiaW5qZWN0Um9vdCIsImNsYXNzTmFtZUxheWVycyIsImxheWVycyIsImJ1dHRvbiIsImJ0biIsImNpcmNsZUJ1dHRvbk1hc2siLCJjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lciIsImRvd25sb2FkUHJvZ3Jlc3MiLCJ0dXRvcmlhbENvbnRhaW5lciIsImFkZEJ1dHRvbiIsImd1aWxkUGF0Y2giLCJHdWlsZExpc3QiLCJ3ZWJwYWNrTW9kdWxlcyIsIkd1aWxkTGlzdE9sZCIsInJlbW92ZUJ1dHRvbiIsIkJEU2lkZWJhckhlYWRlciIsIlB1cmVDb21wb25lbnQiLCJzaWRlYmFyQ29tcG9uZW50cyIsIkhlYWRlciIsIkl0ZW0iLCJjaGFuZ2Vsb2dCdXR0b24iLCJIaXN0b3J5IiwicmVuZGVyZWQiLCJWMl9TZXR0aW5nc1BhbmVsIiwidXBkYXRlU2V0dGluZ3MiLCJzaWRlYmFyIiwiVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIiwicmVnaXN0ZXJDb21wb25lbnRzIiwicmVnaXN0ZXIiLCJtYWtlQ29tcG9uZW50IiwibGlnaHRjb3JkQ29tcG9uZW50IiwiUHJlc2VuY2VDb21wb25lbnQiLCJBY2NvdW50SW5mb3NDb21wb25lbnQiLCJBcGlQcmV2aWV3Q29tcG9uZW50IiwiY29yZUNvbXBvbmVudCIsImN1c3RvbUNzc0NvbXBvbmVudCIsInJlbmRlckFkZG9uUGFuZSIsImNsYXNzU2lkZWJhciIsImNvbnRlbnRSZWdpb24iLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiY29yZVNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJjYXRlZ29yaWVzIiwiU2V0Iiwic2VjdGlvbnMiLCJsaWdodGNvcmRTZXR0aW5ncyIsIlByZXNlbmNlU2V0dGluZ3MiLCJNc2dMb2dTZXR0aW5ncyIsImNoZWNrZWQiLCJwdWJsaWNTZXJ2ZXJzTW9kdWxlIiwidm9pY2VNb2RlIiwidGZIb3VyIiwiY29sb3JlZFRleHQiLCJkTW9kZSIsIlNldHRpbmdzIiwiZGV2TW9kZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImdldEN1cnJlbnRXaW5kb3ciLCJzZXRBbHdheXNPblRvcCIsIkFudGlBZERNIiwiYmx1clByaXZhdGUiLCJkaXNhYmxlVHlwaW5nIiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsInJlbGF1bmNoIiwiYXJndiIsInF1aXQiLCJWMkNfUHJlc2VuY2VTZXR0aW5ncyIsIlYyQ19BY2NvdW50SW5mb3MiLCJBcGlQcmV2aWV3IiwiQ3NzRWRpdG9yIiwiQ29udGVudExpc3QiLCJDb21wb25lbnQiLCJvcmlnaW5hbFJlbmRlciIsImVudW1lcmFibGUiLCJDYXJkTGlzdCIsIlNldHRpbmdDb21wb25lbnQiLCJwYW5lbHMiLCJwYW5lbCIsImdldENvbXBvbmVudCIsIkxDaXRlbXMiLCJUaGVtZU1vZHVsZSIsImxvYWRUaGVtZURhdGEiLCJ0aGVtZSIsInVuZXNjYXBlIiwic2F2ZVRoZW1lRGF0YSIsImVuYWJsZVRoZW1lIiwiZGlzYWJsZVRoZW1lIiwidG9nZ2xlVGhlbWUiLCJiZHRoZW1lIiwidXBkYXRlVGhlbWVMaXN0IiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJ0cmFuc3BhcmVudCIsImZyYW1lIiwiY2hhckNvZGVBdCIsImdldFRleHRBcmVhIiwiY2hhbm5lbFRleHRBcmVhIiwidGl0bGVXcmFwcGVyIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwiZm9jdXMiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImV4ZWNDb21tYW5kIiwibW9kdWxlTmFtZSIsImdyb3VwQ29sbGFwc2VkIiwiZ3JvdXBFbmQiLCJlc2NhcGUiLCJwYXJhbXMiLCJpbnN0ZWFkIiwic2lsZW50IiwiZm9yY2UiLCJvcmlnTWV0aG9kIiwiY2FuY2VsZWQiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwidGVtcFJldCIsIl9fbW9ua2V5UGF0Y2hlZCIsImRpc2Nvbm5lY3QiLCJoYXNOb3RpY2UiLCJtZW1iZXJsaXN0IiwibWVtYmVyc1dyYXAiLCJmb3JtIiwicmlnaHQiLCJib3R0b20iLCJ0b2FzdFdyYXBwZXIiLCJpY29uIiwidGltZW91dCIsInRvYXN0RWxlbSIsImlubmVyVGV4dCIsIm1vZGFsTW9kdWxlIiwiaGlkZU9uRnVsbHNjcmVlbiIsImhlYWRlck1vZHVsZSIsImhlYWRlciIsImZvb3RlcjJNb2R1bGUiLCJmb2N1c0xvY2siLCJiYWNrZHJvcCIsImJhY2tkcm9wV2l0aExheWVyIiwiY2xvc2luZ0xpc3RlbmVycyIsInBsdWdpbkVycm9ycyIsInRoZW1lRXJyb3JzIiwiZ2VuZXJhdGVUYWIiLCJ0YWJzIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIkZsZXhDaGlsZCIsIlRpdGxlcyIsIkNoYW5nZWxvZyIsImRlZmF1bHRQcm9wcyIsInNlbGVjdGFibGUiLCJNYXJrZG93blBhcnNlciIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJtYXJnaW4iLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiam9pbkJEMiIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwicmVkIiwiVjIiLCJlZGl0b3JEZXRhY2hlZCIsInJlcSIsIndlYnBhY2tKc29ucCIsIl9fZXh0cmFfaWRfXyIsInNob3VsZFByb3RlY3QiLCJ0aGVNb2R1bGUiLCJjbGVhciIsInNvcnQiLCJnZXRUb2tlbiIsImdldEVtYWlsIiwic2hvd1Rva2VuIiwicHJvdGVjdCIsInByb3h5IiwiZnVuYyIsInByb3BOYW1lcyIsInByb3RvTmFtZXMiLCJwcm90b1Byb3AiLCJpbnRlcm5hbCIsImpvaW5CRDEiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsImxlYXZlQkQxIiwiR3VpbGRBY3Rpb25zIiwibGVhdmVHdWlsZCIsImxlYXZlQkQyIiwibGVhdmVMQyIsInJlYWN0Q29tcG9uZW50IiwiYW5jaG9yQ2xhc3NlcyIsInNsYXRlRWRpdG9yQ2xhc3NlcyIsIm1lc3NhZ2VDbGFzc2VzIiwidW5yZWFkTWVudGlvbnNCYXIiLCJndWlsZHNFcnJvciIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiVG9vbHRpcFdyYXBwZXIiLCJUb29sdGlwcyIsImhpZGUiLCJzaG93Iiwic3VibWl0IiwiYWN0aXZhdGVSYWdpbmdEZW1vbiIsImRpc21pc3MiLCJLZXlHZW5lcmF0b3IiLCJMYXllclN0YWNrIiwiVXNlclN0b3JlIiwiQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJvcGVuRE0iLCJ1c2VySWQiLCJzZWxmSWQiLCJwcml2YXRlQ2hhbm5lbElkIiwiZ2V0RE1Gcm9tVXNlcklkIiwic2VsZWN0UHJpdmF0ZUNoYW5uZWwiLCJvcGVuUHJpdmF0ZUNoYW5uZWwiLCJwYXJzZVNldHRpbmdzIiwiVm9pY2VNb2RlIiwibW9kIiwicHJvZmlsTW9kdWxlIiwiZmV0Y2hNdXR1YWxGcmllbmRzIiwiTGlnaHRjb3JkVXNlckJhZGdlIiwibWFyZ2luTW9kdWxlMiIsImRlZmF1bHRNYXJnaW5oNSIsImNvbG9yTW9kdWxlIiwiY29sb3JTdGFuZGFyZCIsInNpemVNb2R1bGUiLCJzY3JvbGxiYXJNb2R1bGUxIiwic2Nyb2xsYmFyR2hvc3RIYWlybGluZSIsIkd1aWxkTW9kdWxlIiwiZ2V0UmVsYXRpb25zaGlwcyIsInNlc3Npb25Nb2R1bGUiLCJnZXRTZXNzaW9ucyIsInNpemUxNCIsImg1IiwiZ2V0UHJvZmlsZVZhbHVlIiwiZ2V0U3RhdGlzdGljcyIsImdldFNlc3Npb25WYWx1ZSIsIm1hcmdpbkJvdHRvbTIwIiwic2Vzc2lvbnNSYXciLCJzZXNzaW9ucyIsInNlc3Npb25JZCIsImNsaWVudEluZm8iLCJvcyIsImNsaWVudCIsImFjdGl2ZSIsImFjdGl2aXRpZXMiLCJyZXBlYXQiLCJjcmVhdGVkQXQiLCJhdmF0YXIiLCJnZXREYXRlIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJmbGFncyIsImhhc1ByZW1pdW1TdWJzY3JpcHRpb24iLCJlbWFpbCIsIm1mYUVuYWJsZWQiLCJtb2JpbGUiLCJwaG9uZSIsInZlcmlmaWVkIiwicmVsYXRpb25zIiwiZnJpZW5kcyIsImlzRnJpZW5kIiwiaXNCbG9ja2VkIiwiaGlnaHRsaWdodEpTIiwiaGlnaGxpZ2h0IiwibWVzc2FnZU1vZHVsZTEiLCJtZXNzYWdlTW9kdWxlMiIsIkNvZGVDb250ZW50IiwiX19odG1sIiwibGFuZ3VhZ2UiLCJtYXJnaW5Cb3R0b204Iiwic2V0dGluZ1RpdGxlIiwiZm9ybU1vZHVsZSIsInN0YXRlcyIsIkZvcm1TZWN0aW9uIiwiYWxsQ29tcG9uZW50cyIsImNvbXAiLCJBbGxQcmV2aWV3cyIsInRhYiIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJnZXRQcm9wcyIsInJlbmRlclByZXZpZXciLCJiYWNrZ3JvdW5kQ29sb3IiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwicmVuZGVyQ29kZSIsImdlbmVyYXRlQ29kZSIsImdldFN0ckZvclByb3AiLCJjb21wUGF0aCIsImxhbmciLCJTdHJpbmciLCIkJHR5cGVvZiIsIlN5bWJvbCIsImZvciIsImNvbXBOYW1lIiwiY29tcENhdGVnb3J5IiwicHJvcFN0cmluZ3MiLCJjaGlsZHJlblByb3AiLCJzdHIiLCJvcGVuVGFnIiwiY2xvc2VUYWciLCJ2aXNpYmxlS2V5IiwicHJvcE9iamVjdCIsImlzTGFzdCIsImlzRmlyc3QiLCJjaGlsZHJlbkRhdGEiLCJtYXJnaW5Cb3R0b20iLCJyZW5kZXJzIiwiVjJDX1BsdWdpbkNhcmQiLCJzaG93U2V0dGluZ3MiLCJzZXRJbml0aWFsU3RhdGUiLCJoYXNTZXR0aW5ncyIsImFkZG9uIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInJlbG9hZHMiLCJ0cnVzdGVkIiwiY2xvc2VTZXR0aW5ncyIsInBhbmVsUmVmIiwic2V0dGluZ3NPcGVuIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVmcyIsInNldHRpbmdzcGFuZWwiLCJzZXRJbW1lZGlhdGUiLCJpc0hpZGRlbiIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJjYXJkTm9kZSIsInRoaXNOb2RlT2Zmc2V0IiwiY29udGFpbmVyT2Zmc2V0IiwiZW5kUG9pbnQiLCJnZXRTdHJpbmciLCJzZXR0aW5nc0NvbXBvbmVudCIsInJlZiIsIlhTdmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lSW5kZXgiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsInBvcExheWVyIiwibWFrZUxpbmsiLCJtYWtlQnV0dG9uIiwiYWN0aW9uIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bm1vdW50ZWQiLCJsaW5rcyIsImludml0ZSIsInRlc3RlciIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJpc1NjYW5uaW5nIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvcGVuRm9sZGVyIiwic2hvdWxkRGVsZXRlIiwiY29uZmlybURlbGV0ZSIsInNvcnRPcHRpb25zIiwiZGlyZWN0aW9ucyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0QWRkb25zIiwic29ydGVkQWRkb25zIiwiYiIsImNhcCIsImZpcnN0Iiwic2Vjb25kIiwibG9jYWxlQ29tcGFyZSIsInJlbmRlckNoZWNrVXBkYXRlcyIsIlplcmVzUGx1Z2luTGlicmFyeSIsIlBsdWdpblVwZGF0ZXMiLCJjaGVja0FsbCIsIm1hcmdpbkxlZnQiLCJyZWZyZXNoSWNvbiIsImZvcmNlVXBkYXRlIiwiYWRkb25DYXJkcyIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJvcGFjaXR5IiwiVjJDX0NoZWNrYm94IiwiY2hlY2tib3hFbGVtZW50IiwiY2hlY2tib3giLCJjaGVja2JveElubmVyIiwiU2VsZWN0IiwiZHJvcGRvd24iLCJjcmVhdGVSZWYiLCJzaG93TWVudSIsImhpZGVNZW51Iiwib3B0IiwiaXNPcGVuIiwiU2VhcmNoIiwib25LZXlEb3duIiwicGxhY2Vob2xkZXIiLCJWMkNfQ29udGVudENvbHVtbiIsImNvbnRlbnRNb2R1bGUiLCJjb250ZW50Q29sdW1uIiwiY29udGVudENvbHVtbkRlZmF1bHQiLCJWMkNfQ3NzRWRpdG9yIiwibGluZXMiLCJkZXRhY2hlZEVkaXRvciIsIlYyQ19Dc3NFZGl0b3JEZXRhY2hlZCIsInVwZGF0ZUNzcyIsInNhdmVDc3MiLCJkZXRhY2giLCJkZXRhY2hlZCIsImNvbXBvbmVudERpZE1vdW50IiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXNzaW9uIiwic2V0TW9kZSIsInNldFNob3dQcmludE1hcmdpbiIsInNldEZvbnRTaXplIiwiZGVzdHJveSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsImRldGFjaGVkUm9vdCIsImNvZGVNaXJyb3IiLCJsaW5lTnVtYmVycyIsIm1vZGUiLCJpbmRlbnRVbml0Iiwic2Nyb2xsYmFyU3R5bGUiLCJfY2NzcyIsImNjc3MiLCJ1cGRhdGVMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJTZXR0aW5nc1RpdGxlIiwiQ2hlY2tib3giLCJib3JkZXJSaWdodCIsImJvcmRlckxlZnQiLCJmb250U2l6ZSIsImFyZyIsImdldFZhbHVlIiwiZHJvb3QiLCJpbmplY3REZXRhY2hlZFJvb3QiLCJCREVycm9yQm91bmRhcnkiLCJoYXNFcnJvciIsImNvbXBvbmVudERpZENhdGNoIiwiRGVsZXRlIiwiRG93bkFycm93IiwiRWRpdCIsIm1hcmdpbk1vZHVsZSIsIm1hcmdpblRvcDYwIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIiwicHJldmlldyIsImlzZmV0Y2hpbmciLCJhc3NldENvbXBvbmVudHMiLCJ1cGRhdGVXaGVuRmV0Y2hlZCIsImRlZmF1bHRTZXR0aW5nIiwiUlBDUHJvcHMiLCJhc3NldCIsInVwZGF0ZVByZXZpZXciLCJvcHRpb25zQ29tcG9uZW50cyIsIm9oZ29kb2hmdWNrIiwiX29wdGlvbnNDb21wb25lbnRzIiwiYXJyYXkiLCJpbnB1dFRleHRNb2R1bGVzIiwiSW5wdXRUZXh0IiwicmVtb3ZlS2V5YmluZCIsIl9ob3Jpem9udGFsIiwiaW5wdXRNaW5pIiwic2l6ZTE2Iiwic2l6ZTIwIiwiaW5wdXQiLCJsYXN0RWRpdGVkIiwiaXNUaW1pbmciLCJyb3dNb2R1bGUiLCJmbGV4TW9kdWxlIiwiaW5wdXRNb2R1bGUiLCJzaXplTW9kdWxlMiIsInJvdyIsImZsZXhDaGlsZCIsIklucHV0TnVtYmVyTW9kdWxlcyIsIklucHV0TnVtYmVyIiwiY29sb3JUcmFuc3BhcmVudCIsInNldFZhbHVlIiwiY2xpcGJvYXJkIiwiSW5wdXRDaG9pY2VNb2R1bGVzIiwiSW5wdXRDaG9pY2UiLCJEaXZpZGVyTW9kdWxlcyIsIkRpdmlkZXIiLCJkaXZpZGVyIiwiZGl2aWRlckRlZmF1bHQiLCJEaXNjb3JkQnV0dG9uIiwiUnBjUHJldmlldyIsImNoYW5nZVRhYiIsImFuY2llbnRUYWIiLCJzZXRBY3RpdmUiLCJycGMiLCJmbGV4IiwiaXNBY3RpdmUiLCJQcm9maWxlIiwiUG9wb3V0IiwiVGFiIiwicG9wb3V0TW9kdWxlIiwidXNlclBvcG91dCIsInZlcnRpY2FsIiwiYWxpZ25TdHJldGNoIiwic3RyZWFtZXJNb2RlRW5hYmxlZEJ0biIsImFjdGl2aXR5VXNlclBvcG91dCIsIm11dGVkIiwidGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMiLCJub3RlIiwicHJvIiwiaW5saW5lIiwicm9vdE1vZHVsZTEiLCJmbGV4TW9kdWxlMSIsInN0eWxpbmdNb2R1bGUxIiwibmFtZVRhZ01vZHVsZTEiLCJhY3Rpdml0eU1vZHVsZTEiLCJ0ZXh0TW9kdWxlMSIsInNpemVNb2R1bGUxIiwic2Nyb2xsZXJNb2R1bGUxIiwibm90ZU1vZHVsZTEiLCJwcm90aXBNb2R1bGUxIiwiY29sb3JNb2R1bGUxIiwiYXZhdGFyTW9kdWxlMSIsInVzZXJNb2R1bGUxIiwiYXZhdGFyVVJMIiwiZ2V0QXZhdGFyVVJMIiwidGltZXN0YW1wQ2xhc3MiLCJpbWFnZXMiLCJhc3NldHNMYXJnZUltYWdlVXNlclBvcG91dCIsImFzc2V0c0xhcmdlTWFza1VzZXJQb3BvdXQiLCJhc3NldHNTbWFsbEltYWdlVXNlclBvcG91dCIsImhlYWRlclBsYXlpbmciLCJqdXN0aWZ5Q2VudGVyIiwiYWxpZ25DZW50ZXIiLCJub1dyYXAiLCJoZWFkZXJUb3AiLCJhdmF0YXJXcmFwcGVyTm9ybWFsIiwiYXZhdGFySGludCIsImF2YXRhckhpbnRJbm5lciIsIlZJRVdfUFJPRklMRSIsImhlYWRlclRleHQiLCJob3Jpem9udGFsIiwianVzdGlmeVN0YXJ0IiwiaGVhZGVyVGFnTm9OaWNrbmFtZSIsIm5hbWVUYWciLCJoZWFkZXJUYWdVc2VybmFtZU5vTmlja25hbWUiLCJoZWFkZXJUZXh0Tm9ybWFsIiwiVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlORyIsImJvZHlOb3JtYWwiLCJjb250ZW50SW1hZ2VzVXNlclBvcG91dCIsImNvbnRlbnROb0ltYWdlc1VzZXJQb3BvdXQiLCJuYW1lTm9ybWFsIiwiYWN0aXZpdHlOYW1lIiwidGltZUNvbXBvbmVudCIsInRpbWVzdGFtcFJlbmRlciIsIlRpbWVzdGFtcCIsImVuZCIsInNjcm9sbGVyRmFkZSIsImJvZHlJbm5lciIsImJvZHlUaXRsZSIsIk5PVEUiLCJOT1RFX1BMQUNFSE9MREVSIiwicHJvdGlwIiwiUElOTkVEX01FU1NBR0VTX1BST19USVAiLCJ0aXAiLCJDT05URVhUX01FTlVfSElOVCIsIlN0YXR1c01vZHVsZXMiLCJTdGF0dXMiLCJnZXRQcmVzZW5jZSIsIlByb2ZpbGVNb2R1bGVzIiwidG9wU2VjdGlvblN0cmVhbWluZyIsImFjdGl2aXR5UHJvZmlsZSIsImFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlIiwiYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSIsImFzc2V0c1NtYWxsSW1hZ2VQcm9maWxlIiwidG9wU2VjdGlvblBsYXlpbmciLCJoZWFkZXJJbmZvIiwicHJvZmlsZUJhZGdlcyIsImhlYWRlckZpbGwiLCJjb250ZW50SW1hZ2VzUHJvZmlsZSIsInVzZXJJbmZvU2VjdGlvbiIsInVzZXJJbmZvU2VjdGlvbkhlYWRlciIsIkNvbm5lY3RlZEFjY291bnRzIiwiYWNjb3VudHMiLCJBY2NvdW50TW9kdWxlMSIsImdldEFjY291bnRzIiwiYWNjcyIsInZpc2liaWxpdHkiLCJhY2MiLCJjb25uZWN0ZWRBY2NvdW50cyIsIkNvbm5lY3RlZEFjY291bnQiLCJmbG93ZXJNb2R1bGUxIiwiYW5jaG9yTW9kdWxlMSIsIlNvY2lhbENvbnN0YW50cyIsImNvbnN0YW50c1NvY2lhbCIsImNvbm5lY3RlZEFjY291bnQiLCJjb25uZWN0ZWRBY2NvdW50SWNvbiIsIndoaXRlIiwiZ3JleSIsImNvbm5lY3RlZEFjY291bnROYW1lSW5uZXIiLCJjb25uZWN0ZWRBY2NvdW50TmFtZSIsImNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb24iLCJjb25uZWN0ZWRBY2NvdW50T3Blbkljb24iLCJCYWRnZXMiLCJyb290TW9kdWxlIiwiVXNlckZsYWdzIiwic2VyaWFsaXplZCIsImZsYWdOYW1lIiwiaGFzRmxhZyIsInNlYXJjaGFibGUiLCJCYWRnZSIsInByb2ZpbGVCYWRnZVdyYXBwZXIiLCJwcm9maWxlQmFkZ2UiLCJWMkNfTGF5ZXIiLCJrZXl1cExpc3RlbmVyIiwidHJhbnNmb3JtIiwiY29tcG9uZW50V2lsbE1vdW50IiwiY2hhbmdlQ2F0ZWdvcnkiLCJzZWFyY2hLZXlEb3duIiwiY2hlY2tDb25uZWN0aW9uIiwiY29ubmVjdCIsIkd1aWxkU3RvcmUiLCJBdmF0YXJEZWZhdWx0cyIsIlNvcnRlZEd1aWxkU3RvcmUiLCJzZWxlY3RlZENhdGVnb3J5IiwibG9hZGluZyIsInNlcnZlcnMiLCJjb25uZWN0aW9uIiwiZmV0Y2giLCJzZXJ2ZXIiLCJqb2luZWQiLCJ0ZXJtIiwiY2F0ZWdvcnlCdXR0b25zIiwidG90YWwiLCJzYnYiLCJjb250ZW50U2Nyb2xsZXIiLCJzZXJ2ZXJDYXJkIiwicGlubmVkIiwiYWNjZXB0SW52aXRlIiwiaW52aXRlX2NvZGUiLCJqb2luRW5kUG9pbnQiLCJpZGVudGlmaWVyIiwiY3JlZGVudGlhbHMiLCJ3aW5kb3dPcHRpb25zIiwic2NyZWVuWCIsInNjcmVlblkiLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInJlc2l6YWJsZSIsIm1heGltaXphYmxlIiwibWluaW1pemFibGUiLCJhbHdheXNPblRvcCIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJvbmxpbmUiLCJtZW1iZXJzIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJzZXJ2ZXIyIiwiZ3VpbGRMaXN0IiwiZ2V0RmxhdHRlbmVkR3VpbGRJZHMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsIlNlcnZlckNhcmQiLCJmYWxsYmFjayIsImZsb29yIiwiY29ubmVjdEVuZFBvaW50IiwiU2lkZWJhclZpZXciLCJ0b29scyIsIlRvb2xzIiwiVGFiQmFyU2VwYXJhdG9yIiwic2VhcmNoSW5wdXQiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXJJdGVtIiwibWF4TGVuZ3RoIiwic2VhcmNoaW5wdXQiLCJub3RDb25uZWN0ZWQiLCJjb2x1bW5Nb2R1bGUiLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiVjJDX1NlcnZlckNhcmQiLCJpbWFnZUVycm9yIiwiY2FyZE1vZHVsZSIsImNhcmQiLCJjYXJkUHJpbWFyeSIsIl9ob3Jpem9udGFsUmV2ZXJzZSIsIndyYXBNb2R1bGUiLCJzdHJlYW1lck1vZGVFbmFibGVkIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiZHJhZ2dhYmxlIiwiVjJDX1NpZGViYXJWaWV3IiwiU2Nyb2xsZXIiLCJmYWRlIiwiZGFyayIsIlYyQ19SZWxvYWRJY29uIiwieG1sbnMiLCJWMkNfU2Nyb2xsZXIiLCJzY3JvbGxlckhvcml6b250YWwiLCJzY3JvbGxlck1vZHVsZTIiLCJzaWRlYmFyUmVnaW9uU2Nyb2xsZXIiLCJ3cmFwcGVyQ2xhc3MiLCJzY3JvbGxlckNsYXNzIiwiY29udGVudFJlZ2lvblNjcm9sbGVyIiwiY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcCIsInRoZW1lR2hvc3QiLCJzY3JvbGxlclRyYWNrIiwiVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwiLCJTZXR0aW5nc0dyb3VwIiwiVjJDX1NldHRpbmdzR3JvdXAiLCJidXR0b25Db21wb25lbnQiLCJWMkNfU2V0dGluZ3NUaXRsZSIsIlN3aXRjaEl0ZW0iLCJWMkNfVGFiQmFySGVhZGVyIiwiVjJDX1RhYkJhckl0ZW0iLCJWMkNfVGFiQmFyU2VwYXJhdG9yIiwiaW50ZXJ2YWxNb2R1bGUxIiwiSW50ZXJ2YWwiLCJUaW1lUmVuZGVyIiwiX2ludGVydmFsIiwiZ2V0VXBkYXRlZFRpbWUiLCJnZXREaWZmIiwiY2hlY2tVbml4IiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsInJlbmRlclRpbWUiLCJudW1iZXIiLCJyZW1vdmVaZXJvIiwidXNlZFByb3BzIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfRU5EIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfU1RBUlQiLCJWMkNfVG9vbHMiLCJ0b29sc01vZHVsZSIsInRvb2xzQ29udGFpbmVyIiwiY29udGFpbmVyTW9kdWxlIiwiY2xvc2VCdXR0b24iLCJjbG9zZUJ1dHRvbkJvbGQiLCJrZXliaW5kIiwia2V5YmluZEJvbGQiLCJUb29sdGlwQ2xhc3NlcyIsImdldFRvb2x0aXBDbGFzc2VzIiwiVG9vbHRpcExheWVycyIsImdldFRvb2x0aXBMYXllcnMiLCJnZXRDbGFzcyIsInNpZGVPckNvbG9yIiwidXBwZXJDYXNlIiwidG9vbHRpcENsYXNzIiwiY2xhc3NFeGlzdHMiLCJ0b1B4IiwiRW11bGF0ZWRUb29sdGlwIiwicHJldmVudEZsaXAiLCJ0b29sdGlwRWxlbWVudCIsInRvb2x0aXAiLCJsYWJlbEVsZW1lbnQiLCJ0b29sdGlwQ29udGVudCIsInBvaW50ZXJFbGVtZW50IiwidG9vbHRpcFBvaW50ZXIiLCJwb3BvdXRzIiwiY2FuU2hvd0Fib3ZlIiwiY2FuU2hvd0JlbG93IiwiY2FuU2hvd0xlZnQiLCJjYW5TaG93UmlnaHQiLCJfY2xhc3NOYW1lIiwic2hvd0Fib3ZlIiwic2hvd0JlbG93Iiwic2hvd0xlZnQiLCJzaG93UmlnaHQiLCJjZW50ZXJIb3Jpem9udGFsbHkiLCJjZW50ZXJWZXJ0aWNhbGx5Iiwibm9kZWNlbnRlciIsImZpbmRET01Ob2RlIiwiVjJDX1hTdmciXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FB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QUN3OUIsT0FBQyxFQUFFO0FBQUosS0FBakMsQ0FISixFQUlJNTlCLG1EQUFJLENBQUNpbUIsS0FBTCxDQUFXN2xCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0UsZUFBUyxFQUFFLE1BQVo7QUFBb0I2Z0MsVUFBSSxFQUFFLFNBQTFCO0FBQXFDdkQsT0FBQyxFQUFFO0FBQXhDLEtBQWpDLENBSkosQ0FIRyxDQUFQO0FBVUg7O0FBaEJxRCxDOzs7Ozs7Ozs7OztBQ0YxRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxxQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxvQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxrQyIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJpbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwgcGx1Z2luTW9kdWxlLCB0aGVtZU1vZHVsZSwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGUsIG1haW5Db3JlLCBCRFYyO1xyXG5leHBvcnQgY29uc3QgbWluaW11bURpc2NvcmRWZXJzaW9uID0gXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBjdXJyZW50RGlzY29yZFZlcnNpb24gPSAod2luZG93LkRpc2NvcmROYXRpdmUgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uKCkpIHx8IFwiMC4wLjMwNlwiO1xyXG5leHBvcnQgY29uc3QgbWluU3VwcG9ydGVkVmVyc2lvbiA9IFwiMC4zLjBcIjtcclxuZXhwb3J0IGNvbnN0IGJiZFZlcnNpb24gPSBcIjAuMy40XCI7XHJcbmV4cG9ydCBjb25zdCBMQ0NoYW5lbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiTGlnaHRjb3JkJ3MgY2hhbmdlbG9nXCIsXHJcbiAgICBjaGFuZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJXaGF0J3MgTmV3P1wiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgaXMgbm93IGF2YWlsYWJsZSAhXCIsXHJcbiAgICAgICAgICAgICAgICBcIldlIHJlbW92ZWQgZW1vdGVzLiBUaGF0J3Mgc2FkIGZvciBwZW9wbGUgd2hvIHdlcmUgYWN0dWFsbHkgdXNpbmcgaXQsIGJ1dCBpdCB3YXMgbGVhZGluZyB0byBtb3JlIGxvYWRpbmcgdGltZSBhbmQgc29tZSBiYXNpYyB3b3JkcyB3ZXJlIGVtb3RlLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgaW1hZ2U6IFwiaHR0cHM6Ly9pLmltZ3VyLmNvbS9zZk5ocXdQLnBuZ1wiLFxyXG4gICAgdGl0bGU6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICBzdWJ0aXRsZTogXCJ2XCIrcmVtb3RlLmdldEdsb2JhbChcIkJ1aWxkSW5mb1wiKS52ZXJzaW9uLFxyXG4gICAgZm9vdGVyOiAoZnVuY3Rpb24oKXtcclxuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcclxuICAgICAgICBpZighVGV4dEVsZW1lbnQgfHwgIU1vZGFsU3RhY2spcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcclxuICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgQkRWMi5qb2luTEMoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xyXG4gICAgICAgIHJldHVybiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dEVsZW1lbnQsIHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xyXG4gICAgfSkoKVxyXG59XHJcbmV4cG9ydCBjb25zdCBiYmRDaGFuZ2Vsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJCQkQncyBjaGFuZ2Vsb2cuXCIsXHJcbiAgICBjaGFuZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJXaGF0J3MgTmV3P1wiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCIqKkxpZ2h0Y29yZCoqIGlzIG5vdyB1c2luZyBCYW5kYWdlZEJELiBUaGF0IG1lYW5zIGFsbCBwbHVnaW5zIHlvdSB3ZXJlIHVzaW5nIGNhbiBiZSB1c2VkIHRvbyAhXCIsXHJcbiAgICAgICAgICAgICAgICBcIioqV2luZG93IFRyYW5zcGFyZW5jeSoqIGNoYW5nZXMgd2VyZSBtYWRlIHRvIG1vcmUgY29tcGF0aWJsZSB3aXRoIGV4dGVybmFsIHdpbmRvdyBtYW5hZ2VycyBhbmQgYWRkb25zIGxpa2UgR2xhc3Njb3JkLlwiLFxyXG4gICAgICAgICAgICAgICAgXCJJbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBoYXMgb25jZSBhZ2FpbiBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgdG8gaG9wZWZ1bGx5IGltcHJvdmUgbG9hZGluZyB0aW1lcy5cIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkJ1ZyBGaXhlc1wiLFxyXG4gICAgICAgICAgICB0eXBlOiBcImZpeGVkXCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIlNvbWUgZml4ZXMgcmVsYXRlZCB0byBzaG93aW5nIG1vZGFscyBpbiB0aGUgYEJkQXBpYC5cIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xyXG4gICAgXCJDdXN0b20gY3NzIGxpdmUgdXBkYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0wXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJDdXN0b20gY3NzIGF1dG8gdWRwYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0xXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJCZXR0ZXJEaXNjb3JkIEJsdWVcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLWJcIiwgIGluZm86IFwiUmVwbGFjZSBEaXNjb3JkIGJsdWUgd2l0aCBCRCBCbHVlXCIsICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogZmFsc2UsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwifSxcclxuXHJcbiAgICAvKiBDb3JlICovXHJcbiAgICAvKiA9PT09PT0gKi9cclxuICAgIFwiUHVibGljIFNlcnZlcnNcIjogICAgICAgICAgICAge2lkOiBcImJkYS1ncy0xXCIsICBpbmZvOiBcIkRpc3BsYXkgcHVibGljIHNlcnZlcnMgYnV0dG9uXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJNaW5pbWFsIE1vZGVcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTJcIiwgIGluZm86IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzLlwiLCAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIE1vZGVcIjogICAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtNFwiLCAgaW5mbzogXCJPbmx5IHNob3cgdm9pY2UgY2hhdFwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiSGlkZSBDaGFubmVsc1wiOiAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0zXCIsICBpbmZvOiBcIkhpZGUgY2hhbm5lbHMgaW4gbWluaW1hbCBtb2RlXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJEYXJrIE1vZGVcIjogICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTVcIiwgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIERpc2Nvbm5lY3RcIjogICAgICAgICAgIHtpZDogXCJiZGEtZGMtMFwiLCAgaW5mbzogXCJEaXNjb25uZWN0IGZyb20gdm9pY2Ugc2VydmVyIHdoZW4gY2xvc2luZyBEaXNjb3JkXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiMjQgSG91ciBUaW1lc3RhbXBzXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy02XCIsICBpbmZvOiBcIlJlcGxhY2UgMTJociB0aW1lc3RhbXBzIHdpdGggcHJvcGVyIG9uZXNcIiwgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJDb2xvcmVkIFRleHRcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTdcIiwgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIiwgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIk5vcm1hbGl6ZSBDbGFzc2VzXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTRcIiwgaW5mbzogXCJBZGRzIHN0YWJsZSBjbGFzc2VzIHRvIGVsZW1lbnRzIHRvIGhlbHAgdGhlbWVzLiAoZS5nLiBhZGRzIC5kYS1jaGFubmVscyB0byAuY2hhbm5lbHMtSWUybDZBKVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcblxyXG4gICAgLyogQ29udGVudCAqL1xyXG4gICAgXCJDb250ZW50IEVycm9yIE1vZGFsXCI6ICAgICAgICB7aWQ6IFwiZm9yay1wcy0xXCIsIGluZm86IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjYW4gUGx1Z2luc1wiOiAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTZcIiwgaW5mbzogXCJTY2FuIHBsdWdpbnMgZm9yIGFueSB0aHJlYXQgdGhhdCBjYW4gYmUgaGlkZGVuIGluc2lkZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNob3cgVG9hc3RzXCI6ICAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTJcIiwgaW5mbzogXCJTaG93cyBhIHNtYWxsIG5vdGlmaWNhdGlvbiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJTY3JvbGwgVG8gU2V0dGluZ3NcIjogICAgICAgICB7aWQ6IFwiZm9yay1wcy0zXCIsIGluZm86IFwiQXV0by1zY3JvbGxzIHRvIGEgcGx1Z2luJ3Mgc2V0dGluZ3Mgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgKG9ubHkgaWYgb3V0IG9mIHZpZXcpXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJBdXRvbWF0aWMgTG9hZGluZ1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy01XCIsIGluZm86IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG5cclxuICAgIC8qIERldmVsb3BlciAqL1xyXG4gICAgXCJEZXZlbG9wZXIgTW9kZVwiOiAgICAgICAgIFx0ICB7aWQ6IFwiYmRhLWdzLThcIiwgaW5mbzogXCJEZXZlbG9wZXIgTW9kZSBUb2dnbGVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuICAgIFwiQ29weSBTZWxlY3RvclwiOlx0XHRcdCAge2lkOiBcImZvcmstZG0tMVwiLCBpbmZvOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuICAgIFwiUmVhY3QgRGV2VG9vbHNcIjpcdFx0XHQgIHtpZDogXCJyZWFjdERldlRvb2xzXCIsIGluZm86IFwiQWRkcyByZWFjdCBkZXZlbG9wZXIgdG9vbHMgdG8gdGhlIGRldnRvb2xzLiBNdXN0IGJlIGluc3RhbGxlZCBpbiBHb29nbGUgQ2hyb21lIG9uIHlvdXIgcGMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCAqL1xyXG4gICAgXCJEaXNhYmxlIEJldHRlckRpc2NvcmRcIjogICAgICB7aWQ6IFwiYmQtZGlzYWJsZVwiLCAgaW5mbzogXCJEaXNhYmxlIEJldHRlcmRpc2NvcmQgKHBsdWdpbnMsIHRoZW1lcywgZXRjKSAoTm90IGltcGxlbWVudGVkKS5cIiwgaW1wbGVtZW50ZWQ6IGZhbHNlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQmx1ciBQZXJzb25uYWwgSW5mb3JtYXRpb25zXCI6e2lkOiBcImxpZ2h0Y29yZC02XCIsIGluZm86IFwiQmx1ciBzZW5zaXRpdmUgaW5mb3JtYXRpb25zIGxpa2UgZW1haWwsIHBheW1lbnQgaW5mb3MgYW5kIG1vcmUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQ2FsbGluZyBSaW5nIEJlYXRcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0yXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyBzcGVjaWFsIGNhbGxpbmcgYmVhdC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJEZXZlbG9wZXIgT3B0aW9uc1wiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTFcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzICYgTGlnaHRjb3JkJ3MgSW50ZXJuYWwgRGV2ZWxvcGVyIE9wdGlvbnMuIFRoaXMgYWxsb3cgdGhlIFxcXCJFeHBlcmltZW50c1xcXCIgdGFiLCB0aGUgXFxcIkRldmVsb3BlciBPcHRpb25zXFxcIiB0YWIgYW5kIHRoZSBcXFwiQXBpIENvbXBvbmVudHNcXFwiIHRhYi4gKG11c3QgcmVvcGVuIHNldHRpbmdzKVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRW5hYmxlIExpZ2h0Y29yZCBTZXJ2ZXJzXCI6ICAge2lkOiBcImxpZ2h0Y29yZC01XCIsIGluZm86IFwiRW5hYmxlIExpZ2h0Y29yZCdzIHNlcnZlcnMuIERpc2FibGluZyB0aGlzIHdpbGwgZGlzYWJsZSBjdXN0b20gYmFkZ2VzLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRpc2FibGUgdHlwaW5nXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtN1wiLCBpbmZvOiBcIkRvbid0IGxldCBvdGhlciBzZWUgeW91J3JlIHR5cGluZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG5cclxuICAgIC8qKiBMaWdodGNvcmQgV2luZG93ICovXHJcbiAgICBcIkFsd2F5cy1vbi1Ub3BcIjogICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtM1wiLCBpbmZvOiBcIkVuYWJsZSB3aW5kb3cncyBBbHdheXMtb24tVG9wIG1vZGUsIHdoZXJlIExpZ2h0Y29yZCBzdGF5cyBvbiB0b3Agb2Ygb3RoZXIgYXBwbGljYXRpb25zLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcclxuICAgIC8qKiBSaWNoUHJlc2VuY2UgKi9cclxuICAgIFwiRW5hYmxlXCI6ICAgICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIsIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJzdGF0dXNcIn1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29va2llID0ge1xyXG4gICAgXCJiZGEtZ3MtMVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTNcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtNlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTdcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy04XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0wXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0yXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtN1wiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtYlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWRjLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLWRtLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy02XCI6IHRydWUsXHJcbiAgICBcImZvcmstZXMtMlwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstd3AtMVwiOiBmYWxzZSxcclxuICAgIFwiZm9yay13cC0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWJldGFcIjogdHJ1ZSxcclxuICAgIFwicmVhY3REZXZUb29sc1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0yXCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtM1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTRcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC01XCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC02XCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC03XCI6IGZhbHNlLFxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5nc0Nvb2tpZSA9IHt9O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzUlBDID0ge307XHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0UlBDID0ge1xyXG4gICAgXCJuYW1lXCI6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICBcImFwcGxpY2F0aW9uX2lkXCI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCIsXHJcbiAgICBcInN0YXRlXCI6IFwiTGlnaHRjb3JkIENsaWVudFwiLFxyXG4gICAgXCJkZXRhaWxzXCI6IFwiQnJvd3NpbmcgRGlzY29yZFwiLFxyXG4gICAgXCJ0aW1lc3RhbXBzLnN0YXJ0XCI6IERhdGUubm93KCksXHJcbiAgICBcImFzc2V0cy5zbWFsbFwiOiBudWxsLFxyXG4gICAgXCJhc3NldHMubGFyZ2VcIjogXCI3MTIzMjM4MjEwMzc2ODI3OTFcIlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYmRwbHVnaW5FcnJvcnMgPSBbXTtcclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVFcnJvcnMgPSBbXTsgLy8gZGVmaW5lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG5cclxuZXhwb3J0IGNvbnN0IGJkQ29uZmlnID0gT2JqZWN0LmNyZWF0ZShCZXR0ZXJEaXNjb3JkQ29uZmlnKTtcclxuXHJcbmV4cG9ydCBjb25zdCBiZHRoZW1lcyA9IHt9O1xyXG5leHBvcnQgY29uc3QgYmRwbHVnaW5zID0ge307XHJcblxyXG5leHBvcnQgY29uc3QgcGx1Z2luQ29va2llID0ge307XHJcbmV4cG9ydCBjb25zdCB0aGVtZUNvb2tpZSA9IHt9OyIsImltcG9ydCBsb2NhbFN0b3JhZ2VGaXggZnJvbSBcIi4vbG9jYWxTdG9yYWdlRml4XCI7XHJcbmltcG9ydCBsb2FkaW5nSWNvbiBmcm9tIFwiLi9sb2FkaW5nSWNvblwiO1xyXG5sb2NhbFN0b3JhZ2VGaXgoKTtcclxubG9hZGluZ0ljb24oKTtcclxuXHJcbmNvbnN0IGRlcHJlY2F0ZUdsb2JhbCA9IChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAvLyB2YWx1ZSA9IHR5cGVvZih2YWx1ZSkgIT09IFwib2JqZWN0XCIgPyB2YWx1ZSA6IG5ldyBQcm94eSh2YWx1ZSwge1xyXG4gICAgLy8gICAgIGdldDogZnVuY3Rpb24ob2JqLCBtb2QpIHtcclxuICAgIC8vICAgICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIG9ialttb2RdO1xyXG4gICAgLy8gICAgIH0sXHJcbiAgICAvLyAgICAgc2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KG1vZCkpIHJldHVybiBVdGlscy5lcnIoXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBcIlRyeWluZyB0byBvdmVyd3JpdGUgZGVwcmVjYXRlZCBCRCBnbG9iYWxzXCIpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywga2V5LCB7XHJcbiAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRlZCBHbG9iYWxcIiwgYFwiJHtrZXl9XCIgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gUGxlYXNlIG9ubHkgdXNlIEJkQXBpLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7ICBcclxufTtcclxuXHJcblxyXG5pbXBvcnQgKiBhcyBHbG9iYWxzIGZyb20gXCIuLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBnbG9iYWxLZXlzID0gT2JqZWN0LmtleXMoR2xvYmFscyk7XHJcbmZvciAoY29uc3Qga2V5IG9mIGdsb2JhbEtleXMpIGRlcHJlY2F0ZUdsb2JhbChrZXksIEdsb2JhbHNba2V5XSk7XHJcblxyXG5cclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL21vZHVsZXMvYmRBcGlcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9tb2R1bGVzL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vbW9kdWxlcy9jbGFzc05vcm1hbGl6ZXJcIjtcclxuXHJcbmRlcHJlY2F0ZUdsb2JhbChcIkJEVjJcIiwgQkRWMik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInBsdWdpbk1vZHVsZVwiLCBwbHVnaW5Nb2R1bGUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJ0aGVtZU1vZHVsZVwiLCB0aGVtZU1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIlV0aWxzXCIsIFV0aWxzKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRFdmVudHNcIiwgQkRFdmVudHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJzZXR0aW5nc1BhbmVsXCIsIHNldHRpbmdzUGFuZWwpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJEYXRhU3RvcmVcIiwgRGF0YVN0b3JlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQ29udGVudE1hbmFnZXJcIiwgQ29udGVudE1hbmFnZXIpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDbGFzc05vcm1hbGl6ZXJcIiwgQ2xhc3NOb3JtYWxpemVyKTtcclxuXHJcbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xyXG5cclxuaW1wb3J0IENvcmUgZnJvbSBcIi4vbW9kdWxlcy9jb3JlXCI7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIENvcmUpO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3JlV3JhcHBlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihiZENvbmZpZykge1xyXG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGJkQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBmdW5jdGlvbiBwYXRjaE1vZHVsZUxvYWQoKSB7XHJcbi8vICAgICBjb25zdCBuYW1lc3BhY2UgPSBcImJldHRlcmRpc2NvcmRcIjtcclxuLy8gICAgIGNvbnN0IHByZWZpeCA9IGAke25hbWVzcGFjZX0vYDtcclxuLy8gICAgIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIik7XHJcbi8vICAgICBjb25zdCBsb2FkID0gTW9kdWxlLl9sb2FkO1xyXG4vLyAgICAgLy8gY29uc3QgcmVzb2x2ZUZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWU7XHJcblxyXG4vLyAgICAgTW9kdWxlLl9sb2FkID0gZnVuY3Rpb24ocmVxdWVzdCkge1xyXG4vLyAgICAgICAgIGlmIChyZXF1ZXN0ID09PSBuYW1lc3BhY2UgfHwgcmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuLy8gICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gcmVxdWVzdC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XHJcbi8vICAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQgPT0gXCJhcGlcIikgcmV0dXJuIEJkQXBpO1xyXG4vLyAgICAgICAgIH1cclxuXHJcbi8vICAgICAgICAgcmV0dXJuIGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuLy8gICAgIH07XHJcblxyXG4vLyAgICAgLy8gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgPSBmdW5jdGlvbiAocmVxdWVzdCwgcGFyZW50LCBpc01haW4pIHtcclxuLy8gICAgIC8vICAgICBpZiAocmVxdWVzdCA9PT0gXCJiZXR0ZXJkaXNjb3JkXCIgfHwgcmVxdWVzdC5zdGFydHNXaXRoKFwiYmV0dGVyZGlzY29yZC9cIikpIHtcclxuLy8gICAgIC8vICAgICAgICAgY29uc3QgY29udGVudFBhdGggPSBQbHVnaW5NYW5hZ2VyLmdldFBsdWdpblBhdGhCeU1vZHVsZShwYXJlbnQpO1xyXG4vLyAgICAgLy8gICAgICAgICBpZiAoY29udGVudFBhdGgpIHJldHVybiByZXF1ZXN0O1xyXG4vLyAgICAgLy8gICAgIH1cclxuXHJcbi8vICAgICAvLyAgICAgcmV0dXJuIHJlc29sdmVGaWxlbmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgLy8gfTtcclxuXHJcbi8vICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbi8vICAgICAgICAgTW9kdWxlLl9sb2FkID0gbG9hZDtcclxuLy8gICAgIH07XHJcbi8vIH1cclxuXHJcbi8vIHBhdGNoTW9kdWxlTG9hZCgpO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwsIGRNb2RlLCBwdWJsaWNTZXJ2ZXJzTW9kdWxlO1xyXG4vLyB2YXIgYmRDb25maWcgPSBudWxsO1xyXG5cclxucmVxdWlyZShcInJlcXVlc3RcIikvLyBqdXN0IGluIGNhY2hlIHNvIHBsdWdpbiBjYW4gcmVxdWlyZSBpdCB0b28iLCJleHBvcnQgZGVmYXVsdCAoKSA9PiB7XHJcbiAgICBjb25zdCB2MkxvYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB2MkxvYWRlci5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XHJcbiAgICB2MkxvYWRlci50aXRsZSA9IFwiQmFuZGFnZWRCRCBpcyBsb2FkaW5nLi4uXCI7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHYyTG9hZGVyKTtcclxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dHZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIpLmdldDtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRXaW5kb3cgPSBSZWZsZWN0LmFwcGx5KGNvbnRlbnRXaW5kb3dHZXR0ZXIsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHkoY29udGVudFdpbmRvdywge1xyXG4gICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IG9ialtwcm9wXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdmFsLmJpbmQob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGludGVyY2VwdGlvbiBieSBwYXRjaGluZyBSZWZsZWN0LmFwcGx5IGFuZCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3QsIFwiYXBwbHlcIiwge3ZhbHVlOiBSZWZsZWN0LmFwcGx5LCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIFwiYmluZFwiLCB7dmFsdWU6IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuXHJcbiAgICBjb25zdCBvT3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuO1xyXG4gICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgaWYgKHVybC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpL3dlYmhvb2tzXCIpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShvT3BlbiwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVEZIb3VyIHtcclxuICAgIGluamVjdDI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdHdlbHZlSG91ciA9IG5ldyBSZWdFeHAoYChbMC05XXsxLDJ9KTooWzAtOV17MSwyfSlcXFxccyhBTXxQTSlgKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBkYXRhLnJldHVyblZhbHVlLm1hdGNoKHR3ZWx2ZUhvdXIpO1xyXG4gICAgICAgICAgICBpZiAoIW1hdGNoZWQgfHwgbWF0Y2hlZC5sZW5ndGggIT09IDQpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZWRbM10gPT09IFwiQU1cIikgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIwMFwiIDogbWF0Y2hlZFsxXS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIxMlwiIDogcGFyc2VJbnQobWF0Y2hlZFsxXSkgKyAxMn06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvenkgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiY2FsZW5kYXJGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb3p5IG1vZGVcclxuICAgICAgICBjb25zdCBjYW5jZWxDb21wYWN0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImRhdGVGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb21wYWN0IG1vZGVcclxuICAgICAgICB0aGlzLmNhbmNlbDI0SG91ciA9ICgpID0+IHtjYW5jZWxDb3p5KCk7IGNhbmNlbENvbXBhY3QoKTt9OyAvLyBDYW5jZWwgYm90aFxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZTI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHRoaXMuY2FuY2VsMjRIb3VyKCk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXJcclxuY29uc3QgQ2hhbm5lbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldENoYW5uZWwgJiYgZS5kZWZhdWx0Lmhhc0NoYW5uZWwpWzBdLmRlZmF1bHRcclxubGV0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cclxubGV0IERNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cclxuXHJcbmNvbnN0IGJsb2NrZWQgPSB7fVxyXG5cclxubGV0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF1cclxuZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXIoKXtcclxuICAgIGlmKHVzZXJNb2R1bGUpcmV0dXJuIHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICByZXR1cm4gbnVsbFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQW50aUJvdERNIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5hbnRpRE0gPSB0aGlzLmFudGlETS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG5cclxuICAgICAgICBkaXNwYXRjaGVyLnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIudW5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcclxuICAgIH1cclxuXHJcbiAgICBhbnRpRE0oZXYpe1xyXG4gICAgICAgIGlmKCFldi5tZXNzYWdlLmF1dGhvci5ib3QpcmV0dXJuXHJcbiAgICAgICAgaWYoZXYubWVzc2FnZS5hdXRob3IuaWQgPT09IGdldEN1cnJlbnRVc2VyKCkuaWQpXHJcbiAgICAgICAgaWYoZXYubWVzc2FnZS5ndWlsZF9pZClyZXR1cm5cclxuXHJcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbChldi5tZXNzYWdlLmNoYW5uZWxfaWQpXHJcbiAgICAgICAgaWYoIWNoYW5uZWwpcmV0dXJuIC8vIG1pZ2h0IGJlIGJyb2tlblxyXG5cclxuICAgICAgICBpZihjaGFubmVsLnR5cGUgIT09IDEpcmV0dXJuXHJcblxyXG4gICAgICAgIGlmKGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdKXJldHVybiAvLyBJZiB0aGUgdXNlciB1bmJsb2NrIHRoZSBib3QsIERvbid0IGJsb2NrIGl0IGFnYWluLlxyXG5cclxuICAgICAgICBpZihzY2FuTWVzc2FnZShldi5tZXNzYWdlKSl7XHJcbiAgICAgICAgICAgIGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdID0gdHJ1ZVxyXG4gICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoYFtBZEJsb2NrXTogQmxvY2tlZCAke2V2Lm1lc3NhZ2UuYXV0aG9yLnVzZXJuYW1lfSMke2V2Lm1lc3NhZ2UuYXV0aG9yLmRpc2NyaW1pbmF0b3J9YCwge1xyXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwid2FybmluZ1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCFyZWxhdGlvblNoaXBNb2R1bGUpcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG4gICAgICAgICAgICByZWxhdGlvblNoaXBNb2R1bGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXAoZXYubWVzc2FnZS5hdXRob3IuaWQsIHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBcIkNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgfSwgMilcclxuICAgICAgICAgICAgaWYoIURNTW9kdWxlKURNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cclxuICAgICAgICAgICAgRE1Nb2R1bGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKGNoYW5uZWwuaWQsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2Nhbk1lc3NhZ2UobWVzc2FnZSl7XHJcbiAgICBpZigvKGRpc2NvcmRcXC5nZ3xkaXNjb3JkXFwuY29tXFwvaW52aXRlXFwvfGRpc2NvcmRhcHBcXC5jb21cXC9pbnZpdGVcXC8pL2cudGVzdChtZXNzYWdlLmNvbnRlbnQpKXJldHVybiB0cnVlXHJcbiAgICBpZihFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuZ2cvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5jb20vaW52aXRlL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmRhcHAuY29tL2ludml0ZS9cIikpcmV0dXJuIHRydWVcclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxufVxyXG5mdW5jdGlvbiBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBzZWFyY2gpe1xyXG4gICAgbGV0IGVtYmVkcyA9IG1lc3NhZ2UuZW1iZWRzXHJcbiAgICBpZihlbWJlZHMubGVuZ3RoID09PSAwKXJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIGVtYmVkcy5tYXAoZW1iZWQgPT4ge1xyXG4gICAgICAgIGlmKGVtYmVkLnR5cGUgIT09IFwicmljaFwiKXJldHVybiBmYWxzZVxyXG4gICAgICAgIGlmKChlbWJlZC50aXRsZSB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoKGVtYmVkLmRlc2NyaXB0aW9uIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoKGVtYmVkLmZvb3RlciB8fCBcIlwiKSAmJiBlbWJlZC5mb290ZXIudGV4dCB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoZW1iZWQuZmllbGRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWUuaW5jbHVkZXMoc2VhcmNoKSB8fCBlLm5hbWUuaW5jbHVkZXMoc2VhcmNoKVxyXG4gICAgICAgIH0pLmluY2x1ZGVzKHRydWUpKXJldHVybiB0cnVlXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfSkuaW5jbHVkZXModHJ1ZSlcclxufSIsImltcG9ydCB7c2V0dGluZ3NSUEMsIGRlZmF1bHRSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IEJETW9kdWxlcy5nZXQobT0+bS5EaXNwYXRjaGVyJiZtLmRlZmF1bHQmJm0uZGVmYXVsdC5kaXNwYXRjaClbMF0uZGVmYXVsdFxyXG5jb25zdCBBY3Rpb25UeXBlcyA9IEJETW9kdWxlcy5nZXQobT0+bS5BY3Rpb25UeXBlcylbMF0uQWN0aW9uVHlwZXNcclxuXHJcbmNvbnN0IHNvY2tldElkID0gXCJsaWdodGNvcmQtc3Bvb2Ytc29ja2V0XCJcclxuY29uc3QgcGlkID0gcHJvY2Vzcy5waWRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDdXN0b21SaWNoUHJlc2VuY2Uge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBzZXR0aW5nc1JQQ1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZm9ybWF0ZWRHYW1lKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpcmV0dXJuIG51bGxcclxuICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5nYW1lLm5hbWUgfHwgZGVmYXVsdFJQQy5uYW1lLFxyXG4gICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZ2FtZS5zdGF0ZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICBzbWFsbF9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLnNtYWxsXCJdIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBnYW1lXHJcbiAgICB9XHJcblxyXG4gICAgc2VuZEdhbWUoKXtcclxuICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoKHtcclxuICAgICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuTE9DQUxfQUNUSVZJVFlfVVBEQVRFLFxyXG4gICAgICAgICAgICBzb2NrZXRJZCxcclxuICAgICAgICAgICAgcGlkLFxyXG4gICAgICAgICAgICBhY3Rpdml0eTogdGhpcy5mb3JtYXRlZEdhbWVcclxuICAgICAgICB9KSAgIFxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpIHtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW5hYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNldChzZXR0aW5nc1JQQyB8fCBPYmplY3QuY3JlYXRlKGRlZmF1bHRSUEMpKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCkge1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRpc2FibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZldGNoQXNzZXRzKGFwcGxpY2F0aW9uSWQpe1xyXG4gICAgICAgIGxldCBhc3NldHMgPSBhd2FpdCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBc3NldHMpWzBdLmdldEFzc2V0cyhhcHBsaWNhdGlvbklkKVxyXG4gICAgICAgIGlmKGFzc2V0cy51bmRlZmluZWQgJiYgdHlwZW9mIGFzc2V0cy51bmRlZmluZWQgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEFwcGxpY2F0aW9uXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldHNcclxuICAgIH1cclxuXHJcbiAgICBzZXQoYWN0aXZpdHkpe1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGFjdGl2aXR5XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtwbHVnaW5Db29raWUsIHRoZW1lQ29va2llLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgbWFpbkNvcmUgZnJvbSBcIi4vY29yZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3QgQmRBcGkgPSB7XHJcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBCRFYyLlJlYWN0OyB9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkgeyByZXR1cm4gQkRWMi5SZWFjdERvbTsgfSxcclxuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gQkRWMi5SZWFjdENvbXBvbmVudDt9LFxyXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7cmV0dXJuIFV0aWxzLldpbmRvd0NvbmZpZ0ZpbGU7fSxcclxuICAgIGdldCBzZXR0aW5ncygpIHtyZXR1cm4gc2V0dGluZ3M7fSxcclxuICAgIGdldCBlbW90ZXMoKSB7cmV0dXJuIHt9fSwgLy8gZGVwcmVjYXRlZCwgZGVsZXRlZCBhbGwgZW1vdGVzIGZyb20gYmV0dGVyZGlzY29yZC5cclxuICAgIGdldCBzY3JlZW5XaWR0aCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7IH0sXHJcbiAgICBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XHJcbn07XHJcblxyXG5CZEFwaS5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpO1xyXG59O1xyXG5cclxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuLy9jc3MgPSBjdXN0b20gY3NzXHJcbkJkQXBpLmluamVjdENTUyA9IGZ1bmN0aW9uIChpZCwgY3NzKSB7XHJcbiAgICBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSwgY3NzKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NLnJlbW92ZVN0eWxlKERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuLy9jc3MgPSBjdXN0b20gY3NzXHJcbkJkQXBpLmxpbmtKUyA9IGZ1bmN0aW9uIChpZCwgdXJsKSB7XHJcbiAgICBET00uYWRkU2NyaXB0KERPTS5lc2NhcGVJRChpZCksIHVybCk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkudW5saW5rSlMgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSk7XHJcbn07XHJcblxyXG4vL0dldCBhbm90aGVyIHBsdWdpblxyXG4vL25hbWUgPSBuYW1lIG9mIHBsdWdpblxyXG5CZEFwaS5nZXRQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgaWYgKGJkcGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgIHJldHVybiBiZHBsdWdpbnNbbmFtZV0ucGx1Z2luO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vL0dldCBCZXR0ZXJEaXNjb3JkIENvcmVcclxuQmRBcGkuZ2V0Q29yZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGlvbiBOb3RpY2VcIiwgYEJkQXBpLmdldENvcmUoKSB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLmApO1xyXG4gICAgcmV0dXJuIG1haW5Db3JlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIGEgc3RyaW5nIG9mIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWxcclxuICovXHJcbkJkQXBpLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCB7Y2FuY2VsVGV4dDogbnVsbH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeSBzdHJpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG4vL1Nob3cgdG9hc3QgYWxlcnRcclxuQmRBcGkuc2hvd1RvYXN0ID0gZnVuY3Rpb24oY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBVdGlscy5zaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZSA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRBbGxNb2R1bGVzID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQWxsKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvcHMgPSBmdW5jdGlvbiguLi5wcm9wcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm90b3R5cGVzID0gZnVuY3Rpb24oLi4ucHJvdG9zKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlQcm90b3R5cGVzKHByb3Rvcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlEaXNwbGF5TmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKG5hbWUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyByZWFjdCBpbnN0YW5jZVxyXG5CZEFwaS5nZXRJbnRlcm5hbEluc3RhbmNlID0gZnVuY3Rpb24obm9kZSkge1xyXG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5qUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpIG5vZGUgPSBub2RlWzBdO1xyXG4gICAgcmV0dXJuIEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShub2RlKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5sb2FkRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXREYXRhID0gQmRBcGkubG9hZERhdGE7XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2F2ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xyXG5cclxuLy8gRGVsZXRlcyBkYXRhXHJcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuLy8gUGF0Y2hlcyBvdGhlciBmdW5jdGlvbnNcclxuQmRBcGkubW9ua2V5UGF0Y2ggPSBmdW5jdGlvbih3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gVXRpbHMubW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG4vLyBFdmVudCB3aGVuIGVsZW1lbnQgaXMgcmVtb3ZlZFxyXG5CZEFwaS5vblJlbW92ZWQgPSBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm9uUmVtb3ZlZChub2RlLCBjYWxsYmFjayk7XHJcbn07XHJcblxyXG4vLyBXcmFwcyBmdW5jdGlvbiBpbiB0cnkuLmNhdGNoXHJcbkJkQXBpLnN1cHByZXNzRXJyb3JzID0gZnVuY3Rpb24obWV0aG9kLCBtZXNzYWdlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKTtcclxufTtcclxuXHJcbi8vIFRlc3RzIGZvciB2YWxpZCBKU09OXHJcbkJkQXBpLnRlc3RKU09OID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnRlc3RKU09OKGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuaXNQbHVnaW5FbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhcGx1Z2luQ29va2llW25hbWVdO1xyXG59O1xyXG5cclxuQmRBcGkuaXNUaGVtZUVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gISF0aGVtZUNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzU2V0dGluZ0VuYWJsZWQgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuICEhc2V0dGluZ3NDb29raWVbaWRdO1xyXG59O1xyXG5cclxuQmRBcGkuZW5hYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgdHJ1ZSk7XHJcbn07XHJcblxyXG5CZEFwaS5kaXNhYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgZmFsc2UpO1xyXG59O1xyXG5cclxuQmRBcGkudG9nZ2xlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgIXNldHRpbmdzQ29va2llW2lkXSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkuZ2V0QkREYXRhID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldEJERGF0YShrZXkpO1xyXG59O1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNldEJERGF0YSA9IGZ1bmN0aW9uKGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRCRERhdGEoa2V5LCBkYXRhKTtcclxufTtcclxuXHJcblxyXG5cclxuY29uc3QgbWFrZUFkZG9uQVBJID0gKGNvb2tpZSwgbGlzdCwgbWFuYWdlcikgPT4gbmV3IGNsYXNzIEFkZG9uQVBJIHtcclxuXHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBtYW5hZ2VyLmZvbGRlcjt9XHJcblxyXG4gICAgaXNFbmFibGVkKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gISFjb29raWVbbmFtZV07XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5lbmFibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZGlzYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGUobmFtZSkge1xyXG4gICAgICAgIGlmIChjb29raWVbbmFtZV0pIHRoaXMuZGlzYWJsZShuYW1lKTtcclxuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIucmVsb2FkKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChuYW1lKSB7XHJcbiAgICAgICAgaWYgKGxpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgaWYgKGxpc3RbbmFtZV0ucGx1Z2luKSByZXR1cm4gbGlzdFtuYW1lXS5wbHVnaW47XHJcbiAgICAgICAgICAgIHJldHVybiBsaXN0W25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGxpc3QpLm1hcChrID0+IHRoaXMuZ2V0KGspKS5maWx0ZXIoYSA9PiBhKTtcclxuICAgIH1cclxufTtcclxuXHJcbkJkQXBpLlBsdWdpbnMgPSBtYWtlQWRkb25BUEkocGx1Z2luQ29va2llLCBiZHBsdWdpbnMsIHBsdWdpbk1vZHVsZSk7XHJcbkJkQXBpLlRoZW1lcyA9IG1ha2VBZGRvbkFQSSh0aGVtZUNvb2tpZSwgYmR0aGVtZXMsIHRoZW1lTW9kdWxlKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJkQXBpO1xyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJkQXBpID0gQmRBcGkiLCIvKiBCREV2ZW50cyAqL1xyXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQkRFdmVudHMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlcigpXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJERXZlbnRzID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZGlzcGF0Y2goZXZlbnROYW1lLCAuLi5hcmdzKSB7dGhpcy5lbWl0KGV2ZW50TmFtZSwgLi4uYXJncyk7fVxyXG4gICAgb2ZmKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pIHt0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pO31cclxufTsiLCIvKipcclxuICogQ3JlZGl0cyB0byBAaGVsbGJvdW5kMTMzNyBvbiBnaXRodWIgZm9yIHRoZSBjc3NcclxuICovXHJcblxyXG5pbXBvcnQgRE9NVG9vbHMgZnJvbSBcIi4vZG9tdG9vbHNcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxubGV0IHNlbGVjdG9yc1xyXG5jb25zdCByZW1vdmVEYSA9IFV0aWxzLnJlbW92ZURhXHJcbmZ1bmN0aW9uIGdldFNlbGVjdG9ycygpe1xyXG4gICAgbGV0IHN0YW5kYXJkU2lkZWJhclZpZXcgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgaWYoIXN0YW5kYXJkU2lkZWJhclZpZXcpcmV0dXJuIG51bGxcclxuICAgIGxldCBkZWZhdWx0Q2xhc3NOYW1lID0gcmVtb3ZlRGEoc3RhbmRhcmRTaWRlYmFyVmlldy5zdGFuZGFyZFNpZGViYXJWaWV3KVxyXG4gICAgbGV0IHNlbGVjdHMgPSBbXVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC5wYXltZW50LWluZm8gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZGVzY3JpcHRpb24gJiYgdHlwZW9mIGUuZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIgJiYgZS5kZXNjcmlwdGlvbi5pbmNsdWRlcyhcImZvcm1UZXh0XCIpKVswXS5kZXNjcmlwdGlvbil9YClcclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wYXltZW50U291cmNlUm93KVswXS5wYXltZW50U291cmNlUm93KX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuc3ViVGV4dCAmJiBlLmRlc2NyaXB0aW9uV3JhcHBlcilbMF0uc3ViVGV4dCl9YClcclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyU2V0dGluZ3NBY2NvdW50KVswXS51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcclxuICAgIHJldHVybiBzZWxlY3RzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCbHVyUHJpdmF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMgfHwgZ2V0U2VsZWN0b3JzKClcclxuXHJcbiAgICAgICAgaWYoIXNlbGVjdG9ycyljb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpXHJcbiAgICAgICAgRE9NVG9vbHMuYWRkU3R5bGUoXCJibHVyUHJpdmF0ZVwiLCBgXHJcbiR7c2VsZWN0b3JzWzBdfSwgJHtzZWxlY3RvcnNbMV19LCAke3NlbGVjdG9yc1syXX0ge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcclxuICAgIGZpbHRlcjogYmx1cig0cHgpO1xyXG4gICAgb3BhY2l0eTogLjg7XHJcbn1cclxuXHJcbiR7c2VsZWN0b3JzWzBdfTpob3ZlciwgJHtzZWxlY3RvcnNbMV19OmhvdmVyLCAke3NlbGVjdG9yc1syXX06aG92ZXIge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBub25lO1xyXG4gICAgb3BhY2l0eTogMTtcclxufWApXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBET01Ub29scy5yZW1vdmVTdHlsZShcImJsdXJQcml2YXRlXCIpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBcImRhXCI7XHJcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENsYXNzTm9ybWFsaXplciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CREV2ZW50cyA9IHRoaXNcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXRjaERPTU1ldGhvZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIW1hdGNoLmxlbmd0aCB8fCBtYXRjaC5sZW5ndGggPCAyKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hET01NZXRob2RzKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24odG9rZW4pIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjb250YWlucywgdGhpcywgW3Rva2VuLnNwbGl0KFwiIFwiKVswXV0pO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdG9rZW5zLmV2ZXJ5KHQgPT4gY29udGFpbnMuY2FsbCh0aGlzLCB0KSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoYWRkLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHJlbW92ZSwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29sb3JlZFRleHQge1xyXG4gICAgaW5qZWN0Q29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsQ29sb3JlZFRleHQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbENvbG9yZWRUZXh0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcyB8fCAhcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQ29udGVudCA9IHByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VDb250ZW50LnR5cGUgfHwgIW1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSB8fCBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuZGlzcGxheU5hbWUgIT0gXCJNZXNzYWdlQ29udGVudFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVHlwZSA9IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZTtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHlwZS5fX29yaWdpbmFsTWV0aG9kKSByZXR1cm47IC8vIERvbid0IHBhdGNoIGFnYWluXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSA9IGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsVHlwZShwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSBzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdID8gcHJvcHMubWVzc2FnZS5jb2xvclN0cmluZyB8fCBcIlwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLnN0eWxlID0ge2NvbG9yOiByb2xlQ29sb3J9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbFR5cGU7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLCBvcmlnaW5hbFR5cGUpO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lTWFya3VwID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXS5tYXJrdXBcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2NsYXNzTmFtZU1hcmt1cC5zcGxpdChcIiBcIilbMF0pLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge2JkQ29uZmlnLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luQ2VydGlmaWVyLCB7IGVuY3J5cHRTZXR0aW5nc0NhY2hlLCBkZWNyeXB0U2V0dGluZ3NDYWNoZSwgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IHsgY2FwdHVyZVJlamVjdGlvblN5bWJvbCB9IGZyb20gXCJldmVudHNcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcbmNsYXNzIE1ldGFFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIk1ldGFFcnJvclwiO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9yaWdpbmFsSlNSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdO1xyXG5jb25zdCBvcmlnaW5hbENTU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID8gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA6ICgpID0+IHtyZXR1cm4gbnVsbDt9O1xyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuZXhwb3J0IGxldCBhZGRvbkNhY2hlID0ge31cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInBsdWdpblwiKTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInRoZW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwbHVnaW5zRm9sZGVyKCkge3JldHVybiB0aGlzLl9wbHVnaW5zRm9sZGVyIHx8ICh0aGlzLl9wbHVnaW5zRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwicGx1Z2lucy9cIikpKTt9XHJcbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XHJcblxyXG4gICAgbG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKXtcclxuICAgICAgICBpZih0eXBlb2YgZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSAhPT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IEpTT04ucGFyc2UoZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSkpXHJcbiAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSB7fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5rZXlzKGFkZG9uQ2FjaGUpXHJcbiAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgIGlmKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuXHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFt7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwidGltZXN0YW1wXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImhhc2hcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgZm9yKGxldCBwcm9wIG9mIHByb3BzKXtcclxuICAgICAgICAgICAgICAgIGlmKCEocHJvcC5rZXkgaW4gdmFsdWUpIHx8IHR5cGVvZiB2YWx1ZVtwcm9wLmtleV0gIT09IHByb3AudHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLmhhc2ggIT09IGtleSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2YWx1ZS5yZXN1bHQuc3VzcGVjdCl7IC8vIHJlZmV0Y2ggZnJvbSByZW1vdGUgdG8gYmUgc3VyZSB5b3UncmUgdXAgdG8gZGF0ZS5cclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQWRkb25DYWNoZSgpe1xyXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoSlNPTi5zdHJpbmdpZnkoYWRkb25DYWNoZSkpKVxyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gY29udGVudFR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSA9IGZzLndhdGNoKGJhc2VGb2xkZXIsIHtwZXJzaXN0ZW50OiBmYWxzZX0sIGFzeW5jIChldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnRUeXBlIHx8ICFmaWxlbmFtZSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHJldHVybiBwbHVnaW5Nb2R1bGUudW5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGVtZU1vZHVsZS51bmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJyZW5hbWVcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5yZWxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5yZWxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXS5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBoYXNPbGRNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLy9NRVRBXCIpO1xyXG4gICAgICAgIGlmIChoYXNPbGRNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU9sZE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcclxuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlT2xkTWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgcmF3TWV0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBpZiAobWV0YS5pbmRleE9mKFwiTUVUQVwiKSA8IDApIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFV0aWxzLnRlc3RKU09OKHJhd01ldGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcGFyc2VkLmZvcm1hdCA9IFwianNvblwiO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VOZXdNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBibG9jayA9IGNvbnRlbnQuc3BsaXQoXCIvKipcIiwgMilbMV0uc3BsaXQoXCIqL1wiLCAxKVswXTtcclxuICAgICAgICBjb25zdCBvdXQgPSB7fTtcclxuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBhY2N1bSA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2NrLnNwbGl0KHNwbGl0UmVnZXgpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gXCJAXCIgJiYgbGluZS5jaGFyQXQoMSkgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRbZmllbGRdID0gYWNjdW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcclxuICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5zdWJzdHIoMSwgbCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gPSBsaW5lLnN1YnN0cihsICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBcIiBcIiArIGxpbmUucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpLnJlcGxhY2UoZXNjYXBlZEF0UmVnZXgsIFwiQFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRbZmllbGRdID0gYWNjdW0udHJpbSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XHJcbiAgICAgICAgb3V0LmZvcm1hdCA9IFwianNkb2NcIjtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRlbnRSZXF1aXJlKHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gaXNQbHVnaW4gPyBvcmlnaW5hbEpTUmVxdWlyZSA6IG9yaWdpbmFsQ1NTUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyBzZWxmLnBsdWdpbnNGb2xkZXIgOiBzZWxmLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICAgICAgY29uc3QgcG9zc2libGVQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBvc3NpYmxlUGF0aCkgfHwgZmlsZW5hbWUgIT09IGZzLnJlYWxwYXRoU3luYyhwb3NzaWJsZVBhdGgpKSByZXR1cm4gUmVmbGVjdC5hcHBseShvcmlnaW5hbFJlcXVpcmUsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBVdGlscy5zdHJpcEJPTShjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShjb250ZW50KTtcclxuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBtZXRhLmFkZGVkID0gc3RhdHMuYXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5tb2RpZmllZCA9IHN0YXRzLm10aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEuc2l6ZSA9IHN0YXRzLnNpemU7XHJcbiAgICAgICAgICAgIGlmICghaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1ldGEuY3NzID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgIGlmIChtZXRhLmZvcm1hdCA9PSBcImpzb25cIikgbWV0YS5jc3MgPSBtZXRhLmNzcy5zcGxpdChcIlxcblwiKS5zbGljZSgxKS5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgbW9kdWxlLmZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlscy5pc0VtcHR5KG1vZHVsZS5leHBvcnRzKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWRFeHBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1ldGE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVdGlscy53YXJuKFwiTW9kdWxlIE5vdCBFeHBvcnRlZFwiLCBgJHttZXRhLm5hbWV9LCBwbGVhc2Ugc3RhcnQgc2V0dGluZyBtb2R1bGUuZXhwb3J0c2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgZmlsZW5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBsYWNlaG9sZGVyUGx1Z2luKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4ge3BsdWdpbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0TmFtZTogKCkgPT4ge3JldHVybiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZTt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0QXV0aG9yOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fSxcclxuICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiAoKSA9PiB7cmV0dXJuIGRhdGEubWVzc2FnZSA/IGRhdGEubWVzc2FnZSA6IFwiVGhpcyBwbHVnaW4gd2FzIHVuYWJsZSB0byBiZSBsb2FkZWQuIENoZWNrIHRoZSBhdXRob3IncyBwYWdlIGZvciB1cGRhdGVzLlwiO30sXHJcbiAgICAgICAgICAgICAgICBnZXRWZXJzaW9uOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgZmlsZW5hbWU6IGRhdGEuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YS5zb3VyY2UgPyBkYXRhLnNvdXJjZSA6IFwiXCIsXHJcbiAgICAgICAgICAgIHdlYnNpdGU6IGRhdGEud2Vic2l0ZSA/IGRhdGEud2Vic2l0ZSA6IFwiXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG5cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSksIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICB9LCAoaGFzaCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCB0cnVlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZVtyZXN1bHQuaGFzaF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlc3VsdC5oYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7d2luZG93LnJlcXVpcmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHdpbmRvdy5yZXF1aXJlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmKCFjb250ZW50Lm5hbWUpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ2Fubm90IGVzY2FwZSB0aGUgSUQuXCIsIGVycm9yOiB7bWVzc2FnZTogXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCIsIHN0YWNrOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIn19XHJcbiAgICAgICAgY29udGVudC5pZCA9IFV0aWxzLmVzY2FwZUlEKGNvbnRlbnQubmFtZSk7XHJcbiAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50LnBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXTtcclxuICAgICAgICAgICAgICAgIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldID0gY29udGVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVsZXRlIGJkdGhlbWVzW2NvbnRlbnQubmFtZV07XHJcbiAgICAgICAgICAgIGJkdGhlbWVzW2NvbnRlbnQubmFtZV0gPSBjb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSB1bmxvYWRlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319O31cclxuICAgIH1cclxuXHJcbiAgICBpc0xvYWRlZChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlLmNhY2hlW3dpbmRvdy5yZXF1aXJlLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO31cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIGZhbHNlO31cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgY2FudFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgaWYgKGNhbnRVbmxvYWQpIHJldHVybiBjYW50VW5sb2FkO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3Q29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuICAgICAgICBjb25zdCBjb250ZW50TGlzdCA9IE9iamVjdC52YWx1ZXMoaXNQbHVnaW4gPyBiZHBsdWdpbnMgOiBiZHRoZW1lcyk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gaXNQbHVnaW4gPyBjLnBsdWdpbi5nZXROYW1lKCkgOiBjLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIWNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgoZmlsZUVuZGluZykgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFsbENvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYmFzZWRpcik7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZmlsZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIGVycm9ycy5wdXNoKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBsdWdpbnMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJwbHVnaW5cIik7fVxyXG4gICAgbG9hZFRoZW1lcygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInRoZW1lXCIpO31cclxufTtcclxuXHJcbi8qKlxyXG4gKiBEb24ndCBleHBvc2UgY29udGVudE1hbmFnZXIgLSBjb3VsZCBiZSBkYW5nZXJvdXMgZm9yIG5vd1xyXG4gKi8iLCJpbXBvcnQge2JkQ29uZmlnLCBtaW5TdXBwb3J0ZWRWZXJzaW9uLCBiYmRWZXJzaW9uLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5FcnJvcnMsIGJkdGhlbWVFcnJvcnMsIGJiZENoYW5nZWxvZywgZGVmYXVsdENvb2tpZSwgY3VycmVudERpc2NvcmRWZXJzaW9uLCBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBCRExvZ28gZnJvbSBcIi4uL3VpL2JkTG9nb1wiO1xyXG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBMaWdodGNvcmRMb2dvIGZyb20gXCIuLi9zdmcvbGlnaHRjb3JkXCI7XHJcbmltcG9ydCBQbHVnaW5DZXJ0aWZpZXIgZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBkaXN0YW50LCB7IHV1aWR2NCB9IGZyb20gXCIuL2Rpc3RhbnRcIjtcclxuaW1wb3J0IEVtb2ppTW9kdWxlIGZyb20gXCIuL2Vtb2ppTW9kdWxlXCJcclxuaW1wb3J0IHtyZW1vdGUgYXMgZWxlY3Ryb259IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCB2MiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5mdW5jdGlvbiBDb3JlKCkge1xyXG4gICAgLy8gT2JqZWN0LmFzc2lnbihiZENvbmZpZywgX19ub25fd2VicGFja19yZXF1aXJlX18oRGF0YVN0b3JlLmNvbmZpZ0ZpbGUpKTtcclxuICAgIC8vIHRoaXMuaW5pdCgpO1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIGNvbmZpZyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5mbGF0KSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiYmRWZXJzaW9uICsgXCIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9sZCB2ZXJzaW9uIChcIiArIGN1cnJlbnREaXNjb3JkVmVyc2lvbiArIFwiKSBvZiBEaXNjb3JkLiBQbGVhc2UgdXBkYXRlIHlvdXIgRGlzY29yZCBpbnN0YWxsYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmRDb25maWcudmVyc2lvbiA8IG1pblN1cHBvcnRlZFZlcnNpb24pIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJkQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIGJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5FRCkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIEVuaGFuY2VkRGlzY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggUG93ZXJjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dHJpYnV0ZXMuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XHJcblxyXG4gICAgLypcclxuICAgIGNvbnN0IGxhdGVzdExvY2FsVmVyc2lvbiA9IGJkQ29uZmlnLnVwZGF0ZXIgPyBiZENvbmZpZy51cGRhdGVyLkxhdGVzdFZlcnNpb24gOiBiZENvbmZpZy5sYXRlc3RWZXJzaW9uO1xyXG4gICAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IGJkQ29uZmlnLnZlcnNpb24pIHtcclxuICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJVcGRhdGUgQXZhaWxhYmxlXCIsIFtgVGhlcmUgaXMgYW4gdXBkYXRlIGF2YWlsYWJsZSBmb3IgQmFuZGFnZWRCRCdzIEluamVjdG9yICgke2xhdGVzdExvY2FsVmVyc2lvbn0pLmAsIFwiWW91IGNhbiBlaXRoZXIgdXBkYXRlIGFuZCByZXN0YXJ0IG5vdywgb3IgbGF0ZXIuXCJdLCB7XHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIlVwZGF0ZSBOb3dcIixcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJNYXliZSBMYXRlclwiLFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBkYXRlRmFpbGVkID0gKCkgPT4ge1V0aWxzLmFsZXJ0KFwiQ291bGQgTm90IFVwZGF0ZVwiLCBgVW5hYmxlIHRvIHVwZGF0ZSBhdXRvbWF0aWNhbGx5LCBwbGVhc2UgZG93bmxvYWQgdGhlIGluc3RhbGxlciBhbmQgcmVpbnN0YWxsIG5vcm1hbGx5LjxiciAvPjxiciAvPjxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+RG93bmxvYWQgSW5zdGFsbGVyPC9hPmApO307XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZFVwZGF0ZSA9IGF3YWl0IHRoaXMudXBkYXRlSW5qZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRpZFVwZGF0ZSkgcmV0dXJuIG9uVXBkYXRlRmFpbGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwLnJlbGF1bmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwLmV4aXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9Ki9cclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgdGhpcy5pbml0U2V0dGluZ3MoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XHJcbiAgICBCRFYyLmluaXRpYWxpemUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJVcGRhdGluZyBTZXR0aW5nc1wiKTtcclxuICAgIHNldHRpbmdzUGFuZWwuaW5pdGlhbGl6ZVNldHRpbmdzKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgQWRkb25zIENhY2hlXCIpXHJcbiAgICBhd2FpdCBjb250ZW50TWFuYWdlci5sb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcclxuICAgIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2lucygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcclxuICAgIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZXMoKTtcclxuXHJcbiAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgYXRvYihEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIikpKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZGMtMFwiXSkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idG4uYnRuLWRpc2Nvbm5lY3RcIikuY2xpY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIFBsdWdpbkNlcnRpZmllci5zdGFydCgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIikubGVuZ3RoKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XHJcbiAgICB0aGlzLmluaXRPYnNlcnZlcigpO1xyXG5cclxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkge1xyXG4gICAgICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgICAgIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBiZHBsdWdpbkVycm9ycywgdGhlbWVzOiBiZHRoZW1lRXJyb3JzfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XHJcbiAgICBpZiAoYmJkVmVyc2lvbiA+IHByZXZpb3VzVmVyc2lvbikge1xyXG4gICAgICAgIGlmIChiYmRDaGFuZ2Vsb2cpIHRoaXMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgYmJkVmVyc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgRW1vamlNb2R1bGUuc3RhcnQoKVxyXG5cclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hTb2NpYWwuYmluZCh0aGlzKSwgXCJCRCBTb2NpYWwgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFNlcGFyYXRvci5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFNlcGFyYXRvciBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lc3NhZ2VIZWFkZXIuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBDaGF0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVtYmVyTGlzdC5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIE1lbWJlciBMaXN0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0YWNobWVudC5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcclxuXHJcbiAgICBpZihiZENvbmZpZy5oYXZlSW5zdGFsbGVkRGVmYXVsdCl7XHJcbiAgICAgICAgbGV0IGFsZXJ0ID0gVXRpbHMuYWxlcnQoXCJGaXJzdCBJbnN0YWxsYXRpb25cIiwgXCJBcyBpdCBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaW5zdGFsbCBMaWdodGNvcmQsIFdlIGFkZGVkIHR3byBkZWZhdWx0IHRoZW1lcyBhbmQgb25lIGRlZmF1bHQgcGx1Z2luIGluIHlvdXIgcGx1Z2luL3RoZW1lIGZvbGRlci4gQ2hlY2sgaXQgaW4gdGhlIFBsdWdpbi9UaGVtZSBzZXR0aW5ncy5cIilcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBhbGVydC5vbkNsb3NlKHJlc29sdmUpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudCA+IGRpdi50eXBlV2luZG93cy0xemEtbjcud2l0aEZyYW1lLWhhWWx0SS50aXRsZUJhci1BQzRwR1YuaG9yaXpvbnRhbFJldmVyc2UtM3RSalk3LmZsZXgtMU8xR0tZLmRpcmVjdGlvblJvd1JldmVyc2UtbThJaklxLmp1c3RpZnlTdGFydC0yTkRGemkuYWxpZ25TdHJldGNoLURwR1BmMy5kYS10eXBlV2luZG93cy5kYS13aXRoRnJhbWUuZGEtdGl0bGVCYXIuZGEtaG9yaXpvbnRhbFJldmVyc2UuZGEtZmxleC5kYS1kaXJlY3Rpb25Sb3dSZXZlcnNlLmRhLWp1c3RpZnlTdGFydC5kYS1hbGlnblN0cmV0Y2ggPiBkaXYud29yZG1hcmtXaW5kb3dzLTF2MGxZRC53b3JkbWFyay0yaUREZm0uZGEtd29yZG1hcmtXaW5kb3dzLmRhLXdvcmRtYXJrXCIpXHJcbiAgICBpZihsb2dvKXtcclxuICAgICAgICBsb2dvLnN0eWxlLnRvcCA9IFwiM3B4XCJcclxuICAgICAgICBsb2dvLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIxMFwiIHdpZHRoPVwiNzBcIiB2aWV3Qm94PVwiMCAwIDcyLjU0IDEwXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTVweCwgbWFyZ2luLXRvcDogMTBweFwiPlxyXG4gICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNDQuODEsOS42N1Y2LjMzYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFBMy41MywzLjUzLDAsMCwwLDQ2LjIsM2MtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS42N2MwLDIuMjEsMS44OSwzLjMzLDMuNzcsMy4zM2EzLjg3LDMuODcsMCwwLDAsMy40NS0yLjE4bC0yLjEyLTFDNDcsMTEuMTcsNDQuODEsMTAuODUsNDQuODEsOS42N1pNMTAuNjgsMTIuODloMi40MVYzLjE3SDEwLjY4Wk03MS43NiwzLjE0SDY4LjE5VjcuMjNMNzAuNTcsOS40di00aDEuMjdjLjgxLDAsMS4yMS40MSwxLjIxLDF2M2MwLC42My0uMzgsMS4wNS0xLjIxLDEuMDVINjguMTh2Mi4zMWgzLjU3YzEuOTIsMCwzLjcyLTEsMy43Mi0zLjJWNi4zOUM3NS40OCw0LjEzLDczLjY4LDMuMTQsNzEuNzYsMy4xNFpNNTQuMjIsM2MtMiwwLTQsMS4xLTQsMy4zNFY5LjY2YzAsMi4yMywyLDMuMzQsNCwzLjM0czMuOTUtMS4xMSwzLjk1LTMuMzRWNi4zNEM1OC4xOSw0LjExLDU2LjIsMyw1NC4yMiwzWm0xLjU1LDYuNjZjMCwuNy0uNzgsMS4wNi0xLjU0LDEuMDZzLTEuNTUtLjM1LTEuNTUtMS4wNlY2LjM0YzAtLjcyLjc1LTEuMSwxLjUtMS4xczEuNTkuMzUsMS41OSwxLjFaTTY2Ljg0LDYuMzRjMC0yLjI5LTEuNTgtMy4yLTMuNTUtMy4ySDU5LjQ2djkuNzNoMi40NVY5Ljc3aC40M2wyLjIyLDMuMDloM0w2NSw5LjUyQzY2LjEzLDkuMTUsNjYuODQsOC4xNCw2Ni44NCw2LjM0Wk02My4zMyw3LjY1SDYxLjkxVjUuNDNoMS40MkExLjExLDEuMTEsMCwxLDEsNjMuMzMsNy42NVpNMjkuODMsMTNoMi40MlYzLjA2SDI5LjgzVjYuNzNsLTMsMFYzLjA5SDI0Ljd2OS43OGgyLjE0VjguNjhsMywwWk0xNy4xNiw5Ljc2VjYuNDJjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MWEzLjU1LDMuNTUsMCwwLDAtMy4zNi0yLjI0Yy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5Ljc2YzAsMi4yMSwyLDMuMTUsMy45LDMuMTVzMy41OC0xLDMuNTgtM1Y3LjU4SDE4Ljc5bDAsMS4zNkgyMC4zdi43N0MyMC4zLDEwLjkyLDE3LjE2LDEwLjk0LDE3LjE2LDkuNzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0yLjkzIC0zKVwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIzNS45MSAwLjA2IDM4LjQzIDAuMDYgMzguNDMgMS44NCAzNS45MiAxLjgxIDM1Ljk3IDEwIDMzLjU1IDEwIDMzLjQ5IDEuNzUgMzAuOTggMS43NCAzMC45OCAwLjA2IDMzLjQ5IDAuMDYgMzUuOTEgMC4wNlwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIwIDkuOTcgNi41IDEwIDYuNSA3LjYzIDIuNDEgNy42MyAyLjQxIDAuMjYgMCAyLjI2IDAgOS45N1wiLz5cclxuPC9zdmc+YFxyXG4gICAgfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRyaWJ1dGVzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgYXR0cmlic1BhdGNocyA9IFtdXHJcbiAgICB0aGlzLmNhbmNlbFBhdGNoQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGF0dHJpYnNQYXRjaHMuZm9yRWFjaChlID0+IGUoKSlcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSghdjIuTWVzc2FnZUNvbXBvbmVudClhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSlcclxuICAgIFxyXG4gICAgLy8gVE9ETzogdHJ5IHRvIHBhdGNoIGNvcnJlY3RseSB0aGUgdXNlciBwb3BvdXQgb24gYSBuZXh0IHVwZGF0ZVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBlbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRGlzY29yZFRhZ1wiKVxyXG4gICAgLnRoZW4oRGlzY29yZFRhZyA9PiB7XHJcbiAgICAgICAgbGV0IERpc2NvcmRUYWdDb21wID0gRGlzY29yZFRhZy5kZWZhdWx0XHJcbiAgICAgICAgRGlzY29yZFRhZy5kZWZhdWx0ID0gZnVuY3Rpb24ocHJvcHMpe1xyXG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBEaXNjb3JkVGFnQ29tcChwcm9wcylcclxuXHJcbiAgICAgICAgICAgIGxldCBpZCA9IHV1aWR2NCgpXHJcblxyXG4gICAgICAgICAgICBsZXQgYmFkZ2VEaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCI1cHhcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIGtleTogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKVxyXG5cclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW3JldHVyblZhbHVlXVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHByb3BzLnVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYmFkZ2VEaXYpXHJcbiAgICAgICAgICAgIGxldCBkaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgY2hpbGRyZW4pXHJcbiAgICAgICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBwcm9wcy51c2VyLCBmYWxzZSlcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkaXZcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZSl7IC8vIHRoaXMgY2FuIGJlIGEgYmxvY2tlZCBtZXNzYWdlIChub3Qgb3BlbmVkKVxyXG4gICAgICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wiZGF0YS1tZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXHJcbiAgICAgICAgfVxyXG4gICAgfX0pKVxyXG4gICAgICAgIC8qXHJcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wibWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxyXG4gICAgfX0pKSovXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgdGltZXNDaGVja2VkID0gMDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfWApLmxlbmd0aCA+IDApIHRpbWVzQ2hlY2tlZCsrO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGltZXNDaGVja2VkID49IDUwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJsb2FkaW5nXCIpIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge3NldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7fSk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluamVjdEV4dGVybmFscyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgYXdhaXQgRE9NLmFkZFNjcmlwdChcImFjZS1zY3JpcHRcIiwgXCJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9hY2UvMS4yLjkvYWNlLmpzXCIpO1xyXG4gICAgaWYgKHdpbmRvdy5yZXF1aXJlLm9yaWdpbmFsKSB3aW5kb3cucmVxdWlyZSA9IHdpbmRvdy5yZXF1aXJlLm9yaWdpbmFsO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdFNldHRpbmdzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLmluaXRpYWxpemUoKTtcclxuICAgIGlmKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikgJiYgIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpe1xyXG4gICAgICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIGRlZmF1bHRDb29raWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgZGVmYXVsdFJQQyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldHRpbmdzUGFuZWwubG9hZFNldHRpbmdzKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBzZXR0aW5nIGluIGRlZmF1bHRDb29raWUpIHtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW3NldHRpbmddID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPSBkZWZhdWx0Q29va2llW3NldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5wcm90b3R5cGUgJiYgZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucylcclxuICAgIC50aGVuKHNldHRpbmdNb2R1bGUgPT4ge1xyXG5cclxuICAgICAgICBsZXQgZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zXHJcbiAgICAgICAgc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBnZXRQcmVkaWNhdGVTZWN0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuXHJcbiAgICAgICAgICAgIGlmKHJlc3VsdFsxXS5zZWN0aW9uID09PSBcIk15IEFjY291bnRcIil7IC8vIHVzZXIgc2V0dGluZ3MsIG5vdCBndWlsZCBzZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvcGVkID0gW11cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcblxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uc2V0dGluZ3NQYW5lbC5yZW5kZXJTaWRlYmFyKCkpXHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUocG9wZWRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvcGVkLnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59O1xyXG5cclxuXHJcbmxldCBjbGFzc05hbWVMYXllclxyXG5sZXQgY2xhc3NOYW1lU29jaWFsTGlua3NcclxubGV0IGNsYXNzTmFtZU1vZGFsXHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbk1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgcGx1Z2luTW9kdWxlLnJhd09ic2VydmVyKG11dGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXHJcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcblxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTGF5ZXIpY2xhc3NOYW1lTGF5ZXIgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllclxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lU29jaWFsTGlua3MpY2xhc3NOYW1lU29jaWFsTGlua3MgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLnNvY2lhbExpbmtzICYmIHR5cGVvZiBlLnNvY2lhbExpbmtzID09PSBcInN0cmluZ1wiKVswXS5zb2NpYWxMaW5rc1xyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTW9kYWwpY2xhc3NOYW1lTW9kYWwgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1vZGFsICYmIHR5cGVvZiBlLm1vZGFsID09PSBcInN0cmluZ1wiICYmIGUuaW5uZXIgJiYgdHlwZW9mIGUuaW5uZXIgPT09IFwic3RyaW5nXCIgJiYgIWUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlKVswXS5tb2RhbFxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSA9PT0gXCJHVUlMRF9TRVRUSU5HU1wiKXtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVTb2NpYWxMaW5rcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudEVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSAmJiBub2RlLnF1ZXJ5U2VsZWN0b3IoXCIjYWNlX3NldHRpbmdzbWVudVwiKSkgbm9kZS5pZCA9IFwiYWNlX3NldHRpbmdzbWVudV9jb250YWluZXJcIjtcclxuXHJcbiAgICAgICAgICAgIC8vIEVtb2ppIFBpY2tlclxyXG4gICAgICAgICAgICAvL25vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGggJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRvckxlZnQtMUVReFUwXCIpXHJcbiAgICAgICAgICAgIC8vaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyMikgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZUVtb2ppUGlja2VyKS5sZW5ndGggICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lRW1vamlQaWNrZXIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUFuaW1hdG9yTGVmdCkpIHF1aWNrRW1vdGVNZW51Lm9ic0NhbGxiYWNrKG5vZGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBtYWluT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnNob3dDaGFuZ2Vsb2dNb2RhbCA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24odGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaFNvY2lhbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiVGFiQmFyXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIVRhYkJhcikgcmV0dXJuO1xyXG4gICAgdGhpcy5zb2NpYWxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoIHx8IGNoaWxkcmVuLmxlbmd0aCA8IDMpIHJldHVybjtcclxuICAgICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gM10udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZS50b1N0cmluZygpLmluY2x1ZGVzKFwic29jaWFsTGlua3NcIikpIHJldHVybjtcclxuICAgICAgICBpZiAoQW5jaG9yKSB7XHJcbiAgICAgICAgICAgIGxldCBzb2NpYWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc29jaWFsTGlua3MpWzBdXHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZTtcclxuICAgICAgICAgICAgY29uc3QgbmV3T25lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlID0gbmV3T25lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lQ29sb3JNdXRlZCxcclxuICAgICAgICAgICAgc2l6ZXMsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZVZlcnNpb25IYXNoXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JNdXRlZClbMF0uY29sb3JNdXRlZCxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVyc2lvbkhhc2gpWzBdLnZlcnNpb25IYXNoXHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBjb25zdCB2ZXJzaW9uSGFzaCA9IGAoJHtiZENvbmZpZy5oYXNoID8gYmRDb25maWcuaGFzaC5zdWJzdHJpbmcoMCwgNykgOiBiZENvbmZpZy5icmFuY2h9KWA7XHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbCA9IFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgTGlnaHRjb3JkICR7ZWxlY3Ryb24uZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIGAoJHsoZWxlY3Ryb24uZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLmNvbW1pdCB8fCBcIlVua25vd25cIikuc2xpY2UoMCwgNyl9KWApKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgQkJEICR7YmJkVmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgdmVyc2lvbkhhc2gpKVxyXG4gICAgICAgIF1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWZXJzaW9ucyA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGU7XHJcbiAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbFZlcnNpb25zKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UoMSwgMCwgYWRkaXRpb25hbCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgfTtcclxuICAgIH19KTtcclxufTtcclxuXHJcbmNvbnN0IGdldEd1aWxkQ2xhc3NlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwid3JhcHBlclwiLCBcInVucmVhZE1lbnRpb25zQmFyXCIpO1xyXG4gICAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJndWlsZHNFcnJvclwiLCBcInNlbGVjdGVkXCIpO1xyXG4gICAgY29uc3QgcGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYmxvYkNvbnRhaW5lclwiKTtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZExpc3RJdGVtcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRDbGFzc2VzID0gZ2V0R3VpbGRDbGFzc2VzKCk7XHJcbiAgICBjb25zdCBsaXN0SXRlbUNsYXNzID0gR3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgIGNvbnN0IGJsb2JDbGFzcyA9IEd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgIGNvbnN0IHJlYWN0SW5zdGFuY2UgPSBCRFYyLmdldEludGVybmFsSW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgY29uc3QgR3VpbGRDb21wb25lbnQgPSByZWFjdEluc3RhbmNlLnJldHVybi50eXBlO1xyXG4gICAgaWYgKCFHdWlsZENvbXBvbmVudCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEucmV0dXJuVmFsdWUgJiYgZGF0YS50aGlzT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGREYXRhID0gZGF0YS50aGlzT2JqZWN0LnByb3BzO1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSBjbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIGNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSBjbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSBjbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWVcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRQaWxscyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRQaWxsUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgIW0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQudG9TdHJpbmcgJiYgbS5kZWZhdWx0LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJ0cmFuc2xhdGUzZFwiKSk7XHJcbiAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKGd1aWxkUGlsbCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgIGlmIChwcm9wcy51bnJlYWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICBpZiAocHJvcHMuaG92ZXJlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xyXG4gICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xyXG4gICAgaWYgKCFndWlsZENvbXBvbmVudHMgfHwgIUd1aWxkcykgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XHJcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkcy5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuWzNdLnR5cGUgPSBHdWlsZFNlcGFyYXRvcjtcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuQXR0YWNobWVudFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBBdHRhY2htZW50ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXR0YWNobWVudFwiKVswXSAvLyB0ZW1wb3JhcnlcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIUF0dGFjaG1lbnQgfHwgIUF0dGFjaG1lbnQuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5BdHRhY2htZW50UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChBdHRhY2htZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSlyZXR1cm5cclxuICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0gfHwgbnVsbFxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdHRhY2htZW50IHx8ICFhdHRhY2htZW50LnVybClyZXR1cm5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xyXG4gICAgICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIraWRcclxuICAgICAgICB9KSlcclxuICAgICAgICBQbHVnaW5DZXJ0aWZpZXIucGF0Y2goYXR0YWNobWVudCwgXCJjZXJ0aWZpZWQtXCIraWQpXHJcbiAgICB9fSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lc3NhZ2VIZWFkZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFNZXNzYWdlSGVhZGVyIHx8ICFNZXNzYWdlSGVhZGVyLmRlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IGhlYWRlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdXRob3IgfHwgIWF1dGhvci5pZClyZXR1cm5cclxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhdXRob3IuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgYXV0aG9yLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBhdXRob3IsIHRydWUpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCl7XHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhZGdlcy1cIitpZClcclxuICAgICAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuXHJcbiAgICAgICAgaWYoZGl2LmNoaWxkTm9kZXMubGVuZ3RoKXJldHVyblxyXG4gICAgICAgIGxldCBibG9ja0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgICAgICBibG9ja0Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcclxuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoYmxvY2tEaXYpXHJcblxyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG5cclxuICAgICAgICBkaXN0YW50LmdldEJhZGdlcyh1c2VyLmlkKVxyXG4gICAgICAgIC50aGVuKGJhZGdlcyA9PiB7XHJcbiAgICAgICAgICAgIGJhZGdlcy5mb3JFYWNoKGJhZGdlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN2Zzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlID09PSBcInVzZXJcIil7Ly8gcmVxdWlyZSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVzZXIgPSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkgXHJcbiAgICAgICAgICAgICAgICBpZighYmFkZ2UuaHJlZil7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuaHJlZiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogYmFkZ2UubmFtZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgYmFkZ2UuaHJlZiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogYmFkZ2UuaHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcykpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoZWxlbWVudCwgZGl2MilcclxuICAgICAgICAgICAgICAgIGRpdjIuY2hpbGROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChub2RlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZW1iZXJMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZW1iZXJMaXN0UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lbWJlckxpc3RJdGVtID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNZW1iZXJMaXN0SXRlbVwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lbWJlckxpc3RJdGVtIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUgfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZS5yZW5kZXJEZWNvcmF0b3JzKSByZXR1cm47XHJcbiAgICB0aGlzLm1lbWJlckxpc3RQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSwgXCJyZW5kZXJEZWNvcmF0b3JzXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnRoaXNPYmplY3QsIFwicHJvcHMudXNlclwiKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAodXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgdXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiYWRnZXMtXCIraWR9KVxyXG4gICAgICAgIClcclxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS51cGRhdGVJbmplY3RvciA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgaW5qZWN0aW9uUGF0aCA9IERhdGFTdG9yZS5pbmplY3Rpb25QYXRoO1xyXG4gICAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbiAgICBjb25zdCBybXJmID0gcmVxdWlyZShcInJpbXJhZlwiKTtcclxuICAgIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xyXG4gICAgY29uc3QgbWtkaXJwID0gcmVxdWlyZShcIm1rZGlycFwiKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSAvKnJlcXVpcmUoXCJyZXF1ZXN0XCIpOyovIG51bGxcclxuXHJcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGluamVjdGlvblBhdGgsIFwiLi5cIik7XHJcbiAgICBjb25zdCBmb2xkZXJOYW1lID0gcGF0aC5iYXNlbmFtZShpbmplY3Rpb25QYXRoKTtcclxuICAgIGNvbnN0IHppcExpbmsgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvYXJjaGl2ZS9pbmplY3Rvci56aXBcIjtcclxuICAgIGNvbnN0IHNhdmVkWmlwID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiaW5qZWN0b3IuemlwXCIpO1xyXG4gICAgY29uc3QgZXh0cmFjdGVkRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiQmV0dGVyRGlzY29yZEFwcC1pbmplY3RvclwiKTtcclxuXHJcbiAgICAvLyBEb3dubG9hZCB0aGUgaW5qZWN0b3IgemlwIGZpbGVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRG93bmxvYWRpbmcgXCIgKyB6aXBMaW5rKTtcclxuICAgIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgcmVxdWVzdC5nZXQoe3VybDogemlwTGluaywgZW5jb2Rpbmc6IG51bGx9LCBhc3luYyAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHJldHVybiByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWVvbmUgaGFzIHRoZWlyIG93biBjb3B5XHJcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKHNhdmVkWmlwLCByZXMpKTtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoc2F2ZWRaaXAsIGAke3NhdmVkWmlwfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xyXG5cclxuICAgICAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJFeHRyYWN0aW5nIFwiICsgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24oZXJyLCByZWFkU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBzdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ub24oXCJlbmRcIiwgZnVuY3Rpb24oKSB7emlwZmlsZS5yZWFkRW50cnkoKTt9KTsgLy8gR28gdG8gbmV4dCBmaWxlIGFmdGVyIHRoaXNcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHppcGZpbGUucmVhZEVudHJ5KCk7IC8vIFN0YXJ0IHJlYWRpbmdcclxuXHJcbiAgICAvLyBXYWl0IGZvciB0aGUgZmluYWwgZmlsZSB0byBmaW5pc2hcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGZpbmFsIHN0ZXBcclxuICAgIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoaW5qZWN0aW9uUGF0aCwgYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBgUmVuYW1pbmcgJHtwYXRoLmJhc2VuYW1lKGV4dHJhY3RlZEZvbGRlcil9IHRvICR7Zm9sZGVyTmFtZX1gKTtcclxuICAgIHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGluamVjdGlvblBhdGgsIGVyciA9PiByZXNvbHZlKCFlcnIpKSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiByZXN0b3JpbmcgYmFja3Vwcy5cIik7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGV4dHJhY3RlZEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBldmVyeXRoaW5nIHNob3VsZCBoYXZlIGdvbmUgc21vb3RobHkuXHJcbiAgICAvLyBDbGVhbnVwIHRoZSBiYWNrdXAgZm9sZGVyIHRoZW4gcmVtb3ZlIHRoZSB6aXBcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMudW5saW5rKHNhdmVkWmlwLCByZXNvbHZlKSk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcclxuICAgIHJldHVybiBzdWNjZXNzO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTtcclxuXHJcbi8qKlxyXG4gKiBEb24ndCBleHBvc2UgY29yZSAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XHJcbiAqLyIsImNvbnN0IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fID0gd2luZG93LnJlcXVpcmVcclxuXHJcbmltcG9ydCB7YmRDb25maWd9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCByZWxlYXNlQ2hhbm5lbCA9IERpc2NvcmROYXRpdmUuZ2xvYmFscyA/IERpc2NvcmROYXRpdmUuZ2xvYmFscy5yZWxlYXNlQ2hhbm5lbCA6IERpc2NvcmROYXRpdmUuYXBwID8gRGlzY29yZE5hdGl2ZS5hcHAuZ2V0UmVsZWFzZUNoYW5uZWwoKSA6IFwic3RhYmxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGF0YVN0b3JlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHtzZXR0aW5nczoge3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGEgPSB7fTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGF0YVN0b3JlID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuQkRGaWxlKSkgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLkJERmlsZSwgXCJiaW5hcnlcIikpXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnNldHRpbmdzRmlsZSkpIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IHNldHRpbmdzID0gX19ub25fd2VicGFja19yZXF1aXJlX18odGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHtbcmVsZWFzZUNoYW5uZWxdOiBzZXR0aW5nc30pO1xyXG4gICAgICAgICAgICBlbHNlIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRCRERhdGEoXCJzZXR0aW5nc1wiLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICBVdGlscy5hbGVydChcIkNvcnJ1cHQgU3RvcmFnZVwiLCBcIlRoZSBiZCBzdG9yYWdlIGhhcyBzb21laG93IGJlY29tZSBjb3JydXB0LiBZb3UgbWF5IGVpdGhlciB0cnkgdG8gc2FsdmFnZSB0aGUgZmlsZSBvciBkZWxldGUgaXQgdGhlbiByZWxvYWQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5qZWN0aW9uUGF0aCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdGlvblBhdGgpIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoO1xyXG4gICAgICAgIGNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGVsZWN0cm9uLmdldEFwcFBhdGgoKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nQmFzZSA9IGVsZWN0cm9uLmdldFBhdGgoXCJ1c2VyRGF0YVwiKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nTG9jYXRpb24gPSBwYXRoLnJlc29sdmUocm9hbWluZ0Jhc2UsIGVsZWN0cm9uLmdldFZlcnNpb24oKSwgXCJtb2R1bGVzXCIsIFwiZGlzY29yZF9kZXNrdG9wX2NvcmVcIiwgXCJpbmplY3RvclwiKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShiYXNlLCBcIi4uXCIsIFwiYXBwXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlYWxMb2NhdGlvbiA9IGZzLmV4aXN0c1N5bmMobG9jYXRpb24pID8gbG9jYXRpb24gOiBmcy5leGlzdHNTeW5jKHJvYW1pbmdMb2NhdGlvbikgPyByb2FtaW5nTG9jYXRpb24gOiBudWxsO1xyXG4gICAgICAgIGlmICghcmVhbExvY2F0aW9uKSByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSByZWFsTG9jYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbmZpZ0ZpbGUoKSB7cmV0dXJuIHRoaXMuX2NvbmZpZ0ZpbGUgfHwgKHRoaXMuX2NvbmZpZ0ZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5pbmplY3Rpb25QYXRoLCBcImJldHRlcmRpc2NvcmRcIiwgXCJjb25maWcuanNvblwiKSk7fVxyXG4gICAgZ2V0IEJERmlsZSgpIHtyZXR1cm4gdGhpcy5fQkRGaWxlIHx8ICh0aGlzLl9CREZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzdG9yYWdlLmpzb25cIikpO31cclxuICAgIGdldCBzZXR0aW5nc0ZpbGUoKSB7cmV0dXJuIHRoaXMuX3NldHRpbmdzRmlsZSB8fCAodGhpcy5fc2V0dGluZ3NGaWxlID0gcGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoLCBcImJkc2V0dGluZ3MuanNvblwiKSk7fVxyXG4gICAgZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSB7cmV0dXJuIHBhdGgucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBwbHVnaW5OYW1lICsgXCIuY29uZmlnLmpzb25cIik7fVxyXG5cclxuICAgIGdldFNldHRpbmdHcm91cChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2V0dGluZ0dyb3VwKGtleSwgZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5zZXR0aW5nc1tyZWxlYXNlQ2hhbm5lbF1ba2V5XSA9IGRhdGE7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QkREYXRhKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFba2V5XSB8fCBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJERGF0YShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGV2TW9kZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRlYnVnTGlzdGVuZXIgPSB0aGlzLmRlYnVnTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyID0gdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSB0aGlzLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0RGVidWdMaXN0ZW5lcigpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wRGVidWdMaXN0ZW5lcigpIHtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0Q29weVNlbGVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wQ29weVNlbGVjdG9yKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0xpc3RlbmVyKGUpIHtcclxuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7Ly9GOFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjWyVjRGV2TW9kZSVjXSAlY0JyZWFrL1Jlc3VtZVwiLCBcImNvbG9yOiByZWQ7XCIsIFwiY29sb3I6ICMzMDMwMzA7IGZvbnQtd2VpZ2h0OjcwMDtcIiwgXCJjb2xvcjpyZWQ7XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICBkZWJ1Z2dlcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1kZWJ1Z2dlclxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb3B5U2VsZWN0b3JMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoZS50YXJnZXQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgICAgICBjbGFzc0xheWVyLCBcclxuICAgICAgICAgICAgICAgIGNsYXNzSXRlbXNcclxuICAgICAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5kaXNhYmxlZFBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tZW51KVswXVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBhdHRhY2goKSB7XHJcbiAgICAgICAgICAgICAgICBpZighY2xhc3NJdGVtcyB8fCAhY2xhc3NMYXllci5sYXllcilyZXR1cm4gY29uc29sZS5sb2coY2xhc3NJdGVtcywgY2xhc3NMYXllci5sYXllcilcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY20gPSBET00ucXVlcnkoXCIuXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5tZW51KSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudCA+IC5cIitVdGlscy5yZW1vdmVEYShjbGFzc0xheWVyLmxheWVyQ29udGFpbmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzTGF5ZXIubGF5ZXJ9XCI+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY20gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5tZW51fSAke2NsYXNzSXRlbXMuc3R5bGVGbGV4aWJsZX0gJHtjbGFzc0l0ZW1zLmFjY29tbW9kYXRlU2Nyb2xsYmFyfSBiZC1jb250ZXh0LW1lbnVcIiBzdHlsZT1cIlwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5hcHBlbmQoY20pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoY21XcmFwKTtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gZS5jbGllbnRZICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibWVudVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmlkID0gXCJiZC1jb3B5LXNlbGVjdG9yLWNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiQ29weSBTZWxlY3RvciBBY3Rpb25zXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ2xhc3NlcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc2Nyb2xsZXJXcmFwKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtzY3JvbGxlckNsYXNzZXMuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlckNsYXNzZXMudGhlbWVHaG9zdEhhaXJsaW5lfVwiPjwvZGl2PmApXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXIpWzBdLnNjcm9sbGVyfSAke2NsYXNzSXRlbXMuc2Nyb2xsZXJ9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlcldyYXAuYXBwZW5kKHNjcm9sbGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZChzY3JvbGxlcldyYXApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNNID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlICYmIGUua2V5Q29kZSAhPT0gMjcpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY21XcmFwLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBjbS5wYXJlbnRFbGVtZW50XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gY20uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbWcgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiByb2xlPVwiZ3JvdXBcIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbWkgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5pdGVtfSAke2NsYXNzSXRlbXMubGFiZWxDb250YWluZXJ9ICR7Y2xhc3NJdGVtcy5jb2xvckRlZmF1bHR9XCIgcm9sZT1cIm1lbnVpdGVtXCIgaWQ9XCJiZC1jb3B5LXNlbGVjdG9yLWl0ZW0tY21cIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIGNtaS5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubGFiZWx9XCI+Q29weSBTZWxlY3RvcjwvZGl2PmApKTtcclxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuTmF0aXZlTW9kdWxlLmNvcHkoc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudHMgPSBET00ucXVlcnlBbGwoXCJkaXZbcm9sZT1tZW51aXRlbV0uXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyAmJiBlbGVtZW50cy5mb3JFYWNoKGVsZW0gPT4gZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgY21pLmNsYXNzTGlzdC5hZGQoY2xhc3NJdGVtcy5mb2N1c2VkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21nLmFwcGVuZChjbWkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc2Nyb2xsZXIuY2hpbGROb2Rlcy5sZW5ndGgpeyAvLyBhcGVuZCBhIHNlcGFyYXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJzZXBhcmF0b3JcIiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5zZXBhcmF0b3J9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKGNtZyk7XHJcbiAgICAgICAgICAgICAgICBpZihjbVdyYXAuY2xpZW50SGVpZ2h0IDwgY21XcmFwLnNjcm9sbEhlaWdodCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZyBcIitjbVdyYXAuc3R5bGUudG9wKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSAoY21XcmFwLnN0eWxlLnRvcCAtIGNtZy5jbGllbnRIZWlnaHQpICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmdcIitjbVdyYXAuc3R5bGUudG9wKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgc2V0VGltZW91dChhdHRhY2gsIDEpO1xyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RvcihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQpIHJldHVybiBgIyR7ZWxlbWVudC5pZH1gO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGxQYXRoKGVsKXtcclxuICAgICAgICAgICAgdmFyIG5hbWVzID0gW107XHJcbiAgICAgICAgICAgIHdoaWxlIChlbC5wYXJlbnROb2RlKXtcclxuICAgICAgICAgICAgICBpZiAoZWwuaWQpe1xyXG4gICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdCgnIycrZWwuaWQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWw9PWVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKStBcnJheS5mcm9tKGVsLmNsYXNzTGlzdC5lbnRyaWVzKCkpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYz0xLGU9ZWw7ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2U9ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLGMrKyk7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKygodHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbC5jbGFzc05hbWUpIHx8IFwiXCIpLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhIWUpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikrXCI6bnRoLWNoaWxkKFwiK2MrXCIpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWw9ZWwucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5hbWVzLmpvaW4oXCIgPiBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdWxsUGF0aChlbGVtZW50KVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdFJ1bGUgPSBydWxlc1tydWxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGF0ZXN0UnVsZSkgcmV0dXJuIGxhdGVzdFJ1bGUuc2VsZWN0b3JUZXh0O1xyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCkgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgICAgIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gOyovXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVsZXMoZWxlbWVudCwgY3NzID0gZWxlbWVudC5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzKSB7XHJcbiAgICAgICAgLy9pZiAod2luZG93LmdldE1hdGNoZWRDU1NSdWxlcykgcmV0dXJuIHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3Qgc2hlZXRzID0gWy4uLmNzc10uZmlsdGVyKHMgPT4gIXMuaHJlZiB8fCAhcy5ocmVmLmluY2x1ZGVzKFwiQmV0dGVyRGlzY29yZEFwcFwiKSk7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSBzaGVldHMubWFwKHMgPT4gWy4uLihzLmNzc1J1bGVzIHx8IFtdKV0pLmZsYXQoKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50UnVsZXMgPSBydWxlcy5maWx0ZXIociA9PiByICYmIHIuc2VsZWN0b3JUZXh0ICYmIGVsZW1lbnQubWF0Y2hlcyhyLnNlbGVjdG9yVGV4dCkgJiYgci5zdHlsZS5sZW5ndGggJiYgci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5sZW5ndGggPCA4ICYmICFyLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmluY2x1ZGVzKFwiKlwiKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRSdWxlcztcclxuICAgIH1cclxufTsiLCJleHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzYWJsZVR5cGluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5zdGFydFR5cGluZylcclxuICAgICAgICAudGhlbih0eXBpbmdNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdGFydFR5cGluZ1xyXG4gICAgICAgICAgICB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdGFydFR5cGluZyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdGFydFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdG9wVHlwaW5nID0gdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RvcFR5cGluZ1xyXG4gICAgICAgICAgICB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0b3BUeXBpbmcuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EaXNhYmxlVHlwaW5nID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJ1Z0h1bnRlckJhZGdlIGZyb20gXCIuLi9zdmcvYnVnX2h1bnRlclwiXHJcbmltcG9ydCBMaWdodGNvcmRVc2VyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9MaWdodGNvcmRVc2VyXCI7XHJcbmltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxyXG5pbXBvcnQgeyBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ2lyY3VzIGZyb20gXCIuLi9zdmcvY2lyY3VzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXVpZHY0KCkgeyAvLyBHZW5lcmF0ZSBVVUlEIChObyBjcnlwdG8gcm5nKVxyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xyXG4gICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxufSAgXHJcblxyXG5jb25zdCBhd2FpdGluZ0JhZGdlc1Byb21pc2VzID0ge31cclxubGV0IGJhZGdlc1RvRmV0Y2ggPSBbXVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc3RhbnRTZXJ2ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLl9jYWNoZSA9IHtcclxuICAgICAgICAgICAgYmFkZ2VzOiB7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EaXN0YW50U2VydmVyID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYWNoZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZVxyXG4gICAgfVxyXG5cclxuICAgIHNldCBjYWNoZShkYXRhKXtcclxuICAgICAgICBpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdGhpcy5fY2FjaGUgIT09IFwib2JqZWN0XCIpcmV0dXJuIHRoaXMuX2NhY2hlID0gZGF0YVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZSA9IE9iamVjdC5hc3NpZ24odGhpcy5fY2FjaGUsIGRhdGEpXHJcbiAgICB9LypcclxuXHJcbiAgICBhc3luYyBkZWxldGUoKXtcclxuICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJEZWxldGluZyBhbGwgaW5mb3MgYWJvdXQgeW91IG9uIExpZ2h0Y29yZCBTZXJ2ZXJzLi4uXCIsIHt0eXBlOiBcIndhcm5cIn0pXHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlcXVlc3QoUm91dGVzLmRlbGV0ZSwgXCJkZWxldGVcIilcclxuICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgQmRBcGkuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCwgY291bGRuJ3QgZGVsZXRlIGluZm9ybWF0aW9ucy4gU2VlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3NcIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGRlbGV0ZSBhbGwgaW5mb3JtYXRpb25zOiAkeyhyZXMuc3RhdHVzK1wiIFwiK3Jlcy5zdGF0dXNUZXh0K1wiIFwiK2F3YWl0IHJlcy50ZXh0KCkpfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBTdWNjZXNmdWxseSBkZWxldGVkIGluZm9ybWF0aW9ucy5gKVxyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJTdWNjZXNmdWxseSBkZWxldGVkIGluZm9ybWF0aW9uc1wiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KVxyXG4gICAgICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uID0gbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgQmRBcGkuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCwgY291bGRuJ3QgZGVsZXRlIGluZm9ybWF0aW9ucy4gU2VlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3NcIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7ZXJyLnN0YWNrfWApXHJcbiAgICAgICAgfSlcclxuICAgIH0qL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGN1c3RvbSBiYWRnZXMgZnJvbSB0aGUgdXNlciBJRC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyIFRoZSB1c2VyIElEIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Q29uc3RhbnRzW1wiYmFkZ2VzXCJdPn1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QmFkZ2VzKHVzZXIpe1xyXG4gICAgICAgIGlmKHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdKXJldHVybiB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIGlmKGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0pcmV0dXJuIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuXHJcbiAgICAgICAgbGV0IHJlc29sdmVcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlcykgPT4gKHJlc29sdmUgPSByZXMpKVxyXG4gICAgICAgIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0gPSBuZXdQcm9taXNlXHJcblxyXG4gICAgICAgIGNvbnN0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBDb25zdGFudHMuYmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoYmFkZ2UuZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIpKWJhZGdlcy5wdXNoKGJhZGdlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmZXRjaGVkQmFkZ2VzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pcmV0dXJuIHJlc29sdmUoW10pXHJcbiAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2gucHVzaChbdXNlciwgcmVzb2x2ZV0pXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gYmFkZ2VzVG9GZXRjaFxyXG4gICAgICAgICAgICAgICAgaWYodXNlcnMubGVuZ3RoID09PSAwKXJldHVyblxyXG4gICAgICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0KFJvdXRlcy5iYWRnZXMsIFwiUE9TVFwiLCBKU09OLnN0cmluZ2lmeSh1c2Vycy5tYXAoZSA9PiBlWzBdKSkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBzZXJ2ZXIgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZUJvZHkpXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCB1c2VyIG9mIHJlc3BvbnNlQm9keSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdXNlcnMuZmluZChwcm9taXNlID0+IHByb21pc2VbMF0gPT09IHVzZXIudXNlcl9pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZVsxXSh1c2VyLmJhZGdlcylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCEoZXJyIGluc3RhbmNlb2YgTGlnaHRjb3JkRXJyb3IpKWNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgfSlcclxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIGZldGNoZWRCYWRnZXMpe1xyXG4gICAgICAgICAgICBpZighQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIFdlIGRvIG5vdCBoYXZlIHRoZSBDb21wb25lbnQsIHNraXAgaXQuXHJcbiAgICAgICAgICAgIGlmKGJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIEFscmVhZHkgaW5zZXJ0ZWQuXHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKENvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IHtcclxuICAgICAgICAgICAgYmFkZ2VzOiBPYmplY3QuYXNzaWduKHRoaXMuY2FjaGUuYmFkZ2VzLCB7W3VzZXJdOiBiYWRnZXN9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXHJcbiAgICAgICAgfSwgNjAwMDAwKTtcclxuXHJcbiAgICAgICAgcmVzb2x2ZShiYWRnZXMpXHJcbiAgICAgICAgZGVsZXRlIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZVJlcXVlc3QgPSBmdW5jdGlvbihyb3V0ZSwgbWV0aG9kLCBkYXRhKXtcclxuICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXtcclxuICAgICAgICBjb25zb2xlLndhcm4oYENhbmNlbGluZyByZXF1ZXN0IG9uICR7cm91dGV9IHdpdGggbWV0aG9kICR7bWV0aG9kfSBhbmQgYm9keWAsIGRhdGEsIFwiYmVjYXVzZSBvZiBzZXR0aW5ncy5cIilcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IExpZ2h0Y29yZEVycm9yKFwiVGhlIGN1cnJlbnQgc2V0dGluZ3MgYmxvY2tlZCB0aGUgcmVxdWVzdC5cIikpXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhgU2VuZGluZyByZXF1ZXN0IG9uICR7cm91dGV9IHdpdGggbWV0aG9kICR7bWV0aG9kfSBhbmQgYm9keWAsIGRhdGEpXHJcbiAgICByZXR1cm4gbm9kZUZldGNoKGAke0NvbnN0YW50cy5TRVJWRVJfVVJMfS9hcGkvdjEke3JvdXRlfWAsIHtcclxuICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIkNMSUVOVFwiOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogd2luZG93LkxpZ2h0Y29yZC5BcGkuQXV0aG9yaXphdGlvbiB8fCBcIk5vbmU6OkFub255bW91c1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi4oZGF0YSA/IHtcclxuICAgICAgICAgICAgYm9keTogZGF0YVxyXG4gICAgICAgIH0gOiB7fSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmNsYXNzIExpZ2h0Y29yZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJMaWdodGNvcmRFcnJvclwiXHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBTRVJWRVJfVVJMOiBcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXovXCIsXHJcbiAgICBiYWRnZXM6IFsgLy8gVE9ETzogXHJcbiAgICAgICAgLyp7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkIFVzZXJcIixcclxuICAgICAgICAgICAgaWQ6IFwiMDFjZmE3YjAtN2NkYi00YjBlLTgyNTgtOWM2YTc4MjM1YzkzXCIsXHJcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW10sXHJcbiAgICAgICAgICAgIHNjb3BlczogW1xyXG4gICAgICAgICAgICAgICAgXCJ1c2VyXCJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgY29tcG9uZW50OiBMaWdodGNvcmRVc2VyQmFkZ2VcclxuICAgICAgICB9LCAqL3tcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgQnVnIEh1bnRlclwiLFxyXG4gICAgICAgICAgICBpZDogXCJmMDQ2OThmNS04MTZiLTQxZTMtYmQwMS05MjI5MTE5M2Q3YTVcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiLFxyXG4gICAgICAgICAgICAgICAgXCI2OTYwMDM0NTY2MTEzODUzOTZcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IEJ1Z0h1bnRlckJhZGdlLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQvbGlnaHRjb3JkL3dpa2kvYmFkZ2VzI2J1Z19odW50ZXJcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJCdWZmb29uXCIsXHJcbiAgICAgICAgICAgIGlkOiBcIjA2OTA0ZDMxLTY1YjQtNDFlYy1hNTBjLTg2NThiYmQxYWY5NlwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiMzg5MDE2ODk1NTQzNzA1NjAyXCIsXHJcbiAgICAgICAgICAgICAgICBcIjY2NDYwMDEzNDUyODY2MzU2NVwiLFxyXG4gICAgICAgICAgICAgICAgXCI2MjUzNTA2NTc4Mjk4OTYyMjRcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IENpcmN1cyxcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL3lvdXR1LmJlL0VKdGI2ei1kbFQ4P3Q9MTQ1XCJcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSb3V0ZXMgPSB7XHJcbiAgICBiYWRnZXM6IGAvdXNlcnMvYmFkZ2VzYFxyXG59IiwiLyoqXHJcbiAqIENvcHlyaWdodCAyMDE4IFphY2hhcnkgUmF1ZW5cclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXHJcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxyXG4gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxyXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkXHJcbiAqIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcclxuICogSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEFcclxuICogUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxyXG4gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0ZcclxuICogQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFXHJcbiAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxyXG4gKiBcclxuICogRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQkRQbHVnaW5MaWJyYXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcmZhY2VcclxuICogQG5hbWUgT2Zmc2V0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUb3Agb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IC0gUmlnaHQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSAtIEJvdHRvbSBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIExlZnQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodCAtIE91dGVyIGhlaWdodCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIE91dGVyIHdpZHRoIG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICovXHJcblxyXG4gLyoqXHJcbiAqIEZ1bmN0aW9uIHRoYXQgYXV0b21hdGljYWxseSByZW1vdmVzIGFkZGVkIGxpc3RlbmVyLlxyXG4gKiBAY2FsbGJhY2sgbW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyXHJcbiAqL1xyXG4gXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTVRvb2xzIHtcclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcclxuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuXHQgKiBBZGRzIGEgc3R5bGUgdG8gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGFzIHRoZSBlbGVtZW50IGlkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNzcyAtIGNzcyB0byBhZGQgdG8gdGhlIGRvY3VtZW50XHJcblx0ICovXHJcblx0c3RhdGljIGFkZFN0eWxlKGlkLCBjc3MpIHtcclxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKERPTVRvb2xzLmNyZWF0ZUVsZW1lbnQoYDxzdHlsZSBpZD1cIiR7aWR9XCI+JHtjc3N9PC9zdHlsZT5gKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgc3R5bGUgZnJvbSB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZVN0eWxlKGlkKSB7XHJcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGRzL3JlcXVpcmVzIGEgcmVtb3RlIHNjcmlwdCB0byBiZSBsb2FkZWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBmb3IgdGhpcyBzY3JpcHRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIGZyb20gd2hpY2ggdG8gbG9hZCB0aGUgc2NyaXB0XHJcblx0ICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVkXHJcblx0ICovXHJcblx0c3RhdGljIGFkZFNjcmlwdChpZCwgdXJsKSB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcblx0XHRcdGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcblx0XHRcdHNjcmlwdC5pZCA9IGlkO1xyXG5cdFx0XHRzY3JpcHQuc3JjID0gdXJsO1xyXG5cdFx0XHRzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XHJcblx0XHRcdHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xyXG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChzY3JpcHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgcmVtb3RlIHNjcmlwdCBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU2NyaXB0KGlkKSB7XHJcbiAgICAgICAgaWQgPSB0aGlzLmVzY2FwZUlEKGlkKTtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gaHR0cHM6Ly9qYXZhc2NyaXB0LmluZm8vanMtYW5pbWF0aW9uXHJcbiAgICBzdGF0aWMgYW5pbWF0ZSh7dGltaW5nID0gXyA9PiBfLCB1cGRhdGUsIGR1cmF0aW9ufSkge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICAgIFxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcclxuICAgICAgICAgIC8vIHRpbWVGcmFjdGlvbiBnb2VzIGZyb20gMCB0byAxXHJcbiAgICAgICAgICBsZXQgdGltZUZyYWN0aW9uID0gKHRpbWUgLSBzdGFydCkgLyBkdXJhdGlvbjtcclxuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPiAxKSB0aW1lRnJhY3Rpb24gPSAxO1xyXG4gICAgICBcclxuICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGVcclxuICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gdGltaW5nKHRpbWVGcmFjdGlvbik7XHJcbiAgICAgIFxyXG4gICAgICAgICAgdXBkYXRlKHByb2dyZXNzKTsgLy8gZHJhdyBpdFxyXG4gICAgICBcclxuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPCAxKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgbXkgc2hpdCB2ZXJzaW9uIG9mIG5vdCBoYXZpbmcgdG8gdXNlIGAkYCBmcm9tIGpRdWVyeS4gTWVhbmluZ1xyXG4gICAgICogdGhhdCB5b3UgY2FuIHBhc3MgYSBzZWxlY3RvciBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5fS5cclxuICAgICAqIEl0IGFsc28gbWVhbnMgdGhhdCB5b3UgY2FuIHBhc3MgYSBzdHJpbmcgb2YgaHRtbCBhbmQgaXQgd2lsbCBwZXJmb3JtIGFuZCByZXR1cm4gYHBhcnNlSFRNTGAuXHJcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUxcclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeSBvciBIVE1MIHRvIHBhcnNlXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIEVpdGhlciB0aGUgcmVzdWx0IG9mIGBwYXJzZUhUTUxgIG9yIGBxdWVyeWBcclxuICAgICAqL1xyXG4gICAgc3RhdGljIFEoc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUhUTUwoc2VsZWN0b3IpO1xyXG4gICAgICAgIGNvbnN0IGlzSFRNTCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCA/IEFycmF5LmZyb20oZWxlbWVudCkuc29tZShuID0+IG4ubm9kZVR5cGUgPT09IDEpIDogZWxlbWVudC5ub2RlVHlwZSA9PT0gMTtcclxuICAgICAgICBpZiAoaXNIVE1MKSByZXR1cm4gZWxlbWVudDtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBmb3VuZCBlbGVtZW50IG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBxdWVyeShzZWxlY3RvciwgYmFzZUVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWJhc2VFbGVtZW50KSBiYXNlRWxlbWVudCA9IGRvY3VtZW50O1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbGAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gQXJyYXkgb2YgYWxsIGZvdW5kIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBxdWVyeUFsbChzZWxlY3RvciwgYmFzZUVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWJhc2VFbGVtZW50KSBiYXNlRWxlbWVudCA9IGRvY3VtZW50O1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBvZiBIVE1MIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0cnVlLFxyXG4gICAgICogdGhlIHBhcnNlZCBIVE1MIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBkb2N1bWVudCBmcmFnbWVudCB7QHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRGcmFnbWVudH0uXHJcbiAgICAgKiBUaGlzIGlzIGV4dHJlbWVseSB1c2VmdWwgaWYgeW91IGhhdmUgYSBsaXN0IG9mIGVsZW1lbnRzIGF0IHRoZSB0b3AgbGV2ZWwsIHRoZXkgY2FuIHRoZW4gYmUgYXBwZW5kZWQgYWxsIGF0IG9uY2UgdG8gYW5vdGhlciBub2RlLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIGxpc3Qgb2YgcGFyc2VkXHJcbiAgICAgKiBub2RlcyBhbmQgdGhlcmUgd2VyZSBtdWx0aXBsZSB0b3AgbGV2ZWwgbm9kZXMsIG90aGVyd2lzZSB0aGUgc2luZ2xlIG5vZGUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIEhUTUwgdG8gYmUgcGFyc2VkXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcmFnbWVudD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuIHNob3VsZCBiZSB0aGUgcmF3IGBEb2N1bWVudEZyYWdtZW50YFxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBUaGUgcmVzdWx0IG9mIEhUTUwgcGFyc2luZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcclxuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICBpZiAoZnJhZ21lbnQpIHJldHVybiBub2RlO1xyXG4gICAgICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/IG5vZGUuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2Rlc1swXTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQWx0ZXJuYXRlIG5hbWUgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MfSAqL1xyXG4gICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge3JldHVybiB0aGlzLnBhcnNlSFRNTChodG1sLCBmcmFnbWVudCk7fVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGVzY2FwZXMgaXQgdXNpbmcgdGhlIGJyb3dlcidzIG93biBlc2NhcGluZyBtZWNoYW5pc20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIGh0bWwgdG8gYmUgZXNjYXBlZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXNjYXBlSFRNTChodG1sKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcclxuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xyXG4gICAgICAgIHNwYW5FbGVtZW50LmFwcGVuZCh0ZXh0Tm9kZSk7XHJcbiAgICAgICAgdGV4dE5vZGUubm9kZVZhbHVlID0gaHRtbDtcclxuICAgICAgICByZXR1cm4gc3BhbkVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gYWRkXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZGRDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIHJlbW92ZVxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi5jbGFzc2VzKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gb25seSBvbmUgYXJndW1lbnQgaXMgcHJlc2VudDogVG9nZ2xlIGNsYXNzIHZhbHVlO1xyXG4gICAgICogaS5lLiwgaWYgY2xhc3MgZXhpc3RzIHRoZW4gcmVtb3ZlIGl0IGFuZCByZXR1cm4gZmFsc2UsIGlmIG5vdCwgdGhlbiBhZGQgaXQgYW5kIHJldHVybiB0cnVlLlxyXG4gICAgICogV2hlbiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50OlxyXG4gICAgICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBldmFsdWF0ZXMgdG8gdHJ1ZSwgYWRkIHNwZWNpZmllZCBjbGFzcyB2YWx1ZSwgYW5kIGlmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwgcmVtb3ZlIGl0LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHRvZ2dsZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5kaWNhdG9yXSAtIE9wdGlvbmFsIGluZGljYXRvciBmb3IgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSB0b2dnbGVkXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b2dnbGVDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUsIGluZGljYXRvcikge1xyXG4gICAgICAgIGNsYXNzbmFtZSA9IGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBpZiAodHlwZW9mKGluZGljYXRvcikgIT09IFwidW5kZWZpbmVkXCIpIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMsIGluZGljYXRvcikpO1xyXG4gICAgICAgIGVsc2UgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYykpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaGFzIGEgc3BlY2lmaWMgY2xhc3NcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IC0gYHRydWVgIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKS5ldmVyeShjID0+IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIG9uZSBjbGFzcyB3aXRoIGFub3RoZXJcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gcmVwbGFjZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBmb3IgdGhlIGNsYXNzXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXBsYWNlQ2xhc3MoZWxlbWVudCwgb2xkTmFtZSwgbmV3TmFtZSkge1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2Uob2xkTmFtZSwgbmV3TmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgYXBwZW5kZWQgdG8gYW5vdGhlciBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBhcHBlbmRlZCB0b1xyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFwcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUuYXBwZW5kKHRoaXNOb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIHByZXBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIHByZXBlbmRlZCB0b1xyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xyXG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRoYXROb2RlLnByZXBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50Lmluc2VydEFmdGVyKG90aGVyRWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXROb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbnNlcnRBZnRlcih0aGlzTm9kZSwgdGFyZ2V0Tm9kZSkge1xyXG4gICAgICAgIHRhcmdldE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc05vZGUsIHRhcmdldE5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50LmFmdGVyKG5ld0VsZW1lbnQpYC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbmV3Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWZ0ZXIodGhpc05vZGUsIG5ld05vZGUpIHtcclxuICAgICAgICB0aGlzTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCB0aGlzTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBuZXh0IHNpYmxpbmcgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0b3IgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIrIFwiICsgc2VsZWN0b3IpIDogZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBzdWJzZXF1ZW50IHNpYmxpbmdzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgbmV4dCBzaWJsaW5ncyBvZlxyXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0QWxsKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwifiAqXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgc3Vic2VxdWVudCBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGZvbGxvd2luZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0VW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIG5leHQucHVzaChlbGVtZW50ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJldmlvdXMgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJldmlvdXMgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHJldHVybiBwcmV2aW91cyAmJiBwcmV2aW91cy5tYXRjaGVzKHNlbGVjdG9yKSA/IHByZXZpb3VzIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBwcmVjZWVkaW5nIHNpYmxpbmdzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91c0FsbChlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTtcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByZWNlZWRpbmcgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdOyBcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCB3aGljaCBpbmRleCBpbiBjaGlsZHJlbiBhIGNlcnRhaW4gbm9kZSBpcy4gU2ltaWxhciB0byBqUXVlcnkncyBgJC5pbmRleCgpYFxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIFRoZSBub2RlIHRvIGZpbmQgaXRzIGluZGV4IGluIHBhcmVudFxyXG4gICAgICogQHJldHVybnMge251bWJlcn0gSW5kZXggb2YgdGhlIG5vZGVcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluZGV4SW5QYXJlbnQobm9kZSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgbGV0IG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gbm9kZSkgcmV0dXJuIG51bTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5pbmRleEluUGFyZW50fSAqL1xyXG4gICAgc3RhdGljIGluZGV4KG5vZGUpIHtyZXR1cm4gdGhpcy5pbmRleEluUGFyZW50KG5vZGUpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudCBpZiBpdCBtYXRjaGVzIHRoZSBzZWxlY3RvcixcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwYXJlbnQgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCBwYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgc2libGluZyBlbGVtZW50IG9yIG51bGxcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gIXNlbGVjdG9yIHx8IGVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSA/IGVsZW1lbnQucGFyZW50RWxlbWVudCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRDaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGFuY2VzdG9ycyBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHBhcmVudHMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgcGFyZW50cyB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIGlmIChzZWxlY3Rvcikgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKTtcclxuICAgICAgICBlbHNlIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gcGFyZW50cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGFuY2VzdG9ycyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGFuY2VzdG9ycyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudHNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmICFlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gcGFyZW50cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHNpYmxpbmdzIG9mIHRoZSBlbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiKlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBzaWJsaW5ncyB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzaWJsaW5ncyhlbGVtZW50LCBzZWxlY3RvciA9IFwiKlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoZSA9PiBlICE9IGVsZW1lbnQgJiYgZS5tYXRjaGVzKHNlbGVjdG9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgY3NzIHN0eWxlcyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHN0eWxlIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBzdHlsZS4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSAtIEF0dHJpYnV0ZSB0byBnZXQgb3Igc2V0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFZhbHVlIHRvIHNldCBmb3IgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY3NzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClbYXR0cmlidXRlXTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgd2lkdGggZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSB3aWR0aCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgd2lkdGguICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gV2lkdGggdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgd2lkdGgoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS53aWR0aCk7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBoZWlnaHQgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBoZWlnaHQgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGhlaWdodC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBIZWlnaHQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaGVpZ2h0KGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0KTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5uZXIgdGV4dCBvZiBhbiBlbGVtZW50IGlmIGdpdmVuIGEgdmFsdWUsIG90aGVyd2lzZSByZXR1cm5zIGl0LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIHRleHQgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBDb250ZW50IHRvIHNldFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSBFaXRoZXIgdGhlIHN0cmluZyBzZXQgYnkgdGhpcyBjYWxsIG9yIHRoZSBjdXJyZW50IHRleHQgY29udGVudCBvZiB0aGUgbm9kZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRleHQoZWxlbWVudCwgdGV4dCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGV4dCkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGlubmVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5uZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIHdpZHRoIG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJXaWR0aChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlckhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgaGVpZ2h0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIG91dGVySGVpZ2h0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHBhZ2UuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBvZmZzZXQgb2ZcclxuICAgICAqIEByZXR1cm4ge09mZnNldH0gLSBUaGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmZzZXQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgbGlzdGVuZXJzKCkgeyByZXR1cm4gdGhpcy5fbGlzdGVuZXJzIHx8ICh0aGlzLl9saXN0ZW5lcnMgPSB7fSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb25gIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXHJcbiAgICAgKiBcclxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyBvbmNlLlxyXG4gICAgICogYGNvbnN0IGNhbmNlbCA9IERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiZmlyZWQhXCIpOyBjYW5jZWwoKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbmFsaXR5IGZvciB0aGlzIG1ldGhvZCBtYXRjaGVzIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub259IGJ1dCBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXRzZWxmXHJcbiAgICAgKiBhbmQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIgdXBvbiB0aGUgZmlyc3QgZmlyaW5nIG9mIHRoZSBkZXNpcmVkIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbmNlKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9IDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHJldHVybjtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIF9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgbGV0IG1hdGNoRmlsdGVyID0gbGlzdGVuZXIgPT4gbGlzdGVuZXIuZXZlbnQgPT0gdHlwZSwgZGVmYXVsdEZpbHRlciA9IF8gPT4gXztcclxuICAgICAgICBpZiAoZWxlbWVudCkgbWF0Y2hGaWx0ZXIgPSBsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCwgZGVmYXVsdEZpbHRlciA9IGwgPT4gbC5lbGVtZW50ID09IGVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSB8fCBbXTtcclxuICAgICAgICBjb25zdCBsaXN0ID0gdHlwZSA/IGxpc3RlbmVycy5maWx0ZXIobWF0Y2hGaWx0ZXIpIDogbGlzdGVuZXJzLmZpbHRlcihkZWZhdWx0RmlsdGVyKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGxpc3QubGVuZ3RoOyBjKyspIGxpc3RbY10uY2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvZmZgIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXHJcbiAgICAgKiBcclxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVkIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGlja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCIubXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBjbGljayBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cclxuICAgICAqIGBET01Ub29scy5vZmYoXCJjbGljay5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KEVsZW1lbnR8c3RyaW5nKX0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmVtb3ZlIGxpc3RlbmVyIGZyb21cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRdIC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gW2RlbGVnYXRlXSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBvcmlnaW5hbCBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb2ZmKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVsZW1lbnQpID09IFwic3RyaW5nXCIpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIHdoZW4gdGhlIG5vZGUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBib2R5LlxyXG4gICAgICogVGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB1cG9uIGZpcmluZy5cclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBub2RlIHRvIHdhaXQgZm9yXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBldmVudFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvbk1vdW50IC0gZGV0ZXJtaW5lcyBpZiBpdCBzaG91bGQgZmlyZSBvbiBNb3VudCBvciBvbiBVbm1vdW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBvbk1vdW50ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlci51bnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrLCBtdXRhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShvbk1vdW50ID8gbXV0YXRpb24uYWRkZWROb2RlcyA6IG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGB0cnVlYCAqL1xyXG4gICAgc3RhdGljIG9uTW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjayk7IH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGBmYWxzZWAgKi9cclxuICAgIHN0YXRpYyBvblVubW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnR9ICovXHJcbiAgICBzdGF0aWMgb25BZGRlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50KG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vblVubW91bnR9ICovXHJcbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uVW5tb3VudChub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY29tYmluZXMgbXVsdGlwbGUgZWxlbWVudHMgaW50byBvbmUgcGFyZW50IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8SFRNTEVsZW1lbnQ+fSBlbGVtZW50cyAtIGFycmF5IG9mIGVsZW1lbnRzIHRvIHB1dCBpbnRvIGEgc2luZ2xlIHBhcmVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgd3JhcChlbGVtZW50cykge1xyXG4gICAgICAgIGNvbnN0IGRvbVdyYXBwZXIgPSB0aGlzLnBhcnNlSFRNTChgPGRpdiBjbGFzcz1cImRvbS13cmFwcGVyXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBlbGVtZW50cy5sZW5ndGg7IGUrKykgZG9tV3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50c1tlXSk7XHJcbiAgICAgICAgcmV0dXJuIGRvbVdyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvbHZlcyB0aGUgbm9kZSB0byBhbiBIVE1MRWxlbWVudC4gVGhpcyBpcyBtYWlubHkgdXNlZCBieSBsaWJyYXJ5IG1vZHVsZXMuXHJcbiAgICAgKiBAcGFyYW0geyhqUXVlcnl8RWxlbWVudCl9IG5vZGUgLSBub2RlIHRvIHJlc29sdmVcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlc29sdmVFbGVtZW50KG5vZGUpIHtcclxuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xyXG4gICAgfVxyXG59XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRE9NID0gRE9NVG9vbHMiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcclxufVxyXG5cclxubGV0IEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbmxldCBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXVxyXG5sZXQgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVswXVxyXG5sZXQgRW1vamlNb2R1bGVRdWVyeSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVswXVxyXG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdXHJcbmxldCBndWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVswXVxyXG5sZXQgZW1vamlTZWFyY2ggPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb2ppTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5pbml0KCkuY2F0Y2goZXJyID0+IFV0aWxzLmVycihcIkVtb2ppTW9kdWxlXCIsIFwiQW4gZXJyb3Igb2NjdXJlZFwiLCBlcnIpKSAvLyBiZXR0ZXIgbG9nZ2luZ1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQoKXtcclxuICAgICAgICAvKiogRW1vamkgQXV0b0NvbXBsZXRlICovXHJcbiAgICAgICAgaWYoIUF1dG9jb21wbGV0ZU1vZHVsZSlBdXRvY29tcGxldGVNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpXHJcbiAgICAgICAgaWYoIUF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKUF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpXHJcbiAgICAgICAgaWYoIUVtb2ppTW9kdWxlUXVlcnkpRW1vamlNb2R1bGVRdWVyeSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylcclxuICAgICAgICBpZighTWVzc2FnZXMpTWVzc2FnZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVxyXG4gICAgICAgIGlmKCFndWlsZE1vZHVsZSlndWlsZE1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZylcclxuICAgICAgICBpZighZW1vamlTZWFyY2gpZW1vamlTZWFyY2ggPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dClcclxuXHJcbiAgICAgICAgaWYoQXV0b2NvbXBsZXRlTW9kdWxlICYmIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzICYmIEVtb2ppTW9kdWxlUXVlcnkgJiYgTWVzc2FnZXMgJiYgZ3VpbGRNb2R1bGUgJiYgZW1vamlTZWFyY2gpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUGF0Y2hpbmcgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyBvZiBBdXRvQ29tcGxldGlvblRlbXBsYXRlc2AsIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKVxyXG4gICAgICAgICAgICBjb25zdCBnZXRBdXRvY29tcGxldGVPcHRpb25zID0gQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgICBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zID0gZnVuY3Rpb24oZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMoYXJnMSwgYXJnMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBhcmcyLmxlbmd0aCA+IDEgJiYgXCIuXCIgPT09IGFyZzFcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW1vamlVc2FibGUoY29uZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdHModCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzID0gRW1vamlNb2R1bGVRdWVyeS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKHQsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJSZXN1bHRzKGUsIHQsIG4sIHIsIGEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRChlLCB0LCBhLmVtb2ppcywgbiwgciwgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORywgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSSwgQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuRW1vamksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZS5pZCB8fCBlLnVuaXF1ZU5hbWUgfHwgZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRpbmVsOiBcIi5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlsZDogbnVsbCAhPSBlLmd1aWxkSWQgPyBndWlsZE1vZHVsZS5kZWZhdWx0LmdldEd1aWxkKGUuZ3VpbGRJZCkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiLlwiICsgZSArIFwiLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGxhaW5UZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFJhd1RleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3Qgc3RhcnQgYXV0b2NvbXBsZXRpb24gb2YgTGlnaHRjb3JkJ3MgZW1vamlzLlwiKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiBFbW9qaSBkaXNwbGF5ICovXHJcbiAgICAgICAgd2hpbGUgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKXsgLy8gVE9ETzogUHJvcGVyIGVtb2ppIGZvcm1hdHRpbmcgLyByZW5kZXJpbmdcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtiZWZvcmU6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2VcIilcclxuICAgICAgICAgICAgICAgIGlmKCFtZXNzYWdlKXJldHVyblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwiY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50XCIpXHJcbiAgICAgICAgICAgICAgICBpZighY29udGVudCB8fCAhY29udGVudC5sZW5ndGgpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQHR5cGUge3tcclxuICAgICAgICAgICAgICAgICAqICByYXc6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgaWQ6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBhbmltYXRlZDogYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgICogfVtdfVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBsZXQgZW1vamlzID0gW11cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IFtdXHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IG5vZGUgb2YgY29udGVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1BhcnNlZCA9IGZhbHNlXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBDb25zdGFudHMuRW1vamlSZWdleC5leGVjKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXJzZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighRW1vamlNb2R1bGVBcGkpRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IEVtb2ppTW9kdWxlQXBpLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKHBhcnNlZFsyXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVtb2ppKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVtb2ppLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBwYXJzZWRbMF0uc3RhcnRzV2l0aChcIjxhXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwYXJzZWRbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYXJzZWRbMl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHBhcnNlZCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZihoYXNQYXJzZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoXCIgXCIpLm1hcCgod29yZCwgaW5kZXgsIGFycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXdvcmQpcmV0dXJuIFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gZW1vamlzLmZpbmQoZSA9PiBlLnJhdyA9PSB3b3JkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWVtb2ppKXJldHVybiB3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighQ3VzdG9tRW1vamlNb2R1bGUpQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbUVtb2ppTW9kdWxlLkN1c3RvbUVtb2ppLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYC4ke2Vtb2ppLm5hbWV9LmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppSWQ6IGVtb2ppLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogZW1vamkuYW5pbWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bWJvYWJsZTogYXJyLmxlbmd0aCA9PT0gMSAmJiBjb250ZW50Lmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByZXZpb3VzLmxlbmd0aCA9PT0gMClyZXR1cm4gW2N1cnJlbnRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgY3VycmVudCA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gKz0gYCAke2N1cnJlbnR9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIitjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiwgY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKC4uLndvcmRzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZShkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5zaGlmdCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZShuZXdDb250ZW50WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQucHVzaChuZXdDb250ZW50LnNoaWZ0KCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9LypcclxuICAgICAgICBsZXQgdXNlck1vZHVsZVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIilcclxuICAgICAgICAudGhlbihFbW9qaVBpY2tlckxpc3RSb3cgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NzID0gRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHRcclxuICAgICAgICAgICAgRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHQgPSBjbGFzcyBFbW9qaVBpY2tlckxpc3RSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF1cclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlck1vZHVsZSlyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24pcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCB0aGlzLnByb3BzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlEZXNjcmlwdG9yczogdGhpcy5wcm9wcy5lbW9qaURlc2NyaXB0b3JzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaXNEaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdC5kaXNwbGF5TmFtZSA9IFwiRW1vamlQaWNrZXJMaXN0Um93XCJcclxuICAgICAgICB9KSovXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpe1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBEKGUsIHQsIG4sIHIsIG8sIGksIHMsIHUsIGwsIGMpIHtcclxuICAgIGlmIChudWxsID09IG4gfHwgMCA9PT0gbi5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgdmFyIGQgPSBuLm1hcCgoZnVuY3Rpb24oZSwgbikge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHUsIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBvbkNsaWNrOiBvLFxyXG4gICAgICAgICAgICBvbkhvdmVyOiByLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogdCA9PT0gbixcclxuICAgICAgICAgICAgaW5kZXg6IG5cclxuICAgICAgICB9LCBsKGUsIG4pKSlcclxuICAgIH0pKTtcclxuICAgIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF1cclxufVxyXG5cclxuZnVuY3Rpb24gUihlLCB0LCBuLCByKSB7XHJcbiAgICB2YXIgYSA9IChuLmxlbmd0aCA+IDAgPyBlLmZvcm1hdCh7XHJcbiAgICAgICAgcHJlZml4OiByKG4pXHJcbiAgICB9KSA6IHQpXHJcbiAgICBpZihBcnJheS5pc0FycmF5KGEpKXtcclxuICAgICAgICBhLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCB7fSwgXCJbTGlnaHRjb3JkXSBcIikpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBhID0gXCJbTElHSFRDT1JEXSBcIithXHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xyXG4gICAgICAgIHRpdGxlOiBhXHJcbiAgICB9LCBhKVxyXG59XHJcblIuZGlzcGxheU5hbWUgPSBcInJlbmRlckhlYWRlclwiO1xyXG5cclxubGV0IEVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG5sZXQgaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUgJiYgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxubGV0IGlzVXNhYmxlID0gZmFsc2VcclxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxyXG5cclxuZnVuY3Rpb24gc2V0RW1vamlVc2FibGUodXNhYmxlKXtcclxuICAgIGlzVXNhYmxlID0gdXNhYmxlXHJcbiAgICBpZihoYXNQYXRjaGVkKXJldHVyblxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKUVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKXJldHVyblxyXG4gICAgaWYoIWlzRW1vamlEaXNhYmxlZClpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5cclxuICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZCA9IGZ1bmN0aW9uKGVtb2ppKXtcclxuICAgICAgICBpZihpc1VzYWJsZSl7XHJcbiAgICAgICAgICAgIGlmKGVtb2ppLnN1cnJvZ2F0ZXMgfHwgZW1vamkuZGl2ZXJzaXR5KXJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFbW9qaURpc2FibGVkLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIlxyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIlxyXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5pbXBvcnQgeyBhZGRvbkNhY2hlIH0gZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5cclxuY29uc3QgY2FjaGUgPSB7fVxyXG5jb25zdCBjYWNoZTIgPSB7fVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5DZXJ0aWZpZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2goYXR0YWNobWVudCwgaWQpe1xyXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50LCBpZClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlzVHJ1c3RlZChoYXNoKXtcclxuICAgICAgICByZXR1cm4gY2FjaGVbaGFzaF0gJiYgIWNhY2hlW2hhc2hdLnN1c3BlY3RcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKXtcclxuICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXHJcbiAgICBmb3IobGV0IGtleXdvcmQgb2YgZGF0YS5zcGxpdCgvW15cXHdcXGRdKy9nKSl7XHJcbiAgICAgICAgZm9yKGxldCBvb2Ygb2YgW1xyXG4gICAgICAgICAgICBcInRva2VuXCIsXHJcbiAgICAgICAgICAgIFwiZW1haWxcIixcclxuICAgICAgICAgICAgXCJwaG9uZVwiLFxyXG4gICAgICAgICAgICBcIk1GQVwiLFxyXG4gICAgICAgICAgICBcIjJmYVwiLFxyXG4gICAgICAgICAgICBcInByb2Nlc3NcIixcclxuICAgICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXHJcbiAgICAgICAgICAgIFwibG9jYWxTdG9yYWdlXCIsXHJcbiAgICAgICAgICAgIFwiZXZhbFwiLFxyXG4gICAgICAgICAgICBcImdldEdsb2JhbFwiLFxyXG4gICAgICAgICAgICBcIkJyb3dzZXJXaW5kb3dcIlxyXG4gICAgICAgIF0pe1xyXG4gICAgICAgICAgICBpZihrZXl3b3JkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMob29mLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG9vZiwga2V5d29yZClcclxuICAgICAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwidG9rZW4gc3RlYWxlci92aXJ1c1wiXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IG5vX2NvbW1lbnRzID0gZGF0YS5yZXBsYWNlKC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfChbXlxcXFw6XXxeKVxcL1xcLy4qJC9nbSwgXCJcIikudHJpbSgpLy8gcmVtb3ZpbmcgdGhlIE1FVEEgY29tbWVudCBmcm9tIHBsdWdpbnNcclxuICAgICAgICBpZigoL3ZhciBbXFx3XFxkXyRdKz1cXFtcIi9naSkudGVzdChub19jb21tZW50cykpe1xyXG4gICAgICAgICAgICBpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgICAgICBjb25zdCByZWdleHBzID0gW1xyXG4gICAgICAgICAgICAgICAgLyoqIGhleGFkZWNpbWFsICovXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLFxyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBfMHg4ZGI3KCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgICAgICAvKiogbWFuZ2xlZCAqL1xyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC8vIGIoJzB4MCcpXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBiKCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgZm9yKGxldCByZWdleCBvZiByZWdleHBzKXtcclxuICAgICAgICAgICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgICAgICAgICAgICAgaXNIYXJtZnVsID0gcmVnZXgudGVzdChub19jb21tZW50cykgPyBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCIgOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICBjYWNoZVtoYXNoXSA9IHtcclxuICAgICAgICBzdXNwZWN0OiB0cnVlLFxyXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXHJcbiAgICAgICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcclxuICAgICAgICBoYXJtOiBpc0hhcm1mdWwsXHJcbiAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICBmaWxlbmFtZVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zb2xlLmxvZyhgRm91bmQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICR7Y2FjaGVbaGFzaF0udHlwZS50b0xvd2VyQ2FzZSgpfTogJHtjYWNoZVtoYXNoXS5uYW1lfWApXHJcblxyXG4gICAgcmVzdWx0Q2FsbGJhY2soY2FjaGVbaGFzaF0pXHJcbn1cclxuXHJcbmNvbnN0IGhhc2hUb1VybCA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIYXNoKGhhc2gsIGRhdGEsIGZpbGVuYW1lLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spe1xyXG4gICAgY29uc29sZS5sb2coYEZpbGU6ICR7ZmlsZW5hbWV9IGhhc2g6ICR7aGFzaH1gKVxyXG4gICAgaWYoIWNhY2hlW2hhc2hdKXtcclxuICAgICAgICBub2RlRmV0Y2goXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvTGlnaHRjb3JkL2ZpbGVoYXNoZXNAbWFzdGVyL2hhc2hlcy9cIitoYXNoLCB7IC8vIFVzaW5nIG5vZGUtZmV0Y2ggdG8gYnlwYXNzIGNvcnNcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnQgLy8gaGF2ZSB0byBzZXQgdXNlci1hZ2VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxyXG4gICAgICAgICAgICAgICAgY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIHJlc3VsdC5oYXNoID0gaGFzaFxyXG4gICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUgPSBmaWxlbmFtZVxyXG5cclxuICAgICAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHRcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcclxuICAgICAgICB9KS5jYXRjaChjb25zb2xlLmVycm9yKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cclxuXHJcbiAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGUoX19wYXRoLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2sgPSAoaGFzaCkgPT4ge30sIGlzRnJvbUxvYWRlciA9IGZhbHNlKXsgICAgXHJcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXHJcblxyXG4gICAgY3JlYXRlUmVhZFN0cmVhbShfX3BhdGgpLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSlcclxuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgIH0pLm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gX19wYXRoXHJcblxyXG4gICAgICAgIGlmKGlzRnJvbUxvYWRlciAmJiBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdKXtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICBpZih2YWx1ZS50aW1lc3RhbXAgPCAoRGF0ZS5ub3coKSAtIDYuMDQ4ZSs4KSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgY29udGVudE1hbmFnZXIuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHZhbHVlLnJlc3VsdClcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYmFzZW5hbWUoX19wYXRoKSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrKVxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcclxuICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpcmV0dXJuXHJcbiAgICBpZighYXR0YWNobWVudC51cmwuc3RhcnRzV2l0aChcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL1wiKSlyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpXHJcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuXHJcbiAgICBub2RlRmV0Y2goYXR0YWNobWVudC51cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50XHJcbiAgICAgICAgfVxyXG4gICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGRvZXNuJ3QgZXhpc3QuXCIpXHJcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXHJcbiAgICAgICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuICAgICAgICByZXMuYm9keS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXHJcblxyXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxyXG4gICAgICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybFxyXG5cclxuICAgICAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSlcclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcclxuICAgICAgICAgICAgICAgIGlmKGVsZW0pZWxlbS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KS5jYXRjaCgoKT0+e30pXHJcbn1cclxuXHJcbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxubGV0IGNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcblxyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXHJcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcclxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVybiAvLyBhbHJlYWR5IGNlcnRpZmllZC9kaXYgZG9lcyBub3QgZXhpc3QgYW55bW9yZS5cclxuXHJcbiAgICBpZighZmxvd2VyU3Rhck1vZHVsZSlmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxuICAgIGlmKCFjaGlsZE1vZHVsZSljaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxyXG4gICAgXHJcbiAgICBpZihyZXN1bHQuc3VzcGVjdCl7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBcclxuICAgICAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkLnRhZ05hbWUgPT09IFwiQVwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgKipcIitmaWxlbmFtZStcIioqIG1pZ2h0IGJlIGRhbmdlcm91cyAqKihcIityZXN1bHQuaGFybStcIikqKi4gXFxuXFxuKipXZSBkb24ndCByZWNvbW1hbmQgdG8gZG93bmxvYWQgaXQqKi4gSG93ZXZlciwgeW91IGNhbiBzdGlsbCBkbyBpdCBiZWxvdy5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBBbnl3YXlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJEb24ndCAhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLnJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoY2hpbGQuaHJlZilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihbXCJkaXZcIl0uaW5jbHVkZXMoY2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0Tm9kZShkaXYucGFyZW50Tm9kZSlcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLlwifSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuc3ZnKVswXS5zdmcsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgNDAgMzJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC0zMilcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDpcIiNmMDQ3NDdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOkJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSwgZGl2KVxyXG4gICAgfWVsc2UgaWYoIXJlc3VsdC5vZmZpY2lhbCl7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIGNlcnRpZmllZCBieSBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwiLCBmbG9hdDogXCJsZWZ0XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTcuNCwxMS4xNyw0LDguNjIsNSw3LjI2bDIsMS41M0wxMC42NCw0bDEuMzYsMVpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhbmQgbGF1bmNoIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIi4gWW91IGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8uXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVGZXRjaChsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBhd2FpdCByZXMuYnVmZmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbnN0YWxsUGF0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhpbnN0YWxsUGF0aCwgY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixzdHlsZTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiZmlsbFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNwYW4sIGRpdilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICBsZXQgc3BhbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZGlzcGxheTogXCJpbmhlcml0XCJ9fSwgW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiB3YXMgbWFkZSBieSB0aGUgZGV2ZWxvcGVycyBvZiBMaWdodGNvcmQuXCIsIHN0eWxlOlwiYnJhbmRcIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwiLHN0cm9rZTpcIiMzNjM5M2ZcIixzdHlsZTp7Y29sb3I6XCIjNDA4N2VkXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcImN1cnJlbnRDb2xvclwiLCBcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLGQ6XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgbXVzdCBlbmFibGUgaXQgaW4gdGhlIHNldHRpbmdzLlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgYW5kIEluc3RhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGdldEtleWVkQXJyYXkoY2FjaGUyKS5maW5kKGUgPT4gZVsxXSA9PT0gcmVzdWx0Lmhhc2gpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXllZEFycmF5KG9iail7XHJcbiAgICBsZXQgYXJyID0gW11cclxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IHtcclxuICAgICAgICBhcnIucHVzaChbaywgb2JqW2tdXSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXJyXHJcbn1cclxuXHJcbmxldCBrZXkgPSBudWxsXHJcbmxldCBzYXZlID0gbnVsbFxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQobT0+bS5PYmplY3RTdG9yYWdlKVxyXG4udGhlbihsb2NhbFN0b3JhZ2VNb2R1bGUgPT4ge1xyXG4gICAgbGV0IGxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZU1vZHVsZS5pbXBsXHJcbiAgICBzYXZlID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIsIGJ0b2EoSlNPTi5zdHJpbmdpZnkoa2V5KSkpXHJcbiAgICB9XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9LCAxMDAwMDApO1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCB2YWwgPSBzYWZlSlNPTlBhcnNlKGF0b2IobG9jYWxTdG9yYWdlLmdldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiKSkpXHJcbiAgICAgICAgaWYodmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgIUFycmF5LmlzQXJyYXkodmFsKSB8fCB2YWwubGVuZ3RoICE9PSAyIHx8IHZhbC5maW5kKGUgPT4gdHlwZW9mIGUgIT09IFwic3RyaW5nXCIpIHx8IEJ1ZmZlci5mcm9tKHZhbFswXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAxNiB8fCBCdWZmZXIuZnJvbSh2YWxbMV0sIFwiYmFzZTY0XCIpLmxlbmd0aCAhPT0gMzIpe1xyXG4gICAgICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgICAgIHNhdmUoKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAga2V5ID0gdmFsXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgZ2VuZXJhdGVLZXkoKVxyXG4gICAgICAgIHNhdmUoKVxyXG4gICAgfVxyXG59KVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkoKXtcclxuICAgIGtleSA9IFtjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLCBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXVxyXG59XHJcblxyXG5mdW5jdGlvbiBzYWZlSlNPTlBhcnNlKGpzb24pe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IG5ldyBFcnJvcihlKSA6IGVcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGEpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFwiYWVzLTI1Ni1jYmNcIiwgQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKSlcclxuICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwiYmFzZTY0XCIpKTtcclxuICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgfWNhdGNoKGUpe1xyXG4gICAgICAgIHJldHVybiBcInt9XCJcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICBsZXQgYXJncyA9IFtCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpXVxyXG4gICAgXHJcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIC4uLmFyZ3MpO1xyXG4gICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJ1dGY4XCIpKTtcclxuICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2VuY3J5cHRlZCwgY2lwaGVyLmZpbmFsKCldKTtcclxuICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoXCJiYXNlNjRcIilcclxufSIsImltcG9ydCB7YmRwbHVnaW5FcnJvcnMsIHBsdWdpbkNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5jbGFzcyBQbHVnaW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luTW9kdWxlID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlcjt9XHJcbn1cclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxvYWRQbHVnaW5EYXRhKCk7XHJcbiAgICBiZHBsdWdpbkVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRQbHVnaW5zKCkpKTtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHBsdWdpbiwgbmFtZTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcclxuICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5nZXROYW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuXCIsIGVycik7XHJcbiAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW25hbWVdKSBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHBsdWdpbkNvb2tpZVtuYW1lXSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XHJcblxyXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMuY2hhbm5lbFN3aXRjaC5iaW5kKHRoaXMpKTtcclxuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdGFydFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdGFydGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcclxuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIHBsdWdpbiArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdG9wUGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RvcCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0b3BwZWQuYCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcclxuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcclxuICAgIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XHJcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xyXG4gICAgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbikge1xyXG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcclxuICAgIGVsc2UgdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLnRvZ2dsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJwbHVnaW5cIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IChjb25zb2xlLmxvZyhwLmZpbGVuYW1lLCBmaWxlbmFtZSkpIHx8IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpLnBsdWdpbjtcclxuICAgIHRyeSB7IGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTt9XHJcbiAgICBjYXRjaCAoZXJyKSB7aWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycl19KTt9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLWxvYWRlZFwiLCBwbHVnaW4uZ2V0TmFtZSgpKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudW5sb2FkUGx1Z2luID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcclxuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XHJcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xyXG4gICAgZGVsZXRlIGJkcGx1Z2luc1twbHVnaW5dO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXVubG9hZGVkXCIsIHBsdWdpbik7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIHRoaXMudW5sb2FkUGx1Z2luKGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybiB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWVPck5hbWUpO1xyXG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcclxuICAgIGNvbnN0IGVuYWJsZWQgPSBwbHVnaW5Db29raWVbcGx1Z2luXTtcclxuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBpZiAoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQgJiYgdHlwZW9mKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKCk7XHJcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHRydWUpO1xyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXJlbG9hZGVkXCIsIHBsdWdpbik7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbG9hZFBsdWdpbihuYW1lKTtcclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmaWxlbmFtZU9yTmFtZSk7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmdWxsUGF0aCk7XHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVwZGF0ZVBsdWdpbkxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInBsdWdpblwiKTtcclxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkUGx1Z2luKG5hbWUpO1xyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInBsdWdpbnNcIik7XHJcbiAgICBpZiAoc2F2ZWQpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbkNvb2tpZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zYXZlUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIsIHBsdWdpbkNvb2tpZSk7XHJcbn07XHJcblxyXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLm5ld01lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uTWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vbk1lc3NhZ2UoKTsgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvbk1lc3NhZ2UgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5jaGFubmVsU3dpdGNoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xyXG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcclxuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vblN3aXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uU3dpdGNoIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmF3T2JzZXJ2ZXIgPSBmdW5jdGlvbihlKSB7XHJcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XHJcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9ic2VydmVyKGUpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9ic2VydmVyIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBQbHVnaW5Nb2R1bGUoKTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgTGF5ZXIgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjJfUHVibGljU2VydmVycyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHVibGljU2VydmVycywge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCJ9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInB1YnNsYXllcnJvb3RcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXJzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpWzBdLmxheWVycy5zcGxpdChcIiBcIilbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gRE9NLnF1ZXJ5KFwiLmxheWVycywgLlwiK2NsYXNzTmFtZUxheWVycyk7XHJcbiAgICAgICAgaWYgKCFsYXllcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsYXllcnMuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KFwiPGRpdiBpZD0ncHVic2xheWVycm9vdCc+XCIpKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllcnNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b24oKSB7XHJcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBidG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcclxuICAgICAgICBidG4uYXBwZW5kKGxhYmVsKTtcclxuICAgICAgICByZXR1cm4gYnRuO1xyXG4gICAgfVxyXG5cclxuICAgIF9hcHBlbmRCdXR0b24oKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kb3dubG9hZFByb2dyZXNzICYmIGUudHV0b3JpYWxDb250YWluZXIpWzBdLnR1dG9yaWFsQ29udGFpbmVyKVxyXG4gICAgICAgIF1cclxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgZGl2LiR7Y2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJ9ID4gZGl2YCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gd2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQnV0dG9uKCkge1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKS5yZW1vdmUoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XHJcbmltcG9ydCB0ZkhvdXIgZnJvbSBcIi4vMjRob3VyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcclxuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcclxuXHJcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBDc3NFZGl0b3IgZnJvbSBcIi4uL3VpL2Nzc0VkaXRvclwiO1xyXG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xyXG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi9DdXN0b21SaWNoUHJlc2VuY2VcIjtcclxuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XHJcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xyXG5pbXBvcnQgZGlzYWJsZVR5cGluZyBmcm9tIFwiLi9kaXNhYmxlVHlwaW5nXCI7XHJcbmltcG9ydCBBcGlQcmV2aWV3IGZyb20gXCIuLi91aS9BcGlQcmV2aWV3XCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4uL3VpL3N3aXRjaFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuLi91aS9tYXJnaW50b3BcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IEhpc3RvcnkgZnJvbSBcIi4uL3VpL2ljb25zL2hpc3RvcnlcIjtcclxuXHJcbmNsYXNzIEJEU2lkZWJhckhlYWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNpZGViYXJDb21wb25lbnRzID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuU2VwYXJhdG9yICYmIGUuSGVhZGVyICYmIGUuSXRlbSlcclxuXHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZmxvYXQ6IFwicmlnaHRcIiwgY3Vyc29yOiBcInBvaW50ZXJcIn0sIGNsYXNzTmFtZTogXCJiZC1jaGFuZ2Vsb2ctYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTt9fSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSGlzdG9yeSwge2NsYXNzTmFtZTogXCJiZC1pY29uXCIsIHNpemU6IFwiMTZweFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkID0gbmV3IHNpZGViYXJDb21wb25lbnRzLkhlYWRlcih7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRzKClcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckNvbXBvbmVudHMoKXtcclxuICAgICAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGlnaHRjb3JkXCIsIG1ha2VDb21wb25lbnQodGhpcy5saWdodGNvcmRDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwic3RhdHVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5QcmVzZW5jZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJhY2NvdW50aW5mb1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuQWNjb3VudEluZm9zQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImxjYXBpcHJldmlld1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuQXBpUHJldmlld0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuXHJcbiAgICAgICAgLyogQmFuZGFnZWQgQkQgKi9cclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJCRENoYW5nZWxvZ1RpdGxlXCIsIG1ha2VDb21wb25lbnQoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJEU2lkZWJhckhlYWRlcigpLnJlbmRlcigpXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiY29yZVwiLCBtYWtlQ29tcG9uZW50KHRoaXMuY29yZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjdXN0b21jc3NcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmN1c3RvbUNzc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJwbHVnaW5zXCIsIG1ha2VDb21wb25lbnQodGhpcy5yZW5kZXJBZGRvblBhbmUoXCJwbHVnaW5zXCIpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJ0aGVtZXNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLnJlbmRlckFkZG9uUGFuZShcInRoZW1lc1wiKSkpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtc2V0dGluZ3NwYW5lLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcixcclxuICAgICAgICAgICAgY2xhc3NTaWRlYmFyXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLnNwbGl0KFwiIFwiKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc3RhbmRhcmRTaWRlYmFyVmlldylbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIitjbGFzc05hbWVMYXllcitcIiAuXCIrY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdK1wiLCAuXCIrY2xhc3NOYW1lTGF5ZXIrXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcclxuICAgICAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xyXG4gICAgICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xyXG5cclxuICAgICAgICBVdGlscy5vblJlbW92ZWQocm9vdCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJjb3JlXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgUHJlc2VuY2VTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBNc2dMb2dTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcIm1zZ2xvZ1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge31cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoaWQsIGNoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNldHRpbmdzKGlkLCBlbmFibGVkKSB7XHJcbiAgICAgICAgc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHB1YmxpY1NlcnZlcnNNb2R1bGUuYWRkQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIGVsc2UgcHVibGljU2VydmVyc01vZHVsZS5yZW1vdmVCdXR0b24oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIHZvaWNlTW9kZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtN1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgICAgICBlbHNlIGNvbG9yZWRUZXh0LnJlbW92ZUNvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay13cC0xXCIpIHtcclxuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtcclxuICAgICAgICAgICAgZWxzZSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIFwiIzJmMzEzNlwiKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyppZiAoaWQgPT09IFwicmVhY3REZXZUb29sc1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgcmVhY3REZXZUb29scy5zdG9wKCk7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nc1N0b3JlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiB0eXBlb2YgZS5kZWZhdWx0ID09PSBcIm9iamVjdFwiICYmIFwic2hvd0N1cnJlbnRHYW1lXCIgaW4gZS5kZWZhdWx0KVswXVxyXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3MpWzBdLmRlZmF1bHQudXBkYXRlUmVtb3RlU2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q3VycmVudEdhbWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcCh0cnVlKVxyXG4gICAgICAgICAgICBlbHNlIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AoZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTZcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC03XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHlwaW5nLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0aWFsaXplU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgLy9pZiAoc2V0dGluZ3NDb29raWUucmVhY3REZXZUb29scykgcmVhY3REZXZUb29scy5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0yXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0zXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIHB1YmxpY1NlcnZlcnNNb2R1bGUuYWRkQnV0dG9uKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTRcIl0pIHZvaWNlTW9kZS5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy01XCJdKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgdGZIb3VyLmluamVjdDI0SG91cigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNFwiXSkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTFcIl0pIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMlwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0zXCJdKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTZcIl0pIGJsdXJQcml2YXRlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTdcIl0pIGRpc2FibGVUeXBpbmcuZW5hYmxlKClcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XHJcbiAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtOFwiXSkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTZXR0aW5ncygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRTZXR0aW5ncygpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclNpZGViYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhci5yZW5kZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3JlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCwge2tleTogXCJjc3BhbmVsXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBzZWN0aW9uczogdGhpcy5jb3JlU2V0dGluZ3N9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpZ2h0Y29yZENvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzLm1hcCgoc2VjdGlvbiwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAoaSA9PT0gMCA/IG51bGwgOiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wKSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCBzZWN0aW9uLnRpdGxlKSxcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtpZDogc2V0dGluZy5pZCwga2V5OiBzZXR0aW5nLmlkLCBkYXRhOiBzZXR0aW5nLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXSwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShpZCwgY2hlY2tlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXHJcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxyXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlNob3VsZCByZWxhdW5jaFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiByZW1vdGUucHJvY2Vzcy5hcmd2LnNsaWNlKDEpLmNvbmNhdChbXCItLWRpc2FibGUtYmV0dGVyZGlzY29yZFwiXSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucXVpdCgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZVxyXG4gICAgICAgICAgICB9LCBcIlJlbGF1bmNoIHdpdGhvdXQgQmV0dGVyRGlzY29yZFwiKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBQcmVzZW5jZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XHJcbiAgICAgICAgICAgIGtleTogXCJscHBhbm5lbFwiLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiB0aGlzLlByZXNlbmNlU2V0dGluZ3NcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFjY291bnRJbmZvc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19BY2NvdW50SW5mb3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFwaVByZXZpZXdDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBcGlQcmV2aWV3LCB7XHJcbiAgICAgICAgICAgIGtleTogXCJsYXBpcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGN1c3RvbUNzc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge2tleTogXCJjc3NlZGl0b3JcIn0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcclxuICAgICAgICAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXHJcbiAgICAgICAgLy8gUmVhY3QgcmVmdXNlcyB0byBjaGFuZ2UgdGhlIGJ1dHRvbiB3aGVuIGdvaW5nXHJcbiAgICAgICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcclxuICAgICAgICAvLyB0byBkZWJ1ZyBsYXRlci5cclxuICAgICAgICBjbGFzcyBDb250ZW50TGlzdCBleHRlbmRzIEJEVjIucmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdGhpcy5wcm9wcy50eXBlLnJlcGxhY2UoXCJzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlcigpIHtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ29udGVudExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGVudExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QsIHt0eXBlfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7dHlwZX0pKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsIG9uIHdpbmRvd1xyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIG1ha2VDb21wb25lbnQoY2hpbGRyZW4pe1xyXG4gICAgY2xhc3MgU2V0dGluZ0NvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbigpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNldHRpbmdDb21wb25lbnRcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMgPSB7fVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKHBhbmVsLCBjb21wb25lbnQpe1xyXG4gICAgICAgIHRoaXMucGFuZWxzW3BhbmVsXSA9IGNvbXBvbmVudFxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudChwYW5lbCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZWxzW3BhbmVsXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgICAgdGV4dDogXCJCZXR0ZXJEaXNjb3JkIFNldHRpbmdzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjb3JlXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiUGx1Z2luc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwicGx1Z2luc1wiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlRoZW1lc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwidGhlbWVzXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQ3VzdG9tIENTU1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwiY3VzdG9tY3NzXCJcclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTENpdGVtcygpe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJMaWdodGNvcmQgU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiUmljaFByZXNlbmNlXCIsIFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwic3RhdHVzXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9cIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImFjY291bnRpbmZvXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgICBpZih3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUpaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQXBpIENvbXBvbmVudHMgUHJldmlld1wiLFxyXG4gICAgICAgICAgICBpZDogXCJsY2FwaXByZXZpZXdcIlxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLkxDaXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiQ1VTVE9NXCIsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChcIkJEQ2hhbmdlbG9nVGl0bGVcIilcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4udGhpcy5pdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vIG5lZWQgdG8gZXhwb3J0IHNldHRpbmdzUGFuZWxTaWRlYmFyIG9uIHdpbmRvd1xyXG4gKi8iLCJpbXBvcnQge2JkdGhlbWVFcnJvcnMsIHRoZW1lQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jbGFzcyBUaGVtZU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5UaGVtZU1vZHVsZSA9IHRoaXNcclxuICAgIH1cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcjt9XHJcbn1cclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5sb2FkVGhlbWVEYXRhKCk7XHJcbiAgICBiZHRoZW1lRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFRoZW1lcygpKSk7XHJcbiAgICBjb25zdCB0aGVtZXMgPSBPYmplY3Qua2V5cyhiZHRoZW1lcyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lc1tpXV07XHJcbiAgICAgICAgaWYgKCF0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgdGhlbWVDb29raWVbdGhlbWUubmFtZV0gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhlbWVDb29raWVbdGhlbWUubmFtZV0pIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB0aGVtZSBpbiB0aGVtZUNvb2tpZSkge1xyXG4gICAgICAgIGlmICghYmR0aGVtZXNbdGhlbWVdKSBkZWxldGUgdGhlbWVDb29raWVbdGhlbWVdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZVRoZW1lID0gZnVuY3Rpb24obmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRoZW1lQ29va2llW25hbWVdID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gYXBwbGllZC5gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmVuYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVRoZW1lID0gZnVuY3Rpb24obmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRoZW1lQ29va2llW25hbWVdID0gZmFsc2U7XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XHJcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGRpc2FibGVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZVRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lKTtcclxuICAgIGVsc2UgdGhpcy5lbmFibGVUaGVtZSh0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b2dnbGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuIEl0IG1heSBub3QgaGF2ZSBiZWVuIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpO1xyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWxvYWRlZFwiLCB0aGVtZS5uYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51bmxvYWRUaGVtZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSk7XHJcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgZGVsZXRlIGJkdGhlbWVzW3RoZW1lXTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS11bmxvYWRlZFwiLCB0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIHRoaXMudW5sb2FkVGhlbWUoYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lT3JOYW1lKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKSwgdGhpcy5lbmFibGVUaGVtZSh0aGVtZSwgdHJ1ZSk7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gdiR7YmR0aGVtZXNbdGhlbWVdLnZlcnNpb259IHdhcyByZWxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1yZWxvYWRlZFwiLCB0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudXBkYXRlVGhlbWVMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVEYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIik7XHJcbiAgICBpZiAoc2F2ZWQpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoZW1lQ29va2llLCBzYXZlZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuc2F2ZVRoZW1lRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIiwgdGhlbWVDb29raWUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFRoZW1lTW9kdWxlKCk7IiwiaW1wb3J0IHtiYmRWZXJzaW9uLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlscyB7XHJcbiAgICAvKiogRG9jdW1lbnQvd2luZG93IHdpZHRoICovXHJcbiAgICBzdGF0aWMgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfVxyXG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyBoZWlnaHQgKi9cclxuICAgIHN0YXRpYyBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XHJcblxyXG4gICAgc3RhdGljIGdldCBXaW5kb3dDb25maWdGaWxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBzZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0VGV4dEFyZWEoKSB7XHJcbiAgICAgICAgcmV0dXJuIERPTS5xdWVyeShcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGFubmVsVGV4dEFyZWEgJiYgZS50aXRsZVdyYXBwZXIpWzBdLmNoYW5uZWxUZXh0QXJlYS5zcGxpdChcIiBcIilbMF0rXCIgdGV4dGFyZWFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGluc2VydFRleHQodGV4dGFyZWEsIHRleHQpIHtcclxuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xyXG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvblN0YXJ0ID0gMDtcclxuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25FbmQgPSB0ZXh0YXJlYS52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcclxuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbG9nKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogIzNhNzFjMTsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogIzNhNzFjMTtcIiwgXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHdhcm4obW9kdWxlTmFtZSwgbWVzc2FnZSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogI0U4QTQwMDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogI0U4QTQwMDtcIiwgXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGVycihtb2R1bGVOYW1lLCBtZXNzYWdlLCBlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6IHJlZDtcIiwgXCJcIik7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCIlY0Vycm9yOiBcIiArIGVycm9yLm1lc3NhZ2UsIFwiY29sb3I6IHJlZDtcIik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBlc2NhcGUocykge1xyXG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB0ZXN0SlNPTihkYXRhKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNFbXB0eShvYmopIHtcclxuICAgICAgICBpZiAob2JqID09IG51bGwgfHwgb2JqID09IHVuZGVmaW5lZCB8fCBvYmogPT0gXCJcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZihvYmopICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkgcmV0dXJuIG9iai5sZW5ndGggPT0gMDtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gbWV0aG9kKC4uLnBhcmFtcyk7XHR9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7IHRoaXMuZXJyKFwiU3VwcHJlc3NlZEVycm9yXCIsIFwiRXJyb3Igb2NjdXJyZWQgaW4gXCIgKyBtZXNzYWdlLCBlKTsgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB7YmVmb3JlLCBhZnRlciwgaW5zdGVhZCwgb25jZSA9IGZhbHNlLCBzaWxlbnQgPSBmYWxzZSwgZm9yY2UgPSBmYWxzZX0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZSB8fCB3aGF0LmRpc3BsYXlOYW1lIHx8IHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0pIHtcclxuICAgICAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcclxuICAgICAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwidW5wYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIC8vd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XHJcbiAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZSAvLyB0aGlzIGFsbG93IHRvIG1vbmtleXBhdGNoIG1vcmUgdGhhbiBvbmUgdGltZS5cclxuICAgICAgICB9O1xyXG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYoY2FuY2VsZWQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdNZXRob2QuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIHRoaXNPYmplY3Q6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZDogb3JpZ01ldGhvZCxcclxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGluc3RlYWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBSZXQgIT09IHVuZGVmaW5lZCkgZGF0YS5yZXR1cm5WYWx1ZSA9IHRlbXBSZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhiZWZvcmUsIFwiYGJlZm9yZWAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgICAgIGRhdGEuY2FsbE9yaWdpbmFsTWV0aG9kKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob25jZSkgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih3aGF0W21ldGhvZE5hbWVdLCBvcmlnTWV0aG9kKTtcclxuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xyXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdNZXRob2Q7XHJcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0udG9TdHJpbmcgPSBmdW5jdGlvbigpIHtyZXR1cm4gb3JpZ01ldGhvZC50b1N0cmluZygpO307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11dGF0aW9ucy5sZW5ndGg7IG0rKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldE5lc3RlZFByb3Aob2JqLCBwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9ialtwcm9wXTtcclxuICAgICAgICB9LCBvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnR5cGUgQ2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgdG9hc3Qgc3R5bGlzdGljYWxseSBhbmQgc2VtYW50aWNhbGx5LiBDaG9pY2VzOiBcIlwiLCBcImluZm9cIiwgXCJzdWNjZXNzXCIsIFwiZGFuZ2VyXCIvXCJlcnJvclwiLCBcIndhcm5pbmdcIi9cIndhcm5cIi4gRGVmYXVsdDogXCJcIlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmljb24gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBpY29uIHNob3VsZCBzaG93IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUuIEEgdG9hc3Qgd2l0aG91dCB0eXBlIHdpbGwgYWx3YXlzIGhhdmUgbm8gaWNvbi4gRGVmYXVsdDogdHJ1ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLnNpZGViYXIgJiYgZS5oYXNOb3RpY2UpWzBdLnNpZGViYXIuc3BsaXQoXCIgXCIpWzldK1wiICsgZGl2XCIpIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlcmxpc3QgPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZW1iZXJzV3JhcClbMF0ubWVtYmVyc1dyYXApIDogbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjb250YWluZXIgPyBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IDMxMDtcclxuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBtZW1iZXJsaXN0ID8gbWVtYmVybGlzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IDogMDtcclxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCA/IHJpZ2h0IC0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiBVdGlscy5zY3JlZW5XaWR0aCAtIGxlZnQgLSAyNDA7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGZvcm0gPyBmb3JtLm9mZnNldEhlaWdodCA6IDgwO1xyXG4gICAgICAgICAgICBjb25zdCB0b2FzdFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0c1wiKTtcclxuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCBsZWZ0ICsgXCJweFwiKTtcclxuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwid2lkdGhcIiwgd2lkdGggKyBcInB4XCIpO1xyXG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJib3R0b21cIiwgYm90dG9tICsgXCJweFwiKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikuYXBwZW5kQ2hpbGQodG9hc3RXcmFwcGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qge3R5cGUgPSBcIlwiLCBpY29uID0gdHJ1ZSwgdGltZW91dCA9IDMwMDB9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCB0b2FzdEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RcIik7XHJcbiAgICAgICAgaWYgKHR5cGUpIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwidG9hc3QtXCIgKyB0eXBlKTtcclxuICAgICAgICBpZiAodHlwZSAmJiBpY29uKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImljb25cIik7XHJcbiAgICAgICAgdG9hc3RFbGVtLmlubmVyVGV4dCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikuYXBwZW5kQ2hpbGQodG9hc3RFbGVtKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5iZC10b2FzdHMgLmJkLXRvYXN0XCIpLmxlbmd0aCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICAgICAgbGV0IG1vZGFsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubW9kYWwgJiYgZS5pbm5lciAmJiAhZS5oaWRlT25GdWxsc2NyZWVuKVswXVxyXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxyXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJiZC1tb2RhbC13cmFwcGVyIHRoZW1lLWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZW50fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXHJcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmJkLWJhY2tkcm9wXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXHJcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XHJcbiAgICAgICAgY29uc3QgY2xvc2luZ0xpc3RlbmVycyA9IFtdXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcclxuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IChsaXN0ZW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzID0gW10sIHRoZW1lczogdGhlbWVFcnJvcnMgPSBbXX0pIHtcclxuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycyB8fCAhdGhlbWVFcnJvcnMpIHJldHVybjtcclxuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycy5sZW5ndGggJiYgIXRoZW1lRXJyb3JzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cclxuICAgICAgICBsZXQgaGVhZGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuaGlkZU9uRnVsbHNjcmVlbilbMF1cclxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cclxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1iYWNrZHJvcCAke0JETW9kdWxlcy5nZXQoZSA9PiBlLmJhY2tkcm9wICYmIGUuYmFja2Ryb3BXaXRoTGF5ZXIpWzBdLmJhY2tkcm9wfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgYmQtY29udGVudC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+PGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGVudCBFcnJvcnM8L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyIFRPUFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5QbHVnaW5zPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlRoZW1lczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+TmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPk1lc3NhZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+RXJyb3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcclxuICAgIFxyXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImVycm9yc1wiPmApO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1uYW1lXCI+JHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj4ke2Vyci5tZXNzYWdlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvci5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBjb25zdCB0YWJzID0gW2dlbmVyYXRlVGFiKHBsdWdpbkVycm9ycyksIGdlbmVyYXRlVGFiKHRoZW1lRXJyb3JzKV07XHJcbiAgICBcclxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW0uc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBET00uYWRkQ2xhc3MoZS50YXJnZXQsIFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi5zY3JvbGxlclwiKTtcclxuICAgICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKHRhYnNbRE9NLmluZGV4KGUudGFyZ2V0KV0pO1xyXG4gICAgICAgIH0pKTtcclxuICAgIFxyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XHJcbiAgICAgICAgaWYgKHBsdWdpbkVycm9ycy5sZW5ndGgpIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWJhci1pdGVtXCIpLmNsaWNrKCk7XHJcbiAgICAgICAgZWxzZSBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKVsxXS5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XHJcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZml4ZWRcIiwgXCJpbXByb3ZlZFwiKTtcclxuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcclxuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIkNoaWxkXCIpO1xyXG4gICAgICAgIGNvbnN0IFRpdGxlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiVGFnc1wiLCBcImRlZmF1bHRcIik7XHJcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLnNlbGVjdGFibGUgPT0gZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJkZWZhdWx0UnVsZXNcIiwgXCJwYXJzZVwiKTtcclxuICAgICAgICBpZiAoIUNoYW5nZWxvZyB8fCAhTW9kYWxTdGFjayB8fCAhQ2hhbmdlbG9nQ2xhc3NlcyB8fCAhVGV4dEVsZW1lbnQgfHwgIUZsZXhDaGlsZCB8fCAhVGl0bGVzIHx8ICFNYXJrZG93blBhcnNlcikgcmV0dXJuO1xyXG4gICAgXHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICBpbWFnZSA9IFwiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTA1NDczNTM3Lzk1N2I1NDgwLTdjMjYtMTFlOS04NDAxLTUwZmE4MjBjYmFlNVwiLCBcclxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiLCBcclxuICAgICAgICAgICAgY2hhbmdlcyA9IFtdLCBcclxuICAgICAgICAgICAgdGl0bGUgPSBcIkJhbmRhZ2VkQkRcIiwgXHJcbiAgICAgICAgICAgIHN1YnRpdGxlID0gYHYke2JiZFZlcnNpb259YCwgXHJcbiAgICAgICAgICAgIGZvb3RlclxyXG4gICAgICAgIH0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGNlID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtzcmM6IGltYWdlfSldO1xyXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbikgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcInBcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoZGVzY3JpcHRpb24pKSk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjaGFuZ2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlc1tjXTtcclxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gPyBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdIDogQ2hhbmdlbG9nQ2xhc3Nlcy5hZGRlZDtcclxuICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gYyA9PSAwID8gQ2hhbmdlbG9nQ2xhc3Nlcy5tYXJnaW5Ub3AgOiBcIlwiO1xyXG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwiaDFcIiwge2NsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YCx9LCBlbnRyeS50aXRsZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gY2UoXCJ1bFwiLCBudWxsLCBlbnRyeS5pdGVtcy5tYXAoaSA9PiBjZShcImxpXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGkpKSkpO1xyXG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZW5kZXJIZWFkZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sXHJcbiAgICAgICAgICAgICAgICBjZShUaXRsZXMuZGVmYXVsdCwge3RhZzogVGl0bGVzLlRhZ3MuSDR9LCB0aXRsZSksXHJcbiAgICAgICAgICAgICAgICBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkQsIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5kYXRlfSwgc3VidGl0bGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvckNsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIikgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07XHJcbiAgICAgICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgY2xpY2suc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5qb2luQkQyKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gY2UoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IGNlKFwiYVwiLCB7Y2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCwgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSwgZm9vdGVyID8gZm9vdGVyIDogZGVmYXVsdEZvb3Rlcik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChmdW5jdGlvbihwcm9wcykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2UoQ2hhbmdlbG9nLCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgb25TY3JvbGw6IF8gPT4gXyxcclxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcclxuICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogcmVuZGVySGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcclxuICAgICAgICAgICAgfSwgcHJvcHMpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcclxuICAgICAgICBjb25zdCBNYXJrZG93biA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWFya2Rvd25cIik7XHJcbiAgICAgICAgY29uc3QgQ29uZmlybWF0aW9uTW9kYWwgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5rZXkgJiYgbS5rZXkoKSA9PSBcImNvbmZpcm0tbW9kYWxcIik7XHJcbiAgICAgICAgaWYgKCFNb2RhbFN0YWNrIHx8ICFDb25maXJtYXRpb25Nb2RhbCB8fCAhTWFya2Rvd24pIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcclxuICAgICAgICBjb25zdCB7b25Db25maXJtID0gZW1wdHlGdW5jdGlvbiwgb25DYW5jZWwgPSBlbXB0eUZ1bmN0aW9uLCBjb25maXJtVGV4dCA9IFwiT2theVwiLCBjYW5jZWxUZXh0ID0gXCJDYW5jZWxcIiwgZGFuZ2VyID0gZmFsc2UsIGtleSA9IHVuZGVmaW5lZH0gPSBvcHRpb25zO1xyXG5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRlbnQgPSBbY29udGVudF07XHJcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQubWFwKGMgPT4gdHlwZW9mKGMpID09PSBcInN0cmluZ1wiID8gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KE1hcmtkb3duLCBudWxsLCBjKSA6IGMpO1xyXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goQ29uZmlybWF0aW9uTW9kYWwsIHtcclxuICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IGNvbnRlbnQsXHJcbiAgICAgICAgICAgIHJlZDogZGFuZ2VyLFxyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXHJcbiAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtLFxyXG4gICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcclxuICAgICAgICB9LCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZW1vdmVEYShjbGFzc05hbWUpe1xyXG4gICAgICAgIGlmKCFjbGFzc05hbWUpcmV0dXJuIGNsYXNzTmFtZVxyXG4gICAgICAgIHJldHVybiBjbGFzc05hbWUuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICFlLnN0YXJ0c1dpdGgoXCJkYS1cIikpLmpvaW4oXCIgXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcblV0aWxzLnNob3dUb2FzdCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKFV0aWxzLnNob3dUb2FzdCwgXCJDb3VsZCBub3Qgc2hvdyB0b2FzdC5cIik7XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVXRpbHMgPSBVdGlscyIsImltcG9ydCB7c2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5XZWJwYWNrTW9kdWxlcyA9ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzaG91bGRQcm90ZWN0ID0gdGhlTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUuZ2V0VG9rZW4gfHwgdGhlTW9kdWxlLmdldEVtYWlsIHx8IHRoZU1vZHVsZS5zaG93VG9rZW4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvdGVjdCA9IHRoZU1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLnJlbW92ZSAmJiB0aGVNb2R1bGUuc2V0ICYmIHRoZU1vZHVsZS5jbGVhciAmJiB0aGVNb2R1bGUuZ2V0ICYmICF0aGVNb2R1bGUuc29ydCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoZU1vZHVsZS5nZXRUb2tlbiAmJiAhdGhlTW9kdWxlLmdldEVtYWlsICYmICF0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdGhlTW9kdWxlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkodGhlTW9kdWxlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0VG9rZW5cIikgcmV0dXJuICgpID0+IFwibWZhLlhDbmJLem8wQ0xJcWRKekJuTDBEOFBmRHJ1cWtKTkhqd0hYdHIzOVVVM0Y4aEh4NDNqb2pJU3lpNWpkak81MmU5X2U5TWptYWZaRkZwYy1zZU9NYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldEVtYWlsXCIpIHJldHVybiAoKSA9PiBcInB1cHBldDExMTEyQGdtYWlsLmNvbVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcInNob3dUb2tlblwiKSByZXR1cm4gKCkgPT4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGZ1bmMgPT0gXCJfX3Byb3RvX19cIikgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2Z1bmNdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIHByb3RlY3QobS5kZWZhdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIHByb3RlY3QobSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobS5kZWZhdWx0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZXM7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzID0gKHByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9IChwcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7ZmluZCwgZmluZEFsbCwgZmluZEJ5VW5pcXVlUHJvcGVydGllcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB7XHJcbiAgICAgICAgICAgIHJlYWN0OiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiQ29tcG9uZW50XCIsIFwiUHVyZUNvbXBvbmVudFwiLCBcIkNoaWxkcmVuXCIsIFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiXSksXHJcbiAgICAgICAgICAgIHJlYWN0RG9tOiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZmluZERPTU5vZGVcIl0pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmdldEludGVybmFsSW5zdGFuY2UgPSBlID0+IGVbT2JqZWN0LmtleXMoZSkuZmluZChrID0+IGsuc3RhcnRzV2l0aChcIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlXCIpKV07XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlYyID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGpvaW5CRDEoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIwVG1mbzVaYk9SQ1JxYkFkXCIpO31cclxuICAgIGxlYXZlQkQxKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI4NjAwNDc0NDk2NjkxNDA0OFwiKTt9XHJcblxyXG4gICAgam9pbkJEMigpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7fVxyXG4gICAgbGVhdmVCRDIoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjI4MDgwNjQ3MjkyODE5ODY1NlwiKTt9XHJcblxyXG4gICAgam9pbkxDKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiN2VGZmYyQVwiKTt9XHJcbiAgICBsZWF2ZUxDKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCI3MDU5MDgzNTAyMTg2NjYxMTdcIik7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3QuQ29tcG9uZW50O31cclxuXHJcbiAgICBnZXQgYW5jaG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFuY2hvclVuZGVybGluZU9uSG92ZXJcIl0pIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O31cclxuICAgIGdldCBzbGF0ZUVkaXRvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzbGF0ZVRleHRBcmVhXCJdKTt9XHJcbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiXSk7fVxyXG4gICAgZ2V0IGd1aWxkQ2xhc3NlcygpIHtcclxuXHRcdGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS53cmFwcGVyICYmIGUudW5yZWFkTWVudGlvbnNCYXIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmd1aWxkc0Vycm9yICYmIGUuc2VsZWN0ZWQpWzBdXHJcbiAgICAgICAgY29uc3QgcGlsbCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmJsb2JDb250YWluZXIpWzBdXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcblx0fVxyXG5cclxuICAgIGdldCBNZXNzYWdlQ29udGVudENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7fVxyXG4gICAgZ2V0IE1lc3NhZ2VDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTt9XHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImRhdGVGb3JtYXRcIl0pO31cclxuICAgIGdldCBUb29sdGlwV3JhcHBlcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7fVxyXG4gICAgZ2V0IE5hdGl2ZU1vZHVsZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNldEJhZGdlXCJdKTt9XHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7fVxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImxlYXZlR3VpbGRcIl0pO31cclxuICAgIGdldCBUb29sdGlwcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5oaWRlICYmIG0uc2hvdyAmJiAhbS5zZWFyY2ggJiYgIW0uc3VibWl0ICYmICFtLnNlYXJjaCAmJiAhbS5hY3RpdmF0ZVJhZ2luZ0RlbW9uICYmICFtLmRpc21pc3MpO31cclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0udG9TdHJpbmcgJiYgL1wiYmluYXJ5XCIvLnRlc3QobS50b1N0cmluZygpKSk7fVxyXG4gICAgZ2V0IExheWVyU3RhY2soKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJwb3BMYXllclwiXSk7fVxyXG4gICAgZ2V0IFVzZXJTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEN1cnJlbnRVc2VyXCJdKTt9XHJcbiAgICBnZXQgQ2hhbm5lbFN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wib3BlblByaXZhdGVDaGFubmVsXCJdKTt9XHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2VsZWN0UHJpdmF0ZUNoYW5uZWxcIl0pO31cclxuXHJcbiAgICBvcGVuRE0odXNlcklkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZklkID0gdGhpcy5Vc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKS5pZDtcclxuICAgICAgICBpZiAoc2VsZklkID09IHVzZXJJZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHByaXZhdGVDaGFubmVsSWQgPSB0aGlzLkNoYW5uZWxTdG9yZS5nZXRETUZyb21Vc2VySWQodXNlcklkKTtcclxuICAgICAgICBpZiAocHJpdmF0ZUNoYW5uZWxJZCkgcmV0dXJuIHRoaXMuUHJpdmF0ZUNoYW5uZWxBY3Rpb25zLnNlbGVjdFByaXZhdGVDaGFubmVsKHByaXZhdGVDaGFubmVsSWQpO1xyXG4gICAgICAgIHRoaXMuQ2hhbm5lbEFjdGlvbnMub3BlblByaXZhdGVDaGFubmVsKHNlbGZJZCwgdXNlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZVNldHRpbmdzKGNhdCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmcuY2F0ID09PSBjYXQgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBzdHlsZSA9IGBcclxuICAgIC5jb250YWluZXItMlJsMDF1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuY2hhdC0zYlJ4eHUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5zaWRlYmFyLTJLOHBGaCB7XHJcbiAgICAgICAgZmxleC1ncm93OiAxIWltcG9ydGFudDtcclxuICAgIH1cclxuYDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWb2ljZU1vZGUge1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiVm9pY2VNb2RlXCIsIHN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcIlZvaWNlTW9kZVwiKTtcclxuICAgIH1cclxufTsiLCJjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG5kZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG5kZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5jb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gbS5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gobS5kZWZhdWx0KTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kdWxlcztcclxufTtcclxuXHJcbmNvbnN0IGZpbmRCeVByb3BzID0gKC4uLnByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9ICguLi5wcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeURpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUuZGlzcGxheU5hbWUgPT09IGRpc3BsYXlOYW1lKTtcclxuXHJcbmxldCBtb2QgPSAge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVByb3BzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XHJcbmV4cG9ydCBkZWZhdWx0IG1vZFxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLldlYnBhY2tNb2R1bGVzID0gbW9kIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5cclxubGV0IHByb2ZpbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lm9wZW4gJiYgZS5kZWZhdWx0LmZldGNoTXV0dWFsRnJpZW5kcylbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZFVzZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgZGVsZXRlIHByb3BzLmhyZWYudGFyZ2V0XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKHByb3BzKVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8cHJvcHMuQW5jaG9yIGhyZWY9e1wiL3VzZXJzL1wiK3Byb3BzLnVzZXIuaWR9IHsuLi5wcm9wcy5ocmVmfSBvbkNsaWNrPXsoZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgIGlmKCFwcm9maWxNb2R1bGUpcHJvZmlsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQub3BlbiAmJiBlLmRlZmF1bHQuZmV0Y2hNdXR1YWxGcmllbmRzKVswXVxyXG4gICAgICAgICAgICAgICAgcHJvZmlsTW9kdWxlLmRlZmF1bHQub3Blbihwcm9wcy51c2VyLmlkKVxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi44IDFzMTIgOC4yIDcuNCAxOS43UzE2LjYgMjkgMjAgMjUuNnMtNC01LjYtOC43LTEwTDIyLjggMVwiIGZpbGw9XCJyZ2JhKDIyNyw2LDE5LC42KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvcHJvcHMuQW5jaG9yPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWdIdW50ZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY3VzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIHJldHVybiAoPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiICB7Li4udGhpcy5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNERDJFNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMzMgMzNhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0ybDEtMTJoMjhsMSAxMnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNFQTU5NkVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgMzVjLS43OTItMS44NzUtMS43NS0zLjI5MS0zLjQxNy00LjY2NiAxLjc1LTEuNDU5IDQuNTQyLTUuNSA1LjI1LTguMjkyczIuNzUgOC4xMjUgMi4wNDIgMTAuNjI1UzEzIDM1IDEzIDM1em0xMC4zMDMgMGMuNzkxLTEuODc1IDEuNzUtMy4yOTEgMy40MTYtNC42NjYtMS43NS0xLjQ1OS00LjU0MS01LjUtNS4yNS04LjI5Mi0uNzA3LTIuNzkyLTIuNzUgOC4xMjUtMi4wNCAxMC42MjUuNzA4IDIuNSAzLjg3NCAyLjMzMyAzLjg3NCAyLjMzM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNCRTE5MzFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43MjggMjQuMjYzQTIuNSAyLjUgMCAwMDggMjIuNWMwLS41NjUtLjE5NS0xLjA4MS0uNTExLTEuNUg0bC0uMjcyIDMuMjYzem0yOC41NDQgMEwzMiAyMWgtMy40ODlBMi40ODIgMi40ODIgMCAwMDI4IDIyLjVhMi41IDIuNSAwIDAwNC4yNzIgMS43NjN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTRcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjIyXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjZcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMyAzNUgxM3MyLTYgMi0xM2g2YzAgNyAyIDEzIDIgMTN6TTE3IDJoMnY3aC0yelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM1NUFDRUVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguODM4LjIwNkMxNy42NjcuMDQyIDE3IC4zMTggMTcgMS40MTh2MWMwIDEuMS44NjUgMS43NTMgMS45MjMgMS40NTFsNS4xNTQtLjkwMWMxLjcxNS0uMzQzIDEuNTQ4LTEuNTkzLjA4NS0xLjg4NEwxOC44MzguMjA2elwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0NDRDZERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOCA2bC0uMDgxLjEyM0MxMC45MzggMTYuOTgxIDMgMTUuMDE1IDMgMTl2Mi41YTIuNSAyLjUgMCAwMDQuOTUuNUgxMmEyIDIgMCAwMDQgMGg0YTIgMiAwIDAwNCAwaDQuMDVhMi41IDIuNSAwIDAwNC45NS0uNVYxOWMwLTQtOC0yLTE1LTEzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGcgZmlsbD1cIiNGNUY4RkFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk0OCA2LjA3OGwtLjAzLjA0NUMxNy4xMzIgMTEuNjE5IDEwLjgxMSAxNi4xMjYgOCAxOHY0YTIgMiAwIDAwNCAwdi00Yy45ODItLjk4MiA1LjgxMy02Ljc4NyA1Ljk4NC0xMS43MzItLjAxLS4wNjQtLjAyNy0uMTI2LS4wMzYtLjE5em0uMDguMzk4QzE4LjMyNCAxMS4zNzQgMjMuMDMxIDE3LjAzMSAyNCAxOHY0YTIgMiAwIDAwNCAwdi00Yy0yLjc1LTEuODMzLTguOTUzLTYuMTktOS45NzItMTEuNTI0elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk4NCA2LjI3QzE3LjkyMiA4LjM0NiAxNy42MDYgMTYuMzk0IDE2IDE4djRhMiAyIDAgMDA0IDB2LTRjLTEuNTY0LTEuNTY0LTEuOTA1LTkuMjQxLTEuOTc5LTExLjU1OS0uMDExLS4wNTctLjAyNy0uMTEzLS4wMzctLjE3MXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRMb2dvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNjggMTY4LjY5XCIgey4uLnByb3BzfSBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9e3Byb3BzLnNpemV9PlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19hXCIgeDE9ezY2Ljd9IHkxPXstNDg3Ljd9IHgyPXs2Ni43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19iXCIgeDE9ezEwMS43fSB5MT17LTQ4Ny43fSB4Mj17MTAxLjd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjZmZmXCIgZD1cIk0xNC45IDM1LjNoMTM5LjJWMTMzSDE0Ljl6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMS43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2IpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwdjE2OGwxNjggLjY5VjB6bTExMS4zIDEyNC4xcy0zLjQtNC4xLTYuMy03LjdjMTIuNi0zLjUgMTcuNC0xMS4zIDE3LjQtMTEuM2E1Mi41MiA1Mi41MiAwIDAxLTExLjEgNS42IDY4LjYzIDY4LjYzIDAgMDEtMzguOSA0IDcwLjEyIDcwLjEyIDAgMDEtMTQuMS00LjEgNDguODggNDguODggMCAwMS03LjEtMy4zYy0uMy0uMi0uNi0uMy0uOS0uNWEuNzYuNzYgMCAwMC0uNC0uMmMtMS43LTEtMi42LTEuNi0yLjYtMS42czQuNiA3LjYgMTYuOCAxMS4yYy0yLjkgMy42LTYuNCA3LjktNi40IDcuOS0yMS4yLS42LTI5LjMtMTQuNS0yOS4zLTE0LjUgMC0zMC42IDEzLjgtNTUuNCAxMy44LTU1LjQgMTMuOC0xMC4zIDI2LjktMTAgMjYuOS0xMGwxIDEuMUM1Mi44IDUwLjMgNDUgNTcuOSA0NSA1Ny45YTU2LjIgNTYuMiAwIDAxNS43LTIuNyA3Mi4xOSA3Mi4xOSAwIDAxMjEuOC02IDguNzUgOC43NSAwIDAxMS42LS4yIDg5LjEgODkuMSAwIDAxMTkuNC0uMiA3OC40NSA3OC40NSAwIDAxMjguOSA5LjFzLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVzMTMuMS0uMyAyNi45IDEwYzAgMCAxMy44IDI0LjggMTMuOCA1NS40LjEtLjEtOCAxMy44LTI5LjIgMTQuNHpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2MpXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxyXG4gKi9cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbmxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbmxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG5sZXQgc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFJlbGF0aW9uc2hpcHMpWzBdLmRlZmF1bHRcclxuY29uc3Qgc2Vzc2lvbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFNlc3Npb25zKVswXS5kZWZhdWx0XHJcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0FjY291bnRJbmZvcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZTIpbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxuICAgICAgICBpZighY29sb3JNb2R1bGUpY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG4gICAgICAgIGlmKCFzaXplTW9kdWxlKXNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJBY2NvdW50IEluZm9zXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFByb2ZpbGVWYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBTdGF0aXN0aWNzXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U3RhdGlzdGljcygpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgU2Vzc2lvbnNcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTZXNzaW9uVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2Vzc2lvblZhbHVlKCl7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnNSYXcgPSBzZXNzaW9uTW9kdWxlLmdldFNlc3Npb25zKClcclxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcclxuXHJcbiAgICAgICAgaWYoc2Vzc2lvbnMubGVuZ3RoID09PSAwKXJldHVybiBcIi0gTm8gc2Vzc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHRyeSBpbiBhIGZldyBzZWNvbmRzXCJcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYCsgaWQ6ICR7ZS5zZXNzaW9uSWR9XHJcbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxyXG4rIGNsaWVudDogJHtlLmNsaWVudEluZm8uY2xpZW50fVxyXG4rIHN0YXR1czogJHtlLnN0YXR1c31cclxuKyBhY3RpdmU6ICR7ZS5hY3RpdmUgPyBcIlllc1wiIDogXCJOb1wifVxyXG4rIEFjdGl2aXRpZXM6ICR7ZS5hY3Rpdml0aWVzLmxlbmd0aH1gXHJcbiAgICAgICAgfSkuam9pbihcIlxcblwiK1wiLVwiLnJlcGVhdCgzOCkrXCJcXG5cIilcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9maWxlVmFsdWUoKXtcclxuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0RhdGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZEF0ID0gdXNlci5jcmVhdGVkQXRcclxuXHJcbiAgICAgICAgcmV0dXJuIGArIFVzZXJuYW1lOiAke3VzZXIudXNlcm5hbWV9XHJcbisgRGlzY3JpbWluYXRvcjogJHt1c2VyLmRpc2NyaW1pbmF0b3J9XHJcbisgVGFnOiAke3VzZXIudGFnfVxyXG4rIElEOiAke3VzZXIuaWR9XHJcbisgQXZhdGFyOiAke3VzZXIuYXZhdGFyfVxyXG4rIEF2YXRhciBVUkw6IGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2F2YXRhcnMvJHt1c2VyLmlkfS8ke3VzZXIuYXZhdGFyfS4ke3VzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSA/IFwiZ2lmXCIgOiBcInBuZ1wifT9zaXplPTQwOTZcclxuKyBDcmVhdGlvbiBEYXRlOiAkeyhjcmVhdGVkQXQuZ2V0RGF0ZSgpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRGdWxsWWVhcigpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0gJHtjcmVhdGVkQXQuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1oICR7Y3JlYXRlZEF0LmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1taW4gJHtjcmVhdGVkQXQuZ2V0U2Vjb25kcygpfXNcclxuKyBGbGFnczogJHt1c2VyLmZsYWdzfVxyXG4rIEhhcyBOaXRybzogJHt1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24gPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEVtYWlsOiAke3VzZXIuZW1haWx9XHJcbi0gMkZBOiAke3VzZXIubWZhRW5hYmxlZCA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gSGFzIEJlZW4gT24gTW9iaWxlOiAke3VzZXIubW9iaWxlID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBQaG9uZTogJHt1c2VyLnBob25lIHx8IFwiTm9uZVwifVxyXG4tIFZlcmlmaWVkOiAke3VzZXIudmVyaWZpZWR9YFxyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXRpc3RpY3MoKXtcclxuXHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gT2JqZWN0LnZhbHVlcyhHdWlsZE1vZHVsZS5nZXRHdWlsZHMoKSlcclxuICAgICAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3Qua2V5cyhyZWxhdGlvblNoaXBNb2R1bGUuZ2V0UmVsYXRpb25zaGlwcygpKVxyXG4gICAgICAgIGNvbnN0IGZyaWVuZHMgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzRnJpZW5kKGUpKVxyXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzQmxvY2tlZChlKSlcclxuXHJcbiAgICAgICAgcmV0dXJuIGArIFNlcnZlciBDb3VudDogJHtndWlsZHMubGVuZ3RofSBzZXJ2ZXJzXHJcbisgUmVsYXRpb25zOiAke3JlbGF0aW9ucy5sZW5ndGh9IHJlbGF0aW9uc1xyXG4rIEZyaWVuZHMgQ291bnQ6ICR7ZnJpZW5kcy5sZW5ndGh9IGZyaWVuZHNcclxuLSBCbG9ja2VkIFVzZXJzIENvdW50OiAke2Jsb2NrZWQubGVuZ3RofSBibG9ja2VkIHVzZXJzYFxyXG4gICAgfVxyXG59XHJcblxyXG5cclxubGV0IGhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXVxyXG5sZXQgbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cclxuXHJcbmNsYXNzIENvZGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMSltZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTIpbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cclxuICAgICAgICBpZighc2Nyb2xsYmFyTW9kdWxlMSlzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cclxuICAgICAgICBpZighaGlnaHRsaWdodEpTKWhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake21lc3NhZ2VNb2R1bGUxLm1hcmt1cH0gJHttZXNzYWdlTW9kdWxlMi5tZXNzYWdlQ29udGVudH1gfT5cclxuICAgICAgICAgICAgPHByZT5cclxuICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPXtgJHtzY3JvbGxiYXJNb2R1bGUxLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IGhsanNgfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogaGlnaHRsaWdodEpTLmhpZ2hsaWdodCh0aGlzLnByb3BzLmxhbmd1YWdlLCB0aGlzLnByb3BzLmNvbnRlbnQpLnZhbHVlfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9jb2RlPlxyXG4gICAgICAgICAgICA8L3ByZT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufSIsIi8vIEdvb2QgbHVjayB0byByZWFkIG15IGNvZGUsIEV2ZW4gbWUgY2FuJ3QgcmVhZCBpdCBwcm9wZXJseS5cclxuXHJcbmltcG9ydCB7IHN0YXQgfSBmcm9tIFwiZnNcIlxyXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi4vbW9kdWxlcy9kaXN0YW50XCJcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIlxyXG5cclxuY29uc3Qga2V5cyA9IHtcclxuICAgIHNldHRpbmdUaXRsZTogdXVpZHY0KClcclxufVxyXG5sZXQgZm9ybU1vZHVsZVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlQcmV2aWV3IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzdGF0ZXM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCFmb3JtTW9kdWxlKWZvcm1Nb2R1bGUgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5Gb3JtU2VjdGlvbilcclxuICAgICAgICAvKiogXHJcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9uW119XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgYWxsQ29tcG9uZW50cyA9IFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV0pLm1hcChrID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1ba10pXHJcbiAgICAgICAgfSkuZmxhdCgpKV1cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtU2VjdGlvbiB0YWc9XCJoMlwiIHRpdGxlPVwiTGlnaHRjb3JkJ3MgQXBpIEF2YWlsbGFibGUgY29tcG9uZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVRleHQgdHlwZT1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwiXCIgc2VsZWN0YWJsZT17ZmFsc2V9PlxyXG4gICAgICAgICAgICAgICAgICAgIFRoZXNlIGNvbXBvbmVudHMgYXJlIGhlcmUgZm9yIHRoZSBwbHVnaW4gZGV2cy4gVGhleSBjYW4gcXVpY2tseSBlbWJlZCBhbnkgY29tcG9uZW50IGJlbG93IHdpdGggdGhpcyBwYW5lbC5cclxuICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD5cclxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3A+PC9NYXJnaW5Ub3A+XHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gY29sb3I9XCJicmFuZFwiIGxvb2s9XCJvdXRsaW5lZFwiIHNpemU9XCJtZWRpdW1cIiBob3ZlckNvbG9yPVwiZ3JlZW5cIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQvbGlnaHRjb3JkL3dpa2kvQXBpc1wiKVxyXG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9PlxyXG4gICAgICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb25cclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtU2VjdGlvbj4sXHJcbiAgICAgICAgICAgIGFsbENvbXBvbmVudHMubWFwKGNvbXAgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgICAgIGlmKGNvbXAuQWxsUHJldmlld3MpQWxsUHJldmlld3MgPSBjb21wLkFsbFByZXZpZXdzXHJcbiAgICAgICAgICAgICAgICBsZXQgb25DaGFuZ2UgPSAodGFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHNldFN0YXRlID0gKG5ld1N0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlczogW09iamVjdC5hc3NpZ24oc3RhdGUsIG5ld1N0YXRlKV0uY29uY2F0KHRoaXMuc3RhdGUuc3RhdGVzLmZpbHRlcihlID0+IGUuZWxlbSAhPT0gY29tcCkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUuc3RhdGVzLmZpbmQoZSA9PiBlLmVsZW0gPT09IGNvbXApXHJcbiAgICAgICAgICAgICAgICBpZighc3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWI6IFwicHJldmlld1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtOiBjb21wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnN0YXRlcy5wdXNoKHN0YXRlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGdldFByb3BzID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbCA9IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgQWxsUHJldmlld3MuZm9yRWFjaChjYXRlZ29yeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsW09iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXV0gPSBjYXRlZ29yeVswXVtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZS5vcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsW2tleV0gPSBBbGxQcmV2aWV3cy5maW5kKGUgPT4gZS5maW5kKGUgPT4gZVtrZXldKSlbc3RhdGUub3B0aW9uc1trZXldXVtrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCByZW5kZXJQcmV2aWV3ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjIwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyQ29kZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNYXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzeFwiIGNvbnRlbnQ9e2dlbmVyYXRlQ29kZShcImpzeFwiKX0vPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzXCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwicmVhY3RcIil9Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0U3RyRm9yUHJvcCA9ICh2YWx1ZSwgY29tcFBhdGgsIGxhbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgJiYgdmFsdWUuJCR0eXBlb2YgJiYgKHZhbHVlLiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSB8fCB2YWx1ZS4kJHR5cGVvZiA9PT0gMHhlYWM3KSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb21wUGF0aCA9PT0gXCJMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcclxuICAgIG1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxufX0sXHJcbiAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXByaW1hcnkpXCIsXHJcbiAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIixcclxuICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcclxuICAgIH0sIGNsYXNzTmFtZTogXCJsYy10YWItYm94LXNoYWRvd1wiIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZSwgbnVsbCwgXCJQcmV2aWV3IHRhYnNcIilcclxuICAgIClcclxuKWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcImpzeFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgbWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxyXG4gICAgfX0+XHJcbiAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcclxuICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5QcmV2aWV3IHRhYnM8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdXIgY29tcG9uZW50cyBoZXJlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgICBcIilcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGdlbmVyYXRlQ29kZSA9IGZ1bmN0aW9uKGxhbmcpeyAvLyBjb2RlIGZvcm1hdHRpbmcgaXMgaGFyZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maW5kKGUgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtjb21wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7Y29tcENhdGVnb3J5fS4ke2NvbXBOYW1lfWBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT0gXCJjaGlsZHJlblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IGtleStcIj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xvc2VUYWcgPSBgPC8ke2NvbXBQYXRofT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0vPmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcInJlYWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZHJlbiAmJiBjaGlsZHJlbi4kJHR5cGVvZiAmJiAoY2hpbGRyZW4uJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IGNoaWxkcmVuLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aXNpYmxlS2V5ID0gL1teXFx3XFxkX10vZy50ZXN0KGtleSkgPyBKU09OLnN0cmluZ2lmeShrZXkpIDoga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gdmlzaWJsZUtleStcIjogXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09PSAwKXJldHVybiBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiICAgIFwiICsgc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wT2JqZWN0ID0gXCJ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcFN0cmluZ3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0xhc3QgPSBpID09PSBwcm9wU3RyaW5ncy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBpID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiLFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IHN0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzTGFzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJlYWN0LmNyZWF0ZUVsZW1lbnQoJHtjb21wUGF0aH0sICR7cHJvcE9iamVjdH0sICR7Y2hpbGRyZW5EYXRhfSlgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge0FsbFByZXZpZXdzLm1hcChjYXRlZ29yeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0udGV4dClyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5jaGlsZHJlbilyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtrZXl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIG9wdGlvbnM9e2NhdGVnb3J5Lm1hcCgoZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBKU09OLnN0cmluZ2lmeShlW09iamVjdC5rZXlzKGUpWzBdXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5vcHRpb25zLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XTogKHZhbHVlLnZhbHVlIHx8IFwiMFwiKS5yZXBsYWNlKFwib3B0LVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBzZWFyY2hhYmxlPXt0cnVlfS8+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17c3RhdGUudGFifSBjaGlsZHJlbj17c3RhdGUudGFiID09PSBcInByZXZpZXdcIiA/IHJlbmRlclByZXZpZXcoKSA6IHJlbmRlckNvZGUoKX0gb25DaGFuZ2U9e29uQ2hhbmdlfS8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW5kZXJzKCl7XHJcblxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXHJcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZUJvdHRvbSA9IGVUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlID0gdGhpcy5yZWZzLmNhcmROb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzTm9kZS5jbG9zZXN0KFwiZGl2W2NsYXNzKj1cXFwic2Nyb2xsZXItXFxcIl1cIilcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW5rcygpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xyXG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxyXG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxyXG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XHJcblxyXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xyXG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XHJcbmltcG9ydCBUb29scyBmcm9tIFwiLi90b29sc1wiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi9yZWxvYWRJY29uXCI7XHJcbmltcG9ydCBBZGRvbkNhcmQgZnJvbSBcIi4vYWRkb25jYXJkXCI7XHJcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi9zY3JvbGxlclwiO1xyXG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuL2NvbXBvbmVudHMvc2VhcmNoXCI7XHJcblxyXG5pbXBvcnQge3NldHRpbmdzQ29va2llLCBwbHVnaW5Db29raWUsIHRoZW1lQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi4vbW9kdWxlcy90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuLi9tb2R1bGVzL2JkQXBpXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4vdG9vbHRpcFdyYXBcIjtcclxuXHJcbmNvbnN0IFRvb2x0aXAgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5pc1BsdWdpbnMgPSB0aGlzLnByb3BzLnR5cGUgPT0gXCJwbHVnaW5zXCI7XHJcbiAgICAgICAgdGhpcy5jb29raWUgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbkNvb2tpZSA6IHRoZW1lQ29va2llO1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XHJcblxyXG4gICAgICAgIHRoaXMuc29ydCA9IHRoaXMuc29ydC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRm9sZGVyKCkge1xyXG4gICAgICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbSh0aGlzLmlzUGx1Z2lucyA/IENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQobmFtZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5lZGl0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkRGVsZXRlID0gYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlKG5hbWUpO1xyXG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmRlbGV0ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbChcIkFyZSBZb3UgU3VyZT9cIiwgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJHtuYW1lfT9gLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEZWxldGVcIixcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge3Jlc29sdmUodHJ1ZSk7fSxcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7cmVzb2x2ZShmYWxzZSk7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBcIk5hbWVcIiwgdmFsdWU6IFwibmFtZVwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkF1dGhvclwiLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJWZXJzaW9uXCIsIHZhbHVlOiBcInZlcnNpb25cIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJSZWNlbnRseSBBZGRlZFwiLCB2YWx1ZTogXCJhZGRlZFwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkxhc3QgTW9kaWZpZWRcIiwgdmFsdWU6IFwibW9kaWZpZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJGaWxlIFNpemVcIiwgdmFsdWU6IFwic2l6ZVwifSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkaXJlY3Rpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBc2NlbmRpbmdcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRGVzY2VuZGluZ1wiLCB2YWx1ZTogZmFsc2V9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb3BzKGFkZG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmdldE5hbWUoYWRkb24pLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNvb2tpZVt0aGlzLmdldE5hbWUoYWRkb24pXSxcclxuICAgICAgICAgICAgdG9nZ2xlOiB0aGlzLm1hbmFnZXIudG9nZ2xlLmJpbmQodGhpcy5tYW5hZ2VyKSxcclxuICAgICAgICAgICAgLy9lZGl0OiB0aGlzLmVkaXQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVtb3ZlOiB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBhZGRvbjogYWRkb24sXHJcbiAgICAgICAgICAgIGhhc2g6IGFkZG9uLmhhc2hcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlzdCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnR5cGUgPT09IFwicGx1Z2luc1wiID8gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpIDogT2JqZWN0LnZhbHVlcyhiZHRoZW1lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEFkZG9ucyA9IHRoaXMubGlzdC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IHRoaXMuc3RhdGUuc29ydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoaXMuc3RhdGUuc29ydC5zbGljZSgxKTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBhLnBsdWdpbiAmJiBhLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhhLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgOiBhW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IGIucGx1Z2luICYmIGIucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGIucGx1Z2luW2BnZXQke2NhcH1gXSgpKSAgOiBiW3RoaXMuc3RhdGUuc29ydF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoZmlyc3QpID09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdC50b0xvY2FsZUxvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoc2Vjb25kLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QgPiBzZWNvbmQpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoc2Vjb25kID4gZmlyc3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmFzY2VuZGluZykgc29ydGVkQWRkb25zLnJldmVyc2UoKTtcclxuICAgICAgICBjb25zdCByZW5kZXJlZCA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGEgPSAwOyBhIDwgc29ydGVkQWRkb25zLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uID0gc29ydGVkQWRkb25zW2FdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5xdWVyeSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZShhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEF1dGhvcihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0RGVzY3JpcHRpb24oYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0VmVyc2lvbihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkgbWF0Y2hlcyA9IG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IpIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGF1dGhvci50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBkZXNjcmlwdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IHZlcnNpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKGFkZG9uKTtcclxuICAgICAgICAgICAgcmVuZGVyZWQucHVzaCg8RXJyb3JCb3VuZGFyeT48QWRkb25DYXJkIHsuLi5wcm9wc30gcmVsb2FkPXshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgdGhpcy5tYW5hZ2VyLnJlbG9hZC5iaW5kKHRoaXMubWFuYWdlcil9IC8+PC9FcnJvckJvdW5kYXJ5Pik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZW5kZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXROYW1lKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiBhZGRvbi5uYW1lKTt9XHJcbiAgICBnZXRBdXRob3IoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXREZXNjcmlwdGlvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IGFkZG9uLmRlc2NyaXB0aW9uKTt9XHJcbiAgICBnZXRWZXJzaW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiBhZGRvbi52ZXJzaW9uKTt9XHJcblxyXG4gICAgcmVuZGVyQ2hlY2tVcGRhdGVzKCl7XHJcbiAgICAgICAgaWYoIXdpbmRvdy5aZXJlc1BsdWdpbkxpYnJhcnkpcmV0dXJuIG51bGxcclxuICAgICAgICBpZighd2luZG93LlBsdWdpblVwZGF0ZXMpcmV0dXJuIG51bGxcclxuICAgICAgICBpZih0eXBlb2Ygd2luZG93LlBsdWdpblVwZGF0ZXMuY2hlY2tBbGwgIT09IFwiZnVuY3Rpb25cIilyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKCF0aGlzLmlzUGx1Z2lucylyZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICByZXR1cm4gPHRvb2x0aXBXcmFwIHRleHQ9XCJDaGVja3MgZm9yIHVwZGF0ZXMgb2YgcGx1Z2lucyB0aGF0IHN1cHBvcnQgdGhpcyBmZWF0dXJlLiBSaWdodC1jbGljayBmb3IgYSBsaXN0LlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6IFwiMTBweFwifX0+XHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gY29sb3I9XCJicmFuZFwiIGxvb2s9XCJmaWxsZWRcIiBzaXplPVwibWluXCIgaG92ZXJDb2xvcj1cImRlZmF1bHRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJQbHVnaW4gdXBkYXRlIGNoZWNrIGluIHByb2dyZXNzLlwiLCB7dHlwZTogXCJpbmZvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgY29tcGxldGUuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgY2hlY2tpbmcgdXBkYXRlLlwiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfSBkaXNhYmxlZD17ZmFsc2V9PlxyXG4gICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBVcGRhdGVzXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC90b29sdGlwV3JhcD5cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgcmVmcmVzaEljb24gPSA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PVwiUmVsb2FkIExpc3RcIj5cclxuICAgICAgICAgICAgeyhwcm9wcykgPT4gXHJcbiAgICAgICAgICAgIDxSZWxvYWRJY29uIHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtaWNvbiBiZC1yZWxvYWQgYmQtcmVsb2FkLWhlYWRlclwiIHNpemU9XCIxOHB4XCIgb25DbGljaz17YXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQbHVnaW5zKSBwbHVnaW5Nb2R1bGUudXBkYXRlUGx1Z2luTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGVtZU1vZHVsZS51cGRhdGVUaGVtZUxpc3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgfTwvVG9vbHRpcD47XHJcbiAgICAgICAgY29uc3QgYWRkb25DYXJkcyA9IHRoaXMuZ2V0QWRkb25zKCk7XHJcblxyXG4gICAgICAgIHJldHVybiA8Q29udGVudENvbHVtbiB0aXRsZT17YCR7dGhpcy5wcm9wcy50eXBlLnRvVXBwZXJDYXNlKCl94oCUJHthZGRvbkNhcmRzLmxlbmd0aH1gfT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZXk9XCJmb2xkZXItYnV0dG9uXCIgY2xhc3NOYW1lPVwiYmQtYnV0dG9uIGJkLXBmYnRuXCIgb25DbGljaz17dGhpcy5vcGVuRm9sZGVyLmJpbmQodGhpcyl9Pk9wZW4ge3RoaXMuaXNQbHVnaW5zID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIn0gRm9sZGVyPC9idXR0b24+XHJcbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckNoZWNrVXBkYXRlcygpfVxyXG4gICAgICAgICAgICB7IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHJlZnJlc2hJY29ufVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzIGJkLWFkZG9uLWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICA8U2VhcmNoIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH0gcGxhY2Vob2xkZXI9e2BTZWFyY2ggJHt0aGlzLnByb3BzLnR5cGV9Li4uYH0gLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tZHJvcGRvd25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5Tb3J0IGJ5OjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLnNvcnRPcHRpb25zfSBvbkNoYW5nZT17dGhpcy5zb3J0fSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPk9yZGVyOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLmRpcmVjdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnJldmVyc2V9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkYS1zbGlzdCBiZC1hZGRvbi1saXN0XCI+e2FkZG9uQ2FyZHN9PC9kaXY+XHJcbiAgICAgICAgPC9Db250ZW50Q29sdW1uPlxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IENhcmRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDYXJkTGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRMb2dvIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge2hlaWdodDogXCIxMDAlXCIsIHdpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7ZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIiwgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIn0sIHZpZXdCb3g6IFwiMCAwIDIwMDAgMjAwMFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwibWV0YWRhdGFcIiwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MVwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMjBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxNVwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzNcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjEwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzMpXCJ9LCBkOiBcIk0xMTk1LjQ0KzEzNS40NDJMMTE5NS40NCsxMzUuNDQyTDk5Ny42KzEzNi40NDJDMTAyNC4yKzE0OS43NDIrMTE3MC4zNCsxNjMuNTQyKzExOTMuNjQrMTc5Ljc0MkMxMjY0LjM0KzIyOC44NDIrMTMxOS43NCsyOTEuMjQyKzEzNTguMjQrMzY1LjA0MkMxMzk4LjE0KzQ0MS42NDIrMTQxOS43NCs1MzAuNjQyKzE0MjIuNTQrNjI5LjY0MkwxNDIyLjU0KzYzMC44NDJMMTQyMi41NCs2MzIuMDQyQzE0MjIuNTQrNzczLjE0MisxNDIyLjU0KzEyMjguMTQrMTQyMi41NCsxMzY5LjE0TDE0MjIuNTQrMTM3MC4zNEwxNDIyLjU0KzEzNzEuNTRDMTQxOS44NCsxNDcwLjU0KzEzOTguMjQrMTU1OS41NCsxMzU4LjI0KzE2MzYuMTRDMTMxOS43NCsxNzA5Ljk0KzEyNjQuNDQrMTc3Mi4zNCsxMTkzLjY0KzE4MjEuNDRDMTE3MS4wNCsxODM3LjE0KzEwMjUuNysxODUwLjU0KzEwMDArMTg2My41NEwxMTkzLjU0KzE4NjQuNTRDMTUzOS43NCsxODY2LjQ0KzE4NjQuNTQrMTY5My4zNCsxODY0LjU0KzEyOTYuNjRMMTg2NC41NCs3MTYuOTQyQzE4NjYuNDQrMzEyLjQ0MisxNTQxLjY0KzEzNS40NDIrMTE5NS40NCsxMzUuNDQyWlwiLCBmaWxsOiBcIiMxNzE3MTdcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MilcIn0sIGQ6IFwiTTE2OTUuNTQrNjMxLjQ0MkMxNjg1Ljg0KzI3OC4wNDIrMTQwOS4zNCsxMzUuNDQyKzEwNTIuOTQrMTM1LjQ0MkwzNjEuNzQrMTM2LjQ0Mkw4MDMuNzQrNDkwLjQ0MkwxMDYwLjc0KzQ5MC40NDJDMTMzNS4yNCs0OTAuNDQyKzEzMzUuMjQrODM1LjM0MisxMDYwLjc0KzgzNS4zNDJMMTA2MC43NCsxMTY0Ljg0QzExNTAuMjIrMTE2NC44NCsxMjEwLjUzKzEyMDEuNDgrMTI0MS42OCsxMjUwLjg3QzEzMDYuMDcrMTM1MysxMjQ1Ljc2KzE1MDkuNjQrMTA2MC43NCsxNTA5LjY0TDM2MS43NCsxODYzLjU0TDEwNTIuOTQrMTg2NC41NEMxNDA5LjI0KzE4NjQuNTQrMTY4NS43NCsxNzIxLjk0KzE2OTUuNTQrMTM2OC41NEMxNjk1LjU0KzEyMDUuOTQrMTY1MS4wNCsxMDg0LjQ0KzE1NzIuNjQrOTk5Ljk0MkMxNjUxLjA0KzkxNS41NDIrMTY5NS41NCs3OTQuMDQyKzE2OTUuNTQrNjMxLjQ0MlpcIiwgZmlsbDogXCIjM0U4MkU1XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzEpXCJ9LCBkOiBcIk0xNDY5LjI1KzYzMS40NDJDMTQ1OS41NSsyNzguMDQyKzExODMuMDUrMTM1LjQ0Mis4MjYuNjUrMTM1LjQ0MkwxMzUuNDUrMTM1LjQ0MkwxMzUuNDUrMTAwNEMxMzUuNDUrMTAwNCsxMzUuNDI3KzEyNTUuMjErMzU1LjYyNisxMjU1LjIxQzU3NS44MjUrMTI1NS4yMSs1NzUuODQ4KzEwMDQrNTc1Ljg0OCsxMDA0TDU3Ny40NSs0OTAuNDQyTDgzNC40NSs0OTAuNDQyQzExMDguOTUrNDkwLjQ0MisxMTA4Ljk1KzgzNS4zNDIrODM0LjQ1KzgzNS4zNDJMNjY0LjY1KzgzNS4zNDJMNjY0LjY1KzExNjQuODRMODM0LjQ1KzExNjQuODRDOTIzLjkzMisxMTY0Ljg0Kzk4NC4yNDQrMTIwMS40OCsxMDE1LjM5KzEyNTAuODdDMTA3OS43OCsxMzUzKzEwMTkuNDcrMTUwOS42NCs4MzQuNDUrMTUwOS42NEwxMzUuNDUrMTUwOS42NEwxMzUuNDUrMTg2NC41NEw4MjYuNjUrMTg2NC41NEMxMTgyLjk1KzE4NjQuNTQrMTQ1OS40NSsxNzIxLjk0KzE0NjkuMjUrMTM2OC41NEMxNDY5LjI1KzEyMDUuOTQrMTQyNC43NSsxMDg0LjQ0KzEzNDYuMzUrOTk5Ljk0MkMxNDI0Ljc1KzkxNS41NDIrMTQ2OS4yNSs3OTQuMDQyKzE0NjkuMjUrNjMxLjQ0MlpcIiwgZmlsbDogXCIjRkZGRkZGXCIsIG9wYWNpdHk6IFwiMVwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NoZWNrYm94IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImxpXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94IFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3gsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWlubmVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94SW5uZXIpWzBdLmNoZWNrYm94SW5uZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3hFbGVtZW50LCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJjaGVja2JveFwifSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgIXRoaXMuc3RhdGUuY2hlY2tlZCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBBcnJvdyBmcm9tIFwiLi4vaWNvbnMvZG93bmFycm93XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7b3BlbjogZmFsc2UsIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMub3B0aW9uc1swXS52YWx1ZX07XHJcbiAgICAgICAgdGhpcy5kcm9wZG93biA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVudSA9IHRoaXMuc2hvd01lbnUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhpZGVNZW51ID0gdGhpcy5oaWRlTWVudS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNZW51KGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiB0cnVlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogZmFsc2V9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3RlZCgpIHtyZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQobyA9PiBvLnZhbHVlID09IHRoaXMuc3RhdGUudmFsdWUpO31cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LW9wdGlvbnNcIj5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAob3B0ID0+IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qtb3B0aW9uJHtzZWxlY3RlZC52YWx1ZSA9PSBvcHQudmFsdWUgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gfSBvbkNsaWNrPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcywgb3B0LnZhbHVlKX0+e29wdC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5wcm9wcy5zdHlsZSA9PSBcInRyYW5zcGFyZW50XCIgPyBcIiBiZC1zZWxlY3QtdHJhbnNwYXJlbnRcIiA6IFwiXCI7XHJcbiAgICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5zdGF0ZS5vcGVuID8gXCIgbWVudS1vcGVuXCIgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuLy8gcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBcIj5cclxuLy8gPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e3RoaXMucHJvcHMubGFiZWx9PC9sYWJlbD5cclxuLy8gPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbi8vICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1jb250cm9sc1wiPlxyXG4vLyAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbi8vICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbi8vICAgICA8L2Rpdj5cclxuLy8gPC9kaXY+XHJcbi8vIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4vLyA8L2Rpdj47IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIi4uL2ljb25zL3NlYXJjaFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWFyY2gtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0gb25LZXlEb3duPXt0aGlzLnByb3BzLm9uS2V5RG93bn0gdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJiZC1zZWFyY2hcIiBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn0gbWF4TGVuZ3RoPVwiNTBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxTZWFyY2hJY29uIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7Y2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuU3dpdGNoIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5zdGF0ZS5jaGVja2VkfSAvPlxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Db250ZW50Q29sdW1uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGRpc3BsYXlOYW1lKCkge3JldHVybiBcIkNvbnRlbnRDb2x1bW5cIjt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vbGV0IGNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMucHJvcHMudGl0bGUgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHRoaXMucHJvcHMudGl0bGUpIDogbnVsbFxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbiArIFwiIFwiK2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwiLCBzdHlsZToge3BhZGRpbmc6IFwiNjBweCA0MHB4IDBweFwifX0sXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5pbXBvcnQgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGZyb20gXCIuL2Nzc0VkaXRvckRldGFjaGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5wcm9wcy5saW5lcyA9IDA7XHJcbiAgICAgICAgc2VsZi5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICBzZWxmLmF0dGFjaCA9IHNlbGYuYXR0YWNoLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2hlZEVkaXRvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQ3NzRWRpdG9yRGV0YWNoZWQsIHthdHRhY2g6IHNlbGYuYXR0YWNofSk7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuZGV0YWNoID0gc2VsZi5kZXRhY2guYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRoaXMucHJvcHMuZGV0YWNoZWQgfHwgQkRWMi5lZGl0b3JEZXRhY2hlZFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChwcmV2U3RhdGUuZGV0YWNoZWQgJiYgIXNlbGYuc3RhdGUuZGV0YWNoZWQpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYuZGV0YWNoZWRSb290KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZU1pcnJvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGNvbnN0IHtkZXRhY2hlZH0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIGRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7aWQ6IFwiZWRpdG9yLWRldGFjaGVkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImgzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcIkVkaXRvciBEZXRhY2hlZFwiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdHRhY2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAhZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJkZXRhY2hcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBkZXRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJoZWxwLXRleHRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlByZXNzIFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiY29kZVwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCJjdHJsXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcIixcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiB3aXRoIHRoZSBlZGl0b3IgZm9jdXNlZCB0byBhY2Nlc3MgdGhlIGVkaXRvcidzIHNldHRpbmdzLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhhcmcpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzd2l0Y2ggKGFyZykge1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZGV0YWNoXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNzcygpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgYnRvYSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBkZXRhY2goKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZHJvb3QgPSBzZWxmLmRldGFjaGVkUm9vdDtcclxuICAgICAgICBpZiAoIWRyb290KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRkFJTEVEIFRPIElOSkVDVCBST09UOiAuYXBwXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNlbGYuZGV0YWNoZWRFZGl0b3IsIGRyb290KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGV0YWNoZWRSb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdERldGFjaGVkUm9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0RGV0YWNoZWRSb290KCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcC5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhdHRhY2goKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYub25DaGFuZ2UgPSBzZWxmLm9uQ2hhbmdlLmJpbmQoc2VsZik7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xyXG4gICAgICAgIEJEVjIuZWRpdG9yRGV0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlTGluZUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaW5lQ291bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gdGhpcy5yZWZzLmVkaXRvci52YWx1ZS5zcGxpdChcIlxcblwiKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZzLmxpbmVzLnRleHRDb250ZW50ID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobGluZUNvdW50KSwgKF8sIGkpID0+IGkgKyAxKS5qb2luKFwiLlxcblwiKSArIFwiLlwiO1xyXG4gICAgICAgIHRoaXMucHJvcHMubGluZXMgPSBsaW5lQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY3NzXCIsXHJcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXHJcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXHJcbiAgICAgICAgICAgIHNjcm9sbGJhclN0eWxlOiBcInNpbXBsZVwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3NzKCkge1xyXG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIGxldCBjY3NzID0gXCJcIjtcclxuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgY2NzcyA9IGF0b2IoX2Njc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2NzcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IERPTS5xdWVyeShcIi5hcHAsIC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hcHAgJiYgZS5sYXllcnMpWzBdLmFwcC5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiZC1kZXRhY2hlZC1jc3MtZWRpdG9yXCIsIGlkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtZWRpdG9yXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1pbm5lcnBhbmVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3ItZGV0YWNoZWRcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogc2VsZi5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImF0dGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soaWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhdHRhY2hcIjpcclxuICAgICAgICAgICAgICAgIGlmIChET00ucXVlcnkoXCIjZWRpdG9yLWRldGFjaGVkXCIpKSBzZWxmLnByb3BzLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYucm9vdCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJvb3QucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJERXJyb3JCb3VuZGFyeSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICB0aGlzLnN0YXRlID0ge2hhc0Vycm9yOiBmYWxzZX07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2hhc0Vycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInJlYWN0LWVycm9yXCJ9LCBcIkNvbXBvbmVudCBFcnJvclwiKTsgIFxyXG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjsgXHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCREVycm9yQm91bmRhcnkucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsgIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbGV0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCIjRkZGRkZGXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCIjRkZGRkZGXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCIjRkZGRkZGXCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzelwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59Iiwiey8qIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwid2hpdGVcIiB3aWR0aD1cIjE4cHhcIiBoZWlnaHQ9XCIxOHB4XCI+XHJcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxyXG48L3N2Zz4gKi99XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGlzdG9yeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE4cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIiNGRkZGRkZcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cIiNGRkZGRkZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHJlc2VuY2VTZXR0aW5ncyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxyXG4gICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByZXZpZXcgPSBudWxsXHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzID0gbmV3IFNldCgpXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlV2hlbkZldGNoZWQoY29tcCl7XHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuYWRkKGNvbXApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SW5wdXRUZXh0fSBzZXR0aW5nIFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRTZXR0aW5nID0gUlBDUHJvcHMuZmluZChlID0+IGUuaWQgPT09IHNldHRpbmcucHJvcHMuaWQpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCB0aGlzLnN0YXRlLmRhdGEsIHtcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0U2V0dGluZy5pZF06ICEhdmFsdWUgPyB2YWx1ZSA6IG51bGxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5zdGF0ZS5hc3NldHNcclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHNldHRpbmcucHJvcHMuaWQgPT09IFwiYXBwbGljYXRpb25faWRcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3LmZvcmNlVXBkYXRlKClcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKVxyXG4gICAgfVxyXG5cclxuICAgIGZldGNoQXNzZXRzKCl7XHJcbiAgICAgICAgaWYodGhpcy5pc2ZldGNoaW5nID09PSB0cnVlKXtcclxuICAgICAgICAgICAgbGV0IGFwcCA9IHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCAhPT0gYXBwKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IHRydWVcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZmV0Y2hBc3NldHModGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKVxyXG4gICAgICAgIC50aGVuKGFzc2V0cyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBPYmplY3Qua2V5cyhhc3NldHMpLm1hcChrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzZXQgPSBhc3NldHNba11cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYXNzZXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzc2V0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByZXZpZXcoZGF0YSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyB8fCAoVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlJlcmVuZGVyaW5nIHJwYyBtYW5hZ2VyXCIpXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NHcm91cCB0aXRsZT1cIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiIHNldHRpbmdzPXt0aGlzLnByb3BzLnNldHRpbmdzfSBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0vPixcclxuICAgICAgICAgICAgPE1hcmdpblRvcCAvPixcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJSaWNoUHJlc2VuY2VcIi8+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgey8qKiBvcHRpb25zICovfVxyXG4gICAgICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbXBvbmVudHN9XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz5cclxuICAgICAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUHJldmlld1wiLz5cclxuICAgICAgICAgICAgICAgIHsvKiogcHJldmlldyAqL31cclxuICAgICAgICAgICAgICAgIDxScGNQcmV2aWV3IHNldHRpbmdzPXt0aGlzfS8+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+LFxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9e3dpbmRvdy5vaGdvZG9oZnVja30+XHJcbiAgICAgICAgICAgICAgICBPaCBnb2QgT2ggZnVja1xyXG4gICAgICAgICAgICA8L2J1dHRvbj4sXHJcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIilcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICBTZWUgPyBJIHB1bGxlZCBhIGxpdGxlIHNuZWFreSBvbiB5YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnNDb21wb25lbnRzKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNDb21wb25lbnRzIHx8ICh0aGlzLl9vcHRpb25zQ29tcG9uZW50cyA9IFJQQ1Byb3BzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYoZS50eXBlID09PSBcInRleHRcIil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0VGV4dCBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPlxyXG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gWzxJbnB1dE51bWJlciBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPl0vKlxyXG4gICAgICAgICAgICAgICAgaWYoZS5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoPERpc2NvcmRCdXR0b24gdGl0bGU9XCJDb3B5IEN1cnJlbnQgVGltZXN0YW1wXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICAgICAgICAgICAgICB9fSAvPilcclxuICAgICAgICAgICAgICAgIH0qL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJjaG9pY2VcIil7XHJcbiAgICAgICAgICAgICAgICBpZihbXCJhc3NldHMuc21hbGxcIiwgXCJhc3NldHMubGFyZ2VcIl0uaW5jbHVkZXMoZS5pZCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRDaG9pY2Ugc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9IGNob2ljZXM9e1t7dmFsdWU6IFwibm9uZVwiLCBsYWJlbDogXCJObyBhc3NldHNcIn1dLmNvbmNhdCh0aGlzLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpfS8+XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJVbmtub3duIGNob2ljZS5cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICB9XHJcbn1cclxuY29uc3QgUlBDUHJvcHMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiQXBwbGljYXRpb24gSURcIixcclxuICAgICAgICBpZDogXCJhcHBsaWNhdGlvbl9pZFwiLFxyXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxyXG4gICAgICAgIGlkOiBcIm5hbWVcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJMaWdodGNvcmRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJEZXRhaWxzXCIsXHJcbiAgICAgICAgaWQ6IFwiZGV0YWlsc1wiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkJyb3dzaW5nIERpc2NvcmRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJTdGF0ZVwiLFxyXG4gICAgICAgIGlkOiBcInN0YXRlXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkIENsaWVudFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlRpbWVzdGFtcCBTdGFydFwiLFxyXG4gICAgICAgIGlkOiBcInRpbWVzdGFtcHMuc3RhcnRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgIGdldCBwbGFjZWhvbGRlcigpe1xyXG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTGFyZ2VBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5sYXJnZVwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU21hbGxBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5zbWFsbFwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbl1cclxuXHJcbmxldCBpbnB1dFRleHRNb2R1bGVzXHJcbmNsYXNzIElucHV0VGV4dCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICBpZihpbnB1dFRleHRNb2R1bGVzICYmIGlucHV0VGV4dE1vZHVsZXNbMF0pcmV0dXJuIGlucHV0VGV4dE1vZHVsZXNcclxuICAgICAgICByZXR1cm4gaW5wdXRUZXh0TW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxyXG4gICAgICAgICAgICBpbnB1dE1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTIsXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgSW5wdXROdW1iZXJNb2R1bGVzXHJcbmNsYXNzIElucHV0TnVtYmVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBJbnB1dE51bWJlck1vZHVsZXMgfHwgKElucHV0TnVtYmVyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JUcmFuc3BhcmVudClbMF0sXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQgcGxhY2Vob2xkZXI9e3NldHRpbmcucGxhY2Vob2xkZXJ9IG5hbWU9e3NldHRpbmcuaWR9IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IHR5cGU9XCJudW1iZXJcIiBvbkNoYW5nZT17KHZhbHVlLCBuYW1lLCBpbnB1dCkgPT4ge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkXSsvZywgXCJcIilcclxuICAgICAgICAgICAgaWYodmFsdWUgPT0gdGhpcy5zdGF0ZS5kYXRhKXtcclxuICAgICAgICAgICAgICAgIGlucHV0LnNldFZhbHVlKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dH1cclxuICAgICAgICAgICAgICAgIHtzZXR0aW5nLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIiA/IFxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICAgICAgICAgIH19IGNvbG9yPVwiYnJhbmRcIj5Db3B5IGN1cnJlbnQgdGltZXN0YW1wPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj4gOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IElucHV0Q2hvaWNlTW9kdWxlc1xyXG5jbGFzcyBJbnB1dENob2ljZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0gPyBcImFzc2V0LVwiK3RoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdIDogXCJub25lXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLnVwZGF0ZVdoZW5GZXRjaGVkKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoZGF0YSl7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZGF0YS52YWx1ZVxyXG5cclxuICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUgPT09IFwibm9uZVwiID8gbnVsbCA6IHZhbHVlLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXHJcbiAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEgPT09IFwibm9uZVwiID8gbnVsbCA6IHRoaXMuc3RhdGUuZGF0YS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gSW5wdXRDaG9pY2VNb2R1bGVzIHx8IChJbnB1dENob2ljZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICBcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIG9wdGlvbnMudW5zaGlmdCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBcIm5vbmVcIixcclxuICAgICAgICAgICAgbGFiZWw6IFwiTm8gYXNzZXRzXCJcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9wdGlvbnM9e29wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IC8+XHJcbiAgICAgICAgICAgICAgICB7Lyo8U2VsZWN0IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IG9wdGlvbnM9e29wdGlvbnN9Lz4qL31cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBEaXZpZGVyTW9kdWxlcyA9IFtdXHJcbmNsYXNzIERpdmlkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIERpdmlkZXJNb2R1bGVzJiZEaXZpZGVyTW9kdWxlc1swXSA/IERpdmlkZXJNb2R1bGVzIDogKERpdmlkZXJNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZGl2aWRlcixcclxuICAgICAgICAgICAgZGl2aWRlckRlZmF1bHRcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXtgJHtkaXZpZGVyLmRpdmlkZXJ9ICR7ZGl2aWRlckRlZmF1bHQuZGl2aWRlckRlZmF1bHR9YH0+PC9kaXY+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIERpc2NvcmRCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdXHJcbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gY29sb3I9XCJicmFuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBScGNQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzID0ge30pe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogXCJwcm9maWxlXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJzID0gW11cclxuXHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXR0aW5ncy5wcmV2aWV3ID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVRhYih0YWIpe1xyXG4gICAgICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmVcclxuICAgICAgICBpZihhbmNpZW50VGFiID09PSB0YWIucHJvcHMuaWQpcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBlLnNldEFjdGl2ZShmYWxzZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSlcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiB0YWIucHJvcHMuaWRcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBwcmV2aWV3ID0gbmV3IHRoaXMucHJldmlldyh7XHJcbiAgICAgICAgICAgIHByZXZpZXc6IHRoaXNcclxuICAgICAgICB9KVxyXG4gICAgICAgIHByZXZpZXcuc2V0U3RhdGUodGhpcy5zdGF0ZS5ycGMpXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYldyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJuYXZcIiBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIkZ1bGwgUHJvZmlsZVwiIGlkPVwicHJvZmlsZVwiLz5cclxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJVc2VyIFBvcG91dFwiIGlkPVwicG9wb3V0XCIvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge3ByZXZpZXcucmVuZGVyKCl9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfSAgIFxyXG5cclxuICAgIGlzQWN0aXZlKHRhYil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlID09PSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJldmlldygpe1xyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxyXG4gICAgICAgIHJldHVybiBQb3BvdXRcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgVGFiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlKXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUluYWN0aXZlYFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMucHJldmlldy5jaGFuZ2VUYWIodGhpcylcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcG9wb3V0TW9kdWxlXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7IC8vIFRPRE86IFByb2JhYmx5IHVzZSBpbnRlcm5hbCBDb21wb25lbnRzIGluc3RlYWQgb2YgbWFraW5nIGl0IGZyb20gc2NyYXRjaC5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZSB8fCAocG9wb3V0TW9kdWxlID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlVc2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRoZW1lR2hvc3RIYWlybGluZUNoYW5uZWxzKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wcm8gJiYgZS5pbmxpbmUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm9vdE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUxLFxyXG4gICAgICAgICAgICBzdHlsaW5nTW9kdWxlMSxcclxuICAgICAgICAgICAgbmFtZVRhZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5TW9kdWxlMSxcclxuICAgICAgICAgICAgdGV4dE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUxLFxyXG4gICAgICAgICAgICBzY3JvbGxlck1vZHVsZTEsXHJcbiAgICAgICAgICAgIG5vdGVNb2R1bGUxLFxyXG4gICAgICAgICAgICBwcm90aXBNb2R1bGUxLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICB1c2VyTW9kdWxlMVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUxLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwodXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpID8gXCJnaWZcIiA6IFwicG5nXCIpXHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgdGltZXN0YW1wQ2xhc3MgPSB0aW1lc3RhbXBDbGFzcyB8fCBhY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wXHJcblxyXG4gICAgICAgIGxldCBpbWFnZXMgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZighZGF0YVtcImFzc2V0cy5sYXJnZVwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICBsZXQgaW1hZ2VzID0gW11cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5sYXJnZVwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMubGFyZ2VcIl19LnBuZ2B9IGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VJbWFnZVVzZXJQb3BvdXR9ICR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXSA/IGFjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZU1hc2tVc2VyUG9wb3V0IDogXCJcIn1gfSAvPilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihkYXRhW1wiYXNzZXRzLnNtYWxsXCJdKXtcclxuICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKDxpbWcgYWx0PVwiXCIgc3JjPXtgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5zbWFsbFwiXX0ucG5nYH0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHNTbWFsbEltYWdlVXNlclBvcG91dH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWltYWdlcy5sZW5ndGgpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hc3NldHN9PlxyXG4gICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfSkoKVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJsYy11c2VyUG9wb3V0IGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJQb3BvdXR9IHJvbGU9XCJkaWFsb2dcIiB0YWJpbmRleD1cIi0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJQbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLnZlcnRpY2FsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlDZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRvcH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJXcmFwcGVyTm9ybWFsfSByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthdmF0YXJNb2R1bGUxfSByb2xlPVwiaW1nXCIgc3R5bGU9e3t3aWR0aDogXCI4MHB4XCIsIGhlaWdodDogXCI4MHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiOTJcIiBoZWlnaHQ9XCI4MFwiIHZpZXdCb3g9XCIwIDAgOTIgODBcIiBjbGFzcz17YCR7YXZhdGFyTW9kdWxlMS5tYXNrfSAke2F2YXRhck1vZHVsZTEuc3ZnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgbWFzaz1cInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXthdmF0YXJVUkx9IGFsdD1cIiBcIiBjbGFzcz17YXZhdGFyTW9kdWxlMS5hdmF0YXJ9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1cyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50fSB2aWV3Qm94PVwiMCAwIDgwIDgwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmF2YXRhckhpbnRJbm5lcn0+e01lc3NhZ2VzLlZJRVdfUFJPRklMRX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmhlYWRlclRleHR9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnbkNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5oZWFkZXJUYWdOb05pY2tuYW1lfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtuYW1lVGFnTW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS5oZWFkZXJUYWdVc2VybmFtZU5vTmlja25hbWV9YH0+e3VzZXIudXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5VXNlclBvcG91dH0gJHtyb290TW9kdWxlMS5hY3Rpdml0eX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT57TWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9IRUFERVJfUExBWUlOR308L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW1hZ2VzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17aW1hZ2VzID8gYWN0aXZpdHlNb2R1bGUxLmNvbnRlbnRJbWFnZXNVc2VyUG9wb3V0IDogYWN0aXZpdHlNb2R1bGUxLmNvbnRlbnROb0ltYWdlc1VzZXJQb3BvdXR9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLm5hbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLm5hbWVOb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTR9YH0gdGl0bGU9e2RhdGEubmFtZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEuZGV0YWlscylyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiB0aXRsZT17ZGF0YS50aXRsZX0gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5kZXRhaWxzfT57ZGF0YS5kZXRhaWxzfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLnN0YXRlKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9e2RhdGEuc3RhdGV9PntkYXRhLnN0YXRlfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQodGltZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7cm9vdE1vZHVsZTEuYm9keX0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3RIYWlybGluZX0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcn0gJHtyb290TW9kdWxlMS5ib2R5SW5uZXJ9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmJvZHlUaXRsZX0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake25vdGVNb2R1bGUxLm5vdGV9ICR7cm9vdE1vZHVsZTEubm90ZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBwbGFjZWhvbGRlcj17TWVzc2FnZXMuTk9URV9QTEFDRUhPTERFUn0gbWF4bGVuZ3RoPVwiMjU2XCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBjbGFzcz17QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF0uc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gc3R5bGU9e3toZWlnaHQ6IFwiMzZweFwifX0gZGlzYWJsZWQ+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmZvb3Rlcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEucHJvdGlwfSAke3Byb3RpcE1vZHVsZTEuaW5saW5lfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9e2Ake3Byb3RpcE1vZHVsZTEucHJvfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWB9IHN0eWxlPXt7Y29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIn19PntNZXNzYWdlcy5QSU5ORURfTUVTU0FHRVNfUFJPX1RJUH08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtjb2xvck1vZHVsZTEuY29sb3JTdGFuZGFyZH0gJHtzaXplTW9kdWxlMS5zaXplMTR9ICR7cHJvdGlwTW9kdWxlMS50aXB9YH0+e01lc3NhZ2VzLkNPTlRFWFRfTUVOVV9ISU5UfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IFN0YXR1c01vZHVsZXNcclxuY2xhc3MgU3RhdHVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFN0YXR1c01vZHVsZXMgfHwgKFN0YXR1c01vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFByZXNlbmNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZ2V0UHJlc2VuY2UsXHJcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHNcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgbGV0IHN0YXR1cyA9IGdldFByZXNlbmNlLmRlZmF1bHQuZ2V0UHJlc2VuY2UoKS5zdGF0dXNcclxuICAgICAgICBpZihzdGF0dXMgPT09IFwiaW52aXNpYmxlXCIpc3RhdHVzID0gXCJvZmZsaW5lXCJcclxuICAgICAgICByZXR1cm4gPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgeD1cIjYwXCIgeT1cIjYwXCIgZmlsbD1cIiNmZmZmZmZcIiBtYXNrPXtgdXJsKCNzdmctbWFzay1zdGF0dXMtJHtzdGF0dXN9KWB9IGNsYXNzTmFtZT17cG9pbnRlckV2ZW50c30+PC9yZWN0PlxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgdGltZXN0YW1wQ2xhc3MgPSBcIlwiXHJcblxyXG5sZXQgUHJvZmlsZU1vZHVsZXNcclxuY2xhc3MgUHJvZmlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7IC8vIFRPRE86IFByb2JhYmx5IHVzZSBpbnRlcm5hbCBDb21wb25lbnRzIGluc3RlYWQgb2YgbWFraW5nIGl0IGZyb20gc2NyYXRjaC5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFByb2ZpbGVNb2R1bGVzIHx8IChQcm9maWxlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlQcm9maWxlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyRmFkZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vdGUgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXNcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCB1c2VyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTCh1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikgPyBcImdpZlwiIDogXCJwbmdcIilcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlfSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVByb2ZpbGV9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucm9vdH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnRvcFNlY3Rpb25QbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YH0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVySW5mb31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5uYW1lVGFnfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtyb290TW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS51c2VybmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtyb290TW9kdWxlMS5kaXNjcmltaW5hdG9yfT4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtmbGV4TW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZXN9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlcyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJGaWxsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVByb2ZpbGV9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzUHJvZmlsZSA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5fT5cclxuXHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcblx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbkhlYWRlcn0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubm90ZX0gJHtub3RlTW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjQwcHhcIn19IGRpc2FibGVkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25uZWN0ZWRBY2NvdW50cyAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBhY2NvdW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF1cclxuICAgICAgICBsZXQgQWNjb3VudE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRBY2NvdW50cylbMF0uZGVmYXVsdFxyXG5cclxuICAgICAgICBsZXQgYWNjcyA9IEFjY291bnRNb2R1bGUxLmdldEFjY291bnRzKCkuZmlsdGVyKGUgPT4gZS52aXNpYmlsaXR5ID09PSAxKVxyXG4gICAgICAgIGZvcihsZXQgYWNjIG9mIGFjY3Mpe1xyXG4gICAgICAgICAgICBhY2NvdW50cy5wdXNoKDxDb25uZWN0ZWRBY2NvdW50IGFjYz17YWNjfSAvPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGFjY291bnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50c30+XHJcbiAgICAgICAgICAgICAgICAgICAge2FjY291bnRzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBmbG93ZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBhbmNob3JNb2R1bGUxLFxyXG4gICAgICAgICAgICBTb2NpYWxDb25zdGFudHNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hbmNob3IpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXQgJiYgZS5kZWZhdWx0Lm1hcClbMF0uZGVmYXVsdFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgYWNjID0gdGhpcy5wcm9wcy5hY2NcclxuICAgICAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSlcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgPGltZyBhbHQ9e2BMb2dvICR7Y29uc3RhbnRzU29jaWFsLm5hbWV9YH0gY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRJY29ufSBzcmM9e2NvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXl9IC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lSW5uZXJ9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWV9PnthY2MubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIHthY2MudmVyaWZpZWQgPyAoPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyQ29udGFpbmVyfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb259YH0gc3R5bGU9e3t3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNGY1NDVjXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17Zmxvd2VyTW9kdWxlMS5jaGlsZENvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTUuMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9e2Ake2FuY2hvck1vZHVsZTEuYW5jaG9yfSAke2FuY2hvck1vZHVsZTEuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE9wZW5JY29ufSB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IFVzZXJGbGFncyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLlVzZXJGbGFncylbMF0uVXNlckZsYWdzXHJcbiAgICAgICAgbGV0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBbXVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIGluIFVzZXJGbGFncyl7XHJcbiAgICAgICAgICAgIGlmKHVzZXIuaGFzRmxhZyhVc2VyRmxhZ3NbZmxhZ05hbWVdKSlzZXJpYWxpemVkLnB1c2goZmxhZ05hbWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIG9mIHNlcmlhbGl6ZWQpe1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoYWJsZSA9IGBwcm9maWxlQmFkZ2Uke2ZsYWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcChlID0+IGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWBcclxuICAgICAgICAgICAgc2VhcmNoYWJsZSA9IHNlYXJjaGFibGUucmVwbGFjZShcIkh5cGVzcXVhZE9ubGluZVwiLCBcIkh5cGVTcXVhZE9ubGluZVwiKVxyXG4gICAgICAgICAgICBpZighcm9vdE1vZHVsZVtzZWFyY2hhYmxlXSljb250aW51ZVxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT17c2VhcmNoYWJsZX0vPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbil7XHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKDxCYWRnZSBuYW1lPVwicHJvZmlsZUJhZGdlUHJlbWl1bVwiIC8+KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlV3JhcHBlcn0+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uLy4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19MYXllciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMua2V5dXBMaXN0ZW5lciA9IHRoaXMua2V5dXBMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGtleXVwTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAyNykge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yZWZzLnJvb3QucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5rZXl1cExpc3RlbmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGhpc05vZGUgPSBET00ucXVlcnkoYCMke3RoaXMucHJvcHMuaWR9YCk7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHsxLjEgLSAwLjEgKiBwcm9ncmVzc30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqICgxIC0gcHJvZ3Jlc3MpfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSAxIC0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiLnB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5yZW1vdmUoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiBwcm9ncmVzcyArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsYXllciA9IERPTS5xdWVyeShcIltjbGFzcyo9XFxcImxheWVyLVxcXCJdXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5hZGQoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiAoMSAtIHByb2dyZXNzKSArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImxheWVyIGJkLWxheWVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyICYmIGUuYW5pbWF0aW5nKVswXS5sYXllciwgaWQ6IHRoaXMucHJvcHMuaWQsIHJlZjogXCJyb290XCIsIHN0eWxlOiB7b3BhY2l0eTogMCwgdHJhbnNmb3JtOiBcInNjYWxlKDEuMSkgdHJhbnNsYXRlWigwcHgpXCJ9fSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi90b29sc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVGFiQmFyU2VwYXJhdG9yIGZyb20gXCIuLi90YWJCYXJTZXBhcmF0b3JcIjtcclxuaW1wb3J0IFRhYkJhckhlYWRlciBmcm9tIFwiLi4vdGFiQmFySGVhZGVyXCI7XHJcbmltcG9ydCBUYWJCYXJJdGVtIGZyb20gXCIuLi90YWJCYXJJdGVtXCI7XHJcblxyXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9zZXJ2ZXJDYXJkXCI7XHJcbmltcG9ydCBTaWRlYmFyVmlldyBmcm9tIFwiLi9zaWRlYmFyVmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1B1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VDYXRlZ29yeSA9IHRoaXMuY2hhbmdlQ2F0ZWdvcnkuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24gPSB0aGlzLmNoZWNrQ29ubmVjdGlvbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuam9pbiA9IHRoaXMuam9pbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdCA9IHRoaXMuY29ubmVjdC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLkd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0R3VpbGRzXCJdKTtcclxuICAgICAgICB0aGlzLkF2YXRhckRlZmF1bHRzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJERUZBVUxUX0FWQVRBUlNcIl0pO1xyXG4gICAgICAgIHRoaXMuSW52aXRlQWN0aW9ucyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO1xyXG4gICAgICAgIHRoaXMuU29ydGVkR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRTb3J0ZWRHdWlsZHNcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZXJ2ZXJzOiBbXSxcclxuICAgICAgICAgICAgbmV4dDogbnVsbCxcclxuICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IDAsXHJcbiAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnByb3BzLnJvb3RJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChxdWVyeSwgY2xlYXIpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBmZXRjaChgJHtzZWxmLmVuZFBvaW50fSR7cXVlcnl9JHtxdWVyeSA/IFwiJnNjaGVtYT1uZXdcIiA6IFwiP3NjaGVtYT1uZXdcIn1gLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IGF3YWl0IHJlcy50ZXh0KClcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgc2VydmVycyA9IGRhdGEucmVzdWx0cy5yZWR1Y2UoKGFyciwgc2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuam9pbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgLy8gYXJyLnB1c2goPFNlcnZlckNhcmQgc2VydmVyPXtzZXJ2ZXJ9IGpvaW49e3NlbGYuam9pbn0vPik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzID0gc2VsZi5zdGF0ZS5zZXJ2ZXJzLmNvbmNhdChzZXJ2ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vc2VydmVycy51bnNoaWZ0KHNlbGYuYmRTZXJ2ZXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZW5kID0gZGF0YS5zaXplICsgZGF0YS5mcm9tO1xyXG4gICAgICAgICAgICBkYXRhLm5leHQgPSBgP2Zyb209JHtlbmR9YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgZGF0YS5uZXh0ICs9IGAmdGVybT0ke3NlbGYuc3RhdGUudGVybX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5KSBkYXRhLm5leHQgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICAgICAgaWYgKGVuZCA+PSBkYXRhLnRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5uZXh0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gYFNob3dpbmcgMS0ke2VuZH0gb2YgJHtkYXRhLnRvdGFsfSByZXN1bHRzIGluICR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSB0aXRsZSArPSBgIGZvciAke3NlbGYuc3RhdGUudGVybX1gO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IHNlcnZlcnMsXHJcbiAgICAgICAgICAgICAgICBuZXh0OiBkYXRhLm5leHRcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coc2VsZik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlZnMuc2J2LnJlZnMuY29udGVudFNjcm9sbGVyLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkZhaWxlZCB0byBsb2FkIHNlcnZlcnMuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHNcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGpvaW4oc2VydmVyQ2FyZCkge1xyXG4gICAgICAgIGlmIChzZXJ2ZXJDYXJkLnByb3BzLnBpbm5lZCkgcmV0dXJuIHRoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGUoc2VydmVyQ2FyZC5wcm9wcy5pbnZpdGVfY29kZSk7XHJcblxyXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMuam9pbkVuZFBvaW50fS8ke3NlcnZlckNhcmQucHJvcHMuc2VydmVyLmlkZW50aWZpZXJ9YCx7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNlcnZlckNhcmQuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGYud2luZG93T3B0aW9ucztcclxuICAgICAgICBvcHRpb25zLnggPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5YICsgd2luZG93LmlubmVyV2lkdGggLyAyIC0gb3B0aW9ucy53aWR0aCAvIDIpO1xyXG4gICAgICAgIG9wdGlvbnMueSA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gb3B0aW9ucy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93ID0gbmV3ICh3aW5kb3cucmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5Ccm93c2VyV2luZG93KShvcHRpb25zKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9aHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCI7XHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1cmwgIT0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBzZWxmLmpvaW5XaW5kb3cuY2xvc2UoKTtcclxuICAgICAgICAgICAgc2VsZi5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cubG9hZFVSTCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB3aW5kb3dPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgIGhlaWdodDogNTUwLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzI4MmIzMFwiLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1pbmltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgYWx3YXlzT25Ub3A6IHRydWUsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgY2VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcclxuICAgICAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJkU2VydmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCI3NTAwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjIwMDAwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIEJldHRlckRpc2NvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc2VydmVyMiA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjMwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjUwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIExpZ2h0Y29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2F2YXRhcnMzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzY1NjkwMDU4P3M9MjAwJnY9NFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCI3ZUZmZjJBXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyMiwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vam9pbi5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9gLHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IDAsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJWaWV3LCB7cmVmOiBcInNidlwifSwgdGhpcy5jb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2lkZWJhcjoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLnNpZGViYXJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLmNvbnRlbnRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9vbHM6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7a2V5OiBcInB0XCIsIHJlZjogXCJ0b29sc1wiLCBvbkNsaWNrOiB0aGlzLmNsb3NlfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpZGViYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyXCIsIGtleTogXCJwc1wifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhciBTSURFXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiLCBzdHlsZToge2ZvbnRTaXplOiBcIjE2cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiUHVibGljIFNlcnZlcnNcIlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhckhlYWRlciwge3RleHQ6IFwiQ2F0ZWdvcmllc1wifSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5QnV0dG9ucy5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySXRlbSwge2lkOiBpbmRleCwgb25DbGljazogdGhpcy5jaGFuZ2VDYXRlZ29yeSwga2V5OiBpbmRleCwgdGV4dDogdmFsdWUsIHNlbGVjdGVkOiB0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgPT09IGluZGV4fSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10ZXh0LWlucHV0IGZsZXgtdmVydGljYWxcIiwgc3R5bGU6IHt3aWR0aDogXCIxNzJweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge3JlZjogXCJzZWFyY2hpbnB1dFwiLCBvbktleURvd246IHRoaXMuc2VhcmNoS2V5RG93biwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcInRleHRcIiwgY2xhc3NOYW1lOiBcImlucHV0IGRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiU2VhcmNoLi4uXCIsIG1heExlbmd0aDogXCI1MFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoS2V5RG93bihlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYD90ZXJtPSR7ZS50YXJnZXQudmFsdWV9YDtcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKHF1ZXJ5LCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2F0ZWdvcnlCdXR0b25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXCJBbGxcIiwgXCJGUFMgR2FtZXNcIiwgXCJNTU8gR2FtZXNcIiwgXCJTdHJhdGVneSBHYW1lc1wiLCBcIk1PQkEgR2FtZXNcIiwgXCJSUEcgR2FtZXNcIiwgXCJUYWJsZXRvcCBHYW1lc1wiLCBcIlNhbmRib3ggR2FtZXNcIiwgXCJTaW11bGF0aW9uIEdhbWVzXCIsIFwiTXVzaWNcIiwgXCJDb21tdW5pdHlcIiwgXCJMYW5ndWFnZVwiLCBcIlByb2dyYW1taW5nXCIsIFwiT3RoZXJcIl07XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlQ2F0ZWdvcnkoaWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5yZWZzLnNlYXJjaGlucHV0LnZhbHVlID0gXCJcIjtcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogaWQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnNlYXJjaChgP2NhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbaWRdfWAsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHRoaXMuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuY29ubmVjdGlvbi5zdGF0ZSA9PT0gMSkgcmV0dXJuIHNlbGYubm90Q29ubmVjdGVkO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge3JlZjogXCJjb250ZW50XCIsIGtleTogXCJwY1wiLCBjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pLFxyXG4gICAgICAgICAgICBzZWxmLmJkU2VydmVyLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubWFwKChzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luOiBzZWxmLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLm5leHQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtzZWxmLnNldFN0YXRlKHtsb2FkaW5nOiB0cnVlfSk7IHNlbGYuc2VhcmNoKHNlbGYuc3RhdGUubmV4dCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIiwgc3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1hcmdpblRvcDogXCIxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUubG9hZGluZyA/IFwiTG9hZGluZ1wiIDogXCJMb2FkIE1vcmVcIlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KVxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3RDb25uZWN0ZWQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy9yZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHsgdGV4dDogc2VsZi5zdGF0ZS50aXRsZSB9KTtcclxuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwibmNjXCIsIHJlZjogXCJjb250ZW50XCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogc2VsZi5jb25uZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjE4cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiMTBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb25uZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksIHNlbGYuYmRTZXJ2ZXJcclxuICAgICAgICApXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYVwiLFxyXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgIFwiRGlzY29yZHNlcnZlcnMuY29tXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gc2VsZi5zdGF0ZTtcclxuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCk7XHJcblxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtjb2xvcjogXCIjYjliYmJlXCIsIGZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIFwiQ29ubmVjdGVkIGFzOiBcIixcclxuICAgICAgICAgICAgICAgIGAke2Nvbm5lY3Rpb24udXNlci51c2VybmFtZX0jJHtjb25uZWN0aW9uLnVzZXIuZGlzY3JpbWluYXRvcn1gXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwYWRkaW5nOiBcIjVweCAxMHB4IDAgMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1pbkhlaWdodDogXCIyMHB4XCJ9LCB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIiwgb25DbGljazogc2VsZi5jb25uZWN0fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbn1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VydmVyQ2FyZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsKSB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBpbWFnZUVycm9yOiBmYWxzZSxcclxuICAgICAgICAgICAgam9pbmVkOiB0aGlzLnByb3BzLmd1aWxkTGlzdC5pbmNsdWRlcyh0aGlzLnByb3BzLnNlcnZlci5pZGVudGlmaWVyKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzZXJ2ZXJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBsZXQgY2FyZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNhcmQgJiYgZS5jYXJkUHJpbWFyeSlbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXhDaGlsZCAmJiBlLl9ob3Jpem9udGFsUmV2ZXJzZSlbMF1cclxuICAgICAgICBsZXQgd3JhcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vV3JhcCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsIC8vIGNhcmRQcmltYXJ5LTFIdi10b1xyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBgJHtjYXJkTW9kdWxlLmNhcmR9ICR7Y2FyZE1vZHVsZS5jYXJkUHJpbWFyeX0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fSBiZC1zZXJ2ZXItY2FyZCR7c2VydmVyLnBpbm5lZCA/IFwiIGJkLXNlcnZlci1jYXJkLXBpbm5lZFwiIDogXCJcIn1gfSxcclxuICAgICAgICAgICAgLy8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgLy8gXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIC8vIHsgY2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGZsZXgtMU8xR0tZIGRpcmVjdGlvblJvdy0zdjN0ZkcganVzdGlmeVN0YXJ0LTJ5SVpvMCBhbGlnblN0cmV0Y2gtMWh3eE1hIG5vV3JhcC0zanludjZcIiB9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtyZWY6IFwiaW1nXCIsIGNsYXNzTmFtZTogXCJiZC1zZXJ2ZXItaW1hZ2VcIiwgc3JjOiBzZXJ2ZXIuaWNvblVybCwgb25FcnJvcjogdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpLCBkcmFnZ2FibGU6IGZhbHNlfSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmZsZXhDaGlsZCtcIiBiZC1zZXJ2ZXItY29udGVudFwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcCtcIiBiZC1zZXJ2ZXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1tZW1iZXItY291bnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubWVtYmVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIE1lbWJlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eSBiZC1zZXJ2ZXItZGVzY3JpcHRpb24tY29udGFpbmVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgc2Nyb2xsZXIgYmQtc2VydmVyLWRlc2NyaXB0aW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGRpcmVjdGlvblJvdy0zdjN0Zkcgbm9XcmFwLTNqeW52NiBiZC1zZXJ2ZXItZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4Q2hpbGQtZmFvVlczIGJkLXNlcnZlci10YWdzXCIsIHN0eWxlOiB7ZmxleDogXCIxIDEgYXV0b1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuY2F0ZWdvcmllcy5qb2luKFwiLCBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBjb2xvckdyZWVuLTI5aUFLWVwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiMzYWMxNWNcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZXJyb3IgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBkaXNhYmxlZC05YUYydWdcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjYzEzYTNhXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VydmVyLmVycm9yICYmICF0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwifSwgb25DbGljazogKCkgPT4ge3RoaXMuam9pbigpO319LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGpvaW4oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5qb2luKHRoaXMpO1xyXG4gICAgICAgIC8vdGhpcy5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNjcm9sbGVyIGZyb20gXCIuLi9zY3JvbGxlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NpZGViYXJWaWV3IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzaWRlYmFyLCBjb250ZW50LCB0b29sc30gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2kgdWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyUmVnaW9uLVZGVFVrTiBzaWRlYmFyLXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2tleTogXCJzaWRlYmFyU2Nyb2xsZXJcIiwgcmVmOiBcInNpZGViYXJTY3JvbGxlclwiLCBzaWRlYmFyOiB0cnVlLCBmYWRlOiBzaWRlYmFyLmZhZGUgfHwgdHJ1ZSwgZGFyazogc2lkZWJhci5kYXJrIHx8IHRydWV9LCBzaWRlYmFyLmNvbXBvbmVudClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudFJlZ2lvbi0zbkR1WXkgY29udGVudC1yZWdpb25cIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50VHJhbnNpdGlvbldyYXAtM2hxT0VXIGNvbnRlbnQtdHJhbnNpdGlvbi13cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2QgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAtM1laWGRtIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3QtMjhNU24wIHNjcm9sbGVyVHJhY2stMVpJcHN2XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlci0yNm5jMWUgY29udGVudC1yZWdpb24tc2Nyb2xsZXIgc2Nyb2xsZXJcIiwgcmVmOiBcImNvbnRlbnRTY3JvbGxlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRDb2x1bW4tMmhySVlIIGNvbnRlbnRDb2x1bW5EZWZhdWx0LTFWUWtHTSBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LCBjb250ZW50LmNvbXBvbmVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29scy5jb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1JlbG9hZEljb24gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcclxuICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCIjZGNkZGRlXCIsXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtcmVsb2FkIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnByb3BzLm9uQ2xpY2ssXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge3dpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCIsIGhlaWdodDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwifVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXpcIn0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOiBcIm5vbmVcIiwgZDogXCJNMCAwaDI0djI0SDB6XCJ9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Njcm9sbGVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vc2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5XHJcbiAgICAgICAgbGV0IHNjcm9sbGVyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVySG9yaXpvbnRhbClbMF1cclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhclJlZ2lvblNjcm9sbGVyKVswXVxyXG4gICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSR7dGhpcy5wcm9wcy5mYWRlID8gXCIgXCIrc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZSA6IFwiXCJ9YDtcclxuICAgICAgICBsZXQgc2Nyb2xsZXJDbGFzcyA9IHNjcm9sbGVyTW9kdWxlMS5zY3JvbGxlcitcIiBzY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1Y2sgKi9cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5zaWRlYmFyKSBzY3JvbGxlckNsYXNzICs9IGAgJHtzY3JvbGxlck1vZHVsZTIuc2lkZWJhclJlZ2lvblNjcm9sbGVyfSBzaWRlYmFyLXJlZ2lvbi1zY3JvbGxlcmBcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jb250ZW50Q29sdW1uKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyQ2xhc3MgKz0gXCIgXCIrc2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcitcIiBjb250ZW50LXJlZ2lvbi1zY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMi5jb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwfSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlci13cmFwICAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUcmFja31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyd3JhcFwiLCBjbGFzc05hbWU6IHdyYXBwZXJDbGFzc30sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyXCIsIHJlZjogXCJzY3JvbGxlclwiLCBjbGFzc05hbWU6IHNjcm9sbGVyQ2xhc3N9LFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VjdGlvbnMubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICBpICE9PSAwID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCwge30pIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2V9KSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbXBvbmVudCA9IGJ1dHRvbiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7a2V5OiBcInRpdGxlLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogYnV0dG9uLm9uQ2xpY2t9LCBidXR0b24udGl0bGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgICAgIH0pXTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NUaXRsZSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaEl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9ICF0aGlzLnByb3BzLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCB0aGlzLnByb3BzLmNoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgzIG1hcmdpbi1yZXNldCBtYXJnaW4tcmVzZXQgdWktZmxleC1jaGlsZFwifSwgdGV4dCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3RcclxuXHJcbmNvbnN0IGludGVydmFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkludGVydmFsKVswXVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBvbmVudCwgTWVzc2FnZXMpIHtcclxuICAgIGNsYXNzIFRpbWVSZW5kZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG5ldyBpbnRlcnZhbE1vZHVsZTEuSW50ZXJ2YWwoKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RhcnQoMWUzLCAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZShzZWxmLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RvcCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnREaWRVcGRhdGUoYWN0aXZpdHkpe1xyXG4gICAgICAgICAgICBpZihhY3Rpdml0eS50aW1lc3RhbXBzLmVuZCA9PT0gdGhpcy5wcm9wcy50aW1lc3RhbXBzLmVuZCAmJiBhY3Rpdml0eS50aW1lc3RhbXBzLnN0YXJ0ID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuc3RhcnQpcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0VXBkYXRlZFRpbWUoKXtcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLnByb3BzLnRpbWVzdGFtcHNcclxuICAgICAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCkgLyAxZTM7XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gdGltZXN0YW1wcy5lbmQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihub3csIGNoZWNrVW5peCh0aW1lc3RhbXBzLmVuZCkgLyAxZTMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLnN0YXJ0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZmYoY2hlY2tVbml4KHRpbWVzdGFtcHMuc3RhcnQpIC8gMWUzLCBub3cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogMCxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGltZShudW1iZXIsIHJlbW92ZVplcm8pe1xyXG4gICAgICAgICAgICBpZihyZW1vdmVaZXJvID09PSB1bmRlZmluZWQpcmVtb3ZlWmVybyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gJiYgbnVtYmVyIDw9IDApcmV0dXJuIC0xXHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDEwKXJldHVybiBcIjBcIitudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0RGlmZih0aW1lc3RhbXAsIG5vdyl7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IE1hdGgubWF4KG5vdyAtIHRpbWVzdGFtcCwgMClcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKGhvdXJzKSAlIDYwXHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAvIDYwKSAlIDYwXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogTWF0aC5mbG9vcihob3VycyAvIDM2MDApICUgMjQsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHByb3BzLnRpbWVzdGFtcHNcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VkUHJvcHMgPSBmdW5jdGlvbihwcm9wcywgaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChudWxsID09IHByb3BzKSByZXR1cm4ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB7fVxyXG4gICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5c1tpXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpdGVtcy5pbmRleE9mKGtleSkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHNba2V5XSA9IHByb3BzW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHNcclxuICAgICAgICAgICAgfShwcm9wcywgW1widGltZXN0YW1wc1wiXSlcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gc3RhdGUuaG91cnNcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBzdGF0ZS5taW51dGVzXHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gc3RhdGUuc2Vjb25kc1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnJlbmRlclRpbWUoaG91cnMsICEwKSxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRoaXMucmVuZGVyVGltZShtaW51dGVzKSxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IHRoaXMucmVuZGVyVGltZShzZWNvbmRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZih0aW1lc3RhbXBzLmVuZCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuc3RhcnQgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB1c2VkUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRpbWVSZW5kZXJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrVW5peChlKSB7XHJcbiAgICByZXR1cm4gKFwiXCIgKyBlKS5sZW5ndGggPCAxMyA/IDFlMyAqIGUgOiBlXHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbi8vPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkaXNhYmxlZFBvaW50ZXJFdmVudHMtMXB0Z1RCXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDIzN3B4OyBib3R0b206IDUxcHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwRGlzYWJsZVBvaW50ZXJFdmVudHMtM2VhQkdOXCIgc3R5bGU9XCJvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7XCI+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcktcIj48L2Rpdj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBDb250ZW50LWJxVkxXS1wiPlVzZXIgU2V0dGluZ3M8L2Rpdj5cclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljXCIgc3R5bGU9XCJ0b3A6IDg2MHB4OyBsZWZ0OiA2MzIuNXB4O1wiPlxyXG4vL1x0PGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIHRvb2x0aXBCbGFjay1QUEc0N3ogdG9vbHRpcFRvcC1YRERTeHhcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHRDaGFuZ2Vsb2dcclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5sZXQgVG9vbHRpcENsYXNzZXNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcclxuXHRpZihUb29sdGlwQ2xhc3NlcylyZXR1cm4gVG9vbHRpcENsYXNzZXNcclxuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XHJcbn1cclxubGV0IFRvb2x0aXBMYXllcnNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xyXG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcclxuXHRyZXR1cm4gVG9vbHRpcExheWVycyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwibGF5ZXJcIiwgXCJsYXllckNvbnRhaW5lclwiKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q2xhc3MgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xyXG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xyXG4gICAgaWYgKHRvb2x0aXBDbGFzcykgcmV0dXJuIHRvb2x0aXBDbGFzcztcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcclxufTtcclxuXHJcbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfXB4YDtcclxufTtcclxuXHJcbi8qIDxkaXYgY2xhc3M9XCJsYXllci12OUh5WWMgZGEtbGF5ZXJcIiBzdHlsZT1cImxlZnQ6IDIzNC41cHg7IGJvdHRvbTogNTFweDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyBkYS10b29sdGlwIHRvb2x0aXBUb3AtWEREU3h4IHRvb2x0aXBCbGFjay1QUEc0N3pcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLIGRhLXRvb2x0aXBQb2ludGVyXCI+PC9kaXY+XHJcbiAgICAgICAgVXNlciBTZXR0aW5nc1xyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBjb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpcCAtIHN0cmluZyB0byBzaG93IGluIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zaWRlPXRvcF0gLSBjYW4gYmUgYW55IG9mIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XHJcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLm5vZGUgPSBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHR0aGlzLnNpZGUgPSBzaWRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRcclxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcclxuXHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XHJcblxyXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XHJcblx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMudG9vbHRpcEVsZW1lbnQpO1xyXG5cclxuXHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG5cclxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyh0aGlzLm5vZGUpKTtcclxuXHRcdFx0XHRcdGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXHJcbiAgICBnZXQgY29udGFpbmVyKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzLnNwbGl0KFwiIFwiKVswXStcIiB+IC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdKTsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHRleHQgPSBcIlwifSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gQkRWMi5yZWFjdERvbS5maW5kRE9NTm9kZSh0aGlzKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh0aGlzLm5vZGUsIHRleHQsIHtzdHlsZSwgc2lkZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMudG9vbHRpcDtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1hTdmcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7eG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMTIgMTJcIiwgc3R5bGU6IHt3aWR0aDogXCIxOHB4XCIsIGhlaWdodDogXCIxOHB4XCJ9fSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJnXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJhY2tncm91bmRcIiwgZmlsbDogXCJub25lXCIsIGZpbGxSdWxlOiBcImV2ZW5vZGRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0wIDBoMTJ2MTJIMFwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtjbGFzc05hbWU6IFwiZmlsbFwiLCBmaWxsOiBcIiNkY2RkZGVcIiwgZDogXCJNOS41IDMuMjA1TDguNzk1IDIuNSA2IDUuMjk1IDMuMjA1IDIuNWwtLjcwNS43MDVMNS4yOTUgNiAyLjUgOC43OTVsLjcwNS43MDVMNiA2LjcwNSA4Ljc5NSA5LjVsLjcwNS0uNzA1TDYuNzA1IDZcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJta2RpcnBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9kdWxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJpbXJhZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5YXV6bFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/BetterDiscordApp/src/modules/core.js b/BetterDiscordApp/src/modules/core.js index 7409fe4..ebec3c5 100644 --- a/BetterDiscordApp/src/modules/core.js +++ b/BetterDiscordApp/src/modules/core.js @@ -305,7 +305,10 @@ Core.prototype.initObserver = function () { if(!classNameModal)classNameModal = BDModules.get((e) => e.modal && typeof e.modal === "string" && e.inner && typeof e.inner === "string" && !e.responsiveWidthMobile)[0].modal if (node.classList.contains(classNameLayer)) { - if (node.getElementsByClassName("guild-settings-base-section").length) node.setAttribute("layer-id", "server-settings"); + if (node.getAttribute("aria-label") === "GUILD_SETTINGS"){ + node.setAttribute("layer-id", "server-settings"); + node.setAttribute("id", "server-settings"); + } if (node.getElementsByClassName(classNameSocialLinks).length) { node.setAttribute("layer-id", "user-settings"); diff --git a/BetterDiscordApp/src/modules/pluginCertifier.js b/BetterDiscordApp/src/modules/pluginCertifier.js index c4186b5..799bd9e 100644 --- a/BetterDiscordApp/src/modules/pluginCertifier.js +++ b/BetterDiscordApp/src/modules/pluginCertifier.js @@ -50,6 +50,7 @@ export function checkViruses(hash, data, resultCallback, removeCallback, filenam "BrowserWindow" ]){ if(keyword.toLowerCase().includes(oof.toLowerCase())){ + console.log(oof, keyword) isHarmful = "token stealer/virus" break }