From 9f2ec3939629c49f1e6dbf9cbe2b1f3ec12d4241 Mon Sep 17 00:00:00 2001 From: Jean Ouina Date: Sat, 18 Jul 2020 00:49:00 +0200 Subject: [PATCH] stupid console.log and production build + blur phone numbers --- BetterDiscordApp/js/main.js | 25 +++-- BetterDiscordApp/js/main.min.js | 2 +- BetterDiscordApp/src/modules/blurPrivate.js | 106 ++++++++++--------- BetterDiscordApp/src/ui/ApiPreview.jsx | 8 +- BetterDiscordApp/src/ui/presenceSettings.jsx | 1 - build.js | 2 +- package.json | 2 +- 7 files changed, 79 insertions(+), 67 deletions(-) diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js index 773f971..8d3d917 100644 --- a/BetterDiscordApp/js/main.js +++ b/BetterDiscordApp/js/main.js @@ -1274,9 +1274,17 @@ function getSelectors() { if (!standardSidebarView) return null; let defaultClassName = removeDa(standardSidebarView.standardSidebarView); let selects = []; + let userSettingsAccount = BDModules.get(e => e.userSettingsAccount)[0]; + const children = BDModules.get(e => typeof e.children === "string")[0]; selects.push(`#app-mount .${defaultClassName} .payment-info .${removeDa(BDModules.get(e => e.description && typeof e.description === "string" && e.description.includes("formText"))[0].description)}`); selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.paymentSourceRow)[0].paymentSourceRow)} .${removeDa(BDModules.get(e => e.subText && e.descriptionWrapper)[0].subText)}`); - selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${removeDa(BDModules.get(e => e.viewBody)[0].viewBody)}`); + + if (userSettingsAccount) { + selects.push(`#app-mount .${defaultClassName} .${removeDa(userSettingsAccount.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${removeDa(BDModules.get(e => e.viewBody)[0].viewBody)}`); + selects.push(`.${removeDa(userSettingsAccount.userSettingsSecurity)} .${removeDa(children.children)} > div:nth-child(2)`); + } + + console.log(selects); return selects; } @@ -1291,13 +1299,13 @@ function getSelectors() { selectors = selectors || getSelectors(); if (!selectors) console.error(new Error("Couldn't find selectors to blur personnal informations.")); _domtools__WEBPACK_IMPORTED_MODULE_0__["default"].addStyle("blurPrivate", ` -${selectors[0]}, ${selectors[1]}, ${selectors[2]} { +${selectors.join(", ")} { transition: all 150ms cubic-bezier(.55,.085,.68,.53); filter: blur(4px); opacity: .8; } -${selectors[0]}:hover, ${selectors[1]}:hover, ${selectors[2]}:hover { +${selectors.map(e => e + ":hover").join(", ")} { transition: all 150ms cubic-bezier(.55,.09,.68,.53); filter: none; opacity: 1; @@ -7757,7 +7765,7 @@ class ApiPreview extends React.PureComponent { } }, React.createElement("div", { style: { - backgroundColor: "var(--background-primary)", + backgroundColor: "var(--background-secondary)", padding: "30px 30px", borderRadius: "8px" }, @@ -7772,7 +7780,7 @@ class ApiPreview extends React.PureComponent { } }, React.createElement("div", { style: { - backgroundColor: "var(--background-primary)", + backgroundColor: "var(--background-secondary)", padding: "30px 30px", borderRadius: "8px" }, @@ -7801,7 +7809,7 @@ class ApiPreview extends React.PureComponent { marginTop: "20px", marginBottom: "20px" }}, React.createElement("div", {style: { - backgroundColor: "var(--background-primary)", + backgroundColor: "var(--background-secondary)", padding: "30px 30px", borderRadius: "8px" }, className: "lc-tab-box-shadow" }, @@ -7813,7 +7821,7 @@ class ApiPreview extends React.PureComponent { marginTop: "20px", marginBottom: "20px" }}>
@@ -10478,7 +10486,6 @@ class Profile extends React.Component { activity: activity })).render().props.children; // bypass tracking - console.log(profile); profile.props.style = { width: "auto" }; @@ -12664,4 +12671,4 @@ module.exports = require("yauzl"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsIml0ZW1zIiwidHlwZSIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ1c2VyU2V0dGluZ3NBY2NvdW50Iiwidmlld0JvZHkiLCJCbHVyUHJpdmF0ZSIsImVycm9yIiwiRE9NVG9vbHMiLCJub3JtYWxpemVkUHJlZml4IiwicmFuZENsYXNzIiwic3RvcCIsImhhc1BhdGNoZWQiLCJ1bnBhdGNoQ2xhc3NNb2R1bGVzIiwibW9kdWxlRmlsdGVyIiwicmV2ZXJ0RWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJwYXRjaENsYXNzTW9kdWxlcyIsIm5vcm1hbGl6ZUVsZW1lbnQiLCJwYXRjaERPTU1ldGhvZHMiLCJtb2R1bGVzIiwibW9kdWxlIiwicGF0Y2hDbGFzc01vZHVsZSIsInVucGF0Y2hDbGFzc01vZHVsZSIsInNob3VsZElnbm9yZSIsImlzTmFOIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwiQXJyYXkiLCJpc0FycmF5IiwiX19lc01vZHVsZSIsImJhc2VDbGFzc05hbWUiLCJzcGxpdCIsImNvbXBvbmVudE5hbWUiLCJjbGFzc05hbWVzIiwiY2xhc3NMaXN0Iiwibm9ybWFsQ2xhc3MiLCJjYW1lbENhc2UiLCJzIiwiaSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJqb2luIiwibmV3U3RyaW5nIiwidHJpbSIsImVsZW1lbnQiLCJjbGFzc2VzIiwiYyIsImNsZW4iLCJuZXdDbGFzcyIsImFkZCIsImNoaWxkIiwiY2hpbGRyZW4iLCJuZXh0RWxlbWVudFNpYmxpbmciLCJ0b1JlbW92ZSIsInJlbW92ZSIsImNvbnRhaW5zIiwiRE9NVG9rZW5MaXN0IiwidG9rZW4iLCJ0b2tlbnMiLCJ0IiwiQ29sb3JlZFRleHQiLCJpbmplY3RDb2xvcmVkVGV4dCIsImNhbmNlbENvbG9yZWRUZXh0IiwiTWVzc2FnZUNvbXBvbmVudCIsImJlZm9yZSIsIm1ldGhvZEFyZ3VtZW50cyIsImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQiLCJtZXNzYWdlQ29udGVudCIsImRpc3BsYXlOYW1lIiwib3JpZ2luYWxUeXBlIiwiX19vcmlnaW5hbE1ldGhvZCIsInJvbGVDb2xvciIsImNvbG9yU3RyaW5nIiwic3R5bGUiLCJjb2xvciIsImFzc2lnbiIsInJlbW92ZUNvbG9yZWRUZXh0IiwiY2xhc3NOYW1lTWFya3VwIiwibWFya3VwIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiLCJwYXRoIiwiZnMiLCJNb2R1bGUiLCJnbG9iYWxQYXRocyIsInJlc29sdmUiLCJyZW1vdGUiLCJhcHAiLCJnZXRBcHBQYXRoIiwiTWV0YUVycm9yIiwib3JpZ2luYWxKU1JlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIm9yaWdpbmFsQ1NTUmVxdWlyZSIsInNwbGl0UmVnZXgiLCJlc2NhcGVkQXRSZWdleCIsImFkZG9uQ2FjaGUiLCJ0aW1lQ2FjaGUiLCJ3YXRjaGVycyIsInBhdGNoRXh0ZW5zaW9ucyIsImdldENvbnRlbnRSZXF1aXJlIiwicGx1Z2luc0ZvbGRlciIsIl9wbHVnaW5zRm9sZGVyIiwicmVhbHBhdGhTeW5jIiwiZGF0YVBhdGgiLCJ0aGVtZXNGb2xkZXIiLCJfdGhlbWVzRm9sZGVyIiwibG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUiLCJkYXRhU3RvcmUiLCJnZXRTZXR0aW5nR3JvdXAiLCJzZXRTZXR0aW5nR3JvdXAiLCJlbmNyeXB0U2V0dGluZ3NDYWNoZSIsIkpTT04iLCJwYXJzZSIsImRlY3J5cHRTZXR0aW5nc0NhY2hlIiwiaGFzaCIsInJlc3VsdCIsInN1c3BlY3QiLCJzYXZlQWRkb25DYWNoZSIsInN0cmluZ2lmeSIsIndhdGNoQ29udGVudCIsImNvbnRlbnRUeXBlIiwiaXNQbHVnaW4iLCJiYXNlRm9sZGVyIiwiZmlsZUVuZGluZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkUGx1Z2luIiwidW5sb2FkVGhlbWUiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRQbHVnaW4iLCJsb2FkVGhlbWUiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRUaGVtZSIsInVud2F0Y2hDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsImhhc09sZE1ldGEiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwibWV0YSIsInJhd01ldGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJwYXJzZWQiLCJmb3JtYXQiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwiY2hhckF0IiwibCIsInN1YnN0ciIsInNlbGYiLCJvcmlnaW5hbFJlcXVpcmUiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsImFkZGVkIiwiYXRpbWVNcyIsIm1vZGlmaWVkIiwibXRpbWVNcyIsInNpemUiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsImlzRW1wdHkiLCJleHBvcnRzIiwibWFrZVBsYWNlaG9sZGVyUGx1Z2luIiwiZ2V0TmFtZSIsImdldEF1dGhvciIsImdldERlc2NyaXB0aW9uIiwic291cmNlIiwid2Vic2l0ZSIsImxvYWRDb250ZW50IiwicHJvY2Vzc0ZpbGUiLCJ0aW1lc3RhbXAiLCJmaWxlIiwiaGFybSIsInN0YWNrIiwidW5sb2FkQ29udGVudCIsImNhY2hlIiwiaXNMb2FkZWQiLCJyZWxvYWRDb250ZW50IiwiY2FudFVubG9hZCIsImxvYWROZXdDb250ZW50IiwiYmFzZWRpciIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJjb250ZW50TGlzdCIsInZhbHVlcyIsInJlbW92ZWQiLCJmIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJsb2FkUGx1Z2lucyIsImxvYWRUaGVtZXMiLCJjb25maWciLCJmbGF0IiwidmVyc2lvbiIsIkVEIiwiV2ViU29ja2V0IiwicGF0Y2hBdHRyaWJ1dGVzIiwiaW5pdFNldHRpbmdzIiwiY2hlY2tGb3JHdWlsZHMiLCJpbml0aWFsaXplIiwiaW5pdGlhbGl6ZVNldHRpbmdzIiwiY29udGVudE1hbmFnZXIiLCJhdG9iIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsaWNrIiwiUGx1Z2luQ2VydGlmaWVyIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImluaXRPYnNlcnZlciIsInNob3dDb250ZW50RXJyb3JzIiwicGx1Z2lucyIsInRoZW1lcyIsInByZXZpb3VzVmVyc2lvbiIsInNob3dDaGFuZ2Vsb2dNb2RhbCIsIkVtb2ppTW9kdWxlIiwicGF0Y2hTb2NpYWwiLCJwYXRjaEd1aWxkUGlsbHMiLCJwYXRjaEd1aWxkTGlzdEl0ZW1zIiwicGF0Y2hHdWlsZFNlcGFyYXRvciIsInBhdGNoTWVzc2FnZUhlYWRlciIsInBhdGNoTWVtYmVyTGlzdCIsInBhdGNoQXR0YWNobWVudCIsImhhdmVJbnN0YWxsZWREZWZhdWx0Iiwib25DbG9zZSIsImxvZ28iLCJ0b3AiLCJpbm5lckhUTUwiLCJhdHRyaWJzUGF0Y2hzIiwiY2FuY2VsUGF0Y2hBdHRyaWJ1dGVzIiwidjIiLCJBbmNob3IiLCJlbnN1cmVFeHBvcnRlZCIsInRoZW4iLCJEaXNjb3JkVGFnIiwiRGlzY29yZFRhZ0NvbXAiLCJ1dWlkdjQiLCJiYWRnZURpdiIsImRpc3BsYXkiLCJtYXJnaW5Ub3AiLCJ1c2VyIiwiVG9vbHRpcFdyYXAiLCJzaWRlIiwiaHJlZiIsInRhcmdldCIsIkJETG9nbyIsIkxpZ2h0Y29yZExvZ28iLCJkaXYiLCJhcHBseUJhZGdlcyIsInRpbWVzQ2hlY2tlZCIsIndyYXBwZXIiLCJndWlsZENsYXNzZXMiLCJndWlsZCIsImxpc3RJdGVtIiwiYmxvYiIsImJsb2JDb250YWluZXIiLCJkZWZlckxvYWRlZCIsInJlYWR5U3RhdGUiLCJpbmplY3RFeHRlcm5hbHMiLCJvcmlnaW5hbCIsInNhdmVTZXR0aW5ncyIsImxvYWRTZXR0aW5ncyIsInNldHRpbmciLCJBcGkiLCJnZXRQcmVkaWNhdGVTZWN0aW9ucyIsInNldHRpbmdNb2R1bGUiLCJjYWxsIiwic2VjdGlvbiIsInBvcGVkIiwicG9wIiwicmVuZGVyU2lkZWJhciIsImNsYXNzTmFtZUxheWVyIiwiY2xhc3NOYW1lU29jaWFsTGlua3MiLCJjbGFzc05hbWVNb2RhbCIsIm1haW5PYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtbGVuIiwibXV0YXRpb24iLCJyYXdPYnNlcnZlciIsImFkZGVkTm9kZXMiLCJsYXllciIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwibW9kYWwiLCJpbm5lciIsInJlc3BvbnNpdmVXaWR0aE1vYmlsZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwidG9TdHJpbmciLCJzb2NpYWxNb2R1bGUxIiwibmV3T25lIiwicmV0dXJuVmFsIiwibGluayIsImNsYXNzTmFtZUNvbG9yTXV0ZWQiLCJzaXplcyIsImNsYXNzTmFtZVZlcnNpb25IYXNoIiwiY29sb3JNdXRlZCIsInNpemUzMiIsInZlcnNpb25IYXNoIiwiYnJhbmNoIiwiYWRkaXRpb25hbCIsInJlYWN0Iiwic2l6ZTEyIiwiZWxlY3Ryb24iLCJnZXRHbG9iYWwiLCJjb21taXQiLCJvcmlnaW5hbFZlcnNpb25zIiwic3BsaWNlIiwiZ2V0R3VpbGRDbGFzc2VzIiwiZ3VpbGRzV3JhcHBlciIsImZpbmRCeVByb3BzIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImNoYXQiLCJuZXh0VGljayIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGROb2RlcyIsImJsb2NrRGl2IiwiZGlzdGFudCIsImdldEJhZGdlcyIsImJhZGdlcyIsInN2ZyIsIndpZHRoIiwic2NvcGVzIiwic2NvcGUiLCJjb21wb25lbnQiLCJkaXYyIiwicmVhY3REb20iLCJyZW5kZXIiLCJtZW1iZXJMaXN0UGF0Y2giLCJNZW1iZXJMaXN0SXRlbSIsInJlbmRlckRlY29yYXRvcnMiLCJ1cGRhdGVJbmplY3RvciIsImluamVjdGlvblBhdGgiLCJybXJmIiwieWF1emwiLCJta2RpcnAiLCJyZXF1ZXN0IiwicGFyZW50UGF0aCIsImZvbGRlck5hbWUiLCJ6aXBMaW5rIiwic2F2ZWRaaXAiLCJleHRyYWN0ZWRGb2xkZXIiLCJzdWNjZXNzIiwiZW5jb2RpbmciLCJyZXNwb25zZSIsInN0YXR1c0NvZGUiLCJhbHJlYWR5RXhpc3RzIiwicmVzIiwiZXhpc3RzIiwicmVuYW1lIiwicm91bmQiLCJwZXJmb3JtYW5jZSIsIndyaXRlRmlsZSIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsInppcCIsIm9uIiwiZW50cnkiLCJmaWxlTmFtZSIsInJlYWRFbnRyeSIsImZ1bGxQYXRoIiwic3luYyIsImRpcm5hbWUiLCJvcGVuUmVhZFN0cmVhbSIsInJlYWRTdHJlYW0iLCJwaXBlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJvbmNlIiwiYmFja3VwRm9sZGVyIiwidW5saW5rIiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJyZWxlYXNlQ2hhbm5lbCIsImdsb2JhbHMiLCJnZXRSZWxlYXNlQ2hhbm5lbCIsInN0YWJsZSIsImNhbmFyeSIsInB0YiIsInBsdWdpbkRhdGEiLCJCREZpbGUiLCJ3cml0ZUZpbGVTeW5jIiwic2V0dGluZ3NGaWxlIiwidW5saW5rU3luYyIsIl9pbmplY3Rpb25QYXRoIiwiYmFzZSIsInJvYW1pbmdCYXNlIiwiZ2V0UGF0aCIsInJvYW1pbmdMb2NhdGlvbiIsInJlYWxMb2NhdGlvbiIsImNvbmZpZ0ZpbGUiLCJfY29uZmlnRmlsZSIsIl9CREZpbGUiLCJfc2V0dGluZ3NGaWxlIiwiZ2V0UGx1Z2luRmlsZSIsIkRldk1vZGUiLCJkZWJ1Z0xpc3RlbmVyIiwiY29weVNlbGVjdG9yTGlzdGVuZXIiLCJzdGFydERlYnVnTGlzdGVuZXIiLCJzdGFydENvcHlTZWxlY3RvciIsInN0b3BEZWJ1Z0xpc3RlbmVyIiwic3RvcENvcHlTZWxlY3RvciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ3aGljaCIsInByZXZlbnREZWZhdWx0Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwic2VsZWN0b3IiLCJnZXRTZWxlY3RvciIsImNsYXNzTGF5ZXIiLCJjbGFzc0l0ZW1zIiwiZGlzYWJsZWRQb2ludGVyRXZlbnRzIiwibWVudSIsImF0dGFjaCIsImNtIiwicXVlcnkiLCJjb250YWluZXIiLCJsYXllckNvbnRhaW5lciIsImNtV3JhcCIsInN0eWxlRmxleGlibGUiLCJhY2NvbW1vZGF0ZVNjcm9sbGJhciIsImFwcGVuZCIsImNsaWVudFkiLCJsZWZ0IiwiY2xpZW50WCIsInNjcm9sbGVyQ2xhc3NlcyIsInNjcm9sbGVyV3JhcCIsInNjcm9sbGVyVGhlbWVkIiwidGhlbWVHaG9zdEhhaXJsaW5lIiwic2Nyb2xsZXIiLCJyZW1vdmVDTSIsImtleUNvZGUiLCJjbWciLCJjbWkiLCJpdGVtIiwibGFiZWxDb250YWluZXIiLCJjb2xvckRlZmF1bHQiLCJsYWJlbCIsIk5hdGl2ZU1vZHVsZSIsImNvcHkiLCJlbGVtZW50cyIsInF1ZXJ5QWxsIiwiZm9jdXNlZCIsInNlcGFyYXRvciIsInNjcm9sbEhlaWdodCIsImVsIiwibmFtZXMiLCJwYXJlbnROb2RlIiwidW5zaGlmdCIsIm93bmVyRG9jdW1lbnQiLCJ0YWdOYW1lIiwiZnJvbSIsImVudHJpZXMiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwiZ2V0UnVsZXMiLCJzdHlsZVNoZWV0cyIsInNoZWV0cyIsInJ1bGVzIiwiY3NzUnVsZXMiLCJlbGVtZW50UnVsZXMiLCJzZWxlY3RvclRleHQiLCJtYXRjaGVzIiwiRGlzYWJsZVR5cGluZyIsInN0YXJ0VHlwaW5nIiwidHlwaW5nTW9kdWxlIiwiZGlzYWJsZWQiLCJzdG9wVHlwaW5nIiwicmFuZG9tIiwidiIsImF3YWl0aW5nQmFkZ2VzUHJvbWlzZXMiLCJiYWRnZXNUb0ZldGNoIiwiRGlzdGFudFNlcnZlciIsIl9jYWNoZSIsIm5ld1Byb21pc2UiLCJDb25zdGFudHMiLCJkZWZhdWx0VXNlcnMiLCJmZXRjaGVkQmFkZ2VzIiwidXNlcnMiLCJoYW5kbGVSZXF1ZXN0IiwiUm91dGVzIiwic3RhdHVzIiwicmVzcG9uc2VCb2R5IiwianNvbiIsInByb21pc2UiLCJ1c2VyX2lkIiwiY2F0Y2giLCJMaWdodGNvcmRFcnJvciIsInJvdXRlIiwicmVqZWN0Iiwibm9kZUZldGNoIiwiU0VSVkVSX1VSTCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiQnVnSHVudGVyQmFkZ2UiLCJDaXJjdXMiLCJoZWFkIiwic2NyaXB0Iiwic3JjIiwib25sb2FkIiwiYW5pbWF0ZSIsInRpbWluZyIsIl8iLCJ1cGRhdGUiLCJkdXJhdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpbWUiLCJ0aW1lRnJhY3Rpb24iLCJwcm9ncmVzcyIsIlEiLCJwYXJzZUhUTUwiLCJpc0hUTUwiLCJOb2RlTGlzdCIsInNvbWUiLCJuIiwibm9kZVR5cGUiLCJiYXNlRWxlbWVudCIsImh0bWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY2xvbmVOb2RlIiwiZXNjYXBlSFRNTCIsInRleHROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJzcGFuRWxlbWVudCIsIm5vZGVWYWx1ZSIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImNsYXNzbmFtZSIsImluZGljYXRvciIsImhhc0NsYXNzIiwiZXZlcnkiLCJyZXBsYWNlQ2xhc3MiLCJvbGROYW1lIiwibmV3TmFtZSIsImFwcGVuZFRvIiwidGhpc05vZGUiLCJ0aGF0Tm9kZSIsInByZXBlbmRUbyIsInByZXBlbmQiLCJpbnNlcnRBZnRlciIsInRhcmdldE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsIm5ld05vZGUiLCJuZXh0IiwibmV4dEFsbCIsIm5leHRVbnRpbCIsInByZXZpb3VzIiwicHJldmlvdXNBbGwiLCJwcmV2aW91c1VudGlsIiwiaW5kZXhJblBhcmVudCIsIm51bSIsImluZGV4IiwicGFyZW50IiwiZmluZENoaWxkIiwiZmluZENoaWxkcmVuIiwicGFyZW50cyIsImNsb3Nlc3QiLCJwYXJlbnRzVW50aWwiLCJzaWJsaW5ncyIsImF0dHJpYnV0ZSIsImdsb2JhbCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJ0ZXh0Q29udGVudCIsIm91dGVyV2lkdGgiLCJvZmZzZXRXaWR0aCIsIm91dGVySGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwib2Zmc2V0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGlzdGVuZXJzIiwiX2xpc3RlbmVycyIsImV2ZW50IiwiZGVsZWdhdGUiLCJuYW1lc3BhY2UiLCJoYXNEZWxlZ2F0ZSIsImV2ZW50RnVuYyIsImNhbmNlbCIsIm5ld0NhbmNlbCIsImZpbmRJbmRleCIsIl9fb2ZmQWxsIiwibWF0Y2hGaWx0ZXIiLCJsaXN0ZW5lciIsImRlZmF1bHRGaWx0ZXIiLCJvbk1vdW50Q2hhbmdlIiwib25Nb3VudCIsIndyYXBwZWRDYWxsYmFjayIsIm9ic2VydmVyIiwibm9kZXMiLCJyZW1vdmVkTm9kZXMiLCJkaXJlY3RNYXRjaCIsInBhcmVudE1hdGNoIiwib25Vbm1vdW50Iiwib25BZGRlZCIsIndyYXAiLCJkb21XcmFwcGVyIiwicmVzb2x2ZUVsZW1lbnQiLCJFbW9qaVJlZ2V4IiwiQ3VzdG9tRW1vamlNb2R1bGUiLCJDdXN0b21FbW9qaSIsIkVtb2ppTW9kdWxlQXBpIiwiZ2V0Q3VzdG9tRW1vamlCeUlkIiwiQXV0b2NvbXBsZXRlTW9kdWxlIiwiQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMiLCJnZXRBdXRvY29tcGxldGVPcHRpb25zIiwiRW1vamlNb2R1bGVRdWVyeSIsInF1ZXJ5RW1vamlSZXN1bHRzIiwiTWVzc2FnZXMiLCJFTU9KSV9NQVRDSElORyIsImd1aWxkTW9kdWxlIiwiZ2V0R3VpbGQiLCJnZXRHdWlsZHMiLCJpc0ZldGNoaW5nIiwiZW1vamlTZWFyY2giLCJnZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0IiwiTElHSFRDT1JEX0VNT0pJUyIsImFyZzEiLCJhcmcyIiwiY29uZGl0aW9uIiwic2V0RW1vamlVc2FibGUiLCJxdWVyeVJlc3VsdHMiLCJyZXN1bHRzIiwicmVuZGVyUmVzdWx0cyIsIkQiLCJlbW9qaXMiLCJFTU9KSSIsIkVtb2ppIiwiZW1vamkiLCJ1bmlxdWVOYW1lIiwic2VudGluZWwiLCJndWlsZElkIiwiZ2V0UGxhaW5UZXh0IiwiaXNBbmltYXRlZCIsImFuaW1hdGVkIiwibWFuYWdlZCIsIm9yaWdpbmFsTmFtZSIsImdldFJhd1RleHQiLCJjYW5jZWxFbW9qaVJlbmRlciIsImNhbmNlbEVtb3RlUmVuZGVyIiwibmV3Q29udGVudCIsImhhc1BhcnNlZCIsImV4ZWMiLCJyYXciLCJ3b3JkcyIsIndvcmQiLCJhcnIiLCJlbW9qaUlkIiwianVtYm9hYmxlIiwicmVkdWNlIiwiY3VycmVudCIsInNoaWZ0IiwibyIsInUiLCJkIiwib25DbGljayIsIm9uSG92ZXIiLCJSIiwicHJlZml4IiwiVGl0bGUiLCJFbW9qaUZpbHRlck1vZHVsZSIsImlzRW1vamlEaXNhYmxlZCIsImlzVXNhYmxlIiwidXNhYmxlIiwic3Vycm9nYXRlcyIsImRpdmVyc2l0eSIsImNhY2hlMiIsInByb2Nlc3NBdHRhY2htZW50IiwiaXNUcnVzdGVkIiwiY2hlY2tWaXJ1c2VzIiwicmVzdWx0Q2FsbGJhY2siLCJyZW1vdmVDYWxsYmFjayIsImlzSGFybWZ1bCIsImtleXdvcmQiLCJvb2YiLCJub19jb21tZW50cyIsInJlZ2V4cHMiLCJyZWdleCIsImhhc2hUb1VybCIsImNoZWNrSGFzaCIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsInVzZXJBZ2VudCIsIl9fcGF0aCIsImlzRnJvbUxvYWRlciIsImNyeXB0byIsIkJ1ZmZlciIsImFsbG9jIiwiY3JlYXRlUmVhZFN0cmVhbSIsImNodW5rIiwiY29uY2F0IiwiaGFzaFJlc3VsdCIsImRpZ2VzdCIsInJlbmRlclRvRWxlbWVudHMiLCJmbG93ZXJTdGFyTW9kdWxlIiwiZmxvd2VyU3RhckNvbnRhaW5lciIsImNoaWxkTW9kdWxlIiwiY2hpbGRDb250YWluZXIiLCJib3JkZXJDb2xvciIsIm5leHROb2RlIiwiY29uZmlybVRleHQiLCJkYW5nZXIiLCJvbkNhbmNlbCIsIm9uQ29uZmlybSIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwidG9vbHRpcFdyYXAiLCJ2aWV3Qm94IiwieCIsInkiLCJtYXNrIiwiZmlsbCIsInBvaW50ZXJFdmVudHMiLCJvZmZpY2lhbCIsInNwYW4iLCJmbG9hdCIsImZsb3dlclN0YXIiLCJnZXRLZXllZEFycmF5IiwiYnVmZmVyIiwiaW5zdGFsbFBhdGgiLCJjdXJzb3IiLCJzdHJva2UiLCJzYXZlIiwiT2JqZWN0U3RvcmFnZSIsImxvY2FsU3RvcmFnZU1vZHVsZSIsImxvY2FsU3RvcmFnZSIsImltcGwiLCJidG9hIiwic2V0SW50ZXJ2YWwiLCJzYWZlSlNPTlBhcnNlIiwiZ2VuZXJhdGVLZXkiLCJkZWNpcGhlciIsImRlY3J5cHRlZCIsImZpbmFsIiwiY2lwaGVyIiwiZW5jcnlwdGVkIiwiUGx1Z2luTW9kdWxlIiwibG9hZFBsdWdpbkRhdGEiLCJsb2FkIiwic2F2ZVBsdWdpbkRhdGEiLCJjaGFubmVsU3dpdGNoIiwic3RhcnRQbHVnaW4iLCJzdG9wUGx1Z2luIiwiZW5hYmxlUGx1Z2luIiwiZGlzYWJsZVBsdWdpbiIsInRvZ2dsZVBsdWdpbiIsInAiLCJmaWxlbmFtZU9yTmFtZSIsImJkcGx1Z2luIiwiZGVsZXRlIiwiZWRpdCIsIm9wZW5JdGVtIiwidXBkYXRlUGx1Z2luTGlzdCIsInNhdmVkIiwibmV3TWVzc2FnZSIsIm9uTWVzc2FnZSIsIm9uU3dpdGNoIiwiVjJfUHVibGljU2VydmVycyIsIl9hcHBlbmRCdXR0b24iLCJMYXllciIsInJvb3RJZCIsIlYyQ19QdWJsaWNTZXJ2ZXJzIiwicm9vdCIsIl9yb290IiwiaW5qZWN0Um9vdCIsImNsYXNzTmFtZUxheWVycyIsImxheWVycyIsImJ1dHRvbiIsImJ0biIsImNpcmNsZUJ1dHRvbk1hc2siLCJjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lciIsImRvd25sb2FkUHJvZ3Jlc3MiLCJ0dXRvcmlhbENvbnRhaW5lciIsImFkZEJ1dHRvbiIsImd1aWxkUGF0Y2giLCJHdWlsZExpc3QiLCJ3ZWJwYWNrTW9kdWxlcyIsIkd1aWxkTGlzdE9sZCIsInJlbW92ZUJ1dHRvbiIsIkJEU2lkZWJhckhlYWRlciIsIlB1cmVDb21wb25lbnQiLCJzaWRlYmFyQ29tcG9uZW50cyIsIkhlYWRlciIsIkl0ZW0iLCJjaGFuZ2Vsb2dCdXR0b24iLCJIaXN0b3J5IiwicmVuZGVyZWQiLCJpc0NsZWFyaW5nQ2FjaGUiLCJWMl9TZXR0aW5nc1BhbmVsIiwidXBkYXRlU2V0dGluZ3MiLCJzaWRlYmFyIiwiVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIiwicmVnaXN0ZXJDb21wb25lbnRzIiwicmVnaXN0ZXIiLCJtYWtlQ29tcG9uZW50IiwibGlnaHRjb3JkQ29tcG9uZW50IiwiUHJlc2VuY2VDb21wb25lbnQiLCJBY2NvdW50SW5mb3NDb21wb25lbnQiLCJBcGlQcmV2aWV3Q29tcG9uZW50IiwiY29yZUNvbXBvbmVudCIsImN1c3RvbUNzc0NvbXBvbmVudCIsInJlbmRlckFkZG9uUGFuZSIsImNsYXNzU2lkZWJhciIsImNvbnRlbnRSZWdpb24iLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiY29yZVNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJjYXRlZ29yaWVzIiwiU2V0Iiwic2VjdGlvbnMiLCJsaWdodGNvcmRTZXR0aW5ncyIsIlByZXNlbmNlU2V0dGluZ3MiLCJNc2dMb2dTZXR0aW5ncyIsImNoZWNrZWQiLCJwdWJsaWNTZXJ2ZXJzTW9kdWxlIiwidm9pY2VNb2RlIiwidGZIb3VyIiwiY29sb3JlZFRleHQiLCJkTW9kZSIsIlNldHRpbmdzIiwiZGV2TW9kZSIsImZvcmNlVXBkYXRlIiwiY2FsbFJpbmdpbmdCZWF0Iiwic2V0dGluZ3NTdG9yZSIsInNob3dDdXJyZW50R2FtZSIsInVwZGF0ZVJlbW90ZVNldHRpbmdzIiwiZ2V0Q3VycmVudFdpbmRvdyIsInNldEFsd2F5c09uVG9wIiwiQW50aUFkRE0iLCJibHVyUHJpdmF0ZSIsImRpc2FibGVUeXBpbmciLCJhcHBTZXR0aW5ncyIsInJlbGF1bmNoIiwiZXhpdCIsIlNlY3Rpb25lZFNldHRpbmdzUGFuZWwiLCJNYXJnaW5Ub3AiLCJpc0NoZWNrZWQiLCJTd2l0Y2giLCJDb21wb25lbnRzIiwiaW5wdXRzIiwiQnV0dG9uIiwibG9vayIsImhvdmVyQ29sb3IiLCJpcGMiLCJzZW5kIiwiYXJndiIsInF1aXQiLCJzZXNzaW9uIiwiY2xlYXJDYWNoZSIsIlYyQ19QcmVzZW5jZVNldHRpbmdzIiwiVjJDX0FjY291bnRJbmZvcyIsIkFwaVByZXZpZXciLCJDc3NFZGl0b3IiLCJDb250ZW50TGlzdCIsIkNvbXBvbmVudCIsIm9yaWdpbmFsUmVuZGVyIiwiZW51bWVyYWJsZSIsIkNhcmRMaXN0IiwiU2V0dGluZ0NvbXBvbmVudCIsInBhbmVscyIsInBhbmVsIiwiZ2V0Q29tcG9uZW50IiwiTENpdGVtcyIsIkxDRGV2SXRlbXMiLCJUaGVtZU1vZHVsZSIsImxvYWRUaGVtZURhdGEiLCJ0aGVtZSIsInVuZXNjYXBlIiwic2F2ZVRoZW1lRGF0YSIsImVuYWJsZVRoZW1lIiwiZGlzYWJsZVRoZW1lIiwidG9nZ2xlVGhlbWUiLCJiZHRoZW1lIiwidXBkYXRlVGhlbWVMaXN0IiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJ0cmFuc3BhcmVudCIsImZyYW1lIiwiY2hhckNvZGVBdCIsImdldFRleHRBcmVhIiwiY2hhbm5lbFRleHRBcmVhIiwidGl0bGVXcmFwcGVyIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwiZm9jdXMiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImV4ZWNDb21tYW5kIiwibW9kdWxlTmFtZSIsImdyb3VwQ29sbGFwc2VkIiwiZ3JvdXBFbmQiLCJlc2NhcGUiLCJwYXJhbXMiLCJpbnN0ZWFkIiwic2lsZW50IiwiZm9yY2UiLCJvcmlnTWV0aG9kIiwiY2FuY2VsZWQiLCJjYW5jZWxQYXRjaCIsIm9yaWdpbmFsTWV0aG9kIiwiY2FsbE9yaWdpbmFsTWV0aG9kIiwidGVtcFJldCIsIl9fbW9ua2V5UGF0Y2hlZCIsImRpc2Nvbm5lY3QiLCJoYXNOb3RpY2UiLCJtZW1iZXJsaXN0IiwibWVtYmVyc1dyYXAiLCJmb3JtIiwicmlnaHQiLCJib3R0b20iLCJ0b2FzdFdyYXBwZXIiLCJpY29uIiwidGltZW91dCIsInRvYXN0RWxlbSIsImlubmVyVGV4dCIsIm1vZGFsTW9kdWxlIiwiaGlkZU9uRnVsbHNjcmVlbiIsImhlYWRlck1vZHVsZSIsImhlYWRlciIsImZvb3RlcjJNb2R1bGUiLCJmb2N1c0xvY2siLCJiYWNrZHJvcCIsImJhY2tkcm9wV2l0aExheWVyIiwiY2xvc2luZ0xpc3RlbmVycyIsInBsdWdpbkVycm9ycyIsInRoZW1lRXJyb3JzIiwiZ2VuZXJhdGVUYWIiLCJ0YWJzIiwiTW9kYWxTdGFjayIsIkNoYW5nZWxvZ0NsYXNzZXMiLCJUZXh0RWxlbWVudCIsIkZsZXhDaGlsZCIsIlRpdGxlcyIsIkNoYW5nZWxvZyIsImRlZmF1bHRQcm9wcyIsInNlbGVjdGFibGUiLCJNYXJrZG93blBhcnNlciIsImltYWdlIiwic3VidGl0bGUiLCJjZSIsImNoYW5nZWxvZ0l0ZW1zIiwibWFyZ2luIiwicmVuZGVySGVhZGVyIiwiQ2hpbGQiLCJncm93Iiwic2hyaW5rIiwidGFnIiwiVGFncyIsIkg0IiwiU2l6ZXMiLCJTTUFMTCIsIkNvbG9ycyIsIlNUQU5EQVJEIiwiZGF0ZSIsInJlbmRlckZvb3RlciIsIkFuY2hvckNsYXNzZXMiLCJhbmNob3IiLCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyIiwiam9pblN1cHBvcnRTZXJ2ZXIiLCJqb2luQkQyIiwic3VwcG9ydExpbmsiLCJkZWZhdWx0Rm9vdGVyIiwib25TY3JvbGwiLCJNYXJrZG93biIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiZW1wdHlGdW5jdGlvbiIsInJlZCIsIlYyIiwiZWRpdG9yRGV0YWNoZWQiLCJyZXEiLCJ3ZWJwYWNrSnNvbnAiLCJfX2V4dHJhX2lkX18iLCJzaG91bGRQcm90ZWN0IiwidGhlTW9kdWxlIiwiY2xlYXIiLCJzb3J0IiwiZ2V0VG9rZW4iLCJnZXRFbWFpbCIsInNob3dUb2tlbiIsInByb3RlY3QiLCJpc0RlZmF1bHQiLCJtb2QiLCJwcm94eSIsImZ1bmMiLCJfX3Byb3RvX18iLCJwcm9wTmFtZXMiLCJwcm90b05hbWVzIiwicHJvdG9Qcm9wIiwiaW50ZXJuYWwiLCJqb2luQkQxIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJsZWF2ZUJEMSIsIkd1aWxkQWN0aW9ucyIsImxlYXZlR3VpbGQiLCJsZWF2ZUJEMiIsImpvaW5MQyIsImxlYXZlTEMiLCJyZWFjdENvbXBvbmVudCIsImFuY2hvckNsYXNzZXMiLCJzbGF0ZUVkaXRvckNsYXNzZXMiLCJtZXNzYWdlQ2xhc3NlcyIsInVucmVhZE1lbnRpb25zQmFyIiwiZ3VpbGRzRXJyb3IiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIlRvb2x0aXBXcmFwcGVyIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwiTGF5ZXJTdGFjayIsIlVzZXJTdG9yZSIsIkNoYW5uZWxTdG9yZSIsIkNoYW5uZWxBY3Rpb25zIiwiUHJpdmF0ZUNoYW5uZWxBY3Rpb25zIiwib3BlbkRNIiwidXNlcklkIiwic2VsZklkIiwicHJpdmF0ZUNoYW5uZWxJZCIsImdldERNRnJvbVVzZXJJZCIsInNlbGVjdFByaXZhdGVDaGFubmVsIiwib3BlblByaXZhdGVDaGFubmVsIiwicGFyc2VTZXR0aW5ncyIsIlZvaWNlTW9kZSIsInByb2ZpbE1vZHVsZSIsImZldGNoTXV0dWFsRnJpZW5kcyIsIkxpZ2h0Y29yZFVzZXJCYWRnZSIsIm1hcmdpbk1vZHVsZTIiLCJkZWZhdWx0TWFyZ2luaDUiLCJjb2xvck1vZHVsZSIsImNvbG9yU3RhbmRhcmQiLCJzaXplTW9kdWxlIiwic2Nyb2xsYmFyTW9kdWxlMSIsInNjcm9sbGJhckdob3N0SGFpcmxpbmUiLCJHdWlsZE1vZHVsZSIsImdldFJlbGF0aW9uc2hpcHMiLCJzZXNzaW9uTW9kdWxlIiwiZ2V0U2Vzc2lvbnMiLCJzaXplMTQiLCJoNSIsImdldFByb2ZpbGVWYWx1ZSIsImdldFN0YXRpc3RpY3MiLCJnZXRTZXNzaW9uVmFsdWUiLCJtYXJnaW5Cb3R0b20yMCIsInNlc3Npb25zUmF3Iiwic2Vzc2lvbnMiLCJzZXNzaW9uSWQiLCJjbGllbnRJbmZvIiwib3MiLCJjbGllbnQiLCJhY3Rpdml0aWVzIiwicmVwZWF0IiwiY3JlYXRlZEF0IiwiYXZhdGFyVVJMIiwiYXZhdGFyIiwiZ2V0QXZhdGFyVVJMIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZmxhZ3MiLCJoYXNQcmVtaXVtU3Vic2NyaXB0aW9uIiwiZW1haWwiLCJtZmFFbmFibGVkIiwibW9iaWxlIiwicGhvbmUiLCJ2ZXJpZmllZCIsInJlbGF0aW9ucyIsImZyaWVuZHMiLCJpc0ZyaWVuZCIsImlzQmxvY2tlZCIsImhpZ2h0bGlnaHRKUyIsImhpZ2hsaWdodCIsIm1lc3NhZ2VNb2R1bGUxIiwibWVzc2FnZU1vZHVsZTIiLCJDb2RlQ29udGVudCIsIl9faHRtbCIsImxhbmd1YWdlIiwibWFyZ2luQm90dG9tOCIsInNldHRpbmdUaXRsZSIsImZvcm1Nb2R1bGUiLCJzdGF0ZXMiLCJGb3JtU2VjdGlvbiIsImFsbENvbXBvbmVudHMiLCJjb21wIiwiQWxsUHJldmlld3MiLCJ0YWIiLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwiZ2V0UHJvcHMiLCJyZW5kZXJQcmV2aWV3IiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsImJvcmRlclJhZGl1cyIsInJlbmRlckNvZGUiLCJnZW5lcmF0ZUNvZGUiLCJnZXRTdHJGb3JQcm9wIiwiY29tcFBhdGgiLCJsYW5nIiwiU3RyaW5nIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb21wTmFtZSIsImNvbXBDYXRlZ29yeSIsInByb3BTdHJpbmdzIiwiY2hpbGRyZW5Qcm9wIiwic3RyIiwib3BlblRhZyIsImNsb3NlVGFnIiwidmlzaWJsZUtleSIsInByb3BPYmplY3QiLCJpc0xhc3QiLCJpc0ZpcnN0IiwiY2hpbGRyZW5EYXRhIiwiaGVscCIsIm1hcmdpbkJvdHRvbSIsInJlbmRlcnMiLCJWMkNfUGx1Z2luQ2FyZCIsInNob3dTZXR0aW5ncyIsInNldEluaXRpYWxTdGF0ZSIsImhhc1NldHRpbmdzIiwiYWRkb24iLCJnZXRTZXR0aW5nc1BhbmVsIiwicmVsb2FkcyIsInRydXN0ZWQiLCJjbG9zZVNldHRpbmdzIiwicGFuZWxSZWYiLCJzZXR0aW5nc09wZW4iLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWZzIiwic2V0dGluZ3NwYW5lbCIsInNldEltbWVkaWF0ZSIsImlzSGlkZGVuIiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsImNhcmROb2RlIiwidGhpc05vZGVPZmZzZXQiLCJjb250YWluZXJPZmZzZXQiLCJlbmRQb2ludCIsImdldFN0cmluZyIsInNldHRpbmdzQ29tcG9uZW50IiwicmVmIiwiWFN2ZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWVJbmRleCIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwicG9wTGF5ZXIiLCJtYWtlTGluayIsIm1ha2VCdXR0b24iLCJhY3Rpb24iLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVubW91bnRlZCIsImxpbmtzIiwiaW52aXRlIiwidGVzdGVyIiwiZG9uYXRlIiwicGF0cmVvbiIsImF1dGhvcklkIiwiYXV0aG9yTGluayIsImlzU2Nhbm5pbmciLCJUb29sdGlwIiwiYXNjZW5kaW5nIiwiaXNQbHVnaW5zIiwicmV2ZXJzZSIsIm9uQWRkb25DaGFuZ2VzIiwiY29tcG9uZW50RGlkTW91bnQiLCJiZEV2ZW50cyIsIm9wZW5Gb2xkZXIiLCJzaG91bGREZWxldGUiLCJjb25maXJtRGVsZXRlIiwic29ydE9wdGlvbnMiLCJkaXJlY3Rpb25zIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJnZXRBZGRvbnMiLCJzb3J0ZWRBZGRvbnMiLCJiIiwiY2FwIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwicmVuZGVyQ2hlY2tVcGRhdGVzIiwiWmVyZXNQbHVnaW5MaWJyYXJ5IiwiUGx1Z2luVXBkYXRlcyIsImNoZWNrQWxsIiwibWFyZ2luTGVmdCIsInJlZnJlc2hJY29uIiwiYWRkb25DYXJkcyIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJvcGFjaXR5IiwiVjJDX0NoZWNrYm94IiwiY2hlY2tib3hFbGVtZW50IiwiY2hlY2tib3giLCJjaGVja2JveElubmVyIiwiU2VsZWN0IiwiZHJvcGRvd24iLCJjcmVhdGVSZWYiLCJzaG93TWVudSIsImhpZGVNZW51Iiwib3B0IiwiaXNPcGVuIiwiU2VhcmNoIiwib25LZXlEb3duIiwicGxhY2Vob2xkZXIiLCJWMkNfQ29udGVudENvbHVtbiIsImNvbnRlbnRNb2R1bGUiLCJjb250ZW50Q29sdW1uIiwiY29udGVudENvbHVtbkRlZmF1bHQiLCJWMkNfQ3NzRWRpdG9yIiwibGluZXMiLCJkZXRhY2hlZEVkaXRvciIsIlYyQ19Dc3NFZGl0b3JEZXRhY2hlZCIsInVwZGF0ZUNzcyIsInNhdmVDc3MiLCJkZXRhY2giLCJkZXRhY2hlZCIsImVkaXRvciIsImFjZSIsInNldFRoZW1lIiwic2V0TW9kZSIsInNldFNob3dQcmludE1hcmdpbiIsInNldEZvbnRTaXplIiwiZGVzdHJveSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsImRldGFjaGVkUm9vdCIsImNvZGVNaXJyb3IiLCJsaW5lTnVtYmVycyIsIm1vZGUiLCJpbmRlbnRVbml0Iiwic2Nyb2xsYmFyU3R5bGUiLCJfY2NzcyIsImNjc3MiLCJ1cGRhdGVMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJTZXR0aW5nc1RpdGxlIiwiQ2hlY2tib3giLCJib3JkZXJSaWdodCIsImJvcmRlckxlZnQiLCJmb250U2l6ZSIsImFyZyIsImdldFZhbHVlIiwiZHJvb3QiLCJpbmplY3REZXRhY2hlZFJvb3QiLCJCREVycm9yQm91bmRhcnkiLCJoYXNFcnJvciIsImNvbXBvbmVudERpZENhdGNoIiwiRGVsZXRlIiwiRG93bkFycm93IiwiRWRpdCIsIm1hcmdpbk1vZHVsZSIsIm1hcmdpblRvcDYwIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIiwicHJldmlldyIsImlzZmV0Y2hpbmciLCJhc3NldENvbXBvbmVudHMiLCJ1cGRhdGVXaGVuRmV0Y2hlZCIsImRlZmF1bHRTZXR0aW5nIiwiUlBDUHJvcHMiLCJhc3NldCIsInVwZGF0ZVByZXZpZXciLCJvcHRpb25zQ29tcG9uZW50cyIsIm9oZ29kb2hmdWNrIiwiX29wdGlvbnNDb21wb25lbnRzIiwiYXJyYXkiLCJpbnB1dFRleHRNb2R1bGVzIiwiSW5wdXRUZXh0IiwicmVtb3ZlS2V5YmluZCIsIl9ob3Jpem9udGFsIiwiaW5wdXRNaW5pIiwic2l6ZTE2Iiwic2l6ZTIwIiwiaW5wdXQiLCJsYXN0RWRpdGVkIiwiaXNUaW1pbmciLCJyb3dNb2R1bGUiLCJmbGV4TW9kdWxlIiwiaW5wdXRNb2R1bGUiLCJzaXplTW9kdWxlMiIsInJvdyIsImZsZXhDaGlsZCIsIklucHV0TnVtYmVyTW9kdWxlcyIsIklucHV0TnVtYmVyIiwiY29sb3JUcmFuc3BhcmVudCIsInNldFZhbHVlIiwiY2xpcGJvYXJkIiwiSW5wdXRDaG9pY2VNb2R1bGVzIiwiSW5wdXRDaG9pY2UiLCJEaXZpZGVyTW9kdWxlcyIsIkRpdmlkZXIiLCJkaXZpZGVyIiwiZGl2aWRlckRlZmF1bHQiLCJEaXNjb3JkQnV0dG9uIiwiUnBjUHJldmlldyIsImFjdGl2ZSIsImNoYW5nZVRhYiIsImFuY2llbnRUYWIiLCJzZXRBY3RpdmUiLCJmbGV4IiwicnBjIiwiaXNBY3RpdmUiLCJQcm9maWxlIiwiUG9wb3V0IiwiVGFiIiwiZW1wdHlDbGFzc2VzIiwiUHJlc2VuY2VFcnJvckNhdGNoZXIiLCJlcnJJbmZvIiwiZW1wdHlTdGF0ZUltYWdlIiwiZW1wdHlTdGF0ZUhlYWRlciIsImVtcHR5U3RhdGVTdWJ0ZXh0IiwicG9wb3V0TW9kdWxlcyIsIlVzZXJQb3BvdXRDb21wb25lbnQiLCJQb3BvdXRQcm9wcyIsIlVzZXJQb3BvdXQiLCJyZW5kZXIxIiwiY2hhbm5lbElkIiwiZGlzYWJsZVVzZXJQcm9maWxlTGluayIsInJlbmRlcjIiLCJyZW5kZXIzIiwicG9wb3V0IiwiZXhjbHVkZVByb3BlcnRpZXMiLCJwcm9maWxlTW9kdWxlcyIsIlVzZXJQcm9maWxlQ29tcG9uZW50IiwiUHJvZmlsZVByb3BzIiwiY29ubmVjdGVkUHJvZmlsZVN0b3JlIiwiVXNlclByb2ZpbGUiLCJyZW5kZXI0IiwicHJvZmlsZSIsIlYyQ19MYXllciIsImtleXVwTGlzdGVuZXIiLCJ0cmFuc2Zvcm0iLCJjb21wb25lbnRXaWxsTW91bnQiLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiR3VpbGRTdG9yZSIsIkF2YXRhckRlZmF1bHRzIiwiU29ydGVkR3VpbGRTdG9yZSIsInNlbGVjdGVkQ2F0ZWdvcnkiLCJsb2FkaW5nIiwic2VydmVycyIsImNvbm5lY3Rpb24iLCJmZXRjaCIsInNlcnZlciIsImpvaW5lZCIsImVuZCIsInRlcm0iLCJjYXRlZ29yeUJ1dHRvbnMiLCJ0b3RhbCIsInNidiIsImNvbnRlbnRTY3JvbGxlciIsInNlcnZlckNhcmQiLCJwaW5uZWQiLCJhY2NlcHRJbnZpdGUiLCJpbnZpdGVfY29kZSIsImpvaW5FbmRQb2ludCIsImlkZW50aWZpZXIiLCJjcmVkZW50aWFscyIsIndpbmRvd09wdGlvbnMiLCJzY3JlZW5YIiwic2NyZWVuWSIsImpvaW5XaW5kb3ciLCJCcm93c2VyV2luZG93Iiwid2ViQ29udGVudHMiLCJsb2FkVVJMIiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiY2VudGVyIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJiZFNlcnZlciIsIm9ubGluZSIsIm1lbWJlcnMiLCJpY29uVXJsIiwibmF0aXZlam9pbiIsInNlcnZlcjIiLCJndWlsZExpc3QiLCJnZXRGbGF0dGVuZWRHdWlsZElkcyIsImRlZmF1bHRMaXN0IiwiREVGQVVMVF9BVkFUQVJTIiwiU2VydmVyQ2FyZCIsImZhbGxiYWNrIiwiZmxvb3IiLCJjb25uZWN0RW5kUG9pbnQiLCJTaWRlYmFyVmlldyIsInRvb2xzIiwiVG9vbHMiLCJUYWJCYXJTZXBhcmF0b3IiLCJzZWFyY2hJbnB1dCIsIlRhYkJhckhlYWRlciIsIlRhYkJhckl0ZW0iLCJtYXhMZW5ndGgiLCJzZWFyY2hpbnB1dCIsIm5vdENvbm5lY3RlZCIsImNvbHVtbk1vZHVsZSIsIm1pbkhlaWdodCIsImxpbmVIZWlnaHQiLCJWMkNfU2VydmVyQ2FyZCIsImltYWdlRXJyb3IiLCJjYXJkTW9kdWxlIiwiY2FyZCIsImNhcmRQcmltYXJ5IiwiX2hvcml6b250YWxSZXZlcnNlIiwid3JhcE1vZHVsZSIsIm5vV3JhcCIsInN0cmVhbWVyTW9kZUVuYWJsZWQiLCJvbkVycm9yIiwiaGFuZGxlRXJyb3IiLCJkcmFnZ2FibGUiLCJob3Jpem9udGFsIiwiVjJDX1NpZGViYXJWaWV3IiwiU2Nyb2xsZXIiLCJmYWRlIiwiZGFyayIsIlYyQ19SZWxvYWRJY29uIiwieG1sbnMiLCJWMkNfU2Nyb2xsZXIiLCJzY3JvbGxlck1vZHVsZTEiLCJzY3JvbGxlckhvcml6b250YWwiLCJzY3JvbGxlck1vZHVsZTIiLCJzaWRlYmFyUmVnaW9uU2Nyb2xsZXIiLCJ3cmFwcGVyQ2xhc3MiLCJzY3JvbGxlckZhZGUiLCJzY3JvbGxlckNsYXNzIiwiY29udGVudFJlZ2lvblNjcm9sbGVyIiwiY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcCIsInRoZW1lR2hvc3QiLCJzY3JvbGxlclRyYWNrIiwiVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwiLCJTZXR0aW5nc0dyb3VwIiwiVjJDX1NldHRpbmdzR3JvdXAiLCJidXR0b25Db21wb25lbnQiLCJWMkNfU2V0dGluZ3NUaXRsZSIsImNsYXNzbmFtZXMiLCJnZXRDbGFzc05hbWUiLCJTd2l0Y2hJdGVtIiwiYmV0YSIsInVzZXJTZXR0aW5nc1ZvaWNlIiwiVjJDX1RhYkJhckhlYWRlciIsIlYyQ19UYWJCYXJJdGVtIiwiVjJDX1RhYkJhclNlcGFyYXRvciIsImludGVydmFsTW9kdWxlMSIsIkludGVydmFsIiwiVGltZVJlbmRlciIsIl9pbnRlcnZhbCIsImdldFVwZGF0ZWRUaW1lIiwiZ2V0RGlmZiIsImNoZWNrVW5peCIsImhvdXJzIiwibWludXRlcyIsInNlY29uZHMiLCJyZW5kZXJUaW1lIiwibnVtYmVyIiwicmVtb3ZlWmVybyIsInVzZWRQcm9wcyIsIlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORCIsIlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX1NUQVJUIiwiVjJDX1Rvb2xzIiwidG9vbHNNb2R1bGUiLCJ0b29sc0NvbnRhaW5lciIsImNvbnRhaW5lck1vZHVsZSIsImNsb3NlQnV0dG9uIiwiY2xvc2VCdXR0b25Cb2xkIiwia2V5YmluZCIsImtleWJpbmRCb2xkIiwiVG9vbHRpcENsYXNzZXMiLCJnZXRUb29sdGlwQ2xhc3NlcyIsIlRvb2x0aXBMYXllcnMiLCJnZXRUb29sdGlwTGF5ZXJzIiwiZ2V0Q2xhc3MiLCJzaWRlT3JDb2xvciIsInVwcGVyQ2FzZSIsInRvb2x0aXBDbGFzcyIsImNsYXNzRXhpc3RzIiwidG9QeCIsIkVtdWxhdGVkVG9vbHRpcCIsInByZXZlbnRGbGlwIiwidG9vbHRpcEVsZW1lbnQiLCJ0b29sdGlwIiwibGFiZWxFbGVtZW50IiwidG9vbHRpcENvbnRlbnQiLCJwb2ludGVyRWxlbWVudCIsInRvb2x0aXBQb2ludGVyIiwicG9wb3V0cyIsImNhblNob3dBYm92ZSIsImNhblNob3dCZWxvdyIsImNhblNob3dMZWZ0IiwiY2FuU2hvd1JpZ2h0IiwiX2NsYXNzTmFtZSIsInNob3dBYm92ZSIsInNob3dCZWxvdyIsInNob3dMZWZ0Iiwic2hvd1JpZ2h0IiwiY2VudGVySG9yaXpvbnRhbGx5IiwiY2VudGVyVmVydGljYWxseSIsIm5vZGVjZW50ZXIiLCJmaW5kRE9NTm9kZSIsIlYyQ19YU3ZnIl0sIm1hcHBpbmdzIjoiOztRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNB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QUNra0IsS0FBTCxDQUFXaGpCLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ3VyRCxXQUFLLEVBQUUsNEJBQVI7QUFBc0NwdEIsYUFBTyxFQUFFLFdBQS9DO0FBQTREbnJCLFdBQUssRUFBRTtBQUFDbVQsYUFBSyxFQUFFLE1BQVI7QUFBZ0JpUCxjQUFNLEVBQUU7QUFBeEI7QUFBbkUsS0FGRyxFQUdIdDJCLG1EQUFJLENBQUNra0IsS0FBTCxDQUFXaGpCLGFBQVgsQ0FDSSxHQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFLFlBQVo7QUFBMEJzK0IsVUFBSSxFQUFFLE1BQWhDO0FBQXdDdWUsY0FBUSxFQUFFO0FBQWxELEtBRkosRUFHSWgrQyxtREFBSSxDQUFDa2tCLEtBQUwsQ0FBV2hqQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUMrNkIsT0FBQyxFQUFFO0FBQUosS0FBakMsQ0FISixFQUlJajhCLG1EQUFJLENBQUNra0IsS0FBTCxDQUFXaGpCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsZUFBUyxFQUFFLE1BQVo7QUFBb0JzK0IsVUFBSSxFQUFFLFNBQTFCO0FBQXFDeEQsT0FBQyxFQUFFO0FBQXhDLEtBQWpDLENBSkosQ0FIRyxDQUFQO0FBVUg7O0FBaEJxRCxDOzs7Ozs7Ozs7OztBQ0YxRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxxQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7Ozs7QUNBQSxpQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSxrQyIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJpbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgbWluaW11bURpc2NvcmRWZXJzaW9uID0gXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBjdXJyZW50RGlzY29yZFZlcnNpb24gPSAod2luZG93LkRpc2NvcmROYXRpdmUgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uKCkpIHx8IFwiMC4wLjMwNlwiO1xyXG5leHBvcnQgY29uc3QgbWluU3VwcG9ydGVkVmVyc2lvbiA9IFwiMC4zLjBcIjtcclxuZXhwb3J0IGNvbnN0IGJiZFZlcnNpb24gPSBcIjAuMy40XCI7XHJcbi8qXHJcbmV4cG9ydCBjb25zdCBMQ0NoYW5lbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiTGlnaHRjb3JkJ3MgY2hhbmdlbG9nXCIsXHJcbiAgICBjaGFuZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJXaGF0J3MgTmV3P1wiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgaXMgbm93IGF2YWlsYWJsZSAhXCIsXHJcbiAgICAgICAgICAgICAgICBcIldlIHJlbW92ZWQgZW1vdGVzLiBUaGF0J3Mgc2FkIGZvciBwZW9wbGUgd2hvIHdlcmUgYWN0dWFsbHkgdXNpbmcgaXQsIGJ1dCBpdCB3YXMgbGVhZGluZyB0byBtb3JlIGxvYWRpbmcgdGltZSBhbmQgc29tZSBiYXNpYyB3b3JkcyB3ZXJlIGVtb3RlLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgaW1hZ2U6IFwiaHR0cHM6Ly9pLmltZ3VyLmNvbS9zZk5ocXdQLnBuZ1wiLFxyXG4gICAgdGl0bGU6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICBzdWJ0aXRsZTogXCJ2XCIrcmVtb3RlLmdldEdsb2JhbChcIkJ1aWxkSW5mb1wiKS52ZXJzaW9uLFxyXG4gICAgZm9vdGVyOiAoZnVuY3Rpb24oKXtcclxuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcclxuICAgICAgICBjb25zdCBNb2RhbFN0YWNrID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJwdXNoXCIsIFwidXBkYXRlXCIsIFwicG9wXCIsIFwicG9wV2l0aEtleVwiKTtcclxuICAgICAgICBpZighVGV4dEVsZW1lbnQgfHwgIU1vZGFsU3RhY2spcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcclxuICAgICAgICBjb25zdCBqb2luU3VwcG9ydFNlcnZlciA9IChjbGljaykgPT4ge1xyXG4gICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgTW9kYWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgQkRWMi5qb2luTEMoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge29uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIikgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xyXG4gICAgICAgIHJldHVybiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dEVsZW1lbnQsIHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xyXG4gICAgfSkoKVxyXG59Ki9cclxuZXhwb3J0IGNvbnN0IGJiZENoYW5nZWxvZyA9IHtcclxuICAgIGRlc2NyaXB0aW9uOiBcIkJCRCdzIGNoYW5nZWxvZy5cIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIioqTGlnaHRjb3JkKiogaXMgbm93IHVzaW5nIEJhbmRhZ2VkQkQuIFRoYXQgbWVhbnMgYWxsIHBsdWdpbnMgeW91IHdlcmUgdXNpbmcgY2FuIGJlIHVzZWQgdG9vICFcIixcclxuICAgICAgICAgICAgICAgIFwiKipXaW5kb3cgVHJhbnNwYXJlbmN5KiogY2hhbmdlcyB3ZXJlIG1hZGUgdG8gbW9yZSBjb21wYXRpYmxlIHdpdGggZXh0ZXJuYWwgd2luZG93IG1hbmFnZXJzIGFuZCBhZGRvbnMgbGlrZSBHbGFzc3Ryb24uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGhhcyBvbmNlIGFnYWluIGJlZW4gY2hhbmdlZCBzbGlnaHRseSB0byBob3BlZnVsbHkgaW1wcm92ZSBsb2FkaW5nIHRpbWVzLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICBdXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3MgPSB7XHJcbiAgICBcIkN1c3RvbSBjc3MgbGl2ZSB1cGRhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTBcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXHJcbiAgICBcIkN1c3RvbSBjc3MgYXV0byB1ZHBhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTFcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXHJcbiAgICBcIkJldHRlckRpc2NvcmQgQmx1ZVwiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtYlwiLCAgaW5mbzogXCJSZXBsYWNlIERpc2NvcmQgYmx1ZSB3aXRoIEJEIEJsdWVcIiwgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiBmYWxzZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCJ9LFxyXG5cclxuICAgIC8qIENvcmUgKi9cclxuICAgIC8qID09PT09PSAqL1xyXG4gICAgXCJQdWJsaWMgU2VydmVyc1wiOiAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTFcIiwgIGluZm86IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIk1pbmltYWwgTW9kZVwiOiAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMlwiLCAgaW5mbzogXCJIaWRlIGVsZW1lbnRzIGFuZCByZWR1Y2UgdGhlIHNpemUgb2YgZWxlbWVudHMuXCIsICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiVm9pY2UgTW9kZVwiOiAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy00XCIsICBpbmZvOiBcIk9ubHkgc2hvdyB2b2ljZSBjaGF0XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJIaWRlIENoYW5uZWxzXCI6ICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTNcIiwgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkRhcmsgTW9kZVwiOiAgICAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtNVwiLCAgaW5mbzogXCJNYWtlIGNlcnRhaW4gZWxlbWVudHMgZGFyayBieSBkZWZhdWx0KHdpcClcIiwgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiVm9pY2UgRGlzY29ubmVjdFwiOiAgICAgICAgICAge2lkOiBcImJkYS1kYy0wXCIsICBpbmZvOiBcIkRpc2Nvbm5lY3QgZnJvbSB2b2ljZSBzZXJ2ZXIgd2hlbiBjbG9zaW5nIERpc2NvcmRcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCIyNCBIb3VyIFRpbWVzdGFtcHNcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLTZcIiwgIGluZm86IFwiUmVwbGFjZSAxMmhyIHRpbWVzdGFtcHMgd2l0aCBwcm9wZXIgb25lc1wiLCAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkNvbG9yZWQgVGV4dFwiOiAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtN1wiLCAgaW5mbzogXCJNYWtlIHRleHQgY29sb3IgdGhlIHNhbWUgYXMgcm9sZSBjb2xvclwiLCAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTm9ybWFsaXplIENsYXNzZXNcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNFwiLCBpbmZvOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuXHJcbiAgICAvKiBDb250ZW50ICovXHJcbiAgICBcIkNvbnRlbnQgRXJyb3IgTW9kYWxcIjogICAgICAgIHtpZDogXCJmb3JrLXBzLTFcIiwgaW5mbzogXCJTaG93cyBhIG1vZGFsIHdpdGggcGx1Z2luL3RoZW1lIGVycm9yc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJTY2FuIFBsdWdpbnNcIjogICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy02XCIsIGluZm86IFwiU2NhbiBwbHVnaW5zIGZvciBhbnkgdGhyZWF0IHRoYXQgY2FuIGJlIGhpZGRlbiBpbnNpZGUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNob3cgVG9hc3RzXCI6ICAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTJcIiwgaW5mbzogXCJTaG93cyBhIHNtYWxsIG5vdGlmaWNhdGlvbiBmb3IgaW1wb3J0YW50IGluZm9ybWF0aW9uXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjcm9sbCBUbyBTZXR0aW5nc1wiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTNcIiwgaW5mbzogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiQXV0b21hdGljIExvYWRpbmdcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNVwiLCBpbmZvOiBcIkF1dG9tYXRpY2FsbHkgbG9hZHMsIHJlbG9hZHMsIGFuZCB1bmxvYWRzIHBsdWdpbnMgYW5kIHRoZW1lc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJFbmFibGUgRWRpdCBCdXR0b25cIjogICAgICAgICB7aWQ6IFwiZm9yay1wcy03XCIsIGluZm86IFwiRW5hYmxlIGFuIEVkaXQgQnV0dG9uIG9uIHRoZSBwbHVnaW4gYW5kIHRoZW1lIHBhbmVsLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG5cclxuICAgIC8qIERldmVsb3BlciAqL1xyXG4gICAgXCJEZXZlbG9wZXIgTW9kZVwiOiAgICAgICAgIFx0ICB7aWQ6IFwiYmRhLWdzLThcIiwgaW5mbzogXCJEZXZlbG9wZXIgTW9kZSBUb2dnbGVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuICAgIFwiQ29weSBTZWxlY3RvclwiOlx0XHRcdCAge2lkOiBcImZvcmstZG0tMVwiLCBpbmZvOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuICAgIFwiUmVhY3QgRGV2VG9vbHNcIjpcdFx0XHQgIHtpZDogXCJyZWFjdERldlRvb2xzXCIsIGluZm86IFwiQWRkcyByZWFjdCBkZXZlbG9wZXIgdG9vbHMgdG8gdGhlIGRldnRvb2xzLiBNdXN0IGJlIGluc3RhbGxlZCBpbiBHb29nbGUgQ2hyb21lIG9uIHlvdXIgcGMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCAqL1xyXG4gICAgXCJEaXNhYmxlIEJldHRlckRpc2NvcmRcIjogICAgICB7aWQ6IFwiYmQtZGlzYWJsZVwiLCAgaW5mbzogXCJEaXNhYmxlIEJldHRlcmRpc2NvcmQgKHBsdWdpbnMsIHRoZW1lcywgZXRjKSAoTm90IGltcGxlbWVudGVkKS5cIiwgaW1wbGVtZW50ZWQ6IGZhbHNlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQmx1ciBQZXJzb25hbCBJbmZvcm1hdGlvblwiOiAge2lkOiBcImxpZ2h0Y29yZC02XCIsIGluZm86IFwiQmx1ciBzZW5zaXRpdmUgaW5mb3JtYXRpb25zIGxpa2UgZW1haWwsIHBheW1lbnQgaW5mb3MgYW5kIG1vcmUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQ2FsbGluZyBSaW5nIEJlYXRcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0yXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyBzcGVjaWFsIGNhbGxpbmcgYmVhdC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJEZXZlbG9wZXIgT3B0aW9uc1wiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTFcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzICYgTGlnaHRjb3JkJ3MgSW50ZXJuYWwgRGV2ZWxvcGVyIE9wdGlvbnMuIFRoaXMgYWxsb3cgdGhlIFxcXCJFeHBlcmltZW50c1xcXCIgdGFiLCB0aGUgXFxcIkRldmVsb3BlciBPcHRpb25zXFxcIiB0YWIgYW5kIHRoZSBcXFwiTGlnaHRjb3JkIEFwaVxcXCIgc2VjdGlvbi5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJBZCBCbG9ja1wiOiAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTRcIiwgaW5mbzogXCJCbG9jayBhbnkgQk9UIHRoYXQgZG1zIHlvdSB3aXRoIGFuIGludml0ZSBsaW5rLiBFdmVuIGluIGFuIGVtYmVkLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiAgIHtpZDogXCJsaWdodGNvcmQtNVwiLCBpbmZvOiBcIkVuYWJsZSBMaWdodGNvcmQncyBzZXJ2ZXJzLiBEaXNhYmxpbmcgdGhpcyB3aWxsIGRpc2FibGUgY3VzdG9tIGJhZGdlcy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJEaXNhYmxlIHR5cGluZ1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTdcIiwgaW5mbzogXCJEb24ndCBsZXQgb3RoZXIgc2VlIHlvdSdyZSB0eXBpbmcuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiTGlnaHRjb3JkIFRhYnNcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC04XCIsIGluZm86IFwiQWxsb3dzIHlvdSB0byBsYXVuY2ggbXVsdGlwbGUgaW5zdGFuY2VzIG9mIExpZ2h0Y29yZCBpbiB0aGUgc2FtZSB3aW5kb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiLCBleHBlcmltZW50YWw6IHRydWV9LFxyXG5cclxuICAgIC8qKiBMaWdodGNvcmQgV2luZG93ICovXHJcbiAgICBcIkFsd2F5cy1vbi1Ub3BcIjogICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtM1wiLCBpbmZvOiBcIkVuYWJsZSB0aGUgd2luZG93J3MgQWx3YXlzLW9uLVRvcCBtb2RlLCB3aGVyZSBMaWdodGNvcmQgc3RheXMgb24gdG9wIG9mIG90aGVyIGFwcGxpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXCJObyBXaW5kb3cgQm91bmRzXCI6ICAgICAgICAgICB7aWQ6IFwibm9fd2luZG93X2JvdW5kXCIsIGluZm86IFwiRGlzYWJsZSBXaW5kb3cgQm91bmRzLiBDYW4gYmUgdXNlZnVsIGlmIHlvdSB1c2UgYSB3aW5kb3cgbWFuYWdlci5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogcHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJsaW51eFwiLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFwiRW5hYmxlIEdsYXNzdHJvblwiOiAgICAgICAgICAge2lkOiBcImVuYWJsZV9nbGFzc3Ryb25cIiwgaW5mbzogXCJFbmFibGUgR2xhc3N0cm9uLiBJZiB5b3UncmUgbm90IHVzaW5nIHRyYW5zcGFyZW50IHRoZW1lcywgdGhpcyBjYW4gcmVkdWNlIGxhZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXHJcbiAgICAvKiogUmljaFByZXNlbmNlICovXHJcbiAgICBcIkVuYWJsZVwiOiAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiLCBpbmZvOiBcIkVuYWJsZSBSaWNoUHJlc2VuY2UgYmVsb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwic3RhdHVzXCJ9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdENvb2tpZSA9IHtcclxuICAgIFwiYmRhLWdzLTFcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLTJcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy0zXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTVcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLTZcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy03XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtOFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtMFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtMVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtMlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtNFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLTZcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTdcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLWJcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy04XCI6IHRydWUsXHJcbiAgICBcImJkYS1kYy0wXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtY3NzLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMVwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLTlcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1kbS0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXBzLTFcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0yXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtM1wiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTRcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy01XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNlwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTdcIjogZmFsc2UsXHJcbiAgICBcImZvcmstZXMtMlwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstd3AtMVwiOiBmYWxzZSxcclxuICAgIFwiZm9yay13cC0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWJldGFcIjogdHJ1ZSxcclxuICAgIFwicmVhY3REZXZUb29sc1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0yXCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtM1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTRcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC01XCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC02XCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC03XCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtOFwiOiBmYWxzZSxcclxuICAgIFwibm9fd2luZG93X2JvdW5kXCI6IGZhbHNlLFxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5nc0Nvb2tpZSA9IHt9O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzUlBDID0ge307XHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0UlBDID0ge1xyXG4gICAgXCJuYW1lXCI6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICBcImFwcGxpY2F0aW9uX2lkXCI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCIsXHJcbiAgICBcInN0YXRlXCI6IFwiTGlnaHRjb3JkIENsaWVudFwiLFxyXG4gICAgXCJkZXRhaWxzXCI6IFwiQnJvd3NpbmcgRGlzY29yZFwiLFxyXG4gICAgXCJ0aW1lc3RhbXBzLnN0YXJ0XCI6IERhdGUubm93KCksXHJcbiAgICBcImFzc2V0cy5zbWFsbFwiOiBudWxsLFxyXG4gICAgXCJhc3NldHMubGFyZ2VcIjogXCI3MTIzMjM4MjEwMzc2ODI3OTFcIlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYmRwbHVnaW5FcnJvcnMgPSBbXTtcclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVFcnJvcnMgPSBbXTsgLy8gZGVmaW5lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG5cclxuZXhwb3J0IGNvbnN0IGJkQ29uZmlnID0gT2JqZWN0LmNyZWF0ZShCZXR0ZXJEaXNjb3JkQ29uZmlnKTtcclxuXHJcbmV4cG9ydCBjb25zdCBiZHRoZW1lcyA9IHt9O1xyXG5leHBvcnQgY29uc3QgYmRwbHVnaW5zID0ge307XHJcblxyXG5leHBvcnQgY29uc3QgcGx1Z2luQ29va2llID0ge307XHJcbmV4cG9ydCBjb25zdCB0aGVtZUNvb2tpZSA9IHt9OyIsImltcG9ydCBsb2NhbFN0b3JhZ2VGaXggZnJvbSBcIi4vbG9jYWxTdG9yYWdlRml4XCI7XHJcbmltcG9ydCBsb2FkaW5nSWNvbiBmcm9tIFwiLi9sb2FkaW5nSWNvblwiO1xyXG5sb2NhbFN0b3JhZ2VGaXgoKTtcclxubG9hZGluZ0ljb24oKTtcclxuXHJcbmNvbnN0IGRlcHJlY2F0ZUdsb2JhbCA9IChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAvLyB2YWx1ZSA9IHR5cGVvZih2YWx1ZSkgIT09IFwib2JqZWN0XCIgPyB2YWx1ZSA6IG5ldyBQcm94eSh2YWx1ZSwge1xyXG4gICAgLy8gICAgIGdldDogZnVuY3Rpb24ob2JqLCBtb2QpIHtcclxuICAgIC8vICAgICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIG9ialttb2RdO1xyXG4gICAgLy8gICAgIH0sXHJcbiAgICAvLyAgICAgc2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KG1vZCkpIHJldHVybiBVdGlscy5lcnIoXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBcIlRyeWluZyB0byBvdmVyd3JpdGUgZGVwcmVjYXRlZCBCRCBnbG9iYWxzXCIpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywga2V5LCB7XHJcbiAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRlZCBHbG9iYWxcIiwgYFwiJHtrZXl9XCIgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gUGxlYXNlIG9ubHkgdXNlIEJkQXBpLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7ICBcclxufTtcclxuXHJcblxyXG5pbXBvcnQgKiBhcyBHbG9iYWxzIGZyb20gXCIuLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBnbG9iYWxLZXlzID0gT2JqZWN0LmtleXMoR2xvYmFscyk7XHJcbmZvciAoY29uc3Qga2V5IG9mIGdsb2JhbEtleXMpIGRlcHJlY2F0ZUdsb2JhbChrZXksIEdsb2JhbHNba2V5XSk7XHJcblxyXG5cclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL21vZHVsZXMvYmRBcGlcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9tb2R1bGVzL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vbW9kdWxlcy9jbGFzc05vcm1hbGl6ZXJcIjtcclxuXHJcbmRlcHJlY2F0ZUdsb2JhbChcIkJEVjJcIiwgQkRWMik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInBsdWdpbk1vZHVsZVwiLCBwbHVnaW5Nb2R1bGUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJ0aGVtZU1vZHVsZVwiLCB0aGVtZU1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIlV0aWxzXCIsIFV0aWxzKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRFdmVudHNcIiwgQkRFdmVudHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJzZXR0aW5nc1BhbmVsXCIsIHNldHRpbmdzUGFuZWwpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJEYXRhU3RvcmVcIiwgRGF0YVN0b3JlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQ29udGVudE1hbmFnZXJcIiwgQ29udGVudE1hbmFnZXIpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDbGFzc05vcm1hbGl6ZXJcIiwgQ2xhc3NOb3JtYWxpemVyKTtcclxuXHJcbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xyXG5cclxuaW1wb3J0IENvcmUgZnJvbSBcIi4vbW9kdWxlcy9jb3JlXCI7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIENvcmUpO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3JlV3JhcHBlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihiZENvbmZpZywgbWV0aG9kcykge1xyXG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGJkQ29uZmlnKTtcclxuICAgICAgICBDb3JlLnNldE1ldGhvZHMobWV0aG9kcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICAvLyBkZXByZWNhdGVHbG9iYWwoXCJtYWluQ29yZVwiLCB0aGlzLm1haW5Db3JlKTtcclxuICAgICAgICBDb3JlLmluaXQoKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gZnVuY3Rpb24gcGF0Y2hNb2R1bGVMb2FkKCkge1xyXG4vLyAgICAgY29uc3QgbmFtZXNwYWNlID0gXCJiZXR0ZXJkaXNjb3JkXCI7XHJcbi8vICAgICBjb25zdCBwcmVmaXggPSBgJHtuYW1lc3BhY2V9L2A7XHJcbi8vICAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpO1xyXG4vLyAgICAgY29uc3QgbG9hZCA9IE1vZHVsZS5fbG9hZDtcclxuLy8gICAgIC8vIGNvbnN0IHJlc29sdmVGaWxlbmFtZSA9IE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lO1xyXG5cclxuLy8gICAgIE1vZHVsZS5fbG9hZCA9IGZ1bmN0aW9uKHJlcXVlc3QpIHtcclxuLy8gICAgICAgICBpZiAocmVxdWVzdCA9PT0gbmFtZXNwYWNlIHx8IHJlcXVlc3Quc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbi8vICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RlZCA9IHJlcXVlc3Quc3Vic3RyKHByZWZpeC5sZW5ndGgpO1xyXG4vLyAgICAgICAgICAgICBpZiAocmVxdWVzdGVkID09IFwiYXBpXCIpIHJldHVybiBCZEFwaTtcclxuLy8gICAgICAgICB9XHJcblxyXG4vLyAgICAgICAgIHJldHVybiBsb2FkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbi8vICAgICB9O1xyXG5cclxuLy8gICAgIC8vIE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lID0gZnVuY3Rpb24gKHJlcXVlc3QsIHBhcmVudCwgaXNNYWluKSB7XHJcbi8vICAgICAvLyAgICAgaWYgKHJlcXVlc3QgPT09IFwiYmV0dGVyZGlzY29yZFwiIHx8IHJlcXVlc3Quc3RhcnRzV2l0aChcImJldHRlcmRpc2NvcmQvXCIpKSB7XHJcbi8vICAgICAvLyAgICAgICAgIGNvbnN0IGNvbnRlbnRQYXRoID0gUGx1Z2luTWFuYWdlci5nZXRQbHVnaW5QYXRoQnlNb2R1bGUocGFyZW50KTtcclxuLy8gICAgIC8vICAgICAgICAgaWYgKGNvbnRlbnRQYXRoKSByZXR1cm4gcmVxdWVzdDtcclxuLy8gICAgIC8vICAgICB9XHJcblxyXG4vLyAgICAgLy8gICAgIHJldHVybiByZXNvbHZlRmlsZW5hbWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuLy8gICAgIC8vIH07XHJcblxyXG4vLyAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4vLyAgICAgICAgIE1vZHVsZS5fbG9hZCA9IGxvYWQ7XHJcbi8vICAgICB9O1xyXG4vLyB9XHJcblxyXG4vLyBwYXRjaE1vZHVsZUxvYWQoKTtcclxuXHJcbi8vIHZhciBzZXR0aW5nc1BhbmVsLCB2b2ljZU1vZGUsLCBkTW9kZSwgcHVibGljU2VydmVyc01vZHVsZTtcclxuLy8gdmFyIGJkQ29uZmlnID0gbnVsbDsiLCJleHBvcnQgZGVmYXVsdCAoKSA9PiB7XHJcbiAgICBjb25zdCB2MkxvYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB2MkxvYWRlci5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XHJcbiAgICB2MkxvYWRlci50aXRsZSA9IFwiQmFuZGFnZWRCRCBpcyBsb2FkaW5nLi4uXCI7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHYyTG9hZGVyKTtcclxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dHZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIpLmdldDtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRXaW5kb3cgPSBSZWZsZWN0LmFwcGx5KGNvbnRlbnRXaW5kb3dHZXR0ZXIsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHkoY29udGVudFdpbmRvdywge1xyXG4gICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IG9ialtwcm9wXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdmFsLmJpbmQob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGludGVyY2VwdGlvbiBieSBwYXRjaGluZyBSZWZsZWN0LmFwcGx5IGFuZCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3QsIFwiYXBwbHlcIiwge3ZhbHVlOiBSZWZsZWN0LmFwcGx5LCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIFwiYmluZFwiLCB7dmFsdWU6IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuXHJcbiAgICBjb25zdCBvT3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuO1xyXG4gICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgaWYgKHVybC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpL3dlYmhvb2tzXCIpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShvT3BlbiwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVEZIb3VyIHtcclxuICAgIGluamVjdDI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdHdlbHZlSG91ciA9IG5ldyBSZWdFeHAoYChbMC05XXsxLDJ9KTooWzAtOV17MSwyfSlcXFxccyhBTXxQTSlgKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBkYXRhLnJldHVyblZhbHVlLm1hdGNoKHR3ZWx2ZUhvdXIpO1xyXG4gICAgICAgICAgICBpZiAoIW1hdGNoZWQgfHwgbWF0Y2hlZC5sZW5ndGggIT09IDQpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZWRbM10gPT09IFwiQU1cIikgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIwMFwiIDogbWF0Y2hlZFsxXS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIxMlwiIDogcGFyc2VJbnQobWF0Y2hlZFsxXSkgKyAxMn06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvenkgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiY2FsZW5kYXJGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb3p5IG1vZGVcclxuICAgICAgICBjb25zdCBjYW5jZWxDb21wYWN0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImRhdGVGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb21wYWN0IG1vZGVcclxuICAgICAgICB0aGlzLmNhbmNlbDI0SG91ciA9ICgpID0+IHtjYW5jZWxDb3p5KCk7IGNhbmNlbENvbXBhY3QoKTt9OyAvLyBDYW5jZWwgYm90aFxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZTI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHRoaXMuY2FuY2VsMjRIb3VyKCk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXJcclxuY29uc3QgQ2hhbm5lbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldENoYW5uZWwgJiYgZS5kZWZhdWx0Lmhhc0NoYW5uZWwpWzBdLmRlZmF1bHRcclxubGV0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cclxubGV0IERNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cclxuXHJcbmNvbnN0IGJsb2NrZWQgPSB7fVxyXG5cclxubGV0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF1cclxuZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXIoKXtcclxuICAgIGlmKHVzZXJNb2R1bGUpcmV0dXJuIHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICByZXR1cm4gbnVsbFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQW50aUJvdERNIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5hbnRpRE0gPSB0aGlzLmFudGlETS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG5cclxuICAgICAgICBkaXNwYXRjaGVyLnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIudW5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcclxuICAgIH1cclxuXHJcbiAgICBhbnRpRE0oZXYpe1xyXG4gICAgICAgIGlmKCFldi5tZXNzYWdlLmF1dGhvci5ib3QpcmV0dXJuXHJcbiAgICAgICAgaWYoZXYubWVzc2FnZS5hdXRob3IuaWQgPT09IGdldEN1cnJlbnRVc2VyKCkuaWQpXHJcbiAgICAgICAgaWYoZXYubWVzc2FnZS5ndWlsZF9pZClyZXR1cm5cclxuXHJcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbChldi5tZXNzYWdlLmNoYW5uZWxfaWQpXHJcbiAgICAgICAgaWYoIWNoYW5uZWwpcmV0dXJuIC8vIG1pZ2h0IGJlIGJyb2tlblxyXG5cclxuICAgICAgICBpZihjaGFubmVsLnR5cGUgIT09IDEpcmV0dXJuXHJcblxyXG4gICAgICAgIGlmKGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdKXJldHVybiAvLyBJZiB0aGUgdXNlciB1bmJsb2NrIHRoZSBib3QsIERvbid0IGJsb2NrIGl0IGFnYWluLlxyXG5cclxuICAgICAgICBpZihzY2FuTWVzc2FnZShldi5tZXNzYWdlKSl7XHJcbiAgICAgICAgICAgIGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdID0gdHJ1ZVxyXG4gICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoYFtBZEJsb2NrXTogQmxvY2tlZCAke2V2Lm1lc3NhZ2UuYXV0aG9yLnVzZXJuYW1lfSMke2V2Lm1lc3NhZ2UuYXV0aG9yLmRpc2NyaW1pbmF0b3J9YCwge1xyXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwid2FybmluZ1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCFyZWxhdGlvblNoaXBNb2R1bGUpcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG4gICAgICAgICAgICByZWxhdGlvblNoaXBNb2R1bGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXAoZXYubWVzc2FnZS5hdXRob3IuaWQsIHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBcIkNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgfSwgMilcclxuICAgICAgICAgICAgaWYoIURNTW9kdWxlKURNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cclxuICAgICAgICAgICAgRE1Nb2R1bGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKGNoYW5uZWwuaWQsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2Nhbk1lc3NhZ2UobWVzc2FnZSl7XHJcbiAgICBpZigvKGRpc2NvcmRcXC5nZ3xkaXNjb3JkXFwuY29tXFwvaW52aXRlXFwvfGRpc2NvcmRhcHBcXC5jb21cXC9pbnZpdGVcXC8pL2cudGVzdChtZXNzYWdlLmNvbnRlbnQpKXJldHVybiB0cnVlXHJcbiAgICBpZihFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuZ2cvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5jb20vaW52aXRlL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmRhcHAuY29tL2ludml0ZS9cIikpcmV0dXJuIHRydWVcclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxufVxyXG5mdW5jdGlvbiBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBzZWFyY2gpe1xyXG4gICAgbGV0IGVtYmVkcyA9IG1lc3NhZ2UuZW1iZWRzXHJcbiAgICBpZihlbWJlZHMubGVuZ3RoID09PSAwKXJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIGVtYmVkcy5tYXAoZW1iZWQgPT4ge1xyXG4gICAgICAgIGlmKGVtYmVkLnR5cGUgIT09IFwicmljaFwiKXJldHVybiBmYWxzZVxyXG4gICAgICAgIGlmKChlbWJlZC50aXRsZSB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoKGVtYmVkLmRlc2NyaXB0aW9uIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoKGVtYmVkLmZvb3RlciB8fCBcIlwiKSAmJiBlbWJlZC5mb290ZXIudGV4dCB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoZW1iZWQuZmllbGRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWUuaW5jbHVkZXMoc2VhcmNoKSB8fCBlLm5hbWUuaW5jbHVkZXMoc2VhcmNoKVxyXG4gICAgICAgIH0pLmluY2x1ZGVzKHRydWUpKXJldHVybiB0cnVlXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfSkuaW5jbHVkZXModHJ1ZSlcclxufSIsImltcG9ydCB7c2V0dGluZ3NSUEMsIGRlZmF1bHRSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IEJETW9kdWxlcy5nZXQobT0+bS5EaXNwYXRjaGVyJiZtLmRlZmF1bHQmJm0uZGVmYXVsdC5kaXNwYXRjaClbMF0uZGVmYXVsdFxyXG5jb25zdCBBY3Rpb25UeXBlcyA9IEJETW9kdWxlcy5nZXQobT0+bS5BY3Rpb25UeXBlcylbMF0uQWN0aW9uVHlwZXNcclxuXHJcbmNvbnN0IHNvY2tldElkID0gXCJsaWdodGNvcmQtc3Bvb2Ytc29ja2V0XCJcclxuY29uc3QgcGlkID0gcHJvY2Vzcy5waWRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDdXN0b21SaWNoUHJlc2VuY2Uge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBzZXR0aW5nc1JQQ1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZm9ybWF0ZWRHYW1lKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpcmV0dXJuIG51bGxcclxuICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5nYW1lLm5hbWUgfHwgZGVmYXVsdFJQQy5uYW1lLFxyXG4gICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZ2FtZS5zdGF0ZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICBzbWFsbF9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLnNtYWxsXCJdIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBnYW1lXHJcbiAgICB9XHJcblxyXG4gICAgc2VuZEdhbWUoKXtcclxuICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoKHtcclxuICAgICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuTE9DQUxfQUNUSVZJVFlfVVBEQVRFLFxyXG4gICAgICAgICAgICBzb2NrZXRJZCxcclxuICAgICAgICAgICAgcGlkLFxyXG4gICAgICAgICAgICBhY3Rpdml0eTogdGhpcy5mb3JtYXRlZEdhbWVcclxuICAgICAgICB9KSAgIFxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpIHtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW5hYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNldChzZXR0aW5nc1JQQyB8fCBPYmplY3QuY3JlYXRlKGRlZmF1bHRSUEMpKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCkge1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRpc2FibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZldGNoQXNzZXRzKGFwcGxpY2F0aW9uSWQpe1xyXG4gICAgICAgIGxldCBhc3NldHMgPSBhd2FpdCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBc3NldHMpWzBdLmdldEFzc2V0cyhhcHBsaWNhdGlvbklkKVxyXG4gICAgICAgIGlmKGFzc2V0cy51bmRlZmluZWQgJiYgdHlwZW9mIGFzc2V0cy51bmRlZmluZWQgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEFwcGxpY2F0aW9uXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldHNcclxuICAgIH1cclxuXHJcbiAgICBzZXQoYWN0aXZpdHkpe1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGFjdGl2aXR5XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtwbHVnaW5Db29raWUsIHRoZW1lQ29va2llLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgbWFpbkNvcmUgZnJvbSBcIi4vY29yZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3QgQmRBcGkgPSB7XHJcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBCRFYyLlJlYWN0OyB9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkgeyByZXR1cm4gQkRWMi5SZWFjdERvbTsgfSxcclxuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gQkRWMi5SZWFjdENvbXBvbmVudDt9LFxyXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7cmV0dXJuIFV0aWxzLldpbmRvd0NvbmZpZ0ZpbGU7fSxcclxuICAgIGdldCBzZXR0aW5ncygpIHtyZXR1cm4gc2V0dGluZ3M7fSxcclxuICAgIGdldCBlbW90ZXMoKSB7cmV0dXJuIHt9fSwgLy8gZGVwcmVjYXRlZCwgZGVsZXRlZCBhbGwgZW1vdGVzIGZyb20gYmV0dGVyZGlzY29yZC5cclxuICAgIGdldCBzY3JlZW5XaWR0aCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7IH0sXHJcbiAgICBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XHJcbn07XHJcblxyXG5CZEFwaS5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgIHJldHVybiBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpO1xyXG59O1xyXG5cclxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuLy9jc3MgPSBjdXN0b20gY3NzXHJcbkJkQXBpLmluamVjdENTUyA9IGZ1bmN0aW9uIChpZCwgY3NzKSB7XHJcbiAgICBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSwgY3NzKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NLnJlbW92ZVN0eWxlKERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuLy9jc3MgPSBjdXN0b20gY3NzXHJcbkJkQXBpLmxpbmtKUyA9IGZ1bmN0aW9uIChpZCwgdXJsKSB7XHJcbiAgICBET00uYWRkU2NyaXB0KERPTS5lc2NhcGVJRChpZCksIHVybCk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkudW5saW5rSlMgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSk7XHJcbn07XHJcblxyXG4vL0dldCBhbm90aGVyIHBsdWdpblxyXG4vL25hbWUgPSBuYW1lIG9mIHBsdWdpblxyXG5CZEFwaS5nZXRQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgaWYgKGJkcGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgIHJldHVybiBiZHBsdWdpbnNbbmFtZV0ucGx1Z2luO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vL0dldCBCZXR0ZXJEaXNjb3JkIENvcmVcclxuQmRBcGkuZ2V0Q29yZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGlvbiBOb3RpY2VcIiwgYEJkQXBpLmdldENvcmUoKSB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLmApO1xyXG4gICAgcmV0dXJuIG1haW5Db3JlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIGEgc3RyaW5nIG9mIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWxcclxuICovXHJcbkJkQXBpLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCB7Y2FuY2VsVGV4dDogbnVsbH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeSBzdHJpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG4vL1Nob3cgdG9hc3QgYWxlcnRcclxuQmRBcGkuc2hvd1RvYXN0ID0gZnVuY3Rpb24oY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBVdGlscy5zaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZSA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRBbGxNb2R1bGVzID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQWxsKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvcHMgPSBmdW5jdGlvbiguLi5wcm9wcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm90b3R5cGVzID0gZnVuY3Rpb24oLi4ucHJvdG9zKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlQcm90b3R5cGVzKHByb3Rvcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlEaXNwbGF5TmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKG5hbWUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyByZWFjdCBpbnN0YW5jZVxyXG5CZEFwaS5nZXRJbnRlcm5hbEluc3RhbmNlID0gZnVuY3Rpb24obm9kZSkge1xyXG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5qUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpIG5vZGUgPSBub2RlWzBdO1xyXG4gICAgcmV0dXJuIEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShub2RlKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5sb2FkRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXREYXRhID0gQmRBcGkubG9hZERhdGE7XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2F2ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xyXG5cclxuLy8gRGVsZXRlcyBkYXRhXHJcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuLy8gUGF0Y2hlcyBvdGhlciBmdW5jdGlvbnNcclxuQmRBcGkubW9ua2V5UGF0Y2ggPSBmdW5jdGlvbih3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gVXRpbHMubW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG4vLyBFdmVudCB3aGVuIGVsZW1lbnQgaXMgcmVtb3ZlZFxyXG5CZEFwaS5vblJlbW92ZWQgPSBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm9uUmVtb3ZlZChub2RlLCBjYWxsYmFjayk7XHJcbn07XHJcblxyXG4vLyBXcmFwcyBmdW5jdGlvbiBpbiB0cnkuLmNhdGNoXHJcbkJkQXBpLnN1cHByZXNzRXJyb3JzID0gZnVuY3Rpb24obWV0aG9kLCBtZXNzYWdlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKTtcclxufTtcclxuXHJcbi8vIFRlc3RzIGZvciB2YWxpZCBKU09OXHJcbkJkQXBpLnRlc3RKU09OID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnRlc3RKU09OKGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuaXNQbHVnaW5FbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhcGx1Z2luQ29va2llW25hbWVdO1xyXG59O1xyXG5cclxuQmRBcGkuaXNUaGVtZUVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gISF0aGVtZUNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzU2V0dGluZ0VuYWJsZWQgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuICEhc2V0dGluZ3NDb29raWVbaWRdO1xyXG59O1xyXG5cclxuQmRBcGkuZW5hYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgdHJ1ZSk7XHJcbn07XHJcblxyXG5CZEFwaS5kaXNhYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgZmFsc2UpO1xyXG59O1xyXG5cclxuQmRBcGkudG9nZ2xlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgIXNldHRpbmdzQ29va2llW2lkXSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkuZ2V0QkREYXRhID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldEJERGF0YShrZXkpO1xyXG59O1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNldEJERGF0YSA9IGZ1bmN0aW9uKGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRCRERhdGEoa2V5LCBkYXRhKTtcclxufTtcclxuXHJcblxyXG5cclxuY29uc3QgbWFrZUFkZG9uQVBJID0gKGNvb2tpZSwgbGlzdCwgbWFuYWdlcikgPT4gbmV3IGNsYXNzIEFkZG9uQVBJIHtcclxuXHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBtYW5hZ2VyLmZvbGRlcjt9XHJcblxyXG4gICAgaXNFbmFibGVkKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gISFjb29raWVbbmFtZV07XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5lbmFibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZGlzYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGUobmFtZSkge1xyXG4gICAgICAgIGlmIChjb29raWVbbmFtZV0pIHRoaXMuZGlzYWJsZShuYW1lKTtcclxuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIucmVsb2FkKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChuYW1lKSB7XHJcbiAgICAgICAgaWYgKGxpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgaWYgKGxpc3RbbmFtZV0ucGx1Z2luKSByZXR1cm4gbGlzdFtuYW1lXS5wbHVnaW47XHJcbiAgICAgICAgICAgIHJldHVybiBsaXN0W25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGxpc3QpLm1hcChrID0+IHRoaXMuZ2V0KGspKS5maWx0ZXIoYSA9PiBhKTtcclxuICAgIH1cclxufTtcclxuXHJcbkJkQXBpLlBsdWdpbnMgPSBtYWtlQWRkb25BUEkocGx1Z2luQ29va2llLCBiZHBsdWdpbnMsIHBsdWdpbk1vZHVsZSk7XHJcbkJkQXBpLlRoZW1lcyA9IG1ha2VBZGRvbkFQSSh0aGVtZUNvb2tpZSwgYmR0aGVtZXMsIHRoZW1lTW9kdWxlKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJkQXBpO1xyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJkQXBpID0gQmRBcGkiLCIvKiBCREV2ZW50cyAqL1xyXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJERXZlbnRzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoKVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CREV2ZW50cyA9IHRoaXNcclxuICAgIH1cclxuICAgIGRpc3BhdGNoKGV2ZW50TmFtZSwgLi4uYXJncykge3RoaXMuZW1pdChldmVudE5hbWUsIC4uLmFyZ3MpO31cclxuICAgIG9mZihldmVudE5hbWUsIGV2ZW50QWN0aW9uKSB7dGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50QWN0aW9uKTt9XHJcbn07IiwiLyoqXHJcbiAqIENyZWRpdHMgdG8gQGhlbGxib3VuZDEzMzcgb24gZ2l0aHViIGZvciB0aGUgY3NzXHJcbiAqL1xyXG5cclxuaW1wb3J0IERPTVRvb2xzIGZyb20gXCIuL2RvbXRvb2xzXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuXHJcbmxldCBzZWxlY3RvcnNcclxuY29uc3QgcmVtb3ZlRGEgPSBVdGlscy5yZW1vdmVEYVxyXG5mdW5jdGlvbiBnZXRTZWxlY3RvcnMoKXtcclxuICAgIGxldCBzdGFuZGFyZFNpZGViYXJWaWV3ID0gQkRNb2R1bGVzLmdldChlID0+IGUuc3RhbmRhcmRTaWRlYmFyVmlldylbMF1cclxuICAgIGlmKCFzdGFuZGFyZFNpZGViYXJWaWV3KXJldHVybiBudWxsXHJcbiAgICBsZXQgZGVmYXVsdENsYXNzTmFtZSA9IHJlbW92ZURhKHN0YW5kYXJkU2lkZWJhclZpZXcuc3RhbmRhcmRTaWRlYmFyVmlldylcclxuICAgIGxldCBzZWxlY3RzID0gW11cclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUudXNlclNldHRpbmdzQWNjb3VudClbMF0udXNlclNldHRpbmdzQWNjb3VudCl9IGRpdjpudGgtY2hpbGQoMik+ZGl2Om50aC1jaGlsZCgyKT4uJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS52aWV3Qm9keSlbMF0udmlld0JvZHkpfWApXHJcbiAgICByZXR1cm4gc2VsZWN0c1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQmx1clByaXZhdGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzIHx8IGdldFNlbGVjdG9ycygpXHJcblxyXG4gICAgICAgIGlmKCFzZWxlY3RvcnMpY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIHNlbGVjdG9ycyB0byBibHVyIHBlcnNvbm5hbCBpbmZvcm1hdGlvbnMuXCIpKVxyXG4gICAgICAgIERPTVRvb2xzLmFkZFN0eWxlKFwiYmx1clByaXZhdGVcIiwgYFxyXG4ke3NlbGVjdG9yc1swXX0sICR7c2VsZWN0b3JzWzFdfSwgJHtzZWxlY3RvcnNbMl19IHtcclxuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41Myk7XHJcbiAgICBmaWx0ZXI6IGJsdXIoNHB4KTtcclxuICAgIG9wYWNpdHk6IC44O1xyXG59XHJcblxyXG4ke3NlbGVjdG9yc1swXX06aG92ZXIsICR7c2VsZWN0b3JzWzFdfTpob3ZlciwgJHtzZWxlY3RvcnNbMl19OmhvdmVyIHtcclxuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wOSwuNjgsLjUzKTtcclxuICAgIGZpbHRlcjogbm9uZTtcclxuICAgIG9wYWNpdHk6IDE7XHJcbn1gKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgRE9NVG9vbHMucmVtb3ZlU3R5bGUoXCJibHVyUHJpdmF0ZVwiKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcblxyXG5jb25zdCBub3JtYWxpemVkUHJlZml4ID0gXCJkYVwiO1xyXG5jb25zdCByYW5kQ2xhc3MgPSBuZXcgUmVnRXhwKGBeKD8hJHtub3JtYWxpemVkUHJlZml4fS0pKCg/OltBLVphLXpdfFswLTldfC0pKyktKD86W0EtWmEtel18WzAtOV18LXxfKXs2fSRgKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDbGFzc05vcm1hbGl6ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQ2xhc3NOb3JtYWxpemVyID0gdGhpc1xyXG4gICAgfVxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLnJldmVydEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZElnbm9yZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoXCJweFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImNoXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiZW1cIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJsYXllckNvbnRhaW5lci1cIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCJjYWxjKFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcInJnYmFcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGVGaWx0ZXIobW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhtb2R1bGUpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2R1bGVbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zcGxpdChcIi1cIikubGVuZ3RoID09PSAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QodmFsdWUuc3BsaXQoXCIgXCIpWzBdKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBub3JtYWxDbGFzcy5tYXRjaChyYW5kQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaFsxXS5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaERPTU1ldGhvZHMoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbnMgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICAvLyBjb25zdCB0b2tlbnMgPSB0b2tlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbnRhaW5zLCB0aGlzLCBbdG9rZW4uc3BsaXQoXCIgXCIpWzBdXSk7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0b2tlbnMuZXZlcnkodCA9PiBjb250YWlucy5jYWxsKHRoaXMsIHQpKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBhZGQgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZDtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhZGQsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocmVtb3ZlLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCB7XHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxDb2xvcmVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ29sb3JlZFRleHQgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50ID0gcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZUNvbnRlbnQudHlwZSB8fCAhbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlIHx8IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5kaXNwbGF5TmFtZSAhPSBcIk1lc3NhZ2VDb250ZW50XCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlO1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxUeXBlLl9fb3JpZ2luYWxNZXRob2QpIHJldHVybjsgLy8gRG9uJ3QgcGF0Y2ggYWdhaW5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlID0gZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxUeXBlKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvbGVDb2xvciA9IHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0gPyBwcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nIHx8IFwiXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsVHlwZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtZXNzYWdlQ29udGVudC50eXBlLnR5cGUsIG9yaWdpbmFsVHlwZSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGxldCBjbGFzc05hbWVNYXJrdXAgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdLm1hcmt1cFxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIrY2xhc3NOYW1lTWFya3VwLnNwbGl0KFwiIFwiKVswXSkuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgZWxlbS5zdHlsZS5zZXRQcm9wZXJ0eShcImNvbG9yXCIsIFwiXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCB7YmRDb25maWcsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXHJcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBwbHVnaW5DZXJ0aWZpZXIsIHsgZW5jcnlwdFNldHRpbmdzQ2FjaGUsIGRlY3J5cHRTZXR0aW5nc0NhY2hlLCBwcm9jZXNzRmlsZSB9IGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xyXG5pbXBvcnQgeyBjYXB0dXJlUmVqZWN0aW9uU3ltYm9sIH0gZnJvbSBcImV2ZW50c1wiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XHJcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcC5nZXRBcHBQYXRoKCksIFwibm9kZV9tb2R1bGVzXCIpKTtcclxuY2xhc3MgTWV0YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTWV0YUVycm9yXCI7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb3JpZ2luYWxKU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl07XHJcbmNvbnN0IG9yaWdpbmFsQ1NTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPyBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdIDogKCkgPT4ge3JldHVybiBudWxsO307XHJcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj8oPzpcXHJcXG58XFxuKVteXFxTXFxyXFxuXSo/XFwqW15cXFNcXHJcXG5dPy87XHJcbmNvbnN0IGVzY2FwZWRBdFJlZ2V4ID0gL15cXFxcQC87XHJcblxyXG5leHBvcnQgbGV0IGFkZG9uQ2FjaGUgPSB7fVxyXG5cclxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29udGVudE1hbmFnZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGltZUNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy53YXRjaGVycyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoRXh0ZW5zaW9ucygpe1xyXG4gICAgICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICAgICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwicGx1Z2luXCIpO1xyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwidGhlbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBsdWdpbnNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3BsdWdpbnNGb2xkZXIgfHwgKHRoaXMuX3BsdWdpbnNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJwbHVnaW5zL1wiKSkpO31cclxuICAgIGdldCB0aGVtZXNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3RoZW1lc0ZvbGRlciB8fCAodGhpcy5fdGhlbWVzRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwidGhlbWVzL1wiKSkpO31cclxuXHJcbiAgICBsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpICE9PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0gSlNPTi5wYXJzZShkZWNyeXB0U2V0dGluZ3NDYWNoZShkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpKSlcclxuICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IHt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYWRkb25DYWNoZSlcclxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgaWYoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlyZXR1cm4gZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG5cclxuICAgICAgICAgICAgbGV0IHByb3BzID0gW3tcclxuICAgICAgICAgICAgICAgIGtleTogXCJ0aW1lc3RhbXBcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcInJlc3VsdFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwiaGFzaFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIlxyXG4gICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIShwcm9wLmtleSBpbiB2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlW3Byb3Aua2V5XSAhPT0gcHJvcC50eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodmFsdWUuaGFzaCAhPT0ga2V5KXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnJlc3VsdC5zdXNwZWN0KXsgLy8gcmVmZXRjaCBmcm9tIHJlbW90ZSB0byBiZSBzdXJlIHlvdSdyZSB1cCB0byBkYXRlLlxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgfVxyXG5cclxuICAgIHNhdmVBZGRvbkNhY2hlKCl7XHJcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShKU09OLnN0cmluZ2lmeShhZGRvbkNhY2hlKSkpXHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSBjb250ZW50VHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdID0gZnMud2F0Y2goYmFzZUZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgcmV0dXJuIHBsdWdpbk1vZHVsZS51bmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZW1lTW9kdWxlLnVubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLnJlbG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLnJlbG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVud2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCByYXdNZXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xyXG4gICAgICAgIGlmIChtZXRhLmluZGV4T2YoXCJNRVRBXCIpIDwgMCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbHMudGVzdEpTT04ocmF3TWV0YSk7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xyXG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcclxuICAgICAgICBwYXJzZWQuZm9ybWF0ID0gXCJqc29uXCI7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICBvdXQuZm9ybWF0ID0gXCJqc2RvY1wiO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFJlcXVpcmUodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBpc1BsdWdpbiA/IG9yaWdpbmFsSlNSZXF1aXJlIDogb3JpZ2luYWxDU1NSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHNlbGYucGx1Z2luc0ZvbGRlciA6IHNlbGYudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgY29udGVudCA9IFV0aWxzLnN0cmlwQk9NKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcclxuICAgICAgICAgICAgaWYgKCFpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGEuZm9ybWF0ID09IFwianNvblwiKSBtZXRhLmNzcyA9IG1ldGEuY3NzLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEpLmpvaW4oXCJcXG5cIik7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gYG1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGEudHlwZSA9IG1vZHVsZS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFV0aWxzLndhcm4oXCJNb2R1bGUgTm90IEV4cG9ydGVkXCIsIGAke21ldGEubmFtZX0sIHBsZWFzZSBzdGFydCBzZXR0aW5nIG1vZHVsZS5leHBvcnRzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGxhY2Vob2xkZXJQbHVnaW4oZGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7cGx1Z2luOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICBnZXROYW1lOiAoKSA9PiB7cmV0dXJuIGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lO30sXHJcbiAgICAgICAgICAgICAgICBnZXRBdXRob3I6ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246ICgpID0+IHtyZXR1cm4gZGF0YS5tZXNzYWdlID8gZGF0YS5tZXNzYWdlIDogXCJUaGlzIHBsdWdpbiB3YXMgdW5hYmxlIHRvIGJlIGxvYWRlZC4gQ2hlY2sgdGhlIGF1dGhvcidzIHBhZ2UgZm9yIHVwZGF0ZXMuXCI7fSxcclxuICAgICAgICAgICAgICAgIGdldFZlcnNpb246ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgc291cmNlOiBkYXRhLnNvdXJjZSA/IGRhdGEuc291cmNlIDogXCJcIixcclxuICAgICAgICAgICAgd2Vic2l0ZTogZGF0YS53ZWJzaXRlID8gZGF0YS53ZWJzaXRlIDogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcclxuICAgICAgICAgICAgICAgIH0sIChoYXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sIHRydWUpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlW3Jlc3VsdC5oYXNoXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogcmVzdWx0Lmhhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHt3aW5kb3cucmVxdWlyZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICBjb25zdCBjb250ZW50ID0gd2luZG93LnJlcXVpcmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgaWYoIWNvbnRlbnQubmFtZSlyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDYW5ub3QgZXNjYXBlIHRoZSBJRC5cIiwgZXJyb3I6IHttZXNzYWdlOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIiwgc3RhY2s6IFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwifX1cclxuICAgICAgICBjb250ZW50LmlkID0gVXRpbHMuZXNjYXBlSUQoY29udGVudC5uYW1lKTtcclxuICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZW50LnR5cGUpIHJldHVybjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gbmV3IGNvbnRlbnQudHlwZSgpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldO1xyXG4gICAgICAgICAgICAgICAgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV0gPSBjb250ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYmR0aGVtZXNbY29udGVudC5uYW1lXTtcclxuICAgICAgICAgICAgYmR0aGVtZXNbY29udGVudC5uYW1lXSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSAgIFxyXG5cclxuICAgIHVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGVsZXRlIHdpbmRvdy5yZXF1aXJlLmNhY2hlW3dpbmRvdy5yZXF1aXJlLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIHVubG9hZGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX07fVxyXG4gICAgfVxyXG5cclxuICAgIGlzTG9hZGVkKGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7d2luZG93LnJlcXVpcmUuY2FjaGVbd2luZG93LnJlcXVpcmUucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07fVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4gZmFsc2U7fVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBjYW50VW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICBpZiAoY2FudFVubG9hZCkgcmV0dXJuIGNhbnRVbmxvYWQ7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWROZXdDb250ZW50KHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMaXN0ID0gT2JqZWN0LnZhbHVlcyhpc1BsdWdpbiA/IGJkcGx1Z2lucyA6IGJkdGhlbWVzKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkID0gY29udGVudExpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBpc1BsdWdpbiA/IGMucGx1Z2luLmdldE5hbWUoKSA6IGMubmFtZSk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhY29udGVudExpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aChmaWxlRW5kaW5nKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZikpLmlzRmlsZSgpKTtcclxuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQWxsQ29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgdGhpcy5wYXRjaEV4dGVuc2lvbnMoKVxyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYmFzZWRpcik7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZmlsZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIGVycm9ycy5wdXNoKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBsdWdpbnMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJwbHVnaW5cIik7fVxyXG4gICAgbG9hZFRoZW1lcygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInRoZW1lXCIpO31cclxufTtcclxuXHJcbi8qKlxyXG4gKiBEb24ndCBleHBvc2UgY29udGVudE1hbmFnZXIgLSBjb3VsZCBiZSBkYW5nZXJvdXMgZm9yIG5vd1xyXG4gKi8iLCJpbXBvcnQge2JkQ29uZmlnLCBtaW5TdXBwb3J0ZWRWZXJzaW9uLCBiYmRWZXJzaW9uLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5FcnJvcnMsIGJkdGhlbWVFcnJvcnMsIGJiZENoYW5nZWxvZywgZGVmYXVsdENvb2tpZSwgY3VycmVudERpc2NvcmRWZXJzaW9uLCBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBCRExvZ28gZnJvbSBcIi4uL3VpL2JkTG9nb1wiO1xyXG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBMaWdodGNvcmRMb2dvIGZyb20gXCIuLi9zdmcvbGlnaHRjb3JkXCI7XHJcbmltcG9ydCBQbHVnaW5DZXJ0aWZpZXIgZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBkaXN0YW50LCB7IHV1aWR2NCB9IGZyb20gXCIuL2Rpc3RhbnRcIjtcclxuaW1wb3J0IEVtb2ppTW9kdWxlIGZyb20gXCIuL2Vtb2ppTW9kdWxlXCJcclxuaW1wb3J0IHtyZW1vdGUgYXMgZWxlY3Ryb259IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCB2MiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5mdW5jdGlvbiBDb3JlKCkge1xyXG4gICAgLy8gT2JqZWN0LmFzc2lnbihiZENvbmZpZywgX19ub25fd2VicGFja19yZXF1aXJlX18oRGF0YVN0b3JlLmNvbmZpZ0ZpbGUpKTtcclxuICAgIC8vIHRoaXMuaW5pdCgpO1xyXG59XHJcblxyXG5sZXQgbWV0aG9kc1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBjb25maWcpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0TWV0aG9kcyA9IGZ1bmN0aW9uKG0pIHtcclxuICAgIG1ldGhvZHMgPSBtXHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5mbGF0KSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiYmRWZXJzaW9uICsgXCIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9sZCB2ZXJzaW9uIChcIiArIGN1cnJlbnREaXNjb3JkVmVyc2lvbiArIFwiKSBvZiBEaXNjb3JkLiBQbGVhc2UgdXBkYXRlIHlvdXIgRGlzY29yZCBpbnN0YWxsYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmRDb25maWcudmVyc2lvbiA8IG1pblN1cHBvcnRlZFZlcnNpb24pIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJkQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIGJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5FRCkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIEVuaGFuY2VkRGlzY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggUG93ZXJjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dHJpYnV0ZXMuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XHJcblxyXG4gICAgLypcclxuICAgIGNvbnN0IGxhdGVzdExvY2FsVmVyc2lvbiA9IGJkQ29uZmlnLnVwZGF0ZXIgPyBiZENvbmZpZy51cGRhdGVyLkxhdGVzdFZlcnNpb24gOiBiZENvbmZpZy5sYXRlc3RWZXJzaW9uO1xyXG4gICAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IGJkQ29uZmlnLnZlcnNpb24pIHtcclxuICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJVcGRhdGUgQXZhaWxhYmxlXCIsIFtgVGhlcmUgaXMgYW4gdXBkYXRlIGF2YWlsYWJsZSBmb3IgQmFuZGFnZWRCRCdzIEluamVjdG9yICgke2xhdGVzdExvY2FsVmVyc2lvbn0pLmAsIFwiWW91IGNhbiBlaXRoZXIgdXBkYXRlIGFuZCByZXN0YXJ0IG5vdywgb3IgbGF0ZXIuXCJdLCB7XHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIlVwZGF0ZSBOb3dcIixcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJNYXliZSBMYXRlclwiLFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBkYXRlRmFpbGVkID0gKCkgPT4ge1V0aWxzLmFsZXJ0KFwiQ291bGQgTm90IFVwZGF0ZVwiLCBgVW5hYmxlIHRvIHVwZGF0ZSBhdXRvbWF0aWNhbGx5LCBwbGVhc2UgZG93bmxvYWQgdGhlIGluc3RhbGxlciBhbmQgcmVpbnN0YWxsIG5vcm1hbGx5LjxiciAvPjxiciAvPjxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+RG93bmxvYWQgSW5zdGFsbGVyPC9hPmApO307XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZFVwZGF0ZSA9IGF3YWl0IHRoaXMudXBkYXRlSW5qZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRpZFVwZGF0ZSkgcmV0dXJuIG9uVXBkYXRlRmFpbGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwLnJlbGF1bmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwLmV4aXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9Ki9cclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgdGhpcy5pbml0U2V0dGluZ3MoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XHJcbiAgICBCRFYyLmluaXRpYWxpemUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJVcGRhdGluZyBTZXR0aW5nc1wiKTtcclxuICAgIHNldHRpbmdzUGFuZWwuaW5pdGlhbGl6ZVNldHRpbmdzKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgQWRkb25zIENhY2hlXCIpXHJcbiAgICBhd2FpdCBjb250ZW50TWFuYWdlci5sb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcclxuICAgIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2lucygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcclxuICAgIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZXMoKTtcclxuXHJcbiAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgYXRvYihEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIikpKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZGMtMFwiXSkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idG4uYnRuLWRpc2Nvbm5lY3RcIikuY2xpY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIFBsdWdpbkNlcnRpZmllci5zdGFydCgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIikubGVuZ3RoKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XHJcbiAgICB0aGlzLmluaXRPYnNlcnZlcigpO1xyXG5cclxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkge1xyXG4gICAgICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgICAgIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBiZHBsdWdpbkVycm9ycywgdGhlbWVzOiBiZHRoZW1lRXJyb3JzfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XHJcbiAgICBpZiAoYmJkVmVyc2lvbiA+IHByZXZpb3VzVmVyc2lvbikge1xyXG4gICAgICAgIGlmIChiYmRDaGFuZ2Vsb2cpIHRoaXMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgYmJkVmVyc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgRW1vamlNb2R1bGUuc3RhcnQoKVxyXG5cclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hTb2NpYWwuYmluZCh0aGlzKSwgXCJCRCBTb2NpYWwgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFNlcGFyYXRvci5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFNlcGFyYXRvciBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lc3NhZ2VIZWFkZXIuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBDaGF0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVtYmVyTGlzdC5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIE1lbWJlciBMaXN0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0YWNobWVudC5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcclxuXHJcbiAgICBpZihiZENvbmZpZy5oYXZlSW5zdGFsbGVkRGVmYXVsdCl7XHJcbiAgICAgICAgbGV0IGFsZXJ0ID0gVXRpbHMuYWxlcnQoXCJGaXJzdCBJbnN0YWxsYXRpb25cIiwgXCJBcyBpdCBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaW5zdGFsbCBMaWdodGNvcmQsIFdlIGFkZGVkIHR3byBkZWZhdWx0IHRoZW1lcyBhbmQgb25lIGRlZmF1bHQgcGx1Z2luIGluIHlvdXIgcGx1Z2luL3RoZW1lIGZvbGRlci4gQ2hlY2sgaXQgaW4gdGhlIFBsdWdpbi9UaGVtZSBzZXR0aW5ncy5cIilcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBhbGVydC5vbkNsb3NlKHJlc29sdmUpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudCA+IGRpdi50eXBlV2luZG93cy0xemEtbjcud2l0aEZyYW1lLWhhWWx0SS50aXRsZUJhci1BQzRwR1YuaG9yaXpvbnRhbFJldmVyc2UtM3RSalk3LmZsZXgtMU8xR0tZLmRpcmVjdGlvblJvd1JldmVyc2UtbThJaklxLmp1c3RpZnlTdGFydC0yTkRGemkuYWxpZ25TdHJldGNoLURwR1BmMy5kYS10eXBlV2luZG93cy5kYS13aXRoRnJhbWUuZGEtdGl0bGVCYXIuZGEtaG9yaXpvbnRhbFJldmVyc2UuZGEtZmxleC5kYS1kaXJlY3Rpb25Sb3dSZXZlcnNlLmRhLWp1c3RpZnlTdGFydC5kYS1hbGlnblN0cmV0Y2ggPiBkaXYud29yZG1hcmtXaW5kb3dzLTF2MGxZRC53b3JkbWFyay0yaUREZm0uZGEtd29yZG1hcmtXaW5kb3dzLmRhLXdvcmRtYXJrXCIpXHJcbiAgICBpZihsb2dvKXtcclxuICAgICAgICBsb2dvLnN0eWxlLnRvcCA9IFwiM3B4XCJcclxuICAgICAgICBsb2dvLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIxMFwiIHdpZHRoPVwiNzBcIiB2aWV3Qm94PVwiMCAwIDcyLjU0IDEwXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTVweCwgbWFyZ2luLXRvcDogMTBweFwiPlxyXG4gICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNDQuODEsOS42N1Y2LjMzYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFBMy41MywzLjUzLDAsMCwwLDQ2LjIsM2MtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS42N2MwLDIuMjEsMS44OSwzLjMzLDMuNzcsMy4zM2EzLjg3LDMuODcsMCwwLDAsMy40NS0yLjE4bC0yLjEyLTFDNDcsMTEuMTcsNDQuODEsMTAuODUsNDQuODEsOS42N1pNMTAuNjgsMTIuODloMi40MVYzLjE3SDEwLjY4Wk03MS43NiwzLjE0SDY4LjE5VjcuMjNMNzAuNTcsOS40di00aDEuMjdjLjgxLDAsMS4yMS40MSwxLjIxLDF2M2MwLC42My0uMzgsMS4wNS0xLjIxLDEuMDVINjguMTh2Mi4zMWgzLjU3YzEuOTIsMCwzLjcyLTEsMy43Mi0zLjJWNi4zOUM3NS40OCw0LjEzLDczLjY4LDMuMTQsNzEuNzYsMy4xNFpNNTQuMjIsM2MtMiwwLTQsMS4xLTQsMy4zNFY5LjY2YzAsMi4yMywyLDMuMzQsNCwzLjM0czMuOTUtMS4xMSwzLjk1LTMuMzRWNi4zNEM1OC4xOSw0LjExLDU2LjIsMyw1NC4yMiwzWm0xLjU1LDYuNjZjMCwuNy0uNzgsMS4wNi0xLjU0LDEuMDZzLTEuNTUtLjM1LTEuNTUtMS4wNlY2LjM0YzAtLjcyLjc1LTEuMSwxLjUtMS4xczEuNTkuMzUsMS41OSwxLjFaTTY2Ljg0LDYuMzRjMC0yLjI5LTEuNTgtMy4yLTMuNTUtMy4ySDU5LjQ2djkuNzNoMi40NVY5Ljc3aC40M2wyLjIyLDMuMDloM0w2NSw5LjUyQzY2LjEzLDkuMTUsNjYuODQsOC4xNCw2Ni44NCw2LjM0Wk02My4zMyw3LjY1SDYxLjkxVjUuNDNoMS40MkExLjExLDEuMTEsMCwxLDEsNjMuMzMsNy42NVpNMjkuODMsMTNoMi40MlYzLjA2SDI5LjgzVjYuNzNsLTMsMFYzLjA5SDI0Ljd2OS43OGgyLjE0VjguNjhsMywwWk0xNy4xNiw5Ljc2VjYuNDJjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MWEzLjU1LDMuNTUsMCwwLDAtMy4zNi0yLjI0Yy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5Ljc2YzAsMi4yMSwyLDMuMTUsMy45LDMuMTVzMy41OC0xLDMuNTgtM1Y3LjU4SDE4Ljc5bDAsMS4zNkgyMC4zdi43N0MyMC4zLDEwLjkyLDE3LjE2LDEwLjk0LDE3LjE2LDkuNzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0yLjkzIC0zKVwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIzNS45MSAwLjA2IDM4LjQzIDAuMDYgMzguNDMgMS44NCAzNS45MiAxLjgxIDM1Ljk3IDEwIDMzLjU1IDEwIDMzLjQ5IDEuNzUgMzAuOTggMS43NCAzMC45OCAwLjA2IDMzLjQ5IDAuMDYgMzUuOTEgMC4wNlwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIwIDkuOTcgNi41IDEwIDYuNSA3LjYzIDIuNDEgNy42MyAyLjQxIDAuMjYgMCAyLjI2IDAgOS45N1wiLz5cclxuPC9zdmc+YFxyXG4gICAgfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRyaWJ1dGVzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgYXR0cmlic1BhdGNocyA9IFtdXHJcbiAgICB0aGlzLmNhbmNlbFBhdGNoQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGF0dHJpYnNQYXRjaHMuZm9yRWFjaChlID0+IGUoKSlcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSghdjIuTWVzc2FnZUNvbXBvbmVudClhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSlcclxuICAgIFxyXG4gICAgLy8gVE9ETzogdHJ5IHRvIHBhdGNoIGNvcnJlY3RseSB0aGUgdXNlciBwb3BvdXQgb24gYSBuZXh0IHVwZGF0ZVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBlbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRGlzY29yZFRhZ1wiKVxyXG4gICAgLnRoZW4oRGlzY29yZFRhZyA9PiB7XHJcbiAgICAgICAgbGV0IERpc2NvcmRUYWdDb21wID0gRGlzY29yZFRhZy5kZWZhdWx0XHJcbiAgICAgICAgRGlzY29yZFRhZy5kZWZhdWx0ID0gZnVuY3Rpb24ocHJvcHMpe1xyXG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBEaXNjb3JkVGFnQ29tcChwcm9wcylcclxuXHJcbiAgICAgICAgICAgIGxldCBpZCA9IHV1aWR2NCgpXHJcblxyXG4gICAgICAgICAgICBsZXQgYmFkZ2VEaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCI1cHhcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIGtleTogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKVxyXG5cclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW3JldHVyblZhbHVlXVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHByb3BzLnVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYmFkZ2VEaXYpXHJcbiAgICAgICAgICAgIGxldCBkaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgY2hpbGRyZW4pXHJcbiAgICAgICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBwcm9wcy51c2VyLCBmYWxzZSlcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkaXZcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZSl7IC8vIHRoaXMgY2FuIGJlIGEgYmxvY2tlZCBtZXNzYWdlIChub3Qgb3BlbmVkKVxyXG4gICAgICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wiZGF0YS1tZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXHJcbiAgICAgICAgfVxyXG4gICAgfX0pKVxyXG4gICAgICAgIC8qXHJcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wibWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxyXG4gICAgfX0pKSovXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgdGltZXNDaGVja2VkID0gMDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfWApLmxlbmd0aCA+IDApIHRpbWVzQ2hlY2tlZCsrO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGltZXNDaGVja2VkID49IDUwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJsb2FkaW5nXCIpIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge3NldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7fSk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluamVjdEV4dGVybmFscyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgYXdhaXQgRE9NLmFkZFNjcmlwdChcImFjZS1zY3JpcHRcIiwgXCJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9hY2UvMS4yLjkvYWNlLmpzXCIpO1xyXG4gICAgaWYgKHdpbmRvdy5yZXF1aXJlLm9yaWdpbmFsKSB3aW5kb3cucmVxdWlyZSA9IHdpbmRvdy5yZXF1aXJlLm9yaWdpbmFsO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdFNldHRpbmdzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLmluaXRpYWxpemUoKTtcclxuICAgIGlmKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikgJiYgIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpe1xyXG4gICAgICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIGRlZmF1bHRDb29raWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgZGVmYXVsdFJQQyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldHRpbmdzUGFuZWwubG9hZFNldHRpbmdzKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBzZXR0aW5nIGluIGRlZmF1bHRDb29raWUpIHtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW3NldHRpbmddID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPSBkZWZhdWx0Q29va2llW3NldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5wcm90b3R5cGUgJiYgZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucylcclxuICAgIC50aGVuKHNldHRpbmdNb2R1bGUgPT4ge1xyXG5cclxuICAgICAgICBsZXQgZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zXHJcbiAgICAgICAgc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBnZXRQcmVkaWNhdGVTZWN0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuXHJcbiAgICAgICAgICAgIGlmKHJlc3VsdFsxXS5zZWN0aW9uID09PSBcIk15IEFjY291bnRcIil7IC8vIHVzZXIgc2V0dGluZ3MsIG5vdCBndWlsZCBzZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvcGVkID0gW11cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcblxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uc2V0dGluZ3NQYW5lbC5yZW5kZXJTaWRlYmFyKHRoaXMpKVxyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlKHBvcGVkWzBdKXtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwb3BlZC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufTtcclxuXHJcblxyXG5sZXQgY2xhc3NOYW1lTGF5ZXJcclxubGV0IGNsYXNzTmFtZVNvY2lhbExpbmtzXHJcbmxldCBjbGFzc05hbWVNb2RhbFxyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdE9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgbWFpbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW5Nb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHBsdWdpbk1vZHVsZS5yYXdPYnNlcnZlcihtdXRhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxyXG4gICAgICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZUxheWVyKWNsYXNzTmFtZUxheWVyID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXJcclxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZVNvY2lhbExpbmtzKWNsYXNzTmFtZVNvY2lhbExpbmtzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zb2NpYWxMaW5rcyAmJiB0eXBlb2YgZS5zb2NpYWxMaW5rcyA9PT0gXCJzdHJpbmdcIilbMF0uc29jaWFsTGlua3NcclxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZU1vZGFsKWNsYXNzTmFtZU1vZGFsID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tb2RhbCAmJiB0eXBlb2YgZS5tb2RhbCA9PT0gXCJzdHJpbmdcIiAmJiBlLmlubmVyICYmIHR5cGVvZiBlLmlubmVyID09PSBcInN0cmluZ1wiICYmICFlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSlbMF0ubW9kYWxcclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIikgPT09IFwiR1VJTERfU0VUVElOR1NcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lU29jaWFsTGlua3MpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnRFbGVtZW50ID09IGRvY3VtZW50LmJvZHkgJiYgbm9kZS5xdWVyeVNlbGVjdG9yKFwiI2FjZV9zZXR0aW5nc21lbnVcIikpIG5vZGUuaWQgPSBcImFjZV9zZXR0aW5nc21lbnVfY29udGFpbmVyXCI7XHJcblxyXG4gICAgICAgICAgICAvLyBFbW9qaSBQaWNrZXJcclxuICAgICAgICAgICAgLy9ub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYW5pbWF0b3JMZWZ0LTFFUXhVMFwiKVxyXG4gICAgICAgICAgICAvL2lmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcjIpICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVFbW9qaVBpY2tlcikubGVuZ3RoICAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLlwiK2NsYXNzTmFtZUVtb2ppUGlja2VyKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVBbmltYXRvckxlZnQpKSBxdWlja0Vtb3RlTWVudS5vYnNDYWxsYmFjayhub2RlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbWFpbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zaG93Q2hhbmdlbG9nTW9kYWwgPSBmdW5jdGlvbihvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5hbGVydCA9IGZ1bmN0aW9uKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hTb2NpYWwgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNvY2lhbFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBUYWJCYXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIlRhYkJhclwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFUYWJCYXIpIHJldHVybjtcclxuICAgIHRoaXMuc29jaWFsUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChUYWJCYXIucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCB8fCBjaGlsZHJlbi5sZW5ndGggPCAzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDNdLnR5cGUuZGlzcGxheU5hbWUgIT09IFwiU2VwYXJhdG9yXCIpIHJldHVybjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcInNvY2lhbExpbmtzXCIpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKEFuY2hvcikge1xyXG4gICAgICAgICAgICBsZXQgc29jaWFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNvY2lhbExpbmtzKVswXVxyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09uZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWwoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZSA9IG5ld09uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUNvbG9yTXV0ZWQsXHJcbiAgICAgICAgICAgIHNpemVzLFxyXG4gICAgICAgICAgICBjbGFzc05hbWVWZXJzaW9uSGFzaFxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yTXV0ZWQpWzBdLmNvbG9yTXV0ZWQsXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnNpb25IYXNoKVswXS52ZXJzaW9uSGFzaFxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkhhc2ggPSBgKCR7YmRDb25maWcuaGFzaCA/IGJkQ29uZmlnLmhhc2guc3Vic3RyaW5nKDAsIDcpIDogYmRDb25maWcuYnJhbmNofSlgO1xyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gfSwgYExpZ2h0Y29yZCAke2VsZWN0cm9uLmdldEdsb2JhbChcIkJ1aWxkSW5mb1wiKS52ZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCBgKCR7KGVsZWN0cm9uLmdldEdsb2JhbChcIkJ1aWxkSW5mb1wiKS5jb21taXQgfHwgXCJVbmtub3duXCIpLnNsaWNlKDAsIDcpfSlgKSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gfSwgYEJCRCAke2JiZFZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIHZlcnNpb25IYXNoKSlcclxuICAgICAgICBdXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVmVyc2lvbnMgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlO1xyXG4gICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWxWZXJzaW9ucyguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4uc3BsaWNlKDEsIDAsIGFkZGl0aW9uYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgIH07XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRHdWlsZENsYXNzZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIndyYXBwZXJcIiwgXCJ1bnJlYWRNZW50aW9uc0JhclwiKTtcclxuICAgIGNvbnN0IGd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZ3VpbGRzRXJyb3JcIiwgXCJzZWxlY3RlZFwiKTtcclxuICAgIGNvbnN0IHBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImJsb2JDb250YWluZXJcIik7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRMaXN0SXRlbXMgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEd1aWxkQ2xhc3NlcyA9IGdldEd1aWxkQ2xhc3NlcygpO1xyXG4gICAgY29uc3QgbGlzdEl0ZW1DbGFzcyA9IEd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICBjb25zdCBibG9iQ2xhc3MgPSBHdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICBjb25zdCByZWFjdEluc3RhbmNlID0gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke2xpc3RJdGVtQ2xhc3N9IC4ke2Jsb2JDbGFzc31gKS5wYXJlbnRFbGVtZW50KTtcclxuICAgIGNvbnN0IEd1aWxkQ29tcG9uZW50ID0gcmVhY3RJbnN0YW5jZS5yZXR1cm4udHlwZTtcclxuICAgIGlmICghR3VpbGRDb21wb25lbnQpIHJldHVybjtcclxuICAgIHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkQ29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnJldHVyblZhbHVlICYmIGRhdGEudGhpc09iamVjdCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkRGF0YSA9IGRhdGEudGhpc09iamVjdC5wcm9wcztcclxuICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZVxyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIGNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIGNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSBjbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcclxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lXHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkUGlsbHMgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmd1aWxkUGlsbFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBndWlsZFBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmICFtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LnRvU3RyaW5nICYmIG0uZGVmYXVsdC50b1N0cmluZygpLmluY2x1ZGVzKFwidHJhbnNsYXRlM2RcIikpO1xyXG4gICAgaWYgKCFndWlsZFBpbGwpIHJldHVybjtcclxuICAgIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICBpZiAocHJvcHMudW5yZWFkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICBpZiAocHJvcHMuc2VsZWN0ZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLmhvdmVyZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWhvdmVyZWRcIjtcclxuICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xyXG4gICAgY29uc3QgZ3VpbGRDb21wb25lbnRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJyZW5kZXJMaXN0SXRlbVwiKTtcclxuICAgIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcclxuICAgIGNvbnN0IEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBndWlsZENvbXBvbmVudHMuU2VwYXJhdG9yKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlblszXS50eXBlID0gR3VpbGRTZXBhcmF0b3I7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEF0dGFjaG1lbnQgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLkF0dGFjaG1lbnRQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgQXR0YWNobWVudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF0dGFjaG1lbnRcIilbMF0gLy8gdGVtcG9yYXJ5XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFBdHRhY2htZW50IHx8ICFBdHRhY2htZW50LmRlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuQXR0YWNobWVudFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goQXR0YWNobWVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pcmV0dXJuXHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdIHx8IG51bGxcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51cmwpcmV0dXJuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcclxuICAgICAgICAgICAgaWQ6IFwiY2VydGlmaWVkLVwiK2lkXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgUGx1Z2luQ2VydGlmaWVyLnBhdGNoKGF0dGFjaG1lbnQsIFwiY2VydGlmaWVkLVwiK2lkKVxyXG4gICAgfX0pXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoTWVzc2FnZUhlYWRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMubWVzc2FnZUhlYWRlclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBNZXNzYWdlSGVhZGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJNZXNzYWdlVGltZXN0YW1wXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVzc2FnZUhlYWRlciB8fCAhTWVzc2FnZUhlYWRlci5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lc3NhZ2VIZWFkZXIsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXV0aG9yID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJtZXNzYWdlLmF1dGhvclwiKTtcclxuICAgICAgICAvLyBjb25zdCBoZWFkZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wc1wiKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW5cIik7XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXV0aG9yIHx8ICFhdXRob3IuaWQpcmV0dXJuXHJcbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChhdXRob3IuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYXV0aG9yLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IGF1dGhvci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgYXV0aG9yLCB0cnVlKVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGNoYXQpe1xyXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiYWRnZXMtXCIraWQpXHJcbiAgICAgICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVyblxyXG4gICAgICAgIGlmKGRpdi5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5cclxuICAgICAgICBsZXQgYmxvY2tEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXHJcbiAgICAgICAgYmxvY2tEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXHJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGJsb2NrRGl2KVxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuXHJcbiAgICAgICAgZGlzdGFudC5nZXRCYWRnZXModXNlci5pZClcclxuICAgICAgICAudGhlbihiYWRnZXMgPT4ge1xyXG4gICAgICAgICAgICBiYWRnZXMuZm9yRWFjaChiYWRnZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzdmc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCIxNnB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtbG9nb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxNnB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJhZGdlLnNjb3Blcy5mb3JFYWNoKHNjb3BlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihzY29wZSA9PT0gXCJ1c2VyXCIpey8vIHJlcXVpcmUgdXNlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy51c2VyID0gdXNlclxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pIFxyXG4gICAgICAgICAgICAgICAgaWYoIWJhZGdlLmhyZWYpe1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLkFuY2hvciA9IEFuY2hvclxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmhyZWYgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IGJhZGdlLm5hbWV9LFxyXG4gICAgICAgICAgICAgICAgICAgIGJhZGdlLmhyZWYgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IGJhZGdlLmhyZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKGVsZW1lbnQsIGRpdjIpXHJcbiAgICAgICAgICAgICAgICBkaXYyLmNoaWxkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoTWVtYmVyTGlzdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMubWVtYmVyTGlzdFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBNZW1iZXJMaXN0SXRlbSA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWVtYmVyTGlzdEl0ZW1cIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFNZW1iZXJMaXN0SXRlbSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUucmVuZGVyRGVjb3JhdG9ycykgcmV0dXJuO1xyXG4gICAgdGhpcy5tZW1iZXJMaXN0UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUsIFwicmVuZGVyRGVjb3JhdG9yc1wiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS50aGlzT2JqZWN0LCBcInByb3BzLnVzZXJcIik7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhdXNlciB8fCAhdXNlci5pZClyZXR1cm5cclxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpe1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmFkZ2VzLVwiK2lkfSlcclxuICAgICAgICApXHJcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGZhbHNlKVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGluamVjdGlvblBhdGggPSBEYXRhU3RvcmUuaW5qZWN0aW9uUGF0aDtcclxuICAgIGlmICghaW5qZWN0aW9uUGF0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgY29uc3Qgcm1yZiA9IHJlcXVpcmUoXCJyaW1yYWZcIik7XHJcbiAgICBjb25zdCB5YXV6bCA9IHJlcXVpcmUoXCJ5YXV6bFwiKTtcclxuICAgIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoXCJta2RpcnBcIik7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gLypyZXF1aXJlKFwicmVxdWVzdFwiKTsqLyBudWxsXHJcblxyXG4gICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShpbmplY3Rpb25QYXRoLCBcIi4uXCIpO1xyXG4gICAgY29uc3QgZm9sZGVyTmFtZSA9IHBhdGguYmFzZW5hbWUoaW5qZWN0aW9uUGF0aCk7XHJcbiAgICBjb25zdCB6aXBMaW5rID0gXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL2FyY2hpdmUvaW5qZWN0b3IuemlwXCI7XHJcbiAgICBjb25zdCBzYXZlZFppcCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcImluamVjdG9yLnppcFwiKTtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcIkJldHRlckRpc2NvcmRBcHAtaW5qZWN0b3JcIik7XHJcblxyXG4gICAgLy8gRG93bmxvYWQgdGhlIGluamVjdG9yIHppcCBmaWxlXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkRvd25sb2FkaW5nIFwiICsgemlwTGluayk7XHJcbiAgICBsZXQgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIHJlcXVlc3QuZ2V0KHt1cmw6IHppcExpbmssIGVuY29kaW5nOiBudWxsfSwgYXN5bmMgKGVycm9yLCByZXNwb25zZSwgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21lb25lIGhhcyB0aGVpciBvd24gY29weVxyXG4gICAgICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhzYXZlZFppcCwgcmVzKSk7XHJcbiAgICAgICAgICAgIGlmIChhbHJlYWR5RXhpc3RzKSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMucmVuYW1lKHNhdmVkWmlwLCBgJHtzYXZlZFppcH0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcclxuXHJcbiAgICAgICAgICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiV3JpdGluZyBcIiArIHNhdmVkWmlwKTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlKHNhdmVkWmlwLCBib2R5LCBlcnIgPT4gcmVzb2x2ZSghZXJyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmICghc3VjY2VzcykgcmV0dXJuIHN1Y2Nlc3M7XHJcblxyXG4gICAgLy8gQ2hlY2sgYW5kIGRlbGV0ZSByZW5hbWUgZXh0cmFjdGlvblxyXG4gICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoZXh0cmFjdGVkRm9sZGVyLCByZXMpKTtcclxuICAgIGlmIChhbHJlYWR5RXhpc3RzKSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgYCR7ZXh0cmFjdGVkRm9sZGVyfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xyXG4gICAgXHJcbiAgICAvLyBVbnppcCB0aGUgZG93bmxvYWRlZCB6aXAgZmlsZVxyXG4gICAgY29uc3QgemlwZmlsZSA9IGF3YWl0IG5ldyBQcm9taXNlKHIgPT4geWF1emwub3BlbihzYXZlZFppcCwge2xhenlFbnRyaWVzOiB0cnVlfSwgKGVyciwgemlwKSA9PiAgcih6aXApKSk7XHJcbiAgICB6aXBmaWxlLm9uKFwiZW50cnlcIiwgZnVuY3Rpb24oZW50cnkpIHtcclxuICAgICAgICAvLyBTa2lwIGRpcmVjdG9yaWVzLCB0aGV5IGFyZSBoYW5kbGVkIHdpdGggbWtkaXJwXHJcbiAgICAgICAgaWYgKGVudHJ5LmZpbGVOYW1lLmVuZHNXaXRoKFwiL1wiKSkgcmV0dXJuIHppcGZpbGUucmVhZEVudHJ5KCk7XHJcblxyXG4gICAgICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRXh0cmFjdGluZyBcIiArIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICAvLyBNYWtlIGFueSBuZWVkZWQgcGFyZW50IGRpcmVjdG9yaWVzXHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShmdWxsUGF0aCkpO1xyXG4gICAgICAgIHppcGZpbGUub3BlblJlYWRTdHJlYW0oZW50cnksIGZ1bmN0aW9uKGVyciwgcmVhZFN0cmVhbSkge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLm9uKFwiZW5kXCIsIGZ1bmN0aW9uKCkge3ppcGZpbGUucmVhZEVudHJ5KCk7fSk7IC8vIEdvIHRvIG5leHQgZmlsZSBhZnRlciB0aGlzXHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ucGlwZShmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUGF0aCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB6aXBmaWxlLnJlYWRFbnRyeSgpOyAvLyBTdGFydCByZWFkaW5nXHJcblxyXG4gICAgLy8gV2FpdCBmb3IgdGhlIGZpbmFsIGZpbGUgdG8gZmluaXNoXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHppcGZpbGUub25jZShcImVuZFwiLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBmaW5hbCBzdGVwXHJcbiAgICBjb25zdCBiYWNrdXBGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgYCR7Zm9sZGVyTmFtZX0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGluamVjdGlvblBhdGgsIGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFJlbmFtZSB0aGUgZXh0cmFjdGVkIGZvbGRlciB0byB3aGF0IGl0IHNob3VsZCBiZVxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgYFJlbmFtaW5nICR7cGF0aC5iYXNlbmFtZShleHRyYWN0ZWRGb2xkZXIpfSB0byAke2ZvbGRlck5hbWV9YCk7XHJcbiAgICBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBpbmplY3Rpb25QYXRoLCBlcnIgPT4gcmVzb2x2ZSghZXJyKSkpO1xyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJGYWlsZWQgdG8gcmVuYW1lIHRoZSBmaW5hbCBkaXJlY3RvcnlcIik7XHJcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgcmVuYW1lIGhhZCBpc3N1ZXMsIGRlbGV0ZSB3aGF0IHdlIHRyaWVkIHRvIHJlbmFtZSBhbmQgcmVzdG9yZSBiYWNrdXBcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4gcmVzdG9yaW5nIGJhY2t1cHMuXCIpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihleHRyYWN0ZWRGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShiYWNrdXBGb2xkZXIsIGluamVjdGlvblBhdGgsIHJlc29sdmUpKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgaGF2ZSBnb25lIHNtb290aGx5LlxyXG4gICAgLy8gQ2xlYW51cCB0aGUgYmFja3VwIGZvbGRlciB0aGVuIHJlbW92ZSB0aGUgemlwXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnVubGluayhzYXZlZFppcCwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiSW5qZWN0b3IgVXBkYXRlZCFcIik7XHJcbiAgICByZXR1cm4gc3VjY2VzcztcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlKCk7XHJcblxyXG4vKipcclxuICogRG9uJ3QgZXhwb3NlIGNvcmUgLSBjb3VsZCBiZSBkYW5nZXJvdXMgZm9yIG5vd1xyXG4gKi8iLCJjb25zdCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyA9IHdpbmRvdy5yZXF1aXJlXHJcblxyXG5pbXBvcnQge2JkQ29uZmlnfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5cclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgcmVsZWFzZUNoYW5uZWwgPSBEaXNjb3JkTmF0aXZlLmdsb2JhbHMgPyBEaXNjb3JkTmF0aXZlLmdsb2JhbHMucmVsZWFzZUNoYW5uZWwgOiBEaXNjb3JkTmF0aXZlLmFwcCA/IERpc2NvcmROYXRpdmUuYXBwLmdldFJlbGVhc2VDaGFubmVsKCkgOiBcInN0YWJsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERhdGFTdG9yZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB7c2V0dGluZ3M6IHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fX07XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhID0ge307XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRhdGFTdG9yZSA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLkJERmlsZSkpIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5CREZpbGUsIFwiYmluYXJ5XCIpKVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInNldHRpbmdzXCIpKSB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGxldCBzZXR0aW5ncyA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHRoaXMuc2V0dGluZ3NGaWxlKTtcclxuICAgICAgICAgICAgZnMudW5saW5rU3luYyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcInNldHRpbmdzXCIpKSBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319LCB7W3JlbGVhc2VDaGFubmVsXTogc2V0dGluZ3N9KTtcclxuICAgICAgICAgICAgZWxzZSBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319LCBzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QkREYXRhKFwic2V0dGluZ3NcIiwgc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgVXRpbHMuYWxlcnQoXCJDb3JydXB0IFN0b3JhZ2VcIiwgXCJUaGUgYmQgc3RvcmFnZSBoYXMgc29tZWhvdyBiZWNvbWUgY29ycnVwdC4gWW91IG1heSBlaXRoZXIgdHJ5IHRvIHNhbHZhZ2UgdGhlIGZpbGUgb3IgZGVsZXRlIGl0IHRoZW4gcmVsb2FkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGluamVjdGlvblBhdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3Rpb25QYXRoKSByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aDtcclxuICAgICAgICBjb25zdCBlbGVjdHJvbiA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSBlbGVjdHJvbi5nZXRBcHBQYXRoKCk7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0Jhc2UgPSBlbGVjdHJvbi5nZXRQYXRoKFwidXNlckRhdGFcIik7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0xvY2F0aW9uID0gcGF0aC5yZXNvbHZlKHJvYW1pbmdCYXNlLCBlbGVjdHJvbi5nZXRWZXJzaW9uKCksIFwibW9kdWxlc1wiLCBcImRpc2NvcmRfZGVza3RvcF9jb3JlXCIsIFwiaW5qZWN0b3JcIik7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBwYXRoLnJlc29sdmUoYmFzZSwgXCIuLlwiLCBcImFwcFwiKTtcclxuICAgICAgICBjb25zdCByZWFsTG9jYXRpb24gPSBmcy5leGlzdHNTeW5jKGxvY2F0aW9uKSA/IGxvY2F0aW9uIDogZnMuZXhpc3RzU3luYyhyb2FtaW5nTG9jYXRpb24pID8gcm9hbWluZ0xvY2F0aW9uIDogbnVsbDtcclxuICAgICAgICBpZiAoIXJlYWxMb2NhdGlvbikgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gcmVhbExvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25maWdGaWxlKCkge3JldHVybiB0aGlzLl9jb25maWdGaWxlIHx8ICh0aGlzLl9jb25maWdGaWxlID0gcGF0aC5yZXNvbHZlKHRoaXMuaW5qZWN0aW9uUGF0aCwgXCJiZXR0ZXJkaXNjb3JkXCIsIFwiY29uZmlnLmpzb25cIikpO31cclxuICAgIGdldCBCREZpbGUoKSB7cmV0dXJuIHRoaXMuX0JERmlsZSB8fCAodGhpcy5fQkRGaWxlID0gcGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoLCBcImJkc3RvcmFnZS5qc29uXCIpKTt9XHJcbiAgICBnZXQgc2V0dGluZ3NGaWxlKCkge3JldHVybiB0aGlzLl9zZXR0aW5nc0ZpbGUgfHwgKHRoaXMuX3NldHRpbmdzRmlsZSA9IHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCwgXCJiZHNldHRpbmdzLmpzb25cIikpO31cclxuICAgIGdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkge3JldHVybiBwYXRoLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgcGx1Z2luTmFtZSArIFwiLmNvbmZpZy5qc29uXCIpO31cclxuXHJcbiAgICBnZXRTZXR0aW5nR3JvdXAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5zZXR0aW5nc1tyZWxlYXNlQ2hhbm5lbF1ba2V5XSB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNldHRpbmdHcm91cChrZXksIGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gPSBkYXRhO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJERGF0YShrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW2tleV0gfHwgXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRCRERhdGEoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSksIEpTT04uc3RyaW5naWZ5KHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICBkZWxldGUgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSksIEpTT04uc3RyaW5naWZ5KHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERldk1vZGUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kZWJ1Z0xpc3RlbmVyID0gdGhpcy5kZWJ1Z0xpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lciA9IHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstZG0tMVwiXSkgdGhpcy5zdGFydENvcHlTZWxlY3RvcigpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydERlYnVnTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcERlYnVnTGlzdGVuZXIoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydENvcHlTZWxlY3RvcigpIHtcclxuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcENvcHlTZWxlY3RvcigpIHtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDExOSB8fCBlLndoaWNoID09IDExOCkgey8vRjhcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1slY0Rldk1vZGUlY10gJWNCcmVhay9SZXN1bWVcIiwgXCJjb2xvcjogcmVkO1wiLCBcImNvbG9yOiAjMzAzMDMwOyBmb250LXdlaWdodDo3MDA7XCIsIFwiY29sb3I6cmVkO1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgZGVidWdnZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZGVidWdnZXJcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29weVNlbGVjdG9yTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKGUudGFyZ2V0KTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICAgICAgY2xhc3NMYXllciwgXHJcbiAgICAgICAgICAgICAgICBjbGFzc0l0ZW1zXHJcbiAgICAgICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuZGlzYWJsZWRQb2ludGVyRXZlbnRzKVswXSxcclxuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUubWVudSlbMF1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoKCkge1xyXG4gICAgICAgICAgICAgICAgaWYoIWNsYXNzSXRlbXMgfHwgIWNsYXNzTGF5ZXIubGF5ZXIpcmV0dXJuIGNvbnNvbGUubG9nKGNsYXNzSXRlbXMsIGNsYXNzTGF5ZXIubGF5ZXIpXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNtID0gRE9NLnF1ZXJ5KFwiLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzSXRlbXMubWVudSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5xdWVyeShcIiNhcHAtbW91bnQgPiAuXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NMYXllci5sYXllckNvbnRhaW5lcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0xheWVyLmxheWVyfVwiPmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubWVudX0gJHtjbGFzc0l0ZW1zLnN0eWxlRmxleGlibGV9ICR7Y2xhc3NJdGVtcy5hY2NvbW1vZGF0ZVNjcm9sbGJhcn0gYmQtY29udGV4dC1tZW51XCIgc3R5bGU9XCJcIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuYXBwZW5kKGNtKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGNtV3JhcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IGUuY2xpZW50WSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUubGVmdCA9IGUuY2xpZW50WCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcIm1lbnVcIilcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCItMVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5pZCA9IFwiYmQtY29weS1zZWxlY3Rvci1jb250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBcIkNvcHkgU2VsZWN0b3IgQWN0aW9uc1wiKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNsYXNzZXMgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLnNjcm9sbGVyV3JhcClbMF1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlcldyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlckNsYXNzZXMuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJDbGFzc2VzLnRoZW1lR2hvc3RIYWlybGluZX1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyKVswXS5zY3JvbGxlcn0gJHtjbGFzc0l0ZW1zLnNjcm9sbGVyfVwiPjwvZGl2PmApXHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJXcmFwLmFwcGVuZChzY3JvbGxlcilcclxuICAgICAgICAgICAgICAgICAgICBjbS5hcHBlbmQoc2Nyb2xsZXJXcmFwKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVDTSA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSAmJiBlLmtleUNvZGUgIT09IDI3KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtV3JhcC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gY20ucGFyZW50RWxlbWVudFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IGNtLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY21nID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cImdyb3VwXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY21pID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMuaXRlbX0gJHtjbGFzc0l0ZW1zLmxhYmVsQ29udGFpbmVyfSAke2NsYXNzSXRlbXMuY29sb3JEZWZhdWx0fVwiIHJvbGU9XCJtZW51aXRlbVwiIGlkPVwiYmQtY29weS1zZWxlY3Rvci1pdGVtLWNtXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLmxhYmVsfVwiPkNvcHkgU2VsZWN0b3I8L2Rpdj5gKSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLk5hdGl2ZU1vZHVsZS5jb3B5KHNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRzID0gRE9NLnF1ZXJ5QWxsKFwiZGl2W3JvbGU9bWVudWl0ZW1dLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzSXRlbXMuZm9jdXNlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgJiYgZWxlbWVudHMuZm9yRWFjaChlbGVtID0+IGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QuYWRkKGNsYXNzSXRlbXMuZm9jdXNlZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY21pLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNtZy5hcHBlbmQoY21pKTtcclxuICAgICAgICAgICAgICAgIGlmKHNjcm9sbGVyLmNoaWxkTm9kZXMubGVuZ3RoKXsgLy8gYXBlbmQgYSBzZXBhcmF0b3JcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiByb2xlPVwic2VwYXJhdG9yXCIgY2xhc3M9XCIke2NsYXNzSXRlbXMuc2VwYXJhdG9yfVwiPjwvZGl2PmApXHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKHNlcGFyYXRvcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChjbWcpO1xyXG4gICAgICAgICAgICAgICAgaWYoY21XcmFwLmNsaWVudEhlaWdodCA8IGNtV3JhcC5zY3JvbGxIZWlnaHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmcgXCIrY21XcmFwLnN0eWxlLnRvcClcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gKGNtV3JhcC5zdHlsZS50b3AgLSBjbWcuY2xpZW50SGVpZ2h0KSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nXCIrY21XcmFwLnN0eWxlLnRvcClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXR0YWNoLCAxKTtcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0b3IoZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VsZW1lbnQuaWR9YDtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBcclxuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBmdW5jdGlvbiBmdWxsUGF0aChlbCl7XHJcbiAgICAgICAgICAgIHZhciBuYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICB3aGlsZSAoZWwucGFyZW50Tm9kZSl7XHJcbiAgICAgICAgICAgICAgaWYgKGVsLmlkKXtcclxuICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoJyMnK2VsLmlkKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsPT1lbC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QuZW50cmllcygpKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpKTtcclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MSxlPWVsO2UucHJldmlvdXNFbGVtZW50U2libGluZztlPWUucHJldmlvdXNFbGVtZW50U2libGluZyxjKyspO1xyXG4gICAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsoKHR5cGVvZiBlbC5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWwuY2xhc3NOYW1lKSB8fCBcIlwiKS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gISFlKS5tYXAoZSA9PiBcIi5cIitlKS5qb2luKFwiXCIpK1wiOm50aC1jaGlsZChcIitjK1wiKVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsPWVsLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuYW1lcy5qb2luKFwiID4gXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVsbFBhdGgoZWxlbWVudClcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcyhlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBsYXRlc3RSdWxlID0gcnVsZXNbcnVsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKGxhdGVzdFJ1bGUpIHJldHVybiBsYXRlc3RSdWxlLnNlbGVjdG9yVGV4dDtcclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50LmNsYXNzTGlzdC5sZW5ndGgpIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LmNsYXNzTGlzdCkuam9pbihcIi5cIil9YDtcclxuICAgICAgICByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCkuam9pbihcIi5cIil9YDsqL1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJ1bGVzKGVsZW1lbnQsIGNzcyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cykge1xyXG4gICAgICAgIC8vaWYgKHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMpIHJldHVybiB3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0cyA9IFsuLi5jc3NdLmZpbHRlcihzID0+ICFzLmhyZWYgfHwgIXMuaHJlZi5pbmNsdWRlcyhcIkJldHRlckRpc2NvcmRBcHBcIikpO1xyXG4gICAgICAgIGNvbnN0IHJ1bGVzID0gc2hlZXRzLm1hcChzID0+IFsuLi4ocy5jc3NSdWxlcyB8fCBbXSldKS5mbGF0KCk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJ1bGVzID0gcnVsZXMuZmlsdGVyKHIgPT4gciAmJiByLnNlbGVjdG9yVGV4dCAmJiBlbGVtZW50Lm1hdGNoZXMoci5zZWxlY3RvclRleHQpICYmIHIuc3R5bGUubGVuZ3RoICYmIHIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikubGVuZ3RoIDwgOCAmJiAhci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5pbmNsdWRlcyhcIipcIikpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50UnVsZXM7XHJcbiAgICB9XHJcbn07IiwiZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc2FibGVUeXBpbmcge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuc3RhcnRUeXBpbmcpXHJcbiAgICAgICAgLnRoZW4odHlwaW5nTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VHlwaW5nID0gdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RhcnRUeXBpbmdcclxuICAgICAgICAgICAgdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RhcnRUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RhcnRUeXBpbmcuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RvcFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmdcclxuICAgICAgICAgICAgdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RvcFR5cGluZyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdG9wVHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGlzYWJsZVR5cGluZyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2VcclxuICAgIH1cclxufSIsImltcG9ydCBCdWdIdW50ZXJCYWRnZSBmcm9tIFwiLi4vc3ZnL2J1Z19odW50ZXJcIlxyXG5pbXBvcnQgTGlnaHRjb3JkVXNlckJhZGdlIGZyb20gXCIuLi9zdmcvTGlnaHRjb3JkVXNlclwiO1xyXG5pbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcclxuaW1wb3J0IHsgc2V0dGluZ3NDb29raWUgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENpcmN1cyBmcm9tIFwiLi4vc3ZnL2NpcmN1c1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHsgLy8gR2VuZXJhdGUgVVVJRCAoTm8gY3J5cHRvIHJuZylcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcclxuICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn0gIFxyXG5cclxuY29uc3QgYXdhaXRpbmdCYWRnZXNQcm9taXNlcyA9IHt9XHJcbmxldCBiYWRnZXNUb0ZldGNoID0gW11cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXN0YW50U2VydmVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczoge1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGlzdGFudFNlcnZlciA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FjaGUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY2FjaGUoZGF0YSl7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHRoaXMuX2NhY2hlICE9PSBcIm9iamVjdFwiKXJldHVybiB0aGlzLl9jYWNoZSA9IGRhdGFcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NhY2hlLCBkYXRhKVxyXG4gICAgfS8qXHJcblxyXG4gICAgYXN5bmMgZGVsZXRlKCl7XHJcbiAgICAgICAgQmRBcGkuc2hvd1RvYXN0KFwiRGVsZXRpbmcgYWxsIGluZm9zIGFib3V0IHlvdSBvbiBMaWdodGNvcmQgU2VydmVycy4uLlwiLCB7dHlwZTogXCJ3YXJuXCJ9KVxyXG4gICAgICAgIHJldHVybiBoYW5kbGVSZXF1ZXN0KFJvdXRlcy5kZWxldGUsIFwiZGVsZXRlXCIpXHJcbiAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXtcclxuICAgICAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQsIGNvdWxkbid0IGRlbGV0ZSBpbmZvcm1hdGlvbnMuIFNlZSBjb25zb2xlIGZvciBtb3JlIGluZm9zXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBkZWxldGUgYWxsIGluZm9ybWF0aW9uczogJHsocmVzLnN0YXR1cytcIiBcIityZXMuc3RhdHVzVGV4dCtcIiBcIithd2FpdCByZXMudGV4dCgpKX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgU3VjY2VzZnVsbHkgZGVsZXRlZCBpbmZvcm1hdGlvbnMuYClcclxuICAgICAgICAgICAgQmRBcGkuc2hvd1RvYXN0KFwiU3VjY2VzZnVsbHkgZGVsZXRlZCBpbmZvcm1hdGlvbnNcIiwge3R5cGU6IFwic3VjY2Vzc1wifSlcclxuICAgICAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuQXV0aG9yaXphdGlvbiA9IG51bGxcclxuICAgICAgICAgICAgcmV0dXJuIHJlcy5qc29uKClcclxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQsIGNvdWxkbid0IGRlbGV0ZSBpbmZvcm1hdGlvbnMuIFNlZSBjb25zb2xlIGZvciBtb3JlIGluZm9zXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGRlbGV0ZSBhbGwgaW5mb3JtYXRpb25zOiAke2Vyci5zdGFja31gKVxyXG4gICAgICAgIH0pXHJcbiAgICB9Ki9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjdXN0b20gYmFkZ2VzIGZyb20gdGhlIHVzZXIgSUQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlciBUaGUgdXNlciBJRCBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnN0YW50c1tcImJhZGdlc1wiXT59XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEJhZGdlcyh1c2VyKXtcclxuICAgICAgICBpZih0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXSlyZXR1cm4gdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cclxuICAgICAgICBpZihhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdKXJldHVybiBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXHJcblxyXG4gICAgICAgIGxldCByZXNvbHZlXHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMpID0+IChyZXNvbHZlID0gcmVzKSlcclxuICAgICAgICBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdID0gbmV3UHJvbWlzZVxyXG5cclxuICAgICAgICBjb25zdCBiYWRnZXMgPSBbXVxyXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgQ29uc3RhbnRzLmJhZGdlcyl7XHJcbiAgICAgICAgICAgIGlmKGJhZGdlLmRlZmF1bHRVc2Vycy5pbmNsdWRlcyh1c2VyKSliYWRnZXMucHVzaChiYWRnZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmV0Y2hlZEJhZGdlcyA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXJldHVybiByZXNvbHZlKFtdKVxyXG4gICAgICAgICAgICBiYWRnZXNUb0ZldGNoLnB1c2goW3VzZXIsIHJlc29sdmVdKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB1c2VycyA9IGJhZGdlc1RvRmV0Y2hcclxuICAgICAgICAgICAgICAgIGlmKHVzZXJzLmxlbmd0aCA9PT0gMClyZXR1cm5cclxuICAgICAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2ggPSBbXVxyXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdChSb3V0ZXMuYmFkZ2VzLCBcIlBPU1RcIiwgSlNPTi5zdHJpbmdpZnkodXNlcnMubWFwKGUgPT4gZVswXSkpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogc2VydmVyIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCB1c2VyIG9mIHJlc3BvbnNlQm9keSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdXNlcnMuZmluZChwcm9taXNlID0+IHByb21pc2VbMF0gPT09IHVzZXIudXNlcl9pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZVsxXSh1c2VyLmJhZGdlcylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCEoZXJyIGluc3RhbmNlb2YgTGlnaHRjb3JkRXJyb3IpKWNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgfSlcclxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIGZldGNoZWRCYWRnZXMpe1xyXG4gICAgICAgICAgICBpZighQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIFdlIGRvIG5vdCBoYXZlIHRoZSBDb21wb25lbnQsIHNraXAgaXQuXHJcbiAgICAgICAgICAgIGlmKGJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIEFscmVhZHkgaW5zZXJ0ZWQuXHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKENvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IHtcclxuICAgICAgICAgICAgYmFkZ2VzOiBPYmplY3QuYXNzaWduKHRoaXMuY2FjaGUuYmFkZ2VzLCB7W3VzZXJdOiBiYWRnZXN9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXHJcbiAgICAgICAgfSwgNjAwMDAwKTtcclxuXHJcbiAgICAgICAgcmVzb2x2ZShiYWRnZXMpXHJcbiAgICAgICAgZGVsZXRlIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZVJlcXVlc3QgPSBmdW5jdGlvbihyb3V0ZSwgbWV0aG9kLCBkYXRhKXtcclxuICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IExpZ2h0Y29yZEVycm9yKFwiVGhlIGN1cnJlbnQgc2V0dGluZ3MgYmxvY2tlZCB0aGUgcmVxdWVzdC5cIikpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZUZldGNoKGAke0NvbnN0YW50cy5TRVJWRVJfVVJMfS9hcGkvdjEke3JvdXRlfWAsIHtcclxuICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIkNMSUVOVFwiOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogd2luZG93LkxpZ2h0Y29yZC5BcGkuQXV0aG9yaXphdGlvbiB8fCBcIk5vbmU6OkFub255bW91c1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi4oZGF0YSA/IHtcclxuICAgICAgICAgICAgYm9keTogZGF0YVxyXG4gICAgICAgIH0gOiB7fSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmNsYXNzIExpZ2h0Y29yZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJMaWdodGNvcmRFcnJvclwiXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBTRVJWRVJfVVJMOiBcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXpcIixcclxuICAgIGJhZGdlczogWyAvLyBUT0RPOiBBZGQgbW9yZSBiYWRnZXMgKyBzZXJ2ZXIgc2lkZSBzdmdcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkIEJ1ZyBIdW50ZXJcIixcclxuICAgICAgICAgICAgaWQ6IFwiZjA0Njk4ZjUtODE2Yi00MWUzLWJkMDEtOTIyOTExOTNkN2E1XCIsXHJcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xyXG4gICAgICAgICAgICAgICAgXCI2OTY0ODExOTQ0NDMwMTQxNzRcIixcclxuICAgICAgICAgICAgICAgIFwiNjk2MDAzNDU2NjExMzg1Mzk2XCJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc2NvcGVzOiBbXSxcclxuICAgICAgICAgICAgY29tcG9uZW50OiBCdWdIdW50ZXJCYWRnZSxcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkL2xpZ2h0Y29yZC93aWtpL2JhZGdlcyNidWdfaHVudGVyXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQnVmZm9vblwiLFxyXG4gICAgICAgICAgICBpZDogXCIwNjkwNGQzMS02NWI0LTQxZWMtYTUwYy04NjU4YmJkMWFmOTZcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBcIjM4OTAxNjg5NTU0MzcwNTYwMlwiLFxyXG4gICAgICAgICAgICAgICAgXCI2NjQ2MDAxMzQ1Mjg2NjM1NjVcIixcclxuICAgICAgICAgICAgICAgIFwiNjI1MzUwNjU3ODI5ODk2MjI0XCJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc2NvcGVzOiBbXSxcclxuICAgICAgICAgICAgY29tcG9uZW50OiBDaXJjdXMsXHJcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly95b3V0dS5iZS9FSnRiNnotZGxUOD90PTE0NVwiXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUm91dGVzID0ge1xyXG4gICAgYmFkZ2VzOiBgL3VzZXJzL2JhZGdlc2BcclxufSIsIi8qKlxyXG4gKiBDb3B5cmlnaHQgMjAxOCBaYWNoYXJ5IFJhdWVuXHJcbiAqXHJcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xyXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcclxuICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcclxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZFxyXG4gKiB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XHJcbiAqXHJcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxyXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxyXG4gKlxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsXHJcbiAqIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXHJcbiAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFRcclxuICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GXHJcbiAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRVxyXG4gKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cclxuICogXHJcbiAqIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JEUGx1Z2luTGlicmFyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBuYW1lIE9mZnNldFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIC0gVG9wIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByaWdodCAtIFJpZ2h0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib3R0b20gLSBCb3R0b20gb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgLSBMZWZ0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBPdXRlciBoZWlnaHQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggLSBPdXRlciB3aWR0aCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqL1xyXG5cclxuIC8qKlxyXG4gKiBGdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBhZGRlZCBsaXN0ZW5lci5cclxuICogQGNhbGxiYWNrIG1vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lclxyXG4gKi9cclxuIFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Ub29scyB7XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcblx0ICogQWRkcyBhIHN0eWxlIHRvIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBhcyB0aGUgZWxlbWVudCBpZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjc3MgLSBjc3MgdG8gYWRkIHRvIHRoZSBkb2N1bWVudFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTdHlsZShpZCwgY3NzKSB7XHJcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChET01Ub29scy5jcmVhdGVFbGVtZW50KGA8c3R5bGUgaWQ9XCIke2lkfVwiPiR7Y3NzfTwvc3R5bGU+YCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHN0eWxlIGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTdHlsZShpZCkge1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkcy9yZXF1aXJlcyBhIHJlbW90ZSBzY3JpcHQgdG8gYmUgbG9hZGVkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgZm9yIHRoaXMgc2NyaXB0XHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBmcm9tIHdoaWNoIHRvIGxvYWQgdGhlIHNjcmlwdFxyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2NyaXB0IGlzIGxvYWRlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTY3JpcHQoaWQsIHVybCkge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG5cdFx0XHRjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG5cdFx0XHRzY3JpcHQuaWQgPSBpZDtcclxuXHRcdFx0c2NyaXB0LnNyYyA9IHVybDtcclxuXHRcdFx0c2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xyXG5cdFx0XHRzY3JpcHQub25sb2FkID0gcmVzb2x2ZTtcclxuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoc2NyaXB0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHJlbW90ZSBzY3JpcHQgZnJvbSB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZVNjcmlwdChpZCkge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIGh0dHBzOi8vamF2YXNjcmlwdC5pbmZvL2pzLWFuaW1hdGlvblxyXG4gICAgc3RhdGljIGFuaW1hdGUoe3RpbWluZyA9IF8gPT4gXywgdXBkYXRlLCBkdXJhdGlvbn0pIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgICBcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XHJcbiAgICAgICAgICAvLyB0aW1lRnJhY3Rpb24gZ29lcyBmcm9tIDAgdG8gMVxyXG4gICAgICAgICAgbGV0IHRpbWVGcmFjdGlvbiA9ICh0aW1lIC0gc3RhcnQpIC8gZHVyYXRpb247XHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uID4gMSkgdGltZUZyYWN0aW9uID0gMTtcclxuICAgICAgXHJcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlXHJcbiAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHRpbWluZyh0aW1lRnJhY3Rpb24pO1xyXG4gICAgICBcclxuICAgICAgICAgIHVwZGF0ZShwcm9ncmVzcyk7IC8vIGRyYXcgaXRcclxuICAgICAgXHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uIDwgMSkge1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIG15IHNoaXQgdmVyc2lvbiBvZiBub3QgaGF2aW5nIHRvIHVzZSBgJGAgZnJvbSBqUXVlcnkuIE1lYW5pbmdcclxuICAgICAqIHRoYXQgeW91IGNhbiBwYXNzIGEgc2VsZWN0b3IgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBydW4ge0BsaW5rIG1vZHVsZTpET01Ub29scy5xdWVyeX0uXHJcbiAgICAgKiBJdCBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbiBwYXNzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGl0IHdpbGwgcGVyZm9ybSBhbmQgcmV0dXJuIGBwYXJzZUhUTUxgLlxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MXHJcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5xdWVyeVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnkgb3IgSFRNTCB0byBwYXJzZVxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBFaXRoZXIgdGhlIHJlc3VsdCBvZiBgcGFyc2VIVE1MYCBvciBgcXVlcnlgXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBRKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGFyc2VIVE1MKHNlbGVjdG9yKTtcclxuICAgICAgICBjb25zdCBpc0hUTUwgPSBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QgPyBBcnJheS5mcm9tKGVsZW1lbnQpLnNvbWUobiA9PiBuLm5vZGVUeXBlID09PSAxKSA6IGVsZW1lbnQubm9kZVR5cGUgPT09IDE7XHJcbiAgICAgICAgaWYgKGlzSFRNTCkgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgZm91bmQgZWxlbWVudCBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnkoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGxgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIEFycmF5IG9mIGFsbCBmb3VuZCBlbGVtZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnlBbGwoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgb2YgSFRNTCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy4gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSxcclxuICAgICAqIHRoZSBwYXJzZWQgSFRNTCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZG9jdW1lbnQgZnJhZ21lbnQge0BzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50RnJhZ21lbnR9LlxyXG4gICAgICogVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGlzdCBvZiBlbGVtZW50cyBhdCB0aGUgdG9wIGxldmVsLCB0aGV5IGNhbiB0aGVuIGJlIGFwcGVuZGVkIGFsbCBhdCBvbmNlIHRvIGFub3RoZXIgbm9kZS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgZmFsc2UsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBsaXN0IG9mIHBhcnNlZFxyXG4gICAgICogbm9kZXMgYW5kIHRoZXJlIHdlcmUgbXVsdGlwbGUgdG9wIGxldmVsIG5vZGVzLCBvdGhlcndpc2UgdGhlIHNpbmdsZSBub2RlIGlzIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBIVE1MIHRvIGJlIHBhcnNlZFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJhZ21lbnQ9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdGhlIHJldHVybiBzaG91bGQgYmUgdGhlIHJhdyBgRG9jdW1lbnRGcmFnbWVudGBcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gVGhlIHJlc3VsdCBvZiBIVE1MIHBhcnNpbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcnNlSFRNTChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XHJcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICBjb25zdCBub2RlID0gdGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50KSByZXR1cm4gbm9kZTtcclxuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDEgPyBub2RlLmNoaWxkTm9kZXMgOiBub2RlLmNoaWxkTm9kZXNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFsdGVybmF0ZSBuYW1lIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTH0gKi9cclxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtyZXR1cm4gdGhpcy5wYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQpO31cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHN0cmluZyBvZiBodG1sIGFuZCBlc2NhcGVzIGl0IHVzaW5nIHRoZSBicm93ZXIncyBvd24gZXNjYXBpbmcgbWVjaGFuaXNtLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBodG1sIHRvIGJlIGVzY2FwZWRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVzY2FwZUhUTUwoaHRtbCkge1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XHJcbiAgICAgICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcclxuICAgICAgICBzcGFuRWxlbWVudC5hcHBlbmQodGV4dE5vZGUpO1xyXG4gICAgICAgIHRleHROb2RlLm5vZGVWYWx1ZSA9IGh0bWw7XHJcbiAgICAgICAgcmV0dXJuIHNwYW5FbGVtZW50LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIGFkZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWRkQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byByZW1vdmVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlbW92ZUNsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByZXNlbnQ6IFRvZ2dsZSBjbGFzcyB2YWx1ZTtcclxuICAgICAqIGkuZS4sIGlmIGNsYXNzIGV4aXN0cyB0aGVuIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGZhbHNlLCBpZiBub3QsIHRoZW4gYWRkIGl0IGFuZCByZXR1cm4gdHJ1ZS5cclxuICAgICAqIFdoZW4gYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudDpcclxuICAgICAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgZXZhbHVhdGVzIHRvIHRydWUsIGFkZCBzcGVjaWZpZWQgY2xhc3MgdmFsdWUsIGFuZCBpZiBpdCBldmFsdWF0ZXMgdG8gZmFsc2UsIHJlbW92ZSBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byB0b2dnbGVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luZGljYXRvcl0gLSBPcHRpb25hbCBpbmRpY2F0b3IgZm9yIGlmIHRoZSBjbGFzcyBzaG91bGQgYmUgdG9nZ2xlZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9nZ2xlQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lLCBpbmRpY2F0b3IpIHtcclxuICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZihpbmRpY2F0b3IpICE9PSBcInVuZGVmaW5lZFwiKSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjLCBpbmRpY2F0b3IpKTtcclxuICAgICAgICBlbHNlIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhIHNwZWNpZmljIGNsYXNzXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSkge1xyXG4gICAgICAgIHJldHVybiBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYykuZXZlcnkoYyA9PiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlcyBvbmUgY2xhc3Mgd2l0aCBhbm90aGVyXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHJlcGxhY2VcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgZm9yIHRoZSBjbGFzc1xyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVwbGFjZUNsYXNzKGVsZW1lbnQsIG9sZE5hbWUsIG5ld05hbWUpIHtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKG9sZE5hbWUsIG5ld05hbWUpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIGFwcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgYXBwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xyXG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRoYXROb2RlLmFwcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBwcmVwZW5kZWQgdG8gYW5vdGhlciBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBwcmVwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmVwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5wcmVwZW5kKHRoaXNOb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5pbnNlcnRBZnRlcihvdGhlckVsZW1lbnQpYC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5zZXJ0QWZ0ZXIodGhpc05vZGUsIHRhcmdldE5vZGUpIHtcclxuICAgICAgICB0YXJnZXROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNOb2RlLCB0YXJnZXROb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5hZnRlcihuZXdFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFmdGVyKHRoaXNOb2RlLCBuZXdOb2RlKSB7XHJcbiAgICAgICAgdGhpc05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpc05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG5leHQgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgbmV4dCBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiKyBcIiArIHNlbGVjdG9yKSA6IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc3Vic2VxdWVudCBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG5leHQgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dEFsbChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIn4gKlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHN1YnNlcXVlbnQgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dFVudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IFtdOyBcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBuZXh0LnB1c2goZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSByZXR1cm4gcHJldmlvdXMgJiYgcHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikgPyBwcmV2aW91cyA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgcHJlY2VlZGluZyBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgd2hpY2ggaW5kZXggaW4gY2hpbGRyZW4gYSBjZXJ0YWluIG5vZGUgaXMuIFNpbWlsYXIgdG8galF1ZXJ5J3MgYCQuaW5kZXgoKWBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBUaGUgbm9kZSB0byBmaW5kIGl0cyBpbmRleCBpbiBwYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IEluZGV4IG9mIHRoZSBub2RlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbmRleEluUGFyZW50KG5vZGUpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGxldCBudW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldID09IG5vZGUpIHJldHVybiBudW07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSA9PSAxKSBudW0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMuaW5kZXhJblBhcmVudH0gKi9cclxuICAgIHN0YXRpYyBpbmRleChub2RlKSB7cmV0dXJuIHRoaXMuaW5kZXhJblBhcmVudChub2RlKTt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgaWYgaXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyBudWxsLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcGFyZW50IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIHNpYmxpbmcgZWxlbWVudCBvciBudWxsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuICFzZWxlY3RvciB8fCBlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgPyBlbGVtZW50LnBhcmVudEVsZW1lbnQgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRDaGlsZChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBhbmNlc3RvcnMgb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBwYXJlbnRzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBhcmVudHMgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSk7XHJcbiAgICAgICAgZWxzZSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBhbmNlc3RvcnMgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBhbmNlc3RvcnMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiAhZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBzaWJsaW5ncyBvZiB0aGUgZWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIipcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgc2libGluZ3MgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc2libGluZ3MoZWxlbWVudCwgc2VsZWN0b3IgPSBcIipcIikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGUgPT4gZSAhPSBlbGVtZW50ICYmIGUubWF0Y2hlcyhzZWxlY3RvcikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIGNzcyBzdHlsZXMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBzdHlsZSBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgc3R5bGUuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBBdHRyaWJ1dGUgdG8gZ2V0IG9yIHNldFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBWYWx1ZSB0byBzZXQgZm9yIGF0dHJpYnV0ZVxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNzcyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW2F0dHJpYnV0ZV07XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZVthdHRyaWJ1dGVdID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIHdpZHRoIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgd2lkdGggYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHdpZHRoLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFdpZHRoIHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdpZHRoKGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkud2lkdGgpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgaGVpZ2h0IGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgaGVpZ2h0IGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBoZWlnaHQuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gSGVpZ2h0IHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhlaWdodChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodCk7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGlubmVyIHRleHQgb2YgYW4gZWxlbWVudCBpZiBnaXZlbiBhIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJucyBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSB0ZXh0IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdIC0gQ29udGVudCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRWl0aGVyIHRoZSBzdHJpbmcgc2V0IGJ5IHRoaXMgY2FsbCBvciB0aGUgY3VycmVudCB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGUuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0ZXh0KGVsZW1lbnQsIHRleHQpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRleHQpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50O1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGlubmVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIHdpZHRoIG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5uZXJXaWR0aChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lckhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgaGVpZ2h0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVySGVpZ2h0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIG91dGVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IGluIHRoZSBwYWdlLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgb2Zmc2V0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtPZmZzZXR9IC0gVGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb2Zmc2V0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxpc3RlbmVycygpIHsgcmV0dXJuIHRoaXMuX2xpc3RlbmVycyB8fCAodGhpcy5fbGlzdGVuZXJzID0ge30pOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9uYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgb25jZS5cclxuICAgICAqIGBjb25zdCBjYW5jZWwgPSBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImZpcmVkIVwiKTsgY2FuY2VsKCk7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QgbWF0Y2hlcyB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9ufSBidXQgYXV0b21hdGljYWxseSBjYW5jZWxzIGl0c2VsZlxyXG4gICAgICogYW5kIHJlbW92ZXMgdGhlIGxpc3RlbmVyIHVwb24gdGhlIGZpcnN0IGZpcmluZyBvZiB0aGUgZGVzaXJlZCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25jZShlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfSA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBfX29mZkFsbChldmVudCwgZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGxldCBtYXRjaEZpbHRlciA9IGxpc3RlbmVyID0+IGxpc3RlbmVyLmV2ZW50ID09IHR5cGUsIGRlZmF1bHRGaWx0ZXIgPSBfID0+IF87XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIG1hdGNoRmlsdGVyID0gbCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQsIGRlZmF1bHRGaWx0ZXIgPSBsID0+IGwuZWxlbWVudCA9PSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gfHwgW107XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHR5cGUgPyBsaXN0ZW5lcnMuZmlsdGVyKG1hdGNoRmlsdGVyKSA6IGxpc3RlbmVycy5maWx0ZXIoZGVmYXVsdEZpbHRlcik7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBsaXN0Lmxlbmd0aDsgYysrKSBsaXN0W2NdLmNhbmNlbCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb2ZmYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlZCB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2tcIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgY2xpY2sgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiY2xpY2subXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cclxuICAgICAqIGBET01Ub29scy5vZmYoXCIubXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhFbGVtZW50fHN0cmluZyl9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJlbW92ZSBsaXN0ZW5lciBmcm9tXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50XSAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IFtkZWxlZ2F0ZV0gLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgb3JpZ2luYWwgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihlbGVtZW50KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gdGhpcy5fX29mZkFsbChlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSByZXR1cm4gdGhpcy5fX29mZkFsbChldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciB3aGVuIHRoZSBub2RlIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQgYm9keS5cclxuICAgICAqIFRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdXBvbiBmaXJpbmcuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gbm9kZSB0byB3YWl0IGZvclxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZXZlbnRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25Nb3VudCAtIGRldGVybWluZXMgaWYgaXQgc2hvdWxkIGZpcmUgb24gTW91bnQgb3Igb24gVW5tb3VudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgb25Nb3VudCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIudW5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjaywgbXV0YXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ob25Nb3VudCA/IG11dGF0aW9uLmFkZGVkTm9kZXMgOiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2g7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgdHJ1ZWAgKi9cclxuICAgIHN0YXRpYyBvbk1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgZmFsc2VgICovXHJcbiAgICBzdGF0aWMgb25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uQWRkZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudChub2RlLCBjYWxsYmFjayk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Vbm1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vblVubW91bnQobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbWJpbmVzIG11bHRpcGxlIGVsZW1lbnRzIGludG8gb25lIHBhcmVudCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PEhUTUxFbGVtZW50Pn0gZWxlbWVudHMgLSBhcnJheSBvZiBlbGVtZW50cyB0byBwdXQgaW50byBhIHNpbmdsZSBwYXJlbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdyYXAoZWxlbWVudHMpIHtcclxuICAgICAgICBjb25zdCBkb21XcmFwcGVyID0gdGhpcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJkb20td3JhcHBlclwiPjwvZGl2PmApO1xyXG4gICAgICAgIGZvciAobGV0IGUgPSAwOyBlIDwgZWxlbWVudHMubGVuZ3RoOyBlKyspIGRvbVdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudHNbZV0pO1xyXG4gICAgICAgIHJldHVybiBkb21XcmFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb2x2ZXMgdGhlIG5vZGUgdG8gYW4gSFRNTEVsZW1lbnQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgYnkgbGlicmFyeSBtb2R1bGVzLlxyXG4gICAgICogQHBhcmFtIHsoalF1ZXJ5fEVsZW1lbnQpfSBub2RlIC0gbm9kZSB0byByZXNvbHZlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXNvbHZlRWxlbWVudChub2RlKSB7XHJcbiAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcclxuICAgIH1cclxufVxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRPTSA9IERPTVRvb2xzIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5jb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBFbW9qaVJlZ2V4OiAvPGE/XFwuKFxcdyspXFwuKFxcZCspPi9nXHJcbn1cclxuXHJcbmxldCBDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG5sZXQgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdXHJcbmxldCBBdXRvY29tcGxldGVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilbMF1cclxubGV0IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylbMF1cclxubGV0IEVtb2ppTW9kdWxlUXVlcnkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylbMF1cclxubGV0IE1lc3NhZ2VzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVswXVxyXG5sZXQgZ3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZylbMF1cclxubGV0IGVtb2ppU2VhcmNoID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dClcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW9qaU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuaW5pdCgpLmNhdGNoKGVyciA9PiBVdGlscy5lcnIoXCJFbW9qaU1vZHVsZVwiLCBcIkFuIGVycm9yIG9jY3VyZWRcIiwgZXJyKSkgLy8gYmV0dGVyIGxvZ2dpbmdcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KCl7XHJcbiAgICAgICAgLyoqIEVtb2ppIEF1dG9Db21wbGV0ZSAqL1xyXG4gICAgICAgIGlmKCFBdXRvY29tcGxldGVNb2R1bGUpQXV0b2NvbXBsZXRlTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVxyXG4gICAgICAgIGlmKCFBdXRvQ29tcGxldGlvblRlbXBsYXRlcylBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVxyXG4gICAgICAgIGlmKCFFbW9qaU1vZHVsZVF1ZXJ5KUVtb2ppTW9kdWxlUXVlcnkgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpXHJcbiAgICAgICAgaWYoIU1lc3NhZ2VzKU1lc3NhZ2VzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylcclxuICAgICAgICBpZighZ3VpbGRNb2R1bGUpZ3VpbGRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpXHJcbiAgICAgICAgaWYoIWVtb2ppU2VhcmNoKWVtb2ppU2VhcmNoID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG4gICAgICAgIGlmKEF1dG9jb21wbGV0ZU1vZHVsZSAmJiBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyAmJiBFbW9qaU1vZHVsZVF1ZXJ5ICYmIE1lc3NhZ2VzICYmIGd1aWxkTW9kdWxlICYmIGVtb2ppU2VhcmNoKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFBhdGNoaW5nIGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgb2YgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXNgLCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcylcclxuICAgICAgICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnNcclxuICAgICAgICAgICAgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IGZ1bmN0aW9uKGUsIHQsIG4sIHIsIGEpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRBdXRvY29tcGxldGVPcHRpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgdmFsdWUuTElHSFRDT1JEX0VNT0pJUyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzKGFyZzEsIGFyZzIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZGl0aW9uID0gYXJnMi5sZW5ndGggPiAxICYmIFwiLlwiID09PSBhcmcxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVtb2ppVXNhYmxlKGNvbmRpdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHRzKHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IEVtb2ppTW9kdWxlUXVlcnkuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyh0LCBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUmVzdWx0cyhlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQoZSwgdCwgYS5lbW9qaXMsIG4sIHIsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSkksIEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LkVtb2ppLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaTogZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGUuaWQgfHwgZS51bmlxdWVOYW1lIHx8IGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW5lbDogXCIuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbGQ6IG51bGwgIT0gZS5ndWlsZElkID8gZ3VpbGRNb2R1bGUuZGVmYXVsdC5nZXRHdWlsZChlLmd1aWxkSWQpIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi5cIiArIGUgKyBcIi5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFBsYWluVGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRSYXdUZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IHN0YXJ0IGF1dG9jb21wbGV0aW9uIG9mIExpZ2h0Y29yZCdzIGVtb2ppcy5cIikpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogRW1vamkgZGlzcGxheSAqL1xyXG4gICAgICAgIHdoaWxlICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW9qaVJlbmRlcil7IC8vIFRPRE86IFByb3BlciBlbW9qaSBmb3JtYXR0aW5nIC8gcmVuZGVyaW5nXHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwiY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlXCIpXHJcbiAgICAgICAgICAgICAgICBpZighbWVzc2FnZSlyZXR1cm5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIWNvbnRlbnQgfHwgIWNvbnRlbnQubGVuZ3RoKXJldHVyblxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEB0eXBlIHt7XHJcbiAgICAgICAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICAqIH1bXX1cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtb2ppcyA9IFtdXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBub2RlIG9mIGNvbnRlbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNQYXJzZWQgPSBmYWxzZVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUVtb2ppTW9kdWxlQXBpKUVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBFbW9qaU1vZHVsZUFwaS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZChwYXJzZWRbMl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihlbW9qaSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogZW1vamkuYW5pbWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVtb2ppLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogcGFyc2VkWzBdLnN0YXJ0c1dpdGgoXCI8YVwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyc2VkWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFyc2VkWzJdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwYXJzZWQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaGFzUGFyc2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KFwiIFwiKS5tYXAoKHdvcmQsIGluZGV4LCBhcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF3b3JkKXJldHVybiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IGVtb2ppcy5maW5kKGUgPT4gZS5yYXcgPT0gd29yZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFlbW9qaSlyZXR1cm4gd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUN1c3RvbUVtb2ppTW9kdWxlKUN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDdXN0b21FbW9qaU1vZHVsZS5DdXN0b21FbW9qaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAuJHtlbW9qaS5uYW1lfS5gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaUlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1ib2FibGU6IGFyci5sZW5ndGggPT09IDEgJiYgY29udGVudC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcmV2aW91cy5sZW5ndGggPT09IDApcmV0dXJuIFtjdXJyZW50XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdICs9IGAgJHtjdXJyZW50fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIrY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIsIGN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaCguLi53b3JkcylcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQuc2hpZnQoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUobmV3Q29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnB1c2gobmV3Q29udGVudC5zaGlmdCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfS8qXHJcbiAgICAgICAgbGV0IHVzZXJNb2R1bGVcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRW1vamlQaWNrZXJMaXN0Um93XCIpXHJcbiAgICAgICAgLnRoZW4oRW1vamlQaWNrZXJMaXN0Um93ID0+IHtcclxuICAgICAgICAgICAgbGV0IGNsYXNzcyA9IEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0ID0gY2xhc3MgRW1vamlQaWNrZXJMaXN0Um93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICAgICAgICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlck1vZHVsZSl1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCB0aGlzLnByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppRGVzY3JpcHRvcnM6IHRoaXMucHJvcHMuZW1vamlEZXNjcmlwdG9ycy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlzRGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHQuZGlzcGxheU5hbWUgPSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiXHJcbiAgICAgICAgfSkqL1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gRChlLCB0LCBuLCByLCBvLCBpLCBzLCB1LCBsLCBjKSB7XHJcbiAgICBpZiAobnVsbCA9PSBuIHx8IDAgPT09IG4ubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIHZhciBkID0gbi5tYXAoKGZ1bmN0aW9uKGUsIG4pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh1LCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgb25DbGljazogbyxcclxuICAgICAgICAgICAgb25Ib3ZlcjogcixcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHQgPT09IG4sXHJcbiAgICAgICAgICAgIGluZGV4OiBuXHJcbiAgICAgICAgfSwgbChlLCBuKSkpXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4gW1IoaSwgcywgZSwgYyksIGRdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFIoZSwgdCwgbiwgcikge1xyXG4gICAgdmFyIGEgPSAobi5sZW5ndGggPiAwID8gZS5mb3JtYXQoe1xyXG4gICAgICAgIHByZWZpeDogcihuKVxyXG4gICAgfSkgOiB0KVxyXG4gICAgaWYoQXJyYXkuaXNBcnJheShhKSl7XHJcbiAgICAgICAgYS51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwge30sIFwiW0xpZ2h0Y29yZF0gXCIpKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgYSA9IFwiW0xJR0hUQ09SRF0gXCIrYVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuVGl0bGUsIHtcclxuICAgICAgICB0aXRsZTogYVxyXG4gICAgfSwgYSlcclxufVxyXG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcclxuXHJcbmxldCBFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxubGV0IGlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlICYmIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcbmxldCBpc1VzYWJsZSA9IGZhbHNlXHJcbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcclxuXHJcbmZ1bmN0aW9uIHNldEVtb2ppVXNhYmxlKHVzYWJsZSl7XHJcbiAgICBpc1VzYWJsZSA9IHVzYWJsZVxyXG4gICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlyZXR1cm5cclxuICAgIGlmKCFpc0Vtb2ppRGlzYWJsZWQpaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxuXHJcbiAgICBoYXNQYXRjaGVkID0gdHJ1ZVxyXG4gICAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbihlbW9qaSl7XHJcbiAgICAgICAgaWYoaXNVc2FibGUpe1xyXG4gICAgICAgICAgICBpZihlbW9qaS5zdXJyb2dhdGVzIHx8IGVtb2ppLmRpdmVyc2l0eSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzRW1vamlEaXNhYmxlZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgIH1cclxufSIsImltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxyXG5pbXBvcnQgKiBhcyBlbGVjdHJvbiBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCJcclxuaW1wb3J0IHRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIlxyXG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCJcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCJcclxuaW1wb3J0IHsgYWRkb25DYWNoZSB9IGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCJcclxuXHJcbmNvbnN0IGNhY2hlID0ge31cclxuY29uc3QgY2FjaGUyID0ge31cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBQbHVnaW5DZXJ0aWZpZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luQ2VydGlmaWVyID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoKGF0dGFjaG1lbnQsIGlkKXtcclxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpe1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpc1RydXN0ZWQoaGFzaCl7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlW2hhc2hdICYmICFjYWNoZVtoYXNoXS5zdXNwZWN0XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSl7XHJcbiAgICBkYXRhID0gZGF0YS50b1N0cmluZyhcInV0ZjhcIilcclxuICAgIGxldCBpc0hhcm1mdWwgPSBmYWxzZVxyXG4gICAgZm9yKGxldCBrZXl3b3JkIG9mIGRhdGEuc3BsaXQoL1teXFx3XFxkXSsvZykpe1xyXG4gICAgICAgIGZvcihsZXQgb29mIG9mIFtcclxuICAgICAgICAgICAgXCJ0b2tlblwiLFxyXG4gICAgICAgICAgICBcImVtYWlsXCIsXHJcbiAgICAgICAgICAgIFwicGhvbmVcIixcclxuICAgICAgICAgICAgXCJNRkFcIixcclxuICAgICAgICAgICAgXCIyZmFcIixcclxuICAgICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXHJcbiAgICAgICAgICAgIFwibG9jYWxTdG9yYWdlXCIsXHJcbiAgICAgICAgICAgIFwiZXZhbFwiLFxyXG4gICAgICAgICAgICBcImdldEdsb2JhbFwiLFxyXG4gICAgICAgICAgICBcIkJyb3dzZXJXaW5kb3dcIlxyXG4gICAgICAgIF0pe1xyXG4gICAgICAgICAgICBpZihrZXl3b3JkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMob29mLnRvTG93ZXJDYXNlKCkpICYmICFrZXl3b3JkLnRvTG93ZXJDYXNlKCkgPT09IFwiZG9tdG9rZW5saXN0XCIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cob29mLCBrZXl3b3JkKVxyXG4gICAgICAgICAgICAgICAgaXNIYXJtZnVsID0gXCJ0b2tlbiBzdGVhbGVyL3ZpcnVzXCJcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3Qgbm9fY29tbWVudHMgPSBkYXRhLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98KFteXFxcXDpdfF4pXFwvXFwvLiokL2dtLCBcIlwiKS50cmltKCkvLyByZW1vdmluZyB0aGUgTUVUQSBjb21tZW50IGZyb20gcGx1Z2luc1xyXG4gICAgICAgIGlmKCgvdmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpKS50ZXN0KG5vX2NvbW1lbnRzKSl7XHJcbiAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwib2JmdXNjYXRpb24vaGlkZGVuIGNvZGVcIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIWlzSGFybWZ1bCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4cHMgPSBbXHJcbiAgICAgICAgICAgICAgICAvKiogaGV4YWRlY2ltYWwgKi9cclxuICAgICAgICAgICAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2csIC8vIF8weDhkYjcoJzB4MCcsICd4MV1mJylcclxuICAgICAgICAgICAgICAgIC8qKiBtYW5nbGVkICovXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydcXCkvZywgLy8gYignMHgwJylcclxuICAgICAgICAgICAgICAgIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2csIC8vIGIoJzB4MCcsICd4MV1mJylcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBmb3IobGV0IHJlZ2V4IG9mIHJlZ2V4cHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoaXNIYXJtZnVsKWJyZWFrXHJcbiAgICAgICAgICAgICAgICBpZihyZWdleC50ZXN0KG5vX2NvbW1lbnRzKSlpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxyXG4gICAgY2FjaGVbaGFzaF0gPSB7XHJcbiAgICAgICAgc3VzcGVjdDogdHJ1ZSxcclxuICAgICAgICBuYW1lOiBoYXNoVG9VcmxbaGFzaF0uc3BsaXQoXCIvXCIpLnBvcCgpLFxyXG4gICAgICAgIHR5cGU6IGhhc2hUb1VybFtoYXNoXS5lbmRzV2l0aChcIi5qc1wiKSA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCIsXHJcbiAgICAgICAgaGFybTogaXNIYXJtZnVsLFxyXG4gICAgICAgIGhhc2g6IGhhc2gsXHJcbiAgICAgICAgZmlsZW5hbWVcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKVxyXG5cclxuICAgIHJlc3VsdENhbGxiYWNrKGNhY2hlW2hhc2hdKVxyXG59XHJcblxyXG5jb25zdCBoYXNoVG9VcmwgPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSGFzaChoYXNoLCBkYXRhLCBmaWxlbmFtZSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrKXtcclxuICAgIGNvbnNvbGUubG9nKGBGaWxlOiAke2ZpbGVuYW1lfSBoYXNoOiAke2hhc2h9YClcclxuICAgIGlmKCFjYWNoZVtoYXNoXSl7XHJcbiAgICAgICAgbm9kZUZldGNoKFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xpZ2h0Y29yZC9maWxlaGFzaGVzQG1hc3Rlci9oYXNoZXMvXCIraGFzaCwgeyAvLyBVc2luZyBub2RlLWZldGNoIHRvIGJ5cGFzcyBjb3JzXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50IC8vIGhhdmUgdG8gc2V0IHVzZXItYWdlbnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXtcclxuICAgICAgICAgICAgICAgIGlmKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRoZW1lLmNzc1wiKSlyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcclxuICAgICAgICAgICAgICAgIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICByZXN1bHQuaGFzaCA9IGhhc2hcclxuICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lID0gZmlsZW5hbWVcclxuXHJcbiAgICAgICAgICAgIGNhY2hlW2hhc2hdID0gcmVzdWx0XHJcblxyXG4gICAgICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXHJcbiAgICAgICAgfSkuY2F0Y2goY29uc29sZS5lcnJvcilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhY2hlW2hhc2hdXHJcblxyXG4gICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlKF9fcGF0aCwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrID0gKGhhc2gpID0+IHt9LCBpc0Zyb21Mb2FkZXIgPSBmYWxzZSl7ICAgIFxyXG4gICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXHJcbiAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxyXG5cclxuICAgIGNyZWF0ZVJlYWRTdHJlYW0oX19wYXRoKS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXHJcbiAgICAgICAgaGFzaC51cGRhdGUoY2h1bmspXHJcbiAgICB9KS5vbihcImVuZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXHJcblxyXG4gICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IF9fcGF0aFxyXG5cclxuICAgICAgICBpZihpc0Zyb21Mb2FkZXIgJiYgYWRkb25DYWNoZVtoYXNoUmVzdWx0XSl7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF1cclxuICAgICAgICAgICAgaWYodmFsdWUudGltZXN0YW1wIDwgKERhdGUubm93KCkgLSA2LjA0OGUrOCkpe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF1cclxuICAgICAgICAgICAgICAgIGNvbnRlbnRNYW5hZ2VyLnNhdmVBZGRvbkNhY2hlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRDYWxsYmFjayh2YWx1ZS5yZXN1bHQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGJhc2VuYW1lKF9fcGF0aCksIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaylcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50LCBpZCl7XHJcbiAgICBpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKXJldHVyblxyXG4gICAgaWYoIWF0dGFjaG1lbnQudXJsLnN0YXJ0c1dpdGgoXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9cIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxyXG4gICAgaWYoIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIucGx1Z2luLmpzXCIpICYmICFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnRoZW1lLmNzc1wiKSlyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpXHJcblxyXG4gICAgbm9kZUZldGNoKGF0dGFjaG1lbnQudXJsLCB7XHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnVzZXJBZ2VudFxyXG4gICAgICAgIH1cclxuICAgIH0pLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiRmlsZSBkb2Vzbid0IGV4aXN0LlwiKVxyXG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKVxyXG4gICAgICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXHJcbiAgICAgICAgcmVzLmJvZHkub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSlcclxuICAgICAgICAgICAgaGFzaC51cGRhdGUoY2h1bmspXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXMuYm9keS5vbihcImVuZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxyXG5cclxuICAgICAgICAgICAgY2FjaGUyW2F0dGFjaG1lbnQudXJsXSA9IGhhc2hSZXN1bHRcclxuICAgICAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gYXR0YWNobWVudC51cmxcclxuXHJcbiAgICAgICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBhdHRhY2htZW50LmZpbGVuYW1lLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGF0dGFjaG1lbnQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXHJcbiAgICAgICAgICAgICAgICBpZihlbGVtKWVsZW0ucmVtb3ZlKClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSkuY2F0Y2goKCk9Pnt9KVxyXG59XHJcblxyXG5sZXQgZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXHJcbmxldCBjaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxyXG5cclxuLyoqXHJcbiAqIFxyXG4gKiBAcGFyYW0ge0hUTUxEaXZFbGVtZW50W119IGVsZW1lbnRzIFxyXG4gKiBAcGFyYW0ge3t0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBvZmZpY2lhbD86IGJvb2xlYW59fHtzdXNwZWN0OnRydWUsIHR5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIGhhcm06IHN0cmluZ319IHJlc3VsdFxyXG4gKi9cclxuZnVuY3Rpb24gcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBmaWxlbmFtZSl7XHJcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcclxuICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm4gLy8gYWxyZWFkeSBjZXJ0aWZpZWQvZGl2IGRvZXMgbm90IGV4aXN0IGFueW1vcmUuXHJcblxyXG4gICAgaWYoIWZsb3dlclN0YXJNb2R1bGUpZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXHJcbiAgICBpZighY2hpbGRNb2R1bGUpY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cclxuICAgIFxyXG4gICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcInJnYigyNDAsIDcxLCA3MSlcIlxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogXHJcbiAgICAgICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBsZXQgbmV4dE5vZGUgPSAobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZC50YWdOYW1lID09PSBcIkFcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgP1wiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiICoqXCIrZmlsZW5hbWUrXCIqKiBtaWdodCBiZSBkYW5nZXJvdXMgKiooXCIrcmVzdWx0Lmhhcm0rXCIpKiouIFxcblxcbioqV2UgZG9uJ3QgcmVjb21tYW5kIHRvIGRvd25sb2FkIGl0KiouIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwgZG8gaXQgYmVsb3cuXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgQW55d2F5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiRG9uJ3QgIVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVjdHJvbi5yZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKGNoaWxkLmhyZWYpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoW1wiZGl2XCJdLmluY2x1ZGVzKGNoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZShjaGlsZClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV4dE5vZGUoZGl2LnBhcmVudE5vZGUpXHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cy5cIn0sIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN2ZylbMF0uc3ZnLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDQwIDMyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OlwiMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5OlwiMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDpcIjMyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpcIjMyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtMzIpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6XCIjZjA0NzQ3XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6XCJ1cmwoI3N2Zy1tYXNrLXN0YXR1cy1kbmQpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICksIGRpdilcclxuICAgIH1lbHNlIGlmKCFyZXN1bHQub2ZmaWNpYWwpe1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICBsZXQgc3BhbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZGlzcGxheTogXCJpbmhlcml0XCJ9fSwgW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBjZXJ0aWZpZWQgYnkgTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiIzRmNTQ1Y1wiLCBcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLGQ6XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiBcIkluc3RhbGwgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiIG9uIExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9LCBvbkNsaWNrKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgP1wiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgd2lsbCBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYW5kIGxhdW5jaCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgYW5kIEluc3RhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGdldEtleWVkQXJyYXkoY2FjaGUyKS5maW5kKGUgPT4gZVsxXSA9PT0gcmVzdWx0Lmhhc2gpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YWxsUGF0aCA9IGpvaW4ocmVzdWx0LnR5cGUgPT09IFwiUGx1Z2luXCIgPyBjb250ZW50TWFuYWdlci5fcGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLl90aGVtZXNGb2xkZXIsIHJlc3VsdC5maWxlbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coaW5zdGFsbFBhdGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChyZXN1bHQudHlwZStcIiBzdWNjZXNmdWxseSBpbnN0YWxsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoZXJyLm1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgd2FzIG1hZGUgYnkgdGhlIGRldmVsb3BlcnMgb2YgTGlnaHRjb3JkLlwiLCBzdHlsZTpcImJyYW5kXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwiLCBmbG9hdDogXCJsZWZ0XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIixzdHJva2U6XCIjMzYzOTNmXCIsc3R5bGU6e2NvbG9yOlwiIzQwODdlZFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCJjdXJyZW50Q29sb3JcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiI2ZmZmZmZlwiLGQ6XCJNMTAuNyw1LjI4YTIuOSwyLjksMCwwLDAtMi4xMS44Ni4xMS4xMSwwLDAsMCwwLC4xNmwxLjA1Ljk0YS4xMS4xMSwwLDAsMCwuMTUsMCwxLjI3LDEuMjcsMCwwLDEsLjktLjMzYy42NSwwLC42NS43My42NS43M2EuNjQuNjQsMCwwLDEtLjY1LjY1LDEuNzMsMS43MywwLDAsMS0xLjE4LS41NGMtLjMxLS4yNi0uMzYtLjMyLS43My0uNjZTNy4wNiw1LjI4LDUuNjUsNS4yOEEyLjI2LDIuMjYsMCwwLDAsMy4zNyw3LjU2LDIuNTksMi41OSwwLDAsMCwzLjgyLDlhMi4xOCwyLjE4LDAsMCwwLDEuODMuODksMi45NCwyLjk0LDAsMCwwLDIuMS0uODEuMTEuMTEsMCwwLDAsMC0uMTZMNi43NCw4QS4xMS4xMSwwLDAsMCw2LjYsOGExLjU4LDEuNTgsMCwwLDEtLjk0LjI5aDBBLjcxLjcxLDAsMCwxLDUsNy41Nkg1YS42My42MywwLDAsMSwuNjUtLjY0Yy43MSwwLDEuNDIuNzUsMS45NCwxLjI3Ljc1Ljc2LDEuNjYsMS43OSwzLjExLDEuNzRBMi4yOCwyLjI4LDAsMCwwLDEzLDcuNjRhMi41OSwyLjU5LDAsMCwwLS40NS0xLjQ3QTIuMTQsMi4xNCwwLDAsMCwxMC43LDUuMjhaXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiBcIkluc3RhbGwgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiIG9uIExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9LCBvbkNsaWNrKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgP1wiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgd2lsbCBhdXRvbWF0aWNhbGx5IGRvd25sb2FkIGFuZCBsb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIi4gWW91IG11c3QgZW5hYmxlIGl0IGluIHRoZSBzZXR0aW5ncy5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkkndmUgY2hhbmdlZCBteSBtaW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVGZXRjaChsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBhd2FpdCByZXMuYnVmZmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhpbnN0YWxsUGF0aCwgY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixzdHlsZTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiZmlsbFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNwYW4sIGRpdilcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0S2V5ZWRBcnJheShvYmope1xyXG4gICAgbGV0IGFyciA9IFtdXHJcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgYXJyLnB1c2goW2ssIG9ialtrXV0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGFyclxyXG59XHJcblxyXG5sZXQga2V5ID0gbnVsbFxyXG5sZXQgc2F2ZSA9IG51bGxcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKG09Pm0uT2JqZWN0U3RvcmFnZSlcclxuLnRoZW4obG9jYWxTdG9yYWdlTW9kdWxlID0+IHtcclxuICAgIGxldCBsb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2VNb2R1bGUuaW1wbFxyXG4gICAgc2F2ZSA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiLCBidG9hKEpTT04uc3RyaW5naWZ5KGtleSkpKVxyXG4gICAgfVxyXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIHNhdmUoKVxyXG4gICAgfSwgMTAwMDAwKTtcclxuICAgIHRyeXtcclxuICAgICAgICBsZXQgdmFsID0gc2FmZUpTT05QYXJzZShhdG9iKGxvY2FsU3RvcmFnZS5nZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIikpKVxyXG4gICAgICAgIGlmKHZhbCBpbnN0YW5jZW9mIEVycm9yIHx8ICFBcnJheS5pc0FycmF5KHZhbCkgfHwgdmFsLmxlbmd0aCAhPT0gMiB8fCB2YWwuZmluZChlID0+IHR5cGVvZiBlICE9PSBcInN0cmluZ1wiKSB8fCBCdWZmZXIuZnJvbSh2YWxbMF0sIFwiYmFzZTY0XCIpLmxlbmd0aCAhPT0gMTYgfHwgQnVmZmVyLmZyb20odmFsWzFdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDMyKXtcclxuICAgICAgICAgICAgZ2VuZXJhdGVLZXkoKVxyXG4gICAgICAgICAgICBzYXZlKClcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGtleSA9IHZhbFxyXG4gICAgfWNhdGNoKGUpe1xyXG4gICAgICAgIGdlbmVyYXRlS2V5KClcclxuICAgICAgICBzYXZlKClcclxuICAgIH1cclxufSlcclxuXHJcbmZ1bmN0aW9uIGdlbmVyYXRlS2V5KCl7XHJcbiAgICBrZXkgPSBbY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImJhc2U2NFwiKSwgY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZyhcImJhc2U2NFwiKV1cclxufVxyXG5cclxuZnVuY3Rpb24gc2FmZUpTT05QYXJzZShqc29uKXtcclxuICAgIHRyeXtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKVxyXG4gICAgfWNhdGNoKGUpe1xyXG4gICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3IgPyBuZXcgRXJyb3IoZSkgOiBlXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcclxuICAgIHRyeXtcclxuICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihcImFlcy0yNTYtY2JjXCIsIEJ1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIikpXHJcbiAgICAgICAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhLCBcImJhc2U2NFwiKSk7XHJcbiAgICAgICAgZGVjcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZGVjcnlwdGVkLCBkZWNpcGhlci5maW5hbCgpXSk7XHJcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhcInV0ZjhcIilcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICByZXR1cm4gXCJ7fVwiXHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGEpe1xyXG4gICAgbGV0IGFyZ3MgPSBbQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKV1cclxuICAgIFxyXG4gICAgbGV0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1jYmMnLCAuLi5hcmdzKTtcclxuICAgIGxldCBlbmNyeXB0ZWQgPSBjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwidXRmOFwiKSk7XHJcbiAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtlbmNyeXB0ZWQsIGNpcGhlci5maW5hbCgpXSk7XHJcbiAgICByZXR1cm4gZW5jcnlwdGVkLnRvU3RyaW5nKFwiYmFzZTY0XCIpXHJcbn0iLCJpbXBvcnQge2JkcGx1Z2luRXJyb3JzLCBwbHVnaW5Db29raWUsIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbnN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuY2xhc3MgUGx1Z2luTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luTW9kdWxlID0gdGhpc1xuICAgIH1cbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyO31cbn1cblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2lucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxvYWRQbHVnaW5EYXRhKCk7XG4gICAgYmRwbHVnaW5FcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkUGx1Z2lucygpKSk7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBwbHVnaW4sIG5hbWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgICAgICBuYW1lID0gcGx1Z2luLmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuXCIsIGVycik7XG4gICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbbmFtZV0pIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwbHVnaW5Db29raWVbbmFtZV0pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXG4gICAgfVxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcblxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkub24oXCJkaWQtbmF2aWdhdGUtaW4tcGFnZVwiLCB0aGlzLmNoYW5uZWxTd2l0Y2guYmluZCh0aGlzKSk7XG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0YXJ0UGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdGFydCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0YXJ0ZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgcGx1Z2luICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdG9wUGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdG9wKCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0b3BwZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKSArIFwiIGNvdWxkIG5vdCBiZSBzdG9wcGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IHRydWU7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbik7XG4gICAgZWxzZSB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiAoY29uc29sZS5sb2cocC5maWxlbmFtZSwgZmlsZW5hbWUpKSB8fCBwLmZpbGVuYW1lID09IGZpbGVuYW1lKS5wbHVnaW47XG4gICAgdHJ5IHsgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO31cbiAgICBjYXRjaCAoZXJyKSB7aWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycl19KTt9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLWxvYWRlZFwiLCBwbHVnaW4uZ2V0TmFtZSgpKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudW5sb2FkUGx1Z2luID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgZGVsZXRlIGJkcGx1Z2luc1twbHVnaW5dO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIGVycm9yKTtcbiAgICB9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tdW5sb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgdGhpcy51bmxvYWRQbHVnaW4oYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybiB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgY29uc3QgZW5hYmxlZCA9IHBsdWdpbkNvb2tpZVtwbHVnaW5dO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkICYmIHR5cGVvZihiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCgpO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tcmVsb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc29sZS5sb2coXCJFZGl0IFwiICsgZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZ1bGxQYXRoKTtcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVwZGF0ZVBsdWdpbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJwbHVnaW5cIik7XG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkUGx1Z2luKG5hbWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbkNvb2tpZSwgc2F2ZWQpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc2F2ZVBsdWdpbkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInBsdWdpbnNcIiwgcGx1Z2luQ29va2llKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubmV3TWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vbk1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uTWVzc2FnZSgpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvbk1lc3NhZ2UgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmNoYW5uZWxTd2l0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25Td2l0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uU3dpdGNoKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uU3dpdGNoIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yYXdPYnNlcnZlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIoZSk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9ic2VydmVyIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbk1vZHVsZSgpOyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBWMkNfUHVibGljU2VydmVycyBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzXCI7XHJcbmltcG9ydCBMYXllciBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9sYXllclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1B1YmxpY1NlcnZlcnMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbiA9IHRoaXMuX2FwcGVuZEJ1dHRvbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5WMl9QdWJsaWNTZXJ2ZXJzID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChMYXllciwge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCIsIGlkOiBcInB1YnNsYXllclwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QdWJsaWNTZXJ2ZXJzLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHVic2xheWVycm9vdFwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcnNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllcnMgJiYgZS5sYXllcilbMF0ubGF5ZXJzLnNwbGl0KFwiIFwiKVswXVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBsYXllcnMgPSBET00ucXVlcnkoXCIubGF5ZXJzLCAuXCIrY2xhc3NOYW1lTGF5ZXJzKTtcclxuICAgICAgICBpZiAoIWxheWVycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGxheWVycy5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoXCI8ZGl2IGlkPSdwdWJzbGF5ZXJyb290Jz5cIikpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCBidG4gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1saVwiIGNsYXNzPVwiJHtCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbX1cIj5gKTtcclxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIGJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1idXR0b25cIiBjbGFzcz1cIiR7XCJ3cmFwcGVyLTI1ZVZJbiBcIiArIEJEVjIuZ3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+cHVibGljPC9kaXY+YCk7XHJcbiAgICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHt0aGlzLnJlbmRlcigpO30pO1xyXG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xyXG4gICAgICAgIHJldHVybiBidG47XHJcbiAgICB9XHJcblxyXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lclxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIFV0aWxzLnJlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRvd25sb2FkUHJvZ3Jlc3MgJiYgZS50dXRvcmlhbENvbnRhaW5lcilbMF0udHV0b3JpYWxDb250YWluZXIpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGlmIChET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gRE9NLnF1ZXJ5KGBkaXYuJHtjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lcn0gPiBkaXZgKTtcclxuICAgICAgICBET00uYWZ0ZXIoZ3VpbGRzLCB0aGlzLmJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQnV0dG9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3QgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk5hdmlnYWJsZUd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3RPbGQgPSB3ZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBpZiAoIUd1aWxkTGlzdCAmJiAhR3VpbGRMaXN0T2xkKSBVdGlscy53YXJuKFwiUHVibGljU2VydmVyXCIsIFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkTGlzdCA/IEd1aWxkTGlzdCA6IEd1aWxkTGlzdE9sZC5wcm90b3R5cGUsIEd1aWxkTGlzdCA/IFwiZGVmYXVsdFwiIDogXCJyZW5kZXJcIiwge2FmdGVyOiB0aGlzLl9hcHBlbmRCdXR0b259KTtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVCdXR0b24oKSB7XHJcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZ3VpbGRQYXRjaDtcclxuICAgICAgICBET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCB7c2V0dGluZ3MsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc1JQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFNpZGViYXJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgY29sb3JlZFRleHQgZnJvbSBcIi4vY29sb3JlZFRleHRcIjtcclxuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IHB1YmxpY1NlcnZlcnNNb2R1bGUgZnJvbSBcIi4vcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgdm9pY2VNb2RlIGZyb20gXCIuL3ZvaWNlTW9kZVwiO1xyXG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL2NsYXNzTm9ybWFsaXplclwiO1xyXG5pbXBvcnQgZE1vZGUgZnJvbSBcIi4vZGV2TW9kZVwiO1xyXG5cclxuaW1wb3J0IFNlY3Rpb25lZFNldHRpbmdzUGFuZWwgZnJvbSBcIi4uL3VpL3NlY3Rpb25lZFNldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XHJcbmltcG9ydCBDYXJkTGlzdCBmcm9tIFwiLi4vdWkvYWRkb25saXN0XCI7XHJcbmltcG9ydCBWMkNfUHJlc2VuY2VTZXR0aW5ncyBmcm9tIFwiLi4vdWkvcHJlc2VuY2VTZXR0aW5nc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xyXG5pbXBvcnQgVjJDX0FjY291bnRJbmZvcyBmcm9tIFwiLi4vdWkvQWNjb3VudEluZm9zXCI7XHJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiO1xyXG5pbXBvcnQgQW50aUFkRE0gZnJvbSBcIi4vQW50aUFkRE1cIjtcclxuaW1wb3J0IGJsdXJQcml2YXRlIGZyb20gXCIuL2JsdXJQcml2YXRlXCI7XHJcbmltcG9ydCBkaXNhYmxlVHlwaW5nIGZyb20gXCIuL2Rpc2FibGVUeXBpbmdcIjtcclxuaW1wb3J0IEFwaVByZXZpZXcgZnJvbSBcIi4uL3VpL0FwaVByZXZpZXdcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi4vdWkvc3dpdGNoXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4uL3VpL21hcmdpbnRvcFwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IHRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgSGlzdG9yeSBmcm9tIFwiLi4vdWkvaWNvbnMvaGlzdG9yeVwiO1xyXG5cclxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2lkZWJhckNvbXBvbmVudHMgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5TZXBhcmF0b3IgJiYgZS5IZWFkZXIgJiYgZS5JdGVtKVxyXG5cclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dCdXR0b24gPSBSZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJDaGFuZ2Vsb2dcIn0sIFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtmbG9hdDogXCJyaWdodFwiLCBjdXJzb3I6IFwicG9pbnRlclwifSwgY2xhc3NOYW1lOiBcImJkLWNoYW5nZWxvZy1idXR0b25cIiwgb25DbGljazogKCkgPT4ge1V0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO319LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcclxuICAgICAgICAgICAgY2hpbGRyZW46IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiQmFuZGFnZWQgQkRcIiwgY2hhbmdlbG9nQnV0dG9uKSxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiByZW5kZXJlZFxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MgPSB0aGlzLnVwZGF0ZVNldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaWRlYmFyID0gbmV3IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50cygpXHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDb21wb25lbnRzKCl7XHJcbiAgICAgICAgLyoqIExpZ2h0Y29yZCAqL1xyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImxpZ2h0Y29yZFwiLCBtYWtlQ29tcG9uZW50KHRoaXMubGlnaHRjb3JkQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInN0YXR1c1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuUHJlc2VuY2VDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiYWNjb3VudGluZm9cIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsY2FwaXByZXZpZXdcIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFwaVByZXZpZXdDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcblxyXG4gICAgICAgIC8qIEJhbmRhZ2VkIEJEICovXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiQkRDaGFuZ2Vsb2dUaXRsZVwiLCBtYWtlQ29tcG9uZW50KCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCRFNpZGViYXJIZWFkZXIoKS5yZW5kZXIoKVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImNvcmVcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmNvcmVDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiY3VzdG9tY3NzXCIsIG1ha2VDb21wb25lbnQodGhpcy5jdXN0b21Dc3NDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwicGx1Z2luc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwicGx1Z2luc1wiKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwidGhlbWVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5yZW5kZXJBZGRvblBhbmUoXCJ0aGVtZXNcIikpKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLXNldHRpbmdzcGFuZS1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXIsXHJcbiAgICAgICAgICAgIGNsYXNzU2lkZWJhclxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyICYmIGUuYW5pbWF0aW5nKVswXS5sYXllci5zcGxpdChcIiBcIilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGNvbnN0IHNpZGViYXIgPSBET00ucXVlcnkoXCIuXCIrY2xhc3NOYW1lTGF5ZXIrXCIgLlwiK2NsYXNzU2lkZWJhci5zdGFuZGFyZFNpZGViYXJWaWV3LnNwbGl0KFwiIFwiKVswXStcIiwgLlwiK2NsYXNzTmFtZUxheWVyK1wiIC51aS1zdGFuZGFyZC1zaWRlYmFyLXZpZXdcIik7XHJcbiAgICAgICAgaWYgKCFzaWRlYmFyKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtc2V0dGluZ3NwYW5lLWNvbnRhaW5lclwiIGNsYXNzPVwiJHtjbGFzc1NpZGViYXIuY29udGVudFJlZ2lvbn0gY29udGVudC1yZWdpb25cIj5gKTtcclxuICAgICAgICBzaWRlYmFyLmFwcGVuZChyb290KTtcclxuXHJcbiAgICAgICAgVXRpbHMub25SZW1vdmVkKHJvb3QsICgpID0+IHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHJvb3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb3JlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwiY29yZVwiKTtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQoc2V0dGluZ3MubWFwKHMgPT4gcy5jYXRlZ29yeSkpXTtcclxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxpZ2h0Y29yZFNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImxpZ2h0Y29yZFwiKTtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQoc2V0dGluZ3MubWFwKHMgPT4gcy5jYXRlZ29yeSkpXTtcclxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IFByZXNlbmNlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJzdGF0dXNcIilcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTXNnTG9nU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJtc2dsb2dcIilcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZXR0aW5ncyhjYXRlZ29yeSkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmcuY2F0ID09PSBjYXRlZ29yeSAmJiBzZXR0aW5nLmltcGxlbWVudGVkICYmICFzZXR0aW5nLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2V0dGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICB9LCBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHt9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKGlkLCBjaGVja2VkLCBzaWRlYmFyKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCwgc2lkZWJhcikge1xyXG4gICAgICAgIGlmKCFbXCJsaWdodGNvcmQtOFwiLCBcIm5vX3dpbmRvd19ib3VuZFwiLCBcImVuYWJsZV9nbGFzc3Ryb25cIl0uaW5jbHVkZXMoaWQpKXNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xyXG4gICAgICAgICAgICBlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB2b2ljZU1vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTdcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIENsYXNzTm9ybWFsaXplci5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiLCBlbmFibGVkKTtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGVsc2UgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBcIiMyZjMxMzZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLThcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstZG0tMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qaWYgKGlkID09PSBcInJlYWN0RGV2VG9vbHNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcmVhY3REZXZUb29scy5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIHJlYWN0RGV2VG9vbHMuc3RvcCgpO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gZmFsc2VcclxuICAgICAgICAgICAgc2lkZWJhci5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKClcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXHJcbiAgICAgICAgICAgICAgICBpZihzZXR0aW5nc1N0b3JlICYmICFzZXR0aW5nc1N0b3JlLmRlZmF1bHQuc2hvd0N1cnJlbnRHYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncylbMF0uZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBDdXN0b21SaWNoUHJlc2VuY2UuZGlzYWJsZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpXHJcbiAgICAgICAgICAgIGVsc2UgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcChmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC00XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNlwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUeXBpbmcuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHlwaW5nLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtOFwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcImlzVGFic1wiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJub193aW5kb3dfYm91bmRcIil7XHJcbiAgICAgICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHJlbW90ZS5nZXRHbG9iYWwoXCJhcHBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXQoXCJOT19XSU5ET1dTX0JPVU5EXCIsIGVuYWJsZWQpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5leGl0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImVuYWJsZV9nbGFzc3Ryb25cIil7XHJcbiAgICAgICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHJlbW90ZS5nZXRHbG9iYWwoXCJhcHBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXQoXCJHTEFTU1RST05cIiwgZW5hYmxlZClcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0aWFsaXplU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgLy9pZiAoc2V0dGluZ3NDb29raWUucmVhY3REZXZUb29scykgcmVhY3REZXZUb29scy5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0yXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0zXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIHB1YmxpY1NlcnZlcnNNb2R1bGUuYWRkQnV0dG9uKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTRcIl0pIHZvaWNlTW9kZS5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy01XCJdKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgdGZIb3VyLmluamVjdDI0SG91cigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNFwiXSkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTFcIl0pIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMlwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSB0cnVlXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0zXCJdKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTZcIl0pIGJsdXJQcml2YXRlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTdcIl0pIGRpc2FibGVUeXBpbmcuZW5hYmxlKClcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XHJcbiAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtOFwiXSkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTZXR0aW5ncygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRTZXR0aW5ncygpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclNpZGViYXIoc2lkZWJhcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNpZGViYXIucmVuZGVyKHNpZGViYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcmVDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uZWRTZXR0aW5nc1BhbmVsLCB7a2V5OiBcImNzcGFuZWxcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc30pXHJcbiAgICB9XHJcblxyXG4gICAgbGlnaHRjb3JkQ29tcG9uZW50KHNpZGViYXIsIGZvcmNlVXBkYXRlKSB7XHJcbiAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy5saWdodGNvcmRTZXR0aW5ncy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09IDAgPyBudWxsIDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgc2VjdGlvbi50aXRsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5zZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NoZWNrZWQgPSBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImxpZ2h0Y29yZC04XCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiaXNUYWJzXCIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJub193aW5kb3dfYm91bmRcIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJOT19XSU5ET1dTX0JPVU5EXCIsIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImVuYWJsZV9nbGFzc3Ryb25cIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJHTEFTU1RST05cIiwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IGlzQ2hlY2tlZCwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShpZCwgY2hlY2tlZCwgc2lkZWJhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09IFwibGlnaHRjb3JkLThcIiAmJiBpc0NoZWNrZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImdyZWVuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2s6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcImJyYW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuaXBjLnNlbmQoXCJORVdfVEFCXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBcIk9wZW4gYSBuZXcgVGFiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSksIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU2hvdWxkIHJlbGF1bmNoXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHJlbW90ZS5wcm9jZXNzLmFyZ3Yuc2xpY2UoMSkuY29uY2F0KFtcIi0tZGlzYWJsZS1iZXR0ZXJkaXNjb3JkXCJdKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5xdWl0KClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlXHJcbiAgICAgICAgICAgIH0sIFwiUmVsYXVuY2ggd2l0aG91dCBCZXR0ZXJEaXNjb3JkXCIpLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ2xlYXJpbmdDYWNoZSlyZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQ2xlYXJpbmcgY2FjaGUuLi5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5zZXNzaW9uLmNsZWFyQ2FjaGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQ2FjaGUgaXMgY2xlYXJlZCAhXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gQ2hlY2sgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGlzQ2xlYXJpbmdDYWNoZVxyXG4gICAgICAgICAgICB9LCBcIkNsZWFyIGNhY2hlXCIpXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIFByZXNlbmNlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1ByZXNlbmNlU2V0dGluZ3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxwcGFubmVsXCIsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBcclxuICAgICAgICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQWNjb3VudEluZm9zQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xyXG4gICAgICAgICAgICBrZXk6IFwibGFwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQXBpUHJldmlld0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFwaVByZXZpZXcsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGlwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tQ3NzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJBZGRvblBhbmUodHlwZSkge1xyXG4gICAgICAgIC8vIEkga25vdyB0aGlzIHNob3VsZG4ndCBiZSBoZXJlLCBidXQgd2hlbiBpdCBpc24ndCxcclxuICAgICAgICAvLyBSZWFjdCByZWZ1c2VzIHRvIGNoYW5nZSB0aGUgYnV0dG9uIHdoZW4gZ29pbmdcclxuICAgICAgICAvLyBiZXR3ZWVuIHBsdWdpbnMgYW5kIHRoZW1lcyBwYWdlLi4uIHNvbWV0aGluZ1xyXG4gICAgICAgIC8vIHRvIGRlYnVnIGxhdGVyLlxyXG4gICAgICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyKCkge3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO31cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICAgICAgICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwge3R5cGV9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FyZExpc3QsIHt0eXBlfSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vIG5lZWQgdG8gZXhwb3J0IHNldHRpbmdzUGFuZWwgb24gd2luZG93XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWFrZUNvbXBvbmVudChjaGlsZHJlbil7XHJcbiAgICBjbGFzcyBTZXR0aW5nQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKHNpZGViYXIsICgpID0+IHRoaXMuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgc2lkZWJhclxyXG4gICAgcmV0dXJuIChzKSA9PiB7XHJcbiAgICAgICAgc2lkZWJhciA9IHNcclxuICAgICAgICByZXR1cm4gU2V0dGluZ0NvbXBvbmVudFxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnBhbmVscyA9IHt9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIocGFuZWwsIGNvbXBvbmVudCl7XHJcbiAgICAgICAgdGhpcy5wYW5lbHNbcGFuZWxdID0gY29tcG9uZW50XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50KHBhbmVsLCBzaWRlYmFyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbHNbcGFuZWxdKHNpZGViYXIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkJldHRlckRpc2NvcmQgU2V0dGluZ3NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImNvcmVcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJQbHVnaW5zXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJwbHVnaW5zXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlbWVzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJ0aGVtZXNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJDdXN0b20gQ1NTXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjdXN0b21jc3NcIlxyXG4gICAgICAgIH1dO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ2l0ZW1zKCl7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIiwgXHJcbiAgICAgICAgICAgICAgICBpZDogXCJzdGF0dXNcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYWNjb3VudGluZm9cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICAgIHJldHVybiBpdGVtc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ0Rldkl0ZW1zKCl7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW11cclxuICAgICAgICBpZighd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlKXJldHVybiBpdGVtc1xyXG4gICAgICAgIGl0ZW1zLnB1c2goLi4uW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkIEFwaVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ29tcG9uZW50cyBQcmV2aWV3XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJsY2FwaXByZXZpZXdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSlcclxuICAgICAgICByZXR1cm4gaXRlbXNcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoc2lkZWJhcikge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLkxDaXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuTENEZXZJdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihlLnNlY3Rpb24pcmV0dXJuIGVcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoXCJCRENoYW5nZWxvZ1RpdGxlXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnRoaXMuaXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsU2lkZWJhciBvbiB3aW5kb3dcclxuICovIiwiaW1wb3J0IHtiZHRoZW1lRXJyb3JzLCB0aGVtZUNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkdGhlbWVzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY2xhc3MgVGhlbWVNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVGhlbWVNb2R1bGUgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXI7fVxyXG59XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lcyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMubG9hZFRoZW1lRGF0YSgpO1xyXG4gICAgYmR0aGVtZUVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRUaGVtZXMoKSkpO1xyXG4gICAgY29uc3QgdGhlbWVzID0gT2JqZWN0LmtleXMoYmR0aGVtZXMpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhlbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZXNbaV1dO1xyXG4gICAgICAgIGlmICghdGhlbWVDb29raWVbdGhlbWUubmFtZV0pIHRoZW1lQ29va2llW3RoZW1lLm5hbWVdID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSwgdW5lc2NhcGUodGhlbWUuY3NzKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgdGhlbWUgaW4gdGhlbWVDb29raWUpIHtcclxuICAgICAgICBpZiAoIWJkdGhlbWVzW3RoZW1lXSkgZGVsZXRlIHRoZW1lQ29va2llW3RoZW1lXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0aGVtZUNvb2tpZVtuYW1lXSA9IHRydWU7XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XHJcbiAgICBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSwgdW5lc2NhcGUodGhlbWUuY3NzKSk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGFwcGxpZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmFibGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0aGVtZUNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLnJlbW92ZVN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCkpO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBkaXNhYmxlZC5gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGVUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSk7XHJcbiAgICBlbHNlIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWUgPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLiBJdCBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lKTtcclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1sb2FkZWRcIiwgdGhlbWUubmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudW5sb2FkVGhlbWUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpO1xyXG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGRlbGV0ZSBiZHRoZW1lc1t0aGVtZV07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtdW5sb2FkZWRcIiwgdGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xyXG4gICAgdGhpcy51bmxvYWRUaGVtZShiZHRoZW1lLmZpbGVuYW1lKTtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkdGhlbWUuZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm4gdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWVPck5hbWUpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpLCB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXJlbG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51cGRhdGVUaGVtZUxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInRoZW1lXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZURhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInRoZW1lc1wiKTtcclxuICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhlbWVDb29raWUsIHNhdmVkKTtcclxuICAgIH1cclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5zYXZlVGhlbWVEYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb24sIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfVxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgaGVpZ2h0ICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cblxuICAgIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBzZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhLnNwbGl0KFwiIFwiKVswXStcIiB0ZXh0YXJlYVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvZyhtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogI0U4QTQwMDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogI0U4QTQwMDtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGVycihtb2R1bGVOYW1lLCBtZXNzYWdlLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCIlY0Vycm9yOiBcIiArIGVycm9yLm1lc3NhZ2UsIFwiY29sb3I6IHJlZDtcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZihvYmopICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1x0fVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIG1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge2JlZm9yZSwgYWZ0ZXIsIGluc3RlYWQsIG9uY2UgPSBmYWxzZSwgc2lsZW50ID0gZmFsc2UsIGZvcmNlID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xuICAgICAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIC8vd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICBjYW5jZWxlZCA9IHRydWUgLy8gdGhpcyBhbGxvdyB0byBtb25rZXlwYXRjaCBtb3JlIHRoYW4gb25lIHRpbWUuXG4gICAgICAgIH07XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKGNhbmNlbGVkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBjYW5jZWxQYXRjaDogY2FuY2VsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9yaWdNZXRob2QudG9TdHJpbmcoKTt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmpbcHJvcF07XG4gICAgICAgIH0sIG9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXG4gICAgICovXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyLnNwbGl0KFwiIFwiKVs5XStcIiArIGRpdlwiKSB8fCBudWxsO1xuICAgICAgICAgICAgY29uc3QgbWVtYmVybGlzdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLm1lbWJlcnNXcmFwKVswXS5tZW1iZXJzV3JhcCkgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gY29udGFpbmVyID8gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiAzMTA7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IG1lbWJlcmxpc3QgPyBtZW1iZXJsaXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiAwO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCA/IHJpZ2h0IC0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiBVdGlscy5zY3JlZW5XaWR0aCAtIGxlZnQgLSAyNDA7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb3JtID8gZm9ybS5vZmZzZXRIZWlnaHQgOiA4MDtcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0c1wiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgbGVmdCArIFwicHhcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJib3R0b21cIiwgYm90dG9tICsgXCJweFwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZENoaWxkKHRvYXN0V3JhcHBlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3R5cGUgPSBcIlwiLCBpY29uID0gdHJ1ZSwgdGltZW91dCA9IDMwMDB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgdG9hc3RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICAgICAgaWYgKHR5cGUpIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwidG9hc3QtXCIgKyB0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgaWNvbikgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJpY29uXCIpO1xuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikuYXBwZW5kQ2hpbGQodG9hc3RFbGVtKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0b2FzdEVsZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJkLXRvYXN0cyAuYmQtdG9hc3RcIikubGVuZ3RoKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhbGVydCh0aXRsZSwgY29udGVudCkge1xuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGNvbnN0IGNsb3NpbmdMaXN0ZW5lcnMgPSBbXVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNsb3NlOiAobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycykgcmV0dXJuO1xuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycy5sZW5ndGggJiYgIXRoZW1lRXJyb3JzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgYmQtY29udGVudC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj48ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250ZW50IEVycm9yczwvZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXIgVE9QXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5QbHVnaW5zPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5UaGVtZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj5OYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPk1lc3NhZ2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPkVycm9yPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgIFxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVRhYihlcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj4ke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj4ke2Vyci5tZXNzYWdlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGNvbnN0IHRhYnMgPSBbZ2VuZXJhdGVUYWIocGx1Z2luRXJyb3JzKSwgZ2VuZXJhdGVUYWIodGhlbWVFcnJvcnMpXTtcbiAgICBcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW0uc2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIERPTS5yZW1vdmVDbGFzcyhzZWxlY3RlZCwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhlLnRhcmdldCwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi5zY3JvbGxlclwiKTtcbiAgICAgICAgICAgIHNjcm9sbGVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQodGFic1tET00uaW5kZXgoZS50YXJnZXQpXSk7XG4gICAgICAgIH0pKTtcbiAgICBcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW1cIikuY2xpY2soKTtcbiAgICAgICAgZWxzZSBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKVsxXS5jbGljaygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2dDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJmaXhlZFwiLCBcImltcHJvdmVkXCIpO1xuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcbiAgICAgICAgY29uc3QgRmxleENoaWxkID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJDaGlsZFwiKTtcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJUYWdzXCIsIFwiZGVmYXVsdFwiKTtcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLnNlbGVjdGFibGUgPT0gZmFsc2UpO1xuICAgICAgICBjb25zdCBNYXJrZG93blBhcnNlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZGVmYXVsdFJ1bGVzXCIsIFwicGFyc2VcIik7XG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm47XG4gICAgXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGltYWdlID0gXCJodHRwczovL3JlcG9zaXRvcnktaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMDU0NzM1MzcvOTU3YjU0ODAtN2MyNi0xMWU5LTg0MDEtNTBmYTgyMGNiYWU1XCIsIFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiLCBcbiAgICAgICAgICAgIGNoYW5nZXMgPSBbXSwgXG4gICAgICAgICAgICB0aXRsZSA9IFwiQmFuZGFnZWRCRFwiLCBcbiAgICAgICAgICAgIHN1YnRpdGxlID0gYHYke2JiZFZlcnNpb259YCwgXG4gICAgICAgICAgICBmb290ZXJcbiAgICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNlID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dJdGVtcyA9IFtjZShcImltZ1wiLCB7c3JjOiBpbWFnZX0pXTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjaGFuZ2VzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNoYW5nZXNbY107XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA/IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gOiBDaGFuZ2Vsb2dDbGFzc2VzLmFkZGVkO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gYyA9PSAwID8gQ2hhbmdlbG9nQ2xhc3Nlcy5tYXJnaW5Ub3AgOiBcIlwiO1xuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcImgxXCIsIHtjbGFzc05hbWU6IGAke3R5cGV9ICR7bWFyZ2lufWAsfSwgZW50cnkudGl0bGUpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGxpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sXG4gICAgICAgICAgICAgICAgY2UoVGl0bGVzLmRlZmF1bHQsIHt0YWc6IFRpdGxlcy5UYWdzLkg0fSwgdGl0bGUpLFxuICAgICAgICAgICAgICAgIGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRCwgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmRhdGV9LCBzdWJ0aXRsZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgXG4gICAgICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcbiAgICAgICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIEJEVjIuam9pbkJEMigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gY2UoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IGNlKFwiYVwiLCB7Y2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCwgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGb290ZXIgPSBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkR9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LCBmb290ZXIgPyBmb290ZXIgOiBkZWZhdWx0Rm9vdGVyKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoQ2hhbmdlbG9nLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgb25TY3JvbGw6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICBvbkNsb3NlOiBfID0+IF8sXG4gICAgICAgICAgICAgICAgcmVuZGVySGVhZGVyOiByZW5kZXJIZWFkZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXG4gICAgICovXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgICAgICBjb25zdCBNYXJrZG93biA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWFya2Rvd25cIik7XG4gICAgICAgIGNvbnN0IENvbmZpcm1hdGlvbk1vZGFsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0ua2V5ICYmIG0ua2V5KCkgPT0gXCJjb25maXJtLW1vZGFsXCIpO1xuICAgICAgICBpZiAoIU1vZGFsU3RhY2sgfHwgIUNvbmZpcm1hdGlvbk1vZGFsIHx8ICFNYXJrZG93bikgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcblxuICAgICAgICBjb25zdCBlbXB0eUZ1bmN0aW9uID0gKCkgPT4ge307XG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0gPSBlbXB0eUZ1bmN0aW9uLCBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sIGNvbmZpcm1UZXh0ID0gXCJPa2F5XCIsIGNhbmNlbFRleHQgPSBcIkNhbmNlbFwiLCBkYW5nZXIgPSBmYWxzZSwga2V5ID0gdW5kZWZpbmVkfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gW2NvbnRlbnRdO1xuICAgICAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YoYykgPT09IFwic3RyaW5nXCIgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFya2Rvd24sIG51bGwsIGMpIDogYyk7XG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goQ29uZmlybWF0aW9uTW9kYWwsIHtcbiAgICAgICAgICAgIGhlYWRlcjogdGl0bGUsXG4gICAgICAgICAgICBjaGlsZHJlbjogY29udGVudCxcbiAgICAgICAgICAgIHJlZDogZGFuZ2VyLFxuICAgICAgICAgICAgY29uZmlybVRleHQ6IGNvbmZpcm1UZXh0LFxuICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcbiAgICAgICAgICAgIG9uQ29uZmlybTogb25Db25maXJtLFxuICAgICAgICAgICAgb25DYW5jZWw6IG9uQ2FuY2VsXG4gICAgICAgIH0sIGtleSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZURhKGNsYXNzTmFtZSl7XG4gICAgICAgIGlmKCFjbGFzc05hbWUpcmV0dXJuIGNsYXNzTmFtZVxuICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhZS5zdGFydHNXaXRoKFwiZGEtXCIpKS5qb2luKFwiIFwiKVxuICAgIH1cbn1cblxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlV0aWxzID0gVXRpbHMiLCJpbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLldlYnBhY2tNb2R1bGVzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5yZW1vdmUgJiYgdGhlTW9kdWxlLnNldCAmJiB0aGVNb2R1bGUuY2xlYXIgJiYgdGhlTW9kdWxlLmdldCAmJiAhdGhlTW9kdWxlLnNvcnQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5nZXRUb2tlbiB8fCB0aGVNb2R1bGUuZ2V0RW1haWwgfHwgdGhlTW9kdWxlLnNob3dUb2tlbikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gKHRoZU1vZHVsZSwgaXNEZWZhdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gIWlzRGVmYXVsdCA/IHRoZU1vZHVsZS5kZWZhdWx0IDogdGhlTW9kdWxlXHJcbiAgICAgICAgICAgICAgICBpZighbW9kKXJldHVybiB0aGVNb2R1bGVcclxuICAgICAgICAgICAgICAgIGlmIChtb2QucmVtb3ZlICYmIG1vZC5zZXQgJiYgbW9kLmNsZWFyICYmIG1vZC5nZXQgJiYgIW1vZC5zb3J0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICghbW9kLmdldFRva2VuICYmICFtb2QuZ2V0RW1haWwgJiYgIW1vZC5zaG93VG9rZW4pcmV0dXJuIHRoZU1vZHVsZVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KG1vZCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImdldFRva2VuXCIgfHwgcHJvcCA9PT0gXCJnZXRFbWFpbFwiIHx8IHByb3AgPT09IFwic2hvd1Rva2VuXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgZnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldFRva2VuXCIgJiYgb2JqLmdldFRva2VuKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0RW1haWxcIiAmJiBvYmouZ2V0RW1haWwpIHJldHVybiAoKSA9PiBcInB1cHBldDExMTEyQGdtYWlsLmNvbVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcInNob3dUb2tlblwiICYmIG9iai5zaG93VG9rZW4pIHJldHVybiAoKSA9PiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiICYmIG9iai5fX3Byb3RvX18pIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZnVuY107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIWlzRGVmYXVsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoZU1vZHVsZSwge2RlZmF1bHQ6IHByb3h5fSlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gcHJvdGVjdChtLmRlZmF1bHQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLCBmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVzO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5VW5pcXVlUHJvcGVydGllcyA9IChwcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAocHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsID0ge1xyXG4gICAgICAgICAgICByZWFjdDogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0pLFxyXG4gICAgICAgICAgICByZWFjdERvbTogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImZpbmRET01Ob2RlXCJdKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlID0gZSA9PiBlW09iamVjdC5rZXlzKGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldO1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5WMiA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBqb2luQkQxKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMFRtZm81WmJPUkNScWJBZFwiKTt9XHJcbiAgICBsZWF2ZUJEMSgpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiODYwMDQ3NDQ5NjY5MTQwNDhcIik7fVxyXG5cclxuICAgIGpvaW5CRDIoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIySFNjbThqXCIpO31cclxuICAgIGxlYXZlQkQyKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCIyODA4MDY0NzI5MjgxOTg2NTZcIik7fVxyXG5cclxuICAgIGpvaW5MQygpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjdlRmZmMkFcIik7fVxyXG4gICAgbGVhdmVMQygpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiNzA1OTA4MzUwMjE4NjY2MTE3XCIpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcblxyXG4gICAgZ2V0IGFuY2hvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCJdKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTt9XHJcbiAgICBnZXQgc2xhdGVFZGl0b3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2xhdGVUZXh0QXJlYVwiXSk7fVxyXG4gICAgZ2V0IG1lc3NhZ2VDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibWVzc2FnZVwiLCBcImNvbnRhaW5lckNvenlcIl0pO31cclxuICAgIGdldCBndWlsZENsYXNzZXMoKSB7XHJcblx0XHRjb25zdCBndWlsZHNXcmFwcGVyID0gQkRNb2R1bGVzLmdldChlID0+IGUud3JhcHBlciAmJiBlLnVucmVhZE1lbnRpb25zQmFyKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ndWlsZHNFcnJvciAmJiBlLnNlbGVjdGVkKVswXVxyXG4gICAgICAgIGNvbnN0IHBpbGwgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ibG9iQ29udGFpbmVyKVswXVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG5cdH1cclxuXHJcbiAgICBnZXQgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KFwiZGlzYWJsZUJ1dHRvbnNcIikpO31cclxuICAgIGdldCBNZXNzYWdlQ29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk1lc3NhZ2VcIik7fVxyXG4gICAgZ2V0IFRpbWVGb3JtYXR0ZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJkYXRlRm9ybWF0XCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcFdyYXBwZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO31cclxuICAgIGdldCBOYXRpdmVNb2R1bGUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZXRCYWRnZVwiXSk7fVxyXG4gICAgZ2V0IEludml0ZUFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO31cclxuICAgIGdldCBHdWlsZEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJsZWF2ZUd1aWxkXCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcHMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uaGlkZSAmJiBtLnNob3cgJiYgIW0uc2VhcmNoICYmICFtLnN1Ym1pdCAmJiAhbS5zZWFyY2ggJiYgIW0uYWN0aXZhdGVSYWdpbmdEZW1vbiAmJiAhbS5kaXNtaXNzKTt9XHJcbiAgICBnZXQgS2V5R2VuZXJhdG9yKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLnRvU3RyaW5nICYmIC9cImJpbmFyeVwiLy50ZXN0KG0udG9TdHJpbmcoKSkpO31cclxuICAgIGdldCBMYXllclN0YWNrKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wicG9wTGF5ZXJcIl0pO31cclxuICAgIGdldCBVc2VyU3RvcmUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRDdXJyZW50VXNlclwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldENoYW5uZWxcIl0pO31cclxuICAgIGdldCBDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm9wZW5Qcml2YXRlQ2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IFByaXZhdGVDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNlbGVjdFByaXZhdGVDaGFubmVsXCJdKTt9XHJcblxyXG4gICAgb3BlbkRNKHVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGZJZCA9IHRoaXMuVXNlclN0b3JlLmdldEN1cnJlbnRVc2VyKCkuaWQ7XHJcbiAgICAgICAgaWYgKHNlbGZJZCA9PSB1c2VySWQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwcml2YXRlQ2hhbm5lbElkID0gdGhpcy5DaGFubmVsU3RvcmUuZ2V0RE1Gcm9tVXNlcklkKHVzZXJJZCk7XHJcbiAgICAgICAgaWYgKHByaXZhdGVDaGFubmVsSWQpIHJldHVybiB0aGlzLlByaXZhdGVDaGFubmVsQWN0aW9ucy5zZWxlY3RQcml2YXRlQ2hhbm5lbChwcml2YXRlQ2hhbm5lbElkKTtcclxuICAgICAgICB0aGlzLkNoYW5uZWxBY3Rpb25zLm9wZW5Qcml2YXRlQ2hhbm5lbChzZWxmSWQsIHVzZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VTZXR0aW5ncyhjYXQpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfSByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbn07IiwiaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3Qgc3R5bGUgPSBgXHJcbiAgICAuY29udGFpbmVyLTJSbDAxdSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmNoYXQtM2JSeHh1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuc2lkZWJhci0ySzhwRmgge1xyXG4gICAgICAgIGZsZXgtZ3JvdzogMSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbmA7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVm9pY2VNb2RlIHtcclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcIlZvaWNlTW9kZVwiLCBzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJWb2ljZU1vZGVcIik7XHJcbiAgICB9XHJcbn07IiwiY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIG0uZGVmYXVsdDtcclxuICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIG07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKG0uZGVmYXVsdCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gobSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZHVsZXM7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQnlQcm9wcyA9ICguLi5wcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAoLi4ucHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG5sZXQgbW9kID0gIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlQcm9wcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xyXG5leHBvcnQgZGVmYXVsdCBtb2RcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5XZWJwYWNrTW9kdWxlcyA9IG1vZCIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCJcclxuXHJcbmxldCBwcm9maWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5vcGVuICYmIGUuZGVmYXVsdC5mZXRjaE11dHVhbEZyaWVuZHMpWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRVc2VyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIGRlbGV0ZSBwcm9wcy5ocmVmLnRhcmdldFxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhwcm9wcylcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHByb3BzLkFuY2hvciBocmVmPXtcIi91c2Vycy9cIitwcm9wcy51c2VyLmlkfSB7Li4ucHJvcHMuaHJlZn0gb25DbGljaz17KGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICBpZighcHJvZmlsTW9kdWxlKXByb2ZpbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lm9wZW4gJiYgZS5kZWZhdWx0LmZldGNoTXV0dWFsRnJpZW5kcylbMF1cclxuICAgICAgICAgICAgICAgIHByb2ZpbE1vZHVsZS5kZWZhdWx0Lm9wZW4ocHJvcHMudXNlci5pZClcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzEuMyAyOS41XCIgey4uLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L3Byb3BzLkFuY2hvcj5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVnSHVudGVyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIENpcmN1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiAgey4uLnRoaXMucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjREQyRTQ0XCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMzIDMzYTIgMiAwIDAxLTIgMkg1YTIgMiAwIDAxLTItMmwxLTEyaDI4bDEgMTJ6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRUE1OTZFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTEzIDM1Yy0uNzkyLTEuODc1LTEuNzUtMy4yOTEtMy40MTctNC42NjYgMS43NS0xLjQ1OSA0LjU0Mi01LjUgNS4yNS04LjI5MnMyLjc1IDguMTI1IDIuMDQyIDEwLjYyNVMxMyAzNSAxMyAzNXptMTAuMzAzIDBjLjc5MS0xLjg3NSAxLjc1LTMuMjkxIDMuNDE2LTQuNjY2LTEuNzUtMS40NTktNC41NDEtNS41LTUuMjUtOC4yOTItLjcwNy0yLjc5Mi0yLjc1IDguMTI1LTIuMDQgMTAuNjI1LjcwOCAyLjUgMy44NzQgMi4zMzMgMy44NzQgMi4zMzN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQkUxOTMxXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzI4IDI0LjI2M0EyLjUgMi41IDAgMDA4IDIyLjVjMC0uNTY1LS4xOTUtMS4wODEtLjUxMS0xLjVINGwtLjI3MiAzLjI2M3ptMjguNTQ0IDBMMzIgMjFoLTMuNDg5QTIuNDgyIDIuNDgyIDAgMDAyOCAyMi41YTIuNSAyLjUgMCAwMDQuMjcyIDEuNzYzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE0XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjI2XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjMgMzVIMTNzMi02IDItMTNoNmMwIDcgMiAxMyAyIDEzek0xNyAyaDJ2N2gtMnpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNTVBQ0VFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjgzOC4yMDZDMTcuNjY3LjA0MiAxNyAuMzE4IDE3IDEuNDE4djFjMCAxLjEuODY1IDEuNzUzIDEuOTIzIDEuNDUxbDUuMTU0LS45MDFjMS43MTUtLjM0MyAxLjU0OC0xLjU5My4wODUtMS44ODRMMTguODM4LjIwNnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNDQ0Q2RERcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggNmwtLjA4MS4xMjNDMTAuOTM4IDE2Ljk4MSAzIDE1LjAxNSAzIDE5djIuNWEyLjUgMi41IDAgMDA0Ljk1LjVIMTJhMiAyIDAgMDA0IDBoNGEyIDIgMCAwMDQgMGg0LjA1YTIuNSAyLjUgMCAwMDQuOTUtLjVWMTljMC00LTgtMi0xNS0xM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxnIGZpbGw9XCIjRjVGOEZBXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45NDggNi4wNzhsLS4wMy4wNDVDMTcuMTMyIDExLjYxOSAxMC44MTEgMTYuMTI2IDggMTh2NGEyIDIgMCAwMDQgMHYtNGMuOTgyLS45ODIgNS44MTMtNi43ODcgNS45ODQtMTEuNzMyLS4wMS0uMDY0LS4wMjctLjEyNi0uMDM2LS4xOXptLjA4LjM5OEMxOC4zMjQgMTEuMzc0IDIzLjAzMSAxNy4wMzEgMjQgMTh2NGEyIDIgMCAwMDQgMHYtNGMtMi43NS0xLjgzMy04Ljk1My02LjE5LTkuOTcyLTExLjUyNHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45ODQgNi4yN0MxNy45MjIgOC4zNDYgMTcuNjA2IDE2LjM5NCAxNiAxOHY0YTIgMiAwIDAwNCAwdi00Yy0xLjU2NC0xLjU2NC0xLjkwNS05LjI0MS0xLjk3OS0xMS41NTktLjAxMS0uMDU3LS4wMjctLjExMy0uMDM3LS4xNzF6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRjb3JkTG9nbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTY4IDE2OC42OVwiIHsuLi5wcm9wc30gaGVpZ2h0PVwiMTAwJVwiIHdpZHRoPXtwcm9wcy5zaXplfT5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fYVwiIHgxPXs2Ni43fSB5MT17LTQ4Ny43fSB4Mj17NjYuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTE0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fYlwiIHgxPXsxMDEuN30geTE9ey00ODcuN30geDI9ezEwMS43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMjA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19jXCIgeDE9ezg0fSB5MT17LTQwOH0geDI9ezg0fSB5Mj17LTU3Ni42OX0gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiI2ZmZlwiIGQ9XCJNMTQuOSAzNS4zaDEzOS4yVjEzM0gxNC45elwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTY2LjcgNzkuN2MtNS40IDAtOS44IDQuNy05LjggMTAuNXM0LjQgMTAuNSA5LjggMTAuNSA5LjgtNC43IDkuOC0xMC41LTQuNC0xMC41LTkuOC0xMC41elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMDEuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19iKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMHYxNjhsMTY4IC42OVYwem0xMTEuMyAxMjQuMXMtMy40LTQuMS02LjMtNy43YzEyLjYtMy41IDE3LjQtMTEuMyAxNy40LTExLjNhNTIuNTIgNTIuNTIgMCAwMS0xMS4xIDUuNiA2OC42MyA2OC42MyAwIDAxLTM4LjkgNCA3MC4xMiA3MC4xMiAwIDAxLTE0LjEtNC4xIDQ4Ljg4IDQ4Ljg4IDAgMDEtNy4xLTMuM2MtLjMtLjItLjYtLjMtLjktLjVhLjc2Ljc2IDAgMDAtLjQtLjJjLTEuNy0xLTIuNi0xLjYtMi42LTEuNnM0LjYgNy42IDE2LjggMTEuMmMtMi45IDMuNi02LjQgNy45LTYuNCA3LjktMjEuMi0uNi0yOS4zLTE0LjUtMjkuMy0xNC41IDAtMzAuNiAxMy44LTU1LjQgMTMuOC01NS40IDEzLjgtMTAuMyAyNi45LTEwIDI2LjktMTBsMSAxLjFDNTIuOCA1MC4zIDQ1IDU3LjkgNDUgNTcuOWE1Ni4yIDU2LjIgMCAwMTUuNy0yLjcgNzIuMTkgNzIuMTkgMCAwMTIxLjgtNiA4Ljc1IDguNzUgMCAwMTEuNi0uMiA4OS4xIDg5LjEgMCAwMTE5LjQtLjIgNzguNDUgNzguNDUgMCAwMTI4LjkgOS4xcy03LjUtNy4yLTIzLjktMTIuMWwxLjMtMS41czEzLjEtLjMgMjYuOSAxMGMwIDAgMTMuOCAyNC44IDEzLjggNTUuNC4xLS4xLTggMTMuOC0yOS4yIDE0LjR6XCIgZmlsbD1cInVybCgjcHJlZml4X19jKVwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcblxyXG4vKipcclxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cclxuICovXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG5sZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG5sZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxubGV0IHNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxyXG5jb25zdCBHdWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcylbMF0uZGVmYXVsdFxyXG5jb25zdCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRSZWxhdGlvbnNoaXBzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHNlc3Npb25Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRTZXNzaW9ucylbMF0uZGVmYXVsdFxyXG5jb25zdCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19BY2NvdW50SW5mb3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmKCFtYXJnaW5Nb2R1bGUyKW1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbiAgICAgICAgaWYoIWNvbG9yTW9kdWxlKWNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxuICAgICAgICBpZighc2l6ZU1vZHVsZSlzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiQWNjb3VudCBJbmZvc1wiLz4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIFByb2ZpbGVcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRQcm9maWxlVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGlzdGljc1xyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFN0YXRpc3RpY3MoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGVkIFNlc3Npb25zXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U2Vzc2lvblZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlc3Npb25WYWx1ZSgpe1xyXG4gICAgICAgIGNvbnN0IHNlc3Npb25zUmF3ID0gc2Vzc2lvbk1vZHVsZS5nZXRTZXNzaW9ucygpXHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnMgPSBPYmplY3Qua2V5cyhzZXNzaW9uc1JhdykuZmlsdGVyKGUgPT4gZSAhPT0gXCJhbGxcIikubWFwKGUgPT4gc2Vzc2lvbnNSYXdbZV0pXHJcblxyXG4gICAgICAgIGlmKHNlc3Npb25zLmxlbmd0aCA9PT0gMClyZXR1cm4gXCItIE5vIHNlc3Npb24gZGV0ZWN0ZWQuIFBsZWFzZSB0cnkgaW4gYSBmZXcgc2Vjb25kc1wiXHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHNlc3Npb25zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGArIGlkOiAke2Uuc2Vzc2lvbklkfVxyXG4rIG9zOiAke2UuY2xpZW50SW5mby5vc1swXS50b1VwcGVyQ2FzZSgpK2UuY2xpZW50SW5mby5vcy5zbGljZSgxKX1cclxuKyBjbGllbnQ6ICR7ZS5jbGllbnRJbmZvLmNsaWVudH1cclxuKyBzdGF0dXM6ICR7ZS5zdGF0dXN9XHJcbisgQWN0aXZpdGllczogJHtlLmFjdGl2aXRpZXMubGVuZ3RofWBcclxuICAgICAgICB9KS5qb2luKFwiXFxuXCIrXCItXCIucmVwZWF0KDM4KStcIlxcblwiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2ZpbGVWYWx1ZSgpe1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7RGF0ZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkQXQgPSB1c2VyLmNyZWF0ZWRBdFxyXG5cclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYXZhdGFyVVJMLnN0YXJ0c1dpdGgoXCIvXCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gXCJodHRwczovL2Rpc2NvcmQuY29tXCIrYXZhdGFyVVJMXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGF2YXRhclVSTC5lbmRzV2l0aChcIj9zaXplPTEyOFwiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IGF2YXRhclVSTC5yZXBsYWNlKFwiP3NpemU9MTI4XCIsIFwiP3NpemU9NDA5NlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGArIFVzZXJuYW1lOiAke3VzZXIudXNlcm5hbWV9XHJcbisgRGlzY3JpbWluYXRvcjogJHt1c2VyLmRpc2NyaW1pbmF0b3J9XHJcbisgVGFnOiAke3VzZXIudGFnfVxyXG4rIElEOiAke3VzZXIuaWR9XHJcbisgQXZhdGFyOiAke3VzZXIuYXZhdGFyfVxyXG4rIEF2YXRhciBVUkw6ICR7YXZhdGFyVVJMfVxyXG4rIENyZWF0aW9uIERhdGU6ICR7KGNyZWF0ZWRBdC5nZXREYXRlKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0TW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldEZ1bGxZZWFyKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfSAke2NyZWF0ZWRBdC5nZXRIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfWggJHtjcmVhdGVkQXQuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfW1pbiAke2NyZWF0ZWRBdC5nZXRTZWNvbmRzKCl9c1xyXG4rIEZsYWdzOiAke3VzZXIuZmxhZ3N9XHJcbisgSGFzIE5pdHJvOiAke3VzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiA/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/IGNoaWxkcmVuIDogSlNPTi5zdHJpbmdpZnkoY2hpbGRyZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgUmVhY3QuY3JlYXRlRWxlbWVudCgke2NvbXBQYXRofSwgJHtwcm9wT2JqZWN0fSwgJHtjaGlsZHJlbkRhdGF9KWBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVscCA9IGNvbXAuaGVscCB8fCB7fVxyXG4gICAgICAgICAgICAgICAgbGV0IGluZm8gPSBoZWxwLmluZm8gPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuaW5mb31cclxuICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICAgICAgICAgIGxldCB3YXJuID0gaGVscC53YXJuID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwid2FyblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLndhcm59XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgZGFuZ2VyID0gaGVscC5kYW5nZXIgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJkYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC5kYW5nZXJ9XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBoZWxwLmVycm9yID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC5lcnJvcn1cclxuICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICAgICAgICAgIGxldCBzdWNjZXNzID0gaGVscC5zdWNjZXNzID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwic3VjY2Vzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLnN1Y2Nlc3N9XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nc1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICB7aW5mb31cclxuICAgICAgICAgICAgICAgICAgICB7c3VjY2Vzc31cclxuICAgICAgICAgICAgICAgICAgICB7d2Fybn1cclxuICAgICAgICAgICAgICAgICAgICB7ZXJyb3J9XHJcbiAgICAgICAgICAgICAgICAgICAge2Rhbmdlcn1cclxuICAgICAgICAgICAgICAgICAgICB7QWxsUHJldmlld3MubWFwKGNhdGVnb3J5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0ub25DbGljaylyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS50ZXh0KXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLmNoaWxkcmVuKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5Lmxlbmd0aCA9PT0gMSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2tleX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gb3B0aW9ucz17Y2F0ZWdvcnkubWFwKChlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm9wdC1cIitpbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IEpTT04uc3RyaW5naWZ5KGVbT2JqZWN0LmtleXMoZSlbMF1dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfSB2YWx1ZT17XCJvcHQtXCIrKHN0YXRlLm9wdGlvbnNba2V5XSB8fCBcIjBcIil9IG9uQ2hhbmdlPXsodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLm9wdGlvbnMsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiAodmFsdWUudmFsdWUgfHwgXCIwXCIpLnJlcGxhY2UoXCJvcHQtXCIsIFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19IHNlYXJjaGFibGU9e3RydWV9Lz4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luQm90dG9tOiBcIjhweFwifX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnMgdGFicz17W3tsYWJlbDogXCJQcmV2aWV3XCIsIGlkOiBcInByZXZpZXdcIn0sIHtsYWJlbDogXCJDb2RlXCIsIGlkOiBcImNvZGVcIn1dfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXtzdGF0ZS50YWJ9IGNoaWxkcmVuPXtzdGF0ZS50YWIgPT09IFwicHJldmlld1wiID8gcmVuZGVyUHJldmlldygpIDogcmVuZGVyQ29kZSgpfSBvbkNoYW5nZT17b25DaGFuZ2V9Lz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlbmRlcnMoKXtcclxuXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBYU3ZnIGZyb20gXCIuL3hTdmdcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4vcmVsb2FkSWNvblwiO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIi4vaWNvbnMvZWRpdFwiO1xyXG5pbXBvcnQgRGVsZXRlSWNvbiBmcm9tIFwiLi9pY29ucy9kZWxldGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4vdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IHsgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5jb25zdCBhbmNob3JDbGFzc2VzID0gQkRWMi5hbmNob3JDbGFzc2VzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1BsdWdpbkNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgPSB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiAmJiB0eXBlb2YodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG5cclxuICAgICAgICB0aGlzLmVkaXQgPSB0aGlzLmVkaXQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZSA9IHRoaXMuZGVsZXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmVuYWJsZWQsXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVsb2FkczogMCxcclxuICAgICAgICAgICAgdHJ1c3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzU2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5hcHBlbmRDaGlsZCh0aGlzLnNldHRpbmdzUGFuZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCJkaXZbY2xhc3MqPVxcXCJzY3JvbGxlci1cXFwiXVwiKVxyXG4gICAgICAgICAgICBpZiAoIWlzSGlkZGVuKGNvbnRhaW5lciwgdGhpc05vZGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlT2Zmc2V0ID0gRE9NLm9mZnNldCh0aGlzTm9kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldCA9IERPTS5vZmZzZXQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXNOb2RlT2Zmc2V0LnRvcCAtIGNvbnRhaW5lck9mZnNldC50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wIC0gMzA7XHJcbiAgICAgICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFBvaW50ID4gb3JpZ2luYWwpIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCArIChwcm9ncmVzcyAqIChlbmRQb2ludCAtIG9yaWdpbmFsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgLSAocHJvZ3Jlc3MgKiAob3JpZ2luYWwgLSBlbmRQb2ludCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXR0aW5nc0NvbXBvbmVudCgpIHtcclxuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIHRoaXMubmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkIGJkLWFkZG9uLWNhcmQgc2V0dGluZ3Mtb3BlbiB1aS1zd2l0Y2gtaXRlbVwiLCByZWY6IFwiY2FyZE5vZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XCJmbG9hdFwiOiBcInJpZ2h0XCIsIFwiY3Vyc29yXCI6IFwicG9pbnRlclwifSwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsID09PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwifSksXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgIT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCIsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7X19odG1sOiB0aGlzLnNldHRpbmdzUGFuZWx9fSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSBcInt7bmFtZX19IHZ7e3ZlcnNpb259fSBieSB7e2F1dGhvcn19XCIuc3BsaXQoLyh7e1tBLVphLXpdK319KS8pO1xyXG4gICAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e25hbWV9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVtuYW1lSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJuYW1lIGJkYS1uYW1lXCJ9LCBuYW1lKTtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3t2ZXJzaW9ufX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbdmVyc2lvbkluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwidmVyc2lvbiBiZGEtdmVyc2lvblwifSwgdmVyc2lvbik7XHJcbiAgICAgICAgY29uc3QgYXV0aG9ySW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3thdXRob3J9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJhdXRob3IgYmRhLWF1dGhvclwifTtcclxuICAgICAgICAgICAgaWYgKGF1dGhvci5saW5rIHx8IGF1dGhvci5pZCkge1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuY2xhc3NOYW1lICs9IGAgJHthbmNob3JDbGFzc2VzLmFuY2hvcn0gJHthbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YDtcclxuICAgICAgICAgICAgICAgIHByb3BzLnRhcmdldCA9IFwiX2JsYW5rXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5saW5rKSBwcm9wcy5ocmVmID0gYXV0aG9yLmxpbms7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmlkKSBwcm9wcy5vbkNsaWNrID0gKCkgPT4ge0JEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpOyBCRFYyLm9wZW5ETShhdXRob3IuaWQpO307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGl0bGVbYXV0aG9ySW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChhdXRob3IubGluayB8fCBhdXRob3IuaWQgPyBcImFcIiA6IFwic3BhblwiLCBwcm9wcywgYXV0aG9yLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGUuZmxhdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VMaW5rKHRpdGxlLCB1cmwpIHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYmRhLWxpbmsgYmRhLWxpbmstd2Vic2l0ZVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9O1xyXG4gICAgICAgIGlmICh0eXBlb2YodXJsKSA9PSBcInN0cmluZ1wiKSBwcm9wcy5ocmVmID0gdXJsO1xyXG4gICAgICAgIGlmICh0eXBlb2YodXJsKSA9PSBcImZ1bmN0aW9uXCIpIHByb3BzLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHtldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdXJsKCk7fTtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBwcm9wcywgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VCdXR0b24odGl0bGUsIGNoaWxkcmVuLCBhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gPFRvb2x0aXBXcmFwIGNvbG9yPVwiYmxhY2tcIiBzaWRlPVwidG9wXCIgdGV4dD17dGl0bGV9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWJ1dHRvblwiIG9uQ2xpY2s9e2FjdGlvbn0+e2NoaWxkcmVufTwvZGl2PlxyXG4gICAgICAgIDwvVG9vbHRpcFdyYXA+O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgdGhpcy51bm1vdW50ZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxpbmtzKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW107XHJcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG4gICAgICAgIGlmIChhZGRvbi53ZWJzaXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJXZWJzaXRlXCIsIGFkZG9uLndlYnNpdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24uc291cmNlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTb3VyY2VcIiwgYWRkb24uc291cmNlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLmludml0ZSkge1xyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTdXBwb3J0IFNlcnZlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ZXIgPSAvXFwuZ2dcXC8oLiopJC87XHJcbiAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGFkZG9uLmludml0ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0ZXIudGVzdChjb2RlKSkgY29kZSA9IGNvZGUubWF0Y2godGVzdGVyKVsxXTtcclxuICAgICAgICAgICAgICAgIEJEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoY29kZSk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFkZG9uLmRvbmF0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiRG9uYXRlXCIsIGFkZG9uLmRvbmF0ZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5wYXRyZW9uKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJQYXRyZW9uXCIsIGFkZG9uLnBhdHJlb24pKTtcclxuICAgICAgICByZXR1cm4gbGlua3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZvb3RlcigpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IHRoaXMubGlua3M7XHJcbiAgICAgICAgcmV0dXJuIChsaW5rcy5sZW5ndGggfHwgdGhpcy5oYXNTZXR0aW5ncykgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC1mb290ZXIgYmRhLWZvb3RlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWxpbmtzIGJkYS1saW5rc1wifSxcclxuICAgICAgICAgICAgICAgIC4uLihsaW5rcy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiBpbmRleCA8IGxpbmtzLmxlbmd0aCAtIDEgPyBbZWxlbWVudCwgXCIgfCBcIl0gOiBlbGVtZW50KS5mbGF0KCkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtvbkNsaWNrOiB0aGlzLnNob3dTZXR0aW5ncywgY2xhc3NOYW1lOiBcImJkLWJ1dHRvbiBiZGEtc2V0dGluZ3MtYnV0dG9uXCIsIGRpc2FibGVkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSwgXCJTZXR0aW5nc1wiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy50b2dnbGUgJiYgdGhpcy5wcm9wcy50b2dnbGUodGhpcy5uYW1lKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdCgpIHt0aGlzLnByb3BzLmVkaXQodGhpcy5uYW1lKTt9XHJcbiAgICBkZWxldGUoKSB7dGhpcy5wcm9wcy5yZW1vdmUodGhpcy5uYW1lKTt9XHJcbiAgICByZWxvYWQoKSB7dGhpcy5wcm9wcy5yZWxvYWQodGhpcy5uYW1lKTt9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogdGhpcy5wcm9wcy5hZGRvbi5uYW1lKTt9XHJcbiAgICBnZXQgYXV0aG9yKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogdGhpcy5wcm9wcy5hZGRvbi5hdXRob3IpO31cclxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogdGhpcy5wcm9wcy5hZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0IHZlcnNpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogdGhpcy5wcm9wcy5hZGRvbi52ZXJzaW9uKTt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcclxuICAgICAgICBjb25zdCB7YXV0aG9ySWQsIGF1dGhvckxpbmt9ID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuXHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB7fVxyXG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuaXNTY2FubmluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nhbm5pbmcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShyZXNvbHZlKHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUuZW5kc1dpdGgoXCIucGx1Z2luLmpzXCIpID8gY29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgdGhpcy5wcm9wcy5hZGRvbi5maWxlbmFtZSksIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnVubW91bnRlZClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RydXN0ZWQ6IHJlc3VsdC5zdXNwZWN0ID8gXCJzdXNwZWN0XCIgOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sICgpID0+IHt9KVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuaXNUcnVzdGVkID09PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gXCJzdXNwZWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLWNsb3NlZCB1aS1zd2l0Y2gtaXRlbVwiLCBzdHlsZX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWhlYWRlciBiZGEtaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtdGl0bGUgYmRhLWhlYWRlci10aXRsZVwifSwgdGhpcy5idWlsZFRpdGxlKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB7bmFtZTogdGhpcy5hdXRob3IsIGlkOiBhdXRob3JJZCwgbGluazogYXV0aG9yTGlua30pKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1jb250cm9scyBiZGEtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZWRpdCAmJiB0aGlzLm1ha2VCdXR0b24oXCJFZGl0XCIsIDxFZGl0SWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZWRpdCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVtb3ZlICYmIHRoaXMubWFrZUJ1dHRvbihcIkRlbGV0ZVwiLCA8RGVsZXRlSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZGVsZXRlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZWxvYWQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiUmVsb2FkXCIsIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5yZWxvYWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge29uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWR9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXItd3JhcCBiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1zY3JvbGxlciBiZC1hZGRvbi1kZXNjcmlwdGlvbiBiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIn0sIHRoaXMuZGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRoaXMuZm9vdGVyXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBWMkNfUGx1Z2luQ2FyZC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsiLCJpbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tIFwiLi9lcnJvckJvdW5kYXJ5XCI7XHJcbmltcG9ydCBDb250ZW50Q29sdW1uIGZyb20gXCIuL2NvbnRlbnRDb2x1bW5cIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4vcmVsb2FkSWNvblwiO1xyXG5pbXBvcnQgQWRkb25DYXJkIGZyb20gXCIuL2FkZG9uY2FyZFwiO1xyXG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vY29tcG9uZW50cy9kcm9wZG93blwiO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuL2NvbXBvbmVudHMvc2VhcmNoXCI7XHJcblxyXG5pbXBvcnQge3NldHRpbmdzQ29va2llLCBwbHVnaW5Db29raWUsIHRoZW1lQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi4vbW9kdWxlcy90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuLi9tb2R1bGVzL2JkQXBpXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4vdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuLi9tb2R1bGVzL2JkRXZlbnRzXCI7XHJcblxyXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLnJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FyZExpc3QgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7c29ydDogXCJuYW1lXCIsIGFzY2VuZGluZzogdHJ1ZSwgcXVlcnk6IFwiXCJ9O1xyXG4gICAgICAgIHRoaXMuaXNQbHVnaW5zID0gdGhpcy5wcm9wcy50eXBlID09IFwicGx1Z2luc1wiO1xyXG4gICAgICAgIHRoaXMuY29va2llID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Db29raWUgOiB0aGVtZUNvb2tpZTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbk1vZHVsZSA6IHRoZW1lTW9kdWxlO1xyXG5cclxuICAgICAgICB0aGlzLnNvcnQgPSB0aGlzLnNvcnQuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSB0aGlzLnJldmVyc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMub25BZGRvbkNoYW5nZXMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkFkZG9uQ2hhbmdlcyA9IHRoaXMub25BZGRvbkNoYW5nZXMuYmluZCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcclxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX11bmxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICBjb25zdCB0eXBlID0gKHRoaXMuaXNQbHVnaW5zID8gXCJwbHVnaW5cIiA6IFwidGhlbWVcIikgKyBcIi1cIlxyXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfXJlbG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRm9sZGVyKCkge1xyXG4gICAgICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbSh0aGlzLmlzUGx1Z2lucyA/IENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQobmFtZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5lZGl0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkRGVsZXRlID0gYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlKG5hbWUpO1xyXG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmRlbGV0ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbChcIkFyZSBZb3UgU3VyZT9cIiwgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJHtuYW1lfT9gLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEZWxldGVcIixcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge3Jlc29sdmUodHJ1ZSk7fSxcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7cmVzb2x2ZShmYWxzZSk7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBcIk5hbWVcIiwgdmFsdWU6IFwibmFtZVwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkF1dGhvclwiLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJWZXJzaW9uXCIsIHZhbHVlOiBcInZlcnNpb25cIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJSZWNlbnRseSBBZGRlZFwiLCB2YWx1ZTogXCJhZGRlZFwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkxhc3QgTW9kaWZpZWRcIiwgdmFsdWU6IFwibW9kaWZpZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJGaWxlIFNpemVcIiwgdmFsdWU6IFwic2l6ZVwifSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkaXJlY3Rpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBc2NlbmRpbmdcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRGVzY2VuZGluZ1wiLCB2YWx1ZTogZmFsc2V9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb3BzKGFkZG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmdldE5hbWUoYWRkb24pLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNvb2tpZVt0aGlzLmdldE5hbWUoYWRkb24pXSxcclxuICAgICAgICAgICAgdG9nZ2xlOiB0aGlzLm1hbmFnZXIudG9nZ2xlLmJpbmQodGhpcy5tYW5hZ2VyKSxcclxuICAgICAgICAgICAgZWRpdDogc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTdcIl0gPyB0aGlzLmVkaXQuYmluZCh0aGlzKSA6IG51bGwsXHJcbiAgICAgICAgICAgIHJlbW92ZTogdGhpcy5kZWxldGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgYWRkb246IGFkZG9uLFxyXG4gICAgICAgICAgICBoYXNoOiBhZGRvbi5oYXNoXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdHJpbmcodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCI/Pz9cIjtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxpc3QoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50eXBlID09PSBcInBsdWdpbnNcIiA/IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKSA6IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9ucygpIHtcclxuICAgICAgICBjb25zdCBzb3J0ZWRBZGRvbnMgPSB0aGlzLmxpc3Quc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnN0YXRlLnNvcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN0YXRlLnNvcnQuc2xpY2UoMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gYS5wbHVnaW4gJiYgYS5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYS5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpIDogYVt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiLnBsdWdpbiAmJiBiLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhiLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgIDogYlt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGZpcnN0KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gZmlyc3QudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHNlY29uZC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+IGZpcnN0KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5hc2NlbmRpbmcpIHNvcnRlZEFkZG9ucy5yZXZlcnNlKCk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHNvcnRlZEFkZG9ucy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHNvcnRlZEFkZG9uc1thXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRBdXRob3IoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIG1hdGNoZXMgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCB2ZXJzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhhZGRvbik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVkLnB1c2goPEVycm9yQm91bmRhcnk+PEFkZG9uQ2FyZCB7Li4ucHJvcHN9IHJlbG9hZD17IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHRoaXMubWFuYWdlci5yZWxvYWQuYmluZCh0aGlzLm1hbmFnZXIpfSAvPjwvRXJyb3JCb3VuZGFyeT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVuZGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmFtZShhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0QXV0aG9yKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IGFkZG9uLmF1dGhvcik7fVxyXG4gICAgZ2V0RGVzY3JpcHRpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiBhZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0VmVyc2lvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlckNoZWNrVXBkYXRlcygpe1xyXG4gICAgICAgIGlmKCF3aW5kb3cuWmVyZXNQbHVnaW5MaWJyYXJ5KXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXdpbmRvdy5QbHVnaW5VcGRhdGVzKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsICE9PSBcImZ1bmN0aW9uXCIpcmV0dXJuIG51bGxcclxuICAgICAgICBpZighdGhpcy5pc1BsdWdpbnMpcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCB0ZXh0PVwiQ2hlY2tzIGZvciB1cGRhdGVzIG9mIHBsdWdpbnMgdGhhdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gUmlnaHQtY2xpY2sgZm9yIGEgbGlzdC5cIj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiBcIjEwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBpbiBwcm9ncmVzcy5cIiwge3R5cGU6IFwiaW5mb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBsdWdpblVwZGF0ZXMuY2hlY2tBbGwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJQbHVnaW4gdXBkYXRlIGNoZWNrIGNvbXBsZXRlLlwiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgY2hlY2tpbmcgdXBkYXRlLlwiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0gZGlzYWJsZWQ9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgVXBkYXRlc1xyXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvVG9vbHRpcFdyYXA+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHJlZnJlc2hJY29uID0gPFRvb2x0aXAgY29sb3I9XCJibGFja1wiIHBvc2l0aW9uPVwidG9wXCIgdGV4dD1cIlJlbG9hZCBMaXN0XCI+XHJcbiAgICAgICAgICAgIHsocHJvcHMpID0+IFxyXG4gICAgICAgICAgICA8UmVsb2FkSWNvbiB7Li4ucHJvcHN9IGNsYXNzTmFtZT1cImJkLWljb24gYmQtcmVsb2FkIGJkLXJlbG9hZC1oZWFkZXJcIiBzaXplPVwiMThweFwiIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGx1Z2lucykgcGx1Z2luTW9kdWxlLnVwZGF0ZVBsdWdpbkxpc3QoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhlbWVNb2R1bGUudXBkYXRlVGhlbWVMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgIH08L1Rvb2x0aXA+O1xyXG4gICAgICAgIGNvbnN0IGFkZG9uQ2FyZHMgPSB0aGlzLmdldEFkZG9ucygpO1xyXG5cclxuICAgICAgICByZXR1cm4gPENvbnRlbnRDb2x1bW4gdGl0bGU9e2Ake3RoaXMucHJvcHMudHlwZS50b1VwcGVyQ2FzZSgpfeKAlCR7YWRkb25DYXJkcy5sZW5ndGh9YH0+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2V5PVwiZm9sZGVyLWJ1dHRvblwiIGNsYXNzTmFtZT1cImJkLWJ1dHRvbiBiZC1wZmJ0blwiIG9uQ2xpY2s9e3RoaXMub3BlbkZvbGRlci5iaW5kKHRoaXMpfT5PcGVuIHt0aGlzLmlzUGx1Z2lucyA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCJ9IEZvbGRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJDaGVja1VwZGF0ZXMoKX1cclxuICAgICAgICAgICAgeyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiByZWZyZXNoSWNvbn1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgPFNlYXJjaCBvbkNoYW5nZT17dGhpcy5zZWFyY2h9IHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7dGhpcy5wcm9wcy50eXBlfS4uLmB9IC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWRyb3Bkb3duc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+U29ydCBieTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5PcmRlcjo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZGEtc2xpc3QgYmQtYWRkb24tbGlzdFwiPnthZGRvbkNhcmRzfTwvZGl2PlxyXG4gICAgICAgIDwvQ29udGVudENvbHVtbj5cclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDYXJkTGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FyZExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsgIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJETG9nbyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHtoZWlnaHQ6IFwiMTAwJVwiLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nbyBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZToge2ZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJ9LCB2aWV3Qm94OiBcIjAgMCAyMDAwIDIwMDBcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcIm1ldGFkYXRhXCIsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzFcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjIwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MlwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTVcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgyNTUsMjU1LDI1NSwwLjE1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3czXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3czKVwifSwgZDogXCJNMTE5NS40NCsxMzUuNDQyTDExOTUuNDQrMTM1LjQ0Mkw5OTcuNisxMzYuNDQyQzEwMjQuMisxNDkuNzQyKzExNzAuMzQrMTYzLjU0MisxMTkzLjY0KzE3OS43NDJDMTI2NC4zNCsyMjguODQyKzEzMTkuNzQrMjkxLjI0MisxMzU4LjI0KzM2NS4wNDJDMTM5OC4xNCs0NDEuNjQyKzE0MTkuNzQrNTMwLjY0MisxNDIyLjU0KzYyOS42NDJMMTQyMi41NCs2MzAuODQyTDE0MjIuNTQrNjMyLjA0MkMxNDIyLjU0Kzc3My4xNDIrMTQyMi41NCsxMjI4LjE0KzE0MjIuNTQrMTM2OS4xNEwxNDIyLjU0KzEzNzAuMzRMMTQyMi41NCsxMzcxLjU0QzE0MTkuODQrMTQ3MC41NCsxMzk4LjI0KzE1NTkuNTQrMTM1OC4yNCsxNjM2LjE0QzEzMTkuNzQrMTcwOS45NCsxMjY0LjQ0KzE3NzIuMzQrMTE5My42NCsxODIxLjQ0QzExNzEuMDQrMTgzNy4xNCsxMDI1LjcrMTg1MC41NCsxMDAwKzE4NjMuNTRMMTE5My41NCsxODY0LjU0QzE1MzkuNzQrMTg2Ni40NCsxODY0LjU0KzE2OTMuMzQrMTg2NC41NCsxMjk2LjY0TDE4NjQuNTQrNzE2Ljk0MkMxODY2LjQ0KzMxMi40NDIrMTU0MS42NCsxMzUuNDQyKzExOTUuNDQrMTM1LjQ0MlpcIiwgZmlsbDogXCIjMTcxNzE3XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzIpXCJ9LCBkOiBcIk0xNjk1LjU0KzYzMS40NDJDMTY4NS44NCsyNzguMDQyKzE0MDkuMzQrMTM1LjQ0MisxMDUyLjk0KzEzNS40NDJMMzYxLjc0KzEzNi40NDJMODAzLjc0KzQ5MC40NDJMMTA2MC43NCs0OTAuNDQyQzEzMzUuMjQrNDkwLjQ0MisxMzM1LjI0KzgzNS4zNDIrMTA2MC43NCs4MzUuMzQyTDEwNjAuNzQrMTE2NC44NEMxMTUwLjIyKzExNjQuODQrMTIxMC41MysxMjAxLjQ4KzEyNDEuNjgrMTI1MC44N0MxMzA2LjA3KzEzNTMrMTI0NS43NisxNTA5LjY0KzEwNjAuNzQrMTUwOS42NEwzNjEuNzQrMTg2My41NEwxMDUyLjk0KzE4NjQuNTRDMTQwOS4yNCsxODY0LjU0KzE2ODUuNzQrMTcyMS45NCsxNjk1LjU0KzEzNjguNTRDMTY5NS41NCsxMjA1Ljk0KzE2NTEuMDQrMTA4NC40NCsxNTcyLjY0Kzk5OS45NDJDMTY1MS4wNCs5MTUuNTQyKzE2OTUuNTQrNzk0LjA0MisxNjk1LjU0KzYzMS40NDJaXCIsIGZpbGw6IFwiIzNFODJFNVwiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cxKVwifSwgZDogXCJNMTQ2OS4yNSs2MzEuNDQyQzE0NTkuNTUrMjc4LjA0MisxMTgzLjA1KzEzNS40NDIrODI2LjY1KzEzNS40NDJMMTM1LjQ1KzEzNS40NDJMMTM1LjQ1KzEwMDRDMTM1LjQ1KzEwMDQrMTM1LjQyNysxMjU1LjIxKzM1NS42MjYrMTI1NS4yMUM1NzUuODI1KzEyNTUuMjErNTc1Ljg0OCsxMDA0KzU3NS44NDgrMTAwNEw1NzcuNDUrNDkwLjQ0Mkw4MzQuNDUrNDkwLjQ0MkMxMTA4Ljk1KzQ5MC40NDIrMTEwOC45NSs4MzUuMzQyKzgzNC40NSs4MzUuMzQyTDY2NC42NSs4MzUuMzQyTDY2NC42NSsxMTY0Ljg0TDgzNC40NSsxMTY0Ljg0QzkyMy45MzIrMTE2NC44NCs5ODQuMjQ0KzEyMDEuNDgrMTAxNS4zOSsxMjUwLjg3QzEwNzkuNzgrMTM1MysxMDE5LjQ3KzE1MDkuNjQrODM0LjQ1KzE1MDkuNjRMMTM1LjQ1KzE1MDkuNjRMMTM1LjQ1KzE4NjQuNTRMODI2LjY1KzE4NjQuNTRDMTE4Mi45NSsxODY0LjU0KzE0NTkuNDUrMTcyMS45NCsxNDY5LjI1KzEzNjguNTRDMTQ2OS4yNSsxMjA1Ljk0KzE0MjQuNzUrMTA4NC40NCsxMzQ2LjM1Kzk5OS45NDJDMTQyNC43NSs5MTUuNTQyKzE0NjkuMjUrNzk0LjA0MisxNDY5LjI1KzYzMS40NDJaXCIsIGZpbGw6IFwiI0ZGRkZGRlwiLCBvcGFjaXR5OiBcIjFcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19DaGVja2JveCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJsaVwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveCBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94LCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1pbm5lciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveElubmVyKVswXS5jaGVja2JveElubmVyfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94RWxlbWVudCwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsICF0aGlzLnN0YXRlLmNoZWNrZWQpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgQXJyb3cgZnJvbSBcIi4uL2ljb25zL2Rvd25hcnJvd1wiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge29wZW46IGZhbHNlLCB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLm9wdGlvbnNbMF0udmFsdWV9O1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd24gPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd01lbnUgPSB0aGlzLnNob3dNZW51LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oaWRlTWVudSA9IHRoaXMuaGlkZU1lbnUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TWVudShldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogdHJ1ZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVNZW51KCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IGZhbHNlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZX0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG8gPT4gby52YWx1ZSA9PSB0aGlzLnN0YXRlLnZhbHVlKTt9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMubWFwKG9wdCA9PiBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0LW9wdGlvbiR7c2VsZWN0ZWQudmFsdWUgPT0gb3B0LnZhbHVlID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCJ9YH0gb25DbGljaz17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMsIG9wdC52YWx1ZSl9PntvcHQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMucHJvcHMuc3R5bGUgPT0gXCJ0cmFuc3BhcmVudFwiID8gXCIgYmQtc2VsZWN0LXRyYW5zcGFyZW50XCIgOiBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuc3RhdGUub3BlbiA/IFwiIG1lbnUtb3BlblwiIDogXCJcIjtcclxuICAgICAgICByZXR1cm4gIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwXCI+XHJcbi8vIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPnt0aGlzLnByb3BzLmxhYmVsfTwvbGFiZWw+XHJcbi8vIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4vLyAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtY29udHJvbHNcIj5cclxuLy8gICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4vLyAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4vLyAgICAgPC9kaXY+XHJcbi8vIDwvZGl2PlxyXG4vLyB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuLy8gPC9kaXY+OyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTZWFyY2hJY29uIGZyb20gXCIuLi9pY29ucy9zZWFyY2hcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VhcmNoLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9IG9uS2V5RG93bj17dGhpcy5wcm9wcy5vbktleURvd259IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiYmQtc2VhcmNoXCIgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9IG1heExlbmd0aD1cIjUwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8U2VhcmNoSWNvbiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge2NoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH07XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlN3aXRjaCBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gdmFsdWU9e3RoaXMuc3RhdGUuY2hlY2tlZH0gLz5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ29udGVudENvbHVtbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBkaXNwbGF5TmFtZSgpIHtyZXR1cm4gXCJDb250ZW50Q29sdW1uXCI7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICAvL2xldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF1cclxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLnByb3BzLnRpdGxlID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCB0aGlzLnByb3BzLnRpdGxlKSA6IG51bGxcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgIF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW4gKyBcIiBcIitjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW5EZWZhdWx0K1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIiwgc3R5bGU6IHtwYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIn19LFxyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcclxuaW1wb3J0IFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCBmcm9tIFwiLi9jc3NFZGl0b3JEZXRhY2hlZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYucHJvcHMubGluZXMgPSAwO1xyXG4gICAgICAgIHNlbGYuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgc2VsZi5hdHRhY2ggPSBzZWxmLmF0dGFjaC5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuZGV0YWNoZWRFZGl0b3IgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0Nzc0VkaXRvckRldGFjaGVkLCB7YXR0YWNoOiBzZWxmLmF0dGFjaH0pO1xyXG4gICAgICAgIHNlbGYub25DbGljayA9IHNlbGYub25DbGljay5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYudXBkYXRlQ3NzID0gc2VsZi51cGRhdGVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnNhdmVDc3MgPSBzZWxmLnNhdmVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLmRldGFjaCA9IHNlbGYuZGV0YWNoLmJpbmQoc2VsZik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiB0aGlzLnByb3BzLmRldGFjaGVkIHx8IEJEVjIuZWRpdG9yRGV0YWNoZWRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlTGluZUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3JcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAocHJldlN0YXRlLmRldGFjaGVkICYmICFzZWxmLnN0YXRlLmRldGFjaGVkKSB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLmRldGFjaGVkUm9vdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvZGVNaXJyb3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY3NzXCIsXHJcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXHJcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXHJcbiAgICAgICAgICAgIHNjcm9sbGJhclN0eWxlOiBcInNpbXBsZVwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3NzKCkge1xyXG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIGxldCBjY3NzID0gXCJcIjtcclxuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgY2NzcyA9IGF0b2IoX2Njc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2NzcztcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaW5lQ291bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gdGhpcy5yZWZzLmVkaXRvci52YWx1ZS5zcGxpdChcIlxcblwiKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZzLmxpbmVzLnRleHRDb250ZW50ID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobGluZUNvdW50KSwgKF8sIGkpID0+IGkgKyAxKS5qb2luKFwiLlxcblwiKSArIFwiLlwiO1xyXG4gICAgICAgIHRoaXMucHJvcHMubGluZXMgPSBsaW5lQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBjb25zdCB7ZGV0YWNoZWR9ID0gc2VsZi5zdGF0ZTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2lkOiBcImVkaXRvci1kZXRhY2hlZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJoM1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJFZGl0b3IgRGV0YWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgIWRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiZGV0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gZGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiaGVscC10ZXh0XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVzcyBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiY3RybFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiK1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCIsXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgd2l0aCB0aGUgZWRpdG9yIGZvY3VzZWQgdG8gYWNjZXNzIHRoZSBlZGl0b3IncyBzZXR0aW5ncy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soYXJnKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc3dpdGNoIChhcmcpIHtcclxuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImRldGFjaFwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDc3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIGJ0b2EodGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0YWNoKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGRyb290ID0gc2VsZi5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgaWYgKCFkcm9vdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBJTkpFQ1QgUk9PVDogLmFwcFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzZWxmLmRldGFjaGVkRWRpdG9yLCBkcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRldGFjaGVkUm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3REZXRhY2hlZFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdERldGFjaGVkUm9vdCgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHAuc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0YWNoKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYub25DbGljayA9IHNlbGYub25DbGljay5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYudXBkYXRlQ3NzID0gc2VsZi51cGRhdGVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnNhdmVDc3MgPSBzZWxmLnNhdmVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLm9uQ2hhbmdlID0gc2VsZi5vbkNoYW5nZS5iaW5kKHNlbGYpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZUNsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xyXG4gICAgICAgIEJEVjIuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxyXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNzcygpIHtcclxuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcclxuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjc3MgPSBhdG9iKF9jY3NzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHAuc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmQtZGV0YWNoZWQtY3NzLWVkaXRvclwiLCBpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWVkaXRvclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtaW5uZXJwYW5lXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHNlbGYub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJhdHRhY2hcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBhdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYXR0YWNoXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2VkaXRvci1kZXRhY2hlZFwiKSkgc2VsZi5wcm9wcy5hdHRhY2goKTtcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLnJvb3QpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yb290LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNzcygpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgYnRvYSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVycm9yQm91bmRhcnkgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtoYXNFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJyZWFjdC1lcnJvclwifSwgXCJDb21wb25lbnQgRXJyb3JcIik7ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxldGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjEyIDkuMjlMMTIgMTMuMTdsMy44OC0zLjg4Yy4zOS0uMzkgMS4wMi0uMzkgMS40MSAwIC4zOS4zOS4zOSAxLjAyIDAgMS40MWwtNC41OSA0LjU5Yy0uMzkuMzktMS4wMi4zOS0xLjQxIDBMNi43IDEwLjdjLS4zOS0uMzktLjM5LTEuMDIgMC0xLjQxLjM5LS4zOCAxLjAzLS4zOSAxLjQyIDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3pcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsInsvKiA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIndoaXRlXCIgd2lkdGg9XCIxOHB4XCIgaGVpZ2h0PVwiMThweFwiPlxyXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuPC9zdmc+ICovfVxyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxOHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmdpblRvcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlKW1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXVxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpblRvcDYwfT48L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4uL21vZHVsZXMvQ3VzdG9tUmljaFByZXNlbmNlXCJcclxuaW1wb3J0IHRpbWVzdGFtcFJlbmRlciBmcm9tIFwiLi90aW1lc3RhbXBSZW5kZXJcIlxyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuLi9tb2R1bGVzL2Rpc3RhbnRcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmxldCBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikgfHwgZGVmYXVsdFJQQyxcclxuICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cyA9IG5ldyBTZXQoKVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVdoZW5GZXRjaGVkKGNvbXApe1xyXG4gICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmFkZChjb21wKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0lucHV0VGV4dH0gc2V0dGluZyBcclxuICAgICAqL1xyXG4gICAgb25DaGFuZ2Uoc2V0dGluZywgdmFsdWUpe1xyXG4gICAgICAgIGxldCBkZWZhdWx0U2V0dGluZyA9IFJQQ1Byb3BzLmZpbmQoZSA9PiBlLmlkID09PSBzZXR0aW5nLnByb3BzLmlkKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgdGhpcy5zdGF0ZS5kYXRhLCB7XHJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdFNldHRpbmcuaWRdOiAhIXZhbHVlID8gdmFsdWUgOiBudWxsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuc3RhdGUuYXNzZXRzXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZihzZXR0aW5nLnByb3BzLmlkID09PSBcImFwcGxpY2F0aW9uX2lkXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xyXG4gICAgICAgIHRoaXMucHJldmlldy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLnNldChzZXR0aW5nc1JQQylcclxuICAgIH1cclxuXHJcbiAgICBmZXRjaEFzc2V0cygpe1xyXG4gICAgICAgIGlmKHRoaXMuaXNmZXRjaGluZyA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIGxldCBhcHAgPSB0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWRcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQgIT09IGFwcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSB0cnVlXHJcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLmZldGNoQXNzZXRzKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZClcclxuICAgICAgICAudGhlbihhc3NldHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogT2JqZWN0LmtleXMoYXNzZXRzKS5tYXAoayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2V0ID0gYXNzZXRzW2tdXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFzc2V0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhc3NldC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBhc3NldC50eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQcmV2aWV3KGRhdGEpe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgfHwgKFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NHcm91cCB0aXRsZT1cIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiIHNldHRpbmdzPXt0aGlzLnByb3BzLnNldHRpbmdzfSBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0vPixcclxuICAgICAgICAgICAgPE1hcmdpblRvcCAvPixcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJSaWNoUHJlc2VuY2VcIi8+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+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBScGNQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzID0ge30pe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogXCJwcm9maWxlXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJzID0gW11cclxuXHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXR0aW5ncy5wcmV2aWV3ID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVRhYih0YWIpe1xyXG4gICAgICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmVcclxuICAgICAgICBpZihhbmNpZW50VGFiID09PSB0YWIucHJvcHMuaWQpcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBlLnNldEFjdGl2ZShmYWxzZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSlcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiB0YWIucHJvcHMuaWRcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJsYy10YWJXcmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFibmF2XCIgc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJGdWxsIFByb2ZpbGVcIiBpZD1cInByb2ZpbGVcIi8+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiVXNlciBQb3BvdXRcIiBpZD1cInBvcG91dFwiLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxQcmVzZW5jZUVycm9yQ2F0Y2hlciBwcmV2aWV3PXt0aGlzLnByZXZpZXd9IHN0YXRlPXt0aGlzLnN0YXRlLnJwY30gcHJvcHM9e3twcmV2aWV3OiB0aGlzfX0ga2V5PXt0aGlzLnN0YXRlLmFjdGl2ZX0gLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9ICAgXHJcblxyXG4gICAgaXNBY3RpdmUodGFiKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hY3RpdmUgPT09IHRhYlxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcmV2aWV3KCl7XHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUgPT09IFwicHJvZmlsZVwiKXJldHVybiBQcm9maWxlXHJcbiAgICAgICAgcmV0dXJuIFBvcG91dFxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IHByb3BzLnByZXZpZXcuaXNBY3RpdmUocHJvcHMuaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzLnByZXZpZXcudGFicy5wdXNoKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlKGlzQWN0aXZlKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiAhIWlzQWN0aXZlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gYGxjLW5hdkl0ZW1gXHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUpe1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtQWN0aXZlYFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5wcmV2aWV3LmNoYW5nZVRhYih0aGlzKVxyXG4gICAgICAgIH19PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBlbXB0eUNsYXNzZXNcclxuY2xhc3MgUHJlc2VuY2VFcnJvckNhdGNoZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goZXJyLCBlcnJJbmZvKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJySW5mbylcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZXJyb3I6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZXJyb3Ipe1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3ID0gbmV3IHRoaXMucHJvcHMucHJldmlldyh0aGlzLnByb3BzLnByb3BzKVxyXG4gICAgICAgICAgICAgICAgcHJldmlldy5zZXRTdGF0ZSh0aGlzLnByb3BzLnN0YXRlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpZXcucmVuZGVyKClcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZXJyb3IgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXIoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGVtcHR5Q2xhc3NlcyA9IGVtcHR5Q2xhc3NlcyB8fCBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmVtcHR5U3RhdGVJbWFnZSlcclxuICAgICAgICAgICAgaWYoIWVtcHR5Q2xhc3Nlcyl7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLiBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLlwiKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBcIjIwcHhcIlxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcclxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSW1hZ2V9IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCIyMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9fT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSGVhZGVyfT5BbiBlcnJvciBvY2N1cmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZVN1YnRleHR9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLiBKb2luIG91ciDCrVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e2Ake0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QkRWMi5hbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PXswfSBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLmpvaW5MQygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBzZXJ2ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDCrSBmb3IgaGVscC5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcG9wb3V0TW9kdWxlc1xyXG5sZXQgVXNlclBvcG91dENvbXBvbmVudFxyXG5sZXQgUG9wb3V0UHJvcHNcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZXMgfHwgKHBvcG91dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRmx1eENvbnRhaW5lcihGb3J3YXJkUmVmKFN1YnNjcmliZUd1aWxkTWVtYmVyc0NvbnRhaW5lcihVc2VyUG9wb3V0KSkpXCIpLFxyXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgVXNlclBvcG91dCxcclxuICAgICAgICAgICAgdXNlck1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpe1xyXG4gICAgICAgICAgICBpZighVXNlclBvcG91dCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQb3BvdXQgY29tcG9uZW50LmApXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjEgPSBuZXcgVXNlclBvcG91dC5kZWZhdWx0KHt1c2VySWQ6IHVzZXIuaWQsIGd1aWxkSWQ6IG51bGwsIGNoYW5uZWxJZDogbnVsbCwgZGlzYWJsZVVzZXJQcm9maWxlTGluazogdHJ1ZX0pLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFBvcG91dFByb3BzID0gcmVuZGVyMS5wcm9wc1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIyID0gcmVuZGVyMS50eXBlLnJlbmRlcihQb3BvdXRQcm9wcywgbnVsbClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IG5ldyByZW5kZXIyLnR5cGUocmVuZGVyMi5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgVXNlclBvcG91dENvbXBvbmVudCA9IHJlbmRlcjMudHlwZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighVXNlclBvcG91dENvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQb3BvdXRDb21wb25lbnQgY29tcG9uZW50LmApXHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgICAgICB9KS5jYWxsKHtcclxuICAgICAgICAgICAgZ2FtZTogZGF0YVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIFBvcG91dFByb3BzID0gbmV3IFVzZXJQb3BvdXQuZGVmYXVsdCh7dXNlcklkOiB1c2VyLmlkLCBndWlsZElkOiBudWxsLCBjaGFubmVsSWQ6IG51bGwsIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWV9KS5yZW5kZXIoKS5wcm9wc1xyXG4gICAgICAgIGNvbnN0IHBvcG91dCA9IG5ldyBVc2VyUG9wb3V0Q29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFBvcG91dFByb3BzLCB7XHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxyXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcclxuXHJcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBzdG9wIHByb3BhZ2F0aW9uIHNoaXQuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gPGRpdiB7Li4ud2luZG93LkxpZ2h0Y29yZC5BcGkuXy5leGNsdWRlUHJvcGVydGllcyhwb3BvdXQucHJvcHMsIFtcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCJdKX0gLz5cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICB7Y29udGFpbmVyfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcHJvZmlsZU1vZHVsZXNcclxubGV0IFVzZXJQcm9maWxlQ29tcG9uZW50XHJcbmxldCBQcm9maWxlUHJvcHNcclxubGV0IGNvbm5lY3RlZFByb2ZpbGVTdG9yZVxyXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHByb2ZpbGVNb2R1bGVzIHx8IChwcm9maWxlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJVc2VyUHJvZmlsZVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlLFxyXG4gICAgICAgICAgICB1c2VyTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBpZighVXNlclByb2ZpbGVDb21wb25lbnQpe1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQcm9maWxlLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlclxyXG4gICAgICAgICAgICB9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBjb25uZWN0ZWRQcm9maWxlU3RvcmUgPSByZW5kZXIxLnR5cGVcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IG5ldyByZW5kZXIxLnR5cGUocmVuZGVyMS5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IHJlbmRlcjIudHlwZS5yZW5kZXIocmVuZGVyMi5wcm9wcywgbnVsbClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyNCA9IG5ldyByZW5kZXIzLnR5cGUocmVuZGVyMy5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgVXNlclByb2ZpbGVDb21wb25lbnQgPSByZW5kZXI0LnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCB0aGUgVXNlclByb2ZpbGVDb21wb25lbnQgY29tcG9uZW50LmApXHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgICAgICB9KS5jYWxsKHtcclxuICAgICAgICAgICAgZ2FtZTogZGF0YVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIFByb2ZpbGVQcm9wcyA9IG5ldyBjb25uZWN0ZWRQcm9maWxlU3RvcmUoe1xyXG4gICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge31cclxuICAgICAgICB9KS5yZW5kZXIoKS5wcm9wc1xyXG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBuZXcgVXNlclByb2ZpbGVDb21wb25lbnQoT2JqZWN0LmFzc2lnbih7fSwgUHJvZmlsZVByb3BzLCB7XHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxyXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cocHJvZmlsZSlcclxuICAgICAgICBwcm9maWxlLnByb3BzLnN0eWxlID0ge1xyXG4gICAgICAgICAgICB3aWR0aDogXCJhdXRvXCJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYiBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICB7cHJvZmlsZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxuXHJcblxyXG4vKlxyXG5sZXQgcG9wb3V0TW9kdWxlXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7IC8vIFRPRE86IFByb2JhYmx5IHVzZSBpbnRlcm5hbCBDb21wb25lbnRzIGluc3RlYWQgb2YgbWFraW5nIGl0IGZyb20gc2NyYXRjaC5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZSB8fCAocG9wb3V0TW9kdWxlID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYm90KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYWN0aXZpdHlVc2VyUG9wb3V0KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubXV0ZWQgJiYgZS53cmFwcGVyICYmIGUuYmFzZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRoZW1lR2hvc3RIYWlybGluZUNoYW5uZWxzKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wcm8gJiYgZS5pbmxpbmUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMpWzBdLmRlZmF1bHQuTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm9vdE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUxLFxyXG4gICAgICAgICAgICBzdHlsaW5nTW9kdWxlMSxcclxuICAgICAgICAgICAgbmFtZVRhZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5TW9kdWxlMSxcclxuICAgICAgICAgICAgdGV4dE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUxLFxyXG4gICAgICAgICAgICBzY3JvbGxlck1vZHVsZTEsXHJcbiAgICAgICAgICAgIG5vdGVNb2R1bGUxLFxyXG4gICAgICAgICAgICBwcm90aXBNb2R1bGUxLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICB1c2VyTW9kdWxlMVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUxLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UlBDLCB0aGlzLnByb3BzLnByZXZpZXcucHJvcHMuc2V0dGluZ3Muc3RhdGUuZGF0YSlcclxuICAgICAgICB0aW1lc3RhbXBDbGFzcyA9IHRpbWVzdGFtcENsYXNzIHx8IGFjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXBcclxuXHJcbiAgICAgICAgbGV0IGltYWdlcyA9ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCFkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXVxyXG4gICAgICAgICAgICBpZihkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKXtcclxuICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKDxpbWcgYWx0PVwiXCIgc3JjPXtgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5sYXJnZVwiXX0ucG5nYH0gY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZUltYWdlVXNlclBvcG91dH0gJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdID8gYWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlTWFza1VzZXJQb3BvdXQgOiBcIlwifWB9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMuc21hbGxcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdfS5wbmdgfSBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFzc2V0c1NtYWxsSW1hZ2VVc2VyUG9wb3V0fSAvPilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighaW1hZ2VzLmxlbmd0aClyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFzc2V0c30+XHJcbiAgICAgICAgICAgICAgICB7aW1hZ2VzfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9KSgpXHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEudXNlclBvcG91dH0gcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmhlYWRlclBsYXlpbmd9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeUNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnbkNlbnRlcn0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEuaGVhZGVyVG9wfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmF2YXRhcldyYXBwZXJOb3JtYWx9IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2F2YXRhck1vZHVsZTF9IHJvbGU9XCJpbWdcIiBzdHlsZT17e3dpZHRoOiBcIjgwcHhcIiwgaGVpZ2h0OiBcIjgwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI5MlwiIGhlaWdodD1cIjgwXCIgdmlld0JveD1cIjAgMCA5MiA4MFwiIGNsYXNzPXtgJHthdmF0YXJNb2R1bGUxLm1hc2t9ICR7YXZhdGFyTW9kdWxlMS5zdmd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e2F2YXRhclVSTH0gYWx0PVwiIFwiIGNsYXNzPXthdmF0YXJNb2R1bGUxLmF2YXRhcn0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhdHVzIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgY2xhc3M9e3Jvb3RNb2R1bGUxLmF2YXRhckhpbnR9IHZpZXdCb3g9XCIwIDAgODAgODBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgbWFzaz1cInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC04MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFySGludElubmVyfT57TWVzc2FnZXMuVklFV19QUk9GSUxFfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyVGV4dH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLmhvcml6b250YWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmhlYWRlclRhZ05vTmlja25hbWV9ICR7bmFtZVRhZ01vZHVsZTEubmFtZVRhZ31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2Ake25hbWVUYWdNb2R1bGUxLnVzZXJuYW1lfSAke3Jvb3RNb2R1bGUxLmhlYWRlclRhZ1VzZXJuYW1lTm9OaWNrbmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiN7dXNlci5kaXNjcmltaW5hdG9yfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlVc2VyUG9wb3V0fSAke3Jvb3RNb2R1bGUxLmFjdGl2aXR5fWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5oZWFkZXJUZXh0Tm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTEyfWB9PntNZXNzYWdlcy5VU0VSX0FDVElWSVRZX0hFQURFUl9QTEFZSU5HfTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5ib2R5Tm9ybWFsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtpbWFnZXMgPyBhY3Rpdml0eU1vZHVsZTEuY29udGVudEltYWdlc1VzZXJQb3BvdXQgOiBhY3Rpdml0eU1vZHVsZTEuY29udGVudE5vSW1hZ2VzVXNlclBvcG91dH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEubmFtZU5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxNH1gfSB0aXRsZT17ZGF0YS5uYW1lfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlOYW1lfT57ZGF0YS5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHRpdGxlPXtkYXRhLnRpdGxlfSBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmRldGFpbHN9PntkYXRhLmRldGFpbHN9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEuc3RhdGUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5zdGF0ZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVDb21wb25lbnQgPSB0aW1lc3RhbXBSZW5kZXIoVGltZXN0YW1wLCBNZXNzYWdlcylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudCh0aW1lQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtyb290TW9kdWxlMS5ib2R5fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyfSAke3Jvb3RNb2R1bGUxLmJvZHlJbm5lcn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYm9keVRpdGxlfT57TWVzc2FnZXMuTk9URX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7bm90ZU1vZHVsZTEubm90ZX0gJHtyb290TW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIGNsYXNzPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBzdHlsZT17e2hlaWdodDogXCIzNnB4XCJ9fSBkaXNhYmxlZD48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuZm9vdGVyfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5wcm90aXB9ICR7cHJvdGlwTW9kdWxlMS5pbmxpbmV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7cHJvdGlwTW9kdWxlMS5wcm99ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0gc3R5bGU9e3tjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwifX0+e01lc3NhZ2VzLlBJTk5FRF9NRVNTQUdFU19QUk9fVElQfTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2NvbG9yTW9kdWxlMS5jb2xvclN0YW5kYXJkfSAke3NpemVNb2R1bGUxLnNpemUxNH0gJHtwcm90aXBNb2R1bGUxLnRpcH1gfT57TWVzc2FnZXMuQ09OVEVYVF9NRU5VX0hJTlR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgU3RhdHVzTW9kdWxlc1xyXG5jbGFzcyBTdGF0dXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gU3RhdHVzTW9kdWxlcyB8fCAoU3RhdHVzTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UHJlc2VuY2UpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBnZXRQcmVzZW5jZSxcclxuICAgICAgICAgICAgcG9pbnRlckV2ZW50c1xyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICBsZXQgc3RhdHVzID0gZ2V0UHJlc2VuY2UuZGVmYXVsdC5nZXRQcmVzZW5jZSgpLnN0YXR1c1xyXG4gICAgICAgIGlmKHN0YXR1cyA9PT0gXCJpbnZpc2libGVcIilzdGF0dXMgPSBcIm9mZmxpbmVcIlxyXG4gICAgICAgIHJldHVybiA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB4PVwiNjBcIiB5PVwiNjBcIiBmaWxsPVwiI2ZmZmZmZlwiIG1hc2s9e2B1cmwoI3N2Zy1tYXNrLXN0YXR1cy0ke3N0YXR1c30pYH0gY2xhc3NOYW1lPXtwb2ludGVyRXZlbnRzfT48L3JlY3Q+XHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCB0aW1lc3RhbXBDbGFzcyA9IFwiXCJcclxuXHJcbmxldCBQcm9maWxlTW9kdWxlc1xyXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHsgLy8gVE9ETzogUHJvYmFibHkgdXNlIGludGVybmFsIENvbXBvbmVudHMgaW5zdGVhZCBvZiBtYWtpbmcgaXQgZnJvbSBzY3JhdGNoLlxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gUHJvZmlsZU1vZHVsZXMgfHwgKFByb2ZpbGVNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ib3QpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hY3Rpdml0eVByb2ZpbGUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tdXRlZCAmJiBlLndyYXBwZXIgJiYgZS5iYXNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXJGYWRlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubm90ZSAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcylbMF0uZGVmYXVsdC5NZXNzYWdlc1xyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHVzZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgbGV0IGF2YXRhclVSTCA9IHVzZXIuYXZhdGFyVVJMXHJcbiAgICAgICAgaWYodXNlci5hdmF0YXIgJiYgdXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwoXCJnaWZcIilcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgYXZhdGFyTW9kdWxlMSxcclxuICAgICAgICAgICAgbmFtZVRhZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5TW9kdWxlMSxcclxuICAgICAgICAgICAgdGV4dE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUxLFxyXG4gICAgICAgICAgICBzY3JvbGxlck1vZHVsZTEsXHJcbiAgICAgICAgICAgIG5vdGVNb2R1bGUxLFxyXG4gICAgICAgICAgICBNZXNzYWdlc1xyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UlBDLCB0aGlzLnByb3BzLnByZXZpZXcucHJvcHMuc2V0dGluZ3Muc3RhdGUuZGF0YSlcclxuICAgICAgICB0aW1lc3RhbXBDbGFzcyA9IHRpbWVzdGFtcENsYXNzIHx8IGFjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXBcclxuXHJcbiAgICAgICAgbGV0IGltYWdlcyA9ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCFkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXVxyXG4gICAgICAgICAgICBpZihkYXRhW1wiYXNzZXRzLmxhcmdlXCJdKXtcclxuICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKDxpbWcgYWx0PVwiXCIgc3JjPXtgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy8ke2RhdGEuYXBwbGljYXRpb25faWR9LyR7ZGF0YVtcImFzc2V0cy5sYXJnZVwiXX0ucG5nYH0gY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hc3NldHNMYXJnZUltYWdlUHJvZmlsZX0gJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdID8gYWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlTWFza1Byb2ZpbGUgOiBcIlwifWB9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMuc21hbGxcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLnNtYWxsXCJdfS5wbmdgfSBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFzc2V0c1NtYWxsSW1hZ2VQcm9maWxlfSAvPilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighaW1hZ2VzLmxlbmd0aClyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFzc2V0c30+XHJcbiAgICAgICAgICAgICAgICB7aW1hZ2VzfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9KSgpXHJcblxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke3N0eWxpbmdNb2R1bGUxLnZlcnRpY2FsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnJvb3R9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS50b3BTZWN0aW9uUGxheWluZ30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9e3Jvb3RNb2R1bGUxLmhlYWRlcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5hdmF0YXJ9ICR7YXZhdGFyTW9kdWxlMS53cmFwcGVyfWB9IHJvbGU9XCJpbWdcIiBzdHlsZT17e3dpZHRoOiBcIjgwcHhcIiwgaGVpZ2h0OiBcIjgwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI5MlwiIGhlaWdodD1cIjgwXCIgdmlld0JveD1cIjAgMCA5MiA4MFwiIGNsYXNzPXtgJHthdmF0YXJNb2R1bGUxLm1hc2t9ICR7YXZhdGFyTW9kdWxlMS5zdmd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e2F2YXRhclVSTH0gYWx0PVwiIFwiIGNsYXNzPXthdmF0YXJNb2R1bGUxLmF2YXRhcn0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhdHVzIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmhlYWRlckluZm99YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubmFtZVRhZ30gJHtuYW1lVGFnTW9kdWxlMS5uYW1lVGFnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7cm9vdE1vZHVsZTEudXNlcm5hbWV9ICR7cm9vdE1vZHVsZTEudXNlcm5hbWV9YH0+e3VzZXIudXNlcm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17cm9vdE1vZHVsZTEuZGlzY3JpbWluYXRvcn0+I3t1c2VyLmRpc2NyaW1pbmF0b3J9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25TdHJldGNofSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5wcm9maWxlQmFkZ2VzfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCYWRnZXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyRmlsbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuYWN0aXZpdHlQcm9maWxlfSAke3Jvb3RNb2R1bGUxLmFjdGl2aXR5fWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmhlYWRlclRleHROb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtNZXNzYWdlcy5VU0VSX0FDVElWSVRZX0hFQURFUl9QTEFZSU5HfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWx9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW1hZ2VzfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtpbWFnZXMgPyBhY3Rpdml0eU1vZHVsZTEuY29udGVudEltYWdlc1Byb2ZpbGUgOiBhY3Rpdml0eU1vZHVsZTEuY29udGVudE5vSW1hZ2VzVXNlclBvcG91dH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLm5hbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEubmFtZU5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxNH1gfSB0aXRsZT17ZGF0YS5uYW1lfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eU5hbWV9PntkYXRhLm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEuZGV0YWlscylyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IHRpdGxlPXtkYXRhLnRpdGxlfSBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmRldGFpbHN9PntkYXRhLmRldGFpbHN9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEuc3RhdGUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnN0YXRlfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9e2RhdGEuc3RhdGV9PntkYXRhLnN0YXRlfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YVtcInRpbWVzdGFtcHMuc3RhcnRcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZUNvbXBvbmVudCA9IHRpbWVzdGFtcFJlbmRlcihUaW1lc3RhbXAsIE1lc3NhZ2VzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS50aW1lc3RhbXB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudCh0aW1lQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHRcdFx0XHQgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYm9keX0+XHJcblx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlfWB9PlxyXG5cdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyfT5cclxuXHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEudXNlckluZm9TZWN0aW9ufT5cclxuXHRcdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb25IZWFkZXJ9PntNZXNzYWdlcy5OT1RFfTwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLm5vdGV9ICR7bm90ZU1vZHVsZTEubm90ZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBwbGFjZWhvbGRlcj17TWVzc2FnZXMuTk9URV9QTEFDRUhPTERFUn0gbWF4bGVuZ3RoPVwiMjU2XCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBzdHlsZT17e2hlaWdodDogXCI0MHB4XCJ9fSBkaXNhYmxlZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29ubmVjdGVkQWNjb3VudHMgLz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBDb25uZWN0ZWRBY2NvdW50cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgYWNjb3VudHMgPSBbXVxyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IEFjY291bnRNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0QWNjb3VudHMpWzBdLmRlZmF1bHRcclxuXHJcbiAgICAgICAgbGV0IGFjY3MgPSBBY2NvdW50TW9kdWxlMS5nZXRBY2NvdW50cygpLmZpbHRlcihlID0+IGUudmlzaWJpbGl0eSA9PT0gMSlcclxuICAgICAgICBmb3IobGV0IGFjYyBvZiBhY2NzKXtcclxuICAgICAgICAgICAgYWNjb3VudHMucHVzaCg8Q29ubmVjdGVkQWNjb3VudCBhY2M9e2FjY30gLz4pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihhY2NvdW50cy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudHN9PlxyXG4gICAgICAgICAgICAgICAgICAgIHthY2NvdW50c31cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxvd2VyTW9kdWxlMSxcclxuICAgICAgICAgICAgYW5jaG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgU29jaWFsQ29uc3RhbnRzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZmxleCAmJiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVydGljYWwgJiYgZS5hbGlnblN0cmV0Y2ggJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZEJ0bilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuYW5jaG9yKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0ICYmIGUuZGVmYXVsdC5tYXApWzBdLmRlZmF1bHRcclxuICAgICAgICBdXHJcbiAgICAgICAgbGV0IGFjYyA9IHRoaXMucHJvcHMuYWNjXHJcbiAgICAgICAgbGV0IGNvbnN0YW50c1NvY2lhbCA9IFNvY2lhbENvbnN0YW50cy5nZXQoYWNjLnR5cGUpXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHtmbGV4TW9kdWxlMS5mbGV4fSAke2ZsZXhNb2R1bGUxLmhvcml6b250YWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50fWB9IHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgIDxpbWcgYWx0PXtgTG9nbyAke2NvbnN0YW50c1NvY2lhbC5uYW1lfWB9IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50SWNvbn0gc3JjPXtjb25zdGFudHNTb2NpYWwuaWNvbi5jb2xvciB8fCBjb25zdGFudHNTb2NpYWwuaWNvbi53aGl0ZSB8fCBjb25zdGFudHNTb2NpYWwuaWNvbi5ncmV5fSAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50TmFtZUlubmVyfT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lfT57YWNjLm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7YWNjLnZlcmlmaWVkID8gKDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2Zsb3dlck1vZHVsZTEuZmxvd2VyU3RhckNvbnRhaW5lcn0gJHtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50VmVyaWZpZWRJY29ufWB9IHN0eWxlPXt7d2lkdGg6IFwiMTZweFwiLCBoZWlnaHQ6IFwiMTZweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9e2Zsb3dlck1vZHVsZTEuZmxvd2VyU3Rhcn0gd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNS4yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzRmNTQ1Y1wiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Zsb3dlck1vZHVsZTEuY2hpbGRDb250YWluZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuNCwxMS4xNyw0LDguNjIsNSw3LjI2bDIsMS41M0wxMC42NCw0bDEuMzYsMVpcIiBmaWxsPVwiI2ZmZmZmZlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPXtgJHthbmNob3JNb2R1bGUxLmFuY2hvcn0gJHthbmNob3JNb2R1bGUxLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YH0gcmVsPVwibm9yZWZlcnJlciBub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRPcGVuSWNvbn0gd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTEwIDVWM0g1LjM3NUM0LjA2NTE5IDMgMyA0LjA2NTE5IDMgNS4zNzVWMTguNjI1QzMgMTkuOTM2IDQuMDY1MTkgMjEgNS4zNzUgMjFIMTguNjI1QzE5LjkzNiAyMSAyMSAxOS45MzYgMjEgMTguNjI1VjE0SDE5VjE5SDVWNUgxMFpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMjEgMi45OTkwMkgxNFY0Ljk5OTAySDE3LjU4Nkw5LjI5Mjk3IDEzLjI5MkwxMC43MDcgMTQuNzA2TDE5IDYuNDEzMDJWOS45OTkwMkgyMVYyLjk5OTAyWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBCYWRnZXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHVzZXIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXVxyXG4gICAgICAgIGxldCBVc2VyRmxhZ3MgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5Vc2VyRmxhZ3MpWzBdLlVzZXJGbGFnc1xyXG4gICAgICAgIGxldCBiYWRnZXMgPSBbXVxyXG4gICAgICAgIGxldCBzZXJpYWxpemVkID0gW11cclxuXHJcbiAgICAgICAgZm9yKGxldCBmbGFnTmFtZSBpbiBVc2VyRmxhZ3Mpe1xyXG4gICAgICAgICAgICBpZih1c2VyLmhhc0ZsYWcoVXNlckZsYWdzW2ZsYWdOYW1lXSkpc2VyaWFsaXplZC5wdXNoKGZsYWdOYW1lKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGxldCBmbGFnTmFtZSBvZiBzZXJpYWxpemVkKXtcclxuICAgICAgICAgICAgbGV0IHNlYXJjaGFibGUgPSBgcHJvZmlsZUJhZGdlJHtmbGFnTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywgXCIgXCIpLnNwbGl0KFwiIFwiKS5tYXAoZSA9PiBlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSkuam9pbihcIlwiKX1gXHJcbiAgICAgICAgICAgIHNlYXJjaGFibGUgPSBzZWFyY2hhYmxlLnJlcGxhY2UoXCJIeXBlc3F1YWRPbmxpbmVcIiwgXCJIeXBlU3F1YWRPbmxpbmVcIilcclxuICAgICAgICAgICAgaWYoIXJvb3RNb2R1bGVbc2VhcmNoYWJsZV0pY29udGludWVcclxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goPEJhZGdlIG5hbWU9e3NlYXJjaGFibGV9Lz4pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24pe1xyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT1cInByb2ZpbGVCYWRnZVByZW1pdW1cIiAvPilcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGJhZGdlc1xyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZVdyYXBwZXJ9PlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5wcm9maWxlQmFkZ2V9ICR7cm9vdE1vZHVsZTFbdGhpcy5wcm9wcy5uYW1lXX1gfT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBUaW1lc3RhbXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aW1lc3RhbXBDbGFzc30+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLm1lc3NhZ2V9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbn0qLyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uLy4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19MYXllciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMua2V5dXBMaXN0ZW5lciA9IHRoaXMua2V5dXBMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGtleXVwTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAyNykge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5yZWZzLnJvb3QucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5rZXl1cExpc3RlbmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGhpc05vZGUgPSBET00ucXVlcnkoYCMke3RoaXMucHJvcHMuaWR9YCk7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHsxLjEgLSAwLjEgKiBwcm9ncmVzc30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqICgxIC0gcHJvZ3Jlc3MpfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSAxIC0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNOb2RlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiLnB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5yZW1vdmUoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiBwcm9ncmVzcyArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsYXllciA9IERPTS5xdWVyeShcIltjbGFzcyo9XFxcImxheWVyLVxcXCJdXCIpO1xyXG4gICAgICAgIGxheWVyLmNsYXNzTGlzdC5hZGQoXCJwdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezAuMDcgKiAoMSAtIHByb2dyZXNzKSArIDAuOTN9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImxheWVyIGJkLWxheWVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyICYmIGUuYW5pbWF0aW5nKVswXS5sYXllciwgaWQ6IHRoaXMucHJvcHMuaWQsIHJlZjogXCJyb290XCIsIHN0eWxlOiB7b3BhY2l0eTogMCwgdHJhbnNmb3JtOiBcInNjYWxlKDEuMSkgdHJhbnNsYXRlWigwcHgpXCJ9fSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFRvb2xzIGZyb20gXCIuLi90b29sc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVGFiQmFyU2VwYXJhdG9yIGZyb20gXCIuLi90YWJCYXJTZXBhcmF0b3JcIjtcclxuaW1wb3J0IFRhYkJhckhlYWRlciBmcm9tIFwiLi4vdGFiQmFySGVhZGVyXCI7XHJcbmltcG9ydCBUYWJCYXJJdGVtIGZyb20gXCIuLi90YWJCYXJJdGVtXCI7XHJcblxyXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9zZXJ2ZXJDYXJkXCI7XHJcbmltcG9ydCBTaWRlYmFyVmlldyBmcm9tIFwiLi9zaWRlYmFyVmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1B1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VDYXRlZ29yeSA9IHRoaXMuY2hhbmdlQ2F0ZWdvcnkuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaCA9IHRoaXMuc2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24gPSB0aGlzLmNoZWNrQ29ubmVjdGlvbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuam9pbiA9IHRoaXMuam9pbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdCA9IHRoaXMuY29ubmVjdC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLkd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0R3VpbGRzXCJdKTtcclxuICAgICAgICB0aGlzLkF2YXRhckRlZmF1bHRzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJERUZBVUxUX0FWQVRBUlNcIl0pO1xyXG4gICAgICAgIHRoaXMuSW52aXRlQWN0aW9ucyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO1xyXG4gICAgICAgIHRoaXMuU29ydGVkR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRTb3J0ZWRHdWlsZHNcIl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZXJ2ZXJzOiBbXSxcclxuICAgICAgICAgICAgbmV4dDogbnVsbCxcclxuICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhdGU6IDAsXHJcbiAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnByb3BzLnJvb3RJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChxdWVyeSwgY2xlYXIpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBmZXRjaChgJHtzZWxmLmVuZFBvaW50fSR7cXVlcnl9JHtxdWVyeSA/IFwiJnNjaGVtYT1uZXdcIiA6IFwiP3NjaGVtYT1uZXdcIn1gLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IGF3YWl0IHJlcy50ZXh0KClcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgc2VydmVycyA9IGRhdGEucmVzdWx0cy5yZWR1Y2UoKGFyciwgc2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuam9pbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgLy8gYXJyLnB1c2goPFNlcnZlckNhcmQgc2VydmVyPXtzZXJ2ZXJ9IGpvaW49e3NlbGYuam9pbn0vPik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzID0gc2VsZi5zdGF0ZS5zZXJ2ZXJzLmNvbmNhdChzZXJ2ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vc2VydmVycy51bnNoaWZ0KHNlbGYuYmRTZXJ2ZXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZW5kID0gZGF0YS5zaXplICsgZGF0YS5mcm9tO1xyXG4gICAgICAgICAgICBkYXRhLm5leHQgPSBgP2Zyb209JHtlbmR9YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgZGF0YS5uZXh0ICs9IGAmdGVybT0ke3NlbGYuc3RhdGUudGVybX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5KSBkYXRhLm5leHQgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICAgICAgaWYgKGVuZCA+PSBkYXRhLnRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5uZXh0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gYFNob3dpbmcgMS0ke2VuZH0gb2YgJHtkYXRhLnRvdGFsfSByZXN1bHRzIGluICR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSB0aXRsZSArPSBgIGZvciAke3NlbGYuc3RhdGUudGVybX1gO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IHNlcnZlcnMsXHJcbiAgICAgICAgICAgICAgICBuZXh0OiBkYXRhLm5leHRcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coc2VsZik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlZnMuc2J2LnJlZnMuY29udGVudFNjcm9sbGVyLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkZhaWxlZCB0byBsb2FkIHNlcnZlcnMuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHNcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGpvaW4oc2VydmVyQ2FyZCkge1xyXG4gICAgICAgIGlmIChzZXJ2ZXJDYXJkLnByb3BzLnBpbm5lZCkgcmV0dXJuIHRoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGUoc2VydmVyQ2FyZC5wcm9wcy5pbnZpdGVfY29kZSk7XHJcblxyXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMuam9pbkVuZFBvaW50fS8ke3NlcnZlckNhcmQucHJvcHMuc2VydmVyLmlkZW50aWZpZXJ9YCx7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNlcnZlckNhcmQuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGYud2luZG93T3B0aW9ucztcclxuICAgICAgICBvcHRpb25zLnggPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5YICsgd2luZG93LmlubmVyV2lkdGggLyAyIC0gb3B0aW9ucy53aWR0aCAvIDIpO1xyXG4gICAgICAgIG9wdGlvbnMueSA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gb3B0aW9ucy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93ID0gbmV3ICh3aW5kb3cucmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5Ccm93c2VyV2luZG93KShvcHRpb25zKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdD9zY29wZXM9Z3VpbGRzLmpvaW4mcHJldmlvdXNVcmw9aHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCI7XHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93LndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1cmwgIT0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBzZWxmLmpvaW5XaW5kb3cuY2xvc2UoKTtcclxuICAgICAgICAgICAgc2VsZi5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cubG9hZFVSTCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB3aW5kb3dPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgIGhlaWdodDogNTUwLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzI4MmIzMFwiLFxyXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1pbmltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgYWx3YXlzT25Ub3A6IHRydWUsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgY2VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcclxuICAgICAgICAgICAgICAgIG5vZGVJbnRlZ3JhdGlvbjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJkU2VydmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJEaXNjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCI3NTAwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjIwMDAwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIEJldHRlckRpc2NvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCIwVG1mbzVaYk9SQ1JxYkFkXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc2VydmVyMiA9IHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjMwK1wiLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjUwK1wiLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIExpZ2h0Y29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2F2YXRhcnMzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzY1NjkwMDU4P3M9MjAwJnY9NFwiLFxyXG4gICAgICAgICAgICBuYXRpdmVqb2luOiB0cnVlLFxyXG4gICAgICAgICAgICBpbnZpdGVfY29kZTogXCI3ZUZmZjJBXCIsXHJcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyMiwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL3NlYXJjaC5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9pbkVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vam9pbi5kaXNjb3Jkc2VydmVycy5jb20vY29ubmVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9gLHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IDAsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJWaWV3LCB7cmVmOiBcInNidlwifSwgdGhpcy5jb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2lkZWJhcjoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLnNpZGViYXJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLmNvbnRlbnRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdG9vbHM6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7a2V5OiBcInB0XCIsIHJlZjogXCJ0b29sc1wiLCBvbkNsaWNrOiB0aGlzLmNsb3NlfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpZGViYXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyXCIsIGtleTogXCJwc1wifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhciBTSURFXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiLCBzdHlsZToge2ZvbnRTaXplOiBcIjE2cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiUHVibGljIFNlcnZlcnNcIlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhckhlYWRlciwge3RleHQ6IFwiQ2F0ZWdvcmllc1wifSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5QnV0dG9ucy5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySXRlbSwge2lkOiBpbmRleCwgb25DbGljazogdGhpcy5jaGFuZ2VDYXRlZ29yeSwga2V5OiBpbmRleCwgdGV4dDogdmFsdWUsIHNlbGVjdGVkOiB0aGlzLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgPT09IGluZGV4fSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlYXJjaElucHV0KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10ZXh0LWlucHV0IGZsZXgtdmVydGljYWxcIiwgc3R5bGU6IHt3aWR0aDogXCIxNzJweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge3JlZjogXCJzZWFyY2hpbnB1dFwiLCBvbktleURvd246IHRoaXMuc2VhcmNoS2V5RG93biwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcInRleHRcIiwgY2xhc3NOYW1lOiBcImlucHV0IGRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiU2VhcmNoLi4uXCIsIG1heExlbmd0aDogXCI1MFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoS2V5RG93bihlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYD90ZXJtPSR7ZS50YXJnZXQudmFsdWV9YDtcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKHF1ZXJ5LCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2F0ZWdvcnlCdXR0b25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXCJBbGxcIiwgXCJGUFMgR2FtZXNcIiwgXCJNTU8gR2FtZXNcIiwgXCJTdHJhdGVneSBHYW1lc1wiLCBcIk1PQkEgR2FtZXNcIiwgXCJSUEcgR2FtZXNcIiwgXCJUYWJsZXRvcCBHYW1lc1wiLCBcIlNhbmRib3ggR2FtZXNcIiwgXCJTaW11bGF0aW9uIEdhbWVzXCIsIFwiTXVzaWNcIiwgXCJDb21tdW5pdHlcIiwgXCJMYW5ndWFnZVwiLCBcIlByb2dyYW1taW5nXCIsIFwiT3RoZXJcIl07XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlQ2F0ZWdvcnkoaWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5yZWZzLnNlYXJjaGlucHV0LnZhbHVlID0gXCJcIjtcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogaWQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnNlYXJjaChgP2NhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbaWRdfWAsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHRoaXMuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuY29ubmVjdGlvbi5zdGF0ZSA9PT0gMSkgcmV0dXJuIHNlbGYubm90Q29ubmVjdGVkO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge3JlZjogXCJjb250ZW50XCIsIGtleTogXCJwY1wiLCBjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pLFxyXG4gICAgICAgICAgICBzZWxmLmJkU2VydmVyLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubWFwKChzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge2tleTogc2VydmVyLmlkZW50aWZpZXIsIHNlcnZlcjogc2VydmVyLCBqb2luOiBzZWxmLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLm5leHQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtzZWxmLnNldFN0YXRlKHtsb2FkaW5nOiB0cnVlfSk7IHNlbGYuc2VhcmNoKHNlbGYuc3RhdGUubmV4dCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIiwgc3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1hcmdpblRvcDogXCIxMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUubG9hZGluZyA/IFwiTG9hZGluZ1wiIDogXCJMb2FkIE1vcmVcIlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KVxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3RDb25uZWN0ZWQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy9yZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHsgdGV4dDogc2VsZi5zdGF0ZS50aXRsZSB9KTtcclxuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwibmNjXCIsIHJlZjogXCJjb250ZW50XCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJoMlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogc2VsZi5jb25uZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjE4cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiMTBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogXCIxNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJDb25uZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksIHNlbGYuYmRTZXJ2ZXJcclxuICAgICAgICApXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYVwiLFxyXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9kaXNjb3Jkc2VydmVycy5jb21cIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgIFwiRGlzY29yZHNlcnZlcnMuY29tXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qge2Nvbm5lY3Rpb259ID0gc2VsZi5zdGF0ZTtcclxuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCk7XHJcblxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtjb2xvcjogXCIjYjliYmJlXCIsIGZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIFwiQ29ubmVjdGVkIGFzOiBcIixcclxuICAgICAgICAgICAgICAgIGAke2Nvbm5lY3Rpb24udXNlci51c2VybmFtZX0jJHtjb25uZWN0aW9uLnVzZXIuZGlzY3JpbWluYXRvcn1gXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwYWRkaW5nOiBcIjVweCAxMHB4IDAgMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHt3aWR0aDogXCIxMDAlXCIsIG1pbkhlaWdodDogXCIyMHB4XCJ9LCB0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIiwgb25DbGljazogc2VsZi5jb25uZWN0fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbn1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VydmVyQ2FyZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsKSB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBpbWFnZUVycm9yOiBmYWxzZSxcclxuICAgICAgICAgICAgam9pbmVkOiB0aGlzLnByb3BzLmd1aWxkTGlzdC5pbmNsdWRlcyh0aGlzLnByb3BzLnNlcnZlci5pZGVudGlmaWVyKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzZXJ2ZXJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBsZXQgY2FyZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNhcmQgJiYgZS5jYXJkUHJpbWFyeSlbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXhDaGlsZCAmJiBlLl9ob3Jpem9udGFsUmV2ZXJzZSlbMF1cclxuICAgICAgICBsZXQgd3JhcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm5vV3JhcCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsIC8vIGNhcmRQcmltYXJ5LTFIdi10b1xyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBgJHtjYXJkTW9kdWxlLmNhcmR9ICR7Y2FyZE1vZHVsZS5jYXJkUHJpbWFyeX0gJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fSBiZC1zZXJ2ZXItY2FyZCR7c2VydmVyLnBpbm5lZCA/IFwiIGJkLXNlcnZlci1jYXJkLXBpbm5lZFwiIDogXCJcIn1gfSxcclxuICAgICAgICAgICAgLy8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgLy8gXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIC8vIHsgY2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGZsZXgtMU8xR0tZIGRpcmVjdGlvblJvdy0zdjN0ZkcganVzdGlmeVN0YXJ0LTJ5SVpvMCBhbGlnblN0cmV0Y2gtMWh3eE1hIG5vV3JhcC0zanludjZcIiB9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtyZWY6IFwiaW1nXCIsIGNsYXNzTmFtZTogXCJiZC1zZXJ2ZXItaW1hZ2VcIiwgc3JjOiBzZXJ2ZXIuaWNvblVybCwgb25FcnJvcjogdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpLCBkcmFnZ2FibGU6IGZhbHNlfSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmZsZXhDaGlsZCtcIiBiZC1zZXJ2ZXItY29udGVudFwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcCtcIiBiZC1zZXJ2ZXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1tZW1iZXItY291bnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubWVtYmVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIE1lbWJlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eSBiZC1zZXJ2ZXItZGVzY3JpcHRpb24tY29udGFpbmVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgc2Nyb2xsZXIgYmQtc2VydmVyLWRlc2NyaXB0aW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXgtMXhNUWc1IGZsZXgtMU8xR0tZIGhvcml6b250YWwtMWFlOWNpIGhvcml6b250YWwtMkVFRW5ZIGRpcmVjdGlvblJvdy0zdjN0Zkcgbm9XcmFwLTNqeW52NiBiZC1zZXJ2ZXItZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4Q2hpbGQtZmFvVlczIGJkLXNlcnZlci10YWdzXCIsIHN0eWxlOiB7ZmxleDogXCIxIDEgYXV0b1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuY2F0ZWdvcmllcy5qb2luKFwiLCBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBjb2xvckdyZWVuLTI5aUFLWVwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiMzYWMxNWNcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuZXJyb3IgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBkaXNhYmxlZC05YUYydWdcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjYzEzYTNhXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VydmVyLmVycm9yICYmICF0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwifSwgb25DbGljazogKCkgPT4ge3RoaXMuam9pbigpO319LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJKb2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGpvaW4oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5qb2luKHRoaXMpO1xyXG4gICAgICAgIC8vdGhpcy5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNjcm9sbGVyIGZyb20gXCIuLi9zY3JvbGxlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NpZGViYXJWaWV3IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtzaWRlYmFyLCBjb250ZW50LCB0b29sc30gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic3RhbmRhcmRTaWRlYmFyVmlldy0zRjFJN2kgdWktc3RhbmRhcmQtc2lkZWJhci12aWV3XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzaWRlYmFyUmVnaW9uLVZGVFVrTiBzaWRlYmFyLXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2tleTogXCJzaWRlYmFyU2Nyb2xsZXJcIiwgcmVmOiBcInNpZGViYXJTY3JvbGxlclwiLCBzaWRlYmFyOiB0cnVlLCBmYWRlOiBzaWRlYmFyLmZhZGUgfHwgdHJ1ZSwgZGFyazogc2lkZWJhci5kYXJrIHx8IHRydWV9LCBzaWRlYmFyLmNvbXBvbmVudClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudFJlZ2lvbi0zbkR1WXkgY29udGVudC1yZWdpb25cIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50VHJhbnNpdGlvbldyYXAtM2hxT0VXIGNvbnRlbnQtdHJhbnNpdGlvbi13cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2QgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAtM1laWGRtIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3QtMjhNU24wIHNjcm9sbGVyVHJhY2stMVpJcHN2XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgZmlyZWZveEZpeFNjcm9sbEZsZXgtY25JMml4IGNvbnRlbnRSZWdpb25TY3JvbGxlci0yNm5jMWUgY29udGVudC1yZWdpb24tc2Nyb2xsZXIgc2Nyb2xsZXJcIiwgcmVmOiBcImNvbnRlbnRTY3JvbGxlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRDb2x1bW4tMmhySVlIIGNvbnRlbnRDb2x1bW5EZWZhdWx0LTFWUWtHTSBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LCBjb250ZW50LmNvbXBvbmVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29scy5jb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1JlbG9hZEljb24gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcclxuICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXHJcbiAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCIjZGNkZGRlXCIsXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtcmVsb2FkIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLnByb3BzLm9uQ2xpY2ssXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge3dpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCIsIGhlaWdodDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwifVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXpcIn0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOiBcIm5vbmVcIiwgZDogXCJNMCAwaDI0djI0SDB6XCJ9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Njcm9sbGVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vc2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5XHJcbiAgICAgICAgbGV0IHNjcm9sbGVyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVySG9yaXpvbnRhbClbMF1cclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhclJlZ2lvblNjcm9sbGVyKVswXVxyXG4gICAgICAgIGxldCB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdEhhaXJsaW5lfSR7dGhpcy5wcm9wcy5mYWRlID8gXCIgXCIrc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZSA6IFwiXCJ9YDtcclxuICAgICAgICBsZXQgc2Nyb2xsZXJDbGFzcyA9IHNjcm9sbGVyTW9kdWxlMS5zY3JvbGxlcitcIiBzY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1Y2sgKi9cclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5zaWRlYmFyKSBzY3JvbGxlckNsYXNzICs9IGAgJHtzY3JvbGxlck1vZHVsZTIuc2lkZWJhclJlZ2lvblNjcm9sbGVyfSBzaWRlYmFyLXJlZ2lvbi1zY3JvbGxlcmBcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jb250ZW50Q29sdW1uKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbGVyQ2xhc3MgKz0gXCIgXCIrc2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcitcIiBjb250ZW50LXJlZ2lvbi1zY3JvbGxlclwiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMi5jb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwfSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlci13cmFwICAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlck1vZHVsZTEudGhlbWVHaG9zdH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUcmFja31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyd3JhcFwiLCBjbGFzc05hbWU6IHdyYXBwZXJDbGFzc30sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7a2V5OiBcInNjcm9sbGVyXCIsIHJlZjogXCJzY3JvbGxlclwiLCBjbGFzc05hbWU6IHNjcm9sbGVyQ2xhc3N9LFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VjdGlvbnMubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICBpICE9PSAwID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCwge30pIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2V9KSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbXBvbmVudCA9IGJ1dHRvbiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7a2V5OiBcInRpdGxlLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogYnV0dG9uLm9uQ2xpY2t9LCBidXR0b24udGl0bGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgICAgIH0pXTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NUaXRsZSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuXHJcbmxldCBjbGFzc25hbWVzID0gW11cclxuZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKG5hbWUpe1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9IGNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChuYW1lK1wiLVwiKSlcclxuICAgIGlmKGNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXHJcbiAgICBjbGFzc05hbWUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5uYW1lKVswXVxyXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcclxuICAgIHJldHVybiBjbGFzc05hbWVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoSXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHRoaXMucHJvcHMuY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XHJcbiAgICAgICAgICAgIGNsYXNzbmFtZXMucHVzaChCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVswXS5iZXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcclxuICAgICAgICAgICAgaW5mbyA9IFtcclxuICAgICAgICAgICAgICAgIGluZm8sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3VwXCIsIHtjbGFzc05hbWU6IGdldENsYXNzTmFtZShcImJldGFcIil9LCBcIihFWFBFUklNRU5UQUwpXCIpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgzIG1hcmdpbi1yZXNldCBtYXJnaW4tcmVzZXQgdWktZmxleC1jaGlsZFwifSwgdGV4dCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3RcclxuXHJcbmNvbnN0IGludGVydmFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkludGVydmFsKVswXVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBvbmVudCwgTWVzc2FnZXMpIHtcclxuICAgIGNsYXNzIFRpbWVSZW5kZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG5ldyBpbnRlcnZhbE1vZHVsZTEuSW50ZXJ2YWwoKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RhcnQoMWUzLCAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZShzZWxmLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RvcCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnREaWRVcGRhdGUoYWN0aXZpdHkpe1xyXG4gICAgICAgICAgICBpZihhY3Rpdml0eS50aW1lc3RhbXBzLmVuZCA9PT0gdGhpcy5wcm9wcy50aW1lc3RhbXBzLmVuZCAmJiBhY3Rpdml0eS50aW1lc3RhbXBzLnN0YXJ0ID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuc3RhcnQpcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0VXBkYXRlZFRpbWUoKXtcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLnByb3BzLnRpbWVzdGFtcHNcclxuICAgICAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCkgLyAxZTM7XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gdGltZXN0YW1wcy5lbmQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihub3csIGNoZWNrVW5peCh0aW1lc3RhbXBzLmVuZCkgLyAxZTMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLnN0YXJ0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZmYoY2hlY2tVbml4KHRpbWVzdGFtcHMuc3RhcnQpIC8gMWUzLCBub3cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogMCxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGltZShudW1iZXIsIHJlbW92ZVplcm8pe1xyXG4gICAgICAgICAgICBpZihyZW1vdmVaZXJvID09PSB1bmRlZmluZWQpcmVtb3ZlWmVybyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gJiYgbnVtYmVyIDw9IDApcmV0dXJuIC0xXHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDEwKXJldHVybiBcIjBcIitudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0RGlmZih0aW1lc3RhbXAsIG5vdyl7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IE1hdGgubWF4KG5vdyAtIHRpbWVzdGFtcCwgMClcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKGhvdXJzKSAlIDYwXHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAvIDYwKSAlIDYwXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogTWF0aC5mbG9vcihob3VycyAvIDM2MDApICUgMjQsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHByb3BzLnRpbWVzdGFtcHNcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VkUHJvcHMgPSBmdW5jdGlvbihwcm9wcywgaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChudWxsID09IHByb3BzKSByZXR1cm4ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB7fVxyXG4gICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5c1tpXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpdGVtcy5pbmRleE9mKGtleSkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHNba2V5XSA9IHByb3BzW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHNcclxuICAgICAgICAgICAgfShwcm9wcywgW1widGltZXN0YW1wc1wiXSlcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gc3RhdGUuaG91cnNcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBzdGF0ZS5taW51dGVzXHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gc3RhdGUuc2Vjb25kc1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnJlbmRlclRpbWUoaG91cnMsICEwKSxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRoaXMucmVuZGVyVGltZShtaW51dGVzKSxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IHRoaXMucmVuZGVyVGltZShzZWNvbmRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZih0aW1lc3RhbXBzLmVuZCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuc3RhcnQgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB1c2VkUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRpbWVSZW5kZXJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrVW5peChlKSB7XHJcbiAgICByZXR1cm4gKFwiXCIgKyBlKS5sZW5ndGggPCAxMyA/IDFlMyAqIGUgOiBlXHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbi8vPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkaXNhYmxlZFBvaW50ZXJFdmVudHMtMXB0Z1RCXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDIzN3B4OyBib3R0b206IDUxcHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwRGlzYWJsZVBvaW50ZXJFdmVudHMtM2VhQkdOXCIgc3R5bGU9XCJvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7XCI+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcktcIj48L2Rpdj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBDb250ZW50LWJxVkxXS1wiPlVzZXIgU2V0dGluZ3M8L2Rpdj5cclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljXCIgc3R5bGU9XCJ0b3A6IDg2MHB4OyBsZWZ0OiA2MzIuNXB4O1wiPlxyXG4vL1x0PGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIHRvb2x0aXBCbGFjay1QUEc0N3ogdG9vbHRpcFRvcC1YRERTeHhcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHRDaGFuZ2Vsb2dcclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5sZXQgVG9vbHRpcENsYXNzZXNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcclxuXHRpZihUb29sdGlwQ2xhc3NlcylyZXR1cm4gVG9vbHRpcENsYXNzZXNcclxuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XHJcbn1cclxubGV0IFRvb2x0aXBMYXllcnNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xyXG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcclxuXHRyZXR1cm4gVG9vbHRpcExheWVycyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwibGF5ZXJcIiwgXCJsYXllckNvbnRhaW5lclwiKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q2xhc3MgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xyXG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xyXG4gICAgaWYgKHRvb2x0aXBDbGFzcykgcmV0dXJuIHRvb2x0aXBDbGFzcztcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcclxufTtcclxuXHJcbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfXB4YDtcclxufTtcclxuXHJcbi8qIDxkaXYgY2xhc3M9XCJsYXllci12OUh5WWMgZGEtbGF5ZXJcIiBzdHlsZT1cImxlZnQ6IDIzNC41cHg7IGJvdHRvbTogNTFweDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyBkYS10b29sdGlwIHRvb2x0aXBUb3AtWEREU3h4IHRvb2x0aXBCbGFjay1QUEc0N3pcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLIGRhLXRvb2x0aXBQb2ludGVyXCI+PC9kaXY+XHJcbiAgICAgICAgVXNlciBTZXR0aW5nc1xyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBjb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpcCAtIHN0cmluZyB0byBzaG93IGluIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zaWRlPXRvcF0gLSBjYW4gYmUgYW55IG9mIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XHJcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLm5vZGUgPSBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHR0aGlzLnNpZGUgPSBzaWRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRcclxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcclxuXHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XHJcblxyXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XHJcblx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMudG9vbHRpcEVsZW1lbnQpO1xyXG5cclxuXHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG5cclxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyh0aGlzLm5vZGUpKTtcclxuXHRcdFx0XHRcdGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXHJcbiAgICBnZXQgY29udGFpbmVyKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzLnNwbGl0KFwiIFwiKVswXStcIiB+IC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdKTsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgdGV4dCA9IFwiXCJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICB0aGlzLm5vZGUgPSBCRFYyLnJlYWN0RG9tLmZpbmRET01Ob2RlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKHRoaXMubm9kZSwgdGV4dCwge3N0eWxlLCBzaWRlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy50b29sdGlwO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfWFN2ZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHt4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLCBzdHlsZToge3dpZHRoOiBcIjE4cHhcIiwgaGVpZ2h0OiBcIjE4cHhcIn19LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImdcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmFja2dyb3VuZFwiLCBmaWxsOiBcIm5vbmVcIiwgZmlsbFJ1bGU6IFwiZXZlbm9kZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTAgMGgxMnYxMkgwXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2NsYXNzTmFtZTogXCJmaWxsXCIsIGZpbGw6IFwiI2RjZGRkZVwiLCBkOiBcIk05LjUgMy4yMDVMOC43OTUgMi41IDYgNS4yOTUgMy4yMDUgMi41bC0uNzA1LjcwNUw1LjI5NSA2IDIuNSA4Ljc5NWwuNzA1LjcwNUw2IDYuNzA1IDguNzk1IDkuNWwuNzA1LS43MDVMNi43MDUgNlwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXZlbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1rZGlycFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb2R1bGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibm9kZS1mZXRjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJpbXJhZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5YXV6bFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsIml0ZW1zIiwidHlwZSIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwiY2hpbGRyZW4iLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwiam9pbiIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoQ2xhc3NNb2R1bGVzIiwibm9ybWFsaXplRWxlbWVudCIsInBhdGNoRE9NTWV0aG9kcyIsIm1vZHVsZXMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwiY29tcG9uZW50TmFtZSIsImNsYXNzTmFtZXMiLCJjbGFzc0xpc3QiLCJub3JtYWxDbGFzcyIsImNhbWVsQ2FzZSIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInRvUmVtb3ZlIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJ0b2tlbiIsInRva2VucyIsInQiLCJDb2xvcmVkVGV4dCIsImluamVjdENvbG9yZWRUZXh0IiwiY2FuY2VsQ29sb3JlZFRleHQiLCJNZXNzYWdlQ29tcG9uZW50IiwiYmVmb3JlIiwibWV0aG9kQXJndW1lbnRzIiwiY2hpbGRyZW5NZXNzYWdlQ29udGVudCIsIm1lc3NhZ2VDb250ZW50IiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsZW0iLCJzZXRQcm9wZXJ0eSIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwiYWRkb25DYWNoZSIsInRpbWVDYWNoZSIsIndhdGNoZXJzIiwicGF0Y2hFeHRlbnNpb25zIiwiZ2V0Q29udGVudFJlcXVpcmUiLCJwbHVnaW5zRm9sZGVyIiwiX3BsdWdpbnNGb2xkZXIiLCJyZWFscGF0aFN5bmMiLCJkYXRhUGF0aCIsInRoZW1lc0ZvbGRlciIsIl90aGVtZXNGb2xkZXIiLCJsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSIsImRhdGFTdG9yZSIsImdldFNldHRpbmdHcm91cCIsInNldFNldHRpbmdHcm91cCIsImVuY3J5cHRTZXR0aW5nc0NhY2hlIiwiSlNPTiIsInBhcnNlIiwiZGVjcnlwdFNldHRpbmdzQ2FjaGUiLCJoYXNoIiwicmVzdWx0Iiwic3VzcGVjdCIsInNhdmVBZGRvbkNhY2hlIiwic3RyaW5naWZ5Iiwid2F0Y2hDb250ZW50IiwiY29udGVudFR5cGUiLCJpc1BsdWdpbiIsImJhc2VGb2xkZXIiLCJmaWxlRW5kaW5nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJ1bmxvYWRQbHVnaW4iLCJ1bmxvYWRUaGVtZSIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZFBsdWdpbiIsImxvYWRUaGVtZSIsInJlbG9hZFBsdWdpbiIsInJlbG9hZFRoZW1lIiwidW53YXRjaENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwiaGFzT2xkTWV0YSIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJtZXRhIiwicmF3TWV0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsInBhcnNlZCIsImZvcm1hdCIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJjaGFyQXQiLCJsIiwic3Vic3RyIiwic2VsZiIsIm9yaWdpbmFsUmVxdWlyZSIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiYWRkZWQiLCJhdGltZU1zIiwibW9kaWZpZWQiLCJtdGltZU1zIiwic2l6ZSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImZsYXQiLCJ2ZXJzaW9uIiwiRUQiLCJXZWJTb2NrZXQiLCJwYXRjaEF0dHJpYnV0ZXMiLCJpbml0U2V0dGluZ3MiLCJjaGVja0Zvckd1aWxkcyIsImluaXRpYWxpemUiLCJpbml0aWFsaXplU2V0dGluZ3MiLCJjb250ZW50TWFuYWdlciIsImF0b2IiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsIkFuY2hvciIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsIm9yaWdpbmFsIiwic2F2ZVNldHRpbmdzIiwibG9hZFNldHRpbmdzIiwic2V0dGluZyIsIkFwaSIsImdldFByZWRpY2F0ZVNlY3Rpb25zIiwic2V0dGluZ01vZHVsZSIsImNhbGwiLCJzZWN0aW9uIiwicG9wZWQiLCJwb3AiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImxheWVyIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImdldEdsb2JhbCIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZmluZEJ5UHJvcHMiLCJndWlsZHMiLCJwaWxsIiwiZ3VpbGRMaXN0SXRlbXNQYXRjaCIsIkd1aWxkQ2xhc3NlcyIsImxpc3RJdGVtQ2xhc3MiLCJibG9iQ2xhc3MiLCJyZWFjdEluc3RhbmNlIiwiR3VpbGRDb21wb25lbnQiLCJyZXR1cm4iLCJ0aGlzT2JqZWN0IiwiZ3VpbGREYXRhIiwidW5yZWFkIiwic2VsZWN0ZWQiLCJhdWRpbyIsInZpZGVvIiwiYmFkZ2UiLCJhbmltYXRhYmxlIiwiZ3VpbGRQaWxsUGF0Y2giLCJndWlsZFBpbGwiLCJob3ZlcmVkIiwiZ3VpbGRTZXBhcmF0b3JQYXRjaCIsIkd1aWxkcyIsImd1aWxkQ29tcG9uZW50cyIsIkd1aWxkU2VwYXJhdG9yIiwiU2VwYXJhdG9yIiwiQXR0YWNobWVudFBhdGNoIiwiQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJnZXROZXN0ZWRQcm9wIiwicGF0Y2giLCJtZXNzYWdlSGVhZGVyUGF0Y2giLCJNZXNzYWdlSGVhZGVyIiwiY2hhdCIsIm5leHRUaWNrIiwiZ2V0RWxlbWVudEJ5SWQiLCJjaGlsZE5vZGVzIiwiYmxvY2tEaXYiLCJkaXN0YW50IiwiZ2V0QmFkZ2VzIiwiYmFkZ2VzIiwic3ZnIiwid2lkdGgiLCJzY29wZXMiLCJzY29wZSIsImNvbXBvbmVudCIsImRpdjIiLCJyZWFjdERvbSIsInJlbmRlciIsIm1lbWJlckxpc3RQYXRjaCIsIk1lbWJlckxpc3RJdGVtIiwicmVuZGVyRGVjb3JhdG9ycyIsInVwZGF0ZUluamVjdG9yIiwiaW5qZWN0aW9uUGF0aCIsInJtcmYiLCJ5YXV6bCIsIm1rZGlycCIsInJlcXVlc3QiLCJwYXJlbnRQYXRoIiwiZm9sZGVyTmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJlbmNvZGluZyIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJyb3VuZCIsInBlcmZvcm1hbmNlIiwid3JpdGVGaWxlIiwiemlwZmlsZSIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwicmVhZEVudHJ5IiwiZnVsbFBhdGgiLCJzeW5jIiwiZGlybmFtZSIsIm9wZW5SZWFkU3RyZWFtIiwicmVhZFN0cmVhbSIsInBpcGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uY2UiLCJiYWNrdXBGb2xkZXIiLCJ1bmxpbmsiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInJlbGVhc2VDaGFubmVsIiwiZ2xvYmFscyIsImdldFJlbGVhc2VDaGFubmVsIiwic3RhYmxlIiwiY2FuYXJ5IiwicHRiIiwicGx1Z2luRGF0YSIsIkJERmlsZSIsIndyaXRlRmlsZVN5bmMiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJiYXNlIiwicm9hbWluZ0Jhc2UiLCJnZXRQYXRoIiwicm9hbWluZ0xvY2F0aW9uIiwicmVhbExvY2F0aW9uIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIndoaWNoIiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJzZWxlY3RvciIsImdldFNlbGVjdG9yIiwiY2xhc3NMYXllciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJtZW51IiwiYXR0YWNoIiwiY20iLCJxdWVyeSIsImNvbnRhaW5lciIsImxheWVyQ29udGFpbmVyIiwiY21XcmFwIiwic3R5bGVGbGV4aWJsZSIsImFjY29tbW9kYXRlU2Nyb2xsYmFyIiwiYXBwZW5kIiwiY2xpZW50WSIsImxlZnQiLCJjbGllbnRYIiwic2Nyb2xsZXJDbGFzc2VzIiwic2Nyb2xsZXJXcmFwIiwic2Nyb2xsZXJUaGVtZWQiLCJ0aGVtZUdob3N0SGFpcmxpbmUiLCJzY3JvbGxlciIsInJlbW92ZUNNIiwia2V5Q29kZSIsImNtZyIsImNtaSIsIml0ZW0iLCJsYWJlbENvbnRhaW5lciIsImNvbG9yRGVmYXVsdCIsImxhYmVsIiwiTmF0aXZlTW9kdWxlIiwiY29weSIsImVsZW1lbnRzIiwicXVlcnlBbGwiLCJmb2N1c2VkIiwic2VwYXJhdG9yIiwic2Nyb2xsSGVpZ2h0IiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJmcm9tIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJnZXRSdWxlcyIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwicnVsZXMiLCJjc3NSdWxlcyIsImVsZW1lbnRSdWxlcyIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGltZSIsInRpbWVGcmFjdGlvbiIsInByb2dyZXNzIiwiUSIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0Iiwic29tZSIsIm4iLCJub2RlVHlwZSIsImJhc2VFbGVtZW50IiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjbG9uZU5vZGUiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiY2xhc3NuYW1lIiwiaW5kaWNhdG9yIiwiaGFzQ2xhc3MiLCJldmVyeSIsInJlcGxhY2VDbGFzcyIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiYXBwZW5kVG8iLCJ0aGlzTm9kZSIsInRoYXROb2RlIiwicHJlcGVuZFRvIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwidGFyZ2V0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibmV3Tm9kZSIsIm5leHQiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwiaW5kZXgiLCJwYXJlbnQiLCJmaW5kQ2hpbGQiLCJmaW5kQ2hpbGRyZW4iLCJwYXJlbnRzIiwiY2xvc2VzdCIsInBhcmVudHNVbnRpbCIsInNpYmxpbmdzIiwiYXR0cmlidXRlIiwiZ2xvYmFsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsInRleHRDb250ZW50Iiwib3V0ZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwiZXZlbnQiLCJkZWxlZ2F0ZSIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiY2FuY2VsIiwibmV3Q2FuY2VsIiwiZmluZEluZGV4IiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsIm9uTW91bnRDaGFuZ2UiLCJvbk1vdW50Iiwid3JhcHBlZENhbGxiYWNrIiwib2JzZXJ2ZXIiLCJub2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwicGFyZW50TWF0Y2giLCJvblVubW91bnQiLCJvbkFkZGVkIiwid3JhcCIsImRvbVdyYXBwZXIiLCJyZXNvbHZlRWxlbWVudCIsIkVtb2ppUmVnZXgiLCJDdXN0b21FbW9qaU1vZHVsZSIsIkN1c3RvbUVtb2ppIiwiRW1vamlNb2R1bGVBcGkiLCJnZXRDdXN0b21FbW9qaUJ5SWQiLCJBdXRvY29tcGxldGVNb2R1bGUiLCJBdXRvQ29tcGxldGlvblRlbXBsYXRlcyIsImdldEF1dG9jb21wbGV0ZU9wdGlvbnMiLCJFbW9qaU1vZHVsZVF1ZXJ5IiwicXVlcnlFbW9qaVJlc3VsdHMiLCJNZXNzYWdlcyIsIkVNT0pJX01BVENISU5HIiwiZ3VpbGRNb2R1bGUiLCJnZXRHdWlsZCIsImdldEd1aWxkcyIsImlzRmV0Y2hpbmciLCJlbW9qaVNlYXJjaCIsImdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQiLCJMSUdIVENPUkRfRU1PSklTIiwiYXJnMSIsImFyZzIiLCJjb25kaXRpb24iLCJzZXRFbW9qaVVzYWJsZSIsInF1ZXJ5UmVzdWx0cyIsInJlc3VsdHMiLCJyZW5kZXJSZXN1bHRzIiwiRCIsImVtb2ppcyIsIkVNT0pJIiwiRW1vamkiLCJlbW9qaSIsInVuaXF1ZU5hbWUiLCJzZW50aW5lbCIsImd1aWxkSWQiLCJnZXRQbGFpblRleHQiLCJpc0FuaW1hdGVkIiwiYW5pbWF0ZWQiLCJtYW5hZ2VkIiwib3JpZ2luYWxOYW1lIiwiZ2V0UmF3VGV4dCIsImNhbmNlbEVtb2ppUmVuZGVyIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJuZXdDb250ZW50IiwiaGFzUGFyc2VkIiwiZXhlYyIsInJhdyIsIndvcmRzIiwid29yZCIsImFyciIsImVtb2ppSWQiLCJqdW1ib2FibGUiLCJyZWR1Y2UiLCJjdXJyZW50Iiwic2hpZnQiLCJvIiwidSIsImQiLCJvbkNsaWNrIiwib25Ib3ZlciIsIlIiLCJwcmVmaXgiLCJUaXRsZSIsIkVtb2ppRmlsdGVyTW9kdWxlIiwiaXNFbW9qaURpc2FibGVkIiwiaXNVc2FibGUiLCJ1c2FibGUiLCJzdXJyb2dhdGVzIiwiZGl2ZXJzaXR5IiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwia2V5d29yZCIsIm9vZiIsIm5vX2NvbW1lbnRzIiwicmVnZXhwcyIsInJlZ2V4IiwiaGFzaFRvVXJsIiwiY2hlY2tIYXNoIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwidXNlckFnZW50IiwiX19wYXRoIiwiaXNGcm9tTG9hZGVyIiwiY3J5cHRvIiwiQnVmZmVyIiwiYWxsb2MiLCJjcmVhdGVSZWFkU3RyZWFtIiwiY2h1bmsiLCJjb25jYXQiLCJoYXNoUmVzdWx0IiwiZGlnZXN0IiwicmVuZGVyVG9FbGVtZW50cyIsImZsb3dlclN0YXJNb2R1bGUiLCJmbG93ZXJTdGFyQ29udGFpbmVyIiwiY2hpbGRNb2R1bGUiLCJjaGlsZENvbnRhaW5lciIsImJvcmRlckNvbG9yIiwibmV4dE5vZGUiLCJjb25maXJtVGV4dCIsImRhbmdlciIsIm9uQ2FuY2VsIiwib25Db25maXJtIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJnZW5lcmF0ZUtleSIsImRlY2lwaGVyIiwiZGVjcnlwdGVkIiwiZmluYWwiLCJjaXBoZXIiLCJlbmNyeXB0ZWQiLCJQbHVnaW5Nb2R1bGUiLCJsb2FkUGx1Z2luRGF0YSIsImxvYWQiLCJzYXZlUGx1Z2luRGF0YSIsImNoYW5uZWxTd2l0Y2giLCJzdGFydFBsdWdpbiIsInN0b3BQbHVnaW4iLCJlbmFibGVQbHVnaW4iLCJkaXNhYmxlUGx1Z2luIiwidG9nZ2xlUGx1Z2luIiwicCIsImZpbGVuYW1lT3JOYW1lIiwiYmRwbHVnaW4iLCJkZWxldGUiLCJlZGl0Iiwib3Blbkl0ZW0iLCJ1cGRhdGVQbHVnaW5MaXN0Iiwic2F2ZWQiLCJuZXdNZXNzYWdlIiwib25NZXNzYWdlIiwib25Td2l0Y2giLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIkxheWVyIiwicm9vdElkIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290IiwiX3Jvb3QiLCJpbmplY3RSb290IiwiY2xhc3NOYW1lTGF5ZXJzIiwibGF5ZXJzIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInR1dG9yaWFsQ29udGFpbmVyIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQkRTaWRlYmFySGVhZGVyIiwiUHVyZUNvbXBvbmVudCIsInNpZGViYXJDb21wb25lbnRzIiwiSGVhZGVyIiwiSXRlbSIsImNoYW5nZWxvZ0J1dHRvbiIsIkhpc3RvcnkiLCJyZW5kZXJlZCIsImlzQ2xlYXJpbmdDYWNoZSIsIlYyX1NldHRpbmdzUGFuZWwiLCJ1cGRhdGVTZXR0aW5ncyIsInNpZGViYXIiLCJWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIiLCJyZWdpc3RlckNvbXBvbmVudHMiLCJyZWdpc3RlciIsIm1ha2VDb21wb25lbnQiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIkFwaVByZXZpZXdDb21wb25lbnQiLCJjb3JlQ29tcG9uZW50IiwiY3VzdG9tQ3NzQ29tcG9uZW50IiwicmVuZGVyQWRkb25QYW5lIiwiY2xhc3NTaWRlYmFyIiwiY29udGVudFJlZ2lvbiIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJjb3JlU2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsImNhdGVnb3JpZXMiLCJTZXQiLCJzZWN0aW9ucyIsImxpZ2h0Y29yZFNldHRpbmdzIiwiUHJlc2VuY2VTZXR0aW5ncyIsIk1zZ0xvZ1NldHRpbmdzIiwiY2hlY2tlZCIsInB1YmxpY1NlcnZlcnNNb2R1bGUiLCJ2b2ljZU1vZGUiLCJ0ZkhvdXIiLCJjb2xvcmVkVGV4dCIsImRNb2RlIiwiU2V0dGluZ3MiLCJkZXZNb2RlIiwiZm9yY2VVcGRhdGUiLCJjYWxsUmluZ2luZ0JlYXQiLCJzZXR0aW5nc1N0b3JlIiwic2hvd0N1cnJlbnRHYW1lIiwidXBkYXRlUmVtb3RlU2V0dGluZ3MiLCJnZXRDdXJyZW50V2luZG93Iiwic2V0QWx3YXlzT25Ub3AiLCJBbnRpQWRETSIsImJsdXJQcml2YXRlIiwiZGlzYWJsZVR5cGluZyIsImFwcFNldHRpbmdzIiwicmVsYXVuY2giLCJleGl0IiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsImlzQ2hlY2tlZCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsImlwYyIsInNlbmQiLCJhcmd2IiwicXVpdCIsInNlc3Npb24iLCJjbGVhckNhY2hlIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3MiLCJWMkNfQWNjb3VudEluZm9zIiwiQXBpUHJldmlldyIsIkNzc0VkaXRvciIsIkNvbnRlbnRMaXN0IiwiQ29tcG9uZW50Iiwib3JpZ2luYWxSZW5kZXIiLCJlbnVtZXJhYmxlIiwiQ2FyZExpc3QiLCJTZXR0aW5nQ29tcG9uZW50IiwicGFuZWxzIiwicGFuZWwiLCJnZXRDb21wb25lbnQiLCJMQ2l0ZW1zIiwiTENEZXZJdGVtcyIsIlRoZW1lTW9kdWxlIiwibG9hZFRoZW1lRGF0YSIsInRoZW1lIiwidW5lc2NhcGUiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImVzY2FwZSIsInBhcmFtcyIsImluc3RlYWQiLCJzaWxlbnQiLCJmb3JjZSIsIm9yaWdNZXRob2QiLCJjYW5jZWxlZCIsImNhbmNlbFBhdGNoIiwib3JpZ2luYWxNZXRob2QiLCJjYWxsT3JpZ2luYWxNZXRob2QiLCJ0ZW1wUmV0IiwiX19tb25rZXlQYXRjaGVkIiwiZGlzY29ubmVjdCIsImhhc05vdGljZSIsIm1lbWJlcmxpc3QiLCJtZW1iZXJzV3JhcCIsImZvcm0iLCJyaWdodCIsImJvdHRvbSIsInRvYXN0V3JhcHBlciIsImljb24iLCJ0aW1lb3V0IiwidG9hc3RFbGVtIiwiaW5uZXJUZXh0IiwibW9kYWxNb2R1bGUiLCJoaWRlT25GdWxsc2NyZWVuIiwiaGVhZGVyTW9kdWxlIiwiaGVhZGVyIiwiZm9vdGVyMk1vZHVsZSIsImZvY3VzTG9jayIsImJhY2tkcm9wIiwiYmFja2Ryb3BXaXRoTGF5ZXIiLCJjbG9zaW5nTGlzdGVuZXJzIiwicGx1Z2luRXJyb3JzIiwidGhlbWVFcnJvcnMiLCJnZW5lcmF0ZVRhYiIsInRhYnMiLCJNb2RhbFN0YWNrIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIlRleHRFbGVtZW50IiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwiZGVmYXVsdFByb3BzIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJtYXJnaW4iLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJTaXplcyIsIlNNQUxMIiwiQ29sb3JzIiwiU1RBTkRBUkQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsImpvaW5CRDIiLCJzdXBwb3J0TGluayIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwicmVkIiwiVjIiLCJlZGl0b3JEZXRhY2hlZCIsInJlcSIsIndlYnBhY2tKc29ucCIsIl9fZXh0cmFfaWRfXyIsInNob3VsZFByb3RlY3QiLCJ0aGVNb2R1bGUiLCJjbGVhciIsInNvcnQiLCJnZXRUb2tlbiIsImdldEVtYWlsIiwic2hvd1Rva2VuIiwicHJvdGVjdCIsImlzRGVmYXVsdCIsIm1vZCIsInByb3h5IiwiZnVuYyIsIl9fcHJvdG9fXyIsInByb3BOYW1lcyIsInByb3RvTmFtZXMiLCJwcm90b1Byb3AiLCJpbnRlcm5hbCIsImpvaW5CRDEiLCJJbnZpdGVBY3Rpb25zIiwiYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbCIsImxlYXZlQkQxIiwiR3VpbGRBY3Rpb25zIiwibGVhdmVHdWlsZCIsImxlYXZlQkQyIiwiam9pbkxDIiwibGVhdmVMQyIsInJlYWN0Q29tcG9uZW50IiwiYW5jaG9yQ2xhc3NlcyIsInNsYXRlRWRpdG9yQ2xhc3NlcyIsIm1lc3NhZ2VDbGFzc2VzIiwidW5yZWFkTWVudGlvbnNCYXIiLCJndWlsZHNFcnJvciIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiVG9vbHRpcFdyYXBwZXIiLCJUb29sdGlwcyIsImhpZGUiLCJzaG93Iiwic3VibWl0IiwiYWN0aXZhdGVSYWdpbmdEZW1vbiIsImRpc21pc3MiLCJLZXlHZW5lcmF0b3IiLCJMYXllclN0YWNrIiwiVXNlclN0b3JlIiwiQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJvcGVuRE0iLCJ1c2VySWQiLCJzZWxmSWQiLCJwcml2YXRlQ2hhbm5lbElkIiwiZ2V0RE1Gcm9tVXNlcklkIiwic2VsZWN0UHJpdmF0ZUNoYW5uZWwiLCJvcGVuUHJpdmF0ZUNoYW5uZWwiLCJwYXJzZVNldHRpbmdzIiwiVm9pY2VNb2RlIiwicHJvZmlsTW9kdWxlIiwiZmV0Y2hNdXR1YWxGcmllbmRzIiwiTGlnaHRjb3JkVXNlckJhZGdlIiwibWFyZ2luTW9kdWxlMiIsImRlZmF1bHRNYXJnaW5oNSIsImNvbG9yTW9kdWxlIiwiY29sb3JTdGFuZGFyZCIsInNpemVNb2R1bGUiLCJzY3JvbGxiYXJNb2R1bGUxIiwic2Nyb2xsYmFyR2hvc3RIYWlybGluZSIsIkd1aWxkTW9kdWxlIiwiZ2V0UmVsYXRpb25zaGlwcyIsInNlc3Npb25Nb2R1bGUiLCJnZXRTZXNzaW9ucyIsInNpemUxNCIsImg1IiwiZ2V0UHJvZmlsZVZhbHVlIiwiZ2V0U3RhdGlzdGljcyIsImdldFNlc3Npb25WYWx1ZSIsIm1hcmdpbkJvdHRvbTIwIiwic2Vzc2lvbnNSYXciLCJzZXNzaW9ucyIsInNlc3Npb25JZCIsImNsaWVudEluZm8iLCJvcyIsImNsaWVudCIsImFjdGl2aXRpZXMiLCJyZXBlYXQiLCJjcmVhdGVkQXQiLCJhdmF0YXJVUkwiLCJhdmF0YXIiLCJnZXRBdmF0YXJVUkwiLCJnZXREYXRlIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJmbGFncyIsImhhc1ByZW1pdW1TdWJzY3JpcHRpb24iLCJlbWFpbCIsIm1mYUVuYWJsZWQiLCJtb2JpbGUiLCJwaG9uZSIsInZlcmlmaWVkIiwicmVsYXRpb25zIiwiZnJpZW5kcyIsImlzRnJpZW5kIiwiaXNCbG9ja2VkIiwiaGlnaHRsaWdodEpTIiwiaGlnaGxpZ2h0IiwibWVzc2FnZU1vZHVsZTEiLCJtZXNzYWdlTW9kdWxlMiIsIkNvZGVDb250ZW50IiwiX19odG1sIiwibGFuZ3VhZ2UiLCJtYXJnaW5Cb3R0b204Iiwic2V0dGluZ1RpdGxlIiwiZm9ybU1vZHVsZSIsInN0YXRlcyIsIkZvcm1TZWN0aW9uIiwiYWxsQ29tcG9uZW50cyIsImNvbXAiLCJBbGxQcmV2aWV3cyIsInRhYiIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJnZXRQcm9wcyIsInJlbmRlclByZXZpZXciLCJiYWNrZ3JvdW5kQ29sb3IiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwicmVuZGVyQ29kZSIsImdlbmVyYXRlQ29kZSIsImdldFN0ckZvclByb3AiLCJjb21wUGF0aCIsImxhbmciLCJTdHJpbmciLCIkJHR5cGVvZiIsIlN5bWJvbCIsImZvciIsImNvbXBOYW1lIiwiY29tcENhdGVnb3J5IiwicHJvcFN0cmluZ3MiLCJjaGlsZHJlblByb3AiLCJzdHIiLCJvcGVuVGFnIiwiY2xvc2VUYWciLCJ2aXNpYmxlS2V5IiwicHJvcE9iamVjdCIsImlzTGFzdCIsImlzRmlyc3QiLCJjaGlsZHJlbkRhdGEiLCJoZWxwIiwibWFyZ2luQm90dG9tIiwicmVuZGVycyIsIlYyQ19QbHVnaW5DYXJkIiwic2hvd1NldHRpbmdzIiwic2V0SW5pdGlhbFN0YXRlIiwiaGFzU2V0dGluZ3MiLCJhZGRvbiIsImdldFNldHRpbmdzUGFuZWwiLCJyZWxvYWRzIiwidHJ1c3RlZCIsImNsb3NlU2V0dGluZ3MiLCJwYW5lbFJlZiIsInNldHRpbmdzT3BlbiIsImNvbXBvbmVudERpZFVwZGF0ZSIsInJlZnMiLCJzZXR0aW5nc3BhbmVsIiwic2V0SW1tZWRpYXRlIiwiaXNIaWRkZW4iLCJjVG9wIiwic2Nyb2xsVG9wIiwiY0JvdHRvbSIsImVUb3AiLCJvZmZzZXRUb3AiLCJlQm90dG9tIiwiY2FyZE5vZGUiLCJ0aGlzTm9kZU9mZnNldCIsImNvbnRhaW5lck9mZnNldCIsImVuZFBvaW50IiwiZ2V0U3RyaW5nIiwic2V0dGluZ3NDb21wb25lbnQiLCJyZWYiLCJYU3ZnIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJidWlsZFRpdGxlIiwibmFtZUluZGV4IiwidmVyc2lvbkluZGV4IiwiYXV0aG9ySW5kZXgiLCJwb3BMYXllciIsIm1ha2VMaW5rIiwibWFrZUJ1dHRvbiIsImFjdGlvbiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5tb3VudGVkIiwibGlua3MiLCJpbnZpdGUiLCJ0ZXN0ZXIiLCJkb25hdGUiLCJwYXRyZW9uIiwiYXV0aG9ySWQiLCJhdXRob3JMaW5rIiwiaXNTY2FubmluZyIsIlRvb2x0aXAiLCJhc2NlbmRpbmciLCJpc1BsdWdpbnMiLCJyZXZlcnNlIiwib25BZGRvbkNoYW5nZXMiLCJjb21wb25lbnREaWRNb3VudCIsImJkRXZlbnRzIiwib3BlbkZvbGRlciIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJzb3J0T3B0aW9ucyIsImRpcmVjdGlvbnMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImdldEFkZG9ucyIsInNvcnRlZEFkZG9ucyIsImIiLCJjYXAiLCJmaXJzdCIsInNlY29uZCIsImxvY2FsZUNvbXBhcmUiLCJyZW5kZXJDaGVja1VwZGF0ZXMiLCJaZXJlc1BsdWdpbkxpYnJhcnkiLCJQbHVnaW5VcGRhdGVzIiwiY2hlY2tBbGwiLCJtYXJnaW5MZWZ0IiwicmVmcmVzaEljb24iLCJhZGRvbkNhcmRzIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsIm9wYWNpdHkiLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsIlYyQ19Db250ZW50Q29sdW1uIiwiY29udGVudE1vZHVsZSIsImNvbnRlbnRDb2x1bW4iLCJjb250ZW50Q29sdW1uRGVmYXVsdCIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwiYXJnIiwiZ2V0VmFsdWUiLCJkcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsIkJERXJyb3JCb3VuZGFyeSIsImhhc0Vycm9yIiwiY29tcG9uZW50RGlkQ2F0Y2giLCJEZWxldGUiLCJEb3duQXJyb3ciLCJFZGl0IiwibWFyZ2luTW9kdWxlIiwibWFyZ2luVG9wNjAiLCJWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMiLCJwcmV2aWV3IiwiaXNmZXRjaGluZyIsImFzc2V0Q29tcG9uZW50cyIsInVwZGF0ZVdoZW5GZXRjaGVkIiwiZGVmYXVsdFNldHRpbmciLCJSUENQcm9wcyIsImFzc2V0IiwidXBkYXRlUHJldmlldyIsIm9wdGlvbnNDb21wb25lbnRzIiwib2hnb2RvaGZ1Y2siLCJfb3B0aW9uc0NvbXBvbmVudHMiLCJhcnJheSIsImlucHV0VGV4dE1vZHVsZXMiLCJJbnB1dFRleHQiLCJyZW1vdmVLZXliaW5kIiwiX2hvcml6b250YWwiLCJpbnB1dE1pbmkiLCJzaXplMTYiLCJzaXplMjAiLCJpbnB1dCIsImxhc3RFZGl0ZWQiLCJpc1RpbWluZyIsInJvd01vZHVsZSIsImZsZXhNb2R1bGUiLCJpbnB1dE1vZHVsZSIsInNpemVNb2R1bGUyIiwicm93IiwiZmxleENoaWxkIiwiSW5wdXROdW1iZXJNb2R1bGVzIiwiSW5wdXROdW1iZXIiLCJjb2xvclRyYW5zcGFyZW50Iiwic2V0VmFsdWUiLCJjbGlwYm9hcmQiLCJJbnB1dENob2ljZU1vZHVsZXMiLCJJbnB1dENob2ljZSIsIkRpdmlkZXJNb2R1bGVzIiwiRGl2aWRlciIsImRpdmlkZXIiLCJkaXZpZGVyRGVmYXVsdCIsIkRpc2NvcmRCdXR0b24iLCJScGNQcmV2aWV3IiwiYWN0aXZlIiwiY2hhbmdlVGFiIiwiYW5jaWVudFRhYiIsInNldEFjdGl2ZSIsImZsZXgiLCJycGMiLCJpc0FjdGl2ZSIsIlByb2ZpbGUiLCJQb3BvdXQiLCJUYWIiLCJlbXB0eUNsYXNzZXMiLCJQcmVzZW5jZUVycm9yQ2F0Y2hlciIsImVyckluZm8iLCJlbXB0eVN0YXRlSW1hZ2UiLCJlbXB0eVN0YXRlSGVhZGVyIiwiZW1wdHlTdGF0ZVN1YnRleHQiLCJwb3BvdXRNb2R1bGVzIiwiVXNlclBvcG91dENvbXBvbmVudCIsIlBvcG91dFByb3BzIiwiVXNlclBvcG91dCIsInJlbmRlcjEiLCJjaGFubmVsSWQiLCJkaXNhYmxlVXNlclByb2ZpbGVMaW5rIiwicmVuZGVyMiIsInJlbmRlcjMiLCJwb3BvdXQiLCJleGNsdWRlUHJvcGVydGllcyIsInByb2ZpbGVNb2R1bGVzIiwiVXNlclByb2ZpbGVDb21wb25lbnQiLCJQcm9maWxlUHJvcHMiLCJjb25uZWN0ZWRQcm9maWxlU3RvcmUiLCJVc2VyUHJvZmlsZSIsInJlbmRlcjQiLCJwcm9maWxlIiwiVjJDX0xheWVyIiwia2V5dXBMaXN0ZW5lciIsInRyYW5zZm9ybSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNoYW5nZUNhdGVnb3J5Iiwic2VhcmNoS2V5RG93biIsImNoZWNrQ29ubmVjdGlvbiIsImNvbm5lY3QiLCJHdWlsZFN0b3JlIiwiQXZhdGFyRGVmYXVsdHMiLCJTb3J0ZWRHdWlsZFN0b3JlIiwic2VsZWN0ZWRDYXRlZ29yeSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwiY29ubmVjdGlvbiIsImZldGNoIiwic2VydmVyIiwiam9pbmVkIiwiZW5kIiwidGVybSIsImNhdGVnb3J5QnV0dG9ucyIsInRvdGFsIiwic2J2IiwiY29udGVudFNjcm9sbGVyIiwic2VydmVyQ2FyZCIsInBpbm5lZCIsImFjY2VwdEludml0ZSIsImludml0ZV9jb2RlIiwiam9pbkVuZFBvaW50IiwiaWRlbnRpZmllciIsImNyZWRlbnRpYWxzIiwid2luZG93T3B0aW9ucyIsInNjcmVlblgiLCJzY3JlZW5ZIiwiam9pbldpbmRvdyIsIkJyb3dzZXJXaW5kb3ciLCJ3ZWJDb250ZW50cyIsImxvYWRVUkwiLCJyZXNpemFibGUiLCJtYXhpbWl6YWJsZSIsIm1pbmltaXphYmxlIiwiYWx3YXlzT25Ub3AiLCJjZW50ZXIiLCJ3ZWJQcmVmZXJlbmNlcyIsIm5vZGVJbnRlZ3JhdGlvbiIsImJkU2VydmVyIiwib25saW5lIiwibWVtYmVycyIsImljb25VcmwiLCJuYXRpdmVqb2luIiwic2VydmVyMiIsImd1aWxkTGlzdCIsImdldEZsYXR0ZW5lZEd1aWxkSWRzIiwiZGVmYXVsdExpc3QiLCJERUZBVUxUX0FWQVRBUlMiLCJTZXJ2ZXJDYXJkIiwiZmFsbGJhY2siLCJmbG9vciIsImNvbm5lY3RFbmRQb2ludCIsIlNpZGViYXJWaWV3IiwidG9vbHMiLCJUb29scyIsIlRhYkJhclNlcGFyYXRvciIsInNlYXJjaElucHV0IiwiVGFiQmFySGVhZGVyIiwiVGFiQmFySXRlbSIsIm1heExlbmd0aCIsInNlYXJjaGlucHV0Iiwibm90Q29ubmVjdGVkIiwiY29sdW1uTW9kdWxlIiwibWluSGVpZ2h0IiwibGluZUhlaWdodCIsIlYyQ19TZXJ2ZXJDYXJkIiwiaW1hZ2VFcnJvciIsImNhcmRNb2R1bGUiLCJjYXJkIiwiY2FyZFByaW1hcnkiLCJfaG9yaXpvbnRhbFJldmVyc2UiLCJ3cmFwTW9kdWxlIiwibm9XcmFwIiwic3RyZWFtZXJNb2RlRW5hYmxlZCIsIm9uRXJyb3IiLCJoYW5kbGVFcnJvciIsImRyYWdnYWJsZSIsImhvcml6b250YWwiLCJWMkNfU2lkZWJhclZpZXciLCJTY3JvbGxlciIsImZhZGUiLCJkYXJrIiwiVjJDX1JlbG9hZEljb24iLCJ4bWxucyIsIlYyQ19TY3JvbGxlciIsInNjcm9sbGVyTW9kdWxlMSIsInNjcm9sbGVySG9yaXpvbnRhbCIsInNjcm9sbGVyTW9kdWxlMiIsInNpZGViYXJSZWdpb25TY3JvbGxlciIsIndyYXBwZXJDbGFzcyIsInNjcm9sbGVyRmFkZSIsInNjcm9sbGVyQ2xhc3MiLCJjb250ZW50UmVnaW9uU2Nyb2xsZXIiLCJjb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwIiwidGhlbWVHaG9zdCIsInNjcm9sbGVyVHJhY2siLCJWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIlNldHRpbmdzR3JvdXAiLCJWMkNfU2V0dGluZ3NHcm91cCIsImJ1dHRvbkNvbXBvbmVudCIsIlYyQ19TZXR0aW5nc1RpdGxlIiwiY2xhc3NuYW1lcyIsImdldENsYXNzTmFtZSIsIlN3aXRjaEl0ZW0iLCJiZXRhIiwidXNlclNldHRpbmdzVm9pY2UiLCJWMkNfVGFiQmFySGVhZGVyIiwiVjJDX1RhYkJhckl0ZW0iLCJWMkNfVGFiQmFyU2VwYXJhdG9yIiwiaW50ZXJ2YWxNb2R1bGUxIiwiSW50ZXJ2YWwiLCJUaW1lUmVuZGVyIiwiX2ludGVydmFsIiwiZ2V0VXBkYXRlZFRpbWUiLCJnZXREaWZmIiwiY2hlY2tVbml4IiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsInJlbmRlclRpbWUiLCJudW1iZXIiLCJyZW1vdmVaZXJvIiwidXNlZFByb3BzIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfRU5EIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfU1RBUlQiLCJWMkNfVG9vbHMiLCJ0b29sc01vZHVsZSIsInRvb2xzQ29udGFpbmVyIiwiY29udGFpbmVyTW9kdWxlIiwiY2xvc2VCdXR0b24iLCJjbG9zZUJ1dHRvbkJvbGQiLCJrZXliaW5kIiwia2V5YmluZEJvbGQiLCJUb29sdGlwQ2xhc3NlcyIsImdldFRvb2x0aXBDbGFzc2VzIiwiVG9vbHRpcExheWVycyIsImdldFRvb2x0aXBMYXllcnMiLCJnZXRDbGFzcyIsInNpZGVPckNvbG9yIiwidXBwZXJDYXNlIiwidG9vbHRpcENsYXNzIiwiY2xhc3NFeGlzdHMiLCJ0b1B4IiwiRW11bGF0ZWRUb29sdGlwIiwicHJldmVudEZsaXAiLCJ0b29sdGlwRWxlbWVudCIsInRvb2x0aXAiLCJsYWJlbEVsZW1lbnQiLCJ0b29sdGlwQ29udGVudCIsInBvaW50ZXJFbGVtZW50IiwidG9vbHRpcFBvaW50ZXIiLCJwb3BvdXRzIiwiY2FuU2hvd0Fib3ZlIiwiY2FuU2hvd0JlbG93IiwiY2FuU2hvd0xlZnQiLCJjYW5TaG93UmlnaHQiLCJfY2xhc3NOYW1lIiwic2hvd0Fib3ZlIiwic2hvd0JlbG93Iiwic2hvd0xlZnQiLCJzaG93UmlnaHQiLCJjZW50ZXJIb3Jpem9udGFsbHkiLCJjZW50ZXJWZXJ0aWNhbGx5Iiwibm9kZWNlbnRlciIsImZpbmRET01Ob2RlIiwiVjJDX1hTdmciXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FB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Q0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLCtCOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLGtDIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBtaW5pbXVtRGlzY29yZFZlcnNpb24gPSBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBtaW5TdXBwb3J0ZWRWZXJzaW9uID0gXCIwLjMuMFwiO1xyXG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjRcIjtcclxuLypcclxuZXhwb3J0IGNvbnN0IExDQ2hhbmVsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJMaWdodGNvcmQncyBjaGFuZ2Vsb2dcIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCBpcyBub3cgYXZhaWxhYmxlICFcIixcclxuICAgICAgICAgICAgICAgIFwiV2UgcmVtb3ZlZCBlbW90ZXMuIFRoYXQncyBzYWQgZm9yIHBlb3BsZSB3aG8gd2VyZSBhY3R1YWxseSB1c2luZyBpdCwgYnV0IGl0IHdhcyBsZWFkaW5nIHRvIG1vcmUgbG9hZGluZyB0aW1lIGFuZCBzb21lIGJhc2ljIHdvcmRzIHdlcmUgZW1vdGUuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBpbWFnZTogXCJodHRwczovL2kuaW1ndXIuY29tL3NmTmhxd1AucG5nXCIsXHJcbiAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcclxuICAgIHN1YnRpdGxlOiBcInZcIityZW1vdGUuZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb24sXHJcbiAgICBmb290ZXI6IChmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGlmKCFUZXh0RWxlbWVudCB8fCAhTW9kYWxTdGFjaylyZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBCRFYyLmpvaW5MQygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0RWxlbWVudCwge3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICB9KSgpXHJcbn0qL1xyXG5leHBvcnQgY29uc3QgYmJkQ2hhbmdlbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiQkJEJ3MgY2hhbmdlbG9nLlwiLFxyXG4gICAgY2hhbmdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiV2hhdCdzIE5ldz9cIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiKipMaWdodGNvcmQqKiBpcyBub3cgdXNpbmcgQmFuZGFnZWRCRC4gVGhhdCBtZWFucyBhbGwgcGx1Z2lucyB5b3Ugd2VyZSB1c2luZyBjYW4gYmUgdXNlZCB0b28gIVwiLFxyXG4gICAgICAgICAgICAgICAgXCIqKldpbmRvdyBUcmFuc3BhcmVuY3kqKiBjaGFuZ2VzIHdlcmUgbWFkZSB0byBtb3JlIGNvbXBhdGlibGUgd2l0aCBleHRlcm5hbCB3aW5kb3cgbWFuYWdlcnMgYW5kIGFkZG9ucyBsaWtlIEdsYXNzdHJvbi5cIixcclxuICAgICAgICAgICAgICAgIFwiSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaGFzIG9uY2UgYWdhaW4gYmVlbiBjaGFuZ2VkIHNsaWdodGx5IHRvIGhvcGVmdWxseSBpbXByb3ZlIGxvYWRpbmcgdGltZXMuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJCdWcgRml4ZXNcIixcclxuICAgICAgICAgICAgdHlwZTogXCJmaXhlZFwiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCJTb21lIGZpeGVzIHJlbGF0ZWQgdG8gc2hvd2luZyBtb2RhbHMgaW4gdGhlIGBCZEFwaWAuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcclxuICAgIFwiQ3VzdG9tIGNzcyBsaXZlIHVwZGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMFwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMVwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXHJcblxyXG4gICAgLyogQ29yZSAqL1xyXG4gICAgLyogPT09PT09ICovXHJcbiAgICBcIlB1YmxpYyBTZXJ2ZXJzXCI6ICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMVwiLCAgaW5mbzogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTWluaW1hbCBNb2RlXCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0yXCIsICBpbmZvOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50cy5cIiwgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkhpZGUgQ2hhbm5lbHNcIjogICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtM1wiLCAgaW5mbzogXCJIaWRlIGNoYW5uZWxzIGluIG1pbmltYWwgbW9kZVwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiRGFyayBNb2RlXCI6ICAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy01XCIsICBpbmZvOiBcIk1ha2UgY2VydGFpbiBlbGVtZW50cyBkYXJrIGJ5IGRlZmF1bHQod2lwKVwiLCAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIjI0IEhvdXIgVGltZXN0YW1wc1wiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtNlwiLCAgaW5mbzogXCJSZXBsYWNlIDEyaHIgdGltZXN0YW1wcyB3aXRoIHByb3BlciBvbmVzXCIsICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiQ29sb3JlZCBUZXh0XCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy03XCIsICBpbmZvOiBcIk1ha2UgdGV4dCBjb2xvciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCIsICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG5cclxuICAgIC8qIENvbnRlbnQgKi9cclxuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjYW4gUGx1Z2luc1wiOiAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTZcIiwgaW5mbzogXCJTY2FuIHBsdWdpbnMgZm9yIGFueSB0aHJlYXQgdGhhdCBjYW4gYmUgaGlkZGVuIGluc2lkZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJBdXRvbWF0aWMgTG9hZGluZ1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy01XCIsIGluZm86IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkVuYWJsZSBFZGl0IEJ1dHRvblwiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTdcIiwgaW5mbzogXCJFbmFibGUgYW4gRWRpdCBCdXR0b24gb24gdGhlIHBsdWdpbiBhbmQgdGhlbWUgcGFuZWwuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcblxyXG4gICAgLyogRGV2ZWxvcGVyICovXHJcbiAgICBcIkRldmVsb3BlciBNb2RlXCI6ICAgICAgICAgXHQgIHtpZDogXCJiZGEtZ3MtOFwiLCBpbmZvOiBcIkRldmVsb3BlciBNb2RlIFRvZ2dsZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJSZWFjdCBEZXZUb29sc1wiOlx0XHRcdCAge2lkOiBcInJlYWN0RGV2VG9vbHNcIiwgaW5mbzogXCJBZGRzIHJlYWN0IGRldmVsb3BlciB0b29scyB0byB0aGUgZGV2dG9vbHMuIE11c3QgYmUgaW5zdGFsbGVkIGluIEdvb2dsZSBDaHJvbWUgb24geW91ciBwYy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiAgICAgIHtpZDogXCJiZC1kaXNhYmxlXCIsICBpbmZvOiBcIkRpc2FibGUgQmV0dGVyZGlzY29yZCAocGx1Z2lucywgdGhlbWVzLCBldGMpIChOb3QgaW1wbGVtZW50ZWQpLlwiLCBpbXBsZW1lbnRlZDogZmFsc2UsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJCbHVyIFBlcnNvbmFsIEluZm9ybWF0aW9uXCI6ICB7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTJcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzIHNwZWNpYWwgY2FsbGluZyBiZWF0LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRldmVsb3BlciBPcHRpb25zXCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMVwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgJiBMaWdodGNvcmQncyBJbnRlcm5hbCBEZXZlbG9wZXIgT3B0aW9ucy4gVGhpcyBhbGxvdyB0aGUgXFxcIkV4cGVyaW1lbnRzXFxcIiB0YWIsIHRoZSBcXFwiRGV2ZWxvcGVyIE9wdGlvbnNcXFwiIHRhYiBhbmQgdGhlIFxcXCJMaWdodGNvcmQgQXBpXFxcIiBzZWN0aW9uLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRW5hYmxlIExpZ2h0Y29yZCBTZXJ2ZXJzXCI6ICAge2lkOiBcImxpZ2h0Y29yZC01XCIsIGluZm86IFwiRW5hYmxlIExpZ2h0Y29yZCdzIHNlcnZlcnMuIERpc2FibGluZyB0aGlzIHdpbGwgZGlzYWJsZSBjdXN0b20gYmFkZ2VzLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRpc2FibGUgdHlwaW5nXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtN1wiLCBpbmZvOiBcIkRvbid0IGxldCBvdGhlciBzZWUgeW91J3JlIHR5cGluZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJMaWdodGNvcmQgVGFic1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLThcIiwgaW5mbzogXCJBbGxvd3MgeW91IHRvIGxhdW5jaCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgTGlnaHRjb3JkIGluIHRoZSBzYW1lIHdpbmRvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cclxuICAgIFwiQWx3YXlzLW9uLVRvcFwiOiAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0zXCIsIGluZm86IFwiRW5hYmxlIHRoZSB3aW5kb3cncyBBbHdheXMtb24tVG9wIG1vZGUsIHdoZXJlIExpZ2h0Y29yZCBzdGF5cyBvbiB0b3Agb2Ygb3RoZXIgYXBwbGljYXRpb25zLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcIk5vIFdpbmRvdyBCb3VuZHNcIjogICAgICAgICAgIHtpZDogXCJub193aW5kb3dfYm91bmRcIiwgaW5mbzogXCJEaXNhYmxlIFdpbmRvdyBCb3VuZHMuIENhbiBiZSB1c2VmdWwgaWYgeW91IHVzZSBhIHdpbmRvdyBtYW5hZ2VyLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXCJFbmFibGUgR2xhc3N0cm9uXCI6ICAgICAgICAgICB7aWQ6IFwiZW5hYmxlX2dsYXNzdHJvblwiLCBpbmZvOiBcIkVuYWJsZSBHbGFzc3Ryb24uIElmIHlvdSdyZSBub3QgdXNpbmcgdHJhbnNwYXJlbnQgdGhlbWVzLCB0aGlzIGNhbiByZWR1Y2UgbGFnLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcclxuICAgIC8qKiBSaWNoUHJlc2VuY2UgKi9cclxuICAgIFwiRW5hYmxlXCI6ICAgICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIsIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJzdGF0dXNcIn1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29va2llID0ge1xyXG4gICAgXCJiZGEtZ3MtMVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTNcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtNlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTdcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy04XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0wXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0yXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtN1wiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtYlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWRjLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLWRtLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy02XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtN1wiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXdwLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstYmV0YVwiOiB0cnVlLFxyXG4gICAgXCJyZWFjdERldlRvb2xzXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTJcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNFwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTdcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC04XCI6IGZhbHNlLFxyXG4gICAgXCJub193aW5kb3dfYm91bmRcIjogZmFsc2UsXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XHJcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcclxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcclxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXHJcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXHJcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcclxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXHJcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xyXG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblxyXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcclxuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcclxuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XHJcbmxvY2FsU3RvcmFnZUZpeCgpO1xyXG5sb2FkaW5nSWNvbigpO1xyXG5cclxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcclxuICAgIC8vIHZhbHVlID0gdHlwZW9mKHZhbHVlKSAhPT0gXCJvYmplY3RcIiA/IHZhbHVlIDogbmV3IFByb3h5KHZhbHVlLCB7XHJcbiAgICAvLyAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gb2JqW21vZF07XHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIFV0aWxzLmVycihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIFwiVHJ5aW5nIHRvIG92ZXJ3cml0ZSBkZXByZWNhdGVkIEJEIGdsb2JhbHNcIik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBrZXksIHtcclxuICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTsgIFxyXG59O1xyXG5cclxuXHJcbmltcG9ydCAqIGFzIEdsb2JhbHMgZnJvbSBcIi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcclxuZm9yIChjb25zdCBrZXkgb2YgZ2xvYmFsS2V5cykgZGVwcmVjYXRlR2xvYmFsKGtleSwgR2xvYmFsc1trZXldKTtcclxuXHJcblxyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9tb2R1bGVzL2NsYXNzTm9ybWFsaXplclwiO1xyXG5cclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwicGx1Z2luTW9kdWxlXCIsIHBsdWdpbk1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInRoZW1lTW9kdWxlXCIsIHRoZW1lTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJCREV2ZW50c1wiLCBCREV2ZW50cyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInNldHRpbmdzUGFuZWxcIiwgc2V0dGluZ3NQYW5lbCk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDb250ZW50TWFuYWdlclwiLCBDb250ZW50TWFuYWdlcik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNsYXNzTm9ybWFsaXplclwiLCBDbGFzc05vcm1hbGl6ZXIpO1xyXG5cclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcblxyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgQ29yZSk7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnLCBtZXRob2RzKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xyXG4gICAgICAgIENvcmUuc2V0TWV0aG9kcyhtZXRob2RzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBmdW5jdGlvbiBwYXRjaE1vZHVsZUxvYWQoKSB7XHJcbi8vICAgICBjb25zdCBuYW1lc3BhY2UgPSBcImJldHRlcmRpc2NvcmRcIjtcclxuLy8gICAgIGNvbnN0IHByZWZpeCA9IGAke25hbWVzcGFjZX0vYDtcclxuLy8gICAgIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIik7XHJcbi8vICAgICBjb25zdCBsb2FkID0gTW9kdWxlLl9sb2FkO1xyXG4vLyAgICAgLy8gY29uc3QgcmVzb2x2ZUZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWU7XHJcblxyXG4vLyAgICAgTW9kdWxlLl9sb2FkID0gZnVuY3Rpb24ocmVxdWVzdCkge1xyXG4vLyAgICAgICAgIGlmIChyZXF1ZXN0ID09PSBuYW1lc3BhY2UgfHwgcmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuLy8gICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gcmVxdWVzdC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XHJcbi8vICAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQgPT0gXCJhcGlcIikgcmV0dXJuIEJkQXBpO1xyXG4vLyAgICAgICAgIH1cclxuXHJcbi8vICAgICAgICAgcmV0dXJuIGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuLy8gICAgIH07XHJcblxyXG4vLyAgICAgLy8gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgPSBmdW5jdGlvbiAocmVxdWVzdCwgcGFyZW50LCBpc01haW4pIHtcclxuLy8gICAgIC8vICAgICBpZiAocmVxdWVzdCA9PT0gXCJiZXR0ZXJkaXNjb3JkXCIgfHwgcmVxdWVzdC5zdGFydHNXaXRoKFwiYmV0dGVyZGlzY29yZC9cIikpIHtcclxuLy8gICAgIC8vICAgICAgICAgY29uc3QgY29udGVudFBhdGggPSBQbHVnaW5NYW5hZ2VyLmdldFBsdWdpblBhdGhCeU1vZHVsZShwYXJlbnQpO1xyXG4vLyAgICAgLy8gICAgICAgICBpZiAoY29udGVudFBhdGgpIHJldHVybiByZXF1ZXN0O1xyXG4vLyAgICAgLy8gICAgIH1cclxuXHJcbi8vICAgICAvLyAgICAgcmV0dXJuIHJlc29sdmVGaWxlbmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgLy8gfTtcclxuXHJcbi8vICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbi8vICAgICAgICAgTW9kdWxlLl9sb2FkID0gbG9hZDtcclxuLy8gICAgIH07XHJcbi8vIH1cclxuXHJcbi8vIHBhdGNoTW9kdWxlTG9hZCgpO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwsIGRNb2RlLCBwdWJsaWNTZXJ2ZXJzTW9kdWxlO1xyXG4vLyB2YXIgYmRDb25maWcgPSBudWxsOyIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHYyTG9hZGVyLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxuICAgIHYyTG9hZGVyLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xyXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgY29udGVudFdpbmRvd0dldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIikuZ2V0O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IFJlZmxlY3QuYXBwbHkoY29udGVudFdpbmRvd0dldHRlciwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWwuYmluZChvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdCwgXCJhcHBseVwiLCB7dmFsdWU6IFJlZmxlY3QuYXBwbHksIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgXCJiaW5kXCIsIHt2YWx1ZTogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG5cclxuICAgIGNvbnN0IG9PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47XHJcbiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICBpZiAodXJsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkvd2ViaG9va3NcIikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG9PcGVuLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBURkhvdXIge1xyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvbXBhY3QgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyID0gKCkgPT4ge2NhbmNlbENvenkoKTsgY2FuY2VsQ29tcGFjdCgpO307IC8vIENhbmNlbCBib3RoXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlMjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbCAmJiBlLmRlZmF1bHQuaGFzQ2hhbm5lbClbMF0uZGVmYXVsdFxyXG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG5sZXQgRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG5cclxuY29uc3QgYmxvY2tlZCA9IHt9XHJcblxyXG5sZXQgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xyXG4gICAgaWYodXNlck1vZHVsZSlyZXR1cm4gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBBbnRpQm90RE0ge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmFudGlETSA9IHRoaXMuYW50aURNLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci51bnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGFudGlETShldil7XHJcbiAgICAgICAgaWYoIWV2Lm1lc3NhZ2UuYXV0aG9yLmJvdClyZXR1cm5cclxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcclxuICAgICAgICBpZihldi5tZXNzYWdlLmd1aWxkX2lkKXJldHVyblxyXG5cclxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcclxuICAgICAgICBpZighY2hhbm5lbClyZXR1cm4gLy8gbWlnaHQgYmUgYnJva2VuXHJcblxyXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cclxuXHJcbiAgICAgICAgaWYoYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0pcmV0dXJuIC8vIElmIHRoZSB1c2VyIHVuYmxvY2sgdGhlIGJvdCwgRG9uJ3QgYmxvY2sgaXQgYWdhaW4uXHJcblxyXG4gICAgICAgIGlmKHNjYW5NZXNzYWdlKGV2Lm1lc3NhZ2UpKXtcclxuICAgICAgICAgICAgYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0gPSB0cnVlXHJcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ3YXJuaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbiAgICAgICAgICAgIHJlbGF0aW9uU2hpcE1vZHVsZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcChldi5tZXNzYWdlLmF1dGhvci5pZCwge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwiQ29udGV4dE1lbnVcIlxyXG4gICAgICAgICAgICB9LCAyKVxyXG4gICAgICAgICAgICBpZighRE1Nb2R1bGUpRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG4gICAgICAgICAgICBETU1vZHVsZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwoY2hhbm5lbC5pZCwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzY2FuTWVzc2FnZShtZXNzYWdlKXtcclxuICAgIGlmKC8oZGlzY29yZFxcLmdnfGRpc2NvcmRcXC5jb21cXC9pbnZpdGVcXC98ZGlzY29yZGFwcFxcLmNvbVxcL2ludml0ZVxcLykvZy50ZXN0KG1lc3NhZ2UuY29udGVudCkpcmV0dXJuIHRydWVcclxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG59XHJcbmZ1bmN0aW9uIEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIHNlYXJjaCl7XHJcbiAgICBsZXQgZW1iZWRzID0gbWVzc2FnZS5lbWJlZHNcclxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gZW1iZWRzLm1hcChlbWJlZCA9PiB7XHJcbiAgICAgICAgaWYoZW1iZWQudHlwZSAhPT0gXCJyaWNoXCIpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZGVzY3JpcHRpb24gfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKCgoZW1iZWQuZm9vdGVyIHx8IFwiXCIpICYmIGVtYmVkLmZvb3Rlci50ZXh0IHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZihlbWJlZC5maWVsZHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZS52YWx1ZS5pbmNsdWRlcyhzZWFyY2gpIHx8IGUubmFtZS5pbmNsdWRlcyhzZWFyY2gpXHJcbiAgICAgICAgfSkuaW5jbHVkZXModHJ1ZSkpcmV0dXJuIHRydWVcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9KS5pbmNsdWRlcyh0cnVlKVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc1JQQywgZGVmYXVsdFJQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gQkRNb2R1bGVzLmdldChtPT5tLkRpc3BhdGNoZXImJm0uZGVmYXVsdCYmbS5kZWZhdWx0LmRpc3BhdGNoKVswXS5kZWZhdWx0XHJcbmNvbnN0IEFjdGlvblR5cGVzID0gQkRNb2R1bGVzLmdldChtPT5tLkFjdGlvblR5cGVzKVswXS5BY3Rpb25UeXBlc1xyXG5cclxuY29uc3Qgc29ja2V0SWQgPSBcImxpZ2h0Y29yZC1zcG9vZi1zb2NrZXRcIlxyXG5jb25zdCBwaWQgPSBwcm9jZXNzLnBpZFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEN1c3RvbVJpY2hQcmVzZW5jZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IHNldHRpbmdzUlBDXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBmb3JtYXRlZEdhbWUoKXtcclxuICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkID09PSBmYWxzZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGxldCBnYW1lID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcclxuICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgIH1cclxuXHJcbiAgICBzZW5kR2FtZSgpe1xyXG4gICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0NBTF9BQ1RJVklUWV9VUERBVEUsXHJcbiAgICAgICAgICAgIHNvY2tldElkLFxyXG4gICAgICAgICAgICBwaWQsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiB0aGlzLmZvcm1hdGVkR2FtZVxyXG4gICAgICAgIH0pICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCkge1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFbmFibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0KHNldHRpbmdzUlBDIHx8IE9iamVjdC5jcmVhdGUoZGVmYXVsdFJQQykpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGlzYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmV0Y2hBc3NldHMoYXBwbGljYXRpb25JZCl7XHJcbiAgICAgICAgbGV0IGFzc2V0cyA9IGF3YWl0IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEFzc2V0cylbMF0uZ2V0QXNzZXRzKGFwcGxpY2F0aW9uSWQpXHJcbiAgICAgICAgaWYoYXNzZXRzLnVuZGVmaW5lZCAmJiB0eXBlb2YgYXNzZXRzLnVuZGVmaW5lZCA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQXBwbGljYXRpb25cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0c1xyXG4gICAgfVxyXG5cclxuICAgIHNldChhY3Rpdml0eSl7XHJcbiAgICAgICAgdGhpcy5nYW1lID0gYWN0aXZpdHlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3BsdWdpbkNvb2tpZSwgdGhlbWVDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBtYWluQ29yZSBmcm9tIFwiLi9jb3JlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBCZEFwaSA9IHtcclxuICAgIGdldCBSZWFjdCgpIHsgcmV0dXJuIEJEVjIuUmVhY3Q7IH0sXHJcbiAgICBnZXQgUmVhY3RET00oKSB7IHJldHVybiBCRFYyLlJlYWN0RG9tOyB9LFxyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiBCRFYyLlJlYWN0Q29tcG9uZW50O30sXHJcbiAgICBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtyZXR1cm4gVXRpbHMuV2luZG93Q29uZmlnRmlsZTt9LFxyXG4gICAgZ2V0IHNldHRpbmdzKCkge3JldHVybiBzZXR0aW5nczt9LFxyXG4gICAgZ2V0IGVtb3RlcygpIHtyZXR1cm4ge319LCAvLyBkZXByZWNhdGVkLCBkZWxldGVkIGFsbCBlbW90ZXMgZnJvbSBiZXR0ZXJkaXNjb3JkLlxyXG4gICAgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfSxcclxuICAgIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxufTtcclxuXHJcbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRXaW5kb3dQcmVmZXJlbmNlKGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkuaW5qZWN0Q1NTID0gZnVuY3Rpb24gKGlkLCBjc3MpIHtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQoaWQpLCBjc3MpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLmNsZWFyQ1NTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIERPTS5hZGRTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NLnJlbW92ZVNjcmlwdChET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vR2V0IGFub3RoZXIgcGx1Z2luXHJcbi8vbmFtZSA9IG5hbWUgb2YgcGx1Z2luXHJcbkJkQXBpLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBpZiAoYmRwbHVnaW5zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGJkcGx1Z2luc1tuYW1lXS5wbHVnaW47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbi8vR2V0IEJldHRlckRpc2NvcmQgQ29yZVxyXG5CZEFwaS5nZXRDb3JlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgVXRpbHMud2FybihcIkRlcHJlY2F0aW9uIE5vdGljZVwiLCBgQmRBcGkuZ2V0Q29yZSgpIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuYCk7XHJcbiAgICByZXR1cm4gbWFpbkNvcmU7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBtb2RhbC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxyXG4gKi9cclxuQmRBcGkuYWxlcnQgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIHtjYW5jZWxUZXh0OiBudWxsfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcclxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICovXHJcbkJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vU2hvdyB0b2FzdCBhbGVydFxyXG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIFV0aWxzLnNob3dUb2FzdChjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRBbGwoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKHByb3BzKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3RvdHlwZXMgPSBmdW5jdGlvbiguLi5wcm90b3MpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3RvdHlwZXMocHJvdG9zKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeURpc3BsYXlOYW1lID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUobmFtZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIHJlYWN0IGluc3RhbmNlXHJcbkJkQXBpLmdldEludGVybmFsSW5zdGFuY2UgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2Ygd2luZG93LmpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgbm9kZSA9IG5vZGVbMF07XHJcbiAgICByZXR1cm4gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKG5vZGUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmxvYWREYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXREYXRhID0gQmRBcGkuc2F2ZURhdGE7XHJcblxyXG4vLyBEZWxldGVzIGRhdGFcclxuQmRBcGkuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5kZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG4vLyBQYXRjaGVzIG90aGVyIGZ1bmN0aW9uc1xyXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBVdGlscy5tb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXHJcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gVXRpbHMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcclxufTtcclxuXHJcbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcclxuQmRBcGkuc3VwcHJlc3NFcnJvcnMgPSBmdW5jdGlvbihtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBVdGlscy5zdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpO1xyXG59O1xyXG5cclxuLy8gVGVzdHMgZm9yIHZhbGlkIEpTT05cclxuQmRBcGkudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICByZXR1cm4gVXRpbHMudGVzdEpTT04oZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gISFwbHVnaW5Db29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1RoZW1lRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXRoZW1lQ29va2llW25hbWVdO1xyXG59O1xyXG5cclxuQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gISFzZXR0aW5nc0Nvb2tpZVtpZF07XHJcbn07XHJcblxyXG5CZEFwaS5lbmFibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCB0cnVlKTtcclxufTtcclxuXHJcbkJkQXBpLmRpc2FibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XHJcbn07XHJcblxyXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCAhc2V0dGluZ3NDb29raWVbaWRdKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuXHJcblxyXG5jb25zdCBtYWtlQWRkb25BUEkgPSAoY29va2llLCBsaXN0LCBtYW5hZ2VyKSA9PiBuZXcgY2xhc3MgQWRkb25BUEkge1xyXG5cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIG1hbmFnZXIuZm9sZGVyO31cclxuXHJcbiAgICBpc0VuYWJsZWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhIWNvb2tpZVtuYW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5kaXNhYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZShuYW1lKSB7XHJcbiAgICAgICAgaWYgKGNvb2tpZVtuYW1lXSkgdGhpcy5kaXNhYmxlKG5hbWUpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5lbmFibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5yZWxvYWQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KG5hbWUpIHtcclxuICAgICAgICBpZiAobGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtuYW1lXS5wbHVnaW4pIHJldHVybiBsaXN0W25hbWVdLnBsdWdpbjtcclxuICAgICAgICAgICAgcmV0dXJuIGxpc3RbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobGlzdCkubWFwKGsgPT4gdGhpcy5nZXQoaykpLmZpbHRlcihhID0+IGEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQmRBcGkuUGx1Z2lucyA9IG1ha2VBZGRvbkFQSShwbHVnaW5Db29raWUsIGJkcGx1Z2lucywgcGx1Z2luTW9kdWxlKTtcclxuQmRBcGkuVGhlbWVzID0gbWFrZUFkZG9uQVBJKHRoZW1lQ29va2llLCBiZHRoZW1lcywgdGhlbWVNb2R1bGUpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQmRBcGkgPSBCZEFwaSIsIi8qIEJERXZlbnRzICovXHJcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQkRFdmVudHMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlcigpXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJERXZlbnRzID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZGlzcGF0Y2goZXZlbnROYW1lLCAuLi5hcmdzKSB7dGhpcy5lbWl0KGV2ZW50TmFtZSwgLi4uYXJncyk7fVxyXG4gICAgb2ZmKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pIHt0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pO31cclxufTsiLCIvKipcclxuICogQ3JlZGl0cyB0byBAaGVsbGJvdW5kMTMzNyBvbiBnaXRodWIgZm9yIHRoZSBjc3NcclxuICovXHJcblxyXG5pbXBvcnQgRE9NVG9vbHMgZnJvbSBcIi4vZG9tdG9vbHNcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxubGV0IHNlbGVjdG9yc1xyXG5jb25zdCByZW1vdmVEYSA9IFV0aWxzLnJlbW92ZURhXHJcbmZ1bmN0aW9uIGdldFNlbGVjdG9ycygpe1xyXG4gICAgbGV0IHN0YW5kYXJkU2lkZWJhclZpZXcgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxyXG4gICAgaWYoIXN0YW5kYXJkU2lkZWJhclZpZXcpcmV0dXJuIG51bGxcclxuICAgIGxldCBkZWZhdWx0Q2xhc3NOYW1lID0gcmVtb3ZlRGEoc3RhbmRhcmRTaWRlYmFyVmlldy5zdGFuZGFyZFNpZGViYXJWaWV3KVxyXG4gICAgbGV0IHNlbGVjdHMgPSBbXVxyXG4gICAgbGV0IHVzZXJTZXR0aW5nc0FjY291bnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyU2V0dGluZ3NBY2NvdW50KVswXVxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBCRE1vZHVsZXMuZ2V0KGUgPT4gdHlwZW9mIGUuY2hpbGRyZW4gPT09IFwic3RyaW5nXCIpWzBdXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLnBheW1lbnQtaW5mbyAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZXNjcmlwdGlvbiAmJiB0eXBlb2YgZS5kZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIiAmJiBlLmRlc2NyaXB0aW9uLmluY2x1ZGVzKFwiZm9ybVRleHRcIikpWzBdLmRlc2NyaXB0aW9uKX1gKVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnBheW1lbnRTb3VyY2VSb3cpWzBdLnBheW1lbnRTb3VyY2VSb3cpfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdWJUZXh0ICYmIGUuZGVzY3JpcHRpb25XcmFwcGVyKVswXS5zdWJUZXh0KX1gKVxyXG4gICAgaWYodXNlclNldHRpbmdzQWNjb3VudCl7XHJcbiAgICAgICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzQWNjb3VudCl9IGRpdjpudGgtY2hpbGQoMik+ZGl2Om50aC1jaGlsZCgyKT4uJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS52aWV3Qm9keSlbMF0udmlld0JvZHkpfWApXHJcbiAgICAgICAgc2VsZWN0cy5wdXNoKGAuJHtyZW1vdmVEYSh1c2VyU2V0dGluZ3NBY2NvdW50LnVzZXJTZXR0aW5nc1NlY3VyaXR5KX0gLiR7cmVtb3ZlRGEoY2hpbGRyZW4uY2hpbGRyZW4pfSA+IGRpdjpudGgtY2hpbGQoMilgKVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coc2VsZWN0cylcclxuICAgIHJldHVybiBzZWxlY3RzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCbHVyUHJpdmF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMgfHwgZ2V0U2VsZWN0b3JzKClcclxuXHJcbiAgICAgICAgaWYoIXNlbGVjdG9ycyljb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgc2VsZWN0b3JzIHRvIGJsdXIgcGVyc29ubmFsIGluZm9ybWF0aW9ucy5cIikpXHJcbiAgICAgICAgRE9NVG9vbHMuYWRkU3R5bGUoXCJibHVyUHJpdmF0ZVwiLCBgXHJcbiR7c2VsZWN0b3JzLmpvaW4oXCIsIFwiKX0ge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA4NSwuNjgsLjUzKTtcclxuICAgIGZpbHRlcjogYmx1cig0cHgpO1xyXG4gICAgb3BhY2l0eTogLjg7XHJcbn1cclxuXHJcbiR7c2VsZWN0b3JzLm1hcChlID0+IGUrXCI6aG92ZXJcIikuam9pbihcIiwgXCIpfSAge1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGN1YmljLWJlemllciguNTUsLjA5LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBub25lO1xyXG4gICAgb3BhY2l0eTogMTtcclxufWApXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBET01Ub29scy5yZW1vdmVTdHlsZShcImJsdXJQcml2YXRlXCIpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBcImRhXCI7XHJcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENsYXNzTm9ybWFsaXplciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5DbGFzc05vcm1hbGl6ZXIgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJ0RWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemVFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGF0Y2hET01NZXRob2RzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvdWxkSWdub3JlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5lbmRzV2l0aChcInB4XCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiY2hcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJlbVwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcIm1zXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImxheWVyQ29udGFpbmVyLVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIjXCIpICYmICh2YWx1ZS5sZW5ndGggPT0gNyB8fCB2YWx1ZS5sZW5ndGggPT0gNCkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcImNhbGMoXCIpIHx8IHZhbHVlLmluY2x1ZGVzKFwicmdiYVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZUZpbHRlcihtb2R1bGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAobW9kdWxlLl9fZXNNb2R1bGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG1vZHVsZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIG1vZHVsZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1vZHVsZVtiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLnNwbGl0KFwiLVwiKS5sZW5ndGggPT09IDEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdCh2YWx1ZS5zcGxpdChcIiBcIilbMF0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5vcm1hbENsYXNzLm1hdGNoKHJhbmRDbGFzcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoIHx8ICFtYXRjaC5sZW5ndGggfHwgbWF0Y2gubGVuZ3RoIDwgMikgY29udGludWU7IC8vIFNob3VsZG4ndCBldmVyIGhhcHBlbiBzaW5jZSB0aGV5IHBhc3NlZCB0aGUgbW9kdWxlRmlsdGVyLCBidXQgeW91IG5ldmVyIGtub3dcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbWVsQ2FzZSA9IG1hdGNoWzFdLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gKz0gYCAke2NvbXBvbmVudE5hbWV9LSR7Y2FtZWxDYXNlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgbmV3U3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbENsYXNzLnN0YXJ0c1dpdGgoYCR7Y29tcG9uZW50TmFtZX0tYCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgbmV3U3RyaW5nICs9IGAgJHtub3JtYWxDbGFzc31gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gPSBuZXdTdHJpbmcudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBub3JtYWxpemVFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNsZW4gPSBjbGFzc2VzLmxlbmd0aDsgYyA8IGNsZW47IGMrKykge1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KGNsYXNzZXNbY10pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBjbGFzc2VzW2NdLm1hdGNoKHJhbmRDbGFzcylbMV07XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NsYXNzID0gbWF0Y2guc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoYCR7bm9ybWFsaXplZFByZWZpeH0tJHtuZXdDbGFzc31gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbGVtZW50LmNoaWxkcmVuKSB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoY2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldmVydEVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSB0aGlzLnJldmVydEVsZW1lbnQoZWxlbWVudC5jaGlsZHJlblswXSk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB0aGlzLnJldmVydEVsZW1lbnQoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBjb25zdCB0b1JlbW92ZSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICBpZiAoY2xhc3Nlc1tjXS5zdGFydHNXaXRoKGAke25vcm1hbGl6ZWRQcmVmaXh9LWApKSB0b1JlbW92ZS5wdXNoKGNsYXNzZXNbY10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4udG9SZW1vdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoRE9NTWV0aG9kcygpIHtcclxuICAgICAgICBjb25zdCBjb250YWlucyA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnM7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHRva2VuKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHRva2VucyA9IHRva2VuLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoY29udGFpbnMsIHRoaXMsIFt0b2tlbi5zcGxpdChcIiBcIilbMF1dKTtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRva2Vucy5ldmVyeSh0ID0+IGNvbnRhaW5zLmNhbGwodGhpcywgdCkpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGFkZCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGFkZCwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmUgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShyZW1vdmUsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbG9yZWRUZXh0IHtcclxuICAgIGluamVjdENvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbENvbG9yZWRUZXh0KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWxDb2xvcmVkVGV4dCA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtiZWZvcmU6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgICAgIGlmICghcHJvcHMgfHwgIXByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUNvbnRlbnQgPSBwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlQ29udGVudC50eXBlIHx8ICFtZXNzYWdlQ29udGVudC50eXBlLnR5cGUgfHwgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLmRpc3BsYXlOYW1lICE9IFwiTWVzc2FnZUNvbnRlbnRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFR5cGUgPSBtZXNzYWdlQ29udGVudC50eXBlLnR5cGU7XHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFR5cGUuX19vcmlnaW5hbE1ldGhvZCkgcmV0dXJuOyAvLyBEb24ndCBwYXRjaCBhZ2FpblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUgPSBmdW5jdGlvbihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbFR5cGUocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9sZUNvbG9yID0gc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSA/IHByb3BzLm1lc3NhZ2UuY29sb3JTdHJpbmcgfHwgXCJcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5zdHlsZSA9IHtjb2xvcjogcm9sZUNvbG9yfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxUeXBlO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSwgb3JpZ2luYWxUeXBlKTtcclxuICAgICAgICB9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZU1hcmt1cCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF0ubWFya3VwXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5cIitjbGFzc05hbWVNYXJrdXAuc3BsaXQoXCIgXCIpWzBdKS5mb3JFYWNoKGVsZW0gPT4ge1xyXG4gICAgICAgICAgICBlbGVtLnN0eWxlLnNldFByb3BlcnR5KFwiY29sb3JcIiwgXCJcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtiZENvbmZpZywgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IHBsdWdpbkNlcnRpZmllciwgeyBlbmNyeXB0U2V0dGluZ3NDYWNoZSwgZGVjcnlwdFNldHRpbmdzQ2FjaGUsIHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCB7IGNhcHR1cmVSZWplY3Rpb25TeW1ib2wgfSBmcm9tIFwiZXZlbnRzXCI7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpLk1vZHVsZTtcclxuTW9kdWxlLmdsb2JhbFBhdGhzLnB1c2gocGF0aC5yZXNvbHZlKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwLmdldEFwcFBhdGgoKSwgXCJub2RlX21vZHVsZXNcIikpO1xyXG5jbGFzcyBNZXRhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNZXRhRXJyb3JcIjtcclxuICAgIH1cclxufVxyXG5jb25zdCBvcmlnaW5hbEpTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXTtcclxuY29uc3Qgb3JpZ2luYWxDU1NSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA/IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gOiAoKSA9PiB7cmV0dXJuIG51bGw7fTtcclxuY29uc3Qgc3BsaXRSZWdleCA9IC9bXlxcU1xcclxcbl0qPyg/OlxcclxcbnxcXG4pW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcclxuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcclxuXHJcbmV4cG9ydCBsZXQgYWRkb25DYWNoZSA9IHt9XHJcblxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hFeHRlbnNpb25zKCl7XHJcbiAgICAgICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cclxuICAgICAgICBoYXNQYXRjaGVkID0gdHJ1ZVxyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJ0aGVtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGx1Z2luc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fcGx1Z2luc0ZvbGRlciB8fCAodGhpcy5fcGx1Z2luc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInBsdWdpbnMvXCIpKSk7fVxyXG4gICAgZ2V0IHRoZW1lc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fdGhlbWVzRm9sZGVyIHx8ICh0aGlzLl90aGVtZXNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJ0aGVtZXMvXCIpKSk7fVxyXG5cclxuICAgIGxvYWRBZGRvbkNlcnRpZmllckNhY2hlKCl7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikgIT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSBKU09OLnBhcnNlKGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikpKVxyXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0ge31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyhhZGRvbkNhY2hlKVxyXG4gICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICBpZighdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKXJldHVybiBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcblxyXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbe1xyXG4gICAgICAgICAgICAgICAga2V5OiBcInRpbWVzdGFtcFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwicmVzdWx0XCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJoYXNoXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiXHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBpZighKHByb3Aua2V5IGluIHZhbHVlKSB8fCB0eXBlb2YgdmFsdWVbcHJvcC5rZXldICE9PSBwcm9wLnR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2YWx1ZS5oYXNoICE9PSBrZXkpe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodmFsdWUucmVzdWx0LnN1c3BlY3QpeyAvLyByZWZldGNoIGZyb20gcmVtb3RlIHRvIGJlIHN1cmUgeW91J3JlIHVwIHRvIGRhdGUuXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFkZG9uQ2FjaGUoKXtcclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKEpTT04uc3RyaW5naWZ5KGFkZG9uQ2FjaGUpKSlcclxuICAgIH1cclxuXHJcbiAgICB3YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcclxuICAgICAgICBpZiAodGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IGNvbnRlbnRUeXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0gPSBmcy53YXRjaChiYXNlRm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xyXG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSByZXR1cm4gcGx1Z2luTW9kdWxlLnVubG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhlbWVNb2R1bGUudW5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUucmVsb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUucmVsb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0uY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV07XHJcbiAgICB9XHJcblxyXG4gICAgZXh0cmFjdE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcclxuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIGNvbnN0IGhhc05ld01ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvKipcIik7XHJcbiAgICAgICAgaWYgKGhhc05ld01ldGEpIHJldHVybiB0aGlzLnBhcnNlTmV3TWV0YShjb250ZW50KTtcclxuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU9sZE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IHJhd01ldGEgPSBtZXRhLnN1YnN0cmluZyhtZXRhLmxhc3RJbmRleE9mKFwiLy9NRVRBXCIpICsgNiwgbWV0YS5sYXN0SW5kZXhPZihcIiovL1wiKSk7XHJcbiAgICAgICAgaWYgKG1ldGEuaW5kZXhPZihcIk1FVEFcIikgPCAwKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlscy50ZXN0SlNPTihyYXdNZXRhKTtcclxuICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xyXG4gICAgICAgIHBhcnNlZC5mb3JtYXQgPSBcImpzb25cIjtcclxuICAgICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlTmV3TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2sgPSBjb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XHJcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XHJcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcclxuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xyXG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcclxuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcclxuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xyXG4gICAgICAgIG91dC5mb3JtYXQgPSBcImpzZG9jXCI7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250ZW50UmVxdWlyZSh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWlyZSA9IGlzUGx1Z2luID8gb3JpZ2luYWxKU1JlcXVpcmUgOiBvcmlnaW5hbENTU1JlcXVpcmU7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZSwgZmlsZW5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gc2VsZi5wbHVnaW5zRm9sZGVyIDogc2VsZi50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aCA9IHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgXCJ1dGY4XCIpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gVXRpbHMuc3RyaXBCT00oY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNlbGYuZXh0cmFjdE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgICAgIG1ldGEuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgbWV0YS5hZGRlZCA9IHN0YXRzLmF0aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEubW9kaWZpZWQgPSBzdGF0cy5tdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLnNpemUgPSBzdGF0cy5zaXplO1xyXG4gICAgICAgICAgICBpZiAoIWlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBtZXRhLmNzcyA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobWV0YS5mb3JtYXQgPT0gXCJqc29uXCIpIG1ldGEuY3NzID0gbWV0YS5jc3Muc3BsaXQoXCJcXG5cIikuc2xpY2UoMSkuam9pbihcIlxcblwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBgbW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIG1vZHVsZS5maWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaWRFeHBvcnQgPSAhVXRpbHMuaXNFbXB0eShtb2R1bGUuZXhwb3J0cyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlkRXhwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YS50eXBlID0gbW9kdWxlLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXRpbHMud2FybihcIk1vZHVsZSBOb3QgRXhwb3J0ZWRcIiwgYCR7bWV0YS5uYW1lfSwgcGxlYXNlIHN0YXJ0IHNldHRpbmcgbW9kdWxlLmV4cG9ydHNgKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ICs9IGBcXG5tb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O1xcbm1vZHVsZS5leHBvcnRzLnR5cGUgPSAke21ldGEuZXhwb3J0cyB8fCBtZXRhLm5hbWV9O2A7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIGZpbGVuYW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQbGFjZWhvbGRlclBsdWdpbihkYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtwbHVnaW46IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIGdldE5hbWU6ICgpID0+IHtyZXR1cm4gZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWU7fSxcclxuICAgICAgICAgICAgICAgIGdldEF1dGhvcjogKCkgPT4ge3JldHVybiBcIj8/P1wiO30sXHJcbiAgICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogKCkgPT4ge3JldHVybiBkYXRhLm1lc3NhZ2UgPyBkYXRhLm1lc3NhZ2UgOiBcIlRoaXMgcGx1Z2luIHdhcyB1bmFibGUgdG8gYmUgbG9hZGVkLiBDaGVjayB0aGUgYXV0aG9yJ3MgcGFnZSBmb3IgdXBkYXRlcy5cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0VmVyc2lvbjogKCkgPT4ge3JldHVybiBcIj8/P1wiO31cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgIGZpbGVuYW1lOiBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBzb3VyY2U6IGRhdGEuc291cmNlID8gZGF0YS5zb3VyY2UgOiBcIlwiLFxyXG4gICAgICAgICAgICB3ZWJzaXRlOiBkYXRhLndlYnNpdGUgPyBkYXRhLndlYnNpdGUgOiBcIlwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pe1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgfSwgKGhhc2gpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IGhhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGVbcmVzdWx0Lmhhc2hdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNoOiByZXN1bHQuaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3VzcGVjdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29tcGlsZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB3aW5kb3cucmVxdWlyZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICBpZighY29udGVudC5uYW1lKXJldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNhbm5vdCBlc2NhcGUgdGhlIElELlwiLCBlcnJvcjoge21lc3NhZ2U6IFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwiLCBzdGFjazogXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCJ9fVxyXG4gICAgICAgIGNvbnRlbnQuaWQgPSBVdGlscy5lc2NhcGVJRChjb250ZW50Lm5hbWUpO1xyXG4gICAgICAgIGlmIChpc1BsdWdpbikge1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQudHlwZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29udGVudC5wbHVnaW4gPSBuZXcgY29udGVudC50eXBlKCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV07XHJcbiAgICAgICAgICAgICAgICBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBiZHRoZW1lc1tjb250ZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICBiZHRoZW1lc1tjb250ZW50Lm5hbWVdID0gY29udGVudDtcclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgdW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkZWxldGUgd2luZG93LnJlcXVpcmUuY2FjaGVbd2luZG93LnJlcXVpcmUucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgdW5sb2FkZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fTt9XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHt3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiBmYWxzZTt9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGNhbnRVbmxvYWQgPSB0aGlzLnVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgICAgIGlmIChjYW50VW5sb2FkKSByZXR1cm4gY2FudFVubG9hZDtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE5ld0NvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYmFzZWRpcik7XHJcbiAgICAgICAgY29uc3QgY29udGVudExpc3QgPSBPYmplY3QudmFsdWVzKGlzUGx1Z2luID8gYmRwbHVnaW5zIDogYmR0aGVtZXMpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjb250ZW50TGlzdC5maWx0ZXIodCA9PiAhZmlsZXMuaW5jbHVkZXModC5maWxlbmFtZSkpLm1hcChjID0+IGlzUGx1Z2luID8gYy5wbHVnaW4uZ2V0TmFtZSgpIDogYy5uYW1lKTtcclxuICAgICAgICBjb25zdCBhZGRlZCA9IGZpbGVzLmZpbHRlcihmID0+ICFjb250ZW50TGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKGZpbGVFbmRpbmcpICYmIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmKSkuaXNGaWxlKCkpO1xyXG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRBbGxDb250ZW50KHR5cGUpIHtcclxuICAgICAgICB0aGlzLnBhdGNoRXh0ZW5zaW9ucygpXHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikgZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGx1Z2lucygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInBsdWdpblwiKTt9XHJcbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb250ZW50TWFuYWdlciAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XHJcbiAqLyIsImltcG9ydCB7YmRDb25maWcsIG1pblN1cHBvcnRlZFZlcnNpb24sIGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbkVycm9ycywgYmR0aGVtZUVycm9ycywgYmJkQ2hhbmdlbG9nLCBkZWZhdWx0Q29va2llLCBjdXJyZW50RGlzY29yZFZlcnNpb24sIGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvYmRMb2dvXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcclxuaW1wb3J0IFBsdWdpbkNlcnRpZmllciBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xyXG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIlxyXG5pbXBvcnQge3JlbW90ZSBhcyBlbGVjdHJvbn0gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0IHYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbiAgICAvLyBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhEYXRhU3RvcmUuY29uZmlnRmlsZSkpO1xyXG4gICAgLy8gdGhpcy5pbml0KCk7XHJcbn1cclxuXHJcbmxldCBtZXRob2RzXHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIGNvbmZpZyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRNZXRob2RzID0gZnVuY3Rpb24obSkge1xyXG4gICAgbWV0aG9kcyA9IG1cclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmZsYXQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJiZFZlcnNpb24gKyBcIiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb2xkIHZlcnNpb24gKFwiICsgY3VycmVudERpc2NvcmRWZXJzaW9uICsgXCIpIG9mIERpc2NvcmQuIFBsZWFzZSB1cGRhdGUgeW91ciBEaXNjb3JkIGluc3RhbGxhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiZENvbmZpZy52ZXJzaW9uIDwgbWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmRDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBQb3dlcmNvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0cmlidXRlcy5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcclxuXHJcbiAgICAvKlxyXG4gICAgY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gYmRDb25maWcudXBkYXRlciA/IGJkQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IGJkQ29uZmlnLmxhdGVzdFZlcnNpb247XHJcbiAgICBpZiAobGF0ZXN0TG9jYWxWZXJzaW9uID4gYmRDb25maWcudmVyc2lvbikge1xyXG4gICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcIlVwZGF0ZSBBdmFpbGFibGVcIiwgW2BUaGVyZSBpcyBhbiB1cGRhdGUgYXZhaWxhYmxlIGZvciBCYW5kYWdlZEJEJ3MgSW5qZWN0b3IgKCR7bGF0ZXN0TG9jYWxWZXJzaW9ufSkuYCwgXCJZb3UgY2FuIGVpdGhlciB1cGRhdGUgYW5kIHJlc3RhcnQgbm93LCBvciBsYXRlci5cIl0sIHtcclxuICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiVXBkYXRlIE5vd1wiLFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBcIk1heWJlIExhdGVyXCIsXHJcbiAgICAgICAgICAgIG9uQ29uZmlybTogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25VcGRhdGVGYWlsZWQgPSAoKSA9PiB7VXRpbHMuYWxlcnQoXCJDb3VsZCBOb3QgVXBkYXRlXCIsIGBVbmFibGUgdG8gdXBkYXRlIGF1dG9tYXRpY2FsbHksIHBsZWFzZSBkb3dubG9hZCB0aGUgaW5zdGFsbGVyIGFuZCByZWluc3RhbGwgbm9ybWFsbHkuPGJyIC8+PGJyIC8+PGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5Eb3dubG9hZCBJbnN0YWxsZXI8L2E+YCk7fTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlkVXBkYXRlID0gYXdhaXQgdGhpcy51cGRhdGVJbmplY3RvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlkVXBkYXRlKSByZXR1cm4gb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHAgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICAgICAgICAgICAgICBhcHAucmVsYXVuY2goKTtcclxuICAgICAgICAgICAgICAgICAgICBhcHAuZXhpdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlRmFpbGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0qL1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICB0aGlzLmluaXRTZXR0aW5ncygpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgc2V0dGluZ3NQYW5lbC5pbml0aWFsaXplU2V0dGluZ3MoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBBZGRvbnMgQ2FjaGVcIilcclxuICAgIGF3YWl0IGNvbnRlbnRNYW5hZ2VyLmxvYWRBZGRvbkNlcnRpZmllckNhY2hlKClcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW5zKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgVGhlbWVzXCIpO1xyXG4gICAgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lcygpO1xyXG5cclxuICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCBhdG9iKERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKSkpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1kYy0wXCJdKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi5idG4tZGlzY29ubmVjdFwiKS5jbGljaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgUGx1Z2luQ2VydGlmaWVyLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKS5sZW5ndGgpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSB7XHJcbiAgICAgICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IGJkcGx1Z2luRXJyb3JzLCB0aGVtZXM6IGJkdGhlbWVFcnJvcnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcclxuICAgIGlmIChiYmRWZXJzaW9uID4gcHJldmlvdXNWZXJzaW9uKSB7XHJcbiAgICAgICAgaWYgKGJiZENoYW5nZWxvZykgdGhpcy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwidmVyc2lvblwiLCBiYmRWZXJzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBFbW9qaU1vZHVsZS5zdGFydCgpXHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVzc2FnZUhlYWRlci5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIENoYXQgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZW1iZXJMaXN0LmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgTWVtYmVyIExpc3QgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIGlmKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KXtcclxuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGFsZXJ0Lm9uQ2xvc2UocmVzb2x2ZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIilcclxuICAgIGlmKGxvZ28pe1xyXG4gICAgICAgIGxvZ28uc3R5bGUudG9wID0gXCIzcHhcIlxyXG4gICAgICAgIGxvZ28uaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCI3MFwiIHZpZXdCb3g9XCIwIDAgNzIuNTQgMTBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4LCBtYXJnaW4tdG9wOiAxMHB4XCI+XHJcbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjAgOS45NyA2LjUgMTAgNi41IDcuNjMgMi40MSA3LjYzIDIuNDEgMC4yNiAwIDIuMjYgMCA5Ljk3XCIvPlxyXG48L3N2Zz5gXHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEF0dHJpYnV0ZXMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGxldCBhdHRyaWJzUGF0Y2hzID0gW11cclxuICAgIHRoaXMuY2FuY2VsUGF0Y2hBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgYXR0cmlic1BhdGNocy5mb3JFYWNoKGUgPT4gZSgpKVxyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlKCF2Mi5NZXNzYWdlQ29tcG9uZW50KWF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKVxyXG4gICAgXHJcbiAgICAvLyBUT0RPOiB0cnkgdG8gcGF0Y2ggY29ycmVjdGx5IHRoZSB1c2VyIHBvcG91dCBvbiBhIG5leHQgdXBkYXRlXHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJEaXNjb3JkVGFnXCIpXHJcbiAgICAudGhlbihEaXNjb3JkVGFnID0+IHtcclxuICAgICAgICBsZXQgRGlzY29yZFRhZ0NvbXAgPSBEaXNjb3JkVGFnLmRlZmF1bHRcclxuICAgICAgICBEaXNjb3JkVGFnLmRlZmF1bHQgPSBmdW5jdGlvbihwcm9wcyl7XHJcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IERpc2NvcmRUYWdDb21wKHByb3BzKVxyXG5cclxuICAgICAgICAgICAgbGV0IGlkID0gdXVpZHY0KClcclxuXHJcbiAgICAgICAgICAgIGxldCBiYWRnZURpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiBcIjVweFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpXHJcblxyXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbcmV0dXJuVmFsdWVdXHJcblxyXG4gICAgICAgICAgICBpZiAocHJvcHMudXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgcHJvcHMudXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChiYWRnZURpdilcclxuICAgICAgICAgICAgbGV0IGRpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBjaGlsZHJlbilcclxuICAgICAgICAgICAgYXBwbHlCYWRnZXMoaWQsIHByb3BzLnVzZXIsIGZhbHNlKVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRpdlxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlKXsgLy8gdGhpcyBjYW4gYmUgYSBibG9ja2VkIG1lc3NhZ2UgKG5vdCBvcGVuZWQpXHJcbiAgICAgICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJkYXRhLW1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcclxuICAgICAgICB9XHJcbiAgICB9fSkpXHJcbiAgICAgICAgLypcclxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJtZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXHJcbiAgICB9fSkpKi9cclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUuY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgIGxldCB0aW1lc0NoZWNrZWQgPSAwO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSBCRFYyLmd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9YCkubGVuZ3RoID4gMCkgdGltZXNDaGVja2VkKys7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lc0NoZWNrZWQgPj0gNTApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPSBcImxvYWRpbmdcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7c2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTt9KTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5qZWN0RXh0ZXJuYWxzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBhd2FpdCBET00uYWRkU2NyaXB0KFwiYWNlLXNjcmlwdFwiLCBcImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2FjZS8xLjIuOS9hY2UuanNcIik7XHJcbiAgICBpZiAod2luZG93LnJlcXVpcmUub3JpZ2luYWwpIHdpbmRvdy5yZXF1aXJlID0gd2luZG93LnJlcXVpcmUub3JpZ2luYWw7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xyXG4gICAgaWYoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSAmJiAhRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSl7XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgZGVmYXVsdENvb2tpZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBkZWZhdWx0UlBDKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5sb2FkU2V0dGluZ3MoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gZGVmYXVsdENvb2tpZSkge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9IGRlZmF1bHRDb29raWVbc2V0dGluZ107XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnByb3RvdHlwZSAmJiBlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zKVxyXG4gICAgLnRoZW4oc2V0dGluZ01vZHVsZSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBnZXRQcmVkaWNhdGVTZWN0aW9ucyA9IHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnNcclxuICAgICAgICBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldFByZWRpY2F0ZVNlY3Rpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG5cclxuICAgICAgICAgICAgaWYocmVzdWx0WzFdLnNlY3Rpb24gPT09IFwiTXkgQWNjb3VudFwiKXsgLy8gdXNlciBzZXR0aW5ncywgbm90IGd1aWxkIHNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICBsZXQgcG9wZWQgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5zZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIodGhpcykpXHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUocG9wZWRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvcGVkLnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59O1xyXG5cclxuXHJcbmxldCBjbGFzc05hbWVMYXllclxyXG5sZXQgY2xhc3NOYW1lU29jaWFsTGlua3NcclxubGV0IGNsYXNzTmFtZU1vZGFsXHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbk1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgcGx1Z2luTW9kdWxlLnJhd09ic2VydmVyKG11dGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXHJcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcblxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTGF5ZXIpY2xhc3NOYW1lTGF5ZXIgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllclxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lU29jaWFsTGlua3MpY2xhc3NOYW1lU29jaWFsTGlua3MgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLnNvY2lhbExpbmtzICYmIHR5cGVvZiBlLnNvY2lhbExpbmtzID09PSBcInN0cmluZ1wiKVswXS5zb2NpYWxMaW5rc1xyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTW9kYWwpY2xhc3NOYW1lTW9kYWwgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1vZGFsICYmIHR5cGVvZiBlLm1vZGFsID09PSBcInN0cmluZ1wiICYmIGUuaW5uZXIgJiYgdHlwZW9mIGUuaW5uZXIgPT09IFwic3RyaW5nXCIgJiYgIWUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlKVswXS5tb2RhbFxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSA9PT0gXCJHVUlMRF9TRVRUSU5HU1wiKXtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVTb2NpYWxMaW5rcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudEVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSAmJiBub2RlLnF1ZXJ5U2VsZWN0b3IoXCIjYWNlX3NldHRpbmdzbWVudVwiKSkgbm9kZS5pZCA9IFwiYWNlX3NldHRpbmdzbWVudV9jb250YWluZXJcIjtcclxuXHJcbiAgICAgICAgICAgIC8vIEVtb2ppIFBpY2tlclxyXG4gICAgICAgICAgICAvL25vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGggJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRvckxlZnQtMUVReFUwXCIpXHJcbiAgICAgICAgICAgIC8vaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyMikgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZUVtb2ppUGlja2VyKS5sZW5ndGggICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lRW1vamlQaWNrZXIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUFuaW1hdG9yTGVmdCkpIHF1aWNrRW1vdGVNZW51Lm9ic0NhbGxiYWNrKG5vZGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBtYWluT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnNob3dDaGFuZ2Vsb2dNb2RhbCA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24odGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaFNvY2lhbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiVGFiQmFyXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+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+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHVzZXIgb2YgcmVzcG9uc2VCb2R5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB1c2Vycy5maW5kKHByb21pc2UgPT4gcHJvbWlzZVswXSA9PT0gdXNlci51c2VyX2lkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlWzFdKHVzZXIuYmFkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIShlcnIgaW5zdGFuY2VvZiBMaWdodGNvcmRFcnJvcikpY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgZmV0Y2hlZEJhZGdlcyl7XHJcbiAgICAgICAgICAgIGlmKCFDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gV2UgZG8gbm90IGhhdmUgdGhlIENvbXBvbmVudCwgc2tpcCBpdC5cclxuICAgICAgICAgICAgaWYoYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gQWxyZWFkeSBpbnNlcnRlZC5cclxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IE9iamVjdC5hc3NpZ24odGhpcy5jYWNoZS5iYWRnZXMsIHtbdXNlcl06IGJhZGdlc30pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cclxuICAgICAgICB9LCA2MDAwMDApO1xyXG5cclxuICAgICAgICByZXNvbHZlKGJhZGdlcylcclxuICAgICAgICBkZWxldGUgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG4gICAgICAgIHJldHVybiBiYWRnZXNcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHJvdXRlLCBtZXRob2QsIGRhdGEpe1xyXG4gICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pe1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgTGlnaHRjb3JkRXJyb3IoXCJUaGUgY3VycmVudCBzZXR0aW5ncyBibG9ja2VkIHRoZSByZXF1ZXN0LlwiKSlcclxuICAgIH1cclxuICAgIHJldHVybiBub2RlRmV0Y2goYCR7Q29uc3RhbnRzLlNFUlZFUl9VUkx9L2FwaS92MSR7cm91dGV9YCwge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ0xJRU5UXCI6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uIHx8IFwiTm9uZTo6QW5vbnltb3VzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLihkYXRhID8ge1xyXG4gICAgICAgICAgICBib2R5OiBkYXRhXHJcbiAgICAgICAgfSA6IHt9KVxyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgTGlnaHRjb3JkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkxpZ2h0Y29yZEVycm9yXCJcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIFNFUlZFUl9VUkw6IFwiaHR0cHM6Ly9saWdodGNvcmQuZGVyb2t1Lnh5elwiLFxyXG4gICAgYmFkZ2VzOiBbIC8vIFRPRE86IEFkZCBtb3JlIGJhZGdlcyArIHNlcnZlciBzaWRlIHN2Z1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgQnVnIEh1bnRlclwiLFxyXG4gICAgICAgICAgICBpZDogXCJmMDQ2OThmNS04MTZiLTQxZTMtYmQwMS05MjI5MTE5M2Q3YTVcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiLFxyXG4gICAgICAgICAgICAgICAgXCI2OTYwMDM0NTY2MTEzODUzOTZcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IEJ1Z0h1bnRlckJhZGdlLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQvbGlnaHRjb3JkL3dpa2kvYmFkZ2VzI2J1Z19odW50ZXJcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJCdWZmb29uXCIsXHJcbiAgICAgICAgICAgIGlkOiBcIjA2OTA0ZDMxLTY1YjQtNDFlYy1hNTBjLTg2NThiYmQxYWY5NlwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiMzg5MDE2ODk1NTQzNzA1NjAyXCIsXHJcbiAgICAgICAgICAgICAgICBcIjY2NDYwMDEzNDUyODY2MzU2NVwiLFxyXG4gICAgICAgICAgICAgICAgXCI2MjUzNTA2NTc4Mjk4OTYyMjRcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IENpcmN1cyxcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL3lvdXR1LmJlL0VKdGI2ei1kbFQ4P3Q9MTQ1XCJcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSb3V0ZXMgPSB7XHJcbiAgICBiYWRnZXM6IGAvdXNlcnMvYmFkZ2VzYFxyXG59IiwiLyoqXHJcbiAqIENvcHlyaWdodCAyMDE4IFphY2hhcnkgUmF1ZW5cclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXHJcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxyXG4gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxyXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkXHJcbiAqIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcclxuICogSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEFcclxuICogUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxyXG4gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0ZcclxuICogQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFXHJcbiAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxyXG4gKiBcclxuICogRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQkRQbHVnaW5MaWJyYXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcmZhY2VcclxuICogQG5hbWUgT2Zmc2V0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUb3Agb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IC0gUmlnaHQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSAtIEJvdHRvbSBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIExlZnQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodCAtIE91dGVyIGhlaWdodCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIE91dGVyIHdpZHRoIG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICovXHJcblxyXG4gLyoqXHJcbiAqIEZ1bmN0aW9uIHRoYXQgYXV0b21hdGljYWxseSByZW1vdmVzIGFkZGVkIGxpc3RlbmVyLlxyXG4gKiBAY2FsbGJhY2sgbW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyXHJcbiAqL1xyXG4gXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTVRvb2xzIHtcclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcclxuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuXHQgKiBBZGRzIGEgc3R5bGUgdG8gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGFzIHRoZSBlbGVtZW50IGlkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNzcyAtIGNzcyB0byBhZGQgdG8gdGhlIGRvY3VtZW50XHJcblx0ICovXHJcblx0c3RhdGljIGFkZFN0eWxlKGlkLCBjc3MpIHtcclxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKERPTVRvb2xzLmNyZWF0ZUVsZW1lbnQoYDxzdHlsZSBpZD1cIiR7aWR9XCI+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+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKXJldHVyblxyXG4gICAgaWYoIWlzRW1vamlEaXNhYmxlZClpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5cclxuICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZCA9IGZ1bmN0aW9uKGVtb2ppKXtcclxuICAgICAgICBpZihpc1VzYWJsZSl7XHJcbiAgICAgICAgICAgIGlmKGVtb2ppLnN1cnJvZ2F0ZXMgfHwgZW1vamkuZGl2ZXJzaXR5KXJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFbW9qaURpc2FibGVkLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIlxyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIlxyXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5pbXBvcnQgeyBhZGRvbkNhY2hlIH0gZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5cclxuY29uc3QgY2FjaGUgPSB7fVxyXG5jb25zdCBjYWNoZTIgPSB7fVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5DZXJ0aWZpZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2goYXR0YWNobWVudCwgaWQpe1xyXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50LCBpZClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlzVHJ1c3RlZChoYXNoKXtcclxuICAgICAgICByZXR1cm4gY2FjaGVbaGFzaF0gJiYgIWNhY2hlW2hhc2hdLnN1c3BlY3RcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKXtcclxuICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXHJcbiAgICBmb3IobGV0IGtleXdvcmQgb2YgZGF0YS5zcGxpdCgvW15cXHdcXGRdKy9nKSl7XHJcbiAgICAgICAgZm9yKGxldCBvb2Ygb2YgW1xyXG4gICAgICAgICAgICBcInRva2VuXCIsXHJcbiAgICAgICAgICAgIFwiZW1haWxcIixcclxuICAgICAgICAgICAgXCJwaG9uZVwiLFxyXG4gICAgICAgICAgICBcIk1GQVwiLFxyXG4gICAgICAgICAgICBcIjJmYVwiLFxyXG4gICAgICAgICAgICBcImNoaWxkX3Byb2Nlc3NcIixcclxuICAgICAgICAgICAgXCJsb2NhbFN0b3JhZ2VcIixcclxuICAgICAgICAgICAgXCJldmFsXCIsXHJcbiAgICAgICAgICAgIFwiZ2V0R2xvYmFsXCIsXHJcbiAgICAgICAgICAgIFwiQnJvd3NlcldpbmRvd1wiXHJcbiAgICAgICAgXSl7XHJcbiAgICAgICAgICAgIGlmKGtleXdvcmQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhvb2YudG9Mb3dlckNhc2UoKSkgJiYgIWtleXdvcmQudG9Mb3dlckNhc2UoKSA9PT0gXCJkb210b2tlbmxpc3RcIil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhvb2YsIGtleXdvcmQpXHJcbiAgICAgICAgICAgICAgICBpc0hhcm1mdWwgPSBcInRva2VuIHN0ZWFsZXIvdmlydXNcIlxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXNIYXJtZnVsKWJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bCl7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKS8vIHJlbW92aW5nIHRoZSBNRVRBIGNvbW1lbnQgZnJvbSBwbHVnaW5zXHJcbiAgICAgICAgaWYoKC92YXIgW1xcd1xcZF8kXSs9XFxbXCIvZ2kpLnRlc3Qobm9fY29tbWVudHMpKXtcclxuICAgICAgICAgICAgaXNIYXJtZnVsID0gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAgICAgY29uc3QgcmVnZXhwcyA9IFtcclxuICAgICAgICAgICAgICAgIC8qKiBoZXhhZGVjaW1hbCAqL1xyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydcXCkvZyxcclxuICAgICAgICAgICAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICAgICAgLyoqIG1hbmdsZWQgKi9cclxuICAgICAgICAgICAgICAgIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAvLyBiKCcweDAnKVxyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gYignMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVnZXggb2YgcmVnZXhwcyl7XHJcbiAgICAgICAgICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgICAgICAgICAgICAgIGlmKHJlZ2V4LnRlc3Qobm9fY29tbWVudHMpKWlzSGFybWZ1bCA9IFwib2JmdXNjYXRpb24vaGlkZGVuIGNvZGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICBjYWNoZVtoYXNoXSA9IHtcclxuICAgICAgICBzdXNwZWN0OiB0cnVlLFxyXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXHJcbiAgICAgICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcclxuICAgICAgICBoYXJtOiBpc0hhcm1mdWwsXHJcbiAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICBmaWxlbmFtZVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zb2xlLmxvZyhgRm91bmQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICR7Y2FjaGVbaGFzaF0udHlwZS50b0xvd2VyQ2FzZSgpfTogJHtjYWNoZVtoYXNoXS5uYW1lfWApXHJcblxyXG4gICAgcmVzdWx0Q2FsbGJhY2soY2FjaGVbaGFzaF0pXHJcbn1cclxuXHJcbmNvbnN0IGhhc2hUb1VybCA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIYXNoKGhhc2gsIGRhdGEsIGZpbGVuYW1lLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spe1xyXG4gICAgY29uc29sZS5sb2coYEZpbGU6ICR7ZmlsZW5hbWV9IGhhc2g6ICR7aGFzaH1gKVxyXG4gICAgaWYoIWNhY2hlW2hhc2hdKXtcclxuICAgICAgICBub2RlRmV0Y2goXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvTGlnaHRjb3JkL2ZpbGVoYXNoZXNAbWFzdGVyL2hhc2hlcy9cIitoYXNoLCB7IC8vIFVzaW5nIG5vZGUtZmV0Y2ggdG8gYnlwYXNzIGNvcnNcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnQgLy8gaGF2ZSB0byBzZXQgdXNlci1hZ2VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxyXG4gICAgICAgICAgICAgICAgY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIHJlc3VsdC5oYXNoID0gaGFzaFxyXG4gICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUgPSBmaWxlbmFtZVxyXG5cclxuICAgICAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHRcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcclxuICAgICAgICB9KS5jYXRjaChjb25zb2xlLmVycm9yKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cclxuXHJcbiAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGUoX19wYXRoLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2sgPSAoaGFzaCkgPT4ge30sIGlzRnJvbUxvYWRlciA9IGZhbHNlKXsgICAgXHJcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXHJcblxyXG4gICAgY3JlYXRlUmVhZFN0cmVhbShfX3BhdGgpLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSlcclxuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgIH0pLm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gX19wYXRoXHJcblxyXG4gICAgICAgIGlmKGlzRnJvbUxvYWRlciAmJiBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdKXtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICBpZih2YWx1ZS50aW1lc3RhbXAgPCAoRGF0ZS5ub3coKSAtIDYuMDQ4ZSs4KSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgY29udGVudE1hbmFnZXIuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHZhbHVlLnJlc3VsdClcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYmFzZW5hbWUoX19wYXRoKSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrKVxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcclxuICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpcmV0dXJuXHJcbiAgICBpZighYXR0YWNobWVudC51cmwuc3RhcnRzV2l0aChcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL1wiKSlyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpXHJcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuXHJcbiAgICBub2RlRmV0Y2goYXR0YWNobWVudC51cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50XHJcbiAgICAgICAgfVxyXG4gICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGRvZXNuJ3QgZXhpc3QuXCIpXHJcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXHJcbiAgICAgICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuICAgICAgICByZXMuYm9keS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXHJcblxyXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxyXG4gICAgICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybFxyXG5cclxuICAgICAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSlcclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcclxuICAgICAgICAgICAgICAgIGlmKGVsZW0pZWxlbS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KS5jYXRjaCgoKT0+e30pXHJcbn1cclxuXHJcbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxubGV0IGNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcblxyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXHJcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcclxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVybiAvLyBhbHJlYWR5IGNlcnRpZmllZC9kaXYgZG9lcyBub3QgZXhpc3QgYW55bW9yZS5cclxuXHJcbiAgICBpZighZmxvd2VyU3Rhck1vZHVsZSlmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxuICAgIGlmKCFjaGlsZE1vZHVsZSljaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxyXG4gICAgXHJcbiAgICBpZihyZXN1bHQuc3VzcGVjdCl7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBcclxuICAgICAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkLnRhZ05hbWUgPT09IFwiQVwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgKipcIitmaWxlbmFtZStcIioqIG1pZ2h0IGJlIGRhbmdlcm91cyAqKihcIityZXN1bHQuaGFybStcIikqKi4gXFxuXFxuKipXZSBkb24ndCByZWNvbW1hbmQgdG8gZG93bmxvYWQgaXQqKi4gSG93ZXZlciwgeW91IGNhbiBzdGlsbCBkbyBpdCBiZWxvdy5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBBbnl3YXlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJEb24ndCAhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLnJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoY2hpbGQuaHJlZilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihbXCJkaXZcIl0uaW5jbHVkZXMoY2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0Tm9kZShkaXYucGFyZW50Tm9kZSlcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLlwifSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuc3ZnKVswXS5zdmcsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgNDAgMzJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC0zMilcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDpcIiNmMDQ3NDdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOkJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSwgZGl2KVxyXG4gICAgfWVsc2UgaWYoIXJlc3VsdC5vZmZpY2lhbCl7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIGNlcnRpZmllZCBieSBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwiLCBmbG9hdDogXCJsZWZ0XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTcuNCwxMS4xNyw0LDguNjIsNSw3LjI2bDIsMS41M0wxMC42NCw0bDEuMzYsMVpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhbmQgbGF1bmNoIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIi4gWW91IGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8uXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVGZXRjaChsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBhd2FpdCByZXMuYnVmZmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbnN0YWxsUGF0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhpbnN0YWxsUGF0aCwgY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixzdHlsZTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiZmlsbFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNwYW4sIGRpdilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICBsZXQgc3BhbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZGlzcGxheTogXCJpbmhlcml0XCJ9fSwgW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiB3YXMgbWFkZSBieSB0aGUgZGV2ZWxvcGVycyBvZiBMaWdodGNvcmQuXCIsIHN0eWxlOlwiYnJhbmRcIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwiLHN0cm9rZTpcIiMzNjM5M2ZcIixzdHlsZTp7Y29sb3I6XCIjNDA4N2VkXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcImN1cnJlbnRDb2xvclwiLCBcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLGQ6XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgbXVzdCBlbmFibGUgaXQgaW4gdGhlIHNldHRpbmdzLlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgYW5kIEluc3RhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGdldEtleWVkQXJyYXkoY2FjaGUyKS5maW5kKGUgPT4gZVsxXSA9PT0gcmVzdWx0Lmhhc2gpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXllZEFycmF5KG9iail7XHJcbiAgICBsZXQgYXJyID0gW11cclxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IHtcclxuICAgICAgICBhcnIucHVzaChbaywgb2JqW2tdXSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXJyXHJcbn1cclxuXHJcbmxldCBrZXkgPSBudWxsXHJcbmxldCBzYXZlID0gbnVsbFxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQobT0+bS5PYmplY3RTdG9yYWdlKVxyXG4udGhlbihsb2NhbFN0b3JhZ2VNb2R1bGUgPT4ge1xyXG4gICAgbGV0IGxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZU1vZHVsZS5pbXBsXHJcbiAgICBzYXZlID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIsIGJ0b2EoSlNPTi5zdHJpbmdpZnkoa2V5KSkpXHJcbiAgICB9XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9LCAxMDAwMDApO1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCB2YWwgPSBzYWZlSlNPTlBhcnNlKGF0b2IobG9jYWxTdG9yYWdlLmdldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiKSkpXHJcbiAgICAgICAgaWYodmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgIUFycmF5LmlzQXJyYXkodmFsKSB8fCB2YWwubGVuZ3RoICE9PSAyIHx8IHZhbC5maW5kKGUgPT4gdHlwZW9mIGUgIT09IFwic3RyaW5nXCIpIHx8IEJ1ZmZlci5mcm9tKHZhbFswXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAxNiB8fCBCdWZmZXIuZnJvbSh2YWxbMV0sIFwiYmFzZTY0XCIpLmxlbmd0aCAhPT0gMzIpe1xyXG4gICAgICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgICAgIHNhdmUoKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAga2V5ID0gdmFsXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgZ2VuZXJhdGVLZXkoKVxyXG4gICAgICAgIHNhdmUoKVxyXG4gICAgfVxyXG59KVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkoKXtcclxuICAgIGtleSA9IFtjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLCBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXVxyXG59XHJcblxyXG5mdW5jdGlvbiBzYWZlSlNPTlBhcnNlKGpzb24pe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IG5ldyBFcnJvcihlKSA6IGVcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGEpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFwiYWVzLTI1Ni1jYmNcIiwgQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKSlcclxuICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwiYmFzZTY0XCIpKTtcclxuICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgfWNhdGNoKGUpe1xyXG4gICAgICAgIHJldHVybiBcInt9XCJcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICBsZXQgYXJncyA9IFtCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpXVxyXG4gICAgXHJcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIC4uLmFyZ3MpO1xyXG4gICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJ1dGY4XCIpKTtcclxuICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2VuY3J5cHRlZCwgY2lwaGVyLmZpbmFsKCldKTtcclxuICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoXCJiYXNlNjRcIilcclxufSIsImltcG9ydCB7YmRwbHVnaW5FcnJvcnMsIHBsdWdpbkNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5Nb2R1bGUgPSB0aGlzXG4gICAgfVxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXI7fVxufVxuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9hZFBsdWdpbkRhdGEoKTtcbiAgICBiZHBsdWdpbkVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRQbHVnaW5zKCkpKTtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHBsdWdpbiwgbmFtZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4uZ2V0TmFtZSgpO1xuICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIGxvYWRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtuYW1lXSkgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBsdWdpbkNvb2tpZVtuYW1lXSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJzdGFydCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcbiAgICB9XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMuY2hhbm5lbFN3aXRjaC5iaW5kKHRoaXMpKTtcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RhcnRQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RhcnRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBwbHVnaW4gKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0b3BQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0b3AoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RvcHBlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcbiAgICBlbHNlIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IChjb25zb2xlLmxvZyhwLmZpbGVuYW1lLCBmaWxlbmFtZSkpIHx8IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpLnBsdWdpbjtcbiAgICB0cnkgeyBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7fVxuICAgIGNhdGNoIChlcnIpIHtpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyXX0pO31cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tbG9hZGVkXCIsIHBsdWdpbi5nZXROYW1lKCkpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51bmxvYWRQbHVnaW4gPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBkZWxldGUgYmRwbHVnaW5zW3BsdWdpbl07XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi11bmxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICB0aGlzLnVubG9hZFBsdWdpbihiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBjb25zdCBlbmFibGVkID0gcGx1Z2luQ29va2llW3BsdWdpbl07XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQgJiYgdHlwZW9mKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKCk7XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1yZWxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMucmVsb2FkUGx1Z2luKG5hbWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc29sZS5sb2coXCJFZGl0IFwiICsgZnVsbFBhdGgpO1xuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlUGx1Z2luTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInBsdWdpblwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInBsdWdpbnNcIik7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zYXZlUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiLCBwbHVnaW5Db29raWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5uZXdNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uTWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25NZXNzYWdlKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uTWVzc2FnZSBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuY2hhbm5lbFN3aXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vblN3aXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25Td2l0Y2goKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJhd09ic2VydmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vYnNlcnZlcihlKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGx1Z2luTW9kdWxlKCk7IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IFYyQ19QdWJsaWNTZXJ2ZXJzIGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IExheWVyIGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL2xheWVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfUHVibGljU2VydmVycyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uID0gdGhpcy5fYXBwZW5kQnV0dG9uLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlYyX1B1YmxpY1NlcnZlcnMgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KExheWVyLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIiwgaWQ6IFwicHVic2xheWVyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1B1YmxpY1NlcnZlcnMsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwdWJzbGF5ZXJyb290XCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyc1xyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVycyAmJiBlLmxheWVyKVswXS5sYXllcnMuc3BsaXQoXCIgXCIpWzBdXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGNvbnN0IGxheWVycyA9IERPTS5xdWVyeShcIi5sYXllcnMsIC5cIitjbGFzc05hbWVMYXllcnMpO1xyXG4gICAgICAgIGlmICghbGF5ZXJzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbGF5ZXJzLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChcIjxkaXYgaWQ9J3B1YnNsYXllcnJvb3QnPlwiKSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgaWYgKCFyb290KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXJzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29tcG9uZW50LCByb290KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ0biA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWxpXCIgY2xhc3M9XCIke0JEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtfVwiPmApO1xyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgYnRuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICBjb25zdCBsYWJlbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWJ1dHRvblwiIGNsYXNzPVwiJHtcIndyYXBwZXItMjVlVkluIFwiICsgQkRWMi5ndWlsZENsYXNzZXMuY2lyY2xlQnV0dG9uTWFza31cIj5wdWJsaWM8L2Rpdj5gKTtcclxuICAgICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge3RoaXMucmVuZGVyKCk7fSk7XHJcbiAgICAgICAgYnRuLmFwcGVuZChsYWJlbCk7XHJcbiAgICAgICAgcmV0dXJuIGJ0bjtcclxuICAgIH1cclxuXHJcbiAgICBfYXBwZW5kQnV0dG9uKCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZG93bmxvYWRQcm9ncmVzcyAmJiBlLnR1dG9yaWFsQ29udGFpbmVyKVswXS50dXRvcmlhbENvbnRhaW5lcilcclxuICAgICAgICBdXHJcbiAgICAgICAgaWYgKERPTS5xdWVyeShcIiNiZC1wdWItbGlcIikpIHJldHVybjtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSBET00ucXVlcnkoYGRpdi4ke2NsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyfSA+IGRpdmApO1xyXG4gICAgICAgIERPTS5hZnRlcihndWlsZHMsIHRoaXMuYnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRCdXR0b24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdCA9IHdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTmF2aWdhYmxlR3VpbGRzXCIpO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdE9sZCA9IHdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xyXG4gICAgICAgIGlmICghR3VpbGRMaXN0ICYmICFHdWlsZExpc3RPbGQpIFV0aWxzLndhcm4oXCJQdWJsaWNTZXJ2ZXJcIiwgXCJDYW4ndCBmaW5kIEd1aWxkTGlzdCBjb21wb25lbnRcIik7XHJcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRMaXN0ID8gR3VpbGRMaXN0IDogR3VpbGRMaXN0T2xkLnByb3RvdHlwZSwgR3VpbGRMaXN0ID8gXCJkZWZhdWx0XCIgOiBcInJlbmRlclwiLCB7YWZ0ZXI6IHRoaXMuX2FwcGVuZEJ1dHRvbn0pO1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUJ1dHRvbigpIHtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2goKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5ndWlsZFBhdGNoO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNiZC1wdWItbGlcIikucmVtb3ZlKCk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtzZXR0aW5ncywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsU2lkZWJhclwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xyXG5pbXBvcnQgdGZIb3VyIGZyb20gXCIuLzI0aG91clwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgcHVibGljU2VydmVyc01vZHVsZSBmcm9tIFwiLi9wdWJsaWNTZXJ2ZXJzXCI7XHJcbmltcG9ydCB2b2ljZU1vZGUgZnJvbSBcIi4vdm9pY2VNb2RlXCI7XHJcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vY2xhc3NOb3JtYWxpemVyXCI7XHJcbmltcG9ydCBkTW9kZSBmcm9tIFwiLi9kZXZNb2RlXCI7XHJcblxyXG5pbXBvcnQgU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQ3NzRWRpdG9yIGZyb20gXCIuLi91aS9jc3NFZGl0b3JcIjtcclxuaW1wb3J0IENhcmRMaXN0IGZyb20gXCIuLi91aS9hZGRvbmxpc3RcIjtcclxuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4vQ3VzdG9tUmljaFByZXNlbmNlXCI7XHJcbmltcG9ydCBWMkNfQWNjb3VudEluZm9zIGZyb20gXCIuLi91aS9BY2NvdW50SW5mb3NcIjtcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBBbnRpQWRETSBmcm9tIFwiLi9BbnRpQWRETVwiO1xyXG5pbXBvcnQgYmx1clByaXZhdGUgZnJvbSBcIi4vYmx1clByaXZhdGVcIjtcclxuaW1wb3J0IGRpc2FibGVUeXBpbmcgZnJvbSBcIi4vZGlzYWJsZVR5cGluZ1wiO1xyXG5pbXBvcnQgQXBpUHJldmlldyBmcm9tIFwiLi4vdWkvQXBpUHJldmlld1wiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuLi91aS9zd2l0Y2hcIjtcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi4vdWkvbWFyZ2ludG9wXCI7XHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBIaXN0b3J5IGZyb20gXCIuLi91aS9pY29ucy9oaXN0b3J5XCI7XHJcblxyXG5jbGFzcyBCRFNpZGViYXJIZWFkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzaWRlYmFyQ29tcG9uZW50cyA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLlNlcGFyYXRvciAmJiBlLkhlYWRlciAmJiBlLkl0ZW0pXHJcblxyXG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0J1dHRvbiA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkNoYW5nZWxvZ1wifSwgXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Zsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCJ9LCBjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7fX0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEhpc3RvcnksIHtjbGFzc05hbWU6IFwiYmQtaWNvblwiLCBzaXplOiBcIjE2cHhcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCByZW5kZXJlZCA9IG5ldyBzaWRlYmFyQ29tcG9uZW50cy5IZWFkZXIoe1xyXG4gICAgICAgICAgICBjaGlsZHJlbjogUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgXCJCYW5kYWdlZCBCRFwiLCBjaGFuZ2Vsb2dCdXR0b24pLFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIlxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRzKClcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckNvbXBvbmVudHMoKXtcclxuICAgICAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGlnaHRjb3JkXCIsIG1ha2VDb21wb25lbnQodGhpcy5saWdodGNvcmRDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwic3RhdHVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5QcmVzZW5jZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJhY2NvdW50aW5mb1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuQWNjb3VudEluZm9zQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImxjYXBpcHJldmlld1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuQXBpUHJldmlld0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuXHJcbiAgICAgICAgLyogQmFuZGFnZWQgQkQgKi9cclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJCRENoYW5nZWxvZ1RpdGxlXCIsIG1ha2VDb21wb25lbnQoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJEU2lkZWJhckhlYWRlcigpLnJlbmRlcigpXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiY29yZVwiLCBtYWtlQ29tcG9uZW50KHRoaXMuY29yZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjdXN0b21jc3NcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmN1c3RvbUNzc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJwbHVnaW5zXCIsIG1ha2VDb21wb25lbnQodGhpcy5yZW5kZXJBZGRvblBhbmUoXCJwbHVnaW5zXCIpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJ0aGVtZXNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLnJlbmRlckFkZG9uUGFuZShcInRoZW1lc1wiKSkpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtc2V0dGluZ3NwYW5lLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcixcclxuICAgICAgICAgICAgY2xhc3NTaWRlYmFyXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLnNwbGl0KFwiIFwiKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc3RhbmRhcmRTaWRlYmFyVmlldylbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIitjbGFzc05hbWVMYXllcitcIiAuXCIrY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdK1wiLCAuXCIrY2xhc3NOYW1lTGF5ZXIrXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcclxuICAgICAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xyXG4gICAgICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xyXG5cclxuICAgICAgICBVdGlscy5vblJlbW92ZWQocm9vdCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJjb3JlXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgUHJlc2VuY2VTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBNc2dMb2dTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcIm1zZ2xvZ1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge31cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCwgc2lkZWJhcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNldHRpbmdzKGlkLCBlbmFibGVkLCBzaWRlYmFyKSB7XHJcbiAgICAgICAgaWYoIVtcImxpZ2h0Y29yZC04XCIsIFwibm9fd2luZG93X2JvdW5kXCIsIFwiZW5hYmxlX2dsYXNzdHJvblwiXS5pbmNsdWRlcyhpZCkpc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHB1YmxpY1NlcnZlcnNNb2R1bGUuYWRkQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIGVsc2UgcHVibGljU2VydmVyc01vZHVsZS5yZW1vdmVCdXR0b24oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIHZvaWNlTW9kZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtN1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgICAgICBlbHNlIGNvbG9yZWRUZXh0LnJlbW92ZUNvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay13cC0xXCIpIHtcclxuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtcclxuICAgICAgICAgICAgZWxzZSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIFwiIzJmMzEzNlwiKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyppZiAoaWQgPT09IFwicmVhY3REZXZUb29sc1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgcmVhY3REZXZUb29scy5zdG9wKCk7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxyXG4gICAgICAgICAgICBzaWRlYmFyLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZVxyXG4gICAgICAgICAgICBlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3NTdG9yZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgdHlwZW9mIGUuZGVmYXVsdCA9PT0gXCJvYmplY3RcIiAmJiBcInNob3dDdXJyZW50R2FtZVwiIGluIGUuZGVmYXVsdClbMF1cclxuICAgICAgICAgICAgICAgIGlmKHNldHRpbmdzU3RvcmUgJiYgIXNldHRpbmdzU3RvcmUuZGVmYXVsdC5zaG93Q3VycmVudEdhbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0N1cnJlbnRHYW1lOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIEN1c3RvbVJpY2hQcmVzZW5jZS5kaXNhYmxlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICAgICAgZWxzZSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTRcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtN1wiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUeXBpbmcuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC04XCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiaXNUYWJzXCIsIGVuYWJsZWQpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5leGl0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcclxuICAgICAgICAvL2lmIChzZXR0aW5nc0Nvb2tpZS5yZWFjdERldlRvb2xzKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiXSkgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNFwiXSkgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNlwiXSkgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIHtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFNldHRpbmdzKCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyU2lkZWJhcihzaWRlYmFyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhci5yZW5kZXIoc2lkZWJhcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29yZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcclxuICAgIH1cclxuXHJcbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcclxuICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzLm1hcCgoc2VjdGlvbiwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAoaSA9PT0gMCA/IG51bGwgOiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wKSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCBzZWN0aW9uLnRpdGxlKSxcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibGlnaHRjb3JkLThcIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJpc1RhYnNcIiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTlwiLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogaXNDaGVja2VkLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGlkLCBjaGVja2VkLCBzaWRlYmFyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT0gXCJsaWdodGNvcmQtOFwiICYmIGlzQ2hlY2tlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiZ3JlZW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vazogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwiYnJhbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5pcGMuc2VuZChcIk5FV19UQUJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFwiT3BlbiBhIG5ldyBUYWJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcInllbGxvd1wiLFxyXG4gICAgICAgICAgICAgICAgbG9vazogXCJnaG9zdFwiLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcclxuICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwicmVkXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJTaG91bGQgcmVsYXVuY2hcIilcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogcmVtb3RlLnByb2Nlc3MuYXJndi5zbGljZSgxKS5jb25jYXQoW1wiLS1kaXNhYmxlLWJldHRlcmRpc2NvcmRcIl0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuYXBwLnF1aXQoKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHdyYXBwZXI6IHRydWVcclxuICAgICAgICAgICAgfSwgXCJSZWxhdW5jaCB3aXRob3V0IEJldHRlckRpc2NvcmRcIiksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcInllbGxvd1wiLFxyXG4gICAgICAgICAgICAgICAgbG9vazogXCJnaG9zdFwiLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcclxuICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwicmVkXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNDbGVhcmluZ0NhY2hlKXJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDbGVhcmluZyBjYWNoZS4uLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnNlc3Npb24uY2xlYXJDYWNoZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDYWNoZSBpcyBjbGVhcmVkICFcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdWNjZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLiBDaGVjayBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHdyYXBwZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNDbGVhcmluZ0NhY2hlXHJcbiAgICAgICAgICAgIH0sIFwiQ2xlYXIgY2FjaGVcIilcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgUHJlc2VuY2VDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHJlc2VuY2VTZXR0aW5ncywge1xyXG4gICAgICAgICAgICBrZXk6IFwibHBwYW5uZWxcIixcclxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIFxyXG4gICAgICAgICAgICBzZXR0aW5nczogdGhpcy5QcmVzZW5jZVNldHRpbmdzXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBBY2NvdW50SW5mb3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQWNjb3VudEluZm9zLCB7XHJcbiAgICAgICAgICAgIGtleTogXCJsYXBhbm5lbFwiXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBBcGlQcmV2aWV3Q29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQXBpUHJldmlldywge1xyXG4gICAgICAgICAgICBrZXk6IFwibGFwaXBhbm5lbFwiXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBjdXN0b21Dc3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDc3NFZGl0b3IsIHtrZXk6IFwiY3NzZWRpdG9yXCJ9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlckFkZG9uUGFuZSh0eXBlKSB7XHJcbiAgICAgICAgLy8gSSBrbm93IHRoaXMgc2hvdWxkbid0IGJlIGhlcmUsIGJ1dCB3aGVuIGl0IGlzbid0LFxyXG4gICAgICAgIC8vIFJlYWN0IHJlZnVzZXMgdG8gY2hhbmdlIHRoZSBidXR0b24gd2hlbiBnb2luZ1xyXG4gICAgICAgIC8vIGJldHdlZW4gcGx1Z2lucyBhbmQgdGhlbWVzIHBhZ2UuLi4gc29tZXRoaW5nXHJcbiAgICAgICAgLy8gdG8gZGVidWcgbGF0ZXIuXHJcbiAgICAgICAgY2xhc3MgQ29udGVudExpc3QgZXh0ZW5kcyBCRFYyLnJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCA9IHRoaXMucHJvcHMudHlwZS5yZXBsYWNlKFwic1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy50eXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICByZW5kZXIoKSB7cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47fVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlbmRlciA9IENvbnRlbnRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnRlbnRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgICAgICAgICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRMaXN0LCB7dHlwZX0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDYXJkTGlzdCwge3R5cGV9KSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbCBvbiB3aW5kb3dcclxuICovXHJcblxyXG5mdW5jdGlvbiBtYWtlQ29tcG9uZW50KGNoaWxkcmVuKXtcclxuICAgIGNsYXNzIFNldHRpbmdDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oc2lkZWJhciwgKCkgPT4gdGhpcy5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBzaWRlYmFyXHJcbiAgICByZXR1cm4gKHMpID0+IHtcclxuICAgICAgICBzaWRlYmFyID0gc1xyXG4gICAgICAgIHJldHVybiBTZXR0aW5nQ29tcG9uZW50XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxzID0ge31cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcihwYW5lbCwgY29tcG9uZW50KXtcclxuICAgICAgICB0aGlzLnBhbmVsc1twYW5lbF0gPSBjb21wb25lbnRcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21wb25lbnQocGFuZWwsIHNpZGViYXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhbmVsc1twYW5lbF0oc2lkZWJhcilcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXRlbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQmV0dGVyRGlzY29yZCBTZXR0aW5nc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwiY29yZVwiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlBsdWdpbnNcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcInBsdWdpbnNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJUaGVtZXNcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcInRoZW1lc1wiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkN1c3RvbSBDU1NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImN1c3RvbWNzc1wiXHJcbiAgICAgICAgfV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IExDaXRlbXMoKXtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTGlnaHRjb3JkIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJsaWdodGNvcmRcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlJpY2hQcmVzZW5jZVwiLCBcclxuICAgICAgICAgICAgICAgIGlkOiBcInN0YXR1c1wiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiQWNjb3VudCBJbmZvXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJhY2NvdW50aW5mb1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IExDRGV2SXRlbXMoKXtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXVxyXG4gICAgICAgIGlmKCF3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUpcmV0dXJuIGl0ZW1zXHJcbiAgICAgICAgaXRlbXMucHVzaCguLi5bXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmQgQXBpXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJDb21wb25lbnRzIFByZXZpZXdcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImxjYXBpcHJldmlld1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdKVxyXG4gICAgICAgIHJldHVybiBpdGVtc1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcihzaWRlYmFyKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnRoaXMuTENpdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgLi4udGhpcy5MQ0Rldkl0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKGUuc2VjdGlvbilyZXR1cm4gZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiQ1VTVE9NXCIsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChcIkJEQ2hhbmdlbG9nVGl0bGVcIilcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4udGhpcy5pdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vIG5lZWQgdG8gZXhwb3J0IHNldHRpbmdzUGFuZWxTaWRlYmFyIG9uIHdpbmRvd1xyXG4gKi8iLCJpbXBvcnQge2JkdGhlbWVFcnJvcnMsIHRoZW1lQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jbGFzcyBUaGVtZU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5UaGVtZU1vZHVsZSA9IHRoaXNcclxuICAgIH1cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcjt9XHJcbn1cclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5sb2FkVGhlbWVEYXRhKCk7XHJcbiAgICBiZHRoZW1lRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFRoZW1lcygpKSk7XHJcbiAgICBjb25zdCB0aGVtZXMgPSBPYmplY3Qua2V5cyhiZHRoZW1lcyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lc1tpXV07XHJcbiAgICAgICAgaWYgKCF0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgdGhlbWVDb29raWVbdGhlbWUubmFtZV0gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhlbWVDb29raWVbdGhlbWUubmFtZV0pIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB0aGVtZSBpbiB0aGVtZUNvb2tpZSkge1xyXG4gICAgICAgIGlmICghYmR0aGVtZXNbdGhlbWVdKSBkZWxldGUgdGhlbWVDb29raWVbdGhlbWVdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZVRoZW1lID0gZnVuY3Rpb24obmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRoZW1lQ29va2llW25hbWVdID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gYXBwbGllZC5gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmVuYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVRoZW1lID0gZnVuY3Rpb24obmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRoZW1lQ29va2llW25hbWVdID0gZmFsc2U7XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XHJcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGRpc2FibGVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZVRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lKTtcclxuICAgIGVsc2UgdGhpcy5lbmFibGVUaGVtZSh0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b2dnbGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuIEl0IG1heSBub3QgaGF2ZSBiZWVuIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpO1xyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWxvYWRlZFwiLCB0aGVtZS5uYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51bmxvYWRUaGVtZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSk7XHJcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgZGVsZXRlIGJkdGhlbWVzW3RoZW1lXTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS11bmxvYWRlZFwiLCB0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XHJcbiAgICB0aGlzLnVubG9hZFRoZW1lKGJkdGhlbWUuZmlsZW5hbWUpO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmR0aGVtZS5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkVGhlbWUgPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybiB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZU9yTmFtZSk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSksIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUsIHRydWUpO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gdiR7YmR0aGVtZXNbdGhlbWVdLnZlcnNpb259IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtcmVsb2FkZWRcIiwgdGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVwZGF0ZVRoZW1lTGlzdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIpO1xyXG4gICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGVtZUNvb2tpZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnNhdmVUaGVtZURhdGEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIsIHRoZW1lQ29va2llKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZU1vZHVsZSgpOyIsImltcG9ydCB7YmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlscyB7XG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyB3aWR0aCAqL1xuICAgIHN0YXRpYyBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9XG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyBoZWlnaHQgKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxuXG4gICAgc3RhdGljIGdldCBXaW5kb3dDb25maWdGaWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBmcmFtZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VGV4dEFyZWEoKSB7XG4gICAgICAgIHJldHVybiBET00ucXVlcnkoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hhbm5lbFRleHRBcmVhICYmIGUudGl0bGVXcmFwcGVyKVswXS5jaGFubmVsVGV4dEFyZWEuc3BsaXQoXCIgXCIpWzBdK1wiIHRleHRhcmVhXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnRUZXh0KHRleHRhcmVhLCB0ZXh0KSB7XG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uRW5kID0gdGV4dGFyZWEudmFsdWUubGVuZ3RoO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydFRleHRcIiwgZmFsc2UsIHRleHQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbG9nKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICMzYTcxYzE7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICMzYTcxYzE7XCIsIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB3YXJuKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjRThBNDAwOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjRThBNDAwO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXJyKG1vZHVsZU5hbWUsIG1lc3NhZ2UsIGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6IHJlZDtcIiwgXCJcIik7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZChcIiVjRXJyb3I6IFwiICsgZXJyb3IubWVzc2FnZSwgXCJjb2xvcjogcmVkO1wiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB0ZXN0SlNPTihkYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaXNFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IG9iaiA9PSB1bmRlZmluZWQgfHwgb2JqID09IFwiXCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkgcmV0dXJuIG9iai5sZW5ndGggPT0gMDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiAoLi4ucGFyYW1zKSA9PiB7XG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gbWV0aG9kKC4uLnBhcmFtcyk7XHR9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB0aGlzLmVycihcIlN1cHByZXNzZWRFcnJvclwiLCBcIkVycm9yIG9jY3VycmVkIGluIFwiICsgbWVzc2FnZSwgZSk7IH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7YmVmb3JlLCBhZnRlciwgaW5zdGVhZCwgb25jZSA9IGZhbHNlLCBzaWxlbnQgPSBmYWxzZSwgZm9yY2UgPSBmYWxzZX0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgd2hhdC5kaXNwbGF5TmFtZSB8fCB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lIHx8IHdoYXQubmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IHdoYXQuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0pIHtcbiAgICAgICAgICAgIGlmIChmb3JjZSkgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ01ldGhvZCA9IHdoYXRbbWV0aG9kTmFtZV07XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInVucGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgLy93aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcbiAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZSAvLyB0aGlzIGFsbG93IHRvIG1vbmtleXBhdGNoIG1vcmUgdGhhbiBvbmUgdGltZS5cbiAgICAgICAgfTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYoY2FuY2VsZWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnTWV0aG9kLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0aGlzT2JqZWN0OiB0aGlzLFxuICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3VtZW50czogYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2Q6IG9yaWdNZXRob2QsXG4gICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsTWV0aG9kOiAoKSA9PiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5vcmlnaW5hbE1ldGhvZC5hcHBseShkYXRhLnRoaXNPYmplY3QsIGRhdGEubWV0aG9kQXJndW1lbnRzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpbnN0ZWFkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJldCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBSZXQgIT09IHVuZGVmaW5lZCkgZGF0YS5yZXR1cm5WYWx1ZSA9IHRlbXBSZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhiZWZvcmUsIFwiYGJlZm9yZWAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xuICAgICAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYWZ0ZXIsIFwiYGFmdGVyYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uY2UpIGNhbmNlbCgpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24od2hhdFttZXRob2ROYW1lXSwgb3JpZ01ldGhvZCk7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19tb25rZXlQYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCkge1xuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0udG9TdHJpbmcgPSBmdW5jdGlvbigpIHtyZXR1cm4gb3JpZ01ldGhvZC50b1N0cmluZygpO307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdXRhdGlvbnMubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1ttXTtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXROZXN0ZWRQcm9wKG9iaiwgcGF0aCkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgvXFxzP1xcLlxccz8vKS5yZWR1Y2UoZnVuY3Rpb24ob2JqLCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9ialtwcm9wXTtcbiAgICAgICAgfSwgb2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgVGhlIHN0cmluZyB0byBzaG93IGluIHRoZSB0b2FzdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnR5cGUgQ2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgdG9hc3Qgc3R5bGlzdGljYWxseSBhbmQgc2VtYW50aWNhbGx5LiBDaG9pY2VzOiBcIlwiLCBcImluZm9cIiwgXCJzdWNjZXNzXCIsIFwiZGFuZ2VyXCIvXCJlcnJvclwiLCBcIndhcm5pbmdcIi9cIndhcm5cIi4gRGVmYXVsdDogXCJcIlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5pY29uIERldGVybWluZXMgd2hldGhlciB0aGUgaWNvbiBzaG91bGQgc2hvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlLiBBIHRvYXN0IHdpdGhvdXQgdHlwZSB3aWxsIGFsd2F5cyBoYXZlIG5vIGljb24uIERlZmF1bHQ6IHRydWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aW1lb3V0IEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLnNpZGViYXIgJiYgZS5oYXNOb3RpY2UpWzBdLnNpZGViYXIuc3BsaXQoXCIgXCIpWzldK1wiICsgZGl2XCIpIHx8IG51bGw7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXJsaXN0ID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUubWVtYmVyc1dyYXApWzBdLm1lbWJlcnNXcmFwKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBmb3JtID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJmb3JtXCIpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjb250YWluZXIgPyBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IDMxMDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWVtYmVybGlzdCA/IG1lbWJlcmxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IDA7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0ID8gcmlnaHQgLSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IFV0aWxzLnNjcmVlbldpZHRoIC0gbGVmdCAtIDI0MDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGZvcm0gPyBmb3JtLm9mZnNldEhlaWdodCA6IDgwO1xuICAgICAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RzXCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCBsZWZ0ICsgXCJweFwiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcIndpZHRoXCIsIHdpZHRoICsgXCJweFwiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20gKyBcInB4XCIpO1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikuYXBwZW5kQ2hpbGQodG9hc3RXcmFwcGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dHlwZSA9IFwiXCIsIGljb24gPSB0cnVlLCB0aW1lb3V0ID0gMzAwMH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCB0b2FzdEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0XCIpO1xuICAgICAgICBpZiAodHlwZSkgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJ0b2FzdC1cIiArIHR5cGUpO1xuICAgICAgICBpZiAodHlwZSAmJiBpY29uKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImljb25cIik7XG4gICAgICAgIHRvYXN0RWxlbS5pbm5lclRleHQgPSBjb250ZW50O1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5hcHBlbmRDaGlsZCh0b2FzdEVsZW0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmQtdG9hc3RzIC5iZC10b2FzdFwiKS5sZW5ndGgpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgY29uc3QgY2xvc2luZ0xpc3RlbmVycyA9IFtdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzID0gW10sIHRoZW1lczogdGhlbWVFcnJvcnMgPSBbXX0pIHtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzKSByZXR1cm47XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRlbnQgRXJyb3JzPC9kaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlRoZW1lczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPk5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+RXJyb3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICAgICAgfSkpO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIkNoaWxkXCIpO1xuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJkZWZhdWx0UnVsZXNcIiwgXCJwYXJzZVwiKTtcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxuICAgICAgICAgICAgY2hhbmdlcyA9IFtdLCBcbiAgICAgICAgICAgIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIFxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcbiAgICAgICAgICAgIGZvb3RlclxuICAgICAgICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtzcmM6IGltYWdlfSldO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlc1tjXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwiaDFcIiwge2NsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YCx9LCBlbnRyeS50aXRsZSkpO1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcbiAgICAgICAgICAgICAgICBjZShUaXRsZXMuZGVmYXVsdCwge3RhZzogVGl0bGVzLlRhZ3MuSDR9LCB0aXRsZSksXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELCBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZX0sIHN1YnRpdGxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5qb2luQkQyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6IHJlbmRlckhlYWRlcixcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcbiAgICAgICAgICAgIH0sIHByb3BzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTtcbiAgICAgICAgY29uc3QgQ29uZmlybWF0aW9uTW9kYWwgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5rZXkgJiYgbS5rZXkoKSA9PSBcImNvbmZpcm0tbW9kYWxcIik7XG4gICAgICAgIGlmICghTW9kYWxTdGFjayB8fCAhQ29uZmlybWF0aW9uTW9kYWwgfHwgIU1hcmtkb3duKSByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xuXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBcIk9rYXlcIiwgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsIGRhbmdlciA9IGZhbHNlLCBrZXkgPSB1bmRlZmluZWR9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRlbnQgPSBbY29udGVudF07XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICAgICAgcmV0dXJuIE1vZGFsU3RhY2sucHVzaChDb25maXJtYXRpb25Nb2RhbCwge1xuICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50LFxuICAgICAgICAgICAgcmVkOiBkYW5nZXIsXG4gICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiBjYW5jZWxUZXh0LFxuICAgICAgICAgICAgb25Db25maXJtOiBvbkNvbmZpcm0sXG4gICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcbiAgICAgICAgfSwga2V5KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtb3ZlRGEoY2xhc3NOYW1lKXtcbiAgICAgICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgICAgIHJldHVybiBjbGFzc05hbWUuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICFlLnN0YXJ0c1dpdGgoXCJkYS1cIikpLmpvaW4oXCIgXCIpXG4gICAgfVxufVxuXG5VdGlscy5zaG93VG9hc3QgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhVdGlscy5zaG93VG9hc3QsIFwiQ291bGQgbm90IHNob3cgdG9hc3QuXCIpO1xuXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVXRpbHMgPSBVdGlscyIsImltcG9ydCB7c2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuV2VicGFja01vZHVsZXMgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xyXG4gICAgICAgICAgICBkZWxldGUgcmVxLmMuX19leHRyYV9pZF9fO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUHJvdGVjdCA9IHRoZU1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLnJlbW92ZSAmJiB0aGVNb2R1bGUuc2V0ICYmIHRoZU1vZHVsZS5jbGVhciAmJiB0aGVNb2R1bGUuZ2V0ICYmICF0aGVNb2R1bGUuc29ydCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLmdldFRva2VuIHx8IHRoZU1vZHVsZS5nZXRFbWFpbCB8fCB0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByb3RlY3QgPSAodGhlTW9kdWxlLCBpc0RlZmF1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBtb2QgPSAhaXNEZWZhdWx0ID8gdGhlTW9kdWxlLmRlZmF1bHQgOiB0aGVNb2R1bGVcclxuICAgICAgICAgICAgICAgIGlmKCFtb2QpcmV0dXJuIHRoZU1vZHVsZVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZC5yZW1vdmUgJiYgbW9kLnNldCAmJiBtb2QuY2xlYXIgJiYgbW9kLmdldCAmJiAhbW9kLnNvcnQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtb2QuZ2V0VG9rZW4gJiYgIW1vZC5nZXRFbWFpbCAmJiAhbW9kLnNob3dUb2tlbilyZXR1cm4gdGhlTW9kdWxlXHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkobW9kLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0VG9rZW5cIiAmJiBvYmouZ2V0VG9rZW4pIHJldHVybiAoKSA9PiBcIm1mYS5YQ25iS3pvMENMSXFkSnpCbkwwRDhQZkRydXFrSk5IandIWHRyMzlVVTNGOGhIeDQzam9qSVN5aTVqZGpPNTJlOV9lOU1qbWFmWkZGcGMtc2VPTWFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRFbWFpbFwiICYmIG9iai5nZXRFbWFpbCkgcmV0dXJuICgpID0+IFwicHVwcGV0MTExMTJAZ21haWwuY29tXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIgJiYgb2JqLnNob3dUb2tlbikgcmV0dXJuICgpID0+IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiX19wcm90b19fXCIgJiYgb2JqLl9fcHJvdG9fXykgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZighaXNEZWZhdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhlTW9kdWxlLCB7ZGVmYXVsdDogcHJveHl9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBwcm90ZWN0KG0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oXCJDYW5ub3QgZmluZCBsb2FkZWQgbW9kdWxlIGluIGNhY2hlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQWxsID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLmRlZmF1bHQsIHRydWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobSAmJiBmaWx0ZXIobSkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0sIGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZXM7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzID0gKHByb3BOYW1lcykgPT4gZmluZChtb2R1bGUgPT4gcHJvcE5hbWVzLmV2ZXJ5KHByb3AgPT4gbW9kdWxlW3Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9IChwcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+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+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2Vzc2lvblZhbHVlKCl7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnNSYXcgPSBzZXNzaW9uTW9kdWxlLmdldFNlc3Npb25zKClcclxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcclxuXHJcbiAgICAgICAgaWYoc2Vzc2lvbnMubGVuZ3RoID09PSAwKXJldHVybiBcIi0gTm8gc2Vzc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHRyeSBpbiBhIGZldyBzZWNvbmRzXCJcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYCsgaWQ6ICR7ZS5zZXNzaW9uSWR9XHJcbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxyXG4rIGNsaWVudDogJHtlLmNsaWVudEluZm8uY2xpZW50fVxyXG4rIHN0YXR1czogJHtlLnN0YXR1c31cclxuKyBBY3Rpdml0aWVzOiAke2UuYWN0aXZpdGllcy5sZW5ndGh9YFxyXG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIitcIi1cIi5yZXBlYXQoMzgpK1wiXFxuXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZmlsZVZhbHVlKCl7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtEYXRlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHVzZXIuY3JlYXRlZEF0XHJcblxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihhdmF0YXJVUkwuc3RhcnRzV2l0aChcIi9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBcImh0dHBzOi8vZGlzY29yZC5jb21cIithdmF0YXJVUkxcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoYXZhdGFyVVJMLmVuZHNXaXRoKFwiP3NpemU9MTI4XCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gYXZhdGFyVVJMLnJlcGxhY2UoXCI/c2l6ZT0xMjhcIiwgXCI/c2l6ZT00MDk2XCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYCsgVXNlcm5hbWU6ICR7dXNlci51c2VybmFtZX1cclxuKyBEaXNjcmltaW5hdG9yOiAke3VzZXIuZGlzY3JpbWluYXRvcn1cclxuKyBUYWc6ICR7dXNlci50YWd9XHJcbisgSUQ6ICR7dXNlci5pZH1cclxuKyBBdmF0YXI6ICR7dXNlci5hdmF0YXJ9XHJcbisgQXZhdGFyIFVSTDogJHthdmF0YXJVUkx9XHJcbisgQ3JlYXRpb24gRGF0ZTogJHsoY3JlYXRlZEF0LmdldERhdGUoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9ICR7Y3JlYXRlZEF0LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9aCAke2NyZWF0ZWRBdC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9bWluICR7Y3JlYXRlZEF0LmdldFNlY29uZHMoKX1zXHJcbisgRmxhZ3M6ICR7dXNlci5mbGFnc31cclxuKyBIYXMgTml0cm86ICR7dXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBFbWFpbDogJHt1c2VyLmVtYWlsfVxyXG4tIDJGQTogJHt1c2VyLm1mYUVuYWJsZWQgPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEhhcyBCZWVuIE9uIE1vYmlsZTogJHt1c2VyLm1vYmlsZSA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gUGhvbmU6ICR7dXNlci5waG9uZSB8fCBcIk5vbmVcIn1cclxuLSBWZXJpZmllZDogJHt1c2VyLnZlcmlmaWVkfWBcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0aXN0aWNzKCl7XHJcblxyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IE9iamVjdC52YWx1ZXMoR3VpbGRNb2R1bGUuZ2V0R3VpbGRzKCkpXHJcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSlcclxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcclxuICAgICAgICBjb25zdCBibG9ja2VkID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0Jsb2NrZWQoZSkpXHJcblxyXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xyXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcclxuKyBGcmllbmRzIENvdW50OiAke2ZyaWVuZHMubGVuZ3RofSBmcmllbmRzXHJcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmxldCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcblxyXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTEpbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcbiAgICAgICAgaWYoIXNjcm9sbGJhck1vZHVsZTEpc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbiAgICAgICAgaWYoIWhpZ2h0bGlnaHRKUyloaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YH0+XHJcbiAgICAgICAgICAgIDxwcmU+XHJcbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvY29kZT5cclxuICAgICAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn0iLCIvLyBHb29kIGx1Y2sgdG8gcmVhZCBteSBjb2RlLCBFdmVuIG1lIGNhbid0IHJlYWQgaXQgcHJvcGVybHkuXHJcblxyXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4uL21vZHVsZXMvZGlzdGFudFwiXHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiXHJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCJcclxuXHJcbmNvbnN0IGtleXMgPSB7XHJcbiAgICBzZXR0aW5nVGl0bGU6IHV1aWR2NCgpXHJcbn1cclxubGV0IGZvcm1Nb2R1bGVcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpUHJldmlldyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc3RhdGVzOiBbXVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighZm9ybU1vZHVsZSlmb3JtTW9kdWxlID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuRm9ybVNlY3Rpb24pXHJcbiAgICAgICAgLyoqIFxyXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBbLi4ubmV3IFNldChPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdKS5tYXAoayA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2tdKVxyXG4gICAgICAgIH0pLmZsYXQoKSldXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVNlY3Rpb24gdGFnPVwiaDJcIiB0aXRsZT1cIkxpZ2h0Y29yZCdzIEFwaSBBdmFpbGxhYmxlIGNvbXBvbmVudHNcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1UZXh0IHR5cGU9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cIlwiIHNlbGVjdGFibGU9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBUaGVzZSBjb21wb25lbnRzIGFyZSBoZXJlIGZvciB0aGUgcGx1Z2luIGRldnMuIFRoZXkgY2FuIHF1aWNrbHkgZW1iZWQgYW55IGNvbXBvbmVudCBiZWxvdyB3aXRoIHRoaXMgcGFuZWwuXHJcbiAgICAgICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVRleHQ+XHJcbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wPjwvTWFyZ2luVG9wPlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwib3V0bGluZWRcIiBzaXplPVwibWVkaXVtXCIgaG92ZXJDb2xvcj1cImdyZWVuXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkL2xpZ2h0Y29yZC93aWtpL0FwaXNcIilcclxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxyXG4gICAgICAgICAgICBhbGxDb21wb25lbnRzLm1hcChjb21wID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xyXG4gICAgICAgICAgICAgICAgbGV0IG9uQ2hhbmdlID0gKHRhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzZXRTdGF0ZSA9IChuZXdTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXM6IFtPYmplY3QuYXNzaWduKHN0YXRlLCBuZXdTdGF0ZSldLmNvbmNhdCh0aGlzLnN0YXRlLnN0YXRlcy5maWx0ZXIoZSA9PiBlLmVsZW0gIT09IGNvbXApKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlLnN0YXRlcy5maW5kKGUgPT4gZS5lbGVtID09PSBjb21wKVxyXG4gICAgICAgICAgICAgICAgaWYoIXN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiOiBcInByZXZpZXdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbTogY29tcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge31cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdGF0ZXMucHVzaChzdGF0ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRQcm9wcyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWwgPSB7fVxyXG4gICAgICAgICAgICAgICAgICAgIEFsbFByZXZpZXdzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dID0gY2F0ZWdvcnlbMF1bT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtrZXldID0gQWxsUHJldmlld3MuZmluZChlID0+IGUuZmluZChlID0+IGVba2V5XSkpW3N0YXRlLm9wdGlvbnNba2V5XV1ba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyUHJldmlldyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyQ29kZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianN4XCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwianN4XCIpfS8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianNcIiBjb250ZW50PXtnZW5lcmF0ZUNvZGUoXCJyZWFjdFwiKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRTdHJGb3JQcm9wID0gKHZhbHVlLCBjb21wUGF0aCwgbGFuZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbXBQYXRoID09PSBcIkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG4gICAgbWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxyXG59fSxcclxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLFxyXG4gICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsXHJcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICB9LCBjbGFzc05hbWU6IFwibGMtdGFiLWJveC1zaGFkb3dcIiB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGUsIG51bGwsIFwiUHJldmlldyB0YWJzXCIpXHJcbiAgICApXHJcbilgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgIG1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxuICAgIH19PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5QcmV2aWV3IHRhYnM8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdXIgY29tcG9uZW50cyBoZXJlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgICBcIilcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGdlbmVyYXRlQ29kZSA9IGZ1bmN0aW9uKGxhbmcpeyAvLyBjb2RlIGZvcm1hdHRpbmcgaXMgaGFyZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maW5kKGUgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtjb21wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7Y29tcENhdGVnb3J5fS4ke2NvbXBOYW1lfWBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT0gXCJjaGlsZHJlblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IGtleStcIj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xvc2VUYWcgPSBgPC8ke2NvbXBQYXRofT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0vPmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcInJlYWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZHJlbiAmJiBjaGlsZHJlbi4kJHR5cGVvZiAmJiAoY2hpbGRyZW4uJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IGNoaWxkcmVuLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aXNpYmxlS2V5ID0gL1teXFx3XFxkX10vZy50ZXN0KGtleSkgPyBKU09OLnN0cmluZ2lmeShrZXkpIDoga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gdmlzaWJsZUtleStcIjogXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09PSAwKXJldHVybiBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiICAgIFwiICsgc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wT2JqZWN0ID0gXCJ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcFN0cmluZ3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0xhc3QgPSBpID09PSBwcm9wU3RyaW5ncy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBpID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiLFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IHN0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzTGFzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJlYWN0LmNyZWF0ZUVsZW1lbnQoJHtjb21wUGF0aH0sICR7cHJvcE9iamVjdH0sICR7Y2hpbGRyZW5EYXRhfSlgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGhlbHAgPSBjb21wLmhlbHAgfHwge31cclxuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gaGVscC5pbmZvID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLmluZm99XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgd2FybiA9IGhlbHAud2FybiA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cIndhcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC53YXJufVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGRhbmdlciA9IGhlbHAuZGFuZ2VyID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gaGVscC5lcnJvciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZXJyb3J9XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGhlbHAuc3VjY2VzcyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cInN1Y2Nlc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgICAgICAgICAge3N1Y2Nlc3N9XHJcbiAgICAgICAgICAgICAgICAgICAge3dhcm59XHJcbiAgICAgICAgICAgICAgICAgICAge2Vycm9yfVxyXG4gICAgICAgICAgICAgICAgICAgIHtkYW5nZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAge0FsbFByZXZpZXdzLm1hcChjYXRlZ29yeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0udGV4dClyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5jaGlsZHJlbilyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtrZXl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIG9wdGlvbnM9e2NhdGVnb3J5Lm1hcCgoZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBKU09OLnN0cmluZ2lmeShlW09iamVjdC5rZXlzKGUpWzBdXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5vcHRpb25zLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XTogKHZhbHVlLnZhbHVlIHx8IFwiMFwiKS5yZXBsYWNlKFwib3B0LVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBzZWFyY2hhYmxlPXt0cnVlfS8+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17c3RhdGUudGFifSBjaGlsZHJlbj17c3RhdGUudGFiID09PSBcInByZXZpZXdcIiA/IHJlbmRlclByZXZpZXcoKSA6IHJlbmRlckNvZGUoKX0gb25DaGFuZ2U9e29uQ2hhbmdlfS8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW5kZXJzKCl7XHJcblxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXHJcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZUJvdHRvbSA9IGVUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlID0gdGhpcy5yZWZzLmNhcmROb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzTm9kZS5jbG9zZXN0KFwiZGl2W2NsYXNzKj1cXFwic2Nyb2xsZXItXFxcIl1cIilcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW5rcygpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xyXG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxyXG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxyXG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XHJcblxyXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xyXG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcclxuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5cclxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcmRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLmlzUGx1Z2lucyA9IHRoaXMucHJvcHMudHlwZSA9PSBcInBsdWdpbnNcIjtcclxuICAgICAgICB0aGlzLmNvb2tpZSA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luQ29va2llIDogdGhlbWVDb29raWU7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Nb2R1bGUgOiB0aGVtZU1vZHVsZTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25BZGRvbkNoYW5nZXMgPSB0aGlzLm9uQWRkb25DaGFuZ2VzLmJpbmQodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXHJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZvbGRlcigpIHtcclxuICAgICAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0odGhpcy5pc1BsdWdpbnMgPyBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KG5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZWRpdChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUobmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShuYW1lKTtcclxuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJOYW1lXCIsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiVmVyc2lvblwiLCB2YWx1ZTogXCJ2ZXJzaW9uXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiUmVjZW50bHkgQWRkZWRcIiwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRmlsZSBTaXplXCIsIHZhbHVlOiBcInNpemVcIn0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXNjZW5kaW5nXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkRlc2NlbmRpbmdcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9wcyhhZGRvbikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleTogdGhpcy5nZXROYW1lKGFkZG9uKSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXHJcbiAgICAgICAgICAgIHRvZ2dsZTogdGhpcy5tYW5hZ2VyLnRvZ2dsZS5iaW5kKHRoaXMubWFuYWdlciksXHJcbiAgICAgICAgICAgIGVkaXQ6IHNldHRpbmdzQ29va2llW1wiZm9yay1wcy03XCJdID8gdGhpcy5lZGl0LmJpbmQodGhpcykgOiBudWxsLFxyXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvbixcclxuICAgICAgICAgICAgaGFzaDogYWRkb24uaGFzaFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaXN0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IGFbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gYi5wbHVnaW4gJiYgYi5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYi5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpICA6IGJbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBzb3J0ZWRBZGRvbnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYWRkb24gPSBzb3J0ZWRBZGRvbnNbYV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0QXV0aG9yKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSBtYXRjaGVzID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvcikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgdmVyc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoYWRkb24pO1xyXG4gICAgICAgICAgICByZW5kZXJlZC5wdXNoKDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgey4uLnByb3BzfSByZWxvYWQ9eyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiB0aGlzLm1hbmFnZXIucmVsb2FkLmJpbmQodGhpcy5tYW5hZ2VyKX0gLz48L0Vycm9yQm91bmRhcnk+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5hbWUoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IGFkZG9uLm5hbWUpO31cclxuICAgIGdldEF1dGhvcihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiBhZGRvbi5hdXRob3IpO31cclxuICAgIGdldERlc2NyaXB0aW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldFZlcnNpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IGFkZG9uLnZlcnNpb24pO31cclxuXHJcbiAgICByZW5kZXJDaGVja1VwZGF0ZXMoKXtcclxuICAgICAgICBpZighd2luZG93LlplcmVzUGx1Z2luTGlicmFyeSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKCF3aW5kb3cuUGx1Z2luVXBkYXRlcylyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCAhPT0gXCJmdW5jdGlvblwiKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXRoaXMuaXNQbHVnaW5zKXJldHVybiBudWxsXHJcblxyXG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgdGV4dD1cIkNoZWNrcyBmb3IgdXBkYXRlcyBvZiBwbHVnaW5zIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFJpZ2h0LWNsaWNrIGZvciBhIGxpc3QuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luTGVmdDogXCIxMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cImZpbGxlZFwiIHNpemU9XCJtaW5cIiBob3ZlckNvbG9yPVwiZGVmYXVsdFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgaW4gcHJvZ3Jlc3MuXCIsIHt0eXBlOiBcImluZm9cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBjb21wbGV0ZS5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9IGRpc2FibGVkPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIFVwZGF0ZXNcclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByZWZyZXNoSWNvbiA9IDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9XCJSZWxvYWQgTGlzdFwiPlxyXG4gICAgICAgICAgICB7KHByb3BzKSA9PiBcclxuICAgICAgICAgICAgPFJlbG9hZEljb24gey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1pY29uIGJkLXJlbG9hZCBiZC1yZWxvYWQtaGVhZGVyXCIgc2l6ZT1cIjE4cHhcIiBvbkNsaWNrPXthc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BsdWdpbnMpIHBsdWdpbk1vZHVsZS51cGRhdGVQbHVnaW5MaXN0KCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoZW1lTW9kdWxlLnVwZGF0ZVRoZW1lTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICB9PC9Ub29sdGlwPjtcclxuICAgICAgICBjb25zdCBhZGRvbkNhcmRzID0gdGhpcy5nZXRBZGRvbnMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxDb250ZW50Q29sdW1uIHRpdGxlPXtgJHt0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKX3igJQke2FkZG9uQ2FyZHMubGVuZ3RofWB9PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtcGZidG5cIiBvbkNsaWNrPXt0aGlzLm9wZW5Gb2xkZXIuYmluZCh0aGlzKX0+T3BlbiB7dGhpcy5pc1BsdWdpbnMgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwifSBGb2xkZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAge3RoaXMucmVuZGVyQ2hlY2tVcGRhdGVzKCl9XHJcbiAgICAgICAgICAgIHshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgcmVmcmVzaEljb259XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YFNlYXJjaCAke3RoaXMucHJvcHMudHlwZX0uLi5gfSAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPlNvcnQgYnk6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuc29ydE9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnNvcnR9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+T3JkZXI6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuZGlyZWN0aW9uc30gb25DaGFuZ2U9e3RoaXMucmV2ZXJzZX0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLXNsaXN0IGJkLWFkZG9uLWxpc3RcIj57YWRkb25DYXJkc308L2Rpdj5cclxuICAgICAgICA8L0NvbnRlbnRDb2x1bW4+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ2FyZExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENhcmRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCRExvZ28gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7aGVpZ2h0OiBcIjEwMCVcIiwgd2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ28gXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHtmaWxsUnVsZTogXCJldmVub2RkXCIsIGNsaXBSdWxlOiBcImV2ZW5vZGRcIiwgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLCBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwifSwgdmlld0JveDogXCIwIDAgMjAwMCAyMDAwXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtZXRhZGF0YVwiLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cxXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIyMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjE1XCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMjU1LDI1NSwyNTUsMC4xNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93M1wifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MylcIn0sIGQ6IFwiTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaXCIsIGZpbGw6IFwiIzE3MTcxN1wiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cyKVwifSwgZDogXCJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWlwiLCBmaWxsOiBcIiMzRTgyRTVcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MSlcIn0sIGQ6IFwiTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWlwiLCBmaWxsOiBcIiNGRkZGRkZcIiwgb3BhY2l0eTogXCIxXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ2hlY2tib3ggZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwibGlcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3ggXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveCwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtaW5uZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hJbm5lcilbMF0uY2hlY2tib3hJbm5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveEVsZW1lbnQsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCAhdGhpcy5zdGF0ZS5jaGVja2VkKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgY2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IEFycm93IGZyb20gXCIuLi9pY29ucy9kb3duYXJyb3dcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtvcGVuOiBmYWxzZSwgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUgfHwgdGhpcy5wcm9wcy5vcHRpb25zWzBdLnZhbHVlfTtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dNZW51ID0gdGhpcy5zaG93TWVudS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGlkZU1lbnUgPSB0aGlzLmhpZGVNZW51LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd01lbnUoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IHRydWV9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTWVudSgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiBmYWxzZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWV9KTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGVkKCkge3JldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT0gdGhpcy5zdGF0ZS52YWx1ZSk7fVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcHQgPT4gXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdC1vcHRpb24ke3NlbGVjdGVkLnZhbHVlID09IG9wdC52YWx1ZSA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWB9IG9uQ2xpY2s9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzLCBvcHQudmFsdWUpfT57b3B0LmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLnByb3BzLnN0eWxlID09IFwidHJhbnNwYXJlbnRcIiA/IFwiIGJkLXNlbGVjdC10cmFuc3BhcmVudFwiIDogXCJcIjtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLnN0YXRlLm9wZW4gPyBcIiBtZW51LW9wZW5cIiA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcFwiPlxyXG4vLyA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57dGhpcy5wcm9wcy5sYWJlbH08L2xhYmVsPlxyXG4vLyA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuLy8gICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWNvbnRyb2xzXCI+XHJcbi8vICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuLy8gICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuLy8gICAgIDwvZGl2PlxyXG4vLyA8L2Rpdj5cclxuLy8ge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbi8vIDwvZGl2PjsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiLi4vaWNvbnMvc2VhcmNoXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlYXJjaC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9O1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NvbnRlbnRDb2x1bW4gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5wcm9wcy50aXRsZSA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgdGhpcy5wcm9wcy50aXRsZSkgOiBudWxsXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uICsgXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsIHN0eWxlOiB7cGFkZGluZzogXCI2MHB4IDQwcHggMHB4XCJ9fSxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcbmltcG9ydCBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZnJvbSBcIi4vY3NzRWRpdG9yRGV0YWNoZWRcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnByb3BzLmxpbmVzID0gMDtcclxuICAgICAgICBzZWxmLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHNlbGYuYXR0YWNoID0gc2VsZi5hdHRhY2guYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLmRldGFjaGVkRWRpdG9yID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCwge2F0dGFjaDogc2VsZi5hdHRhY2h9KTtcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2ggPSBzZWxmLmRldGFjaC5iaW5kKHNlbGYpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogdGhpcy5wcm9wcy5kZXRhY2hlZCB8fCBCRFYyLmVkaXRvckRldGFjaGVkXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5kZXRhY2hlZCAmJiAhc2VsZi5zdGF0ZS5kZXRhY2hlZCkge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5kZXRhY2hlZFJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2RlTWlycm9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxyXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNzcygpIHtcclxuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcclxuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjc3MgPSBhdG9iKF9jY3NzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGFyZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIGlmICghZHJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJkLWRldGFjaGVkLWNzcy1lZGl0b3JcIiwgaWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1lZGl0b3JcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWlubmVycGFuZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiBzZWxmLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiYXR0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gYXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImF0dGFjaFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKERPTS5xdWVyeShcIiNlZGl0b3ItZGV0YWNoZWRcIikpIHNlbGYucHJvcHMuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5yb290KTtcclxuICAgICAgICAgICAgICAgIHNlbGYucm9vdC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDc3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIGJ0b2EodGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSB7aGFzRXJyb3I6IGZhbHNlfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRDYXRjaCgpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwicmVhY3QtZXJyb3JcIn0sIFwiQ29tcG9uZW50IEVycm9yXCIpOyAgXHJcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuOyBcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBCREVycm9yQm91bmRhcnkucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiLz48cGF0aCBkPVwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3duQXJyb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJ7LyogPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ3aGl0ZVwiIHdpZHRoPVwiMThweFwiIGhlaWdodD1cIjE4cHhcIj5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbjwvc3ZnPiAqL31cclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbiAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi4vbW9kdWxlcy9kaXN0YW50XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QcmVzZW5jZVNldHRpbmdzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpIHx8IGRlZmF1bHRSUEMsXHJcbiAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlldyA9IG51bGxcclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMgPSBuZXcgU2V0KClcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVXaGVuRmV0Y2hlZChjb21wKXtcclxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5hZGQoY29tcClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlKHNldHRpbmcsIHZhbHVlKXtcclxuICAgICAgICBsZXQgZGVmYXVsdFNldHRpbmcgPSBSUENQcm9wcy5maW5kKGUgPT4gZS5pZCA9PT0gc2V0dGluZy5wcm9wcy5pZClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xyXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRTZXR0aW5nLmlkXTogISF2YWx1ZSA/IHZhbHVlIDogbnVsbFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLnN0YXRlLmFzc2V0c1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYoc2V0dGluZy5wcm9wcy5pZCA9PT0gXCJhcHBsaWNhdGlvbl9pZFwiKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgICAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5zZXQoc2V0dGluZ3NSUEMpXHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hBc3NldHMoKXtcclxuICAgICAgICBpZih0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpe1xyXG4gICAgICAgICAgICBsZXQgYXBwID0gdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkICE9PSBhcHApe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gdHJ1ZVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5mZXRjaEFzc2V0cyh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpXHJcbiAgICAgICAgLnRoZW4oYXNzZXRzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhc3NldC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYXNzZXQudHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJldmlldyhkYXRhKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIHx8IChWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzR3JvdXAgdGl0bGU9XCJSaWNoUHJlc2VuY2UgU2V0dGluZ3NcIiBzZXR0aW5ncz17dGhpcy5wcm9wcy5zZXR0aW5nc30gb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9Lz4sXHJcbiAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz4sXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUmljaFByZXNlbmNlXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHsvKiogb3B0aW9ucyAqL31cclxuICAgICAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb21wb25lbnRzfVxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wIC8+XHJcbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlByZXZpZXdcIi8+XHJcbiAgICAgICAgICAgICAgICB7LyoqIHByZXZpZXcgKi99XHJcbiAgICAgICAgICAgICAgICA8UnBjUHJldmlldyBzZXR0aW5ncz17dGhpc30vPlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXttYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PjwvZGl2PixcclxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXt3aW5kb3cub2hnb2RvaGZ1Y2t9PlxyXG4gICAgICAgICAgICAgICAgT2ggZ29kIE9oIGZ1Y2tcclxuICAgICAgICAgICAgPC9idXR0b24+LFxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUxrWWE3cnBzX2c0XCIpXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgU2VlID8gSSBwdWxsZWQgYSBsaXRsZSBzbmVha3kgb24geWFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zQ29tcG9uZW50cygpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zQ29tcG9uZW50cyB8fCAodGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgPSBSUENQcm9wcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGUudHlwZSA9PT0gXCJ0ZXh0XCIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dFRleHQgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5cclxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IFs8SW5wdXROdW1iZXIgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5dLypcclxuICAgICAgICAgICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS51bnNoaWZ0KDxEaXNjb3JkQnV0dG9uIHRpdGxlPVwiQ29weSBDdXJyZW50IFRpbWVzdGFtcFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gLz4pXHJcbiAgICAgICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwiY2hvaWNlXCIpe1xyXG4gICAgICAgICAgICAgICAgaWYoW1wiYXNzZXRzLnNtYWxsXCIsIFwiYXNzZXRzLmxhcmdlXCJdLmluY2x1ZGVzKGUuaWQpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0Q2hvaWNlIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfSBjaG9pY2VzPXtbe3ZhbHVlOiBcIm5vbmVcIiwgbGFiZWw6IFwiTm8gYXNzZXRzXCJ9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKX0vPlxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjaG9pY2UuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IFJQQ1Byb3BzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXHJcbiAgICAgICAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIk5hbWVcIixcclxuICAgICAgICBpZDogXCJuYW1lXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiRGV0YWlsc1wiLFxyXG4gICAgICAgIGlkOiBcImRldGFpbHNcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJCcm93c2luZyBEaXNjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU3RhdGVcIixcclxuICAgICAgICBpZDogXCJzdGF0ZVwiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZCBDbGllbnRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcclxuICAgICAgICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXHJcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICBnZXQgcGxhY2Vob2xkZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkxhcmdlQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMubGFyZ2VcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlNtYWxsQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMuc21hbGxcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG5dXHJcblxyXG5sZXQgaW5wdXRUZXh0TW9kdWxlc1xyXG5jbGFzcyBJbnB1dFRleHQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgaWYoaW5wdXRUZXh0TW9kdWxlcyAmJiBpbnB1dFRleHRNb2R1bGVzWzBdKXJldHVybiBpbnB1dFRleHRNb2R1bGVzXHJcbiAgICAgICAgcmV0dXJuIGlucHV0VGV4dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICAgICAgaW5wdXRNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUyLFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IElucHV0TnVtYmVyTW9kdWxlc1xyXG5jbGFzcyBJbnB1dE51bWJlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gSW5wdXROdW1iZXJNb2R1bGVzIHx8IChJbnB1dE51bWJlck1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdLFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSB0eXBlPVwibnVtYmVyXCIgb25DaGFuZ2U9eyh2YWx1ZSwgbmFtZSwgaW5wdXQpID0+IHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0rL2csIFwiXCIpXHJcbiAgICAgICAgICAgIGlmKHZhbHVlID09IHRoaXMuc3RhdGUuZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRWYWx1ZSh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XHJcbiAgICAgICAgICAgICAgICB7c2V0dGluZy5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIgPyBcclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICB9fSBjb2xvcj1cImJyYW5kXCI+Q29weSBjdXJyZW50IHRpbWVzdGFtcDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+IDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBJbnB1dENob2ljZU1vZHVsZXNcclxuY2xhc3MgSW5wdXRDaG9pY2UgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdID8gXCJhc3NldC1cIit0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA6IFwibm9uZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci51cGRhdGVXaGVuRmV0Y2hlZCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGRhdGEpe1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGEudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiB2YWx1ZS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxyXG4gICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhID09PSBcIm5vbmVcIiA/IG51bGwgOiB0aGlzLnN0YXRlLmRhdGEucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIElucHV0Q2hvaWNlTW9kdWxlcyB8fCAoSW5wdXRDaG9pY2VNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBvcHRpb25zLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvcHRpb25zPXtvcHRpb25zfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSAvPlxyXG4gICAgICAgICAgICAgICAgey8qPFNlbGVjdCB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSBvcHRpb25zPXtvcHRpb25zfS8+Ki99XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgRGl2aWRlck1vZHVsZXMgPSBbXVxyXG5jbGFzcyBEaXZpZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBEaXZpZGVyTW9kdWxlcyYmRGl2aWRlck1vZHVsZXNbMF0gPyBEaXZpZGVyTW9kdWxlcyA6IChEaXZpZGVyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlciAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGRpdmlkZXIsXHJcbiAgICAgICAgICAgIGRpdmlkZXJEZWZhdWx0XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YCR7ZGl2aWRlci5kaXZpZGVyfSAke2RpdmlkZXJEZWZhdWx0LmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBEaXNjb3JkQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IGNvbG9yPVwiYnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUnBjUHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGFicyA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMucHJvcHMuc2V0dGluZ3MucHJldmlldyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VUYWIodGFiKXtcclxuICAgICAgICBsZXQgYW5jaWVudFRhYiA9IHRoaXMuc3RhdGUuYWN0aXZlXHJcbiAgICAgICAgaWYoYW5jaWVudFRhYiA9PT0gdGFiLnByb3BzLmlkKXJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0YWIuc2V0QWN0aXZlKHRydWUpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogdGFiLnByb3BzLmlkXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYm5hdlwiIHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiRnVsbCBQcm9maWxlXCIgaWQ9XCJwcm9maWxlXCIvPlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIlVzZXIgUG9wb3V0XCIgaWQ9XCJwb3BvdXRcIi8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8UHJlc2VuY2VFcnJvckNhdGNoZXIgcHJldmlldz17dGhpcy5wcmV2aWV3fSBzdGF0ZT17dGhpcy5zdGF0ZS5ycGN9IHByb3BzPXt7cHJldmlldzogdGhpc319IGtleT17dGhpcy5zdGF0ZS5hY3RpdmV9IC8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfSAgIFxyXG5cclxuICAgIGlzQWN0aXZlKHRhYil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlID09PSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJldmlldygpe1xyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxyXG4gICAgICAgIHJldHVybiBQb3BvdXRcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgVGFiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlKXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUluYWN0aXZlYFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMucHJldmlldy5jaGFuZ2VUYWIodGhpcylcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgZW1wdHlDbGFzc2VzXHJcbmNsYXNzIFByZXNlbmNlRXJyb3JDYXRjaGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbXBvbmVudERpZENhdGNoKGVyciwgZXJySW5mbyl7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyckluZm8pXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGVycm9yOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlKXtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmVycm9yKXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IG5ldyB0aGlzLnByb3BzLnByZXZpZXcodGhpcy5wcm9wcy5wcm9wcylcclxuICAgICAgICAgICAgICAgIHByZXZpZXcuc2V0U3RhdGUodGhpcy5wcm9wcy5zdGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aWV3LnJlbmRlcigpXHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBlbXB0eUNsYXNzZXMgPSBlbXB0eUNsYXNzZXMgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5lbXB0eVN0YXRlSW1hZ2UpXHJcbiAgICAgICAgICAgIGlmKCFlbXB0eUNsYXNzZXMpe1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogXCIyMHB4XCJcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUltYWdlfSBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUhlYWRlcn0+QW4gZXJyb3Igb2NjdXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy4gSm9pbiBvdXIgwq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtgJHtCRFYyLmFuY2hvckNsYXNzZXMuYW5jaG9yfSAke0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWB9IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD17MH0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5qb2luTEMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgc2VydmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgwq0gZm9yIGhlbHAuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxubGV0IHBvcG91dE1vZHVsZXNcclxubGV0IFVzZXJQb3BvdXRDb21wb25lbnRcclxubGV0IFBvcG91dFByb3BzXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwb3BvdXRNb2R1bGVzIHx8IChwb3BvdXRNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkZsdXhDb250YWluZXIoRm9yd2FyZFJlZihTdWJzY3JpYmVHdWlsZE1lbWJlcnNDb250YWluZXIoVXNlclBvcG91dCkpKVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXtcclxuICAgICAgICAgICAgaWYoIVVzZXJQb3BvdXQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0IGNvbXBvbmVudC5gKVxyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQb3BvdXQuZGVmYXVsdCh7dXNlcklkOiB1c2VyLmlkLCBndWlsZElkOiBudWxsLCBjaGFubmVsSWQ6IG51bGwsIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWV9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IHJlbmRlcjEudHlwZS5yZW5kZXIoUG9wb3V0UHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSBuZXcgcmVuZGVyMi50eXBlKHJlbmRlcjIucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQgPSByZW5kZXIzLnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0Q29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQb3BvdXRQcm9wcyA9IG5ldyBVc2VyUG9wb3V0LmRlZmF1bHQoe3VzZXJJZDogdXNlci5pZCwgZ3VpbGRJZDogbnVsbCwgY2hhbm5lbElkOiBudWxsLCBkaXNhYmxlVXNlclByb2ZpbGVMaW5rOiB0cnVlfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3RvcCBwcm9wYWdhdGlvbiBzaGl0LlxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IDxkaXYgey4uLndpbmRvdy5MaWdodGNvcmQuQXBpLl8uZXhjbHVkZVByb3BlcnRpZXMocG9wb3V0LnByb3BzLCBbXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiXSl9IC8+XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAge2NvbnRhaW5lcn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHByb2ZpbGVNb2R1bGVzXHJcbmxldCBVc2VyUHJvZmlsZUNvbXBvbmVudFxyXG5sZXQgUHJvZmlsZVByb3BzXHJcbmxldCBjb25uZWN0ZWRQcm9maWxlU3RvcmVcclxuY2xhc3MgUHJvZmlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwcm9maWxlTW9kdWxlcyB8fCAocHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclByb2ZpbGVcIiksXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBVc2VyUHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlck1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUHJvZmlsZS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJcclxuICAgICAgICAgICAgfSkucmVuZGVyKClcclxuICAgICAgICAgICAgY29ubmVjdGVkUHJvZmlsZVN0b3JlID0gcmVuZGVyMS50eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjIgPSBuZXcgcmVuZGVyMS50eXBlKHJlbmRlcjEucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSByZW5kZXIyLnR5cGUucmVuZGVyKHJlbmRlcjIucHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjQgPSBuZXcgcmVuZGVyMy50eXBlKHJlbmRlcjMucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlQ29tcG9uZW50ID0gcmVuZGVyNC50eXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQcm9maWxlQ29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQcm9maWxlUHJvcHMgPSBuZXcgY29ubmVjdGVkUHJvZmlsZVN0b3JlKHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcixcclxuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHt9XHJcbiAgICAgICAgfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gbmV3IFVzZXJQcm9maWxlQ29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFByb2ZpbGVQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIHByb2ZpbGUucHJvcHMuc3R5bGUgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIHtwcm9maWxlfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcbi8qXHJcbmxldCBwb3BvdXRNb2R1bGVcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHsgLy8gVE9ETzogUHJvYmFibHkgdXNlIGludGVybmFsIENvbXBvbmVudHMgaW5zdGVhZCBvZiBtYWtpbmcgaXQgZnJvbSBzY3JhdGNoLlxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gcG9wb3V0TW9kdWxlIHx8IChwb3BvdXRNb2R1bGUgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ib3QpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hY3Rpdml0eVVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tdXRlZCAmJiBlLndyYXBwZXIgJiYgZS5iYXNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBybyAmJiBlLmlubGluZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcylbMF0uZGVmYXVsdC5NZXNzYWdlcyxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHByb3RpcE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGF2YXRhck1vZHVsZTEsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGUxXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZTEuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VVc2VyUG9wb3V0fSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrVXNlclBvcG91dCA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVVzZXJQb3BvdXR9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VyUG9wb3V0fSByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyUGxheWluZ30+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5Q2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5oZWFkZXJUb3B9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFyV3JhcHBlck5vcm1hbH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YXZhdGFyTW9kdWxlMX0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFySGludH0gdmlld0JveD1cIjAgMCA4MCA4MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50SW5uZXJ9PntNZXNzYWdlcy5WSUVXX1BST0ZJTEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJUZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnTm9OaWNrbmFtZX0gJHtuYW1lVGFnTW9kdWxlMS5uYW1lVGFnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7bmFtZVRhZ01vZHVsZTEudXNlcm5hbWV9ICR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnVXNlcm5hbWVOb05pY2tuYW1lfWB9Pnt1c2VyLnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+I3t1c2VyLmRpc2NyaW1pbmF0b3J9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVVzZXJQb3BvdXR9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmhlYWRlclRleHROb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0+e01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWx9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzVXNlclBvcG91dCA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5uYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eU5hbWV9PntkYXRhLm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLmRldGFpbHMpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnN0YXRlfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPXtkYXRhLnN0YXRlfT57ZGF0YS5zdGF0ZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZUNvbXBvbmVudCA9IHRpbWVzdGFtcFJlbmRlcihUaW1lc3RhbXAsIE1lc3NhZ2VzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Jvb3RNb2R1bGUxLmJvZHl9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9ICR7cm9vdE1vZHVsZTEuYm9keUlubmVyfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5VGl0bGV9PntNZXNzYWdlcy5OT1RFfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtub3RlTW9kdWxlMS5ub3RlfSAke3Jvb3RNb2R1bGUxLm5vdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcGxhY2Vob2xkZXI9e01lc3NhZ2VzLk5PVEVfUExBQ0VIT0xERVJ9IG1heGxlbmd0aD1cIjI1NlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjM2cHhcIn19IGRpc2FibGVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5mb290ZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb3RpcH0gJHtwcm90aXBNb2R1bGUxLmlubGluZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHtwcm90aXBNb2R1bGUxLnByb30gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfSBzdHlsZT17e2NvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCJ9fT57TWVzc2FnZXMuUElOTkVEX01FU1NBR0VTX1BST19USVB9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Y29sb3JNb2R1bGUxLmNvbG9yU3RhbmRhcmR9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fSAke3Byb3RpcE1vZHVsZTEudGlwfWB9PntNZXNzYWdlcy5DT05URVhUX01FTlVfSElOVH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBTdGF0dXNNb2R1bGVzXHJcbmNsYXNzIFN0YXR1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBTdGF0dXNNb2R1bGVzIHx8IChTdGF0dXNNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRQcmVzZW5jZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGdldFByZXNlbmNlLFxyXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBnZXRQcmVzZW5jZS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzXHJcbiAgICAgICAgaWYoc3RhdHVzID09PSBcImludmlzaWJsZVwiKXN0YXR1cyA9IFwib2ZmbGluZVwiXHJcbiAgICAgICAgcmV0dXJuIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHg9XCI2MFwiIHk9XCI2MFwiIGZpbGw9XCIjZmZmZmZmXCIgbWFzaz17YHVybCgjc3ZnLW1hc2stc3RhdHVzLSR7c3RhdHVzfSlgfSBjbGFzc05hbWU9e3BvaW50ZXJFdmVudHN9PjwvcmVjdD5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHRpbWVzdGFtcENsYXNzID0gXCJcIlxyXG5cclxubGV0IFByb2ZpbGVNb2R1bGVzXHJcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgeyAvLyBUT0RPOiBQcm9iYWJseSB1c2UgaW50ZXJuYWwgQ29tcG9uZW50cyBpbnN0ZWFkIG9mIG1ha2luZyBpdCBmcm9tIHNjcmF0Y2guXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBQcm9maWxlTW9kdWxlcyB8fCAoUHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXggJiYgZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmJvdClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmFjdGl2aXR5UHJvZmlsZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm11dGVkICYmIGUud3JhcHBlciAmJiBlLmJhc2UpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckZhZGUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzKVswXS5kZWZhdWx0Lk1lc3NhZ2VzXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+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+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSovIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0xheWVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5rZXl1cExpc3RlbmVyID0gdGhpcy5rZXl1cExpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAga2V5dXBMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLnJlZnMucm9vdC5wYXJlbnROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqIHByb2dyZXNzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogKDEgLSBwcm9ncmVzcyl9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCIucHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LnJlbW92ZShcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqIHByb2dyZXNzICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiW2NsYXNzKj1cXFwibGF5ZXItXFxcIl1cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LmFkZChcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqICgxIC0gcHJvZ3Jlc3MpICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwibGF5ZXIgYmQtbGF5ZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLCBpZDogdGhpcy5wcm9wcy5pZCwgcmVmOiBcInJvb3RcIiwgc3R5bGU6IHtvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IFwic2NhbGUoMS4xKSB0cmFuc2xhdGVaKDBweClcIn19LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uL3Rvb2xzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4uL3RhYkJhclNlcGFyYXRvclwiO1xyXG5pbXBvcnQgVGFiQmFySGVhZGVyIGZyb20gXCIuLi90YWJCYXJIZWFkZXJcIjtcclxuaW1wb3J0IFRhYkJhckl0ZW0gZnJvbSBcIi4uL3RhYkJhckl0ZW1cIjtcclxuXHJcbmltcG9ydCBTZXJ2ZXJDYXJkIGZyb20gXCIuL3NlcnZlckNhcmRcIjtcclxuaW1wb3J0IFNpZGViYXJWaWV3IGZyb20gXCIuL3NpZGViYXJWaWV3XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHVibGljU2VydmVycyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5ID0gdGhpcy5jaGFuZ2VDYXRlZ29yeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaEtleURvd24gPSB0aGlzLnNlYXJjaEtleURvd24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbiA9IHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5qb2luID0gdGhpcy5qb2luLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ID0gdGhpcy5jb25uZWN0LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRHdWlsZHNcIl0pO1xyXG4gICAgICAgIHRoaXMuQXZhdGFyRGVmYXVsdHMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiXSk7XHJcbiAgICAgICAgdGhpcy5JbnZpdGVBY3Rpb25zID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7XHJcbiAgICAgICAgdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFNvcnRlZEd1aWxkc1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxyXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogMCxcclxuICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucHJvcHMucm9vdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZldGNoKGAke3NlbGYuZW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiXHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgYXdhaXQgcmVzLnRleHQoKVxyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17c2VsZi5qb2lufS8+KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgIH0sIFtdKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIHNlcnZlcnMgPSBzZWxmLnN0YXRlLnNlcnZlcnMuY29uY2F0KHNlcnZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9zZXJ2ZXJzLnVuc2hpZnQoc2VsZi5iZFNlcnZlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlbmQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSBkYXRhLm5leHQgKz0gYCZ0ZXJtPSR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkpIGRhdGEubmV4dCArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm5leHQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBgU2hvd2luZyAxLSR7ZW5kfSBvZiAke2RhdGEudG90YWx9IHJlc3VsdHMgaW4gJHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgc2VydmVyczogc2VydmVycyxcclxuICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmKTtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVmcy5zYnYucmVmcy5jb250ZW50U2Nyb2xsZXIuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGxvYWQgc2VydmVycy4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlsc1wiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgam9pbihzZXJ2ZXJDYXJkKSB7XHJcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gdGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShzZXJ2ZXJDYXJkLnByb3BzLmludml0ZV9jb2RlKTtcclxuXHJcbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7c2VydmVyQ2FyZC5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcn1gLHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2VydmVyQ2FyZC5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi53aW5kb3dPcHRpb25zO1xyXG4gICAgICAgIG9wdGlvbnMueCA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBvcHRpb25zLndpZHRoIC8gMik7XHJcbiAgICAgICAgb3B0aW9ucy55ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWSArIHdpbmRvdy5pbm5lckhlaWdodCAvIDIgLSBvcHRpb25zLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cgPSBuZXcgKHdpbmRvdy5yZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3cpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0P3Njb3Blcz1ndWlsZHMuam9pbiZwcmV2aW91c1VybD1odHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIjtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cud2ViQ29udGVudHMub24oXCJkaWQtbmF2aWdhdGVcIiwgKGV2ZW50LCB1cmwpID0+IHtcclxuICAgICAgICAgICAgaWYgKHVybCAhPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiKSByZXR1cm47XHJcbiAgICAgICAgICAgIHNlbGYuam9pbldpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBzZWxmLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy5sb2FkVVJMKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWluaW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xyXG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjc1MDArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiMjAwMDArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy84NjAwNDc0NDk2NjkxNDA0OC8yOTJlN2Y2YmZmZjJiNzFkZmQxM2U1MDhhODU5YWVkZC53ZWJwXCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiMzArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiNTArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgTGlnaHRjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vYXZhdGFyczMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjU2OTAwNTg/cz0yMDAmdj00XCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjdlRmZmMkFcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlciwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSlcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vc2VhcmNoLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2luRW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0RW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qb2luLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb2Ase1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogMCxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMixcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclZpZXcsIHtyZWY6IFwic2J2XCJ9LCB0aGlzLmNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaWRlYmFyOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuc2lkZWJhclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuY29udGVudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b29sczoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwicHRcIiwgcmVmOiBcInRvb2xzXCIsIG9uQ2xpY2s6IHRoaXMuY2xvc2V9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lkZWJhcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJcIiwga2V5OiBcInBzXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyIFNJREVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCIsIHN0eWxlOiB7Zm9udFNpemU6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJQdWJsaWMgU2VydmVyc1wiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySGVhZGVyLCB7dGV4dDogXCJDYXRlZ29yaWVzXCJ9KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJJdGVtLCB7aWQ6IGluZGV4LCBvbkNsaWNrOiB0aGlzLmNoYW5nZUNhdGVnb3J5LCBrZXk6IGluZGV4LCB0ZXh0OiB2YWx1ZSwgc2VsZWN0ZWQ6IHRoaXMuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gaW5kZXh9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlcixcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRleHQtaW5wdXQgZmxleC12ZXJ0aWNhbFwiLCBzdHlsZToge3dpZHRoOiBcIjE3MnB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7cmVmOiBcInNlYXJjaGlucHV0XCIsIG9uS2V5RG93bjogdGhpcy5zZWFyY2hLZXlEb3duLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiaW5wdXQgZGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJTZWFyY2guLi5cIiwgbWF4TGVuZ3RoOiBcIjUwXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hLZXlEb3duKGUpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nIHx8IGUud2hpY2ggIT09IDEzKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogZS50YXJnZXQudmFsdWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgcXVlcnkgPSBgP3Rlcm09JHtlLnRhcmdldC52YWx1ZX1gO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgIT09IDApIHtcclxuICAgICAgICAgICAgcXVlcnkgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2gocXVlcnksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBzZWxmLnJlZnMuc2VhcmNoaW5wdXQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlkID09PSAwKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKGA/Y2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tpZF19YCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxKSByZXR1cm4gc2VsZi5ub3RDb25uZWN0ZWQ7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7cmVmOiBcImNvbnRlbnRcIiwga2V5OiBcInBjXCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSksXHJcbiAgICAgICAgICAgIHNlbGYuYmRTZXJ2ZXIsXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXIsIGpvaW46IHNlbGYuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubmV4dCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO3NlbGYuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgc2VsZi5zZWFyY2goc2VsZi5zdGF0ZS5uZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5sb2FkaW5nID8gXCJMb2FkaW5nXCIgOiBcIkxvYWQgTW9yZVwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5sZW5ndGggPiAwICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vdENvbm5lY3RlZCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvL3JldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwgeyB0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlIH0pO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJuY2NcIiwgcmVmOiBcImNvbnRlbnRcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgICAgICBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzZWxmLmNvbm5lY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IFwiMThweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSwgc2VsZi5iZFNlcnZlclxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJhXCIsXHJcbiAgICAgICAgICAgICAgICB7aHJlZjogXCJodHRwczovL2Rpc2NvcmRzZXJ2ZXJzLmNvbVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJEaXNjb3Jkc2VydmVycy5jb21cIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCB7Y29ubmVjdGlvbn0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIGlmIChjb25uZWN0aW9uLnN0YXRlICE9PSAyKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgXCJDb25uZWN0ZWQgYXM6IFwiLFxyXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWluSGVpZ2h0OiBcIjIwcHhcIn0sIHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiBzZWxmLmNvbm5lY3R9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlY29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxufVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXJ2ZXJDYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc2VydmVyLmljb25VcmwpIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBqb2luZWQ6IHRoaXMucHJvcHMuZ3VpbGRMaXN0LmluY2x1ZGVzKHRoaXMucHJvcHMuc2VydmVyLmlkZW50aWZpZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjYXJkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2FyZCAmJiBlLmNhcmRQcmltYXJ5KVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxleENoaWxkICYmIGUuX2hvcml6b250YWxSZXZlcnNlKVswXVxyXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAvLyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAvLyBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge3JlZjogXCJpbWdcIiwgY2xhc3NOYW1lOiBcImJkLXNlcnZlci1pbWFnZVwiLCBzcmM6IHNlcnZlci5pY29uVXJsLCBvbkVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksIGRyYWdnYWJsZTogZmFsc2V9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuZmxleENoaWxkK1wiIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwK1wiIGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1uYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5lcnJvciAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGRpc2FibGVkLTlhRjJ1Z1wiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiNjMTNhM2FcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk5cIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCJ9LCBvbkNsaWNrOiAoKSA9PiB7dGhpcy5qb2luKCk7fX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmpvaW4odGhpcyk7XHJcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2Nyb2xsZXIgZnJvbSBcIi4uL3Njcm9sbGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2lkZWJhclZpZXcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NpZGViYXIsIGNvbnRlbnQsIHRvb2xzfSA9IHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aSB1aS1zdGFuZGFyZC1zaWRlYmFyLXZpZXdcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJSZWdpb24tVkZUVWtOIHNpZGViYXItcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7a2V5OiBcInNpZGViYXJTY3JvbGxlclwiLCByZWY6IFwic2lkZWJhclNjcm9sbGVyXCIsIHNpZGViYXI6IHRydWUsIGZhZGU6IHNpZGViYXIuZmFkZSB8fCB0cnVlLCBkYXJrOiBzaWRlYmFyLmRhcmsgfHwgdHJ1ZX0sIHNpZGViYXIuY29tcG9uZW50KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50UmVnaW9uLTNuRHVZeSBjb250ZW50LXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRUcmFuc2l0aW9uV3JhcC0zaHFPRVcgY29udGVudC10cmFuc2l0aW9uLXdyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcC0zWVpYZG0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdC0yOE1TbjAgc2Nyb2xsZXJUcmFjay0xWklwc3ZcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyLTI2bmMxZSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlciBzY3JvbGxlclwiLCByZWY6IFwiY29udGVudFNjcm9sbGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudENvbHVtbi0yaHJJWUggY29udGVudENvbHVtbkRlZmF1bHQtMVZRa0dNIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sIGNvbnRlbnQuY29tcG9uZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLmNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUmVsb2FkSWNvbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xyXG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiNkY2RkZGVcIixcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1yZWxvYWQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7d2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCJ9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6IFwibm9uZVwiLCBkOiBcIk0wIDBoMjR2MjRIMHpcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2Nyb2xsZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9zY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXlcclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXJIb3Jpem9udGFsKVswXVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyUmVnaW9uU2Nyb2xsZXIpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9JHt0aGlzLnByb3BzLmZhZGUgPyBcIiBcIitzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlIDogXCJcIn1gO1xyXG4gICAgICAgIGxldCBzY3JvbGxlckNsYXNzID0gc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyK1wiIHNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNpZGViYXIpIHNjcm9sbGVyQ2xhc3MgKz0gYCAke3Njcm9sbGVyTW9kdWxlMi5zaWRlYmFyUmVnaW9uU2Nyb2xsZXJ9IHNpZGViYXItcmVnaW9uLXNjcm9sbGVyYFxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNvbnRlbnRDb2x1bW4pIHtcclxuICAgICAgICAgICAgc2Nyb2xsZXJDbGFzcyArPSBcIiBcIitzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyK1wiIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXB9IGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRyYWNrfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHtjaGlsZHJlbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJ3cmFwXCIsIGNsYXNzTmFtZTogd3JhcHBlckNsYXNzfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJcIiwgcmVmOiBcInNjcm9sbGVyXCIsIGNsYXNzTmFtZTogc2Nyb2xsZXJDbGFzc30sXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzR3JvdXAgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3RpdGxlLCBzZXR0aW5ncywgYnV0dG9ufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQ29tcG9uZW50ID0gYnV0dG9uID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiBidXR0b24ub25DbGlja30sIGJ1dHRvbi50aXRsZSkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF0sIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShpZCwgY2hlY2tlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgfSldO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1RpdGxlIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuLy9oMi0yZ1dFLW8gdGl0bGUtM3NaV1lRIHNpemUxNi0xNGNHejUgaGVpZ2h0MjAtbU8yZUlOIHdlaWdodFNlbWlCb2xkLU5KZXh6aSBkYS1oMiBkYS10aXRsZSBkYS1zaXplMTYgZGEtaGVpZ2h0MjAgZGEtd2VpZ2h0U2VtaUJvbGQgZGVmYXVsdENvbG9yLTFfYWpYMCBkYS1kZWZhdWx0Q29sb3IgbWFyZ2luVG9wNjAtM1BHYnRLIGRhLW1hcmdpblRvcDYwIG1hcmdpbkJvdHRvbTIwLTMycUlENyBkYS1tYXJnaW5Cb3R0b20yMFxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5cclxubGV0IGNsYXNzbmFtZXMgPSBbXVxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxyXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm5hbWUpWzBdXHJcbiAgICBjbGFzc25hbWVzLnB1c2goY2xhc3NOYW1lKVxyXG4gICAgcmV0dXJuIGNsYXNzTmFtZVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2hJdGVtIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSAhdGhpcy5wcm9wcy5jaGVja2VkO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5jaGVja2VkKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHt0ZXh0LCBpbmZvfSA9IHRoaXMucHJvcHMuZGF0YTtcclxuICAgICAgICBpZighY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKFwiYmV0YS1cIikpKXtcclxuICAgICAgICAgICAgY2xhc3NuYW1lcy5wdXNoKEJETW9kdWxlcy5nZXQoZSA9PiBlLmJldGEgJiYgKCFlLmNvbnRhaW5lciAmJiAhZS51c2VyU2V0dGluZ3NWb2ljZSkpWzBdLmJldGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucHJvcHMuZGF0YS5leHBlcmltZW50YWwpe1xyXG4gICAgICAgICAgICBpbmZvID0gW1xyXG4gICAgICAgICAgICAgICAgaW5mbyxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdXBcIiwge2NsYXNzTmFtZTogZ2V0Q2xhc3NOYW1lKFwiYmV0YVwiKX0sIFwiKEVYUEVSSU1FTlRBTClcIilcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZmxleCBmbGV4LXZlcnRpY2FsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXAgdWktc3dpdGNoLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC1ob3Jpem9udGFsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDMgbWFyZ2luLXJlc2V0IG1hcmdpbi1yZXNldCB1aS1mbGV4LWNoaWxkXCJ9LCB0ZXh0KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10ZXh0IHN0eWxlLWRlc2NyaXB0aW9uIG1hcmdpbi10b3AtNFwiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LCBpbmZvKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckhlYWRlciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJ9LCB0aGlzLnByb3BzLnRleHQsIHRoaXMucHJvcHMuYnV0dG9uKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVGFiQmFySXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnByb3BzLnNlbGVjdGVkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYHVpLXRhYi1iYXItaXRlbSR7dGhpcy5wcm9wcy5zZWxlY3RlZCA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWAsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnByb3BzLmlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhclNlcGFyYXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLXNlcGFyYXRvciBtYXJnaW4tdG9wLTggbWFyZ2luLWJvdHRvbS04XCJ9KTtcclxuICAgIH1cclxufSIsIlwidXNlIHN0cmljdFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdFxyXG5cclxuY29uc3QgaW50ZXJ2YWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuSW50ZXJ2YWwpWzBdXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcG9uZW50LCBNZXNzYWdlcykge1xyXG4gICAgY2xhc3MgVGltZVJlbmRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgIHRoaXMuX2ludGVydmFsID0gbmV3IGludGVydmFsTW9kdWxlMS5JbnRlcnZhbCgpXHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbC5zdGFydCgxZTMsIChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHNlbGYuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbC5zdG9wKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShhY3Rpdml0eSl7XHJcbiAgICAgICAgICAgIGlmKGFjdGl2aXR5LnRpbWVzdGFtcHMuZW5kID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuZW5kICYmIGFjdGl2aXR5LnRpbWVzdGFtcHMuc3RhcnQgPT09IHRoaXMucHJvcHMudGltZXN0YW1wcy5zdGFydClyZXR1cm5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh0aGlzLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXRVcGRhdGVkVGltZSgpe1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHRoaXMucHJvcHMudGltZXN0YW1wc1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKSAvIDFlMztcclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLmVuZCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREaWZmKG5vdywgY2hlY2tVbml4KHRpbWVzdGFtcHMuZW5kKSAvIDFlMylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihudWxsICE9IHRpbWVzdGFtcHMuc3RhcnQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihjaGVja1VuaXgodGltZXN0YW1wcy5zdGFydCkgLyAxZTMsIG5vdylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaG91cnM6IDAsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzOiAwLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kczogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJUaW1lKG51bWJlciwgcmVtb3ZlWmVybyl7XHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gPT09IHVuZGVmaW5lZClyZW1vdmVaZXJvID0gZmFsc2VcclxuICAgICAgICAgICAgaWYocmVtb3ZlWmVybyAmJiBudW1iZXIgPD0gMClyZXR1cm4gLTFcclxuICAgICAgICAgICAgaWYobnVtYmVyIDwgMTApcmV0dXJuIFwiMFwiK251bWJlclxyXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXREaWZmKHRpbWVzdGFtcCwgbm93KXtcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gTWF0aC5tYXgobm93IC0gdGltZXN0YW1wLCAwKVxyXG4gICAgICAgICAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3IoaG91cnMpICUgNjBcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKGhvdXJzIC8gNjApICUgNjBcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiBNYXRoLmZsb29yKGhvdXJzIC8gMzYwMCkgJSAyNCxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXMsXHJcbiAgICAgICAgICAgICAgICBzZWNvbmRzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgICAgIGxldCB0aW1lc3RhbXBzID0gcHJvcHMudGltZXN0YW1wc1xyXG5cclxuICAgICAgICAgICAgbGV0IHVzZWRQcm9wcyA9IGZ1bmN0aW9uKHByb3BzLCBpdGVtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gcHJvcHMpIHJldHVybiB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHt9XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWl0ZW1zLmluZGV4T2Yoa2V5KSA+PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wc1trZXldID0gcHJvcHNba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGltZXN0YW1wc1xyXG4gICAgICAgICAgICB9KHByb3BzLCBbXCJ0aW1lc3RhbXBzXCJdKVxyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdGF0ZVxyXG4gICAgICAgICAgICBsZXQgaG91cnMgPSBzdGF0ZS5ob3Vyc1xyXG4gICAgICAgICAgICBsZXQgbWludXRlcyA9IHN0YXRlLm1pbnV0ZXNcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBzdGF0ZS5zZWNvbmRzXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgaG91cnM6IHRoaXMucmVuZGVyVGltZShob3VycywgITApLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogdGhpcy5yZW5kZXJUaW1lKG1pbnV0ZXMpLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kczogdGhpcy5yZW5kZXJUaW1lKHNlY29uZHMpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuZW5kICE9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwgdXNlZFByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogTWVzc2FnZXMuVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfRU5ELmZvcm1hdChkYXRhKVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGltZXN0YW1wcy5zdGFydCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX1NUQVJULmZvcm1hdChkYXRhKVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVGltZVJlbmRlclxyXG59O1xyXG5cclxuZnVuY3Rpb24gY2hlY2tVbml4KGUpIHtcclxuICAgIHJldHVybiAoXCJcIiArIGUpLmxlbmd0aCA8IDEzID8gMWUzICogZSA6IGVcclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVG9vbHMgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IHRvb2xzTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9vbHNDb250YWluZXIpWzBdXHJcbiAgICAgICAgbGV0IGNvbnRhaW5lck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRhaW5lciAmJiBlLmNsb3NlQnV0dG9uICYmIGUuY2xvc2VCdXR0b25Cb2xkKVswXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ0b29scy1jb250YWluZXIgXCIrdG9vbHNNb2R1bGUudG9vbHNDb250YWluZXJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ0b29scyBcIit0b29sc01vZHVsZS50b29sc30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY29udGFpbmVyTW9kdWxlLmNvbnRhaW5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuLWNsb3NlIFwiK2NvbnRhaW5lck1vZHVsZS5jbG9zZUJ1dHRvbiwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFhTdmcsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZXNjLXRleHQgXCIrY29udGFpbmVyTW9kdWxlLmtleWJpbmR9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkVTQ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jbG9zZUJ1dHRvbiAmJiBlLmtleWJpbmRCb2xkKVswXS5jbG9zZUJ1dHRvbi5zcGxpdChcIiBcIilbMF0pO1xyXG4gICAgICAgIGlmIChjbG9zZUJ1dHRvbikgY2xvc2VCdXR0b24uY2xpY2soKTtcclxuICAgIH1cclxufSIsIi8qKlxyXG4gKiBUb29sdGlwIHRoYXQgYXV0b21hdGljYWxseSBzaG93IGFuZCBoaWRlIHRoZW1zZWx2ZXMgb24gbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMuXHJcbiAqIFdpbGwgYWxzbyByZW1vdmUgdGhlbXNlbHZlcyBpZiB0aGUgbm9kZSB0byB3YXRjaCBpcyByZW1vdmVkIGZyb20gRE9NIHRocm91Z2hcclxuICogYSBNdXRhdGlvbk9ic2VydmVyLlxyXG4gKlxyXG4gKiBOb3RlIHRoaXMgaXMgbm90IHVzaW5nIERpc2NvcmQncyBpbnRlcm5hbHMgYnV0IG5vcm1hbCBET00gbWFuaXB1bGF0aW9uIGFuZCBlbXVsYXRlc1xyXG4gKiBEaXNjb3JkJ3Mgb3duIHRvb2x0aXBzIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXHJcbiAqXHJcbiAqIEBtb2R1bGUgRW11bGF0ZWRUb29sdGlwXHJcbiAqIEB2ZXJzaW9uIDAuMC4xXHJcbiAqL1xyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljIGRpc2FibGVkUG9pbnRlckV2ZW50cy0xcHRnVEJcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMjM3cHg7IGJvdHRvbTogNTFweDtcIj5cclxuLy9cdDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyB0b29sdGlwVG9wLVhERFN4eCB0b29sdGlwQmxhY2stUFBHNDd6IHRvb2x0aXBEaXNhYmxlUG9pbnRlckV2ZW50cy0zZWFCR05cIiBzdHlsZT1cIm9wYWNpdHk6IDE7IHRyYW5zZm9ybTogbm9uZTtcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHQ8ZGl2IGNsYXNzPVwidG9vbHRpcENvbnRlbnQtYnFWTFdLXCI+VXNlciBTZXR0aW5nczwvZGl2PlxyXG4vL1x0PC9kaXY+XHJcbi8vPC9kaXY+XHJcblxyXG4vLzxkaXYgY2xhc3M9XCJsYXllci12OUh5WWNcIiBzdHlsZT1cInRvcDogODYwcHg7IGxlZnQ6IDYzMi41cHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwVG9wLVhERFN4eFwiPlxyXG4vL1x0XHQ8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLXCI+PC9kaXY+XHJcbi8vXHRcdENoYW5nZWxvZ1xyXG4vL1x0PC9kaXY+XHJcbi8vPC9kaXY+XHJcbmxldCBUb29sdGlwQ2xhc3Nlc1xyXG5mdW5jdGlvbiBnZXRUb29sdGlwQ2xhc3Nlcygpe1xyXG5cdGlmKFRvb2x0aXBDbGFzc2VzKXJldHVybiBUb29sdGlwQ2xhc3Nlc1xyXG5cdHJldHVybiBUb29sdGlwQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwidG9vbHRpcFwiLCBcInRvb2x0aXBCbGFja1wiKTtcclxufVxyXG5sZXQgVG9vbHRpcExheWVyc1xyXG5mdW5jdGlvbiBnZXRUb29sdGlwTGF5ZXJzKCl7XHJcblx0aWYoVG9vbHRpcExheWVycylyZXR1cm4gVG9vbHRpcExheWVyc1xyXG5cdHJldHVybiBUb29sdGlwTGF5ZXJzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJsYXllclwiLCBcImxheWVyQ29udGFpbmVyXCIpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDbGFzcyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XHJcbiAgICBjb25zdCB1cHBlckNhc2UgPSBzaWRlT3JDb2xvclswXS50b1VwcGVyQ2FzZSgpICsgc2lkZU9yQ29sb3Iuc2xpY2UoMSk7XHJcbiAgICBjb25zdCB0b29sdGlwQ2xhc3MgPSBnZXRUb29sdGlwQ2xhc3NlcygpW2B0b29sdGlwJHt1cHBlckNhc2V9YF07XHJcbiAgICBpZiAodG9vbHRpcENsYXNzKSByZXR1cm4gdG9vbHRpcENsYXNzO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBjbGFzc0V4aXN0cyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XHJcbiAgICByZXR1cm4gZ2V0Q2xhc3Moc2lkZU9yQ29sb3IpID8gdHJ1ZSA6IGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgdG9QeCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9cHhgO1xyXG59O1xyXG5cclxuLyogPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkYS1sYXllclwiIHN0eWxlPVwibGVmdDogMjM0LjVweDsgYm90dG9tOiA1MXB4O1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIGRhLXRvb2x0aXAgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3elwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcksgZGEtdG9vbHRpcFBvaW50ZXJcIj48L2Rpdj5cclxuICAgICAgICBVc2VyIFNldHRpbmdzXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+ICovXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRlZFRvb2x0aXAge1xyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQGNvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8alF1ZXJ5KX0gbm9kZSAtIERPTSBub2RlIHRvIG1vbml0b3IgYW5kIHNob3cgdGhlIHRvb2x0aXAgb25cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlwIC0gc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9YmxhY2tdIC0gY29ycmVsYXRlcyB0byB0aGUgZGlzY29yZCBzdHlsaW5nL2NvbG9ycyAoYmxhY2ssIGJyYW5kLCBncmVlbiwgZ3JleSwgcmVkLCB5ZWxsb3cpXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNpZGU9dG9wXSAtIGNhbiBiZSBhbnkgb2YgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XHJcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmV2ZW50RmxpcD1mYWxzZV0gLSBwcmV2ZW50cyBtb3ZpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgaXQgaXMgdG9vIGJpZyBvciBnb2VzIG9mZnNjcmVlblxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kaXNhYmxlZD1mYWxzZV0gLSB3aGV0aGVyIHRoZSB0b29sdGlwIHNob3VsZCBiZSBkaXNhYmxlZCBmcm9tIHNob3dpbmcgb24gaG92ZXJcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3Rvcihub2RlLCB0ZXh0LCBvcHRpb25zID0ge30pIHtcclxuXHRcdGNvbnN0IHtzdHlsZSA9IFwiYmxhY2tcIiwgc2lkZSA9IFwidG9wXCIsIHByZXZlbnRGbGlwID0gZmFsc2UsIGRpc2FibGVkID0gZmFsc2V9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMubm9kZSA9IG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcclxuICAgICAgICB0aGlzLmxhYmVsID0gdGV4dDtcclxuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGUudG9Mb3dlckNhc2UoKTtcclxuXHRcdHRoaXMuc2lkZSA9IHNpZGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLnByZXZlbnRGbGlwID0gcHJldmVudEZsaXA7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG5cclxuICAgICAgICBpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc2lkZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFNpZGUgJHt0aGlzLnNpZGV9IGRvZXMgbm90IGV4aXN0LmApO1xyXG5cdFx0aWYgKCFjbGFzc0V4aXN0cyh0aGlzLnN0eWxlKSkgcmV0dXJuIFV0aWxzLmVycihcIkVtdWxhdGVkVG9vbHRpcFwiLCBgU3R5bGUgJHt0aGlzLnN0eWxlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdFxyXG5cdFx0dGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwTGF5ZXJzKCkubGF5ZXIgKyBcIiBcIiArIGdldFRvb2x0aXBMYXllcnMoKS5kaXNhYmxlZFBvaW50ZXJFdmVudHM7XHJcblxyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cclxuXHRcdHRoaXMubGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMubGFiZWxFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcENvbnRlbnRcclxuXHJcblx0XHRjb25zdCBwb2ludGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHRwb2ludGVyRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBQb2ludGVyO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHBvaW50ZXJFbGVtZW50KTtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHRoaXMubGFiZWxFbGVtZW50KTtcclxuXHRcdHRoaXMuZWxlbWVudC5hcHBlbmQodGhpcy50b29sdGlwRWxlbWVudCk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zaG93KCk7XHJcblxyXG5cdFx0XHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuXHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKHRoaXMubm9kZSkgPiAtMTtcclxuXHRcdFx0XHRcdGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKHRoaXMubm9kZSkpO1xyXG5cdFx0XHRcdFx0aWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaGlkZSgpO1xyXG5cdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb250YWluZXIgd2hlcmUgdGhlIHRvb2x0aXAgd2lsbCBiZSBhcHBlbmRlZC4gKi9cclxuICAgIGdldCBjb250YWluZXIoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLnBvcG91dHMpWzBdLnBvcG91dHMuc3BsaXQoXCIgXCIpWzBdK1wiIH4gLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyQ29udGFpbmVyKVswXS5sYXllckNvbnRhaW5lci5zcGxpdChcIiBcIilbMF0pOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGFib3ZlIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0Fib3ZlKCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPj0gMDsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBiZWxvdyB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dCZWxvdygpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA8PSBVdGlscy5zY3JlZW5IZWlnaHQ7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIGxlZnQgb2YgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93TGVmdCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbGVtZW50ICovXHJcblx0Z2V0IGNhblNob3dSaWdodCgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIDw9IFV0aWxzLnNjcmVlbldpZHRoOyB9XHJcblxyXG4gICAgLyoqIEhpZGVzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWxlYXZlLiAqL1xyXG5cdGhpZGUoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xyXG5cdH1cclxuXHJcbiAgICAvKiogU2hvd3MgdGhlIHRvb2x0aXAuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIG1vdXNlZW50ZXIuIFdpbGwgYXR0ZW1wdCB0byBmbGlwIGlmIHBvc2l0aW9uIHdhcyB3cm9uZy4gKi9cclxuXHRzaG93KCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMubGFiZWw7XHJcblx0XHR0aGlzLmNvbnRhaW5lci5hcHBlbmQodGhpcy5lbGVtZW50KTtcclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwidG9wXCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0Fib3ZlIHx8ICghdGhpcy5jYW5TaG93QWJvdmUgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93QmVsb3coKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwiYm90dG9tXCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0JlbG93IHx8ICghdGhpcy5jYW5TaG93QmVsb3cgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93QWJvdmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaWRlID09IFwibGVmdFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dMZWZ0IHx8ICghdGhpcy5jYW5TaG93TGVmdCAmJiB0aGlzLnByZXZlbnRGbGlwKSkgdGhpcy5zaG93TGVmdCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd1JpZ2h0KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInJpZ2h0XCIpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd1JpZ2h0IHx8ICghdGhpcy5jYW5TaG93UmlnaHQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd1JpZ2h0KCk7XHJcblx0XHRcdGVsc2UgdGhpcy5zaG93TGVmdCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBhYm92ZSB0aGUgbm9kZS4gKi9cclxuXHRzaG93QWJvdmUoKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJ0b3BcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLSAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJIb3Jpem9udGFsbHkoKTtcclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYmVsb3cgdGhlIG5vZGUuICovXHJcblx0c2hvd0JlbG93KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwiYm90dG9tXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBsZWZ0IG9mIHRoZSBub2RlLiAqL1xyXG5cdHNob3dMZWZ0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwibGVmdFwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLSAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93UmlnaHQoKSB7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTGlzdC5hZGQoZ2V0Q2xhc3MoXCJyaWdodFwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyAxMCkpO1xyXG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XHJcblx0fVxyXG5cclxuXHRjZW50ZXJIb3Jpem9udGFsbHkoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgKHRoaXMubm9kZS5vZmZzZXRXaWR0aCAvIDIpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpKSk7XHJcblx0fVxyXG5cclxuXHRjZW50ZXJWZXJ0aWNhbGx5KCkge1xyXG5cdFx0Y29uc3Qgbm9kZWNlbnRlciA9IHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyAodGhpcy5ub2RlLm9mZnNldEhlaWdodCAvIDIpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMikpKTtcclxuXHR9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi90b29sdGlwXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCB0ZXh0ID0gXCJcIn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHRoaXMubm9kZSA9IEJEVjIucmVhY3REb20uZmluZERPTU5vZGUodGhpcyk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAodGhpcy5ub2RlLCB0ZXh0LCB7c3R5bGUsIHNpZGV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnRvb2x0aXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19YU3ZnIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge3htbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDEyIDEyXCIsIHN0eWxlOiB7d2lkdGg6IFwiMThweFwiLCBoZWlnaHQ6IFwiMThweFwifX0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZ1wiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiYWNrZ3JvdW5kXCIsIGZpbGw6IFwibm9uZVwiLCBmaWxsUnVsZTogXCJldmVub2RkXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMCAwaDEydjEySDBcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7Y2xhc3NOYW1lOiBcImZpbGxcIiwgZmlsbDogXCIjZGNkZGRlXCIsIGQ6IFwiTTkuNSAzLjIwNUw4Ljc5NSAyLjUgNiA1LjI5NSAzLjIwNSAyLjVsLS43MDUuNzA1TDUuMjk1IDYgMi41IDguNzk1bC43MDUuNzA1TDYgNi43MDUgOC43OTUgOS41bC43MDUtLjcwNUw2LjcwNSA2XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWtkaXJwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vZHVsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmltcmFmXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInlhdXpsXCIpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/BetterDiscordApp/js/main.min.js b/BetterDiscordApp/js/main.min.js index e80a038..f3c7396 100644 --- a/BetterDiscordApp/js/main.min.js +++ b/BetterDiscordApp/js/main.min.js @@ -1 +1 @@ -module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("rimraf")},function(e,t){e.exports=require("yauzl")},function(e,t){e.exports=require("mkdirp")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return ae})),n.d(s,"currentDiscordVersion",(function(){return le})),n.d(s,"minSupportedVersion",(function(){return ce})),n.d(s,"bbdVersion",(function(){return de})),n.d(s,"bbdChangelog",(function(){return ue})),n.d(s,"settings",(function(){return he})),n.d(s,"defaultCookie",(function(){return pe})),n.d(s,"settingsCookie",(function(){return me})),n.d(s,"settingsRPC",(function(){return ge})),n.d(s,"defaultRPC",(function(){return fe})),n.d(s,"bdpluginErrors",(function(){return be})),n.d(s,"bdthemeErrors",(function(){return ye})),n.d(s,"bdConfig",(function(){return ve})),n.d(s,"bdthemes",(function(){return we})),n.d(s,"bdplugins",(function(){return Ce})),n.d(s,"pluginCookie",(function(){return Ee})),n.d(s,"themeCookie",(function(){return xe}));var r=n(0);const o=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete o.m.__extra_id__,delete o.c.__extra_id__;const i=e=>{for(const t in o.c)if(o.c.hasOwnProperty(t)){const n=o.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let a={find:i,findAll:e=>{const t=[];for(const n in o.c)if(o.c.hasOwnProperty(n)){const s=o.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>i(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>i(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>i(t=>t.displayName===e)};var l=a;window.Lightcord.BetterDiscord.WebpackModules=a;class c{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(c.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;ne.channelTextArea&&e.titleWrapper)[0].channelTextArea.split(" ")[0]+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const u=e[t];let h=!1;const p=()=>{a||console.log("unpatch",t,"of",c),h=!0};return e[t]=function(){if(h)return u.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:p,originalMethod:u,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=d.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&d.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&d.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&p(),n.returnValue},Object.assign(e[t],u),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=u,e[t].toString=function(){return u.toString()}),p}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar.split(" ")[9]+" + div")||null,t=e?e.querySelector("."+BDModules.get(e=>e.membersWrap)[0].membersWrap):null,n=e?e.querySelector("form"):null,s=e?e.getBoundingClientRect().left:310,r=t?t.getBoundingClientRect().left:0,o=r?r-e.getBoundingClientRect().left:d.screenWidth-s-240,i=n?n.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",s+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",i+"px"),document.querySelector("#app-mount").appendChild(a)}const{type:n="",icon:s=!0,timeout:r=3e3}=t,o=document.createElement("div");o.classList.add("bd-toast"),n&&o.classList.add("toast-"+n),n&&s&&o.classList.add("icon"),o.innerText=e,document.querySelector(".bd-toasts").appendChild(o),setTimeout(()=>{o.classList.add("closing"),setTimeout(()=>{o.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},r)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),c.query("#app-mount").append(o);const i=[];return{close:()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=c.createElement('
');for(const n of e){const e=c.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),d.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&c.removeClass(t,"selected"),c.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[c.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),c.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=l.findByProps("push","update","pop","popWithKey"),n=l.findByProps("fixed","improved"),s=l.findByDisplayName("Text"),r=l.findByProps("Child"),o=l.findByProps("Tags","default"),i=l.find(e=>e.defaultProps&&0==e.defaultProps.selectable),a=l.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&a))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p=`v${de}`,footer:m}=e,g=ie.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,a.parse(d)));for(let e=0;eg("li",null,a.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=l.find(e=>"Anchor"==e.displayName),n=l.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),ie.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=l.findByProps("push","update","pop","popWithKey"),r=l.findByDisplayName("Markdown"),o=l.find(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key());if(!s||!o||!r)return d.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:c=i,confirmText:u="Okay",cancelText:h="Cancel",danger:p=!1,key:m}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?ie.React.createElement(r,null,e):e),s.push(o,{header:e,children:t,red:p,confirmText:u,cancelText:h,onConfirm:a,onCancel:c},m)}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}d.showToast=d.suppressErrors(d.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=d;const u=window.require,h=n(2),p=n(1),m=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var g=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{h.existsSync(this.BDFile)||h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(h.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!h.existsSync(this.settingsFile))return;let t=u(this.settingsFile);h.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[m]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),d.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=p.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=p.resolve(ve.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=p.resolve(ve.dataPath,"bdsettings.json"))}getPluginFile(e){return p.resolve(se.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[m][e]||null}setSettingGroup(e,t){this.data.settings[m][e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:h.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(h.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};const f=n(5);var b=new class extends f{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class y{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return se.pluginsFolder}}y.prototype.loadPlugins=async function(){this.loadPluginData(),be.splice(0,0,...await se.loadPlugins());const e=Object.keys(Ce);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},y.prototype.startPlugin=function(e,t=!1){try{Ce[e].plugin.start(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has started.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be started.`,{type:"error"}),Ee[e]=!1,this.savePluginData(),d.err("Plugins",e+" could not be started.",n)}},y.prototype.stopPlugin=function(e,t=!1){try{Ce[e].plugin.stop(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has stopped.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),d.err("Plugins",Ce[e].plugin.getName()+" could not be stopped.",n)}},y.prototype.enablePlugin=function(e,t=!1){Ee[e]||(Ee[e]=!0,this.savePluginData(),this.startPlugin(e,t))},y.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},y.prototype.disablePlugin=function(e,t=!1){Ee[e]&&(Ee[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},y.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},y.prototype.togglePlugin=function(e){Ee[e]?this.disablePlugin(e):this.enablePlugin(e)},y.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},y.prototype.loadPlugin=async function(e){const t=await se.loadContent(e,"plugin");if(t)return me["fork-ps-1"]&&d.showContentErrors({plugins:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(Ce).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){me["fork-ps-1"]&&d.showContentErrors({plugins:[e]})}d.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),b.dispatch("plugin-loaded",n.getName())},y.prototype.unloadPlugin=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const n=t.plugin.getName();Ee[n]&&this.disablePlugin(n,!0);const s=se.unloadContent(Ce[n].filename,"plugin");if(delete Ce[n],s)return me["fork-ps-1"]&&d.showContentErrors({plugins:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("plugin-unloaded",n)},y.prototype.delete=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(se.pluginsFolder,t.filename);n(2).unlinkSync(s)},y.prototype.reloadPlugin=async function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=Ee[n];s&&this.stopPlugin(n,!0);const r=await se.reloadContent(Ce[n].filename,"plugin");if(r)return me["fork-ps-1"]&&d.showContentErrors({plugins:[r]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,r);Ce[n].plugin.load&&"function"==typeof Ce[n].plugin.load&&Ce[n].plugin.load(),s&&this.startPlugin(n,!0),d.log("ContentManager",`${n} v${Ce[n].plugin.getVersion()} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${Ce[n].plugin.getVersion()} was reloaded.`,{type:"success"}),b.dispatch("plugin-reloaded",n)},y.prototype.reload=function(e){return this.reloadPlugin(e)},y.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const s=n(1).resolve(se.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},y.prototype.updatePluginList=function(){const e=se.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},y.prototype.loadPluginData=function(){const e=g.getSettingGroup("plugins");e&&Object.assign(Ee,e)},y.prototype.savePluginData=function(){g.setSettingGroup("plugins",Ee)},y.prototype.newMessage=function(){const e=Object.keys(Ce);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()})}get container(){return document.querySelector("."+BDModules.get(e=>e.popouts)[0].popouts.split(" ")[0]+" ~ ."+BDModules.get(e=>e.layerContainer)[0].layerContainer.split(" ")[0])}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=d.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=d.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${k().tooltip} ${M(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(M("top")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(M("bottom")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(M("left")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(M("right")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",N(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",N(e-this.element.offsetHeight/2))}}var P=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=ie.reactDom.findDOMNode(this),this.tooltip=new L(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},A=n(2),T=n(1);const R={},$={};var j=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();E()(e.url,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=w.createHash("sha256");let o=Buffer.alloc(0);n.body.on("data",e=>{o=Buffer.concat([o,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");$[e.url]=n,O[n]=e.url,_(n,o,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;F||(F=BDModules.get(e=>e.flowerStarContainer)[0]);W||(W=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let o of s.children)"A"===o.tagName?o.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),d.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{r.remote.shell.openExternal(o.href)}})}):["div"].includes(o.tagName.toLowerCase())&&e(o)};e(s.parentNode)}catch(e){console.error(e)}ie.reactDom.render(ie.react.createElement(P,{text:t.type+" "+t.name+" is potentially dangerous."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"}},ie.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},ie.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},ie.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" is certified by Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];console.log(e),E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);console.log(s),Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return R[e]&&!R[e].suspect}};const O={};function _(e,t,n,s,o){if(console.log(`File: ${n} hash: ${e}`),R[e]){const t=R[e];s(t)}else E()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return n.endsWith(".theme.css")?o(e):void function(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);R[e]={suspect:!0,name:O[e].split("/").pop(),type:O[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${R[e].type.toLowerCase()}: ${R[e].name}`),n(R[e])}(e,t,s,o,n);const i=await r.json();i.hash=e,i.filename=n,R[e]=i,s(i)}).catch(console.error)}function I(e,t,n=(e=>{}),s=!1){const r=w.createHash("sha256");let o=Buffer.alloc(0);Object(A.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(O[i]=e,s&&te[i]){let e=te[i];if(!(e.timestampe.flowerStarContainer)[0],W=BDModules.get(e=>e.childContainer)[0];function z(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let H=null,U=null;function q(){H=[w.randomBytes(16).toString("base64"),w.randomBytes(32).toString("base64")]}function G(e){let t=[Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")],n=w.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;U=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(H)))},setInterval(()=>{U()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return q(),void U();H=e}catch(e){q(),U()}});n(5);const V=n(1),J=n(2),Z=n(6).Module;Z.globalPaths.push(V.resolve(n(0).remote.app.getAppPath(),"node_modules"));class Y extends Error{constructor(e){super(e),this.name="MetaError"}}const K=Z._extensions[".js"],X=Z._extensions[".css"]?Z._extensions[".css"]:()=>null,Q=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,ee=/^\\@/;let te={},ne=!1;var se=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ne||(ne=!0,Z._extensions[".js"]=this.getContentRequire("plugin"),Z._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=J.realpathSync(V.resolve(ve.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=J.realpathSync(V.resolve(ve.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof g.getSettingGroup("PluginCertifierHashes"))g.setSettingGroup("PluginCertifierHashes",G("{}"));else try{te=JSON.parse(function(e){try{let t=w.createDecipheriv("aes-256-cbc",Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(g.getSettingGroup("PluginCertifierHashes")))}catch(e){g.setSettingGroup("PluginCertifierHashes",G("{}")),te={}}Object.keys(te).forEach(e=>{let t=te[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete te[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete te[e];t.hash===e?t.result.suspect&&delete te[e]:delete te[e]}),this.saveAddonCache()}saveAddonCache(){g.setSettingGroup("PluginCertifierHashes",G(JSON.stringify(te)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=J.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{J.statSync(V.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?v.unloadPlugin(r):oe.unloadTheme(r)}if(!J.statSync(V.resolve(n,r)).isFile())return;const o=J.statSync(V.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await v.loadPlugin(r):await oe.loadTheme(r)),"change"==e&&(t?await v.reloadPlugin(r):await oe.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new Y("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new Y("META was not found.");const s=d.testJSON(n);if(!s)throw new Y("META could not be parsed.");if(!s.name)throw new Y("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(Q))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(ee,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?K:X;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=V.resolve(o,V.basename(r));if(!J.existsSync(i)||r!==J.realpathSync(i))return Reflect.apply(s,this,arguments);let a=J.readFileSync(r,"utf8");a=d.stripBOM(a);const l=J.statSync(r),c=n.extractMeta(a);if(c.filename=V.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename),!d.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(me["fork-ps-6"]){let t=await new Promise(t=>{I(V.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(te[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(V.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(V.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:{message:"Cannot read property 'replace' of undefined",stack:"Cannot read property 'replace' of undefined"}};if(r.id=d.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete Ce[r.plugin.getName()],Ce[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete we[r.name],we[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=J.readdirSync(s),o=Object.values(t?Ce:we),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&J.statSync(V.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=J.readdirSync(s);for(const t of o){if(!J.statSync(V.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class re{constructor(){window.Lightcord.BetterDiscord.ThemeModule=this}get folder(){return se.themesFolder}}re.prototype.loadThemes=async function(){this.loadThemeData(),ye.splice(0,0,...await se.loadThemes());const e=Object.keys(we);for(let t=0;tsetTimeout(e,10))}for(const e in xe)we[e]||delete xe[e];this.saveThemeData()},re.prototype.enableTheme=function(e,t=!1){xe[e]=!0,this.saveThemeData();const n=we[e];c.addStyle(c.escapeID(n.id),unescape(n.css)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been applied.`)},re.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},re.prototype.disableTheme=function(e,t=!1){xe[e]=!1,this.saveThemeData();const n=we[e];c.removeStyle(c.escapeID(n.id)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been disabled.`)},re.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},re.prototype.toggleTheme=function(e){xe[e]?this.disableTheme(e):this.enableTheme(e)},re.prototype.toggle=function(e,t=!1){return this.toggleTheme(e,t)},re.prototype.loadTheme=async function(e){const t=await se.loadContent(e,"theme");if(t)return me["fork-ps-1"]&&d.showContentErrors({themes:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded. It may not have been loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(we).find(t=>t.filename==e);d.log("ContentManager",`${n.name} v${n.version} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),b.dispatch("theme-loaded",n.name)},re.prototype.unloadTheme=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const n=t.name;xe[n]&&this.disableTheme(n,!0);const s=se.unloadContent(we[n].filename,"theme");if(delete we[n],s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("theme-unloaded",n)},re.prototype.delete=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(se.themesFolder,t.filename);n(2).unlinkSync(s)},re.prototype.reloadTheme=async function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return this.loadTheme(e);const n=t.name,s=await se.reloadContent(we[n].filename,"theme");if(xe[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,s);d.log("ContentManager",`${n} v${we[n].version} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${we[n].version} was reloaded.`,{type:"success"}),b.dispatch("theme-reloaded",n)},re.prototype.reload=function(e){return this.reloadTheme(e)},re.prototype.edit=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const s=n(1).resolve(se.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},re.prototype.updateThemeList=function(){const e=se.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},re.prototype.loadThemeData=function(){const e=g.getSettingGroup("themes");e&&Object.assign(xe,e)},re.prototype.saveThemeData=function(){g.setSettingGroup("themes",xe)};var oe=new re,ie=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};const ae="0.0.306",le=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",ce="0.3.0",de="0.3.4",ue={description:"BBD's changelog.",changes:[{title:"What's New?",items:["**Lightcord** is now using BandagedBD. That means all plugins you were using can be used too !","**Window Transparency** changes were made to more compatible with external window managers and addons like Glasstron.","Initialization sequence has once again been changed slightly to hopefully improve loading times."]},{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`."]}]},he={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"React DevTools":{id:"reactDevTools",info:"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.",implemented:!0,hidden:!0,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},pe={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!0,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,reactDevTools:!1,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,no_window_bound:!1},me={},ge={},fe={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},be=[],ye=[],ve=Object.create(BetterDiscordConfig),we={},Ce={},Ee={},xe={};class Se{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var ke=new class{injectColoredText(){this.cancelColoredText||ie.MessageComponent&&(this.cancelColoredText=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=me["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},De=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!me["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=d.monkeyPatch(ie.TimeFormatter,"calendarFormat",{after:t}),s=d.monkeyPatch(ie.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Me extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},ie.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},ie.react.createElement("path",{d:"M0 0h12v12H0"}),ie.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Be extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return ie.react.createElement("div",{className:"tools-container "+e.toolsContainer},ie.react.createElement("div",{className:"tools "+e.tools},ie.react.createElement("div",{className:t.container},ie.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},ie.react.createElement(Me,null)),ie.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Ne extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Le extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Pe extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Ae extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return ie.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?" selected":""}`,onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class Te extends ie.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return ie.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},ie.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),ie.react.createElement("div",{className:n.flexChild+" bd-server-content"},ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},ie.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),ie.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},ie.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},ie.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},ie.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},ie.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class Re extends ie.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return ie.react.createElement("div",{key:"scrollerwrap",className:n},ie.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}class $e extends ie.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return ie.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},ie.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},ie.react.createElement(Re,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),ie.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},ie.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},ie.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},ie.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class je extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=ie.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=ie.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=ie.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=ie.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){ie.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next=`?from=${o}`,n.state.term&&(s.next+=`&term=${n.state.term}`),n.state.selectedCategory&&(s.next+=`&category=${n.categoryButtons[n.state.selectedCategory]}`),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=` for ${n.state.term}`),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[ie.react.createElement(Te,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),ie.react.createElement(Te,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return ie.react.createElement($e,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:ie.react.createElement(Be,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return ie.react.createElement("div",{className:"sidebar",key:"ps"},ie.react.createElement("div",{className:"ui-tab-bar SIDE"},ie.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),ie.react.createElement(Le,null),this.searchInput,ie.react.createElement(Le,null),ie.react.createElement(Pe,{text:"Categories"}),this.categoryButtons.map((e,t)=>ie.react.createElement(Ae,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),ie.react.createElement(Le,null),this.footer,this.connection))}get searchInput(){return ie.react.createElement("div",{className:"ui-form-item"},ie.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},ie.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(n+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},ie.react.createElement(Ne,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>ie.react.createElement(Te,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&ie.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},ie.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&ie.react.createElement(Ne,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",ie.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},ie.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},ie.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?ie.react.createElement("span",null):ie.react.createElement("span",null,ie.react.createElement(Le,null),ie.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),ie.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},ie.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},ie.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Oe extends ie.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&ie.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=c.query(".publicServersOpen");t.classList.remove("publicServersOpen"),c.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=c.query('[class*="layer-"]');e.classList.add("publicServersOpen"),c.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return ie.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var _e=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return ie.react.createElement(Oe,{rootId:"pubslayerroot",id:"pubslayer"},ie.react.createElement(je,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[BDModules.get(e=>e.layers&&e.layer)[0].layers.split(" ")[0]];const t=c.query(".layers, ."+e);return!!t&&(t.append(c.createElement("
")),!0)}render(){const e=this.root;e?ie.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=c.createElement(`
`);me["bda-gs-1"]||(e.style.display="none");const t=c.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[d.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(c.query("#bd-pub-li"))return;const t=c.query(`div.${e} > div`);c.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=l.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=l.findByDisplayName("Guilds");e||t||d.warn("PublicServer","Can't find GuildList component"),this.guildPatch=d.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,c.query("#bd-pub-li").remove()}};var Ie=new class{start(){c.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){c.removeStyle("VoiceMode")}};const Fe=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var We=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(l.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(l.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!Fe.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(Fe);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(`${e}-`)||(r+=` ${t}`);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${s}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=c.query("."+d.removeDa(s.menu));if(!r){const t=c.query("#app-mount > ."+d.removeDa(n.layerContainer)),o=c.createElement(`
`);r=c.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=c.createElement(`
`),l=c.createElement(`
`);a.append(l),r.append(a);const u=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",u),document.removeEventListener("contextmenu",u),document.removeEventListener("keyup",u))};document.addEventListener("click",u),document.addEventListener("contextmenu",u),document.addEventListener("keyup",u)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=c.createElement('
'),l=c.createElement(``);if(l.append(c.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{ie.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=c.queryAll("div[role=menuitem]."+d.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=c.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}};const He=ie.React;class Ue extends He.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return He.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}}let qe=[];function Ge(e){let t=qe.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(e=>e.name)[0],qe.push(t),t)}class Ve extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return qe.find(e=>e.startsWith("beta-"))||qe.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ge("beta")},"(EXPERIMENTAL)")]),ie.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},ie.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},ie.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),ie.react.createElement(Ue,{onChange:this.onChange,checked:this.props.checked})),ie.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Je extends ie.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?ie.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[ie.react.createElement(Ne,{text:e}),s,t.map(e=>ie.react.createElement(Ve,{id:e.id,key:e.id,data:e,checked:me[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Ze=BDModules.get(e=>e.marginTop60)[0];class Ye extends React.Component{render(){return Ze||(Ze=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Ze.marginTop60})}}class Ke extends ie.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?ie.react.createElement(Ye,{}):null,ie.react.createElement(Je,Object.assign({},e,{onChange:this.props.onChange}))])}}class Xe extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return ie.react.createElement("li",null,ie.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},ie.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},ie.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),ie.react.createElement("span",null)),ie.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class Qe extends ie.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){c.addClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){c.removeClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}render(){const e=this;return ie.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},ie.react.createElement("div",{id:"bd-customcss-innerpane"},ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":c.query("#editor-detached")&&t.props.attach(),ie.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class et extends ie.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=ie.react.createElement(Qe,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||ie.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&ie.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&ie.react.createElement("div",{id:"editor-detached"},ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("h3",null,"Editor Detached"),ie.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&ie.react.createElement("div",null,ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),ie.react.createElement("div",{className:"help-text"},"Press ",ie.react.createElement("code",{className:"inline"},"ctrl"),"+",ie.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?ie.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class tt extends ie.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?ie.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const nt=tt.prototype.render;Object.defineProperty(tt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>nt});class st extends ie.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class rt extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},ie.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),ie.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ot=ie.React;class it extends ot.Component{render(){const e=this.props.size||"24px";return ot.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},ot.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),ot.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const at=ie.React;class lt extends at.Component{render(){const e=this.props.size||"24px";return at.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},at.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),at.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),at.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ct=ie.React,dt=ie.anchorClasses;class ut extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),me["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="scroller-"]');if(!((e,t)=>{const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=c.offset(e),s=c.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;c.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){d.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return ie.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},ie.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},ie.react.createElement(Me,null)),"object"==typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=ct.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=ct.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${dt.anchor} ${dt.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{ie.LayerStack.popLayer(),ie.openDM(n.id)})),s[i]=ct.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),ie.react.createElement("a",n,e)}makeButton(e,t,n){return ct.createElement(P,{color:"black",side:"top",text:e},ct.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),ie.LayerStack.popLayer(),ie.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&ie.react.createElement("div",{className:"bd-card-footer bda-footer"},ie.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),ie.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},ie.react.createElement("div",{className:"bd-addon-header bda-header"},ie.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),ie.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",ct.createElement(it,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",ct.createElement(lt,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",ct.createElement(rt,{className:"bd-icon"}),this.reload),ct.createElement(Ue,{onChange:this.onChange,checked:this.state.checked}))),ie.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},ie.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const ht=ut.prototype.render;Object.defineProperty(ut.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>ht});const pt=ie.React;class mt extends pt.Component{render(){const e=this.props.size||"16px";return pt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},pt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const gt=ie.React;class ft extends gt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=gt.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return gt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>gt.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return gt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},gt.createElement("div",{className:"bd-select-value"},this.selected.label),gt.createElement(mt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const bt=ie.React;class yt extends bt.Component{render(){const e=this.props.size||"16px";return bt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},bt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),bt.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const vt=ie.React;class wt extends vt.Component{render(){return vt.createElement("div",{className:"bd-search-wrapper"},vt.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),vt.createElement(yt,null))}}function Ct(){return(Ct=Object.assign||function(e){for(var t=1;t{xs.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:me["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(bdplugins):Object.values(bdthemes)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin[`get${n}`]?this.getString(e.plugin[`get${n}`]()):e[this.state.sort],r=t.plugin&&t.plugin[`get${n}`]?this.getString(t.plugin[`get${n}`]()):t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{try{d.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{d.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),d.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),d.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1},"Check for Updates"))):null:null}render(){const e=xt.createElement(Et,{color:"black",position:"top",text:"Reload List"},e=>xt.createElement(rt,Ct({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?v.updatePluginList():oe.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return xt.createElement(st,{title:`${this.props.type.toUpperCase()}—${t.length}`},xt.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!me["fork-ps-5"]&&e,xt.createElement("div",{className:"bd-controls bd-addon-controls"},xt.createElement(wt,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),xt.createElement("div",{className:"bd-addon-dropdowns"},xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Sort by:"),xt.createElement(ft,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Order:"),xt.createElement(ft,{options:this.directions,onChange:this.reverse,style:"transparent"})))),xt.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const kt=St.prototype.render;Object.defineProperty(St.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>kt});const Dt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,Mt=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Bt=process.pid;var Nt=new class{constructor(){this.enabled=!1,this.game=ge}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Dt.dispatch({type:Mt.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Bt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(ge||Object.create(fe)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};ie.react,BDModules.get(e=>e.Interval)[0];function Lt(){return(Lt=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];React.Component;function At(){return(At=Object.assign||function(e){for(var t=1;tt=e);$t[e]=n;const s=[];for(let t of Ft.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!me["lightcord-5"])return t([]);jt.push([e,t]),setTimeout(()=>{let e=jt;0!==e.length&&(jt=[],_t(Wt.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof It||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)Ft.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(Ft.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete $t[e],s}};const _t=function(e,t,n){return me["lightcord-5"]?E()(`${Ft.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new It("The current settings blocked the request."))};class It extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const Ft={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:Pt,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:Tt,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},Wt={badges:"/users/badges"},zt=ie.React;let Ht;class Ut extends zt.Component{constructor(e){super(e),this.state={data:g.getSettingGroup("rpc")||fe,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=qt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(ge,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),g.setSettingGroup("rpc",ge),this.preview.forceUpdate(),Nt.set(ge)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Nt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ht||(Ht=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[zt.createElement(Je,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),zt.createElement(Ye,null),zt.createElement(Ne,{text:"RichPresence"}),zt.createElement("div",null,this.optionsComponents),zt.createElement("div",null,zt.createElement(Ye,null),zt.createElement(Ne,{text:"Preview"}),zt.createElement(cn,{settings:this})),zt.createElement("div",{className:e.marginBottom20}),zt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),zt.createElement("button",{style:{opacity:.01},onClick:()=>{r.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=qt.map(e=>{if("text"===e.type)return zt.createElement(Zt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[zt.createElement(Yt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?zt.createElement(Kt,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const qt=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let Gt,Vt,Jt;class Zt extends zt.PureComponent{get modules(){return Gt&&Gt[0]?Gt:Gt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),zt.createElement(ln,null))}}class Yt extends zt.PureComponent{get modules(){return Vt||(Vt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?zt.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),zt.createElement(ln,null))}}class Kt extends zt.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Jt||(Jt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),zt.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),zt.createElement(ln,null))}}let Xt,Qt,en,tn,nn,sn,rn,on,an=[];class ln extends zt.PureComponent{get modules(){return an&&an[0]?an:an=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return zt.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}zt.Component;class cn extends zt.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return zt.createElement("div",{className:"lc-tabWrapper"},zt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},zt.createElement(dn,{preview:this,title:"Full Profile",id:"profile"}),zt.createElement(dn,{preview:this,title:"User Popout",id:"popout"})),zt.createElement(un,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?pn:hn}}class dn extends zt.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",zt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class un extends zt.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Xt=Xt||ie.WebpackModules.find(e=>e.emptyStateImage),Xt?zt.createElement("div",{style:{margin:"20px"}},zt.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},zt.createElement("div",{className:Xt.emptyStateImage,style:{marginTop:"20px"}}),zt.createElement("div",{className:Xt.emptyStateHeader},"An error occured"),zt.createElement("p",{className:Xt.emptyStateSubtext},"Please check the console for more informations. Join our ­",zt.createElement("a",{className:`${ie.anchorClasses.anchor} ${ie.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{ie.joinLC()}},"support server"),"­ for help."))):(d.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class hn extends zt.Component{get modules(){return Qt||(Qt=[ie.WebpackModules.find(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!en){if(!e)throw new Error("Couldn't find the UserPopout component.");const t=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render();tn=t.props;const s=t.type.render(tn,null),r=new s.type(s.props).render();en=r.type}if(!en)throw new Error("Couldn't find the UserPopoutComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});tn=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render().props;const o=new en(Object.assign({},tn,{activity:r})).render().props.children,i=zt.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return zt.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class pn extends zt.Component{get modules(){return nn||(nn=[ie.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!sn){const t=new e.default({user:n}).render();on=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();sn=o.type}if(!sn)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});rn=new on({user:n,close:()=>{}}).render().props;const o=new sn(Object.assign({},rn,{activity:r})).render().props.children;return console.log(o),o.props.style={width:"auto"},zt.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const mn=ie.React;let gn=BDModules.get(e=>e.defaultMarginh5)[0],fn=BDModules.get(e=>e.colorStandard)[0],bn=BDModules.get(e=>e.size32)[0],yn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const vn=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,wn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,Cn=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,En=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class xn extends mn.Component{constructor(e){super(e)}render(){return gn||(gn=BDModules.get(e=>e.defaultMarginh5)[0]),fn||(fn=BDModules.get(e=>e.colorStandard)[0]),bn||(bn=BDModules.get(e=>e.size32)[0]),[mn.createElement(Ne,{text:"Account Infos"}),mn.createElement("div",null,mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Profile"),mn.createElement(Mn,{content:this.getProfileValue(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Statistics"),mn.createElement(Mn,{content:this.getStatistics(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Connected Sessions"),mn.createElement(Mn,{content:this.getSessionValue(),language:"diff"})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=Cn.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=En.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}`}getStatistics(){const e=Object.values(vn.getGuilds()),t=Object.keys(wn.getRelationships()),n=t.filter(e=>wn.isFriend(e)),s=t.filter(e=>wn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let Sn=BDModules.get(e=>e.highlight)[0],kn=BDModules.get(e=>e.markup)[0],Dn=BDModules.get(e=>e.messageContent)[0];class Mn extends mn.Component{render(){return kn||(kn=BDModules.get(e=>e.markup)[0]),Dn||(Dn=BDModules.get(e=>e.messageContent)[0]),yn||(yn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),Sn||(Sn=BDModules.get(e=>e.highlight)[0]),mn.createElement("div",{class:`${kn.markup} ${Dn.messageContent}`},mn.createElement("pre",null,mn.createElement("code",{class:`${yn.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:Sn.highlight(this.props.language,this.props.content).value}})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const Bn=window.Lightcord.DiscordModules.dispatcher,Nn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0],Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const An={};let Tn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var Rn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Bn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,Bn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(Tn?Tn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Nn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(An[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||$n(n,"discord.gg/")||$n(n,"discord.com/invite/")||$n(n,"discordapp.com/invite/"))&&(An[e.message.author.id]=!0,d.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),Ln||(Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),Ln.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),Pn||(Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),Pn.default.closePrivateChannel(t.id,!1)))))}};function $n(e,t){let n=e.embeds;return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!e.fields.map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let jn;const On=d.removeDa;var _n=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,jn=jn||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=On(e.standardSidebarView),n=[];return n.push(`#app-mount .${t} .payment-info .${On(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${On(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${On(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),n.push(`#app-mount .${t} .${On(BDModules.get(e=>e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${On(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n}(),jn||console.error(new Error("Couldn't find selectors to blur personnal informations.")),c.addStyle("blurPrivate",`\n${jn[0]}, ${jn[1]}, ${jn[2]} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${jn[0]}:hover, ${jn[1]}:hover, ${jn[2]}:hover {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,c.removeStyle("blurPrivate"))}},In=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};Rt();let Fn;class Wn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Fn||(Fn=l.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Fn.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Fn.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel."),React.createElement(Ye,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{r.remote.shell.openExternal("https://github.com/lightcord/lightcord/wiki/Apis")},wrapper:!1},"Documentation")),e.map(e=>{let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=t=>{this.setState({states:[Object.assign(s,t)].concat(this.state.states.filter(t=>t.elem!==e))})},s=this.state.states.find(t=>t.elem===e);s||(s={tab:"preview",elem:e,options:{}},this.state.states.push(s));let r=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(s.options).forEach(n=>{e[n]=t.find(e=>e.find(e=>e[n]))[s.options[n]][n]}),e},o=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\n marginTop: "20px", marginBottom: "20px"\n}},\n React.createElement("div", {style: {\n backgroundColor: "var(--background-primary)",\n padding: "30px 30px",\n borderRadius: "8px"\n }, className: "lc-tab-box-shadow" },\n React.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n )\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},i=function(t){const n=e.displayName||e.name;const s=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=r();if("jsx"===t){let e,n=[],r=null;if(Object.keys(i).forEach(e=>{if("children"==e)r=o(i[e],s,t);else{let r=e+"=";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=`{${o(i[e],s,t)}}`,n.push(r)}}),r){return e=`<${s} ${n.join(" ")}>`,`${e}\n ${r}\n${``}`}return e=`<${s} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=o(e,s,t));let n=[];Object.keys(i).forEach(e=>{let r=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=o(i[e],s,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(r)});let r="{";n.length?n.forEach((e,t)=>{let s=t===n.length-1;0===t||(r+=","),r+="\n ",r+=e,s&&(r+="\n}")}):r+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${s}, ${r}, ${a})`}},a=e.help||{},l=a.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},a.info):null,c=a.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},a.warn):null,d=a.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},a.danger):null,u=a.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},a.error):null,h=a.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},a.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),l,h,c,u,d,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(s.options[t]||"0"),onChange:e=>{n({options:Object.assign({},s.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:s.tab,children:"preview"===s.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,r()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:i("jsx")}),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:i("react")}))),onChange:e=>{n({tab:e})}}))})]}get renders(){}}const zn=ie.React;class Hn extends zn.Component{render(){const e=this.props.size||"18px";return zn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},zn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),zn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}class Un extends React.PureComponent{render(){let e=l.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(P,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{d.showChangelogModal(bbdChangelog)}},React.createElement(Hn,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let qn=!1;var Gn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new Se,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Vn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Vn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Vn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Vn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Vn(()=>(new Un).render())),this.sidebar.register("core",Vn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Vn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Vn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Vn(this.renderAddonPane("themes")))}get root(){const e=c.query("#bd-settingspane-container");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e,t]=[BDModules.get(e=>e.layer&&e.animating)[0].layer.split(" ")[0],BDModules.get(e=>e.standardSidebarView)[0]];const n=c.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=c.createElement(`
`);return n.append(s),d.onRemoved(s,()=>{ie.reactDom.unmountComponentAtNode(s)}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}get MsgLogSettings(){return this.getSettings("msglog")}getSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onClick(){}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron"].includes(e)||(me[e]=t),"bda-gs-2"==e&&(t?c.addClass(document.body,"bd-minimal"):c.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?c.addClass(document.body,"bd-minimal-chan"):c.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?_e.addButton():_e.removeButton()),"bda-gs-4"==e&&(t?Ie.start():Ie.stop()),"bda-gs-5"==e&&(t?c.addClass(c.query("#app-mount"),"bda-dark"):c.removeClass(c.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&De.inject24Hour(),"bda-gs-7"==e&&(t?ke.injectColoredText():ke.removeColoredText()),"fork-ps-4"==e&&(t?We.start():We.stop()),"fork-ps-5"==e&&(t?(se.watchContent("plugin"),se.watchContent("theme")):(se.unwatchContent("plugin"),se.unwatchContent("theme"))),"fork-wp-1"==e&&(d.setWindowPreference("transparent",t),t?d.setWindowPreference("backgroundColor",null):d.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?ze.startDebugListener():ze.stopDebugListener()),"fork-dm-1"==e&&(t?ze.startCopySelector():ze.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Nt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Nt.disable();if("lightcord-3"===e&&(t?r.remote.getCurrentWindow().setAlwaysOnTop(!0):r.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?Rn.enable():Rn.disable()),"lightcord-6"===e&&(t?_n.enable():_n.disable()),"lightcord-7"===e&&(t?In.enable():In.disable()),"lightcord-8"===e){let e=r.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("no_window_bound"===e){let e=r.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("enable_glasstron"===e){let e=r.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}this.saveSettings()}async initializeSettings(){me["bda-gs-2"]&&c.addClass(document.body,"bd-minimal"),me["bda-gs-3"]&&c.addClass(document.body,"bd-minimal-chan"),me["bda-gs-1"]&&_e.addButton(),me["bda-gs-4"]&&Ie.start(),me["bda-gs-5"]&&c.addClass(c.query("#app-mount"),"bda-dark"),me["bda-gs-6"]&&De.inject24Hour(),me["bda-gs-7"]&&ke.injectColoredText(),me["fork-ps-4"]&&We.start(),me["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),me["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),me["lightcord-presence-1"]&&Nt.enable(),me["lightcord-3"]&&r.remote.getCurrentWindow().setAlwaysOnTop(!0),me["lightcord-4"]&&Rn.enable(),me["lightcord-6"]&&_n.enable(),me["lightcord-7"]&&In.enable(),me["fork-ps-5"]&&(se.watchContent("plugin"),se.watchContent("theme")),me["bda-gs-8"]&&ze.startDebugListener(),me["fork-dm-1"]&&ze.startCopySelector(),this.saveSettings()}saveSettings(){g.setSettingGroup("settings",me),g.setSettingGroup("rpc",ge)}loadSettings(){Object.assign(me,g.getSettingGroup("settings")),Object.assign(ge,g.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return ie.react.createElement(Ke,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=r.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:ie.react.createElement(Ye),ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=me[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0));let r=ie.react.createElement(Ve,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),ie.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),r.remote.app.relaunch({args:r.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),r.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{qn||(qn=!0,d.showToast("Clearing cache...",{type:"info"}),t(),r.remote.getCurrentWebContents().session.clearCache().then(()=>{d.showToast("Cache is cleared !",{type:"success"}),qn=!1,t()}).catch(e=>{console.error(e),d.showToast("An error occured. Check console for more informations.",{type:"error"}),qn=!1,t()}))},wrapper:!0,disabled:qn},"Clear cache")]}PresenceComponent(){return ie.react.createElement(Ut,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return ie.react.createElement(xn,{key:"lapannel"})}ApiPreviewComponent(){return ie.react.createElement(Wn,{key:"lapipannel"})}customCssComponent(){return ie.react.createElement(et,{key:"csseditor"})}renderAddonPane(e){class t extends ie.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return ie.react.createElement(t,{type:e},ie.react.createElement(St,{type:e}))}}};function Vn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class Jn extends ie.reactComponent{render(){return ie.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},ie.react.createElement("metadata",null),ie.react.createElement("defs",null,ie.react.createElement("filter",{id:"shadow1"},ie.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),ie.react.createElement("filter",{id:"shadow2"},ie.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),ie.react.createElement("filter",{id:"shadow3"},ie.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),ie.react.createElement("g",null,ie.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function Zn(){return(Zn=Object.assign||function(e){for(var t=1;t/g};let Xn=BDModules.get(e=>e.CustomEmoji)[0],Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],es=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],ts=BDModules.get(e=>e.getAutocompleteOptions)[0],ns=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],ss=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],rs=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],os=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var is=new class{constructor(){this.init().catch(e=>d.err("EmojiModule","An error occured",e))}async init(){if(es||(es=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),ts||(ts=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ns||(ns=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),ss||(ss=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),rs||(rs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),os||(os=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),es&&ts&&ns&&ss&&rs&&os){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",ts);const e=ts.getAutocompleteOptions;ts.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return bs(n),n},queryResults:e=>ns.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>as(e,t,r.emojis,n,s,ss.default.Messages.EMOJI_MATCHING,ss.default.Messages.EMOJI,es.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?rs.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{if(!d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=Kn.EmojiRegex.exec(e),r){o=!0,Qn||(Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=Qn.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(Xn||(Xn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(Xn.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=` ${t}`,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function as(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[ls(o,i,e,c),d]}function ls(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(es.default.Title,{title:r},r)}ls.displayName="renderHeader";let cs,ds,us,hs,ps=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],ms=ps&&ps.default.isEmojiDisabled,gs=!1,fs=!1;function bs(e){gs=e,fs||(ps||(ps=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),ps&&(ms||(ms=ps.default.isEmojiDisabled),fs=!0,ps.default.isEmojiDisabled=function(e){return gs?!(!e.surrogates&&!e.diversity):ms.call(this,...arguments)}))}function ys(){}ys.prototype.setConfig=function(e){Object.assign(ve,e)},ys.prototype.setMethods=function(e){cs=e},ys.prototype.init=async function(){if(!Array.prototype.flat)return void d.alert("Not Supported","BetterDiscord v"+de+" does not support this old version ("+le+") of Discord. Please update your Discord installation before proceeding.");if(ve.version
Please download the latest version from GitHub");if(window.ED)return void d.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void d.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");d.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),d.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),ie.initialize(),d.log("Startup","Updating Settings"),Gn.initializeSettings(),d.log("Startup","Loading Addons Cache"),await se.loadAddonCertifierCache(),d.log("Startup","Loading Plugins"),await v.loadPlugins(),d.log("Startup","Loading Themes"),await oe.loadThemes(),c.addStyle("customcss",atob(g.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){me["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),j.start(),d.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),d.log("Startup","Initializing Main Observer"),this.initObserver(),me["fork-ps-1"]&&(d.log("Startup","Collecting Startup Errors"),d.showContentErrors({plugins:be,themes:ye}));const e=g.getBDData("version");if(de>e&&(ue&&this.showChangelogModal(ue),g.setBDData("version",de)),is.start(),d.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),d.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),d.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),d.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),d.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),d.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),d.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),ve.haveInstalledDefault){let e=d.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},ys.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=l.find(e=>"Anchor"==e.displayName);ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=Rt(),o=ie.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},ie.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"})))),i.push(o);let a=ie.React.createElement("div",{style:{display:"block"}},i);return vs(r,e.user,!1),a}}),e.push(d.monkeyPatch(ie.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},ys.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=ie.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=ie.guildClasses.listItem.split(" ")[0],o=ie.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(ve.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},ys.prototype.injectExternals=async function(){await c.addScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"),window.require.original&&(window.require=window.require.original)},ys.prototype.initSettings=function(){if(g.initialize(),g.getSettingGroup("settings")||g.getSettingGroup("rpc")){Gn.loadSettings();for(const e in pe)null==me[e]&&(me[e]=pe[e],Gn.saveSettings())}else g.getSettingGroup("settings")||Object.assign(me,pe),g.getSettingGroup("rpc")||Object.assign(ge,fe),Gn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Gn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},ys.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),us||(us=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),hs||(hs=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(ds)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(us).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},ys.prototype.showChangelogModal=function(e={}){return d.showChangelogModal(e)},ys.prototype.alert=function(e,t){return d.alert(e,t)},ys.prototype.patchSocial=function(){if(this.socialPatch)return;const e=l.find(e=>"TabBar"==e.displayName),t=l.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,o,i]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const a=`(${ve.hash?ve.hash.substring(0,7):ve.branch})`,l=[ie.react.createElement("div",{className:`${s} ${o.size12}`},`Lightcord ${r.remote.getGlobal("BuildInfo").version} `,ie.react.createElement("span",{className:i+" da-versionHash"},`(${(r.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),ie.react.createElement("div",{className:`${s} ${o.size12}`},`BBD ${de} `,ie.react.createElement("span",{className:i+" da-versionHash"},a))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function vs(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=l.find(e=>"Anchor"==e.displayName);Ot.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=ie.React.createElement(P,{color:"black",side:"top",text:e.name},e.href?ie.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},ie.React.createElement(e.component,r)):ie.React.createElement(e.component,r)),a=document.createElement("div");ie.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}ys.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=l.findByProps("wrapper","unreadMentionsBar"),t=l.findByProps("guildsError","selected"),n=l.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=ie.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=d.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},ys.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=l.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=d.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},ys.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=l.findByDisplayName("Guilds"),t=l.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},ys.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];l.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=d.monkeyPatch(e,"default",{after:e=>{if(!me["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=d.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=Rt();n.push(ie.react.createElement("span",{id:"certified-"+s})),j.patch(t,"certified-"+s)}}))},ys.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=l.findByProps("MessageTimestamp"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=d.monkeyPatch(e,"default",{after:e=>{const n=d.getNestedProp(e.methodArguments[0],"message.author"),s=d.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),vs(r,n,!0)}}))},ys.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=l.findByDisplayName("MemberListItem"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=d.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=d.getNestedProp(e.thisObject,"props.user"),s=d.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r})),vs(r,n,!1)}}))},ys.prototype.updateInjector=async function(){const e=g.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),i=n(9),a=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",u=s.resolve(a,"injector.zip"),h=s.resolve(a,"BetterDiscordApp-injector");d.log("InjectorUpdate","Downloading "+c);let p=await new Promise(e=>{null.get({url:c,encoding:null},async(n,s,r)=>{if(n||200!==s.statusCode)return e(!1);await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e)),d.log("InjectorUpdate","Writing "+u),t.writeFile(u,r,t=>e(!t))})});if(!p)return p;await new Promise(e=>t.exists(h,e))&&await new Promise(e=>t.rename(h,`${h}.bak${Math.round(performance.now())}`,e));const m=await new Promise(e=>o.open(u,{lazyEntries:!0},(t,n)=>e(n)));m.on("entry",(function(e){if(e.fileName.endsWith("/"))return m.readEntry();d.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(a,e.fileName);i.sync(s.dirname(n)),m.openReadStream(e,(function(e,s){if(e)return p=!1;s.on("end",(function(){m.readEntry()})),s.pipe(t.createWriteStream(n))}))})),m.readEntry(),await new Promise(e=>m.once("end",e));const f=s.resolve(a,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,f,n)),d.log("InjectorUpdate",`Renaming ${s.basename(h)} to ${l}`),p=await new Promise(n=>t.rename(h,e,e=>n(!e))),p?p?(await new Promise(e=>r(f,e)),await new Promise(e=>t.unlink(u,e)),d.log("InjectorUpdate","Injector Updated!"),p):(d.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(h,e)),await new Promise(n=>t.rename(f,e,n)),p):(d.err("InjectorUpdate","Failed to rename the final directory"),p)};var ws=new ys;const Cs={get React(){return ie.React},get ReactDOM(){return ie.ReactDom},get ReactComponent(){return ie.ReactComponent},get WindowConfigFile(){return d.WindowConfigFile},get settings(){return he},get emotes(){return{}},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return d.getAllWindowPreferences()},getWindowPreference:function(e){return d.getWindowPreference(e)},setWindowPreference:function(e,t){return d.setWindowPreference(e,t)},injectCSS:function(e,t){c.addStyle(c.escapeID(e),t)},clearCSS:function(e){c.removeStyle(c.escapeID(e))},linkJS:function(e,t){c.addScript(c.escapeID(e),t)},unlinkJS:function(e){c.removeScript(c.escapeID(e))},getPlugin:function(e){return Ce.hasOwnProperty(e)?Ce[e].plugin:null},getCore:function(){return d.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),ws},alert:function(e,t){return d.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return d.showConfirmationModal(e,t,n)},showToast:function(e,t={}){d.showToast(e,t)},findModule:function(e){return ie.WebpackModules.find(e)},findAllModules:function(e){return ie.WebpackModules.findAll(e)},findModuleByProps:function(...e){return ie.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return ie.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return ie.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),ie.getInternalInstance(e)},loadData:function(e,t){return g.getPluginData(e,t)}};Cs.getData=Cs.loadData,Cs.saveData=function(e,t,n){return g.setPluginData(e,t,n)},Cs.setData=Cs.saveData,Cs.deleteData=function(e,t){return g.deletePluginData(e,t)},Cs.monkeyPatch=function(e,t,n){return d.monkeyPatch(e,t,n)},Cs.onRemoved=function(e,t){return d.onRemoved(e,t)},Cs.suppressErrors=function(e,t){return d.suppressErrors(e,t)},Cs.testJSON=function(e){return d.testJSON(e)},Cs.isPluginEnabled=function(e){return!!Ee[e]},Cs.isThemeEnabled=function(e){return!!xe[e]},Cs.isSettingEnabled=function(e){return!!me[e]},Cs.enableSetting=function(e){return Gn.onChange(e,!0)},Cs.disableSetting=function(e){return Gn.onChange(e,!1)},Cs.toggleSetting=function(e){return Gn.onChange(e,!me[e])},Cs.getBDData=function(e){return g.getBDData(e)},Cs.setBDData=function(e,t){return g.setBDData(e,t)};const Es=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};Cs.Plugins=Es(Ee,Ce,v),Cs.Themes=Es(xe,we,oe);var xs=Cs;window.Lightcord.BetterDiscord.BdApi=Cs,n.d(t,"default",(function(){return Ds})),function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const Ss=(e,t)=>{Object.defineProperty(window,e,{get:()=>(d.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},ks=Object.keys(s);for(const e of ks)Ss(e,s[e]);Ss("BDV2",ie),Ss("pluginModule",v),Ss("themeModule",oe),Ss("Utils",d),Ss("BDEvents",b),Ss("settingsPanel",Gn),Ss("DataStore",g),Ss("ContentManager",se),Ss("ClassNormalizer",We),window.BdApi=xs,Ss("mainCore",ws);class Ds{constructor(e,t){ws.setConfig(e),ws.setMethods(t)}init(){ws.init()}}}]); \ No newline at end of file +module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("rimraf")},function(e,t){e.exports=require("yauzl")},function(e,t){e.exports=require("mkdirp")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return ae})),n.d(s,"currentDiscordVersion",(function(){return le})),n.d(s,"minSupportedVersion",(function(){return ce})),n.d(s,"bbdVersion",(function(){return de})),n.d(s,"bbdChangelog",(function(){return ue})),n.d(s,"settings",(function(){return he})),n.d(s,"defaultCookie",(function(){return pe})),n.d(s,"settingsCookie",(function(){return me})),n.d(s,"settingsRPC",(function(){return ge})),n.d(s,"defaultRPC",(function(){return fe})),n.d(s,"bdpluginErrors",(function(){return be})),n.d(s,"bdthemeErrors",(function(){return ye})),n.d(s,"bdConfig",(function(){return ve})),n.d(s,"bdthemes",(function(){return we})),n.d(s,"bdplugins",(function(){return Ce})),n.d(s,"pluginCookie",(function(){return Ee})),n.d(s,"themeCookie",(function(){return xe}));var r=n(0);const o=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete o.m.__extra_id__,delete o.c.__extra_id__;const i=e=>{for(const t in o.c)if(o.c.hasOwnProperty(t)){const n=o.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let a={find:i,findAll:e=>{const t=[];for(const n in o.c)if(o.c.hasOwnProperty(n)){const s=o.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>i(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>i(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>i(t=>t.displayName===e)};var l=a;window.Lightcord.BetterDiscord.WebpackModules=a;class c{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(c.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;ne.channelTextArea&&e.titleWrapper)[0].channelTextArea.split(" ")[0]+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const u=e[t];let h=!1;const p=()=>{a||console.log("unpatch",t,"of",c),h=!0};return e[t]=function(){if(h)return u.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:p,originalMethod:u,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=d.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&d.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&d.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&p(),n.returnValue},Object.assign(e[t],u),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=u,e[t].toString=function(){return u.toString()}),p}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar.split(" ")[9]+" + div")||null,t=e?e.querySelector("."+BDModules.get(e=>e.membersWrap)[0].membersWrap):null,n=e?e.querySelector("form"):null,s=e?e.getBoundingClientRect().left:310,r=t?t.getBoundingClientRect().left:0,o=r?r-e.getBoundingClientRect().left:d.screenWidth-s-240,i=n?n.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",s+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",i+"px"),document.querySelector("#app-mount").appendChild(a)}const{type:n="",icon:s=!0,timeout:r=3e3}=t,o=document.createElement("div");o.classList.add("bd-toast"),n&&o.classList.add("toast-"+n),n&&s&&o.classList.add("icon"),o.innerText=e,document.querySelector(".bd-toasts").appendChild(o),setTimeout(()=>{o.classList.add("closing"),setTimeout(()=>{o.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},r)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),c.query("#app-mount").append(o);const i=[];return{close:()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=c.createElement('
');for(const n of e){const e=c.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),d.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&c.removeClass(t,"selected"),c.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[c.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),c.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=l.findByProps("push","update","pop","popWithKey"),n=l.findByProps("fixed","improved"),s=l.findByDisplayName("Text"),r=l.findByProps("Child"),o=l.findByProps("Tags","default"),i=l.find(e=>e.defaultProps&&0==e.defaultProps.selectable),a=l.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&a))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p=`v${de}`,footer:m}=e,g=ie.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,a.parse(d)));for(let e=0;eg("li",null,a.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=l.find(e=>"Anchor"==e.displayName),n=l.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),ie.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=l.findByProps("push","update","pop","popWithKey"),r=l.findByDisplayName("Markdown"),o=l.find(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key());if(!s||!o||!r)return d.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:c=i,confirmText:u="Okay",cancelText:h="Cancel",danger:p=!1,key:m}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?ie.React.createElement(r,null,e):e),s.push(o,{header:e,children:t,red:p,confirmText:u,cancelText:h,onConfirm:a,onCancel:c},m)}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}d.showToast=d.suppressErrors(d.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=d;const u=window.require,h=n(2),p=n(1),m=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var g=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{h.existsSync(this.BDFile)||h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(h.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!h.existsSync(this.settingsFile))return;let t=u(this.settingsFile);h.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[m]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),d.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=p.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=p.resolve(ve.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=p.resolve(ve.dataPath,"bdsettings.json"))}getPluginFile(e){return p.resolve(se.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[m][e]||null}setSettingGroup(e,t){this.data.settings[m][e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:h.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(h.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};const f=n(5);var b=new class extends f{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class y{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return se.pluginsFolder}}y.prototype.loadPlugins=async function(){this.loadPluginData(),be.splice(0,0,...await se.loadPlugins());const e=Object.keys(Ce);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},y.prototype.startPlugin=function(e,t=!1){try{Ce[e].plugin.start(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has started.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be started.`,{type:"error"}),Ee[e]=!1,this.savePluginData(),d.err("Plugins",e+" could not be started.",n)}},y.prototype.stopPlugin=function(e,t=!1){try{Ce[e].plugin.stop(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has stopped.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),d.err("Plugins",Ce[e].plugin.getName()+" could not be stopped.",n)}},y.prototype.enablePlugin=function(e,t=!1){Ee[e]||(Ee[e]=!0,this.savePluginData(),this.startPlugin(e,t))},y.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},y.prototype.disablePlugin=function(e,t=!1){Ee[e]&&(Ee[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},y.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},y.prototype.togglePlugin=function(e){Ee[e]?this.disablePlugin(e):this.enablePlugin(e)},y.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},y.prototype.loadPlugin=async function(e){const t=await se.loadContent(e,"plugin");if(t)return me["fork-ps-1"]&&d.showContentErrors({plugins:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(Ce).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){me["fork-ps-1"]&&d.showContentErrors({plugins:[e]})}d.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),b.dispatch("plugin-loaded",n.getName())},y.prototype.unloadPlugin=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const n=t.plugin.getName();Ee[n]&&this.disablePlugin(n,!0);const s=se.unloadContent(Ce[n].filename,"plugin");if(delete Ce[n],s)return me["fork-ps-1"]&&d.showContentErrors({plugins:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("plugin-unloaded",n)},y.prototype.delete=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(se.pluginsFolder,t.filename);n(2).unlinkSync(s)},y.prototype.reloadPlugin=async function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=Ee[n];s&&this.stopPlugin(n,!0);const r=await se.reloadContent(Ce[n].filename,"plugin");if(r)return me["fork-ps-1"]&&d.showContentErrors({plugins:[r]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,r);Ce[n].plugin.load&&"function"==typeof Ce[n].plugin.load&&Ce[n].plugin.load(),s&&this.startPlugin(n,!0),d.log("ContentManager",`${n} v${Ce[n].plugin.getVersion()} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${Ce[n].plugin.getVersion()} was reloaded.`,{type:"success"}),b.dispatch("plugin-reloaded",n)},y.prototype.reload=function(e){return this.reloadPlugin(e)},y.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const s=n(1).resolve(se.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},y.prototype.updatePluginList=function(){const e=se.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},y.prototype.loadPluginData=function(){const e=g.getSettingGroup("plugins");e&&Object.assign(Ee,e)},y.prototype.savePluginData=function(){g.setSettingGroup("plugins",Ee)},y.prototype.newMessage=function(){const e=Object.keys(Ce);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()})}get container(){return document.querySelector("."+BDModules.get(e=>e.popouts)[0].popouts.split(" ")[0]+" ~ ."+BDModules.get(e=>e.layerContainer)[0].layerContainer.split(" ")[0])}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=d.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=d.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${k().tooltip} ${M(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(M("top")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(M("bottom")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(M("left")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(M("right")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",N(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",N(e-this.element.offsetHeight/2))}}var P=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=ie.reactDom.findDOMNode(this),this.tooltip=new L(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},A=n(2),T=n(1);const R={},$={};var j=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();E()(e.url,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=w.createHash("sha256");let o=Buffer.alloc(0);n.body.on("data",e=>{o=Buffer.concat([o,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");$[e.url]=n,O[n]=e.url,_(n,o,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;F||(F=BDModules.get(e=>e.flowerStarContainer)[0]);W||(W=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let o of s.children)"A"===o.tagName?o.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),d.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{r.remote.shell.openExternal(o.href)}})}):["div"].includes(o.tagName.toLowerCase())&&e(o)};e(s.parentNode)}catch(e){console.error(e)}ie.reactDom.render(ie.react.createElement(P,{text:t.type+" "+t.name+" is potentially dangerous."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"}},ie.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},ie.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},ie.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" is certified by Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];console.log(e),E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);console.log(s),Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return R[e]&&!R[e].suspect}};const O={};function _(e,t,n,s,o){if(console.log(`File: ${n} hash: ${e}`),R[e]){const t=R[e];s(t)}else E()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return n.endsWith(".theme.css")?o(e):void function(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);R[e]={suspect:!0,name:O[e].split("/").pop(),type:O[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${R[e].type.toLowerCase()}: ${R[e].name}`),n(R[e])}(e,t,s,o,n);const i=await r.json();i.hash=e,i.filename=n,R[e]=i,s(i)}).catch(console.error)}function I(e,t,n=(e=>{}),s=!1){const r=w.createHash("sha256");let o=Buffer.alloc(0);Object(A.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(O[i]=e,s&&te[i]){let e=te[i];if(!(e.timestampe.flowerStarContainer)[0],W=BDModules.get(e=>e.childContainer)[0];function z(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let H=null,U=null;function q(){H=[w.randomBytes(16).toString("base64"),w.randomBytes(32).toString("base64")]}function G(e){let t=[Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")],n=w.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;U=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(H)))},setInterval(()=>{U()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return q(),void U();H=e}catch(e){q(),U()}});n(5);const V=n(1),J=n(2),Z=n(6).Module;Z.globalPaths.push(V.resolve(n(0).remote.app.getAppPath(),"node_modules"));class Y extends Error{constructor(e){super(e),this.name="MetaError"}}const K=Z._extensions[".js"],X=Z._extensions[".css"]?Z._extensions[".css"]:()=>null,Q=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,ee=/^\\@/;let te={},ne=!1;var se=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ne||(ne=!0,Z._extensions[".js"]=this.getContentRequire("plugin"),Z._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=J.realpathSync(V.resolve(ve.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=J.realpathSync(V.resolve(ve.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof g.getSettingGroup("PluginCertifierHashes"))g.setSettingGroup("PluginCertifierHashes",G("{}"));else try{te=JSON.parse(function(e){try{let t=w.createDecipheriv("aes-256-cbc",Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(g.getSettingGroup("PluginCertifierHashes")))}catch(e){g.setSettingGroup("PluginCertifierHashes",G("{}")),te={}}Object.keys(te).forEach(e=>{let t=te[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete te[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete te[e];t.hash===e?t.result.suspect&&delete te[e]:delete te[e]}),this.saveAddonCache()}saveAddonCache(){g.setSettingGroup("PluginCertifierHashes",G(JSON.stringify(te)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=J.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{J.statSync(V.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?v.unloadPlugin(r):oe.unloadTheme(r)}if(!J.statSync(V.resolve(n,r)).isFile())return;const o=J.statSync(V.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await v.loadPlugin(r):await oe.loadTheme(r)),"change"==e&&(t?await v.reloadPlugin(r):await oe.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new Y("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new Y("META was not found.");const s=d.testJSON(n);if(!s)throw new Y("META could not be parsed.");if(!s.name)throw new Y("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(Q))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(ee,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?K:X;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=V.resolve(o,V.basename(r));if(!J.existsSync(i)||r!==J.realpathSync(i))return Reflect.apply(s,this,arguments);let a=J.readFileSync(r,"utf8");a=d.stripBOM(a);const l=J.statSync(r),c=n.extractMeta(a);if(c.filename=V.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename),!d.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(me["fork-ps-6"]){let t=await new Promise(t=>{I(V.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(te[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(V.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(V.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:{message:"Cannot read property 'replace' of undefined",stack:"Cannot read property 'replace' of undefined"}};if(r.id=d.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete Ce[r.plugin.getName()],Ce[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete we[r.name],we[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=J.readdirSync(s),o=Object.values(t?Ce:we),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&J.statSync(V.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=J.readdirSync(s);for(const t of o){if(!J.statSync(V.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class re{constructor(){window.Lightcord.BetterDiscord.ThemeModule=this}get folder(){return se.themesFolder}}re.prototype.loadThemes=async function(){this.loadThemeData(),ye.splice(0,0,...await se.loadThemes());const e=Object.keys(we);for(let t=0;tsetTimeout(e,10))}for(const e in xe)we[e]||delete xe[e];this.saveThemeData()},re.prototype.enableTheme=function(e,t=!1){xe[e]=!0,this.saveThemeData();const n=we[e];c.addStyle(c.escapeID(n.id),unescape(n.css)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been applied.`)},re.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},re.prototype.disableTheme=function(e,t=!1){xe[e]=!1,this.saveThemeData();const n=we[e];c.removeStyle(c.escapeID(n.id)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been disabled.`)},re.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},re.prototype.toggleTheme=function(e){xe[e]?this.disableTheme(e):this.enableTheme(e)},re.prototype.toggle=function(e,t=!1){return this.toggleTheme(e,t)},re.prototype.loadTheme=async function(e){const t=await se.loadContent(e,"theme");if(t)return me["fork-ps-1"]&&d.showContentErrors({themes:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded. It may not have been loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(we).find(t=>t.filename==e);d.log("ContentManager",`${n.name} v${n.version} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),b.dispatch("theme-loaded",n.name)},re.prototype.unloadTheme=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const n=t.name;xe[n]&&this.disableTheme(n,!0);const s=se.unloadContent(we[n].filename,"theme");if(delete we[n],s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("theme-unloaded",n)},re.prototype.delete=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(se.themesFolder,t.filename);n(2).unlinkSync(s)},re.prototype.reloadTheme=async function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return this.loadTheme(e);const n=t.name,s=await se.reloadContent(we[n].filename,"theme");if(xe[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,s);d.log("ContentManager",`${n} v${we[n].version} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${we[n].version} was reloaded.`,{type:"success"}),b.dispatch("theme-reloaded",n)},re.prototype.reload=function(e){return this.reloadTheme(e)},re.prototype.edit=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const s=n(1).resolve(se.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},re.prototype.updateThemeList=function(){const e=se.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},re.prototype.loadThemeData=function(){const e=g.getSettingGroup("themes");e&&Object.assign(xe,e)},re.prototype.saveThemeData=function(){g.setSettingGroup("themes",xe)};var oe=new re,ie=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};const ae="0.0.306",le=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",ce="0.3.0",de="0.3.4",ue={description:"BBD's changelog.",changes:[{title:"What's New?",items:["**Lightcord** is now using BandagedBD. That means all plugins you were using can be used too !","**Window Transparency** changes were made to more compatible with external window managers and addons like Glasstron.","Initialization sequence has once again been changed slightly to hopefully improve loading times."]},{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`."]}]},he={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"React DevTools":{id:"reactDevTools",info:"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.",implemented:!0,hidden:!0,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},pe={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!0,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,reactDevTools:!1,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,no_window_bound:!1},me={},ge={},fe={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},be=[],ye=[],ve=Object.create(BetterDiscordConfig),we={},Ce={},Ee={},xe={};class Se{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var ke=new class{injectColoredText(){this.cancelColoredText||ie.MessageComponent&&(this.cancelColoredText=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=me["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},De=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!me["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=d.monkeyPatch(ie.TimeFormatter,"calendarFormat",{after:t}),s=d.monkeyPatch(ie.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Me extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},ie.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},ie.react.createElement("path",{d:"M0 0h12v12H0"}),ie.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Be extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return ie.react.createElement("div",{className:"tools-container "+e.toolsContainer},ie.react.createElement("div",{className:"tools "+e.tools},ie.react.createElement("div",{className:t.container},ie.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},ie.react.createElement(Me,null)),ie.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Ne extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Le extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Pe extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Ae extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return ie.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?" selected":""}`,onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class Te extends ie.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return ie.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},ie.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),ie.react.createElement("div",{className:n.flexChild+" bd-server-content"},ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},ie.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),ie.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},ie.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},ie.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},ie.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},ie.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class Re extends ie.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return ie.react.createElement("div",{key:"scrollerwrap",className:n},ie.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}class $e extends ie.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return ie.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},ie.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},ie.react.createElement(Re,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),ie.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},ie.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},ie.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},ie.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class je extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=ie.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=ie.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=ie.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=ie.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){ie.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next=`?from=${o}`,n.state.term&&(s.next+=`&term=${n.state.term}`),n.state.selectedCategory&&(s.next+=`&category=${n.categoryButtons[n.state.selectedCategory]}`),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=` for ${n.state.term}`),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[ie.react.createElement(Te,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),ie.react.createElement(Te,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return ie.react.createElement($e,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:ie.react.createElement(Be,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return ie.react.createElement("div",{className:"sidebar",key:"ps"},ie.react.createElement("div",{className:"ui-tab-bar SIDE"},ie.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),ie.react.createElement(Le,null),this.searchInput,ie.react.createElement(Le,null),ie.react.createElement(Pe,{text:"Categories"}),this.categoryButtons.map((e,t)=>ie.react.createElement(Ae,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),ie.react.createElement(Le,null),this.footer,this.connection))}get searchInput(){return ie.react.createElement("div",{className:"ui-form-item"},ie.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},ie.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(n+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},ie.react.createElement(Ne,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>ie.react.createElement(Te,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&ie.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},ie.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&ie.react.createElement(Ne,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",ie.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},ie.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},ie.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?ie.react.createElement("span",null):ie.react.createElement("span",null,ie.react.createElement(Le,null),ie.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),ie.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},ie.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},ie.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Oe extends ie.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&ie.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=c.query(".publicServersOpen");t.classList.remove("publicServersOpen"),c.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=c.query('[class*="layer-"]');e.classList.add("publicServersOpen"),c.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return ie.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var _e=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return ie.react.createElement(Oe,{rootId:"pubslayerroot",id:"pubslayer"},ie.react.createElement(je,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[BDModules.get(e=>e.layers&&e.layer)[0].layers.split(" ")[0]];const t=c.query(".layers, ."+e);return!!t&&(t.append(c.createElement("
")),!0)}render(){const e=this.root;e?ie.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=c.createElement(`
`);me["bda-gs-1"]||(e.style.display="none");const t=c.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[d.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(c.query("#bd-pub-li"))return;const t=c.query(`div.${e} > div`);c.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=l.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=l.findByDisplayName("Guilds");e||t||d.warn("PublicServer","Can't find GuildList component"),this.guildPatch=d.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,c.query("#bd-pub-li").remove()}};var Ie=new class{start(){c.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){c.removeStyle("VoiceMode")}};const Fe=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var We=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(l.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(l.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!Fe.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(Fe);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(`${e}-`)||(r+=` ${t}`);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${s}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=c.query("."+d.removeDa(s.menu));if(!r){const t=c.query("#app-mount > ."+d.removeDa(n.layerContainer)),o=c.createElement(`
`);r=c.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=c.createElement(`
`),l=c.createElement(`
`);a.append(l),r.append(a);const u=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",u),document.removeEventListener("contextmenu",u),document.removeEventListener("keyup",u))};document.addEventListener("click",u),document.addEventListener("contextmenu",u),document.addEventListener("keyup",u)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=c.createElement('
'),l=c.createElement(``);if(l.append(c.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{ie.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=c.queryAll("div[role=menuitem]."+d.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=c.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}};const He=ie.React;class Ue extends He.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return He.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}}let qe=[];function Ge(e){let t=qe.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(e=>e.name)[0],qe.push(t),t)}class Ve extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return qe.find(e=>e.startsWith("beta-"))||qe.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ge("beta")},"(EXPERIMENTAL)")]),ie.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},ie.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},ie.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),ie.react.createElement(Ue,{onChange:this.onChange,checked:this.props.checked})),ie.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Je extends ie.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?ie.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[ie.react.createElement(Ne,{text:e}),s,t.map(e=>ie.react.createElement(Ve,{id:e.id,key:e.id,data:e,checked:me[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Ze=BDModules.get(e=>e.marginTop60)[0];class Ye extends React.Component{render(){return Ze||(Ze=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Ze.marginTop60})}}class Ke extends ie.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?ie.react.createElement(Ye,{}):null,ie.react.createElement(Je,Object.assign({},e,{onChange:this.props.onChange}))])}}class Xe extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return ie.react.createElement("li",null,ie.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},ie.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},ie.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),ie.react.createElement("span",null)),ie.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class Qe extends ie.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){c.addClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){c.removeClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}render(){const e=this;return ie.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},ie.react.createElement("div",{id:"bd-customcss-innerpane"},ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":c.query("#editor-detached")&&t.props.attach(),ie.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class et extends ie.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=ie.react.createElement(Qe,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||ie.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&ie.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&ie.react.createElement("div",{id:"editor-detached"},ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("h3",null,"Editor Detached"),ie.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&ie.react.createElement("div",null,ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Xe,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),ie.react.createElement("div",{className:"help-text"},"Press ",ie.react.createElement("code",{className:"inline"},"ctrl"),"+",ie.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Gn.saveSettings()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?ie.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class tt extends ie.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?ie.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const nt=tt.prototype.render;Object.defineProperty(tt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>nt});class st extends ie.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class rt extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},ie.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),ie.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ot=ie.React;class it extends ot.Component{render(){const e=this.props.size||"24px";return ot.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},ot.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),ot.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const at=ie.React;class lt extends at.Component{render(){const e=this.props.size||"24px";return at.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},at.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),at.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),at.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ct=ie.React,dt=ie.anchorClasses;class ut extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),me["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="scroller-"]');if(!((e,t)=>{const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=c.offset(e),s=c.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;c.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){d.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return ie.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},ie.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},ie.react.createElement(Me,null)),"object"==typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=ct.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=ct.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${dt.anchor} ${dt.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{ie.LayerStack.popLayer(),ie.openDM(n.id)})),s[i]=ct.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),ie.react.createElement("a",n,e)}makeButton(e,t,n){return ct.createElement(P,{color:"black",side:"top",text:e},ct.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),ie.LayerStack.popLayer(),ie.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&ie.react.createElement("div",{className:"bd-card-footer bda-footer"},ie.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),ie.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},ie.react.createElement("div",{className:"bd-addon-header bda-header"},ie.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),ie.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",ct.createElement(it,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",ct.createElement(lt,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",ct.createElement(rt,{className:"bd-icon"}),this.reload),ct.createElement(Ue,{onChange:this.onChange,checked:this.state.checked}))),ie.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},ie.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const ht=ut.prototype.render;Object.defineProperty(ut.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>ht});const pt=ie.React;class mt extends pt.Component{render(){const e=this.props.size||"16px";return pt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},pt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const gt=ie.React;class ft extends gt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=gt.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return gt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>gt.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return gt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},gt.createElement("div",{className:"bd-select-value"},this.selected.label),gt.createElement(mt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const bt=ie.React;class yt extends bt.Component{render(){const e=this.props.size||"16px";return bt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},bt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),bt.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const vt=ie.React;class wt extends vt.Component{render(){return vt.createElement("div",{className:"bd-search-wrapper"},vt.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),vt.createElement(yt,null))}}function Ct(){return(Ct=Object.assign||function(e){for(var t=1;t{xs.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:me["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(bdplugins):Object.values(bdthemes)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin[`get${n}`]?this.getString(e.plugin[`get${n}`]()):e[this.state.sort],r=t.plugin&&t.plugin[`get${n}`]?this.getString(t.plugin[`get${n}`]()):t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{try{d.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{d.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),d.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),d.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1},"Check for Updates"))):null:null}render(){const e=xt.createElement(Et,{color:"black",position:"top",text:"Reload List"},e=>xt.createElement(rt,Ct({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?v.updatePluginList():oe.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return xt.createElement(st,{title:`${this.props.type.toUpperCase()}—${t.length}`},xt.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!me["fork-ps-5"]&&e,xt.createElement("div",{className:"bd-controls bd-addon-controls"},xt.createElement(wt,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),xt.createElement("div",{className:"bd-addon-dropdowns"},xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Sort by:"),xt.createElement(ft,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Order:"),xt.createElement(ft,{options:this.directions,onChange:this.reverse,style:"transparent"})))),xt.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const kt=St.prototype.render;Object.defineProperty(St.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>kt});const Dt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,Mt=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Bt=process.pid;var Nt=new class{constructor(){this.enabled=!1,this.game=ge}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Dt.dispatch({type:Mt.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Bt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(ge||Object.create(fe)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};ie.react,BDModules.get(e=>e.Interval)[0];function Lt(){return(Lt=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];React.Component;function At(){return(At=Object.assign||function(e){for(var t=1;tt=e);$t[e]=n;const s=[];for(let t of Ft.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!me["lightcord-5"])return t([]);jt.push([e,t]),setTimeout(()=>{let e=jt;0!==e.length&&(jt=[],_t(Wt.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof It||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)Ft.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(Ft.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete $t[e],s}};const _t=function(e,t,n){return me["lightcord-5"]?E()(`${Ft.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new It("The current settings blocked the request."))};class It extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const Ft={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:Pt,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:Tt,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},Wt={badges:"/users/badges"},zt=ie.React;let Ht;class Ut extends zt.Component{constructor(e){super(e),this.state={data:g.getSettingGroup("rpc")||fe,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=qt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(ge,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),g.setSettingGroup("rpc",ge),this.preview.forceUpdate(),Nt.set(ge)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Nt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ht||(Ht=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[zt.createElement(Je,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),zt.createElement(Ye,null),zt.createElement(Ne,{text:"RichPresence"}),zt.createElement("div",null,this.optionsComponents),zt.createElement("div",null,zt.createElement(Ye,null),zt.createElement(Ne,{text:"Preview"}),zt.createElement(cn,{settings:this})),zt.createElement("div",{className:e.marginBottom20}),zt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),zt.createElement("button",{style:{opacity:.01},onClick:()=>{r.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=qt.map(e=>{if("text"===e.type)return zt.createElement(Zt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[zt.createElement(Yt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?zt.createElement(Kt,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const qt=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let Gt,Vt,Jt;class Zt extends zt.PureComponent{get modules(){return Gt&&Gt[0]?Gt:Gt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),zt.createElement(ln,null))}}class Yt extends zt.PureComponent{get modules(){return Vt||(Vt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=zt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?zt.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),zt.createElement(ln,null))}}class Kt extends zt.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Jt||(Jt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),zt.createElement("div",{className:t.row+" "+n.marginBottom20},zt.createElement("div",{className:`${t.item} ${i.flexChild}`},zt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),zt.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),zt.createElement(ln,null))}}let Xt,Qt,en,tn,nn,sn,rn,on,an=[];class ln extends zt.PureComponent{get modules(){return an&&an[0]?an:an=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return zt.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}zt.Component;class cn extends zt.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return zt.createElement("div",{className:"lc-tabWrapper"},zt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},zt.createElement(dn,{preview:this,title:"Full Profile",id:"profile"}),zt.createElement(dn,{preview:this,title:"User Popout",id:"popout"})),zt.createElement(un,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?pn:hn}}class dn extends zt.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",zt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class un extends zt.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Xt=Xt||ie.WebpackModules.find(e=>e.emptyStateImage),Xt?zt.createElement("div",{style:{margin:"20px"}},zt.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},zt.createElement("div",{className:Xt.emptyStateImage,style:{marginTop:"20px"}}),zt.createElement("div",{className:Xt.emptyStateHeader},"An error occured"),zt.createElement("p",{className:Xt.emptyStateSubtext},"Please check the console for more informations. Join our ­",zt.createElement("a",{className:`${ie.anchorClasses.anchor} ${ie.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{ie.joinLC()}},"support server"),"­ for help."))):(d.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class hn extends zt.Component{get modules(){return Qt||(Qt=[ie.WebpackModules.find(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!en){if(!e)throw new Error("Couldn't find the UserPopout component.");const t=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render();tn=t.props;const s=t.type.render(tn,null),r=new s.type(s.props).render();en=r.type}if(!en)throw new Error("Couldn't find the UserPopoutComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});tn=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render().props;const o=new en(Object.assign({},tn,{activity:r})).render().props.children,i=zt.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return zt.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class pn extends zt.Component{get modules(){return nn||(nn=[ie.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!sn){const t=new e.default({user:n}).render();on=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();sn=o.type}if(!sn)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});rn=new on({user:n,close:()=>{}}).render().props;const o=new sn(Object.assign({},rn,{activity:r})).render().props.children;return o.props.style={width:"auto"},zt.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const mn=ie.React;let gn=BDModules.get(e=>e.defaultMarginh5)[0],fn=BDModules.get(e=>e.colorStandard)[0],bn=BDModules.get(e=>e.size32)[0],yn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const vn=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,wn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,Cn=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,En=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class xn extends mn.Component{constructor(e){super(e)}render(){return gn||(gn=BDModules.get(e=>e.defaultMarginh5)[0]),fn||(fn=BDModules.get(e=>e.colorStandard)[0]),bn||(bn=BDModules.get(e=>e.size32)[0]),[mn.createElement(Ne,{text:"Account Infos"}),mn.createElement("div",null,mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Profile"),mn.createElement(Mn,{content:this.getProfileValue(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Statistics"),mn.createElement(Mn,{content:this.getStatistics(),language:"diff"}),mn.createElement("h5",{className:fn.colorStandard+" "+bn.size14+" "+gn.h5+" "+gn.defaultMarginh5},"Connected Sessions"),mn.createElement(Mn,{content:this.getSessionValue(),language:"diff"})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=Cn.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=En.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}`}getStatistics(){const e=Object.values(vn.getGuilds()),t=Object.keys(wn.getRelationships()),n=t.filter(e=>wn.isFriend(e)),s=t.filter(e=>wn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let Sn=BDModules.get(e=>e.highlight)[0],kn=BDModules.get(e=>e.markup)[0],Dn=BDModules.get(e=>e.messageContent)[0];class Mn extends mn.Component{render(){return kn||(kn=BDModules.get(e=>e.markup)[0]),Dn||(Dn=BDModules.get(e=>e.messageContent)[0]),yn||(yn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),Sn||(Sn=BDModules.get(e=>e.highlight)[0]),mn.createElement("div",{class:`${kn.markup} ${Dn.messageContent}`},mn.createElement("pre",null,mn.createElement("code",{class:`${yn.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:Sn.highlight(this.props.language,this.props.content).value}})),mn.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const Bn=window.Lightcord.DiscordModules.dispatcher,Nn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0],Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const An={};let Tn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var Rn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Bn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,Bn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(Tn?Tn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Nn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(An[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||$n(n,"discord.gg/")||$n(n,"discord.com/invite/")||$n(n,"discordapp.com/invite/"))&&(An[e.message.author.id]=!0,d.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),Ln||(Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),Ln.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),Pn||(Pn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),Pn.default.closePrivateChannel(t.id,!1)))))}};function $n(e,t){let n=e.embeds;return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!e.fields.map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let jn;const On=d.removeDa;var _n=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,jn=jn||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=On(e.standardSidebarView),n=[],s=BDModules.get(e=>e.userSettingsAccount)[0];const r=BDModules.get(e=>"string"==typeof e.children)[0];return n.push(`#app-mount .${t} .payment-info .${On(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${On(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${On(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),s&&(n.push(`#app-mount .${t} .${On(s.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${On(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n.push(`.${On(s.userSettingsSecurity)} .${On(r.children)} > div:nth-child(2)`)),console.log(n),n}(),jn||console.error(new Error("Couldn't find selectors to blur personnal informations.")),c.addStyle("blurPrivate",`\n${jn.join(", ")} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${jn.map(e=>e+":hover").join(", ")} {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,c.removeStyle("blurPrivate"))}},In=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};Rt();let Fn;class Wn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Fn||(Fn=l.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Fn.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Fn.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel."),React.createElement(Ye,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{r.remote.shell.openExternal("https://github.com/lightcord/lightcord/wiki/Apis")},wrapper:!1},"Documentation")),e.map(e=>{let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=t=>{this.setState({states:[Object.assign(s,t)].concat(this.state.states.filter(t=>t.elem!==e))})},s=this.state.states.find(t=>t.elem===e);s||(s={tab:"preview",elem:e,options:{}},this.state.states.push(s));let r=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(s.options).forEach(n=>{e[n]=t.find(e=>e.find(e=>e[n]))[s.options[n]][n]}),e},o=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\n marginTop: "20px", marginBottom: "20px"\n}},\n React.createElement("div", {style: {\n backgroundColor: "var(--background-secondary)",\n padding: "30px 30px",\n borderRadius: "8px"\n }, className: "lc-tab-box-shadow" },\n React.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n )\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},i=function(t){const n=e.displayName||e.name;const s=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=r();if("jsx"===t){let e,n=[],r=null;if(Object.keys(i).forEach(e=>{if("children"==e)r=o(i[e],s,t);else{let r=e+"=";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=`{${o(i[e],s,t)}}`,n.push(r)}}),r){return e=`<${s} ${n.join(" ")}>`,`${e}\n ${r}\n${``}`}return e=`<${s} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=o(e,s,t));let n=[];Object.keys(i).forEach(e=>{let r=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=o(i[e],s,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(r)});let r="{";n.length?n.forEach((e,t)=>{let s=t===n.length-1;0===t||(r+=","),r+="\n ",r+=e,s&&(r+="\n}")}):r+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${s}, ${r}, ${a})`}},a=e.help||{},l=a.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},a.info):null,c=a.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},a.warn):null,d=a.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},a.danger):null,u=a.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},a.error):null,h=a.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},a.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),l,h,c,u,d,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(s.options[t]||"0"),onChange:e=>{n({options:Object.assign({},s.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:s.tab,children:"preview"===s.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,r()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:i("jsx")}),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:i("react")}))),onChange:e=>{n({tab:e})}}))})]}get renders(){}}const zn=ie.React;class Hn extends zn.Component{render(){const e=this.props.size||"18px";return zn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},zn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),zn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}class Un extends React.PureComponent{render(){let e=l.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(P,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{d.showChangelogModal(bbdChangelog)}},React.createElement(Hn,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let qn=!1;var Gn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new Se,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Vn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Vn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Vn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Vn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Vn(()=>(new Un).render())),this.sidebar.register("core",Vn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Vn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Vn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Vn(this.renderAddonPane("themes")))}get root(){const e=c.query("#bd-settingspane-container");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e,t]=[BDModules.get(e=>e.layer&&e.animating)[0].layer.split(" ")[0],BDModules.get(e=>e.standardSidebarView)[0]];const n=c.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=c.createElement(`
`);return n.append(s),d.onRemoved(s,()=>{ie.reactDom.unmountComponentAtNode(s)}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}get MsgLogSettings(){return this.getSettings("msglog")}getSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onClick(){}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron"].includes(e)||(me[e]=t),"bda-gs-2"==e&&(t?c.addClass(document.body,"bd-minimal"):c.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?c.addClass(document.body,"bd-minimal-chan"):c.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?_e.addButton():_e.removeButton()),"bda-gs-4"==e&&(t?Ie.start():Ie.stop()),"bda-gs-5"==e&&(t?c.addClass(c.query("#app-mount"),"bda-dark"):c.removeClass(c.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&De.inject24Hour(),"bda-gs-7"==e&&(t?ke.injectColoredText():ke.removeColoredText()),"fork-ps-4"==e&&(t?We.start():We.stop()),"fork-ps-5"==e&&(t?(se.watchContent("plugin"),se.watchContent("theme")):(se.unwatchContent("plugin"),se.unwatchContent("theme"))),"fork-wp-1"==e&&(d.setWindowPreference("transparent",t),t?d.setWindowPreference("backgroundColor",null):d.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?ze.startDebugListener():ze.stopDebugListener()),"fork-dm-1"==e&&(t?ze.startCopySelector():ze.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Nt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Nt.disable();if("lightcord-3"===e&&(t?r.remote.getCurrentWindow().setAlwaysOnTop(!0):r.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?Rn.enable():Rn.disable()),"lightcord-6"===e&&(t?_n.enable():_n.disable()),"lightcord-7"===e&&(t?In.enable():In.disable()),"lightcord-8"===e){let e=r.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("no_window_bound"===e){let e=r.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("enable_glasstron"===e){let e=r.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}this.saveSettings()}async initializeSettings(){me["bda-gs-2"]&&c.addClass(document.body,"bd-minimal"),me["bda-gs-3"]&&c.addClass(document.body,"bd-minimal-chan"),me["bda-gs-1"]&&_e.addButton(),me["bda-gs-4"]&&Ie.start(),me["bda-gs-5"]&&c.addClass(c.query("#app-mount"),"bda-dark"),me["bda-gs-6"]&&De.inject24Hour(),me["bda-gs-7"]&&ke.injectColoredText(),me["fork-ps-4"]&&We.start(),me["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),me["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),me["lightcord-presence-1"]&&Nt.enable(),me["lightcord-3"]&&r.remote.getCurrentWindow().setAlwaysOnTop(!0),me["lightcord-4"]&&Rn.enable(),me["lightcord-6"]&&_n.enable(),me["lightcord-7"]&&In.enable(),me["fork-ps-5"]&&(se.watchContent("plugin"),se.watchContent("theme")),me["bda-gs-8"]&&ze.startDebugListener(),me["fork-dm-1"]&&ze.startCopySelector(),this.saveSettings()}saveSettings(){g.setSettingGroup("settings",me),g.setSettingGroup("rpc",ge)}loadSettings(){Object.assign(me,g.getSettingGroup("settings")),Object.assign(ge,g.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return ie.react.createElement(Ke,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=r.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:ie.react.createElement(Ye),ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=me[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0));let r=ie.react.createElement(Ve,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),ie.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),r.remote.app.relaunch({args:r.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),r.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{qn||(qn=!0,d.showToast("Clearing cache...",{type:"info"}),t(),r.remote.getCurrentWebContents().session.clearCache().then(()=>{d.showToast("Cache is cleared !",{type:"success"}),qn=!1,t()}).catch(e=>{console.error(e),d.showToast("An error occured. Check console for more informations.",{type:"error"}),qn=!1,t()}))},wrapper:!0,disabled:qn},"Clear cache")]}PresenceComponent(){return ie.react.createElement(Ut,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return ie.react.createElement(xn,{key:"lapannel"})}ApiPreviewComponent(){return ie.react.createElement(Wn,{key:"lapipannel"})}customCssComponent(){return ie.react.createElement(et,{key:"csseditor"})}renderAddonPane(e){class t extends ie.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return ie.react.createElement(t,{type:e},ie.react.createElement(St,{type:e}))}}};function Vn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class Jn extends ie.reactComponent{render(){return ie.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},ie.react.createElement("metadata",null),ie.react.createElement("defs",null,ie.react.createElement("filter",{id:"shadow1"},ie.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),ie.react.createElement("filter",{id:"shadow2"},ie.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),ie.react.createElement("filter",{id:"shadow3"},ie.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),ie.react.createElement("g",null,ie.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function Zn(){return(Zn=Object.assign||function(e){for(var t=1;t/g};let Xn=BDModules.get(e=>e.CustomEmoji)[0],Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],es=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],ts=BDModules.get(e=>e.getAutocompleteOptions)[0],ns=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],ss=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],rs=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],os=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var is=new class{constructor(){this.init().catch(e=>d.err("EmojiModule","An error occured",e))}async init(){if(es||(es=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),ts||(ts=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ns||(ns=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),ss||(ss=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),rs||(rs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),os||(os=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),es&&ts&&ns&&ss&&rs&&os){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",ts);const e=ts.getAutocompleteOptions;ts.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return bs(n),n},queryResults:e=>ns.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>as(e,t,r.emojis,n,s,ss.default.Messages.EMOJI_MATCHING,ss.default.Messages.EMOJI,es.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?rs.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{if(!d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=Kn.EmojiRegex.exec(e),r){o=!0,Qn||(Qn=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=Qn.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(Xn||(Xn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(Xn.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=` ${t}`,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function as(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[ls(o,i,e,c),d]}function ls(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(es.default.Title,{title:r},r)}ls.displayName="renderHeader";let cs,ds,us,hs,ps=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],ms=ps&&ps.default.isEmojiDisabled,gs=!1,fs=!1;function bs(e){gs=e,fs||(ps||(ps=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),ps&&(ms||(ms=ps.default.isEmojiDisabled),fs=!0,ps.default.isEmojiDisabled=function(e){return gs?!(!e.surrogates&&!e.diversity):ms.call(this,...arguments)}))}function ys(){}ys.prototype.setConfig=function(e){Object.assign(ve,e)},ys.prototype.setMethods=function(e){cs=e},ys.prototype.init=async function(){if(!Array.prototype.flat)return void d.alert("Not Supported","BetterDiscord v"+de+" does not support this old version ("+le+") of Discord. Please update your Discord installation before proceeding.");if(ve.version
Please download the latest version from GitHub");if(window.ED)return void d.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void d.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");d.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),d.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),ie.initialize(),d.log("Startup","Updating Settings"),Gn.initializeSettings(),d.log("Startup","Loading Addons Cache"),await se.loadAddonCertifierCache(),d.log("Startup","Loading Plugins"),await v.loadPlugins(),d.log("Startup","Loading Themes"),await oe.loadThemes(),c.addStyle("customcss",atob(g.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){me["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),j.start(),d.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),d.log("Startup","Initializing Main Observer"),this.initObserver(),me["fork-ps-1"]&&(d.log("Startup","Collecting Startup Errors"),d.showContentErrors({plugins:be,themes:ye}));const e=g.getBDData("version");if(de>e&&(ue&&this.showChangelogModal(ue),g.setBDData("version",de)),is.start(),d.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),d.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),d.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),d.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),d.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),d.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),d.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),ve.haveInstalledDefault){let e=d.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},ys.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=l.find(e=>"Anchor"==e.displayName);ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=Rt(),o=ie.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},ie.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"})))),i.push(o);let a=ie.React.createElement("div",{style:{display:"block"}},i);return vs(r,e.user,!1),a}}),e.push(d.monkeyPatch(ie.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},ys.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=ie.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=ie.guildClasses.listItem.split(" ")[0],o=ie.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(ve.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},ys.prototype.injectExternals=async function(){await c.addScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"),window.require.original&&(window.require=window.require.original)},ys.prototype.initSettings=function(){if(g.initialize(),g.getSettingGroup("settings")||g.getSettingGroup("rpc")){Gn.loadSettings();for(const e in pe)null==me[e]&&(me[e]=pe[e],Gn.saveSettings())}else g.getSettingGroup("settings")||Object.assign(me,pe),g.getSettingGroup("rpc")||Object.assign(ge,fe),Gn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Gn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},ys.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),us||(us=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),hs||(hs=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(ds)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(us).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},ys.prototype.showChangelogModal=function(e={}){return d.showChangelogModal(e)},ys.prototype.alert=function(e,t){return d.alert(e,t)},ys.prototype.patchSocial=function(){if(this.socialPatch)return;const e=l.find(e=>"TabBar"==e.displayName),t=l.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,o,i]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const a=`(${ve.hash?ve.hash.substring(0,7):ve.branch})`,l=[ie.react.createElement("div",{className:`${s} ${o.size12}`},`Lightcord ${r.remote.getGlobal("BuildInfo").version} `,ie.react.createElement("span",{className:i+" da-versionHash"},`(${(r.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),ie.react.createElement("div",{className:`${s} ${o.size12}`},`BBD ${de} `,ie.react.createElement("span",{className:i+" da-versionHash"},a))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function vs(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=l.find(e=>"Anchor"==e.displayName);Ot.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=ie.React.createElement(P,{color:"black",side:"top",text:e.name},e.href?ie.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},ie.React.createElement(e.component,r)):ie.React.createElement(e.component,r)),a=document.createElement("div");ie.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}ys.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=l.findByProps("wrapper","unreadMentionsBar"),t=l.findByProps("guildsError","selected"),n=l.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=ie.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=d.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},ys.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=l.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=d.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},ys.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=l.findByDisplayName("Guilds"),t=l.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},ys.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];l.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=d.monkeyPatch(e,"default",{after:e=>{if(!me["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=d.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=Rt();n.push(ie.react.createElement("span",{id:"certified-"+s})),j.patch(t,"certified-"+s)}}))},ys.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=l.findByProps("MessageTimestamp"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=d.monkeyPatch(e,"default",{after:e=>{const n=d.getNestedProp(e.methodArguments[0],"message.author"),s=d.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),vs(r,n,!0)}}))},ys.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=l.findByDisplayName("MemberListItem"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=d.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=d.getNestedProp(e.thisObject,"props.user"),s=d.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Jn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Yn,{size:"16px",className:"bd-logo"}))));const r=Rt();s.push(ie.React.createElement("div",{id:"badges-"+r})),vs(r,n,!1)}}))},ys.prototype.updateInjector=async function(){const e=g.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),i=n(9),a=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",u=s.resolve(a,"injector.zip"),h=s.resolve(a,"BetterDiscordApp-injector");d.log("InjectorUpdate","Downloading "+c);let p=await new Promise(e=>{null.get({url:c,encoding:null},async(n,s,r)=>{if(n||200!==s.statusCode)return e(!1);await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e)),d.log("InjectorUpdate","Writing "+u),t.writeFile(u,r,t=>e(!t))})});if(!p)return p;await new Promise(e=>t.exists(h,e))&&await new Promise(e=>t.rename(h,`${h}.bak${Math.round(performance.now())}`,e));const m=await new Promise(e=>o.open(u,{lazyEntries:!0},(t,n)=>e(n)));m.on("entry",(function(e){if(e.fileName.endsWith("/"))return m.readEntry();d.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(a,e.fileName);i.sync(s.dirname(n)),m.openReadStream(e,(function(e,s){if(e)return p=!1;s.on("end",(function(){m.readEntry()})),s.pipe(t.createWriteStream(n))}))})),m.readEntry(),await new Promise(e=>m.once("end",e));const f=s.resolve(a,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,f,n)),d.log("InjectorUpdate",`Renaming ${s.basename(h)} to ${l}`),p=await new Promise(n=>t.rename(h,e,e=>n(!e))),p?p?(await new Promise(e=>r(f,e)),await new Promise(e=>t.unlink(u,e)),d.log("InjectorUpdate","Injector Updated!"),p):(d.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(h,e)),await new Promise(n=>t.rename(f,e,n)),p):(d.err("InjectorUpdate","Failed to rename the final directory"),p)};var ws=new ys;const Cs={get React(){return ie.React},get ReactDOM(){return ie.ReactDom},get ReactComponent(){return ie.ReactComponent},get WindowConfigFile(){return d.WindowConfigFile},get settings(){return he},get emotes(){return{}},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return d.getAllWindowPreferences()},getWindowPreference:function(e){return d.getWindowPreference(e)},setWindowPreference:function(e,t){return d.setWindowPreference(e,t)},injectCSS:function(e,t){c.addStyle(c.escapeID(e),t)},clearCSS:function(e){c.removeStyle(c.escapeID(e))},linkJS:function(e,t){c.addScript(c.escapeID(e),t)},unlinkJS:function(e){c.removeScript(c.escapeID(e))},getPlugin:function(e){return Ce.hasOwnProperty(e)?Ce[e].plugin:null},getCore:function(){return d.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),ws},alert:function(e,t){return d.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return d.showConfirmationModal(e,t,n)},showToast:function(e,t={}){d.showToast(e,t)},findModule:function(e){return ie.WebpackModules.find(e)},findAllModules:function(e){return ie.WebpackModules.findAll(e)},findModuleByProps:function(...e){return ie.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return ie.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return ie.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),ie.getInternalInstance(e)},loadData:function(e,t){return g.getPluginData(e,t)}};Cs.getData=Cs.loadData,Cs.saveData=function(e,t,n){return g.setPluginData(e,t,n)},Cs.setData=Cs.saveData,Cs.deleteData=function(e,t){return g.deletePluginData(e,t)},Cs.monkeyPatch=function(e,t,n){return d.monkeyPatch(e,t,n)},Cs.onRemoved=function(e,t){return d.onRemoved(e,t)},Cs.suppressErrors=function(e,t){return d.suppressErrors(e,t)},Cs.testJSON=function(e){return d.testJSON(e)},Cs.isPluginEnabled=function(e){return!!Ee[e]},Cs.isThemeEnabled=function(e){return!!xe[e]},Cs.isSettingEnabled=function(e){return!!me[e]},Cs.enableSetting=function(e){return Gn.onChange(e,!0)},Cs.disableSetting=function(e){return Gn.onChange(e,!1)},Cs.toggleSetting=function(e){return Gn.onChange(e,!me[e])},Cs.getBDData=function(e){return g.getBDData(e)},Cs.setBDData=function(e,t){return g.setBDData(e,t)};const Es=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};Cs.Plugins=Es(Ee,Ce,v),Cs.Themes=Es(xe,we,oe);var xs=Cs;window.Lightcord.BetterDiscord.BdApi=Cs,n.d(t,"default",(function(){return Ds})),function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const Ss=(e,t)=>{Object.defineProperty(window,e,{get:()=>(d.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},ks=Object.keys(s);for(const e of ks)Ss(e,s[e]);Ss("BDV2",ie),Ss("pluginModule",v),Ss("themeModule",oe),Ss("Utils",d),Ss("BDEvents",b),Ss("settingsPanel",Gn),Ss("DataStore",g),Ss("ContentManager",se),Ss("ClassNormalizer",We),window.BdApi=xs,Ss("mainCore",ws);class Ds{constructor(e,t){ws.setConfig(e),ws.setMethods(t)}init(){ws.init()}}}]); \ No newline at end of file diff --git a/BetterDiscordApp/src/modules/blurPrivate.js b/BetterDiscordApp/src/modules/blurPrivate.js index f73c215..d95d0ef 100644 --- a/BetterDiscordApp/src/modules/blurPrivate.js +++ b/BetterDiscordApp/src/modules/blurPrivate.js @@ -1,51 +1,57 @@ -/** - * Credits to @hellbound1337 on github for the css - */ - -import DOMTools from "./domtools" -import Utils from "./utils" - -let selectors -const removeDa = Utils.removeDa -function getSelectors(){ - let standardSidebarView = BDModules.get(e => e.standardSidebarView)[0] - if(!standardSidebarView)return null - let defaultClassName = removeDa(standardSidebarView.standardSidebarView) - let selects = [] - selects.push(`#app-mount .${defaultClassName} .payment-info .${removeDa(BDModules.get(e => e.description && typeof e.description === "string" && e.description.includes("formText"))[0].description)}`) - selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.paymentSourceRow)[0].paymentSourceRow)} .${removeDa(BDModules.get(e => e.subText && e.descriptionWrapper)[0].subText)}`) - selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.userSettingsAccount)[0].userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${removeDa(BDModules.get(e => e.viewBody)[0].viewBody)}`) - return selects -} - -export default new class BlurPrivate { - constructor(){ - this.enabled = false - } - - enable(){ - if(this.enabled)return - this.enabled = true - selectors = selectors || getSelectors() - - if(!selectors)console.error(new Error("Couldn't find selectors to blur personnal informations.")) - DOMTools.addStyle("blurPrivate", ` -${selectors[0]}, ${selectors[1]}, ${selectors[2]} { - transition: all 150ms cubic-bezier(.55,.085,.68,.53); - filter: blur(4px); - opacity: .8; -} - -${selectors[0]}:hover, ${selectors[1]}:hover, ${selectors[2]}:hover { - transition: all 150ms cubic-bezier(.55,.09,.68,.53); - filter: none; - opacity: 1; -}`) - } - - disable(){ - if(!this.enabled)return - this.enabled = false - DOMTools.removeStyle("blurPrivate") - } +/** + * Credits to @hellbound1337 on github for the css + */ + +import DOMTools from "./domtools" +import Utils from "./utils" + +let selectors +const removeDa = Utils.removeDa +function getSelectors(){ + let standardSidebarView = BDModules.get(e => e.standardSidebarView)[0] + if(!standardSidebarView)return null + let defaultClassName = removeDa(standardSidebarView.standardSidebarView) + let selects = [] + let userSettingsAccount = BDModules.get(e => e.userSettingsAccount)[0] + const children = BDModules.get(e => typeof e.children === "string")[0] + selects.push(`#app-mount .${defaultClassName} .payment-info .${removeDa(BDModules.get(e => e.description && typeof e.description === "string" && e.description.includes("formText"))[0].description)}`) + selects.push(`#app-mount .${defaultClassName} .${removeDa(BDModules.get(e => e.paymentSourceRow)[0].paymentSourceRow)} .${removeDa(BDModules.get(e => e.subText && e.descriptionWrapper)[0].subText)}`) + if(userSettingsAccount){ + selects.push(`#app-mount .${defaultClassName} .${removeDa(userSettingsAccount.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${removeDa(BDModules.get(e => e.viewBody)[0].viewBody)}`) + selects.push(`.${removeDa(userSettingsAccount.userSettingsSecurity)} .${removeDa(children.children)} > div:nth-child(2)`) + } + console.log(selects) + return selects +} + +export default new class BlurPrivate { + constructor(){ + this.enabled = false + } + + enable(){ + if(this.enabled)return + this.enabled = true + selectors = selectors || getSelectors() + + if(!selectors)console.error(new Error("Couldn't find selectors to blur personnal informations.")) + DOMTools.addStyle("blurPrivate", ` +${selectors.join(", ")} { + transition: all 150ms cubic-bezier(.55,.085,.68,.53); + filter: blur(4px); + opacity: .8; +} + +${selectors.map(e => e+":hover").join(", ")} { + transition: all 150ms cubic-bezier(.55,.09,.68,.53); + filter: none; + opacity: 1; +}`) + } + + disable(){ + if(!this.enabled)return + this.enabled = false + DOMTools.removeStyle("blurPrivate") + } } \ No newline at end of file diff --git a/BetterDiscordApp/src/ui/ApiPreview.jsx b/BetterDiscordApp/src/ui/ApiPreview.jsx index a9bb229..046f3d4 100644 --- a/BetterDiscordApp/src/ui/ApiPreview.jsx +++ b/BetterDiscordApp/src/ui/ApiPreview.jsx @@ -73,7 +73,7 @@ export default class ApiPreview extends React.PureComponent { let renderPreview = () => { return
@@ -84,7 +84,7 @@ export default class ApiPreview extends React.PureComponent { let renderCode = () => { return
@@ -115,7 +115,7 @@ export default class ApiPreview extends React.PureComponent { marginTop: "20px", marginBottom: "20px" }}, React.createElement("div", {style: { - backgroundColor: "var(--background-primary)", + backgroundColor: "var(--background-secondary)", padding: "30px 30px", borderRadius: "8px" }, className: "lc-tab-box-shadow" }, @@ -127,7 +127,7 @@ export default class ApiPreview extends React.PureComponent { marginTop: "20px", marginBottom: "20px" }}>
diff --git a/BetterDiscordApp/src/ui/presenceSettings.jsx b/BetterDiscordApp/src/ui/presenceSettings.jsx index f6698bd..b7c765f 100644 --- a/BetterDiscordApp/src/ui/presenceSettings.jsx +++ b/BetterDiscordApp/src/ui/presenceSettings.jsx @@ -731,7 +731,6 @@ class Profile extends React.Component { activity: activity })).render().props.children // bypass tracking - console.log(profile) profile.props.style = { width: "auto" } diff --git a/build.js b/build.js index 5ccd614..11c7291 100644 --- a/build.js +++ b/build.js @@ -3,7 +3,7 @@ const path = require("path") const terser = require("terser") const util = require("util") -const production = false +const production = true let fs = require("fs") diff --git a/package.json b/package.json index 35fdb37..c38d32a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lightcord", - "version": "0.1.2", + "version": "0.1.3", "description": "A simple - customizable - Discord Client.", "main": "dist/index.js", "scripts": {